[
  {
    "path": ".babelrc",
    "content": "{\n  \"presets\": [\n    [\"@babel/preset-env\"],\n    [\"@babel/preset-typescript\"],\n    [\n      \"@babel/preset-react\",\n      {\n        \"runtime\": \"automatic\" // defaults to classic\n      }\n    ]\n  ]\n}\n"
  },
  {
    "path": ".eslintignore",
    "content": "examples\nexamples/**/*/\nnode_modules/**/*"
  },
  {
    "path": ".eslintrc",
    "content": "{\n    \"extends\": [\"eslint:recommended\", \"plugin:@typescript-eslint/recommended\", \"plugin:react/recommended\", \"plugin:react-hooks/recommended\"],\n    \"parser\": \"@typescript-eslint/parser\",\n    \"plugins\": [\"@typescript-eslint\", \"react\", \"simple-import-sort\", \"unused-imports\", \"prettier\"],\n    \"rules\": {\n        \"no-unused-vars\": \"error\",\n        \"no-var\": \"error\",\n        \"no-unused-expressions\": 0,\n        \"unused-imports/no-unused-imports\": \"error\",\n        \"unused-imports/no-unused-vars\": \"error\",\n        \"no-tabs\": \"error\",\n        \"indent\": \"off\",\n        \"space-before-function-paren\": \"off\",\n        \"@typescript-eslint/indent\": [\"error\", 4],\n        \"@typescript-eslint/explicit-function-return-type\": \"off\",\n        \"simple-import-sort/imports\": \"error\",\n        \"simple-import-sort/exports\": \"error\",\n        \"import/prefer-default-export\": \"off\",\n        \"react/react-in-jsx-scope\": \"off\",\n        \"prettier/prettier\": \"error\"\n    },\n    \"globals\": {\n        \"browser\": false,\n        \"window\": true,\n        \"document\": true\n    },\n    \"settings\": {\n        \"react\": {\n            \"version\": \"18\"\n        }\n    }\n}\n"
  },
  {
    "path": ".gitignore",
    "content": "# See http://help.github.com/ignore-files/ for more about ignoring files.\n\n# Mac OS X\n.DS_Store\n._.*\n._*\n\n# Ignore local editor\n.project\n.settings\n.idea\n*.swp\ntags\nnbproject/*\n.vscode\n\n# Windows\nThumbs.db\n\n# Debugging related\nnpm-debug.log\n\n# Dependency packages files\nnode_modules/\n\n# Output\ndist/\n*.log\n\n# stats\nstats.json\n\nyarn.lock\npackage-lock.json"
  },
  {
    "path": ".prettierrc",
    "content": "{\n    \"singleQuote\": true,\n    \"semi\": false,\n    \"trailingComma\": \"none\",\n    \"tabWidth\": 4,\n    \"useTabs\": false,\n    \"printWidth\": 160,\n    \"arrowParens\": \"avoid\",\n    \"endOfLine\": \"lf\"\n}\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "README.md",
    "content": "⚠️ **Part of the InkLayer ecosystem**\n\nThis repository contains the low-level reference implementation used by InkLayer.\n\n👉 **Main entry point:** https://github.com/Laomai-codefee/inklayer\n\n---\n<div>\n    <h1 align=\"center\"><code>pdf.js Annotation Extension</code> ⚡️ </h1>\n    <p align=\"center\">\n        <strong>An annotation extension based on the PDF.js viewer<br/> Supporting the editing of existing PDF file annotations, posting comments, replying, submitting annotation data, and loading for further editing.</strong>\n    </p>\n    <p align=\"center\">\n        <strong>🚀 Now supports exporting annotations to PDF files.\n</strong>\n    </p>\n</div>\n\n---\n## 📢 React Version Available\n\n### A React-based implementation of this project is now available:\n👉 [pdfjs-annotation-extension-for-react](https://github.com/Laomai-codefee/pdfjs-annotation-extension-for-react/)\n\n1. The new project is built on the same core ideas as this repository.\nIt provides an extensible annotation system powered by PDF.js and is fully refactored into a modern React component architecture.\n\n2. If you are building applications with React and need an extensible PDF annotation solution, we highly recommend checking out the new React version.\n\n3. This repository will remain as a reference for the original implementation and design concepts, while ongoing development and new features will primarily focus on the React version.\n\n\n---\n\nEnglish | [简体中文](./README_CN.md)\n\n## 🧭 Online Demo\n\nSite： [https://laomai-codefee.github.io/pdfjs-annotation-extension/](https://laomai-codefee.github.io/pdfjs-annotation-extension/)\n\n--- \n\n## 📣 Recent Updates  \n\n🔥🔥 **2025.6.27 v2.2.0 Version**, main updates include:\n\n1. **New Annotation Types** – Added arrow and cloud line annotations  \n2. **Signature** – Added support for creating signatures via text input or image upload; text input supports font selection  \n3. **Stamping** – Added default stamps, custom stamp creation, and image-based stamp uploads; custom stamps support settings for text color, style, font, background, and border; timestamp supports username, date, and custom text  \n4. **Annotation Status** – Added annotation status options: Accepted, Rejected, Canceled, Completed, Closed, and None  \n5. **Annotation Export** – Added Excel export functionality for annotations  \n6. **Connecting Lines** – Added connectors between annotations and shapes  \n7. **Annotation Styles** – Added style settings for each annotation type, supporting color, stroke width, and opacity adjustments  \n8. **Bug Fixes and Interaction Improvements** – Various bug fixes and optimizations to enhance user experience  \n\n---\n* **2025.5.19  Version 2.1.1** – Key features include:  \n  1. **Sidebar Collapse Support** – Added `DEFAULT_SIDE_BAR_OPEN` to control whether the sidebar is shown. It is visible by default.\n  2. **Annotation Filtering Support** – Added annotation filtering functionality, allowing filters by author and annotation type.\n  3. **Improved Annotation Highlighting Logic** – Annotations are now highlighted even when not selected, improving the overall user experience.\n\n* **2025.5.16  Version 2.1.0** – Key features include:  \n  1. **Added PDF export functionality**: Export drawn annotations to a new PDF file. Supported annotation types: TEXT, HIGHLIGHT, UNDERLINE, STRIKEOUT, SQUARE, CIRCLE, INK, POLYLINE, FREETEXT, STAMP.  \n  2. **Signatures and stamps**: Introduced the `ALLOW_REPLY_ON_STAMP` parameter to control whether comments/replies are allowed on stamps (disabled by default).  \n  3. **New Note annotation tool**: Corresponds to the PDF Text annotation type.  \n\n--- \n\n## 1. Background\n\n[PDF.js](https://mozilla.github.io/pdf.js/) provides a [Viewer](https://mozilla.github.io/pdf.js/web/viewer.html) for online PDF preview and includes some basic annotation functionalities (FREETEXT, HIGHLIGHT, STAMP, INK).\n\nIn actual use cases, there is often a need for various annotation tools, leading to the idea of extending the viewer to add more annotation capabilities.\n\nThis project is based on `konva`, `react`, `antd`, and `web-highlighter`. It introduces additional annotation types by extending the existing `pdf.js` viewer without modifying its original code. Supports editing existing annotations, submitting annotation data, and loading for further editing, as shown below:\n\n<div align=\"center\">\n  <img src=\"/examples/demo.gif\" alt=\"demo\" />\n</div>\n\n#### Mobile Version\n\n<div align=\"center\">\n  <img src=\"/examples/mobile.gif\" alt=\"mobile demo\" />\n</div>\n\nFor PDF Viewer users, this is a highly useful feature. If your requirement is simple annotation, the current features in the project should suffice. For more specific needs or requirements, you can further develop based on this extension.\n\n## 2. Annotation Tools (Mobile Supported 📱)\n\n1. Rectangle\n2. Circle\n3. Free Hand (grouped if drawn within a short time)\n4. Free Highlight (with auto-correction)\n5. Arrow\n6. Cloud\n7. FreeText \n8. Signature\n9. Stamp (upload custom images)\n10. Text Highlight\n11. Text Strikeout\n12. Text Underline\n13. Text\n14. Annotation Selection (use double-click to delete the selected object)\n\n## 3. Editing existing annotations in PDF files\n\n<strong style=\"color:red\">🚀 Now supports exporting annotations to PDF files.</strong>\n\n1. Square\n2. Circle\n3. Ink\n4. FreeText\n5. Line\n6. Polygon\n7. PolyLine\n8. Text\n9. Highlight\n10. Underline\n11. StrikeOut\n\n## 4. Quick Start\n\n### Installation\n\n```bash\n $ npm install or yarn\n```\n\n### Run in Development Mode\n\n```bash\n  $ npm run dev or yarn dev\n```\n\n### Run PDF.js Viewer\n\nA DEMO example is provided in the repository (located in the examples folder). Navigate to ./examples/pdfjs-4.3.136-dist:\n\n```bash\n    $ miniserve or use another static server\n```\n\nOpen the URL: http://localhost:8080/web/viewer.html to see the result.\n\n## 5. Usage\n\n### URL Parameters\n\n```bash\n  ae_username= Name of the annotator, displayed as the annotator's name when adding annotations\n```\n```bash\n  ae_get_url= URL for annotation data, used to load previously saved annotation data. Example: ./examples/pdfjs-4.3.136-dist/pdfjs-annotation-extension-testdata.json\n```\n```bash\n  ae_post_url= URL for submitting annotation data\n```\n\n```bash\n  ae_default_editor_active = true | false  # Whether to activate the editor by default\n```\n\n```bash\n  ae_default_sidebar_open = true | false   # Whether to open the sidebar by default\n```\n\nUsage: http://localhost:8888/web/viewer.html?#ae_username=laomai&ae_get_url=http://localhost:8888/pdfjs-annotation-extension-testdata.json&ae_post_url=http://localhost:8888/save&ae_default_editor_active=true&ae_default_sidebar_open=true\n\n### Default Configuration\n```\n src/const/default_options.ts\n ```\nTo load PDF file annotations, modify:\n ```\n  LOAD_PDF_ANNOTATION: true, // Whether to load existing PDF annotations\n ```\n ***Note：If you need to edit existing PDF annotations, you must set annotationMode in PDF.js to 0, so that PDF.js will not render the annotations***\n ```\n  pdfjs-dist/web/viewer.mjs\n ```\n ```\n  annotationMode: {\n    value: 0,  // Change to 0\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  }\n ```\n\n### Modify Output Directory\n\n   The configuration can be found in the /configuration/environment.js file. By default, it points to examples/pdfjs-4.3.136-dist/web/pdfjs-annotation-extension. You can modify it to match your local pdfjs-dist directory to facilitate development:\n\n```bash\n    output: path.resolve(__dirname, '../examples/pdfjs-4.3.136-dist/web/pdfjs-annotation-extension'),\n```\n\n### Build\n\n```bash\n    $ npm run build or yarn build\n```\n\nAlternatively, you can directly download the release version.\n\n### Integrating with PDF.js\n\nModify the pdfjs-dist/web/viewer.html file by adding a single line to include the generated extension file:\n\n```html\n    <script src=\"../build/pdf.mjs\" type=\"module\"></script>\n    <link rel=\"stylesheet\" href=\"viewer.css\">\n    <script src=\"viewer.mjs\" type=\"module\"></script>\n    <!-- Insert the generated annotation extension file -->\n    <script src=\"./pdfjs-annotation-extension/pdfjs-annotation-extension.js\" type=\"module\"></script>\n    <!-- End -->\n    </head>\n```\n\n## 6. How It Works\n\nBy leveraging the pdfjs EventBus, we capture page events and dynamically insert a Konva drawing layer. Shapes are drawn on the Konva layer. \nAlthough there are more annotation types, they are essentially mapped to the ones supported by pdfjs with some additional custom transformations.\n\nFor details about pdfjs annotation types, please refer to the documentation here 👇\n https://github.com/mozilla/pdf.js/wiki/Frequently-Asked-Questions#faq-annotations\n\n## 7. Compatibility\n\n Currently, this extension has been tested only with pdfjs-4.3.136-dist.\n **Note that it does not support drawing on rotated pages.**\n"
  },
  {
    "path": "README_CN.md",
    "content": "⚠️ **InkLayer 生态项目**\n\n本仓库为 InkLayer 的底层参考实现，包含核心批注模型、坐标体系及导出逻辑。\n\n👉 **主入口仓库：** https://github.com/Laomai-codefee/inklayer\n\n---\n\n<div>\n    <h1 align=\"center\"><code>pdf.js Annotation Extension</code> ⚡️ </h1>\n    <p align=\"center\">\n        <strong>基于pdf.js viewer的批注扩展，支持PDF文件原有批注编辑、发表评论、回复、批注数据的提交及载入编辑</strong>\n      </p>\n    <p align=\"center\">\n        <strong>🚀 现已支持批注导出至PDF文件</strong>\n    </p>\n</div>\n\n---\n\n## 📢 React 版本已发布\n\n### 本项目已正式推出 React 版本实现：\n\n👉 [pdfjs-annotation-extension-for-react](https://github.com/Laomai-codefee/pdfjs-annotation-extension-for-react/)\n\n1. 新项目在继承本仓库核心设计思想（基于 PDF.js 的可扩展批注体系）的基础上，进行了完整的React组件化重构，更适合在现代前端项目中直接集成使用。\n2. 如果你正在使用 React，或希望在 React 应用中构建PDF批注能力，强烈建议关注并使用新的 React 版本项目\n3. 本仓库将继续作为 底层思路与早期实现的参考，而新的功能与演进将主要在 React 版本中进行。\n\n---\n\n[English](./README.md) ｜ 简体中文\n\n## 🧭 演示\n\n地址： [https://laomai-codefee.github.io/pdfjs-annotation-extension/](https://laomai-codefee.github.io/pdfjs-annotation-extension/)\n打开速度较慢，请耐性等待...\n\n---\n\n## 📣 近期更新\n\n* 🔥🔥**2025.6.27  v2.2.0 版本**，主要包含如下内容\n\n1. **增加新的批注类型** - 增加箭头、云线\n2. **签名** - 增加输入、上传图片形成签名，输入文字支持字体选择\n3. **盖章** - 增加默认印章，自定义印章及上传图片作为印章，自定义印章支持文字颜色、样式、字体、背景、边框设置，时间戳支持用户名、日期及自定义文字\n4. **批注状态** - 增加批注状态设置，接受、拒绝、取消、完成、关闭、无\n5. **批注导出** - 增加批注 Excel 导出功能\n6. **批注样式** - 各批注样式设置，支持颜色、笔触宽度、透明度\n7. **连线** - 增加批注与图形间的连线\n8. 一些 BUG 修正及交互优化\n\n---\n\n* **2025.5.19  v2.1.1 版本**，主要包含如下内容\n\n1. **支持侧边栏折叠** - 增加 DEFAULT_SIDE_BAR_OPEN 控制侧边栏是否隐藏，默认显示\n2. **支持批注过滤** - 增加批注过滤功能，可通过作者、批注类型进行过滤\n3. **优化批注加亮逻辑** - 批注即使不选中也会加亮，改善体验\n\n* **2025.5.16  v2.1.0 版本**，主要包含如下内容\n\n1. **支持导出 PDF 功能** - 将所绘制批注导出到新的 PDF 文件，支持批注类型 TEXT、HIGHLIGHT、UNDERLINE、STRIKEOUT、SQUARE、CIRCLE、INK、POLYLINE、FREETEXT、STAMP\n2. **签名、盖章** - 增加 ALLOW_REPLY_ON_STAMP 控制是否允许评论、回复，默认关闭\n3. **新增 Note 批注工具** - 对应 PDF Text 类型批注\n\n---\n\n## 1、背景\n\n[PDF.js](https://mozilla.github.io/pdf.js/) 已经提供了 [Viewer](https://mozilla.github.io/pdf.js/web/viewer.html) 用于PDF文件的在线预览，并且提供了一部分的批注功能（FREETEXT、HIGHLIGHT、STAMP、INK）。\n\n在实际使用中，需要各种形式的批注工具，逐产生在viewer上扩展做额外批注的想法。\n\n项目基于konva、react、antd、web-highlighter，使用外部引入的方式，不影响 pdfjs viewer 原有代码，增加并扩展了一部分批注类型，支持pdf文件中原有批注的编辑、新增批注数据的提交及加载，效果见下图：\n\n<div align=\"center\">\n  <img src=\"/examples/demo.gif\" alt=\"demo\" />\n</div>\n\n#### 移动端\n\n<div align=\"center\">\n  <img src=\"/examples/mobile.gif\" alt=\"demo\" />\n</div>\n\n对PDF Viewer来说，这是一个很有用的功能，如果需求只是简单的批注，项目中的现有功能已经可以直接满足。\n如果有更特殊的需求或功能要求，可以在此基础上进一步开发。\n\n## 2、批注工具，已支持移动端 📱\n\n1. 矩形\n2. 圆形\n3. 自由绘制，一段时间内的绘制会被归为一组\n4. 自由高亮，有自动修正\n5. 箭头\n6. 云线\n7. 文字\n8. 签名\n9. 盖章\n10. 文字高亮\n11. 文字删除线\n12. 文字下划线\n13. 注解\n14. 选择\n\n## 3、PDF 文件原有批注编辑，支持类型如下\n\n<strong style=\"color:red\">🚀 现已支持批注导出至PDF文件</strong>\n\n1. 矩形 Square\n2. 圆形 Circle\n3. 自由绘制 Ink\n4. 文字 FreeText\n5. 线段 Line\n6. 多边形 Polygon\n7. 折线 PolyLine\n8. 备注 Text\n9. 高亮 Highlight\n10. 下划线 Underline\n11. 删除线 StrikeOut\n12. 注解 Note\n\n## 4、快速开始\n\n### 初始化\n\n```bash\n$ npm install 或 yarn\n```\n\n### 运行开发模式\n\n```bash\n$ npm run dev 或 yarn dev\n```\n\n### 查看效果pdfjs viewer 效果\n\n仓库自带了一个 DEMO 示例（在examples文件夹中, 进入 ./examples/pdfjs-4.3.136-dist 目录\n\n```bash\n$ miniserve 或其他静态服务\n```\n\n打开地址：http://localhost:8080/web/viewer.html 即可看到效果\n\n## 5、使用方式\n\n### 地址栏参数\n\n```bash\nae_username= 批注人姓名，添加批注时显示的批注人姓名\n```\n\n```bash\nae_get_url= 批注数据地址，通过此地址加载已保存的批注数据 示例 ./examples/pdfjs-4.3.136-dist/pdfjs-annotation-extension-testdata.json\n```\n\n```bash\nae_post_url= 批注数据提交地址\n```\n\n```bash\nae_default_editor_active= true | false 是否激活编辑器\n```\n\n```bash\nae_default_sidebar_open= true | false 是否打开侧边栏\n```\n\n使用方式 ： http://localhost:8888/web/viewer.html?#ae_username=老麦&ae_get_url=http://localhost:8888/pdfjs-annotation-extension-testdata.json&ae_post_url=http://localhost:8888/save&ae_default_editor_active=true&ae_default_sidebar_open=true\n\n### 默认配置修改\n\n```\nsrc/const/default_options.ts\n```\n\n加载PDF文件批注，需修改：\n\n```\nLOAD_PDF_ANNOTATION: true, // 是否加载 pdf 原有批注\n```\n\n***注意： 如果需要编辑 pdf 原有批注，需将 pdfjs 中的 annotationMode 改为 0，这样 pdfjs 才不会渲染批注***\n\n```\npdfjs-dist/web/viewer.mjs\n```\n\n```\nannotationMode: {\n   value: 0,  //这里改为 0\n   kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n },\n```\n\n### 修改生成文件地址\n\n配置在文件：/configuration/environment.js 中\n默认为 examples/pdfjs-4.3.136-dist/web/pdfjs-annotation-extension\n您可将它修改为您pdfjs dist地址，以方便开发\n\n```bash\noutput: path.resolve(__dirname, '../examples/pdfjs-4.3.136-dist/web/pdfjs-annotation-extension'),\n```\n\n### 打包\n\n```bash\n$ npm run build 或 yarn build\n```\n\n也可以直接下载发布版本\n\n### pdfjs dist 引入扩展\n\n修改文件：pdfjs-dist/web/viewer.html，只需增加一行代码，引入生成的文件即可\n\n```html\n<script src=\"../build/pdf.mjs\" type=\"module\"></script>\n    <link rel=\"stylesheet\" href=\"viewer.css\">\n    <script src=\"viewer.mjs\" type=\"module\"></script>\n    <!--这里引入生成的文件-->\n    <script src=\"./pdfjs-annotation-extension/pdfjs-annotation-extension.js\" type=\"module\"></script>\n    <!--这里引入生成的文件-->\n  </head>\n```\n\n## 6、工作原理\n\n利用pdfjs EventBus捕获页面事件，动态插入Konva绘图层，在Konva上绘制图形\n批注类型虽然看上去多了，但实际支持与pdfjs一致，只是做了一些特殊的转换。\n关于 pdfjs 批注类型的说明请看这里 👇\nhttps://github.com/mozilla/pdf.js/wiki/Frequently-Asked-Questions#faq-annotations\n\n## 7、兼容性\n\n目前仅测试 pdfjs-4.3.136-dist， 不支持页面旋转后的绘制\n\n"
  },
  {
    "path": "configuration/environment.js",
    "content": "const path = require('path');\nconst { output } = require('../webpack.config');\n\nmodule.exports = {\n  paths: {\n    /* Path to source files directory */\n    source: path.resolve(__dirname, '../src/'),\n    /* Path to built files directory */\n    output: path.resolve(__dirname, '../examples/pdfjs-4.3.136-dist/web/pdfjs-annotation-extension'),\n  }\n};\n"
  },
  {
    "path": "configuration/webpack.dev.config.js",
    "content": "/* eslint-disable import/no-extraneous-dependencies */\nconst { merge } = require('webpack-merge');\n\nconst webpackConfiguration = require('../webpack.config');\nconst environment = require('./environment');\n\nmodule.exports = merge(webpackConfiguration, {\n  mode: 'development',\n\n  /* Manage source maps generation process */\n  devtool: 'eval-source-map',\n\n  /* File watcher options */\n  watchOptions: {\n    aggregateTimeout: 100,\n    poll: 100,\n    ignored: /node_modules/,\n  },\n\n  /* Additional plugins configuration */\n  plugins: [],\n});\n"
  },
  {
    "path": "configuration/webpack.prod.config.js",
    "content": "/* eslint-disable import/no-extraneous-dependencies */\nconst { merge } = require('webpack-merge');\nconst CssMinimizerPlugin = require('css-minimizer-webpack-plugin');\nconst TerserPlugin = require('terser-webpack-plugin');\nconst webpack = require('webpack');\n\nconst webpackConfiguration = require('../webpack.config');\n\nmodule.exports = merge(webpackConfiguration, {\n  mode: 'production',\n\n  /* Disable source maps for production */\n  devtool: false,\n\n  /* Optimization configuration */\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        parallel: true, // Enable multi-process parallel running\n        terserOptions: {\n          format: {\n            comments: false, // Remove all comments from the output\n          },\n        },\n        extractComments: false, // Ensure no separate license files are generated\n      }),\n      new CssMinimizerPlugin(),\n    ],\n  },\n\n  /* Performance thresholds configuration */\n  performance: {\n    hints: false, // Disable performance hints\n    maxEntrypointSize: 1024000, // Set a higher limit to avoid warnings (1 MB)\n    maxAssetSize: 1024000, // Set a higher limit to avoid warnings (1 MB)\n  },\n\n  /* Additional plugins configuration */\n  plugins: [\n    // Use the BannerPlugin to ensure no license comments are included in the output\n    new webpack.BannerPlugin({\n      banner: '', // Insert an empty banner\n      raw: true, // Insert the banner as a raw string\n    }),\n  ],\n});\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/build/pdf.mjs",
    "content": "/**\n * @licstart The following is the entire license notice for the\n * JavaScript code in this page\n *\n * Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * @licend The above is the entire license notice for the\n * JavaScript code in this page\n */\n\n/******/ // The require scope\n/******/ var __webpack_require__ = {};\n/******/ \n/************************************************************************/\n/******/ /* webpack/runtime/define property getters */\n/******/ (() => {\n/******/ \t// define getter functions for harmony exports\n/******/ \t__webpack_require__.d = (exports, definition) => {\n/******/ \t\tfor(var key in definition) {\n/******/ \t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t};\n/******/ })();\n/******/ \n/******/ /* webpack/runtime/hasOwnProperty shorthand */\n/******/ (() => {\n/******/ \t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ })();\n/******/ \n/************************************************************************/\nvar __webpack_exports__ = globalThis.pdfjsLib = {};\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  AbortException: () => (/* reexport */ AbortException),\n  AnnotationEditorLayer: () => (/* reexport */ AnnotationEditorLayer),\n  AnnotationEditorParamsType: () => (/* reexport */ AnnotationEditorParamsType),\n  AnnotationEditorType: () => (/* reexport */ AnnotationEditorType),\n  AnnotationEditorUIManager: () => (/* reexport */ AnnotationEditorUIManager),\n  AnnotationLayer: () => (/* reexport */ AnnotationLayer),\n  AnnotationMode: () => (/* reexport */ AnnotationMode),\n  CMapCompressionType: () => (/* reexport */ CMapCompressionType),\n  ColorPicker: () => (/* reexport */ ColorPicker),\n  DOMSVGFactory: () => (/* reexport */ DOMSVGFactory),\n  DrawLayer: () => (/* reexport */ DrawLayer),\n  FeatureTest: () => (/* reexport */ util_FeatureTest),\n  GlobalWorkerOptions: () => (/* reexport */ GlobalWorkerOptions),\n  ImageKind: () => (/* reexport */ util_ImageKind),\n  InvalidPDFException: () => (/* reexport */ InvalidPDFException),\n  MissingPDFException: () => (/* reexport */ MissingPDFException),\n  OPS: () => (/* reexport */ OPS),\n  Outliner: () => (/* reexport */ Outliner),\n  PDFDataRangeTransport: () => (/* reexport */ PDFDataRangeTransport),\n  PDFDateString: () => (/* reexport */ PDFDateString),\n  PDFWorker: () => (/* reexport */ PDFWorker),\n  PasswordResponses: () => (/* reexport */ PasswordResponses),\n  PermissionFlag: () => (/* reexport */ PermissionFlag),\n  PixelsPerInch: () => (/* reexport */ PixelsPerInch),\n  RenderingCancelledException: () => (/* reexport */ RenderingCancelledException),\n  TextLayer: () => (/* reexport */ TextLayer),\n  UnexpectedResponseException: () => (/* reexport */ UnexpectedResponseException),\n  Util: () => (/* reexport */ Util),\n  VerbosityLevel: () => (/* reexport */ VerbosityLevel),\n  XfaLayer: () => (/* reexport */ XfaLayer),\n  build: () => (/* reexport */ build),\n  createValidAbsoluteUrl: () => (/* reexport */ createValidAbsoluteUrl),\n  fetchData: () => (/* reexport */ fetchData),\n  getDocument: () => (/* reexport */ getDocument),\n  getFilenameFromUrl: () => (/* reexport */ getFilenameFromUrl),\n  getPdfFilenameFromUrl: () => (/* reexport */ getPdfFilenameFromUrl),\n  getXfaPageViewport: () => (/* reexport */ getXfaPageViewport),\n  isDataScheme: () => (/* reexport */ isDataScheme),\n  isPdfFile: () => (/* reexport */ isPdfFile),\n  noContextMenu: () => (/* reexport */ noContextMenu),\n  normalizeUnicode: () => (/* reexport */ normalizeUnicode),\n  renderTextLayer: () => (/* reexport */ renderTextLayer),\n  setLayerDimensions: () => (/* reexport */ setLayerDimensions),\n  shadow: () => (/* reexport */ shadow),\n  updateTextLayer: () => (/* reexport */ updateTextLayer),\n  version: () => (/* reexport */ version)\n});\n\n;// CONCATENATED MODULE: ./src/shared/util.js\nconst isNodeJS = typeof process === \"object\" && process + \"\" === \"[object process]\" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== \"browser\");\nconst IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];\nconst FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\nconst MAX_IMAGE_SIZE_TO_CACHE = 10e6;\nconst LINE_FACTOR = 1.35;\nconst LINE_DESCENT_FACTOR = 0.35;\nconst BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR;\nconst RenderingIntentFlag = {\n  ANY: 0x01,\n  DISPLAY: 0x02,\n  PRINT: 0x04,\n  SAVE: 0x08,\n  ANNOTATIONS_FORMS: 0x10,\n  ANNOTATIONS_STORAGE: 0x20,\n  ANNOTATIONS_DISABLE: 0x40,\n  OPLIST: 0x100\n};\nconst AnnotationMode = {\n  DISABLE: 0,\n  ENABLE: 1,\n  ENABLE_FORMS: 2,\n  ENABLE_STORAGE: 3\n};\nconst AnnotationEditorPrefix = \"pdfjs_internal_editor_\";\nconst AnnotationEditorType = {\n  DISABLE: -1,\n  NONE: 0,\n  FREETEXT: 3,\n  HIGHLIGHT: 9,\n  STAMP: 13,\n  INK: 15\n};\nconst AnnotationEditorParamsType = {\n  RESIZE: 1,\n  CREATE: 2,\n  FREETEXT_SIZE: 11,\n  FREETEXT_COLOR: 12,\n  FREETEXT_OPACITY: 13,\n  INK_COLOR: 21,\n  INK_THICKNESS: 22,\n  INK_OPACITY: 23,\n  HIGHLIGHT_COLOR: 31,\n  HIGHLIGHT_DEFAULT_COLOR: 32,\n  HIGHLIGHT_THICKNESS: 33,\n  HIGHLIGHT_FREE: 34,\n  HIGHLIGHT_SHOW_ALL: 35\n};\nconst PermissionFlag = {\n  PRINT: 0x04,\n  MODIFY_CONTENTS: 0x08,\n  COPY: 0x10,\n  MODIFY_ANNOTATIONS: 0x20,\n  FILL_INTERACTIVE_FORMS: 0x100,\n  COPY_FOR_ACCESSIBILITY: 0x200,\n  ASSEMBLE: 0x400,\n  PRINT_HIGH_QUALITY: 0x800\n};\nconst TextRenderingMode = {\n  FILL: 0,\n  STROKE: 1,\n  FILL_STROKE: 2,\n  INVISIBLE: 3,\n  FILL_ADD_TO_PATH: 4,\n  STROKE_ADD_TO_PATH: 5,\n  FILL_STROKE_ADD_TO_PATH: 6,\n  ADD_TO_PATH: 7,\n  FILL_STROKE_MASK: 3,\n  ADD_TO_PATH_FLAG: 4\n};\nconst util_ImageKind = {\n  GRAYSCALE_1BPP: 1,\n  RGB_24BPP: 2,\n  RGBA_32BPP: 3\n};\nconst AnnotationType = {\n  TEXT: 1,\n  LINK: 2,\n  FREETEXT: 3,\n  LINE: 4,\n  SQUARE: 5,\n  CIRCLE: 6,\n  POLYGON: 7,\n  POLYLINE: 8,\n  HIGHLIGHT: 9,\n  UNDERLINE: 10,\n  SQUIGGLY: 11,\n  STRIKEOUT: 12,\n  STAMP: 13,\n  CARET: 14,\n  INK: 15,\n  POPUP: 16,\n  FILEATTACHMENT: 17,\n  SOUND: 18,\n  MOVIE: 19,\n  WIDGET: 20,\n  SCREEN: 21,\n  PRINTERMARK: 22,\n  TRAPNET: 23,\n  WATERMARK: 24,\n  THREED: 25,\n  REDACT: 26\n};\nconst AnnotationReplyType = {\n  GROUP: \"Group\",\n  REPLY: \"R\"\n};\nconst AnnotationFlag = {\n  INVISIBLE: 0x01,\n  HIDDEN: 0x02,\n  PRINT: 0x04,\n  NOZOOM: 0x08,\n  NOROTATE: 0x10,\n  NOVIEW: 0x20,\n  READONLY: 0x40,\n  LOCKED: 0x80,\n  TOGGLENOVIEW: 0x100,\n  LOCKEDCONTENTS: 0x200\n};\nconst AnnotationFieldFlag = {\n  READONLY: 0x0000001,\n  REQUIRED: 0x0000002,\n  NOEXPORT: 0x0000004,\n  MULTILINE: 0x0001000,\n  PASSWORD: 0x0002000,\n  NOTOGGLETOOFF: 0x0004000,\n  RADIO: 0x0008000,\n  PUSHBUTTON: 0x0010000,\n  COMBO: 0x0020000,\n  EDIT: 0x0040000,\n  SORT: 0x0080000,\n  FILESELECT: 0x0100000,\n  MULTISELECT: 0x0200000,\n  DONOTSPELLCHECK: 0x0400000,\n  DONOTSCROLL: 0x0800000,\n  COMB: 0x1000000,\n  RICHTEXT: 0x2000000,\n  RADIOSINUNISON: 0x2000000,\n  COMMITONSELCHANGE: 0x4000000\n};\nconst AnnotationBorderStyleType = {\n  SOLID: 1,\n  DASHED: 2,\n  BEVELED: 3,\n  INSET: 4,\n  UNDERLINE: 5\n};\nconst AnnotationActionEventType = {\n  E: \"Mouse Enter\",\n  X: \"Mouse Exit\",\n  D: \"Mouse Down\",\n  U: \"Mouse Up\",\n  Fo: \"Focus\",\n  Bl: \"Blur\",\n  PO: \"PageOpen\",\n  PC: \"PageClose\",\n  PV: \"PageVisible\",\n  PI: \"PageInvisible\",\n  K: \"Keystroke\",\n  F: \"Format\",\n  V: \"Validate\",\n  C: \"Calculate\"\n};\nconst DocumentActionEventType = {\n  WC: \"WillClose\",\n  WS: \"WillSave\",\n  DS: \"DidSave\",\n  WP: \"WillPrint\",\n  DP: \"DidPrint\"\n};\nconst PageActionEventType = {\n  O: \"PageOpen\",\n  C: \"PageClose\"\n};\nconst VerbosityLevel = {\n  ERRORS: 0,\n  WARNINGS: 1,\n  INFOS: 5\n};\nconst CMapCompressionType = {\n  NONE: 0,\n  BINARY: 1\n};\nconst OPS = {\n  dependency: 1,\n  setLineWidth: 2,\n  setLineCap: 3,\n  setLineJoin: 4,\n  setMiterLimit: 5,\n  setDash: 6,\n  setRenderingIntent: 7,\n  setFlatness: 8,\n  setGState: 9,\n  save: 10,\n  restore: 11,\n  transform: 12,\n  moveTo: 13,\n  lineTo: 14,\n  curveTo: 15,\n  curveTo2: 16,\n  curveTo3: 17,\n  closePath: 18,\n  rectangle: 19,\n  stroke: 20,\n  closeStroke: 21,\n  fill: 22,\n  eoFill: 23,\n  fillStroke: 24,\n  eoFillStroke: 25,\n  closeFillStroke: 26,\n  closeEOFillStroke: 27,\n  endPath: 28,\n  clip: 29,\n  eoClip: 30,\n  beginText: 31,\n  endText: 32,\n  setCharSpacing: 33,\n  setWordSpacing: 34,\n  setHScale: 35,\n  setLeading: 36,\n  setFont: 37,\n  setTextRenderingMode: 38,\n  setTextRise: 39,\n  moveText: 40,\n  setLeadingMoveText: 41,\n  setTextMatrix: 42,\n  nextLine: 43,\n  showText: 44,\n  showSpacedText: 45,\n  nextLineShowText: 46,\n  nextLineSetSpacingShowText: 47,\n  setCharWidth: 48,\n  setCharWidthAndBounds: 49,\n  setStrokeColorSpace: 50,\n  setFillColorSpace: 51,\n  setStrokeColor: 52,\n  setStrokeColorN: 53,\n  setFillColor: 54,\n  setFillColorN: 55,\n  setStrokeGray: 56,\n  setFillGray: 57,\n  setStrokeRGBColor: 58,\n  setFillRGBColor: 59,\n  setStrokeCMYKColor: 60,\n  setFillCMYKColor: 61,\n  shadingFill: 62,\n  beginInlineImage: 63,\n  beginImageData: 64,\n  endInlineImage: 65,\n  paintXObject: 66,\n  markPoint: 67,\n  markPointProps: 68,\n  beginMarkedContent: 69,\n  beginMarkedContentProps: 70,\n  endMarkedContent: 71,\n  beginCompat: 72,\n  endCompat: 73,\n  paintFormXObjectBegin: 74,\n  paintFormXObjectEnd: 75,\n  beginGroup: 76,\n  endGroup: 77,\n  beginAnnotation: 80,\n  endAnnotation: 81,\n  paintImageMaskXObject: 83,\n  paintImageMaskXObjectGroup: 84,\n  paintImageXObject: 85,\n  paintInlineImageXObject: 86,\n  paintInlineImageXObjectGroup: 87,\n  paintImageXObjectRepeat: 88,\n  paintImageMaskXObjectRepeat: 89,\n  paintSolidColorImageMask: 90,\n  constructPath: 91\n};\nconst PasswordResponses = {\n  NEED_PASSWORD: 1,\n  INCORRECT_PASSWORD: 2\n};\nlet verbosity = VerbosityLevel.WARNINGS;\nfunction setVerbosityLevel(level) {\n  if (Number.isInteger(level)) {\n    verbosity = level;\n  }\n}\nfunction getVerbosityLevel() {\n  return verbosity;\n}\nfunction info(msg) {\n  if (verbosity >= VerbosityLevel.INFOS) {\n    console.log(`Info: ${msg}`);\n  }\n}\nfunction warn(msg) {\n  if (verbosity >= VerbosityLevel.WARNINGS) {\n    console.log(`Warning: ${msg}`);\n  }\n}\nfunction unreachable(msg) {\n  throw new Error(msg);\n}\nfunction assert(cond, msg) {\n  if (!cond) {\n    unreachable(msg);\n  }\n}\nfunction _isValidProtocol(url) {\n  switch (url?.protocol) {\n    case \"http:\":\n    case \"https:\":\n    case \"ftp:\":\n    case \"mailto:\":\n    case \"tel:\":\n      return true;\n    default:\n      return false;\n  }\n}\nfunction createValidAbsoluteUrl(url, baseUrl = null, options = null) {\n  if (!url) {\n    return null;\n  }\n  try {\n    if (options && typeof url === \"string\") {\n      if (options.addDefaultProtocol && url.startsWith(\"www.\")) {\n        const dots = url.match(/\\./g);\n        if (dots?.length >= 2) {\n          url = `http://${url}`;\n        }\n      }\n      if (options.tryConvertEncoding) {\n        try {\n          url = stringToUTF8String(url);\n        } catch {}\n      }\n    }\n    const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);\n    if (_isValidProtocol(absoluteUrl)) {\n      return absoluteUrl;\n    }\n  } catch {}\n  return null;\n}\nfunction shadow(obj, prop, value, nonSerializable = false) {\n  Object.defineProperty(obj, prop, {\n    value,\n    enumerable: !nonSerializable,\n    configurable: true,\n    writable: false\n  });\n  return value;\n}\nconst BaseException = function BaseExceptionClosure() {\n  function BaseException(message, name) {\n    if (this.constructor === BaseException) {\n      unreachable(\"Cannot initialize BaseException.\");\n    }\n    this.message = message;\n    this.name = name;\n  }\n  BaseException.prototype = new Error();\n  BaseException.constructor = BaseException;\n  return BaseException;\n}();\nclass PasswordException extends BaseException {\n  constructor(msg, code) {\n    super(msg, \"PasswordException\");\n    this.code = code;\n  }\n}\nclass UnknownErrorException extends BaseException {\n  constructor(msg, details) {\n    super(msg, \"UnknownErrorException\");\n    this.details = details;\n  }\n}\nclass InvalidPDFException extends BaseException {\n  constructor(msg) {\n    super(msg, \"InvalidPDFException\");\n  }\n}\nclass MissingPDFException extends BaseException {\n  constructor(msg) {\n    super(msg, \"MissingPDFException\");\n  }\n}\nclass UnexpectedResponseException extends BaseException {\n  constructor(msg, status) {\n    super(msg, \"UnexpectedResponseException\");\n    this.status = status;\n  }\n}\nclass FormatError extends BaseException {\n  constructor(msg) {\n    super(msg, \"FormatError\");\n  }\n}\nclass AbortException extends BaseException {\n  constructor(msg) {\n    super(msg, \"AbortException\");\n  }\n}\nfunction bytesToString(bytes) {\n  if (typeof bytes !== \"object\" || bytes?.length === undefined) {\n    unreachable(\"Invalid argument for bytesToString\");\n  }\n  const length = bytes.length;\n  const MAX_ARGUMENT_COUNT = 8192;\n  if (length < MAX_ARGUMENT_COUNT) {\n    return String.fromCharCode.apply(null, bytes);\n  }\n  const strBuf = [];\n  for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {\n    const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);\n    const chunk = bytes.subarray(i, chunkEnd);\n    strBuf.push(String.fromCharCode.apply(null, chunk));\n  }\n  return strBuf.join(\"\");\n}\nfunction stringToBytes(str) {\n  if (typeof str !== \"string\") {\n    unreachable(\"Invalid argument for stringToBytes\");\n  }\n  const length = str.length;\n  const bytes = new Uint8Array(length);\n  for (let i = 0; i < length; ++i) {\n    bytes[i] = str.charCodeAt(i) & 0xff;\n  }\n  return bytes;\n}\nfunction string32(value) {\n  return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);\n}\nfunction objectSize(obj) {\n  return Object.keys(obj).length;\n}\nfunction objectFromMap(map) {\n  const obj = Object.create(null);\n  for (const [key, value] of map) {\n    obj[key] = value;\n  }\n  return obj;\n}\nfunction isLittleEndian() {\n  const buffer8 = new Uint8Array(4);\n  buffer8[0] = 1;\n  const view32 = new Uint32Array(buffer8.buffer, 0, 1);\n  return view32[0] === 1;\n}\nfunction isEvalSupported() {\n  try {\n    new Function(\"\");\n    return true;\n  } catch {\n    return false;\n  }\n}\nclass util_FeatureTest {\n  static get isLittleEndian() {\n    return shadow(this, \"isLittleEndian\", isLittleEndian());\n  }\n  static get isEvalSupported() {\n    return shadow(this, \"isEvalSupported\", isEvalSupported());\n  }\n  static get isOffscreenCanvasSupported() {\n    return shadow(this, \"isOffscreenCanvasSupported\", typeof OffscreenCanvas !== \"undefined\");\n  }\n  static get platform() {\n    if (typeof navigator !== \"undefined\" && typeof navigator?.platform === \"string\") {\n      return shadow(this, \"platform\", {\n        isMac: navigator.platform.includes(\"Mac\")\n      });\n    }\n    return shadow(this, \"platform\", {\n      isMac: false\n    });\n  }\n  static get isCSSRoundSupported() {\n    return shadow(this, \"isCSSRoundSupported\", globalThis.CSS?.supports?.(\"width: round(1.5px, 1px)\"));\n  }\n}\nconst hexNumbers = Array.from(Array(256).keys(), n => n.toString(16).padStart(2, \"0\"));\nclass Util {\n  static makeHexColor(r, g, b) {\n    return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`;\n  }\n  static scaleMinMax(transform, minMax) {\n    let temp;\n    if (transform[0]) {\n      if (transform[0] < 0) {\n        temp = minMax[0];\n        minMax[0] = minMax[2];\n        minMax[2] = temp;\n      }\n      minMax[0] *= transform[0];\n      minMax[2] *= transform[0];\n      if (transform[3] < 0) {\n        temp = minMax[1];\n        minMax[1] = minMax[3];\n        minMax[3] = temp;\n      }\n      minMax[1] *= transform[3];\n      minMax[3] *= transform[3];\n    } else {\n      temp = minMax[0];\n      minMax[0] = minMax[1];\n      minMax[1] = temp;\n      temp = minMax[2];\n      minMax[2] = minMax[3];\n      minMax[3] = temp;\n      if (transform[1] < 0) {\n        temp = minMax[1];\n        minMax[1] = minMax[3];\n        minMax[3] = temp;\n      }\n      minMax[1] *= transform[1];\n      minMax[3] *= transform[1];\n      if (transform[2] < 0) {\n        temp = minMax[0];\n        minMax[0] = minMax[2];\n        minMax[2] = temp;\n      }\n      minMax[0] *= transform[2];\n      minMax[2] *= transform[2];\n    }\n    minMax[0] += transform[4];\n    minMax[1] += transform[5];\n    minMax[2] += transform[4];\n    minMax[3] += transform[5];\n  }\n  static transform(m1, m2) {\n    return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]];\n  }\n  static applyTransform(p, m) {\n    const xt = p[0] * m[0] + p[1] * m[2] + m[4];\n    const yt = p[0] * m[1] + p[1] * m[3] + m[5];\n    return [xt, yt];\n  }\n  static applyInverseTransform(p, m) {\n    const d = m[0] * m[3] - m[1] * m[2];\n    const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\n    const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\n    return [xt, yt];\n  }\n  static getAxialAlignedBoundingBox(r, m) {\n    const p1 = this.applyTransform(r, m);\n    const p2 = this.applyTransform(r.slice(2, 4), m);\n    const p3 = this.applyTransform([r[0], r[3]], m);\n    const p4 = this.applyTransform([r[2], r[1]], m);\n    return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])];\n  }\n  static inverseTransform(m) {\n    const d = m[0] * m[3] - m[1] * m[2];\n    return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];\n  }\n  static singularValueDecompose2dScale(m) {\n    const transpose = [m[0], m[2], m[1], m[3]];\n    const a = m[0] * transpose[0] + m[1] * transpose[2];\n    const b = m[0] * transpose[1] + m[1] * transpose[3];\n    const c = m[2] * transpose[0] + m[3] * transpose[2];\n    const d = m[2] * transpose[1] + m[3] * transpose[3];\n    const first = (a + d) / 2;\n    const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2;\n    const sx = first + second || 1;\n    const sy = first - second || 1;\n    return [Math.sqrt(sx), Math.sqrt(sy)];\n  }\n  static normalizeRect(rect) {\n    const r = rect.slice(0);\n    if (rect[0] > rect[2]) {\n      r[0] = rect[2];\n      r[2] = rect[0];\n    }\n    if (rect[1] > rect[3]) {\n      r[1] = rect[3];\n      r[3] = rect[1];\n    }\n    return r;\n  }\n  static intersect(rect1, rect2) {\n    const xLow = Math.max(Math.min(rect1[0], rect1[2]), Math.min(rect2[0], rect2[2]));\n    const xHigh = Math.min(Math.max(rect1[0], rect1[2]), Math.max(rect2[0], rect2[2]));\n    if (xLow > xHigh) {\n      return null;\n    }\n    const yLow = Math.max(Math.min(rect1[1], rect1[3]), Math.min(rect2[1], rect2[3]));\n    const yHigh = Math.min(Math.max(rect1[1], rect1[3]), Math.max(rect2[1], rect2[3]));\n    if (yLow > yHigh) {\n      return null;\n    }\n    return [xLow, yLow, xHigh, yHigh];\n  }\n  static #getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, t, minMax) {\n    if (t <= 0 || t >= 1) {\n      return;\n    }\n    const mt = 1 - t;\n    const tt = t * t;\n    const ttt = tt * t;\n    const x = mt * (mt * (mt * x0 + 3 * t * x1) + 3 * tt * x2) + ttt * x3;\n    const y = mt * (mt * (mt * y0 + 3 * t * y1) + 3 * tt * y2) + ttt * y3;\n    minMax[0] = Math.min(minMax[0], x);\n    minMax[1] = Math.min(minMax[1], y);\n    minMax[2] = Math.max(minMax[2], x);\n    minMax[3] = Math.max(minMax[3], y);\n  }\n  static #getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, a, b, c, minMax) {\n    if (Math.abs(a) < 1e-12) {\n      if (Math.abs(b) >= 1e-12) {\n        this.#getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, -c / b, minMax);\n      }\n      return;\n    }\n    const delta = b ** 2 - 4 * c * a;\n    if (delta < 0) {\n      return;\n    }\n    const sqrtDelta = Math.sqrt(delta);\n    const a2 = 2 * a;\n    this.#getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, (-b + sqrtDelta) / a2, minMax);\n    this.#getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, (-b - sqrtDelta) / a2, minMax);\n  }\n  static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax) {\n    if (minMax) {\n      minMax[0] = Math.min(minMax[0], x0, x3);\n      minMax[1] = Math.min(minMax[1], y0, y3);\n      minMax[2] = Math.max(minMax[2], x0, x3);\n      minMax[3] = Math.max(minMax[3], y0, y3);\n    } else {\n      minMax = [Math.min(x0, x3), Math.min(y0, y3), Math.max(x0, x3), Math.max(y0, y3)];\n    }\n    this.#getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-x0 + 3 * (x1 - x2) + x3), 6 * (x0 - 2 * x1 + x2), 3 * (x1 - x0), minMax);\n    this.#getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-y0 + 3 * (y1 - y2) + y3), 6 * (y0 - 2 * y1 + y2), 3 * (y1 - y0), minMax);\n    return minMax;\n  }\n}\nconst PDFStringTranslateTable = (/* unused pure expression or super */ null && ([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8, 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d, 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac]));\nfunction stringToPDFString(str) {\n  if (str[0] >= \"\\xEF\") {\n    let encoding;\n    if (str[0] === \"\\xFE\" && str[1] === \"\\xFF\") {\n      encoding = \"utf-16be\";\n      if (str.length % 2 === 1) {\n        str = str.slice(0, -1);\n      }\n    } else if (str[0] === \"\\xFF\" && str[1] === \"\\xFE\") {\n      encoding = \"utf-16le\";\n      if (str.length % 2 === 1) {\n        str = str.slice(0, -1);\n      }\n    } else if (str[0] === \"\\xEF\" && str[1] === \"\\xBB\" && str[2] === \"\\xBF\") {\n      encoding = \"utf-8\";\n    }\n    if (encoding) {\n      try {\n        const decoder = new TextDecoder(encoding, {\n          fatal: true\n        });\n        const buffer = stringToBytes(str);\n        const decoded = decoder.decode(buffer);\n        if (!decoded.includes(\"\\x1b\")) {\n          return decoded;\n        }\n        return decoded.replaceAll(/\\x1b[^\\x1b]*(?:\\x1b|$)/g, \"\");\n      } catch (ex) {\n        warn(`stringToPDFString: \"${ex}\".`);\n      }\n    }\n  }\n  const strBuf = [];\n  for (let i = 0, ii = str.length; i < ii; i++) {\n    const charCode = str.charCodeAt(i);\n    if (charCode === 0x1b) {\n      while (++i < ii && str.charCodeAt(i) !== 0x1b) {}\n      continue;\n    }\n    const code = PDFStringTranslateTable[charCode];\n    strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));\n  }\n  return strBuf.join(\"\");\n}\nfunction stringToUTF8String(str) {\n  return decodeURIComponent(escape(str));\n}\nfunction utf8StringToString(str) {\n  return unescape(encodeURIComponent(str));\n}\nfunction isArrayEqual(arr1, arr2) {\n  if (arr1.length !== arr2.length) {\n    return false;\n  }\n  for (let i = 0, ii = arr1.length; i < ii; i++) {\n    if (arr1[i] !== arr2[i]) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction getModificationDate(date = new Date()) {\n  const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, \"0\"), date.getUTCDate().toString().padStart(2, \"0\"), date.getUTCHours().toString().padStart(2, \"0\"), date.getUTCMinutes().toString().padStart(2, \"0\"), date.getUTCSeconds().toString().padStart(2, \"0\")];\n  return buffer.join(\"\");\n}\nlet NormalizeRegex = null;\nlet NormalizationMap = null;\nfunction normalizeUnicode(str) {\n  if (!NormalizeRegex) {\n    NormalizeRegex = /([\\u00a0\\u00b5\\u037e\\u0eb3\\u2000-\\u200a\\u202f\\u2126\\ufb00-\\ufb04\\ufb06\\ufb20-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufba1\\ufba4-\\ufba9\\ufbae-\\ufbb1\\ufbd3-\\ufbdc\\ufbde-\\ufbe7\\ufbea-\\ufbf8\\ufbfc-\\ufbfd\\ufc00-\\ufc5d\\ufc64-\\ufcf1\\ufcf5-\\ufd3d\\ufd88\\ufdf4\\ufdfa-\\ufdfb\\ufe71\\ufe77\\ufe79\\ufe7b\\ufe7d]+)|(\\ufb05+)/gu;\n    NormalizationMap = new Map([[\"ﬅ\", \"ſt\"]]);\n  }\n  return str.replaceAll(NormalizeRegex, (_, p1, p2) => p1 ? p1.normalize(\"NFKC\") : NormalizationMap.get(p2));\n}\nfunction getUuid() {\n  if (typeof crypto !== \"undefined\" && typeof crypto?.randomUUID === \"function\") {\n    return crypto.randomUUID();\n  }\n  const buf = new Uint8Array(32);\n  if (typeof crypto !== \"undefined\" && typeof crypto?.getRandomValues === \"function\") {\n    crypto.getRandomValues(buf);\n  } else {\n    for (let i = 0; i < 32; i++) {\n      buf[i] = Math.floor(Math.random() * 255);\n    }\n  }\n  return bytesToString(buf);\n}\nconst AnnotationPrefix = \"pdfjs_internal_id_\";\nconst FontRenderOps = {\n  BEZIER_CURVE_TO: 0,\n  MOVE_TO: 1,\n  LINE_TO: 2,\n  QUADRATIC_CURVE_TO: 3,\n  RESTORE: 4,\n  SAVE: 5,\n  SCALE: 6,\n  TRANSFORM: 7,\n  TRANSLATE: 8\n};\n\n;// CONCATENATED MODULE: ./src/display/base_factory.js\n\nclass BaseFilterFactory {\n  constructor() {\n    if (this.constructor === BaseFilterFactory) {\n      unreachable(\"Cannot initialize BaseFilterFactory.\");\n    }\n  }\n  addFilter(maps) {\n    return \"none\";\n  }\n  addHCMFilter(fgColor, bgColor) {\n    return \"none\";\n  }\n  addAlphaFilter(map) {\n    return \"none\";\n  }\n  addLuminosityFilter(map) {\n    return \"none\";\n  }\n  addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {\n    return \"none\";\n  }\n  destroy(keepHCM = false) {}\n}\nclass BaseCanvasFactory {\n  constructor() {\n    if (this.constructor === BaseCanvasFactory) {\n      unreachable(\"Cannot initialize BaseCanvasFactory.\");\n    }\n  }\n  create(width, height) {\n    if (width <= 0 || height <= 0) {\n      throw new Error(\"Invalid canvas size\");\n    }\n    const canvas = this._createCanvas(width, height);\n    return {\n      canvas,\n      context: canvas.getContext(\"2d\")\n    };\n  }\n  reset(canvasAndContext, width, height) {\n    if (!canvasAndContext.canvas) {\n      throw new Error(\"Canvas is not specified\");\n    }\n    if (width <= 0 || height <= 0) {\n      throw new Error(\"Invalid canvas size\");\n    }\n    canvasAndContext.canvas.width = width;\n    canvasAndContext.canvas.height = height;\n  }\n  destroy(canvasAndContext) {\n    if (!canvasAndContext.canvas) {\n      throw new Error(\"Canvas is not specified\");\n    }\n    canvasAndContext.canvas.width = 0;\n    canvasAndContext.canvas.height = 0;\n    canvasAndContext.canvas = null;\n    canvasAndContext.context = null;\n  }\n  _createCanvas(width, height) {\n    unreachable(\"Abstract method `_createCanvas` called.\");\n  }\n}\nclass BaseCMapReaderFactory {\n  constructor({\n    baseUrl = null,\n    isCompressed = true\n  }) {\n    if (this.constructor === BaseCMapReaderFactory) {\n      unreachable(\"Cannot initialize BaseCMapReaderFactory.\");\n    }\n    this.baseUrl = baseUrl;\n    this.isCompressed = isCompressed;\n  }\n  async fetch({\n    name\n  }) {\n    if (!this.baseUrl) {\n      throw new Error('The CMap \"baseUrl\" parameter must be specified, ensure that ' + 'the \"cMapUrl\" and \"cMapPacked\" API parameters are provided.');\n    }\n    if (!name) {\n      throw new Error(\"CMap name must be specified.\");\n    }\n    const url = this.baseUrl + name + (this.isCompressed ? \".bcmap\" : \"\");\n    const compressionType = this.isCompressed ? CMapCompressionType.BINARY : CMapCompressionType.NONE;\n    return this._fetchData(url, compressionType).catch(reason => {\n      throw new Error(`Unable to load ${this.isCompressed ? \"binary \" : \"\"}CMap at: ${url}`);\n    });\n  }\n  _fetchData(url, compressionType) {\n    unreachable(\"Abstract method `_fetchData` called.\");\n  }\n}\nclass BaseStandardFontDataFactory {\n  constructor({\n    baseUrl = null\n  }) {\n    if (this.constructor === BaseStandardFontDataFactory) {\n      unreachable(\"Cannot initialize BaseStandardFontDataFactory.\");\n    }\n    this.baseUrl = baseUrl;\n  }\n  async fetch({\n    filename\n  }) {\n    if (!this.baseUrl) {\n      throw new Error('The standard font \"baseUrl\" parameter must be specified, ensure that ' + 'the \"standardFontDataUrl\" API parameter is provided.');\n    }\n    if (!filename) {\n      throw new Error(\"Font filename must be specified.\");\n    }\n    const url = `${this.baseUrl}${filename}`;\n    return this._fetchData(url).catch(reason => {\n      throw new Error(`Unable to load font data at: ${url}`);\n    });\n  }\n  _fetchData(url) {\n    unreachable(\"Abstract method `_fetchData` called.\");\n  }\n}\nclass BaseSVGFactory {\n  constructor() {\n    if (this.constructor === BaseSVGFactory) {\n      unreachable(\"Cannot initialize BaseSVGFactory.\");\n    }\n  }\n  create(width, height, skipDimensions = false) {\n    if (width <= 0 || height <= 0) {\n      throw new Error(\"Invalid SVG dimensions\");\n    }\n    const svg = this._createSVG(\"svg:svg\");\n    svg.setAttribute(\"version\", \"1.1\");\n    if (!skipDimensions) {\n      svg.setAttribute(\"width\", `${width}px`);\n      svg.setAttribute(\"height\", `${height}px`);\n    }\n    svg.setAttribute(\"preserveAspectRatio\", \"none\");\n    svg.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n    return svg;\n  }\n  createElement(type) {\n    if (typeof type !== \"string\") {\n      throw new Error(\"Invalid SVG element type\");\n    }\n    return this._createSVG(type);\n  }\n  _createSVG(type) {\n    unreachable(\"Abstract method `_createSVG` called.\");\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/display_utils.js\n\n\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\nclass PixelsPerInch {\n  static CSS = 96.0;\n  static PDF = 72.0;\n  static PDF_TO_CSS_UNITS = this.CSS / this.PDF;\n}\nclass DOMFilterFactory extends BaseFilterFactory {\n  #_cache;\n  #_defs;\n  #docId;\n  #document;\n  #_hcmCache;\n  #id = 0;\n  constructor({\n    docId,\n    ownerDocument = globalThis.document\n  } = {}) {\n    super();\n    this.#docId = docId;\n    this.#document = ownerDocument;\n  }\n  get #cache() {\n    return this.#_cache ||= new Map();\n  }\n  get #hcmCache() {\n    return this.#_hcmCache ||= new Map();\n  }\n  get #defs() {\n    if (!this.#_defs) {\n      const div = this.#document.createElement(\"div\");\n      const {\n        style\n      } = div;\n      style.visibility = \"hidden\";\n      style.contain = \"strict\";\n      style.width = style.height = 0;\n      style.position = \"absolute\";\n      style.top = style.left = 0;\n      style.zIndex = -1;\n      const svg = this.#document.createElementNS(SVG_NS, \"svg\");\n      svg.setAttribute(\"width\", 0);\n      svg.setAttribute(\"height\", 0);\n      this.#_defs = this.#document.createElementNS(SVG_NS, \"defs\");\n      div.append(svg);\n      svg.append(this.#_defs);\n      this.#document.body.append(div);\n    }\n    return this.#_defs;\n  }\n  #createTables(maps) {\n    if (maps.length === 1) {\n      const mapR = maps[0];\n      const buffer = new Array(256);\n      for (let i = 0; i < 256; i++) {\n        buffer[i] = mapR[i] / 255;\n      }\n      const table = buffer.join(\",\");\n      return [table, table, table];\n    }\n    const [mapR, mapG, mapB] = maps;\n    const bufferR = new Array(256);\n    const bufferG = new Array(256);\n    const bufferB = new Array(256);\n    for (let i = 0; i < 256; i++) {\n      bufferR[i] = mapR[i] / 255;\n      bufferG[i] = mapG[i] / 255;\n      bufferB[i] = mapB[i] / 255;\n    }\n    return [bufferR.join(\",\"), bufferG.join(\",\"), bufferB.join(\",\")];\n  }\n  addFilter(maps) {\n    if (!maps) {\n      return \"none\";\n    }\n    let value = this.#cache.get(maps);\n    if (value) {\n      return value;\n    }\n    const [tableR, tableG, tableB] = this.#createTables(maps);\n    const key = maps.length === 1 ? tableR : `${tableR}${tableG}${tableB}`;\n    value = this.#cache.get(key);\n    if (value) {\n      this.#cache.set(maps, value);\n      return value;\n    }\n    const id = `g_${this.#docId}_transfer_map_${this.#id++}`;\n    const url = `url(#${id})`;\n    this.#cache.set(maps, url);\n    this.#cache.set(key, url);\n    const filter = this.#createFilter(id);\n    this.#addTransferMapConversion(tableR, tableG, tableB, filter);\n    return url;\n  }\n  addHCMFilter(fgColor, bgColor) {\n    const key = `${fgColor}-${bgColor}`;\n    const filterName = \"base\";\n    let info = this.#hcmCache.get(filterName);\n    if (info?.key === key) {\n      return info.url;\n    }\n    if (info) {\n      info.filter?.remove();\n      info.key = key;\n      info.url = \"none\";\n      info.filter = null;\n    } else {\n      info = {\n        key,\n        url: \"none\",\n        filter: null\n      };\n      this.#hcmCache.set(filterName, info);\n    }\n    if (!fgColor || !bgColor) {\n      return info.url;\n    }\n    const fgRGB = this.#getRGB(fgColor);\n    fgColor = Util.makeHexColor(...fgRGB);\n    const bgRGB = this.#getRGB(bgColor);\n    bgColor = Util.makeHexColor(...bgRGB);\n    this.#defs.style.color = \"\";\n    if (fgColor === \"#000000\" && bgColor === \"#ffffff\" || fgColor === bgColor) {\n      return info.url;\n    }\n    const map = new Array(256);\n    for (let i = 0; i <= 255; i++) {\n      const x = i / 255;\n      map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;\n    }\n    const table = map.join(\",\");\n    const id = `g_${this.#docId}_hcm_filter`;\n    const filter = info.filter = this.#createFilter(id);\n    this.#addTransferMapConversion(table, table, table, filter);\n    this.#addGrayConversion(filter);\n    const getSteps = (c, n) => {\n      const start = fgRGB[c] / 255;\n      const end = bgRGB[c] / 255;\n      const arr = new Array(n + 1);\n      for (let i = 0; i <= n; i++) {\n        arr[i] = start + i / n * (end - start);\n      }\n      return arr.join(\",\");\n    };\n    this.#addTransferMapConversion(getSteps(0, 5), getSteps(1, 5), getSteps(2, 5), filter);\n    info.url = `url(#${id})`;\n    return info.url;\n  }\n  addAlphaFilter(map) {\n    let value = this.#cache.get(map);\n    if (value) {\n      return value;\n    }\n    const [tableA] = this.#createTables([map]);\n    const key = `alpha_${tableA}`;\n    value = this.#cache.get(key);\n    if (value) {\n      this.#cache.set(map, value);\n      return value;\n    }\n    const id = `g_${this.#docId}_alpha_map_${this.#id++}`;\n    const url = `url(#${id})`;\n    this.#cache.set(map, url);\n    this.#cache.set(key, url);\n    const filter = this.#createFilter(id);\n    this.#addTransferMapAlphaConversion(tableA, filter);\n    return url;\n  }\n  addLuminosityFilter(map) {\n    let value = this.#cache.get(map || \"luminosity\");\n    if (value) {\n      return value;\n    }\n    let tableA, key;\n    if (map) {\n      [tableA] = this.#createTables([map]);\n      key = `luminosity_${tableA}`;\n    } else {\n      key = \"luminosity\";\n    }\n    value = this.#cache.get(key);\n    if (value) {\n      this.#cache.set(map, value);\n      return value;\n    }\n    const id = `g_${this.#docId}_luminosity_map_${this.#id++}`;\n    const url = `url(#${id})`;\n    this.#cache.set(map, url);\n    this.#cache.set(key, url);\n    const filter = this.#createFilter(id);\n    this.#addLuminosityConversion(filter);\n    if (map) {\n      this.#addTransferMapAlphaConversion(tableA, filter);\n    }\n    return url;\n  }\n  addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {\n    const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`;\n    let info = this.#hcmCache.get(filterName);\n    if (info?.key === key) {\n      return info.url;\n    }\n    if (info) {\n      info.filter?.remove();\n      info.key = key;\n      info.url = \"none\";\n      info.filter = null;\n    } else {\n      info = {\n        key,\n        url: \"none\",\n        filter: null\n      };\n      this.#hcmCache.set(filterName, info);\n    }\n    if (!fgColor || !bgColor) {\n      return info.url;\n    }\n    const [fgRGB, bgRGB] = [fgColor, bgColor].map(this.#getRGB.bind(this));\n    let fgGray = Math.round(0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]);\n    let bgGray = Math.round(0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]);\n    let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(this.#getRGB.bind(this));\n    if (bgGray < fgGray) {\n      [fgGray, bgGray, newFgRGB, newBgRGB] = [bgGray, fgGray, newBgRGB, newFgRGB];\n    }\n    this.#defs.style.color = \"\";\n    const getSteps = (fg, bg, n) => {\n      const arr = new Array(256);\n      const step = (bgGray - fgGray) / n;\n      const newStart = fg / 255;\n      const newStep = (bg - fg) / (255 * n);\n      let prev = 0;\n      for (let i = 0; i <= n; i++) {\n        const k = Math.round(fgGray + i * step);\n        const value = newStart + i * newStep;\n        for (let j = prev; j <= k; j++) {\n          arr[j] = value;\n        }\n        prev = k + 1;\n      }\n      for (let i = prev; i < 256; i++) {\n        arr[i] = arr[prev - 1];\n      }\n      return arr.join(\",\");\n    };\n    const id = `g_${this.#docId}_hcm_${filterName}_filter`;\n    const filter = info.filter = this.#createFilter(id);\n    this.#addGrayConversion(filter);\n    this.#addTransferMapConversion(getSteps(newFgRGB[0], newBgRGB[0], 5), getSteps(newFgRGB[1], newBgRGB[1], 5), getSteps(newFgRGB[2], newBgRGB[2], 5), filter);\n    info.url = `url(#${id})`;\n    return info.url;\n  }\n  destroy(keepHCM = false) {\n    if (keepHCM && this.#hcmCache.size !== 0) {\n      return;\n    }\n    if (this.#_defs) {\n      this.#_defs.parentNode.parentNode.remove();\n      this.#_defs = null;\n    }\n    if (this.#_cache) {\n      this.#_cache.clear();\n      this.#_cache = null;\n    }\n    this.#id = 0;\n  }\n  #addLuminosityConversion(filter) {\n    const feColorMatrix = this.#document.createElementNS(SVG_NS, \"feColorMatrix\");\n    feColorMatrix.setAttribute(\"type\", \"matrix\");\n    feColorMatrix.setAttribute(\"values\", \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.59 0.11 0 0\");\n    filter.append(feColorMatrix);\n  }\n  #addGrayConversion(filter) {\n    const feColorMatrix = this.#document.createElementNS(SVG_NS, \"feColorMatrix\");\n    feColorMatrix.setAttribute(\"type\", \"matrix\");\n    feColorMatrix.setAttribute(\"values\", \"0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0\");\n    filter.append(feColorMatrix);\n  }\n  #createFilter(id) {\n    const filter = this.#document.createElementNS(SVG_NS, \"filter\");\n    filter.setAttribute(\"color-interpolation-filters\", \"sRGB\");\n    filter.setAttribute(\"id\", id);\n    this.#defs.append(filter);\n    return filter;\n  }\n  #appendFeFunc(feComponentTransfer, func, table) {\n    const feFunc = this.#document.createElementNS(SVG_NS, func);\n    feFunc.setAttribute(\"type\", \"discrete\");\n    feFunc.setAttribute(\"tableValues\", table);\n    feComponentTransfer.append(feFunc);\n  }\n  #addTransferMapConversion(rTable, gTable, bTable, filter) {\n    const feComponentTransfer = this.#document.createElementNS(SVG_NS, \"feComponentTransfer\");\n    filter.append(feComponentTransfer);\n    this.#appendFeFunc(feComponentTransfer, \"feFuncR\", rTable);\n    this.#appendFeFunc(feComponentTransfer, \"feFuncG\", gTable);\n    this.#appendFeFunc(feComponentTransfer, \"feFuncB\", bTable);\n  }\n  #addTransferMapAlphaConversion(aTable, filter) {\n    const feComponentTransfer = this.#document.createElementNS(SVG_NS, \"feComponentTransfer\");\n    filter.append(feComponentTransfer);\n    this.#appendFeFunc(feComponentTransfer, \"feFuncA\", aTable);\n  }\n  #getRGB(color) {\n    this.#defs.style.color = color;\n    return getRGB(getComputedStyle(this.#defs).getPropertyValue(\"color\"));\n  }\n}\nclass DOMCanvasFactory extends BaseCanvasFactory {\n  constructor({\n    ownerDocument = globalThis.document\n  } = {}) {\n    super();\n    this._document = ownerDocument;\n  }\n  _createCanvas(width, height) {\n    const canvas = this._document.createElement(\"canvas\");\n    canvas.width = width;\n    canvas.height = height;\n    return canvas;\n  }\n}\nasync function fetchData(url, type = \"text\") {\n  if (isValidFetchUrl(url, document.baseURI)) {\n    const response = await fetch(url);\n    if (!response.ok) {\n      throw new Error(response.statusText);\n    }\n    switch (type) {\n      case \"arraybuffer\":\n        return response.arrayBuffer();\n      case \"blob\":\n        return response.blob();\n      case \"json\":\n        return response.json();\n    }\n    return response.text();\n  }\n  return new Promise((resolve, reject) => {\n    const request = new XMLHttpRequest();\n    request.open(\"GET\", url, true);\n    request.responseType = type;\n    request.onreadystatechange = () => {\n      if (request.readyState !== XMLHttpRequest.DONE) {\n        return;\n      }\n      if (request.status === 200 || request.status === 0) {\n        switch (type) {\n          case \"arraybuffer\":\n          case \"blob\":\n          case \"json\":\n            resolve(request.response);\n            return;\n        }\n        resolve(request.responseText);\n        return;\n      }\n      reject(new Error(request.statusText));\n    };\n    request.send(null);\n  });\n}\nclass DOMCMapReaderFactory extends BaseCMapReaderFactory {\n  _fetchData(url, compressionType) {\n    return fetchData(url, this.isCompressed ? \"arraybuffer\" : \"text\").then(data => ({\n      cMapData: data instanceof ArrayBuffer ? new Uint8Array(data) : stringToBytes(data),\n      compressionType\n    }));\n  }\n}\nclass DOMStandardFontDataFactory extends BaseStandardFontDataFactory {\n  _fetchData(url) {\n    return fetchData(url, \"arraybuffer\").then(data => new Uint8Array(data));\n  }\n}\nclass DOMSVGFactory extends BaseSVGFactory {\n  _createSVG(type) {\n    return document.createElementNS(SVG_NS, type);\n  }\n}\nclass PageViewport {\n  constructor({\n    viewBox,\n    scale,\n    rotation,\n    offsetX = 0,\n    offsetY = 0,\n    dontFlip = false\n  }) {\n    this.viewBox = viewBox;\n    this.scale = scale;\n    this.rotation = rotation;\n    this.offsetX = offsetX;\n    this.offsetY = offsetY;\n    const centerX = (viewBox[2] + viewBox[0]) / 2;\n    const centerY = (viewBox[3] + viewBox[1]) / 2;\n    let rotateA, rotateB, rotateC, rotateD;\n    rotation %= 360;\n    if (rotation < 0) {\n      rotation += 360;\n    }\n    switch (rotation) {\n      case 180:\n        rotateA = -1;\n        rotateB = 0;\n        rotateC = 0;\n        rotateD = 1;\n        break;\n      case 90:\n        rotateA = 0;\n        rotateB = 1;\n        rotateC = 1;\n        rotateD = 0;\n        break;\n      case 270:\n        rotateA = 0;\n        rotateB = -1;\n        rotateC = -1;\n        rotateD = 0;\n        break;\n      case 0:\n        rotateA = 1;\n        rotateB = 0;\n        rotateC = 0;\n        rotateD = -1;\n        break;\n      default:\n        throw new Error(\"PageViewport: Invalid rotation, must be a multiple of 90 degrees.\");\n    }\n    if (dontFlip) {\n      rotateC = -rotateC;\n      rotateD = -rotateD;\n    }\n    let offsetCanvasX, offsetCanvasY;\n    let width, height;\n    if (rotateA === 0) {\n      offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;\n      offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;\n      width = (viewBox[3] - viewBox[1]) * scale;\n      height = (viewBox[2] - viewBox[0]) * scale;\n    } else {\n      offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;\n      offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;\n      width = (viewBox[2] - viewBox[0]) * scale;\n      height = (viewBox[3] - viewBox[1]) * scale;\n    }\n    this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY];\n    this.width = width;\n    this.height = height;\n  }\n  get rawDims() {\n    const {\n      viewBox\n    } = this;\n    return shadow(this, \"rawDims\", {\n      pageWidth: viewBox[2] - viewBox[0],\n      pageHeight: viewBox[3] - viewBox[1],\n      pageX: viewBox[0],\n      pageY: viewBox[1]\n    });\n  }\n  clone({\n    scale = this.scale,\n    rotation = this.rotation,\n    offsetX = this.offsetX,\n    offsetY = this.offsetY,\n    dontFlip = false\n  } = {}) {\n    return new PageViewport({\n      viewBox: this.viewBox.slice(),\n      scale,\n      rotation,\n      offsetX,\n      offsetY,\n      dontFlip\n    });\n  }\n  convertToViewportPoint(x, y) {\n    return Util.applyTransform([x, y], this.transform);\n  }\n  convertToViewportRectangle(rect) {\n    const topLeft = Util.applyTransform([rect[0], rect[1]], this.transform);\n    const bottomRight = Util.applyTransform([rect[2], rect[3]], this.transform);\n    return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];\n  }\n  convertToPdfPoint(x, y) {\n    return Util.applyInverseTransform([x, y], this.transform);\n  }\n}\nclass RenderingCancelledException extends BaseException {\n  constructor(msg, extraDelay = 0) {\n    super(msg, \"RenderingCancelledException\");\n    this.extraDelay = extraDelay;\n  }\n}\nfunction isDataScheme(url) {\n  const ii = url.length;\n  let i = 0;\n  while (i < ii && url[i].trim() === \"\") {\n    i++;\n  }\n  return url.substring(i, i + 5).toLowerCase() === \"data:\";\n}\nfunction isPdfFile(filename) {\n  return typeof filename === \"string\" && /\\.pdf$/i.test(filename);\n}\nfunction getFilenameFromUrl(url) {\n  [url] = url.split(/[#?]/, 1);\n  return url.substring(url.lastIndexOf(\"/\") + 1);\n}\nfunction getPdfFilenameFromUrl(url, defaultFilename = \"document.pdf\") {\n  if (typeof url !== \"string\") {\n    return defaultFilename;\n  }\n  if (isDataScheme(url)) {\n    warn('getPdfFilenameFromUrl: ignore \"data:\"-URL for performance reasons.');\n    return defaultFilename;\n  }\n  const reURI = /^(?:(?:[^:]+:)?\\/\\/[^/]+)?([^?#]*)(\\?[^#]*)?(#.*)?$/;\n  const reFilename = /[^/?#=]+\\.pdf\\b(?!.*\\.pdf\\b)/i;\n  const splitURI = reURI.exec(url);\n  let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]);\n  if (suggestedFilename) {\n    suggestedFilename = suggestedFilename[0];\n    if (suggestedFilename.includes(\"%\")) {\n      try {\n        suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0];\n      } catch {}\n    }\n  }\n  return suggestedFilename || defaultFilename;\n}\nclass StatTimer {\n  started = Object.create(null);\n  times = [];\n  time(name) {\n    if (name in this.started) {\n      warn(`Timer is already running for ${name}`);\n    }\n    this.started[name] = Date.now();\n  }\n  timeEnd(name) {\n    if (!(name in this.started)) {\n      warn(`Timer has not been started for ${name}`);\n    }\n    this.times.push({\n      name,\n      start: this.started[name],\n      end: Date.now()\n    });\n    delete this.started[name];\n  }\n  toString() {\n    const outBuf = [];\n    let longest = 0;\n    for (const {\n      name\n    } of this.times) {\n      longest = Math.max(name.length, longest);\n    }\n    for (const {\n      name,\n      start,\n      end\n    } of this.times) {\n      outBuf.push(`${name.padEnd(longest)} ${end - start}ms\\n`);\n    }\n    return outBuf.join(\"\");\n  }\n}\nfunction isValidFetchUrl(url, baseUrl) {\n  try {\n    const {\n      protocol\n    } = baseUrl ? new URL(url, baseUrl) : new URL(url);\n    return protocol === \"http:\" || protocol === \"https:\";\n  } catch {\n    return false;\n  }\n}\nfunction noContextMenu(e) {\n  e.preventDefault();\n}\nfunction deprecated(details) {\n  console.log(\"Deprecated API usage: \" + details);\n}\nlet pdfDateStringRegex;\nclass PDFDateString {\n  static toDateObject(input) {\n    if (!input || typeof input !== \"string\") {\n      return null;\n    }\n    pdfDateStringRegex ||= new RegExp(\"^D:\" + \"(\\\\d{4})\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"([Z|+|-])?\" + \"(\\\\d{2})?\" + \"'?\" + \"(\\\\d{2})?\" + \"'?\");\n    const matches = pdfDateStringRegex.exec(input);\n    if (!matches) {\n      return null;\n    }\n    const year = parseInt(matches[1], 10);\n    let month = parseInt(matches[2], 10);\n    month = month >= 1 && month <= 12 ? month - 1 : 0;\n    let day = parseInt(matches[3], 10);\n    day = day >= 1 && day <= 31 ? day : 1;\n    let hour = parseInt(matches[4], 10);\n    hour = hour >= 0 && hour <= 23 ? hour : 0;\n    let minute = parseInt(matches[5], 10);\n    minute = minute >= 0 && minute <= 59 ? minute : 0;\n    let second = parseInt(matches[6], 10);\n    second = second >= 0 && second <= 59 ? second : 0;\n    const universalTimeRelation = matches[7] || \"Z\";\n    let offsetHour = parseInt(matches[8], 10);\n    offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;\n    let offsetMinute = parseInt(matches[9], 10) || 0;\n    offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;\n    if (universalTimeRelation === \"-\") {\n      hour += offsetHour;\n      minute += offsetMinute;\n    } else if (universalTimeRelation === \"+\") {\n      hour -= offsetHour;\n      minute -= offsetMinute;\n    }\n    return new Date(Date.UTC(year, month, day, hour, minute, second));\n  }\n}\nfunction getXfaPageViewport(xfaPage, {\n  scale = 1,\n  rotation = 0\n}) {\n  const {\n    width,\n    height\n  } = xfaPage.attributes.style;\n  const viewBox = [0, 0, parseInt(width), parseInt(height)];\n  return new PageViewport({\n    viewBox,\n    scale,\n    rotation\n  });\n}\nfunction getRGB(color) {\n  if (color.startsWith(\"#\")) {\n    const colorRGB = parseInt(color.slice(1), 16);\n    return [(colorRGB & 0xff0000) >> 16, (colorRGB & 0x00ff00) >> 8, colorRGB & 0x0000ff];\n  }\n  if (color.startsWith(\"rgb(\")) {\n    return color.slice(4, -1).split(\",\").map(x => parseInt(x));\n  }\n  if (color.startsWith(\"rgba(\")) {\n    return color.slice(5, -1).split(\",\").map(x => parseInt(x)).slice(0, 3);\n  }\n  warn(`Not a valid color format: \"${color}\"`);\n  return [0, 0, 0];\n}\nfunction getColorValues(colors) {\n  const span = document.createElement(\"span\");\n  span.style.visibility = \"hidden\";\n  document.body.append(span);\n  for (const name of colors.keys()) {\n    span.style.color = name;\n    const computedColor = window.getComputedStyle(span).color;\n    colors.set(name, getRGB(computedColor));\n  }\n  span.remove();\n}\nfunction getCurrentTransform(ctx) {\n  const {\n    a,\n    b,\n    c,\n    d,\n    e,\n    f\n  } = ctx.getTransform();\n  return [a, b, c, d, e, f];\n}\nfunction getCurrentTransformInverse(ctx) {\n  const {\n    a,\n    b,\n    c,\n    d,\n    e,\n    f\n  } = ctx.getTransform().invertSelf();\n  return [a, b, c, d, e, f];\n}\nfunction setLayerDimensions(div, viewport, mustFlip = false, mustRotate = true) {\n  if (viewport instanceof PageViewport) {\n    const {\n      pageWidth,\n      pageHeight\n    } = viewport.rawDims;\n    const {\n      style\n    } = div;\n    const useRound = util_FeatureTest.isCSSRoundSupported;\n    const w = `var(--scale-factor) * ${pageWidth}px`,\n      h = `var(--scale-factor) * ${pageHeight}px`;\n    const widthStr = useRound ? `round(${w}, 1px)` : `calc(${w})`,\n      heightStr = useRound ? `round(${h}, 1px)` : `calc(${h})`;\n    if (!mustFlip || viewport.rotation % 180 === 0) {\n      style.width = widthStr;\n      style.height = heightStr;\n    } else {\n      style.width = heightStr;\n      style.height = widthStr;\n    }\n  }\n  if (mustRotate) {\n    div.setAttribute(\"data-main-rotation\", viewport.rotation);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/editor/toolbar.js\n\nclass EditorToolbar {\n  #toolbar = null;\n  #colorPicker = null;\n  #editor;\n  #buttons = null;\n  constructor(editor) {\n    this.#editor = editor;\n  }\n  render() {\n    const editToolbar = this.#toolbar = document.createElement(\"div\");\n    editToolbar.className = \"editToolbar\";\n    editToolbar.setAttribute(\"role\", \"toolbar\");\n    editToolbar.addEventListener(\"contextmenu\", noContextMenu);\n    editToolbar.addEventListener(\"pointerdown\", EditorToolbar.#pointerDown);\n    const buttons = this.#buttons = document.createElement(\"div\");\n    buttons.className = \"buttons\";\n    editToolbar.append(buttons);\n    const position = this.#editor.toolbarPosition;\n    if (position) {\n      const {\n        style\n      } = editToolbar;\n      const x = this.#editor._uiManager.direction === \"ltr\" ? 1 - position[0] : position[0];\n      style.insetInlineEnd = `${100 * x}%`;\n      style.top = `calc(${100 * position[1]}% + var(--editor-toolbar-vert-offset))`;\n    }\n    this.#addDeleteButton();\n    return editToolbar;\n  }\n  static #pointerDown(e) {\n    e.stopPropagation();\n  }\n  #focusIn(e) {\n    this.#editor._focusEventsAllowed = false;\n    e.preventDefault();\n    e.stopPropagation();\n  }\n  #focusOut(e) {\n    this.#editor._focusEventsAllowed = true;\n    e.preventDefault();\n    e.stopPropagation();\n  }\n  #addListenersToElement(element) {\n    element.addEventListener(\"focusin\", this.#focusIn.bind(this), {\n      capture: true\n    });\n    element.addEventListener(\"focusout\", this.#focusOut.bind(this), {\n      capture: true\n    });\n    element.addEventListener(\"contextmenu\", noContextMenu);\n  }\n  hide() {\n    this.#toolbar.classList.add(\"hidden\");\n    this.#colorPicker?.hideDropdown();\n  }\n  show() {\n    this.#toolbar.classList.remove(\"hidden\");\n  }\n  #addDeleteButton() {\n    const button = document.createElement(\"button\");\n    button.className = \"delete\";\n    button.tabIndex = 0;\n    button.setAttribute(\"data-l10n-id\", `pdfjs-editor-remove-${this.#editor.editorType}-button`);\n    this.#addListenersToElement(button);\n    button.addEventListener(\"click\", e => {\n      this.#editor._uiManager.delete();\n    });\n    this.#buttons.append(button);\n  }\n  get #divider() {\n    const divider = document.createElement(\"div\");\n    divider.className = \"divider\";\n    return divider;\n  }\n  addAltTextButton(button) {\n    this.#addListenersToElement(button);\n    this.#buttons.prepend(button, this.#divider);\n  }\n  addColorPicker(colorPicker) {\n    this.#colorPicker = colorPicker;\n    const button = colorPicker.renderButton();\n    this.#addListenersToElement(button);\n    this.#buttons.prepend(button, this.#divider);\n  }\n  remove() {\n    this.#toolbar.remove();\n    this.#colorPicker?.destroy();\n    this.#colorPicker = null;\n  }\n}\nclass HighlightToolbar {\n  #buttons = null;\n  #toolbar = null;\n  #uiManager;\n  constructor(uiManager) {\n    this.#uiManager = uiManager;\n  }\n  #render() {\n    const editToolbar = this.#toolbar = document.createElement(\"div\");\n    editToolbar.className = \"editToolbar\";\n    editToolbar.setAttribute(\"role\", \"toolbar\");\n    editToolbar.addEventListener(\"contextmenu\", noContextMenu);\n    const buttons = this.#buttons = document.createElement(\"div\");\n    buttons.className = \"buttons\";\n    editToolbar.append(buttons);\n    this.#addHighlightButton();\n    return editToolbar;\n  }\n  #getLastPoint(boxes, isLTR) {\n    let lastY = 0;\n    let lastX = 0;\n    for (const box of boxes) {\n      const y = box.y + box.height;\n      if (y < lastY) {\n        continue;\n      }\n      const x = box.x + (isLTR ? box.width : 0);\n      if (y > lastY) {\n        lastX = x;\n        lastY = y;\n        continue;\n      }\n      if (isLTR) {\n        if (x > lastX) {\n          lastX = x;\n        }\n      } else if (x < lastX) {\n        lastX = x;\n      }\n    }\n    return [isLTR ? 1 - lastX : lastX, lastY];\n  }\n  show(parent, boxes, isLTR) {\n    const [x, y] = this.#getLastPoint(boxes, isLTR);\n    const {\n      style\n    } = this.#toolbar ||= this.#render();\n    parent.append(this.#toolbar);\n    style.insetInlineEnd = `${100 * x}%`;\n    style.top = `calc(${100 * y}% + var(--editor-toolbar-vert-offset))`;\n  }\n  hide() {\n    this.#toolbar.remove();\n  }\n  #addHighlightButton() {\n    const button = document.createElement(\"button\");\n    button.className = \"highlightButton\";\n    button.tabIndex = 0;\n    button.setAttribute(\"data-l10n-id\", `pdfjs-highlight-floating-button1`);\n    const span = document.createElement(\"span\");\n    button.append(span);\n    span.className = \"visuallyHidden\";\n    span.setAttribute(\"data-l10n-id\", \"pdfjs-highlight-floating-button-label\");\n    button.addEventListener(\"contextmenu\", noContextMenu);\n    button.addEventListener(\"click\", () => {\n      this.#uiManager.highlightSelection(\"floating_button\");\n    });\n    this.#buttons.append(button);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/editor/tools.js\n\n\n\nfunction bindEvents(obj, element, names) {\n  for (const name of names) {\n    element.addEventListener(name, obj[name].bind(obj));\n  }\n}\nfunction opacityToHex(opacity) {\n  return Math.round(Math.min(255, Math.max(1, 255 * opacity))).toString(16).padStart(2, \"0\");\n}\nclass IdManager {\n  #id = 0;\n  get id() {\n    return `${AnnotationEditorPrefix}${this.#id++}`;\n  }\n}\nclass ImageManager {\n  #baseId = getUuid();\n  #id = 0;\n  #cache = null;\n  static get _isSVGFittingCanvas() {\n    const svg = `data:image/svg+xml;charset=UTF-8,<svg viewBox=\"0 0 1 1\" width=\"1\" height=\"1\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"1\" height=\"1\" style=\"fill:red;\"/></svg>`;\n    const canvas = new OffscreenCanvas(1, 3);\n    const ctx = canvas.getContext(\"2d\");\n    const image = new Image();\n    image.src = svg;\n    const promise = image.decode().then(() => {\n      ctx.drawImage(image, 0, 0, 1, 1, 0, 0, 1, 3);\n      return new Uint32Array(ctx.getImageData(0, 0, 1, 1).data.buffer)[0] === 0;\n    });\n    return shadow(this, \"_isSVGFittingCanvas\", promise);\n  }\n  async #get(key, rawData) {\n    this.#cache ||= new Map();\n    let data = this.#cache.get(key);\n    if (data === null) {\n      return null;\n    }\n    if (data?.bitmap) {\n      data.refCounter += 1;\n      return data;\n    }\n    try {\n      data ||= {\n        bitmap: null,\n        id: `image_${this.#baseId}_${this.#id++}`,\n        refCounter: 0,\n        isSvg: false\n      };\n      let image;\n      if (typeof rawData === \"string\") {\n        data.url = rawData;\n        image = await fetchData(rawData, \"blob\");\n      } else {\n        image = data.file = rawData;\n      }\n      if (image.type === \"image/svg+xml\") {\n        const mustRemoveAspectRatioPromise = ImageManager._isSVGFittingCanvas;\n        const fileReader = new FileReader();\n        const imageElement = new Image();\n        const imagePromise = new Promise((resolve, reject) => {\n          imageElement.onload = () => {\n            data.bitmap = imageElement;\n            data.isSvg = true;\n            resolve();\n          };\n          fileReader.onload = async () => {\n            const url = data.svgUrl = fileReader.result;\n            imageElement.src = (await mustRemoveAspectRatioPromise) ? `${url}#svgView(preserveAspectRatio(none))` : url;\n          };\n          imageElement.onerror = fileReader.onerror = reject;\n        });\n        fileReader.readAsDataURL(image);\n        await imagePromise;\n      } else {\n        data.bitmap = await createImageBitmap(image);\n      }\n      data.refCounter = 1;\n    } catch (e) {\n      console.error(e);\n      data = null;\n    }\n    this.#cache.set(key, data);\n    if (data) {\n      this.#cache.set(data.id, data);\n    }\n    return data;\n  }\n  async getFromFile(file) {\n    const {\n      lastModified,\n      name,\n      size,\n      type\n    } = file;\n    return this.#get(`${lastModified}_${name}_${size}_${type}`, file);\n  }\n  async getFromUrl(url) {\n    return this.#get(url, url);\n  }\n  async getFromId(id) {\n    this.#cache ||= new Map();\n    const data = this.#cache.get(id);\n    if (!data) {\n      return null;\n    }\n    if (data.bitmap) {\n      data.refCounter += 1;\n      return data;\n    }\n    if (data.file) {\n      return this.getFromFile(data.file);\n    }\n    return this.getFromUrl(data.url);\n  }\n  getSvgUrl(id) {\n    const data = this.#cache.get(id);\n    if (!data?.isSvg) {\n      return null;\n    }\n    return data.svgUrl;\n  }\n  deleteId(id) {\n    this.#cache ||= new Map();\n    const data = this.#cache.get(id);\n    if (!data) {\n      return;\n    }\n    data.refCounter -= 1;\n    if (data.refCounter !== 0) {\n      return;\n    }\n    data.bitmap = null;\n  }\n  isValidId(id) {\n    return id.startsWith(`image_${this.#baseId}_`);\n  }\n}\nclass CommandManager {\n  #commands = [];\n  #locked = false;\n  #maxSize;\n  #position = -1;\n  constructor(maxSize = 128) {\n    this.#maxSize = maxSize;\n  }\n  add({\n    cmd,\n    undo,\n    post,\n    mustExec,\n    type = NaN,\n    overwriteIfSameType = false,\n    keepUndo = false\n  }) {\n    if (mustExec) {\n      cmd();\n    }\n    if (this.#locked) {\n      return;\n    }\n    const save = {\n      cmd,\n      undo,\n      post,\n      type\n    };\n    if (this.#position === -1) {\n      if (this.#commands.length > 0) {\n        this.#commands.length = 0;\n      }\n      this.#position = 0;\n      this.#commands.push(save);\n      return;\n    }\n    if (overwriteIfSameType && this.#commands[this.#position].type === type) {\n      if (keepUndo) {\n        save.undo = this.#commands[this.#position].undo;\n      }\n      this.#commands[this.#position] = save;\n      return;\n    }\n    const next = this.#position + 1;\n    if (next === this.#maxSize) {\n      this.#commands.splice(0, 1);\n    } else {\n      this.#position = next;\n      if (next < this.#commands.length) {\n        this.#commands.splice(next);\n      }\n    }\n    this.#commands.push(save);\n  }\n  undo() {\n    if (this.#position === -1) {\n      return;\n    }\n    this.#locked = true;\n    const {\n      undo,\n      post\n    } = this.#commands[this.#position];\n    undo();\n    post?.();\n    this.#locked = false;\n    this.#position -= 1;\n  }\n  redo() {\n    if (this.#position < this.#commands.length - 1) {\n      this.#position += 1;\n      this.#locked = true;\n      const {\n        cmd,\n        post\n      } = this.#commands[this.#position];\n      cmd();\n      post?.();\n      this.#locked = false;\n    }\n  }\n  hasSomethingToUndo() {\n    return this.#position !== -1;\n  }\n  hasSomethingToRedo() {\n    return this.#position < this.#commands.length - 1;\n  }\n  destroy() {\n    this.#commands = null;\n  }\n}\nclass KeyboardManager {\n  constructor(callbacks) {\n    this.buffer = [];\n    this.callbacks = new Map();\n    this.allKeys = new Set();\n    const {\n      isMac\n    } = util_FeatureTest.platform;\n    for (const [keys, callback, options = {}] of callbacks) {\n      for (const key of keys) {\n        const isMacKey = key.startsWith(\"mac+\");\n        if (isMac && isMacKey) {\n          this.callbacks.set(key.slice(4), {\n            callback,\n            options\n          });\n          this.allKeys.add(key.split(\"+\").at(-1));\n        } else if (!isMac && !isMacKey) {\n          this.callbacks.set(key, {\n            callback,\n            options\n          });\n          this.allKeys.add(key.split(\"+\").at(-1));\n        }\n      }\n    }\n  }\n  #serialize(event) {\n    if (event.altKey) {\n      this.buffer.push(\"alt\");\n    }\n    if (event.ctrlKey) {\n      this.buffer.push(\"ctrl\");\n    }\n    if (event.metaKey) {\n      this.buffer.push(\"meta\");\n    }\n    if (event.shiftKey) {\n      this.buffer.push(\"shift\");\n    }\n    this.buffer.push(event.key);\n    const str = this.buffer.join(\"+\");\n    this.buffer.length = 0;\n    return str;\n  }\n  exec(self, event) {\n    if (!this.allKeys.has(event.key)) {\n      return;\n    }\n    const info = this.callbacks.get(this.#serialize(event));\n    if (!info) {\n      return;\n    }\n    const {\n      callback,\n      options: {\n        bubbles = false,\n        args = [],\n        checker = null\n      }\n    } = info;\n    if (checker && !checker(self, event)) {\n      return;\n    }\n    callback.bind(self, ...args, event)();\n    if (!bubbles) {\n      event.stopPropagation();\n      event.preventDefault();\n    }\n  }\n}\nclass ColorManager {\n  static _colorsMapping = new Map([[\"CanvasText\", [0, 0, 0]], [\"Canvas\", [255, 255, 255]]]);\n  get _colors() {\n    const colors = new Map([[\"CanvasText\", null], [\"Canvas\", null]]);\n    getColorValues(colors);\n    return shadow(this, \"_colors\", colors);\n  }\n  convert(color) {\n    const rgb = getRGB(color);\n    if (!window.matchMedia(\"(forced-colors: active)\").matches) {\n      return rgb;\n    }\n    for (const [name, RGB] of this._colors) {\n      if (RGB.every((x, i) => x === rgb[i])) {\n        return ColorManager._colorsMapping.get(name);\n      }\n    }\n    return rgb;\n  }\n  getHexCode(name) {\n    const rgb = this._colors.get(name);\n    if (!rgb) {\n      return name;\n    }\n    return Util.makeHexColor(...rgb);\n  }\n}\nclass AnnotationEditorUIManager {\n  #activeEditor = null;\n  #allEditors = new Map();\n  #allLayers = new Map();\n  #altTextManager = null;\n  #annotationStorage = null;\n  #changedExistingAnnotations = null;\n  #commandManager = new CommandManager();\n  #currentPageIndex = 0;\n  #deletedAnnotationsElementIds = new Set();\n  #draggingEditors = null;\n  #editorTypes = null;\n  #editorsToRescale = new Set();\n  #enableHighlightFloatingButton = false;\n  #filterFactory = null;\n  #focusMainContainerTimeoutId = null;\n  #highlightColors = null;\n  #highlightWhenShiftUp = false;\n  #highlightToolbar = null;\n  #idManager = new IdManager();\n  #isEnabled = false;\n  #isWaiting = false;\n  #lastActiveElement = null;\n  #mainHighlightColorPicker = null;\n  #mlManager = null;\n  #mode = AnnotationEditorType.NONE;\n  #selectedEditors = new Set();\n  #selectedTextNode = null;\n  #pageColors = null;\n  #showAllStates = null;\n  #boundBlur = this.blur.bind(this);\n  #boundFocus = this.focus.bind(this);\n  #boundCopy = this.copy.bind(this);\n  #boundCut = this.cut.bind(this);\n  #boundPaste = this.paste.bind(this);\n  #boundKeydown = this.keydown.bind(this);\n  #boundKeyup = this.keyup.bind(this);\n  #boundOnEditingAction = this.onEditingAction.bind(this);\n  #boundOnPageChanging = this.onPageChanging.bind(this);\n  #boundOnScaleChanging = this.onScaleChanging.bind(this);\n  #boundSelectionChange = this.#selectionChange.bind(this);\n  #boundOnRotationChanging = this.onRotationChanging.bind(this);\n  #previousStates = {\n    isEditing: false,\n    isEmpty: true,\n    hasSomethingToUndo: false,\n    hasSomethingToRedo: false,\n    hasSelectedEditor: false,\n    hasSelectedText: false\n  };\n  #translation = [0, 0];\n  #translationTimeoutId = null;\n  #container = null;\n  #viewer = null;\n  static TRANSLATE_SMALL = 1;\n  static TRANSLATE_BIG = 10;\n  static get _keyboardManager() {\n    const proto = AnnotationEditorUIManager.prototype;\n    const arrowChecker = self => self.#container.contains(document.activeElement) && document.activeElement.tagName !== \"BUTTON\" && self.hasSomethingToControl();\n    const textInputChecker = (_self, {\n      target: el\n    }) => {\n      if (el instanceof HTMLInputElement) {\n        const {\n          type\n        } = el;\n        return type !== \"text\" && type !== \"number\";\n      }\n      return true;\n    };\n    const small = this.TRANSLATE_SMALL;\n    const big = this.TRANSLATE_BIG;\n    return shadow(this, \"_keyboardManager\", new KeyboardManager([[[\"ctrl+a\", \"mac+meta+a\"], proto.selectAll, {\n      checker: textInputChecker\n    }], [[\"ctrl+z\", \"mac+meta+z\"], proto.undo, {\n      checker: textInputChecker\n    }], [[\"ctrl+y\", \"ctrl+shift+z\", \"mac+meta+shift+z\", \"ctrl+shift+Z\", \"mac+meta+shift+Z\"], proto.redo, {\n      checker: textInputChecker\n    }], [[\"Backspace\", \"alt+Backspace\", \"ctrl+Backspace\", \"shift+Backspace\", \"mac+Backspace\", \"mac+alt+Backspace\", \"mac+ctrl+Backspace\", \"Delete\", \"ctrl+Delete\", \"shift+Delete\", \"mac+Delete\"], proto.delete, {\n      checker: textInputChecker\n    }], [[\"Enter\", \"mac+Enter\"], proto.addNewEditorFromKeyboard, {\n      checker: (self, {\n        target: el\n      }) => !(el instanceof HTMLButtonElement) && self.#container.contains(el) && !self.isEnterHandled\n    }], [[\" \", \"mac+ \"], proto.addNewEditorFromKeyboard, {\n      checker: (self, {\n        target: el\n      }) => !(el instanceof HTMLButtonElement) && self.#container.contains(document.activeElement)\n    }], [[\"Escape\", \"mac+Escape\"], proto.unselectAll], [[\"ArrowLeft\", \"mac+ArrowLeft\"], proto.translateSelectedEditors, {\n      args: [-small, 0],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"], proto.translateSelectedEditors, {\n      args: [-big, 0],\n      checker: arrowChecker\n    }], [[\"ArrowRight\", \"mac+ArrowRight\"], proto.translateSelectedEditors, {\n      args: [small, 0],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"], proto.translateSelectedEditors, {\n      args: [big, 0],\n      checker: arrowChecker\n    }], [[\"ArrowUp\", \"mac+ArrowUp\"], proto.translateSelectedEditors, {\n      args: [0, -small],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"], proto.translateSelectedEditors, {\n      args: [0, -big],\n      checker: arrowChecker\n    }], [[\"ArrowDown\", \"mac+ArrowDown\"], proto.translateSelectedEditors, {\n      args: [0, small],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"], proto.translateSelectedEditors, {\n      args: [0, big],\n      checker: arrowChecker\n    }]]));\n  }\n  constructor(container, viewer, altTextManager, eventBus, pdfDocument, pageColors, highlightColors, enableHighlightFloatingButton, mlManager) {\n    this.#container = container;\n    this.#viewer = viewer;\n    this.#altTextManager = altTextManager;\n    this._eventBus = eventBus;\n    this._eventBus._on(\"editingaction\", this.#boundOnEditingAction);\n    this._eventBus._on(\"pagechanging\", this.#boundOnPageChanging);\n    this._eventBus._on(\"scalechanging\", this.#boundOnScaleChanging);\n    this._eventBus._on(\"rotationchanging\", this.#boundOnRotationChanging);\n    this.#addSelectionListener();\n    this.#addKeyboardManager();\n    this.#annotationStorage = pdfDocument.annotationStorage;\n    this.#filterFactory = pdfDocument.filterFactory;\n    this.#pageColors = pageColors;\n    this.#highlightColors = highlightColors || null;\n    this.#enableHighlightFloatingButton = enableHighlightFloatingButton;\n    this.#mlManager = mlManager || null;\n    this.viewParameters = {\n      realScale: PixelsPerInch.PDF_TO_CSS_UNITS,\n      rotation: 0\n    };\n    this.isShiftKeyDown = false;\n  }\n  destroy() {\n    this.#removeKeyboardManager();\n    this.#removeFocusManager();\n    this._eventBus._off(\"editingaction\", this.#boundOnEditingAction);\n    this._eventBus._off(\"pagechanging\", this.#boundOnPageChanging);\n    this._eventBus._off(\"scalechanging\", this.#boundOnScaleChanging);\n    this._eventBus._off(\"rotationchanging\", this.#boundOnRotationChanging);\n    for (const layer of this.#allLayers.values()) {\n      layer.destroy();\n    }\n    this.#allLayers.clear();\n    this.#allEditors.clear();\n    this.#editorsToRescale.clear();\n    this.#activeEditor = null;\n    this.#selectedEditors.clear();\n    this.#commandManager.destroy();\n    this.#altTextManager?.destroy();\n    this.#highlightToolbar?.hide();\n    this.#highlightToolbar = null;\n    if (this.#focusMainContainerTimeoutId) {\n      clearTimeout(this.#focusMainContainerTimeoutId);\n      this.#focusMainContainerTimeoutId = null;\n    }\n    if (this.#translationTimeoutId) {\n      clearTimeout(this.#translationTimeoutId);\n      this.#translationTimeoutId = null;\n    }\n    this.#removeSelectionListener();\n  }\n  async mlGuess(data) {\n    return this.#mlManager?.guess(data) || null;\n  }\n  get hasMLManager() {\n    return !!this.#mlManager;\n  }\n  get hcmFilter() {\n    return shadow(this, \"hcmFilter\", this.#pageColors ? this.#filterFactory.addHCMFilter(this.#pageColors.foreground, this.#pageColors.background) : \"none\");\n  }\n  get direction() {\n    return shadow(this, \"direction\", getComputedStyle(this.#container).direction);\n  }\n  get highlightColors() {\n    return shadow(this, \"highlightColors\", this.#highlightColors ? new Map(this.#highlightColors.split(\",\").map(pair => pair.split(\"=\").map(x => x.trim()))) : null);\n  }\n  get highlightColorNames() {\n    return shadow(this, \"highlightColorNames\", this.highlightColors ? new Map(Array.from(this.highlightColors, e => e.reverse())) : null);\n  }\n  setMainHighlightColorPicker(colorPicker) {\n    this.#mainHighlightColorPicker = colorPicker;\n  }\n  editAltText(editor) {\n    this.#altTextManager?.editAltText(this, editor);\n  }\n  onPageChanging({\n    pageNumber\n  }) {\n    this.#currentPageIndex = pageNumber - 1;\n  }\n  focusMainContainer() {\n    this.#container.focus();\n  }\n  findParent(x, y) {\n    for (const layer of this.#allLayers.values()) {\n      const {\n        x: layerX,\n        y: layerY,\n        width,\n        height\n      } = layer.div.getBoundingClientRect();\n      if (x >= layerX && x <= layerX + width && y >= layerY && y <= layerY + height) {\n        return layer;\n      }\n    }\n    return null;\n  }\n  disableUserSelect(value = false) {\n    this.#viewer.classList.toggle(\"noUserSelect\", value);\n  }\n  addShouldRescale(editor) {\n    this.#editorsToRescale.add(editor);\n  }\n  removeShouldRescale(editor) {\n    this.#editorsToRescale.delete(editor);\n  }\n  onScaleChanging({\n    scale\n  }) {\n    this.commitOrRemove();\n    this.viewParameters.realScale = scale * PixelsPerInch.PDF_TO_CSS_UNITS;\n    for (const editor of this.#editorsToRescale) {\n      editor.onScaleChanging();\n    }\n  }\n  onRotationChanging({\n    pagesRotation\n  }) {\n    this.commitOrRemove();\n    this.viewParameters.rotation = pagesRotation;\n  }\n  #getAnchorElementForSelection({\n    anchorNode\n  }) {\n    return anchorNode.nodeType === Node.TEXT_NODE ? anchorNode.parentElement : anchorNode;\n  }\n  highlightSelection(methodOfCreation = \"\") {\n    const selection = document.getSelection();\n    if (!selection || selection.isCollapsed) {\n      return;\n    }\n    const {\n      anchorNode,\n      anchorOffset,\n      focusNode,\n      focusOffset\n    } = selection;\n    const text = selection.toString();\n    const anchorElement = this.#getAnchorElementForSelection(selection);\n    const textLayer = anchorElement.closest(\".textLayer\");\n    const boxes = this.getSelectionBoxes(textLayer);\n    if (!boxes) {\n      return;\n    }\n    selection.empty();\n    if (this.#mode === AnnotationEditorType.NONE) {\n      this._eventBus.dispatch(\"showannotationeditorui\", {\n        source: this,\n        mode: AnnotationEditorType.HIGHLIGHT\n      });\n      this.showAllEditors(\"highlight\", true, true);\n    }\n    for (const layer of this.#allLayers.values()) {\n      if (layer.hasTextLayer(textLayer)) {\n        layer.createAndAddNewEditor({\n          x: 0,\n          y: 0\n        }, false, {\n          methodOfCreation,\n          boxes,\n          anchorNode,\n          anchorOffset,\n          focusNode,\n          focusOffset,\n          text\n        });\n        break;\n      }\n    }\n  }\n  #displayHighlightToolbar() {\n    const selection = document.getSelection();\n    if (!selection || selection.isCollapsed) {\n      return;\n    }\n    const anchorElement = this.#getAnchorElementForSelection(selection);\n    const textLayer = anchorElement.closest(\".textLayer\");\n    const boxes = this.getSelectionBoxes(textLayer);\n    if (!boxes) {\n      return;\n    }\n    this.#highlightToolbar ||= new HighlightToolbar(this);\n    this.#highlightToolbar.show(textLayer, boxes, this.direction === \"ltr\");\n  }\n  addToAnnotationStorage(editor) {\n    if (!editor.isEmpty() && this.#annotationStorage && !this.#annotationStorage.has(editor.id)) {\n      this.#annotationStorage.setValue(editor.id, editor);\n    }\n  }\n  #selectionChange() {\n    const selection = document.getSelection();\n    if (!selection || selection.isCollapsed) {\n      if (this.#selectedTextNode) {\n        this.#highlightToolbar?.hide();\n        this.#selectedTextNode = null;\n        this.#dispatchUpdateStates({\n          hasSelectedText: false\n        });\n      }\n      return;\n    }\n    const {\n      anchorNode\n    } = selection;\n    if (anchorNode === this.#selectedTextNode) {\n      return;\n    }\n    const anchorElement = this.#getAnchorElementForSelection(selection);\n    const textLayer = anchorElement.closest(\".textLayer\");\n    if (!textLayer) {\n      if (this.#selectedTextNode) {\n        this.#highlightToolbar?.hide();\n        this.#selectedTextNode = null;\n        this.#dispatchUpdateStates({\n          hasSelectedText: false\n        });\n      }\n      return;\n    }\n    this.#highlightToolbar?.hide();\n    this.#selectedTextNode = anchorNode;\n    this.#dispatchUpdateStates({\n      hasSelectedText: true\n    });\n    if (this.#mode !== AnnotationEditorType.HIGHLIGHT && this.#mode !== AnnotationEditorType.NONE) {\n      return;\n    }\n    if (this.#mode === AnnotationEditorType.HIGHLIGHT) {\n      this.showAllEditors(\"highlight\", true, true);\n    }\n    this.#highlightWhenShiftUp = this.isShiftKeyDown;\n    if (!this.isShiftKeyDown) {\n      const pointerup = e => {\n        if (e.type === \"pointerup\" && e.button !== 0) {\n          return;\n        }\n        window.removeEventListener(\"pointerup\", pointerup);\n        window.removeEventListener(\"blur\", pointerup);\n        if (e.type === \"pointerup\") {\n          this.#onSelectEnd(\"main_toolbar\");\n        }\n      };\n      window.addEventListener(\"pointerup\", pointerup);\n      window.addEventListener(\"blur\", pointerup);\n    }\n  }\n  #onSelectEnd(methodOfCreation = \"\") {\n    if (this.#mode === AnnotationEditorType.HIGHLIGHT) {\n      this.highlightSelection(methodOfCreation);\n    } else if (this.#enableHighlightFloatingButton) {\n      this.#displayHighlightToolbar();\n    }\n  }\n  #addSelectionListener() {\n    document.addEventListener(\"selectionchange\", this.#boundSelectionChange);\n  }\n  #removeSelectionListener() {\n    document.removeEventListener(\"selectionchange\", this.#boundSelectionChange);\n  }\n  #addFocusManager() {\n    window.addEventListener(\"focus\", this.#boundFocus);\n    window.addEventListener(\"blur\", this.#boundBlur);\n  }\n  #removeFocusManager() {\n    window.removeEventListener(\"focus\", this.#boundFocus);\n    window.removeEventListener(\"blur\", this.#boundBlur);\n  }\n  blur() {\n    this.isShiftKeyDown = false;\n    if (this.#highlightWhenShiftUp) {\n      this.#highlightWhenShiftUp = false;\n      this.#onSelectEnd(\"main_toolbar\");\n    }\n    if (!this.hasSelection) {\n      return;\n    }\n    const {\n      activeElement\n    } = document;\n    for (const editor of this.#selectedEditors) {\n      if (editor.div.contains(activeElement)) {\n        this.#lastActiveElement = [editor, activeElement];\n        editor._focusEventsAllowed = false;\n        break;\n      }\n    }\n  }\n  focus() {\n    if (!this.#lastActiveElement) {\n      return;\n    }\n    const [lastEditor, lastActiveElement] = this.#lastActiveElement;\n    this.#lastActiveElement = null;\n    lastActiveElement.addEventListener(\"focusin\", () => {\n      lastEditor._focusEventsAllowed = true;\n    }, {\n      once: true\n    });\n    lastActiveElement.focus();\n  }\n  #addKeyboardManager() {\n    window.addEventListener(\"keydown\", this.#boundKeydown);\n    window.addEventListener(\"keyup\", this.#boundKeyup);\n  }\n  #removeKeyboardManager() {\n    window.removeEventListener(\"keydown\", this.#boundKeydown);\n    window.removeEventListener(\"keyup\", this.#boundKeyup);\n  }\n  #addCopyPasteListeners() {\n    document.addEventListener(\"copy\", this.#boundCopy);\n    document.addEventListener(\"cut\", this.#boundCut);\n    document.addEventListener(\"paste\", this.#boundPaste);\n  }\n  #removeCopyPasteListeners() {\n    document.removeEventListener(\"copy\", this.#boundCopy);\n    document.removeEventListener(\"cut\", this.#boundCut);\n    document.removeEventListener(\"paste\", this.#boundPaste);\n  }\n  addEditListeners() {\n    this.#addKeyboardManager();\n    this.#addCopyPasteListeners();\n  }\n  removeEditListeners() {\n    this.#removeKeyboardManager();\n    this.#removeCopyPasteListeners();\n  }\n  copy(event) {\n    event.preventDefault();\n    this.#activeEditor?.commitOrRemove();\n    if (!this.hasSelection) {\n      return;\n    }\n    const editors = [];\n    for (const editor of this.#selectedEditors) {\n      const serialized = editor.serialize(true);\n      if (serialized) {\n        editors.push(serialized);\n      }\n    }\n    if (editors.length === 0) {\n      return;\n    }\n    event.clipboardData.setData(\"application/pdfjs\", JSON.stringify(editors));\n  }\n  cut(event) {\n    this.copy(event);\n    this.delete();\n  }\n  paste(event) {\n    event.preventDefault();\n    const {\n      clipboardData\n    } = event;\n    for (const item of clipboardData.items) {\n      for (const editorType of this.#editorTypes) {\n        if (editorType.isHandlingMimeForPasting(item.type)) {\n          editorType.paste(item, this.currentLayer);\n          return;\n        }\n      }\n    }\n    let data = clipboardData.getData(\"application/pdfjs\");\n    if (!data) {\n      return;\n    }\n    try {\n      data = JSON.parse(data);\n    } catch (ex) {\n      warn(`paste: \"${ex.message}\".`);\n      return;\n    }\n    if (!Array.isArray(data)) {\n      return;\n    }\n    this.unselectAll();\n    const layer = this.currentLayer;\n    try {\n      const newEditors = [];\n      for (const editor of data) {\n        const deserializedEditor = layer.deserialize(editor);\n        if (!deserializedEditor) {\n          return;\n        }\n        newEditors.push(deserializedEditor);\n      }\n      const cmd = () => {\n        for (const editor of newEditors) {\n          this.#addEditorToLayer(editor);\n        }\n        this.#selectEditors(newEditors);\n      };\n      const undo = () => {\n        for (const editor of newEditors) {\n          editor.remove();\n        }\n      };\n      this.addCommands({\n        cmd,\n        undo,\n        mustExec: true\n      });\n    } catch (ex) {\n      warn(`paste: \"${ex.message}\".`);\n    }\n  }\n  keydown(event) {\n    if (!this.isShiftKeyDown && event.key === \"Shift\") {\n      this.isShiftKeyDown = true;\n    }\n    if (this.#mode !== AnnotationEditorType.NONE && !this.isEditorHandlingKeyboard) {\n      AnnotationEditorUIManager._keyboardManager.exec(this, event);\n    }\n  }\n  keyup(event) {\n    if (this.isShiftKeyDown && event.key === \"Shift\") {\n      this.isShiftKeyDown = false;\n      if (this.#highlightWhenShiftUp) {\n        this.#highlightWhenShiftUp = false;\n        this.#onSelectEnd(\"main_toolbar\");\n      }\n    }\n  }\n  onEditingAction({\n    name\n  }) {\n    switch (name) {\n      case \"undo\":\n      case \"redo\":\n      case \"delete\":\n      case \"selectAll\":\n        this[name]();\n        break;\n      case \"highlightSelection\":\n        this.highlightSelection(\"context_menu\");\n        break;\n    }\n  }\n  #dispatchUpdateStates(details) {\n    const hasChanged = Object.entries(details).some(([key, value]) => this.#previousStates[key] !== value);\n    if (hasChanged) {\n      this._eventBus.dispatch(\"annotationeditorstateschanged\", {\n        source: this,\n        details: Object.assign(this.#previousStates, details)\n      });\n      if (this.#mode === AnnotationEditorType.HIGHLIGHT && details.hasSelectedEditor === false) {\n        this.#dispatchUpdateUI([[AnnotationEditorParamsType.HIGHLIGHT_FREE, true]]);\n      }\n    }\n  }\n  #dispatchUpdateUI(details) {\n    this._eventBus.dispatch(\"annotationeditorparamschanged\", {\n      source: this,\n      details\n    });\n  }\n  setEditingState(isEditing) {\n    if (isEditing) {\n      this.#addFocusManager();\n      this.#addCopyPasteListeners();\n      this.#dispatchUpdateStates({\n        isEditing: this.#mode !== AnnotationEditorType.NONE,\n        isEmpty: this.#isEmpty(),\n        hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(),\n        hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(),\n        hasSelectedEditor: false\n      });\n    } else {\n      this.#removeFocusManager();\n      this.#removeCopyPasteListeners();\n      this.#dispatchUpdateStates({\n        isEditing: false\n      });\n      this.disableUserSelect(false);\n    }\n  }\n  registerEditorTypes(types) {\n    if (this.#editorTypes) {\n      return;\n    }\n    this.#editorTypes = types;\n    for (const editorType of this.#editorTypes) {\n      this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate);\n    }\n  }\n  getId() {\n    return this.#idManager.id;\n  }\n  get currentLayer() {\n    return this.#allLayers.get(this.#currentPageIndex);\n  }\n  getLayer(pageIndex) {\n    return this.#allLayers.get(pageIndex);\n  }\n  get currentPageIndex() {\n    return this.#currentPageIndex;\n  }\n  addLayer(layer) {\n    this.#allLayers.set(layer.pageIndex, layer);\n    if (this.#isEnabled) {\n      layer.enable();\n    } else {\n      layer.disable();\n    }\n  }\n  removeLayer(layer) {\n    this.#allLayers.delete(layer.pageIndex);\n  }\n  updateMode(mode, editId = null, isFromKeyboard = false) {\n    if (this.#mode === mode) {\n      return;\n    }\n    this.#mode = mode;\n    if (mode === AnnotationEditorType.NONE) {\n      this.setEditingState(false);\n      this.#disableAll();\n      return;\n    }\n    this.setEditingState(true);\n    this.#enableAll();\n    this.unselectAll();\n    for (const layer of this.#allLayers.values()) {\n      layer.updateMode(mode);\n    }\n    if (!editId && isFromKeyboard) {\n      this.addNewEditorFromKeyboard();\n      return;\n    }\n    if (!editId) {\n      return;\n    }\n    for (const editor of this.#allEditors.values()) {\n      if (editor.annotationElementId === editId) {\n        this.setSelected(editor);\n        editor.enterInEditMode();\n        break;\n      }\n    }\n  }\n  addNewEditorFromKeyboard() {\n    if (this.currentLayer.canCreateNewEmptyEditor()) {\n      this.currentLayer.addNewEditor();\n    }\n  }\n  updateToolbar(mode) {\n    if (mode === this.#mode) {\n      return;\n    }\n    this._eventBus.dispatch(\"switchannotationeditormode\", {\n      source: this,\n      mode\n    });\n  }\n  updateParams(type, value) {\n    if (!this.#editorTypes) {\n      return;\n    }\n    switch (type) {\n      case AnnotationEditorParamsType.CREATE:\n        this.currentLayer.addNewEditor();\n        return;\n      case AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR:\n        this.#mainHighlightColorPicker?.updateColor(value);\n        break;\n      case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL:\n        this._eventBus.dispatch(\"reporttelemetry\", {\n          source: this,\n          details: {\n            type: \"editing\",\n            data: {\n              type: \"highlight\",\n              action: \"toggle_visibility\"\n            }\n          }\n        });\n        (this.#showAllStates ||= new Map()).set(type, value);\n        this.showAllEditors(\"highlight\", value);\n        break;\n    }\n    for (const editor of this.#selectedEditors) {\n      editor.updateParams(type, value);\n    }\n    for (const editorType of this.#editorTypes) {\n      editorType.updateDefaultParams(type, value);\n    }\n  }\n  showAllEditors(type, visible, updateButton = false) {\n    for (const editor of this.#allEditors.values()) {\n      if (editor.editorType === type) {\n        editor.show(visible);\n      }\n    }\n    const state = this.#showAllStates?.get(AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL) ?? true;\n    if (state !== visible) {\n      this.#dispatchUpdateUI([[AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL, visible]]);\n    }\n  }\n  enableWaiting(mustWait = false) {\n    if (this.#isWaiting === mustWait) {\n      return;\n    }\n    this.#isWaiting = mustWait;\n    for (const layer of this.#allLayers.values()) {\n      if (mustWait) {\n        layer.disableClick();\n      } else {\n        layer.enableClick();\n      }\n      layer.div.classList.toggle(\"waiting\", mustWait);\n    }\n  }\n  #enableAll() {\n    if (!this.#isEnabled) {\n      this.#isEnabled = true;\n      for (const layer of this.#allLayers.values()) {\n        layer.enable();\n      }\n      for (const editor of this.#allEditors.values()) {\n        editor.enable();\n      }\n    }\n  }\n  #disableAll() {\n    this.unselectAll();\n    if (this.#isEnabled) {\n      this.#isEnabled = false;\n      for (const layer of this.#allLayers.values()) {\n        layer.disable();\n      }\n      for (const editor of this.#allEditors.values()) {\n        editor.disable();\n      }\n    }\n  }\n  getEditors(pageIndex) {\n    const editors = [];\n    for (const editor of this.#allEditors.values()) {\n      if (editor.pageIndex === pageIndex) {\n        editors.push(editor);\n      }\n    }\n    return editors;\n  }\n  getEditor(id) {\n    return this.#allEditors.get(id);\n  }\n  addEditor(editor) {\n    this.#allEditors.set(editor.id, editor);\n  }\n  removeEditor(editor) {\n    if (editor.div.contains(document.activeElement)) {\n      if (this.#focusMainContainerTimeoutId) {\n        clearTimeout(this.#focusMainContainerTimeoutId);\n      }\n      this.#focusMainContainerTimeoutId = setTimeout(() => {\n        this.focusMainContainer();\n        this.#focusMainContainerTimeoutId = null;\n      }, 0);\n    }\n    this.#allEditors.delete(editor.id);\n    this.unselect(editor);\n    if (!editor.annotationElementId || !this.#deletedAnnotationsElementIds.has(editor.annotationElementId)) {\n      this.#annotationStorage?.remove(editor.id);\n    }\n  }\n  addDeletedAnnotationElement(editor) {\n    this.#deletedAnnotationsElementIds.add(editor.annotationElementId);\n    this.addChangedExistingAnnotation(editor);\n    editor.deleted = true;\n  }\n  isDeletedAnnotationElement(annotationElementId) {\n    return this.#deletedAnnotationsElementIds.has(annotationElementId);\n  }\n  removeDeletedAnnotationElement(editor) {\n    this.#deletedAnnotationsElementIds.delete(editor.annotationElementId);\n    this.removeChangedExistingAnnotation(editor);\n    editor.deleted = false;\n  }\n  #addEditorToLayer(editor) {\n    const layer = this.#allLayers.get(editor.pageIndex);\n    if (layer) {\n      layer.addOrRebuild(editor);\n    } else {\n      this.addEditor(editor);\n      this.addToAnnotationStorage(editor);\n    }\n  }\n  setActiveEditor(editor) {\n    if (this.#activeEditor === editor) {\n      return;\n    }\n    this.#activeEditor = editor;\n    if (editor) {\n      this.#dispatchUpdateUI(editor.propertiesToUpdate);\n    }\n  }\n  get #lastSelectedEditor() {\n    let ed = null;\n    for (ed of this.#selectedEditors) {}\n    return ed;\n  }\n  updateUI(editor) {\n    if (this.#lastSelectedEditor === editor) {\n      this.#dispatchUpdateUI(editor.propertiesToUpdate);\n    }\n  }\n  toggleSelected(editor) {\n    if (this.#selectedEditors.has(editor)) {\n      this.#selectedEditors.delete(editor);\n      editor.unselect();\n      this.#dispatchUpdateStates({\n        hasSelectedEditor: this.hasSelection\n      });\n      return;\n    }\n    this.#selectedEditors.add(editor);\n    editor.select();\n    this.#dispatchUpdateUI(editor.propertiesToUpdate);\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: true\n    });\n  }\n  setSelected(editor) {\n    for (const ed of this.#selectedEditors) {\n      if (ed !== editor) {\n        ed.unselect();\n      }\n    }\n    this.#selectedEditors.clear();\n    this.#selectedEditors.add(editor);\n    editor.select();\n    this.#dispatchUpdateUI(editor.propertiesToUpdate);\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: true\n    });\n  }\n  isSelected(editor) {\n    return this.#selectedEditors.has(editor);\n  }\n  get firstSelectedEditor() {\n    return this.#selectedEditors.values().next().value;\n  }\n  unselect(editor) {\n    editor.unselect();\n    this.#selectedEditors.delete(editor);\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: this.hasSelection\n    });\n  }\n  get hasSelection() {\n    return this.#selectedEditors.size !== 0;\n  }\n  get isEnterHandled() {\n    return this.#selectedEditors.size === 1 && this.firstSelectedEditor.isEnterHandled;\n  }\n  undo() {\n    this.#commandManager.undo();\n    this.#dispatchUpdateStates({\n      hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(),\n      hasSomethingToRedo: true,\n      isEmpty: this.#isEmpty()\n    });\n  }\n  redo() {\n    this.#commandManager.redo();\n    this.#dispatchUpdateStates({\n      hasSomethingToUndo: true,\n      hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(),\n      isEmpty: this.#isEmpty()\n    });\n  }\n  addCommands(params) {\n    this.#commandManager.add(params);\n    this.#dispatchUpdateStates({\n      hasSomethingToUndo: true,\n      hasSomethingToRedo: false,\n      isEmpty: this.#isEmpty()\n    });\n  }\n  #isEmpty() {\n    if (this.#allEditors.size === 0) {\n      return true;\n    }\n    if (this.#allEditors.size === 1) {\n      for (const editor of this.#allEditors.values()) {\n        return editor.isEmpty();\n      }\n    }\n    return false;\n  }\n  delete() {\n    this.commitOrRemove();\n    if (!this.hasSelection) {\n      return;\n    }\n    const editors = [...this.#selectedEditors];\n    const cmd = () => {\n      for (const editor of editors) {\n        editor.remove();\n      }\n    };\n    const undo = () => {\n      for (const editor of editors) {\n        this.#addEditorToLayer(editor);\n      }\n    };\n    this.addCommands({\n      cmd,\n      undo,\n      mustExec: true\n    });\n  }\n  commitOrRemove() {\n    this.#activeEditor?.commitOrRemove();\n  }\n  hasSomethingToControl() {\n    return this.#activeEditor || this.hasSelection;\n  }\n  #selectEditors(editors) {\n    for (const editor of this.#selectedEditors) {\n      editor.unselect();\n    }\n    this.#selectedEditors.clear();\n    for (const editor of editors) {\n      if (editor.isEmpty()) {\n        continue;\n      }\n      this.#selectedEditors.add(editor);\n      editor.select();\n    }\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: this.hasSelection\n    });\n  }\n  selectAll() {\n    for (const editor of this.#selectedEditors) {\n      editor.commit();\n    }\n    this.#selectEditors(this.#allEditors.values());\n  }\n  unselectAll() {\n    if (this.#activeEditor) {\n      this.#activeEditor.commitOrRemove();\n      if (this.#mode !== AnnotationEditorType.NONE) {\n        return;\n      }\n    }\n    if (!this.hasSelection) {\n      return;\n    }\n    for (const editor of this.#selectedEditors) {\n      editor.unselect();\n    }\n    this.#selectedEditors.clear();\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: false\n    });\n  }\n  translateSelectedEditors(x, y, noCommit = false) {\n    if (!noCommit) {\n      this.commitOrRemove();\n    }\n    if (!this.hasSelection) {\n      return;\n    }\n    this.#translation[0] += x;\n    this.#translation[1] += y;\n    const [totalX, totalY] = this.#translation;\n    const editors = [...this.#selectedEditors];\n    const TIME_TO_WAIT = 1000;\n    if (this.#translationTimeoutId) {\n      clearTimeout(this.#translationTimeoutId);\n    }\n    this.#translationTimeoutId = setTimeout(() => {\n      this.#translationTimeoutId = null;\n      this.#translation[0] = this.#translation[1] = 0;\n      this.addCommands({\n        cmd: () => {\n          for (const editor of editors) {\n            if (this.#allEditors.has(editor.id)) {\n              editor.translateInPage(totalX, totalY);\n            }\n          }\n        },\n        undo: () => {\n          for (const editor of editors) {\n            if (this.#allEditors.has(editor.id)) {\n              editor.translateInPage(-totalX, -totalY);\n            }\n          }\n        },\n        mustExec: false\n      });\n    }, TIME_TO_WAIT);\n    for (const editor of editors) {\n      editor.translateInPage(x, y);\n    }\n  }\n  setUpDragSession() {\n    if (!this.hasSelection) {\n      return;\n    }\n    this.disableUserSelect(true);\n    this.#draggingEditors = new Map();\n    for (const editor of this.#selectedEditors) {\n      this.#draggingEditors.set(editor, {\n        savedX: editor.x,\n        savedY: editor.y,\n        savedPageIndex: editor.pageIndex,\n        newX: 0,\n        newY: 0,\n        newPageIndex: -1\n      });\n    }\n  }\n  endDragSession() {\n    if (!this.#draggingEditors) {\n      return false;\n    }\n    this.disableUserSelect(false);\n    const map = this.#draggingEditors;\n    this.#draggingEditors = null;\n    let mustBeAddedInUndoStack = false;\n    for (const [{\n      x,\n      y,\n      pageIndex\n    }, value] of map) {\n      value.newX = x;\n      value.newY = y;\n      value.newPageIndex = pageIndex;\n      mustBeAddedInUndoStack ||= x !== value.savedX || y !== value.savedY || pageIndex !== value.savedPageIndex;\n    }\n    if (!mustBeAddedInUndoStack) {\n      return false;\n    }\n    const move = (editor, x, y, pageIndex) => {\n      if (this.#allEditors.has(editor.id)) {\n        const parent = this.#allLayers.get(pageIndex);\n        if (parent) {\n          editor._setParentAndPosition(parent, x, y);\n        } else {\n          editor.pageIndex = pageIndex;\n          editor.x = x;\n          editor.y = y;\n        }\n      }\n    };\n    this.addCommands({\n      cmd: () => {\n        for (const [editor, {\n          newX,\n          newY,\n          newPageIndex\n        }] of map) {\n          move(editor, newX, newY, newPageIndex);\n        }\n      },\n      undo: () => {\n        for (const [editor, {\n          savedX,\n          savedY,\n          savedPageIndex\n        }] of map) {\n          move(editor, savedX, savedY, savedPageIndex);\n        }\n      },\n      mustExec: true\n    });\n    return true;\n  }\n  dragSelectedEditors(tx, ty) {\n    if (!this.#draggingEditors) {\n      return;\n    }\n    for (const editor of this.#draggingEditors.keys()) {\n      editor.drag(tx, ty);\n    }\n  }\n  rebuild(editor) {\n    if (editor.parent === null) {\n      const parent = this.getLayer(editor.pageIndex);\n      if (parent) {\n        parent.changeParent(editor);\n        parent.addOrRebuild(editor);\n      } else {\n        this.addEditor(editor);\n        this.addToAnnotationStorage(editor);\n        editor.rebuild();\n      }\n    } else {\n      editor.parent.addOrRebuild(editor);\n    }\n  }\n  get isEditorHandlingKeyboard() {\n    return this.getActive()?.shouldGetKeyboardEvents() || this.#selectedEditors.size === 1 && this.firstSelectedEditor.shouldGetKeyboardEvents();\n  }\n  isActive(editor) {\n    return this.#activeEditor === editor;\n  }\n  getActive() {\n    return this.#activeEditor;\n  }\n  getMode() {\n    return this.#mode;\n  }\n  get imageManager() {\n    return shadow(this, \"imageManager\", new ImageManager());\n  }\n  getSelectionBoxes(textLayer) {\n    if (!textLayer) {\n      return null;\n    }\n    const selection = document.getSelection();\n    for (let i = 0, ii = selection.rangeCount; i < ii; i++) {\n      if (!textLayer.contains(selection.getRangeAt(i).commonAncestorContainer)) {\n        return null;\n      }\n    }\n    const {\n      x: layerX,\n      y: layerY,\n      width: parentWidth,\n      height: parentHeight\n    } = textLayer.getBoundingClientRect();\n    let rotator;\n    switch (textLayer.getAttribute(\"data-main-rotation\")) {\n      case \"90\":\n        rotator = (x, y, w, h) => ({\n          x: (y - layerY) / parentHeight,\n          y: 1 - (x + w - layerX) / parentWidth,\n          width: h / parentHeight,\n          height: w / parentWidth\n        });\n        break;\n      case \"180\":\n        rotator = (x, y, w, h) => ({\n          x: 1 - (x + w - layerX) / parentWidth,\n          y: 1 - (y + h - layerY) / parentHeight,\n          width: w / parentWidth,\n          height: h / parentHeight\n        });\n        break;\n      case \"270\":\n        rotator = (x, y, w, h) => ({\n          x: 1 - (y + h - layerY) / parentHeight,\n          y: (x - layerX) / parentWidth,\n          width: h / parentHeight,\n          height: w / parentWidth\n        });\n        break;\n      default:\n        rotator = (x, y, w, h) => ({\n          x: (x - layerX) / parentWidth,\n          y: (y - layerY) / parentHeight,\n          width: w / parentWidth,\n          height: h / parentHeight\n        });\n        break;\n    }\n    const boxes = [];\n    for (let i = 0, ii = selection.rangeCount; i < ii; i++) {\n      const range = selection.getRangeAt(i);\n      if (range.collapsed) {\n        continue;\n      }\n      for (const {\n        x,\n        y,\n        width,\n        height\n      } of range.getClientRects()) {\n        if (width === 0 || height === 0) {\n          continue;\n        }\n        boxes.push(rotator(x, y, width, height));\n      }\n    }\n    return boxes.length === 0 ? null : boxes;\n  }\n  addChangedExistingAnnotation({\n    annotationElementId,\n    id\n  }) {\n    (this.#changedExistingAnnotations ||= new Map()).set(annotationElementId, id);\n  }\n  removeChangedExistingAnnotation({\n    annotationElementId\n  }) {\n    this.#changedExistingAnnotations?.delete(annotationElementId);\n  }\n  renderAnnotationElement(annotation) {\n    const editorId = this.#changedExistingAnnotations?.get(annotation.data.id);\n    if (!editorId) {\n      return;\n    }\n    const editor = this.#annotationStorage.getRawValue(editorId);\n    if (!editor) {\n      return;\n    }\n    if (this.#mode === AnnotationEditorType.NONE && !editor.hasBeenModified) {\n      return;\n    }\n    editor.renderAnnotationElement(annotation);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/editor/alt_text.js\n\nclass AltText {\n  #altText = \"\";\n  #altTextDecorative = false;\n  #altTextButton = null;\n  #altTextTooltip = null;\n  #altTextTooltipTimeout = null;\n  #altTextWasFromKeyBoard = false;\n  #editor = null;\n  static _l10nPromise = null;\n  constructor(editor) {\n    this.#editor = editor;\n  }\n  static initialize(l10nPromise) {\n    AltText._l10nPromise ||= l10nPromise;\n  }\n  async render() {\n    const altText = this.#altTextButton = document.createElement(\"button\");\n    altText.className = \"altText\";\n    const msg = await AltText._l10nPromise.get(\"pdfjs-editor-alt-text-button-label\");\n    altText.textContent = msg;\n    altText.setAttribute(\"aria-label\", msg);\n    altText.tabIndex = \"0\";\n    altText.addEventListener(\"contextmenu\", noContextMenu);\n    altText.addEventListener(\"pointerdown\", event => event.stopPropagation());\n    const onClick = event => {\n      event.preventDefault();\n      this.#editor._uiManager.editAltText(this.#editor);\n    };\n    altText.addEventListener(\"click\", onClick, {\n      capture: true\n    });\n    altText.addEventListener(\"keydown\", event => {\n      if (event.target === altText && event.key === \"Enter\") {\n        this.#altTextWasFromKeyBoard = true;\n        onClick(event);\n      }\n    });\n    await this.#setState();\n    return altText;\n  }\n  finish() {\n    if (!this.#altTextButton) {\n      return;\n    }\n    this.#altTextButton.focus({\n      focusVisible: this.#altTextWasFromKeyBoard\n    });\n    this.#altTextWasFromKeyBoard = false;\n  }\n  isEmpty() {\n    return !this.#altText && !this.#altTextDecorative;\n  }\n  get data() {\n    return {\n      altText: this.#altText,\n      decorative: this.#altTextDecorative\n    };\n  }\n  set data({\n    altText,\n    decorative\n  }) {\n    if (this.#altText === altText && this.#altTextDecorative === decorative) {\n      return;\n    }\n    this.#altText = altText;\n    this.#altTextDecorative = decorative;\n    this.#setState();\n  }\n  toggle(enabled = false) {\n    if (!this.#altTextButton) {\n      return;\n    }\n    if (!enabled && this.#altTextTooltipTimeout) {\n      clearTimeout(this.#altTextTooltipTimeout);\n      this.#altTextTooltipTimeout = null;\n    }\n    this.#altTextButton.disabled = !enabled;\n  }\n  destroy() {\n    this.#altTextButton?.remove();\n    this.#altTextButton = null;\n    this.#altTextTooltip = null;\n  }\n  async #setState() {\n    const button = this.#altTextButton;\n    if (!button) {\n      return;\n    }\n    if (!this.#altText && !this.#altTextDecorative) {\n      button.classList.remove(\"done\");\n      this.#altTextTooltip?.remove();\n      return;\n    }\n    button.classList.add(\"done\");\n    AltText._l10nPromise.get(\"pdfjs-editor-alt-text-edit-button-label\").then(msg => {\n      button.setAttribute(\"aria-label\", msg);\n    });\n    let tooltip = this.#altTextTooltip;\n    if (!tooltip) {\n      this.#altTextTooltip = tooltip = document.createElement(\"span\");\n      tooltip.className = \"tooltip\";\n      tooltip.setAttribute(\"role\", \"tooltip\");\n      const id = tooltip.id = `alt-text-tooltip-${this.#editor.id}`;\n      button.setAttribute(\"aria-describedby\", id);\n      const DELAY_TO_SHOW_TOOLTIP = 100;\n      button.addEventListener(\"mouseenter\", () => {\n        this.#altTextTooltipTimeout = setTimeout(() => {\n          this.#altTextTooltipTimeout = null;\n          this.#altTextTooltip.classList.add(\"show\");\n          this.#editor._reportTelemetry({\n            action: \"alt_text_tooltip\"\n          });\n        }, DELAY_TO_SHOW_TOOLTIP);\n      });\n      button.addEventListener(\"mouseleave\", () => {\n        if (this.#altTextTooltipTimeout) {\n          clearTimeout(this.#altTextTooltipTimeout);\n          this.#altTextTooltipTimeout = null;\n        }\n        this.#altTextTooltip?.classList.remove(\"show\");\n      });\n    }\n    tooltip.innerText = this.#altTextDecorative ? await AltText._l10nPromise.get(\"pdfjs-editor-alt-text-decorative-tooltip\") : this.#altText;\n    if (!tooltip.parentNode) {\n      button.append(tooltip);\n    }\n    const element = this.#editor.getImageForAltText();\n    element?.setAttribute(\"aria-describedby\", tooltip.id);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/editor/editor.js\n\n\n\n\n\nclass AnnotationEditor {\n  #allResizerDivs = null;\n  #altText = null;\n  #disabled = false;\n  #keepAspectRatio = false;\n  #resizersDiv = null;\n  #savedDimensions = null;\n  #boundFocusin = this.focusin.bind(this);\n  #boundFocusout = this.focusout.bind(this);\n  #editToolbar = null;\n  #focusedResizerName = \"\";\n  #hasBeenClicked = false;\n  #initialPosition = null;\n  #isEditing = false;\n  #isInEditMode = false;\n  #isResizerEnabledForKeyboard = false;\n  #moveInDOMTimeout = null;\n  #prevDragX = 0;\n  #prevDragY = 0;\n  #telemetryTimeouts = null;\n  _initialOptions = Object.create(null);\n  _isVisible = true;\n  _uiManager = null;\n  _focusEventsAllowed = true;\n  _l10nPromise = null;\n  #isDraggable = false;\n  #zIndex = AnnotationEditor._zIndex++;\n  static _borderLineWidth = -1;\n  static _colorManager = new ColorManager();\n  static _zIndex = 1;\n  static _telemetryTimeout = 1000;\n  static get _resizerKeyboardManager() {\n    const resize = AnnotationEditor.prototype._resizeWithKeyboard;\n    const small = AnnotationEditorUIManager.TRANSLATE_SMALL;\n    const big = AnnotationEditorUIManager.TRANSLATE_BIG;\n    return shadow(this, \"_resizerKeyboardManager\", new KeyboardManager([[[\"ArrowLeft\", \"mac+ArrowLeft\"], resize, {\n      args: [-small, 0]\n    }], [[\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"], resize, {\n      args: [-big, 0]\n    }], [[\"ArrowRight\", \"mac+ArrowRight\"], resize, {\n      args: [small, 0]\n    }], [[\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"], resize, {\n      args: [big, 0]\n    }], [[\"ArrowUp\", \"mac+ArrowUp\"], resize, {\n      args: [0, -small]\n    }], [[\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"], resize, {\n      args: [0, -big]\n    }], [[\"ArrowDown\", \"mac+ArrowDown\"], resize, {\n      args: [0, small]\n    }], [[\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"], resize, {\n      args: [0, big]\n    }], [[\"Escape\", \"mac+Escape\"], AnnotationEditor.prototype._stopResizingWithKeyboard]]));\n  }\n  constructor(parameters) {\n    if (this.constructor === AnnotationEditor) {\n      unreachable(\"Cannot initialize AnnotationEditor.\");\n    }\n    this.parent = parameters.parent;\n    this.id = parameters.id;\n    this.width = this.height = null;\n    this.pageIndex = parameters.parent.pageIndex;\n    this.name = parameters.name;\n    this.div = null;\n    this._uiManager = parameters.uiManager;\n    this.annotationElementId = null;\n    this._willKeepAspectRatio = false;\n    this._initialOptions.isCentered = parameters.isCentered;\n    this._structTreeParentId = null;\n    const {\n      rotation,\n      rawDims: {\n        pageWidth,\n        pageHeight,\n        pageX,\n        pageY\n      }\n    } = this.parent.viewport;\n    this.rotation = rotation;\n    this.pageRotation = (360 + rotation - this._uiManager.viewParameters.rotation) % 360;\n    this.pageDimensions = [pageWidth, pageHeight];\n    this.pageTranslation = [pageX, pageY];\n    const [width, height] = this.parentDimensions;\n    this.x = parameters.x / width;\n    this.y = parameters.y / height;\n    this.isAttachedToDOM = false;\n    this.deleted = false;\n  }\n  get editorType() {\n    return Object.getPrototypeOf(this).constructor._type;\n  }\n  static get _defaultLineColor() {\n    return shadow(this, \"_defaultLineColor\", this._colorManager.getHexCode(\"CanvasText\"));\n  }\n  static deleteAnnotationElement(editor) {\n    const fakeEditor = new FakeEditor({\n      id: editor.parent.getNextId(),\n      parent: editor.parent,\n      uiManager: editor._uiManager\n    });\n    fakeEditor.annotationElementId = editor.annotationElementId;\n    fakeEditor.deleted = true;\n    fakeEditor._uiManager.addToAnnotationStorage(fakeEditor);\n  }\n  static initialize(l10n, _uiManager, options) {\n    AnnotationEditor._l10nPromise ||= new Map([\"pdfjs-editor-alt-text-button-label\", \"pdfjs-editor-alt-text-edit-button-label\", \"pdfjs-editor-alt-text-decorative-tooltip\", \"pdfjs-editor-resizer-label-topLeft\", \"pdfjs-editor-resizer-label-topMiddle\", \"pdfjs-editor-resizer-label-topRight\", \"pdfjs-editor-resizer-label-middleRight\", \"pdfjs-editor-resizer-label-bottomRight\", \"pdfjs-editor-resizer-label-bottomMiddle\", \"pdfjs-editor-resizer-label-bottomLeft\", \"pdfjs-editor-resizer-label-middleLeft\"].map(str => [str, l10n.get(str.replaceAll(/([A-Z])/g, c => `-${c.toLowerCase()}`))]));\n    if (options?.strings) {\n      for (const str of options.strings) {\n        AnnotationEditor._l10nPromise.set(str, l10n.get(str));\n      }\n    }\n    if (AnnotationEditor._borderLineWidth !== -1) {\n      return;\n    }\n    const style = getComputedStyle(document.documentElement);\n    AnnotationEditor._borderLineWidth = parseFloat(style.getPropertyValue(\"--outline-width\")) || 0;\n  }\n  static updateDefaultParams(_type, _value) {}\n  static get defaultPropertiesToUpdate() {\n    return [];\n  }\n  static isHandlingMimeForPasting(mime) {\n    return false;\n  }\n  static paste(item, parent) {\n    unreachable(\"Not implemented\");\n  }\n  get propertiesToUpdate() {\n    return [];\n  }\n  get _isDraggable() {\n    return this.#isDraggable;\n  }\n  set _isDraggable(value) {\n    this.#isDraggable = value;\n    this.div?.classList.toggle(\"draggable\", value);\n  }\n  get isEnterHandled() {\n    return true;\n  }\n  center() {\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    switch (this.parentRotation) {\n      case 90:\n        this.x -= this.height * pageHeight / (pageWidth * 2);\n        this.y += this.width * pageWidth / (pageHeight * 2);\n        break;\n      case 180:\n        this.x += this.width / 2;\n        this.y += this.height / 2;\n        break;\n      case 270:\n        this.x += this.height * pageHeight / (pageWidth * 2);\n        this.y -= this.width * pageWidth / (pageHeight * 2);\n        break;\n      default:\n        this.x -= this.width / 2;\n        this.y -= this.height / 2;\n        break;\n    }\n    this.fixAndSetPosition();\n  }\n  addCommands(params) {\n    this._uiManager.addCommands(params);\n  }\n  get currentLayer() {\n    return this._uiManager.currentLayer;\n  }\n  setInBackground() {\n    this.div.style.zIndex = 0;\n  }\n  setInForeground() {\n    this.div.style.zIndex = this.#zIndex;\n  }\n  setParent(parent) {\n    if (parent !== null) {\n      this.pageIndex = parent.pageIndex;\n      this.pageDimensions = parent.pageDimensions;\n    } else {\n      this.#stopResizing();\n    }\n    this.parent = parent;\n  }\n  focusin(event) {\n    if (!this._focusEventsAllowed) {\n      return;\n    }\n    if (!this.#hasBeenClicked) {\n      this.parent.setSelected(this);\n    } else {\n      this.#hasBeenClicked = false;\n    }\n  }\n  focusout(event) {\n    if (!this._focusEventsAllowed) {\n      return;\n    }\n    if (!this.isAttachedToDOM) {\n      return;\n    }\n    const target = event.relatedTarget;\n    if (target?.closest(`#${this.id}`)) {\n      return;\n    }\n    event.preventDefault();\n    if (!this.parent?.isMultipleSelection) {\n      this.commitOrRemove();\n    }\n  }\n  commitOrRemove() {\n    if (this.isEmpty()) {\n      this.remove();\n    } else {\n      this.commit();\n    }\n  }\n  commit() {\n    this.addToAnnotationStorage();\n  }\n  addToAnnotationStorage() {\n    this._uiManager.addToAnnotationStorage(this);\n  }\n  setAt(x, y, tx, ty) {\n    const [width, height] = this.parentDimensions;\n    [tx, ty] = this.screenToPageTranslation(tx, ty);\n    this.x = (x + tx) / width;\n    this.y = (y + ty) / height;\n    this.fixAndSetPosition();\n  }\n  #translate([width, height], x, y) {\n    [x, y] = this.screenToPageTranslation(x, y);\n    this.x += x / width;\n    this.y += y / height;\n    this.fixAndSetPosition();\n  }\n  translate(x, y) {\n    this.#translate(this.parentDimensions, x, y);\n  }\n  translateInPage(x, y) {\n    this.#initialPosition ||= [this.x, this.y];\n    this.#translate(this.pageDimensions, x, y);\n    this.div.scrollIntoView({\n      block: \"nearest\"\n    });\n  }\n  drag(tx, ty) {\n    this.#initialPosition ||= [this.x, this.y];\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    this.x += tx / parentWidth;\n    this.y += ty / parentHeight;\n    if (this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) {\n      const {\n        x,\n        y\n      } = this.div.getBoundingClientRect();\n      if (this.parent.findNewParent(this, x, y)) {\n        this.x -= Math.floor(this.x);\n        this.y -= Math.floor(this.y);\n      }\n    }\n    let {\n      x,\n      y\n    } = this;\n    const [bx, by] = this.getBaseTranslation();\n    x += bx;\n    y += by;\n    this.div.style.left = `${(100 * x).toFixed(2)}%`;\n    this.div.style.top = `${(100 * y).toFixed(2)}%`;\n    this.div.scrollIntoView({\n      block: \"nearest\"\n    });\n  }\n  get _hasBeenMoved() {\n    return !!this.#initialPosition && (this.#initialPosition[0] !== this.x || this.#initialPosition[1] !== this.y);\n  }\n  getBaseTranslation() {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    const {\n      _borderLineWidth\n    } = AnnotationEditor;\n    const x = _borderLineWidth / parentWidth;\n    const y = _borderLineWidth / parentHeight;\n    switch (this.rotation) {\n      case 90:\n        return [-x, y];\n      case 180:\n        return [x, y];\n      case 270:\n        return [x, -y];\n      default:\n        return [-x, -y];\n    }\n  }\n  get _mustFixPosition() {\n    return true;\n  }\n  fixAndSetPosition(rotation = this.rotation) {\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    let {\n      x,\n      y,\n      width,\n      height\n    } = this;\n    width *= pageWidth;\n    height *= pageHeight;\n    x *= pageWidth;\n    y *= pageHeight;\n    if (this._mustFixPosition) {\n      switch (rotation) {\n        case 0:\n          x = Math.max(0, Math.min(pageWidth - width, x));\n          y = Math.max(0, Math.min(pageHeight - height, y));\n          break;\n        case 90:\n          x = Math.max(0, Math.min(pageWidth - height, x));\n          y = Math.min(pageHeight, Math.max(width, y));\n          break;\n        case 180:\n          x = Math.min(pageWidth, Math.max(width, x));\n          y = Math.min(pageHeight, Math.max(height, y));\n          break;\n        case 270:\n          x = Math.min(pageWidth, Math.max(height, x));\n          y = Math.max(0, Math.min(pageHeight - width, y));\n          break;\n      }\n    }\n    this.x = x /= pageWidth;\n    this.y = y /= pageHeight;\n    const [bx, by] = this.getBaseTranslation();\n    x += bx;\n    y += by;\n    const {\n      style\n    } = this.div;\n    style.left = `${(100 * x).toFixed(2)}%`;\n    style.top = `${(100 * y).toFixed(2)}%`;\n    this.moveInDOM();\n  }\n  static #rotatePoint(x, y, angle) {\n    switch (angle) {\n      case 90:\n        return [y, -x];\n      case 180:\n        return [-x, -y];\n      case 270:\n        return [-y, x];\n      default:\n        return [x, y];\n    }\n  }\n  screenToPageTranslation(x, y) {\n    return AnnotationEditor.#rotatePoint(x, y, this.parentRotation);\n  }\n  pageTranslationToScreen(x, y) {\n    return AnnotationEditor.#rotatePoint(x, y, 360 - this.parentRotation);\n  }\n  #getRotationMatrix(rotation) {\n    switch (rotation) {\n      case 90:\n        {\n          const [pageWidth, pageHeight] = this.pageDimensions;\n          return [0, -pageWidth / pageHeight, pageHeight / pageWidth, 0];\n        }\n      case 180:\n        return [-1, 0, 0, -1];\n      case 270:\n        {\n          const [pageWidth, pageHeight] = this.pageDimensions;\n          return [0, pageWidth / pageHeight, -pageHeight / pageWidth, 0];\n        }\n      default:\n        return [1, 0, 0, 1];\n    }\n  }\n  get parentScale() {\n    return this._uiManager.viewParameters.realScale;\n  }\n  get parentRotation() {\n    return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360;\n  }\n  get parentDimensions() {\n    const {\n      parentScale,\n      pageDimensions: [pageWidth, pageHeight]\n    } = this;\n    const scaledWidth = pageWidth * parentScale;\n    const scaledHeight = pageHeight * parentScale;\n    return util_FeatureTest.isCSSRoundSupported ? [Math.round(scaledWidth), Math.round(scaledHeight)] : [scaledWidth, scaledHeight];\n  }\n  setDims(width, height) {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    this.div.style.width = `${(100 * width / parentWidth).toFixed(2)}%`;\n    if (!this.#keepAspectRatio) {\n      this.div.style.height = `${(100 * height / parentHeight).toFixed(2)}%`;\n    }\n  }\n  fixDims() {\n    const {\n      style\n    } = this.div;\n    const {\n      height,\n      width\n    } = style;\n    const widthPercent = width.endsWith(\"%\");\n    const heightPercent = !this.#keepAspectRatio && height.endsWith(\"%\");\n    if (widthPercent && heightPercent) {\n      return;\n    }\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    if (!widthPercent) {\n      style.width = `${(100 * parseFloat(width) / parentWidth).toFixed(2)}%`;\n    }\n    if (!this.#keepAspectRatio && !heightPercent) {\n      style.height = `${(100 * parseFloat(height) / parentHeight).toFixed(2)}%`;\n    }\n  }\n  getInitialTranslation() {\n    return [0, 0];\n  }\n  #createResizers() {\n    if (this.#resizersDiv) {\n      return;\n    }\n    this.#resizersDiv = document.createElement(\"div\");\n    this.#resizersDiv.classList.add(\"resizers\");\n    const classes = this._willKeepAspectRatio ? [\"topLeft\", \"topRight\", \"bottomRight\", \"bottomLeft\"] : [\"topLeft\", \"topMiddle\", \"topRight\", \"middleRight\", \"bottomRight\", \"bottomMiddle\", \"bottomLeft\", \"middleLeft\"];\n    for (const name of classes) {\n      const div = document.createElement(\"div\");\n      this.#resizersDiv.append(div);\n      div.classList.add(\"resizer\", name);\n      div.setAttribute(\"data-resizer-name\", name);\n      div.addEventListener(\"pointerdown\", this.#resizerPointerdown.bind(this, name));\n      div.addEventListener(\"contextmenu\", noContextMenu);\n      div.tabIndex = -1;\n    }\n    this.div.prepend(this.#resizersDiv);\n  }\n  #resizerPointerdown(name, event) {\n    event.preventDefault();\n    const {\n      isMac\n    } = util_FeatureTest.platform;\n    if (event.button !== 0 || event.ctrlKey && isMac) {\n      return;\n    }\n    this.#altText?.toggle(false);\n    const boundResizerPointermove = this.#resizerPointermove.bind(this, name);\n    const savedDraggable = this._isDraggable;\n    this._isDraggable = false;\n    const pointerMoveOptions = {\n      passive: true,\n      capture: true\n    };\n    this.parent.togglePointerEvents(false);\n    window.addEventListener(\"pointermove\", boundResizerPointermove, pointerMoveOptions);\n    window.addEventListener(\"contextmenu\", noContextMenu);\n    const savedX = this.x;\n    const savedY = this.y;\n    const savedWidth = this.width;\n    const savedHeight = this.height;\n    const savedParentCursor = this.parent.div.style.cursor;\n    const savedCursor = this.div.style.cursor;\n    this.div.style.cursor = this.parent.div.style.cursor = window.getComputedStyle(event.target).cursor;\n    const pointerUpCallback = () => {\n      this.parent.togglePointerEvents(true);\n      this.#altText?.toggle(true);\n      this._isDraggable = savedDraggable;\n      window.removeEventListener(\"pointerup\", pointerUpCallback);\n      window.removeEventListener(\"blur\", pointerUpCallback);\n      window.removeEventListener(\"pointermove\", boundResizerPointermove, pointerMoveOptions);\n      window.removeEventListener(\"contextmenu\", noContextMenu);\n      this.parent.div.style.cursor = savedParentCursor;\n      this.div.style.cursor = savedCursor;\n      this.#addResizeToUndoStack(savedX, savedY, savedWidth, savedHeight);\n    };\n    window.addEventListener(\"pointerup\", pointerUpCallback);\n    window.addEventListener(\"blur\", pointerUpCallback);\n  }\n  #addResizeToUndoStack(savedX, savedY, savedWidth, savedHeight) {\n    const newX = this.x;\n    const newY = this.y;\n    const newWidth = this.width;\n    const newHeight = this.height;\n    if (newX === savedX && newY === savedY && newWidth === savedWidth && newHeight === savedHeight) {\n      return;\n    }\n    this.addCommands({\n      cmd: () => {\n        this.width = newWidth;\n        this.height = newHeight;\n        this.x = newX;\n        this.y = newY;\n        const [parentWidth, parentHeight] = this.parentDimensions;\n        this.setDims(parentWidth * newWidth, parentHeight * newHeight);\n        this.fixAndSetPosition();\n      },\n      undo: () => {\n        this.width = savedWidth;\n        this.height = savedHeight;\n        this.x = savedX;\n        this.y = savedY;\n        const [parentWidth, parentHeight] = this.parentDimensions;\n        this.setDims(parentWidth * savedWidth, parentHeight * savedHeight);\n        this.fixAndSetPosition();\n      },\n      mustExec: true\n    });\n  }\n  #resizerPointermove(name, event) {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    const savedX = this.x;\n    const savedY = this.y;\n    const savedWidth = this.width;\n    const savedHeight = this.height;\n    const minWidth = AnnotationEditor.MIN_SIZE / parentWidth;\n    const minHeight = AnnotationEditor.MIN_SIZE / parentHeight;\n    const round = x => Math.round(x * 10000) / 10000;\n    const rotationMatrix = this.#getRotationMatrix(this.rotation);\n    const transf = (x, y) => [rotationMatrix[0] * x + rotationMatrix[2] * y, rotationMatrix[1] * x + rotationMatrix[3] * y];\n    const invRotationMatrix = this.#getRotationMatrix(360 - this.rotation);\n    const invTransf = (x, y) => [invRotationMatrix[0] * x + invRotationMatrix[2] * y, invRotationMatrix[1] * x + invRotationMatrix[3] * y];\n    let getPoint;\n    let getOpposite;\n    let isDiagonal = false;\n    let isHorizontal = false;\n    switch (name) {\n      case \"topLeft\":\n        isDiagonal = true;\n        getPoint = (w, h) => [0, 0];\n        getOpposite = (w, h) => [w, h];\n        break;\n      case \"topMiddle\":\n        getPoint = (w, h) => [w / 2, 0];\n        getOpposite = (w, h) => [w / 2, h];\n        break;\n      case \"topRight\":\n        isDiagonal = true;\n        getPoint = (w, h) => [w, 0];\n        getOpposite = (w, h) => [0, h];\n        break;\n      case \"middleRight\":\n        isHorizontal = true;\n        getPoint = (w, h) => [w, h / 2];\n        getOpposite = (w, h) => [0, h / 2];\n        break;\n      case \"bottomRight\":\n        isDiagonal = true;\n        getPoint = (w, h) => [w, h];\n        getOpposite = (w, h) => [0, 0];\n        break;\n      case \"bottomMiddle\":\n        getPoint = (w, h) => [w / 2, h];\n        getOpposite = (w, h) => [w / 2, 0];\n        break;\n      case \"bottomLeft\":\n        isDiagonal = true;\n        getPoint = (w, h) => [0, h];\n        getOpposite = (w, h) => [w, 0];\n        break;\n      case \"middleLeft\":\n        isHorizontal = true;\n        getPoint = (w, h) => [0, h / 2];\n        getOpposite = (w, h) => [w, h / 2];\n        break;\n    }\n    const point = getPoint(savedWidth, savedHeight);\n    const oppositePoint = getOpposite(savedWidth, savedHeight);\n    let transfOppositePoint = transf(...oppositePoint);\n    const oppositeX = round(savedX + transfOppositePoint[0]);\n    const oppositeY = round(savedY + transfOppositePoint[1]);\n    let ratioX = 1;\n    let ratioY = 1;\n    let [deltaX, deltaY] = this.screenToPageTranslation(event.movementX, event.movementY);\n    [deltaX, deltaY] = invTransf(deltaX / parentWidth, deltaY / parentHeight);\n    if (isDiagonal) {\n      const oldDiag = Math.hypot(savedWidth, savedHeight);\n      ratioX = ratioY = Math.max(Math.min(Math.hypot(oppositePoint[0] - point[0] - deltaX, oppositePoint[1] - point[1] - deltaY) / oldDiag, 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight);\n    } else if (isHorizontal) {\n      ratioX = Math.max(minWidth, Math.min(1, Math.abs(oppositePoint[0] - point[0] - deltaX))) / savedWidth;\n    } else {\n      ratioY = Math.max(minHeight, Math.min(1, Math.abs(oppositePoint[1] - point[1] - deltaY))) / savedHeight;\n    }\n    const newWidth = round(savedWidth * ratioX);\n    const newHeight = round(savedHeight * ratioY);\n    transfOppositePoint = transf(...getOpposite(newWidth, newHeight));\n    const newX = oppositeX - transfOppositePoint[0];\n    const newY = oppositeY - transfOppositePoint[1];\n    this.width = newWidth;\n    this.height = newHeight;\n    this.x = newX;\n    this.y = newY;\n    this.setDims(parentWidth * newWidth, parentHeight * newHeight);\n    this.fixAndSetPosition();\n  }\n  altTextFinish() {\n    this.#altText?.finish();\n  }\n  async addEditToolbar() {\n    if (this.#editToolbar || this.#isInEditMode) {\n      return this.#editToolbar;\n    }\n    this.#editToolbar = new EditorToolbar(this);\n    this.div.append(this.#editToolbar.render());\n    if (this.#altText) {\n      this.#editToolbar.addAltTextButton(await this.#altText.render());\n    }\n    return this.#editToolbar;\n  }\n  removeEditToolbar() {\n    if (!this.#editToolbar) {\n      return;\n    }\n    this.#editToolbar.remove();\n    this.#editToolbar = null;\n    this.#altText?.destroy();\n  }\n  getClientDimensions() {\n    return this.div.getBoundingClientRect();\n  }\n  async addAltTextButton() {\n    if (this.#altText) {\n      return;\n    }\n    AltText.initialize(AnnotationEditor._l10nPromise);\n    this.#altText = new AltText(this);\n    await this.addEditToolbar();\n  }\n  get altTextData() {\n    return this.#altText?.data;\n  }\n  set altTextData(data) {\n    if (!this.#altText) {\n      return;\n    }\n    this.#altText.data = data;\n  }\n  hasAltText() {\n    return !this.#altText?.isEmpty();\n  }\n  render() {\n    this.div = document.createElement(\"div\");\n    this.div.setAttribute(\"data-editor-rotation\", (360 - this.rotation) % 360);\n    this.div.className = this.name;\n    this.div.setAttribute(\"id\", this.id);\n    this.div.tabIndex = this.#disabled ? -1 : 0;\n    if (!this._isVisible) {\n      this.div.classList.add(\"hidden\");\n    }\n    this.setInForeground();\n    this.div.addEventListener(\"focusin\", this.#boundFocusin);\n    this.div.addEventListener(\"focusout\", this.#boundFocusout);\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    if (this.parentRotation % 180 !== 0) {\n      this.div.style.maxWidth = `${(100 * parentHeight / parentWidth).toFixed(2)}%`;\n      this.div.style.maxHeight = `${(100 * parentWidth / parentHeight).toFixed(2)}%`;\n    }\n    const [tx, ty] = this.getInitialTranslation();\n    this.translate(tx, ty);\n    bindEvents(this, this.div, [\"pointerdown\"]);\n    return this.div;\n  }\n  pointerdown(event) {\n    const {\n      isMac\n    } = util_FeatureTest.platform;\n    if (event.button !== 0 || event.ctrlKey && isMac) {\n      event.preventDefault();\n      return;\n    }\n    this.#hasBeenClicked = true;\n    if (this._isDraggable) {\n      this.#setUpDragSession(event);\n      return;\n    }\n    this.#selectOnPointerEvent(event);\n  }\n  #selectOnPointerEvent(event) {\n    const {\n      isMac\n    } = util_FeatureTest.platform;\n    if (event.ctrlKey && !isMac || event.shiftKey || event.metaKey && isMac) {\n      this.parent.toggleSelected(this);\n    } else {\n      this.parent.setSelected(this);\n    }\n  }\n  #setUpDragSession(event) {\n    const isSelected = this._uiManager.isSelected(this);\n    this._uiManager.setUpDragSession();\n    let pointerMoveOptions, pointerMoveCallback;\n    if (isSelected) {\n      this.div.classList.add(\"moving\");\n      pointerMoveOptions = {\n        passive: true,\n        capture: true\n      };\n      this.#prevDragX = event.clientX;\n      this.#prevDragY = event.clientY;\n      pointerMoveCallback = e => {\n        const {\n          clientX: x,\n          clientY: y\n        } = e;\n        const [tx, ty] = this.screenToPageTranslation(x - this.#prevDragX, y - this.#prevDragY);\n        this.#prevDragX = x;\n        this.#prevDragY = y;\n        this._uiManager.dragSelectedEditors(tx, ty);\n      };\n      window.addEventListener(\"pointermove\", pointerMoveCallback, pointerMoveOptions);\n    }\n    const pointerUpCallback = () => {\n      window.removeEventListener(\"pointerup\", pointerUpCallback);\n      window.removeEventListener(\"blur\", pointerUpCallback);\n      if (isSelected) {\n        this.div.classList.remove(\"moving\");\n        window.removeEventListener(\"pointermove\", pointerMoveCallback, pointerMoveOptions);\n      }\n      this.#hasBeenClicked = false;\n      if (!this._uiManager.endDragSession()) {\n        this.#selectOnPointerEvent(event);\n      }\n    };\n    window.addEventListener(\"pointerup\", pointerUpCallback);\n    window.addEventListener(\"blur\", pointerUpCallback);\n  }\n  moveInDOM() {\n    if (this.#moveInDOMTimeout) {\n      clearTimeout(this.#moveInDOMTimeout);\n    }\n    this.#moveInDOMTimeout = setTimeout(() => {\n      this.#moveInDOMTimeout = null;\n      this.parent?.moveEditorInDOM(this);\n    }, 0);\n  }\n  _setParentAndPosition(parent, x, y) {\n    parent.changeParent(this);\n    this.x = x;\n    this.y = y;\n    this.fixAndSetPosition();\n  }\n  getRect(tx, ty, rotation = this.rotation) {\n    const scale = this.parentScale;\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    const [pageX, pageY] = this.pageTranslation;\n    const shiftX = tx / scale;\n    const shiftY = ty / scale;\n    const x = this.x * pageWidth;\n    const y = this.y * pageHeight;\n    const width = this.width * pageWidth;\n    const height = this.height * pageHeight;\n    switch (rotation) {\n      case 0:\n        return [x + shiftX + pageX, pageHeight - y - shiftY - height + pageY, x + shiftX + width + pageX, pageHeight - y - shiftY + pageY];\n      case 90:\n        return [x + shiftY + pageX, pageHeight - y + shiftX + pageY, x + shiftY + height + pageX, pageHeight - y + shiftX + width + pageY];\n      case 180:\n        return [x - shiftX - width + pageX, pageHeight - y + shiftY + pageY, x - shiftX + pageX, pageHeight - y + shiftY + height + pageY];\n      case 270:\n        return [x - shiftY - height + pageX, pageHeight - y - shiftX - width + pageY, x - shiftY + pageX, pageHeight - y - shiftX + pageY];\n      default:\n        throw new Error(\"Invalid rotation\");\n    }\n  }\n  getRectInCurrentCoords(rect, pageHeight) {\n    const [x1, y1, x2, y2] = rect;\n    const width = x2 - x1;\n    const height = y2 - y1;\n    switch (this.rotation) {\n      case 0:\n        return [x1, pageHeight - y2, width, height];\n      case 90:\n        return [x1, pageHeight - y1, height, width];\n      case 180:\n        return [x2, pageHeight - y1, width, height];\n      case 270:\n        return [x2, pageHeight - y2, height, width];\n      default:\n        throw new Error(\"Invalid rotation\");\n    }\n  }\n  onceAdded() {}\n  isEmpty() {\n    return false;\n  }\n  enableEditMode() {\n    this.#isInEditMode = true;\n  }\n  disableEditMode() {\n    this.#isInEditMode = false;\n  }\n  isInEditMode() {\n    return this.#isInEditMode;\n  }\n  shouldGetKeyboardEvents() {\n    return this.#isResizerEnabledForKeyboard;\n  }\n  needsToBeRebuilt() {\n    return this.div && !this.isAttachedToDOM;\n  }\n  rebuild() {\n    this.div?.addEventListener(\"focusin\", this.#boundFocusin);\n    this.div?.addEventListener(\"focusout\", this.#boundFocusout);\n  }\n  rotate(_angle) {}\n  serialize(isForCopying = false, context = null) {\n    unreachable(\"An editor must be serializable\");\n  }\n  static deserialize(data, parent, uiManager) {\n    const editor = new this.prototype.constructor({\n      parent,\n      id: parent.getNextId(),\n      uiManager\n    });\n    editor.rotation = data.rotation;\n    const [pageWidth, pageHeight] = editor.pageDimensions;\n    const [x, y, width, height] = editor.getRectInCurrentCoords(data.rect, pageHeight);\n    editor.x = x / pageWidth;\n    editor.y = y / pageHeight;\n    editor.width = width / pageWidth;\n    editor.height = height / pageHeight;\n    return editor;\n  }\n  get hasBeenModified() {\n    return !!this.annotationElementId && (this.deleted || this.serialize() !== null);\n  }\n  remove() {\n    this.div.removeEventListener(\"focusin\", this.#boundFocusin);\n    this.div.removeEventListener(\"focusout\", this.#boundFocusout);\n    if (!this.isEmpty()) {\n      this.commit();\n    }\n    if (this.parent) {\n      this.parent.remove(this);\n    } else {\n      this._uiManager.removeEditor(this);\n    }\n    if (this.#moveInDOMTimeout) {\n      clearTimeout(this.#moveInDOMTimeout);\n      this.#moveInDOMTimeout = null;\n    }\n    this.#stopResizing();\n    this.removeEditToolbar();\n    if (this.#telemetryTimeouts) {\n      for (const timeout of this.#telemetryTimeouts.values()) {\n        clearTimeout(timeout);\n      }\n      this.#telemetryTimeouts = null;\n    }\n    this.parent = null;\n  }\n  get isResizable() {\n    return false;\n  }\n  makeResizable() {\n    if (this.isResizable) {\n      this.#createResizers();\n      this.#resizersDiv.classList.remove(\"hidden\");\n      bindEvents(this, this.div, [\"keydown\"]);\n    }\n  }\n  get toolbarPosition() {\n    return null;\n  }\n  keydown(event) {\n    if (!this.isResizable || event.target !== this.div || event.key !== \"Enter\") {\n      return;\n    }\n    this._uiManager.setSelected(this);\n    this.#savedDimensions = {\n      savedX: this.x,\n      savedY: this.y,\n      savedWidth: this.width,\n      savedHeight: this.height\n    };\n    const children = this.#resizersDiv.children;\n    if (!this.#allResizerDivs) {\n      this.#allResizerDivs = Array.from(children);\n      const boundResizerKeydown = this.#resizerKeydown.bind(this);\n      const boundResizerBlur = this.#resizerBlur.bind(this);\n      for (const div of this.#allResizerDivs) {\n        const name = div.getAttribute(\"data-resizer-name\");\n        div.setAttribute(\"role\", \"spinbutton\");\n        div.addEventListener(\"keydown\", boundResizerKeydown);\n        div.addEventListener(\"blur\", boundResizerBlur);\n        div.addEventListener(\"focus\", this.#resizerFocus.bind(this, name));\n        AnnotationEditor._l10nPromise.get(`pdfjs-editor-resizer-label-${name}`).then(msg => div.setAttribute(\"aria-label\", msg));\n      }\n    }\n    const first = this.#allResizerDivs[0];\n    let firstPosition = 0;\n    for (const div of children) {\n      if (div === first) {\n        break;\n      }\n      firstPosition++;\n    }\n    const nextFirstPosition = (360 - this.rotation + this.parentRotation) % 360 / 90 * (this.#allResizerDivs.length / 4);\n    if (nextFirstPosition !== firstPosition) {\n      if (nextFirstPosition < firstPosition) {\n        for (let i = 0; i < firstPosition - nextFirstPosition; i++) {\n          this.#resizersDiv.append(this.#resizersDiv.firstChild);\n        }\n      } else if (nextFirstPosition > firstPosition) {\n        for (let i = 0; i < nextFirstPosition - firstPosition; i++) {\n          this.#resizersDiv.firstChild.before(this.#resizersDiv.lastChild);\n        }\n      }\n      let i = 0;\n      for (const child of children) {\n        const div = this.#allResizerDivs[i++];\n        const name = div.getAttribute(\"data-resizer-name\");\n        AnnotationEditor._l10nPromise.get(`pdfjs-editor-resizer-label-${name}`).then(msg => child.setAttribute(\"aria-label\", msg));\n      }\n    }\n    this.#setResizerTabIndex(0);\n    this.#isResizerEnabledForKeyboard = true;\n    this.#resizersDiv.firstChild.focus({\n      focusVisible: true\n    });\n    event.preventDefault();\n    event.stopImmediatePropagation();\n  }\n  #resizerKeydown(event) {\n    AnnotationEditor._resizerKeyboardManager.exec(this, event);\n  }\n  #resizerBlur(event) {\n    if (this.#isResizerEnabledForKeyboard && event.relatedTarget?.parentNode !== this.#resizersDiv) {\n      this.#stopResizing();\n    }\n  }\n  #resizerFocus(name) {\n    this.#focusedResizerName = this.#isResizerEnabledForKeyboard ? name : \"\";\n  }\n  #setResizerTabIndex(value) {\n    if (!this.#allResizerDivs) {\n      return;\n    }\n    for (const div of this.#allResizerDivs) {\n      div.tabIndex = value;\n    }\n  }\n  _resizeWithKeyboard(x, y) {\n    if (!this.#isResizerEnabledForKeyboard) {\n      return;\n    }\n    this.#resizerPointermove(this.#focusedResizerName, {\n      movementX: x,\n      movementY: y\n    });\n  }\n  #stopResizing() {\n    this.#isResizerEnabledForKeyboard = false;\n    this.#setResizerTabIndex(-1);\n    if (this.#savedDimensions) {\n      const {\n        savedX,\n        savedY,\n        savedWidth,\n        savedHeight\n      } = this.#savedDimensions;\n      this.#addResizeToUndoStack(savedX, savedY, savedWidth, savedHeight);\n      this.#savedDimensions = null;\n    }\n  }\n  _stopResizingWithKeyboard() {\n    this.#stopResizing();\n    this.div.focus();\n  }\n  select() {\n    this.makeResizable();\n    this.div?.classList.add(\"selectedEditor\");\n    if (!this.#editToolbar) {\n      this.addEditToolbar().then(() => {\n        if (this.div?.classList.contains(\"selectedEditor\")) {\n          this.#editToolbar?.show();\n        }\n      });\n      return;\n    }\n    this.#editToolbar?.show();\n  }\n  unselect() {\n    this.#resizersDiv?.classList.add(\"hidden\");\n    this.div?.classList.remove(\"selectedEditor\");\n    if (this.div?.contains(document.activeElement)) {\n      this._uiManager.currentLayer.div.focus({\n        preventScroll: true\n      });\n    }\n    this.#editToolbar?.hide();\n  }\n  updateParams(type, value) {}\n  disableEditing() {}\n  enableEditing() {}\n  enterInEditMode() {}\n  getImageForAltText() {\n    return null;\n  }\n  get contentDiv() {\n    return this.div;\n  }\n  get isEditing() {\n    return this.#isEditing;\n  }\n  set isEditing(value) {\n    this.#isEditing = value;\n    if (!this.parent) {\n      return;\n    }\n    if (value) {\n      this.parent.setSelected(this);\n      this.parent.setActiveEditor(this);\n    } else {\n      this.parent.setActiveEditor(null);\n    }\n  }\n  setAspectRatio(width, height) {\n    this.#keepAspectRatio = true;\n    const aspectRatio = width / height;\n    const {\n      style\n    } = this.div;\n    style.aspectRatio = aspectRatio;\n    style.height = \"auto\";\n  }\n  static get MIN_SIZE() {\n    return 16;\n  }\n  static canCreateNewEmptyEditor() {\n    return true;\n  }\n  get telemetryInitialData() {\n    return {\n      action: \"added\"\n    };\n  }\n  get telemetryFinalData() {\n    return null;\n  }\n  _reportTelemetry(data, mustWait = false) {\n    if (mustWait) {\n      this.#telemetryTimeouts ||= new Map();\n      const {\n        action\n      } = data;\n      let timeout = this.#telemetryTimeouts.get(action);\n      if (timeout) {\n        clearTimeout(timeout);\n      }\n      timeout = setTimeout(() => {\n        this._reportTelemetry(data);\n        this.#telemetryTimeouts.delete(action);\n        if (this.#telemetryTimeouts.size === 0) {\n          this.#telemetryTimeouts = null;\n        }\n      }, AnnotationEditor._telemetryTimeout);\n      this.#telemetryTimeouts.set(action, timeout);\n      return;\n    }\n    data.type ||= this.editorType;\n    this._uiManager._eventBus.dispatch(\"reporttelemetry\", {\n      source: this,\n      details: {\n        type: \"editing\",\n        data\n      }\n    });\n  }\n  show(visible = this._isVisible) {\n    this.div.classList.toggle(\"hidden\", !visible);\n    this._isVisible = visible;\n  }\n  enable() {\n    if (this.div) {\n      this.div.tabIndex = 0;\n    }\n    this.#disabled = false;\n  }\n  disable() {\n    if (this.div) {\n      this.div.tabIndex = -1;\n    }\n    this.#disabled = true;\n  }\n  renderAnnotationElement(annotation) {\n    let content = annotation.container.querySelector(\".annotationContent\");\n    if (!content) {\n      content = document.createElement(\"div\");\n      content.classList.add(\"annotationContent\", this.editorType);\n      annotation.container.prepend(content);\n    } else if (content.nodeName === \"CANVAS\") {\n      const canvas = content;\n      content = document.createElement(\"div\");\n      content.classList.add(\"annotationContent\", this.editorType);\n      canvas.before(content);\n    }\n    return content;\n  }\n  resetAnnotationElement(annotation) {\n    const {\n      firstChild\n    } = annotation.container;\n    if (firstChild.nodeName === \"DIV\" && firstChild.classList.contains(\"annotationContent\")) {\n      firstChild.remove();\n    }\n  }\n}\nclass FakeEditor extends AnnotationEditor {\n  constructor(params) {\n    super(params);\n    this.annotationElementId = params.annotationElementId;\n    this.deleted = true;\n  }\n  serialize() {\n    return {\n      id: this.annotationElementId,\n      deleted: true,\n      pageIndex: this.pageIndex\n    };\n  }\n}\n\n;// CONCATENATED MODULE: ./src/shared/murmurhash3.js\nconst SEED = 0xc3d2e1f0;\nconst MASK_HIGH = 0xffff0000;\nconst MASK_LOW = 0xffff;\nclass MurmurHash3_64 {\n  constructor(seed) {\n    this.h1 = seed ? seed & 0xffffffff : SEED;\n    this.h2 = seed ? seed & 0xffffffff : SEED;\n  }\n  update(input) {\n    let data, length;\n    if (typeof input === \"string\") {\n      data = new Uint8Array(input.length * 2);\n      length = 0;\n      for (let i = 0, ii = input.length; i < ii; i++) {\n        const code = input.charCodeAt(i);\n        if (code <= 0xff) {\n          data[length++] = code;\n        } else {\n          data[length++] = code >>> 8;\n          data[length++] = code & 0xff;\n        }\n      }\n    } else if (ArrayBuffer.isView(input)) {\n      data = input.slice();\n      length = data.byteLength;\n    } else {\n      throw new Error(\"Invalid data format, must be a string or TypedArray.\");\n    }\n    const blockCounts = length >> 2;\n    const tailLength = length - blockCounts * 4;\n    const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts);\n    let k1 = 0,\n      k2 = 0;\n    let h1 = this.h1,\n      h2 = this.h2;\n    const C1 = 0xcc9e2d51,\n      C2 = 0x1b873593;\n    const C1_LOW = C1 & MASK_LOW,\n      C2_LOW = C2 & MASK_LOW;\n    for (let i = 0; i < blockCounts; i++) {\n      if (i & 1) {\n        k1 = dataUint32[i];\n        k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW;\n        k1 = k1 << 15 | k1 >>> 17;\n        k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW;\n        h1 ^= k1;\n        h1 = h1 << 13 | h1 >>> 19;\n        h1 = h1 * 5 + 0xe6546b64;\n      } else {\n        k2 = dataUint32[i];\n        k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW;\n        k2 = k2 << 15 | k2 >>> 17;\n        k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW;\n        h2 ^= k2;\n        h2 = h2 << 13 | h2 >>> 19;\n        h2 = h2 * 5 + 0xe6546b64;\n      }\n    }\n    k1 = 0;\n    switch (tailLength) {\n      case 3:\n        k1 ^= data[blockCounts * 4 + 2] << 16;\n      case 2:\n        k1 ^= data[blockCounts * 4 + 1] << 8;\n      case 1:\n        k1 ^= data[blockCounts * 4];\n        k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW;\n        k1 = k1 << 15 | k1 >>> 17;\n        k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW;\n        if (blockCounts & 1) {\n          h1 ^= k1;\n        } else {\n          h2 ^= k1;\n        }\n    }\n    this.h1 = h1;\n    this.h2 = h2;\n  }\n  hexdigest() {\n    let h1 = this.h1,\n      h2 = this.h2;\n    h1 ^= h2 >>> 1;\n    h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW;\n    h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16;\n    h1 ^= h2 >>> 1;\n    h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW;\n    h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16;\n    h1 ^= h2 >>> 1;\n    return (h1 >>> 0).toString(16).padStart(8, \"0\") + (h2 >>> 0).toString(16).padStart(8, \"0\");\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/annotation_storage.js\n\n\n\nconst SerializableEmpty = Object.freeze({\n  map: null,\n  hash: \"\",\n  transfer: undefined\n});\nclass AnnotationStorage {\n  #modified = false;\n  #storage = new Map();\n  constructor() {\n    this.onSetModified = null;\n    this.onResetModified = null;\n    this.onAnnotationEditor = null;\n  }\n  getValue(key, defaultValue) {\n    const value = this.#storage.get(key);\n    if (value === undefined) {\n      return defaultValue;\n    }\n    return Object.assign(defaultValue, value);\n  }\n  getRawValue(key) {\n    return this.#storage.get(key);\n  }\n  remove(key) {\n    this.#storage.delete(key);\n    if (this.#storage.size === 0) {\n      this.resetModified();\n    }\n    if (typeof this.onAnnotationEditor === \"function\") {\n      for (const value of this.#storage.values()) {\n        if (value instanceof AnnotationEditor) {\n          return;\n        }\n      }\n      this.onAnnotationEditor(null);\n    }\n  }\n  setValue(key, value) {\n    const obj = this.#storage.get(key);\n    let modified = false;\n    if (obj !== undefined) {\n      for (const [entry, val] of Object.entries(value)) {\n        if (obj[entry] !== val) {\n          modified = true;\n          obj[entry] = val;\n        }\n      }\n    } else {\n      modified = true;\n      this.#storage.set(key, value);\n    }\n    if (modified) {\n      this.#setModified();\n    }\n    if (value instanceof AnnotationEditor && typeof this.onAnnotationEditor === \"function\") {\n      this.onAnnotationEditor(value.constructor._type);\n    }\n  }\n  has(key) {\n    return this.#storage.has(key);\n  }\n  getAll() {\n    return this.#storage.size > 0 ? objectFromMap(this.#storage) : null;\n  }\n  setAll(obj) {\n    for (const [key, val] of Object.entries(obj)) {\n      this.setValue(key, val);\n    }\n  }\n  get size() {\n    return this.#storage.size;\n  }\n  #setModified() {\n    if (!this.#modified) {\n      this.#modified = true;\n      if (typeof this.onSetModified === \"function\") {\n        this.onSetModified();\n      }\n    }\n  }\n  resetModified() {\n    if (this.#modified) {\n      this.#modified = false;\n      if (typeof this.onResetModified === \"function\") {\n        this.onResetModified();\n      }\n    }\n  }\n  get print() {\n    return new PrintAnnotationStorage(this);\n  }\n  get serializable() {\n    if (this.#storage.size === 0) {\n      return SerializableEmpty;\n    }\n    const map = new Map(),\n      hash = new MurmurHash3_64(),\n      transfer = [];\n    const context = Object.create(null);\n    let hasBitmap = false;\n    for (const [key, val] of this.#storage) {\n      const serialized = val instanceof AnnotationEditor ? val.serialize(false, context) : val;\n      if (serialized) {\n        map.set(key, serialized);\n        hash.update(`${key}:${JSON.stringify(serialized)}`);\n        hasBitmap ||= !!serialized.bitmap;\n      }\n    }\n    if (hasBitmap) {\n      for (const value of map.values()) {\n        if (value.bitmap) {\n          transfer.push(value.bitmap);\n        }\n      }\n    }\n    return map.size > 0 ? {\n      map,\n      hash: hash.hexdigest(),\n      transfer\n    } : SerializableEmpty;\n  }\n  get editorStats() {\n    let stats = null;\n    const typeToEditor = new Map();\n    for (const value of this.#storage.values()) {\n      if (!(value instanceof AnnotationEditor)) {\n        continue;\n      }\n      const editorStats = value.telemetryFinalData;\n      if (!editorStats) {\n        continue;\n      }\n      const {\n        type\n      } = editorStats;\n      if (!typeToEditor.has(type)) {\n        typeToEditor.set(type, Object.getPrototypeOf(value).constructor);\n      }\n      stats ||= Object.create(null);\n      const map = stats[type] ||= new Map();\n      for (const [key, val] of Object.entries(editorStats)) {\n        if (key === \"type\") {\n          continue;\n        }\n        let counters = map.get(key);\n        if (!counters) {\n          counters = new Map();\n          map.set(key, counters);\n        }\n        const count = counters.get(val) ?? 0;\n        counters.set(val, count + 1);\n      }\n    }\n    for (const [type, editor] of typeToEditor) {\n      stats[type] = editor.computeTelemetryFinalData(stats[type]);\n    }\n    return stats;\n  }\n}\nclass PrintAnnotationStorage extends AnnotationStorage {\n  #serializable;\n  constructor(parent) {\n    super();\n    const {\n      map,\n      hash,\n      transfer\n    } = parent.serializable;\n    const clone = structuredClone(map, transfer ? {\n      transfer\n    } : null);\n    this.#serializable = {\n      map: clone,\n      hash,\n      transfer\n    };\n  }\n  get print() {\n    unreachable(\"Should not call PrintAnnotationStorage.print\");\n  }\n  get serializable() {\n    return this.#serializable;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/font_loader.js\n\nclass FontLoader {\n  #systemFonts = new Set();\n  constructor({\n    ownerDocument = globalThis.document,\n    styleElement = null\n  }) {\n    this._document = ownerDocument;\n    this.nativeFontFaces = new Set();\n    this.styleElement = null;\n    this.loadingRequests = [];\n    this.loadTestFontId = 0;\n  }\n  addNativeFontFace(nativeFontFace) {\n    this.nativeFontFaces.add(nativeFontFace);\n    this._document.fonts.add(nativeFontFace);\n  }\n  removeNativeFontFace(nativeFontFace) {\n    this.nativeFontFaces.delete(nativeFontFace);\n    this._document.fonts.delete(nativeFontFace);\n  }\n  insertRule(rule) {\n    if (!this.styleElement) {\n      this.styleElement = this._document.createElement(\"style\");\n      this._document.documentElement.getElementsByTagName(\"head\")[0].append(this.styleElement);\n    }\n    const styleSheet = this.styleElement.sheet;\n    styleSheet.insertRule(rule, styleSheet.cssRules.length);\n  }\n  clear() {\n    for (const nativeFontFace of this.nativeFontFaces) {\n      this._document.fonts.delete(nativeFontFace);\n    }\n    this.nativeFontFaces.clear();\n    this.#systemFonts.clear();\n    if (this.styleElement) {\n      this.styleElement.remove();\n      this.styleElement = null;\n    }\n  }\n  async loadSystemFont({\n    systemFontInfo: info,\n    _inspectFont\n  }) {\n    if (!info || this.#systemFonts.has(info.loadedName)) {\n      return;\n    }\n    assert(!this.disableFontFace, \"loadSystemFont shouldn't be called when `disableFontFace` is set.\");\n    if (this.isFontLoadingAPISupported) {\n      const {\n        loadedName,\n        src,\n        style\n      } = info;\n      const fontFace = new FontFace(loadedName, src, style);\n      this.addNativeFontFace(fontFace);\n      try {\n        await fontFace.load();\n        this.#systemFonts.add(loadedName);\n        _inspectFont?.(info);\n      } catch {\n        warn(`Cannot load system font: ${info.baseFontName}, installing it could help to improve PDF rendering.`);\n        this.removeNativeFontFace(fontFace);\n      }\n      return;\n    }\n    unreachable(\"Not implemented: loadSystemFont without the Font Loading API.\");\n  }\n  async bind(font) {\n    if (font.attached || font.missingFile && !font.systemFontInfo) {\n      return;\n    }\n    font.attached = true;\n    if (font.systemFontInfo) {\n      await this.loadSystemFont(font);\n      return;\n    }\n    if (this.isFontLoadingAPISupported) {\n      const nativeFontFace = font.createNativeFontFace();\n      if (nativeFontFace) {\n        this.addNativeFontFace(nativeFontFace);\n        try {\n          await nativeFontFace.loaded;\n        } catch (ex) {\n          warn(`Failed to load font '${nativeFontFace.family}': '${ex}'.`);\n          font.disableFontFace = true;\n          throw ex;\n        }\n      }\n      return;\n    }\n    const rule = font.createFontFaceRule();\n    if (rule) {\n      this.insertRule(rule);\n      if (this.isSyncFontLoadingSupported) {\n        return;\n      }\n      await new Promise(resolve => {\n        const request = this._queueLoadingCallback(resolve);\n        this._prepareFontLoadEvent(font, request);\n      });\n    }\n  }\n  get isFontLoadingAPISupported() {\n    const hasFonts = !!this._document?.fonts;\n    return shadow(this, \"isFontLoadingAPISupported\", hasFonts);\n  }\n  get isSyncFontLoadingSupported() {\n    let supported = false;\n    if (isNodeJS) {\n      supported = true;\n    } else if (typeof navigator !== \"undefined\" && typeof navigator?.userAgent === \"string\" && /Mozilla\\/5.0.*?rv:\\d+.*? Gecko/.test(navigator.userAgent)) {\n      supported = true;\n    }\n    return shadow(this, \"isSyncFontLoadingSupported\", supported);\n  }\n  _queueLoadingCallback(callback) {\n    function completeRequest() {\n      assert(!request.done, \"completeRequest() cannot be called twice.\");\n      request.done = true;\n      while (loadingRequests.length > 0 && loadingRequests[0].done) {\n        const otherRequest = loadingRequests.shift();\n        setTimeout(otherRequest.callback, 0);\n      }\n    }\n    const {\n      loadingRequests\n    } = this;\n    const request = {\n      done: false,\n      complete: completeRequest,\n      callback\n    };\n    loadingRequests.push(request);\n    return request;\n  }\n  get _loadTestFont() {\n    const testFont = atob(\"T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA\" + \"FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA\" + \"ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA\" + \"AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1\" + \"AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD\" + \"6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM\" + \"AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D\" + \"IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA\" + \"AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA\" + \"AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB\" + \"AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY\" + \"AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA\" + \"AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA\" + \"AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC\" + \"AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3\" + \"Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj\" + \"FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==\");\n    return shadow(this, \"_loadTestFont\", testFont);\n  }\n  _prepareFontLoadEvent(font, request) {\n    function int32(data, offset) {\n      return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff;\n    }\n    function spliceString(s, offset, remove, insert) {\n      const chunk1 = s.substring(0, offset);\n      const chunk2 = s.substring(offset + remove);\n      return chunk1 + insert + chunk2;\n    }\n    let i, ii;\n    const canvas = this._document.createElement(\"canvas\");\n    canvas.width = 1;\n    canvas.height = 1;\n    const ctx = canvas.getContext(\"2d\");\n    let called = 0;\n    function isFontReady(name, callback) {\n      if (++called > 30) {\n        warn(\"Load test font never loaded.\");\n        callback();\n        return;\n      }\n      ctx.font = \"30px \" + name;\n      ctx.fillText(\".\", 0, 20);\n      const imageData = ctx.getImageData(0, 0, 1, 1);\n      if (imageData.data[3] > 0) {\n        callback();\n        return;\n      }\n      setTimeout(isFontReady.bind(null, name, callback));\n    }\n    const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`;\n    let data = this._loadTestFont;\n    const COMMENT_OFFSET = 976;\n    data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId);\n    const CFF_CHECKSUM_OFFSET = 16;\n    const XXXX_VALUE = 0x58585858;\n    let checksum = int32(data, CFF_CHECKSUM_OFFSET);\n    for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {\n      checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0;\n    }\n    if (i < loadTestFontId.length) {\n      checksum = checksum - XXXX_VALUE + int32(loadTestFontId + \"XXX\", i) | 0;\n    }\n    data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, string32(checksum));\n    const url = `url(data:font/opentype;base64,${btoa(data)});`;\n    const rule = `@font-face {font-family:\"${loadTestFontId}\";src:${url}}`;\n    this.insertRule(rule);\n    const div = this._document.createElement(\"div\");\n    div.style.visibility = \"hidden\";\n    div.style.width = div.style.height = \"10px\";\n    div.style.position = \"absolute\";\n    div.style.top = div.style.left = \"0px\";\n    for (const name of [font.loadedName, loadTestFontId]) {\n      const span = this._document.createElement(\"span\");\n      span.textContent = \"Hi\";\n      span.style.fontFamily = name;\n      div.append(span);\n    }\n    this._document.body.append(div);\n    isFontReady(loadTestFontId, () => {\n      div.remove();\n      request.complete();\n    });\n  }\n}\nclass FontFaceObject {\n  constructor(translatedData, {\n    disableFontFace = false,\n    inspectFont = null\n  }) {\n    this.compiledGlyphs = Object.create(null);\n    for (const i in translatedData) {\n      this[i] = translatedData[i];\n    }\n    this.disableFontFace = disableFontFace === true;\n    this._inspectFont = inspectFont;\n  }\n  createNativeFontFace() {\n    if (!this.data || this.disableFontFace) {\n      return null;\n    }\n    let nativeFontFace;\n    if (!this.cssFontInfo) {\n      nativeFontFace = new FontFace(this.loadedName, this.data, {});\n    } else {\n      const css = {\n        weight: this.cssFontInfo.fontWeight\n      };\n      if (this.cssFontInfo.italicAngle) {\n        css.style = `oblique ${this.cssFontInfo.italicAngle}deg`;\n      }\n      nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css);\n    }\n    this._inspectFont?.(this);\n    return nativeFontFace;\n  }\n  createFontFaceRule() {\n    if (!this.data || this.disableFontFace) {\n      return null;\n    }\n    const data = bytesToString(this.data);\n    const url = `url(data:${this.mimetype};base64,${btoa(data)});`;\n    let rule;\n    if (!this.cssFontInfo) {\n      rule = `@font-face {font-family:\"${this.loadedName}\";src:${url}}`;\n    } else {\n      let css = `font-weight: ${this.cssFontInfo.fontWeight};`;\n      if (this.cssFontInfo.italicAngle) {\n        css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`;\n      }\n      rule = `@font-face {font-family:\"${this.cssFontInfo.fontFamily}\";${css}src:${url}}`;\n    }\n    this._inspectFont?.(this, url);\n    return rule;\n  }\n  getPathGenerator(objs, character) {\n    if (this.compiledGlyphs[character] !== undefined) {\n      return this.compiledGlyphs[character];\n    }\n    let cmds;\n    try {\n      cmds = objs.get(this.loadedName + \"_path_\" + character);\n    } catch (ex) {\n      warn(`getPathGenerator - ignoring character: \"${ex}\".`);\n    }\n    if (!Array.isArray(cmds) || cmds.length === 0) {\n      return this.compiledGlyphs[character] = function (c, size) {};\n    }\n    const commands = [];\n    for (let i = 0, ii = cmds.length; i < ii;) {\n      switch (cmds[i++]) {\n        case FontRenderOps.BEZIER_CURVE_TO:\n          {\n            const [a, b, c, d, e, f] = cmds.slice(i, i + 6);\n            commands.push(ctx => ctx.bezierCurveTo(a, b, c, d, e, f));\n            i += 6;\n          }\n          break;\n        case FontRenderOps.MOVE_TO:\n          {\n            const [a, b] = cmds.slice(i, i + 2);\n            commands.push(ctx => ctx.moveTo(a, b));\n            i += 2;\n          }\n          break;\n        case FontRenderOps.LINE_TO:\n          {\n            const [a, b] = cmds.slice(i, i + 2);\n            commands.push(ctx => ctx.lineTo(a, b));\n            i += 2;\n          }\n          break;\n        case FontRenderOps.QUADRATIC_CURVE_TO:\n          {\n            const [a, b, c, d] = cmds.slice(i, i + 4);\n            commands.push(ctx => ctx.quadraticCurveTo(a, b, c, d));\n            i += 4;\n          }\n          break;\n        case FontRenderOps.RESTORE:\n          commands.push(ctx => ctx.restore());\n          break;\n        case FontRenderOps.SAVE:\n          commands.push(ctx => ctx.save());\n          break;\n        case FontRenderOps.SCALE:\n          assert(commands.length === 2, \"Scale command is only valid at the third position.\");\n          break;\n        case FontRenderOps.TRANSFORM:\n          {\n            const [a, b, c, d, e, f] = cmds.slice(i, i + 6);\n            commands.push(ctx => ctx.transform(a, b, c, d, e, f));\n            i += 6;\n          }\n          break;\n        case FontRenderOps.TRANSLATE:\n          {\n            const [a, b] = cmds.slice(i, i + 2);\n            commands.push(ctx => ctx.translate(a, b));\n            i += 2;\n          }\n          break;\n      }\n    }\n    return this.compiledGlyphs[character] = function glyphDrawer(ctx, size) {\n      commands[0](ctx);\n      commands[1](ctx);\n      ctx.scale(size, -size);\n      for (let i = 2, ii = commands.length; i < ii; i++) {\n        commands[i](ctx);\n      }\n    };\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/node_utils.js\n\n\nif (isNodeJS) {\n  var packageCapability = Promise.withResolvers();\n  var packageMap = null;\n  const loadPackages = async () => {\n    const fs = await import( /*webpackIgnore: true*/\"fs\"),\n      http = await import( /*webpackIgnore: true*/\"http\"),\n      https = await import( /*webpackIgnore: true*/\"https\"),\n      url = await import( /*webpackIgnore: true*/\"url\");\n    let canvas, path2d;\n    return new Map(Object.entries({\n      fs,\n      http,\n      https,\n      url,\n      canvas,\n      path2d\n    }));\n  };\n  loadPackages().then(map => {\n    packageMap = map;\n    packageCapability.resolve();\n  }, reason => {\n    warn(`loadPackages: ${reason}`);\n    packageMap = new Map();\n    packageCapability.resolve();\n  });\n}\nclass NodePackages {\n  static get promise() {\n    return packageCapability.promise;\n  }\n  static get(name) {\n    return packageMap?.get(name);\n  }\n}\nconst node_utils_fetchData = function (url) {\n  const fs = NodePackages.get(\"fs\");\n  return fs.promises.readFile(url).then(data => new Uint8Array(data));\n};\nclass NodeFilterFactory extends BaseFilterFactory {}\nclass NodeCanvasFactory extends BaseCanvasFactory {\n  _createCanvas(width, height) {\n    const canvas = NodePackages.get(\"canvas\");\n    return canvas.createCanvas(width, height);\n  }\n}\nclass NodeCMapReaderFactory extends BaseCMapReaderFactory {\n  _fetchData(url, compressionType) {\n    return node_utils_fetchData(url).then(data => ({\n      cMapData: data,\n      compressionType\n    }));\n  }\n}\nclass NodeStandardFontDataFactory extends BaseStandardFontDataFactory {\n  _fetchData(url) {\n    return node_utils_fetchData(url);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/pattern_helper.js\n\n\nconst PathType = {\n  FILL: \"Fill\",\n  STROKE: \"Stroke\",\n  SHADING: \"Shading\"\n};\nfunction applyBoundingBox(ctx, bbox) {\n  if (!bbox) {\n    return;\n  }\n  const width = bbox[2] - bbox[0];\n  const height = bbox[3] - bbox[1];\n  const region = new Path2D();\n  region.rect(bbox[0], bbox[1], width, height);\n  ctx.clip(region);\n}\nclass BaseShadingPattern {\n  constructor() {\n    if (this.constructor === BaseShadingPattern) {\n      unreachable(\"Cannot initialize BaseShadingPattern.\");\n    }\n  }\n  getPattern() {\n    unreachable(\"Abstract method `getPattern` called.\");\n  }\n}\nclass RadialAxialShadingPattern extends BaseShadingPattern {\n  constructor(IR) {\n    super();\n    this._type = IR[1];\n    this._bbox = IR[2];\n    this._colorStops = IR[3];\n    this._p0 = IR[4];\n    this._p1 = IR[5];\n    this._r0 = IR[6];\n    this._r1 = IR[7];\n    this.matrix = null;\n  }\n  _createGradient(ctx) {\n    let grad;\n    if (this._type === \"axial\") {\n      grad = ctx.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]);\n    } else if (this._type === \"radial\") {\n      grad = ctx.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1);\n    }\n    for (const colorStop of this._colorStops) {\n      grad.addColorStop(colorStop[0], colorStop[1]);\n    }\n    return grad;\n  }\n  getPattern(ctx, owner, inverse, pathType) {\n    let pattern;\n    if (pathType === PathType.STROKE || pathType === PathType.FILL) {\n      const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, getCurrentTransform(ctx)) || [0, 0, 0, 0];\n      const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1;\n      const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1;\n      const tmpCanvas = owner.cachedCanvases.getCanvas(\"pattern\", width, height, true);\n      const tmpCtx = tmpCanvas.context;\n      tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);\n      tmpCtx.beginPath();\n      tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);\n      tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]);\n      inverse = Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]);\n      tmpCtx.transform(...owner.baseTransform);\n      if (this.matrix) {\n        tmpCtx.transform(...this.matrix);\n      }\n      applyBoundingBox(tmpCtx, this._bbox);\n      tmpCtx.fillStyle = this._createGradient(tmpCtx);\n      tmpCtx.fill();\n      pattern = ctx.createPattern(tmpCanvas.canvas, \"no-repeat\");\n      const domMatrix = new DOMMatrix(inverse);\n      pattern.setTransform(domMatrix);\n    } else {\n      applyBoundingBox(ctx, this._bbox);\n      pattern = this._createGradient(ctx);\n    }\n    return pattern;\n  }\n}\nfunction drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {\n  const coords = context.coords,\n    colors = context.colors;\n  const bytes = data.data,\n    rowSize = data.width * 4;\n  let tmp;\n  if (coords[p1 + 1] > coords[p2 + 1]) {\n    tmp = p1;\n    p1 = p2;\n    p2 = tmp;\n    tmp = c1;\n    c1 = c2;\n    c2 = tmp;\n  }\n  if (coords[p2 + 1] > coords[p3 + 1]) {\n    tmp = p2;\n    p2 = p3;\n    p3 = tmp;\n    tmp = c2;\n    c2 = c3;\n    c3 = tmp;\n  }\n  if (coords[p1 + 1] > coords[p2 + 1]) {\n    tmp = p1;\n    p1 = p2;\n    p2 = tmp;\n    tmp = c1;\n    c1 = c2;\n    c2 = tmp;\n  }\n  const x1 = (coords[p1] + context.offsetX) * context.scaleX;\n  const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;\n  const x2 = (coords[p2] + context.offsetX) * context.scaleX;\n  const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;\n  const x3 = (coords[p3] + context.offsetX) * context.scaleX;\n  const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY;\n  if (y1 >= y3) {\n    return;\n  }\n  const c1r = colors[c1],\n    c1g = colors[c1 + 1],\n    c1b = colors[c1 + 2];\n  const c2r = colors[c2],\n    c2g = colors[c2 + 1],\n    c2b = colors[c2 + 2];\n  const c3r = colors[c3],\n    c3g = colors[c3 + 1],\n    c3b = colors[c3 + 2];\n  const minY = Math.round(y1),\n    maxY = Math.round(y3);\n  let xa, car, cag, cab;\n  let xb, cbr, cbg, cbb;\n  for (let y = minY; y <= maxY; y++) {\n    if (y < y2) {\n      const k = y < y1 ? 0 : (y1 - y) / (y1 - y2);\n      xa = x1 - (x1 - x2) * k;\n      car = c1r - (c1r - c2r) * k;\n      cag = c1g - (c1g - c2g) * k;\n      cab = c1b - (c1b - c2b) * k;\n    } else {\n      let k;\n      if (y > y3) {\n        k = 1;\n      } else if (y2 === y3) {\n        k = 0;\n      } else {\n        k = (y2 - y) / (y2 - y3);\n      }\n      xa = x2 - (x2 - x3) * k;\n      car = c2r - (c2r - c3r) * k;\n      cag = c2g - (c2g - c3g) * k;\n      cab = c2b - (c2b - c3b) * k;\n    }\n    let k;\n    if (y < y1) {\n      k = 0;\n    } else if (y > y3) {\n      k = 1;\n    } else {\n      k = (y1 - y) / (y1 - y3);\n    }\n    xb = x1 - (x1 - x3) * k;\n    cbr = c1r - (c1r - c3r) * k;\n    cbg = c1g - (c1g - c3g) * k;\n    cbb = c1b - (c1b - c3b) * k;\n    const x1_ = Math.round(Math.min(xa, xb));\n    const x2_ = Math.round(Math.max(xa, xb));\n    let j = rowSize * y + x1_ * 4;\n    for (let x = x1_; x <= x2_; x++) {\n      k = (xa - x) / (xa - xb);\n      if (k < 0) {\n        k = 0;\n      } else if (k > 1) {\n        k = 1;\n      }\n      bytes[j++] = car - (car - cbr) * k | 0;\n      bytes[j++] = cag - (cag - cbg) * k | 0;\n      bytes[j++] = cab - (cab - cbb) * k | 0;\n      bytes[j++] = 255;\n    }\n  }\n}\nfunction drawFigure(data, figure, context) {\n  const ps = figure.coords;\n  const cs = figure.colors;\n  let i, ii;\n  switch (figure.type) {\n    case \"lattice\":\n      const verticesPerRow = figure.verticesPerRow;\n      const rows = Math.floor(ps.length / verticesPerRow) - 1;\n      const cols = verticesPerRow - 1;\n      for (i = 0; i < rows; i++) {\n        let q = i * verticesPerRow;\n        for (let j = 0; j < cols; j++, q++) {\n          drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]);\n          drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]);\n        }\n      }\n      break;\n    case \"triangles\":\n      for (i = 0, ii = ps.length; i < ii; i += 3) {\n        drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]);\n      }\n      break;\n    default:\n      throw new Error(\"illegal figure\");\n  }\n}\nclass MeshShadingPattern extends BaseShadingPattern {\n  constructor(IR) {\n    super();\n    this._coords = IR[2];\n    this._colors = IR[3];\n    this._figures = IR[4];\n    this._bounds = IR[5];\n    this._bbox = IR[7];\n    this._background = IR[8];\n    this.matrix = null;\n  }\n  _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) {\n    const EXPECTED_SCALE = 1.1;\n    const MAX_PATTERN_SIZE = 3000;\n    const BORDER_SIZE = 2;\n    const offsetX = Math.floor(this._bounds[0]);\n    const offsetY = Math.floor(this._bounds[1]);\n    const boundsWidth = Math.ceil(this._bounds[2]) - offsetX;\n    const boundsHeight = Math.ceil(this._bounds[3]) - offsetY;\n    const width = Math.min(Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);\n    const height = Math.min(Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);\n    const scaleX = boundsWidth / width;\n    const scaleY = boundsHeight / height;\n    const context = {\n      coords: this._coords,\n      colors: this._colors,\n      offsetX: -offsetX,\n      offsetY: -offsetY,\n      scaleX: 1 / scaleX,\n      scaleY: 1 / scaleY\n    };\n    const paddedWidth = width + BORDER_SIZE * 2;\n    const paddedHeight = height + BORDER_SIZE * 2;\n    const tmpCanvas = cachedCanvases.getCanvas(\"mesh\", paddedWidth, paddedHeight, false);\n    const tmpCtx = tmpCanvas.context;\n    const data = tmpCtx.createImageData(width, height);\n    if (backgroundColor) {\n      const bytes = data.data;\n      for (let i = 0, ii = bytes.length; i < ii; i += 4) {\n        bytes[i] = backgroundColor[0];\n        bytes[i + 1] = backgroundColor[1];\n        bytes[i + 2] = backgroundColor[2];\n        bytes[i + 3] = 255;\n      }\n    }\n    for (const figure of this._figures) {\n      drawFigure(data, figure, context);\n    }\n    tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE);\n    const canvas = tmpCanvas.canvas;\n    return {\n      canvas,\n      offsetX: offsetX - BORDER_SIZE * scaleX,\n      offsetY: offsetY - BORDER_SIZE * scaleY,\n      scaleX,\n      scaleY\n    };\n  }\n  getPattern(ctx, owner, inverse, pathType) {\n    applyBoundingBox(ctx, this._bbox);\n    let scale;\n    if (pathType === PathType.SHADING) {\n      scale = Util.singularValueDecompose2dScale(getCurrentTransform(ctx));\n    } else {\n      scale = Util.singularValueDecompose2dScale(owner.baseTransform);\n      if (this.matrix) {\n        const matrixScale = Util.singularValueDecompose2dScale(this.matrix);\n        scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]];\n      }\n    }\n    const temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.cachedCanvases);\n    if (pathType !== PathType.SHADING) {\n      ctx.setTransform(...owner.baseTransform);\n      if (this.matrix) {\n        ctx.transform(...this.matrix);\n      }\n    }\n    ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);\n    ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);\n    return ctx.createPattern(temporaryPatternCanvas.canvas, \"no-repeat\");\n  }\n}\nclass DummyShadingPattern extends BaseShadingPattern {\n  getPattern() {\n    return \"hotpink\";\n  }\n}\nfunction getShadingPattern(IR) {\n  switch (IR[0]) {\n    case \"RadialAxial\":\n      return new RadialAxialShadingPattern(IR);\n    case \"Mesh\":\n      return new MeshShadingPattern(IR);\n    case \"Dummy\":\n      return new DummyShadingPattern();\n  }\n  throw new Error(`Unknown IR type: ${IR[0]}`);\n}\nconst PaintType = {\n  COLORED: 1,\n  UNCOLORED: 2\n};\nclass TilingPattern {\n  static MAX_PATTERN_SIZE = 3000;\n  constructor(IR, color, ctx, canvasGraphicsFactory, baseTransform) {\n    this.operatorList = IR[2];\n    this.matrix = IR[3];\n    this.bbox = IR[4];\n    this.xstep = IR[5];\n    this.ystep = IR[6];\n    this.paintType = IR[7];\n    this.tilingType = IR[8];\n    this.color = color;\n    this.ctx = ctx;\n    this.canvasGraphicsFactory = canvasGraphicsFactory;\n    this.baseTransform = baseTransform;\n  }\n  createPatternCanvas(owner) {\n    const operatorList = this.operatorList;\n    const bbox = this.bbox;\n    const xstep = this.xstep;\n    const ystep = this.ystep;\n    const paintType = this.paintType;\n    const tilingType = this.tilingType;\n    const color = this.color;\n    const canvasGraphicsFactory = this.canvasGraphicsFactory;\n    info(\"TilingType: \" + tilingType);\n    const x0 = bbox[0],\n      y0 = bbox[1],\n      x1 = bbox[2],\n      y1 = bbox[3];\n    const matrixScale = Util.singularValueDecompose2dScale(this.matrix);\n    const curMatrixScale = Util.singularValueDecompose2dScale(this.baseTransform);\n    const combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]];\n    const dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]);\n    const dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]);\n    const tmpCanvas = owner.cachedCanvases.getCanvas(\"pattern\", dimx.size, dimy.size, true);\n    const tmpCtx = tmpCanvas.context;\n    const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx);\n    graphics.groupLevel = owner.groupLevel;\n    this.setFillAndStrokeStyleToContext(graphics, paintType, color);\n    let adjustedX0 = x0;\n    let adjustedY0 = y0;\n    let adjustedX1 = x1;\n    let adjustedY1 = y1;\n    if (x0 < 0) {\n      adjustedX0 = 0;\n      adjustedX1 += Math.abs(x0);\n    }\n    if (y0 < 0) {\n      adjustedY0 = 0;\n      adjustedY1 += Math.abs(y0);\n    }\n    tmpCtx.translate(-(dimx.scale * adjustedX0), -(dimy.scale * adjustedY0));\n    graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0);\n    tmpCtx.save();\n    this.clipBbox(graphics, adjustedX0, adjustedY0, adjustedX1, adjustedY1);\n    graphics.baseTransform = getCurrentTransform(graphics.ctx);\n    graphics.executeOperatorList(operatorList);\n    graphics.endDrawing();\n    return {\n      canvas: tmpCanvas.canvas,\n      scaleX: dimx.scale,\n      scaleY: dimy.scale,\n      offsetX: adjustedX0,\n      offsetY: adjustedY0\n    };\n  }\n  getSizeAndScale(step, realOutputSize, scale) {\n    step = Math.abs(step);\n    const maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize);\n    let size = Math.ceil(step * scale);\n    if (size >= maxSize) {\n      size = maxSize;\n    } else {\n      scale = size / step;\n    }\n    return {\n      scale,\n      size\n    };\n  }\n  clipBbox(graphics, x0, y0, x1, y1) {\n    const bboxWidth = x1 - x0;\n    const bboxHeight = y1 - y0;\n    graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight);\n    graphics.current.updateRectMinMax(getCurrentTransform(graphics.ctx), [x0, y0, x1, y1]);\n    graphics.clip();\n    graphics.endPath();\n  }\n  setFillAndStrokeStyleToContext(graphics, paintType, color) {\n    const context = graphics.ctx,\n      current = graphics.current;\n    switch (paintType) {\n      case PaintType.COLORED:\n        const ctx = this.ctx;\n        context.fillStyle = ctx.fillStyle;\n        context.strokeStyle = ctx.strokeStyle;\n        current.fillColor = ctx.fillStyle;\n        current.strokeColor = ctx.strokeStyle;\n        break;\n      case PaintType.UNCOLORED:\n        const cssColor = Util.makeHexColor(color[0], color[1], color[2]);\n        context.fillStyle = cssColor;\n        context.strokeStyle = cssColor;\n        current.fillColor = cssColor;\n        current.strokeColor = cssColor;\n        break;\n      default:\n        throw new FormatError(`Unsupported paint type: ${paintType}`);\n    }\n  }\n  getPattern(ctx, owner, inverse, pathType) {\n    let matrix = inverse;\n    if (pathType !== PathType.SHADING) {\n      matrix = Util.transform(matrix, owner.baseTransform);\n      if (this.matrix) {\n        matrix = Util.transform(matrix, this.matrix);\n      }\n    }\n    const temporaryPatternCanvas = this.createPatternCanvas(owner);\n    let domMatrix = new DOMMatrix(matrix);\n    domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);\n    domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY);\n    const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, \"repeat\");\n    pattern.setTransform(domMatrix);\n    return pattern;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/shared/image_utils.js\n\nfunction convertToRGBA(params) {\n  switch (params.kind) {\n    case ImageKind.GRAYSCALE_1BPP:\n      return convertBlackAndWhiteToRGBA(params);\n    case ImageKind.RGB_24BPP:\n      return convertRGBToRGBA(params);\n  }\n  return null;\n}\nfunction convertBlackAndWhiteToRGBA({\n  src,\n  srcPos = 0,\n  dest,\n  width,\n  height,\n  nonBlackColor = 0xffffffff,\n  inverseDecode = false\n}) {\n  const black = util_FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;\n  const [zeroMapping, oneMapping] = inverseDecode ? [nonBlackColor, black] : [black, nonBlackColor];\n  const widthInSource = width >> 3;\n  const widthRemainder = width & 7;\n  const srcLength = src.length;\n  dest = new Uint32Array(dest.buffer);\n  let destPos = 0;\n  for (let i = 0; i < height; i++) {\n    for (const max = srcPos + widthInSource; srcPos < max; srcPos++) {\n      const elem = srcPos < srcLength ? src[srcPos] : 255;\n      dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping;\n      dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping;\n      dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping;\n      dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping;\n      dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping;\n      dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping;\n      dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping;\n      dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping;\n    }\n    if (widthRemainder === 0) {\n      continue;\n    }\n    const elem = srcPos < srcLength ? src[srcPos++] : 255;\n    for (let j = 0; j < widthRemainder; j++) {\n      dest[destPos++] = elem & 1 << 7 - j ? oneMapping : zeroMapping;\n    }\n  }\n  return {\n    srcPos,\n    destPos\n  };\n}\nfunction convertRGBToRGBA({\n  src,\n  srcPos = 0,\n  dest,\n  destPos = 0,\n  width,\n  height\n}) {\n  let i = 0;\n  const len32 = src.length >> 2;\n  const src32 = new Uint32Array(src.buffer, srcPos, len32);\n  if (FeatureTest.isLittleEndian) {\n    for (; i < len32 - 2; i += 3, destPos += 4) {\n      const s1 = src32[i];\n      const s2 = src32[i + 1];\n      const s3 = src32[i + 2];\n      dest[destPos] = s1 | 0xff000000;\n      dest[destPos + 1] = s1 >>> 24 | s2 << 8 | 0xff000000;\n      dest[destPos + 2] = s2 >>> 16 | s3 << 16 | 0xff000000;\n      dest[destPos + 3] = s3 >>> 8 | 0xff000000;\n    }\n    for (let j = i * 4, jj = src.length; j < jj; j += 3) {\n      dest[destPos++] = src[j] | src[j + 1] << 8 | src[j + 2] << 16 | 0xff000000;\n    }\n  } else {\n    for (; i < len32 - 2; i += 3, destPos += 4) {\n      const s1 = src32[i];\n      const s2 = src32[i + 1];\n      const s3 = src32[i + 2];\n      dest[destPos] = s1 | 0xff;\n      dest[destPos + 1] = s1 << 24 | s2 >>> 8 | 0xff;\n      dest[destPos + 2] = s2 << 16 | s3 >>> 16 | 0xff;\n      dest[destPos + 3] = s3 << 8 | 0xff;\n    }\n    for (let j = i * 4, jj = src.length; j < jj; j += 3) {\n      dest[destPos++] = src[j] << 24 | src[j + 1] << 16 | src[j + 2] << 8 | 0xff;\n    }\n  }\n  return {\n    srcPos,\n    destPos\n  };\n}\nfunction grayToRGBA(src, dest) {\n  if (FeatureTest.isLittleEndian) {\n    for (let i = 0, ii = src.length; i < ii; i++) {\n      dest[i] = src[i] * 0x10101 | 0xff000000;\n    }\n  } else {\n    for (let i = 0, ii = src.length; i < ii; i++) {\n      dest[i] = src[i] * 0x1010100 | 0x000000ff;\n    }\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/canvas.js\n\n\n\n\nconst MIN_FONT_SIZE = 16;\nconst MAX_FONT_SIZE = 100;\nconst EXECUTION_TIME = 15;\nconst EXECUTION_STEPS = 10;\nconst MAX_SIZE_TO_COMPILE = 1000;\nconst FULL_CHUNK_HEIGHT = 16;\nfunction mirrorContextOperations(ctx, destCtx) {\n  if (ctx._removeMirroring) {\n    throw new Error(\"Context is already forwarding operations.\");\n  }\n  ctx.__originalSave = ctx.save;\n  ctx.__originalRestore = ctx.restore;\n  ctx.__originalRotate = ctx.rotate;\n  ctx.__originalScale = ctx.scale;\n  ctx.__originalTranslate = ctx.translate;\n  ctx.__originalTransform = ctx.transform;\n  ctx.__originalSetTransform = ctx.setTransform;\n  ctx.__originalResetTransform = ctx.resetTransform;\n  ctx.__originalClip = ctx.clip;\n  ctx.__originalMoveTo = ctx.moveTo;\n  ctx.__originalLineTo = ctx.lineTo;\n  ctx.__originalBezierCurveTo = ctx.bezierCurveTo;\n  ctx.__originalRect = ctx.rect;\n  ctx.__originalClosePath = ctx.closePath;\n  ctx.__originalBeginPath = ctx.beginPath;\n  ctx._removeMirroring = () => {\n    ctx.save = ctx.__originalSave;\n    ctx.restore = ctx.__originalRestore;\n    ctx.rotate = ctx.__originalRotate;\n    ctx.scale = ctx.__originalScale;\n    ctx.translate = ctx.__originalTranslate;\n    ctx.transform = ctx.__originalTransform;\n    ctx.setTransform = ctx.__originalSetTransform;\n    ctx.resetTransform = ctx.__originalResetTransform;\n    ctx.clip = ctx.__originalClip;\n    ctx.moveTo = ctx.__originalMoveTo;\n    ctx.lineTo = ctx.__originalLineTo;\n    ctx.bezierCurveTo = ctx.__originalBezierCurveTo;\n    ctx.rect = ctx.__originalRect;\n    ctx.closePath = ctx.__originalClosePath;\n    ctx.beginPath = ctx.__originalBeginPath;\n    delete ctx._removeMirroring;\n  };\n  ctx.save = function ctxSave() {\n    destCtx.save();\n    this.__originalSave();\n  };\n  ctx.restore = function ctxRestore() {\n    destCtx.restore();\n    this.__originalRestore();\n  };\n  ctx.translate = function ctxTranslate(x, y) {\n    destCtx.translate(x, y);\n    this.__originalTranslate(x, y);\n  };\n  ctx.scale = function ctxScale(x, y) {\n    destCtx.scale(x, y);\n    this.__originalScale(x, y);\n  };\n  ctx.transform = function ctxTransform(a, b, c, d, e, f) {\n    destCtx.transform(a, b, c, d, e, f);\n    this.__originalTransform(a, b, c, d, e, f);\n  };\n  ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) {\n    destCtx.setTransform(a, b, c, d, e, f);\n    this.__originalSetTransform(a, b, c, d, e, f);\n  };\n  ctx.resetTransform = function ctxResetTransform() {\n    destCtx.resetTransform();\n    this.__originalResetTransform();\n  };\n  ctx.rotate = function ctxRotate(angle) {\n    destCtx.rotate(angle);\n    this.__originalRotate(angle);\n  };\n  ctx.clip = function ctxRotate(rule) {\n    destCtx.clip(rule);\n    this.__originalClip(rule);\n  };\n  ctx.moveTo = function (x, y) {\n    destCtx.moveTo(x, y);\n    this.__originalMoveTo(x, y);\n  };\n  ctx.lineTo = function (x, y) {\n    destCtx.lineTo(x, y);\n    this.__originalLineTo(x, y);\n  };\n  ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) {\n    destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n    this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n  };\n  ctx.rect = function (x, y, width, height) {\n    destCtx.rect(x, y, width, height);\n    this.__originalRect(x, y, width, height);\n  };\n  ctx.closePath = function () {\n    destCtx.closePath();\n    this.__originalClosePath();\n  };\n  ctx.beginPath = function () {\n    destCtx.beginPath();\n    this.__originalBeginPath();\n  };\n}\nclass CachedCanvases {\n  constructor(canvasFactory) {\n    this.canvasFactory = canvasFactory;\n    this.cache = Object.create(null);\n  }\n  getCanvas(id, width, height) {\n    let canvasEntry;\n    if (this.cache[id] !== undefined) {\n      canvasEntry = this.cache[id];\n      this.canvasFactory.reset(canvasEntry, width, height);\n    } else {\n      canvasEntry = this.canvasFactory.create(width, height);\n      this.cache[id] = canvasEntry;\n    }\n    return canvasEntry;\n  }\n  delete(id) {\n    delete this.cache[id];\n  }\n  clear() {\n    for (const id in this.cache) {\n      const canvasEntry = this.cache[id];\n      this.canvasFactory.destroy(canvasEntry);\n      delete this.cache[id];\n    }\n  }\n}\nfunction drawImageAtIntegerCoords(ctx, srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH) {\n  const [a, b, c, d, tx, ty] = getCurrentTransform(ctx);\n  if (b === 0 && c === 0) {\n    const tlX = destX * a + tx;\n    const rTlX = Math.round(tlX);\n    const tlY = destY * d + ty;\n    const rTlY = Math.round(tlY);\n    const brX = (destX + destW) * a + tx;\n    const rWidth = Math.abs(Math.round(brX) - rTlX) || 1;\n    const brY = (destY + destH) * d + ty;\n    const rHeight = Math.abs(Math.round(brY) - rTlY) || 1;\n    ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY);\n    ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight);\n    ctx.setTransform(a, b, c, d, tx, ty);\n    return [rWidth, rHeight];\n  }\n  if (a === 0 && d === 0) {\n    const tlX = destY * c + tx;\n    const rTlX = Math.round(tlX);\n    const tlY = destX * b + ty;\n    const rTlY = Math.round(tlY);\n    const brX = (destY + destH) * c + tx;\n    const rWidth = Math.abs(Math.round(brX) - rTlX) || 1;\n    const brY = (destX + destW) * b + ty;\n    const rHeight = Math.abs(Math.round(brY) - rTlY) || 1;\n    ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY);\n    ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth);\n    ctx.setTransform(a, b, c, d, tx, ty);\n    return [rHeight, rWidth];\n  }\n  ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH);\n  const scaleX = Math.hypot(a, b);\n  const scaleY = Math.hypot(c, d);\n  return [scaleX * destW, scaleY * destH];\n}\nfunction compileType3Glyph(imgData) {\n  const {\n    width,\n    height\n  } = imgData;\n  if (width > MAX_SIZE_TO_COMPILE || height > MAX_SIZE_TO_COMPILE) {\n    return null;\n  }\n  const POINT_TO_PROCESS_LIMIT = 1000;\n  const POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]);\n  const width1 = width + 1;\n  let points = new Uint8Array(width1 * (height + 1));\n  let i, j, j0;\n  const lineSize = width + 7 & ~7;\n  let data = new Uint8Array(lineSize * height),\n    pos = 0;\n  for (const elem of imgData.data) {\n    let mask = 128;\n    while (mask > 0) {\n      data[pos++] = elem & mask ? 0 : 255;\n      mask >>= 1;\n    }\n  }\n  let count = 0;\n  pos = 0;\n  if (data[pos] !== 0) {\n    points[0] = 1;\n    ++count;\n  }\n  for (j = 1; j < width; j++) {\n    if (data[pos] !== data[pos + 1]) {\n      points[j] = data[pos] ? 2 : 1;\n      ++count;\n    }\n    pos++;\n  }\n  if (data[pos] !== 0) {\n    points[j] = 2;\n    ++count;\n  }\n  for (i = 1; i < height; i++) {\n    pos = i * lineSize;\n    j0 = i * width1;\n    if (data[pos - lineSize] !== data[pos]) {\n      points[j0] = data[pos] ? 1 : 8;\n      ++count;\n    }\n    let sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0);\n    for (j = 1; j < width; j++) {\n      sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0);\n      if (POINT_TYPES[sum]) {\n        points[j0 + j] = POINT_TYPES[sum];\n        ++count;\n      }\n      pos++;\n    }\n    if (data[pos - lineSize] !== data[pos]) {\n      points[j0 + j] = data[pos] ? 2 : 4;\n      ++count;\n    }\n    if (count > POINT_TO_PROCESS_LIMIT) {\n      return null;\n    }\n  }\n  pos = lineSize * (height - 1);\n  j0 = i * width1;\n  if (data[pos] !== 0) {\n    points[j0] = 8;\n    ++count;\n  }\n  for (j = 1; j < width; j++) {\n    if (data[pos] !== data[pos + 1]) {\n      points[j0 + j] = data[pos] ? 4 : 8;\n      ++count;\n    }\n    pos++;\n  }\n  if (data[pos] !== 0) {\n    points[j0 + j] = 4;\n    ++count;\n  }\n  if (count > POINT_TO_PROCESS_LIMIT) {\n    return null;\n  }\n  const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]);\n  const path = new Path2D();\n  for (i = 0; count && i <= height; i++) {\n    let p = i * width1;\n    const end = p + width;\n    while (p < end && !points[p]) {\n      p++;\n    }\n    if (p === end) {\n      continue;\n    }\n    path.moveTo(p % width1, i);\n    const p0 = p;\n    let type = points[p];\n    do {\n      const step = steps[type];\n      do {\n        p += step;\n      } while (!points[p]);\n      const pp = points[p];\n      if (pp !== 5 && pp !== 10) {\n        type = pp;\n        points[p] = 0;\n      } else {\n        type = pp & 0x33 * type >> 4;\n        points[p] &= type >> 2 | type << 2;\n      }\n      path.lineTo(p % width1, p / width1 | 0);\n      if (!points[p]) {\n        --count;\n      }\n    } while (p0 !== p);\n    --i;\n  }\n  data = null;\n  points = null;\n  const drawOutline = function (c) {\n    c.save();\n    c.scale(1 / width, -1 / height);\n    c.translate(0, -height);\n    c.fill(path);\n    c.beginPath();\n    c.restore();\n  };\n  return drawOutline;\n}\nclass CanvasExtraState {\n  constructor(width, height) {\n    this.alphaIsShape = false;\n    this.fontSize = 0;\n    this.fontSizeScale = 1;\n    this.textMatrix = IDENTITY_MATRIX;\n    this.textMatrixScale = 1;\n    this.fontMatrix = FONT_IDENTITY_MATRIX;\n    this.leading = 0;\n    this.x = 0;\n    this.y = 0;\n    this.lineX = 0;\n    this.lineY = 0;\n    this.charSpacing = 0;\n    this.wordSpacing = 0;\n    this.textHScale = 1;\n    this.textRenderingMode = TextRenderingMode.FILL;\n    this.textRise = 0;\n    this.fillColor = \"#000000\";\n    this.strokeColor = \"#000000\";\n    this.patternFill = false;\n    this.fillAlpha = 1;\n    this.strokeAlpha = 1;\n    this.lineWidth = 1;\n    this.activeSMask = null;\n    this.transferMaps = \"none\";\n    this.startNewPathAndClipBox([0, 0, width, height]);\n  }\n  clone() {\n    const clone = Object.create(this);\n    clone.clipBox = this.clipBox.slice();\n    return clone;\n  }\n  setCurrentPoint(x, y) {\n    this.x = x;\n    this.y = y;\n  }\n  updatePathMinMax(transform, x, y) {\n    [x, y] = Util.applyTransform([x, y], transform);\n    this.minX = Math.min(this.minX, x);\n    this.minY = Math.min(this.minY, y);\n    this.maxX = Math.max(this.maxX, x);\n    this.maxY = Math.max(this.maxY, y);\n  }\n  updateRectMinMax(transform, rect) {\n    const p1 = Util.applyTransform(rect, transform);\n    const p2 = Util.applyTransform(rect.slice(2), transform);\n    const p3 = Util.applyTransform([rect[0], rect[3]], transform);\n    const p4 = Util.applyTransform([rect[2], rect[1]], transform);\n    this.minX = Math.min(this.minX, p1[0], p2[0], p3[0], p4[0]);\n    this.minY = Math.min(this.minY, p1[1], p2[1], p3[1], p4[1]);\n    this.maxX = Math.max(this.maxX, p1[0], p2[0], p3[0], p4[0]);\n    this.maxY = Math.max(this.maxY, p1[1], p2[1], p3[1], p4[1]);\n  }\n  updateScalingPathMinMax(transform, minMax) {\n    Util.scaleMinMax(transform, minMax);\n    this.minX = Math.min(this.minX, minMax[0]);\n    this.minY = Math.min(this.minY, minMax[1]);\n    this.maxX = Math.max(this.maxX, minMax[2]);\n    this.maxY = Math.max(this.maxY, minMax[3]);\n  }\n  updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3, minMax) {\n    const box = Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax);\n    if (minMax) {\n      return;\n    }\n    this.updateRectMinMax(transform, box);\n  }\n  getPathBoundingBox(pathType = PathType.FILL, transform = null) {\n    const box = [this.minX, this.minY, this.maxX, this.maxY];\n    if (pathType === PathType.STROKE) {\n      if (!transform) {\n        unreachable(\"Stroke bounding box must include transform.\");\n      }\n      const scale = Util.singularValueDecompose2dScale(transform);\n      const xStrokePad = scale[0] * this.lineWidth / 2;\n      const yStrokePad = scale[1] * this.lineWidth / 2;\n      box[0] -= xStrokePad;\n      box[1] -= yStrokePad;\n      box[2] += xStrokePad;\n      box[3] += yStrokePad;\n    }\n    return box;\n  }\n  updateClipFromPath() {\n    const intersect = Util.intersect(this.clipBox, this.getPathBoundingBox());\n    this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]);\n  }\n  isEmptyClip() {\n    return this.minX === Infinity;\n  }\n  startNewPathAndClipBox(box) {\n    this.clipBox = box;\n    this.minX = Infinity;\n    this.minY = Infinity;\n    this.maxX = 0;\n    this.maxY = 0;\n  }\n  getClippedPathBoundingBox(pathType = PathType.FILL, transform = null) {\n    return Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform));\n  }\n}\nfunction putBinaryImageData(ctx, imgData) {\n  if (typeof ImageData !== \"undefined\" && imgData instanceof ImageData) {\n    ctx.putImageData(imgData, 0, 0);\n    return;\n  }\n  const height = imgData.height,\n    width = imgData.width;\n  const partialChunkHeight = height % FULL_CHUNK_HEIGHT;\n  const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;\n  const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;\n  const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);\n  let srcPos = 0,\n    destPos;\n  const src = imgData.data;\n  const dest = chunkImgData.data;\n  let i, j, thisChunkHeight, elemsInThisChunk;\n  if (imgData.kind === util_ImageKind.GRAYSCALE_1BPP) {\n    const srcLength = src.byteLength;\n    const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);\n    const dest32DataLength = dest32.length;\n    const fullSrcDiff = width + 7 >> 3;\n    const white = 0xffffffff;\n    const black = util_FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;\n    for (i = 0; i < totalChunks; i++) {\n      thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;\n      destPos = 0;\n      for (j = 0; j < thisChunkHeight; j++) {\n        const srcDiff = srcLength - srcPos;\n        let k = 0;\n        const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7;\n        const kEndUnrolled = kEnd & ~7;\n        let mask = 0;\n        let srcByte = 0;\n        for (; k < kEndUnrolled; k += 8) {\n          srcByte = src[srcPos++];\n          dest32[destPos++] = srcByte & 128 ? white : black;\n          dest32[destPos++] = srcByte & 64 ? white : black;\n          dest32[destPos++] = srcByte & 32 ? white : black;\n          dest32[destPos++] = srcByte & 16 ? white : black;\n          dest32[destPos++] = srcByte & 8 ? white : black;\n          dest32[destPos++] = srcByte & 4 ? white : black;\n          dest32[destPos++] = srcByte & 2 ? white : black;\n          dest32[destPos++] = srcByte & 1 ? white : black;\n        }\n        for (; k < kEnd; k++) {\n          if (mask === 0) {\n            srcByte = src[srcPos++];\n            mask = 128;\n          }\n          dest32[destPos++] = srcByte & mask ? white : black;\n          mask >>= 1;\n        }\n      }\n      while (destPos < dest32DataLength) {\n        dest32[destPos++] = 0;\n      }\n      ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n    }\n  } else if (imgData.kind === util_ImageKind.RGBA_32BPP) {\n    j = 0;\n    elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;\n    for (i = 0; i < fullChunks; i++) {\n      dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\n      srcPos += elemsInThisChunk;\n      ctx.putImageData(chunkImgData, 0, j);\n      j += FULL_CHUNK_HEIGHT;\n    }\n    if (i < totalChunks) {\n      elemsInThisChunk = width * partialChunkHeight * 4;\n      dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\n      ctx.putImageData(chunkImgData, 0, j);\n    }\n  } else if (imgData.kind === util_ImageKind.RGB_24BPP) {\n    thisChunkHeight = FULL_CHUNK_HEIGHT;\n    elemsInThisChunk = width * thisChunkHeight;\n    for (i = 0; i < totalChunks; i++) {\n      if (i >= fullChunks) {\n        thisChunkHeight = partialChunkHeight;\n        elemsInThisChunk = width * thisChunkHeight;\n      }\n      destPos = 0;\n      for (j = elemsInThisChunk; j--;) {\n        dest[destPos++] = src[srcPos++];\n        dest[destPos++] = src[srcPos++];\n        dest[destPos++] = src[srcPos++];\n        dest[destPos++] = 255;\n      }\n      ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n    }\n  } else {\n    throw new Error(`bad image kind: ${imgData.kind}`);\n  }\n}\nfunction putBinaryImageMask(ctx, imgData) {\n  if (imgData.bitmap) {\n    ctx.drawImage(imgData.bitmap, 0, 0);\n    return;\n  }\n  const height = imgData.height,\n    width = imgData.width;\n  const partialChunkHeight = height % FULL_CHUNK_HEIGHT;\n  const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;\n  const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;\n  const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);\n  let srcPos = 0;\n  const src = imgData.data;\n  const dest = chunkImgData.data;\n  for (let i = 0; i < totalChunks; i++) {\n    const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;\n    ({\n      srcPos\n    } = convertBlackAndWhiteToRGBA({\n      src,\n      srcPos,\n      dest,\n      width,\n      height: thisChunkHeight,\n      nonBlackColor: 0\n    }));\n    ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n  }\n}\nfunction copyCtxState(sourceCtx, destCtx) {\n  const properties = [\"strokeStyle\", \"fillStyle\", \"fillRule\", \"globalAlpha\", \"lineWidth\", \"lineCap\", \"lineJoin\", \"miterLimit\", \"globalCompositeOperation\", \"font\", \"filter\"];\n  for (const property of properties) {\n    if (sourceCtx[property] !== undefined) {\n      destCtx[property] = sourceCtx[property];\n    }\n  }\n  if (sourceCtx.setLineDash !== undefined) {\n    destCtx.setLineDash(sourceCtx.getLineDash());\n    destCtx.lineDashOffset = sourceCtx.lineDashOffset;\n  }\n}\nfunction resetCtxToDefault(ctx) {\n  ctx.strokeStyle = ctx.fillStyle = \"#000000\";\n  ctx.fillRule = \"nonzero\";\n  ctx.globalAlpha = 1;\n  ctx.lineWidth = 1;\n  ctx.lineCap = \"butt\";\n  ctx.lineJoin = \"miter\";\n  ctx.miterLimit = 10;\n  ctx.globalCompositeOperation = \"source-over\";\n  ctx.font = \"10px sans-serif\";\n  if (ctx.setLineDash !== undefined) {\n    ctx.setLineDash([]);\n    ctx.lineDashOffset = 0;\n  }\n  if (!isNodeJS) {\n    const {\n      filter\n    } = ctx;\n    if (filter !== \"none\" && filter !== \"\") {\n      ctx.filter = \"none\";\n    }\n  }\n}\nfunction getImageSmoothingEnabled(transform, interpolate) {\n  if (interpolate) {\n    return true;\n  }\n  const scale = Util.singularValueDecompose2dScale(transform);\n  scale[0] = Math.fround(scale[0]);\n  scale[1] = Math.fround(scale[1]);\n  const actualScale = Math.fround((globalThis.devicePixelRatio || 1) * PixelsPerInch.PDF_TO_CSS_UNITS);\n  return scale[0] <= actualScale && scale[1] <= actualScale;\n}\nconst LINE_CAP_STYLES = [\"butt\", \"round\", \"square\"];\nconst LINE_JOIN_STYLES = [\"miter\", \"round\", \"bevel\"];\nconst NORMAL_CLIP = {};\nconst EO_CLIP = {};\nclass CanvasGraphics {\n  constructor(canvasCtx, commonObjs, objs, canvasFactory, filterFactory, {\n    optionalContentConfig,\n    markedContentStack = null\n  }, annotationCanvasMap, pageColors) {\n    this.ctx = canvasCtx;\n    this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);\n    this.stateStack = [];\n    this.pendingClip = null;\n    this.pendingEOFill = false;\n    this.res = null;\n    this.xobjs = null;\n    this.commonObjs = commonObjs;\n    this.objs = objs;\n    this.canvasFactory = canvasFactory;\n    this.filterFactory = filterFactory;\n    this.groupStack = [];\n    this.processingType3 = null;\n    this.baseTransform = null;\n    this.baseTransformStack = [];\n    this.groupLevel = 0;\n    this.smaskStack = [];\n    this.smaskCounter = 0;\n    this.tempSMask = null;\n    this.suspendedCtx = null;\n    this.contentVisible = true;\n    this.markedContentStack = markedContentStack || [];\n    this.optionalContentConfig = optionalContentConfig;\n    this.cachedCanvases = new CachedCanvases(this.canvasFactory);\n    this.cachedPatterns = new Map();\n    this.annotationCanvasMap = annotationCanvasMap;\n    this.viewportScale = 1;\n    this.outputScaleX = 1;\n    this.outputScaleY = 1;\n    this.pageColors = pageColors;\n    this._cachedScaleForStroking = [-1, 0];\n    this._cachedGetSinglePixelWidth = null;\n    this._cachedBitmapsMap = new Map();\n  }\n  getObject(data, fallback = null) {\n    if (typeof data === \"string\") {\n      return data.startsWith(\"g_\") ? this.commonObjs.get(data) : this.objs.get(data);\n    }\n    return fallback;\n  }\n  beginDrawing({\n    transform,\n    viewport,\n    transparency = false,\n    background = null\n  }) {\n    const width = this.ctx.canvas.width;\n    const height = this.ctx.canvas.height;\n    const savedFillStyle = this.ctx.fillStyle;\n    this.ctx.fillStyle = background || \"#ffffff\";\n    this.ctx.fillRect(0, 0, width, height);\n    this.ctx.fillStyle = savedFillStyle;\n    if (transparency) {\n      const transparentCanvas = this.cachedCanvases.getCanvas(\"transparent\", width, height);\n      this.compositeCtx = this.ctx;\n      this.transparentCanvas = transparentCanvas.canvas;\n      this.ctx = transparentCanvas.context;\n      this.ctx.save();\n      this.ctx.transform(...getCurrentTransform(this.compositeCtx));\n    }\n    this.ctx.save();\n    resetCtxToDefault(this.ctx);\n    if (transform) {\n      this.ctx.transform(...transform);\n      this.outputScaleX = transform[0];\n      this.outputScaleY = transform[0];\n    }\n    this.ctx.transform(...viewport.transform);\n    this.viewportScale = viewport.scale;\n    this.baseTransform = getCurrentTransform(this.ctx);\n  }\n  executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) {\n    const argsArray = operatorList.argsArray;\n    const fnArray = operatorList.fnArray;\n    let i = executionStartIdx || 0;\n    const argsArrayLen = argsArray.length;\n    if (argsArrayLen === i) {\n      return i;\n    }\n    const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === \"function\";\n    const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;\n    let steps = 0;\n    const commonObjs = this.commonObjs;\n    const objs = this.objs;\n    let fnId;\n    while (true) {\n      if (stepper !== undefined && i === stepper.nextBreakPoint) {\n        stepper.breakIt(i, continueCallback);\n        return i;\n      }\n      fnId = fnArray[i];\n      if (fnId !== OPS.dependency) {\n        this[fnId].apply(this, argsArray[i]);\n      } else {\n        for (const depObjId of argsArray[i]) {\n          const objsPool = depObjId.startsWith(\"g_\") ? commonObjs : objs;\n          if (!objsPool.has(depObjId)) {\n            objsPool.get(depObjId, continueCallback);\n            return i;\n          }\n        }\n      }\n      i++;\n      if (i === argsArrayLen) {\n        return i;\n      }\n      if (chunkOperations && ++steps > EXECUTION_STEPS) {\n        if (Date.now() > endTime) {\n          continueCallback();\n          return i;\n        }\n        steps = 0;\n      }\n    }\n  }\n  #restoreInitialState() {\n    while (this.stateStack.length || this.inSMaskMode) {\n      this.restore();\n    }\n    this.ctx.restore();\n    if (this.transparentCanvas) {\n      this.ctx = this.compositeCtx;\n      this.ctx.save();\n      this.ctx.setTransform(1, 0, 0, 1, 0, 0);\n      this.ctx.drawImage(this.transparentCanvas, 0, 0);\n      this.ctx.restore();\n      this.transparentCanvas = null;\n    }\n  }\n  endDrawing() {\n    this.#restoreInitialState();\n    this.cachedCanvases.clear();\n    this.cachedPatterns.clear();\n    for (const cache of this._cachedBitmapsMap.values()) {\n      for (const canvas of cache.values()) {\n        if (typeof HTMLCanvasElement !== \"undefined\" && canvas instanceof HTMLCanvasElement) {\n          canvas.width = canvas.height = 0;\n        }\n      }\n      cache.clear();\n    }\n    this._cachedBitmapsMap.clear();\n    this.#drawFilter();\n  }\n  #drawFilter() {\n    if (this.pageColors) {\n      const hcmFilterId = this.filterFactory.addHCMFilter(this.pageColors.foreground, this.pageColors.background);\n      if (hcmFilterId !== \"none\") {\n        const savedFilter = this.ctx.filter;\n        this.ctx.filter = hcmFilterId;\n        this.ctx.drawImage(this.ctx.canvas, 0, 0);\n        this.ctx.filter = savedFilter;\n      }\n    }\n  }\n  _scaleImage(img, inverseTransform) {\n    const width = img.width;\n    const height = img.height;\n    let widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1);\n    let heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1);\n    let paintWidth = width,\n      paintHeight = height;\n    let tmpCanvasId = \"prescale1\";\n    let tmpCanvas, tmpCtx;\n    while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) {\n      let newWidth = paintWidth,\n        newHeight = paintHeight;\n      if (widthScale > 2 && paintWidth > 1) {\n        newWidth = paintWidth >= 16384 ? Math.floor(paintWidth / 2) - 1 || 1 : Math.ceil(paintWidth / 2);\n        widthScale /= paintWidth / newWidth;\n      }\n      if (heightScale > 2 && paintHeight > 1) {\n        newHeight = paintHeight >= 16384 ? Math.floor(paintHeight / 2) - 1 || 1 : Math.ceil(paintHeight) / 2;\n        heightScale /= paintHeight / newHeight;\n      }\n      tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight);\n      tmpCtx = tmpCanvas.context;\n      tmpCtx.clearRect(0, 0, newWidth, newHeight);\n      tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight);\n      img = tmpCanvas.canvas;\n      paintWidth = newWidth;\n      paintHeight = newHeight;\n      tmpCanvasId = tmpCanvasId === \"prescale1\" ? \"prescale2\" : \"prescale1\";\n    }\n    return {\n      img,\n      paintWidth,\n      paintHeight\n    };\n  }\n  _createMaskCanvas(img) {\n    const ctx = this.ctx;\n    const {\n      width,\n      height\n    } = img;\n    const fillColor = this.current.fillColor;\n    const isPatternFill = this.current.patternFill;\n    const currentTransform = getCurrentTransform(ctx);\n    let cache, cacheKey, scaled, maskCanvas;\n    if ((img.bitmap || img.data) && img.count > 1) {\n      const mainKey = img.bitmap || img.data.buffer;\n      cacheKey = JSON.stringify(isPatternFill ? currentTransform : [currentTransform.slice(0, 4), fillColor]);\n      cache = this._cachedBitmapsMap.get(mainKey);\n      if (!cache) {\n        cache = new Map();\n        this._cachedBitmapsMap.set(mainKey, cache);\n      }\n      const cachedImage = cache.get(cacheKey);\n      if (cachedImage && !isPatternFill) {\n        const offsetX = Math.round(Math.min(currentTransform[0], currentTransform[2]) + currentTransform[4]);\n        const offsetY = Math.round(Math.min(currentTransform[1], currentTransform[3]) + currentTransform[5]);\n        return {\n          canvas: cachedImage,\n          offsetX,\n          offsetY\n        };\n      }\n      scaled = cachedImage;\n    }\n    if (!scaled) {\n      maskCanvas = this.cachedCanvases.getCanvas(\"maskCanvas\", width, height);\n      putBinaryImageMask(maskCanvas.context, img);\n    }\n    let maskToCanvas = Util.transform(currentTransform, [1 / width, 0, 0, -1 / height, 0, 0]);\n    maskToCanvas = Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]);\n    const [minX, minY, maxX, maxY] = Util.getAxialAlignedBoundingBox([0, 0, width, height], maskToCanvas);\n    const drawnWidth = Math.round(maxX - minX) || 1;\n    const drawnHeight = Math.round(maxY - minY) || 1;\n    const fillCanvas = this.cachedCanvases.getCanvas(\"fillCanvas\", drawnWidth, drawnHeight);\n    const fillCtx = fillCanvas.context;\n    const offsetX = minX;\n    const offsetY = minY;\n    fillCtx.translate(-offsetX, -offsetY);\n    fillCtx.transform(...maskToCanvas);\n    if (!scaled) {\n      scaled = this._scaleImage(maskCanvas.canvas, getCurrentTransformInverse(fillCtx));\n      scaled = scaled.img;\n      if (cache && isPatternFill) {\n        cache.set(cacheKey, scaled);\n      }\n    }\n    fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled(getCurrentTransform(fillCtx), img.interpolate);\n    drawImageAtIntegerCoords(fillCtx, scaled, 0, 0, scaled.width, scaled.height, 0, 0, width, height);\n    fillCtx.globalCompositeOperation = \"source-in\";\n    const inverse = Util.transform(getCurrentTransformInverse(fillCtx), [1, 0, 0, 1, -offsetX, -offsetY]);\n    fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, PathType.FILL) : fillColor;\n    fillCtx.fillRect(0, 0, width, height);\n    if (cache && !isPatternFill) {\n      this.cachedCanvases.delete(\"fillCanvas\");\n      cache.set(cacheKey, fillCanvas.canvas);\n    }\n    return {\n      canvas: fillCanvas.canvas,\n      offsetX: Math.round(offsetX),\n      offsetY: Math.round(offsetY)\n    };\n  }\n  setLineWidth(width) {\n    if (width !== this.current.lineWidth) {\n      this._cachedScaleForStroking[0] = -1;\n    }\n    this.current.lineWidth = width;\n    this.ctx.lineWidth = width;\n  }\n  setLineCap(style) {\n    this.ctx.lineCap = LINE_CAP_STYLES[style];\n  }\n  setLineJoin(style) {\n    this.ctx.lineJoin = LINE_JOIN_STYLES[style];\n  }\n  setMiterLimit(limit) {\n    this.ctx.miterLimit = limit;\n  }\n  setDash(dashArray, dashPhase) {\n    const ctx = this.ctx;\n    if (ctx.setLineDash !== undefined) {\n      ctx.setLineDash(dashArray);\n      ctx.lineDashOffset = dashPhase;\n    }\n  }\n  setRenderingIntent(intent) {}\n  setFlatness(flatness) {}\n  setGState(states) {\n    for (const [key, value] of states) {\n      switch (key) {\n        case \"LW\":\n          this.setLineWidth(value);\n          break;\n        case \"LC\":\n          this.setLineCap(value);\n          break;\n        case \"LJ\":\n          this.setLineJoin(value);\n          break;\n        case \"ML\":\n          this.setMiterLimit(value);\n          break;\n        case \"D\":\n          this.setDash(value[0], value[1]);\n          break;\n        case \"RI\":\n          this.setRenderingIntent(value);\n          break;\n        case \"FL\":\n          this.setFlatness(value);\n          break;\n        case \"Font\":\n          this.setFont(value[0], value[1]);\n          break;\n        case \"CA\":\n          this.current.strokeAlpha = value;\n          break;\n        case \"ca\":\n          this.current.fillAlpha = value;\n          this.ctx.globalAlpha = value;\n          break;\n        case \"BM\":\n          this.ctx.globalCompositeOperation = value;\n          break;\n        case \"SMask\":\n          this.current.activeSMask = value ? this.tempSMask : null;\n          this.tempSMask = null;\n          this.checkSMaskState();\n          break;\n        case \"TR\":\n          this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(value);\n          break;\n      }\n    }\n  }\n  get inSMaskMode() {\n    return !!this.suspendedCtx;\n  }\n  checkSMaskState() {\n    const inSMaskMode = this.inSMaskMode;\n    if (this.current.activeSMask && !inSMaskMode) {\n      this.beginSMaskMode();\n    } else if (!this.current.activeSMask && inSMaskMode) {\n      this.endSMaskMode();\n    }\n  }\n  beginSMaskMode() {\n    if (this.inSMaskMode) {\n      throw new Error(\"beginSMaskMode called while already in smask mode\");\n    }\n    const drawnWidth = this.ctx.canvas.width;\n    const drawnHeight = this.ctx.canvas.height;\n    const cacheId = \"smaskGroupAt\" + this.groupLevel;\n    const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight);\n    this.suspendedCtx = this.ctx;\n    this.ctx = scratchCanvas.context;\n    const ctx = this.ctx;\n    ctx.setTransform(...getCurrentTransform(this.suspendedCtx));\n    copyCtxState(this.suspendedCtx, ctx);\n    mirrorContextOperations(ctx, this.suspendedCtx);\n    this.setGState([[\"BM\", \"source-over\"], [\"ca\", 1], [\"CA\", 1]]);\n  }\n  endSMaskMode() {\n    if (!this.inSMaskMode) {\n      throw new Error(\"endSMaskMode called while not in smask mode\");\n    }\n    this.ctx._removeMirroring();\n    copyCtxState(this.ctx, this.suspendedCtx);\n    this.ctx = this.suspendedCtx;\n    this.suspendedCtx = null;\n  }\n  compose(dirtyBox) {\n    if (!this.current.activeSMask) {\n      return;\n    }\n    if (!dirtyBox) {\n      dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height];\n    } else {\n      dirtyBox[0] = Math.floor(dirtyBox[0]);\n      dirtyBox[1] = Math.floor(dirtyBox[1]);\n      dirtyBox[2] = Math.ceil(dirtyBox[2]);\n      dirtyBox[3] = Math.ceil(dirtyBox[3]);\n    }\n    const smask = this.current.activeSMask;\n    const suspendedCtx = this.suspendedCtx;\n    this.composeSMask(suspendedCtx, smask, this.ctx, dirtyBox);\n    this.ctx.save();\n    this.ctx.setTransform(1, 0, 0, 1, 0, 0);\n    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n    this.ctx.restore();\n  }\n  composeSMask(ctx, smask, layerCtx, layerBox) {\n    const layerOffsetX = layerBox[0];\n    const layerOffsetY = layerBox[1];\n    const layerWidth = layerBox[2] - layerOffsetX;\n    const layerHeight = layerBox[3] - layerOffsetY;\n    if (layerWidth === 0 || layerHeight === 0) {\n      return;\n    }\n    this.genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY);\n    ctx.save();\n    ctx.globalAlpha = 1;\n    ctx.globalCompositeOperation = \"source-over\";\n    ctx.setTransform(1, 0, 0, 1, 0, 0);\n    ctx.drawImage(layerCtx.canvas, 0, 0);\n    ctx.restore();\n  }\n  genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) {\n    let maskCanvas = maskCtx.canvas;\n    let maskX = layerOffsetX - maskOffsetX;\n    let maskY = layerOffsetY - maskOffsetY;\n    if (backdrop) {\n      if (maskX < 0 || maskY < 0 || maskX + width > maskCanvas.width || maskY + height > maskCanvas.height) {\n        const canvas = this.cachedCanvases.getCanvas(\"maskExtension\", width, height);\n        const ctx = canvas.context;\n        ctx.drawImage(maskCanvas, -maskX, -maskY);\n        if (backdrop.some(c => c !== 0)) {\n          ctx.globalCompositeOperation = \"destination-atop\";\n          ctx.fillStyle = Util.makeHexColor(...backdrop);\n          ctx.fillRect(0, 0, width, height);\n          ctx.globalCompositeOperation = \"source-over\";\n        }\n        maskCanvas = canvas.canvas;\n        maskX = maskY = 0;\n      } else if (backdrop.some(c => c !== 0)) {\n        maskCtx.save();\n        maskCtx.globalAlpha = 1;\n        maskCtx.setTransform(1, 0, 0, 1, 0, 0);\n        const clip = new Path2D();\n        clip.rect(maskX, maskY, width, height);\n        maskCtx.clip(clip);\n        maskCtx.globalCompositeOperation = \"destination-atop\";\n        maskCtx.fillStyle = Util.makeHexColor(...backdrop);\n        maskCtx.fillRect(maskX, maskY, width, height);\n        maskCtx.restore();\n      }\n    }\n    layerCtx.save();\n    layerCtx.globalAlpha = 1;\n    layerCtx.setTransform(1, 0, 0, 1, 0, 0);\n    if (subtype === \"Alpha\" && transferMap) {\n      layerCtx.filter = this.filterFactory.addAlphaFilter(transferMap);\n    } else if (subtype === \"Luminosity\") {\n      layerCtx.filter = this.filterFactory.addLuminosityFilter(transferMap);\n    }\n    const clip = new Path2D();\n    clip.rect(layerOffsetX, layerOffsetY, width, height);\n    layerCtx.clip(clip);\n    layerCtx.globalCompositeOperation = \"destination-in\";\n    layerCtx.drawImage(maskCanvas, maskX, maskY, width, height, layerOffsetX, layerOffsetY, width, height);\n    layerCtx.restore();\n  }\n  save() {\n    if (this.inSMaskMode) {\n      copyCtxState(this.ctx, this.suspendedCtx);\n      this.suspendedCtx.save();\n    } else {\n      this.ctx.save();\n    }\n    const old = this.current;\n    this.stateStack.push(old);\n    this.current = old.clone();\n  }\n  restore() {\n    if (this.stateStack.length === 0 && this.inSMaskMode) {\n      this.endSMaskMode();\n    }\n    if (this.stateStack.length !== 0) {\n      this.current = this.stateStack.pop();\n      if (this.inSMaskMode) {\n        this.suspendedCtx.restore();\n        copyCtxState(this.suspendedCtx, this.ctx);\n      } else {\n        this.ctx.restore();\n      }\n      this.checkSMaskState();\n      this.pendingClip = null;\n      this._cachedScaleForStroking[0] = -1;\n      this._cachedGetSinglePixelWidth = null;\n    }\n  }\n  transform(a, b, c, d, e, f) {\n    this.ctx.transform(a, b, c, d, e, f);\n    this._cachedScaleForStroking[0] = -1;\n    this._cachedGetSinglePixelWidth = null;\n  }\n  constructPath(ops, args, minMax) {\n    const ctx = this.ctx;\n    const current = this.current;\n    let x = current.x,\n      y = current.y;\n    let startX, startY;\n    const currentTransform = getCurrentTransform(ctx);\n    const isScalingMatrix = currentTransform[0] === 0 && currentTransform[3] === 0 || currentTransform[1] === 0 && currentTransform[2] === 0;\n    const minMaxForBezier = isScalingMatrix ? minMax.slice(0) : null;\n    for (let i = 0, j = 0, ii = ops.length; i < ii; i++) {\n      switch (ops[i] | 0) {\n        case OPS.rectangle:\n          x = args[j++];\n          y = args[j++];\n          const width = args[j++];\n          const height = args[j++];\n          const xw = x + width;\n          const yh = y + height;\n          ctx.moveTo(x, y);\n          if (width === 0 || height === 0) {\n            ctx.lineTo(xw, yh);\n          } else {\n            ctx.lineTo(xw, y);\n            ctx.lineTo(xw, yh);\n            ctx.lineTo(x, yh);\n          }\n          if (!isScalingMatrix) {\n            current.updateRectMinMax(currentTransform, [x, y, xw, yh]);\n          }\n          ctx.closePath();\n          break;\n        case OPS.moveTo:\n          x = args[j++];\n          y = args[j++];\n          ctx.moveTo(x, y);\n          if (!isScalingMatrix) {\n            current.updatePathMinMax(currentTransform, x, y);\n          }\n          break;\n        case OPS.lineTo:\n          x = args[j++];\n          y = args[j++];\n          ctx.lineTo(x, y);\n          if (!isScalingMatrix) {\n            current.updatePathMinMax(currentTransform, x, y);\n          }\n          break;\n        case OPS.curveTo:\n          startX = x;\n          startY = y;\n          x = args[j + 4];\n          y = args[j + 5];\n          ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y);\n          current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], args[j + 2], args[j + 3], x, y, minMaxForBezier);\n          j += 6;\n          break;\n        case OPS.curveTo2:\n          startX = x;\n          startY = y;\n          ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]);\n          current.updateCurvePathMinMax(currentTransform, startX, startY, x, y, args[j], args[j + 1], args[j + 2], args[j + 3], minMaxForBezier);\n          x = args[j + 2];\n          y = args[j + 3];\n          j += 4;\n          break;\n        case OPS.curveTo3:\n          startX = x;\n          startY = y;\n          x = args[j + 2];\n          y = args[j + 3];\n          ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y);\n          current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], x, y, x, y, minMaxForBezier);\n          j += 4;\n          break;\n        case OPS.closePath:\n          ctx.closePath();\n          break;\n      }\n    }\n    if (isScalingMatrix) {\n      current.updateScalingPathMinMax(currentTransform, minMaxForBezier);\n    }\n    current.setCurrentPoint(x, y);\n  }\n  closePath() {\n    this.ctx.closePath();\n  }\n  stroke(consumePath = true) {\n    const ctx = this.ctx;\n    const strokeColor = this.current.strokeColor;\n    ctx.globalAlpha = this.current.strokeAlpha;\n    if (this.contentVisible) {\n      if (typeof strokeColor === \"object\" && strokeColor?.getPattern) {\n        ctx.save();\n        ctx.strokeStyle = strokeColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.STROKE);\n        this.rescaleAndStroke(false);\n        ctx.restore();\n      } else {\n        this.rescaleAndStroke(true);\n      }\n    }\n    if (consumePath) {\n      this.consumePath(this.current.getClippedPathBoundingBox());\n    }\n    ctx.globalAlpha = this.current.fillAlpha;\n  }\n  closeStroke() {\n    this.closePath();\n    this.stroke();\n  }\n  fill(consumePath = true) {\n    const ctx = this.ctx;\n    const fillColor = this.current.fillColor;\n    const isPatternFill = this.current.patternFill;\n    let needRestore = false;\n    if (isPatternFill) {\n      ctx.save();\n      ctx.fillStyle = fillColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.FILL);\n      needRestore = true;\n    }\n    const intersect = this.current.getClippedPathBoundingBox();\n    if (this.contentVisible && intersect !== null) {\n      if (this.pendingEOFill) {\n        ctx.fill(\"evenodd\");\n        this.pendingEOFill = false;\n      } else {\n        ctx.fill();\n      }\n    }\n    if (needRestore) {\n      ctx.restore();\n    }\n    if (consumePath) {\n      this.consumePath(intersect);\n    }\n  }\n  eoFill() {\n    this.pendingEOFill = true;\n    this.fill();\n  }\n  fillStroke() {\n    this.fill(false);\n    this.stroke(false);\n    this.consumePath();\n  }\n  eoFillStroke() {\n    this.pendingEOFill = true;\n    this.fillStroke();\n  }\n  closeFillStroke() {\n    this.closePath();\n    this.fillStroke();\n  }\n  closeEOFillStroke() {\n    this.pendingEOFill = true;\n    this.closePath();\n    this.fillStroke();\n  }\n  endPath() {\n    this.consumePath();\n  }\n  clip() {\n    this.pendingClip = NORMAL_CLIP;\n  }\n  eoClip() {\n    this.pendingClip = EO_CLIP;\n  }\n  beginText() {\n    this.current.textMatrix = IDENTITY_MATRIX;\n    this.current.textMatrixScale = 1;\n    this.current.x = this.current.lineX = 0;\n    this.current.y = this.current.lineY = 0;\n  }\n  endText() {\n    const paths = this.pendingTextPaths;\n    const ctx = this.ctx;\n    if (paths === undefined) {\n      ctx.beginPath();\n      return;\n    }\n    ctx.save();\n    ctx.beginPath();\n    for (const path of paths) {\n      ctx.setTransform(...path.transform);\n      ctx.translate(path.x, path.y);\n      path.addToPath(ctx, path.fontSize);\n    }\n    ctx.restore();\n    ctx.clip();\n    ctx.beginPath();\n    delete this.pendingTextPaths;\n  }\n  setCharSpacing(spacing) {\n    this.current.charSpacing = spacing;\n  }\n  setWordSpacing(spacing) {\n    this.current.wordSpacing = spacing;\n  }\n  setHScale(scale) {\n    this.current.textHScale = scale / 100;\n  }\n  setLeading(leading) {\n    this.current.leading = -leading;\n  }\n  setFont(fontRefName, size) {\n    const fontObj = this.commonObjs.get(fontRefName);\n    const current = this.current;\n    if (!fontObj) {\n      throw new Error(`Can't find font for ${fontRefName}`);\n    }\n    current.fontMatrix = fontObj.fontMatrix || FONT_IDENTITY_MATRIX;\n    if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) {\n      warn(\"Invalid font matrix for font \" + fontRefName);\n    }\n    if (size < 0) {\n      size = -size;\n      current.fontDirection = -1;\n    } else {\n      current.fontDirection = 1;\n    }\n    this.current.font = fontObj;\n    this.current.fontSize = size;\n    if (fontObj.isType3Font) {\n      return;\n    }\n    const name = fontObj.loadedName || \"sans-serif\";\n    const typeface = fontObj.systemFontInfo?.css || `\"${name}\", ${fontObj.fallbackName}`;\n    let bold = \"normal\";\n    if (fontObj.black) {\n      bold = \"900\";\n    } else if (fontObj.bold) {\n      bold = \"bold\";\n    }\n    const italic = fontObj.italic ? \"italic\" : \"normal\";\n    let browserFontSize = size;\n    if (size < MIN_FONT_SIZE) {\n      browserFontSize = MIN_FONT_SIZE;\n    } else if (size > MAX_FONT_SIZE) {\n      browserFontSize = MAX_FONT_SIZE;\n    }\n    this.current.fontSizeScale = size / browserFontSize;\n    this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`;\n  }\n  setTextRenderingMode(mode) {\n    this.current.textRenderingMode = mode;\n  }\n  setTextRise(rise) {\n    this.current.textRise = rise;\n  }\n  moveText(x, y) {\n    this.current.x = this.current.lineX += x;\n    this.current.y = this.current.lineY += y;\n  }\n  setLeadingMoveText(x, y) {\n    this.setLeading(-y);\n    this.moveText(x, y);\n  }\n  setTextMatrix(a, b, c, d, e, f) {\n    this.current.textMatrix = [a, b, c, d, e, f];\n    this.current.textMatrixScale = Math.hypot(a, b);\n    this.current.x = this.current.lineX = 0;\n    this.current.y = this.current.lineY = 0;\n  }\n  nextLine() {\n    this.moveText(0, this.current.leading);\n  }\n  paintChar(character, x, y, patternTransform) {\n    const ctx = this.ctx;\n    const current = this.current;\n    const font = current.font;\n    const textRenderingMode = current.textRenderingMode;\n    const fontSize = current.fontSize / current.fontSizeScale;\n    const fillStrokeMode = textRenderingMode & TextRenderingMode.FILL_STROKE_MASK;\n    const isAddToPathSet = !!(textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG);\n    const patternFill = current.patternFill && !font.missingFile;\n    let addToPath;\n    if (font.disableFontFace || isAddToPathSet || patternFill) {\n      addToPath = font.getPathGenerator(this.commonObjs, character);\n    }\n    if (font.disableFontFace || patternFill) {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.beginPath();\n      addToPath(ctx, fontSize);\n      if (patternTransform) {\n        ctx.setTransform(...patternTransform);\n      }\n      if (fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE) {\n        ctx.fill();\n      }\n      if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) {\n        ctx.stroke();\n      }\n      ctx.restore();\n    } else {\n      if (fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE) {\n        ctx.fillText(character, x, y);\n      }\n      if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) {\n        ctx.strokeText(character, x, y);\n      }\n    }\n    if (isAddToPathSet) {\n      const paths = this.pendingTextPaths ||= [];\n      paths.push({\n        transform: getCurrentTransform(ctx),\n        x,\n        y,\n        fontSize,\n        addToPath\n      });\n    }\n  }\n  get isFontSubpixelAAEnabled() {\n    const {\n      context: ctx\n    } = this.cachedCanvases.getCanvas(\"isFontSubpixelAAEnabled\", 10, 10);\n    ctx.scale(1.5, 1);\n    ctx.fillText(\"I\", 0, 10);\n    const data = ctx.getImageData(0, 0, 10, 10).data;\n    let enabled = false;\n    for (let i = 3; i < data.length; i += 4) {\n      if (data[i] > 0 && data[i] < 255) {\n        enabled = true;\n        break;\n      }\n    }\n    return shadow(this, \"isFontSubpixelAAEnabled\", enabled);\n  }\n  showText(glyphs) {\n    const current = this.current;\n    const font = current.font;\n    if (font.isType3Font) {\n      return this.showType3Text(glyphs);\n    }\n    const fontSize = current.fontSize;\n    if (fontSize === 0) {\n      return undefined;\n    }\n    const ctx = this.ctx;\n    const fontSizeScale = current.fontSizeScale;\n    const charSpacing = current.charSpacing;\n    const wordSpacing = current.wordSpacing;\n    const fontDirection = current.fontDirection;\n    const textHScale = current.textHScale * fontDirection;\n    const glyphsLength = glyphs.length;\n    const vertical = font.vertical;\n    const spacingDir = vertical ? 1 : -1;\n    const defaultVMetrics = font.defaultVMetrics;\n    const widthAdvanceScale = fontSize * current.fontMatrix[0];\n    const simpleFillText = current.textRenderingMode === TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill;\n    ctx.save();\n    ctx.transform(...current.textMatrix);\n    ctx.translate(current.x, current.y + current.textRise);\n    if (fontDirection > 0) {\n      ctx.scale(textHScale, -1);\n    } else {\n      ctx.scale(textHScale, 1);\n    }\n    let patternTransform;\n    if (current.patternFill) {\n      ctx.save();\n      const pattern = current.fillColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.FILL);\n      patternTransform = getCurrentTransform(ctx);\n      ctx.restore();\n      ctx.fillStyle = pattern;\n    }\n    let lineWidth = current.lineWidth;\n    const scale = current.textMatrixScale;\n    if (scale === 0 || lineWidth === 0) {\n      const fillStrokeMode = current.textRenderingMode & TextRenderingMode.FILL_STROKE_MASK;\n      if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) {\n        lineWidth = this.getSinglePixelWidth();\n      }\n    } else {\n      lineWidth /= scale;\n    }\n    if (fontSizeScale !== 1.0) {\n      ctx.scale(fontSizeScale, fontSizeScale);\n      lineWidth /= fontSizeScale;\n    }\n    ctx.lineWidth = lineWidth;\n    if (font.isInvalidPDFjsFont) {\n      const chars = [];\n      let width = 0;\n      for (const glyph of glyphs) {\n        chars.push(glyph.unicode);\n        width += glyph.width;\n      }\n      ctx.fillText(chars.join(\"\"), 0, 0);\n      current.x += width * widthAdvanceScale * textHScale;\n      ctx.restore();\n      this.compose();\n      return undefined;\n    }\n    let x = 0,\n      i;\n    for (i = 0; i < glyphsLength; ++i) {\n      const glyph = glyphs[i];\n      if (typeof glyph === \"number\") {\n        x += spacingDir * glyph * fontSize / 1000;\n        continue;\n      }\n      let restoreNeeded = false;\n      const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\n      const character = glyph.fontChar;\n      const accent = glyph.accent;\n      let scaledX, scaledY;\n      let width = glyph.width;\n      if (vertical) {\n        const vmetric = glyph.vmetric || defaultVMetrics;\n        const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale;\n        const vy = vmetric[2] * widthAdvanceScale;\n        width = vmetric ? -vmetric[0] : width;\n        scaledX = vx / fontSizeScale;\n        scaledY = (x + vy) / fontSizeScale;\n      } else {\n        scaledX = x / fontSizeScale;\n        scaledY = 0;\n      }\n      if (font.remeasure && width > 0) {\n        const measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale;\n        if (width < measuredWidth && this.isFontSubpixelAAEnabled) {\n          const characterScaleX = width / measuredWidth;\n          restoreNeeded = true;\n          ctx.save();\n          ctx.scale(characterScaleX, 1);\n          scaledX /= characterScaleX;\n        } else if (width !== measuredWidth) {\n          scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale;\n        }\n      }\n      if (this.contentVisible && (glyph.isInFont || font.missingFile)) {\n        if (simpleFillText && !accent) {\n          ctx.fillText(character, scaledX, scaledY);\n        } else {\n          this.paintChar(character, scaledX, scaledY, patternTransform);\n          if (accent) {\n            const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale;\n            const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale;\n            this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform);\n          }\n        }\n      }\n      const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection;\n      x += charWidth;\n      if (restoreNeeded) {\n        ctx.restore();\n      }\n    }\n    if (vertical) {\n      current.y -= x;\n    } else {\n      current.x += x * textHScale;\n    }\n    ctx.restore();\n    this.compose();\n    return undefined;\n  }\n  showType3Text(glyphs) {\n    const ctx = this.ctx;\n    const current = this.current;\n    const font = current.font;\n    const fontSize = current.fontSize;\n    const fontDirection = current.fontDirection;\n    const spacingDir = font.vertical ? 1 : -1;\n    const charSpacing = current.charSpacing;\n    const wordSpacing = current.wordSpacing;\n    const textHScale = current.textHScale * fontDirection;\n    const fontMatrix = current.fontMatrix || FONT_IDENTITY_MATRIX;\n    const glyphsLength = glyphs.length;\n    const isTextInvisible = current.textRenderingMode === TextRenderingMode.INVISIBLE;\n    let i, glyph, width, spacingLength;\n    if (isTextInvisible || fontSize === 0) {\n      return;\n    }\n    this._cachedScaleForStroking[0] = -1;\n    this._cachedGetSinglePixelWidth = null;\n    ctx.save();\n    ctx.transform(...current.textMatrix);\n    ctx.translate(current.x, current.y);\n    ctx.scale(textHScale, fontDirection);\n    for (i = 0; i < glyphsLength; ++i) {\n      glyph = glyphs[i];\n      if (typeof glyph === \"number\") {\n        spacingLength = spacingDir * glyph * fontSize / 1000;\n        this.ctx.translate(spacingLength, 0);\n        current.x += spacingLength * textHScale;\n        continue;\n      }\n      const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\n      const operatorList = font.charProcOperatorList[glyph.operatorListId];\n      if (!operatorList) {\n        warn(`Type3 character \"${glyph.operatorListId}\" is not available.`);\n        continue;\n      }\n      if (this.contentVisible) {\n        this.processingType3 = glyph;\n        this.save();\n        ctx.scale(fontSize, fontSize);\n        ctx.transform(...fontMatrix);\n        this.executeOperatorList(operatorList);\n        this.restore();\n      }\n      const transformed = Util.applyTransform([glyph.width, 0], fontMatrix);\n      width = transformed[0] * fontSize + spacing;\n      ctx.translate(width, 0);\n      current.x += width * textHScale;\n    }\n    ctx.restore();\n    this.processingType3 = null;\n  }\n  setCharWidth(xWidth, yWidth) {}\n  setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) {\n    this.ctx.rect(llx, lly, urx - llx, ury - lly);\n    this.ctx.clip();\n    this.endPath();\n  }\n  getColorN_Pattern(IR) {\n    let pattern;\n    if (IR[0] === \"TilingPattern\") {\n      const color = IR[1];\n      const baseTransform = this.baseTransform || getCurrentTransform(this.ctx);\n      const canvasGraphicsFactory = {\n        createCanvasGraphics: ctx => new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {\n          optionalContentConfig: this.optionalContentConfig,\n          markedContentStack: this.markedContentStack\n        })\n      };\n      pattern = new TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform);\n    } else {\n      pattern = this._getPattern(IR[1], IR[2]);\n    }\n    return pattern;\n  }\n  setStrokeColorN() {\n    this.current.strokeColor = this.getColorN_Pattern(arguments);\n  }\n  setFillColorN() {\n    this.current.fillColor = this.getColorN_Pattern(arguments);\n    this.current.patternFill = true;\n  }\n  setStrokeRGBColor(r, g, b) {\n    const color = Util.makeHexColor(r, g, b);\n    this.ctx.strokeStyle = color;\n    this.current.strokeColor = color;\n  }\n  setFillRGBColor(r, g, b) {\n    const color = Util.makeHexColor(r, g, b);\n    this.ctx.fillStyle = color;\n    this.current.fillColor = color;\n    this.current.patternFill = false;\n  }\n  _getPattern(objId, matrix = null) {\n    let pattern;\n    if (this.cachedPatterns.has(objId)) {\n      pattern = this.cachedPatterns.get(objId);\n    } else {\n      pattern = getShadingPattern(this.getObject(objId));\n      this.cachedPatterns.set(objId, pattern);\n    }\n    if (matrix) {\n      pattern.matrix = matrix;\n    }\n    return pattern;\n  }\n  shadingFill(objId) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const ctx = this.ctx;\n    this.save();\n    const pattern = this._getPattern(objId);\n    ctx.fillStyle = pattern.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.SHADING);\n    const inv = getCurrentTransformInverse(ctx);\n    if (inv) {\n      const {\n        width,\n        height\n      } = ctx.canvas;\n      const [x0, y0, x1, y1] = Util.getAxialAlignedBoundingBox([0, 0, width, height], inv);\n      this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);\n    } else {\n      this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);\n    }\n    this.compose(this.current.getClippedPathBoundingBox());\n    this.restore();\n  }\n  beginInlineImage() {\n    unreachable(\"Should not call beginInlineImage\");\n  }\n  beginImageData() {\n    unreachable(\"Should not call beginImageData\");\n  }\n  paintFormXObjectBegin(matrix, bbox) {\n    if (!this.contentVisible) {\n      return;\n    }\n    this.save();\n    this.baseTransformStack.push(this.baseTransform);\n    if (matrix) {\n      this.transform(...matrix);\n    }\n    this.baseTransform = getCurrentTransform(this.ctx);\n    if (bbox) {\n      const width = bbox[2] - bbox[0];\n      const height = bbox[3] - bbox[1];\n      this.ctx.rect(bbox[0], bbox[1], width, height);\n      this.current.updateRectMinMax(getCurrentTransform(this.ctx), bbox);\n      this.clip();\n      this.endPath();\n    }\n  }\n  paintFormXObjectEnd() {\n    if (!this.contentVisible) {\n      return;\n    }\n    this.restore();\n    this.baseTransform = this.baseTransformStack.pop();\n  }\n  beginGroup(group) {\n    if (!this.contentVisible) {\n      return;\n    }\n    this.save();\n    if (this.inSMaskMode) {\n      this.endSMaskMode();\n      this.current.activeSMask = null;\n    }\n    const currentCtx = this.ctx;\n    if (!group.isolated) {\n      info(\"TODO: Support non-isolated groups.\");\n    }\n    if (group.knockout) {\n      warn(\"Knockout groups not supported.\");\n    }\n    const currentTransform = getCurrentTransform(currentCtx);\n    if (group.matrix) {\n      currentCtx.transform(...group.matrix);\n    }\n    if (!group.bbox) {\n      throw new Error(\"Bounding box is required.\");\n    }\n    let bounds = Util.getAxialAlignedBoundingBox(group.bbox, getCurrentTransform(currentCtx));\n    const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height];\n    bounds = Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];\n    const offsetX = Math.floor(bounds[0]);\n    const offsetY = Math.floor(bounds[1]);\n    const drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);\n    const drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);\n    this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]);\n    let cacheId = \"groupAt\" + this.groupLevel;\n    if (group.smask) {\n      cacheId += \"_smask_\" + this.smaskCounter++ % 2;\n    }\n    const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight);\n    const groupCtx = scratchCanvas.context;\n    groupCtx.translate(-offsetX, -offsetY);\n    groupCtx.transform(...currentTransform);\n    if (group.smask) {\n      this.smaskStack.push({\n        canvas: scratchCanvas.canvas,\n        context: groupCtx,\n        offsetX,\n        offsetY,\n        subtype: group.smask.subtype,\n        backdrop: group.smask.backdrop,\n        transferMap: group.smask.transferMap || null,\n        startTransformInverse: null\n      });\n    } else {\n      currentCtx.setTransform(1, 0, 0, 1, 0, 0);\n      currentCtx.translate(offsetX, offsetY);\n      currentCtx.save();\n    }\n    copyCtxState(currentCtx, groupCtx);\n    this.ctx = groupCtx;\n    this.setGState([[\"BM\", \"source-over\"], [\"ca\", 1], [\"CA\", 1]]);\n    this.groupStack.push(currentCtx);\n    this.groupLevel++;\n  }\n  endGroup(group) {\n    if (!this.contentVisible) {\n      return;\n    }\n    this.groupLevel--;\n    const groupCtx = this.ctx;\n    const ctx = this.groupStack.pop();\n    this.ctx = ctx;\n    this.ctx.imageSmoothingEnabled = false;\n    if (group.smask) {\n      this.tempSMask = this.smaskStack.pop();\n      this.restore();\n    } else {\n      this.ctx.restore();\n      const currentMtx = getCurrentTransform(this.ctx);\n      this.restore();\n      this.ctx.save();\n      this.ctx.setTransform(...currentMtx);\n      const dirtyBox = Util.getAxialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx);\n      this.ctx.drawImage(groupCtx.canvas, 0, 0);\n      this.ctx.restore();\n      this.compose(dirtyBox);\n    }\n  }\n  beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) {\n    this.#restoreInitialState();\n    resetCtxToDefault(this.ctx);\n    this.ctx.save();\n    this.save();\n    if (this.baseTransform) {\n      this.ctx.setTransform(...this.baseTransform);\n    }\n    if (rect) {\n      const width = rect[2] - rect[0];\n      const height = rect[3] - rect[1];\n      if (hasOwnCanvas && this.annotationCanvasMap) {\n        transform = transform.slice();\n        transform[4] -= rect[0];\n        transform[5] -= rect[1];\n        rect = rect.slice();\n        rect[0] = rect[1] = 0;\n        rect[2] = width;\n        rect[3] = height;\n        const [scaleX, scaleY] = Util.singularValueDecompose2dScale(getCurrentTransform(this.ctx));\n        const {\n          viewportScale\n        } = this;\n        const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale);\n        const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale);\n        this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight);\n        const {\n          canvas,\n          context\n        } = this.annotationCanvas;\n        this.annotationCanvasMap.set(id, canvas);\n        this.annotationCanvas.savedCtx = this.ctx;\n        this.ctx = context;\n        this.ctx.save();\n        this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY);\n        resetCtxToDefault(this.ctx);\n      } else {\n        resetCtxToDefault(this.ctx);\n        this.ctx.rect(rect[0], rect[1], width, height);\n        this.ctx.clip();\n        this.endPath();\n      }\n    }\n    this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);\n    this.transform(...transform);\n    this.transform(...matrix);\n  }\n  endAnnotation() {\n    if (this.annotationCanvas) {\n      this.ctx.restore();\n      this.#drawFilter();\n      this.ctx = this.annotationCanvas.savedCtx;\n      delete this.annotationCanvas.savedCtx;\n      delete this.annotationCanvas;\n    }\n  }\n  paintImageMaskXObject(img) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const count = img.count;\n    img = this.getObject(img.data, img);\n    img.count = count;\n    const ctx = this.ctx;\n    const glyph = this.processingType3;\n    if (glyph) {\n      if (glyph.compiled === undefined) {\n        glyph.compiled = compileType3Glyph(img);\n      }\n      if (glyph.compiled) {\n        glyph.compiled(ctx);\n        return;\n      }\n    }\n    const mask = this._createMaskCanvas(img);\n    const maskCanvas = mask.canvas;\n    ctx.save();\n    ctx.setTransform(1, 0, 0, 1, 0, 0);\n    ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY);\n    ctx.restore();\n    this.compose();\n  }\n  paintImageMaskXObjectRepeat(img, scaleX, skewX = 0, skewY = 0, scaleY, positions) {\n    if (!this.contentVisible) {\n      return;\n    }\n    img = this.getObject(img.data, img);\n    const ctx = this.ctx;\n    ctx.save();\n    const currentTransform = getCurrentTransform(ctx);\n    ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0);\n    const mask = this._createMaskCanvas(img);\n    ctx.setTransform(1, 0, 0, 1, mask.offsetX - currentTransform[4], mask.offsetY - currentTransform[5]);\n    for (let i = 0, ii = positions.length; i < ii; i += 2) {\n      const trans = Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]);\n      const [x, y] = Util.applyTransform([0, 0], trans);\n      ctx.drawImage(mask.canvas, x, y);\n    }\n    ctx.restore();\n    this.compose();\n  }\n  paintImageMaskXObjectGroup(images) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const ctx = this.ctx;\n    const fillColor = this.current.fillColor;\n    const isPatternFill = this.current.patternFill;\n    for (const image of images) {\n      const {\n        data,\n        width,\n        height,\n        transform\n      } = image;\n      const maskCanvas = this.cachedCanvases.getCanvas(\"maskCanvas\", width, height);\n      const maskCtx = maskCanvas.context;\n      maskCtx.save();\n      const img = this.getObject(data, image);\n      putBinaryImageMask(maskCtx, img);\n      maskCtx.globalCompositeOperation = \"source-in\";\n      maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, getCurrentTransformInverse(ctx), PathType.FILL) : fillColor;\n      maskCtx.fillRect(0, 0, width, height);\n      maskCtx.restore();\n      ctx.save();\n      ctx.transform(...transform);\n      ctx.scale(1, -1);\n      drawImageAtIntegerCoords(ctx, maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);\n      ctx.restore();\n    }\n    this.compose();\n  }\n  paintImageXObject(objId) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const imgData = this.getObject(objId);\n    if (!imgData) {\n      warn(\"Dependent image isn't ready yet\");\n      return;\n    }\n    this.paintInlineImageXObject(imgData);\n  }\n  paintImageXObjectRepeat(objId, scaleX, scaleY, positions) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const imgData = this.getObject(objId);\n    if (!imgData) {\n      warn(\"Dependent image isn't ready yet\");\n      return;\n    }\n    const width = imgData.width;\n    const height = imgData.height;\n    const map = [];\n    for (let i = 0, ii = positions.length; i < ii; i += 2) {\n      map.push({\n        transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]],\n        x: 0,\n        y: 0,\n        w: width,\n        h: height\n      });\n    }\n    this.paintInlineImageXObjectGroup(imgData, map);\n  }\n  applyTransferMapsToCanvas(ctx) {\n    if (this.current.transferMaps !== \"none\") {\n      ctx.filter = this.current.transferMaps;\n      ctx.drawImage(ctx.canvas, 0, 0);\n      ctx.filter = \"none\";\n    }\n    return ctx.canvas;\n  }\n  applyTransferMapsToBitmap(imgData) {\n    if (this.current.transferMaps === \"none\") {\n      return imgData.bitmap;\n    }\n    const {\n      bitmap,\n      width,\n      height\n    } = imgData;\n    const tmpCanvas = this.cachedCanvases.getCanvas(\"inlineImage\", width, height);\n    const tmpCtx = tmpCanvas.context;\n    tmpCtx.filter = this.current.transferMaps;\n    tmpCtx.drawImage(bitmap, 0, 0);\n    tmpCtx.filter = \"none\";\n    return tmpCanvas.canvas;\n  }\n  paintInlineImageXObject(imgData) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const width = imgData.width;\n    const height = imgData.height;\n    const ctx = this.ctx;\n    this.save();\n    if (!isNodeJS) {\n      const {\n        filter\n      } = ctx;\n      if (filter !== \"none\" && filter !== \"\") {\n        ctx.filter = \"none\";\n      }\n    }\n    ctx.scale(1 / width, -1 / height);\n    let imgToPaint;\n    if (imgData.bitmap) {\n      imgToPaint = this.applyTransferMapsToBitmap(imgData);\n    } else if (typeof HTMLElement === \"function\" && imgData instanceof HTMLElement || !imgData.data) {\n      imgToPaint = imgData;\n    } else {\n      const tmpCanvas = this.cachedCanvases.getCanvas(\"inlineImage\", width, height);\n      const tmpCtx = tmpCanvas.context;\n      putBinaryImageData(tmpCtx, imgData);\n      imgToPaint = this.applyTransferMapsToCanvas(tmpCtx);\n    }\n    const scaled = this._scaleImage(imgToPaint, getCurrentTransformInverse(ctx));\n    ctx.imageSmoothingEnabled = getImageSmoothingEnabled(getCurrentTransform(ctx), imgData.interpolate);\n    drawImageAtIntegerCoords(ctx, scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height);\n    this.compose();\n    this.restore();\n  }\n  paintInlineImageXObjectGroup(imgData, map) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const ctx = this.ctx;\n    let imgToPaint;\n    if (imgData.bitmap) {\n      imgToPaint = imgData.bitmap;\n    } else {\n      const w = imgData.width;\n      const h = imgData.height;\n      const tmpCanvas = this.cachedCanvases.getCanvas(\"inlineImage\", w, h);\n      const tmpCtx = tmpCanvas.context;\n      putBinaryImageData(tmpCtx, imgData);\n      imgToPaint = this.applyTransferMapsToCanvas(tmpCtx);\n    }\n    for (const entry of map) {\n      ctx.save();\n      ctx.transform(...entry.transform);\n      ctx.scale(1, -1);\n      drawImageAtIntegerCoords(ctx, imgToPaint, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1);\n      ctx.restore();\n    }\n    this.compose();\n  }\n  paintSolidColorImageMask() {\n    if (!this.contentVisible) {\n      return;\n    }\n    this.ctx.fillRect(0, 0, 1, 1);\n    this.compose();\n  }\n  markPoint(tag) {}\n  markPointProps(tag, properties) {}\n  beginMarkedContent(tag) {\n    this.markedContentStack.push({\n      visible: true\n    });\n  }\n  beginMarkedContentProps(tag, properties) {\n    if (tag === \"OC\") {\n      this.markedContentStack.push({\n        visible: this.optionalContentConfig.isVisible(properties)\n      });\n    } else {\n      this.markedContentStack.push({\n        visible: true\n      });\n    }\n    this.contentVisible = this.isContentVisible();\n  }\n  endMarkedContent() {\n    this.markedContentStack.pop();\n    this.contentVisible = this.isContentVisible();\n  }\n  beginCompat() {}\n  endCompat() {}\n  consumePath(clipBox) {\n    const isEmpty = this.current.isEmptyClip();\n    if (this.pendingClip) {\n      this.current.updateClipFromPath();\n    }\n    if (!this.pendingClip) {\n      this.compose(clipBox);\n    }\n    const ctx = this.ctx;\n    if (this.pendingClip) {\n      if (!isEmpty) {\n        if (this.pendingClip === EO_CLIP) {\n          ctx.clip(\"evenodd\");\n        } else {\n          ctx.clip();\n        }\n      }\n      this.pendingClip = null;\n    }\n    this.current.startNewPathAndClipBox(this.current.clipBox);\n    ctx.beginPath();\n  }\n  getSinglePixelWidth() {\n    if (!this._cachedGetSinglePixelWidth) {\n      const m = getCurrentTransform(this.ctx);\n      if (m[1] === 0 && m[2] === 0) {\n        this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(m[0]), Math.abs(m[3]));\n      } else {\n        const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]);\n        const normX = Math.hypot(m[0], m[2]);\n        const normY = Math.hypot(m[1], m[3]);\n        this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet;\n      }\n    }\n    return this._cachedGetSinglePixelWidth;\n  }\n  getScaleForStroking() {\n    if (this._cachedScaleForStroking[0] === -1) {\n      const {\n        lineWidth\n      } = this.current;\n      const {\n        a,\n        b,\n        c,\n        d\n      } = this.ctx.getTransform();\n      let scaleX, scaleY;\n      if (b === 0 && c === 0) {\n        const normX = Math.abs(a);\n        const normY = Math.abs(d);\n        if (normX === normY) {\n          if (lineWidth === 0) {\n            scaleX = scaleY = 1 / normX;\n          } else {\n            const scaledLineWidth = normX * lineWidth;\n            scaleX = scaleY = scaledLineWidth < 1 ? 1 / scaledLineWidth : 1;\n          }\n        } else if (lineWidth === 0) {\n          scaleX = 1 / normX;\n          scaleY = 1 / normY;\n        } else {\n          const scaledXLineWidth = normX * lineWidth;\n          const scaledYLineWidth = normY * lineWidth;\n          scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1;\n          scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1;\n        }\n      } else {\n        const absDet = Math.abs(a * d - b * c);\n        const normX = Math.hypot(a, b);\n        const normY = Math.hypot(c, d);\n        if (lineWidth === 0) {\n          scaleX = normY / absDet;\n          scaleY = normX / absDet;\n        } else {\n          const baseArea = lineWidth * absDet;\n          scaleX = normY > baseArea ? normY / baseArea : 1;\n          scaleY = normX > baseArea ? normX / baseArea : 1;\n        }\n      }\n      this._cachedScaleForStroking[0] = scaleX;\n      this._cachedScaleForStroking[1] = scaleY;\n    }\n    return this._cachedScaleForStroking;\n  }\n  rescaleAndStroke(saveRestore) {\n    const {\n      ctx\n    } = this;\n    const {\n      lineWidth\n    } = this.current;\n    const [scaleX, scaleY] = this.getScaleForStroking();\n    ctx.lineWidth = lineWidth || 1;\n    if (scaleX === 1 && scaleY === 1) {\n      ctx.stroke();\n      return;\n    }\n    const dashes = ctx.getLineDash();\n    if (saveRestore) {\n      ctx.save();\n    }\n    ctx.scale(scaleX, scaleY);\n    if (dashes.length > 0) {\n      const scale = Math.max(scaleX, scaleY);\n      ctx.setLineDash(dashes.map(x => x / scale));\n      ctx.lineDashOffset /= scale;\n    }\n    ctx.stroke();\n    if (saveRestore) {\n      ctx.restore();\n    }\n  }\n  isContentVisible() {\n    for (let i = this.markedContentStack.length - 1; i >= 0; i--) {\n      if (!this.markedContentStack[i].visible) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\nfor (const op in OPS) {\n  if (CanvasGraphics.prototype[op] !== undefined) {\n    CanvasGraphics.prototype[OPS[op]] = CanvasGraphics.prototype[op];\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/worker_options.js\nclass GlobalWorkerOptions {\n  static #port = null;\n  static #src = \"\";\n  static get workerPort() {\n    return this.#port;\n  }\n  static set workerPort(val) {\n    if (!(typeof Worker !== \"undefined\" && val instanceof Worker) && val !== null) {\n      throw new Error(\"Invalid `workerPort` type.\");\n    }\n    this.#port = val;\n  }\n  static get workerSrc() {\n    return this.#src;\n  }\n  static set workerSrc(val) {\n    if (typeof val !== \"string\") {\n      throw new Error(\"Invalid `workerSrc` type.\");\n    }\n    this.#src = val;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/shared/message_handler.js\n\nconst CallbackKind = {\n  UNKNOWN: 0,\n  DATA: 1,\n  ERROR: 2\n};\nconst StreamKind = {\n  UNKNOWN: 0,\n  CANCEL: 1,\n  CANCEL_COMPLETE: 2,\n  CLOSE: 3,\n  ENQUEUE: 4,\n  ERROR: 5,\n  PULL: 6,\n  PULL_COMPLETE: 7,\n  START_COMPLETE: 8\n};\nfunction wrapReason(reason) {\n  if (!(reason instanceof Error || typeof reason === \"object\" && reason !== null)) {\n    unreachable('wrapReason: Expected \"reason\" to be a (possibly cloned) Error.');\n  }\n  switch (reason.name) {\n    case \"AbortException\":\n      return new AbortException(reason.message);\n    case \"MissingPDFException\":\n      return new MissingPDFException(reason.message);\n    case \"PasswordException\":\n      return new PasswordException(reason.message, reason.code);\n    case \"UnexpectedResponseException\":\n      return new UnexpectedResponseException(reason.message, reason.status);\n    case \"UnknownErrorException\":\n      return new UnknownErrorException(reason.message, reason.details);\n    default:\n      return new UnknownErrorException(reason.message, reason.toString());\n  }\n}\nclass MessageHandler {\n  constructor(sourceName, targetName, comObj) {\n    this.sourceName = sourceName;\n    this.targetName = targetName;\n    this.comObj = comObj;\n    this.callbackId = 1;\n    this.streamId = 1;\n    this.streamSinks = Object.create(null);\n    this.streamControllers = Object.create(null);\n    this.callbackCapabilities = Object.create(null);\n    this.actionHandler = Object.create(null);\n    this._onComObjOnMessage = event => {\n      const data = event.data;\n      if (data.targetName !== this.sourceName) {\n        return;\n      }\n      if (data.stream) {\n        this.#processStreamMessage(data);\n        return;\n      }\n      if (data.callback) {\n        const callbackId = data.callbackId;\n        const capability = this.callbackCapabilities[callbackId];\n        if (!capability) {\n          throw new Error(`Cannot resolve callback ${callbackId}`);\n        }\n        delete this.callbackCapabilities[callbackId];\n        if (data.callback === CallbackKind.DATA) {\n          capability.resolve(data.data);\n        } else if (data.callback === CallbackKind.ERROR) {\n          capability.reject(wrapReason(data.reason));\n        } else {\n          throw new Error(\"Unexpected callback case\");\n        }\n        return;\n      }\n      const action = this.actionHandler[data.action];\n      if (!action) {\n        throw new Error(`Unknown action from worker: ${data.action}`);\n      }\n      if (data.callbackId) {\n        const cbSourceName = this.sourceName;\n        const cbTargetName = data.sourceName;\n        new Promise(function (resolve) {\n          resolve(action(data.data));\n        }).then(function (result) {\n          comObj.postMessage({\n            sourceName: cbSourceName,\n            targetName: cbTargetName,\n            callback: CallbackKind.DATA,\n            callbackId: data.callbackId,\n            data: result\n          });\n        }, function (reason) {\n          comObj.postMessage({\n            sourceName: cbSourceName,\n            targetName: cbTargetName,\n            callback: CallbackKind.ERROR,\n            callbackId: data.callbackId,\n            reason: wrapReason(reason)\n          });\n        });\n        return;\n      }\n      if (data.streamId) {\n        this.#createStreamSink(data);\n        return;\n      }\n      action(data.data);\n    };\n    comObj.addEventListener(\"message\", this._onComObjOnMessage);\n  }\n  on(actionName, handler) {\n    const ah = this.actionHandler;\n    if (ah[actionName]) {\n      throw new Error(`There is already an actionName called \"${actionName}\"`);\n    }\n    ah[actionName] = handler;\n  }\n  send(actionName, data, transfers) {\n    this.comObj.postMessage({\n      sourceName: this.sourceName,\n      targetName: this.targetName,\n      action: actionName,\n      data\n    }, transfers);\n  }\n  sendWithPromise(actionName, data, transfers) {\n    const callbackId = this.callbackId++;\n    const capability = Promise.withResolvers();\n    this.callbackCapabilities[callbackId] = capability;\n    try {\n      this.comObj.postMessage({\n        sourceName: this.sourceName,\n        targetName: this.targetName,\n        action: actionName,\n        callbackId,\n        data\n      }, transfers);\n    } catch (ex) {\n      capability.reject(ex);\n    }\n    return capability.promise;\n  }\n  sendWithStream(actionName, data, queueingStrategy, transfers) {\n    const streamId = this.streamId++,\n      sourceName = this.sourceName,\n      targetName = this.targetName,\n      comObj = this.comObj;\n    return new ReadableStream({\n      start: controller => {\n        const startCapability = Promise.withResolvers();\n        this.streamControllers[streamId] = {\n          controller,\n          startCall: startCapability,\n          pullCall: null,\n          cancelCall: null,\n          isClosed: false\n        };\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          action: actionName,\n          streamId,\n          data,\n          desiredSize: controller.desiredSize\n        }, transfers);\n        return startCapability.promise;\n      },\n      pull: controller => {\n        const pullCapability = Promise.withResolvers();\n        this.streamControllers[streamId].pullCall = pullCapability;\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.PULL,\n          streamId,\n          desiredSize: controller.desiredSize\n        });\n        return pullCapability.promise;\n      },\n      cancel: reason => {\n        assert(reason instanceof Error, \"cancel must have a valid reason\");\n        const cancelCapability = Promise.withResolvers();\n        this.streamControllers[streamId].cancelCall = cancelCapability;\n        this.streamControllers[streamId].isClosed = true;\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.CANCEL,\n          streamId,\n          reason: wrapReason(reason)\n        });\n        return cancelCapability.promise;\n      }\n    }, queueingStrategy);\n  }\n  #createStreamSink(data) {\n    const streamId = data.streamId,\n      sourceName = this.sourceName,\n      targetName = data.sourceName,\n      comObj = this.comObj;\n    const self = this,\n      action = this.actionHandler[data.action];\n    const streamSink = {\n      enqueue(chunk, size = 1, transfers) {\n        if (this.isCancelled) {\n          return;\n        }\n        const lastDesiredSize = this.desiredSize;\n        this.desiredSize -= size;\n        if (lastDesiredSize > 0 && this.desiredSize <= 0) {\n          this.sinkCapability = Promise.withResolvers();\n          this.ready = this.sinkCapability.promise;\n        }\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.ENQUEUE,\n          streamId,\n          chunk\n        }, transfers);\n      },\n      close() {\n        if (this.isCancelled) {\n          return;\n        }\n        this.isCancelled = true;\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.CLOSE,\n          streamId\n        });\n        delete self.streamSinks[streamId];\n      },\n      error(reason) {\n        assert(reason instanceof Error, \"error must have a valid reason\");\n        if (this.isCancelled) {\n          return;\n        }\n        this.isCancelled = true;\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.ERROR,\n          streamId,\n          reason: wrapReason(reason)\n        });\n      },\n      sinkCapability: Promise.withResolvers(),\n      onPull: null,\n      onCancel: null,\n      isCancelled: false,\n      desiredSize: data.desiredSize,\n      ready: null\n    };\n    streamSink.sinkCapability.resolve();\n    streamSink.ready = streamSink.sinkCapability.promise;\n    this.streamSinks[streamId] = streamSink;\n    new Promise(function (resolve) {\n      resolve(action(data.data, streamSink));\n    }).then(function () {\n      comObj.postMessage({\n        sourceName,\n        targetName,\n        stream: StreamKind.START_COMPLETE,\n        streamId,\n        success: true\n      });\n    }, function (reason) {\n      comObj.postMessage({\n        sourceName,\n        targetName,\n        stream: StreamKind.START_COMPLETE,\n        streamId,\n        reason: wrapReason(reason)\n      });\n    });\n  }\n  #processStreamMessage(data) {\n    const streamId = data.streamId,\n      sourceName = this.sourceName,\n      targetName = data.sourceName,\n      comObj = this.comObj;\n    const streamController = this.streamControllers[streamId],\n      streamSink = this.streamSinks[streamId];\n    switch (data.stream) {\n      case StreamKind.START_COMPLETE:\n        if (data.success) {\n          streamController.startCall.resolve();\n        } else {\n          streamController.startCall.reject(wrapReason(data.reason));\n        }\n        break;\n      case StreamKind.PULL_COMPLETE:\n        if (data.success) {\n          streamController.pullCall.resolve();\n        } else {\n          streamController.pullCall.reject(wrapReason(data.reason));\n        }\n        break;\n      case StreamKind.PULL:\n        if (!streamSink) {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.PULL_COMPLETE,\n            streamId,\n            success: true\n          });\n          break;\n        }\n        if (streamSink.desiredSize <= 0 && data.desiredSize > 0) {\n          streamSink.sinkCapability.resolve();\n        }\n        streamSink.desiredSize = data.desiredSize;\n        new Promise(function (resolve) {\n          resolve(streamSink.onPull?.());\n        }).then(function () {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.PULL_COMPLETE,\n            streamId,\n            success: true\n          });\n        }, function (reason) {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.PULL_COMPLETE,\n            streamId,\n            reason: wrapReason(reason)\n          });\n        });\n        break;\n      case StreamKind.ENQUEUE:\n        assert(streamController, \"enqueue should have stream controller\");\n        if (streamController.isClosed) {\n          break;\n        }\n        streamController.controller.enqueue(data.chunk);\n        break;\n      case StreamKind.CLOSE:\n        assert(streamController, \"close should have stream controller\");\n        if (streamController.isClosed) {\n          break;\n        }\n        streamController.isClosed = true;\n        streamController.controller.close();\n        this.#deleteStreamController(streamController, streamId);\n        break;\n      case StreamKind.ERROR:\n        assert(streamController, \"error should have stream controller\");\n        streamController.controller.error(wrapReason(data.reason));\n        this.#deleteStreamController(streamController, streamId);\n        break;\n      case StreamKind.CANCEL_COMPLETE:\n        if (data.success) {\n          streamController.cancelCall.resolve();\n        } else {\n          streamController.cancelCall.reject(wrapReason(data.reason));\n        }\n        this.#deleteStreamController(streamController, streamId);\n        break;\n      case StreamKind.CANCEL:\n        if (!streamSink) {\n          break;\n        }\n        new Promise(function (resolve) {\n          resolve(streamSink.onCancel?.(wrapReason(data.reason)));\n        }).then(function () {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.CANCEL_COMPLETE,\n            streamId,\n            success: true\n          });\n        }, function (reason) {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.CANCEL_COMPLETE,\n            streamId,\n            reason: wrapReason(reason)\n          });\n        });\n        streamSink.sinkCapability.reject(wrapReason(data.reason));\n        streamSink.isCancelled = true;\n        delete this.streamSinks[streamId];\n        break;\n      default:\n        throw new Error(\"Unexpected stream case\");\n    }\n  }\n  async #deleteStreamController(streamController, streamId) {\n    await Promise.allSettled([streamController.startCall?.promise, streamController.pullCall?.promise, streamController.cancelCall?.promise]);\n    delete this.streamControllers[streamId];\n  }\n  destroy() {\n    this.comObj.removeEventListener(\"message\", this._onComObjOnMessage);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/metadata.js\n\nclass Metadata {\n  #metadataMap;\n  #data;\n  constructor({\n    parsedData,\n    rawData\n  }) {\n    this.#metadataMap = parsedData;\n    this.#data = rawData;\n  }\n  getRaw() {\n    return this.#data;\n  }\n  get(name) {\n    return this.#metadataMap.get(name) ?? null;\n  }\n  getAll() {\n    return objectFromMap(this.#metadataMap);\n  }\n  has(name) {\n    return this.#metadataMap.has(name);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/optional_content_config.js\n\n\nconst INTERNAL = Symbol(\"INTERNAL\");\nclass OptionalContentGroup {\n  #isDisplay = false;\n  #isPrint = false;\n  #userSet = false;\n  #visible = true;\n  constructor(renderingIntent, {\n    name,\n    intent,\n    usage\n  }) {\n    this.#isDisplay = !!(renderingIntent & RenderingIntentFlag.DISPLAY);\n    this.#isPrint = !!(renderingIntent & RenderingIntentFlag.PRINT);\n    this.name = name;\n    this.intent = intent;\n    this.usage = usage;\n  }\n  get visible() {\n    if (this.#userSet) {\n      return this.#visible;\n    }\n    if (!this.#visible) {\n      return false;\n    }\n    const {\n      print,\n      view\n    } = this.usage;\n    if (this.#isDisplay) {\n      return view?.viewState !== \"OFF\";\n    } else if (this.#isPrint) {\n      return print?.printState !== \"OFF\";\n    }\n    return true;\n  }\n  _setVisible(internal, visible, userSet = false) {\n    if (internal !== INTERNAL) {\n      unreachable(\"Internal method `_setVisible` called.\");\n    }\n    this.#userSet = userSet;\n    this.#visible = visible;\n  }\n}\nclass OptionalContentConfig {\n  #cachedGetHash = null;\n  #groups = new Map();\n  #initialHash = null;\n  #order = null;\n  constructor(data, renderingIntent = RenderingIntentFlag.DISPLAY) {\n    this.renderingIntent = renderingIntent;\n    this.name = null;\n    this.creator = null;\n    if (data === null) {\n      return;\n    }\n    this.name = data.name;\n    this.creator = data.creator;\n    this.#order = data.order;\n    for (const group of data.groups) {\n      this.#groups.set(group.id, new OptionalContentGroup(renderingIntent, group));\n    }\n    if (data.baseState === \"OFF\") {\n      for (const group of this.#groups.values()) {\n        group._setVisible(INTERNAL, false);\n      }\n    }\n    for (const on of data.on) {\n      this.#groups.get(on)._setVisible(INTERNAL, true);\n    }\n    for (const off of data.off) {\n      this.#groups.get(off)._setVisible(INTERNAL, false);\n    }\n    this.#initialHash = this.getHash();\n  }\n  #evaluateVisibilityExpression(array) {\n    const length = array.length;\n    if (length < 2) {\n      return true;\n    }\n    const operator = array[0];\n    for (let i = 1; i < length; i++) {\n      const element = array[i];\n      let state;\n      if (Array.isArray(element)) {\n        state = this.#evaluateVisibilityExpression(element);\n      } else if (this.#groups.has(element)) {\n        state = this.#groups.get(element).visible;\n      } else {\n        warn(`Optional content group not found: ${element}`);\n        return true;\n      }\n      switch (operator) {\n        case \"And\":\n          if (!state) {\n            return false;\n          }\n          break;\n        case \"Or\":\n          if (state) {\n            return true;\n          }\n          break;\n        case \"Not\":\n          return !state;\n        default:\n          return true;\n      }\n    }\n    return operator === \"And\";\n  }\n  isVisible(group) {\n    if (this.#groups.size === 0) {\n      return true;\n    }\n    if (!group) {\n      info(\"Optional content group not defined.\");\n      return true;\n    }\n    if (group.type === \"OCG\") {\n      if (!this.#groups.has(group.id)) {\n        warn(`Optional content group not found: ${group.id}`);\n        return true;\n      }\n      return this.#groups.get(group.id).visible;\n    } else if (group.type === \"OCMD\") {\n      if (group.expression) {\n        return this.#evaluateVisibilityExpression(group.expression);\n      }\n      if (!group.policy || group.policy === \"AnyOn\") {\n        for (const id of group.ids) {\n          if (!this.#groups.has(id)) {\n            warn(`Optional content group not found: ${id}`);\n            return true;\n          }\n          if (this.#groups.get(id).visible) {\n            return true;\n          }\n        }\n        return false;\n      } else if (group.policy === \"AllOn\") {\n        for (const id of group.ids) {\n          if (!this.#groups.has(id)) {\n            warn(`Optional content group not found: ${id}`);\n            return true;\n          }\n          if (!this.#groups.get(id).visible) {\n            return false;\n          }\n        }\n        return true;\n      } else if (group.policy === \"AnyOff\") {\n        for (const id of group.ids) {\n          if (!this.#groups.has(id)) {\n            warn(`Optional content group not found: ${id}`);\n            return true;\n          }\n          if (!this.#groups.get(id).visible) {\n            return true;\n          }\n        }\n        return false;\n      } else if (group.policy === \"AllOff\") {\n        for (const id of group.ids) {\n          if (!this.#groups.has(id)) {\n            warn(`Optional content group not found: ${id}`);\n            return true;\n          }\n          if (this.#groups.get(id).visible) {\n            return false;\n          }\n        }\n        return true;\n      }\n      warn(`Unknown optional content policy ${group.policy}.`);\n      return true;\n    }\n    warn(`Unknown group type ${group.type}.`);\n    return true;\n  }\n  setVisibility(id, visible = true) {\n    const group = this.#groups.get(id);\n    if (!group) {\n      warn(`Optional content group not found: ${id}`);\n      return;\n    }\n    group._setVisible(INTERNAL, !!visible, true);\n    this.#cachedGetHash = null;\n  }\n  setOCGState({\n    state,\n    preserveRB\n  }) {\n    let operator;\n    for (const elem of state) {\n      switch (elem) {\n        case \"ON\":\n        case \"OFF\":\n        case \"Toggle\":\n          operator = elem;\n          continue;\n      }\n      const group = this.#groups.get(elem);\n      if (!group) {\n        continue;\n      }\n      switch (operator) {\n        case \"ON\":\n          group._setVisible(INTERNAL, true);\n          break;\n        case \"OFF\":\n          group._setVisible(INTERNAL, false);\n          break;\n        case \"Toggle\":\n          group._setVisible(INTERNAL, !group.visible);\n          break;\n      }\n    }\n    this.#cachedGetHash = null;\n  }\n  get hasInitialVisibility() {\n    return this.#initialHash === null || this.getHash() === this.#initialHash;\n  }\n  getOrder() {\n    if (!this.#groups.size) {\n      return null;\n    }\n    if (this.#order) {\n      return this.#order.slice();\n    }\n    return [...this.#groups.keys()];\n  }\n  getGroups() {\n    return this.#groups.size > 0 ? objectFromMap(this.#groups) : null;\n  }\n  getGroup(id) {\n    return this.#groups.get(id) || null;\n  }\n  getHash() {\n    if (this.#cachedGetHash !== null) {\n      return this.#cachedGetHash;\n    }\n    const hash = new MurmurHash3_64();\n    for (const [id, group] of this.#groups) {\n      hash.update(`${id}:${group.visible}`);\n    }\n    return this.#cachedGetHash = hash.hexdigest();\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/transport_stream.js\n\n\nclass PDFDataTransportStream {\n  constructor(pdfDataRangeTransport, {\n    disableRange = false,\n    disableStream = false\n  }) {\n    assert(pdfDataRangeTransport, 'PDFDataTransportStream - missing required \"pdfDataRangeTransport\" argument.');\n    const {\n      length,\n      initialData,\n      progressiveDone,\n      contentDispositionFilename\n    } = pdfDataRangeTransport;\n    this._queuedChunks = [];\n    this._progressiveDone = progressiveDone;\n    this._contentDispositionFilename = contentDispositionFilename;\n    if (initialData?.length > 0) {\n      const buffer = initialData instanceof Uint8Array && initialData.byteLength === initialData.buffer.byteLength ? initialData.buffer : new Uint8Array(initialData).buffer;\n      this._queuedChunks.push(buffer);\n    }\n    this._pdfDataRangeTransport = pdfDataRangeTransport;\n    this._isStreamingSupported = !disableStream;\n    this._isRangeSupported = !disableRange;\n    this._contentLength = length;\n    this._fullRequestReader = null;\n    this._rangeReaders = [];\n    pdfDataRangeTransport.addRangeListener((begin, chunk) => {\n      this._onReceiveData({\n        begin,\n        chunk\n      });\n    });\n    pdfDataRangeTransport.addProgressListener((loaded, total) => {\n      this._onProgress({\n        loaded,\n        total\n      });\n    });\n    pdfDataRangeTransport.addProgressiveReadListener(chunk => {\n      this._onReceiveData({\n        chunk\n      });\n    });\n    pdfDataRangeTransport.addProgressiveDoneListener(() => {\n      this._onProgressiveDone();\n    });\n    pdfDataRangeTransport.transportReady();\n  }\n  _onReceiveData({\n    begin,\n    chunk\n  }) {\n    const buffer = chunk instanceof Uint8Array && chunk.byteLength === chunk.buffer.byteLength ? chunk.buffer : new Uint8Array(chunk).buffer;\n    if (begin === undefined) {\n      if (this._fullRequestReader) {\n        this._fullRequestReader._enqueue(buffer);\n      } else {\n        this._queuedChunks.push(buffer);\n      }\n    } else {\n      const found = this._rangeReaders.some(function (rangeReader) {\n        if (rangeReader._begin !== begin) {\n          return false;\n        }\n        rangeReader._enqueue(buffer);\n        return true;\n      });\n      assert(found, \"_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.\");\n    }\n  }\n  get _progressiveDataLength() {\n    return this._fullRequestReader?._loaded ?? 0;\n  }\n  _onProgress(evt) {\n    if (evt.total === undefined) {\n      this._rangeReaders[0]?.onProgress?.({\n        loaded: evt.loaded\n      });\n    } else {\n      this._fullRequestReader?.onProgress?.({\n        loaded: evt.loaded,\n        total: evt.total\n      });\n    }\n  }\n  _onProgressiveDone() {\n    this._fullRequestReader?.progressiveDone();\n    this._progressiveDone = true;\n  }\n  _removeRangeReader(reader) {\n    const i = this._rangeReaders.indexOf(reader);\n    if (i >= 0) {\n      this._rangeReaders.splice(i, 1);\n    }\n  }\n  getFullReader() {\n    assert(!this._fullRequestReader, \"PDFDataTransportStream.getFullReader can only be called once.\");\n    const queuedChunks = this._queuedChunks;\n    this._queuedChunks = null;\n    return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone, this._contentDispositionFilename);\n  }\n  getRangeReader(begin, end) {\n    if (end <= this._progressiveDataLength) {\n      return null;\n    }\n    const reader = new PDFDataTransportStreamRangeReader(this, begin, end);\n    this._pdfDataRangeTransport.requestDataRange(begin, end);\n    this._rangeReaders.push(reader);\n    return reader;\n  }\n  cancelAllRequests(reason) {\n    this._fullRequestReader?.cancel(reason);\n    for (const reader of this._rangeReaders.slice(0)) {\n      reader.cancel(reason);\n    }\n    this._pdfDataRangeTransport.abort();\n  }\n}\nclass PDFDataTransportStreamReader {\n  constructor(stream, queuedChunks, progressiveDone = false, contentDispositionFilename = null) {\n    this._stream = stream;\n    this._done = progressiveDone || false;\n    this._filename = isPdfFile(contentDispositionFilename) ? contentDispositionFilename : null;\n    this._queuedChunks = queuedChunks || [];\n    this._loaded = 0;\n    for (const chunk of this._queuedChunks) {\n      this._loaded += chunk.byteLength;\n    }\n    this._requests = [];\n    this._headersReady = Promise.resolve();\n    stream._fullRequestReader = this;\n    this.onProgress = null;\n  }\n  _enqueue(chunk) {\n    if (this._done) {\n      return;\n    }\n    if (this._requests.length > 0) {\n      const requestCapability = this._requests.shift();\n      requestCapability.resolve({\n        value: chunk,\n        done: false\n      });\n    } else {\n      this._queuedChunks.push(chunk);\n    }\n    this._loaded += chunk.byteLength;\n  }\n  get headersReady() {\n    return this._headersReady;\n  }\n  get filename() {\n    return this._filename;\n  }\n  get isRangeSupported() {\n    return this._stream._isRangeSupported;\n  }\n  get isStreamingSupported() {\n    return this._stream._isStreamingSupported;\n  }\n  get contentLength() {\n    return this._stream._contentLength;\n  }\n  async read() {\n    if (this._queuedChunks.length > 0) {\n      const chunk = this._queuedChunks.shift();\n      return {\n        value: chunk,\n        done: false\n      };\n    }\n    if (this._done) {\n      return {\n        value: undefined,\n        done: true\n      };\n    }\n    const requestCapability = Promise.withResolvers();\n    this._requests.push(requestCapability);\n    return requestCapability.promise;\n  }\n  cancel(reason) {\n    this._done = true;\n    for (const requestCapability of this._requests) {\n      requestCapability.resolve({\n        value: undefined,\n        done: true\n      });\n    }\n    this._requests.length = 0;\n  }\n  progressiveDone() {\n    if (this._done) {\n      return;\n    }\n    this._done = true;\n  }\n}\nclass PDFDataTransportStreamRangeReader {\n  constructor(stream, begin, end) {\n    this._stream = stream;\n    this._begin = begin;\n    this._end = end;\n    this._queuedChunk = null;\n    this._requests = [];\n    this._done = false;\n    this.onProgress = null;\n  }\n  _enqueue(chunk) {\n    if (this._done) {\n      return;\n    }\n    if (this._requests.length === 0) {\n      this._queuedChunk = chunk;\n    } else {\n      const requestsCapability = this._requests.shift();\n      requestsCapability.resolve({\n        value: chunk,\n        done: false\n      });\n      for (const requestCapability of this._requests) {\n        requestCapability.resolve({\n          value: undefined,\n          done: true\n        });\n      }\n      this._requests.length = 0;\n    }\n    this._done = true;\n    this._stream._removeRangeReader(this);\n  }\n  get isStreamingSupported() {\n    return false;\n  }\n  async read() {\n    if (this._queuedChunk) {\n      const chunk = this._queuedChunk;\n      this._queuedChunk = null;\n      return {\n        value: chunk,\n        done: false\n      };\n    }\n    if (this._done) {\n      return {\n        value: undefined,\n        done: true\n      };\n    }\n    const requestCapability = Promise.withResolvers();\n    this._requests.push(requestCapability);\n    return requestCapability.promise;\n  }\n  cancel(reason) {\n    this._done = true;\n    for (const requestCapability of this._requests) {\n      requestCapability.resolve({\n        value: undefined,\n        done: true\n      });\n    }\n    this._requests.length = 0;\n    this._stream._removeRangeReader(this);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/content_disposition.js\n\nfunction getFilenameFromContentDispositionHeader(contentDisposition) {\n  let needsEncodingFixup = true;\n  let tmp = toParamRegExp(\"filename\\\\*\", \"i\").exec(contentDisposition);\n  if (tmp) {\n    tmp = tmp[1];\n    let filename = rfc2616unquote(tmp);\n    filename = unescape(filename);\n    filename = rfc5987decode(filename);\n    filename = rfc2047decode(filename);\n    return fixupEncoding(filename);\n  }\n  tmp = rfc2231getparam(contentDisposition);\n  if (tmp) {\n    const filename = rfc2047decode(tmp);\n    return fixupEncoding(filename);\n  }\n  tmp = toParamRegExp(\"filename\", \"i\").exec(contentDisposition);\n  if (tmp) {\n    tmp = tmp[1];\n    let filename = rfc2616unquote(tmp);\n    filename = rfc2047decode(filename);\n    return fixupEncoding(filename);\n  }\n  function toParamRegExp(attributePattern, flags) {\n    return new RegExp(\"(?:^|;)\\\\s*\" + attributePattern + \"\\\\s*=\\\\s*\" + \"(\" + '[^\";\\\\s][^;\\\\s]*' + \"|\" + '\"(?:[^\"\\\\\\\\]|\\\\\\\\\"?)+\"?' + \")\", flags);\n  }\n  function textdecode(encoding, value) {\n    if (encoding) {\n      if (!/^[\\x00-\\xFF]+$/.test(value)) {\n        return value;\n      }\n      try {\n        const decoder = new TextDecoder(encoding, {\n          fatal: true\n        });\n        const buffer = stringToBytes(value);\n        value = decoder.decode(buffer);\n        needsEncodingFixup = false;\n      } catch {}\n    }\n    return value;\n  }\n  function fixupEncoding(value) {\n    if (needsEncodingFixup && /[\\x80-\\xff]/.test(value)) {\n      value = textdecode(\"utf-8\", value);\n      if (needsEncodingFixup) {\n        value = textdecode(\"iso-8859-1\", value);\n      }\n    }\n    return value;\n  }\n  function rfc2231getparam(contentDispositionStr) {\n    const matches = [];\n    let match;\n    const iter = toParamRegExp(\"filename\\\\*((?!0\\\\d)\\\\d+)(\\\\*?)\", \"ig\");\n    while ((match = iter.exec(contentDispositionStr)) !== null) {\n      let [, n, quot, part] = match;\n      n = parseInt(n, 10);\n      if (n in matches) {\n        if (n === 0) {\n          break;\n        }\n        continue;\n      }\n      matches[n] = [quot, part];\n    }\n    const parts = [];\n    for (let n = 0; n < matches.length; ++n) {\n      if (!(n in matches)) {\n        break;\n      }\n      let [quot, part] = matches[n];\n      part = rfc2616unquote(part);\n      if (quot) {\n        part = unescape(part);\n        if (n === 0) {\n          part = rfc5987decode(part);\n        }\n      }\n      parts.push(part);\n    }\n    return parts.join(\"\");\n  }\n  function rfc2616unquote(value) {\n    if (value.startsWith('\"')) {\n      const parts = value.slice(1).split('\\\\\"');\n      for (let i = 0; i < parts.length; ++i) {\n        const quotindex = parts[i].indexOf('\"');\n        if (quotindex !== -1) {\n          parts[i] = parts[i].slice(0, quotindex);\n          parts.length = i + 1;\n        }\n        parts[i] = parts[i].replaceAll(/\\\\(.)/g, \"$1\");\n      }\n      value = parts.join('\"');\n    }\n    return value;\n  }\n  function rfc5987decode(extvalue) {\n    const encodingend = extvalue.indexOf(\"'\");\n    if (encodingend === -1) {\n      return extvalue;\n    }\n    const encoding = extvalue.slice(0, encodingend);\n    const langvalue = extvalue.slice(encodingend + 1);\n    const value = langvalue.replace(/^[^']*'/, \"\");\n    return textdecode(encoding, value);\n  }\n  function rfc2047decode(value) {\n    if (!value.startsWith(\"=?\") || /[\\x00-\\x19\\x80-\\xff]/.test(value)) {\n      return value;\n    }\n    return value.replaceAll(/=\\?([\\w-]*)\\?([QqBb])\\?((?:[^?]|\\?(?!=))*)\\?=/g, function (matches, charset, encoding, text) {\n      if (encoding === \"q\" || encoding === \"Q\") {\n        text = text.replaceAll(\"_\", \" \");\n        text = text.replaceAll(/=([0-9a-fA-F]{2})/g, function (match, hex) {\n          return String.fromCharCode(parseInt(hex, 16));\n        });\n        return textdecode(charset, text);\n      }\n      try {\n        text = atob(text);\n      } catch {}\n      return textdecode(charset, text);\n    });\n  }\n  return \"\";\n}\n\n;// CONCATENATED MODULE: ./src/display/network_utils.js\n\n\n\nfunction validateRangeRequestCapabilities({\n  getResponseHeader,\n  isHttp,\n  rangeChunkSize,\n  disableRange\n}) {\n  const returnValues = {\n    allowRangeRequests: false,\n    suggestedLength: undefined\n  };\n  const length = parseInt(getResponseHeader(\"Content-Length\"), 10);\n  if (!Number.isInteger(length)) {\n    return returnValues;\n  }\n  returnValues.suggestedLength = length;\n  if (length <= 2 * rangeChunkSize) {\n    return returnValues;\n  }\n  if (disableRange || !isHttp) {\n    return returnValues;\n  }\n  if (getResponseHeader(\"Accept-Ranges\") !== \"bytes\") {\n    return returnValues;\n  }\n  const contentEncoding = getResponseHeader(\"Content-Encoding\") || \"identity\";\n  if (contentEncoding !== \"identity\") {\n    return returnValues;\n  }\n  returnValues.allowRangeRequests = true;\n  return returnValues;\n}\nfunction extractFilenameFromHeader(getResponseHeader) {\n  const contentDisposition = getResponseHeader(\"Content-Disposition\");\n  if (contentDisposition) {\n    let filename = getFilenameFromContentDispositionHeader(contentDisposition);\n    if (filename.includes(\"%\")) {\n      try {\n        filename = decodeURIComponent(filename);\n      } catch {}\n    }\n    if (isPdfFile(filename)) {\n      return filename;\n    }\n  }\n  return null;\n}\nfunction createResponseStatusError(status, url) {\n  if (status === 404 || status === 0 && url.startsWith(\"file:\")) {\n    return new MissingPDFException('Missing PDF \"' + url + '\".');\n  }\n  return new UnexpectedResponseException(`Unexpected server response (${status}) while retrieving PDF \"${url}\".`, status);\n}\nfunction validateResponseStatus(status) {\n  return status === 200 || status === 206;\n}\n\n;// CONCATENATED MODULE: ./src/display/fetch_stream.js\n\n\nfunction createFetchOptions(headers, withCredentials, abortController) {\n  return {\n    method: \"GET\",\n    headers,\n    signal: abortController.signal,\n    mode: \"cors\",\n    credentials: withCredentials ? \"include\" : \"same-origin\",\n    redirect: \"follow\"\n  };\n}\nfunction createHeaders(httpHeaders) {\n  const headers = new Headers();\n  for (const property in httpHeaders) {\n    const value = httpHeaders[property];\n    if (value === undefined) {\n      continue;\n    }\n    headers.append(property, value);\n  }\n  return headers;\n}\nfunction getArrayBuffer(val) {\n  if (val instanceof Uint8Array) {\n    return val.buffer;\n  }\n  if (val instanceof ArrayBuffer) {\n    return val;\n  }\n  warn(`getArrayBuffer - unexpected data format: ${val}`);\n  return new Uint8Array(val).buffer;\n}\nclass PDFFetchStream {\n  constructor(source) {\n    this.source = source;\n    this.isHttp = /^https?:/i.test(source.url);\n    this.httpHeaders = this.isHttp && source.httpHeaders || {};\n    this._fullRequestReader = null;\n    this._rangeRequestReaders = [];\n  }\n  get _progressiveDataLength() {\n    return this._fullRequestReader?._loaded ?? 0;\n  }\n  getFullReader() {\n    assert(!this._fullRequestReader, \"PDFFetchStream.getFullReader can only be called once.\");\n    this._fullRequestReader = new PDFFetchStreamReader(this);\n    return this._fullRequestReader;\n  }\n  getRangeReader(begin, end) {\n    if (end <= this._progressiveDataLength) {\n      return null;\n    }\n    const reader = new PDFFetchStreamRangeReader(this, begin, end);\n    this._rangeRequestReaders.push(reader);\n    return reader;\n  }\n  cancelAllRequests(reason) {\n    this._fullRequestReader?.cancel(reason);\n    for (const reader of this._rangeRequestReaders.slice(0)) {\n      reader.cancel(reason);\n    }\n  }\n}\nclass PDFFetchStreamReader {\n  constructor(stream) {\n    this._stream = stream;\n    this._reader = null;\n    this._loaded = 0;\n    this._filename = null;\n    const source = stream.source;\n    this._withCredentials = source.withCredentials || false;\n    this._contentLength = source.length;\n    this._headersCapability = Promise.withResolvers();\n    this._disableRange = source.disableRange || false;\n    this._rangeChunkSize = source.rangeChunkSize;\n    if (!this._rangeChunkSize && !this._disableRange) {\n      this._disableRange = true;\n    }\n    this._abortController = new AbortController();\n    this._isStreamingSupported = !source.disableStream;\n    this._isRangeSupported = !source.disableRange;\n    this._headers = createHeaders(this._stream.httpHeaders);\n    const url = source.url;\n    fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => {\n      if (!validateResponseStatus(response.status)) {\n        throw createResponseStatusError(response.status, url);\n      }\n      this._reader = response.body.getReader();\n      this._headersCapability.resolve();\n      const getResponseHeader = name => response.headers.get(name);\n      const {\n        allowRangeRequests,\n        suggestedLength\n      } = validateRangeRequestCapabilities({\n        getResponseHeader,\n        isHttp: this._stream.isHttp,\n        rangeChunkSize: this._rangeChunkSize,\n        disableRange: this._disableRange\n      });\n      this._isRangeSupported = allowRangeRequests;\n      this._contentLength = suggestedLength || this._contentLength;\n      this._filename = extractFilenameFromHeader(getResponseHeader);\n      if (!this._isStreamingSupported && this._isRangeSupported) {\n        this.cancel(new AbortException(\"Streaming is disabled.\"));\n      }\n    }).catch(this._headersCapability.reject);\n    this.onProgress = null;\n  }\n  get headersReady() {\n    return this._headersCapability.promise;\n  }\n  get filename() {\n    return this._filename;\n  }\n  get contentLength() {\n    return this._contentLength;\n  }\n  get isRangeSupported() {\n    return this._isRangeSupported;\n  }\n  get isStreamingSupported() {\n    return this._isStreamingSupported;\n  }\n  async read() {\n    await this._headersCapability.promise;\n    const {\n      value,\n      done\n    } = await this._reader.read();\n    if (done) {\n      return {\n        value,\n        done\n      };\n    }\n    this._loaded += value.byteLength;\n    this.onProgress?.({\n      loaded: this._loaded,\n      total: this._contentLength\n    });\n    return {\n      value: getArrayBuffer(value),\n      done: false\n    };\n  }\n  cancel(reason) {\n    this._reader?.cancel(reason);\n    this._abortController.abort();\n  }\n}\nclass PDFFetchStreamRangeReader {\n  constructor(stream, begin, end) {\n    this._stream = stream;\n    this._reader = null;\n    this._loaded = 0;\n    const source = stream.source;\n    this._withCredentials = source.withCredentials || false;\n    this._readCapability = Promise.withResolvers();\n    this._isStreamingSupported = !source.disableStream;\n    this._abortController = new AbortController();\n    this._headers = createHeaders(this._stream.httpHeaders);\n    this._headers.append(\"Range\", `bytes=${begin}-${end - 1}`);\n    const url = source.url;\n    fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => {\n      if (!validateResponseStatus(response.status)) {\n        throw createResponseStatusError(response.status, url);\n      }\n      this._readCapability.resolve();\n      this._reader = response.body.getReader();\n    }).catch(this._readCapability.reject);\n    this.onProgress = null;\n  }\n  get isStreamingSupported() {\n    return this._isStreamingSupported;\n  }\n  async read() {\n    await this._readCapability.promise;\n    const {\n      value,\n      done\n    } = await this._reader.read();\n    if (done) {\n      return {\n        value,\n        done\n      };\n    }\n    this._loaded += value.byteLength;\n    this.onProgress?.({\n      loaded: this._loaded\n    });\n    return {\n      value: getArrayBuffer(value),\n      done: false\n    };\n  }\n  cancel(reason) {\n    this._reader?.cancel(reason);\n    this._abortController.abort();\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/network.js\n\n\nconst OK_RESPONSE = 200;\nconst PARTIAL_CONTENT_RESPONSE = 206;\nfunction network_getArrayBuffer(xhr) {\n  const data = xhr.response;\n  if (typeof data !== \"string\") {\n    return data;\n  }\n  return stringToBytes(data).buffer;\n}\nclass NetworkManager {\n  constructor(url, args = {}) {\n    this.url = url;\n    this.isHttp = /^https?:/i.test(url);\n    this.httpHeaders = this.isHttp && args.httpHeaders || Object.create(null);\n    this.withCredentials = args.withCredentials || false;\n    this.currXhrId = 0;\n    this.pendingRequests = Object.create(null);\n  }\n  requestRange(begin, end, listeners) {\n    const args = {\n      begin,\n      end\n    };\n    for (const prop in listeners) {\n      args[prop] = listeners[prop];\n    }\n    return this.request(args);\n  }\n  requestFull(listeners) {\n    return this.request(listeners);\n  }\n  request(args) {\n    const xhr = new XMLHttpRequest();\n    const xhrId = this.currXhrId++;\n    const pendingRequest = this.pendingRequests[xhrId] = {\n      xhr\n    };\n    xhr.open(\"GET\", this.url);\n    xhr.withCredentials = this.withCredentials;\n    for (const property in this.httpHeaders) {\n      const value = this.httpHeaders[property];\n      if (value === undefined) {\n        continue;\n      }\n      xhr.setRequestHeader(property, value);\n    }\n    if (this.isHttp && \"begin\" in args && \"end\" in args) {\n      xhr.setRequestHeader(\"Range\", `bytes=${args.begin}-${args.end - 1}`);\n      pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE;\n    } else {\n      pendingRequest.expectedStatus = OK_RESPONSE;\n    }\n    xhr.responseType = \"arraybuffer\";\n    if (args.onError) {\n      xhr.onerror = function (evt) {\n        args.onError(xhr.status);\n      };\n    }\n    xhr.onreadystatechange = this.onStateChange.bind(this, xhrId);\n    xhr.onprogress = this.onProgress.bind(this, xhrId);\n    pendingRequest.onHeadersReceived = args.onHeadersReceived;\n    pendingRequest.onDone = args.onDone;\n    pendingRequest.onError = args.onError;\n    pendingRequest.onProgress = args.onProgress;\n    xhr.send(null);\n    return xhrId;\n  }\n  onProgress(xhrId, evt) {\n    const pendingRequest = this.pendingRequests[xhrId];\n    if (!pendingRequest) {\n      return;\n    }\n    pendingRequest.onProgress?.(evt);\n  }\n  onStateChange(xhrId, evt) {\n    const pendingRequest = this.pendingRequests[xhrId];\n    if (!pendingRequest) {\n      return;\n    }\n    const xhr = pendingRequest.xhr;\n    if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) {\n      pendingRequest.onHeadersReceived();\n      delete pendingRequest.onHeadersReceived;\n    }\n    if (xhr.readyState !== 4) {\n      return;\n    }\n    if (!(xhrId in this.pendingRequests)) {\n      return;\n    }\n    delete this.pendingRequests[xhrId];\n    if (xhr.status === 0 && this.isHttp) {\n      pendingRequest.onError?.(xhr.status);\n      return;\n    }\n    const xhrStatus = xhr.status || OK_RESPONSE;\n    const ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE;\n    if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) {\n      pendingRequest.onError?.(xhr.status);\n      return;\n    }\n    const chunk = network_getArrayBuffer(xhr);\n    if (xhrStatus === PARTIAL_CONTENT_RESPONSE) {\n      const rangeHeader = xhr.getResponseHeader(\"Content-Range\");\n      const matches = /bytes (\\d+)-(\\d+)\\/(\\d+)/.exec(rangeHeader);\n      pendingRequest.onDone({\n        begin: parseInt(matches[1], 10),\n        chunk\n      });\n    } else if (chunk) {\n      pendingRequest.onDone({\n        begin: 0,\n        chunk\n      });\n    } else {\n      pendingRequest.onError?.(xhr.status);\n    }\n  }\n  getRequestXhr(xhrId) {\n    return this.pendingRequests[xhrId].xhr;\n  }\n  isPendingRequest(xhrId) {\n    return xhrId in this.pendingRequests;\n  }\n  abortRequest(xhrId) {\n    const xhr = this.pendingRequests[xhrId].xhr;\n    delete this.pendingRequests[xhrId];\n    xhr.abort();\n  }\n}\nclass PDFNetworkStream {\n  constructor(source) {\n    this._source = source;\n    this._manager = new NetworkManager(source.url, {\n      httpHeaders: source.httpHeaders,\n      withCredentials: source.withCredentials\n    });\n    this._rangeChunkSize = source.rangeChunkSize;\n    this._fullRequestReader = null;\n    this._rangeRequestReaders = [];\n  }\n  _onRangeRequestReaderClosed(reader) {\n    const i = this._rangeRequestReaders.indexOf(reader);\n    if (i >= 0) {\n      this._rangeRequestReaders.splice(i, 1);\n    }\n  }\n  getFullReader() {\n    assert(!this._fullRequestReader, \"PDFNetworkStream.getFullReader can only be called once.\");\n    this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source);\n    return this._fullRequestReader;\n  }\n  getRangeReader(begin, end) {\n    const reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end);\n    reader.onClosed = this._onRangeRequestReaderClosed.bind(this);\n    this._rangeRequestReaders.push(reader);\n    return reader;\n  }\n  cancelAllRequests(reason) {\n    this._fullRequestReader?.cancel(reason);\n    for (const reader of this._rangeRequestReaders.slice(0)) {\n      reader.cancel(reason);\n    }\n  }\n}\nclass PDFNetworkStreamFullRequestReader {\n  constructor(manager, source) {\n    this._manager = manager;\n    const args = {\n      onHeadersReceived: this._onHeadersReceived.bind(this),\n      onDone: this._onDone.bind(this),\n      onError: this._onError.bind(this),\n      onProgress: this._onProgress.bind(this)\n    };\n    this._url = source.url;\n    this._fullRequestId = manager.requestFull(args);\n    this._headersReceivedCapability = Promise.withResolvers();\n    this._disableRange = source.disableRange || false;\n    this._contentLength = source.length;\n    this._rangeChunkSize = source.rangeChunkSize;\n    if (!this._rangeChunkSize && !this._disableRange) {\n      this._disableRange = true;\n    }\n    this._isStreamingSupported = false;\n    this._isRangeSupported = false;\n    this._cachedChunks = [];\n    this._requests = [];\n    this._done = false;\n    this._storedError = undefined;\n    this._filename = null;\n    this.onProgress = null;\n  }\n  _onHeadersReceived() {\n    const fullRequestXhrId = this._fullRequestId;\n    const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId);\n    const getResponseHeader = name => fullRequestXhr.getResponseHeader(name);\n    const {\n      allowRangeRequests,\n      suggestedLength\n    } = validateRangeRequestCapabilities({\n      getResponseHeader,\n      isHttp: this._manager.isHttp,\n      rangeChunkSize: this._rangeChunkSize,\n      disableRange: this._disableRange\n    });\n    if (allowRangeRequests) {\n      this._isRangeSupported = true;\n    }\n    this._contentLength = suggestedLength || this._contentLength;\n    this._filename = extractFilenameFromHeader(getResponseHeader);\n    if (this._isRangeSupported) {\n      this._manager.abortRequest(fullRequestXhrId);\n    }\n    this._headersReceivedCapability.resolve();\n  }\n  _onDone(data) {\n    if (data) {\n      if (this._requests.length > 0) {\n        const requestCapability = this._requests.shift();\n        requestCapability.resolve({\n          value: data.chunk,\n          done: false\n        });\n      } else {\n        this._cachedChunks.push(data.chunk);\n      }\n    }\n    this._done = true;\n    if (this._cachedChunks.length > 0) {\n      return;\n    }\n    for (const requestCapability of this._requests) {\n      requestCapability.resolve({\n        value: undefined,\n        done: true\n      });\n    }\n    this._requests.length = 0;\n  }\n  _onError(status) {\n    this._storedError = createResponseStatusError(status, this._url);\n    this._headersReceivedCapability.reject(this._storedError);\n    for (const requestCapability of this._requests) {\n      requestCapability.reject(this._storedError);\n    }\n    this._requests.length = 0;\n    this._cachedChunks.length = 0;\n  }\n  _onProgress(evt) {\n    this.onProgress?.({\n      loaded: evt.loaded,\n      total: evt.lengthComputable ? evt.total : this._contentLength\n    });\n  }\n  get filename() {\n    return this._filename;\n  }\n  get isRangeSupported() {\n    return this._isRangeSupported;\n  }\n  get isStreamingSupported() {\n    return this._isStreamingSupported;\n  }\n  get contentLength() {\n    return this._contentLength;\n  }\n  get headersReady() {\n    return this._headersReceivedCapability.promise;\n  }\n  async read() {\n    if (this._storedError) {\n      throw this._storedError;\n    }\n    if (this._cachedChunks.length > 0) {\n      const chunk = this._cachedChunks.shift();\n      return {\n        value: chunk,\n        done: false\n      };\n    }\n    if (this._done) {\n      return {\n        value: undefined,\n        done: true\n      };\n    }\n    const requestCapability = Promise.withResolvers();\n    this._requests.push(requestCapability);\n    return requestCapability.promise;\n  }\n  cancel(reason) {\n    this._done = true;\n    this._headersReceivedCapability.reject(reason);\n    for (const requestCapability of this._requests) {\n      requestCapability.resolve({\n        value: undefined,\n        done: true\n      });\n    }\n    this._requests.length = 0;\n    if (this._manager.isPendingRequest(this._fullRequestId)) {\n      this._manager.abortRequest(this._fullRequestId);\n    }\n    this._fullRequestReader = null;\n  }\n}\nclass PDFNetworkStreamRangeRequestReader {\n  constructor(manager, begin, end) {\n    this._manager = manager;\n    const args = {\n      onDone: this._onDone.bind(this),\n      onError: this._onError.bind(this),\n      onProgress: this._onProgress.bind(this)\n    };\n    this._url = manager.url;\n    this._requestId = manager.requestRange(begin, end, args);\n    this._requests = [];\n    this._queuedChunk = null;\n    this._done = false;\n    this._storedError = undefined;\n    this.onProgress = null;\n    this.onClosed = null;\n  }\n  _close() {\n    this.onClosed?.(this);\n  }\n  _onDone(data) {\n    const chunk = data.chunk;\n    if (this._requests.length > 0) {\n      const requestCapability = this._requests.shift();\n      requestCapability.resolve({\n        value: chunk,\n        done: false\n      });\n    } else {\n      this._queuedChunk = chunk;\n    }\n    this._done = true;\n    for (const requestCapability of this._requests) {\n      requestCapability.resolve({\n        value: undefined,\n        done: true\n      });\n    }\n    this._requests.length = 0;\n    this._close();\n  }\n  _onError(status) {\n    this._storedError = createResponseStatusError(status, this._url);\n    for (const requestCapability of this._requests) {\n      requestCapability.reject(this._storedError);\n    }\n    this._requests.length = 0;\n    this._queuedChunk = null;\n  }\n  _onProgress(evt) {\n    if (!this.isStreamingSupported) {\n      this.onProgress?.({\n        loaded: evt.loaded\n      });\n    }\n  }\n  get isStreamingSupported() {\n    return false;\n  }\n  async read() {\n    if (this._storedError) {\n      throw this._storedError;\n    }\n    if (this._queuedChunk !== null) {\n      const chunk = this._queuedChunk;\n      this._queuedChunk = null;\n      return {\n        value: chunk,\n        done: false\n      };\n    }\n    if (this._done) {\n      return {\n        value: undefined,\n        done: true\n      };\n    }\n    const requestCapability = Promise.withResolvers();\n    this._requests.push(requestCapability);\n    return requestCapability.promise;\n  }\n  cancel(reason) {\n    this._done = true;\n    for (const requestCapability of this._requests) {\n      requestCapability.resolve({\n        value: undefined,\n        done: true\n      });\n    }\n    this._requests.length = 0;\n    if (this._manager.isPendingRequest(this._requestId)) {\n      this._manager.abortRequest(this._requestId);\n    }\n    this._close();\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/node_stream.js\n\n\n\nconst fileUriRegex = /^file:\\/\\/\\/[a-zA-Z]:\\//;\nfunction parseUrl(sourceUrl) {\n  const url = NodePackages.get(\"url\");\n  const parsedUrl = url.parse(sourceUrl);\n  if (parsedUrl.protocol === \"file:\" || parsedUrl.host) {\n    return parsedUrl;\n  }\n  if (/^[a-z]:[/\\\\]/i.test(sourceUrl)) {\n    return url.parse(`file:///${sourceUrl}`);\n  }\n  if (!parsedUrl.host) {\n    parsedUrl.protocol = \"file:\";\n  }\n  return parsedUrl;\n}\nclass PDFNodeStream {\n  constructor(source) {\n    this.source = source;\n    this.url = parseUrl(source.url);\n    this.isHttp = this.url.protocol === \"http:\" || this.url.protocol === \"https:\";\n    this.isFsUrl = this.url.protocol === \"file:\";\n    this.httpHeaders = this.isHttp && source.httpHeaders || {};\n    this._fullRequestReader = null;\n    this._rangeRequestReaders = [];\n  }\n  get _progressiveDataLength() {\n    return this._fullRequestReader?._loaded ?? 0;\n  }\n  getFullReader() {\n    assert(!this._fullRequestReader, \"PDFNodeStream.getFullReader can only be called once.\");\n    this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this);\n    return this._fullRequestReader;\n  }\n  getRangeReader(start, end) {\n    if (end <= this._progressiveDataLength) {\n      return null;\n    }\n    const rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end);\n    this._rangeRequestReaders.push(rangeReader);\n    return rangeReader;\n  }\n  cancelAllRequests(reason) {\n    this._fullRequestReader?.cancel(reason);\n    for (const reader of this._rangeRequestReaders.slice(0)) {\n      reader.cancel(reason);\n    }\n  }\n}\nclass BaseFullReader {\n  constructor(stream) {\n    this._url = stream.url;\n    this._done = false;\n    this._storedError = null;\n    this.onProgress = null;\n    const source = stream.source;\n    this._contentLength = source.length;\n    this._loaded = 0;\n    this._filename = null;\n    this._disableRange = source.disableRange || false;\n    this._rangeChunkSize = source.rangeChunkSize;\n    if (!this._rangeChunkSize && !this._disableRange) {\n      this._disableRange = true;\n    }\n    this._isStreamingSupported = !source.disableStream;\n    this._isRangeSupported = !source.disableRange;\n    this._readableStream = null;\n    this._readCapability = Promise.withResolvers();\n    this._headersCapability = Promise.withResolvers();\n  }\n  get headersReady() {\n    return this._headersCapability.promise;\n  }\n  get filename() {\n    return this._filename;\n  }\n  get contentLength() {\n    return this._contentLength;\n  }\n  get isRangeSupported() {\n    return this._isRangeSupported;\n  }\n  get isStreamingSupported() {\n    return this._isStreamingSupported;\n  }\n  async read() {\n    await this._readCapability.promise;\n    if (this._done) {\n      return {\n        value: undefined,\n        done: true\n      };\n    }\n    if (this._storedError) {\n      throw this._storedError;\n    }\n    const chunk = this._readableStream.read();\n    if (chunk === null) {\n      this._readCapability = Promise.withResolvers();\n      return this.read();\n    }\n    this._loaded += chunk.length;\n    this.onProgress?.({\n      loaded: this._loaded,\n      total: this._contentLength\n    });\n    const buffer = new Uint8Array(chunk).buffer;\n    return {\n      value: buffer,\n      done: false\n    };\n  }\n  cancel(reason) {\n    if (!this._readableStream) {\n      this._error(reason);\n      return;\n    }\n    this._readableStream.destroy(reason);\n  }\n  _error(reason) {\n    this._storedError = reason;\n    this._readCapability.resolve();\n  }\n  _setReadableStream(readableStream) {\n    this._readableStream = readableStream;\n    readableStream.on(\"readable\", () => {\n      this._readCapability.resolve();\n    });\n    readableStream.on(\"end\", () => {\n      readableStream.destroy();\n      this._done = true;\n      this._readCapability.resolve();\n    });\n    readableStream.on(\"error\", reason => {\n      this._error(reason);\n    });\n    if (!this._isStreamingSupported && this._isRangeSupported) {\n      this._error(new AbortException(\"streaming is disabled\"));\n    }\n    if (this._storedError) {\n      this._readableStream.destroy(this._storedError);\n    }\n  }\n}\nclass BaseRangeReader {\n  constructor(stream) {\n    this._url = stream.url;\n    this._done = false;\n    this._storedError = null;\n    this.onProgress = null;\n    this._loaded = 0;\n    this._readableStream = null;\n    this._readCapability = Promise.withResolvers();\n    const source = stream.source;\n    this._isStreamingSupported = !source.disableStream;\n  }\n  get isStreamingSupported() {\n    return this._isStreamingSupported;\n  }\n  async read() {\n    await this._readCapability.promise;\n    if (this._done) {\n      return {\n        value: undefined,\n        done: true\n      };\n    }\n    if (this._storedError) {\n      throw this._storedError;\n    }\n    const chunk = this._readableStream.read();\n    if (chunk === null) {\n      this._readCapability = Promise.withResolvers();\n      return this.read();\n    }\n    this._loaded += chunk.length;\n    this.onProgress?.({\n      loaded: this._loaded\n    });\n    const buffer = new Uint8Array(chunk).buffer;\n    return {\n      value: buffer,\n      done: false\n    };\n  }\n  cancel(reason) {\n    if (!this._readableStream) {\n      this._error(reason);\n      return;\n    }\n    this._readableStream.destroy(reason);\n  }\n  _error(reason) {\n    this._storedError = reason;\n    this._readCapability.resolve();\n  }\n  _setReadableStream(readableStream) {\n    this._readableStream = readableStream;\n    readableStream.on(\"readable\", () => {\n      this._readCapability.resolve();\n    });\n    readableStream.on(\"end\", () => {\n      readableStream.destroy();\n      this._done = true;\n      this._readCapability.resolve();\n    });\n    readableStream.on(\"error\", reason => {\n      this._error(reason);\n    });\n    if (this._storedError) {\n      this._readableStream.destroy(this._storedError);\n    }\n  }\n}\nfunction createRequestOptions(parsedUrl, headers) {\n  return {\n    protocol: parsedUrl.protocol,\n    auth: parsedUrl.auth,\n    host: parsedUrl.hostname,\n    port: parsedUrl.port,\n    path: parsedUrl.path,\n    method: \"GET\",\n    headers\n  };\n}\nclass PDFNodeStreamFullReader extends BaseFullReader {\n  constructor(stream) {\n    super(stream);\n    const handleResponse = response => {\n      if (response.statusCode === 404) {\n        const error = new MissingPDFException(`Missing PDF \"${this._url}\".`);\n        this._storedError = error;\n        this._headersCapability.reject(error);\n        return;\n      }\n      this._headersCapability.resolve();\n      this._setReadableStream(response);\n      const getResponseHeader = name => this._readableStream.headers[name.toLowerCase()];\n      const {\n        allowRangeRequests,\n        suggestedLength\n      } = validateRangeRequestCapabilities({\n        getResponseHeader,\n        isHttp: stream.isHttp,\n        rangeChunkSize: this._rangeChunkSize,\n        disableRange: this._disableRange\n      });\n      this._isRangeSupported = allowRangeRequests;\n      this._contentLength = suggestedLength || this._contentLength;\n      this._filename = extractFilenameFromHeader(getResponseHeader);\n    };\n    this._request = null;\n    if (this._url.protocol === \"http:\") {\n      const http = NodePackages.get(\"http\");\n      this._request = http.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse);\n    } else {\n      const https = NodePackages.get(\"https\");\n      this._request = https.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse);\n    }\n    this._request.on(\"error\", reason => {\n      this._storedError = reason;\n      this._headersCapability.reject(reason);\n    });\n    this._request.end();\n  }\n}\nclass PDFNodeStreamRangeReader extends BaseRangeReader {\n  constructor(stream, start, end) {\n    super(stream);\n    this._httpHeaders = {};\n    for (const property in stream.httpHeaders) {\n      const value = stream.httpHeaders[property];\n      if (value === undefined) {\n        continue;\n      }\n      this._httpHeaders[property] = value;\n    }\n    this._httpHeaders.Range = `bytes=${start}-${end - 1}`;\n    const handleResponse = response => {\n      if (response.statusCode === 404) {\n        const error = new MissingPDFException(`Missing PDF \"${this._url}\".`);\n        this._storedError = error;\n        return;\n      }\n      this._setReadableStream(response);\n    };\n    this._request = null;\n    if (this._url.protocol === \"http:\") {\n      const http = NodePackages.get(\"http\");\n      this._request = http.request(createRequestOptions(this._url, this._httpHeaders), handleResponse);\n    } else {\n      const https = NodePackages.get(\"https\");\n      this._request = https.request(createRequestOptions(this._url, this._httpHeaders), handleResponse);\n    }\n    this._request.on(\"error\", reason => {\n      this._storedError = reason;\n    });\n    this._request.end();\n  }\n}\nclass PDFNodeStreamFsFullReader extends BaseFullReader {\n  constructor(stream) {\n    super(stream);\n    let path = decodeURIComponent(this._url.path);\n    if (fileUriRegex.test(this._url.href)) {\n      path = path.replace(/^\\//, \"\");\n    }\n    const fs = NodePackages.get(\"fs\");\n    fs.promises.lstat(path).then(stat => {\n      this._contentLength = stat.size;\n      this._setReadableStream(fs.createReadStream(path));\n      this._headersCapability.resolve();\n    }, error => {\n      if (error.code === \"ENOENT\") {\n        error = new MissingPDFException(`Missing PDF \"${path}\".`);\n      }\n      this._storedError = error;\n      this._headersCapability.reject(error);\n    });\n  }\n}\nclass PDFNodeStreamFsRangeReader extends BaseRangeReader {\n  constructor(stream, start, end) {\n    super(stream);\n    let path = decodeURIComponent(this._url.path);\n    if (fileUriRegex.test(this._url.href)) {\n      path = path.replace(/^\\//, \"\");\n    }\n    const fs = NodePackages.get(\"fs\");\n    this._setReadableStream(fs.createReadStream(path, {\n      start,\n      end: end - 1\n    }));\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/text_layer.js\n\n\nconst MAX_TEXT_DIVS_TO_RENDER = 100000;\nconst DEFAULT_FONT_SIZE = 30;\nconst DEFAULT_FONT_ASCENT = 0.8;\nclass TextLayer {\n  #capability = Promise.withResolvers();\n  #container = null;\n  #disableProcessItems = false;\n  #fontInspectorEnabled = !!globalThis.FontInspector?.enabled;\n  #lang = null;\n  #layoutTextParams = null;\n  #pageHeight = 0;\n  #pageWidth = 0;\n  #reader = null;\n  #rootContainer = null;\n  #rotation = 0;\n  #scale = 0;\n  #styleCache = Object.create(null);\n  #textContentItemsStr = [];\n  #textContentSource = null;\n  #textDivs = [];\n  #textDivProperties = new WeakMap();\n  #transform = null;\n  static #ascentCache = new Map();\n  static #canvasContexts = new Map();\n  static #pendingTextLayers = new Set();\n  constructor({\n    textContentSource,\n    container,\n    viewport\n  }) {\n    if (textContentSource instanceof ReadableStream) {\n      this.#textContentSource = textContentSource;\n    } else if (typeof textContentSource === \"object\") {\n      this.#textContentSource = new ReadableStream({\n        start(controller) {\n          controller.enqueue(textContentSource);\n          controller.close();\n        }\n      });\n    } else {\n      throw new Error('No \"textContentSource\" parameter specified.');\n    }\n    this.#container = this.#rootContainer = container;\n    this.#scale = viewport.scale * (globalThis.devicePixelRatio || 1);\n    this.#rotation = viewport.rotation;\n    this.#layoutTextParams = {\n      prevFontSize: null,\n      prevFontFamily: null,\n      div: null,\n      properties: null,\n      ctx: null\n    };\n    const {\n      pageWidth,\n      pageHeight,\n      pageX,\n      pageY\n    } = viewport.rawDims;\n    this.#transform = [1, 0, 0, -1, -pageX, pageY + pageHeight];\n    this.#pageWidth = pageWidth;\n    this.#pageHeight = pageHeight;\n    setLayerDimensions(container, viewport);\n    this.#capability.promise.catch(() => {}).then(() => {\n      TextLayer.#pendingTextLayers.delete(this);\n      this.#layoutTextParams = null;\n      this.#styleCache = null;\n    });\n  }\n  render() {\n    const pump = () => {\n      this.#reader.read().then(({\n        value,\n        done\n      }) => {\n        if (done) {\n          this.#capability.resolve();\n          return;\n        }\n        this.#lang ??= value.lang;\n        Object.assign(this.#styleCache, value.styles);\n        this.#processItems(value.items);\n        pump();\n      }, this.#capability.reject);\n    };\n    this.#reader = this.#textContentSource.getReader();\n    TextLayer.#pendingTextLayers.add(this);\n    pump();\n    return this.#capability.promise;\n  }\n  update({\n    viewport,\n    onBefore = null\n  }) {\n    const scale = viewport.scale * (globalThis.devicePixelRatio || 1);\n    const rotation = viewport.rotation;\n    if (rotation !== this.#rotation) {\n      onBefore?.();\n      this.#rotation = rotation;\n      setLayerDimensions(this.#rootContainer, {\n        rotation\n      });\n    }\n    if (scale !== this.#scale) {\n      onBefore?.();\n      this.#scale = scale;\n      const params = {\n        prevFontSize: null,\n        prevFontFamily: null,\n        div: null,\n        properties: null,\n        ctx: TextLayer.#getCtx(this.#lang)\n      };\n      for (const div of this.#textDivs) {\n        params.properties = this.#textDivProperties.get(div);\n        params.div = div;\n        this.#layout(params);\n      }\n    }\n  }\n  cancel() {\n    const abortEx = new AbortException(\"TextLayer task cancelled.\");\n    this.#reader?.cancel(abortEx).catch(() => {});\n    this.#reader = null;\n    this.#capability.reject(abortEx);\n  }\n  get textDivs() {\n    return this.#textDivs;\n  }\n  get textContentItemsStr() {\n    return this.#textContentItemsStr;\n  }\n  #processItems(items) {\n    if (this.#disableProcessItems) {\n      return;\n    }\n    this.#layoutTextParams.ctx ||= TextLayer.#getCtx(this.#lang);\n    const textDivs = this.#textDivs,\n      textContentItemsStr = this.#textContentItemsStr;\n    for (const item of items) {\n      if (textDivs.length > MAX_TEXT_DIVS_TO_RENDER) {\n        warn(\"Ignoring additional textDivs for performance reasons.\");\n        this.#disableProcessItems = true;\n        return;\n      }\n      if (item.str === undefined) {\n        if (item.type === \"beginMarkedContentProps\" || item.type === \"beginMarkedContent\") {\n          const parent = this.#container;\n          this.#container = document.createElement(\"span\");\n          this.#container.classList.add(\"markedContent\");\n          if (item.id !== null) {\n            this.#container.setAttribute(\"id\", `${item.id}`);\n          }\n          parent.append(this.#container);\n        } else if (item.type === \"endMarkedContent\") {\n          this.#container = this.#container.parentNode;\n        }\n        continue;\n      }\n      textContentItemsStr.push(item.str);\n      this.#appendText(item);\n    }\n  }\n  #appendText(geom) {\n    const textDiv = document.createElement(\"span\");\n    const textDivProperties = {\n      angle: 0,\n      canvasWidth: 0,\n      hasText: geom.str !== \"\",\n      hasEOL: geom.hasEOL,\n      fontSize: 0\n    };\n    this.#textDivs.push(textDiv);\n    const tx = Util.transform(this.#transform, geom.transform);\n    let angle = Math.atan2(tx[1], tx[0]);\n    const style = this.#styleCache[geom.fontName];\n    if (style.vertical) {\n      angle += Math.PI / 2;\n    }\n    const fontFamily = this.#fontInspectorEnabled && style.fontSubstitution || style.fontFamily;\n    const fontHeight = Math.hypot(tx[2], tx[3]);\n    const fontAscent = fontHeight * TextLayer.#getAscent(fontFamily, this.#lang);\n    let left, top;\n    if (angle === 0) {\n      left = tx[4];\n      top = tx[5] - fontAscent;\n    } else {\n      left = tx[4] + fontAscent * Math.sin(angle);\n      top = tx[5] - fontAscent * Math.cos(angle);\n    }\n    const scaleFactorStr = \"calc(var(--scale-factor)*\";\n    const divStyle = textDiv.style;\n    if (this.#container === this.#rootContainer) {\n      divStyle.left = `${(100 * left / this.#pageWidth).toFixed(2)}%`;\n      divStyle.top = `${(100 * top / this.#pageHeight).toFixed(2)}%`;\n    } else {\n      divStyle.left = `${scaleFactorStr}${left.toFixed(2)}px)`;\n      divStyle.top = `${scaleFactorStr}${top.toFixed(2)}px)`;\n    }\n    divStyle.fontSize = `${scaleFactorStr}${fontHeight.toFixed(2)}px)`;\n    divStyle.fontFamily = fontFamily;\n    textDivProperties.fontSize = fontHeight;\n    textDiv.setAttribute(\"role\", \"presentation\");\n    textDiv.textContent = geom.str;\n    textDiv.dir = geom.dir;\n    if (this.#fontInspectorEnabled) {\n      textDiv.dataset.fontName = style.fontSubstitutionLoadedName || geom.fontName;\n    }\n    if (angle !== 0) {\n      textDivProperties.angle = angle * (180 / Math.PI);\n    }\n    let shouldScaleText = false;\n    if (geom.str.length > 1) {\n      shouldScaleText = true;\n    } else if (geom.str !== \" \" && geom.transform[0] !== geom.transform[3]) {\n      const absScaleX = Math.abs(geom.transform[0]),\n        absScaleY = Math.abs(geom.transform[3]);\n      if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) {\n        shouldScaleText = true;\n      }\n    }\n    if (shouldScaleText) {\n      textDivProperties.canvasWidth = style.vertical ? geom.height : geom.width;\n    }\n    this.#textDivProperties.set(textDiv, textDivProperties);\n    this.#layoutTextParams.div = textDiv;\n    this.#layoutTextParams.properties = textDivProperties;\n    this.#layout(this.#layoutTextParams);\n    if (textDivProperties.hasText) {\n      this.#container.append(textDiv);\n    }\n    if (textDivProperties.hasEOL) {\n      const br = document.createElement(\"br\");\n      br.setAttribute(\"role\", \"presentation\");\n      this.#container.append(br);\n    }\n  }\n  #layout(params) {\n    const {\n      div,\n      properties,\n      ctx,\n      prevFontSize,\n      prevFontFamily\n    } = params;\n    const {\n      style\n    } = div;\n    let transform = \"\";\n    if (properties.canvasWidth !== 0 && properties.hasText) {\n      const {\n        fontFamily\n      } = style;\n      const {\n        canvasWidth,\n        fontSize\n      } = properties;\n      if (prevFontSize !== fontSize || prevFontFamily !== fontFamily) {\n        ctx.font = `${fontSize * this.#scale}px ${fontFamily}`;\n        params.prevFontSize = fontSize;\n        params.prevFontFamily = fontFamily;\n      }\n      const {\n        width\n      } = ctx.measureText(div.textContent);\n      if (width > 0) {\n        transform = `scaleX(${canvasWidth * this.#scale / width})`;\n      }\n    }\n    if (properties.angle !== 0) {\n      transform = `rotate(${properties.angle}deg) ${transform}`;\n    }\n    if (transform.length > 0) {\n      style.transform = transform;\n    }\n  }\n  static cleanup() {\n    if (this.#pendingTextLayers.size > 0) {\n      return;\n    }\n    this.#ascentCache.clear();\n    for (const {\n      canvas\n    } of this.#canvasContexts.values()) {\n      canvas.remove();\n    }\n    this.#canvasContexts.clear();\n  }\n  static #getCtx(lang = null) {\n    let canvasContext = this.#canvasContexts.get(lang ||= \"\");\n    if (!canvasContext) {\n      const canvas = document.createElement(\"canvas\");\n      canvas.className = \"hiddenCanvasElement\";\n      canvas.lang = lang;\n      document.body.append(canvas);\n      canvasContext = canvas.getContext(\"2d\", {\n        alpha: false\n      });\n      this.#canvasContexts.set(lang, canvasContext);\n    }\n    return canvasContext;\n  }\n  static #getAscent(fontFamily, lang) {\n    const cachedAscent = this.#ascentCache.get(fontFamily);\n    if (cachedAscent) {\n      return cachedAscent;\n    }\n    const ctx = this.#getCtx(lang);\n    const savedFont = ctx.font;\n    ctx.canvas.width = ctx.canvas.height = DEFAULT_FONT_SIZE;\n    ctx.font = `${DEFAULT_FONT_SIZE}px ${fontFamily}`;\n    const metrics = ctx.measureText(\"\");\n    let ascent = metrics.fontBoundingBoxAscent;\n    let descent = Math.abs(metrics.fontBoundingBoxDescent);\n    if (ascent) {\n      const ratio = ascent / (ascent + descent);\n      this.#ascentCache.set(fontFamily, ratio);\n      ctx.canvas.width = ctx.canvas.height = 0;\n      ctx.font = savedFont;\n      return ratio;\n    }\n    ctx.strokeStyle = \"red\";\n    ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE);\n    ctx.strokeText(\"g\", 0, 0);\n    let pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data;\n    descent = 0;\n    for (let i = pixels.length - 1 - 3; i >= 0; i -= 4) {\n      if (pixels[i] > 0) {\n        descent = Math.ceil(i / 4 / DEFAULT_FONT_SIZE);\n        break;\n      }\n    }\n    ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE);\n    ctx.strokeText(\"A\", 0, DEFAULT_FONT_SIZE);\n    pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data;\n    ascent = 0;\n    for (let i = 0, ii = pixels.length; i < ii; i += 4) {\n      if (pixels[i] > 0) {\n        ascent = DEFAULT_FONT_SIZE - Math.floor(i / 4 / DEFAULT_FONT_SIZE);\n        break;\n      }\n    }\n    ctx.canvas.width = ctx.canvas.height = 0;\n    ctx.font = savedFont;\n    const ratio = ascent ? ascent / (ascent + descent) : DEFAULT_FONT_ASCENT;\n    this.#ascentCache.set(fontFamily, ratio);\n    return ratio;\n  }\n}\nfunction renderTextLayer() {\n  deprecated(\"`renderTextLayer`, please use `TextLayer` instead.\");\n  const {\n    textContentSource,\n    container,\n    viewport,\n    ...rest\n  } = arguments[0];\n  const restKeys = Object.keys(rest);\n  if (restKeys.length > 0) {\n    warn(\"Ignoring `renderTextLayer` parameters: \" + restKeys.join(\", \"));\n  }\n  const textLayer = new TextLayer({\n    textContentSource,\n    container,\n    viewport\n  });\n  const {\n    textDivs,\n    textContentItemsStr\n  } = textLayer;\n  const promise = textLayer.render();\n  return {\n    promise,\n    textDivs,\n    textContentItemsStr\n  };\n}\nfunction updateTextLayer() {\n  deprecated(\"`updateTextLayer`, please use `TextLayer` instead.\");\n}\n\n;// CONCATENATED MODULE: ./src/display/xfa_text.js\nclass XfaText {\n  static textContent(xfa) {\n    const items = [];\n    const output = {\n      items,\n      styles: Object.create(null)\n    };\n    function walk(node) {\n      if (!node) {\n        return;\n      }\n      let str = null;\n      const name = node.name;\n      if (name === \"#text\") {\n        str = node.value;\n      } else if (!XfaText.shouldBuildText(name)) {\n        return;\n      } else if (node?.attributes?.textContent) {\n        str = node.attributes.textContent;\n      } else if (node.value) {\n        str = node.value;\n      }\n      if (str !== null) {\n        items.push({\n          str\n        });\n      }\n      if (!node.children) {\n        return;\n      }\n      for (const child of node.children) {\n        walk(child);\n      }\n    }\n    walk(xfa);\n    return output;\n  }\n  static shouldBuildText(name) {\n    return !(name === \"textarea\" || name === \"input\" || name === \"option\" || name === \"select\");\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/api.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst DEFAULT_RANGE_CHUNK_SIZE = 65536;\nconst RENDERING_CANCELLED_TIMEOUT = 100;\nconst DELAYED_CLEANUP_TIMEOUT = 5000;\nconst DefaultCanvasFactory = isNodeJS ? NodeCanvasFactory : DOMCanvasFactory;\nconst DefaultCMapReaderFactory = isNodeJS ? NodeCMapReaderFactory : DOMCMapReaderFactory;\nconst DefaultFilterFactory = isNodeJS ? NodeFilterFactory : DOMFilterFactory;\nconst DefaultStandardFontDataFactory = isNodeJS ? NodeStandardFontDataFactory : DOMStandardFontDataFactory;\nfunction getDocument(src) {\n  if (typeof src === \"string\" || src instanceof URL) {\n    src = {\n      url: src\n    };\n  } else if (src instanceof ArrayBuffer || ArrayBuffer.isView(src)) {\n    src = {\n      data: src\n    };\n  }\n  if (typeof src !== \"object\") {\n    throw new Error(\"Invalid parameter in getDocument, need parameter object.\");\n  }\n  if (!src.url && !src.data && !src.range) {\n    throw new Error(\"Invalid parameter object: need either .data, .range or .url\");\n  }\n  const task = new PDFDocumentLoadingTask();\n  const {\n    docId\n  } = task;\n  const url = src.url ? getUrlProp(src.url) : null;\n  const data = src.data ? getDataProp(src.data) : null;\n  const httpHeaders = src.httpHeaders || null;\n  const withCredentials = src.withCredentials === true;\n  const password = src.password ?? null;\n  const rangeTransport = src.range instanceof PDFDataRangeTransport ? src.range : null;\n  const rangeChunkSize = Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0 ? src.rangeChunkSize : DEFAULT_RANGE_CHUNK_SIZE;\n  let worker = src.worker instanceof PDFWorker ? src.worker : null;\n  const verbosity = src.verbosity;\n  const docBaseUrl = typeof src.docBaseUrl === \"string\" && !isDataScheme(src.docBaseUrl) ? src.docBaseUrl : null;\n  const cMapUrl = typeof src.cMapUrl === \"string\" ? src.cMapUrl : null;\n  const cMapPacked = src.cMapPacked !== false;\n  const CMapReaderFactory = src.CMapReaderFactory || DefaultCMapReaderFactory;\n  const standardFontDataUrl = typeof src.standardFontDataUrl === \"string\" ? src.standardFontDataUrl : null;\n  const StandardFontDataFactory = src.StandardFontDataFactory || DefaultStandardFontDataFactory;\n  const ignoreErrors = src.stopAtErrors !== true;\n  const maxImageSize = Number.isInteger(src.maxImageSize) && src.maxImageSize > -1 ? src.maxImageSize : -1;\n  const isEvalSupported = src.isEvalSupported !== false;\n  const isOffscreenCanvasSupported = typeof src.isOffscreenCanvasSupported === \"boolean\" ? src.isOffscreenCanvasSupported : !isNodeJS;\n  const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes) ? src.canvasMaxAreaInBytes : -1;\n  const disableFontFace = typeof src.disableFontFace === \"boolean\" ? src.disableFontFace : isNodeJS;\n  const fontExtraProperties = src.fontExtraProperties === true;\n  const enableXfa = src.enableXfa === true;\n  const ownerDocument = src.ownerDocument || globalThis.document;\n  const disableRange = src.disableRange === true;\n  const disableStream = src.disableStream === true;\n  const disableAutoFetch = src.disableAutoFetch === true;\n  const pdfBug = src.pdfBug === true;\n  const length = rangeTransport ? rangeTransport.length : src.length ?? NaN;\n  const useSystemFonts = typeof src.useSystemFonts === \"boolean\" ? src.useSystemFonts : !isNodeJS && !disableFontFace;\n  const useWorkerFetch = typeof src.useWorkerFetch === \"boolean\" ? src.useWorkerFetch : CMapReaderFactory === DOMCMapReaderFactory && StandardFontDataFactory === DOMStandardFontDataFactory && cMapUrl && standardFontDataUrl && isValidFetchUrl(cMapUrl, document.baseURI) && isValidFetchUrl(standardFontDataUrl, document.baseURI);\n  const canvasFactory = src.canvasFactory || new DefaultCanvasFactory({\n    ownerDocument\n  });\n  const filterFactory = src.filterFactory || new DefaultFilterFactory({\n    docId,\n    ownerDocument\n  });\n  const styleElement = null;\n  setVerbosityLevel(verbosity);\n  const transportFactory = {\n    canvasFactory,\n    filterFactory\n  };\n  if (!useWorkerFetch) {\n    transportFactory.cMapReaderFactory = new CMapReaderFactory({\n      baseUrl: cMapUrl,\n      isCompressed: cMapPacked\n    });\n    transportFactory.standardFontDataFactory = new StandardFontDataFactory({\n      baseUrl: standardFontDataUrl\n    });\n  }\n  if (!worker) {\n    const workerParams = {\n      verbosity,\n      port: GlobalWorkerOptions.workerPort\n    };\n    worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams);\n    task._worker = worker;\n  }\n  const docParams = {\n    docId,\n    apiVersion: \"4.3.136\",\n    data,\n    password,\n    disableAutoFetch,\n    rangeChunkSize,\n    length,\n    docBaseUrl,\n    enableXfa,\n    evaluatorOptions: {\n      maxImageSize,\n      disableFontFace,\n      ignoreErrors,\n      isEvalSupported,\n      isOffscreenCanvasSupported,\n      canvasMaxAreaInBytes,\n      fontExtraProperties,\n      useSystemFonts,\n      cMapUrl: useWorkerFetch ? cMapUrl : null,\n      standardFontDataUrl: useWorkerFetch ? standardFontDataUrl : null\n    }\n  };\n  const transportParams = {\n    disableFontFace,\n    fontExtraProperties,\n    ownerDocument,\n    pdfBug,\n    styleElement,\n    loadingParams: {\n      disableAutoFetch,\n      enableXfa\n    }\n  };\n  worker.promise.then(function () {\n    if (task.destroyed) {\n      throw new Error(\"Loading aborted\");\n    }\n    if (worker.destroyed) {\n      throw new Error(\"Worker was destroyed\");\n    }\n    const workerIdPromise = worker.messageHandler.sendWithPromise(\"GetDocRequest\", docParams, data ? [data.buffer] : null);\n    let networkStream;\n    if (rangeTransport) {\n      networkStream = new PDFDataTransportStream(rangeTransport, {\n        disableRange,\n        disableStream\n      });\n    } else if (!data) {\n      const createPDFNetworkStream = params => {\n        if (isNodeJS) {\n          const isFetchSupported = function () {\n            return typeof fetch !== \"undefined\" && typeof Response !== \"undefined\" && \"body\" in Response.prototype;\n          };\n          return isFetchSupported() && isValidFetchUrl(params.url) ? new PDFFetchStream(params) : new PDFNodeStream(params);\n        }\n        return isValidFetchUrl(params.url) ? new PDFFetchStream(params) : new PDFNetworkStream(params);\n      };\n      networkStream = createPDFNetworkStream({\n        url,\n        length,\n        httpHeaders,\n        withCredentials,\n        rangeChunkSize,\n        disableRange,\n        disableStream\n      });\n    }\n    return workerIdPromise.then(workerId => {\n      if (task.destroyed) {\n        throw new Error(\"Loading aborted\");\n      }\n      if (worker.destroyed) {\n        throw new Error(\"Worker was destroyed\");\n      }\n      const messageHandler = new MessageHandler(docId, workerId, worker.port);\n      const transport = new WorkerTransport(messageHandler, task, networkStream, transportParams, transportFactory);\n      task._transport = transport;\n      messageHandler.send(\"Ready\", null);\n    });\n  }).catch(task._capability.reject);\n  return task;\n}\nfunction getUrlProp(val) {\n  if (val instanceof URL) {\n    return val.href;\n  }\n  try {\n    return new URL(val, window.location).href;\n  } catch {\n    if (isNodeJS && typeof val === \"string\") {\n      return val;\n    }\n  }\n  throw new Error(\"Invalid PDF url data: \" + \"either string or URL-object is expected in the url property.\");\n}\nfunction getDataProp(val) {\n  if (isNodeJS && typeof Buffer !== \"undefined\" && val instanceof Buffer) {\n    throw new Error(\"Please provide binary data as `Uint8Array`, rather than `Buffer`.\");\n  }\n  if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) {\n    return val;\n  }\n  if (typeof val === \"string\") {\n    return stringToBytes(val);\n  }\n  if (val instanceof ArrayBuffer || ArrayBuffer.isView(val) || typeof val === \"object\" && !isNaN(val?.length)) {\n    return new Uint8Array(val);\n  }\n  throw new Error(\"Invalid PDF binary data: either TypedArray, \" + \"string, or array-like object is expected in the data property.\");\n}\nfunction isRefProxy(ref) {\n  return typeof ref === \"object\" && Number.isInteger(ref?.num) && ref.num >= 0 && Number.isInteger(ref?.gen) && ref.gen >= 0;\n}\nclass PDFDocumentLoadingTask {\n  static #docId = 0;\n  constructor() {\n    this._capability = Promise.withResolvers();\n    this._transport = null;\n    this._worker = null;\n    this.docId = `d${PDFDocumentLoadingTask.#docId++}`;\n    this.destroyed = false;\n    this.onPassword = null;\n    this.onProgress = null;\n  }\n  get promise() {\n    return this._capability.promise;\n  }\n  async destroy() {\n    this.destroyed = true;\n    try {\n      if (this._worker?.port) {\n        this._worker._pendingDestroy = true;\n      }\n      await this._transport?.destroy();\n    } catch (ex) {\n      if (this._worker?.port) {\n        delete this._worker._pendingDestroy;\n      }\n      throw ex;\n    }\n    this._transport = null;\n    if (this._worker) {\n      this._worker.destroy();\n      this._worker = null;\n    }\n  }\n}\nclass PDFDataRangeTransport {\n  constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) {\n    this.length = length;\n    this.initialData = initialData;\n    this.progressiveDone = progressiveDone;\n    this.contentDispositionFilename = contentDispositionFilename;\n    this._rangeListeners = [];\n    this._progressListeners = [];\n    this._progressiveReadListeners = [];\n    this._progressiveDoneListeners = [];\n    this._readyCapability = Promise.withResolvers();\n  }\n  addRangeListener(listener) {\n    this._rangeListeners.push(listener);\n  }\n  addProgressListener(listener) {\n    this._progressListeners.push(listener);\n  }\n  addProgressiveReadListener(listener) {\n    this._progressiveReadListeners.push(listener);\n  }\n  addProgressiveDoneListener(listener) {\n    this._progressiveDoneListeners.push(listener);\n  }\n  onDataRange(begin, chunk) {\n    for (const listener of this._rangeListeners) {\n      listener(begin, chunk);\n    }\n  }\n  onDataProgress(loaded, total) {\n    this._readyCapability.promise.then(() => {\n      for (const listener of this._progressListeners) {\n        listener(loaded, total);\n      }\n    });\n  }\n  onDataProgressiveRead(chunk) {\n    this._readyCapability.promise.then(() => {\n      for (const listener of this._progressiveReadListeners) {\n        listener(chunk);\n      }\n    });\n  }\n  onDataProgressiveDone() {\n    this._readyCapability.promise.then(() => {\n      for (const listener of this._progressiveDoneListeners) {\n        listener();\n      }\n    });\n  }\n  transportReady() {\n    this._readyCapability.resolve();\n  }\n  requestDataRange(begin, end) {\n    unreachable(\"Abstract method PDFDataRangeTransport.requestDataRange\");\n  }\n  abort() {}\n}\nclass PDFDocumentProxy {\n  constructor(pdfInfo, transport) {\n    this._pdfInfo = pdfInfo;\n    this._transport = transport;\n  }\n  get annotationStorage() {\n    return this._transport.annotationStorage;\n  }\n  get filterFactory() {\n    return this._transport.filterFactory;\n  }\n  get numPages() {\n    return this._pdfInfo.numPages;\n  }\n  get fingerprints() {\n    return this._pdfInfo.fingerprints;\n  }\n  get isPureXfa() {\n    return shadow(this, \"isPureXfa\", !!this._transport._htmlForXfa);\n  }\n  get allXfaHtml() {\n    return this._transport._htmlForXfa;\n  }\n  getPage(pageNumber) {\n    return this._transport.getPage(pageNumber);\n  }\n  getPageIndex(ref) {\n    return this._transport.getPageIndex(ref);\n  }\n  getDestinations() {\n    return this._transport.getDestinations();\n  }\n  getDestination(id) {\n    return this._transport.getDestination(id);\n  }\n  getPageLabels() {\n    return this._transport.getPageLabels();\n  }\n  getPageLayout() {\n    return this._transport.getPageLayout();\n  }\n  getPageMode() {\n    return this._transport.getPageMode();\n  }\n  getViewerPreferences() {\n    return this._transport.getViewerPreferences();\n  }\n  getOpenAction() {\n    return this._transport.getOpenAction();\n  }\n  getAttachments() {\n    return this._transport.getAttachments();\n  }\n  getJSActions() {\n    return this._transport.getDocJSActions();\n  }\n  getOutline() {\n    return this._transport.getOutline();\n  }\n  getOptionalContentConfig({\n    intent = \"display\"\n  } = {}) {\n    const {\n      renderingIntent\n    } = this._transport.getRenderingIntent(intent);\n    return this._transport.getOptionalContentConfig(renderingIntent);\n  }\n  getPermissions() {\n    return this._transport.getPermissions();\n  }\n  getMetadata() {\n    return this._transport.getMetadata();\n  }\n  getMarkInfo() {\n    return this._transport.getMarkInfo();\n  }\n  getData() {\n    return this._transport.getData();\n  }\n  saveDocument() {\n    return this._transport.saveDocument();\n  }\n  getDownloadInfo() {\n    return this._transport.downloadInfoCapability.promise;\n  }\n  cleanup(keepLoadedFonts = false) {\n    return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa);\n  }\n  destroy() {\n    return this.loadingTask.destroy();\n  }\n  cachedPageNumber(ref) {\n    return this._transport.cachedPageNumber(ref);\n  }\n  get loadingParams() {\n    return this._transport.loadingParams;\n  }\n  get loadingTask() {\n    return this._transport.loadingTask;\n  }\n  getFieldObjects() {\n    return this._transport.getFieldObjects();\n  }\n  hasJSActions() {\n    return this._transport.hasJSActions();\n  }\n  getCalculationOrderIds() {\n    return this._transport.getCalculationOrderIds();\n  }\n}\nclass PDFPageProxy {\n  #delayedCleanupTimeout = null;\n  #pendingCleanup = false;\n  constructor(pageIndex, pageInfo, transport, pdfBug = false) {\n    this._pageIndex = pageIndex;\n    this._pageInfo = pageInfo;\n    this._transport = transport;\n    this._stats = pdfBug ? new StatTimer() : null;\n    this._pdfBug = pdfBug;\n    this.commonObjs = transport.commonObjs;\n    this.objs = new PDFObjects();\n    this._maybeCleanupAfterRender = false;\n    this._intentStates = new Map();\n    this.destroyed = false;\n  }\n  get pageNumber() {\n    return this._pageIndex + 1;\n  }\n  get rotate() {\n    return this._pageInfo.rotate;\n  }\n  get ref() {\n    return this._pageInfo.ref;\n  }\n  get userUnit() {\n    return this._pageInfo.userUnit;\n  }\n  get view() {\n    return this._pageInfo.view;\n  }\n  getViewport({\n    scale,\n    rotation = this.rotate,\n    offsetX = 0,\n    offsetY = 0,\n    dontFlip = false\n  } = {}) {\n    return new PageViewport({\n      viewBox: this.view,\n      scale,\n      rotation,\n      offsetX,\n      offsetY,\n      dontFlip\n    });\n  }\n  getAnnotations({\n    intent = \"display\"\n  } = {}) {\n    const {\n      renderingIntent\n    } = this._transport.getRenderingIntent(intent);\n    return this._transport.getAnnotations(this._pageIndex, renderingIntent);\n  }\n  getJSActions() {\n    return this._transport.getPageJSActions(this._pageIndex);\n  }\n  get filterFactory() {\n    return this._transport.filterFactory;\n  }\n  get isPureXfa() {\n    return shadow(this, \"isPureXfa\", !!this._transport._htmlForXfa);\n  }\n  async getXfa() {\n    return this._transport._htmlForXfa?.children[this._pageIndex] || null;\n  }\n  render({\n    canvasContext,\n    viewport,\n    intent = \"display\",\n    annotationMode = AnnotationMode.ENABLE,\n    transform = null,\n    background = null,\n    optionalContentConfigPromise = null,\n    annotationCanvasMap = null,\n    pageColors = null,\n    printAnnotationStorage = null\n  }) {\n    this._stats?.time(\"Overall\");\n    const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage);\n    const {\n      renderingIntent,\n      cacheKey\n    } = intentArgs;\n    this.#pendingCleanup = false;\n    this.#abortDelayedCleanup();\n    optionalContentConfigPromise ||= this._transport.getOptionalContentConfig(renderingIntent);\n    let intentState = this._intentStates.get(cacheKey);\n    if (!intentState) {\n      intentState = Object.create(null);\n      this._intentStates.set(cacheKey, intentState);\n    }\n    if (intentState.streamReaderCancelTimeout) {\n      clearTimeout(intentState.streamReaderCancelTimeout);\n      intentState.streamReaderCancelTimeout = null;\n    }\n    const intentPrint = !!(renderingIntent & RenderingIntentFlag.PRINT);\n    if (!intentState.displayReadyCapability) {\n      intentState.displayReadyCapability = Promise.withResolvers();\n      intentState.operatorList = {\n        fnArray: [],\n        argsArray: [],\n        lastChunk: false,\n        separateAnnots: null\n      };\n      this._stats?.time(\"Page Request\");\n      this._pumpOperatorList(intentArgs);\n    }\n    const complete = error => {\n      intentState.renderTasks.delete(internalRenderTask);\n      if (this._maybeCleanupAfterRender || intentPrint) {\n        this.#pendingCleanup = true;\n      }\n      this.#tryCleanup(!intentPrint);\n      if (error) {\n        internalRenderTask.capability.reject(error);\n        this._abortOperatorList({\n          intentState,\n          reason: error instanceof Error ? error : new Error(error)\n        });\n      } else {\n        internalRenderTask.capability.resolve();\n      }\n      if (this._stats) {\n        this._stats.timeEnd(\"Rendering\");\n        this._stats.timeEnd(\"Overall\");\n        if (globalThis.Stats?.enabled) {\n          globalThis.Stats.add(this.pageNumber, this._stats);\n        }\n      }\n    };\n    const internalRenderTask = new InternalRenderTask({\n      callback: complete,\n      params: {\n        canvasContext,\n        viewport,\n        transform,\n        background\n      },\n      objs: this.objs,\n      commonObjs: this.commonObjs,\n      annotationCanvasMap,\n      operatorList: intentState.operatorList,\n      pageIndex: this._pageIndex,\n      canvasFactory: this._transport.canvasFactory,\n      filterFactory: this._transport.filterFactory,\n      useRequestAnimationFrame: !intentPrint,\n      pdfBug: this._pdfBug,\n      pageColors\n    });\n    (intentState.renderTasks ||= new Set()).add(internalRenderTask);\n    const renderTask = internalRenderTask.task;\n    Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => {\n      if (this.destroyed) {\n        complete();\n        return;\n      }\n      this._stats?.time(\"Rendering\");\n      if (!(optionalContentConfig.renderingIntent & renderingIntent)) {\n        throw new Error(\"Must use the same `intent`-argument when calling the `PDFPageProxy.render` \" + \"and `PDFDocumentProxy.getOptionalContentConfig` methods.\");\n      }\n      internalRenderTask.initializeGraphics({\n        transparency,\n        optionalContentConfig\n      });\n      internalRenderTask.operatorListChanged();\n    }).catch(complete);\n    return renderTask;\n  }\n  getOperatorList({\n    intent = \"display\",\n    annotationMode = AnnotationMode.ENABLE,\n    printAnnotationStorage = null\n  } = {}) {\n    function operatorListChanged() {\n      if (intentState.operatorList.lastChunk) {\n        intentState.opListReadCapability.resolve(intentState.operatorList);\n        intentState.renderTasks.delete(opListTask);\n      }\n    }\n    const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, true);\n    let intentState = this._intentStates.get(intentArgs.cacheKey);\n    if (!intentState) {\n      intentState = Object.create(null);\n      this._intentStates.set(intentArgs.cacheKey, intentState);\n    }\n    let opListTask;\n    if (!intentState.opListReadCapability) {\n      opListTask = Object.create(null);\n      opListTask.operatorListChanged = operatorListChanged;\n      intentState.opListReadCapability = Promise.withResolvers();\n      (intentState.renderTasks ||= new Set()).add(opListTask);\n      intentState.operatorList = {\n        fnArray: [],\n        argsArray: [],\n        lastChunk: false,\n        separateAnnots: null\n      };\n      this._stats?.time(\"Page Request\");\n      this._pumpOperatorList(intentArgs);\n    }\n    return intentState.opListReadCapability.promise;\n  }\n  streamTextContent({\n    includeMarkedContent = false,\n    disableNormalization = false\n  } = {}) {\n    const TEXT_CONTENT_CHUNK_SIZE = 100;\n    return this._transport.messageHandler.sendWithStream(\"GetTextContent\", {\n      pageIndex: this._pageIndex,\n      includeMarkedContent: includeMarkedContent === true,\n      disableNormalization: disableNormalization === true\n    }, {\n      highWaterMark: TEXT_CONTENT_CHUNK_SIZE,\n      size(textContent) {\n        return textContent.items.length;\n      }\n    });\n  }\n  getTextContent(params = {}) {\n    if (this._transport._htmlForXfa) {\n      return this.getXfa().then(xfa => XfaText.textContent(xfa));\n    }\n    const readableStream = this.streamTextContent(params);\n    return new Promise(function (resolve, reject) {\n      function pump() {\n        reader.read().then(function ({\n          value,\n          done\n        }) {\n          if (done) {\n            resolve(textContent);\n            return;\n          }\n          textContent.lang ??= value.lang;\n          Object.assign(textContent.styles, value.styles);\n          textContent.items.push(...value.items);\n          pump();\n        }, reject);\n      }\n      const reader = readableStream.getReader();\n      const textContent = {\n        items: [],\n        styles: Object.create(null),\n        lang: null\n      };\n      pump();\n    });\n  }\n  getStructTree() {\n    return this._transport.getStructTree(this._pageIndex);\n  }\n  _destroy() {\n    this.destroyed = true;\n    const waitOn = [];\n    for (const intentState of this._intentStates.values()) {\n      this._abortOperatorList({\n        intentState,\n        reason: new Error(\"Page was destroyed.\"),\n        force: true\n      });\n      if (intentState.opListReadCapability) {\n        continue;\n      }\n      for (const internalRenderTask of intentState.renderTasks) {\n        waitOn.push(internalRenderTask.completed);\n        internalRenderTask.cancel();\n      }\n    }\n    this.objs.clear();\n    this.#pendingCleanup = false;\n    this.#abortDelayedCleanup();\n    return Promise.all(waitOn);\n  }\n  cleanup(resetStats = false) {\n    this.#pendingCleanup = true;\n    const success = this.#tryCleanup(false);\n    if (resetStats && success) {\n      this._stats &&= new StatTimer();\n    }\n    return success;\n  }\n  #tryCleanup(delayed = false) {\n    this.#abortDelayedCleanup();\n    if (!this.#pendingCleanup || this.destroyed) {\n      return false;\n    }\n    if (delayed) {\n      this.#delayedCleanupTimeout = setTimeout(() => {\n        this.#delayedCleanupTimeout = null;\n        this.#tryCleanup(false);\n      }, DELAYED_CLEANUP_TIMEOUT);\n      return false;\n    }\n    for (const {\n      renderTasks,\n      operatorList\n    } of this._intentStates.values()) {\n      if (renderTasks.size > 0 || !operatorList.lastChunk) {\n        return false;\n      }\n    }\n    this._intentStates.clear();\n    this.objs.clear();\n    this.#pendingCleanup = false;\n    return true;\n  }\n  #abortDelayedCleanup() {\n    if (this.#delayedCleanupTimeout) {\n      clearTimeout(this.#delayedCleanupTimeout);\n      this.#delayedCleanupTimeout = null;\n    }\n  }\n  _startRenderPage(transparency, cacheKey) {\n    const intentState = this._intentStates.get(cacheKey);\n    if (!intentState) {\n      return;\n    }\n    this._stats?.timeEnd(\"Page Request\");\n    intentState.displayReadyCapability?.resolve(transparency);\n  }\n  _renderPageChunk(operatorListChunk, intentState) {\n    for (let i = 0, ii = operatorListChunk.length; i < ii; i++) {\n      intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);\n      intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);\n    }\n    intentState.operatorList.lastChunk = operatorListChunk.lastChunk;\n    intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots;\n    for (const internalRenderTask of intentState.renderTasks) {\n      internalRenderTask.operatorListChanged();\n    }\n    if (operatorListChunk.lastChunk) {\n      this.#tryCleanup(true);\n    }\n  }\n  _pumpOperatorList({\n    renderingIntent,\n    cacheKey,\n    annotationStorageSerializable\n  }) {\n    const {\n      map,\n      transfer\n    } = annotationStorageSerializable;\n    const readableStream = this._transport.messageHandler.sendWithStream(\"GetOperatorList\", {\n      pageIndex: this._pageIndex,\n      intent: renderingIntent,\n      cacheKey,\n      annotationStorage: map\n    }, transfer);\n    const reader = readableStream.getReader();\n    const intentState = this._intentStates.get(cacheKey);\n    intentState.streamReader = reader;\n    const pump = () => {\n      reader.read().then(({\n        value,\n        done\n      }) => {\n        if (done) {\n          intentState.streamReader = null;\n          return;\n        }\n        if (this._transport.destroyed) {\n          return;\n        }\n        this._renderPageChunk(value, intentState);\n        pump();\n      }, reason => {\n        intentState.streamReader = null;\n        if (this._transport.destroyed) {\n          return;\n        }\n        if (intentState.operatorList) {\n          intentState.operatorList.lastChunk = true;\n          for (const internalRenderTask of intentState.renderTasks) {\n            internalRenderTask.operatorListChanged();\n          }\n          this.#tryCleanup(true);\n        }\n        if (intentState.displayReadyCapability) {\n          intentState.displayReadyCapability.reject(reason);\n        } else if (intentState.opListReadCapability) {\n          intentState.opListReadCapability.reject(reason);\n        } else {\n          throw reason;\n        }\n      });\n    };\n    pump();\n  }\n  _abortOperatorList({\n    intentState,\n    reason,\n    force = false\n  }) {\n    if (!intentState.streamReader) {\n      return;\n    }\n    if (intentState.streamReaderCancelTimeout) {\n      clearTimeout(intentState.streamReaderCancelTimeout);\n      intentState.streamReaderCancelTimeout = null;\n    }\n    if (!force) {\n      if (intentState.renderTasks.size > 0) {\n        return;\n      }\n      if (reason instanceof RenderingCancelledException) {\n        let delay = RENDERING_CANCELLED_TIMEOUT;\n        if (reason.extraDelay > 0 && reason.extraDelay < 1000) {\n          delay += reason.extraDelay;\n        }\n        intentState.streamReaderCancelTimeout = setTimeout(() => {\n          intentState.streamReaderCancelTimeout = null;\n          this._abortOperatorList({\n            intentState,\n            reason,\n            force: true\n          });\n        }, delay);\n        return;\n      }\n    }\n    intentState.streamReader.cancel(new AbortException(reason.message)).catch(() => {});\n    intentState.streamReader = null;\n    if (this._transport.destroyed) {\n      return;\n    }\n    for (const [curCacheKey, curIntentState] of this._intentStates) {\n      if (curIntentState === intentState) {\n        this._intentStates.delete(curCacheKey);\n        break;\n      }\n    }\n    this.cleanup();\n  }\n  get stats() {\n    return this._stats;\n  }\n}\nclass LoopbackPort {\n  #listeners = new Set();\n  #deferred = Promise.resolve();\n  postMessage(obj, transfer) {\n    const event = {\n      data: structuredClone(obj, transfer ? {\n        transfer\n      } : null)\n    };\n    this.#deferred.then(() => {\n      for (const listener of this.#listeners) {\n        listener.call(this, event);\n      }\n    });\n  }\n  addEventListener(name, listener) {\n    this.#listeners.add(listener);\n  }\n  removeEventListener(name, listener) {\n    this.#listeners.delete(listener);\n  }\n  terminate() {\n    this.#listeners.clear();\n  }\n}\nconst PDFWorkerUtil = {\n  isWorkerDisabled: false,\n  fakeWorkerId: 0\n};\n{\n  if (isNodeJS) {\n    PDFWorkerUtil.isWorkerDisabled = true;\n    GlobalWorkerOptions.workerSrc ||= \"./pdf.worker.mjs\";\n  }\n  PDFWorkerUtil.isSameOrigin = function (baseUrl, otherUrl) {\n    let base;\n    try {\n      base = new URL(baseUrl);\n      if (!base.origin || base.origin === \"null\") {\n        return false;\n      }\n    } catch {\n      return false;\n    }\n    const other = new URL(otherUrl, base);\n    return base.origin === other.origin;\n  };\n  PDFWorkerUtil.createCDNWrapper = function (url) {\n    const wrapper = `await import(\"${url}\");`;\n    return URL.createObjectURL(new Blob([wrapper], {\n      type: \"text/javascript\"\n    }));\n  };\n}\nclass PDFWorker {\n  static #workerPorts;\n  constructor({\n    name = null,\n    port = null,\n    verbosity = getVerbosityLevel()\n  } = {}) {\n    this.name = name;\n    this.destroyed = false;\n    this.verbosity = verbosity;\n    this._readyCapability = Promise.withResolvers();\n    this._port = null;\n    this._webWorker = null;\n    this._messageHandler = null;\n    if (port) {\n      if (PDFWorker.#workerPorts?.has(port)) {\n        throw new Error(\"Cannot use more than one PDFWorker per port.\");\n      }\n      (PDFWorker.#workerPorts ||= new WeakMap()).set(port, this);\n      this._initializeFromPort(port);\n      return;\n    }\n    this._initialize();\n  }\n  get promise() {\n    if (isNodeJS) {\n      return Promise.all([NodePackages.promise, this._readyCapability.promise]);\n    }\n    return this._readyCapability.promise;\n  }\n  get port() {\n    return this._port;\n  }\n  get messageHandler() {\n    return this._messageHandler;\n  }\n  _initializeFromPort(port) {\n    this._port = port;\n    this._messageHandler = new MessageHandler(\"main\", \"worker\", port);\n    this._messageHandler.on(\"ready\", function () {});\n    this._readyCapability.resolve();\n    this._messageHandler.send(\"configure\", {\n      verbosity: this.verbosity\n    });\n  }\n  _initialize() {\n    if (!PDFWorkerUtil.isWorkerDisabled && !PDFWorker.#mainThreadWorkerMessageHandler) {\n      let {\n        workerSrc\n      } = PDFWorker;\n      try {\n        if (!PDFWorkerUtil.isSameOrigin(window.location.href, workerSrc)) {\n          workerSrc = PDFWorkerUtil.createCDNWrapper(new URL(workerSrc, window.location).href);\n        }\n        const worker = new Worker(workerSrc, {\n          type: \"module\"\n        });\n        const messageHandler = new MessageHandler(\"main\", \"worker\", worker);\n        const terminateEarly = () => {\n          worker.removeEventListener(\"error\", onWorkerError);\n          messageHandler.destroy();\n          worker.terminate();\n          if (this.destroyed) {\n            this._readyCapability.reject(new Error(\"Worker was destroyed\"));\n          } else {\n            this._setupFakeWorker();\n          }\n        };\n        const onWorkerError = () => {\n          if (!this._webWorker) {\n            terminateEarly();\n          }\n        };\n        worker.addEventListener(\"error\", onWorkerError);\n        messageHandler.on(\"test\", data => {\n          worker.removeEventListener(\"error\", onWorkerError);\n          if (this.destroyed) {\n            terminateEarly();\n            return;\n          }\n          if (data) {\n            this._messageHandler = messageHandler;\n            this._port = worker;\n            this._webWorker = worker;\n            this._readyCapability.resolve();\n            messageHandler.send(\"configure\", {\n              verbosity: this.verbosity\n            });\n          } else {\n            this._setupFakeWorker();\n            messageHandler.destroy();\n            worker.terminate();\n          }\n        });\n        messageHandler.on(\"ready\", data => {\n          worker.removeEventListener(\"error\", onWorkerError);\n          if (this.destroyed) {\n            terminateEarly();\n            return;\n          }\n          try {\n            sendTest();\n          } catch {\n            this._setupFakeWorker();\n          }\n        });\n        const sendTest = () => {\n          const testObj = new Uint8Array();\n          messageHandler.send(\"test\", testObj, [testObj.buffer]);\n        };\n        sendTest();\n        return;\n      } catch {\n        info(\"The worker has been disabled.\");\n      }\n    }\n    this._setupFakeWorker();\n  }\n  _setupFakeWorker() {\n    if (!PDFWorkerUtil.isWorkerDisabled) {\n      warn(\"Setting up fake worker.\");\n      PDFWorkerUtil.isWorkerDisabled = true;\n    }\n    PDFWorker._setupFakeWorkerGlobal.then(WorkerMessageHandler => {\n      if (this.destroyed) {\n        this._readyCapability.reject(new Error(\"Worker was destroyed\"));\n        return;\n      }\n      const port = new LoopbackPort();\n      this._port = port;\n      const id = `fake${PDFWorkerUtil.fakeWorkerId++}`;\n      const workerHandler = new MessageHandler(id + \"_worker\", id, port);\n      WorkerMessageHandler.setup(workerHandler, port);\n      const messageHandler = new MessageHandler(id, id + \"_worker\", port);\n      this._messageHandler = messageHandler;\n      this._readyCapability.resolve();\n      messageHandler.send(\"configure\", {\n        verbosity: this.verbosity\n      });\n    }).catch(reason => {\n      this._readyCapability.reject(new Error(`Setting up fake worker failed: \"${reason.message}\".`));\n    });\n  }\n  destroy() {\n    this.destroyed = true;\n    if (this._webWorker) {\n      this._webWorker.terminate();\n      this._webWorker = null;\n    }\n    PDFWorker.#workerPorts?.delete(this._port);\n    this._port = null;\n    if (this._messageHandler) {\n      this._messageHandler.destroy();\n      this._messageHandler = null;\n    }\n  }\n  static fromPort(params) {\n    if (!params?.port) {\n      throw new Error(\"PDFWorker.fromPort - invalid method signature.\");\n    }\n    const cachedPort = this.#workerPorts?.get(params.port);\n    if (cachedPort) {\n      if (cachedPort._pendingDestroy) {\n        throw new Error(\"PDFWorker.fromPort - the worker is being destroyed.\\n\" + \"Please remember to await `PDFDocumentLoadingTask.destroy()`-calls.\");\n      }\n      return cachedPort;\n    }\n    return new PDFWorker(params);\n  }\n  static get workerSrc() {\n    if (GlobalWorkerOptions.workerSrc) {\n      return GlobalWorkerOptions.workerSrc;\n    }\n    throw new Error('No \"GlobalWorkerOptions.workerSrc\" specified.');\n  }\n  static get #mainThreadWorkerMessageHandler() {\n    try {\n      return globalThis.pdfjsWorker?.WorkerMessageHandler || null;\n    } catch {\n      return null;\n    }\n  }\n  static get _setupFakeWorkerGlobal() {\n    const loader = async () => {\n      if (this.#mainThreadWorkerMessageHandler) {\n        return this.#mainThreadWorkerMessageHandler;\n      }\n      const worker = await import( /*webpackIgnore: true*/this.workerSrc);\n      return worker.WorkerMessageHandler;\n    };\n    return shadow(this, \"_setupFakeWorkerGlobal\", loader());\n  }\n}\nclass WorkerTransport {\n  #methodPromises = new Map();\n  #pageCache = new Map();\n  #pagePromises = new Map();\n  #pageRefCache = new Map();\n  #passwordCapability = null;\n  constructor(messageHandler, loadingTask, networkStream, params, factory) {\n    this.messageHandler = messageHandler;\n    this.loadingTask = loadingTask;\n    this.commonObjs = new PDFObjects();\n    this.fontLoader = new FontLoader({\n      ownerDocument: params.ownerDocument,\n      styleElement: params.styleElement\n    });\n    this.loadingParams = params.loadingParams;\n    this._params = params;\n    this.canvasFactory = factory.canvasFactory;\n    this.filterFactory = factory.filterFactory;\n    this.cMapReaderFactory = factory.cMapReaderFactory;\n    this.standardFontDataFactory = factory.standardFontDataFactory;\n    this.destroyed = false;\n    this.destroyCapability = null;\n    this._networkStream = networkStream;\n    this._fullReader = null;\n    this._lastProgress = null;\n    this.downloadInfoCapability = Promise.withResolvers();\n    this.setupMessageHandler();\n  }\n  #cacheSimpleMethod(name, data = null) {\n    const cachedPromise = this.#methodPromises.get(name);\n    if (cachedPromise) {\n      return cachedPromise;\n    }\n    const promise = this.messageHandler.sendWithPromise(name, data);\n    this.#methodPromises.set(name, promise);\n    return promise;\n  }\n  get annotationStorage() {\n    return shadow(this, \"annotationStorage\", new AnnotationStorage());\n  }\n  getRenderingIntent(intent, annotationMode = AnnotationMode.ENABLE, printAnnotationStorage = null, isOpList = false) {\n    let renderingIntent = RenderingIntentFlag.DISPLAY;\n    let annotationStorageSerializable = SerializableEmpty;\n    switch (intent) {\n      case \"any\":\n        renderingIntent = RenderingIntentFlag.ANY;\n        break;\n      case \"display\":\n        break;\n      case \"print\":\n        renderingIntent = RenderingIntentFlag.PRINT;\n        break;\n      default:\n        warn(`getRenderingIntent - invalid intent: ${intent}`);\n    }\n    switch (annotationMode) {\n      case AnnotationMode.DISABLE:\n        renderingIntent += RenderingIntentFlag.ANNOTATIONS_DISABLE;\n        break;\n      case AnnotationMode.ENABLE:\n        break;\n      case AnnotationMode.ENABLE_FORMS:\n        renderingIntent += RenderingIntentFlag.ANNOTATIONS_FORMS;\n        break;\n      case AnnotationMode.ENABLE_STORAGE:\n        renderingIntent += RenderingIntentFlag.ANNOTATIONS_STORAGE;\n        const annotationStorage = renderingIntent & RenderingIntentFlag.PRINT && printAnnotationStorage instanceof PrintAnnotationStorage ? printAnnotationStorage : this.annotationStorage;\n        annotationStorageSerializable = annotationStorage.serializable;\n        break;\n      default:\n        warn(`getRenderingIntent - invalid annotationMode: ${annotationMode}`);\n    }\n    if (isOpList) {\n      renderingIntent += RenderingIntentFlag.OPLIST;\n    }\n    return {\n      renderingIntent,\n      cacheKey: `${renderingIntent}_${annotationStorageSerializable.hash}`,\n      annotationStorageSerializable\n    };\n  }\n  destroy() {\n    if (this.destroyCapability) {\n      return this.destroyCapability.promise;\n    }\n    this.destroyed = true;\n    this.destroyCapability = Promise.withResolvers();\n    this.#passwordCapability?.reject(new Error(\"Worker was destroyed during onPassword callback\"));\n    const waitOn = [];\n    for (const page of this.#pageCache.values()) {\n      waitOn.push(page._destroy());\n    }\n    this.#pageCache.clear();\n    this.#pagePromises.clear();\n    this.#pageRefCache.clear();\n    if (this.hasOwnProperty(\"annotationStorage\")) {\n      this.annotationStorage.resetModified();\n    }\n    const terminated = this.messageHandler.sendWithPromise(\"Terminate\", null);\n    waitOn.push(terminated);\n    Promise.all(waitOn).then(() => {\n      this.commonObjs.clear();\n      this.fontLoader.clear();\n      this.#methodPromises.clear();\n      this.filterFactory.destroy();\n      TextLayer.cleanup();\n      this._networkStream?.cancelAllRequests(new AbortException(\"Worker was terminated.\"));\n      if (this.messageHandler) {\n        this.messageHandler.destroy();\n        this.messageHandler = null;\n      }\n      this.destroyCapability.resolve();\n    }, this.destroyCapability.reject);\n    return this.destroyCapability.promise;\n  }\n  setupMessageHandler() {\n    const {\n      messageHandler,\n      loadingTask\n    } = this;\n    messageHandler.on(\"GetReader\", (data, sink) => {\n      assert(this._networkStream, \"GetReader - no `IPDFStream` instance available.\");\n      this._fullReader = this._networkStream.getFullReader();\n      this._fullReader.onProgress = evt => {\n        this._lastProgress = {\n          loaded: evt.loaded,\n          total: evt.total\n        };\n      };\n      sink.onPull = () => {\n        this._fullReader.read().then(function ({\n          value,\n          done\n        }) {\n          if (done) {\n            sink.close();\n            return;\n          }\n          assert(value instanceof ArrayBuffer, \"GetReader - expected an ArrayBuffer.\");\n          sink.enqueue(new Uint8Array(value), 1, [value]);\n        }).catch(reason => {\n          sink.error(reason);\n        });\n      };\n      sink.onCancel = reason => {\n        this._fullReader.cancel(reason);\n        sink.ready.catch(readyReason => {\n          if (this.destroyed) {\n            return;\n          }\n          throw readyReason;\n        });\n      };\n    });\n    messageHandler.on(\"ReaderHeadersReady\", data => {\n      const headersCapability = Promise.withResolvers();\n      const fullReader = this._fullReader;\n      fullReader.headersReady.then(() => {\n        if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {\n          if (this._lastProgress) {\n            loadingTask.onProgress?.(this._lastProgress);\n          }\n          fullReader.onProgress = evt => {\n            loadingTask.onProgress?.({\n              loaded: evt.loaded,\n              total: evt.total\n            });\n          };\n        }\n        headersCapability.resolve({\n          isStreamingSupported: fullReader.isStreamingSupported,\n          isRangeSupported: fullReader.isRangeSupported,\n          contentLength: fullReader.contentLength\n        });\n      }, headersCapability.reject);\n      return headersCapability.promise;\n    });\n    messageHandler.on(\"GetRangeReader\", (data, sink) => {\n      assert(this._networkStream, \"GetRangeReader - no `IPDFStream` instance available.\");\n      const rangeReader = this._networkStream.getRangeReader(data.begin, data.end);\n      if (!rangeReader) {\n        sink.close();\n        return;\n      }\n      sink.onPull = () => {\n        rangeReader.read().then(function ({\n          value,\n          done\n        }) {\n          if (done) {\n            sink.close();\n            return;\n          }\n          assert(value instanceof ArrayBuffer, \"GetRangeReader - expected an ArrayBuffer.\");\n          sink.enqueue(new Uint8Array(value), 1, [value]);\n        }).catch(reason => {\n          sink.error(reason);\n        });\n      };\n      sink.onCancel = reason => {\n        rangeReader.cancel(reason);\n        sink.ready.catch(readyReason => {\n          if (this.destroyed) {\n            return;\n          }\n          throw readyReason;\n        });\n      };\n    });\n    messageHandler.on(\"GetDoc\", ({\n      pdfInfo\n    }) => {\n      this._numPages = pdfInfo.numPages;\n      this._htmlForXfa = pdfInfo.htmlForXfa;\n      delete pdfInfo.htmlForXfa;\n      loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this));\n    });\n    messageHandler.on(\"DocException\", function (ex) {\n      let reason;\n      switch (ex.name) {\n        case \"PasswordException\":\n          reason = new PasswordException(ex.message, ex.code);\n          break;\n        case \"InvalidPDFException\":\n          reason = new InvalidPDFException(ex.message);\n          break;\n        case \"MissingPDFException\":\n          reason = new MissingPDFException(ex.message);\n          break;\n        case \"UnexpectedResponseException\":\n          reason = new UnexpectedResponseException(ex.message, ex.status);\n          break;\n        case \"UnknownErrorException\":\n          reason = new UnknownErrorException(ex.message, ex.details);\n          break;\n        default:\n          unreachable(\"DocException - expected a valid Error.\");\n      }\n      loadingTask._capability.reject(reason);\n    });\n    messageHandler.on(\"PasswordRequest\", exception => {\n      this.#passwordCapability = Promise.withResolvers();\n      if (loadingTask.onPassword) {\n        const updatePassword = password => {\n          if (password instanceof Error) {\n            this.#passwordCapability.reject(password);\n          } else {\n            this.#passwordCapability.resolve({\n              password\n            });\n          }\n        };\n        try {\n          loadingTask.onPassword(updatePassword, exception.code);\n        } catch (ex) {\n          this.#passwordCapability.reject(ex);\n        }\n      } else {\n        this.#passwordCapability.reject(new PasswordException(exception.message, exception.code));\n      }\n      return this.#passwordCapability.promise;\n    });\n    messageHandler.on(\"DataLoaded\", data => {\n      loadingTask.onProgress?.({\n        loaded: data.length,\n        total: data.length\n      });\n      this.downloadInfoCapability.resolve(data);\n    });\n    messageHandler.on(\"StartRenderPage\", data => {\n      if (this.destroyed) {\n        return;\n      }\n      const page = this.#pageCache.get(data.pageIndex);\n      page._startRenderPage(data.transparency, data.cacheKey);\n    });\n    messageHandler.on(\"commonobj\", ([id, type, exportedData]) => {\n      if (this.destroyed) {\n        return null;\n      }\n      if (this.commonObjs.has(id)) {\n        return null;\n      }\n      switch (type) {\n        case \"Font\":\n          const {\n            disableFontFace,\n            fontExtraProperties,\n            pdfBug\n          } = this._params;\n          if (\"error\" in exportedData) {\n            const exportedError = exportedData.error;\n            warn(`Error during font loading: ${exportedError}`);\n            this.commonObjs.resolve(id, exportedError);\n            break;\n          }\n          const inspectFont = pdfBug && globalThis.FontInspector?.enabled ? (font, url) => globalThis.FontInspector.fontAdded(font, url) : null;\n          const font = new FontFaceObject(exportedData, {\n            disableFontFace,\n            inspectFont\n          });\n          this.fontLoader.bind(font).catch(() => messageHandler.sendWithPromise(\"FontFallback\", {\n            id\n          })).finally(() => {\n            if (!fontExtraProperties && font.data) {\n              font.data = null;\n            }\n            this.commonObjs.resolve(id, font);\n          });\n          break;\n        case \"CopyLocalImage\":\n          const {\n            imageRef\n          } = exportedData;\n          assert(imageRef, \"The imageRef must be defined.\");\n          for (const pageProxy of this.#pageCache.values()) {\n            for (const [, data] of pageProxy.objs) {\n              if (data?.ref !== imageRef) {\n                continue;\n              }\n              if (!data.dataLen) {\n                return null;\n              }\n              this.commonObjs.resolve(id, structuredClone(data));\n              return data.dataLen;\n            }\n          }\n          break;\n        case \"FontPath\":\n        case \"Image\":\n        case \"Pattern\":\n          this.commonObjs.resolve(id, exportedData);\n          break;\n        default:\n          throw new Error(`Got unknown common object type ${type}`);\n      }\n      return null;\n    });\n    messageHandler.on(\"obj\", ([id, pageIndex, type, imageData]) => {\n      if (this.destroyed) {\n        return;\n      }\n      const pageProxy = this.#pageCache.get(pageIndex);\n      if (pageProxy.objs.has(id)) {\n        return;\n      }\n      if (pageProxy._intentStates.size === 0) {\n        imageData?.bitmap?.close();\n        return;\n      }\n      switch (type) {\n        case \"Image\":\n          pageProxy.objs.resolve(id, imageData);\n          if (imageData?.dataLen > MAX_IMAGE_SIZE_TO_CACHE) {\n            pageProxy._maybeCleanupAfterRender = true;\n          }\n          break;\n        case \"Pattern\":\n          pageProxy.objs.resolve(id, imageData);\n          break;\n        default:\n          throw new Error(`Got unknown object type ${type}`);\n      }\n    });\n    messageHandler.on(\"DocProgress\", data => {\n      if (this.destroyed) {\n        return;\n      }\n      loadingTask.onProgress?.({\n        loaded: data.loaded,\n        total: data.total\n      });\n    });\n    messageHandler.on(\"FetchBuiltInCMap\", data => {\n      if (this.destroyed) {\n        return Promise.reject(new Error(\"Worker was destroyed.\"));\n      }\n      if (!this.cMapReaderFactory) {\n        return Promise.reject(new Error(\"CMapReaderFactory not initialized, see the `useWorkerFetch` parameter.\"));\n      }\n      return this.cMapReaderFactory.fetch(data);\n    });\n    messageHandler.on(\"FetchStandardFontData\", data => {\n      if (this.destroyed) {\n        return Promise.reject(new Error(\"Worker was destroyed.\"));\n      }\n      if (!this.standardFontDataFactory) {\n        return Promise.reject(new Error(\"StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.\"));\n      }\n      return this.standardFontDataFactory.fetch(data);\n    });\n  }\n  getData() {\n    return this.messageHandler.sendWithPromise(\"GetData\", null);\n  }\n  saveDocument() {\n    if (this.annotationStorage.size <= 0) {\n      warn(\"saveDocument called while `annotationStorage` is empty, \" + \"please use the getData-method instead.\");\n    }\n    const {\n      map,\n      transfer\n    } = this.annotationStorage.serializable;\n    return this.messageHandler.sendWithPromise(\"SaveDocument\", {\n      isPureXfa: !!this._htmlForXfa,\n      numPages: this._numPages,\n      annotationStorage: map,\n      filename: this._fullReader?.filename ?? null\n    }, transfer).finally(() => {\n      this.annotationStorage.resetModified();\n    });\n  }\n  getPage(pageNumber) {\n    if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) {\n      return Promise.reject(new Error(\"Invalid page request.\"));\n    }\n    const pageIndex = pageNumber - 1,\n      cachedPromise = this.#pagePromises.get(pageIndex);\n    if (cachedPromise) {\n      return cachedPromise;\n    }\n    const promise = this.messageHandler.sendWithPromise(\"GetPage\", {\n      pageIndex\n    }).then(pageInfo => {\n      if (this.destroyed) {\n        throw new Error(\"Transport destroyed\");\n      }\n      if (pageInfo.refStr) {\n        this.#pageRefCache.set(pageInfo.refStr, pageNumber);\n      }\n      const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug);\n      this.#pageCache.set(pageIndex, page);\n      return page;\n    });\n    this.#pagePromises.set(pageIndex, promise);\n    return promise;\n  }\n  getPageIndex(ref) {\n    if (!isRefProxy(ref)) {\n      return Promise.reject(new Error(\"Invalid pageIndex request.\"));\n    }\n    return this.messageHandler.sendWithPromise(\"GetPageIndex\", {\n      num: ref.num,\n      gen: ref.gen\n    });\n  }\n  getAnnotations(pageIndex, intent) {\n    return this.messageHandler.sendWithPromise(\"GetAnnotations\", {\n      pageIndex,\n      intent\n    });\n  }\n  getFieldObjects() {\n    return this.#cacheSimpleMethod(\"GetFieldObjects\");\n  }\n  hasJSActions() {\n    return this.#cacheSimpleMethod(\"HasJSActions\");\n  }\n  getCalculationOrderIds() {\n    return this.messageHandler.sendWithPromise(\"GetCalculationOrderIds\", null);\n  }\n  getDestinations() {\n    return this.messageHandler.sendWithPromise(\"GetDestinations\", null);\n  }\n  getDestination(id) {\n    if (typeof id !== \"string\") {\n      return Promise.reject(new Error(\"Invalid destination request.\"));\n    }\n    return this.messageHandler.sendWithPromise(\"GetDestination\", {\n      id\n    });\n  }\n  getPageLabels() {\n    return this.messageHandler.sendWithPromise(\"GetPageLabels\", null);\n  }\n  getPageLayout() {\n    return this.messageHandler.sendWithPromise(\"GetPageLayout\", null);\n  }\n  getPageMode() {\n    return this.messageHandler.sendWithPromise(\"GetPageMode\", null);\n  }\n  getViewerPreferences() {\n    return this.messageHandler.sendWithPromise(\"GetViewerPreferences\", null);\n  }\n  getOpenAction() {\n    return this.messageHandler.sendWithPromise(\"GetOpenAction\", null);\n  }\n  getAttachments() {\n    return this.messageHandler.sendWithPromise(\"GetAttachments\", null);\n  }\n  getDocJSActions() {\n    return this.#cacheSimpleMethod(\"GetDocJSActions\");\n  }\n  getPageJSActions(pageIndex) {\n    return this.messageHandler.sendWithPromise(\"GetPageJSActions\", {\n      pageIndex\n    });\n  }\n  getStructTree(pageIndex) {\n    return this.messageHandler.sendWithPromise(\"GetStructTree\", {\n      pageIndex\n    });\n  }\n  getOutline() {\n    return this.messageHandler.sendWithPromise(\"GetOutline\", null);\n  }\n  getOptionalContentConfig(renderingIntent) {\n    return this.#cacheSimpleMethod(\"GetOptionalContentConfig\").then(data => new OptionalContentConfig(data, renderingIntent));\n  }\n  getPermissions() {\n    return this.messageHandler.sendWithPromise(\"GetPermissions\", null);\n  }\n  getMetadata() {\n    const name = \"GetMetadata\",\n      cachedPromise = this.#methodPromises.get(name);\n    if (cachedPromise) {\n      return cachedPromise;\n    }\n    const promise = this.messageHandler.sendWithPromise(name, null).then(results => ({\n      info: results[0],\n      metadata: results[1] ? new Metadata(results[1]) : null,\n      contentDispositionFilename: this._fullReader?.filename ?? null,\n      contentLength: this._fullReader?.contentLength ?? null\n    }));\n    this.#methodPromises.set(name, promise);\n    return promise;\n  }\n  getMarkInfo() {\n    return this.messageHandler.sendWithPromise(\"GetMarkInfo\", null);\n  }\n  async startCleanup(keepLoadedFonts = false) {\n    if (this.destroyed) {\n      return;\n    }\n    await this.messageHandler.sendWithPromise(\"Cleanup\", null);\n    for (const page of this.#pageCache.values()) {\n      const cleanupSuccessful = page.cleanup();\n      if (!cleanupSuccessful) {\n        throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`);\n      }\n    }\n    this.commonObjs.clear();\n    if (!keepLoadedFonts) {\n      this.fontLoader.clear();\n    }\n    this.#methodPromises.clear();\n    this.filterFactory.destroy(true);\n    TextLayer.cleanup();\n  }\n  cachedPageNumber(ref) {\n    if (!isRefProxy(ref)) {\n      return null;\n    }\n    const refStr = ref.gen === 0 ? `${ref.num}R` : `${ref.num}R${ref.gen}`;\n    return this.#pageRefCache.get(refStr) ?? null;\n  }\n}\nconst INITIAL_DATA = Symbol(\"INITIAL_DATA\");\nclass PDFObjects {\n  #objs = Object.create(null);\n  #ensureObj(objId) {\n    return this.#objs[objId] ||= {\n      ...Promise.withResolvers(),\n      data: INITIAL_DATA\n    };\n  }\n  get(objId, callback = null) {\n    if (callback) {\n      const obj = this.#ensureObj(objId);\n      obj.promise.then(() => callback(obj.data));\n      return null;\n    }\n    const obj = this.#objs[objId];\n    if (!obj || obj.data === INITIAL_DATA) {\n      throw new Error(`Requesting object that isn't resolved yet ${objId}.`);\n    }\n    return obj.data;\n  }\n  has(objId) {\n    const obj = this.#objs[objId];\n    return !!obj && obj.data !== INITIAL_DATA;\n  }\n  resolve(objId, data = null) {\n    const obj = this.#ensureObj(objId);\n    obj.data = data;\n    obj.resolve();\n  }\n  clear() {\n    for (const objId in this.#objs) {\n      const {\n        data\n      } = this.#objs[objId];\n      data?.bitmap?.close();\n    }\n    this.#objs = Object.create(null);\n  }\n  *[Symbol.iterator]() {\n    for (const objId in this.#objs) {\n      const {\n        data\n      } = this.#objs[objId];\n      if (data === INITIAL_DATA) {\n        continue;\n      }\n      yield [objId, data];\n    }\n  }\n}\nclass RenderTask {\n  #internalRenderTask = null;\n  constructor(internalRenderTask) {\n    this.#internalRenderTask = internalRenderTask;\n    this.onContinue = null;\n  }\n  get promise() {\n    return this.#internalRenderTask.capability.promise;\n  }\n  cancel(extraDelay = 0) {\n    this.#internalRenderTask.cancel(null, extraDelay);\n  }\n  get separateAnnots() {\n    const {\n      separateAnnots\n    } = this.#internalRenderTask.operatorList;\n    if (!separateAnnots) {\n      return false;\n    }\n    const {\n      annotationCanvasMap\n    } = this.#internalRenderTask;\n    return separateAnnots.form || separateAnnots.canvas && annotationCanvasMap?.size > 0;\n  }\n}\nclass InternalRenderTask {\n  static #canvasInUse = new WeakSet();\n  constructor({\n    callback,\n    params,\n    objs,\n    commonObjs,\n    annotationCanvasMap,\n    operatorList,\n    pageIndex,\n    canvasFactory,\n    filterFactory,\n    useRequestAnimationFrame = false,\n    pdfBug = false,\n    pageColors = null\n  }) {\n    this.callback = callback;\n    this.params = params;\n    this.objs = objs;\n    this.commonObjs = commonObjs;\n    this.annotationCanvasMap = annotationCanvasMap;\n    this.operatorListIdx = null;\n    this.operatorList = operatorList;\n    this._pageIndex = pageIndex;\n    this.canvasFactory = canvasFactory;\n    this.filterFactory = filterFactory;\n    this._pdfBug = pdfBug;\n    this.pageColors = pageColors;\n    this.running = false;\n    this.graphicsReadyCallback = null;\n    this.graphicsReady = false;\n    this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== \"undefined\";\n    this.cancelled = false;\n    this.capability = Promise.withResolvers();\n    this.task = new RenderTask(this);\n    this._cancelBound = this.cancel.bind(this);\n    this._continueBound = this._continue.bind(this);\n    this._scheduleNextBound = this._scheduleNext.bind(this);\n    this._nextBound = this._next.bind(this);\n    this._canvas = params.canvasContext.canvas;\n  }\n  get completed() {\n    return this.capability.promise.catch(function () {});\n  }\n  initializeGraphics({\n    transparency = false,\n    optionalContentConfig\n  }) {\n    if (this.cancelled) {\n      return;\n    }\n    if (this._canvas) {\n      if (InternalRenderTask.#canvasInUse.has(this._canvas)) {\n        throw new Error(\"Cannot use the same canvas during multiple render() operations. \" + \"Use different canvas or ensure previous operations were \" + \"cancelled or completed.\");\n      }\n      InternalRenderTask.#canvasInUse.add(this._canvas);\n    }\n    if (this._pdfBug && globalThis.StepperManager?.enabled) {\n      this.stepper = globalThis.StepperManager.create(this._pageIndex);\n      this.stepper.init(this.operatorList);\n      this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();\n    }\n    const {\n      canvasContext,\n      viewport,\n      transform,\n      background\n    } = this.params;\n    this.gfx = new CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {\n      optionalContentConfig\n    }, this.annotationCanvasMap, this.pageColors);\n    this.gfx.beginDrawing({\n      transform,\n      viewport,\n      transparency,\n      background\n    });\n    this.operatorListIdx = 0;\n    this.graphicsReady = true;\n    this.graphicsReadyCallback?.();\n  }\n  cancel(error = null, extraDelay = 0) {\n    this.running = false;\n    this.cancelled = true;\n    this.gfx?.endDrawing();\n    InternalRenderTask.#canvasInUse.delete(this._canvas);\n    this.callback(error || new RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, extraDelay));\n  }\n  operatorListChanged() {\n    if (!this.graphicsReady) {\n      this.graphicsReadyCallback ||= this._continueBound;\n      return;\n    }\n    this.stepper?.updateOperatorList(this.operatorList);\n    if (this.running) {\n      return;\n    }\n    this._continue();\n  }\n  _continue() {\n    this.running = true;\n    if (this.cancelled) {\n      return;\n    }\n    if (this.task.onContinue) {\n      this.task.onContinue(this._scheduleNextBound);\n    } else {\n      this._scheduleNext();\n    }\n  }\n  _scheduleNext() {\n    if (this._useRequestAnimationFrame) {\n      window.requestAnimationFrame(() => {\n        this._nextBound().catch(this._cancelBound);\n      });\n    } else {\n      Promise.resolve().then(this._nextBound).catch(this._cancelBound);\n    }\n  }\n  async _next() {\n    if (this.cancelled) {\n      return;\n    }\n    this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper);\n    if (this.operatorListIdx === this.operatorList.argsArray.length) {\n      this.running = false;\n      if (this.operatorList.lastChunk) {\n        this.gfx.endDrawing();\n        InternalRenderTask.#canvasInUse.delete(this._canvas);\n        this.callback();\n      }\n    }\n  }\n}\nconst version = \"4.3.136\";\nconst build = \"0cec64437\";\n\n;// CONCATENATED MODULE: ./src/shared/scripting_utils.js\nfunction makeColorComp(n) {\n  return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, \"0\");\n}\nfunction scaleAndClamp(x) {\n  return Math.max(0, Math.min(255, 255 * x));\n}\nclass ColorConverters {\n  static CMYK_G([c, y, m, k]) {\n    return [\"G\", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)];\n  }\n  static G_CMYK([g]) {\n    return [\"CMYK\", 0, 0, 0, 1 - g];\n  }\n  static G_RGB([g]) {\n    return [\"RGB\", g, g, g];\n  }\n  static G_rgb([g]) {\n    g = scaleAndClamp(g);\n    return [g, g, g];\n  }\n  static G_HTML([g]) {\n    const G = makeColorComp(g);\n    return `#${G}${G}${G}`;\n  }\n  static RGB_G([r, g, b]) {\n    return [\"G\", 0.3 * r + 0.59 * g + 0.11 * b];\n  }\n  static RGB_rgb(color) {\n    return color.map(scaleAndClamp);\n  }\n  static RGB_HTML(color) {\n    return `#${color.map(makeColorComp).join(\"\")}`;\n  }\n  static T_HTML() {\n    return \"#00000000\";\n  }\n  static T_rgb() {\n    return [null];\n  }\n  static CMYK_RGB([c, y, m, k]) {\n    return [\"RGB\", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)];\n  }\n  static CMYK_rgb([c, y, m, k]) {\n    return [scaleAndClamp(1 - Math.min(1, c + k)), scaleAndClamp(1 - Math.min(1, m + k)), scaleAndClamp(1 - Math.min(1, y + k))];\n  }\n  static CMYK_HTML(components) {\n    const rgb = this.CMYK_RGB(components).slice(1);\n    return this.RGB_HTML(rgb);\n  }\n  static RGB_CMYK([r, g, b]) {\n    const c = 1 - r;\n    const m = 1 - g;\n    const y = 1 - b;\n    const k = Math.min(c, m, y);\n    return [\"CMYK\", c, m, y, k];\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/xfa_layer.js\n\nclass XfaLayer {\n  static setupStorage(html, id, element, storage, intent) {\n    const storedData = storage.getValue(id, {\n      value: null\n    });\n    switch (element.name) {\n      case \"textarea\":\n        if (storedData.value !== null) {\n          html.textContent = storedData.value;\n        }\n        if (intent === \"print\") {\n          break;\n        }\n        html.addEventListener(\"input\", event => {\n          storage.setValue(id, {\n            value: event.target.value\n          });\n        });\n        break;\n      case \"input\":\n        if (element.attributes.type === \"radio\" || element.attributes.type === \"checkbox\") {\n          if (storedData.value === element.attributes.xfaOn) {\n            html.setAttribute(\"checked\", true);\n          } else if (storedData.value === element.attributes.xfaOff) {\n            html.removeAttribute(\"checked\");\n          }\n          if (intent === \"print\") {\n            break;\n          }\n          html.addEventListener(\"change\", event => {\n            storage.setValue(id, {\n              value: event.target.checked ? event.target.getAttribute(\"xfaOn\") : event.target.getAttribute(\"xfaOff\")\n            });\n          });\n        } else {\n          if (storedData.value !== null) {\n            html.setAttribute(\"value\", storedData.value);\n          }\n          if (intent === \"print\") {\n            break;\n          }\n          html.addEventListener(\"input\", event => {\n            storage.setValue(id, {\n              value: event.target.value\n            });\n          });\n        }\n        break;\n      case \"select\":\n        if (storedData.value !== null) {\n          html.setAttribute(\"value\", storedData.value);\n          for (const option of element.children) {\n            if (option.attributes.value === storedData.value) {\n              option.attributes.selected = true;\n            } else if (option.attributes.hasOwnProperty(\"selected\")) {\n              delete option.attributes.selected;\n            }\n          }\n        }\n        html.addEventListener(\"input\", event => {\n          const options = event.target.options;\n          const value = options.selectedIndex === -1 ? \"\" : options[options.selectedIndex].value;\n          storage.setValue(id, {\n            value\n          });\n        });\n        break;\n    }\n  }\n  static setAttributes({\n    html,\n    element,\n    storage = null,\n    intent,\n    linkService\n  }) {\n    const {\n      attributes\n    } = element;\n    const isHTMLAnchorElement = html instanceof HTMLAnchorElement;\n    if (attributes.type === \"radio\") {\n      attributes.name = `${attributes.name}-${intent}`;\n    }\n    for (const [key, value] of Object.entries(attributes)) {\n      if (value === null || value === undefined) {\n        continue;\n      }\n      switch (key) {\n        case \"class\":\n          if (value.length) {\n            html.setAttribute(key, value.join(\" \"));\n          }\n          break;\n        case \"dataId\":\n          break;\n        case \"id\":\n          html.setAttribute(\"data-element-id\", value);\n          break;\n        case \"style\":\n          Object.assign(html.style, value);\n          break;\n        case \"textContent\":\n          html.textContent = value;\n          break;\n        default:\n          if (!isHTMLAnchorElement || key !== \"href\" && key !== \"newWindow\") {\n            html.setAttribute(key, value);\n          }\n      }\n    }\n    if (isHTMLAnchorElement) {\n      linkService.addLinkAttributes(html, attributes.href, attributes.newWindow);\n    }\n    if (storage && attributes.dataId) {\n      this.setupStorage(html, attributes.dataId, element, storage);\n    }\n  }\n  static render(parameters) {\n    const storage = parameters.annotationStorage;\n    const linkService = parameters.linkService;\n    const root = parameters.xfaHtml;\n    const intent = parameters.intent || \"display\";\n    const rootHtml = document.createElement(root.name);\n    if (root.attributes) {\n      this.setAttributes({\n        html: rootHtml,\n        element: root,\n        intent,\n        linkService\n      });\n    }\n    const isNotForRichText = intent !== \"richText\";\n    const rootDiv = parameters.div;\n    rootDiv.append(rootHtml);\n    if (parameters.viewport) {\n      const transform = `matrix(${parameters.viewport.transform.join(\",\")})`;\n      rootDiv.style.transform = transform;\n    }\n    if (isNotForRichText) {\n      rootDiv.setAttribute(\"class\", \"xfaLayer xfaFont\");\n    }\n    const textDivs = [];\n    if (root.children.length === 0) {\n      if (root.value) {\n        const node = document.createTextNode(root.value);\n        rootHtml.append(node);\n        if (isNotForRichText && XfaText.shouldBuildText(root.name)) {\n          textDivs.push(node);\n        }\n      }\n      return {\n        textDivs\n      };\n    }\n    const stack = [[root, -1, rootHtml]];\n    while (stack.length > 0) {\n      const [parent, i, html] = stack.at(-1);\n      if (i + 1 === parent.children.length) {\n        stack.pop();\n        continue;\n      }\n      const child = parent.children[++stack.at(-1)[1]];\n      if (child === null) {\n        continue;\n      }\n      const {\n        name\n      } = child;\n      if (name === \"#text\") {\n        const node = document.createTextNode(child.value);\n        textDivs.push(node);\n        html.append(node);\n        continue;\n      }\n      const childHtml = child?.attributes?.xmlns ? document.createElementNS(child.attributes.xmlns, name) : document.createElement(name);\n      html.append(childHtml);\n      if (child.attributes) {\n        this.setAttributes({\n          html: childHtml,\n          element: child,\n          storage,\n          intent,\n          linkService\n        });\n      }\n      if (child.children?.length > 0) {\n        stack.push([child, -1, childHtml]);\n      } else if (child.value) {\n        const node = document.createTextNode(child.value);\n        if (isNotForRichText && XfaText.shouldBuildText(name)) {\n          textDivs.push(node);\n        }\n        childHtml.append(node);\n      }\n    }\n    for (const el of rootDiv.querySelectorAll(\".xfaNonInteractive input, .xfaNonInteractive textarea\")) {\n      el.setAttribute(\"readOnly\", true);\n    }\n    return {\n      textDivs\n    };\n  }\n  static update(parameters) {\n    const transform = `matrix(${parameters.viewport.transform.join(\",\")})`;\n    parameters.div.style.transform = transform;\n    parameters.div.hidden = false;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/annotation_layer.js\n\n\n\n\n\nconst DEFAULT_TAB_INDEX = 1000;\nconst annotation_layer_DEFAULT_FONT_SIZE = 9;\nconst GetElementsByNameSet = new WeakSet();\nfunction getRectDims(rect) {\n  return {\n    width: rect[2] - rect[0],\n    height: rect[3] - rect[1]\n  };\n}\nclass AnnotationElementFactory {\n  static create(parameters) {\n    const subtype = parameters.data.annotationType;\n    switch (subtype) {\n      case AnnotationType.LINK:\n        return new LinkAnnotationElement(parameters);\n      case AnnotationType.TEXT:\n        return new TextAnnotationElement(parameters);\n      case AnnotationType.WIDGET:\n        const fieldType = parameters.data.fieldType;\n        switch (fieldType) {\n          case \"Tx\":\n            return new TextWidgetAnnotationElement(parameters);\n          case \"Btn\":\n            if (parameters.data.radioButton) {\n              return new RadioButtonWidgetAnnotationElement(parameters);\n            } else if (parameters.data.checkBox) {\n              return new CheckboxWidgetAnnotationElement(parameters);\n            }\n            return new PushButtonWidgetAnnotationElement(parameters);\n          case \"Ch\":\n            return new ChoiceWidgetAnnotationElement(parameters);\n          case \"Sig\":\n            return new SignatureWidgetAnnotationElement(parameters);\n        }\n        return new WidgetAnnotationElement(parameters);\n      case AnnotationType.POPUP:\n        return new PopupAnnotationElement(parameters);\n      case AnnotationType.FREETEXT:\n        return new FreeTextAnnotationElement(parameters);\n      case AnnotationType.LINE:\n        return new LineAnnotationElement(parameters);\n      case AnnotationType.SQUARE:\n        return new SquareAnnotationElement(parameters);\n      case AnnotationType.CIRCLE:\n        return new CircleAnnotationElement(parameters);\n      case AnnotationType.POLYLINE:\n        return new PolylineAnnotationElement(parameters);\n      case AnnotationType.CARET:\n        return new CaretAnnotationElement(parameters);\n      case AnnotationType.INK:\n        return new InkAnnotationElement(parameters);\n      case AnnotationType.POLYGON:\n        return new PolygonAnnotationElement(parameters);\n      case AnnotationType.HIGHLIGHT:\n        return new HighlightAnnotationElement(parameters);\n      case AnnotationType.UNDERLINE:\n        return new UnderlineAnnotationElement(parameters);\n      case AnnotationType.SQUIGGLY:\n        return new SquigglyAnnotationElement(parameters);\n      case AnnotationType.STRIKEOUT:\n        return new StrikeOutAnnotationElement(parameters);\n      case AnnotationType.STAMP:\n        return new StampAnnotationElement(parameters);\n      case AnnotationType.FILEATTACHMENT:\n        return new FileAttachmentAnnotationElement(parameters);\n      default:\n        return new AnnotationElement(parameters);\n    }\n  }\n}\nclass AnnotationElement {\n  #updates = null;\n  #hasBorder = false;\n  #popupElement = null;\n  constructor(parameters, {\n    isRenderable = false,\n    ignoreBorder = false,\n    createQuadrilaterals = false\n  } = {}) {\n    this.isRenderable = isRenderable;\n    this.data = parameters.data;\n    this.layer = parameters.layer;\n    this.linkService = parameters.linkService;\n    this.downloadManager = parameters.downloadManager;\n    this.imageResourcesPath = parameters.imageResourcesPath;\n    this.renderForms = parameters.renderForms;\n    this.svgFactory = parameters.svgFactory;\n    this.annotationStorage = parameters.annotationStorage;\n    this.enableScripting = parameters.enableScripting;\n    this.hasJSActions = parameters.hasJSActions;\n    this._fieldObjects = parameters.fieldObjects;\n    this.parent = parameters.parent;\n    if (isRenderable) {\n      this.container = this._createContainer(ignoreBorder);\n    }\n    if (createQuadrilaterals) {\n      this._createQuadrilaterals();\n    }\n  }\n  static _hasPopupData({\n    titleObj,\n    contentsObj,\n    richText\n  }) {\n    return !!(titleObj?.str || contentsObj?.str || richText?.str);\n  }\n  get hasPopupData() {\n    return AnnotationElement._hasPopupData(this.data);\n  }\n  updateEdited(params) {\n    if (!this.container) {\n      return;\n    }\n    this.#updates ||= {\n      rect: this.data.rect.slice(0)\n    };\n    const {\n      rect\n    } = params;\n    if (rect) {\n      this.#setRectEdited(rect);\n    }\n    this.#popupElement?.popup.updateEdited(params);\n  }\n  resetEdited() {\n    if (!this.#updates) {\n      return;\n    }\n    this.#setRectEdited(this.#updates.rect);\n    this.#popupElement?.popup.resetEdited();\n    this.#updates = null;\n  }\n  #setRectEdited(rect) {\n    const {\n      container: {\n        style\n      },\n      data: {\n        rect: currentRect,\n        rotation\n      },\n      parent: {\n        viewport: {\n          rawDims: {\n            pageWidth,\n            pageHeight,\n            pageX,\n            pageY\n          }\n        }\n      }\n    } = this;\n    currentRect?.splice(0, 4, ...rect);\n    const {\n      width,\n      height\n    } = getRectDims(rect);\n    style.left = `${100 * (rect[0] - pageX) / pageWidth}%`;\n    style.top = `${100 * (pageHeight - rect[3] + pageY) / pageHeight}%`;\n    if (rotation === 0) {\n      style.width = `${100 * width / pageWidth}%`;\n      style.height = `${100 * height / pageHeight}%`;\n    } else {\n      this.setRotation(rotation);\n    }\n  }\n  _createContainer(ignoreBorder) {\n    const {\n      data,\n      parent: {\n        page,\n        viewport\n      }\n    } = this;\n    const container = document.createElement(\"section\");\n    container.setAttribute(\"data-annotation-id\", data.id);\n    if (!(this instanceof WidgetAnnotationElement)) {\n      container.tabIndex = DEFAULT_TAB_INDEX;\n    }\n    const {\n      style\n    } = container;\n    style.zIndex = this.parent.zIndex++;\n    if (data.popupRef) {\n      container.setAttribute(\"aria-haspopup\", \"dialog\");\n    }\n    if (data.alternativeText) {\n      container.title = data.alternativeText;\n    }\n    if (data.noRotate) {\n      container.classList.add(\"norotate\");\n    }\n    if (!data.rect || this instanceof PopupAnnotationElement) {\n      const {\n        rotation\n      } = data;\n      if (!data.hasOwnCanvas && rotation !== 0) {\n        this.setRotation(rotation, container);\n      }\n      return container;\n    }\n    const {\n      width,\n      height\n    } = getRectDims(data.rect);\n    if (!ignoreBorder && data.borderStyle.width > 0) {\n      style.borderWidth = `${data.borderStyle.width}px`;\n      const horizontalRadius = data.borderStyle.horizontalCornerRadius;\n      const verticalRadius = data.borderStyle.verticalCornerRadius;\n      if (horizontalRadius > 0 || verticalRadius > 0) {\n        const radius = `calc(${horizontalRadius}px * var(--scale-factor)) / calc(${verticalRadius}px * var(--scale-factor))`;\n        style.borderRadius = radius;\n      } else if (this instanceof RadioButtonWidgetAnnotationElement) {\n        const radius = `calc(${width}px * var(--scale-factor)) / calc(${height}px * var(--scale-factor))`;\n        style.borderRadius = radius;\n      }\n      switch (data.borderStyle.style) {\n        case AnnotationBorderStyleType.SOLID:\n          style.borderStyle = \"solid\";\n          break;\n        case AnnotationBorderStyleType.DASHED:\n          style.borderStyle = \"dashed\";\n          break;\n        case AnnotationBorderStyleType.BEVELED:\n          warn(\"Unimplemented border style: beveled\");\n          break;\n        case AnnotationBorderStyleType.INSET:\n          warn(\"Unimplemented border style: inset\");\n          break;\n        case AnnotationBorderStyleType.UNDERLINE:\n          style.borderBottomStyle = \"solid\";\n          break;\n        default:\n          break;\n      }\n      const borderColor = data.borderColor || null;\n      if (borderColor) {\n        this.#hasBorder = true;\n        style.borderColor = Util.makeHexColor(borderColor[0] | 0, borderColor[1] | 0, borderColor[2] | 0);\n      } else {\n        style.borderWidth = 0;\n      }\n    }\n    const rect = Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]);\n    const {\n      pageWidth,\n      pageHeight,\n      pageX,\n      pageY\n    } = viewport.rawDims;\n    style.left = `${100 * (rect[0] - pageX) / pageWidth}%`;\n    style.top = `${100 * (rect[1] - pageY) / pageHeight}%`;\n    const {\n      rotation\n    } = data;\n    if (data.hasOwnCanvas || rotation === 0) {\n      style.width = `${100 * width / pageWidth}%`;\n      style.height = `${100 * height / pageHeight}%`;\n    } else {\n      this.setRotation(rotation, container);\n    }\n    return container;\n  }\n  setRotation(angle, container = this.container) {\n    if (!this.data.rect) {\n      return;\n    }\n    const {\n      pageWidth,\n      pageHeight\n    } = this.parent.viewport.rawDims;\n    const {\n      width,\n      height\n    } = getRectDims(this.data.rect);\n    let elementWidth, elementHeight;\n    if (angle % 180 === 0) {\n      elementWidth = 100 * width / pageWidth;\n      elementHeight = 100 * height / pageHeight;\n    } else {\n      elementWidth = 100 * height / pageWidth;\n      elementHeight = 100 * width / pageHeight;\n    }\n    container.style.width = `${elementWidth}%`;\n    container.style.height = `${elementHeight}%`;\n    container.setAttribute(\"data-main-rotation\", (360 - angle) % 360);\n  }\n  get _commonActions() {\n    const setColor = (jsName, styleName, event) => {\n      const color = event.detail[jsName];\n      const colorType = color[0];\n      const colorArray = color.slice(1);\n      event.target.style[styleName] = ColorConverters[`${colorType}_HTML`](colorArray);\n      this.annotationStorage.setValue(this.data.id, {\n        [styleName]: ColorConverters[`${colorType}_rgb`](colorArray)\n      });\n    };\n    return shadow(this, \"_commonActions\", {\n      display: event => {\n        const {\n          display\n        } = event.detail;\n        const hidden = display % 2 === 1;\n        this.container.style.visibility = hidden ? \"hidden\" : \"visible\";\n        this.annotationStorage.setValue(this.data.id, {\n          noView: hidden,\n          noPrint: display === 1 || display === 2\n        });\n      },\n      print: event => {\n        this.annotationStorage.setValue(this.data.id, {\n          noPrint: !event.detail.print\n        });\n      },\n      hidden: event => {\n        const {\n          hidden\n        } = event.detail;\n        this.container.style.visibility = hidden ? \"hidden\" : \"visible\";\n        this.annotationStorage.setValue(this.data.id, {\n          noPrint: hidden,\n          noView: hidden\n        });\n      },\n      focus: event => {\n        setTimeout(() => event.target.focus({\n          preventScroll: false\n        }), 0);\n      },\n      userName: event => {\n        event.target.title = event.detail.userName;\n      },\n      readonly: event => {\n        event.target.disabled = event.detail.readonly;\n      },\n      required: event => {\n        this._setRequired(event.target, event.detail.required);\n      },\n      bgColor: event => {\n        setColor(\"bgColor\", \"backgroundColor\", event);\n      },\n      fillColor: event => {\n        setColor(\"fillColor\", \"backgroundColor\", event);\n      },\n      fgColor: event => {\n        setColor(\"fgColor\", \"color\", event);\n      },\n      textColor: event => {\n        setColor(\"textColor\", \"color\", event);\n      },\n      borderColor: event => {\n        setColor(\"borderColor\", \"borderColor\", event);\n      },\n      strokeColor: event => {\n        setColor(\"strokeColor\", \"borderColor\", event);\n      },\n      rotation: event => {\n        const angle = event.detail.rotation;\n        this.setRotation(angle);\n        this.annotationStorage.setValue(this.data.id, {\n          rotation: angle\n        });\n      }\n    });\n  }\n  _dispatchEventFromSandbox(actions, jsEvent) {\n    const commonActions = this._commonActions;\n    for (const name of Object.keys(jsEvent.detail)) {\n      const action = actions[name] || commonActions[name];\n      action?.(jsEvent);\n    }\n  }\n  _setDefaultPropertiesFromJS(element) {\n    if (!this.enableScripting) {\n      return;\n    }\n    const storedData = this.annotationStorage.getRawValue(this.data.id);\n    if (!storedData) {\n      return;\n    }\n    const commonActions = this._commonActions;\n    for (const [actionName, detail] of Object.entries(storedData)) {\n      const action = commonActions[actionName];\n      if (action) {\n        const eventProxy = {\n          detail: {\n            [actionName]: detail\n          },\n          target: element\n        };\n        action(eventProxy);\n        delete storedData[actionName];\n      }\n    }\n  }\n  _createQuadrilaterals() {\n    if (!this.container) {\n      return;\n    }\n    const {\n      quadPoints\n    } = this.data;\n    if (!quadPoints) {\n      return;\n    }\n    const [rectBlX, rectBlY, rectTrX, rectTrY] = this.data.rect;\n    if (quadPoints.length === 1) {\n      const [, {\n        x: trX,\n        y: trY\n      }, {\n        x: blX,\n        y: blY\n      }] = quadPoints[0];\n      if (rectTrX === trX && rectTrY === trY && rectBlX === blX && rectBlY === blY) {\n        return;\n      }\n    }\n    const {\n      style\n    } = this.container;\n    let svgBuffer;\n    if (this.#hasBorder) {\n      const {\n        borderColor,\n        borderWidth\n      } = style;\n      style.borderWidth = 0;\n      svgBuffer = [\"url('data:image/svg+xml;utf8,\", `<svg xmlns=\"http://www.w3.org/2000/svg\"`, ` preserveAspectRatio=\"none\" viewBox=\"0 0 1 1\">`, `<g fill=\"transparent\" stroke=\"${borderColor}\" stroke-width=\"${borderWidth}\">`];\n      this.container.classList.add(\"hasBorder\");\n    }\n    const width = rectTrX - rectBlX;\n    const height = rectTrY - rectBlY;\n    const {\n      svgFactory\n    } = this;\n    const svg = svgFactory.createElement(\"svg\");\n    svg.classList.add(\"quadrilateralsContainer\");\n    svg.setAttribute(\"width\", 0);\n    svg.setAttribute(\"height\", 0);\n    const defs = svgFactory.createElement(\"defs\");\n    svg.append(defs);\n    const clipPath = svgFactory.createElement(\"clipPath\");\n    const id = `clippath_${this.data.id}`;\n    clipPath.setAttribute(\"id\", id);\n    clipPath.setAttribute(\"clipPathUnits\", \"objectBoundingBox\");\n    defs.append(clipPath);\n    for (const [, {\n      x: trX,\n      y: trY\n    }, {\n      x: blX,\n      y: blY\n    }] of quadPoints) {\n      const rect = svgFactory.createElement(\"rect\");\n      const x = (blX - rectBlX) / width;\n      const y = (rectTrY - trY) / height;\n      const rectWidth = (trX - blX) / width;\n      const rectHeight = (trY - blY) / height;\n      rect.setAttribute(\"x\", x);\n      rect.setAttribute(\"y\", y);\n      rect.setAttribute(\"width\", rectWidth);\n      rect.setAttribute(\"height\", rectHeight);\n      clipPath.append(rect);\n      svgBuffer?.push(`<rect vector-effect=\"non-scaling-stroke\" x=\"${x}\" y=\"${y}\" width=\"${rectWidth}\" height=\"${rectHeight}\"/>`);\n    }\n    if (this.#hasBorder) {\n      svgBuffer.push(`</g></svg>')`);\n      style.backgroundImage = svgBuffer.join(\"\");\n    }\n    this.container.append(svg);\n    this.container.style.clipPath = `url(#${id})`;\n  }\n  _createPopup() {\n    const {\n      container,\n      data\n    } = this;\n    container.setAttribute(\"aria-haspopup\", \"dialog\");\n    const popup = this.#popupElement = new PopupAnnotationElement({\n      data: {\n        color: data.color,\n        titleObj: data.titleObj,\n        modificationDate: data.modificationDate,\n        contentsObj: data.contentsObj,\n        richText: data.richText,\n        parentRect: data.rect,\n        borderStyle: 0,\n        id: `popup_${data.id}`,\n        rotation: data.rotation\n      },\n      parent: this.parent,\n      elements: [this]\n    });\n    this.parent.div.append(popup.render());\n  }\n  render() {\n    unreachable(\"Abstract method `AnnotationElement.render` called\");\n  }\n  _getElementsByName(name, skipId = null) {\n    const fields = [];\n    if (this._fieldObjects) {\n      const fieldObj = this._fieldObjects[name];\n      if (fieldObj) {\n        for (const {\n          page,\n          id,\n          exportValues\n        } of fieldObj) {\n          if (page === -1) {\n            continue;\n          }\n          if (id === skipId) {\n            continue;\n          }\n          const exportValue = typeof exportValues === \"string\" ? exportValues : null;\n          const domElement = document.querySelector(`[data-element-id=\"${id}\"]`);\n          if (domElement && !GetElementsByNameSet.has(domElement)) {\n            warn(`_getElementsByName - element not allowed: ${id}`);\n            continue;\n          }\n          fields.push({\n            id,\n            exportValue,\n            domElement\n          });\n        }\n      }\n      return fields;\n    }\n    for (const domElement of document.getElementsByName(name)) {\n      const {\n        exportValue\n      } = domElement;\n      const id = domElement.getAttribute(\"data-element-id\");\n      if (id === skipId) {\n        continue;\n      }\n      if (!GetElementsByNameSet.has(domElement)) {\n        continue;\n      }\n      fields.push({\n        id,\n        exportValue,\n        domElement\n      });\n    }\n    return fields;\n  }\n  show() {\n    if (this.container) {\n      this.container.hidden = false;\n    }\n    this.popup?.maybeShow();\n  }\n  hide() {\n    if (this.container) {\n      this.container.hidden = true;\n    }\n    this.popup?.forceHide();\n  }\n  getElementsToTriggerPopup() {\n    return this.container;\n  }\n  addHighlightArea() {\n    const triggers = this.getElementsToTriggerPopup();\n    if (Array.isArray(triggers)) {\n      for (const element of triggers) {\n        element.classList.add(\"highlightArea\");\n      }\n    } else {\n      triggers.classList.add(\"highlightArea\");\n    }\n  }\n  get _isEditable() {\n    return false;\n  }\n  _editOnDoubleClick() {\n    if (!this._isEditable) {\n      return;\n    }\n    const {\n      annotationEditorType: mode,\n      data: {\n        id: editId\n      }\n    } = this;\n    this.container.addEventListener(\"dblclick\", () => {\n      this.linkService.eventBus?.dispatch(\"switchannotationeditormode\", {\n        source: this,\n        mode,\n        editId\n      });\n    });\n  }\n}\nclass LinkAnnotationElement extends AnnotationElement {\n  constructor(parameters, options = null) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: !!options?.ignoreBorder,\n      createQuadrilaterals: true\n    });\n    this.isTooltipOnly = parameters.data.isTooltipOnly;\n  }\n  render() {\n    const {\n      data,\n      linkService\n    } = this;\n    const link = document.createElement(\"a\");\n    link.setAttribute(\"data-element-id\", data.id);\n    let isBound = false;\n    if (data.url) {\n      linkService.addLinkAttributes(link, data.url, data.newWindow);\n      isBound = true;\n    } else if (data.action) {\n      this._bindNamedAction(link, data.action);\n      isBound = true;\n    } else if (data.attachment) {\n      this.#bindAttachment(link, data.attachment, data.attachmentDest);\n      isBound = true;\n    } else if (data.setOCGState) {\n      this.#bindSetOCGState(link, data.setOCGState);\n      isBound = true;\n    } else if (data.dest) {\n      this._bindLink(link, data.dest);\n      isBound = true;\n    } else {\n      if (data.actions && (data.actions.Action || data.actions[\"Mouse Up\"] || data.actions[\"Mouse Down\"]) && this.enableScripting && this.hasJSActions) {\n        this._bindJSAction(link, data);\n        isBound = true;\n      }\n      if (data.resetForm) {\n        this._bindResetFormAction(link, data.resetForm);\n        isBound = true;\n      } else if (this.isTooltipOnly && !isBound) {\n        this._bindLink(link, \"\");\n        isBound = true;\n      }\n    }\n    this.container.classList.add(\"linkAnnotation\");\n    if (isBound) {\n      this.container.append(link);\n    }\n    return this.container;\n  }\n  #setInternalLink() {\n    this.container.setAttribute(\"data-internal-link\", \"\");\n  }\n  _bindLink(link, destination) {\n    link.href = this.linkService.getDestinationHash(destination);\n    link.onclick = () => {\n      if (destination) {\n        this.linkService.goToDestination(destination);\n      }\n      return false;\n    };\n    if (destination || destination === \"\") {\n      this.#setInternalLink();\n    }\n  }\n  _bindNamedAction(link, action) {\n    link.href = this.linkService.getAnchorUrl(\"\");\n    link.onclick = () => {\n      this.linkService.executeNamedAction(action);\n      return false;\n    };\n    this.#setInternalLink();\n  }\n  #bindAttachment(link, attachment, dest = null) {\n    link.href = this.linkService.getAnchorUrl(\"\");\n    if (attachment.description) {\n      link.title = attachment.description;\n    }\n    link.onclick = () => {\n      this.downloadManager?.openOrDownloadData(attachment.content, attachment.filename, dest);\n      return false;\n    };\n    this.#setInternalLink();\n  }\n  #bindSetOCGState(link, action) {\n    link.href = this.linkService.getAnchorUrl(\"\");\n    link.onclick = () => {\n      this.linkService.executeSetOCGState(action);\n      return false;\n    };\n    this.#setInternalLink();\n  }\n  _bindJSAction(link, data) {\n    link.href = this.linkService.getAnchorUrl(\"\");\n    const map = new Map([[\"Action\", \"onclick\"], [\"Mouse Up\", \"onmouseup\"], [\"Mouse Down\", \"onmousedown\"]]);\n    for (const name of Object.keys(data.actions)) {\n      const jsName = map.get(name);\n      if (!jsName) {\n        continue;\n      }\n      link[jsName] = () => {\n        this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n          source: this,\n          detail: {\n            id: data.id,\n            name\n          }\n        });\n        return false;\n      };\n    }\n    if (!link.onclick) {\n      link.onclick = () => false;\n    }\n    this.#setInternalLink();\n  }\n  _bindResetFormAction(link, resetForm) {\n    const otherClickAction = link.onclick;\n    if (!otherClickAction) {\n      link.href = this.linkService.getAnchorUrl(\"\");\n    }\n    this.#setInternalLink();\n    if (!this._fieldObjects) {\n      warn(`_bindResetFormAction - \"resetForm\" action not supported, ` + \"ensure that the `fieldObjects` parameter is provided.\");\n      if (!otherClickAction) {\n        link.onclick = () => false;\n      }\n      return;\n    }\n    link.onclick = () => {\n      otherClickAction?.();\n      const {\n        fields: resetFormFields,\n        refs: resetFormRefs,\n        include\n      } = resetForm;\n      const allFields = [];\n      if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) {\n        const fieldIds = new Set(resetFormRefs);\n        for (const fieldName of resetFormFields) {\n          const fields = this._fieldObjects[fieldName] || [];\n          for (const {\n            id\n          } of fields) {\n            fieldIds.add(id);\n          }\n        }\n        for (const fields of Object.values(this._fieldObjects)) {\n          for (const field of fields) {\n            if (fieldIds.has(field.id) === include) {\n              allFields.push(field);\n            }\n          }\n        }\n      } else {\n        for (const fields of Object.values(this._fieldObjects)) {\n          allFields.push(...fields);\n        }\n      }\n      const storage = this.annotationStorage;\n      const allIds = [];\n      for (const field of allFields) {\n        const {\n          id\n        } = field;\n        allIds.push(id);\n        switch (field.type) {\n          case \"text\":\n            {\n              const value = field.defaultValue || \"\";\n              storage.setValue(id, {\n                value\n              });\n              break;\n            }\n          case \"checkbox\":\n          case \"radiobutton\":\n            {\n              const value = field.defaultValue === field.exportValues;\n              storage.setValue(id, {\n                value\n              });\n              break;\n            }\n          case \"combobox\":\n          case \"listbox\":\n            {\n              const value = field.defaultValue || \"\";\n              storage.setValue(id, {\n                value\n              });\n              break;\n            }\n          default:\n            continue;\n        }\n        const domElement = document.querySelector(`[data-element-id=\"${id}\"]`);\n        if (!domElement) {\n          continue;\n        } else if (!GetElementsByNameSet.has(domElement)) {\n          warn(`_bindResetFormAction - element not allowed: ${id}`);\n          continue;\n        }\n        domElement.dispatchEvent(new Event(\"resetform\"));\n      }\n      if (this.enableScripting) {\n        this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n          source: this,\n          detail: {\n            id: \"app\",\n            ids: allIds,\n            name: \"ResetForm\"\n          }\n        });\n      }\n      return false;\n    };\n  }\n}\nclass TextAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true\n    });\n  }\n  render() {\n    this.container.classList.add(\"textAnnotation\");\n    const image = document.createElement(\"img\");\n    image.src = this.imageResourcesPath + \"annotation-\" + this.data.name.toLowerCase() + \".svg\";\n    image.setAttribute(\"data-l10n-id\", \"pdfjs-text-annotation-type\");\n    image.setAttribute(\"data-l10n-args\", JSON.stringify({\n      type: this.data.name\n    }));\n    if (!this.data.popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n    this.container.append(image);\n    return this.container;\n  }\n}\nclass WidgetAnnotationElement extends AnnotationElement {\n  render() {\n    return this.container;\n  }\n  showElementAndHideCanvas(element) {\n    if (this.data.hasOwnCanvas) {\n      if (element.previousSibling?.nodeName === \"CANVAS\") {\n        element.previousSibling.hidden = true;\n      }\n      element.hidden = false;\n    }\n  }\n  _getKeyModifier(event) {\n    return util_FeatureTest.platform.isMac ? event.metaKey : event.ctrlKey;\n  }\n  _setEventListener(element, elementData, baseName, eventName, valueGetter) {\n    if (baseName.includes(\"mouse\")) {\n      element.addEventListener(baseName, event => {\n        this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n          source: this,\n          detail: {\n            id: this.data.id,\n            name: eventName,\n            value: valueGetter(event),\n            shift: event.shiftKey,\n            modifier: this._getKeyModifier(event)\n          }\n        });\n      });\n    } else {\n      element.addEventListener(baseName, event => {\n        if (baseName === \"blur\") {\n          if (!elementData.focused || !event.relatedTarget) {\n            return;\n          }\n          elementData.focused = false;\n        } else if (baseName === \"focus\") {\n          if (elementData.focused) {\n            return;\n          }\n          elementData.focused = true;\n        }\n        if (!valueGetter) {\n          return;\n        }\n        this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n          source: this,\n          detail: {\n            id: this.data.id,\n            name: eventName,\n            value: valueGetter(event)\n          }\n        });\n      });\n    }\n  }\n  _setEventListeners(element, elementData, names, getter) {\n    for (const [baseName, eventName] of names) {\n      if (eventName === \"Action\" || this.data.actions?.[eventName]) {\n        if (eventName === \"Focus\" || eventName === \"Blur\") {\n          elementData ||= {\n            focused: false\n          };\n        }\n        this._setEventListener(element, elementData, baseName, eventName, getter);\n        if (eventName === \"Focus\" && !this.data.actions?.Blur) {\n          this._setEventListener(element, elementData, \"blur\", \"Blur\", null);\n        } else if (eventName === \"Blur\" && !this.data.actions?.Focus) {\n          this._setEventListener(element, elementData, \"focus\", \"Focus\", null);\n        }\n      }\n    }\n  }\n  _setBackgroundColor(element) {\n    const color = this.data.backgroundColor || null;\n    element.style.backgroundColor = color === null ? \"transparent\" : Util.makeHexColor(color[0], color[1], color[2]);\n  }\n  _setTextStyle(element) {\n    const TEXT_ALIGNMENT = [\"left\", \"center\", \"right\"];\n    const {\n      fontColor\n    } = this.data.defaultAppearanceData;\n    const fontSize = this.data.defaultAppearanceData.fontSize || annotation_layer_DEFAULT_FONT_SIZE;\n    const style = element.style;\n    let computedFontSize;\n    const BORDER_SIZE = 2;\n    const roundToOneDecimal = x => Math.round(10 * x) / 10;\n    if (this.data.multiLine) {\n      const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE);\n      const numberOfLines = Math.round(height / (LINE_FACTOR * fontSize)) || 1;\n      const lineHeight = height / numberOfLines;\n      computedFontSize = Math.min(fontSize, roundToOneDecimal(lineHeight / LINE_FACTOR));\n    } else {\n      const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE);\n      computedFontSize = Math.min(fontSize, roundToOneDecimal(height / LINE_FACTOR));\n    }\n    style.fontSize = `calc(${computedFontSize}px * var(--scale-factor))`;\n    style.color = Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]);\n    if (this.data.textAlignment !== null) {\n      style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];\n    }\n  }\n  _setRequired(element, isRequired) {\n    if (isRequired) {\n      element.setAttribute(\"required\", true);\n    } else {\n      element.removeAttribute(\"required\");\n    }\n    element.setAttribute(\"aria-required\", isRequired);\n  }\n}\nclass TextWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    const isRenderable = parameters.renderForms || parameters.data.hasOwnCanvas || !parameters.data.hasAppearance && !!parameters.data.fieldValue;\n    super(parameters, {\n      isRenderable\n    });\n  }\n  setPropertyOnSiblings(base, key, value, keyInStorage) {\n    const storage = this.annotationStorage;\n    for (const element of this._getElementsByName(base.name, base.id)) {\n      if (element.domElement) {\n        element.domElement[key] = value;\n      }\n      storage.setValue(element.id, {\n        [keyInStorage]: value\n      });\n    }\n  }\n  render() {\n    const storage = this.annotationStorage;\n    const id = this.data.id;\n    this.container.classList.add(\"textWidgetAnnotation\");\n    let element = null;\n    if (this.renderForms) {\n      const storedData = storage.getValue(id, {\n        value: this.data.fieldValue\n      });\n      let textContent = storedData.value || \"\";\n      const maxLen = storage.getValue(id, {\n        charLimit: this.data.maxLen\n      }).charLimit;\n      if (maxLen && textContent.length > maxLen) {\n        textContent = textContent.slice(0, maxLen);\n      }\n      let fieldFormattedValues = storedData.formattedValue || this.data.textContent?.join(\"\\n\") || null;\n      if (fieldFormattedValues && this.data.comb) {\n        fieldFormattedValues = fieldFormattedValues.replaceAll(/\\s+/g, \"\");\n      }\n      const elementData = {\n        userValue: textContent,\n        formattedValue: fieldFormattedValues,\n        lastCommittedValue: null,\n        commitKey: 1,\n        focused: false\n      };\n      if (this.data.multiLine) {\n        element = document.createElement(\"textarea\");\n        element.textContent = fieldFormattedValues ?? textContent;\n        if (this.data.doNotScroll) {\n          element.style.overflowY = \"hidden\";\n        }\n      } else {\n        element = document.createElement(\"input\");\n        element.type = \"text\";\n        element.setAttribute(\"value\", fieldFormattedValues ?? textContent);\n        if (this.data.doNotScroll) {\n          element.style.overflowX = \"hidden\";\n        }\n      }\n      if (this.data.hasOwnCanvas) {\n        element.hidden = true;\n      }\n      GetElementsByNameSet.add(element);\n      element.setAttribute(\"data-element-id\", id);\n      element.disabled = this.data.readOnly;\n      element.name = this.data.fieldName;\n      element.tabIndex = DEFAULT_TAB_INDEX;\n      this._setRequired(element, this.data.required);\n      if (maxLen) {\n        element.maxLength = maxLen;\n      }\n      element.addEventListener(\"input\", event => {\n        storage.setValue(id, {\n          value: event.target.value\n        });\n        this.setPropertyOnSiblings(element, \"value\", event.target.value, \"value\");\n        elementData.formattedValue = null;\n      });\n      element.addEventListener(\"resetform\", event => {\n        const defaultValue = this.data.defaultFieldValue ?? \"\";\n        element.value = elementData.userValue = defaultValue;\n        elementData.formattedValue = null;\n      });\n      let blurListener = event => {\n        const {\n          formattedValue\n        } = elementData;\n        if (formattedValue !== null && formattedValue !== undefined) {\n          event.target.value = formattedValue;\n        }\n        event.target.scrollLeft = 0;\n      };\n      if (this.enableScripting && this.hasJSActions) {\n        element.addEventListener(\"focus\", event => {\n          if (elementData.focused) {\n            return;\n          }\n          const {\n            target\n          } = event;\n          if (elementData.userValue) {\n            target.value = elementData.userValue;\n          }\n          elementData.lastCommittedValue = target.value;\n          elementData.commitKey = 1;\n          if (!this.data.actions?.Focus) {\n            elementData.focused = true;\n          }\n        });\n        element.addEventListener(\"updatefromsandbox\", jsEvent => {\n          this.showElementAndHideCanvas(jsEvent.target);\n          const actions = {\n            value(event) {\n              elementData.userValue = event.detail.value ?? \"\";\n              storage.setValue(id, {\n                value: elementData.userValue.toString()\n              });\n              event.target.value = elementData.userValue;\n            },\n            formattedValue(event) {\n              const {\n                formattedValue\n              } = event.detail;\n              elementData.formattedValue = formattedValue;\n              if (formattedValue !== null && formattedValue !== undefined && event.target !== document.activeElement) {\n                event.target.value = formattedValue;\n              }\n              storage.setValue(id, {\n                formattedValue\n              });\n            },\n            selRange(event) {\n              event.target.setSelectionRange(...event.detail.selRange);\n            },\n            charLimit: event => {\n              const {\n                charLimit\n              } = event.detail;\n              const {\n                target\n              } = event;\n              if (charLimit === 0) {\n                target.removeAttribute(\"maxLength\");\n                return;\n              }\n              target.setAttribute(\"maxLength\", charLimit);\n              let value = elementData.userValue;\n              if (!value || value.length <= charLimit) {\n                return;\n              }\n              value = value.slice(0, charLimit);\n              target.value = elementData.userValue = value;\n              storage.setValue(id, {\n                value\n              });\n              this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n                source: this,\n                detail: {\n                  id,\n                  name: \"Keystroke\",\n                  value,\n                  willCommit: true,\n                  commitKey: 1,\n                  selStart: target.selectionStart,\n                  selEnd: target.selectionEnd\n                }\n              });\n            }\n          };\n          this._dispatchEventFromSandbox(actions, jsEvent);\n        });\n        element.addEventListener(\"keydown\", event => {\n          elementData.commitKey = 1;\n          let commitKey = -1;\n          if (event.key === \"Escape\") {\n            commitKey = 0;\n          } else if (event.key === \"Enter\" && !this.data.multiLine) {\n            commitKey = 2;\n          } else if (event.key === \"Tab\") {\n            elementData.commitKey = 3;\n          }\n          if (commitKey === -1) {\n            return;\n          }\n          const {\n            value\n          } = event.target;\n          if (elementData.lastCommittedValue === value) {\n            return;\n          }\n          elementData.lastCommittedValue = value;\n          elementData.userValue = value;\n          this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n            source: this,\n            detail: {\n              id,\n              name: \"Keystroke\",\n              value,\n              willCommit: true,\n              commitKey,\n              selStart: event.target.selectionStart,\n              selEnd: event.target.selectionEnd\n            }\n          });\n        });\n        const _blurListener = blurListener;\n        blurListener = null;\n        element.addEventListener(\"blur\", event => {\n          if (!elementData.focused || !event.relatedTarget) {\n            return;\n          }\n          if (!this.data.actions?.Blur) {\n            elementData.focused = false;\n          }\n          const {\n            value\n          } = event.target;\n          elementData.userValue = value;\n          if (elementData.lastCommittedValue !== value) {\n            this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n              source: this,\n              detail: {\n                id,\n                name: \"Keystroke\",\n                value,\n                willCommit: true,\n                commitKey: elementData.commitKey,\n                selStart: event.target.selectionStart,\n                selEnd: event.target.selectionEnd\n              }\n            });\n          }\n          _blurListener(event);\n        });\n        if (this.data.actions?.Keystroke) {\n          element.addEventListener(\"beforeinput\", event => {\n            elementData.lastCommittedValue = null;\n            const {\n              data,\n              target\n            } = event;\n            const {\n              value,\n              selectionStart,\n              selectionEnd\n            } = target;\n            let selStart = selectionStart,\n              selEnd = selectionEnd;\n            switch (event.inputType) {\n              case \"deleteWordBackward\":\n                {\n                  const match = value.substring(0, selectionStart).match(/\\w*[^\\w]*$/);\n                  if (match) {\n                    selStart -= match[0].length;\n                  }\n                  break;\n                }\n              case \"deleteWordForward\":\n                {\n                  const match = value.substring(selectionStart).match(/^[^\\w]*\\w*/);\n                  if (match) {\n                    selEnd += match[0].length;\n                  }\n                  break;\n                }\n              case \"deleteContentBackward\":\n                if (selectionStart === selectionEnd) {\n                  selStart -= 1;\n                }\n                break;\n              case \"deleteContentForward\":\n                if (selectionStart === selectionEnd) {\n                  selEnd += 1;\n                }\n                break;\n            }\n            event.preventDefault();\n            this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n              source: this,\n              detail: {\n                id,\n                name: \"Keystroke\",\n                value,\n                change: data || \"\",\n                willCommit: false,\n                selStart,\n                selEnd\n              }\n            });\n          });\n        }\n        this._setEventListeners(element, elementData, [[\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"]], event => event.target.value);\n      }\n      if (blurListener) {\n        element.addEventListener(\"blur\", blurListener);\n      }\n      if (this.data.comb) {\n        const fieldWidth = this.data.rect[2] - this.data.rect[0];\n        const combWidth = fieldWidth / maxLen;\n        element.classList.add(\"comb\");\n        element.style.letterSpacing = `calc(${combWidth}px * var(--scale-factor) - 1ch)`;\n      }\n    } else {\n      element = document.createElement(\"div\");\n      element.textContent = this.data.fieldValue;\n      element.style.verticalAlign = \"middle\";\n      element.style.display = \"table-cell\";\n      if (this.data.hasOwnCanvas) {\n        element.hidden = true;\n      }\n    }\n    this._setTextStyle(element);\n    this._setBackgroundColor(element);\n    this._setDefaultPropertiesFromJS(element);\n    this.container.append(element);\n    return this.container;\n  }\n}\nclass SignatureWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: !!parameters.data.hasOwnCanvas\n    });\n  }\n}\nclass CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: parameters.renderForms\n    });\n  }\n  render() {\n    const storage = this.annotationStorage;\n    const data = this.data;\n    const id = data.id;\n    let value = storage.getValue(id, {\n      value: data.exportValue === data.fieldValue\n    }).value;\n    if (typeof value === \"string\") {\n      value = value !== \"Off\";\n      storage.setValue(id, {\n        value\n      });\n    }\n    this.container.classList.add(\"buttonWidgetAnnotation\", \"checkBox\");\n    const element = document.createElement(\"input\");\n    GetElementsByNameSet.add(element);\n    element.setAttribute(\"data-element-id\", id);\n    element.disabled = data.readOnly;\n    this._setRequired(element, this.data.required);\n    element.type = \"checkbox\";\n    element.name = data.fieldName;\n    if (value) {\n      element.setAttribute(\"checked\", true);\n    }\n    element.setAttribute(\"exportValue\", data.exportValue);\n    element.tabIndex = DEFAULT_TAB_INDEX;\n    element.addEventListener(\"change\", event => {\n      const {\n        name,\n        checked\n      } = event.target;\n      for (const checkbox of this._getElementsByName(name, id)) {\n        const curChecked = checked && checkbox.exportValue === data.exportValue;\n        if (checkbox.domElement) {\n          checkbox.domElement.checked = curChecked;\n        }\n        storage.setValue(checkbox.id, {\n          value: curChecked\n        });\n      }\n      storage.setValue(id, {\n        value: checked\n      });\n    });\n    element.addEventListener(\"resetform\", event => {\n      const defaultValue = data.defaultFieldValue || \"Off\";\n      event.target.checked = defaultValue === data.exportValue;\n    });\n    if (this.enableScripting && this.hasJSActions) {\n      element.addEventListener(\"updatefromsandbox\", jsEvent => {\n        const actions = {\n          value(event) {\n            event.target.checked = event.detail.value !== \"Off\";\n            storage.setValue(id, {\n              value: event.target.checked\n            });\n          }\n        };\n        this._dispatchEventFromSandbox(actions, jsEvent);\n      });\n      this._setEventListeners(element, null, [[\"change\", \"Validate\"], [\"change\", \"Action\"], [\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"]], event => event.target.checked);\n    }\n    this._setBackgroundColor(element);\n    this._setDefaultPropertiesFromJS(element);\n    this.container.append(element);\n    return this.container;\n  }\n}\nclass RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: parameters.renderForms\n    });\n  }\n  render() {\n    this.container.classList.add(\"buttonWidgetAnnotation\", \"radioButton\");\n    const storage = this.annotationStorage;\n    const data = this.data;\n    const id = data.id;\n    let value = storage.getValue(id, {\n      value: data.fieldValue === data.buttonValue\n    }).value;\n    if (typeof value === \"string\") {\n      value = value !== data.buttonValue;\n      storage.setValue(id, {\n        value\n      });\n    }\n    if (value) {\n      for (const radio of this._getElementsByName(data.fieldName, id)) {\n        storage.setValue(radio.id, {\n          value: false\n        });\n      }\n    }\n    const element = document.createElement(\"input\");\n    GetElementsByNameSet.add(element);\n    element.setAttribute(\"data-element-id\", id);\n    element.disabled = data.readOnly;\n    this._setRequired(element, this.data.required);\n    element.type = \"radio\";\n    element.name = data.fieldName;\n    if (value) {\n      element.setAttribute(\"checked\", true);\n    }\n    element.tabIndex = DEFAULT_TAB_INDEX;\n    element.addEventListener(\"change\", event => {\n      const {\n        name,\n        checked\n      } = event.target;\n      for (const radio of this._getElementsByName(name, id)) {\n        storage.setValue(radio.id, {\n          value: false\n        });\n      }\n      storage.setValue(id, {\n        value: checked\n      });\n    });\n    element.addEventListener(\"resetform\", event => {\n      const defaultValue = data.defaultFieldValue;\n      event.target.checked = defaultValue !== null && defaultValue !== undefined && defaultValue === data.buttonValue;\n    });\n    if (this.enableScripting && this.hasJSActions) {\n      const pdfButtonValue = data.buttonValue;\n      element.addEventListener(\"updatefromsandbox\", jsEvent => {\n        const actions = {\n          value: event => {\n            const checked = pdfButtonValue === event.detail.value;\n            for (const radio of this._getElementsByName(event.target.name)) {\n              const curChecked = checked && radio.id === id;\n              if (radio.domElement) {\n                radio.domElement.checked = curChecked;\n              }\n              storage.setValue(radio.id, {\n                value: curChecked\n              });\n            }\n          }\n        };\n        this._dispatchEventFromSandbox(actions, jsEvent);\n      });\n      this._setEventListeners(element, null, [[\"change\", \"Validate\"], [\"change\", \"Action\"], [\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"]], event => event.target.checked);\n    }\n    this._setBackgroundColor(element);\n    this._setDefaultPropertiesFromJS(element);\n    this.container.append(element);\n    return this.container;\n  }\n}\nclass PushButtonWidgetAnnotationElement extends LinkAnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      ignoreBorder: parameters.data.hasAppearance\n    });\n  }\n  render() {\n    const container = super.render();\n    container.classList.add(\"buttonWidgetAnnotation\", \"pushButton\");\n    const linkElement = container.lastChild;\n    if (this.enableScripting && this.hasJSActions && linkElement) {\n      this._setDefaultPropertiesFromJS(linkElement);\n      linkElement.addEventListener(\"updatefromsandbox\", jsEvent => {\n        this._dispatchEventFromSandbox({}, jsEvent);\n      });\n    }\n    return container;\n  }\n}\nclass ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: parameters.renderForms\n    });\n  }\n  render() {\n    this.container.classList.add(\"choiceWidgetAnnotation\");\n    const storage = this.annotationStorage;\n    const id = this.data.id;\n    const storedData = storage.getValue(id, {\n      value: this.data.fieldValue\n    });\n    const selectElement = document.createElement(\"select\");\n    GetElementsByNameSet.add(selectElement);\n    selectElement.setAttribute(\"data-element-id\", id);\n    selectElement.disabled = this.data.readOnly;\n    this._setRequired(selectElement, this.data.required);\n    selectElement.name = this.data.fieldName;\n    selectElement.tabIndex = DEFAULT_TAB_INDEX;\n    let addAnEmptyEntry = this.data.combo && this.data.options.length > 0;\n    if (!this.data.combo) {\n      selectElement.size = this.data.options.length;\n      if (this.data.multiSelect) {\n        selectElement.multiple = true;\n      }\n    }\n    selectElement.addEventListener(\"resetform\", event => {\n      const defaultValue = this.data.defaultFieldValue;\n      for (const option of selectElement.options) {\n        option.selected = option.value === defaultValue;\n      }\n    });\n    for (const option of this.data.options) {\n      const optionElement = document.createElement(\"option\");\n      optionElement.textContent = option.displayValue;\n      optionElement.value = option.exportValue;\n      if (storedData.value.includes(option.exportValue)) {\n        optionElement.setAttribute(\"selected\", true);\n        addAnEmptyEntry = false;\n      }\n      selectElement.append(optionElement);\n    }\n    let removeEmptyEntry = null;\n    if (addAnEmptyEntry) {\n      const noneOptionElement = document.createElement(\"option\");\n      noneOptionElement.value = \" \";\n      noneOptionElement.setAttribute(\"hidden\", true);\n      noneOptionElement.setAttribute(\"selected\", true);\n      selectElement.prepend(noneOptionElement);\n      removeEmptyEntry = () => {\n        noneOptionElement.remove();\n        selectElement.removeEventListener(\"input\", removeEmptyEntry);\n        removeEmptyEntry = null;\n      };\n      selectElement.addEventListener(\"input\", removeEmptyEntry);\n    }\n    const getValue = isExport => {\n      const name = isExport ? \"value\" : \"textContent\";\n      const {\n        options,\n        multiple\n      } = selectElement;\n      if (!multiple) {\n        return options.selectedIndex === -1 ? null : options[options.selectedIndex][name];\n      }\n      return Array.prototype.filter.call(options, option => option.selected).map(option => option[name]);\n    };\n    let selectedValues = getValue(false);\n    const getItems = event => {\n      const options = event.target.options;\n      return Array.prototype.map.call(options, option => ({\n        displayValue: option.textContent,\n        exportValue: option.value\n      }));\n    };\n    if (this.enableScripting && this.hasJSActions) {\n      selectElement.addEventListener(\"updatefromsandbox\", jsEvent => {\n        const actions = {\n          value(event) {\n            removeEmptyEntry?.();\n            const value = event.detail.value;\n            const values = new Set(Array.isArray(value) ? value : [value]);\n            for (const option of selectElement.options) {\n              option.selected = values.has(option.value);\n            }\n            storage.setValue(id, {\n              value: getValue(true)\n            });\n            selectedValues = getValue(false);\n          },\n          multipleSelection(event) {\n            selectElement.multiple = true;\n          },\n          remove(event) {\n            const options = selectElement.options;\n            const index = event.detail.remove;\n            options[index].selected = false;\n            selectElement.remove(index);\n            if (options.length > 0) {\n              const i = Array.prototype.findIndex.call(options, option => option.selected);\n              if (i === -1) {\n                options[0].selected = true;\n              }\n            }\n            storage.setValue(id, {\n              value: getValue(true),\n              items: getItems(event)\n            });\n            selectedValues = getValue(false);\n          },\n          clear(event) {\n            while (selectElement.length !== 0) {\n              selectElement.remove(0);\n            }\n            storage.setValue(id, {\n              value: null,\n              items: []\n            });\n            selectedValues = getValue(false);\n          },\n          insert(event) {\n            const {\n              index,\n              displayValue,\n              exportValue\n            } = event.detail.insert;\n            const selectChild = selectElement.children[index];\n            const optionElement = document.createElement(\"option\");\n            optionElement.textContent = displayValue;\n            optionElement.value = exportValue;\n            if (selectChild) {\n              selectChild.before(optionElement);\n            } else {\n              selectElement.append(optionElement);\n            }\n            storage.setValue(id, {\n              value: getValue(true),\n              items: getItems(event)\n            });\n            selectedValues = getValue(false);\n          },\n          items(event) {\n            const {\n              items\n            } = event.detail;\n            while (selectElement.length !== 0) {\n              selectElement.remove(0);\n            }\n            for (const item of items) {\n              const {\n                displayValue,\n                exportValue\n              } = item;\n              const optionElement = document.createElement(\"option\");\n              optionElement.textContent = displayValue;\n              optionElement.value = exportValue;\n              selectElement.append(optionElement);\n            }\n            if (selectElement.options.length > 0) {\n              selectElement.options[0].selected = true;\n            }\n            storage.setValue(id, {\n              value: getValue(true),\n              items: getItems(event)\n            });\n            selectedValues = getValue(false);\n          },\n          indices(event) {\n            const indices = new Set(event.detail.indices);\n            for (const option of event.target.options) {\n              option.selected = indices.has(option.index);\n            }\n            storage.setValue(id, {\n              value: getValue(true)\n            });\n            selectedValues = getValue(false);\n          },\n          editable(event) {\n            event.target.disabled = !event.detail.editable;\n          }\n        };\n        this._dispatchEventFromSandbox(actions, jsEvent);\n      });\n      selectElement.addEventListener(\"input\", event => {\n        const exportValue = getValue(true);\n        const change = getValue(false);\n        storage.setValue(id, {\n          value: exportValue\n        });\n        event.preventDefault();\n        this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n          source: this,\n          detail: {\n            id,\n            name: \"Keystroke\",\n            value: selectedValues,\n            change,\n            changeEx: exportValue,\n            willCommit: false,\n            commitKey: 1,\n            keyDown: false\n          }\n        });\n      });\n      this._setEventListeners(selectElement, null, [[\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"], [\"input\", \"Action\"], [\"input\", \"Validate\"]], event => event.target.value);\n    } else {\n      selectElement.addEventListener(\"input\", function (event) {\n        storage.setValue(id, {\n          value: getValue(true)\n        });\n      });\n    }\n    if (this.data.combo) {\n      this._setTextStyle(selectElement);\n    } else {}\n    this._setBackgroundColor(selectElement);\n    this._setDefaultPropertiesFromJS(selectElement);\n    this.container.append(selectElement);\n    return this.container;\n  }\n}\nclass PopupAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    const {\n      data,\n      elements\n    } = parameters;\n    super(parameters, {\n      isRenderable: AnnotationElement._hasPopupData(data)\n    });\n    this.elements = elements;\n    this.popup = null;\n  }\n  render() {\n    this.container.classList.add(\"popupAnnotation\");\n    const popup = this.popup = new PopupElement({\n      container: this.container,\n      color: this.data.color,\n      titleObj: this.data.titleObj,\n      modificationDate: this.data.modificationDate,\n      contentsObj: this.data.contentsObj,\n      richText: this.data.richText,\n      rect: this.data.rect,\n      parentRect: this.data.parentRect || null,\n      parent: this.parent,\n      elements: this.elements,\n      open: this.data.open\n    });\n    const elementIds = [];\n    for (const element of this.elements) {\n      element.popup = popup;\n      elementIds.push(element.data.id);\n      element.addHighlightArea();\n    }\n    this.container.setAttribute(\"aria-controls\", elementIds.map(id => `${AnnotationPrefix}${id}`).join(\",\"));\n    return this.container;\n  }\n}\nclass PopupElement {\n  #boundKeyDown = this.#keyDown.bind(this);\n  #boundHide = this.#hide.bind(this);\n  #boundShow = this.#show.bind(this);\n  #boundToggle = this.#toggle.bind(this);\n  #color = null;\n  #container = null;\n  #contentsObj = null;\n  #dateObj = null;\n  #elements = null;\n  #parent = null;\n  #parentRect = null;\n  #pinned = false;\n  #popup = null;\n  #position = null;\n  #rect = null;\n  #richText = null;\n  #titleObj = null;\n  #updates = null;\n  #wasVisible = false;\n  constructor({\n    container,\n    color,\n    elements,\n    titleObj,\n    modificationDate,\n    contentsObj,\n    richText,\n    parent,\n    rect,\n    parentRect,\n    open\n  }) {\n    this.#container = container;\n    this.#titleObj = titleObj;\n    this.#contentsObj = contentsObj;\n    this.#richText = richText;\n    this.#parent = parent;\n    this.#color = color;\n    this.#rect = rect;\n    this.#parentRect = parentRect;\n    this.#elements = elements;\n    this.#dateObj = PDFDateString.toDateObject(modificationDate);\n    this.trigger = elements.flatMap(e => e.getElementsToTriggerPopup());\n    for (const element of this.trigger) {\n      element.addEventListener(\"click\", this.#boundToggle);\n      element.addEventListener(\"mouseenter\", this.#boundShow);\n      element.addEventListener(\"mouseleave\", this.#boundHide);\n      element.classList.add(\"popupTriggerArea\");\n    }\n    for (const element of elements) {\n      element.container?.addEventListener(\"keydown\", this.#boundKeyDown);\n    }\n    this.#container.hidden = true;\n    if (open) {\n      this.#toggle();\n    }\n  }\n  render() {\n    if (this.#popup) {\n      return;\n    }\n    const popup = this.#popup = document.createElement(\"div\");\n    popup.className = \"popup\";\n    if (this.#color) {\n      const baseColor = popup.style.outlineColor = Util.makeHexColor(...this.#color);\n      if (CSS.supports(\"background-color\", \"color-mix(in srgb, red 30%, white)\")) {\n        popup.style.backgroundColor = `color-mix(in srgb, ${baseColor} 30%, white)`;\n      } else {\n        const BACKGROUND_ENLIGHT = 0.7;\n        popup.style.backgroundColor = Util.makeHexColor(...this.#color.map(c => Math.floor(BACKGROUND_ENLIGHT * (255 - c) + c)));\n      }\n    }\n    const header = document.createElement(\"span\");\n    header.className = \"header\";\n    const title = document.createElement(\"h1\");\n    header.append(title);\n    ({\n      dir: title.dir,\n      str: title.textContent\n    } = this.#titleObj);\n    popup.append(header);\n    if (this.#dateObj) {\n      const modificationDate = document.createElement(\"span\");\n      modificationDate.classList.add(\"popupDate\");\n      modificationDate.setAttribute(\"data-l10n-id\", \"pdfjs-annotation-date-string\");\n      modificationDate.setAttribute(\"data-l10n-args\", JSON.stringify({\n        date: this.#dateObj.toLocaleDateString(),\n        time: this.#dateObj.toLocaleTimeString()\n      }));\n      header.append(modificationDate);\n    }\n    const html = this.#html;\n    if (html) {\n      XfaLayer.render({\n        xfaHtml: html,\n        intent: \"richText\",\n        div: popup\n      });\n      popup.lastChild.classList.add(\"richText\", \"popupContent\");\n    } else {\n      const contents = this._formatContents(this.#contentsObj);\n      popup.append(contents);\n    }\n    this.#container.append(popup);\n  }\n  get #html() {\n    const richText = this.#richText;\n    const contentsObj = this.#contentsObj;\n    if (richText?.str && (!contentsObj?.str || contentsObj.str === richText.str)) {\n      return this.#richText.html || null;\n    }\n    return null;\n  }\n  get #fontSize() {\n    return this.#html?.attributes?.style?.fontSize || 0;\n  }\n  get #fontColor() {\n    return this.#html?.attributes?.style?.color || null;\n  }\n  #makePopupContent(text) {\n    const popupLines = [];\n    const popupContent = {\n      str: text,\n      html: {\n        name: \"div\",\n        attributes: {\n          dir: \"auto\"\n        },\n        children: [{\n          name: \"p\",\n          children: popupLines\n        }]\n      }\n    };\n    const lineAttributes = {\n      style: {\n        color: this.#fontColor,\n        fontSize: this.#fontSize ? `calc(${this.#fontSize}px * var(--scale-factor))` : \"\"\n      }\n    };\n    for (const line of text.split(\"\\n\")) {\n      popupLines.push({\n        name: \"span\",\n        value: line,\n        attributes: lineAttributes\n      });\n    }\n    return popupContent;\n  }\n  _formatContents({\n    str,\n    dir\n  }) {\n    const p = document.createElement(\"p\");\n    p.classList.add(\"popupContent\");\n    p.dir = dir;\n    const lines = str.split(/(?:\\r\\n?|\\n)/);\n    for (let i = 0, ii = lines.length; i < ii; ++i) {\n      const line = lines[i];\n      p.append(document.createTextNode(line));\n      if (i < ii - 1) {\n        p.append(document.createElement(\"br\"));\n      }\n    }\n    return p;\n  }\n  #keyDown(event) {\n    if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) {\n      return;\n    }\n    if (event.key === \"Enter\" || event.key === \"Escape\" && this.#pinned) {\n      this.#toggle();\n    }\n  }\n  updateEdited({\n    rect,\n    popupContent\n  }) {\n    this.#updates ||= {\n      contentsObj: this.#contentsObj,\n      richText: this.#richText\n    };\n    if (rect) {\n      this.#position = null;\n    }\n    if (popupContent) {\n      this.#richText = this.#makePopupContent(popupContent);\n      this.#contentsObj = null;\n    }\n    this.#popup?.remove();\n    this.#popup = null;\n  }\n  resetEdited() {\n    if (!this.#updates) {\n      return;\n    }\n    ({\n      contentsObj: this.#contentsObj,\n      richText: this.#richText\n    } = this.#updates);\n    this.#updates = null;\n    this.#popup?.remove();\n    this.#popup = null;\n    this.#position = null;\n  }\n  #setPosition() {\n    if (this.#position !== null) {\n      return;\n    }\n    const {\n      page: {\n        view\n      },\n      viewport: {\n        rawDims: {\n          pageWidth,\n          pageHeight,\n          pageX,\n          pageY\n        }\n      }\n    } = this.#parent;\n    let useParentRect = !!this.#parentRect;\n    let rect = useParentRect ? this.#parentRect : this.#rect;\n    for (const element of this.#elements) {\n      if (!rect || Util.intersect(element.data.rect, rect) !== null) {\n        rect = element.data.rect;\n        useParentRect = true;\n        break;\n      }\n    }\n    const normalizedRect = Util.normalizeRect([rect[0], view[3] - rect[1] + view[1], rect[2], view[3] - rect[3] + view[1]]);\n    const HORIZONTAL_SPACE_AFTER_ANNOTATION = 5;\n    const parentWidth = useParentRect ? rect[2] - rect[0] + HORIZONTAL_SPACE_AFTER_ANNOTATION : 0;\n    const popupLeft = normalizedRect[0] + parentWidth;\n    const popupTop = normalizedRect[1];\n    this.#position = [100 * (popupLeft - pageX) / pageWidth, 100 * (popupTop - pageY) / pageHeight];\n    const {\n      style\n    } = this.#container;\n    style.left = `${this.#position[0]}%`;\n    style.top = `${this.#position[1]}%`;\n  }\n  #toggle() {\n    this.#pinned = !this.#pinned;\n    if (this.#pinned) {\n      this.#show();\n      this.#container.addEventListener(\"click\", this.#boundToggle);\n      this.#container.addEventListener(\"keydown\", this.#boundKeyDown);\n    } else {\n      this.#hide();\n      this.#container.removeEventListener(\"click\", this.#boundToggle);\n      this.#container.removeEventListener(\"keydown\", this.#boundKeyDown);\n    }\n  }\n  #show() {\n    if (!this.#popup) {\n      this.render();\n    }\n    if (!this.isVisible) {\n      this.#setPosition();\n      this.#container.hidden = false;\n      this.#container.style.zIndex = parseInt(this.#container.style.zIndex) + 1000;\n    } else if (this.#pinned) {\n      this.#container.classList.add(\"focused\");\n    }\n  }\n  #hide() {\n    this.#container.classList.remove(\"focused\");\n    if (this.#pinned || !this.isVisible) {\n      return;\n    }\n    this.#container.hidden = true;\n    this.#container.style.zIndex = parseInt(this.#container.style.zIndex) - 1000;\n  }\n  forceHide() {\n    this.#wasVisible = this.isVisible;\n    if (!this.#wasVisible) {\n      return;\n    }\n    this.#container.hidden = true;\n  }\n  maybeShow() {\n    if (!this.#wasVisible) {\n      return;\n    }\n    if (!this.#popup) {\n      this.#show();\n    }\n    this.#wasVisible = false;\n    this.#container.hidden = false;\n  }\n  get isVisible() {\n    return this.#container.hidden === false;\n  }\n}\nclass FreeTextAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n    this.textContent = parameters.data.textContent;\n    this.textPosition = parameters.data.textPosition;\n    this.annotationEditorType = AnnotationEditorType.FREETEXT;\n  }\n  render() {\n    this.container.classList.add(\"freeTextAnnotation\");\n    if (this.textContent) {\n      const content = document.createElement(\"div\");\n      content.classList.add(\"annotationTextContent\");\n      content.setAttribute(\"role\", \"comment\");\n      for (const line of this.textContent) {\n        const lineSpan = document.createElement(\"span\");\n        lineSpan.textContent = line;\n        content.append(lineSpan);\n      }\n      this.container.append(content);\n    }\n    if (!this.data.popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n    this._editOnDoubleClick();\n    return this.container;\n  }\n  get _isEditable() {\n    return this.data.hasOwnCanvas;\n  }\n}\nclass LineAnnotationElement extends AnnotationElement {\n  #line = null;\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n  }\n  render() {\n    this.container.classList.add(\"lineAnnotation\");\n    const data = this.data;\n    const {\n      width,\n      height\n    } = getRectDims(data.rect);\n    const svg = this.svgFactory.create(width, height, true);\n    const line = this.#line = this.svgFactory.createElement(\"svg:line\");\n    line.setAttribute(\"x1\", data.rect[2] - data.lineCoordinates[0]);\n    line.setAttribute(\"y1\", data.rect[3] - data.lineCoordinates[1]);\n    line.setAttribute(\"x2\", data.rect[2] - data.lineCoordinates[2]);\n    line.setAttribute(\"y2\", data.rect[3] - data.lineCoordinates[3]);\n    line.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\n    line.setAttribute(\"stroke\", \"transparent\");\n    line.setAttribute(\"fill\", \"transparent\");\n    svg.append(line);\n    this.container.append(svg);\n    if (!data.popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n    return this.container;\n  }\n  getElementsToTriggerPopup() {\n    return this.#line;\n  }\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n}\nclass SquareAnnotationElement extends AnnotationElement {\n  #square = null;\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n  }\n  render() {\n    this.container.classList.add(\"squareAnnotation\");\n    const data = this.data;\n    const {\n      width,\n      height\n    } = getRectDims(data.rect);\n    const svg = this.svgFactory.create(width, height, true);\n    const borderWidth = data.borderStyle.width;\n    const square = this.#square = this.svgFactory.createElement(\"svg:rect\");\n    square.setAttribute(\"x\", borderWidth / 2);\n    square.setAttribute(\"y\", borderWidth / 2);\n    square.setAttribute(\"width\", width - borderWidth);\n    square.setAttribute(\"height\", height - borderWidth);\n    square.setAttribute(\"stroke-width\", borderWidth || 1);\n    square.setAttribute(\"stroke\", \"transparent\");\n    square.setAttribute(\"fill\", \"transparent\");\n    svg.append(square);\n    this.container.append(svg);\n    if (!data.popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n    return this.container;\n  }\n  getElementsToTriggerPopup() {\n    return this.#square;\n  }\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n}\nclass CircleAnnotationElement extends AnnotationElement {\n  #circle = null;\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n  }\n  render() {\n    this.container.classList.add(\"circleAnnotation\");\n    const data = this.data;\n    const {\n      width,\n      height\n    } = getRectDims(data.rect);\n    const svg = this.svgFactory.create(width, height, true);\n    const borderWidth = data.borderStyle.width;\n    const circle = this.#circle = this.svgFactory.createElement(\"svg:ellipse\");\n    circle.setAttribute(\"cx\", width / 2);\n    circle.setAttribute(\"cy\", height / 2);\n    circle.setAttribute(\"rx\", width / 2 - borderWidth / 2);\n    circle.setAttribute(\"ry\", height / 2 - borderWidth / 2);\n    circle.setAttribute(\"stroke-width\", borderWidth || 1);\n    circle.setAttribute(\"stroke\", \"transparent\");\n    circle.setAttribute(\"fill\", \"transparent\");\n    svg.append(circle);\n    this.container.append(svg);\n    if (!data.popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n    return this.container;\n  }\n  getElementsToTriggerPopup() {\n    return this.#circle;\n  }\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n}\nclass PolylineAnnotationElement extends AnnotationElement {\n  #polyline = null;\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n    this.containerClassName = \"polylineAnnotation\";\n    this.svgElementName = \"svg:polyline\";\n  }\n  render() {\n    this.container.classList.add(this.containerClassName);\n    const data = this.data;\n    const {\n      width,\n      height\n    } = getRectDims(data.rect);\n    const svg = this.svgFactory.create(width, height, true);\n    let points = [];\n    for (const coordinate of data.vertices) {\n      const x = coordinate.x - data.rect[0];\n      const y = data.rect[3] - coordinate.y;\n      points.push(x + \",\" + y);\n    }\n    points = points.join(\" \");\n    const polyline = this.#polyline = this.svgFactory.createElement(this.svgElementName);\n    polyline.setAttribute(\"points\", points);\n    polyline.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\n    polyline.setAttribute(\"stroke\", \"transparent\");\n    polyline.setAttribute(\"fill\", \"transparent\");\n    svg.append(polyline);\n    this.container.append(svg);\n    if (!data.popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n    return this.container;\n  }\n  getElementsToTriggerPopup() {\n    return this.#polyline;\n  }\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n}\nclass PolygonAnnotationElement extends PolylineAnnotationElement {\n  constructor(parameters) {\n    super(parameters);\n    this.containerClassName = \"polygonAnnotation\";\n    this.svgElementName = \"svg:polygon\";\n  }\n}\nclass CaretAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n  }\n  render() {\n    this.container.classList.add(\"caretAnnotation\");\n    if (!this.data.popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n    return this.container;\n  }\n}\nclass InkAnnotationElement extends AnnotationElement {\n  #polylines = [];\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n    this.containerClassName = \"inkAnnotation\";\n    this.svgElementName = \"svg:polyline\";\n    this.annotationEditorType = AnnotationEditorType.INK;\n  }\n  render() {\n    this.container.classList.add(this.containerClassName);\n    const data = this.data;\n    const {\n      width,\n      height\n    } = getRectDims(data.rect);\n    const svg = this.svgFactory.create(width, height, true);\n    for (const inkList of data.inkLists) {\n      let points = [];\n      for (const coordinate of inkList) {\n        const x = coordinate.x - data.rect[0];\n        const y = data.rect[3] - coordinate.y;\n        points.push(`${x},${y}`);\n      }\n      points = points.join(\" \");\n      const polyline = this.svgFactory.createElement(this.svgElementName);\n      this.#polylines.push(polyline);\n      polyline.setAttribute(\"points\", points);\n      polyline.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\n      polyline.setAttribute(\"stroke\", \"transparent\");\n      polyline.setAttribute(\"fill\", \"transparent\");\n      if (!data.popupRef && this.hasPopupData) {\n        this._createPopup();\n      }\n      svg.append(polyline);\n    }\n    this.container.append(svg);\n    return this.container;\n  }\n  getElementsToTriggerPopup() {\n    return this.#polylines;\n  }\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n}\nclass HighlightAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true,\n      createQuadrilaterals: true\n    });\n  }\n  render() {\n    if (!this.data.popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n    this.container.classList.add(\"highlightAnnotation\");\n    return this.container;\n  }\n}\nclass UnderlineAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true,\n      createQuadrilaterals: true\n    });\n  }\n  render() {\n    if (!this.data.popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n    this.container.classList.add(\"underlineAnnotation\");\n    return this.container;\n  }\n}\nclass SquigglyAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true,\n      createQuadrilaterals: true\n    });\n  }\n  render() {\n    if (!this.data.popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n    this.container.classList.add(\"squigglyAnnotation\");\n    return this.container;\n  }\n}\nclass StrikeOutAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true,\n      createQuadrilaterals: true\n    });\n  }\n  render() {\n    if (!this.data.popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n    this.container.classList.add(\"strikeoutAnnotation\");\n    return this.container;\n  }\n}\nclass StampAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n  }\n  render() {\n    this.container.classList.add(\"stampAnnotation\");\n    if (!this.data.popupRef && this.hasPopupData) {\n      this._createPopup();\n    }\n    return this.container;\n  }\n}\nclass FileAttachmentAnnotationElement extends AnnotationElement {\n  #trigger = null;\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true\n    });\n    const {\n      file\n    } = this.data;\n    this.filename = file.filename;\n    this.content = file.content;\n    this.linkService.eventBus?.dispatch(\"fileattachmentannotation\", {\n      source: this,\n      ...file\n    });\n  }\n  render() {\n    this.container.classList.add(\"fileAttachmentAnnotation\");\n    const {\n      container,\n      data\n    } = this;\n    let trigger;\n    if (data.hasAppearance || data.fillAlpha === 0) {\n      trigger = document.createElement(\"div\");\n    } else {\n      trigger = document.createElement(\"img\");\n      trigger.src = `${this.imageResourcesPath}annotation-${/paperclip/i.test(data.name) ? \"paperclip\" : \"pushpin\"}.svg`;\n      if (data.fillAlpha && data.fillAlpha < 1) {\n        trigger.style = `filter: opacity(${Math.round(data.fillAlpha * 100)}%);`;\n      }\n    }\n    trigger.addEventListener(\"dblclick\", this.#download.bind(this));\n    this.#trigger = trigger;\n    const {\n      isMac\n    } = util_FeatureTest.platform;\n    container.addEventListener(\"keydown\", evt => {\n      if (evt.key === \"Enter\" && (isMac ? evt.metaKey : evt.ctrlKey)) {\n        this.#download();\n      }\n    });\n    if (!data.popupRef && this.hasPopupData) {\n      this._createPopup();\n    } else {\n      trigger.classList.add(\"popupTriggerArea\");\n    }\n    container.append(trigger);\n    return container;\n  }\n  getElementsToTriggerPopup() {\n    return this.#trigger;\n  }\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n  #download() {\n    this.downloadManager?.openOrDownloadData(this.content, this.filename);\n  }\n}\nclass AnnotationLayer {\n  #accessibilityManager = null;\n  #annotationCanvasMap = null;\n  #editableAnnotations = new Map();\n  constructor({\n    div,\n    accessibilityManager,\n    annotationCanvasMap,\n    annotationEditorUIManager,\n    page,\n    viewport\n  }) {\n    this.div = div;\n    this.#accessibilityManager = accessibilityManager;\n    this.#annotationCanvasMap = annotationCanvasMap;\n    this.page = page;\n    this.viewport = viewport;\n    this.zIndex = 0;\n    this._annotationEditorUIManager = annotationEditorUIManager;\n  }\n  #appendElement(element, id) {\n    const contentElement = element.firstChild || element;\n    contentElement.id = `${AnnotationPrefix}${id}`;\n    this.div.append(element);\n    this.#accessibilityManager?.moveElementInDOM(this.div, element, contentElement, false);\n  }\n  async render(params) {\n    const {\n      annotations\n    } = params;\n    const layer = this.div;\n    setLayerDimensions(layer, this.viewport);\n    const popupToElements = new Map();\n    const elementParams = {\n      data: null,\n      layer,\n      linkService: params.linkService,\n      downloadManager: params.downloadManager,\n      imageResourcesPath: params.imageResourcesPath || \"\",\n      renderForms: params.renderForms !== false,\n      svgFactory: new DOMSVGFactory(),\n      annotationStorage: params.annotationStorage || new AnnotationStorage(),\n      enableScripting: params.enableScripting === true,\n      hasJSActions: params.hasJSActions,\n      fieldObjects: params.fieldObjects,\n      parent: this,\n      elements: null\n    };\n    for (const data of annotations) {\n      if (data.noHTML) {\n        continue;\n      }\n      const isPopupAnnotation = data.annotationType === AnnotationType.POPUP;\n      if (!isPopupAnnotation) {\n        const {\n          width,\n          height\n        } = getRectDims(data.rect);\n        if (width <= 0 || height <= 0) {\n          continue;\n        }\n      } else {\n        const elements = popupToElements.get(data.id);\n        if (!elements) {\n          continue;\n        }\n        elementParams.elements = elements;\n      }\n      elementParams.data = data;\n      const element = AnnotationElementFactory.create(elementParams);\n      if (!element.isRenderable) {\n        continue;\n      }\n      if (!isPopupAnnotation && data.popupRef) {\n        const elements = popupToElements.get(data.popupRef);\n        if (!elements) {\n          popupToElements.set(data.popupRef, [element]);\n        } else {\n          elements.push(element);\n        }\n      }\n      const rendered = element.render();\n      if (data.hidden) {\n        rendered.style.visibility = \"hidden\";\n      }\n      this.#appendElement(rendered, data.id);\n      if (element.annotationEditorType > 0) {\n        this.#editableAnnotations.set(element.data.id, element);\n        this._annotationEditorUIManager?.renderAnnotationElement(element);\n      }\n    }\n    this.#setAnnotationCanvasMap();\n  }\n  update({\n    viewport\n  }) {\n    const layer = this.div;\n    this.viewport = viewport;\n    setLayerDimensions(layer, {\n      rotation: viewport.rotation\n    });\n    this.#setAnnotationCanvasMap();\n    layer.hidden = false;\n  }\n  #setAnnotationCanvasMap() {\n    if (!this.#annotationCanvasMap) {\n      return;\n    }\n    const layer = this.div;\n    for (const [id, canvas] of this.#annotationCanvasMap) {\n      const element = layer.querySelector(`[data-annotation-id=\"${id}\"]`);\n      if (!element) {\n        continue;\n      }\n      canvas.className = \"annotationContent\";\n      const {\n        firstChild\n      } = element;\n      if (!firstChild) {\n        element.append(canvas);\n      } else if (firstChild.nodeName === \"CANVAS\") {\n        firstChild.replaceWith(canvas);\n      } else if (!firstChild.classList.contains(\"annotationContent\")) {\n        firstChild.before(canvas);\n      } else {\n        firstChild.after(canvas);\n      }\n    }\n    this.#annotationCanvasMap.clear();\n  }\n  getEditableAnnotations() {\n    return Array.from(this.#editableAnnotations.values());\n  }\n  getEditableAnnotation(id) {\n    return this.#editableAnnotations.get(id);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/editor/freetext.js\n\n\n\n\nconst EOL_PATTERN = /\\r\\n?|\\n/g;\nclass FreeTextEditor extends AnnotationEditor {\n  #boundEditorDivBlur = this.editorDivBlur.bind(this);\n  #boundEditorDivFocus = this.editorDivFocus.bind(this);\n  #boundEditorDivInput = this.editorDivInput.bind(this);\n  #boundEditorDivKeydown = this.editorDivKeydown.bind(this);\n  #boundEditorDivPaste = this.editorDivPaste.bind(this);\n  #color;\n  #content = \"\";\n  #editorDivId = `${this.id}-editor`;\n  #fontSize;\n  #initialData = null;\n  static _freeTextDefaultContent = \"\";\n  static _internalPadding = 0;\n  static _defaultColor = null;\n  static _defaultFontSize = 10;\n  static get _keyboardManager() {\n    const proto = FreeTextEditor.prototype;\n    const arrowChecker = self => self.isEmpty();\n    const small = AnnotationEditorUIManager.TRANSLATE_SMALL;\n    const big = AnnotationEditorUIManager.TRANSLATE_BIG;\n    return shadow(this, \"_keyboardManager\", new KeyboardManager([[[\"ctrl+s\", \"mac+meta+s\", \"ctrl+p\", \"mac+meta+p\"], proto.commitOrRemove, {\n      bubbles: true\n    }], [[\"ctrl+Enter\", \"mac+meta+Enter\", \"Escape\", \"mac+Escape\"], proto.commitOrRemove], [[\"ArrowLeft\", \"mac+ArrowLeft\"], proto._translateEmpty, {\n      args: [-small, 0],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"], proto._translateEmpty, {\n      args: [-big, 0],\n      checker: arrowChecker\n    }], [[\"ArrowRight\", \"mac+ArrowRight\"], proto._translateEmpty, {\n      args: [small, 0],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"], proto._translateEmpty, {\n      args: [big, 0],\n      checker: arrowChecker\n    }], [[\"ArrowUp\", \"mac+ArrowUp\"], proto._translateEmpty, {\n      args: [0, -small],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"], proto._translateEmpty, {\n      args: [0, -big],\n      checker: arrowChecker\n    }], [[\"ArrowDown\", \"mac+ArrowDown\"], proto._translateEmpty, {\n      args: [0, small],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"], proto._translateEmpty, {\n      args: [0, big],\n      checker: arrowChecker\n    }]]));\n  }\n  static _type = \"freetext\";\n  static _editorType = AnnotationEditorType.FREETEXT;\n  constructor(params) {\n    super({\n      ...params,\n      name: \"freeTextEditor\"\n    });\n    this.#color = params.color || FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor;\n    this.#fontSize = params.fontSize || FreeTextEditor._defaultFontSize;\n  }\n  static initialize(l10n, uiManager) {\n    AnnotationEditor.initialize(l10n, uiManager, {\n      strings: [\"pdfjs-free-text-default-content\"]\n    });\n    const style = getComputedStyle(document.documentElement);\n    this._internalPadding = parseFloat(style.getPropertyValue(\"--freetext-padding\"));\n  }\n  static updateDefaultParams(type, value) {\n    switch (type) {\n      case AnnotationEditorParamsType.FREETEXT_SIZE:\n        FreeTextEditor._defaultFontSize = value;\n        break;\n      case AnnotationEditorParamsType.FREETEXT_COLOR:\n        FreeTextEditor._defaultColor = value;\n        break;\n    }\n  }\n  updateParams(type, value) {\n    switch (type) {\n      case AnnotationEditorParamsType.FREETEXT_SIZE:\n        this.#updateFontSize(value);\n        break;\n      case AnnotationEditorParamsType.FREETEXT_COLOR:\n        this.#updateColor(value);\n        break;\n    }\n  }\n  static get defaultPropertiesToUpdate() {\n    return [[AnnotationEditorParamsType.FREETEXT_SIZE, FreeTextEditor._defaultFontSize], [AnnotationEditorParamsType.FREETEXT_COLOR, FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor]];\n  }\n  get propertiesToUpdate() {\n    return [[AnnotationEditorParamsType.FREETEXT_SIZE, this.#fontSize], [AnnotationEditorParamsType.FREETEXT_COLOR, this.#color]];\n  }\n  #updateFontSize(fontSize) {\n    const setFontsize = size => {\n      this.editorDiv.style.fontSize = `calc(${size}px * var(--scale-factor))`;\n      this.translate(0, -(size - this.#fontSize) * this.parentScale);\n      this.#fontSize = size;\n      this.#setEditorDimensions();\n    };\n    const savedFontsize = this.#fontSize;\n    this.addCommands({\n      cmd: setFontsize.bind(this, fontSize),\n      undo: setFontsize.bind(this, savedFontsize),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type: AnnotationEditorParamsType.FREETEXT_SIZE,\n      overwriteIfSameType: true,\n      keepUndo: true\n    });\n  }\n  #updateColor(color) {\n    const setColor = col => {\n      this.#color = this.editorDiv.style.color = col;\n    };\n    const savedColor = this.#color;\n    this.addCommands({\n      cmd: setColor.bind(this, color),\n      undo: setColor.bind(this, savedColor),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type: AnnotationEditorParamsType.FREETEXT_COLOR,\n      overwriteIfSameType: true,\n      keepUndo: true\n    });\n  }\n  _translateEmpty(x, y) {\n    this._uiManager.translateSelectedEditors(x, y, true);\n  }\n  getInitialTranslation() {\n    const scale = this.parentScale;\n    return [-FreeTextEditor._internalPadding * scale, -(FreeTextEditor._internalPadding + this.#fontSize) * scale];\n  }\n  rebuild() {\n    if (!this.parent) {\n      return;\n    }\n    super.rebuild();\n    if (this.div === null) {\n      return;\n    }\n    if (!this.isAttachedToDOM) {\n      this.parent.add(this);\n    }\n  }\n  enableEditMode() {\n    if (this.isInEditMode()) {\n      return;\n    }\n    this.parent.setEditingState(false);\n    this.parent.updateToolbar(AnnotationEditorType.FREETEXT);\n    super.enableEditMode();\n    this.overlayDiv.classList.remove(\"enabled\");\n    this.editorDiv.contentEditable = true;\n    this._isDraggable = false;\n    this.div.removeAttribute(\"aria-activedescendant\");\n    this.editorDiv.addEventListener(\"keydown\", this.#boundEditorDivKeydown);\n    this.editorDiv.addEventListener(\"focus\", this.#boundEditorDivFocus);\n    this.editorDiv.addEventListener(\"blur\", this.#boundEditorDivBlur);\n    this.editorDiv.addEventListener(\"input\", this.#boundEditorDivInput);\n    this.editorDiv.addEventListener(\"paste\", this.#boundEditorDivPaste);\n  }\n  disableEditMode() {\n    if (!this.isInEditMode()) {\n      return;\n    }\n    this.parent.setEditingState(true);\n    super.disableEditMode();\n    this.overlayDiv.classList.add(\"enabled\");\n    this.editorDiv.contentEditable = false;\n    this.div.setAttribute(\"aria-activedescendant\", this.#editorDivId);\n    this._isDraggable = true;\n    this.editorDiv.removeEventListener(\"keydown\", this.#boundEditorDivKeydown);\n    this.editorDiv.removeEventListener(\"focus\", this.#boundEditorDivFocus);\n    this.editorDiv.removeEventListener(\"blur\", this.#boundEditorDivBlur);\n    this.editorDiv.removeEventListener(\"input\", this.#boundEditorDivInput);\n    this.editorDiv.removeEventListener(\"paste\", this.#boundEditorDivPaste);\n    this.div.focus({\n      preventScroll: true\n    });\n    this.isEditing = false;\n    this.parent.div.classList.add(\"freetextEditing\");\n  }\n  focusin(event) {\n    if (!this._focusEventsAllowed) {\n      return;\n    }\n    super.focusin(event);\n    if (event.target !== this.editorDiv) {\n      this.editorDiv.focus();\n    }\n  }\n  onceAdded() {\n    if (this.width) {\n      return;\n    }\n    this.enableEditMode();\n    this.editorDiv.focus();\n    if (this._initialOptions?.isCentered) {\n      this.center();\n    }\n    this._initialOptions = null;\n  }\n  isEmpty() {\n    return !this.editorDiv || this.editorDiv.innerText.trim() === \"\";\n  }\n  remove() {\n    this.isEditing = false;\n    if (this.parent) {\n      this.parent.setEditingState(true);\n      this.parent.div.classList.add(\"freetextEditing\");\n    }\n    super.remove();\n  }\n  #extractText() {\n    const buffer = [];\n    this.editorDiv.normalize();\n    for (const child of this.editorDiv.childNodes) {\n      buffer.push(FreeTextEditor.#getNodeContent(child));\n    }\n    return buffer.join(\"\\n\");\n  }\n  #setEditorDimensions() {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    let rect;\n    if (this.isAttachedToDOM) {\n      rect = this.div.getBoundingClientRect();\n    } else {\n      const {\n        currentLayer,\n        div\n      } = this;\n      const savedDisplay = div.style.display;\n      const savedVisibility = div.classList.contains(\"hidden\");\n      div.classList.remove(\"hidden\");\n      div.style.display = \"hidden\";\n      currentLayer.div.append(this.div);\n      rect = div.getBoundingClientRect();\n      div.remove();\n      div.style.display = savedDisplay;\n      div.classList.toggle(\"hidden\", savedVisibility);\n    }\n    if (this.rotation % 180 === this.parentRotation % 180) {\n      this.width = rect.width / parentWidth;\n      this.height = rect.height / parentHeight;\n    } else {\n      this.width = rect.height / parentWidth;\n      this.height = rect.width / parentHeight;\n    }\n    this.fixAndSetPosition();\n  }\n  commit() {\n    if (!this.isInEditMode()) {\n      return;\n    }\n    super.commit();\n    this.disableEditMode();\n    const savedText = this.#content;\n    const newText = this.#content = this.#extractText().trimEnd();\n    if (savedText === newText) {\n      return;\n    }\n    const setText = text => {\n      this.#content = text;\n      if (!text) {\n        this.remove();\n        return;\n      }\n      this.#setContent();\n      this._uiManager.rebuild(this);\n      this.#setEditorDimensions();\n    };\n    this.addCommands({\n      cmd: () => {\n        setText(newText);\n      },\n      undo: () => {\n        setText(savedText);\n      },\n      mustExec: false\n    });\n    this.#setEditorDimensions();\n  }\n  shouldGetKeyboardEvents() {\n    return this.isInEditMode();\n  }\n  enterInEditMode() {\n    this.enableEditMode();\n    this.editorDiv.focus();\n  }\n  dblclick(event) {\n    this.enterInEditMode();\n  }\n  keydown(event) {\n    if (event.target === this.div && event.key === \"Enter\") {\n      this.enterInEditMode();\n      event.preventDefault();\n    }\n  }\n  editorDivKeydown(event) {\n    FreeTextEditor._keyboardManager.exec(this, event);\n  }\n  editorDivFocus(event) {\n    this.isEditing = true;\n  }\n  editorDivBlur(event) {\n    this.isEditing = false;\n  }\n  editorDivInput(event) {\n    this.parent.div.classList.toggle(\"freetextEditing\", this.isEmpty());\n  }\n  disableEditing() {\n    this.editorDiv.setAttribute(\"role\", \"comment\");\n    this.editorDiv.removeAttribute(\"aria-multiline\");\n  }\n  enableEditing() {\n    this.editorDiv.setAttribute(\"role\", \"textbox\");\n    this.editorDiv.setAttribute(\"aria-multiline\", true);\n  }\n  render() {\n    if (this.div) {\n      return this.div;\n    }\n    let baseX, baseY;\n    if (this.width) {\n      baseX = this.x;\n      baseY = this.y;\n    }\n    super.render();\n    this.editorDiv = document.createElement(\"div\");\n    this.editorDiv.className = \"internal\";\n    this.editorDiv.setAttribute(\"id\", this.#editorDivId);\n    this.editorDiv.setAttribute(\"data-l10n-id\", \"pdfjs-free-text\");\n    this.enableEditing();\n    AnnotationEditor._l10nPromise.get(\"pdfjs-free-text-default-content\").then(msg => this.editorDiv?.setAttribute(\"default-content\", msg));\n    this.editorDiv.contentEditable = true;\n    const {\n      style\n    } = this.editorDiv;\n    style.fontSize = `calc(${this.#fontSize}px * var(--scale-factor))`;\n    style.color = this.#color;\n    this.div.append(this.editorDiv);\n    this.overlayDiv = document.createElement(\"div\");\n    this.overlayDiv.classList.add(\"overlay\", \"enabled\");\n    this.div.append(this.overlayDiv);\n    bindEvents(this, this.div, [\"dblclick\", \"keydown\"]);\n    if (this.width) {\n      const [parentWidth, parentHeight] = this.parentDimensions;\n      if (this.annotationElementId) {\n        const {\n          position\n        } = this.#initialData;\n        let [tx, ty] = this.getInitialTranslation();\n        [tx, ty] = this.pageTranslationToScreen(tx, ty);\n        const [pageWidth, pageHeight] = this.pageDimensions;\n        const [pageX, pageY] = this.pageTranslation;\n        let posX, posY;\n        switch (this.rotation) {\n          case 0:\n            posX = baseX + (position[0] - pageX) / pageWidth;\n            posY = baseY + this.height - (position[1] - pageY) / pageHeight;\n            break;\n          case 90:\n            posX = baseX + (position[0] - pageX) / pageWidth;\n            posY = baseY - (position[1] - pageY) / pageHeight;\n            [tx, ty] = [ty, -tx];\n            break;\n          case 180:\n            posX = baseX - this.width + (position[0] - pageX) / pageWidth;\n            posY = baseY - (position[1] - pageY) / pageHeight;\n            [tx, ty] = [-tx, -ty];\n            break;\n          case 270:\n            posX = baseX + (position[0] - pageX - this.height * pageHeight) / pageWidth;\n            posY = baseY + (position[1] - pageY - this.width * pageWidth) / pageHeight;\n            [tx, ty] = [-ty, tx];\n            break;\n        }\n        this.setAt(posX * parentWidth, posY * parentHeight, tx, ty);\n      } else {\n        this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight);\n      }\n      this.#setContent();\n      this._isDraggable = true;\n      this.editorDiv.contentEditable = false;\n    } else {\n      this._isDraggable = false;\n      this.editorDiv.contentEditable = true;\n    }\n    return this.div;\n  }\n  static #getNodeContent(node) {\n    return (node.nodeType === Node.TEXT_NODE ? node.nodeValue : node.innerText).replaceAll(EOL_PATTERN, \"\");\n  }\n  editorDivPaste(event) {\n    const clipboardData = event.clipboardData || window.clipboardData;\n    const {\n      types\n    } = clipboardData;\n    if (types.length === 1 && types[0] === \"text/plain\") {\n      return;\n    }\n    event.preventDefault();\n    const paste = FreeTextEditor.#deserializeContent(clipboardData.getData(\"text\") || \"\").replaceAll(EOL_PATTERN, \"\\n\");\n    if (!paste) {\n      return;\n    }\n    const selection = window.getSelection();\n    if (!selection.rangeCount) {\n      return;\n    }\n    this.editorDiv.normalize();\n    selection.deleteFromDocument();\n    const range = selection.getRangeAt(0);\n    if (!paste.includes(\"\\n\")) {\n      range.insertNode(document.createTextNode(paste));\n      this.editorDiv.normalize();\n      selection.collapseToStart();\n      return;\n    }\n    const {\n      startContainer,\n      startOffset\n    } = range;\n    const bufferBefore = [];\n    const bufferAfter = [];\n    if (startContainer.nodeType === Node.TEXT_NODE) {\n      const parent = startContainer.parentElement;\n      bufferAfter.push(startContainer.nodeValue.slice(startOffset).replaceAll(EOL_PATTERN, \"\"));\n      if (parent !== this.editorDiv) {\n        let buffer = bufferBefore;\n        for (const child of this.editorDiv.childNodes) {\n          if (child === parent) {\n            buffer = bufferAfter;\n            continue;\n          }\n          buffer.push(FreeTextEditor.#getNodeContent(child));\n        }\n      }\n      bufferBefore.push(startContainer.nodeValue.slice(0, startOffset).replaceAll(EOL_PATTERN, \"\"));\n    } else if (startContainer === this.editorDiv) {\n      let buffer = bufferBefore;\n      let i = 0;\n      for (const child of this.editorDiv.childNodes) {\n        if (i++ === startOffset) {\n          buffer = bufferAfter;\n        }\n        buffer.push(FreeTextEditor.#getNodeContent(child));\n      }\n    }\n    this.#content = `${bufferBefore.join(\"\\n\")}${paste}${bufferAfter.join(\"\\n\")}`;\n    this.#setContent();\n    const newRange = new Range();\n    let beforeLength = bufferBefore.reduce((acc, line) => acc + line.length, 0);\n    for (const {\n      firstChild\n    } of this.editorDiv.childNodes) {\n      if (firstChild.nodeType === Node.TEXT_NODE) {\n        const length = firstChild.nodeValue.length;\n        if (beforeLength <= length) {\n          newRange.setStart(firstChild, beforeLength);\n          newRange.setEnd(firstChild, beforeLength);\n          break;\n        }\n        beforeLength -= length;\n      }\n    }\n    selection.removeAllRanges();\n    selection.addRange(newRange);\n  }\n  #setContent() {\n    this.editorDiv.replaceChildren();\n    if (!this.#content) {\n      return;\n    }\n    for (const line of this.#content.split(\"\\n\")) {\n      const div = document.createElement(\"div\");\n      div.append(line ? document.createTextNode(line) : document.createElement(\"br\"));\n      this.editorDiv.append(div);\n    }\n  }\n  #serializeContent() {\n    return this.#content.replaceAll(\"\\xa0\", \" \");\n  }\n  static #deserializeContent(content) {\n    return content.replaceAll(\" \", \"\\xa0\");\n  }\n  get contentDiv() {\n    return this.editorDiv;\n  }\n  static deserialize(data, parent, uiManager) {\n    let initialData = null;\n    if (data instanceof FreeTextAnnotationElement) {\n      const {\n        data: {\n          defaultAppearanceData: {\n            fontSize,\n            fontColor\n          },\n          rect,\n          rotation,\n          id\n        },\n        textContent,\n        textPosition,\n        parent: {\n          page: {\n            pageNumber\n          }\n        }\n      } = data;\n      if (!textContent || textContent.length === 0) {\n        return null;\n      }\n      initialData = data = {\n        annotationType: AnnotationEditorType.FREETEXT,\n        color: Array.from(fontColor),\n        fontSize,\n        value: textContent.join(\"\\n\"),\n        position: textPosition,\n        pageIndex: pageNumber - 1,\n        rect: rect.slice(0),\n        rotation,\n        id,\n        deleted: false\n      };\n    }\n    const editor = super.deserialize(data, parent, uiManager);\n    editor.#fontSize = data.fontSize;\n    editor.#color = Util.makeHexColor(...data.color);\n    editor.#content = FreeTextEditor.#deserializeContent(data.value);\n    editor.annotationElementId = data.id || null;\n    editor.#initialData = initialData;\n    return editor;\n  }\n  serialize(isForCopying = false) {\n    if (this.isEmpty()) {\n      return null;\n    }\n    if (this.deleted) {\n      return {\n        pageIndex: this.pageIndex,\n        id: this.annotationElementId,\n        deleted: true\n      };\n    }\n    const padding = FreeTextEditor._internalPadding * this.parentScale;\n    const rect = this.getRect(padding, padding);\n    const color = AnnotationEditor._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : this.#color);\n    const serialized = {\n      annotationType: AnnotationEditorType.FREETEXT,\n      color,\n      fontSize: this.#fontSize,\n      value: this.#serializeContent(),\n      pageIndex: this.pageIndex,\n      rect,\n      rotation: this.rotation,\n      structTreeParentId: this._structTreeParentId\n    };\n    if (isForCopying) {\n      return serialized;\n    }\n    if (this.annotationElementId && !this.#hasElementChanged(serialized)) {\n      return null;\n    }\n    serialized.id = this.annotationElementId;\n    return serialized;\n  }\n  #hasElementChanged(serialized) {\n    const {\n      value,\n      fontSize,\n      color,\n      pageIndex\n    } = this.#initialData;\n    return this._hasBeenMoved || serialized.value !== value || serialized.fontSize !== fontSize || serialized.color.some((c, i) => c !== color[i]) || serialized.pageIndex !== pageIndex;\n  }\n  renderAnnotationElement(annotation) {\n    const content = super.renderAnnotationElement(annotation);\n    if (this.deleted) {\n      return content;\n    }\n    const {\n      style\n    } = content;\n    style.fontSize = `calc(${this.#fontSize}px * var(--scale-factor))`;\n    style.color = this.#color;\n    content.replaceChildren();\n    for (const line of this.#content.split(\"\\n\")) {\n      const div = document.createElement(\"div\");\n      div.append(line ? document.createTextNode(line) : document.createElement(\"br\"));\n      content.append(div);\n    }\n    const padding = FreeTextEditor._internalPadding * this.parentScale;\n    annotation.updateEdited({\n      rect: this.getRect(padding, padding),\n      popupContent: this.#content\n    });\n    return content;\n  }\n  resetAnnotationElement(annotation) {\n    super.resetAnnotationElement(annotation);\n    annotation.resetEdited();\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/editor/outliner.js\n\nclass Outliner {\n  #box;\n  #verticalEdges = [];\n  #intervals = [];\n  constructor(boxes, borderWidth = 0, innerMargin = 0, isLTR = true) {\n    let minX = Infinity;\n    let maxX = -Infinity;\n    let minY = Infinity;\n    let maxY = -Infinity;\n    const NUMBER_OF_DIGITS = 4;\n    const EPSILON = 10 ** -NUMBER_OF_DIGITS;\n    for (const {\n      x,\n      y,\n      width,\n      height\n    } of boxes) {\n      const x1 = Math.floor((x - borderWidth) / EPSILON) * EPSILON;\n      const x2 = Math.ceil((x + width + borderWidth) / EPSILON) * EPSILON;\n      const y1 = Math.floor((y - borderWidth) / EPSILON) * EPSILON;\n      const y2 = Math.ceil((y + height + borderWidth) / EPSILON) * EPSILON;\n      const left = [x1, y1, y2, true];\n      const right = [x2, y1, y2, false];\n      this.#verticalEdges.push(left, right);\n      minX = Math.min(minX, x1);\n      maxX = Math.max(maxX, x2);\n      minY = Math.min(minY, y1);\n      maxY = Math.max(maxY, y2);\n    }\n    const bboxWidth = maxX - minX + 2 * innerMargin;\n    const bboxHeight = maxY - minY + 2 * innerMargin;\n    const shiftedMinX = minX - innerMargin;\n    const shiftedMinY = minY - innerMargin;\n    const lastEdge = this.#verticalEdges.at(isLTR ? -1 : -2);\n    const lastPoint = [lastEdge[0], lastEdge[2]];\n    for (const edge of this.#verticalEdges) {\n      const [x, y1, y2] = edge;\n      edge[0] = (x - shiftedMinX) / bboxWidth;\n      edge[1] = (y1 - shiftedMinY) / bboxHeight;\n      edge[2] = (y2 - shiftedMinY) / bboxHeight;\n    }\n    this.#box = {\n      x: shiftedMinX,\n      y: shiftedMinY,\n      width: bboxWidth,\n      height: bboxHeight,\n      lastPoint\n    };\n  }\n  getOutlines() {\n    this.#verticalEdges.sort((a, b) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2]);\n    const outlineVerticalEdges = [];\n    for (const edge of this.#verticalEdges) {\n      if (edge[3]) {\n        outlineVerticalEdges.push(...this.#breakEdge(edge));\n        this.#insert(edge);\n      } else {\n        this.#remove(edge);\n        outlineVerticalEdges.push(...this.#breakEdge(edge));\n      }\n    }\n    return this.#getOutlines(outlineVerticalEdges);\n  }\n  #getOutlines(outlineVerticalEdges) {\n    const edges = [];\n    const allEdges = new Set();\n    for (const edge of outlineVerticalEdges) {\n      const [x, y1, y2] = edge;\n      edges.push([x, y1, edge], [x, y2, edge]);\n    }\n    edges.sort((a, b) => a[1] - b[1] || a[0] - b[0]);\n    for (let i = 0, ii = edges.length; i < ii; i += 2) {\n      const edge1 = edges[i][2];\n      const edge2 = edges[i + 1][2];\n      edge1.push(edge2);\n      edge2.push(edge1);\n      allEdges.add(edge1);\n      allEdges.add(edge2);\n    }\n    const outlines = [];\n    let outline;\n    while (allEdges.size > 0) {\n      const edge = allEdges.values().next().value;\n      let [x, y1, y2, edge1, edge2] = edge;\n      allEdges.delete(edge);\n      let lastPointX = x;\n      let lastPointY = y1;\n      outline = [x, y2];\n      outlines.push(outline);\n      while (true) {\n        let e;\n        if (allEdges.has(edge1)) {\n          e = edge1;\n        } else if (allEdges.has(edge2)) {\n          e = edge2;\n        } else {\n          break;\n        }\n        allEdges.delete(e);\n        [x, y1, y2, edge1, edge2] = e;\n        if (lastPointX !== x) {\n          outline.push(lastPointX, lastPointY, x, lastPointY === y1 ? y1 : y2);\n          lastPointX = x;\n        }\n        lastPointY = lastPointY === y1 ? y2 : y1;\n      }\n      outline.push(lastPointX, lastPointY);\n    }\n    return new HighlightOutline(outlines, this.#box);\n  }\n  #binarySearch(y) {\n    const array = this.#intervals;\n    let start = 0;\n    let end = array.length - 1;\n    while (start <= end) {\n      const middle = start + end >> 1;\n      const y1 = array[middle][0];\n      if (y1 === y) {\n        return middle;\n      }\n      if (y1 < y) {\n        start = middle + 1;\n      } else {\n        end = middle - 1;\n      }\n    }\n    return end + 1;\n  }\n  #insert([, y1, y2]) {\n    const index = this.#binarySearch(y1);\n    this.#intervals.splice(index, 0, [y1, y2]);\n  }\n  #remove([, y1, y2]) {\n    const index = this.#binarySearch(y1);\n    for (let i = index; i < this.#intervals.length; i++) {\n      const [start, end] = this.#intervals[i];\n      if (start !== y1) {\n        break;\n      }\n      if (start === y1 && end === y2) {\n        this.#intervals.splice(i, 1);\n        return;\n      }\n    }\n    for (let i = index - 1; i >= 0; i--) {\n      const [start, end] = this.#intervals[i];\n      if (start !== y1) {\n        break;\n      }\n      if (start === y1 && end === y2) {\n        this.#intervals.splice(i, 1);\n        return;\n      }\n    }\n  }\n  #breakEdge(edge) {\n    const [x, y1, y2] = edge;\n    const results = [[x, y1, y2]];\n    const index = this.#binarySearch(y2);\n    for (let i = 0; i < index; i++) {\n      const [start, end] = this.#intervals[i];\n      for (let j = 0, jj = results.length; j < jj; j++) {\n        const [, y3, y4] = results[j];\n        if (end <= y3 || y4 <= start) {\n          continue;\n        }\n        if (y3 >= start) {\n          if (y4 > end) {\n            results[j][1] = end;\n          } else {\n            if (jj === 1) {\n              return [];\n            }\n            results.splice(j, 1);\n            j--;\n            jj--;\n          }\n          continue;\n        }\n        results[j][2] = start;\n        if (y4 > end) {\n          results.push([x, end, y4]);\n        }\n      }\n    }\n    return results;\n  }\n}\nclass Outline {\n  toSVGPath() {\n    throw new Error(\"Abstract method `toSVGPath` must be implemented.\");\n  }\n  get box() {\n    throw new Error(\"Abstract getter `box` must be implemented.\");\n  }\n  serialize(_bbox, _rotation) {\n    throw new Error(\"Abstract method `serialize` must be implemented.\");\n  }\n  get free() {\n    return this instanceof FreeHighlightOutline;\n  }\n}\nclass HighlightOutline extends Outline {\n  #box;\n  #outlines;\n  constructor(outlines, box) {\n    super();\n    this.#outlines = outlines;\n    this.#box = box;\n  }\n  toSVGPath() {\n    const buffer = [];\n    for (const polygon of this.#outlines) {\n      let [prevX, prevY] = polygon;\n      buffer.push(`M${prevX} ${prevY}`);\n      for (let i = 2; i < polygon.length; i += 2) {\n        const x = polygon[i];\n        const y = polygon[i + 1];\n        if (x === prevX) {\n          buffer.push(`V${y}`);\n          prevY = y;\n        } else if (y === prevY) {\n          buffer.push(`H${x}`);\n          prevX = x;\n        }\n      }\n      buffer.push(\"Z\");\n    }\n    return buffer.join(\" \");\n  }\n  serialize([blX, blY, trX, trY], _rotation) {\n    const outlines = [];\n    const width = trX - blX;\n    const height = trY - blY;\n    for (const outline of this.#outlines) {\n      const points = new Array(outline.length);\n      for (let i = 0; i < outline.length; i += 2) {\n        points[i] = blX + outline[i] * width;\n        points[i + 1] = trY - outline[i + 1] * height;\n      }\n      outlines.push(points);\n    }\n    return outlines;\n  }\n  get box() {\n    return this.#box;\n  }\n}\nclass FreeOutliner {\n  #box;\n  #bottom = [];\n  #innerMargin;\n  #isLTR;\n  #top = [];\n  #last = new Float64Array(18);\n  #lastX;\n  #lastY;\n  #min;\n  #min_dist;\n  #scaleFactor;\n  #thickness;\n  #points = [];\n  static #MIN_DIST = 8;\n  static #MIN_DIFF = 2;\n  static #MIN = FreeOutliner.#MIN_DIST + FreeOutliner.#MIN_DIFF;\n  constructor({\n    x,\n    y\n  }, box, scaleFactor, thickness, isLTR, innerMargin = 0) {\n    this.#box = box;\n    this.#thickness = thickness * scaleFactor;\n    this.#isLTR = isLTR;\n    this.#last.set([NaN, NaN, NaN, NaN, x, y], 6);\n    this.#innerMargin = innerMargin;\n    this.#min_dist = FreeOutliner.#MIN_DIST * scaleFactor;\n    this.#min = FreeOutliner.#MIN * scaleFactor;\n    this.#scaleFactor = scaleFactor;\n    this.#points.push(x, y);\n  }\n  get free() {\n    return true;\n  }\n  isEmpty() {\n    return isNaN(this.#last[8]);\n  }\n  #getLastCoords() {\n    const lastTop = this.#last.subarray(4, 6);\n    const lastBottom = this.#last.subarray(16, 18);\n    const [x, y, width, height] = this.#box;\n    return [(this.#lastX + (lastTop[0] - lastBottom[0]) / 2 - x) / width, (this.#lastY + (lastTop[1] - lastBottom[1]) / 2 - y) / height, (this.#lastX + (lastBottom[0] - lastTop[0]) / 2 - x) / width, (this.#lastY + (lastBottom[1] - lastTop[1]) / 2 - y) / height];\n  }\n  add({\n    x,\n    y\n  }) {\n    this.#lastX = x;\n    this.#lastY = y;\n    const [layerX, layerY, layerWidth, layerHeight] = this.#box;\n    let [x1, y1, x2, y2] = this.#last.subarray(8, 12);\n    const diffX = x - x2;\n    const diffY = y - y2;\n    const d = Math.hypot(diffX, diffY);\n    if (d < this.#min) {\n      return false;\n    }\n    const diffD = d - this.#min_dist;\n    const K = diffD / d;\n    const shiftX = K * diffX;\n    const shiftY = K * diffY;\n    let x0 = x1;\n    let y0 = y1;\n    x1 = x2;\n    y1 = y2;\n    x2 += shiftX;\n    y2 += shiftY;\n    this.#points?.push(x, y);\n    const nX = -shiftY / diffD;\n    const nY = shiftX / diffD;\n    const thX = nX * this.#thickness;\n    const thY = nY * this.#thickness;\n    this.#last.set(this.#last.subarray(2, 8), 0);\n    this.#last.set([x2 + thX, y2 + thY], 4);\n    this.#last.set(this.#last.subarray(14, 18), 12);\n    this.#last.set([x2 - thX, y2 - thY], 16);\n    if (isNaN(this.#last[6])) {\n      if (this.#top.length === 0) {\n        this.#last.set([x1 + thX, y1 + thY], 2);\n        this.#top.push(NaN, NaN, NaN, NaN, (x1 + thX - layerX) / layerWidth, (y1 + thY - layerY) / layerHeight);\n        this.#last.set([x1 - thX, y1 - thY], 14);\n        this.#bottom.push(NaN, NaN, NaN, NaN, (x1 - thX - layerX) / layerWidth, (y1 - thY - layerY) / layerHeight);\n      }\n      this.#last.set([x0, y0, x1, y1, x2, y2], 6);\n      return !this.isEmpty();\n    }\n    this.#last.set([x0, y0, x1, y1, x2, y2], 6);\n    const angle = Math.abs(Math.atan2(y0 - y1, x0 - x1) - Math.atan2(shiftY, shiftX));\n    if (angle < Math.PI / 2) {\n      [x1, y1, x2, y2] = this.#last.subarray(2, 6);\n      this.#top.push(NaN, NaN, NaN, NaN, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight);\n      [x1, y1, x0, y0] = this.#last.subarray(14, 18);\n      this.#bottom.push(NaN, NaN, NaN, NaN, ((x0 + x1) / 2 - layerX) / layerWidth, ((y0 + y1) / 2 - layerY) / layerHeight);\n      return true;\n    }\n    [x0, y0, x1, y1, x2, y2] = this.#last.subarray(0, 6);\n    this.#top.push(((x0 + 5 * x1) / 6 - layerX) / layerWidth, ((y0 + 5 * y1) / 6 - layerY) / layerHeight, ((5 * x1 + x2) / 6 - layerX) / layerWidth, ((5 * y1 + y2) / 6 - layerY) / layerHeight, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight);\n    [x2, y2, x1, y1, x0, y0] = this.#last.subarray(12, 18);\n    this.#bottom.push(((x0 + 5 * x1) / 6 - layerX) / layerWidth, ((y0 + 5 * y1) / 6 - layerY) / layerHeight, ((5 * x1 + x2) / 6 - layerX) / layerWidth, ((5 * y1 + y2) / 6 - layerY) / layerHeight, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight);\n    return true;\n  }\n  toSVGPath() {\n    if (this.isEmpty()) {\n      return \"\";\n    }\n    const top = this.#top;\n    const bottom = this.#bottom;\n    const lastTop = this.#last.subarray(4, 6);\n    const lastBottom = this.#last.subarray(16, 18);\n    const [x, y, width, height] = this.#box;\n    const [lastTopX, lastTopY, lastBottomX, lastBottomY] = this.#getLastCoords();\n    if (isNaN(this.#last[6]) && !this.isEmpty()) {\n      return `M${(this.#last[2] - x) / width} ${(this.#last[3] - y) / height} L${(this.#last[4] - x) / width} ${(this.#last[5] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${(this.#last[16] - x) / width} ${(this.#last[17] - y) / height} L${(this.#last[14] - x) / width} ${(this.#last[15] - y) / height} Z`;\n    }\n    const buffer = [];\n    buffer.push(`M${top[4]} ${top[5]}`);\n    for (let i = 6; i < top.length; i += 6) {\n      if (isNaN(top[i])) {\n        buffer.push(`L${top[i + 4]} ${top[i + 5]}`);\n      } else {\n        buffer.push(`C${top[i]} ${top[i + 1]} ${top[i + 2]} ${top[i + 3]} ${top[i + 4]} ${top[i + 5]}`);\n      }\n    }\n    buffer.push(`L${(lastTop[0] - x) / width} ${(lastTop[1] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${(lastBottom[0] - x) / width} ${(lastBottom[1] - y) / height}`);\n    for (let i = bottom.length - 6; i >= 6; i -= 6) {\n      if (isNaN(bottom[i])) {\n        buffer.push(`L${bottom[i + 4]} ${bottom[i + 5]}`);\n      } else {\n        buffer.push(`C${bottom[i]} ${bottom[i + 1]} ${bottom[i + 2]} ${bottom[i + 3]} ${bottom[i + 4]} ${bottom[i + 5]}`);\n      }\n    }\n    buffer.push(`L${bottom[4]} ${bottom[5]} Z`);\n    return buffer.join(\" \");\n  }\n  getOutlines() {\n    const top = this.#top;\n    const bottom = this.#bottom;\n    const last = this.#last;\n    const lastTop = last.subarray(4, 6);\n    const lastBottom = last.subarray(16, 18);\n    const [layerX, layerY, layerWidth, layerHeight] = this.#box;\n    const points = new Float64Array((this.#points?.length ?? 0) + 2);\n    for (let i = 0, ii = points.length - 2; i < ii; i += 2) {\n      points[i] = (this.#points[i] - layerX) / layerWidth;\n      points[i + 1] = (this.#points[i + 1] - layerY) / layerHeight;\n    }\n    points[points.length - 2] = (this.#lastX - layerX) / layerWidth;\n    points[points.length - 1] = (this.#lastY - layerY) / layerHeight;\n    const [lastTopX, lastTopY, lastBottomX, lastBottomY] = this.#getLastCoords();\n    if (isNaN(last[6]) && !this.isEmpty()) {\n      const outline = new Float64Array(36);\n      outline.set([NaN, NaN, NaN, NaN, (last[2] - layerX) / layerWidth, (last[3] - layerY) / layerHeight, NaN, NaN, NaN, NaN, (last[4] - layerX) / layerWidth, (last[5] - layerY) / layerHeight, NaN, NaN, NaN, NaN, lastTopX, lastTopY, NaN, NaN, NaN, NaN, lastBottomX, lastBottomY, NaN, NaN, NaN, NaN, (last[16] - layerX) / layerWidth, (last[17] - layerY) / layerHeight, NaN, NaN, NaN, NaN, (last[14] - layerX) / layerWidth, (last[15] - layerY) / layerHeight], 0);\n      return new FreeHighlightOutline(outline, points, this.#box, this.#scaleFactor, this.#innerMargin, this.#isLTR);\n    }\n    const outline = new Float64Array(this.#top.length + 24 + this.#bottom.length);\n    let N = top.length;\n    for (let i = 0; i < N; i += 2) {\n      if (isNaN(top[i])) {\n        outline[i] = outline[i + 1] = NaN;\n        continue;\n      }\n      outline[i] = top[i];\n      outline[i + 1] = top[i + 1];\n    }\n    outline.set([NaN, NaN, NaN, NaN, (lastTop[0] - layerX) / layerWidth, (lastTop[1] - layerY) / layerHeight, NaN, NaN, NaN, NaN, lastTopX, lastTopY, NaN, NaN, NaN, NaN, lastBottomX, lastBottomY, NaN, NaN, NaN, NaN, (lastBottom[0] - layerX) / layerWidth, (lastBottom[1] - layerY) / layerHeight], N);\n    N += 24;\n    for (let i = bottom.length - 6; i >= 6; i -= 6) {\n      for (let j = 0; j < 6; j += 2) {\n        if (isNaN(bottom[i + j])) {\n          outline[N] = outline[N + 1] = NaN;\n          N += 2;\n          continue;\n        }\n        outline[N] = bottom[i + j];\n        outline[N + 1] = bottom[i + j + 1];\n        N += 2;\n      }\n    }\n    outline.set([NaN, NaN, NaN, NaN, bottom[4], bottom[5]], N);\n    return new FreeHighlightOutline(outline, points, this.#box, this.#scaleFactor, this.#innerMargin, this.#isLTR);\n  }\n}\nclass FreeHighlightOutline extends Outline {\n  #box;\n  #bbox = null;\n  #innerMargin;\n  #isLTR;\n  #points;\n  #scaleFactor;\n  #outline;\n  constructor(outline, points, box, scaleFactor, innerMargin, isLTR) {\n    super();\n    this.#outline = outline;\n    this.#points = points;\n    this.#box = box;\n    this.#scaleFactor = scaleFactor;\n    this.#innerMargin = innerMargin;\n    this.#isLTR = isLTR;\n    this.#computeMinMax(isLTR);\n    const {\n      x,\n      y,\n      width,\n      height\n    } = this.#bbox;\n    for (let i = 0, ii = outline.length; i < ii; i += 2) {\n      outline[i] = (outline[i] - x) / width;\n      outline[i + 1] = (outline[i + 1] - y) / height;\n    }\n    for (let i = 0, ii = points.length; i < ii; i += 2) {\n      points[i] = (points[i] - x) / width;\n      points[i + 1] = (points[i + 1] - y) / height;\n    }\n  }\n  toSVGPath() {\n    const buffer = [`M${this.#outline[4]} ${this.#outline[5]}`];\n    for (let i = 6, ii = this.#outline.length; i < ii; i += 6) {\n      if (isNaN(this.#outline[i])) {\n        buffer.push(`L${this.#outline[i + 4]} ${this.#outline[i + 5]}`);\n        continue;\n      }\n      buffer.push(`C${this.#outline[i]} ${this.#outline[i + 1]} ${this.#outline[i + 2]} ${this.#outline[i + 3]} ${this.#outline[i + 4]} ${this.#outline[i + 5]}`);\n    }\n    buffer.push(\"Z\");\n    return buffer.join(\" \");\n  }\n  serialize([blX, blY, trX, trY], rotation) {\n    const width = trX - blX;\n    const height = trY - blY;\n    let outline;\n    let points;\n    switch (rotation) {\n      case 0:\n        outline = this.#rescale(this.#outline, blX, trY, width, -height);\n        points = this.#rescale(this.#points, blX, trY, width, -height);\n        break;\n      case 90:\n        outline = this.#rescaleAndSwap(this.#outline, blX, blY, width, height);\n        points = this.#rescaleAndSwap(this.#points, blX, blY, width, height);\n        break;\n      case 180:\n        outline = this.#rescale(this.#outline, trX, blY, -width, height);\n        points = this.#rescale(this.#points, trX, blY, -width, height);\n        break;\n      case 270:\n        outline = this.#rescaleAndSwap(this.#outline, trX, trY, -width, -height);\n        points = this.#rescaleAndSwap(this.#points, trX, trY, -width, -height);\n        break;\n    }\n    return {\n      outline: Array.from(outline),\n      points: [Array.from(points)]\n    };\n  }\n  #rescale(src, tx, ty, sx, sy) {\n    const dest = new Float64Array(src.length);\n    for (let i = 0, ii = src.length; i < ii; i += 2) {\n      dest[i] = tx + src[i] * sx;\n      dest[i + 1] = ty + src[i + 1] * sy;\n    }\n    return dest;\n  }\n  #rescaleAndSwap(src, tx, ty, sx, sy) {\n    const dest = new Float64Array(src.length);\n    for (let i = 0, ii = src.length; i < ii; i += 2) {\n      dest[i] = tx + src[i + 1] * sx;\n      dest[i + 1] = ty + src[i] * sy;\n    }\n    return dest;\n  }\n  #computeMinMax(isLTR) {\n    const outline = this.#outline;\n    let lastX = outline[4];\n    let lastY = outline[5];\n    let minX = lastX;\n    let minY = lastY;\n    let maxX = lastX;\n    let maxY = lastY;\n    let lastPointX = lastX;\n    let lastPointY = lastY;\n    const ltrCallback = isLTR ? Math.max : Math.min;\n    for (let i = 6, ii = outline.length; i < ii; i += 6) {\n      if (isNaN(outline[i])) {\n        minX = Math.min(minX, outline[i + 4]);\n        minY = Math.min(minY, outline[i + 5]);\n        maxX = Math.max(maxX, outline[i + 4]);\n        maxY = Math.max(maxY, outline[i + 5]);\n        if (lastPointY < outline[i + 5]) {\n          lastPointX = outline[i + 4];\n          lastPointY = outline[i + 5];\n        } else if (lastPointY === outline[i + 5]) {\n          lastPointX = ltrCallback(lastPointX, outline[i + 4]);\n        }\n      } else {\n        const bbox = Util.bezierBoundingBox(lastX, lastY, ...outline.slice(i, i + 6));\n        minX = Math.min(minX, bbox[0]);\n        minY = Math.min(minY, bbox[1]);\n        maxX = Math.max(maxX, bbox[2]);\n        maxY = Math.max(maxY, bbox[3]);\n        if (lastPointY < bbox[3]) {\n          lastPointX = bbox[2];\n          lastPointY = bbox[3];\n        } else if (lastPointY === bbox[3]) {\n          lastPointX = ltrCallback(lastPointX, bbox[2]);\n        }\n      }\n      lastX = outline[i + 4];\n      lastY = outline[i + 5];\n    }\n    const x = minX - this.#innerMargin,\n      y = minY - this.#innerMargin,\n      width = maxX - minX + 2 * this.#innerMargin,\n      height = maxY - minY + 2 * this.#innerMargin;\n    this.#bbox = {\n      x,\n      y,\n      width,\n      height,\n      lastPoint: [lastPointX, lastPointY]\n    };\n  }\n  get box() {\n    return this.#bbox;\n  }\n  getNewOutline(thickness, innerMargin) {\n    const {\n      x,\n      y,\n      width,\n      height\n    } = this.#bbox;\n    const [layerX, layerY, layerWidth, layerHeight] = this.#box;\n    const sx = width * layerWidth;\n    const sy = height * layerHeight;\n    const tx = x * layerWidth + layerX;\n    const ty = y * layerHeight + layerY;\n    const outliner = new FreeOutliner({\n      x: this.#points[0] * sx + tx,\n      y: this.#points[1] * sy + ty\n    }, this.#box, this.#scaleFactor, thickness, this.#isLTR, innerMargin ?? this.#innerMargin);\n    for (let i = 2; i < this.#points.length; i += 2) {\n      outliner.add({\n        x: this.#points[i] * sx + tx,\n        y: this.#points[i + 1] * sy + ty\n      });\n    }\n    return outliner.getOutlines();\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/editor/color_picker.js\n\n\n\nclass ColorPicker {\n  #boundKeyDown = this.#keyDown.bind(this);\n  #boundPointerDown = this.#pointerDown.bind(this);\n  #button = null;\n  #buttonSwatch = null;\n  #defaultColor;\n  #dropdown = null;\n  #dropdownWasFromKeyboard = false;\n  #isMainColorPicker = false;\n  #editor = null;\n  #eventBus;\n  #uiManager = null;\n  #type;\n  static get _keyboardManager() {\n    return shadow(this, \"_keyboardManager\", new KeyboardManager([[[\"Escape\", \"mac+Escape\"], ColorPicker.prototype._hideDropdownFromKeyboard], [[\" \", \"mac+ \"], ColorPicker.prototype._colorSelectFromKeyboard], [[\"ArrowDown\", \"ArrowRight\", \"mac+ArrowDown\", \"mac+ArrowRight\"], ColorPicker.prototype._moveToNext], [[\"ArrowUp\", \"ArrowLeft\", \"mac+ArrowUp\", \"mac+ArrowLeft\"], ColorPicker.prototype._moveToPrevious], [[\"Home\", \"mac+Home\"], ColorPicker.prototype._moveToBeginning], [[\"End\", \"mac+End\"], ColorPicker.prototype._moveToEnd]]));\n  }\n  constructor({\n    editor = null,\n    uiManager = null\n  }) {\n    if (editor) {\n      this.#isMainColorPicker = false;\n      this.#type = AnnotationEditorParamsType.HIGHLIGHT_COLOR;\n      this.#editor = editor;\n    } else {\n      this.#isMainColorPicker = true;\n      this.#type = AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR;\n    }\n    this.#uiManager = editor?._uiManager || uiManager;\n    this.#eventBus = this.#uiManager._eventBus;\n    this.#defaultColor = editor?.color || this.#uiManager?.highlightColors.values().next().value || \"#FFFF98\";\n  }\n  renderButton() {\n    const button = this.#button = document.createElement(\"button\");\n    button.className = \"colorPicker\";\n    button.tabIndex = \"0\";\n    button.setAttribute(\"data-l10n-id\", \"pdfjs-editor-colorpicker-button\");\n    button.setAttribute(\"aria-haspopup\", true);\n    button.addEventListener(\"click\", this.#openDropdown.bind(this));\n    button.addEventListener(\"keydown\", this.#boundKeyDown);\n    const swatch = this.#buttonSwatch = document.createElement(\"span\");\n    swatch.className = \"swatch\";\n    swatch.setAttribute(\"aria-hidden\", true);\n    swatch.style.backgroundColor = this.#defaultColor;\n    button.append(swatch);\n    return button;\n  }\n  renderMainDropdown() {\n    const dropdown = this.#dropdown = this.#getDropdownRoot();\n    dropdown.setAttribute(\"aria-orientation\", \"horizontal\");\n    dropdown.setAttribute(\"aria-labelledby\", \"highlightColorPickerLabel\");\n    return dropdown;\n  }\n  #getDropdownRoot() {\n    const div = document.createElement(\"div\");\n    div.addEventListener(\"contextmenu\", noContextMenu);\n    div.className = \"dropdown\";\n    div.role = \"listbox\";\n    div.setAttribute(\"aria-multiselectable\", false);\n    div.setAttribute(\"aria-orientation\", \"vertical\");\n    div.setAttribute(\"data-l10n-id\", \"pdfjs-editor-colorpicker-dropdown\");\n    for (const [name, color] of this.#uiManager.highlightColors) {\n      const button = document.createElement(\"button\");\n      button.tabIndex = \"0\";\n      button.role = \"option\";\n      button.setAttribute(\"data-color\", color);\n      button.title = name;\n      button.setAttribute(\"data-l10n-id\", `pdfjs-editor-colorpicker-${name}`);\n      const swatch = document.createElement(\"span\");\n      button.append(swatch);\n      swatch.className = \"swatch\";\n      swatch.style.backgroundColor = color;\n      button.setAttribute(\"aria-selected\", color === this.#defaultColor);\n      button.addEventListener(\"click\", this.#colorSelect.bind(this, color));\n      div.append(button);\n    }\n    div.addEventListener(\"keydown\", this.#boundKeyDown);\n    return div;\n  }\n  #colorSelect(color, event) {\n    event.stopPropagation();\n    this.#eventBus.dispatch(\"switchannotationeditorparams\", {\n      source: this,\n      type: this.#type,\n      value: color\n    });\n  }\n  _colorSelectFromKeyboard(event) {\n    if (event.target === this.#button) {\n      this.#openDropdown(event);\n      return;\n    }\n    const color = event.target.getAttribute(\"data-color\");\n    if (!color) {\n      return;\n    }\n    this.#colorSelect(color, event);\n  }\n  _moveToNext(event) {\n    if (!this.#isDropdownVisible) {\n      this.#openDropdown(event);\n      return;\n    }\n    if (event.target === this.#button) {\n      this.#dropdown.firstChild?.focus();\n      return;\n    }\n    event.target.nextSibling?.focus();\n  }\n  _moveToPrevious(event) {\n    if (event.target === this.#dropdown?.firstChild || event.target === this.#button) {\n      if (this.#isDropdownVisible) {\n        this._hideDropdownFromKeyboard();\n      }\n      return;\n    }\n    if (!this.#isDropdownVisible) {\n      this.#openDropdown(event);\n    }\n    event.target.previousSibling?.focus();\n  }\n  _moveToBeginning(event) {\n    if (!this.#isDropdownVisible) {\n      this.#openDropdown(event);\n      return;\n    }\n    this.#dropdown.firstChild?.focus();\n  }\n  _moveToEnd(event) {\n    if (!this.#isDropdownVisible) {\n      this.#openDropdown(event);\n      return;\n    }\n    this.#dropdown.lastChild?.focus();\n  }\n  #keyDown(event) {\n    ColorPicker._keyboardManager.exec(this, event);\n  }\n  #openDropdown(event) {\n    if (this.#isDropdownVisible) {\n      this.hideDropdown();\n      return;\n    }\n    this.#dropdownWasFromKeyboard = event.detail === 0;\n    window.addEventListener(\"pointerdown\", this.#boundPointerDown);\n    if (this.#dropdown) {\n      this.#dropdown.classList.remove(\"hidden\");\n      return;\n    }\n    const root = this.#dropdown = this.#getDropdownRoot();\n    this.#button.append(root);\n  }\n  #pointerDown(event) {\n    if (this.#dropdown?.contains(event.target)) {\n      return;\n    }\n    this.hideDropdown();\n  }\n  hideDropdown() {\n    this.#dropdown?.classList.add(\"hidden\");\n    window.removeEventListener(\"pointerdown\", this.#boundPointerDown);\n  }\n  get #isDropdownVisible() {\n    return this.#dropdown && !this.#dropdown.classList.contains(\"hidden\");\n  }\n  _hideDropdownFromKeyboard() {\n    if (this.#isMainColorPicker) {\n      return;\n    }\n    if (!this.#isDropdownVisible) {\n      this.#editor?.unselect();\n      return;\n    }\n    this.hideDropdown();\n    this.#button.focus({\n      preventScroll: true,\n      focusVisible: this.#dropdownWasFromKeyboard\n    });\n  }\n  updateColor(color) {\n    if (this.#buttonSwatch) {\n      this.#buttonSwatch.style.backgroundColor = color;\n    }\n    if (!this.#dropdown) {\n      return;\n    }\n    const i = this.#uiManager.highlightColors.values();\n    for (const child of this.#dropdown.children) {\n      child.setAttribute(\"aria-selected\", i.next().value === color);\n    }\n  }\n  destroy() {\n    this.#button?.remove();\n    this.#button = null;\n    this.#buttonSwatch = null;\n    this.#dropdown?.remove();\n    this.#dropdown = null;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/editor/highlight.js\n\n\n\n\n\n\nclass HighlightEditor extends AnnotationEditor {\n  #anchorNode = null;\n  #anchorOffset = 0;\n  #boxes;\n  #clipPathId = null;\n  #colorPicker = null;\n  #focusOutlines = null;\n  #focusNode = null;\n  #focusOffset = 0;\n  #highlightDiv = null;\n  #highlightOutlines = null;\n  #id = null;\n  #isFreeHighlight = false;\n  #boundKeydown = this.#keydown.bind(this);\n  #lastPoint = null;\n  #opacity;\n  #outlineId = null;\n  #text = \"\";\n  #thickness;\n  #methodOfCreation = \"\";\n  static _defaultColor = null;\n  static _defaultOpacity = 1;\n  static _defaultThickness = 12;\n  static _l10nPromise;\n  static _type = \"highlight\";\n  static _editorType = AnnotationEditorType.HIGHLIGHT;\n  static _freeHighlightId = -1;\n  static _freeHighlight = null;\n  static _freeHighlightClipId = \"\";\n  static get _keyboardManager() {\n    const proto = HighlightEditor.prototype;\n    return shadow(this, \"_keyboardManager\", new KeyboardManager([[[\"ArrowLeft\", \"mac+ArrowLeft\"], proto._moveCaret, {\n      args: [0]\n    }], [[\"ArrowRight\", \"mac+ArrowRight\"], proto._moveCaret, {\n      args: [1]\n    }], [[\"ArrowUp\", \"mac+ArrowUp\"], proto._moveCaret, {\n      args: [2]\n    }], [[\"ArrowDown\", \"mac+ArrowDown\"], proto._moveCaret, {\n      args: [3]\n    }]]));\n  }\n  constructor(params) {\n    super({\n      ...params,\n      name: \"highlightEditor\"\n    });\n    this.color = params.color || HighlightEditor._defaultColor;\n    this.#thickness = params.thickness || HighlightEditor._defaultThickness;\n    this.#opacity = params.opacity || HighlightEditor._defaultOpacity;\n    this.#boxes = params.boxes || null;\n    this.#methodOfCreation = params.methodOfCreation || \"\";\n    this.#text = params.text || \"\";\n    this._isDraggable = false;\n    if (params.highlightId > -1) {\n      this.#isFreeHighlight = true;\n      this.#createFreeOutlines(params);\n      this.#addToDrawLayer();\n    } else {\n      this.#anchorNode = params.anchorNode;\n      this.#anchorOffset = params.anchorOffset;\n      this.#focusNode = params.focusNode;\n      this.#focusOffset = params.focusOffset;\n      this.#createOutlines();\n      this.#addToDrawLayer();\n      this.rotate(this.rotation);\n    }\n  }\n  get telemetryInitialData() {\n    return {\n      action: \"added\",\n      type: this.#isFreeHighlight ? \"free_highlight\" : \"highlight\",\n      color: this._uiManager.highlightColorNames.get(this.color),\n      thickness: this.#thickness,\n      methodOfCreation: this.#methodOfCreation\n    };\n  }\n  get telemetryFinalData() {\n    return {\n      type: \"highlight\",\n      color: this._uiManager.highlightColorNames.get(this.color)\n    };\n  }\n  static computeTelemetryFinalData(data) {\n    return {\n      numberOfColors: data.get(\"color\").size\n    };\n  }\n  #createOutlines() {\n    const outliner = new Outliner(this.#boxes, 0.001);\n    this.#highlightOutlines = outliner.getOutlines();\n    ({\n      x: this.x,\n      y: this.y,\n      width: this.width,\n      height: this.height\n    } = this.#highlightOutlines.box);\n    const outlinerForOutline = new Outliner(this.#boxes, 0.0025, 0.001, this._uiManager.direction === \"ltr\");\n    this.#focusOutlines = outlinerForOutline.getOutlines();\n    const {\n      lastPoint\n    } = this.#focusOutlines.box;\n    this.#lastPoint = [(lastPoint[0] - this.x) / this.width, (lastPoint[1] - this.y) / this.height];\n  }\n  #createFreeOutlines({\n    highlightOutlines,\n    highlightId,\n    clipPathId\n  }) {\n    this.#highlightOutlines = highlightOutlines;\n    const extraThickness = 1.5;\n    this.#focusOutlines = highlightOutlines.getNewOutline(this.#thickness / 2 + extraThickness, 0.0025);\n    if (highlightId >= 0) {\n      this.#id = highlightId;\n      this.#clipPathId = clipPathId;\n      this.parent.drawLayer.finalizeLine(highlightId, highlightOutlines);\n      this.#outlineId = this.parent.drawLayer.highlightOutline(this.#focusOutlines);\n    } else if (this.parent) {\n      const angle = this.parent.viewport.rotation;\n      this.parent.drawLayer.updateLine(this.#id, highlightOutlines);\n      this.parent.drawLayer.updateBox(this.#id, HighlightEditor.#rotateBbox(this.#highlightOutlines.box, (angle - this.rotation + 360) % 360));\n      this.parent.drawLayer.updateLine(this.#outlineId, this.#focusOutlines);\n      this.parent.drawLayer.updateBox(this.#outlineId, HighlightEditor.#rotateBbox(this.#focusOutlines.box, angle));\n    }\n    const {\n      x,\n      y,\n      width,\n      height\n    } = highlightOutlines.box;\n    switch (this.rotation) {\n      case 0:\n        this.x = x;\n        this.y = y;\n        this.width = width;\n        this.height = height;\n        break;\n      case 90:\n        {\n          const [pageWidth, pageHeight] = this.parentDimensions;\n          this.x = y;\n          this.y = 1 - x;\n          this.width = width * pageHeight / pageWidth;\n          this.height = height * pageWidth / pageHeight;\n          break;\n        }\n      case 180:\n        this.x = 1 - x;\n        this.y = 1 - y;\n        this.width = width;\n        this.height = height;\n        break;\n      case 270:\n        {\n          const [pageWidth, pageHeight] = this.parentDimensions;\n          this.x = 1 - y;\n          this.y = x;\n          this.width = width * pageHeight / pageWidth;\n          this.height = height * pageWidth / pageHeight;\n          break;\n        }\n    }\n    const {\n      lastPoint\n    } = this.#focusOutlines.box;\n    this.#lastPoint = [(lastPoint[0] - x) / width, (lastPoint[1] - y) / height];\n  }\n  static initialize(l10n, uiManager) {\n    AnnotationEditor.initialize(l10n, uiManager);\n    HighlightEditor._defaultColor ||= uiManager.highlightColors?.values().next().value || \"#fff066\";\n  }\n  static updateDefaultParams(type, value) {\n    switch (type) {\n      case AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR:\n        HighlightEditor._defaultColor = value;\n        break;\n      case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS:\n        HighlightEditor._defaultThickness = value;\n        break;\n    }\n  }\n  translateInPage(x, y) {}\n  get toolbarPosition() {\n    return this.#lastPoint;\n  }\n  updateParams(type, value) {\n    switch (type) {\n      case AnnotationEditorParamsType.HIGHLIGHT_COLOR:\n        this.#updateColor(value);\n        break;\n      case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS:\n        this.#updateThickness(value);\n        break;\n    }\n  }\n  static get defaultPropertiesToUpdate() {\n    return [[AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR, HighlightEditor._defaultColor], [AnnotationEditorParamsType.HIGHLIGHT_THICKNESS, HighlightEditor._defaultThickness]];\n  }\n  get propertiesToUpdate() {\n    return [[AnnotationEditorParamsType.HIGHLIGHT_COLOR, this.color || HighlightEditor._defaultColor], [AnnotationEditorParamsType.HIGHLIGHT_THICKNESS, this.#thickness || HighlightEditor._defaultThickness], [AnnotationEditorParamsType.HIGHLIGHT_FREE, this.#isFreeHighlight]];\n  }\n  #updateColor(color) {\n    const setColor = col => {\n      this.color = col;\n      this.parent?.drawLayer.changeColor(this.#id, col);\n      this.#colorPicker?.updateColor(col);\n    };\n    const savedColor = this.color;\n    this.addCommands({\n      cmd: setColor.bind(this, color),\n      undo: setColor.bind(this, savedColor),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type: AnnotationEditorParamsType.HIGHLIGHT_COLOR,\n      overwriteIfSameType: true,\n      keepUndo: true\n    });\n    this._reportTelemetry({\n      action: \"color_changed\",\n      color: this._uiManager.highlightColorNames.get(color)\n    }, true);\n  }\n  #updateThickness(thickness) {\n    const savedThickness = this.#thickness;\n    const setThickness = th => {\n      this.#thickness = th;\n      this.#changeThickness(th);\n    };\n    this.addCommands({\n      cmd: setThickness.bind(this, thickness),\n      undo: setThickness.bind(this, savedThickness),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type: AnnotationEditorParamsType.INK_THICKNESS,\n      overwriteIfSameType: true,\n      keepUndo: true\n    });\n    this._reportTelemetry({\n      action: \"thickness_changed\",\n      thickness\n    }, true);\n  }\n  async addEditToolbar() {\n    const toolbar = await super.addEditToolbar();\n    if (!toolbar) {\n      return null;\n    }\n    if (this._uiManager.highlightColors) {\n      this.#colorPicker = new ColorPicker({\n        editor: this\n      });\n      toolbar.addColorPicker(this.#colorPicker);\n    }\n    return toolbar;\n  }\n  disableEditing() {\n    super.disableEditing();\n    this.div.classList.toggle(\"disabled\", true);\n  }\n  enableEditing() {\n    super.enableEditing();\n    this.div.classList.toggle(\"disabled\", false);\n  }\n  fixAndSetPosition() {\n    return super.fixAndSetPosition(this.#getRotation());\n  }\n  getBaseTranslation() {\n    return [0, 0];\n  }\n  getRect(tx, ty) {\n    return super.getRect(tx, ty, this.#getRotation());\n  }\n  onceAdded() {\n    this.parent.addUndoableEditor(this);\n    this.div.focus();\n  }\n  remove() {\n    this.#cleanDrawLayer();\n    this._reportTelemetry({\n      action: \"deleted\"\n    });\n    super.remove();\n  }\n  rebuild() {\n    if (!this.parent) {\n      return;\n    }\n    super.rebuild();\n    if (this.div === null) {\n      return;\n    }\n    this.#addToDrawLayer();\n    if (!this.isAttachedToDOM) {\n      this.parent.add(this);\n    }\n  }\n  setParent(parent) {\n    let mustBeSelected = false;\n    if (this.parent && !parent) {\n      this.#cleanDrawLayer();\n    } else if (parent) {\n      this.#addToDrawLayer(parent);\n      mustBeSelected = !this.parent && this.div?.classList.contains(\"selectedEditor\");\n    }\n    super.setParent(parent);\n    this.show(this._isVisible);\n    if (mustBeSelected) {\n      this.select();\n    }\n  }\n  #changeThickness(thickness) {\n    if (!this.#isFreeHighlight) {\n      return;\n    }\n    this.#createFreeOutlines({\n      highlightOutlines: this.#highlightOutlines.getNewOutline(thickness / 2)\n    });\n    this.fixAndSetPosition();\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    this.setDims(this.width * parentWidth, this.height * parentHeight);\n  }\n  #cleanDrawLayer() {\n    if (this.#id === null || !this.parent) {\n      return;\n    }\n    this.parent.drawLayer.remove(this.#id);\n    this.#id = null;\n    this.parent.drawLayer.remove(this.#outlineId);\n    this.#outlineId = null;\n  }\n  #addToDrawLayer(parent = this.parent) {\n    if (this.#id !== null) {\n      return;\n    }\n    ({\n      id: this.#id,\n      clipPathId: this.#clipPathId\n    } = parent.drawLayer.highlight(this.#highlightOutlines, this.color, this.#opacity));\n    this.#outlineId = parent.drawLayer.highlightOutline(this.#focusOutlines);\n    if (this.#highlightDiv) {\n      this.#highlightDiv.style.clipPath = this.#clipPathId;\n    }\n  }\n  static #rotateBbox({\n    x,\n    y,\n    width,\n    height\n  }, angle) {\n    switch (angle) {\n      case 90:\n        return {\n          x: 1 - y - height,\n          y: x,\n          width: height,\n          height: width\n        };\n      case 180:\n        return {\n          x: 1 - x - width,\n          y: 1 - y - height,\n          width,\n          height\n        };\n      case 270:\n        return {\n          x: y,\n          y: 1 - x - width,\n          width: height,\n          height: width\n        };\n    }\n    return {\n      x,\n      y,\n      width,\n      height\n    };\n  }\n  rotate(angle) {\n    const {\n      drawLayer\n    } = this.parent;\n    let box;\n    if (this.#isFreeHighlight) {\n      angle = (angle - this.rotation + 360) % 360;\n      box = HighlightEditor.#rotateBbox(this.#highlightOutlines.box, angle);\n    } else {\n      box = HighlightEditor.#rotateBbox(this, angle);\n    }\n    drawLayer.rotate(this.#id, angle);\n    drawLayer.rotate(this.#outlineId, angle);\n    drawLayer.updateBox(this.#id, box);\n    drawLayer.updateBox(this.#outlineId, HighlightEditor.#rotateBbox(this.#focusOutlines.box, angle));\n  }\n  render() {\n    if (this.div) {\n      return this.div;\n    }\n    const div = super.render();\n    if (this.#text) {\n      div.setAttribute(\"aria-label\", this.#text);\n      div.setAttribute(\"role\", \"mark\");\n    }\n    if (this.#isFreeHighlight) {\n      div.classList.add(\"free\");\n    } else {\n      this.div.addEventListener(\"keydown\", this.#boundKeydown);\n    }\n    const highlightDiv = this.#highlightDiv = document.createElement(\"div\");\n    div.append(highlightDiv);\n    highlightDiv.setAttribute(\"aria-hidden\", \"true\");\n    highlightDiv.className = \"internal\";\n    highlightDiv.style.clipPath = this.#clipPathId;\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    this.setDims(this.width * parentWidth, this.height * parentHeight);\n    bindEvents(this, this.#highlightDiv, [\"pointerover\", \"pointerleave\"]);\n    this.enableEditing();\n    return div;\n  }\n  pointerover() {\n    this.parent.drawLayer.addClass(this.#outlineId, \"hovered\");\n  }\n  pointerleave() {\n    this.parent.drawLayer.removeClass(this.#outlineId, \"hovered\");\n  }\n  #keydown(event) {\n    HighlightEditor._keyboardManager.exec(this, event);\n  }\n  _moveCaret(direction) {\n    this.parent.unselect(this);\n    switch (direction) {\n      case 0:\n      case 2:\n        this.#setCaret(true);\n        break;\n      case 1:\n      case 3:\n        this.#setCaret(false);\n        break;\n    }\n  }\n  #setCaret(start) {\n    if (!this.#anchorNode) {\n      return;\n    }\n    const selection = window.getSelection();\n    if (start) {\n      selection.setPosition(this.#anchorNode, this.#anchorOffset);\n    } else {\n      selection.setPosition(this.#focusNode, this.#focusOffset);\n    }\n  }\n  select() {\n    super.select();\n    if (!this.#outlineId) {\n      return;\n    }\n    this.parent?.drawLayer.removeClass(this.#outlineId, \"hovered\");\n    this.parent?.drawLayer.addClass(this.#outlineId, \"selected\");\n  }\n  unselect() {\n    super.unselect();\n    if (!this.#outlineId) {\n      return;\n    }\n    this.parent?.drawLayer.removeClass(this.#outlineId, \"selected\");\n    if (!this.#isFreeHighlight) {\n      this.#setCaret(false);\n    }\n  }\n  get _mustFixPosition() {\n    return !this.#isFreeHighlight;\n  }\n  show(visible = this._isVisible) {\n    super.show(visible);\n    if (this.parent) {\n      this.parent.drawLayer.show(this.#id, visible);\n      this.parent.drawLayer.show(this.#outlineId, visible);\n    }\n  }\n  #getRotation() {\n    return this.#isFreeHighlight ? this.rotation : 0;\n  }\n  #serializeBoxes() {\n    if (this.#isFreeHighlight) {\n      return null;\n    }\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    const boxes = this.#boxes;\n    const quadPoints = new Array(boxes.length * 8);\n    let i = 0;\n    for (const {\n      x,\n      y,\n      width,\n      height\n    } of boxes) {\n      const sx = x * pageWidth;\n      const sy = (1 - y - height) * pageHeight;\n      quadPoints[i] = quadPoints[i + 4] = sx;\n      quadPoints[i + 1] = quadPoints[i + 3] = sy;\n      quadPoints[i + 2] = quadPoints[i + 6] = sx + width * pageWidth;\n      quadPoints[i + 5] = quadPoints[i + 7] = sy + height * pageHeight;\n      i += 8;\n    }\n    return quadPoints;\n  }\n  #serializeOutlines(rect) {\n    return this.#highlightOutlines.serialize(rect, this.#getRotation());\n  }\n  static startHighlighting(parent, isLTR, {\n    target: textLayer,\n    x,\n    y\n  }) {\n    const {\n      x: layerX,\n      y: layerY,\n      width: parentWidth,\n      height: parentHeight\n    } = textLayer.getBoundingClientRect();\n    const pointerMove = e => {\n      this.#highlightMove(parent, e);\n    };\n    const pointerDownOptions = {\n      capture: true,\n      passive: false\n    };\n    const pointerDown = e => {\n      e.preventDefault();\n      e.stopPropagation();\n    };\n    const pointerUpCallback = e => {\n      textLayer.removeEventListener(\"pointermove\", pointerMove);\n      window.removeEventListener(\"blur\", pointerUpCallback);\n      window.removeEventListener(\"pointerup\", pointerUpCallback);\n      window.removeEventListener(\"pointerdown\", pointerDown, pointerDownOptions);\n      window.removeEventListener(\"contextmenu\", noContextMenu);\n      this.#endHighlight(parent, e);\n    };\n    window.addEventListener(\"blur\", pointerUpCallback);\n    window.addEventListener(\"pointerup\", pointerUpCallback);\n    window.addEventListener(\"pointerdown\", pointerDown, pointerDownOptions);\n    window.addEventListener(\"contextmenu\", noContextMenu);\n    textLayer.addEventListener(\"pointermove\", pointerMove);\n    this._freeHighlight = new FreeOutliner({\n      x,\n      y\n    }, [layerX, layerY, parentWidth, parentHeight], parent.scale, this._defaultThickness / 2, isLTR, 0.001);\n    ({\n      id: this._freeHighlightId,\n      clipPathId: this._freeHighlightClipId\n    } = parent.drawLayer.highlight(this._freeHighlight, this._defaultColor, this._defaultOpacity, true));\n  }\n  static #highlightMove(parent, event) {\n    if (this._freeHighlight.add(event)) {\n      parent.drawLayer.updatePath(this._freeHighlightId, this._freeHighlight);\n    }\n  }\n  static #endHighlight(parent, event) {\n    if (!this._freeHighlight.isEmpty()) {\n      parent.createAndAddNewEditor(event, false, {\n        highlightId: this._freeHighlightId,\n        highlightOutlines: this._freeHighlight.getOutlines(),\n        clipPathId: this._freeHighlightClipId,\n        methodOfCreation: \"main_toolbar\"\n      });\n    } else {\n      parent.drawLayer.removeFreeHighlight(this._freeHighlightId);\n    }\n    this._freeHighlightId = -1;\n    this._freeHighlight = null;\n    this._freeHighlightClipId = \"\";\n  }\n  static deserialize(data, parent, uiManager) {\n    const editor = super.deserialize(data, parent, uiManager);\n    const {\n      rect: [blX, blY, trX, trY],\n      color,\n      quadPoints\n    } = data;\n    editor.color = Util.makeHexColor(...color);\n    editor.#opacity = data.opacity;\n    const [pageWidth, pageHeight] = editor.pageDimensions;\n    editor.width = (trX - blX) / pageWidth;\n    editor.height = (trY - blY) / pageHeight;\n    const boxes = editor.#boxes = [];\n    for (let i = 0; i < quadPoints.length; i += 8) {\n      boxes.push({\n        x: (quadPoints[4] - trX) / pageWidth,\n        y: (trY - (1 - quadPoints[i + 5])) / pageHeight,\n        width: (quadPoints[i + 2] - quadPoints[i]) / pageWidth,\n        height: (quadPoints[i + 5] - quadPoints[i + 1]) / pageHeight\n      });\n    }\n    editor.#createOutlines();\n    return editor;\n  }\n  serialize(isForCopying = false) {\n    if (this.isEmpty() || isForCopying) {\n      return null;\n    }\n    const rect = this.getRect(0, 0);\n    const color = AnnotationEditor._colorManager.convert(this.color);\n    return {\n      annotationType: AnnotationEditorType.HIGHLIGHT,\n      color,\n      opacity: this.#opacity,\n      thickness: this.#thickness,\n      quadPoints: this.#serializeBoxes(),\n      outlines: this.#serializeOutlines(rect),\n      pageIndex: this.pageIndex,\n      rect,\n      rotation: this.#getRotation(),\n      structTreeParentId: this._structTreeParentId\n    };\n  }\n  static canCreateNewEmptyEditor() {\n    return false;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/editor/ink.js\n\n\n\n\n\nclass InkEditor extends AnnotationEditor {\n  #baseHeight = 0;\n  #baseWidth = 0;\n  #boundCanvasPointermove = this.canvasPointermove.bind(this);\n  #boundCanvasPointerleave = this.canvasPointerleave.bind(this);\n  #boundCanvasPointerup = this.canvasPointerup.bind(this);\n  #boundCanvasPointerdown = this.canvasPointerdown.bind(this);\n  #canvasContextMenuTimeoutId = null;\n  #currentPath2D = new Path2D();\n  #disableEditing = false;\n  #hasSomethingToDraw = false;\n  #isCanvasInitialized = false;\n  #observer = null;\n  #realWidth = 0;\n  #realHeight = 0;\n  #requestFrameCallback = null;\n  static _defaultColor = null;\n  static _defaultOpacity = 1;\n  static _defaultThickness = 1;\n  static _type = \"ink\";\n  static _editorType = AnnotationEditorType.INK;\n  constructor(params) {\n    super({\n      ...params,\n      name: \"inkEditor\"\n    });\n    this.color = params.color || null;\n    this.thickness = params.thickness || null;\n    this.opacity = params.opacity || null;\n    this.paths = [];\n    this.bezierPath2D = [];\n    this.allRawPaths = [];\n    this.currentPath = [];\n    this.scaleFactor = 1;\n    this.translationX = this.translationY = 0;\n    this.x = 0;\n    this.y = 0;\n    this._willKeepAspectRatio = true;\n  }\n  static initialize(l10n, uiManager) {\n    AnnotationEditor.initialize(l10n, uiManager);\n  }\n  static updateDefaultParams(type, value) {\n    switch (type) {\n      case AnnotationEditorParamsType.INK_THICKNESS:\n        InkEditor._defaultThickness = value;\n        break;\n      case AnnotationEditorParamsType.INK_COLOR:\n        InkEditor._defaultColor = value;\n        break;\n      case AnnotationEditorParamsType.INK_OPACITY:\n        InkEditor._defaultOpacity = value / 100;\n        break;\n    }\n  }\n  updateParams(type, value) {\n    switch (type) {\n      case AnnotationEditorParamsType.INK_THICKNESS:\n        this.#updateThickness(value);\n        break;\n      case AnnotationEditorParamsType.INK_COLOR:\n        this.#updateColor(value);\n        break;\n      case AnnotationEditorParamsType.INK_OPACITY:\n        this.#updateOpacity(value);\n        break;\n    }\n  }\n  static get defaultPropertiesToUpdate() {\n    return [[AnnotationEditorParamsType.INK_THICKNESS, InkEditor._defaultThickness], [AnnotationEditorParamsType.INK_COLOR, InkEditor._defaultColor || AnnotationEditor._defaultLineColor], [AnnotationEditorParamsType.INK_OPACITY, Math.round(InkEditor._defaultOpacity * 100)]];\n  }\n  get propertiesToUpdate() {\n    return [[AnnotationEditorParamsType.INK_THICKNESS, this.thickness || InkEditor._defaultThickness], [AnnotationEditorParamsType.INK_COLOR, this.color || InkEditor._defaultColor || AnnotationEditor._defaultLineColor], [AnnotationEditorParamsType.INK_OPACITY, Math.round(100 * (this.opacity ?? InkEditor._defaultOpacity))]];\n  }\n  #updateThickness(thickness) {\n    const setThickness = th => {\n      this.thickness = th;\n      this.#fitToContent();\n    };\n    const savedThickness = this.thickness;\n    this.addCommands({\n      cmd: setThickness.bind(this, thickness),\n      undo: setThickness.bind(this, savedThickness),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type: AnnotationEditorParamsType.INK_THICKNESS,\n      overwriteIfSameType: true,\n      keepUndo: true\n    });\n  }\n  #updateColor(color) {\n    const setColor = col => {\n      this.color = col;\n      this.#redraw();\n    };\n    const savedColor = this.color;\n    this.addCommands({\n      cmd: setColor.bind(this, color),\n      undo: setColor.bind(this, savedColor),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type: AnnotationEditorParamsType.INK_COLOR,\n      overwriteIfSameType: true,\n      keepUndo: true\n    });\n  }\n  #updateOpacity(opacity) {\n    const setOpacity = op => {\n      this.opacity = op;\n      this.#redraw();\n    };\n    opacity /= 100;\n    const savedOpacity = this.opacity;\n    this.addCommands({\n      cmd: setOpacity.bind(this, opacity),\n      undo: setOpacity.bind(this, savedOpacity),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type: AnnotationEditorParamsType.INK_OPACITY,\n      overwriteIfSameType: true,\n      keepUndo: true\n    });\n  }\n  rebuild() {\n    if (!this.parent) {\n      return;\n    }\n    super.rebuild();\n    if (this.div === null) {\n      return;\n    }\n    if (!this.canvas) {\n      this.#createCanvas();\n      this.#createObserver();\n    }\n    if (!this.isAttachedToDOM) {\n      this.parent.add(this);\n      this.#setCanvasDims();\n    }\n    this.#fitToContent();\n  }\n  remove() {\n    if (this.canvas === null) {\n      return;\n    }\n    if (!this.isEmpty()) {\n      this.commit();\n    }\n    this.canvas.width = this.canvas.height = 0;\n    this.canvas.remove();\n    this.canvas = null;\n    if (this.#canvasContextMenuTimeoutId) {\n      clearTimeout(this.#canvasContextMenuTimeoutId);\n      this.#canvasContextMenuTimeoutId = null;\n    }\n    this.#observer.disconnect();\n    this.#observer = null;\n    super.remove();\n  }\n  setParent(parent) {\n    if (!this.parent && parent) {\n      this._uiManager.removeShouldRescale(this);\n    } else if (this.parent && parent === null) {\n      this._uiManager.addShouldRescale(this);\n    }\n    super.setParent(parent);\n  }\n  onScaleChanging() {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    const width = this.width * parentWidth;\n    const height = this.height * parentHeight;\n    this.setDimensions(width, height);\n  }\n  enableEditMode() {\n    if (this.#disableEditing || this.canvas === null) {\n      return;\n    }\n    super.enableEditMode();\n    this._isDraggable = false;\n    this.canvas.addEventListener(\"pointerdown\", this.#boundCanvasPointerdown);\n  }\n  disableEditMode() {\n    if (!this.isInEditMode() || this.canvas === null) {\n      return;\n    }\n    super.disableEditMode();\n    this._isDraggable = !this.isEmpty();\n    this.div.classList.remove(\"editing\");\n    this.canvas.removeEventListener(\"pointerdown\", this.#boundCanvasPointerdown);\n  }\n  onceAdded() {\n    this._isDraggable = !this.isEmpty();\n  }\n  isEmpty() {\n    return this.paths.length === 0 || this.paths.length === 1 && this.paths[0].length === 0;\n  }\n  #getInitialBBox() {\n    const {\n      parentRotation,\n      parentDimensions: [width, height]\n    } = this;\n    switch (parentRotation) {\n      case 90:\n        return [0, height, height, width];\n      case 180:\n        return [width, height, width, height];\n      case 270:\n        return [width, 0, height, width];\n      default:\n        return [0, 0, width, height];\n    }\n  }\n  #setStroke() {\n    const {\n      ctx,\n      color,\n      opacity,\n      thickness,\n      parentScale,\n      scaleFactor\n    } = this;\n    ctx.lineWidth = thickness * parentScale / scaleFactor;\n    ctx.lineCap = \"round\";\n    ctx.lineJoin = \"round\";\n    ctx.miterLimit = 10;\n    ctx.strokeStyle = `${color}${opacityToHex(opacity)}`;\n  }\n  #startDrawing(x, y) {\n    this.canvas.addEventListener(\"contextmenu\", noContextMenu);\n    this.canvas.addEventListener(\"pointerleave\", this.#boundCanvasPointerleave);\n    this.canvas.addEventListener(\"pointermove\", this.#boundCanvasPointermove);\n    this.canvas.addEventListener(\"pointerup\", this.#boundCanvasPointerup);\n    this.canvas.removeEventListener(\"pointerdown\", this.#boundCanvasPointerdown);\n    this.isEditing = true;\n    if (!this.#isCanvasInitialized) {\n      this.#isCanvasInitialized = true;\n      this.#setCanvasDims();\n      this.thickness ||= InkEditor._defaultThickness;\n      this.color ||= InkEditor._defaultColor || AnnotationEditor._defaultLineColor;\n      this.opacity ??= InkEditor._defaultOpacity;\n    }\n    this.currentPath.push([x, y]);\n    this.#hasSomethingToDraw = false;\n    this.#setStroke();\n    this.#requestFrameCallback = () => {\n      this.#drawPoints();\n      if (this.#requestFrameCallback) {\n        window.requestAnimationFrame(this.#requestFrameCallback);\n      }\n    };\n    window.requestAnimationFrame(this.#requestFrameCallback);\n  }\n  #draw(x, y) {\n    const [lastX, lastY] = this.currentPath.at(-1);\n    if (this.currentPath.length > 1 && x === lastX && y === lastY) {\n      return;\n    }\n    const currentPath = this.currentPath;\n    let path2D = this.#currentPath2D;\n    currentPath.push([x, y]);\n    this.#hasSomethingToDraw = true;\n    if (currentPath.length <= 2) {\n      path2D.moveTo(...currentPath[0]);\n      path2D.lineTo(x, y);\n      return;\n    }\n    if (currentPath.length === 3) {\n      this.#currentPath2D = path2D = new Path2D();\n      path2D.moveTo(...currentPath[0]);\n    }\n    this.#makeBezierCurve(path2D, ...currentPath.at(-3), ...currentPath.at(-2), x, y);\n  }\n  #endPath() {\n    if (this.currentPath.length === 0) {\n      return;\n    }\n    const lastPoint = this.currentPath.at(-1);\n    this.#currentPath2D.lineTo(...lastPoint);\n  }\n  #stopDrawing(x, y) {\n    this.#requestFrameCallback = null;\n    x = Math.min(Math.max(x, 0), this.canvas.width);\n    y = Math.min(Math.max(y, 0), this.canvas.height);\n    this.#draw(x, y);\n    this.#endPath();\n    let bezier;\n    if (this.currentPath.length !== 1) {\n      bezier = this.#generateBezierPoints();\n    } else {\n      const xy = [x, y];\n      bezier = [[xy, xy.slice(), xy.slice(), xy]];\n    }\n    const path2D = this.#currentPath2D;\n    const currentPath = this.currentPath;\n    this.currentPath = [];\n    this.#currentPath2D = new Path2D();\n    const cmd = () => {\n      this.allRawPaths.push(currentPath);\n      this.paths.push(bezier);\n      this.bezierPath2D.push(path2D);\n      this._uiManager.rebuild(this);\n    };\n    const undo = () => {\n      this.allRawPaths.pop();\n      this.paths.pop();\n      this.bezierPath2D.pop();\n      if (this.paths.length === 0) {\n        this.remove();\n      } else {\n        if (!this.canvas) {\n          this.#createCanvas();\n          this.#createObserver();\n        }\n        this.#fitToContent();\n      }\n    };\n    this.addCommands({\n      cmd,\n      undo,\n      mustExec: true\n    });\n  }\n  #drawPoints() {\n    if (!this.#hasSomethingToDraw) {\n      return;\n    }\n    this.#hasSomethingToDraw = false;\n    const thickness = Math.ceil(this.thickness * this.parentScale);\n    const lastPoints = this.currentPath.slice(-3);\n    const x = lastPoints.map(xy => xy[0]);\n    const y = lastPoints.map(xy => xy[1]);\n    const xMin = Math.min(...x) - thickness;\n    const xMax = Math.max(...x) + thickness;\n    const yMin = Math.min(...y) - thickness;\n    const yMax = Math.max(...y) + thickness;\n    const {\n      ctx\n    } = this;\n    ctx.save();\n    ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n    for (const path of this.bezierPath2D) {\n      ctx.stroke(path);\n    }\n    ctx.stroke(this.#currentPath2D);\n    ctx.restore();\n  }\n  #makeBezierCurve(path2D, x0, y0, x1, y1, x2, y2) {\n    const prevX = (x0 + x1) / 2;\n    const prevY = (y0 + y1) / 2;\n    const x3 = (x1 + x2) / 2;\n    const y3 = (y1 + y2) / 2;\n    path2D.bezierCurveTo(prevX + 2 * (x1 - prevX) / 3, prevY + 2 * (y1 - prevY) / 3, x3 + 2 * (x1 - x3) / 3, y3 + 2 * (y1 - y3) / 3, x3, y3);\n  }\n  #generateBezierPoints() {\n    const path = this.currentPath;\n    if (path.length <= 2) {\n      return [[path[0], path[0], path.at(-1), path.at(-1)]];\n    }\n    const bezierPoints = [];\n    let i;\n    let [x0, y0] = path[0];\n    for (i = 1; i < path.length - 2; i++) {\n      const [x1, y1] = path[i];\n      const [x2, y2] = path[i + 1];\n      const x3 = (x1 + x2) / 2;\n      const y3 = (y1 + y2) / 2;\n      const control1 = [x0 + 2 * (x1 - x0) / 3, y0 + 2 * (y1 - y0) / 3];\n      const control2 = [x3 + 2 * (x1 - x3) / 3, y3 + 2 * (y1 - y3) / 3];\n      bezierPoints.push([[x0, y0], control1, control2, [x3, y3]]);\n      [x0, y0] = [x3, y3];\n    }\n    const [x1, y1] = path[i];\n    const [x2, y2] = path[i + 1];\n    const control1 = [x0 + 2 * (x1 - x0) / 3, y0 + 2 * (y1 - y0) / 3];\n    const control2 = [x2 + 2 * (x1 - x2) / 3, y2 + 2 * (y1 - y2) / 3];\n    bezierPoints.push([[x0, y0], control1, control2, [x2, y2]]);\n    return bezierPoints;\n  }\n  #redraw() {\n    if (this.isEmpty()) {\n      this.#updateTransform();\n      return;\n    }\n    this.#setStroke();\n    const {\n      canvas,\n      ctx\n    } = this;\n    ctx.setTransform(1, 0, 0, 1, 0, 0);\n    ctx.clearRect(0, 0, canvas.width, canvas.height);\n    this.#updateTransform();\n    for (const path of this.bezierPath2D) {\n      ctx.stroke(path);\n    }\n  }\n  commit() {\n    if (this.#disableEditing) {\n      return;\n    }\n    super.commit();\n    this.isEditing = false;\n    this.disableEditMode();\n    this.setInForeground();\n    this.#disableEditing = true;\n    this.div.classList.add(\"disabled\");\n    this.#fitToContent(true);\n    this.select();\n    this.parent.addInkEditorIfNeeded(true);\n    this.moveInDOM();\n    this.div.focus({\n      preventScroll: true\n    });\n  }\n  focusin(event) {\n    if (!this._focusEventsAllowed) {\n      return;\n    }\n    super.focusin(event);\n    this.enableEditMode();\n  }\n  canvasPointerdown(event) {\n    if (event.button !== 0 || !this.isInEditMode() || this.#disableEditing) {\n      return;\n    }\n    this.setInForeground();\n    event.preventDefault();\n    if (!this.div.contains(document.activeElement)) {\n      this.div.focus({\n        preventScroll: true\n      });\n    }\n    this.#startDrawing(event.offsetX, event.offsetY);\n  }\n  canvasPointermove(event) {\n    event.preventDefault();\n    this.#draw(event.offsetX, event.offsetY);\n  }\n  canvasPointerup(event) {\n    event.preventDefault();\n    this.#endDrawing(event);\n  }\n  canvasPointerleave(event) {\n    this.#endDrawing(event);\n  }\n  #endDrawing(event) {\n    this.canvas.removeEventListener(\"pointerleave\", this.#boundCanvasPointerleave);\n    this.canvas.removeEventListener(\"pointermove\", this.#boundCanvasPointermove);\n    this.canvas.removeEventListener(\"pointerup\", this.#boundCanvasPointerup);\n    this.canvas.addEventListener(\"pointerdown\", this.#boundCanvasPointerdown);\n    if (this.#canvasContextMenuTimeoutId) {\n      clearTimeout(this.#canvasContextMenuTimeoutId);\n    }\n    this.#canvasContextMenuTimeoutId = setTimeout(() => {\n      this.#canvasContextMenuTimeoutId = null;\n      this.canvas.removeEventListener(\"contextmenu\", noContextMenu);\n    }, 10);\n    this.#stopDrawing(event.offsetX, event.offsetY);\n    this.addToAnnotationStorage();\n    this.setInBackground();\n  }\n  #createCanvas() {\n    this.canvas = document.createElement(\"canvas\");\n    this.canvas.width = this.canvas.height = 0;\n    this.canvas.className = \"inkEditorCanvas\";\n    this.canvas.setAttribute(\"data-l10n-id\", \"pdfjs-ink-canvas\");\n    this.div.append(this.canvas);\n    this.ctx = this.canvas.getContext(\"2d\");\n  }\n  #createObserver() {\n    this.#observer = new ResizeObserver(entries => {\n      const rect = entries[0].contentRect;\n      if (rect.width && rect.height) {\n        this.setDimensions(rect.width, rect.height);\n      }\n    });\n    this.#observer.observe(this.div);\n  }\n  get isResizable() {\n    return !this.isEmpty() && this.#disableEditing;\n  }\n  render() {\n    if (this.div) {\n      return this.div;\n    }\n    let baseX, baseY;\n    if (this.width) {\n      baseX = this.x;\n      baseY = this.y;\n    }\n    super.render();\n    this.div.setAttribute(\"data-l10n-id\", \"pdfjs-ink\");\n    const [x, y, w, h] = this.#getInitialBBox();\n    this.setAt(x, y, 0, 0);\n    this.setDims(w, h);\n    this.#createCanvas();\n    if (this.width) {\n      const [parentWidth, parentHeight] = this.parentDimensions;\n      this.setAspectRatio(this.width * parentWidth, this.height * parentHeight);\n      this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight);\n      this.#isCanvasInitialized = true;\n      this.#setCanvasDims();\n      this.setDims(this.width * parentWidth, this.height * parentHeight);\n      this.#redraw();\n      this.div.classList.add(\"disabled\");\n    } else {\n      this.div.classList.add(\"editing\");\n      this.enableEditMode();\n    }\n    this.#createObserver();\n    return this.div;\n  }\n  #setCanvasDims() {\n    if (!this.#isCanvasInitialized) {\n      return;\n    }\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    this.canvas.width = Math.ceil(this.width * parentWidth);\n    this.canvas.height = Math.ceil(this.height * parentHeight);\n    this.#updateTransform();\n  }\n  setDimensions(width, height) {\n    const roundedWidth = Math.round(width);\n    const roundedHeight = Math.round(height);\n    if (this.#realWidth === roundedWidth && this.#realHeight === roundedHeight) {\n      return;\n    }\n    this.#realWidth = roundedWidth;\n    this.#realHeight = roundedHeight;\n    this.canvas.style.visibility = \"hidden\";\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    this.width = width / parentWidth;\n    this.height = height / parentHeight;\n    this.fixAndSetPosition();\n    if (this.#disableEditing) {\n      this.#setScaleFactor(width, height);\n    }\n    this.#setCanvasDims();\n    this.#redraw();\n    this.canvas.style.visibility = \"visible\";\n    this.fixDims();\n  }\n  #setScaleFactor(width, height) {\n    const padding = this.#getPadding();\n    const scaleFactorW = (width - padding) / this.#baseWidth;\n    const scaleFactorH = (height - padding) / this.#baseHeight;\n    this.scaleFactor = Math.min(scaleFactorW, scaleFactorH);\n  }\n  #updateTransform() {\n    const padding = this.#getPadding() / 2;\n    this.ctx.setTransform(this.scaleFactor, 0, 0, this.scaleFactor, this.translationX * this.scaleFactor + padding, this.translationY * this.scaleFactor + padding);\n  }\n  static #buildPath2D(bezier) {\n    const path2D = new Path2D();\n    for (let i = 0, ii = bezier.length; i < ii; i++) {\n      const [first, control1, control2, second] = bezier[i];\n      if (i === 0) {\n        path2D.moveTo(...first);\n      }\n      path2D.bezierCurveTo(control1[0], control1[1], control2[0], control2[1], second[0], second[1]);\n    }\n    return path2D;\n  }\n  static #toPDFCoordinates(points, rect, rotation) {\n    const [blX, blY, trX, trY] = rect;\n    switch (rotation) {\n      case 0:\n        for (let i = 0, ii = points.length; i < ii; i += 2) {\n          points[i] += blX;\n          points[i + 1] = trY - points[i + 1];\n        }\n        break;\n      case 90:\n        for (let i = 0, ii = points.length; i < ii; i += 2) {\n          const x = points[i];\n          points[i] = points[i + 1] + blX;\n          points[i + 1] = x + blY;\n        }\n        break;\n      case 180:\n        for (let i = 0, ii = points.length; i < ii; i += 2) {\n          points[i] = trX - points[i];\n          points[i + 1] += blY;\n        }\n        break;\n      case 270:\n        for (let i = 0, ii = points.length; i < ii; i += 2) {\n          const x = points[i];\n          points[i] = trX - points[i + 1];\n          points[i + 1] = trY - x;\n        }\n        break;\n      default:\n        throw new Error(\"Invalid rotation\");\n    }\n    return points;\n  }\n  static #fromPDFCoordinates(points, rect, rotation) {\n    const [blX, blY, trX, trY] = rect;\n    switch (rotation) {\n      case 0:\n        for (let i = 0, ii = points.length; i < ii; i += 2) {\n          points[i] -= blX;\n          points[i + 1] = trY - points[i + 1];\n        }\n        break;\n      case 90:\n        for (let i = 0, ii = points.length; i < ii; i += 2) {\n          const x = points[i];\n          points[i] = points[i + 1] - blY;\n          points[i + 1] = x - blX;\n        }\n        break;\n      case 180:\n        for (let i = 0, ii = points.length; i < ii; i += 2) {\n          points[i] = trX - points[i];\n          points[i + 1] -= blY;\n        }\n        break;\n      case 270:\n        for (let i = 0, ii = points.length; i < ii; i += 2) {\n          const x = points[i];\n          points[i] = trY - points[i + 1];\n          points[i + 1] = trX - x;\n        }\n        break;\n      default:\n        throw new Error(\"Invalid rotation\");\n    }\n    return points;\n  }\n  #serializePaths(s, tx, ty, rect) {\n    const paths = [];\n    const padding = this.thickness / 2;\n    const shiftX = s * tx + padding;\n    const shiftY = s * ty + padding;\n    for (const bezier of this.paths) {\n      const buffer = [];\n      const points = [];\n      for (let j = 0, jj = bezier.length; j < jj; j++) {\n        const [first, control1, control2, second] = bezier[j];\n        if (first[0] === second[0] && first[1] === second[1] && jj === 1) {\n          const p0 = s * first[0] + shiftX;\n          const p1 = s * first[1] + shiftY;\n          buffer.push(p0, p1);\n          points.push(p0, p1);\n          break;\n        }\n        const p10 = s * first[0] + shiftX;\n        const p11 = s * first[1] + shiftY;\n        const p20 = s * control1[0] + shiftX;\n        const p21 = s * control1[1] + shiftY;\n        const p30 = s * control2[0] + shiftX;\n        const p31 = s * control2[1] + shiftY;\n        const p40 = s * second[0] + shiftX;\n        const p41 = s * second[1] + shiftY;\n        if (j === 0) {\n          buffer.push(p10, p11);\n          points.push(p10, p11);\n        }\n        buffer.push(p20, p21, p30, p31, p40, p41);\n        points.push(p20, p21);\n        if (j === jj - 1) {\n          points.push(p40, p41);\n        }\n      }\n      paths.push({\n        bezier: InkEditor.#toPDFCoordinates(buffer, rect, this.rotation),\n        points: InkEditor.#toPDFCoordinates(points, rect, this.rotation)\n      });\n    }\n    return paths;\n  }\n  #getBbox() {\n    let xMin = Infinity;\n    let xMax = -Infinity;\n    let yMin = Infinity;\n    let yMax = -Infinity;\n    for (const path of this.paths) {\n      for (const [first, control1, control2, second] of path) {\n        const bbox = Util.bezierBoundingBox(...first, ...control1, ...control2, ...second);\n        xMin = Math.min(xMin, bbox[0]);\n        yMin = Math.min(yMin, bbox[1]);\n        xMax = Math.max(xMax, bbox[2]);\n        yMax = Math.max(yMax, bbox[3]);\n      }\n    }\n    return [xMin, yMin, xMax, yMax];\n  }\n  #getPadding() {\n    return this.#disableEditing ? Math.ceil(this.thickness * this.parentScale) : 0;\n  }\n  #fitToContent(firstTime = false) {\n    if (this.isEmpty()) {\n      return;\n    }\n    if (!this.#disableEditing) {\n      this.#redraw();\n      return;\n    }\n    const bbox = this.#getBbox();\n    const padding = this.#getPadding();\n    this.#baseWidth = Math.max(AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]);\n    this.#baseHeight = Math.max(AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]);\n    const width = Math.ceil(padding + this.#baseWidth * this.scaleFactor);\n    const height = Math.ceil(padding + this.#baseHeight * this.scaleFactor);\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    this.width = width / parentWidth;\n    this.height = height / parentHeight;\n    this.setAspectRatio(width, height);\n    const prevTranslationX = this.translationX;\n    const prevTranslationY = this.translationY;\n    this.translationX = -bbox[0];\n    this.translationY = -bbox[1];\n    this.#setCanvasDims();\n    this.#redraw();\n    this.#realWidth = width;\n    this.#realHeight = height;\n    this.setDims(width, height);\n    const unscaledPadding = firstTime ? padding / this.scaleFactor / 2 : 0;\n    this.translate(prevTranslationX - this.translationX - unscaledPadding, prevTranslationY - this.translationY - unscaledPadding);\n  }\n  static deserialize(data, parent, uiManager) {\n    if (data instanceof InkAnnotationElement) {\n      return null;\n    }\n    const editor = super.deserialize(data, parent, uiManager);\n    editor.thickness = data.thickness;\n    editor.color = Util.makeHexColor(...data.color);\n    editor.opacity = data.opacity;\n    const [pageWidth, pageHeight] = editor.pageDimensions;\n    const width = editor.width * pageWidth;\n    const height = editor.height * pageHeight;\n    const scaleFactor = editor.parentScale;\n    const padding = data.thickness / 2;\n    editor.#disableEditing = true;\n    editor.#realWidth = Math.round(width);\n    editor.#realHeight = Math.round(height);\n    const {\n      paths,\n      rect,\n      rotation\n    } = data;\n    for (let {\n      bezier\n    } of paths) {\n      bezier = InkEditor.#fromPDFCoordinates(bezier, rect, rotation);\n      const path = [];\n      editor.paths.push(path);\n      let p0 = scaleFactor * (bezier[0] - padding);\n      let p1 = scaleFactor * (bezier[1] - padding);\n      for (let i = 2, ii = bezier.length; i < ii; i += 6) {\n        const p10 = scaleFactor * (bezier[i] - padding);\n        const p11 = scaleFactor * (bezier[i + 1] - padding);\n        const p20 = scaleFactor * (bezier[i + 2] - padding);\n        const p21 = scaleFactor * (bezier[i + 3] - padding);\n        const p30 = scaleFactor * (bezier[i + 4] - padding);\n        const p31 = scaleFactor * (bezier[i + 5] - padding);\n        path.push([[p0, p1], [p10, p11], [p20, p21], [p30, p31]]);\n        p0 = p30;\n        p1 = p31;\n      }\n      const path2D = this.#buildPath2D(path);\n      editor.bezierPath2D.push(path2D);\n    }\n    const bbox = editor.#getBbox();\n    editor.#baseWidth = Math.max(AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]);\n    editor.#baseHeight = Math.max(AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]);\n    editor.#setScaleFactor(width, height);\n    return editor;\n  }\n  serialize() {\n    if (this.isEmpty()) {\n      return null;\n    }\n    const rect = this.getRect(0, 0);\n    const color = AnnotationEditor._colorManager.convert(this.ctx.strokeStyle);\n    return {\n      annotationType: AnnotationEditorType.INK,\n      color,\n      thickness: this.thickness,\n      opacity: this.opacity,\n      paths: this.#serializePaths(this.scaleFactor / this.parentScale, this.translationX, this.translationY, rect),\n      pageIndex: this.pageIndex,\n      rect,\n      rotation: this.rotation,\n      structTreeParentId: this._structTreeParentId\n    };\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/editor/stamp.js\n\n\n\n\nclass StampEditor extends AnnotationEditor {\n  #bitmap = null;\n  #bitmapId = null;\n  #bitmapPromise = null;\n  #bitmapUrl = null;\n  #bitmapFile = null;\n  #bitmapFileName = \"\";\n  #canvas = null;\n  #observer = null;\n  #resizeTimeoutId = null;\n  #isSvg = false;\n  #hasBeenAddedInUndoStack = false;\n  static _type = \"stamp\";\n  static _editorType = AnnotationEditorType.STAMP;\n  constructor(params) {\n    super({\n      ...params,\n      name: \"stampEditor\"\n    });\n    this.#bitmapUrl = params.bitmapUrl;\n    this.#bitmapFile = params.bitmapFile;\n  }\n  static initialize(l10n, uiManager) {\n    AnnotationEditor.initialize(l10n, uiManager);\n  }\n  static get supportedTypes() {\n    const types = [\"apng\", \"avif\", \"bmp\", \"gif\", \"jpeg\", \"png\", \"svg+xml\", \"webp\", \"x-icon\"];\n    return shadow(this, \"supportedTypes\", types.map(type => `image/${type}`));\n  }\n  static get supportedTypesStr() {\n    return shadow(this, \"supportedTypesStr\", this.supportedTypes.join(\",\"));\n  }\n  static isHandlingMimeForPasting(mime) {\n    return this.supportedTypes.includes(mime);\n  }\n  static paste(item, parent) {\n    parent.pasteEditor(AnnotationEditorType.STAMP, {\n      bitmapFile: item.getAsFile()\n    });\n  }\n  #getBitmapFetched(data, fromId = false) {\n    if (!data) {\n      this.remove();\n      return;\n    }\n    this.#bitmap = data.bitmap;\n    if (!fromId) {\n      this.#bitmapId = data.id;\n      this.#isSvg = data.isSvg;\n    }\n    if (data.file) {\n      this.#bitmapFileName = data.file.name;\n    }\n    this.#createCanvas();\n  }\n  #getBitmapDone() {\n    this.#bitmapPromise = null;\n    this._uiManager.enableWaiting(false);\n    if (this.#canvas) {\n      this.div.focus();\n    }\n  }\n  #getBitmap() {\n    if (this.#bitmapId) {\n      this._uiManager.enableWaiting(true);\n      this._uiManager.imageManager.getFromId(this.#bitmapId).then(data => this.#getBitmapFetched(data, true)).finally(() => this.#getBitmapDone());\n      return;\n    }\n    if (this.#bitmapUrl) {\n      const url = this.#bitmapUrl;\n      this.#bitmapUrl = null;\n      this._uiManager.enableWaiting(true);\n      this.#bitmapPromise = this._uiManager.imageManager.getFromUrl(url).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone());\n      return;\n    }\n    if (this.#bitmapFile) {\n      const file = this.#bitmapFile;\n      this.#bitmapFile = null;\n      this._uiManager.enableWaiting(true);\n      this.#bitmapPromise = this._uiManager.imageManager.getFromFile(file).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone());\n      return;\n    }\n    const input = document.createElement(\"input\");\n    input.type = \"file\";\n    input.accept = StampEditor.supportedTypesStr;\n    this.#bitmapPromise = new Promise(resolve => {\n      input.addEventListener(\"change\", async () => {\n        if (!input.files || input.files.length === 0) {\n          this.remove();\n        } else {\n          this._uiManager.enableWaiting(true);\n          const data = await this._uiManager.imageManager.getFromFile(input.files[0]);\n          this.#getBitmapFetched(data);\n        }\n        resolve();\n      });\n      input.addEventListener(\"cancel\", () => {\n        this.remove();\n        resolve();\n      });\n    }).finally(() => this.#getBitmapDone());\n    input.click();\n  }\n  remove() {\n    if (this.#bitmapId) {\n      this.#bitmap = null;\n      this._uiManager.imageManager.deleteId(this.#bitmapId);\n      this.#canvas?.remove();\n      this.#canvas = null;\n      this.#observer?.disconnect();\n      this.#observer = null;\n      if (this.#resizeTimeoutId) {\n        clearTimeout(this.#resizeTimeoutId);\n        this.#resizeTimeoutId = null;\n      }\n    }\n    super.remove();\n  }\n  rebuild() {\n    if (!this.parent) {\n      if (this.#bitmapId) {\n        this.#getBitmap();\n      }\n      return;\n    }\n    super.rebuild();\n    if (this.div === null) {\n      return;\n    }\n    if (this.#bitmapId && this.#canvas === null) {\n      this.#getBitmap();\n    }\n    if (!this.isAttachedToDOM) {\n      this.parent.add(this);\n    }\n  }\n  onceAdded() {\n    this._isDraggable = true;\n    this.div.focus();\n  }\n  isEmpty() {\n    return !(this.#bitmapPromise || this.#bitmap || this.#bitmapUrl || this.#bitmapFile || this.#bitmapId);\n  }\n  get isResizable() {\n    return true;\n  }\n  render() {\n    if (this.div) {\n      return this.div;\n    }\n    let baseX, baseY;\n    if (this.width) {\n      baseX = this.x;\n      baseY = this.y;\n    }\n    super.render();\n    this.div.hidden = true;\n    this.addAltTextButton();\n    if (this.#bitmap) {\n      this.#createCanvas();\n    } else {\n      this.#getBitmap();\n    }\n    if (this.width) {\n      const [parentWidth, parentHeight] = this.parentDimensions;\n      this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight);\n    }\n    return this.div;\n  }\n  #createCanvas() {\n    const {\n      div\n    } = this;\n    let {\n      width,\n      height\n    } = this.#bitmap;\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    const MAX_RATIO = 0.75;\n    if (this.width) {\n      width = this.width * pageWidth;\n      height = this.height * pageHeight;\n    } else if (width > MAX_RATIO * pageWidth || height > MAX_RATIO * pageHeight) {\n      const factor = Math.min(MAX_RATIO * pageWidth / width, MAX_RATIO * pageHeight / height);\n      width *= factor;\n      height *= factor;\n    }\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    this.setDims(width * parentWidth / pageWidth, height * parentHeight / pageHeight);\n    this._uiManager.enableWaiting(false);\n    const canvas = this.#canvas = document.createElement(\"canvas\");\n    div.append(canvas);\n    div.hidden = false;\n    this.#drawBitmap(width, height);\n    this.#createObserver();\n    if (!this.#hasBeenAddedInUndoStack) {\n      this.parent.addUndoableEditor(this);\n      this.#hasBeenAddedInUndoStack = true;\n    }\n    this._reportTelemetry({\n      action: \"inserted_image\"\n    });\n    if (this.#bitmapFileName) {\n      canvas.setAttribute(\"aria-label\", this.#bitmapFileName);\n    }\n  }\n  #setDimensions(width, height) {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    this.width = width / parentWidth;\n    this.height = height / parentHeight;\n    this.setDims(width, height);\n    if (this._initialOptions?.isCentered) {\n      this.center();\n    } else {\n      this.fixAndSetPosition();\n    }\n    this._initialOptions = null;\n    if (this.#resizeTimeoutId !== null) {\n      clearTimeout(this.#resizeTimeoutId);\n    }\n    const TIME_TO_WAIT = 200;\n    this.#resizeTimeoutId = setTimeout(() => {\n      this.#resizeTimeoutId = null;\n      this.#drawBitmap(width, height);\n    }, TIME_TO_WAIT);\n  }\n  #scaleBitmap(width, height) {\n    const {\n      width: bitmapWidth,\n      height: bitmapHeight\n    } = this.#bitmap;\n    let newWidth = bitmapWidth;\n    let newHeight = bitmapHeight;\n    let bitmap = this.#bitmap;\n    while (newWidth > 2 * width || newHeight > 2 * height) {\n      const prevWidth = newWidth;\n      const prevHeight = newHeight;\n      if (newWidth > 2 * width) {\n        newWidth = newWidth >= 16384 ? Math.floor(newWidth / 2) - 1 : Math.ceil(newWidth / 2);\n      }\n      if (newHeight > 2 * height) {\n        newHeight = newHeight >= 16384 ? Math.floor(newHeight / 2) - 1 : Math.ceil(newHeight / 2);\n      }\n      const offscreen = new OffscreenCanvas(newWidth, newHeight);\n      const ctx = offscreen.getContext(\"2d\");\n      ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight);\n      bitmap = offscreen.transferToImageBitmap();\n    }\n    return bitmap;\n  }\n  #drawBitmap(width, height) {\n    width = Math.ceil(width);\n    height = Math.ceil(height);\n    const canvas = this.#canvas;\n    if (!canvas || canvas.width === width && canvas.height === height) {\n      return;\n    }\n    canvas.width = width;\n    canvas.height = height;\n    const bitmap = this.#isSvg ? this.#bitmap : this.#scaleBitmap(width, height);\n    if (this._uiManager.hasMLManager && !this.hasAltText()) {\n      const offscreen = new OffscreenCanvas(width, height);\n      const ctx = offscreen.getContext(\"2d\");\n      ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height);\n      this._uiManager.mlGuess({\n        service: \"image-to-text\",\n        request: {\n          data: ctx.getImageData(0, 0, width, height).data,\n          width,\n          height,\n          channels: 4\n        }\n      }).then(response => {\n        const altText = response?.output || \"\";\n        if (this.parent && altText && !this.hasAltText()) {\n          this.altTextData = {\n            altText,\n            decorative: false\n          };\n        }\n      });\n    }\n    const ctx = canvas.getContext(\"2d\");\n    ctx.filter = this._uiManager.hcmFilter;\n    ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height);\n  }\n  getImageForAltText() {\n    return this.#canvas;\n  }\n  #serializeBitmap(toUrl) {\n    if (toUrl) {\n      if (this.#isSvg) {\n        const url = this._uiManager.imageManager.getSvgUrl(this.#bitmapId);\n        if (url) {\n          return url;\n        }\n      }\n      const canvas = document.createElement(\"canvas\");\n      ({\n        width: canvas.width,\n        height: canvas.height\n      } = this.#bitmap);\n      const ctx = canvas.getContext(\"2d\");\n      ctx.drawImage(this.#bitmap, 0, 0);\n      return canvas.toDataURL();\n    }\n    if (this.#isSvg) {\n      const [pageWidth, pageHeight] = this.pageDimensions;\n      const width = Math.round(this.width * pageWidth * PixelsPerInch.PDF_TO_CSS_UNITS);\n      const height = Math.round(this.height * pageHeight * PixelsPerInch.PDF_TO_CSS_UNITS);\n      const offscreen = new OffscreenCanvas(width, height);\n      const ctx = offscreen.getContext(\"2d\");\n      ctx.drawImage(this.#bitmap, 0, 0, this.#bitmap.width, this.#bitmap.height, 0, 0, width, height);\n      return offscreen.transferToImageBitmap();\n    }\n    return structuredClone(this.#bitmap);\n  }\n  #createObserver() {\n    this.#observer = new ResizeObserver(entries => {\n      const rect = entries[0].contentRect;\n      if (rect.width && rect.height) {\n        this.#setDimensions(rect.width, rect.height);\n      }\n    });\n    this.#observer.observe(this.div);\n  }\n  static deserialize(data, parent, uiManager) {\n    if (data instanceof StampAnnotationElement) {\n      return null;\n    }\n    const editor = super.deserialize(data, parent, uiManager);\n    const {\n      rect,\n      bitmapUrl,\n      bitmapId,\n      isSvg,\n      accessibilityData\n    } = data;\n    if (bitmapId && uiManager.imageManager.isValidId(bitmapId)) {\n      editor.#bitmapId = bitmapId;\n    } else {\n      editor.#bitmapUrl = bitmapUrl;\n    }\n    editor.#isSvg = isSvg;\n    const [parentWidth, parentHeight] = editor.pageDimensions;\n    editor.width = (rect[2] - rect[0]) / parentWidth;\n    editor.height = (rect[3] - rect[1]) / parentHeight;\n    if (accessibilityData) {\n      editor.altTextData = accessibilityData;\n    }\n    return editor;\n  }\n  serialize(isForCopying = false, context = null) {\n    if (this.isEmpty()) {\n      return null;\n    }\n    const serialized = {\n      annotationType: AnnotationEditorType.STAMP,\n      bitmapId: this.#bitmapId,\n      pageIndex: this.pageIndex,\n      rect: this.getRect(0, 0),\n      rotation: this.rotation,\n      isSvg: this.#isSvg,\n      structTreeParentId: this._structTreeParentId\n    };\n    if (isForCopying) {\n      serialized.bitmapUrl = this.#serializeBitmap(true);\n      serialized.accessibilityData = this.altTextData;\n      return serialized;\n    }\n    const {\n      decorative,\n      altText\n    } = this.altTextData;\n    if (!decorative && altText) {\n      serialized.accessibilityData = {\n        type: \"Figure\",\n        alt: altText\n      };\n    }\n    if (context === null) {\n      return serialized;\n    }\n    context.stamps ||= new Map();\n    const area = this.#isSvg ? (serialized.rect[2] - serialized.rect[0]) * (serialized.rect[3] - serialized.rect[1]) : null;\n    if (!context.stamps.has(this.#bitmapId)) {\n      context.stamps.set(this.#bitmapId, {\n        area,\n        serialized\n      });\n      serialized.bitmap = this.#serializeBitmap(false);\n    } else if (this.#isSvg) {\n      const prevData = context.stamps.get(this.#bitmapId);\n      if (area > prevData.area) {\n        prevData.area = area;\n        prevData.serialized.bitmap.close();\n        prevData.serialized.bitmap = this.#serializeBitmap(false);\n      }\n    }\n    return serialized;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/editor/annotation_editor_layer.js\n\n\n\n\n\n\n\nclass AnnotationEditorLayer {\n  #accessibilityManager;\n  #allowClick = false;\n  #annotationLayer = null;\n  #boundPointerup = null;\n  #boundPointerdown = null;\n  #boundTextLayerPointerDown = null;\n  #editorFocusTimeoutId = null;\n  #editors = new Map();\n  #hadPointerDown = false;\n  #isCleaningUp = false;\n  #isDisabling = false;\n  #textLayer = null;\n  #uiManager;\n  static _initialized = false;\n  static #editorTypes = new Map([FreeTextEditor, InkEditor, StampEditor, HighlightEditor].map(type => [type._editorType, type]));\n  constructor({\n    uiManager,\n    pageIndex,\n    div,\n    accessibilityManager,\n    annotationLayer,\n    drawLayer,\n    textLayer,\n    viewport,\n    l10n\n  }) {\n    const editorTypes = [...AnnotationEditorLayer.#editorTypes.values()];\n    if (!AnnotationEditorLayer._initialized) {\n      AnnotationEditorLayer._initialized = true;\n      for (const editorType of editorTypes) {\n        editorType.initialize(l10n, uiManager);\n      }\n    }\n    uiManager.registerEditorTypes(editorTypes);\n    this.#uiManager = uiManager;\n    this.pageIndex = pageIndex;\n    this.div = div;\n    this.#accessibilityManager = accessibilityManager;\n    this.#annotationLayer = annotationLayer;\n    this.viewport = viewport;\n    this.#textLayer = textLayer;\n    this.drawLayer = drawLayer;\n    this.#uiManager.addLayer(this);\n  }\n  get isEmpty() {\n    return this.#editors.size === 0;\n  }\n  get isInvisible() {\n    return this.isEmpty && this.#uiManager.getMode() === AnnotationEditorType.NONE;\n  }\n  updateToolbar(mode) {\n    this.#uiManager.updateToolbar(mode);\n  }\n  updateMode(mode = this.#uiManager.getMode()) {\n    this.#cleanup();\n    switch (mode) {\n      case AnnotationEditorType.NONE:\n        this.disableTextSelection();\n        this.togglePointerEvents(false);\n        this.toggleAnnotationLayerPointerEvents(true);\n        this.disableClick();\n        return;\n      case AnnotationEditorType.INK:\n        this.addInkEditorIfNeeded(false);\n        this.disableTextSelection();\n        this.togglePointerEvents(true);\n        this.disableClick();\n        break;\n      case AnnotationEditorType.HIGHLIGHT:\n        this.enableTextSelection();\n        this.togglePointerEvents(false);\n        this.disableClick();\n        break;\n      default:\n        this.disableTextSelection();\n        this.togglePointerEvents(true);\n        this.enableClick();\n    }\n    this.toggleAnnotationLayerPointerEvents(false);\n    const {\n      classList\n    } = this.div;\n    for (const editorType of AnnotationEditorLayer.#editorTypes.values()) {\n      classList.toggle(`${editorType._type}Editing`, mode === editorType._editorType);\n    }\n    this.div.hidden = false;\n  }\n  hasTextLayer(textLayer) {\n    return textLayer === this.#textLayer?.div;\n  }\n  addInkEditorIfNeeded(isCommitting) {\n    if (this.#uiManager.getMode() !== AnnotationEditorType.INK) {\n      return;\n    }\n    if (!isCommitting) {\n      for (const editor of this.#editors.values()) {\n        if (editor.isEmpty()) {\n          editor.setInBackground();\n          return;\n        }\n      }\n    }\n    const editor = this.createAndAddNewEditor({\n      offsetX: 0,\n      offsetY: 0\n    }, false);\n    editor.setInBackground();\n  }\n  setEditingState(isEditing) {\n    this.#uiManager.setEditingState(isEditing);\n  }\n  addCommands(params) {\n    this.#uiManager.addCommands(params);\n  }\n  togglePointerEvents(enabled = false) {\n    this.div.classList.toggle(\"disabled\", !enabled);\n  }\n  toggleAnnotationLayerPointerEvents(enabled = false) {\n    this.#annotationLayer?.div.classList.toggle(\"disabled\", !enabled);\n  }\n  enable() {\n    this.div.tabIndex = 0;\n    this.togglePointerEvents(true);\n    const annotationElementIds = new Set();\n    for (const editor of this.#editors.values()) {\n      editor.enableEditing();\n      editor.show(true);\n      if (editor.annotationElementId) {\n        this.#uiManager.removeChangedExistingAnnotation(editor);\n        annotationElementIds.add(editor.annotationElementId);\n      }\n    }\n    if (!this.#annotationLayer) {\n      return;\n    }\n    const editables = this.#annotationLayer.getEditableAnnotations();\n    for (const editable of editables) {\n      editable.hide();\n      if (this.#uiManager.isDeletedAnnotationElement(editable.data.id)) {\n        continue;\n      }\n      if (annotationElementIds.has(editable.data.id)) {\n        continue;\n      }\n      const editor = this.deserialize(editable);\n      if (!editor) {\n        continue;\n      }\n      this.addOrRebuild(editor);\n      editor.enableEditing();\n    }\n  }\n  disable() {\n    this.#isDisabling = true;\n    this.div.tabIndex = -1;\n    this.togglePointerEvents(false);\n    const changedAnnotations = new Map();\n    const resetAnnotations = new Map();\n    for (const editor of this.#editors.values()) {\n      editor.disableEditing();\n      if (!editor.annotationElementId) {\n        continue;\n      }\n      if (editor.serialize() !== null) {\n        changedAnnotations.set(editor.annotationElementId, editor);\n        continue;\n      } else {\n        resetAnnotations.set(editor.annotationElementId, editor);\n      }\n      this.getEditableAnnotation(editor.annotationElementId)?.show();\n      editor.remove();\n    }\n    if (this.#annotationLayer) {\n      const editables = this.#annotationLayer.getEditableAnnotations();\n      for (const editable of editables) {\n        const {\n          id\n        } = editable.data;\n        if (this.#uiManager.isDeletedAnnotationElement(id)) {\n          continue;\n        }\n        let editor = resetAnnotations.get(id);\n        if (editor) {\n          editor.resetAnnotationElement(editable);\n          editor.show(false);\n          editable.show();\n          continue;\n        }\n        editor = changedAnnotations.get(id);\n        if (editor) {\n          this.#uiManager.addChangedExistingAnnotation(editor);\n          editor.renderAnnotationElement(editable);\n          editor.show(false);\n        }\n        editable.show();\n      }\n    }\n    this.#cleanup();\n    if (this.isEmpty) {\n      this.div.hidden = true;\n    }\n    const {\n      classList\n    } = this.div;\n    for (const editorType of AnnotationEditorLayer.#editorTypes.values()) {\n      classList.remove(`${editorType._type}Editing`);\n    }\n    this.disableTextSelection();\n    this.toggleAnnotationLayerPointerEvents(true);\n    this.#isDisabling = false;\n  }\n  getEditableAnnotation(id) {\n    return this.#annotationLayer?.getEditableAnnotation(id) || null;\n  }\n  setActiveEditor(editor) {\n    const currentActive = this.#uiManager.getActive();\n    if (currentActive === editor) {\n      return;\n    }\n    this.#uiManager.setActiveEditor(editor);\n  }\n  enableTextSelection() {\n    this.div.tabIndex = -1;\n    if (this.#textLayer?.div && !this.#boundTextLayerPointerDown) {\n      this.#boundTextLayerPointerDown = this.#textLayerPointerDown.bind(this);\n      this.#textLayer.div.addEventListener(\"pointerdown\", this.#boundTextLayerPointerDown);\n      this.#textLayer.div.classList.add(\"highlighting\");\n    }\n  }\n  disableTextSelection() {\n    this.div.tabIndex = 0;\n    if (this.#textLayer?.div && this.#boundTextLayerPointerDown) {\n      this.#textLayer.div.removeEventListener(\"pointerdown\", this.#boundTextLayerPointerDown);\n      this.#boundTextLayerPointerDown = null;\n      this.#textLayer.div.classList.remove(\"highlighting\");\n    }\n  }\n  #textLayerPointerDown(event) {\n    this.#uiManager.unselectAll();\n    if (event.target === this.#textLayer.div) {\n      const {\n        isMac\n      } = util_FeatureTest.platform;\n      if (event.button !== 0 || event.ctrlKey && isMac) {\n        return;\n      }\n      this.#uiManager.showAllEditors(\"highlight\", true, true);\n      this.#textLayer.div.classList.add(\"free\");\n      HighlightEditor.startHighlighting(this, this.#uiManager.direction === \"ltr\", event);\n      this.#textLayer.div.addEventListener(\"pointerup\", () => {\n        this.#textLayer.div.classList.remove(\"free\");\n      }, {\n        once: true\n      });\n      event.preventDefault();\n    }\n  }\n  enableClick() {\n    if (this.#boundPointerdown) {\n      return;\n    }\n    this.#boundPointerdown = this.pointerdown.bind(this);\n    this.#boundPointerup = this.pointerup.bind(this);\n    this.div.addEventListener(\"pointerdown\", this.#boundPointerdown);\n    this.div.addEventListener(\"pointerup\", this.#boundPointerup);\n  }\n  disableClick() {\n    if (!this.#boundPointerdown) {\n      return;\n    }\n    this.div.removeEventListener(\"pointerdown\", this.#boundPointerdown);\n    this.div.removeEventListener(\"pointerup\", this.#boundPointerup);\n    this.#boundPointerdown = null;\n    this.#boundPointerup = null;\n  }\n  attach(editor) {\n    this.#editors.set(editor.id, editor);\n    const {\n      annotationElementId\n    } = editor;\n    if (annotationElementId && this.#uiManager.isDeletedAnnotationElement(annotationElementId)) {\n      this.#uiManager.removeDeletedAnnotationElement(editor);\n    }\n  }\n  detach(editor) {\n    this.#editors.delete(editor.id);\n    this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv);\n    if (!this.#isDisabling && editor.annotationElementId) {\n      this.#uiManager.addDeletedAnnotationElement(editor);\n    }\n  }\n  remove(editor) {\n    this.detach(editor);\n    this.#uiManager.removeEditor(editor);\n    editor.div.remove();\n    editor.isAttachedToDOM = false;\n    if (!this.#isCleaningUp) {\n      this.addInkEditorIfNeeded(false);\n    }\n  }\n  changeParent(editor) {\n    if (editor.parent === this) {\n      return;\n    }\n    if (editor.parent && editor.annotationElementId) {\n      this.#uiManager.addDeletedAnnotationElement(editor.annotationElementId);\n      AnnotationEditor.deleteAnnotationElement(editor);\n      editor.annotationElementId = null;\n    }\n    this.attach(editor);\n    editor.parent?.detach(editor);\n    editor.setParent(this);\n    if (editor.div && editor.isAttachedToDOM) {\n      editor.div.remove();\n      this.div.append(editor.div);\n    }\n  }\n  add(editor) {\n    if (editor.parent === this && editor.isAttachedToDOM) {\n      return;\n    }\n    this.changeParent(editor);\n    this.#uiManager.addEditor(editor);\n    this.attach(editor);\n    if (!editor.isAttachedToDOM) {\n      const div = editor.render();\n      this.div.append(div);\n      editor.isAttachedToDOM = true;\n    }\n    editor.fixAndSetPosition();\n    editor.onceAdded();\n    this.#uiManager.addToAnnotationStorage(editor);\n    editor._reportTelemetry(editor.telemetryInitialData);\n  }\n  moveEditorInDOM(editor) {\n    if (!editor.isAttachedToDOM) {\n      return;\n    }\n    const {\n      activeElement\n    } = document;\n    if (editor.div.contains(activeElement) && !this.#editorFocusTimeoutId) {\n      editor._focusEventsAllowed = false;\n      this.#editorFocusTimeoutId = setTimeout(() => {\n        this.#editorFocusTimeoutId = null;\n        if (!editor.div.contains(document.activeElement)) {\n          editor.div.addEventListener(\"focusin\", () => {\n            editor._focusEventsAllowed = true;\n          }, {\n            once: true\n          });\n          activeElement.focus();\n        } else {\n          editor._focusEventsAllowed = true;\n        }\n      }, 0);\n    }\n    editor._structTreeParentId = this.#accessibilityManager?.moveElementInDOM(this.div, editor.div, editor.contentDiv, true);\n  }\n  addOrRebuild(editor) {\n    if (editor.needsToBeRebuilt()) {\n      editor.parent ||= this;\n      editor.rebuild();\n      editor.show();\n    } else {\n      this.add(editor);\n    }\n  }\n  addUndoableEditor(editor) {\n    const cmd = () => editor._uiManager.rebuild(editor);\n    const undo = () => {\n      editor.remove();\n    };\n    this.addCommands({\n      cmd,\n      undo,\n      mustExec: false\n    });\n  }\n  getNextId() {\n    return this.#uiManager.getId();\n  }\n  get #currentEditorType() {\n    return AnnotationEditorLayer.#editorTypes.get(this.#uiManager.getMode());\n  }\n  #createNewEditor(params) {\n    const editorType = this.#currentEditorType;\n    return editorType ? new editorType.prototype.constructor(params) : null;\n  }\n  canCreateNewEmptyEditor() {\n    return this.#currentEditorType?.canCreateNewEmptyEditor();\n  }\n  pasteEditor(mode, params) {\n    this.#uiManager.updateToolbar(mode);\n    this.#uiManager.updateMode(mode);\n    const {\n      offsetX,\n      offsetY\n    } = this.#getCenterPoint();\n    const id = this.getNextId();\n    const editor = this.#createNewEditor({\n      parent: this,\n      id,\n      x: offsetX,\n      y: offsetY,\n      uiManager: this.#uiManager,\n      isCentered: true,\n      ...params\n    });\n    if (editor) {\n      this.add(editor);\n    }\n  }\n  deserialize(data) {\n    return AnnotationEditorLayer.#editorTypes.get(data.annotationType ?? data.annotationEditorType)?.deserialize(data, this, this.#uiManager) || null;\n  }\n  createAndAddNewEditor(event, isCentered, data = {}) {\n    const id = this.getNextId();\n    const editor = this.#createNewEditor({\n      parent: this,\n      id,\n      x: event.offsetX,\n      y: event.offsetY,\n      uiManager: this.#uiManager,\n      isCentered,\n      ...data\n    });\n    if (editor) {\n      this.add(editor);\n    }\n    return editor;\n  }\n  #getCenterPoint() {\n    const {\n      x,\n      y,\n      width,\n      height\n    } = this.div.getBoundingClientRect();\n    const tlX = Math.max(0, x);\n    const tlY = Math.max(0, y);\n    const brX = Math.min(window.innerWidth, x + width);\n    const brY = Math.min(window.innerHeight, y + height);\n    const centerX = (tlX + brX) / 2 - x;\n    const centerY = (tlY + brY) / 2 - y;\n    const [offsetX, offsetY] = this.viewport.rotation % 180 === 0 ? [centerX, centerY] : [centerY, centerX];\n    return {\n      offsetX,\n      offsetY\n    };\n  }\n  addNewEditor() {\n    this.createAndAddNewEditor(this.#getCenterPoint(), true);\n  }\n  setSelected(editor) {\n    this.#uiManager.setSelected(editor);\n  }\n  toggleSelected(editor) {\n    this.#uiManager.toggleSelected(editor);\n  }\n  isSelected(editor) {\n    return this.#uiManager.isSelected(editor);\n  }\n  unselect(editor) {\n    this.#uiManager.unselect(editor);\n  }\n  pointerup(event) {\n    const {\n      isMac\n    } = util_FeatureTest.platform;\n    if (event.button !== 0 || event.ctrlKey && isMac) {\n      return;\n    }\n    if (event.target !== this.div) {\n      return;\n    }\n    if (!this.#hadPointerDown) {\n      return;\n    }\n    this.#hadPointerDown = false;\n    if (!this.#allowClick) {\n      this.#allowClick = true;\n      return;\n    }\n    if (this.#uiManager.getMode() === AnnotationEditorType.STAMP) {\n      this.#uiManager.unselectAll();\n      return;\n    }\n    this.createAndAddNewEditor(event, false);\n  }\n  pointerdown(event) {\n    if (this.#uiManager.getMode() === AnnotationEditorType.HIGHLIGHT) {\n      this.enableTextSelection();\n    }\n    if (this.#hadPointerDown) {\n      this.#hadPointerDown = false;\n      return;\n    }\n    const {\n      isMac\n    } = util_FeatureTest.platform;\n    if (event.button !== 0 || event.ctrlKey && isMac) {\n      return;\n    }\n    if (event.target !== this.div) {\n      return;\n    }\n    this.#hadPointerDown = true;\n    const editor = this.#uiManager.getActive();\n    this.#allowClick = !editor || editor.isEmpty();\n  }\n  findNewParent(editor, x, y) {\n    const layer = this.#uiManager.findParent(x, y);\n    if (layer === null || layer === this) {\n      return false;\n    }\n    layer.changeParent(editor);\n    return true;\n  }\n  destroy() {\n    if (this.#uiManager.getActive()?.parent === this) {\n      this.#uiManager.commitOrRemove();\n      this.#uiManager.setActiveEditor(null);\n    }\n    if (this.#editorFocusTimeoutId) {\n      clearTimeout(this.#editorFocusTimeoutId);\n      this.#editorFocusTimeoutId = null;\n    }\n    for (const editor of this.#editors.values()) {\n      this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv);\n      editor.setParent(null);\n      editor.isAttachedToDOM = false;\n      editor.div.remove();\n    }\n    this.div = null;\n    this.#editors.clear();\n    this.#uiManager.removeLayer(this);\n  }\n  #cleanup() {\n    this.#isCleaningUp = true;\n    for (const editor of this.#editors.values()) {\n      if (editor.isEmpty()) {\n        editor.remove();\n      }\n    }\n    this.#isCleaningUp = false;\n  }\n  render({\n    viewport\n  }) {\n    this.viewport = viewport;\n    setLayerDimensions(this.div, viewport);\n    for (const editor of this.#uiManager.getEditors(this.pageIndex)) {\n      this.add(editor);\n      editor.rebuild();\n    }\n    this.updateMode();\n  }\n  update({\n    viewport\n  }) {\n    this.#uiManager.commitOrRemove();\n    this.#cleanup();\n    const oldRotation = this.viewport.rotation;\n    const rotation = viewport.rotation;\n    this.viewport = viewport;\n    setLayerDimensions(this.div, {\n      rotation\n    });\n    if (oldRotation !== rotation) {\n      for (const editor of this.#editors.values()) {\n        editor.rotate(rotation);\n      }\n    }\n    this.addInkEditorIfNeeded(false);\n  }\n  get pageDimensions() {\n    const {\n      pageWidth,\n      pageHeight\n    } = this.viewport.rawDims;\n    return [pageWidth, pageHeight];\n  }\n  get scale() {\n    return this.#uiManager.viewParameters.realScale;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/display/draw_layer.js\n\n\nclass DrawLayer {\n  #parent = null;\n  #id = 0;\n  #mapping = new Map();\n  #toUpdate = new Map();\n  constructor({\n    pageIndex\n  }) {\n    this.pageIndex = pageIndex;\n  }\n  setParent(parent) {\n    if (!this.#parent) {\n      this.#parent = parent;\n      return;\n    }\n    if (this.#parent !== parent) {\n      if (this.#mapping.size > 0) {\n        for (const root of this.#mapping.values()) {\n          root.remove();\n          parent.append(root);\n        }\n      }\n      this.#parent = parent;\n    }\n  }\n  static get _svgFactory() {\n    return shadow(this, \"_svgFactory\", new DOMSVGFactory());\n  }\n  static #setBox(element, {\n    x = 0,\n    y = 0,\n    width = 1,\n    height = 1\n  } = {}) {\n    const {\n      style\n    } = element;\n    style.top = `${100 * y}%`;\n    style.left = `${100 * x}%`;\n    style.width = `${100 * width}%`;\n    style.height = `${100 * height}%`;\n  }\n  #createSVG(box) {\n    const svg = DrawLayer._svgFactory.create(1, 1, true);\n    this.#parent.append(svg);\n    svg.setAttribute(\"aria-hidden\", true);\n    DrawLayer.#setBox(svg, box);\n    return svg;\n  }\n  #createClipPath(defs, pathId) {\n    const clipPath = DrawLayer._svgFactory.createElement(\"clipPath\");\n    defs.append(clipPath);\n    const clipPathId = `clip_${pathId}`;\n    clipPath.setAttribute(\"id\", clipPathId);\n    clipPath.setAttribute(\"clipPathUnits\", \"objectBoundingBox\");\n    const clipPathUse = DrawLayer._svgFactory.createElement(\"use\");\n    clipPath.append(clipPathUse);\n    clipPathUse.setAttribute(\"href\", `#${pathId}`);\n    clipPathUse.classList.add(\"clip\");\n    return clipPathId;\n  }\n  highlight(outlines, color, opacity, isPathUpdatable = false) {\n    const id = this.#id++;\n    const root = this.#createSVG(outlines.box);\n    root.classList.add(\"highlight\");\n    if (outlines.free) {\n      root.classList.add(\"free\");\n    }\n    const defs = DrawLayer._svgFactory.createElement(\"defs\");\n    root.append(defs);\n    const path = DrawLayer._svgFactory.createElement(\"path\");\n    defs.append(path);\n    const pathId = `path_p${this.pageIndex}_${id}`;\n    path.setAttribute(\"id\", pathId);\n    path.setAttribute(\"d\", outlines.toSVGPath());\n    if (isPathUpdatable) {\n      this.#toUpdate.set(id, path);\n    }\n    const clipPathId = this.#createClipPath(defs, pathId);\n    const use = DrawLayer._svgFactory.createElement(\"use\");\n    root.append(use);\n    root.setAttribute(\"fill\", color);\n    root.setAttribute(\"fill-opacity\", opacity);\n    use.setAttribute(\"href\", `#${pathId}`);\n    this.#mapping.set(id, root);\n    return {\n      id,\n      clipPathId: `url(#${clipPathId})`\n    };\n  }\n  highlightOutline(outlines) {\n    const id = this.#id++;\n    const root = this.#createSVG(outlines.box);\n    root.classList.add(\"highlightOutline\");\n    const defs = DrawLayer._svgFactory.createElement(\"defs\");\n    root.append(defs);\n    const path = DrawLayer._svgFactory.createElement(\"path\");\n    defs.append(path);\n    const pathId = `path_p${this.pageIndex}_${id}`;\n    path.setAttribute(\"id\", pathId);\n    path.setAttribute(\"d\", outlines.toSVGPath());\n    path.setAttribute(\"vector-effect\", \"non-scaling-stroke\");\n    let maskId;\n    if (outlines.free) {\n      root.classList.add(\"free\");\n      const mask = DrawLayer._svgFactory.createElement(\"mask\");\n      defs.append(mask);\n      maskId = `mask_p${this.pageIndex}_${id}`;\n      mask.setAttribute(\"id\", maskId);\n      mask.setAttribute(\"maskUnits\", \"objectBoundingBox\");\n      const rect = DrawLayer._svgFactory.createElement(\"rect\");\n      mask.append(rect);\n      rect.setAttribute(\"width\", \"1\");\n      rect.setAttribute(\"height\", \"1\");\n      rect.setAttribute(\"fill\", \"white\");\n      const use = DrawLayer._svgFactory.createElement(\"use\");\n      mask.append(use);\n      use.setAttribute(\"href\", `#${pathId}`);\n      use.setAttribute(\"stroke\", \"none\");\n      use.setAttribute(\"fill\", \"black\");\n      use.setAttribute(\"fill-rule\", \"nonzero\");\n      use.classList.add(\"mask\");\n    }\n    const use1 = DrawLayer._svgFactory.createElement(\"use\");\n    root.append(use1);\n    use1.setAttribute(\"href\", `#${pathId}`);\n    if (maskId) {\n      use1.setAttribute(\"mask\", `url(#${maskId})`);\n    }\n    const use2 = use1.cloneNode();\n    root.append(use2);\n    use1.classList.add(\"mainOutline\");\n    use2.classList.add(\"secondaryOutline\");\n    this.#mapping.set(id, root);\n    return id;\n  }\n  finalizeLine(id, line) {\n    const path = this.#toUpdate.get(id);\n    this.#toUpdate.delete(id);\n    this.updateBox(id, line.box);\n    path.setAttribute(\"d\", line.toSVGPath());\n  }\n  updateLine(id, line) {\n    const root = this.#mapping.get(id);\n    const defs = root.firstChild;\n    const path = defs.firstChild;\n    path.setAttribute(\"d\", line.toSVGPath());\n  }\n  removeFreeHighlight(id) {\n    this.remove(id);\n    this.#toUpdate.delete(id);\n  }\n  updatePath(id, line) {\n    this.#toUpdate.get(id).setAttribute(\"d\", line.toSVGPath());\n  }\n  updateBox(id, box) {\n    DrawLayer.#setBox(this.#mapping.get(id), box);\n  }\n  show(id, visible) {\n    this.#mapping.get(id).classList.toggle(\"hidden\", !visible);\n  }\n  rotate(id, angle) {\n    this.#mapping.get(id).setAttribute(\"data-main-rotation\", angle);\n  }\n  changeColor(id, color) {\n    this.#mapping.get(id).setAttribute(\"fill\", color);\n  }\n  changeOpacity(id, opacity) {\n    this.#mapping.get(id).setAttribute(\"fill-opacity\", opacity);\n  }\n  addClass(id, className) {\n    this.#mapping.get(id).classList.add(className);\n  }\n  removeClass(id, className) {\n    this.#mapping.get(id).classList.remove(className);\n  }\n  remove(id) {\n    if (this.#parent === null) {\n      return;\n    }\n    this.#mapping.get(id).remove();\n    this.#mapping.delete(id);\n  }\n  destroy() {\n    this.#parent = null;\n    for (const root of this.#mapping.values()) {\n      root.remove();\n    }\n    this.#mapping.clear();\n  }\n}\n\n;// CONCATENATED MODULE: ./src/pdf.js\n\n\n\n\n\n\n\n\n\n\n\n\nconst pdfjsVersion = \"4.3.136\";\nconst pdfjsBuild = \"0cec64437\";\n\nvar __webpack_exports__AbortException = __webpack_exports__.AbortException;\nvar __webpack_exports__AnnotationEditorLayer = __webpack_exports__.AnnotationEditorLayer;\nvar __webpack_exports__AnnotationEditorParamsType = __webpack_exports__.AnnotationEditorParamsType;\nvar __webpack_exports__AnnotationEditorType = __webpack_exports__.AnnotationEditorType;\nvar __webpack_exports__AnnotationEditorUIManager = __webpack_exports__.AnnotationEditorUIManager;\nvar __webpack_exports__AnnotationLayer = __webpack_exports__.AnnotationLayer;\nvar __webpack_exports__AnnotationMode = __webpack_exports__.AnnotationMode;\nvar __webpack_exports__CMapCompressionType = __webpack_exports__.CMapCompressionType;\nvar __webpack_exports__ColorPicker = __webpack_exports__.ColorPicker;\nvar __webpack_exports__DOMSVGFactory = __webpack_exports__.DOMSVGFactory;\nvar __webpack_exports__DrawLayer = __webpack_exports__.DrawLayer;\nvar __webpack_exports__FeatureTest = __webpack_exports__.FeatureTest;\nvar __webpack_exports__GlobalWorkerOptions = __webpack_exports__.GlobalWorkerOptions;\nvar __webpack_exports__ImageKind = __webpack_exports__.ImageKind;\nvar __webpack_exports__InvalidPDFException = __webpack_exports__.InvalidPDFException;\nvar __webpack_exports__MissingPDFException = __webpack_exports__.MissingPDFException;\nvar __webpack_exports__OPS = __webpack_exports__.OPS;\nvar __webpack_exports__Outliner = __webpack_exports__.Outliner;\nvar __webpack_exports__PDFDataRangeTransport = __webpack_exports__.PDFDataRangeTransport;\nvar __webpack_exports__PDFDateString = __webpack_exports__.PDFDateString;\nvar __webpack_exports__PDFWorker = __webpack_exports__.PDFWorker;\nvar __webpack_exports__PasswordResponses = __webpack_exports__.PasswordResponses;\nvar __webpack_exports__PermissionFlag = __webpack_exports__.PermissionFlag;\nvar __webpack_exports__PixelsPerInch = __webpack_exports__.PixelsPerInch;\nvar __webpack_exports__RenderingCancelledException = __webpack_exports__.RenderingCancelledException;\nvar __webpack_exports__TextLayer = __webpack_exports__.TextLayer;\nvar __webpack_exports__UnexpectedResponseException = __webpack_exports__.UnexpectedResponseException;\nvar __webpack_exports__Util = __webpack_exports__.Util;\nvar __webpack_exports__VerbosityLevel = __webpack_exports__.VerbosityLevel;\nvar __webpack_exports__XfaLayer = __webpack_exports__.XfaLayer;\nvar __webpack_exports__build = __webpack_exports__.build;\nvar __webpack_exports__createValidAbsoluteUrl = __webpack_exports__.createValidAbsoluteUrl;\nvar __webpack_exports__fetchData = __webpack_exports__.fetchData;\nvar __webpack_exports__getDocument = __webpack_exports__.getDocument;\nvar __webpack_exports__getFilenameFromUrl = __webpack_exports__.getFilenameFromUrl;\nvar __webpack_exports__getPdfFilenameFromUrl = __webpack_exports__.getPdfFilenameFromUrl;\nvar __webpack_exports__getXfaPageViewport = __webpack_exports__.getXfaPageViewport;\nvar __webpack_exports__isDataScheme = __webpack_exports__.isDataScheme;\nvar __webpack_exports__isPdfFile = __webpack_exports__.isPdfFile;\nvar __webpack_exports__noContextMenu = __webpack_exports__.noContextMenu;\nvar __webpack_exports__normalizeUnicode = __webpack_exports__.normalizeUnicode;\nvar __webpack_exports__renderTextLayer = __webpack_exports__.renderTextLayer;\nvar __webpack_exports__setLayerDimensions = __webpack_exports__.setLayerDimensions;\nvar __webpack_exports__shadow = __webpack_exports__.shadow;\nvar __webpack_exports__updateTextLayer = __webpack_exports__.updateTextLayer;\nvar __webpack_exports__version = __webpack_exports__.version;\nexport { __webpack_exports__AbortException as AbortException, __webpack_exports__AnnotationEditorLayer as AnnotationEditorLayer, __webpack_exports__AnnotationEditorParamsType as AnnotationEditorParamsType, __webpack_exports__AnnotationEditorType as AnnotationEditorType, __webpack_exports__AnnotationEditorUIManager as AnnotationEditorUIManager, __webpack_exports__AnnotationLayer as AnnotationLayer, __webpack_exports__AnnotationMode as AnnotationMode, __webpack_exports__CMapCompressionType as CMapCompressionType, __webpack_exports__ColorPicker as ColorPicker, __webpack_exports__DOMSVGFactory as DOMSVGFactory, __webpack_exports__DrawLayer as DrawLayer, __webpack_exports__FeatureTest as FeatureTest, __webpack_exports__GlobalWorkerOptions as GlobalWorkerOptions, __webpack_exports__ImageKind as ImageKind, __webpack_exports__InvalidPDFException as InvalidPDFException, __webpack_exports__MissingPDFException as MissingPDFException, __webpack_exports__OPS as OPS, __webpack_exports__Outliner as Outliner, __webpack_exports__PDFDataRangeTransport as PDFDataRangeTransport, __webpack_exports__PDFDateString as PDFDateString, __webpack_exports__PDFWorker as PDFWorker, __webpack_exports__PasswordResponses as PasswordResponses, __webpack_exports__PermissionFlag as PermissionFlag, __webpack_exports__PixelsPerInch as PixelsPerInch, __webpack_exports__RenderingCancelledException as RenderingCancelledException, __webpack_exports__TextLayer as TextLayer, __webpack_exports__UnexpectedResponseException as UnexpectedResponseException, __webpack_exports__Util as Util, __webpack_exports__VerbosityLevel as VerbosityLevel, __webpack_exports__XfaLayer as XfaLayer, __webpack_exports__build as build, __webpack_exports__createValidAbsoluteUrl as createValidAbsoluteUrl, __webpack_exports__fetchData as fetchData, __webpack_exports__getDocument as getDocument, __webpack_exports__getFilenameFromUrl as getFilenameFromUrl, __webpack_exports__getPdfFilenameFromUrl as getPdfFilenameFromUrl, __webpack_exports__getXfaPageViewport as getXfaPageViewport, __webpack_exports__isDataScheme as isDataScheme, __webpack_exports__isPdfFile as isPdfFile, __webpack_exports__noContextMenu as noContextMenu, __webpack_exports__normalizeUnicode as normalizeUnicode, __webpack_exports__renderTextLayer as renderTextLayer, __webpack_exports__setLayerDimensions as setLayerDimensions, __webpack_exports__shadow as shadow, __webpack_exports__updateTextLayer as updateTextLayer, __webpack_exports__version as version };\n\n//# sourceMappingURL=pdf.mjs.map"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/build/pdf.sandbox.mjs",
    "content": "/**\n * @licstart The following is the entire license notice for the\n * JavaScript code in this page\n *\n * Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * @licend The above is the entire license notice for the\n * JavaScript code in this page\n */\n\n/******/ // The require scope\n/******/ var __webpack_require__ = {};\n/******/ \n/************************************************************************/\n/******/ /* webpack/runtime/define property getters */\n/******/ (() => {\n/******/ \t// define getter functions for harmony exports\n/******/ \t__webpack_require__.d = (exports, definition) => {\n/******/ \t\tfor(var key in definition) {\n/******/ \t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t};\n/******/ })();\n/******/ \n/******/ /* webpack/runtime/hasOwnProperty shorthand */\n/******/ (() => {\n/******/ \t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ })();\n/******/ \n/************************************************************************/\nvar __webpack_exports__ = globalThis.pdfjsSandbox = {};\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  QuickJSSandbox: () => (/* binding */ QuickJSSandbox)\n});\n\n;// CONCATENATED MODULE: ./external/quickjs/quickjs-eval.js\nvar Module=(()=>{var _scriptDir=typeof document!=='undefined'&&document.currentScript?document.currentScript.src:undefined;return function(moduleArg={}){var d=moduleArg,k,n;d.ready=new Promise((a,b)=>{k=a;n=b;});var p=Object.assign({},d),q=\"\";\"undefined\"!=typeof document&&document.currentScript&&(q=document.currentScript.src);_scriptDir&&(q=_scriptDir);q.startsWith(\"blob:\")?q=\"\":q=q.substr(0,q.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1);var aa=d.print||console.log.bind(console),u=d.printErr||console.error.bind(console);Object.assign(d,p);p=null;var v;d.wasmBinary&&(v=d.wasmBinary);\"object\"!=typeof WebAssembly&&w(\"no native wasm support detected\");var x,y=!1,z,A,B,C;function D(){var a=x.buffer;d.HEAP8=z=new Int8Array(a);d.HEAP16=new Int16Array(a);d.HEAPU8=A=new Uint8Array(a);d.HEAPU16=new Uint16Array(a);d.HEAP32=B=new Int32Array(a);d.HEAPU32=C=new Uint32Array(a);d.HEAPF32=new Float32Array(a);d.HEAPF64=new Float64Array(a);}var E=[],F=[],G=[];function ba(){var a=d.preRun.shift();E.unshift(a);}var H=0,I=null,J=null;function w(a){d.onAbort?.(a);a=\"Aborted(\"+a+\")\";u(a);y=!0;a=new WebAssembly.RuntimeError(a+\". Build with -sASSERTIONS for more info.\");n(a);throw a;}var K=a=>a.startsWith(\"data:application/octet-stream;base64,\"),L;L=\"data:application/octet-stream;base64,AGFzbQEAAAABzgZtYAJ/fwBgA39/fwF/YAR/fn9/AX5gAn9/AX9gBX9+f39/AX5gAX8Bf2ADf39/AGAEf39/fwF/YAJ/fgF+YAF/AGABfAF8YAV/f39/fwF/YAJ/fgBgAn9+AX9gAn9/AX5gA39/fgF/YAN/fn8BfmAGf35/f39/AX5gA39+fwBgA39+fwF/YAZ/f39/f38Bf2AEf39/fwBgBn9+fn9/fwF+YAR/f35/AX9gA39+fgF+YAN/f38BfmADf35+AX9gBH9/f38BfmAFf35+fn4AYAJ8fAF8YAF/AX5gBH9/f34Bf2AFf35+f38BfmAFf39/f38AYAd/fn9+fn5/AX9gBX9/f35+AX9gB39/f39/f38Bf2AAAGAFf35/fn8Bf2AEf35+fwBgBH9+fn8BfmAFf35+fn8Bf2AFf39/f38BfmAEf39+fgF/YAF+AX9gBH9+f34BfmAEf35/fwBgBH9+fn8Bf2AJf39/f39/f39/AX9gCH9/f39/f39/AX9gA39+fgBgBH9+f38Bf2AGf35/fn5/AX9gBX9+fn9/AGABfgF+YAd/fn9/f39/AX5gAX8BfGADf39+AGAEf35/fgF/YAV/f35/fwF/YAR/fn5+AX9gBn9/f39/fwF+YAN+f38Bf2AHf39/f39/fwBgAnx/AXxgA39/fgF+YAJ+fwF/YAN8fH8BfGAEf39+fwBgBH9+fn4BfmAAAX9gBn98f39/fwF/YAABfGAFf35/fn8BfmAGf39+fn5+AX9gAn5/AGACf3wAYAV/f39/fgF+YAR/f35/AX5gBH9+f34AYAd/fn5+f39/AX5gBH5+fn4Bf2AKf39/f39/f39/fwF/YAd/f39/f39+AX5gBX9+f39/AGAHfH9/f39/fwBgBX98f39/AX5gAXwBf2AFf39+f38AYAZ/fn5+fn8Bf2AGf35/f39/AX9gBH98f38Bf2AGf39/f39/AGAEf39/fgF+YAV/fn9/fwF/YAV/fn5+fgF/YAJ/fwF8YAV/fn5/fwF/YAV/f35+fgF+YAV/f35+fwF/YAJ8fwF/YAJ8fAF/YAh/fn5+fn9+fgF+YAN/fnwBfmAAAX5gB39/f35+fn8Bf2ACfn4BfGADfn5+AX9gA39/fAACSQwBYQFhABUBYQFiACUBYQFjAAcBYQFkAAYBYQFlAEgBYQFmAAABYQFn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IAILLQEBfwJAIAAoAgAiAUUNACAAKAIQIgBFDQAgASgCACAAQQAgASgCBBEBABoLCzEAIAFBAE4EQCAAQbYBEA0gACABEDggACgCQCIAKAKkAiABQRRsaiAAKAKEAjYCBAsLJwEBfyMAQRBrIgIkACACIAE2AgwgACACQQxqQQQQchogAkEQaiQACxcAIAAgASACQoCAgIAwIAMgBEECENIBCxgBAX4gASkDACEDIAEgAjcDACAAIAMQDAszAQF/IAIEQCAAIQMDQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQQFrIgINAAsLIAALwQUCAn4GfyMAQeAAayIJJAAgA0EAIANBAEobIQsDQCAKIAtHBEAgACACIApBBHRqIgMoAgAQsAUhBiADLQAEIQdCgICAgDAhBAJAAkACQAJAAkACQAJAAkACQAJAIAMtAAUOCgECAgUHAwQIBQAGCyAAIAMoAggQsAUhCAJ+AkACQAJAIAMoAgxBAWoOAwIAAQkLIAAgACkDwAEiBCAIIARBABARDAILIAAgACgCKCkDECIEIAggBEEAEBEMAQsgACABIAggAUEAEBELIQQgACAIEBAgBkHLAUYEQEEBIQcMCAsgBkHUAUcNB0EAIQcMBwsCQCAGQcsBRgRAQQEhBwwBCyAGQdQBRw0AQQAhBwsgACABIAZBAiADIAcQgAMaDAcLIAAgASAGQoCAgIAwIAMoAggEfiAJIAMoAgA2AhAgCUEgaiIIQcAAQeEqIAlBEGoQSBogACADKAIIIAhBAEEKQQggAy0ABUECRhsgAy4BBhCCAQVCgICAgDALIgQgAygCDAR+IAkgAygCADYCACAJQSBqIghBwABB2iogCRBIGiAAIAMoAgwgCEEBQQtBCSADLQAFQQJGGyADLgEGEIIBBUKAgICAMAsiBSAHQYA6chBqGiAAIAQQDCAAIAUQDAwGCyADKQMIIgRCgICAgAh8Qv////8PWARAIARC/////w+DIQQMBQtCgICAgMB+IAS5vSIEQoCAgIDAgYD8/wB9IARC////////////AINCgICAgICAgPj/AFYbIQQMBAtCgICAgMB+IAMpAwgiBEKAgICAwIGA/P8AfSAEQv///////////wCDQoCAgICAgID4/wBWGyEEDAMLIAAgASAGQQIgAyAHEIADGgwDCxABAAsgAzUCCCEECyAAIAEgBiAEIAcQFRoLIAAgBhAQIApBAWohCgwBCwsgCUHgAGokAAuMAgICfgF/AkACQAJAAkACQAJAAkACQAJAQQcgAUIgiKciBCAEQQdrQW5JG0EKag4SAgAGBAAAAAAAAQMFAAAAAAEDAAsgAEGbHkEAEBJCgICAgOAADwsgBEF1SQ0GIAGnIgAgACgCAEEBajYCAAwGCyAAQSEQhgEhAgwECyAAQQQQhgEhAgwDCyAAIABBBRCGASICQTAgAacpAgRC/////weDQQAQFRoMAgsgAEEGEIYBIQIMAQsgAEEHEIYBIQILQoCAgIDgACEDIAJCgICAgHCDQoCAgIDgAFIEfiAEQXVPBEAgAaciBCAEKAIAQQFqNgIACyAAIAIgARC9ASACBUKAgICA4AALDwsgAQsyAQF/AkAgAUIgiKdBdUkNACABpyICIAIoAgAiAkEBazYCACACQQFKDQAgACABEJcFCwsLACAAQeweQQAQEgujBAELfyAAKAIAIQUjAEEQayIIIAI2AgxBfyEJAkADQAJAIAggAiIDQQRqIgI2AgwgAygCACIHQX9GDQAgACgCBCEKA0AgASIEIApODQMgBCAEIAVqIgwtAAAiBkECdEHgrgFqIg0tAABqIgEgCkoNAyAGQcYBRgRAIAwoAAEhCQwBCwsgBiAHRwRAIAdBGHYgBkYgBiAHQRB2Qf8BcUZyIAYgB0H/AXFGckUgBiAHQQh2Qf8BcUdxIAZFIAdBgAJJcnINAyAAIAY2AhALIARBAWohBAJAAkACQAJAAkACQAJAAkAgDS0AA0EFaw4YAAkACQkBCQkBCQkBAQECAgICBAUGBwkDCQsgBCAFai0AACEEIAggA0EIaiICNgIMIAMoAgQiA0F/RgRAIAAgBDYCFAwJCyADIARGDQgMCQsgBCAFai8AACEEIAggA0EIaiICNgIMIAMoAgQiA0F/RgRAIAAgBDYCFAwICyADIARGDQcMCAsgACAEIAVqKAAANgIYDAYLIAAgBCAFaiIDKAAANgIYIAAgAy8ABDYCHAwFCyAAIAQgBWooAAA2AiAMBAsgACAEIAVqIgMoAAA2AiAgACADLQAENgIcDAMLIAAgBCAFaiIDKAAANgIgIAAgAy8ABDYCHAwCCyAAIAQgBWoiAygAADYCICAAIAMoAAQ2AhggACADLQAINgIcDAELCyAAIAk2AgwgACABNgIIQQEhCwsgCwskAQF/IAAoAhAiAkEQaiABIAIoAgARAwAiAUUEQCAAEHALIAELCwAgACABQQAQjQQLJwEBfyMAQRBrIgIkACACIAE7AQ4gACACQQ5qQQIQchogAkEQaiQAC9QBAgR/An5BfyECAkACQAJAAkACQAJAAkAgAUIgiKciA0EKag4RAwUFAgUFBQUFBAABAQEFBQYFCyABp0EARw8LIAGnDwsgAacpAgQhByAAIAEQDCAHQv////8Hg0IAUg8LIAGnKAIMIQQgACABEAwgBEH/////B2pBfkkPCyABpywABSEFIAAgARAMIAVBAE4PCyADQQdrQW1NBEAgAUKAgICAwIGA/P8AfEL///////////8Ag0IBfUKAgICAgICA+P8AVA8LIAAgARAMQQEhAgsgAgs/AQJ/IwBBEGsiAiQAAn8gASAAKAIQRwRAIAIgATYCACAAQcyQASACEBNBfwwBCyAAEA8LIQMgAkEQaiQAIAMLCwAgACABQQEQ6QULGQAgAEEAEFAaIABCgICAgPD/////ADcCBAvDCgIFfxF+IwBB4ABrIgUkACAEQv///////z+DIQwgAiAEhUKAgICAgICAgIB/gyEKIAJC////////P4MiDUIgiCEOIARCMIinQf//AXEhBwJAAkAgAkIwiKdB//8BcSIJQf//AWtBgoB+TwRAIAdB//8Ba0GBgH5LDQELIAFQIAJC////////////AIMiC0KAgICAgIDA//8AVCALQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQoMAgsgA1AgBEL///////////8AgyICQoCAgICAgMD//wBUIAJCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhCiADIQEMAgsgASALQoCAgICAgMD//wCFhFAEQCACIAOEUARAQoCAgICAgOD//wAhCkIAIQEMAwsgCkKAgICAgIDA//8AhCEKQgAhAQwCCyADIAJCgICAgICAwP//AIWEUARAIAEgC4QhGUIAIQEgGVAEQEKAgICAgIDg//8AIQoMAwsgCkKAgICAgIDA//8AhCEKDAILIAEgC4RQBEBCACEBDAILIAIgA4RQBEBCACEBDAILIAtC////////P1gEQCAFQdAAaiABIA0gASANIA1QIgYbeSAG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////B4OENwIEIABBADYCBCABrUKAgICAkH+ECwsPACAAKAJAQYACaiABEBsLEwAgACABIAIgAyABQYCAARDQAQsNACAAIAEgAkEGEMgCCx8BAX8gACgCJCIBIAEoAgBBAWo2AgAgACABQQIQ5wULZwECfwJ/IAAoAggiAiAAKAIMTgRAQX8gACACQQFqIAEQxAINARoLIAAgACgCCCIDQQFqNgIIIAAoAgRBEGohAgJAIAAoAhAEQCACIANBAXRqIAE7AQAMAQsgAiADaiABOgAAC0EACwt6AQN/AkACQCAAIgFBA3FFDQAgAS0AAEUEQEEADwsDQCABQQFqIgFBA3FFDQEgAS0AAA0ACwwBCwNAIAEiAkEEaiEBIAIoAgAiA0F/cyADQYGChAhrcUGAgYKEeHFFDQALA0AgAiIBQQFqIQIgAS0AAA0ACwsgASAAawsNACAAIAEgAkEAEJkDCywBAX8jAEEQayIDJAAgAyACNgIMIABB3ABqQYABIAEgAhDJAhogA0EQaiQAC+gDAQl/IwBBIGsiBSQAIAEgAiABKAIMIAIoAgxJIgYbIgcoAgQgAiABIAYbIggoAgRzIQoCQAJAIAcoAgwiAkUEQAJAIAgoAggiAUH/////B0cEQCAHKAIIIgJB/////wdHDQELIAAQKkEAIQIMAwsgAUH+////B0cgAkH+////B0dxRQRAAkAgAUH+////B0YEQCACQYCAgIB4Rg0BDAQLIAFBgICAgHhHIAJB/v///wdHcg0DCyAAECpBASECDAMLIAAgChCAAUEAIQIMAgsgCCgCDCILIQkgAiEGIARBB3FBBkYEQCACIANBIWpBBXYiASABIAJKGyEGIAsgASABIAtKGyEJCwJ/AkAgACAIRg0AIAAgB0YNACAADAELIAAoAgAhASAFQgA3AhggBUKAgICAgICAgIB/NwIQIAUgATYCDCAAIQwgBUEMagshASAHKAIQIQAgCCgCECENAn8gASAGIAlqEFAEQCABECpBIAwBCyABKAIQIA0gC0ECdGogCUECdGsgCSAAIAJBAnRqIAZBAnRrIAYQ8AEgASAKNgIEIAEgBygCCCAIKAIIajYCCCABIAMgBBCbAgshAiABIAVBDGoiAEcNASAMIAAQvwQMAQsgACAKEH9BACECCyAFQSBqJAAgAgsKACAAIAFBARBHCygBAX8gAkIgiKdBdU8EQCACpyIDIAMoAgBBAWo2AgALIAAgASACEG0LlQUCA38BfgJAAkACQAJAAkACQANAIAIoAhAiBEEwaiEFIAQgBCgCGCADcUF/c0ECdGooAgAhBANAIARFDQQgAyAFIARBAWtBA3QiBmoiBCgCBEcEQCAEKAIAQf///x9xIQQMAQsLIAIoAhQgBmohBSAEKAIAIQYgAUUNASABQoCAgIAwNwMYIAFCgICAgDA3AxAgAUKAgICAMDcDCCABIAZBGnZBB3EiBjYCAAJAAkACQAJAIAQoAgBBHnZBAWsOAwABAgMLIAEgBkEQcjYCACAFKAIAIgAEQCAAIAAoAgBBAWo2AgAgASAArUKAgICAcIQ3AxALIAUoAgQiAEUNCSAAIAAoAgBBAWo2AgAgASAArUKAgICAcIQ3AxhBAQ8LIAUoAgAoAhApAwAiB0KAgICAcINCgICAgMAAUQ0EIAdCIIinQXVPBEAgB6ciACAAKAIAQQFqNgIACyABIAc3AwgMCAsgACACIAMgBSAEEMECRQ0BDAYLCyAFKQMAIgdCIIinQXVPBEAgB6ciACAAKAIAQQFqNgIACyABIAc3AwgMBQtBASEEIAZBgICAgHxxQYCAgIB4Rw0CIAUoAgAoAhA1AgRCIIZCgICAgMAAUg0CCyAAIAMQ0QEMAgtBACEEIAItAAUiBUEEcUUNACAFQQhxBEAgA0EATg0BIANB/////wdxIgMgAigCKCIFSSEEIAFFIAMgBU9yDQEgAUKAgICAMDcDGCABQoCAgIAwNwMQIAFBBzYCACABIAAgAq1CgICAgHCEIAMQpgE3AwgMAwsgACgCECgCRCACLwEGQRhsaigCFCIFRQ0AIAUoAgAiBUUNACAAIAEgAq1CgICAgHCEIAMgBREXACEECyAEDwtBfw8LQQELDQAgACABIAJBARDIAgsmAQF/AkAgACgCEEGDf0cNACAAKAIgIAFHDQAgACgCJEUhAgsgAgsdACAAIAEpAxAQDCAAIAEpAxgQDCAAIAEpAwgQDAumAQEDfyAAKAIQIgMoAuABIAGnQQAgAUL/////b1YbIgRBgYDc8XlsQf//o44GayIFQSAgAygC1AFrdkECdGohAwJAAkADQCADKAIAIgMEQAJAIAMoAhQgBUcNACADKAIsIARHDQAgAygCIEUNAwsgA0EoaiEDDAELCyAAIARBAhDyBCIDDQFCgICAgOAADwsgAyADKAIAQQFqNgIACyAAIAMgAhDnBQsqAQJ/IwBBEGsiBCQAIAQgAzYCDCAAIAEgAiADEMkCIQUgBEEQaiQAIAULSAAgACABRwRAIAAgASgCDBBQBEAgABAqQSAPCyAAIAEoAgQ2AgQgACABKAIINgIIIAAoAhAgASgCECABKAIMQQJ0EB4aC0EACywAIAFCgICAgGCDQoCAgIAgUQRAIABB6z9BABASQoCAgIDgAA8LIAAgARAlC6sCAQR/AkAgAiADTw0AIAMgAmshBSABQRBqIQQgAS0AB0GAAXEEQEEAIQMgBUEAIAVBAEobIQYgBCACQQF0aiEBQQAhAgNAIAIgBkZFBEAgAyABIAJBAXRqLwEAciEDIAJBAWohAgwBCwsCQCAAKAIIIAVqIgIgACgCDCIHSgRAQX8hBCAAIAIgAxDEAkUNAQwDCyAAKAIQIANBgAJIcg0AQX8hBCAAIAcQ4AMNAgsCQCAAKAIQRQRAQQAhAgNAIAIgBkYNAiAAKAIEIAAoAgggAmpqIAEgAkEBdGotAAA6ABAgAkEBaiECDAALAAsgACgCBCAAKAIIQQF0akEQaiABIAVBAXQQHhoLIAAgACgCCCAFajYCCEEADwsgACACIARqIAUQiwIhBAsgBAuJAQECfyABKAJ8IgRB//8DTgRAIABBlyhBABA6QX8PC0F/IQMgACABQfQAakEQIAFB+ABqIARBAWoQZAR/QX8FIAEgASgCfCIDQQFqNgJ8IAEoAnQgA0EEdGoiA0IANwIAIANCADcCCCADIAAgAhAWNgIAIAMgAygCDEGAfnI2AgwgASgCfEEBawsLRwEBfyABQiCIp0F1TwRAIAGnIgMgAygCAEEBajYCAAsgAkIgiKdBdU8EQCACpyIDIAMoAgBBAWo2AgALIAAgASACQQEQtAEL+wQBAn8CQAJAIAFCgICAgHBUIAJC/////w9Wcg0AIAKnIQMCQAJAAkACQAJAAkACQAJAAkACQAJAIAGnIgQvAQZBAmsOHgALCwsLCwALCwsLCwsLCwsLCwsCAQIDBAUGBwgJCgsLIAQoAiggA00NCiAEKAIkIANBA3RqKQMAIgFCIIinQXVJDQsgAaciACAAKAIAQQFqNgIAIAEPCyAEKAIoIANNDQkgBCgCJCADajAAAEL/////D4MPCyAEKAIoIANNDQggBCgCJCADajEAAA8LIAQoAiggA00NByAEKAIkIANBAXRqMgEAQv////8Pgw8LIAQoAiggA00NBiAEKAIkIANBAXRqMwEADwsgBCgCKCADTQ0FIAQoAiQgA0ECdGo1AgAPCyAEKAIoIANNDQQgBCgCJCADQQJ0aigCACIAQQBOBEAgAK0PC0KAgICAwH4gALi9IgFCgICAgMCBgPz/AH0gAUKAgICAgICA+P8AVhsPCyAEKAIoIANNDQMgACAEKAIkIANBA3RqKQMAEL8CDwsgBCgCKCADTQ0CIAAgBCgCJCADQQN0aikDABCIBA8LIAQoAiggA00NAUKAgICAwH4gBCgCJCADQQJ0aioCALu9IgFCgICAgMCBgPz/AH0gAUL///////////8Ag0KAgICAgICA+P8AVhsPCyAEKAIoIANNDQBCgICAgMB+IAQoAiQgA0EDdGopAwAiAUKAgICAwIGA/P8AfSABQv///////////wCDQoCAgICAgID4/wBWGw8LIAAgAhAwIQMgACACEAwgA0UEQEKAgICA4AAPCyAAIAEgAyABQQAQESEBIAAgAxAQCyABC4IDAgR/An4CQCAAKQNwIgVQRSAFIAApA3ggACgCBCIBIAAoAiwiAmusfCIGV3FFBEAjAEEQayICJABBfyEBAkACfyAAIAAoAkgiA0EBayADcjYCSCAAKAIUIAAoAhxHBEAgAEEAQQAgACgCJBEBABoLIABBADYCHCAAQgA3AxAgACgCACIDQQRxBEAgACADQSByNgIAQX8MAQsgACAAKAIsIAAoAjBqIgQ2AgggACAENgIEIANBG3RBH3ULDQAgACACQQ9qQQEgACgCIBEBAEEBRw0AIAItAA8hAQsgAkEQaiQAIAEiA0EATg0BIAAoAgQhASAAKAIsIQILIABCfzcDcCAAIAE2AmggACAGIAIgAWusfDcDeEF/DwsgBkIBfCEGIAAoAgQhASAAKAIIIQICQCAAKQNwIgVQDQAgBSAGfSIFIAIgAWusWQ0AIAEgBadqIQILIAAgAjYCaCAAIAYgACgCLCIAIAFrrHw3A3ggACABTwRAIAFBAWsgAzoAAAsgAwtPAQF/An9BACAAKAIMIAFGDQAaIAAoAgAiAigCACAAKAIQIAFBAnQgAigCBBEBACECIAEEQEF/IAJFDQEaCyAAIAE2AgwgACACNgIQQQALC9EBAQZ/IABBAWohBQJAAkAgAC0AACIDwCIHQQBOBEAgBSEBDAELQX8hBCAHQUBrQf8BcSIDQT1LDQEgA0ECdEGU9gFqKAIAIgYgAU4NASAGQQFrIQggACAGakEBaiEBIAcgBkHz9QFqLQAAcSEDQQAhAANAIAAgBkcEQCAFLAAAIgRBv39KBEBBfw8FIARBP3EgA0EGdHIhAyAAQQFqIQAgBUEBaiEFDAILAAsLQX8hBCADIAhBAnRBgPYBaigCAEkNAQsgAiABNgIAIAMhBAsgBAsLACAAIAFBABDpBQsJACAAQQEQrQELugEBAn8CQAJAIAJC/////wdYBEAgACABIAKnQYCAgIB4chBuIgRBAEwNASAAIAEgAhBOIgJCgICAgHCDQoCAgIDgAFINAkF/IQQMAgsgACACEIsDIgVFBEBBfyEEDAELAkAgACABIAUQbiIEQQBMBEBCgICAgDAhAgwBCyAAIAEgBSABQQAQESICQoCAgIBwg0KAgICA4ABSDQBBfyEECyAAIAUQEAwBC0KAgICAMCECCyADIAI3AwAgBAsbAQF/IAAgARA1BH9BAAUgAEH7OUEAEBJBfwsLYwEBfyACQiCIp0F1TwRAIAKnIgUgBSgCAEEBajYCAAsCQCAAIAEgAhDTBSIFDQACQCABKAIAIgBBAEgEQCAAIARqIgBBACAAQQBKGyEDDAELIAAgA0wNAQsgASADNgIACyAFCxgAIAAtAABBIHFFBEAgASACIAAQlwQaCwsPACAAKAJAQYACaiABEA4LrgIAAkACQAJAAkAgAkEDTARAAkACQAJAAkACQAJAAkACQAJAIAFB2ABrDgkAAQIDBAUGBwgKCyAAIAJBO2tB/wFxEA4PCyAAIAJBN2tB/wFxEA4PCyAAIAJBM2tB/wFxEA4PCyAAIAJBL2tB/wFxEA4PCyAAIAJBK2tB/wFxEA4PCyAAIAJBJ2tB/wFxEA4PCyAAIAJBI2tB/wFxEA4PCyAAIAJBH2tB/wFxEA4PCyAAIAJBG2tB/wFxEA4PCyACQf8BSw0BAkACQAJAIAFB2ABrDgMAAQIECyAAQcIBEA4MBQsgAEHDARAODAQLIABBxAEQDgwDCyABQSJGDQELIAAgAUH/AXEQDiAAIAJB//8DcRAmDwsgACACQRJrQf8BcRAODwsgACACQf8BcRAOCzgBAX8CQAJAIAFCgICAgHBUDQAgAaciAy8BBiACRw0AIAMoAiAiAw0BCyAAIAIQigNBACEDCyADC0EBAX8gAQRAA0AgAiADRkUEQCAAIAEgA0EDdGooAgQQECADQQFqIQMMAQsLIAAoAhAiAEEQaiABIAAoAgQRAAALCywBAX8gACgCECICQRBqIAEgAigCABEDACICBEAgAkEAIAEQLA8LIAAQcCACC20BAX8jAEGAAmsiBSQAIARBgMAEcSACIANMckUEQCAFIAFB/wFxIAIgA2siA0GAAiADQYACSSIBGxAsGiABRQRAA0AgACAFQYACEFcgA0GAAmsiA0H/AUsNAAsLIAAgBSADEFcLIAVBgAJqJAALvgECAn4BfwJAAkAgAUKAgICAcINCgICAgDBRBEAgACgCKCACQQN0aikDACIDQiCIp0F0Sw0BDAILIAAgAUE8IAFBABARIgNCgICAgHCDQoCAgIDgAFEEQCADDwsgA0L/////b1YNASAAIAMQDCAAIAEQ/AIiBUUEQEKAgICA4AAPCyAFKAIoIAJBA3RqKQMAIgNCIIinQXVJDQELIAOnIgUgBSgCAEEBajYCAAsgACADIAIQRyEEIAAgAxAMIAQLDAAgAEHZ6gBBABASCw0AIAAgASABED0Q6gELdQEBfiAAIAEgBH4gAiADfnwgA0IgiCICIAFCIIgiBH58IANC/////w+DIgMgAUL/////D4MiAX4iBUIgiCADIAR+fCIDQiCIfCABIAJ+IANC/////w+DfCIBQiCIfDcDCCAAIAVC/////w+DIAFCIIaENwMAC1ABAX4CQCADQcAAcQRAIAEgA0FAaq2GIQJCACEBDAELIANFDQAgAiADrSIEhiABQcAAIANrrYiEIQIgASAEhiEBCyAAIAE3AwAgACACNwMIC2QAAkACQCABQQBIDQAgACgCrAIgAUwNACAAKAKkAiABQRRsaiIAIAAoAgAgAmoiADYCACAAQQBIDQEgAA8LQdwXQajsAEHzpwFBr8MAEAAAC0HphQFBqOwAQfanAUGvwwAQAAALcAECfyAEIAMoAgBKBH8jAEEQayIFJAAgACABKAIAIAQgAygCAEEDbEECbSIAIAAgBEgbIgAgAmwgBUEMahCnASIEBH8gAyAFKAIMIAJu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EGsiBCQAAkAgAkIgiKciA0ECTQRAIAEgAqe3OQMAQQAhAwwBCyADQQdrQW1NBEAgASACQoCAgIDAgYD8/wB8NwMAQQAhAwwBCwJ/IAAgAhCWASICQoCAgIBwg0KAgICA4ABRBEBEAAAAAAAA+H8hBUF/DAELAnwCQAJAQQcgAkIgiKciAyADQQdrQW5JGyIDQXZHBEAgA0EHRg0CIAMNASACp7cMAwsgAqdBBGogBEEIahCxBCAAIAIQDCAEKwMIIQVBAAwDCxABAAsgAkKAgICAwIGA/P8AfL8LIQVBAAshAyABIAU5AwALIARBEGokACADC90BAQN/AkAgAUKAgICAcFoEQCABpyEDA0ACQCADLQAFQQRxRQ0AIAAoAhAoAkQgAy8BBkEYbGooAhQiBEUNACAEKAIQIgRFDQAgAyADKAIAQQFqNgIAIAAgA61CgICAgHCEIgEgAiAEERMAIQUgACABEAwgBQ8LIAMgAygCAEEBajYCACAAQQAgAyACEEMhBCAAIAOtQoCAgIBwhBAMIAQNAgJAIAMvAQZBFWtB//8DcUEKSw0AIAAgAhCTAyIERQ0AIARBH3UPCyADKAIQKAIsIgMNAAsLQQAhBAsgBAvNCQIEfwV+IwBB8ABrIgYkACAEQv///////////wCDIQkCQAJAIAFQIgUgAkL///////////8AgyIKQoCAgICAgMD//wB9QoCAgICAgMCAgH9UIApQG0UEQCADQgBSIAlCgICAgICAwP//AH0iC0KAgICAgIDAgIB/ViALQoCAgICAgMCAgH9RGw0BCyAFIApCgICAgICAwP//AFQgCkKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEEIAEhAwwCCyADUCAJQoCAgICAgMD//wBUIAlCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhBAwCCyABIApCgICAgICAwP//AIWEUARAQoCAgICAgOD//wAgAiABIAOFIAIgBIVCgICAgICAgICAf4WEUCIFGyEEQgAgASAFGyEDDAILIAMgCUKAgICAgIDA//8AhYRQDQEgASAKhFAEQCADIAmEQgBSDQIgASADgyEDIAIgBIMhBAwCCyADIAmEUEUNACABIQMgAiEEDAELIAMgASABIANUIAkgClYgCSAKURsiCBshCiAEIAIgCBsiDEL/////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/wBWGwsQTgtTAQF/IAAoAhAiBEEQaiABIAIgBCgCCBEBACIBIAJFckUEQCAAEHAgAQ8LIAMEQCADIAEgACgCECgCDBEFACIAIAJrIgJBACAAIAJPGzYCAAsgAQsNACAAQQAgAUEAEJoDC/kBAgN+An8jAEEQayIFJAACfiABvSIEQv///////////wCDIgJCgICAgICAgAh9Qv/////////v/wBYBEAgAkI8hiEDIAJCBIhCgICAgICAgIA8fAwBCyACQoCAgICAgID4/wBaBEAgBEI8hiEDIARCBIhCgICAgICAwP//AIQMAQsgAlAEQEIADAELIAUgAkIAIAKnZ0EgaiACQiCIp2cgAkKAgICAEFQbIgZBMWoQYiAFKQMAIQMgBSkDCEKAgICAgIDAAIVBjPgAIAZrrUIwhoQLIQIgACADNwMAIAAgAiAEQoCAgICAgICAgH+DhDcDCCAFQRBqJAALKgEBfyMAQRBrIgMkACADIAI2AgwgACABIAJBpANBABCUBBogA0EQaiQAC0cAIAAgAUkEQCAAIAEgAhAeGg8LIAIEQCAAIAJqIQAgASACaiEBA0AgAEEBayIAIAFBAWsiAS0AADoAACACQQFrIgINAAsLCyABAX4gACAAIAIgASADQQRBABCCASIFIAEgBBC/ASAFC4sMAQZ/IwBBIGsiAyQAAkACQAJAAkACQAJ/IAAoAhAiAkGDf0cEQEEAIAJBV0cNARogACgCQCIELQBsQQFxRQRAIABBl+AAQQAQEwwDCyAEKAJkRQRAIABB6jtBABATDAMLQX8hBSAAEA8NBQJAAkACQAJAIAAoAhAiBEEpaw4EAgEBAgALIARB3QBGIARBOmtBAklyIARB/QBGcg0BCyAAKAIwDQBBACECIARBKkYEQCAAEA8NCEEBIQILIAAgARCtAUUNAQwHCyAAQQYQDUEAIQILIAAoAkAtAGwhASACBEAgABAtIQUgABAtIQIgAEGAAUH/ACABQQNGGxANIABBDhANIABBBhANIABBBhANIAAgBRAaIABBhgEQDSABQQNHIgdFBEAgAEGMARANCyAAQYMBEA0gAEHCABANIABB6gAQFyAAQesAQX8QGCEGIAAgAhAaQYoBIQQgACAHBH9BigEFIABBwQAQDSAAQcEAEBdBiwELEA0gAEEREA0gAEHrAEF/EBghBCAA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AqcQvAJFIQQMBgsgAacgAqdGIAVBeEZxIQQMBQsgBUF/Rw0EIAGnIAKnRiEEDAQLIAGntyEIIAVBB0cEQCAFDQQgAqe3DAILIAJCgICAgMCBgPz/AHy/DAELIAFCgICAgMCBgPz/AHy/IQggBQRAIAVBB0cNAyACQoCAgIDAgYD8/wB8vwwBCyACp7cLIQkCQCADBEACQAJAIAi9IgFC////////////AIMiAkKBgICAgICA+P8AWgRAIAm9Qv///////////wCDQoGAgICAgID4/wBUIQQMAQsgCb0iCkL///////////8Ag0KBgICAgICA+P8AVA0BCyAEIAJCgICAgICAgPj/AFZzIQQMBQsgA0ECRw0BCyAIIAlhIQQMAwsgASAKUSEEDAILIAVBdkcNACAAIAdBHGoiBiABEK0CIgMgACAHQQhqIAIQrQIiBRC9AiEEIAMgBkYEQCAGEBkLIAUgB0EIaiIDRw0AIAMQGQsgACABEAwgACACEAwLIAdBMGokACAECy8BAX8jAEHQAGsiAyQAIAMgACADQRBqIAEQgQE2AgAgACACIAMQEiADQdAAaiQACw0AIAAgASABED0QnQMLHQEBfyAAIAFB/wFxEA4gACgCBCEDIAAgAhAbIAMLEgAgACABIAIgAyAEQZQDELEDC1IBAX8gACgCDCIDRQRAQQAPCyAAIAAoAghB/////wNBgYCAgHwgASABQYGAgIB8TBsiASABQf////8DThtqNgIIIABB/////wMgAiADQQAQ3AILHwEBfyAAKAIMIgNFBEBBAA8LIAAgASACIANBABDcAgsgACABQgA3AgwgAUKAgICAgICAgIB/NwIEIAEgADYCAAtmAQF/An9BACAAKAIIIgIgAU8NABpBfyAAKAIMDQAaIAAoAhQgACgCACACQQNsQQF2IgIgASABIAJJGyIBIAAoAhARAQAiAkUEQCAAQQE2AgxBfw8LIAAgATYCCCAAIAI2AgBBAAsLZwECfwJAIAFCgICAgHBUDQAgAaciAy8BBkEEayIEQR1LQQEgBHRBz4CAgAJxRXINACAAIAMpAyAQDCADIAI3AyAPCyAAIAIQDCABQoCAgIBwg0KAgICA4ABSBEAgAEHu0gBBABASCwshAQF/IAAgASAAIAIQtgEiAiADIAQQFSEFIAAgAhAQIAULRwIBfgF/IAApA8ABIQQgAUIgiKdBdU8EQCABpyIFIAUoAgBBAWo2AgALIAAgBCACIAFBAxC+ARogACABIAMQrAQgACABEAwLhAEBAX8CQCACRSABQoCAgIBwg0KAgICAkH9SckUEQCABpyIDIAMoAgBBAWo2AgBBBCECIAAoAgAgAxCRBCIDQQBKDQELIAFCIIinQXVPBEAgAaciAiACKAIAQQFqNgIAC0ECIQIgACABEMcDIgNBAE4NAEF/DwsgACACEA0gACADEDhBAAv8AgACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAFBxwBrDgQBDQ0CAAsgAUE8RwRAIAFBvwFHBEAgAUG4AUYNByABQcEARw0OC0EVIQQCQCAFQQJrDgMFBAAGC0EbIQQMBAsgACgCACADEBAgACAEEBoLQbMBIQQCQAJAAkAgBUEBaw4EBgABAgULQRYhBAwEC0EZIQQMAwtBHSEEDAILQRchAQJAIAVBAmsOAwkIAAoLQR8hAQwIC0EYIQQLIAAgBBANCwJAIAFBxwBrDgQDCAgHAAsgAUE8Rg0DIAFBwQBGDQggAUG/AUYNASABQbgBRw0HCyAFQQJPDQggAEG9AUG5ASAGGxANDAkLIABBwQEQDQwICyAAQckAEA0PCyAAQT0QDQ8LQRohAQsgACABEA0LIABBywAQDQ8LEAEACyAAQcMAEA0gACADEDgPC0He9gBBqOwAQZy5AUGXzwAQAAALIAAgAxA4IAAgAkH//wNxEBQLixMBCn8jAEFAaiIGJAAgBEEASARAIAAgBkEoakEAEJwBGiAGKAIoQQJxIQQLIAAQLSEKIAAQLSELIAAoAkAoAoQCIQ0CQCADBEAgAEEREA0gAEEGEA0gAEGsARANIABB6wAgChAYGiAAIAsQGgwBCyAAQewAIAoQGBogACALEBogAEEREA0LIAAoAkAoAoQCIQ4CQAJAAkACQAJAIAAoAhAiB0HbAEcEQCAHQfsARgRAQX8hByAAEA8NBiAAQfEAEA0gBARAIABBCxANIABBGxANCyABQUlGIAFBUUZyIQwgAUGxf0chDwNAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIQIgdBpX9HBEAgB0H9AEYNCyAAIAZBOGpBAEEBQQAQxgMiB0EASA0SIAZBuAE2AjAgBkEANgI0IAAoAkAiCSgCvAEhCCAGQX82AjwgBiAINgIsIAZBADYCCCAHDQIgABAPRQ0BIAYoAjghBwwGCyAERQRAIAAoAgBBuD9BABA6DBILQX8hByAAEA8NEgJAIAEEQCAGIAAgAhDFAyIINgI0IAhFDRQgBkG4ATYCMCAAKAJAKAK8ASEHIAZBfzYCPCAGIAc2AiwgBkEANgIIDAELIAAQogINEyAAIAZBMGogBkEsaiAGQTRqIAZBPGogBkEIakEAQfsAEK4BDRMLIAAoAhBB/QBGDQIgAEHjFUEAEBMMEAsCQCAAKAIQQSByQfsARw0AIAAgBkEoakEAEJwBIgdBLEYgB0H9AEZyRSAHQT1HcQ0AAkAgBigCOCIHRQRAIAQEQCAAQfIAEA0gAEEYEA0gAEEHEA0gAEHRABANIABBGBANCyAAQcgAEA0MAQsgBARAIABBGxANIABBBxANIABBzAAQDSAAIAcQFyAAQRsQDQsgAEHCABANIAAgBxA4C0F/IQcgACABIAJBAUF/QQEQwgFBAEgNEiAAKAIQQf0ARg0KIABBLBAoRQ0LDBILAkACfyAGKAI4IgdFBEAgAEHzABANIARFBEBBEiEIDAMLQRghCSAAQRgQDSAAQQcQDSAAQdEAEA1BEgwBCyAERQRAQREhCAwCC0EbIQkgAEEbEA0gAEEHEA0gAEHMABANIAAgBxAXQRELIQggACAJEA0LIAAgCBANIAEEQCAGIAAgAhDFAyIINgI0IAhFDQUgB0UNBAwGCyAAEKICDQQMAgsCQCACBH8gACAGKAI4IgcQ5gQNBSAAKAJABSAJCy0AbkEBcUUNACAGKAI4IgdBzgBHIAdBO0dxDQAgAEGLHUEAEBMMBAsgBARAIABBGxANIABBBxANIABBzAAQDSAAIAYoAjgQFyAAQRsQDQsgAUEAIA8bRQRAIABBERANIABBuAEQDSAAIAYoAjgiBxAXIAAgACgCQC8BvAEQFAwCCyAGIAAoAgAgBigCOBAWIgc2AjQgAEHCABANIAAgBxA4DAYLIABBCxANIABB0wAQDSAAIAYoAggiB0ECdEEEaiAHQQV0QUBrckH8AXEQWAwECyAAIAZBMGogBkEsaiAGQTRqIAZBPGogBkEIakEAQfsAEK4BDQEgBigCCCEIAkACQCAHRQRAQR4hBwJAIAhBAWsOAwMCAAQLQSAhByAAQSAQDQwCCyAIQQFrIghBA08NBCAAIAhBAXRBG2pB/wFxEA0MBAtBHCEHCyAAIAcQDQsgAEHHABANDAILIAAoAgAgBxAQDAoLIABBwQAQDSAAIAcQOAsgAUUNASAGKAI0IQcLIAAgByABEKMCDQcgBiAAKAJAKAK8ATYCLAsCQCAAKAIQQT1HBEAgBigCMCEHDAELIABBERANIABBBhANIABBrAEQDSAAQeoAQX8QGCEIIAAQDw0HIABBDhANIAAQUw0HIAYoAjAiB0G4AUcgB0E8R3FFBEAgACAGKAI0EJ4BCyAAIAgQGgsgACAHIAYoAiwgBigCNCAGKAI8QQEgDBDBASAAKAIQQf0ARg0AQX8hByAAQSwQKEUNAQwICwsgAEEOEA0gBARAIABBDhANC0F/IQcgABAPRQ0CDAYLIABB4A9BABATDAQLIAAQDw0DIAYgACgCQCIEKAKwAjYCCCAEIAZBCGo2ArACIAZBfzYCHCAGQv////8vNwIUIAZCgICAgHA3AgwgBCgCvAEhBCAGQQE2AiQgBiAENgIgIABB/wAQDSABQUlGIAFBUUZyIQwDQAJAIAAoAhAiB0HdAEYNACAHIgRBpX9HIglFBEAgABAPDQZB7YcBIQggACgCECIEQSxGIARB3QBGcg0ECwJAAkAgBEH7AEYgBEHbAEZyRQRAIARBLEcNASAAQYIBEA0gAEEAEFggAEEOEA0gAEEOEA0MAgsgACAGQShqQQAQnAEiBEEsRiAEQd0ARnJFIARBPUdxDQACQCAJRQRAIARBPUYEQEHBzwAhCAwICyAAQQAQ5QQMAQsgAEGCARANIABBABBYIABBDhANCyAAIAEgAkEBIAYoAihBAnFBARDCAUEASA0HDAELIAZBADYCOCAGQQA2AjQCQCABBEAgBiAAIAIQxQMiBDYCNCAERQ0HIAAgBCABEKMCDQcgBkG4ATYCMCAGIAAoAkAoArwBNgIsDAELIAAQogINByAAIAZBMGogBkEsaiAGQTRqIAZBPGogBkE4akEAQdsAEK4BDQcLAkAgCUUEQCAAIAYoAjgQ5QQMAQsgAEGCARANIAAgBi0AOBBYIABBDhANIAAoAhBBPUcNACAAQREQDSAAQQYQDSAAQawBEA0gAEHqAEF/EBghBCAAEA8NBiAAQQ4QDSAAEFMNBiAGKAIwIghBuAFHIAhBPEdxRQRAIAAgBigCNBCeAQsgACAEEBoLIAAgBigCMCAGKAIsIAYoAjQgBigCPEEBIAwQwQELIAAoAhBB3QBGDQAgB0Glf0YEQEGQ0wAhCAwECyAAQSwQKEUNAQwFCwsgAEGFARANIAAoAkAiASABKAKwAigCADYCsAIgABAPDQMLAkAgBUUNACAAKAIQQT1HDQBBfyEHIABB7ABBfxAYIQEgABAPDQQgACAKEBogAwRAIABBDhANCyAAEFMNBCAAQewAIAsQGBogACABEBpBASEHDAQLIANFBEAgAEHDPUEAEBMMAwsgACgCQCgCgAIgDWpBswEgDiANaxAsGiAAKAJAKAKkAiAKQRRsaiIAIAAoAgBBAWs2AgBBACEHDAMLIAAgCEEAEBMMAQsgACgCACAGKAI0EBALQX8hBwsgBkFAayQAIAcLKwAgACgCQCgCpAFBAE4EQCAAQQYQDSAAQdkAEA0gACAAKAJALwGkARAUCwsTACAAIAEgAiADIARBAEEAEN0BC6YBAQF/IwBBEGsiAyQAIAMgAjcDCAJAIAAgAUGHASABQQAQESICQoCAgIBwg0KAgICA4ABRDQAgACACEDUEQCAAIAIgAUEBIANBCGoQNiICQv////9vViACQoCAgICwf4NCgICAgCBRcg0BIAAgAhAMIABBpcEAQQAQEkKAgICA4AAhAgwBCyAAIAIQDCAAIAEgACADQQhqEIoFIQILIANBEGokACACC6MBAgN/AX4gAEEQaiECIAEoAgAiBEEBaiEDAkAgACkCBCIFQoCAgIAIg1BFBEAgAiAEQQF0ai8BACIAQYD4A3FBgLADRyADIAWnQf////8HcU5yDQEgAiADQQF0ai8BACICQYD4A3FBgLgDRw0BIABBCnRBgPg/cSACQf8HcXJBgIAEaiEAIARBAmohAwwBCyACIARqLQAAIQALIAEgAzYCACAACxIAIAFB2AFOBEAgACABEIYFCwthACAAIAEgAkKAgICACHxC/////w9YBH4gAkL/////D4MFQoCAgIDAfiACub0iAkKAgICAwIGA/P8AfSACQv///////////wCDQoCAgICAgID4/wBWGwsgAyAEQQdyEJQBCzkAIABB/wBNBEAgAEEDdkH8////AXFBsP8BaigCACAAdkEBcQ8LIABBfnFBjMAARiAAEJYGQQBHcgs1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QfD//wFxayIYJAAgBSEVIAYEQCAHIAQgByAIGyIIQQAgCEEAShsiCGsiCUEAIAcgCU8bIREDQAJAIAggCkYEQANAIAggEUYNAiAYIAhBA3RqQoCAgIAwNwMAIAhBAWohCAwACwALIAUgCkEDdCIJaikDACIBQiCIp0F1TwRAIAGnIhUgFSgCAEEBajYCAAsgCSAYaiABNwMAIBFBAWohESAKQQFqIQoMAQsLIA4gBzYCVCAYIRULIA4gFTYCQCAOIBggBkEDdGoiETYCREEAIQgDQCAIIBdHBEAgESAIQQN0akKAgICAMDcDACAIQQFqIQgMAQsLIBIoAhQhBiAOIBYoAowBNgIwIBYgDkEwaiIUNgKMASASKAIwIQkgESAXQQN0aiIIIRcLQQAMAQtBAQshBwNAAkACQAJAAkAgB0UEQCAEQQN0ISMgA0KAgICAcIMhOyARQQhqIRogEUEQaiEbIBFBGGohHCAVQQhqIR0gFUEQaiEeIBVBGGohHyAUQRhqISQgAkIgiKciIEF+cSElIANCIIinISYgBK0hOiADpyEhIA5BMGohJyAOQegAaiEiIAghBwJAA0ACQCAGQQFqIQxCgICAgDAhNQJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJA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AAsgCCABNwMQIAhBGGohBwzeAQsgCCAIQQhrIgYpAwA3AwAgCEEQaykDACIBQiCIp0F1TwRAIAGnIgcgBygCAEEBajYCAAsgBiABNwMAIAhBCGohBwzdAQsgCCAIQQhrIgYpAwAiATcDACAGIAhBEGsiBikDADcDACABQiCIp0F1TwRAIAGnIgcgBygCAEEBajYCAAsgBiABNwMAIAhBCGohBwzcAQsgCCAIQQhrIgYpAwAiATcDACAIQRBrIgcpAwAhNSAHIAhBGGsiBykDADcDACAGIDU3AwAgAUIgiKdBdU8EQCABpyIGIAYoAgBBAWo2AgALIAcgATcDACAIQQhqIQcM2wELIAggCEEIayIGKQMAIgE3AwAgCEEQayIHKQMAITUgByAIQRhrIgcpAwA3AwAgBiA1NwMAIAcgCEEgayIGKQMANwMAIAFCIIinQXVPBEAgAaciByAHKAIAQQFqNgIACyAGIAE3AwAgCEEIaiEHDNoBCyAIQRBrIgYpAwAhASAGIAhBGGsiBikDADcDACAGIAE3AwAM0wELIAhBGGsiBikDACEBIAYgCEEQayIGKQMANwMAIAhBCGsiBykDACE1IAcgATcDACAGIDU3AwAM0gELIAhBIGsiBikDACEBIAYgCEEYayIGKQMANwMAIAhBEGsiBykDACE1IAcgCEEIayIHKQMANwMAIAYgNTcDACAHIAE3AwAM0QELIAhBKGsiBikDACEBIAYgCEEgayIGKQMANwMAIAhBGGsiBykDACE1IAcgCEEQayIHKQMANwMAIAYgNTcDACAHIAhBCGsiBikDADcDACAGIAE3AwAM0AELIAhBCGsiBikDACEBIAYgCEEQayIGKQMANwMAIAhBGGsiBykDACE1IAcgATcDACAGIDU3AwAMzwELIAhBEGsiBikDACEBIAYgCEEYayIGKQMANwMAIAhBIGsiBykDACE1IAcgATcDACAGIDU3AwAMzgELIAhBEGsiBikDACEBIAYgCEEYayIGKQMANwMAIAhBIGsiBykDACE1IAcgCEEoayIHKQMANwMAIAYgNTcDACAHIAE3AwAMzQELIAhBCGsiBikDACEBIAYgCEEQayIGKQMANwMAIAYgATcDAAzMAQsgCEEgayIGKQMAIQEgBiAIQRBrIgYpAwA3AwAgCEEIayIHKQMAITUgByAIQRhrIgcpAwA3AwAgBiABNwMAIAcgNTcDAAzLAQsgEigCNCAMKAAAQQN0aikDACIBQiCIp0F1TwRAIAGnIgcgBygCAEEBajYCAAsgCCAJIAEgEyAUEIAEIgE3AwAgCEEIaiEHIAZBBWohDCABQoCAgIBwg0KAgICA4ABSDdABDNIBCyAKQe4BawwBCyAGQQNqIQwgBi8AAQshByAUIAw2AiAgCSAIIAdBA3RrIgtBCGspAwBCgICAgDBCgICAgDAgByALQQAQ0gEiNUKAgICAcINCgICAgOAAUQ3RAUF/IQYgCkEjRg3UAQNAIAYgB0cEQCAJIAsgBkEDdGopAwAQDCAGQQFqIQYMAQsLIAggB0F/c0EDdGoiBiA1NwMAIAZBCGohBwzNAQsgBi8AASEKIBQgBkEDaiIMNgIgQX4hByAJIAggCkEDdGsiC0EQaykDACALQQhrKQMAIAogC0EAEP4DIgFCgICAgHCDQoCAgIDgAFEN0AEDQCAHIApHBEAgCSALIAdBA3RqKQMAEAwgB0EBaiEHDAELCyAIQX4gCmtBA3RqIgYgATcDACAGQQhqIQcMzAELIAYvAAEhByAUIAZBA2oiDDYCICAJIAggB0EDdGsiC0EIaykDACALQRBrKQMAQoCAgIAwIAcgC0EAENIBIjVCgICAgHCDQoCAgIDgAFENzwFBfiEGIApBJUYN0gEDQCAGIAdHBEAgCSALIAZBA3RqKQMAEAwgBkEBaiEGDAELCyAIQX4gB2tBA3RqIgYgNTcDACAGQQhqIQcMywELIAZBA2ohDCAGLwABIQsgCRA7IgFCgICAgHCDQoCAgIDgAFENzgEgCCALQQN0ayEKQQAhBwJAA0AgByALRg0BIAkgASAHQYCAgIB4ciAKIAdBA3RqIg0pAwBBh4ABEBUhKSANQoCAgIAwNwMAIAdBAWohByApQQBODQALIAkgARAMDM8BCyAKIAE3AwAgCkEIaiEHDMoBCyAGQQNqIQwgCSAIQRhrIgopAwAgCCAIQRBrIgcgBi8AARCIAyIBQoCAgIBwg0KAgICA4ABRDc0BIAkgCikDABAMIAkgBykDABAMIAkgCEEIaykDABAMIAogATcDAAzJAQtCgICAgBAhNQJAIAhBCGspAwAiAUL/////b1YNAEKBgICAECE1IAFCgICAgHCDQoCAgIAwUQ0AIABB6ecAQQAQEgzNAQsgCCA1NwMAIAhBCGohBwzIAQsgO0KAgICAMFINwQEgCUHPjAFBABASDMsBCyAJIAhBEGspAwAgCEEIaykDABDOBSIHQQBIDcoBIAcNwAEgCUG0HkEAEBIMygELIAhBCGsiDSkDACI1Qv////9vWA3BASAIQRBrIgcpAwAhASA1pyILKAIQIgpBMGohDyAKIAooAhhBf3NBAnRB1HlyaigCACEKAkACQANAIAoEQCAPIApBAWtBA3QiCmoiECgCBEHKAUYNAiAQKAIAQf///x9xIQoMAQsLIAlB+AAQzQUiNUKAgICAcINCgICAgOAAUQ3LASAJIAtBygFBBxB3IgpFBEAgCSA1EAwMzAELIDVCIIinQXVPBEAgNaciCyALKAIAQQFqNgIACyAKIDU3AwAMAQsgCygCFCAKaikDACI1QiCIp0F1SQ0AIDWnIgogCigCAEEBajYCAAsgCSA1EIgCIQoCQCABQoCAgIBwWgRAIAGnIg8oAhAiC0EwaiEQIAsgCygCGCAKcUF/c0ECdGooAgAhCwJAA0AgC0UNASAKIBAgC0EDdGoiC0EEaygCAEcEQCALQQhrKAIAQf///x9xIQsMAQsLIAkgChAQIAlBoBpBABASDMwBCyAJIA8gCkEHEHchCyAJIAoQECALRQ3LASALQoCAgIAwNwMADAELIAkgChAQCyAJIAcpAwAQDCAJIA0pAwAQDAzFAQsgCSAIQQhrIggpAwAQmAEMyAELIAZBBmohDCAGKAABIQcCQAJAAkACQAJAAkAgBi0ABSIKDgUAAQIDBAULIAlBgIABIAcQ5wEaDMwBCyAJIAcQzAUMywELIAkgBxDRAQzKAQsgCUG8jwFBABDDAgzJAQsgCUHE4ABBABASDMgBCyAOIAo2AhAgCUHX6wAgDkEQahA6DMcBCyAGLwABIQogBi8AAyENIBQgBkEFaiIMNgIgQX8hBwJ+IAkgCCAKQQN0ayILQQhrIg8pAwAgCSkDuAEQTQRAIAlCgICAgDAgCgR+IAspAwAFQoCAgIAwC0ECIA1BAWsQhwMMAQsgCSAPKQMAQoCAgIAwQoCAgIAwIAogC0EAENIBCyIBQoCAgIBwg0KAgICA4ABRDcYBA0AgByAKRwRAIAkgCyAHQQN0aikDABAMIAdBAWohBwwBCwsgCCAKQX9zQQN0aiIGIAE3AwAgBkEIaiEHDMIBCyAGQQNqIQwgBi8AASENIAkgDkHgAGogCEEIayIHKQMAEP0DIgpFDcUBAn4gCSAIQRBrIgspAwAgCSkDuAEQTQRAIAlCgICAgDAgDigCYAR+IAopAwAFQoCAgIAwC0ECIA1BAWsQhwMMAQsgCSALKQMAQoCAgIAwIA4oAmAgChAcCyEBIAkgCiAOKAJgEIYDIAFCgICAgHCDQoCAgIDgAFENxQEgCSALKQMAEAwgCSAHKQMAEAwgCyABNwMADMEBCyAIQRBrIgYgCUKAgICAMCAGKQMAIAhBCGsiBykDABDLBTcDAAzAAQsgCSAIQQhrIgcpAwAQ6AEiAUKAgICAcINCgICAgOAAUQ3DASAJIAcpAwAQDCAHIAE3AwAMuQELIAhBCGsiBykDACE1IAkQ0AUiCgR+IAkgChBSBUKAgICAIAshASAJIAoQECABQoCAgIBwg0KAgICA4ABRDcIBIAkgDkGAAWoQtwIiNkKAgICAcINCgICAgOAAUQRAIAkgARAMDMMBCyAOIA4pA4ABNwNgIA4gNTcDeCAOIAE3A3AgDiAOKQOIATcDaCAJQTRBBCAOQeAAahD4AiAJIAEQDCAJIA4pA4ABEAwgCSAOKQOIARAMIAkgBykDABAMIAcgNjcDAAy4AQsgBkEFaiEMIAkoAsgBKAIQIgdBMGohDSAHIAYoAAEiCiAHKAIYcUF/c0ECdGooAgAhBwJAAkADQCAHRQ0BIA0gB0EDdGoiB0EIayELIAogB0EEaygCAEcEQCALKAIAQf///x9xIQcMAQsLQQEhByALDQELIAkgCSkDwAEgChBuIgdBAEgNwgELIAggB0EAR61CgICAgBCENwMAIAhBCGohBwy9AQsgCkE3ayELIAZBBWohDCAJKALIASINKAIQIgdBMGohDyAHIAYoAAEiCiAHKAIYcUF/c0ECdGooAgAhBwJAAkADQCAHRQ0BIAogDyAHQQFrQQN0IgdqIhAoAgRHBEAgECgCAEH///8fcSEHDAELCyANKAIUIAdqKQMAIjVCgICAgHCDIgFCgICAgMAAUQRAIAkgChDRAQzDAQsgNUIgiKdBdUkNASA1pyIHIAcoAgBBAWo2AgAMAQsgCSAJKQPAASIBIAogASALEBEiNUKAgICAcIMhAQsgAUKAgICA4ABRDcABIAggNTcDACAIQQhqIQcMvAELIAZBBWohDCAJIAYoAAEgCEEIayIHKQMAIApBOWsQygVBAEgNpwEMuwELIAZBBWohDCAGKAABIQogCEEQayIHKAIARQRAIAkgChDAAgy/AQsgCSAKIAhBCGspAwBBAhDKBSIGQQBODboBIAZBHnZBAnEMuwELIAZBBmohDCAJKALAASINKAIQIgpBMGohDyAKIAYoAAEiByAKKAIYcUF/c0ECdGooAgAhCiAGLAAFIQsCQANAIApFDQEgDyAKQQN0aiIQQQhrIQogByAQQQRrKAIARwRAIAooAgBB////H3EhCgwBCwsgC0EASARAIApFDbQBIAotAANBBHENtAEMtgELIApFDbEBIAtBwABJDbMBIAooAgAiCkGAgIAgcQ2zASAKQYCAgIB8cUGAgICABEYNsgEgCkGAgIDAAXFBgICAwAFGDbMBDLIBCyALQQBODbABDLIBCyAGLAAFIgdBAXFBBnIgB0ECcUEFciAHQQBOIgcbIRAgCUHAAUHIASAHG2ooAgAiCygCECINIAYoAAEiDyANKAIYcUF/c0ECdGooAgAhCkKAgICAMEKAgICAwAAgBxshASAGQQZqIQwgDUEwaiENAkADQCAKRQ0BIA0gCkEDdGoiCkEIayEHIA8gCkEEaygCAEcEQCAHKAIAQf///x9xIQoMAQsLIAcNswELIAstAAVBAXFFDbIBIAkgCyAPIBAQdyIHRQ28ASAHIAE3AwAMsgELIAZBBmohDCAJKQPAASIBpygCECIHQTBqIQ0gByAGKAABIgsgBygCGHFBf3NBAnRqKAIAIQogBi0ABSEPIAkgASALIAhBCGsiBykDAEKAgICAMEKAgICAMAJ/AkADQCAKRQ0BIA0gCkEDdGoiEEEIayEKIAsgEEEEaygCAEcEQCAKKAIAQf///x9xIQoMAQsLIApFDQBBgMABIAotAANBBHFFDQEaCyAPQYbOAXILEGpBAEgNuwEgCSAHKQMAEAwMtwELIBEgBi8AAUEDdGopAwAiAUIgiKdBdU8EQCABpyIHIAcoAgBBAWo2AgALIAZBA2ohDCAIIAE3AwAgCEEIaiEHDLYBCyAJIBEgBi8AAUEDdGogCEEIayIHKQMAEB0gBkEDaiEMDLUBCyARIAYvAAFBA3RqIQcgCEEIaykDACIBQiCIp0F1TwRAIAGnIgwgDCgCAEEBajYCAAsgBkEDaiEMIAkgByABEB0MrgELIBUgBi8AAUEDdGopAwAiAUIgiKdBdU8EQCABpyIHIAcoAgBBAWo2AgALIAZBA2ohDCAIIAE3AwAgCEEIaiEHDLMBCyAJIBUgBi8AAUEDdGogCEEIayIHKQMAEB0gBkEDaiEMDLIBCyAVIAYvAAFBA3RqIQcgCEEIaykDACIBQiCIp0F1TwRAIAGnIgwgDCgCAEEBajYCAAsgBkEDaiEMIAkgByABEB0MqwELIBEgBi0AAUEDdGopAwAiAUIgiKdBdU8EQCABpyIHIAcoAgBBAWo2AgALIAZBAmohDCAIIAE3AwAgCEEIaiEHDLABCyAJIBEgBi0AAUEDdGogCEEIayIHKQMAEB0gBkECaiEMDK8BCyARIAYtAAFBA3RqIQcgCEEIaykDACIBQiCIp0F1TwRAIAGnIgwgDCgCAEEBajYCAAsgBkECaiEMIAkgByABEB0MqAELIBEpAwAiAUIgiKdBdU8EQCABpyIGIAYoAgBBAWo2AgALIAggATcDACAIQQhqIQcMrQELIBopAwAiAUIgiKdBdU8EQCABpyIGIAYoAgBBAWo2AgALIAggATcDACAIQQhqIQcMrAELIBspAwAiAUIgiKdBdU8EQCABpyIGIAYoAgBBAWo2AgALIAggATcDACAIQQhqIQcMqwELIBwpAwAiAUIgiKdBdU8EQCABpyIGIAYoAgBBAWo2AgALIAggATcDACAIQQhqIQcMqgELIAkgESAIQQhrIgcpAwAQHQypAQsgCSAaIAhBCGsiBykDABAdDKgBCyAJIBsgCEEIayIHKQMAEB0MpwELIAkgHCAIQQhrIgcpAwAQHQymAQsgCEEIaykDACIBQiCIp0F1TwRAIAGnIgYgBigCAEEBajYCAAsgCSARIAEQHQyfAQsgCEEIaykDACIBQiCIp0F1TwRAIAGnIgYgBigCAEEBajYCAAsgCSAaIAEQHQyeAQsgCEEIaykDACIBQiCIp0F1TwRAIAGnIgYgBigCAEEBajYCAAsgCSAbIAEQHQydAQsgCEEIaykDACIBQiCIp0F1TwRAIAGnIgYgBigCAEEBajYCAAsgCSAcIAEQHQycAQsgFSkDACIBQiCIp0F1TwRAIAGnIgYgBigCAEEBajYCAAsgCCABNwMAIAhBCGohBwyhAQsgHSkDACIBQiCIp0F1TwRAIAGnIgYgBigCAEEBajYCAAsgCCABNwMAIAhBCGohBwygAQsgHikDACIBQiCIp0F1TwRAIAGnIgYgBigCAEEBajYCAAsgCCABNwMAIAhBCGohBwyfAQsgHykDACIBQiCIp0F1TwRAIAGnIgYgBigCAEEBajYCAAsgCCABNwMAIAhBCGohBwyeAQsgCSAVIAhBCGsiBykDABAdDJ0BCyAJIB0gCEEIayIHKQMAEB0MnAELIAkgHiAIQQhrIgcpAwAQHQybAQsgCSAfIAhBCGsiBykDABAdDJoBCyAIQQhrKQMAIgFCIIinQXVPBEAgAaciBiAGKAIAQQFqNgIACyAJIBUgARAdDJMBCyAIQQhrKQMAIgFCIIinQXVPBEAgAaciBiAGKAIAQQFqNgIACyAJIB0gARAdDJIBCyAIQQhrKQMAIgFCIIinQXVPBEAgAaciBiAGKAIAQQFqNgIACyAJIB4gARAdDJEBCyAIQQhrKQMAIgFCIIinQXVPBEAgAaciBiAGKAIAQQFqNgIACyAJIB8gARAdDJABCyATKAIAKAIQKQMAIgFCIIinQXVPBEAgAaciBiAGKAIAQQFqNgIACyAIIAE3AwAgCEEIaiEHDJUBCyATKAIEKAIQKQMAIgFCIIinQXVPBEAgAaciBiAGKAIAQQFqNgIACyAIIAE3AwAgCEEIaiEHDJQBCyATKAIIKAIQKQMAIgFCIIinQXVPBEAgAaciBiAGKAIAQQFqNgIACyAIIAE3AwAgCEEIaiEHDJMBCyATKAIMKAIQKQMAIgFCIIinQXVPBEAgAaciBiAGKAIAQQFqNgIACyAIIAE3AwAgCEEIaiEHDJIBCyAJIBMoAgAoAhAgCEEIayIHKQMAEB0MkQELIAkgEygCBCgCECAIQQhrIgcpAwAQHQyQAQsgCSATKAIIKAIQIAhBCGsiBykDABAdDI8BCyAJIBMoAgwoAhAgCEEIayIHKQMAEB0MjgELIBMoAgAoAhAhBiAIQQhrKQMAIgFCIIinQXVPBEAgAaciByAHKAIAQQFqNgIACyAJIAYgARAdDIcBCyATKAIEKAIQIQYgCEEIaykDACIBQiCIp0F1TwRAIAGnIgcgBygCAEEBajYCAAsgCSAGIAEQHQyGAQsgEygCCCgCECEGIAhBCGspAwAiAUIgiKdBdU8EQCABpyIHIAcoAgBBAWo2AgALIAkgBiABEB0MhQELIBMoAgwoAhAhBiAIQQhrKQMAIgFCIIinQXVPBEAgAaciByAHKAIAQQFqNgIACyAJIAYgARAdDIQBCyATIAYvAAFBAnRqKAIAKAIQKQMAIgFCIIinQXVPBEAgAaciByAHKAIAQQFqNgIACyAGQQNqIQwgCCABNwMAIAhBCGohBwyJAQsgCSATIAYvAAFBAnRqKAIAKAIQIAhBCGsiBykDABAdIAZBA2ohDAyIAQsgEyAGLwABQQJ0aigCACgCECEHIAhBCGspAwAiAUIgiKdBdU8EQCABpyIMIAwoAgBBAWo2AgALIAZBA2ohDCAJIAcgARAdDIEBCyAGQQNqIQwgEyAGLwABIgdBAnRqKAIAKAIQKQMAIgFCgICAgHCDQoCAgIDAAFIEQCABQiCIp0F1TwRAIAGnIgYgBigCAEEBajYCAAsgCCABNwMAIAhBCGohBwyHAQsgCSASIAdBARCEAgyKAQsgBkEDaiEMIBMgBi8AASIHQQJ0aigCACgCECIKNQIEQiCGQoCAgIDAAFIEQCAJIAogCEEIayIHKQMAEB0MhgELIAkgEiAHQQEQhAIMiQELIAZBA2ohDCATIAYvAAEiB0ECdGooAgAoAhAiCjUCBEIghkKAgICAwABSBEAgCSASIAdBARCEAgyJAQsgCSAKIAhBCGsiBykDABAdDIQBCyAJIBEgBi8AAUEDdGpCgICAgMAAEB0gBkEDaiEMDH0LIAZBA2ohDCARIAYvAAEiB0EDdGopAwAiAUKAgICAcINCgICAgMAAUgRAIAFCIIinQXVPBEAgAaciBiAGKAIAQQFqNgIACyAIIAE3AwAgCEEIaiEHDIMBCyAJIBIgB0EAEIQCDIYBCyAGQQNqIQwgESAGLwABIgdBA3RqKQMAIgFCgICAgHCDQoCAgIDAAFIEQCABQiCIp0F1TwRAIAGnIgYgBigCAEEBajYCAAsgCCABNwMAIAhBCGohBwyCAQsgACASIAdBABCEAgyFAQsgBkEDaiEMIBEgBi8AASIHQQN0aiIKNQIEQiCGQoCAgIDAAFIEQCAJIAogCEEIayIHKQMAEB0MgQELIAkgEiAHQQAQhAIMhAELIAZBA2ohDCARIAYvAAFBA3RqIgc1AgRCIIZCgICAgMAAUgRAIAlB4t4AQQAQwwIMhAELIAkgByAIQQhrIgcpAwAQHQx/CyAUKAIcIQcgDC8AACEKA0AgByIMICRGDWAgBygCBCEHIAxBEmsvAQAgCkcNACAMQRNrIgstAABBAnENACAMKAIAIg0gBzYCBCAHIA02AgAgDEIANwIAIAwoAggiDQRAIAkoAhAgDRDOAQsgFCgCFCAKQQN0aikDACIBQiCIp0F1TwRAIAGnIg0gDSgCAEEBajYCAAsgDCABNwMAIAxBCGsgDDYCACALIAstAABBAXI6AAAMAAsACyAGLwAFIQsgBigAASENIAggCUKAgICAIBBBIgE3AwAgCEEIaiEHIAZBB2ohDAJAAkAgAUKAgICAcINCgICAgOAAUQ0AAkAgCkH8AEYEQCATIAtBAnRqKAIAIgogCigCAEEBajYCAAwBCyAJIBQgCyAKQfsARhD/AyIKRQ0BCyAJIAgoAgAgDUEiEHciCw0BIBYgChDlAQsgByEIDIIBCyALIAo2AgAgCCAJIA0QUjcDCCAIQRBqIQcMfQsgBkEFaiEMIAkpA8gBIjWnIgsoAhAiB0EwaiENIAcgBigAASIKIAcoAhhxQX9zQQJ0aigCACEHAkACQAJAAkADQCAHRQ0BIAogDSAHQQFrQQN0Ig9qIgcoAgRHBEAgBygCAEH///8fcSEHDAELCyALKAIUIA9qNQIEQiCGQoCAgIDAAFEEQCAJIAoQ0QEMhQELIActAANBCHFFDQMgNUIgiKdBdEsNAQwCCyAJIAkpA8ABIAoQbiIHQQBIDYMBIAdFBEBCgICAgDAhNQwCCyAJKQPAASI1QiCIp0F1SQ0BIDWnIQsLIAsgCygCAEEBajYCAAsgCCA1NwMAIAggCSAKEFI3AwggCEEQaiEHDH0LIAlBgIABIAoQ5wENgAEgCEEQaiEHDHwLIAwgDCgAAGohDCAIIQcgCRB2RQ17DH8LIAwgDC4AAGohDCAIIQcgCRB2RQ16DH4LIAwgDCwAAGohDCAIIQcgCRB2RQ15DH0LIAZBBWohCgJ/IAhBCGsiBykDACIBQv////8/WARAIAGnDAELIAkgARAnCwR/IAogDCgAAGpBBGsFIAoLIQwgCRB2RQ14DGQLIAZBBWohCgJ/IAhBCGsiBykDACIBQv////8/WARAIAGnDAELIAkgARAnCwR/IAoFIAogDCgAAGpBBGsLIQwgCRB2RQ13DGMLIAZBAmohCgJ/IAhBCGsiBykDACIBQv////8/WARAIAGnDAELIAkgARAnCwR/IAogDCwAAGpBAWsFIAoLIQwgCRB2RQ12DGILIAZBAmohCgJ/IAhBCGsiBykDACIBQv////8/WARAIAGnDAELIAkgARAnCwR/IAoFIAogDCwAAGpBAWsLIQwgCRB2RQ11DGELIAggDCAGKAABaiASKAIUa61CgICAgNAAhDcDACAGQQVqIQwgCEEIaiEHDHQLIAYoAAEhKiAIIAYgEigCFGtBBWqtNwMAIAhBCGohByAqIAxqIQwMcwsCQCAIQQhrIgcpAwAiAUL/////D1YNACABpyIKIBIoAhhPDQAgEigCFCAKaiEMDHMLIAlB6s8AQQAQOgx2CyAIQQhrIg8pAwAiNUIgiKciB0EBaiIKQQRNQQBBASAKdEEZcRtFBEAgCSA1EMkFITULAkACQCAJQRgQJCILRQ0AIAlCgICAgCBBERBHIgFCgICAgHCDQoCAgIDgAFEEQCAJKAIQIgdBEGogCyAHKAIEEQAADAELIAtBADYCFCALIDU3AwAgC0IANwMIIAtBADsBECABpyALNgIgIAdBfnFBAkYNaQJAIDWnIg0tAAVBCHFFDQBBACEHIA0oAhAiCigCICIQQQAgEEEAShshECAKQTBqIQoDQCAHIBBGDQMgCi0AA0EQcQ0BIApBCGohCiAHQQFqIQcMAAsACyAJIA5B4ABqIA5BgAFqIA1BIRB9RQ1aIAEhNQsgCSA1EAwgD0KAgICA4AA3AwAMdgsgC0EBOgARIA1BKGohBgxmC0KBgICAECE3QoCAgIAwIQECQCAIQQhrKQMAIjZCgICAgHBUDQAgNqciDS8BBkERRw0AIA0oAiAhBwJAA0AgBygCCCIKIAcoAgxPBEAgBykDACI1QoCAgIAQhEKAgICAcINCgICAgDBRDQMgByAJIActABAEfiA1BSANKAIgIgspAwAiNUIgiKdBdU8EQCA1pyIKIAooAgBBAWo2AgALAkADQCAJIDUQwgIiNUKAgICAcIMiOUKAgICAIFENBSA5QoCAgIDgAFENeyAJIA5B4ABqIgogDkGAAWoiDyA1p0EREH1FBEAgCSAOKAJgIA4oAoABIhAQWyAQBEAgCSA1EAwgCy0AEQRAIAkgCiAPIAsoAgBBIRB9DX4gC0EAOgARIAsgDigCYDYCFCALIA4oAoABNgIMC0EAIQoDQCAKIAsoAgxPDQQgCkEDdCEPIApBAWohCiAJIDYgDyALKAIUaigCBEKAgICAIEEEEBVBAE4NAAsMfQsgCRB2RQ0BCwsgCSA1EAwMegsgB0EBOgAQIAcpAwALEMICIjU3AwAgNUKAgICAcIMiNUKAgICAIFENAyA1QoCAgIDgAFENeCAJEHYNeCAJIA5BnAFqIA5BmAFqIAcoAgBBIRB9DXggCSAHKAIUIAcoAgwQWyAHIA4oApwBNgIUIA4oApgBIQogB0EANgIIIAcgCjYCDAwBCwJAIActABEEQCAHIApBAWo2AgggCkGAgICAeHIhCwwBCyAHKAIUIApBA3RqIgsoAgAhKyALKAIEIQsgByAKQQFqNgIIIActABAEQCAJQQAgDSALEEMiCkEASA15IAoNAiAJIDYgC0KAgICAIEEEEBVBAEgNeQsgK0UNAQsgCUEAIAcoAgAgCxBDIgpBAEgNdyAKRQ0AC0KAgICAECE3IAkgCxBSIQEMAQsgCSA1EAwLIAggNzcDCCAIIAE3AwAgCEEQaiEHDHALIAkgCEEAEIUDDXMgCEKAgICA0AA3AwggCEEQaiEHDG8LIAYtAAEhByAOQQE2AmAgBkECaiEMQoGAgIAQIQEgCEF9IAdrQQN0aiIHKQMAIjZCgICAgHCDQoCAgIAwUQ1iIAkgNiAHKQMIIA5B4ABqEJEBIjVCgICAgHCDQoCAgIDgAFEEQEF/IQogDkF/NgJgDGILIA4oAmAiCg1hQoCAgIAQIQEMYgsgCSAIQQEQhQMNcSAIQoCAgIDQADcDCCAIQRBqIQcMbQsgCEEIayIHKQMAIgFC/////29YBEAgCUH6HkEAEBIMcQsgCSABIA5B4ABqEMgFIjVCgICAgHCDQoCAgIDgAFENcCAJIAEQDCAHIDU3AwAgCCAOKAJgQQBHrUKAgICAEIQ3AwAgCEEIaiEHDGwLIAhBCGspAwBC/////29WDWUgCUH6HkEAEBIMbwsgCSAIQRBrIgopAwAQDCAIQRhrIgcpAwAiAUKAgICAcINCgICAgDBRDWogCSABQQAQkAEEQCAKIQgMbwsgCSAHKQMAEAwMagsgCEEIayIHKQMAIQEDQAJAIAcgF00NACAHQQhrIggpAwAiNUKAgICAcINCgICAgNAAUQ0AIAkgNRAMIAghBwwBCwsgByAXRgRAIAlBtcgAQQAQOiAJIAEQDCAXIQgMbgsgB0EIayABNwMADGkLIAkgCEEYaykDACAIQSBrKQMAQQEgCEEIayIHEBwiAUKAgICAcINCgICAgOAAUQ1sIAkgBykDABAMIAcgATcDAAxiCyAGQQJqIQwgCCAJIAhBIGsiBykDACIBQRdBBiAGLQABIgpBAXEbIAFBABARIgFCgICAgHCDIjVCgICAgCBRIDVCgICAgDBRcgR+QoGAgIAQBSA1QoCAgIDgAFENbCAHKQMAITUCfiAKQQJxBEAgCSABIDVBAEEAEDYMAQsgCSABIDVBASAIQQhrEDYLIgFCgICAgHCDQoCAgIDgAFENbCAJIAhBCGsiBikDABAMIAYgATcDAEKAgICAEAs3AwAgCEEIaiEHDGcLAn8gCEEIayIGKQMAIgFC/////z9YBEAgAadBAEcMAQsgCSABECcLIQcgBiAHRa1CgICAgBCENwMADGALIAZBBWohDCAJIAhBCGsiBykDACIBIAYoAAEgAUEAEBEiAUKAgICAcINCgICAgOAAUQ1pIAkgBykDABAMIAcgATcDAAxfCyAGQQVqIQwgCSAIQQhrKQMAIgEgBigAASABQQAQESIBQoCAgIBwg0KAgICA4ABRDWggCCABNwMAIAhBCGohBwxkCyAJIAhBEGsiBykDACIBIAYoAAEgCEEIaykDACABQYCAAhDQASEsIAkgBykDABAMIAZBBWohDCAsQQBODWMMTwsgBkEFaiEMIAkgBigAARDNBSIBQoCAgIBwg0KAgICA4ABRDWYgCCABNwMAIAhBCGohBwxiCyAIQQhrIQcCQCAIQRBrIgopAwAiAUL/////b1gEQCAJECJCgICAgOAAITUMAQsgBykDACI1QoCAgIBwg0KAgICAgH9SBEAgCRD8A0KAgICA4AAhNQwBCyAJIDUQiAIhCCABpyINKAIQIgtBMGohDyALIAggCygCGHFBf3NBAnRqKAIAIQsCQANAIAsEQCAPIAtBAWtBA3QiC2oiECgCBCAIRg0CIBAoAgBB////H3EhCwwBCwsgCSAIEMcFQoCAgIDgACE1DAELIA0oAhQgC2opAwAiNUIgiKdBdUkNACA1pyIIIAgoAgBBAWo2AgALIAkgBykDABAMIAkgCikDABAMIAogNTcDACA1QoCAgIBwg0KAgICA4ABSDWEMTQsgCEEQaykDACEBIAhBCGshCgJAAkAgCEEYayIHKQMAIjVC/////29YBEAgCRAiDAELIAopAwAiNkKAgICAcINCgICAgIB/UgRAIAkQ/AMMAQsgCSA2EIgCIQggNaciDSgCECILQTBqIQ8gCyAIIAsoAhhxQX9zQQJ0aigCACELA0AgCwRAIA8gC0EBa0EDdCILaiIQKAIEIAhGDQMgECgCAEH///8fcSELDAELCyAJIAgQxwULIAkgARAMIAkgBykDABAMIAkgCikDABAMDE0LIAkgDSgCFCALaiABEB0gCSAHKQMAEAwgCSAKKQMAEAwMYAsgCEEIaykDACEBIAhBEGshBwJAAkAgCEEYaykDACI1Qv////9vWARAIAkQIgwBCyAHKQMAIjZCgICAgHCDQoCAgICAf1IEQCAJEPwDDAELIAkgNhCIAiEIIDWnIgsoAhAiCkEwaiENIAogCCAKKAIYcUF/c0ECdGooAgAhCgJAA0AgCkUNASAIIA0gCkEDdGoiCkEEaygCAEcEQCAKQQhrKAIAQf///x9xIQoMAQsLIAkgCEH7IBC1AQwBCyAJIAsgCEEHEHciCA0BCyAJIAEQDCAJIAcpAwAQDAxMCyAIIAE3AwAgCSAHKQMAEAwMXwsgBkEFaiEMIAkgCEEQaykDACAGKAABIAhBCGsiBykDAEGHgAEQFUEATg1eDEoLIAZBBWohDCAIIQcgCSAIQQhrKQMAIAYoAAEQxgVBAE4NXQxhCyAIIQcgCSAIQQhrKQMAIAhBEGspAwAQxQVBAE4NXAxgCyAIQQhrIgcpAwAiAUL/////b1ggAUKAgICAcINCgICAgCBScUUEQCAJIAhBEGspAwAgAUEBEIkCQQBIDWALIAkgARAMDFsLIAkgCEEIaykDACAIQRBrKQMAEPsDDFQLIAgCfyAKQdUARgRAQX0gCSAIQRBrKQMAEDAiBw0BGgxfCyAGQQVqIQwgBigAASEHQX4LQQN0aiEtQoCAgIAwITZBg84BIQYgCEEIayINKQMAIgEhOEKAgICAMCE3AkACQAJAIAwtAAAiD0EDcQ4CAgABC0KAgICAMCE4QYGaASEGIAEhNwwBC0KAgICAMCE4QYGqASEGIAEhNgsgLSkDACE5QeKRASELIAkgBxDEBSE1AkAgBkGAEHFFBEBB3ZEBIQsgBkGAIHFFDQELIAkgCyA1QeyWARCyASE1CwJ/QX8gNUKAgICAcINCgICAgOAAUQ0AGkF/IAkgAUE3IDVBARAVQQBIDQAaIAkgASA5EPsDIAkgOSAHIDggNyA2IAYgD0EEcXIQagshBiAJIA0pAwAQDCAMQQFqIQwgCCAKQdUARgR/IAkgBxAQIAkgCEEQaykDABAMQX4FQX8LQQN0aiEHIAZBAE4NWSAGQR52QQJxDFoLIAZBBmohDCAIQQhrIg0pAwAhNyAIQRBrIQsgBigAASEPAkACQCAGLQAFQQFxBEBCgICAgCAhOCALKQMAIjZCgICAgHCDQoCAgIAgUQRAIAkpAzAiNkIgiKdBdEsNAgwDC0KAgICAMCE5QfwrIQcgNkKAgICAcFQNSyA2py0ABUEQcUUNSyAJIDZBPCA2QQAQESI4QoCAgIBwgyIBQoCAgIAgUQ0CIAFCgICAgOAAUQ1NIDhCgICAgHBaDQJB1sEAIQcMTAsgCSgCKCkDCCI4QiCIp0F1TwRAIDinIgcgBygCAEEBajYCAAsgCSkDMCI2QiCIp0F1SQ0BCyA2pyIHIAcoAgBBAWo2AgALQoCAgIDgACE5IAkgOBBBIgFCgICAgHCDQoCAgIDgAFENSiA3pyIHLQARQTBxDUBCgICAgOAAITUgCSA2QQ0QRyI5QoCAgIBwg0KAgICA4ABRDUdCgICAgDAhNyAJIDkgByATIBQQwwUiNUKAgICAcINCgICAgOAAUQ1HIAkgNSABEPsDIDVCgICAgHBaBEAgNaciECAQLQAFQRByOgAFCyAJIDVBMCAHMwEsQQEQFRoCQCAKQdcARgRAIAkgNSAIQRhrKQMAEMUFQQBIDUkMAQsgCSA1IA8QxgVBAEgNSAsgNUIgiKdBdU8EQCA1pyIHIAcoAgBBAWo2AgALIAkgAUE9IDVBg4ABEBVBAEgNRyABQiCIp0F1TwRAIAGnIgcgBygCAEEBajYCAAsgCSA1QTwgAUGAgAEQFUEASA1HIAkgOBAMIAkgNhAMIAsgNTcDACANIAE3AwAMUgsgCSAIQRBrIgopAwAgCEEIayIHKQMAEE4hASAJIAopAwAQDCAKIAE3AwAgAUKAgICAcINCgICAgOAAUg1XDEMLIAhBCGsiByAJIAhBEGspAwAgBykDABBOIgE3AwAgCCEHIAFCgICAgHCDQoCAgIDgAFINVgxaCyAIQQhrKQMAIQEgCEEQaykDACI1QoCAgIBwg0KAgICAMFEEQCAJIAEQMCIHRQ1aIAkgBxDAAiAJIAcQEAxaCyABQiCIp0F1TwRAIAGnIgcgBygCAEEBajYCAAsgCSA1IAEQTiIBQoCAgIBwg0KAgICA4ABRDVkgCCABNwMAIAhBCGohBwxVCyAJIAhBCGsiDSkDABAwIgpFDVggCSAIQRBrIgcpAwAgCiAIQRhrIgspAwBBABARIQEgCSAKEBAgAUKAgICAcINCgICAgOAAUQ1YIAkgDSkDABAMIAkgBykDABAMIAkgCykDABAMIAsgATcDAAxUCyAJIAhBGGsiBykDACAIQRBrKQMAIAhBCGspAwBBgIACEM8BIS4gCSAHKQMAEAwgLkEATg1TDD8LIAkoAhAoAowBIQoCfwJAIAhBGGsiBykDACI1QoCAgIBwg0KAgICAMFEEQAJAIApFDQAgCi0AKEEBcUUNACAJIAhBEGspAwAQMCIHRQ1aIAkgBxDAAiAJIAcQEAxaCyAJKQPAASI1QiCIp0F1TwRAIDWnIgYgBigCAEEBajYCAAsgByA1NwMADAELIApFDQBBgIAGIAooAihBAXENARoLQYCAAgshBiAJIDUgCEEQaykDACAIQQhrKQMAIAYQzwEhBiAJIAcpAwAQDCAGQQBODVIgBkEedkECcQxTCyAIQRhrIgopAwBC/////29YDU0gCSAIQRBrIg0pAwAQMCILRQ1VIAkgCikDACALIAhBCGspAwAgCEEgayIHKQMAQYCAAhDQASEGIAkgCxAQIAkgBykDABAMIAkgCikDABAMIAkgDSkDABAMIAZBAE4NUSAGQR52QQJxDFILIAhBGGspAwAhNSAIQRBrKQMAIgFCIIinQXVPBEAgAaciByAHKAIAQQFqNgIACyAJIDUgASAIQQhrIgcpAwBBh4ABEJQBQQBODVAMPAsgCEEQayINKQMAIjZCgICAgBBaBEAgCUH04QBBABA6DFQLIAkgCEEIayIHKQMAIgFBzAEgAUEAEBEiAUKAgICAcINCgICAgOAAUQ1TIAFBNUEBEIIEIQsgCSABEAwgCSAHKQMAQQAQywEiAUKAgICAcINCgICAgOAAUQ1TIAkgAUHrACABQQAQESI1QoCAgIBwg0KAgICA4ABRBEAgCSABEAwMVAsgNqchCgJAAkAgC0UNACA1QTZBABCCBEUNACAHKQMAIjYgDkHgAGogDkGAAWoQjwFFDQAgCSAOQZwBaiA2EMoBDT8gDigCnAEgDigCgAFHDQAgCEEYayEPQQAhCwNAIAsgDigCgAFPDQIgDykDACE3IA4oAmAgC0EDdGopAwAiNkIgiKdBdU8EQCA2pyIQIBAoAgBBAWo2AgALIAkgNyAKIDZBBxCTASEvIAtBAWohCyAKQQFqIQogL0EATg0ACww/CyAIQRhrIQsDQCAJIAEgNSAOQZwBahCRASI2QoCAgIBwg0KAgICA4ABRDT8gDigCnAENASAJIAspAwAgCiA2QQcQkwFBAEgNPyAKQQFqIQoMAAsACyANIAqtNwMAIAkgARAMIAkgNRAMIAkgBykDABAMDE8LIAZBAmohDCAIIQcgCSAIIAYtAAEiCkF/cyILQQN0QWByaikDACAIIAtBAXRBQHJBeHFqKQMAIAggCkEFdkF/c0EDdGopAwBBABDBBUUNTgxSCwJAIAhBCGsiBykDACIBQiCIpyILIAhBEGsiCikDACI1QiCIpyINckUEQCABxCA1xHwiAUKAgICACHxCgICAgBBUDQEMPAsgDUEHa0FtSyALQQdrQW1Lcg07IApCgICAgMB+IDVCgICAgMCBgPz/AHy/IAFCgICAgMCBgPz/AHy/oL0iAUKAgICAwIGA/P8AfSABQv///////////wCDQoCAgICAgID4/wBWGzcDAAxOCyAKIAFC/////w+DNwMADE0LIAZBAmohDAJAIAhBCGsiBykDACI1IBEgBi0AAUEDdGoiCCkDACIBhEL/////D1gEQCA1xCABxHwiNUKAgICACHxC/////w9WDQEgCCA1Qv////8PgzcDAAxOCyABQoCAgIBwg0KAgICAkH9SDQAgCSA1QQIQkgEiNUKAgICAcINCgICAgOAAUQ05IAgpAwAiAUIgiKdBdU8EQCABpyIKIAooAgBBAWo2AgALIAkgASA1ELYCIgFCgICAgHCDQoCAgIDgAFENOSAJIAggARAdDE0LIAFCIIinQXVPBEAgAaciCiAKKAIAQQFqNgIACyAOIAE3AyAgDiAHKQMANwMoIAkgJxC/BQ04IAkgCCAOKQMgEB0MTAsgCEEIayIHKQMAIgFCIIinIg0gCEEQayILKQMAIjVCIIinIg9yRQRAIDXEIAHEfSIBQoCAgIAIfEKAgICAEFoNBCALIAFC/////w+DNwMADEwLIA9BB2tBbUsgDUEHa0FtS3INAyALQoCAgIDAfiA1QoCAgIDAgYD8/wB8vyABQoCAgIDAgYD8/wB8v6G9IgFCgICAgMCBgPz/AH0gAUL///////////8Ag0KAgICAgICA+P8AVhs3AwAMSwsCQAJ8IAhBCGsiBykDACIBQiCIpyINIAhBEGsiCykDACI1QiCIpyIPckUEQCABxCA1xH4iNkKAgICACHxCgICAgBBaBEAgNrkMAgsgNlBFIAEgNYRCgICAgAiDUHINAkQAAAAAAAAAgAwBCyAPQQdrQW1LIA1BB2tBbUtyDQQgNUKAgICAwIGA/P8AfL8gAUKAgICAwIGA/P8AfL+iCyE8IAtCgICAgMB+IDy9IgFCgICAgMCBgPz/AH0gAUL///////////8Ag0KAgICAgICA+P8AVhs3AwAMSwsgCyA2Qv////8PgzcDAAxKCyAIQQhrIgcpAwAiASAIQRBrIgspAwAiNYRC/////w9WDQEgFC0AKEEEcQ0BIAsCfiA1p7cgAae3oyI8vSIBAn8gPJlEAAAAAAAA4EFjBEAgPKoMAQtBgICAgHgLIga3vVEEQCAGrQwBC0KAgICAwH4gAUKAgICAwIGA/P8AfSABQv///////////wCDQoCAgICAgID4/wBWGws3AwAMSQsgCEEIayIHKQMAIgEgCEEQayILKQMAIjWEQv////8PVg0AIDWnIg1BAEgNACABpyIPQQBMDQAgCyANIA9wrTcDAAxIC0IAITYjAEEQayIHJAACfwJAAkACQAJ8AkACQAJAIAhBEGsiCykDACI1QiCIp0EHa0FtSyAIQQhrIg0pAwAiAUIgiKdBB2tBbUtyRQRAIAcgAUKAgICAwIGA/P8AfDcDACAHIDVCgICAgMCBgPz/AHw3AwgMAQsgCSA1EGUiNUKAgICAcINCgICAgOAAUQ0FIAkgARBlIgFCgICAgHCDQoCAgIDgAFEEQCA1IQEMBgtBByABQiCIpyIPIA9BB2tBbkkbIg9BByA1QiCIpyIQIBBBB2tBbkkbIhByRQRAIAGnIQ0gNachDyALAn4CQAJAAkACQAJAAkACQAJAIApBmwFrDgYAAQILBAMLCyABxCA1xH4iAUIAUg0EIA0gD3JBAE4NBSALQoCAgIDA/v8DNwMADA0LIAtCgICAgMB+IA+3IA23o70iAUKAgICAwIGA/P8AfSABQv///////////wCDQoCAgICAgID4/wBWGzcDAAwMCyANQQBKIA9BAE5xRQRAIAsCfiAPtyANtxCZBCI8vSIBAn8gPJlEAAAAAAAA4EFjBEAgPKoMAQtBgICAgHgLIgq3vVEEQCAKrQwBC0KAgICAwH4gAUKAgICAwIGA/P8AfSABQv///////////wCDQoCAgICAgID4/wBWGws3AwAMDAsgDyANcK0hAQwCCyAPtyE8IAsCfgJ8IA23Ij29QoCAgICAgID4/wCDQoCAgICAgID4/wBRBEBEAAAAAAAA+H8gPJlEAAAAAAAA8D9hDQEaCyA8ID0QowMLIjy9IgECfyA8mUQAAAAAAADgQWMEQCA8qgwBC0GAgICAeAsiCre9UQRAIAqtDAELQoCAgIDAfiABQoCAgIDAgYD8/wB9IAFC////////////AINCgICAgICAgPj/AFYbCzcDAAwKCyA1xCABxH0hAQsgAUKAgICACHxC/////w9WDQEgASE2CyA2Qv////8PgwwBC0KAgICAwH4gAbm9IgFCgICAgMCBgPz/AH0gAUL///////////8Ag0KAgICAgICA+P8AVhsLNwMADAULIBBBdkcgD0F2R3FFBEAgCSAKIAsgNSABIAkoAhAoAqwCESMADQcMBQsgCSAHQQhqIDUQbQ0FIAkgByABEG0NBgsCQAJAAkACQCAKQZsBaw4GAAECBAUDBAsgBysDCCAHKwMAogwFCyAHKwMIIAcrAwCjDAQLIAcrAwggBysDABCZBAwDCyAHKwMIITwgBysDACI9vUKAgICAgICA+P8Ag0KAgICAgICA+P8AUQRARAAAAAAAAPh/IDyZRAAAAAAAAPA/YQ0DGgsgPCA9EKMDDAILEAEACyAHKwMIIAcrAwChCyE8IAtCgICAgMB+IDy9IgFCgICAgMCBgPz/AH0gAUL///////////8Ag0KAgICAgICA+P8AVhs3AwALQQAMAgsgCSABEAwLIAtCgICAgDA3AwAgDUKAgICAMDcDAEF/CyEwIAdBEGokACAwDUsgCEEIayEHDEcLIAhBBGsoAgAiB0UgB0EHa0FuSXINQCAIIQcgCSAIQY4BEOEBRQ1GDEoLAkACfCAIQQhrIgcpAwAiAUIgiKciCkUEQEQAAAAAAAAAgCABpyIGRQ0BGkQAAAAAAADgQSAGQYCAgIB4Rg0BGiAHQgAgAX1C/////w+DNwMADEILIApBB2tBbUsNASABQoCAgIDA/v8Dfb8LITwgB0KAgICAwH4gPL0iAUKAgICAwIGA/P8AfSABQv///////////wCDQoCAgICAgID4/wBWGzcDAAxACyAIIQcgCSAIQY0BEOEBRQ1FDEkLIAhBCGsiBykDACIBQv////8PViABQv////8HUXJFBEAgByABQgF8Qv////8PgzcDAAw/CyAIIQcgCSAIQZABEOEBRQ1EDEgLIAhBCGsiBykDACIBQv////8PViABQoCAgIAIUXJFBEAgByABQgF9Qv////8PgzcDAAw+CyAIIQcgCSAIQY8BEOEBRQ1DDEcLIAkgCEEIayIHKQMAEGUiAUKAgICAcINCgICAgOAAUQRAIAdCgICAgDA3AwAMRwsgByABNwMAIAFCIIinQXVPBEAgAaciByAHKAIAQQFqNgIACyAIIAE3AwAgCSAIQQhqIgcgCkECaxDhAUUNQgxGCyAGQQJqIQwgESAGLQABQQN0aiIHKQMAIgFC/////w9WIAFC/////wdRckUEQCAHIAFCAXxC/////w+DNwMADDwLIAFCIIinQXVPBEAgAaciCiAKKAIAQQFqNgIACyAOIAE3A2AgCSAiQZABEOEBDUUgCSAHIA4pA2AQHQw7CyAGQQJqIQwgESAGLQABQQN0aiIHKQMAIgFC/////w9WIAFCgICAgAhRckUEQCAHIAFCAX1C/////w+DNwMADDsLIAFCIIinQXVPBEAgAaciCiAKKAIAQQFqNgIACyAOIAE3A2AgCSAiQY8BEOEBDUQgCSAHIA4pA2AQHQw6CyAIQQhrIgcpAwAiAUL/////D1gEQCAHIAFC/////w+FNwMADDoLIAghByMAQRBrIgokAAJ/AkACQCAJIAhBCGsiCykDABBlIgFCgICAgHCDIjVCgICAgOAAUQ0AIDVCgICAgOB+UQRAIAkgC0GWASABIAkoAhAoAqgCER8ADQEMAgsgCSAKQQxqIAEQlQENACALIAo1AgxC/////w+FNwMADAELIAtCgICAgDA3AwBBfwwBC0EACyExIApBEGok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//8AgyIGQoCAgICAgMD//wBWIAZCgICAgICAwP//AFEbDQAgACAChCAFIAaEhFAEQEEADwsgASADg0IAWQRAQX8hBCAAIAJUIAEgA1MgASADURsNASAAIAKFIAEgA4WEQgBSDwtBfyEEIAAgAlYgASADVSABIANRGw0AIAAgAoUgASADhYRCAFIhBAsgBAuhAgEFfwNAAkACQAJAAkACfyACIAdMIgkgBCAGTHJFBEAgASAHQQJ0aigCACIIIAMgBkECdGooAgAiCUkEQCAIDAILIAggCUcNAyAGQQFqIQYgB0EBaiEHIAghCQwECyAJDQEgASAHQQJ0aigCAAshCSAHQQFqIQcMAgsgBCAGTA0CIAMgBkECdGooAgAhCQsgBkEBaiEGCwJ/AkACQAJAAkAgBQ4DAwABAgsgBiAHcUEBcQwDCyAGIAdzQQFxDAILEAEACyAGIAdyQQFxCyAAKAIAIghBAXFGDQEgACgCBCAITARAIAAgCEEBahDRAgRAQX8PCyAAKAIAIQgLIAAgCEEBajYCACAAKAIIIAhBAnRqIAk2AgAMAQsLIAAQmAZBAAvmAQAgAAJ/IAEoAggiAEH+////B04EQEEAIAJBAXENARpB/////wcgAEH+////B0cNARogASgCBEH/////B2oMAQtBACAAQQBMDQAaIABBH00EQEEAIAEoAhAgASgCDEECdGpBBGsoAgBBICAAa3YiAGsgACABKAIEGwwBCyACQQFxRQRAQf////8HIAEoAgRFDQEaQYCAgIB4IABBIEcNARogASgCECABKAIMQQJ0akEEaygCABpBgICAgHgMAQtBACABKAIQIAEoAgwiAiACQQV0IABrEHEiAGsgACABKAIEGws2AgALEgAgACABIAIgAyAEQZMDELEDCw4AIABBACABQRByELoBC58BAgR/An4gAzUCACEJA0AgAiAFRkUEQCAAIAVBAnQiB2ogBq0gASAHajUCACAJfnwiCj4CACAFQQFqIQUgCkIgiKchBgwBCwsgACACQQJ0IgdqIAY2AgBBASAEIARBAU0bIQRBASEFA0AgBCAFRkUEQCAAIAVBAnQiBmoiCCAHaiAIIAEgAiADIAZqKAIAEL0ENgIAIAVBAWohBQwBCwsLWgEFfyADQQAgA0EAShshBgNAIAUgBkcEQCAAIAVBAnQiA2ogASADaigCACIHIAIgA2ooAgAiA2siCCAEazYCACADIAdLIAQgCEtyIQQgBUEBaiEFDAELCyAEC6sBAQh/IAAoAggiAyABKAIIIgJHBEBBf0EBIAIgA0obDwsgASgCDCIFIAAoAgwiBiAFIAUgBkgbIgJrIQggBiACayEJAn8DQEEAIAJBAWsiAkEASA0BGkEAIQNBACEEIAIgCWoiByAGSQRAIAAoAhAgB0ECdGooAgAhBAsgAiAIaiIHIAVJBEAgASgCECAHQQJ0aigCACEDCyADIARGDQALQX9BASADIARLGwsLigEBA38jAEGQAWsiAyQAIAMgAjYCjAECfyADQYABIAEgAhDJAiIEQf8ATQRAIAAgAyAEEHIMAQtBfyAAIAQgACgCBGpBAWoQvAENABogAyACNgKMASAAKAIEIgUgACgCAGogACgCCCAFayABIAIQyQIaIAAgACgCBCAEajYCBEEACxogA0GQAWokAAtWAQF/IAJCIIinQXVPBEAgAqciBSAFKAIAQQFqNgIACyAAIAFBPCACIAMQFRogAUIgiKdBdU8EQCABpyIDIAMoAgBBAWo2AgALIAAgAkE9IAEgBBAVGgucAQEEfyMAQRBrIgIkACACQSU6AApBASEDIAFBgAJOBEAgAkH1ADoACyACIAFBCHZBD3FByvgAai0AADoADSACIAFBDHZBD3FByvgAai0AADoADEEEIQMLIAJBCmoiBCADaiIFIAFBD3FByvgAai0AADoAASAFIAFBBHZBD3FByvgAai0AADoAACAAIAQgA0ECchCLAhogAkEQaiQAC7wEAQV/IAFFBEAgACACQQRxQQhyENkBDwsCQAJAIAJBAXFFIAAoAhBBqX9HIAFBBEdycg0AIABBABBzQbd/Rw0AIAAoAgAgACgCIBAWIQECQAJAIAAQDw0AIAAoAhBBt39HDQAgABAPDQAgAEEDIAJBe3EQ9gFFDQELIAAoAgAgARAQQX8PCyAAQcIBEA0gACABEBcgACAAKAJALwG8ARAUIAAoAgAgARAQDAELQX8hAwJAIAAgAUEBayIEIgUgAhD2AQ0AIAJBe3EhBiACQQFxIQcDQCAAKAIQIQECQAJAAkACQAJAAkACQAJAAkACQCAEQQFrDgcBAgMEBQYHAAsgAUElRwRAQZsBIQIgAUEqRg0JIAFBL0cNDEGcASECDAkLQZ0BIQIMCAtBngEhAkEAIQMCQCABQStrDgMICgAKC0GfASECDAcLIAFB6gBqIgFBA08NCSABQd8AayECDAYLQQAhAwJAAkACQAJAIAFB5gBqDgMBCwIACwJAIAFByQBqDgIIAwALQaQBIQICQCABQTxrDgMJCwALC0GmASECDAgLQaUBIQIMBwtBpwEhAgwGC0GoASECDAULIAFB4wBqIgFBBE8NB0Gq2a7teiABQQN0diECDAQLQa4BIQIgAUEmRw0GDAMLQa8BIQIgAUHeAEcNBQwCC0GwASECIAFB/ABHDQQMAQtBqQEhAiAHRQ0CC0F/IQMgABAPDQEgACAFIAYQ9gENASAAIAJB/wFxEA0MAAsACyADDwtBAAtHAQJ/IAAoAnwhAgJAA0AgAkEASgRAIAAoAnQgAkEBayICQQR0aiIDKAIAIAFHDQEgAygCBA0BDAILCyAAIAEQ6QQhAgsgAgspAQF/QX8hAQJAIABBKBAoDQAgABCLAQ0AQX9BACAAQSkQKBshAQsgAQvQAQECfyAAKAIAIQUjAEHQAGsiBiQAAkAgASADELoFBEACQCAABEAgBiAFIAZBEGogAxCBATYCACAAQeKNASAGEBMMAQsgBSADQeKNARCBAwtBACEADAELQQAhACAFIAFBHGpBFCABQSRqIAEoAiBBAWoQZA0AIAEgASgCICIAQQFqNgIgIAEoAhwgAEEUbGoiAEIANwIAIABBADYCECAAQgA3AgggACAFIAIQFjYCDCAFIAMQFiEBIAAgBDYCCCAAIAE2AhALIAZB0ABqJAAgAAsaACAAQd4AQdgAIAEbEA4gACACQf//A3EQJgu2AQECfwJAIAIgASgCBCIKRgRAIAMhCwwBCyAAIAogAiADIAQgBSAGIAcgCCAJEPsBIgVBAE4NAEF/DwtBACECIAEoAsACIgNBACADQQBKGyEDAkADQCACIANHBEACQCAFIAEoAsgCIAJBA3RqIgovAQJHDQAgCi0AACIKQQF2QQFxIARHDQAgCyAKQQFxRg0DCyACQQFqIQIMAQsLIAAgASALIAQgBSAGIAcgCCAJENIDIQILIAILjgEBAX8gACAGQQwQRyIGQoCAgIBwg0KAgICA4ABSBEAgACAAKAIAQQFqNgIAIAanIgcgBTsBKiAHIAQ6ACkgByADOgAoIAcgATYCJCAHIAA2AiAgByAHLQAFQe8BcSAEQQJrQQRJQQR0cjoABSAAIAYgACACQeyWASACGxC2ASIBIAMQmAMgACABEBALIAYLjgIBAX4CQAJAAkACQCABQv////9vWA0AIAAgAUE9IAFBABARIgFCgICAgHCDIgNCgICAgOAAUQRAIAEPCyADQoCAgIAwUQRAIAJCIIinQXVJDQMMBAsgAUL/////b1gEQCAAIAEQDAwBCyAAIAFB1QEgAUEAEBEhAyAAIAEQDAJAAkAgA0KAgICAcIMiAUKAgICAIFIEQCABQoCAgIDgAFENAiABQoCAgIAwUg0BCyACQiCIp0F1SQ0EDAULIANCgICAgHBaBEAgA6ctAAVBEHENAQsgACADEAwgAEGdLEEAEBIMAgsgAw8LIAAQIgtCgICAgOAAIQILIAIPCyACpyIAIAAoAgBBAWo2AgAgAgtwAQN/IwBBEGsiAiQAIAAhAQNAAkAgASwAACIDQQBOBEAgA0H/AXFBCWsiA0EXS0EBIAN0QZ+AgARxRXINASABQQFqIQEMAgsgAUEGIAJBDGoQURCpA0UNACACKAIMIQEMAQsLIAJBEGokACABIABrCxkAIAAgARAMIAFCgICAgHCDQoCAgIDgAFELuQ4DDX8DfgF8IwBB0ABrIgkkACAJIAE2AkxB3wBBgAIgBEEgcRshCwJAAkACQAJAAkACQAJAAkACQAJAIAEtAAAiBUEraw4DAQIAAgtBASENCyAJIAFBAWoiATYCTCAEQYAIcUUNASABLQAAIQULIAVB/wFxQTBHDQACfwJAAkACQAJAAkAgAS0AASIGQfgARwRAIAZB7wBGDQIgBkHYAEcNAQsgA0FvcQ0DIAkgAUECaiIBNgJMQRAMBQsgA0UhCiADDQMgBkHPAEYNAQwDCyADDQkLIARBBHFFDQYgCSABQQJqIgE2AkxBACEKQQgMAgsgBkHvAEYNBwsCQAJAIAZB4gBHBEAgCiAGQcIARnENAUEBIQcgCkUgBkEwa0H/AXFBCUtyDQVBCiEDQQAhCiAEQRBxRQ0JIAFBAWohBgNAIAEgB2ohECAHQQFqIQcgEC0AACIFQfgBcUEwRg0ACyAFQf4BcUE4Rw0CQYACIQtBASEKDAkLIApFDQcLIARBBHFFDQUgCSABQQJqIgE2AkxBACEKQQIMAQsgCSAGNgJMQQEhCkGAAiELIAYhAUEICyEDQoCAgIDAfiESIAEtAAAQjAEgA08NBgwFCyAEQYEDcQ0AAn8gCUHMAGohBUHRCyEGA0AgBi0AACIIBEAgCCABLQAARwRAQQAMAwUgBkEBaiEGIAFBAWohAQwCCwALCyAFBEAgBSABNgIAC0EBCw0BIAkoAkwhAQsgA0EKIAMbIQMMAgtEAAAAAAAA8P9EAAAAAAAA8H8gDRsiFb0iEgJ/IBWZRAAAAAAAAOBBYwRAIBWqDAELQYCAgIB4CyIAt71RBEAgAK0hEgwECyASQoCAgIDAgYD8/wB9IRIMAwtBCiEDC0EAIQoLIARBgANxIQ5BACEFIANBCkchDCABIQYDQAJAIAEgBWoiCC0AACIHwCEPIAcQjAEgA04EQCALIA9HDQEgDCAFQQFHckUEQCAIQQFrLQAAQTBGDQILIAgtAAEQjAEgA04NAQsgCSABIAVBAWoiBWoiBjYCTAwBCwtBACEMAkAgBEEBcQ0AAkAgB0EuRw0AIAVFBEAgCC0AARCMASADTg0BCyAJIAhBAWoiBjYCTEKAgICAwH4hEiALIAgsAAEiBUYNAgNAIAVB/wFxEIwBIANOBEBBASEMIAsgBcBHDQIgBi0AARCMASADTg0CCyAJIAZBAWoiCDYCTCAGLQABIQUgCCEGDAALAAsgASAGTw0AAkAgBi0AACIFQeUARwRAIANBCkYgBUHFAEZxDQEgBUEgckHwAEcgA0EQS3INAkEBIAN0QYSCBHENAQwCCyADQQpHDQELQQEhDCAGQQFqIQUCQAJAAkAgBi0AAUEraw4DAAIBAgsgBkECaiEFDAELIAZBAmohBQsgBS0AAEE6a0F2SQ0AIAUhBgNAIAkgBiIFQQFqIgY2AkwgBS0AASIIwCERIAhBOmtBdUsNACARIAtHDQEgBS0AAkE6a0F1Sw0ACwsgASAGRgRAQoCAgIDAfiESDAELIAkhCAJ+AkACQAJAIAYgAWsiBkECaiILQcEATwRAIAAoAhAiBUEQaiALIAUoAgARAwAiCEUNAQtBACEFQQAhByANBEAgCEEtOgAAQQEhBwsgBkEAIAZBAEobIQYDQCAFIAZHBEAgASAFai0AACINQd8ARwRAIAcgCGogDToAACAHQQFqIQcLIAVBAWohBQwBCwsgByAIakEAOgAAAkAgBEHAAHEEQCAJKAJMIgEtAABB7gBGBEAgCSABQQFqNgJMDAULIANBCkcEQEKAgICAwH4gDA0GGgsgDkGAAUYNBCAORQ0BDAMLIA5BgAFGDQMgDg0CIANBCkYNAEKAgICAwH4gDA0EGgsCfAJAIAwgA0EKRnENACAIIAgtAAAiBEEtRmohAQNAIAEiBUEBaiEBIAUtAAAiB0EwRg0AC0KYs+bMmbPmzBkhEyADQQpGIgZFBEBBACADa6wgA6yAIRMLIAOtIRRBACEBQgAhEgNAAkAgB0H/AXEiB0UNACAHEIwBIgcgA04NAAJAIBIgE1gEQCAHrSASIBR+fCESDAELIAYNAyABQQFqIQELIAUtAAEhByAFQQFqIQUMAQsLIBK6IRUgAQRAIAO3IAG3EKMDIBWiIRULIBWaIBUgBEEtRhsMAQsgCBCABgsiFb0iEgJ/IBWZRAAAAAAAAOBBYwRAIBWqDAELQYCAgIB4CyIBt71RBEAgAa0MBAtCgICAgMB+IBJCgICAgMCBgPz/AH0gEkL///////////8Ag0KAgICAgICA+P8AVhsMAwsgABBwQoCAgIDgACESDAMLEAEAC0KAgICAwH4gCiAMcg0AGiAAIAggAyAEQQAgACgCECgCpAIRKgALIRIgC0HBAEkNACAAKAIQIgBBEGogCCAAKAIEEQAACyACBEAgAiAJKAJMNgIACyAJQdAAaiQAIBILeQEBfwJAAkACQAJAAkAgASgCACICQYABag4FBAQEAgABCyAAKAIAIAEpAxAQDCAAKAIAIAEpAxgQDA8LIAJBqX9HDQELIAAoAgAgASgCEBAQDwsgAkHVAGpBLU0EQCAAKAIAIAEoAhAQEAsPCyAAKAIAIAEpAxAQDAv1AgIEfwJ+IwBBIGsiAyQAIANCgICAgDA3AxggA0KAgICAMDcDECADIABBO0ECQQBBAiADQRBqEIUBIgc3AwhCgICAgOAAIQggB0KAgICAcINCgICAgOAAUgRAAkAgAkKAgICAcINCgICAgDBRBEAgACACQQAgA0EIahCQBiECDAELIAAgAkEBIANBCGoQowEhAiADKQMIIQcLIAACfiAAIAJCgICAgHCDQoCAgIDgAFIEfgJ/QQAgB0KAgICAcFQNABpBACAHpyIFLwEGQQ9HDQAaIAUoAiALQQhqIQYDQCAEQQJGBEBBACEEA0AgBEECRwRAIAYgBEEDdCIFaikDACIHQiCIp0F1TwRAIAenIgAgACgCAEEBajYCAAsgASAFaiAHNwMAIARBAWohBAwBCwsgAiEIIAMpAwgMAwsgBEEDdCEFIARBAWohBCAAIAUgBmopAwAQVUUNAAsgAykDCAUgBwsQDCACCxAMCyADQSBqJAAgCAsOACABIAAoAhBBOBCdAgtDACAAAn8CfyADBEAgASgCJCACQQN0akEEagwBC0EAIAEoAiAiA0UNARogAyABLwEoQQR0aiACQQR0agsoAgALENEBC00BA38gAkL/////B1gEQCAAIAEgAqdBgICAgHhyQYCAARDNAQ8LIAAgAhCLAyIDRQRAQX8PCyAAIAEgA0GAgAEQzQEhBSAAIAMQECAFC0MAIAAgASACQQBOBH4gAq0FQoCAgIDAfiACuL0iAUKAgICAwIGA/P8AfSABQoCAgICAgID4/wBWGwsgA0GAgAEQzwELIQEBfiAAIAEgACACELYBIgIgAUEAEBEhAyAAIAIQECADCw0AIAAoAhAgAacQxgILngQCBX8BfiMAQSBrIgYkAAJAAkACQAJAIAMEQCABQoCAgIBgg0KAgICAIFINAQwCCyABQoCAgIBwVA0BC0EBIQQCQAJAIAJCIIinIghBAWoOBAACAgECCyACpyEFCyABQv////9vWEEAIAMbDQICQCABpyIHLwEGQSxGBEAgACAGQRhqIAFB4QAQfiIFRQ0DIAUpAwAhCSAGKQMYIgFCgICAgHCDQoCAgIAwUQRAIAAgCSACIAMQiQIhBAwFCyAGIAI3AwggBiAJNwMAIAAgASAFKQMIQQIgBhA2IgFCgICAgHCDQoCAgIDgAFENAyAAIAEQJ0UEQCADRQ0CIABBydIAQQAQEgwECyAAIAUpAwAQlwEiA0EASA0DIAMNBCAAIAUpAwAQ6AEiAUKAgICAcINCgICAgOAAUQ0DIAAgARAMIAKnIAGnRg0EIABBq9IAQQAQEgwDCyAHKAIQKAIsIAVGDQMgBy0ABUEBcUUEQCADRQ0BIABBhdgAQQAQEgwDCwJAIAVFDQAgBSEEA0AgBCAHRgRAIANFDQMgAEHsPkEAEBIMBQsgBCgCECgCLCIEDQALIAhBdUkNACACpyIDIAMoAgBBAWo2AgALQX8hBCAAIAdBABDTAQ0DIAcoAhAiBCgCLCIDBEAgACADrUKAgICAcIQQDAsgBCAFNgIsQQEhBAwDC0EAIQQMAgsgABAiC0F/IQQLIAZBIGokACAECw0AIAAgASACQQMQyAILkwEBAn8CfyAAKAIIIAJqIgQgACgCDEoEQEF/IAAgBEEAEMQCDQEaCwJAIAAoAhAEQCACQQAgAkEAShshBANAIAMgBEYNAiAAKAIEIAAoAgggA2pBAXRqIAEgA2otAAA7ARAgA0EBaiEDDAALAAsgACgCBCAAKAIIakEQaiABIAIQHhoLIAAgACgCCCACajYCCEEACwvMAQECfyABIAEoAgAiAkEBayIDNgIAAkAgAkEBTARAIAMNASABLQAQBEAgACABEIMECyABKAIsIgIEQCAAIAKtQoCAgIBwhBAhCyABQTBqIQJBACEDA0AgAyABKAIgT0UEQCAAIAIoAgQQxwEgA0EBaiEDIAJBCGohAgwBCwsgASgCCCICIAEoAgwiAzYCBCADIAI2AgAgAUIANwIIIABBEGogASABKAIYQX9zQQJ0aiAAKAIEEQAACw8LQdGGAUGo7ABB0yJBzIQBEAAAC1ABAX4CQCADQcAAcQRAIAIgA0FAaq2IIQFCACECDAELIANFDQAgAkHAACADa62GIAEgA60iBIiEIQEgAiAEiCECCyAAIAE3AwAgACACNwMIC2YCAX8BfiMAQRBrIgIkACAAAn4gAUUEQEIADAELIAIgAa1CAEHwACABZyIBQR9zaxBiIAIpAwhCgICAgICAwACFQZ6AASABa61CMIZ8IQMgAikDAAs3AwAgACADNwMIIAJBEGokAAvhKAEMfyMAQRBrIgokAAJAAkACQAJAAkACQAJAAkACQAJAIABB9AFNBEBBxN4EKAIAIgRBECAAQQtqQfgDcSAAQQtJGyIGQQN2IgB2IgFBA3EEQAJAIAFBf3NBAXEgAGoiAkEDdCIBQezeBGoiACABQfTeBGooAgAiASgCCCIFRgRAQcTeBCAEQX4gAndxNgIADAELIAUgADYCDCAAIAU2AggLIAFBCGohACABIAJBA3QiAkEDcjYCBCABIAJqIgEgASgCBEEBcjYCBAwLCyAGQczeBCgCACIITQ0BIAEEQAJAQQIgAHQiAkEAIAJrciABIAB0cWgiAUEDdCIAQezeBGoiAiAAQfTeBGooAgAiACgCCCIFRgRAQcTeBCAEQX4gAXdxIgQ2AgAMAQsgBSACNgIMIAIgBTYCCAsgACAGQQNyNgIEIAAgBmoiByABQQN0IgEgBmsiBUEBcjYCBCAAIAFqIAU2AgAgCARAIAhBeHFB7N4EaiEBQdjeBCgCACECAn8gBEEBIAhBA3Z0IgNxRQRAQcTeBCADIARyNgIAIAEMAQsgASgCCAshAyABIAI2AgggAyACNgIMIAIgATYCDCACIAM2AggLIABBCGohAEHY3gQgBzYCAEHM3gQgBTYCAAwLC0HI3gQoAgAiC0UNASALaEECdEH04ARqKAIAIgIoAgRBeHEgBmshAyACIQEDQAJAIAEoAhAiAEUEQCABKAIUIgBFDQELIAAoAgRBeHEgBmsiASADIAEgA0kiARshAyAAIAIgARshAiAAIQEMAQsLIAIoAhghCSACIAIoAgwiAEcEQEHU3gQoAgAaIAIoAggiASAANgIMIAAgATYCCAwKCyACKAIUIgEEfyACQRRqBSACKAIQIgFFDQMgAkEQagshBQNAIAUhByABIgBBFGohBSAAKAIUIgENACAAQRBqIQUgACgCECIBDQALIAdBADYCAAwJC0F/IQYgAEG/f0sNACAAQQtqIgBBeHEhBkHI3gQoAgAiB0UNAEEAIAZrIQMCQAJAAkACf0EAIAZBgAJJDQAaQR8gBkH///8HSw0AGiAGQSYgAEEIdmciAGt2QQFxIABBAXRrQT5qCyIIQQJ0QfTgBGooAgAiAUUEQEEAIQAMAQtBACEAIAZBGSAIQQF2a0EAIAhBH0cbdCECA0ACQCABKAIEQXhxIAZrIgQgA08NACABIQUgBCIDDQBBACEDIAEhAAwDCyAAIAEoAhQiBCAEIAEgAkEddkEEcWooAhAiAUYbIAAgBBshACACQQF0IQIgAQ0ACwsgACAFckUEQEEAIQVBAiAIdCIAQQAgAGtyIAdxIgBFDQMgAGhBAnRB9OAEaigCACEACyAARQ0BCwNAIAAoAgRBeHEgBmsiAiADSSEBIAIgAyABGyEDIAAgBSABGyEFIAAoAhAiAQR/IAEFIAAoAhQLIgANAAsLIAVFDQAgA0HM3gQoAgAgBmtPDQAgBSgCGCEIIAUgBSgCDCIARwRAQdTeBCgCABogBSgCCCIBIAA2AgwgACABNgIIDAgLIAUoAhQiAQR/IAVBFGoFIAUoAhAiAUUNAyAFQRBqCyECA0AgAiEEIAEiAEEUaiECIAAoAhQiAQ0AIABBEGohAiAAKAIQIgENAAsgBEEANgIADAcLIAZBzN4EKAIAIgVNBEBB2N4EKAIAIQACQCAFIAZrIgFBEE8EQCAAIAZqIgIgAUEBcjYCBCAAIAVqIAE2AgAgACAGQQNyNgIEDAELIAAgBUEDcjYCBCAAIAVqIgEgASgCBEEBcjYCBEEAIQJBACEBC0HM3gQgATYCAEHY3gQgAjYCACAAQQhqIQAMCQsgBkHQ3gQoAgAiAkkEQEHQ3gQgAiAGayIBNgIAQdzeBEHc3gQoAgAiACAGaiICNgIAIAIgAUEBcjYCBCAAIAZBA3I2AgQgAEEIaiEADAkLQQAhACAGQS9qIgMCf0Gc4gQoAgAEQEGk4gQoAgAMAQtBqOIEQn83AgBBoOIEQoCggICAgAQ3AgBBnOIEIApBDGpBcHFB2KrVqgVzNgIAQbDiBEEANgIAQYDiBEEANgIAQYAgCyIBaiIEQQAgAWsiB3EiASAGTQ0IQfzhBCgCACIFBEBB9OEEKAIAIgggAWoiCSAITSAFIAlJcg0JCwJAQYDiBC0AAEEEcUUEQAJAAkACQAJAQdzeBCgCACIFBEBBhOIEIQADQCAFIAAoAgAiCE8EQCAIIAAoAgRqIAVLDQMLIAAoAggiAA0ACwtBABCQAiICQX9GDQMgASEEQaDiBCgCACIAQQFrIgUgAnEEQCABIAJrIAIgBWpBACAAa3FqIQQLIAQgBk0NA0H84QQoAgAiAARAQfThBCgCACIFIARqIgcgBU0gACAHSXINBAsgBBCQAiIAIAJHDQEMBQsgBCACayAHcSIEEJACIgIgACgCACAAKAIEakYNASACIQALIABBf0YNASAGQTBqIARNBEAgACECDAQLQaTiBCgCACICIAMgBGtqQQAgAmtxIgIQkAJBf0YNASACIARqIQQgACECDAMLIAJBf0cNAgtBgOIEQYDiBCgCAEEEcjYCAAsgARCQAiICQX9GQQAQkAIiAEF/RnIgACACTXINBSAAIAJrIgQgBkEoak0NBQtB9OEEQfThBCgCACAEaiIANgIAQfjhBCgCACAASQRAQfjhBCAANgIACwJAQdzeBCgCACIDBEBBhOIEIQADQCACIAAoAgAiASAAKAIEIgVqRg0CIAAoAggiAA0ACwwEC0HU3gQoAgAiAEEAIAAgAk0bRQRAQdTeBCACNgIAC0EAIQBBiOIEIAQ2AgBBhOIEIAI2AgBB5N4EQX82AgBB6N4EQZziBCgCADYCAEGQ4gRBADYCAANAIABBA3QiAUH03gRqIAFB7N4EaiIFNgIAIAFB+N4EaiAFNgIAIABBAWoiAEEgRw0AC0HQ3gQgBEEoayIAQXggAmtBB3EiAWsiBTYCAEHc3gQgASACaiIBNgIAIAEgBUEBcjYCBCAAIAJqQSg2AgRB4N4EQaziBCgCADYCAAwECyACIANNIAEgA0tyDQIgACgCDEEIcQ0CIAAgBCAFajYCBEHc3gQgA0F4IANrQQdxIgBqIgE2AgBB0N4EQdDeBCgCACAEaiICIABrIgA2AgAgASAAQQFyNgIEIAIgA2pBKDYCBEHg3gRBrOIEKAIANgIADAMLQQAhAAwGC0EAIQAMBAtB1N4EKAIAIAJLBEBB1N4EIAI2AgALIAIgBGohAUGE4gQhAAJAA0AgASAAKAIARwRAIAAoAggiAA0BDAILCyAALQAMQQhxRQ0DC0GE4gQhAANAAkAgAyAAKAIAIgFPBEAgASAAKAIEaiIFIANLDQELIAAoAgghAAwBCwtB0N4EIARBKGsiAEF4IAJrQQdxIgFrIgc2AgBB3N4EIAEgAmoiATYCACABIAdBAXI2AgQgACACakEoNgIEQeDeBEGs4gQoAgA2AgAgAyAFQScgBWtBB3FqQS9rIgAgACADQRBqSRsiAUEbNgIEIAFBjOIEKQIANwIQIAFBhOIEKQIANwIIQYziBCABQQhqNgIAQYjiBCAENgIAQYTiBCACNgIAQZDiBEEANgIAIAFBGGohAANAIABBBzYCBCAAQQhqIQwgAEEEaiEAIAwgBUkNAAsgASADRg0AIAEgASgCBEF+cTYCBCADIAEgA2siAkEBcjYCBCABIAI2AgACfyACQf8BTQRAIAJBeHFB7N4EaiEAAn9BxN4EKAIAIgFBASACQQN2dCICcUUEQEHE3gQgASACcjYCACAADAELIAAoAggLIQEgACADNgIIIAEgAzYCDEEMIQJBCAwBC0EfIQAgAkH///8HTQRAIAJBJiACQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAAsgAyAANgIcIANCADcCECAAQQJ0QfTgBGohAQJAAkBByN4EKAIAIgVBASAAdCIEcUUEQEHI3gQgBCAFcjYCACABIAM2AgAMAQsgAkEZIABBAXZrQQAgAEEfRxt0IQAgASgCACEFA0AgBSIBKAIEQXhxIAJGDQIgAEEddiEFIABBAXQhACABIAVBBHFqIgQoAhAiBQ0ACyAEIAM2AhALIAMgATYCGEEIIQIgAyIBIQBBDAwBCyABKAIIIgAgAzYCDCABIAM2AgggAyAANgIIQQAhAEEYIQJBDAsgA2ogATYCACACIANqIAA2AgALQdDeBCgCACIAIAZNDQBB0N4EIAAgBmsiATYCAEHc3gRB3N4EKAIAIgAgBmoiAjYCACACIAFBAXI2AgQgACAGQQNyNgIEIABBCGohAAwEC0HE1ARBMDYCAEEAIQAMAwsgACACNgIAIAAgACgCBCAEajYCBCACQXggAmtBB3FqIgggBkEDcjYCBCABQXggAWtBB3FqIgQgBiAIaiIDayEHAkBB3N4EKAIAIARGBEBB3N4EIAM2AgBB0N4EQdDeBCgCACAHaiIANgIAIAMgAEEBcjYCBAwBC0HY3gQoAgAgBEYEQEHY3gQgAzYCAEHM3gRBzN4EKAIAIAdqIgA2AgAgAyAAQQFyNgIEIAAgA2ogADYCAAwBCyAEKAIEIgBBA3FBAUYEQCAAQXhxIQkgBCgCDCECAkAgAEH/AU0EQCAEKAIIIgEgAkYEQEHE3gRBxN4EKAIAQX4gAEEDdndxNgIADAILIAEgAjYCDCACIAE2AggMAQsgBCgCGCEGAkAgAiAERwRAQdTeBCgCABogBCgCCCIAIAI2AgwgAiAANgIIDAELAkAgBCgCFCIABH8gBEEUagUgBCgCECIARQ0BIARBEGoLIQEDQCABIQUgACICQRRqIQEgACgCFCIADQAgAkEQaiEBIAIoAhAiAA0ACyAFQQA2AgAMAQtBACECCyAGRQ0AAkAgBCgCHCIAQQJ0QfTgBGoiASgCACAERgRAIAEgAjYCACACDQFByN4EQcjeBCgCAEF+IAB3cTYCAAwCCyAGQRBBFCAGKAIQIARGG2ogAjYCACACRQ0BCyACIAY2AhggBCgCECIABEAgAiAANgIQIAAgAjYCGAsgBCgCFCIARQ0AIAIgADYCFCAAIAI2AhgLIAcgCWohByAEIAlqIgQoAgQhAAsgBCAAQX5xNgIEIAMgB0EBcjYCBCADIAdqIAc2AgAgB0H/AU0EQCAHQXhxQezeBGohAAJ/QcTeBCgCACIBQQEgB0EDdnQiAnFFBEBBxN4EIAEgAnI2AgAgAAwBCyAAKAIICyEBIAAgAzYCCCABIAM2AgwgAyAANgIMIAMgATYCCAwBC0EfIQIgB0H///8HTQRAIAdBJiAHQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAgsgAyACNgIcIANCADcCECACQQJ0QfTgBGohAAJAAkBByN4EKAIAIgFBASACdCIFcUUEQEHI3gQgASAFcjYCACAAIAM2AgAMAQsgB0EZIAJBAXZrQQAgAkEfRxt0IQIgACgCACEBA0AgASIAKAIEQXhxIAdGDQIgAkEddiEBIAJBAXQhAiAAIAFBBHFqIgUoAhAiAQ0ACyAFIAM2AhALIAMgADYCGCADIAM2AgwgAyADNgIIDAELIAAoAggiASADNgIMIAAgAzYCCCADQQA2AhggAyAANgIMIAMgATYCCAsgCEEIaiEADAILAkAgCEUNAAJAIAUoAhwiAUECdEH04ARqIgIoAgAgBUYEQCACIAA2AgAgAA0BQcjeBCAHQX4gAXdxIgc2AgAMAgsgCEEQQRQgCCgCECAFRhtqIAA2AgAgAEUNAQsgACAINgIYIAUoAhAiAQRAIAAgATYCECABIAA2AhgLIAUoAhQiAUUNACAAIAE2AhQgASAANgIYCwJAIANBD00EQCAFIAMgBmoiAEEDcjYCBCAAIAVqIgAgACgCBEEBcjYCBAwBCyAFIAZBA3I2AgQgBSAGaiIEIANBAXI2AgQgAyAEaiADNgIAIANB/wFNBEAgA0F4cUHs3gRqIQACf0HE3gQoAgAiAUEBIANBA3Z0IgJxRQRAQcTeBCABIAJyNgIAIAAMAQsgACgCCAshASAAIAQ2AgggASAENgIMIAQgADYCDCAEIAE2AggMAQtBHyEAIANB////B00EQCADQSYgA0EIdmciAGt2QQFxIABBAXRrQT5qIQALIAQgADYCHCAEQgA3AhAgAEECdEH04ARqIQECQAJAIAdBASAAdCICcUUEQEHI3gQgAiAHcjYCACABIAQ2AgAgBCABNgIYDAELIANBGSAAQQF2a0EAIABBH0cbdCEAIAEoAgAhAQNAIAEiAigCBEF4cSADRg0CIABBHXYhASAAQQF0IQAgAiABQQRxaiIHKAIQIgENAAsgByAENgIQIAQgAjYCGAsgBCAENgIMIAQgBDYCCAwBCyACKAIIIgAgBDYCDCACIAQ2AgggBEEANgIYIAQgAjYCDCAEIAA2AggLIAVBCGohAAwBCwJAIAlFDQACQCACKAIcIgFBAnRB9OAEaiIFKAIAIAJGBEAgBSAANgIAIAANAUHI3gQgC0F+IAF3cTYCAAwCCyAJQRBBFCAJKAIQIAJGG2ogADYCACAARQ0BCyAAIAk2AhggAigCECIBBEAgACABNgIQIAEgADYCGAsgAigCFCIBRQ0AIAAgATYCFCABIAA2AhgLAkAgA0EPTQRAIAIgAyAGaiIAQQNyNgIEIAAgAmoiACAAKAIEQQFyNgIEDAELIAIgBkEDcjYCBCACIAZqIgUgA0EBcjYCBCADIAVqIAM2AgAgCARAIAhBeHFB7N4EaiEAQdjeBCgCACEBAn9BASAIQQN2dCIHIARxRQRAQcTeBCAEIAdyNgIAIAAMAQsgACgCCAshBCAAIAE2AgggBCABNgIMIAEgADYCDCABIAQ2AggLQdjeBCAFNgIAQczeBCADNgIACyACQQhqIQALIApBEGokACAAC1IBAn9BpNQEKAIAIgEgAEEHakF4cSICaiEAAkAgAkEAIAAgAU0bRQRAIAA/AEEQdE0NASAAEAkNAQtBxNQEQTA2AgBBfw8LQaTUBCAANgIAIAELgwECBX8BfgJAIABCgICAgBBUBEAgACEHDAELA0AgAUEBayIBIAAgAEIKgCIHQgp+fadBMHI6AAAgAEL/////nwFWIQUgByEAIAUNAAsLIAenIgIEQANAIAFBAWsiASACIAJBCm4iA0EKbGtBMHI6AAAgAkEJSyEGIAMhAiAGDQALCyABC94BAQJ/IAJBAEchAwJAAkACQCAAQQNxRSACRXINACABQf8BcSEEA0AgAC0AACAERg0CIAJBAWsiAkEARyEDIABBAWoiAEEDcUUNASACDQALCyADRQ0BIAFB/wFxIgMgAC0AAEYgAkEESXJFBEAgA0GBgoQIbCEDA0AgACgCACADcyIEQX9zIARBgYKECGtxQYCBgoR4cQ0CIABBBGohACACQQRrIgJBA0sNAAsLIAJFDQELIAFB/wFxIQEDQCABIAAtAABGBEAgAA8LIABBAWohACACQQFrIgINAAsLQQAL5QUDBHwBfwF+AkACQAJAAnwCQCAAvSIGQiCIp0H/////B3EiBUH60I2CBE8EQCAAvUL///////////8Ag0KAgICAgICA+P8AVg0FIAZCAFMEQEQAAAAAAADwvw8LIABE7zn6/kIuhkBkRQ0BIABEAAAAAAAA4H+iDwsgBUHD3Nj+A0kNAiAFQbHFwv8DSw0AIAZCAFkEQEEBIQVEdjx5Ne856j0hASAARAAA4P5CLua/oAwCC0F/IQVEdjx5Ne856r0hASAARAAA4P5CLuY/oAwBCwJ/IABE/oIrZUcV9z+iRAAAAAAAAOA/IACmoCIBmUQAAAAAAADgQWMEQCABqgwBC0GAgICAeAsiBbciAkR2PHk17znqPaIhASAAIAJEAADg/kIu5r+ioAsiACAAIAGhIgChIAGhIQEMAQsgBUGAgMDkA0kNAUEAIQULIAAgAEQAAAAAAADgP6IiA6IiAiACIAIgAiACIAJELcMJbrf9ir6iRDlS5obKz9A+oKJEt9uqnhnOFL+gokSFVf4ZoAFaP6CiRPQQEREREaG/oKJEAAAAAAAA8D+gIgREAAAAAAAACEAgBCADoqEiA6FEAAAAAAAAGEAgACADoqGjoiEDIAVFBEAgACAAIAOiIAKhoQ8LIAAgAyABoaIgAaEgAqEhAQJAAkACQCAFQQFqDgMAAgECCyAAIAGhRAAAAAAAAOA/okQAAAAAAADgv6APCyAARAAAAAAAANC/YwRAIAEgAEQAAAAAAADgP6ChRAAAAAAAAADAog8LIAAgAaEiACAAoEQAAAAAAADwP6APCyAFQf8Haq1CNIa/IQIgBUE5TwRAIAAgAaFEAAAAAAAA8D+gIgAgAKBEAAAAAAAA4H+iIAAgAqIgBUGACEYbRAAAAAAAAPC/oA8LRAAAAAAAAPA/IAVB/wdzrUI0hr8iA6EgACABoaAgACABIAOgoUQAAAAAAADwP6AgBUETTRsgAqIhAAsgAAtZAQN/QX8hASAAIAAoAgAiAkECaiIDENECBH9BfwUgACgCCCIBQQRqIAEgAkECdCICEKsBIAAoAggiAUEANgIAIAEgAmpBfzYCBCAAIAM2AgAgABCYBkEACwsbACAAIAFB/wFxEA4gACACIAAoAgRrQQRrEBsLRAEBf0F/IQMgACAAKAIEIAJqELwBBH9BfwUgACgCACABaiIDIAJqIAMgACgCBCABaxCrASAAIAAoAgQgAmo2AgRBAAsL7AQBBn8gACgCACIGQQFqIQJBCCEDAkACQAJAIAYtAAAiB0EwayIFQQhPBEBBfiEEAkACQAJAAkACQAJAIAdB7gBrDgsBCQkJAgkDBQQJBQALAkAgB0HiAGsOBQgJCQkACQtBDCEDDAcLQQohAwwGC0ENIQMMBQtBCSEDDAQLQQshAwwDCwJAIAFFDQAgAi0AAEH7AEcNACAGQQJqIQIgBi0AAiEFQQAhAwNAIAIhAUF/IQQgBRCnBCICQQBIDQUgAiADQQR0ciIDQf//wwBLDQUgAUEBaiICLQAAIgVB/QBHDQALIAFBAmohAgwDCyAGQQJBBCAHQfgARhsiB2pBAWohBUEAIQNBACEEA0AgBCAHRwRAIAItAAAQpwQiBkEASARAQX8PBSAEQQFqIQQgAkEBaiECIAYgA0EEdHIhAwwCCwALCyABQQJHIANBgHhxQYCwA0dyDQEgBS0AAEHcAEcNASAFLQABQfUARw0BIAVBAmohAUEAIQJBACEEA0ACQCACQQRGDQAgASACai0AABCnBCIGQQBIDQAgAkEBaiECIAYgBEEEdHIhBAwBCwsgAkEERyAEQYC4A0lyIARB/78DS3INASADQQp0QYD4P3EgBEH/B3FyQYCABGohAyAFQQZqIQIMAgsgAUECRgRAQX8hBCAFDQNBACEDIAItAABBOmtBdkkNAgwDCyACLQAAQTBrIgFBB0sEQCAFIQMMAgsgBkECaiECIAEgBUEDdHIiA0EfSw0BIAYtAAJBMGsiAUEHSw0BIAZBA2ohAiABIANBA3RyIQMMAQsgBSECCyAAIAI2AgAgAyEECyAEC6MBAQV/IAAoAgBBCGohAyACIgZBB3EhB0EgIQUDQCADKAIUIgQgASAFaiICSQRAIAMoAgxFBEAgACgCACEEIANCADcCDCADQoCAgICAgICAgH83AgQgAyAENgIACyADIAIQqwQgAyACNgIUIAIhBAsgACADEEkaIABBADYCBCAAIAEgByAEELYDRQRAIAVBAXYgBWohBQwBCwsgACABIAYQugEaC1ABA38gAkEAIAJBAEobIQICQANAIAIgBEYNASAAIARBAnRqIgMgAygCACIDIAFrNgIAIARBAWohBCABIANLIQVBASEBIAUNAAtBACEBCyABCysBAn8gAkEFdSIDQQBIIAEgA01yBH9BAAUgACADQQJ0aigCACACdkEBcQsLwgEBB38gACgCDCIEIQMCQANAIAMEQCAAKAIQIgcgA0ECdGpBBGsiBSgCAA0CIANBAWshAwwBCwsgAEGAgICAeDYCCCAAQQAQUBpBAA8LIAAgACgCCCADIARrQQV0ajYCCCAFKAIAZyIFBEBBICAFayEIQQAhBANAIAMgBEZFBEAgByAEQQJ0aiIJIAYgCHYgCSgCACIGIAV0cjYCACAEQQFqIQQMAQsLIAAgACgCCCAFazYCCAsgACABIAIgA0EAENwCCycBAn8gAUIAUwRAIABCACABfRAyIQMgAEEBNgIEIAMPCyAAIAEQMgskACAAQgA3AgAgACABNgIUIABCADcCCCAAIAJBhwMgAhs2AhALYwEBfwJAIAFCIIinIgJFIAJBC2pBEUtyDQACQCABQoCAgIBwVA0AIAGnIgIvAQZBBEcNACACKQMgIgFCIIinIgJFIAJBC2pBEUtyDQELIABBqzVBABASQoCAgIDgACEBCyABC80CAQJ/IwBBEGsiAyQAIAMgAjcDCAJAAkAgACABEMwBIgRBAEgNACAERQRAIABCgICAgDBBASADQQhqEOACIQEMAgsgACABQT0gAUEAEBEiAkKAgICAcINCgICAgOAAUQRAIAIhAQwCCwJAAkAgAkKAgICAcFoEQAJAIAKnLQAFQRBxRQ0AIAAgAhD8AiIERQRAIAAgAhAMDAULIAAgBEYNACAAIAIgBCkDQBBNRQ0AIAAgAhAMDAILIAAgAkHVASACQQAQESEBIAAgAhAMIAFCgICAgHCDIgJCgICAgOAAUQ0EQoCAgIAwIAEgAkKAgICAIFEbIQILIAJCgICAgHCDQoCAgIAwUg0BCyAAQoCAgIAwQQEgA0EIahDgAiEBDAILIAAgAkEBIANBCGoQowEhASAAIAIQDAwBC0KAgICA4AAhAQsgA0EQaiQAIAELRwEEfyAAKAL0ASIDQQAgA0EAShshAwNAIAIgA0YEQEEADwsgAkEEdCEFIAJBAWohAiAFIAAoAvwBaiIEKAIMIAFHDQALIAQLNgADQCABIAJMRQRAIABBtQEQDSAAIAFB//8DcRAUIAAoAkAoAswBIAFBA3RqKAIAIQEMAQsLCwkAIABBAhDEAwvZAQEBfyAAIAAoAkAiAyABAn8CQAJAAkACQAJAIAFBJ0YNACABQc4ARiABQTtGckUEQCABQcYARg0BIAFBLUcNAiADLQBsQQFHDQIgAEGIM0EAEBNBfw8LIAMtAG5BAXEEQCAAQe7aAEEAEBNBfw8LIAFBxgBHDQELIAJBsX9GDQMgAkFDRg0BIAJBUUcgAkFJR3ENAiAAQbvWAEEAEBNBfw8LIAJBsX9GDQIgAkFDRg0AQQEgAkFRRg0DGiACQUlHDQFBAgwDC0EFDAILEAEAC0EGCxCdAUEfdQsJACAAQQAQ2wEL6gEBBH8DQAJAIAIgA0wNACABIANqIgUtAAAiBkECdEHgrgFqIgctAAAhCAJAAkAgBkG2AUcEQCAGQcYBRw0BIAQgBSgAATYCAAwCCyAAIAUoAAEiBUEAEGMNAiAAKAKkAiAFQRRsaigCEEUNAUGL9QBBqOwAQdv0AUHM3AAQAAALIActAAMiBkEcSw0AQQEgBnQiBkGAgIAccUUEQCAGQYCAgOAAcUUEQCAGQYCAgIIBcUUNAiAAIAUoAAFBfxBjGgwCCyAAIAUoAAVBfxBjGgsgACgCACAFKAABEBALIAMgCGohAwwBCwsgAwtNAQF/AkAgAkKAgICAcFQNACACpyIDLwEGQQpHDQAgAykDICICQiCIpyIDQQAgA0ELakESSRsNACAAIAEgAhBCDwsgAEGZH0EAEBJBfwsbAQJ+IAAgASACIAMgBBCzAiEGIAAgARAMIAYLLAAgACABKQMIECEgACABKQMQECEgACABKQMYECEgAEEQaiABIAAoAgQRAAAL3AQCCH8BfiMAQTBrIgUkAAJ/QQAgAUKAgICAcFQNABpBACABpyIELwEGQS1HDQAaIAQoAiALIQcgBUIANwIoAkADQCAGQQJHBEACQCAAQSAQXCIIBEAgCEEIaiEJQQAhBANAIARBAkYNAiADIARBA3QiCmopAwAiDEIgiKdBdU8EQCAMpyILIAsoAgBBAWo2AgALIAkgCmogDDcDACAEQQFqIQQMAAsAC0F/IQQgBkEBRw0DIAAoAhAgBSgCKBCoAgwDCyACIAZBA3RqKQMAIgxCgICAgDAgACAMEDUbIgxCIIinQXVPBEAgDKciBCAEKAIAQQFqNgIACyAIIAw3AxggBUEoaiAGQQJ0aiAINgIAIAZBAWohBgwBCwsCQCAHKAIAIgRFBEAgB0EEaiEDQQAhBANAIARBAkYNAiADIARBA3RqIgIoAgAiBiAFQShqIARBAnRqKAIAIgA2AgQgACACNgIEIAAgBjYCACACIAA2AgAgBEEBaiEEDAALAAsCQCAEQQJHDQBBAiEEIAcoAhQNACAAKAIQIgIoApgBIgNFDQAgACABIAcpAxhBASACKAKcASADETUAIAcoAgAhBAsgBSAFQShqIARBAWsiA0ECdGooAgAiAikDCDcDACAFIAIpAxA3AwggBSACKQMYNwMQQQAhBCAFIANBAEetQoCAgIAQhDcDGCAFIAcpAxg3AyAgAEE8QQUgBRD4AgNAIARBAkYNASAAKAIQIAVBKGogBEECdGooAgAQqAIgBEEBaiEEDAALAAsgB0EBNgIUQQAhBAsgBUEwaiQAIAQLxQEBBH8jAEEQayICJAAgACACQQhqIAEQ3wEhAyAAIAEQDAJAIANFBEBCgICAgOAAIQEMAQsgAiADIAMQ/gEiBGoiBTYCDAJAIAIoAgggBEYEQCAAQgAQvwIhAQwBCyAAIAUgAkEMakEAQYUBEIACIQEgAiACKAIMEP4BIAIoAgxqIgQ2AgwgAUKAgICAcINCgICAgOAAUQ0AIAIoAgggBCADa0YNACAAIAEQDEKAgICAwH4hAQsgACADEDELIAJBEGokACABCwsAIABBuDtBABASCwwAIAAgARC1A0EfdgvQAgIBfwF+AkACQAJAAkACQAJAAkBBByACQiCIpyIDIANBB2tBbkkbIgMOCAAAAAQEBAQBAwsgACgC2AEgARC7ASABIALEEJwCDQEMBAsgACgC2AEgARC7AQJ/IAJCgICAgMCBgPz/AHwiBEL/////////B4MhAiAEQj+IpyEAAkACQCAEQjSIp0H/D3EiAwRAIANB/w9HDQEgAlBFBEAgARAqQQAMBAsgASAAEH9BAAwDCyACUARAIAEgABCAAUEADAMLIAJCDIYiAiACeSIEhiECQQAgBKdrIQMMAQsgAkILhkKAgICAgICAgIB/hCECCyABIANB/gdrNgIIIAFBAhBQRQRAIAEoAhAgAjcCACABIAA2AgRBAAwBCyABECpBIAtFDQMLIAEQGUEADwsgA0F2Rg0CCyAAKALYASABELsBIAEQKgsgAQ8LIAKnQQRqCykBAX8gAkIgiKdBdU8EQCACpyIDIAMoAgBBAWo2AgALIAAgASACENsFC10BAX8CQAJAIABCgICAgHCDQoCAgIDgflINACAApyIBKAIMQYCAgIB4Rw0AIAEoAghFDQAgASgCAEEBRw0BIAFBADYCCAsgAA8LQYSEAUGo7ABBguAAQbODARAAAAuhAwEDfwJAIAAoAkAtAGwiA0UNAAJAIAFFBEBBBiECDAELQQEhAUGMASECIANBA0cNAQsgACACEA1BASEBCyAAKAJAQbACaiECIAFFIQEDQCACKAIAIgIEQCACKAIcRQRAIAIoAhRBf0YNAgsgAUEBcQRAIABBBhANCyAAQfAAEA0gAigCHARAIAAoAkAtAGxBA0YEQCAAQQ8QDSAAQRsQDSAAQcIAEA0gAEEGEBcgAEEREA0gAEGxARANIABB6wBBfxAYIQMgAEEkEA1BACEBIABBABAUIABBgwEQDSAAQYwBEA0gAEHsAEF/EBghBCAAIAMQGiAAQQ4QDSAAIAQQGiAAQQ4QDQwDCyAAQR4QDSAAQQYQDSAAQYUBEA1BACEBDAIFIABB7gAgAigCFBAYGkEAIQEMAgsACwsgAAJ/IAAoAkAiAigCYARAQX8hAiABQQFxRQRAIABBKhANIABB6gBBfxAYIQIgAEEOEA0LIABBvgEQDSAAQQgQFyAAQQAQFCAAIAIQGkEoDAELQS5BKUEoIAFBAXEbIAItAGwbCxANC6EBAgF/An4gASgCIEUEQCAAKAIQIQICQCAAIAGtIAEpAxBCgICAgDAgASgCGCABKAJIQQQQ0gEiA0KAgICAcIMiBEKAgICA4ABSBEAgBEKAgICAMFINASABKAJkQQhrIgApAwAhAyAAQoCAgIAwNwMACyABQQE2AiAgAiABQThqELwFIAIgARCYBQsgAw8LQdLlAEGo7ABBgZMBQcbTABAAAAu8BAIIfwN+IwBBMGsiBCQAQoCAgIDgACEMAkAgACABECAiAUKAgICAcINCgICAgOAAUQ0AAkACQCAAIARBLGogBEEoaiABpyIJIAJBb3EQfQRAQoCAgIAwIQwgBCgCKCEGIAQoAiwhBwwBCyAAEDshDCAEKAIoIQYgBCgCLCEHIAxCgICAgHCDQoCAgIDgAFEEQEKAgICA4AAhDAwBCyACQRBxIQogA0EBayELQQAhAgNAIAIgBkYNAiAHIAJBA3RqKAIEIQMCQAJAIAoEQCAAIARBCGogCSADEEMiBUEASARAQQIhBQwCCyAFRQRAQQUhBQwCCyAAIARBCGoQRkEFIQUgBCgCCEEEcUUNAQsCQAJAAkACQAJAIAsOAgECAAsgACADEFIiDUKAgICAcINCgICAgOAAUg0CDAcLIAAgASADIAFBABARIg1CgICAgHCDQoCAgIDgAFINAQwGCyAAEDsiDUKAgICAcINCgICAgOAAUQ0FIAAgAxBSIg5CgICAgHCDQoCAgIDgAFENASAAIA1CACAOQYeAARCUAUEASA0BIAAgASADIAFBABARIg5CgICAgHCDQoCAgIDgAFENASAAIA1CASAOQYeAARCUAUEASA0BCyAAIAwgCK0gDUEAEMgBQQBIDQQgCEEBaiEIDAILIAAgDRAMDAMLIAVBAmsOBAIEBAAECyACQQFqIQIMAAsACyAAIAwQDEKAgICA4AAhDAsgACAHIAYQWyAAIAEQDAsgBEEwaiQAIAwLMwEBfiAAIAEgAiABQQAQESIFQoCAgIBwg0KAgICA4ABSBH4gACAFIAEgAyAEEDYFIAULC5YHAgt/AX4jAEHwAGsiBSQAIAAgBUHQAGoiBhCDAgJAIAIEQCAFIAI2AkAgBkHoKiAFQUBrEPMBIANBf0cEQCAFIAM2AjAgBkHT6wAgBUEwahDzAQsgBUHQAGpBChAOIAAgAUExIAAgAhBgQQMQFRogACABQTIgA61BAxAVGiAEQQJxDQELIAAoAhBBjAFqIQggBEEBcUUhDANAIAgoAgAiCEUNASAMRQRAQQEhDAwBC0Hx/wAhAkEAIQMCQCAIKQMIIhBCgICAgHBUDQAgEKciBigCECIEQTBqIQkgBCAEKAIYQX9zQQJ0QaB+cmooAgAhBANAIARFDQEgCSAEQQFrQQN0IgdqIgooAgAhBCAKKAIEQTdHBEAgBEH///8fcSEEDAELCyAEQf////8DSw0AIAYoAhQgB2opAwAiEEKAgICAcINCgICAgJB/Ug0AIAAgEBCoASIERQ0AIARB8f8AIAQtAAAbIQIgBCEDCyAFIAI2AiAgBUHQAGpB6CogBUEgahDzASAAIAMQMQJAIAgoAggiAi8BBhDgAQRAIAIoAiAiBi8AESICQQt2QQFxIQogAkGACHFFDQFBfyEDAkAgBigCUCICRQ0AIAgoAiAgBigCFEF/c2ohDyACIAYoAkxqIQkgBigCRCEEQQAhDQNAIAQhAyACIAlPDQEgAkEBaiEHAn8gAi0AACICRQRAAkAgBUHoAGogByAJELsFIgtBAEgNACAFKAJoIQ5BACEEIwBBEGsiAiQAAkAgAkEMaiAHIAtqIgsgCRC7BSIHQQBIBEBBfyEHDAELIAIoAgwiBEEBdkEAIARBAXFrcyEECyAFIAQ2AmwgAkEQaiQAIAdBAEgNACAFKAJsIANqIQQgByALagwCCyAGKAJEIQMMAwsgAyACQQFrIgIgAkH/AXFBBW4iDkEFbGtB/wFxakEBayEEIAcLIQIgDSAOaiINIA9NDQALCyAFIAAgBigCQBCPBCICQZ6AASACGzYCECAFQdAAaiIEQdUqIAVBEGoQ8wEgACACEDEgA0F/RwRAIAUgAzYCACAEQdPrACAFEPMBCyAFQdAAakEpEA4MAQtBACEKIAVB0ABqQbuJAUEAEPMBCyAFQdAAakEKEA4gCkUNAAsLIAVB0ABqQQAQDkKAgICAICEQIAUoAlxFBEAgACAFKAJQEGAhEAsgBUHQAGoQiQEgACABQTYgEEEDEBUaIAVB8ABqJAALjwMCA38EfiMAQRBrIgMkACABQQhrIgQpAwAhBgJ/AkACQCAAIAFBEGsiASkDABBlIgdCgICAgHCDQoCAgIDgAFEEQCAAIAYQDAwBCyAAIAYQZSIGQoCAgIBwg0KAgICA4ABRBEAgACAHEAwMAQsgB0IgiCIIQvb///8PUiAGQiCIIglC9v///w9ScUUEQCAIIAlSBEAgACAHEAwgACAGEAwgAEH2GUEAEBIMAgsgACACIAEgByAGIAAoAhAoAqwCESMADQEMAgsgACADQQxqIAcQlQEEQCAAIAYQDAwBCyAAIANBCGogBhCVAQ0AIAECfwJAAkACQAJAAkACQCACQa4Baw4DAQMCAAsCQCACQaEBaw4CBQAECyADKAIMIAMoAgh1DAULIAMoAgggAygCDHEMBAsgAygCCCADKAIMcgwDCyADKAIIIAMoAgxzDAILEAEACyADKAIMIAMoAgh0C603AwAMAQsgAUKAgICAMDcDACAEQoCAgIAwNwMAQX8MAQtBAAshBSADQRBqJAAgBQuGBQIHfwJ+AkAgAUKAgICAcINCgICAgJB/UgRAQoCAgIDgACEKIAAgARA0IgFCgICAgHCDQoCAgIDgAFENAQsCQCACQoCAgIBwg0KAgICAkH9RDQBCgICAgOAAIQogACACEDQiAkKAgICAcINCgICAgOAAUg0AIAEhAgwBCwJAIAKnIgUpAgQiCkL/////B4NQDQAgAaciAykCBCELAkAgAygCAEEBRyAKIAuFQoCAgIAIg0IAUnINACADIAAoAhAoAgwRBQAgBSkCBCIKpyIEQf////8HcSIHIAMpAgQiC6ciBkH/////B3EiCGogBEEfdnQgBkEfdiIJQRFzakkNACAFQRBqIQYgA0EQaiEEIAkEQCAEIAhBAXRqIAYgB0EBdBAeGiADIAMpAgQiCiAFKQIEfEL/////B4MgCkKAgICAeIOENwIEDAILIAQgCGogBiAHEB4aIAMgAykCBCIKIAUpAgR8Qv////8HgyILIApCgICAgHiDhDcCBCAEIAunakEAOgAADAELAn4CQAJAIAunQf////8HcSAKp0H/////B3FqIgdBgICAgARPBEAgAEHkyABBABA6DAELIAAgByAKIAuEpyIGQR92EOkBIggNAQtCgICAgOAADAELIAhBEGohBAJAIAZBAE4EQCAEIANBEGogAygCBEH/////B3EQHiIEIAMoAgRB/////wdxaiAFQRBqIAUoAgRB/////wdxEB4aIAQgB2pBADoAAAwBCyAEIAMgAygCBEH/////B3EQkwUgBCADKAIEQQF0aiAFIAUoAgRB/////wdxEJMFCyAIrUKAgICAkH+ECyEKIAAgARAMDAELIAEhCgsgACACEAwgCgsPACAAIAFCgICAgDAQggILCwAgAEGfCUEAEBILjgIBA38jAEEQayIFJAAgBSAAOQMIIAUgAUEBayIHNgIAIAZBgAFB9t8AIAUQSBogAyAGLQAAQS1GNgIAIAQgBi0AAToAACABQQJOBEAgBEEBaiAGQQNqIAcQHhoLIAEgBGpBADoAACACIQkgASAGaiABQQFKakECaiEBA0AgASICQQFqIQEgAiwAACIDEI8GDQALQQEhBAJAAkACQCADQf8BcUEraw4DAQIAAgtBACEECyABLAAAIQMgASECC0EAIQEgA0EwayIDQQlNBEADQCABQQpsIANrIQEgAiwAASEIIAJBAWohAiAIQTBrIgNBCkkNAAsLIAlBACABayABIAQbQQFqNgIAIAVBEGokAAuADAIHfwV+IwBBoANrIgUkAAJAIAG9IgxCgICAgICAgPj/AINCgICAgICAgPj/AFEEQCAMQv//////////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QCAHqwwBC0EACyIDNgIcIAcgA7hhDQMMAQsgAwRAQX8hAyAAIAIQlgEiAkKAgICAcINCgICAgOAAUQ0EIAAgBEEcaiACQQEQvgJFDQMMBAsgACAEQRxqIAIQdQRAIAAgAhAMDAILQX8hAyAAIAIQlgEiAkKAgICAcINCgICAgOAAUQ0DIAAgBEEEaiACQQAQvgINAyAEKAIEIAQoAhxGDQILIABBiscAQQAQRAtBfyEDDAELIAEgBCgCHDYCAEEAIQMLIARBIGokACADC0ABAX4gABDiASICQoCAgIBwg0KAgICA4ABSBEAgAqdBBGogARCcAkUEQCACDwsgACACEAwgABBwC0KAgICA4AALMgEBfyMAQdAAayICJAAgAiAAIAJBEGogARCBATYCACAAQbzpACACEMMCIAJB0ABqJAALoAECAX8BfiMAQRBrIgUkACAFIAQ2AgxBfyEEIAAgASAFQQxqENMBRQRAIAMoAgAiAEF8cSABIAIgAygCBCAAQQNxQQJ0QYS3AWooAgARGwAhBiADEOAFIAUoAgwiACAAKAIAQf////8DcTYCACADQoCAgIAwIAYgBkKAgICAcINCgICAgOAAUSIAGzcDAEF/QQAgABshBAsgBUEQaiQAIAQLFQECfiAAIAEQ6AEhAyAAIAEQDCADCw0AIAAgASACQQIQyAIL1QEBA38jAEEQayIFJABBfyEDAkAgACgCFA0AAkACQCABQYCAgIAETgRAIAAoAgBB5MgAQQAQOgwBCyABIAAoAgxBA2xBAm0iBCABIARKGyEBIAAoAhAiBCACQYACSHJFBEAgACABEOADIQMMAwsgACgCACAAKAIEIAEgBHQgBGtBEWogBUEMahCnASICDQELIAAQ9wIMAQsgBSgCDCEDIAAgAjYCBCAAQf////8DIAMgACgCEHYgAWoiACAAQf////8DThs2AgxBACEDCyAFQRBqJAAgAwsqAQF/IAAoAhAiA0EQaiABIAIgAygCCBEBACIBIAJFckUEQCAAEHALIAELgQECAn8BfgJAIAEpAgQiBEL//////////79/VgRAIAEoAgwhAAwBCyAAKAI0IARCIIinIAAoAiRBAWtxQQJ0aiECIAAoAjghAwNAIAMgAigCACIAQQJ0aigCACICIAFGDQEgAkEMaiECIAANAAtBxocBQajsAEH/FEH4DhAAAAsgAAupBwIJfwF+AkACQAJAAn8gAkECTARAIAIgASkCBCIMQj6Ip0YEQCAAIAEQxgIiBEHXAUoNBSABIAEoAgBBAWs2AgAgBA8LIAAoAjQgACgCJEEBayABIAIQ6wVB/////wNxIgdxIgpBAnRqIQMgDKdB/////wdxIQUDQCACIAMoAgAiBEUNAhoCQCAAKAI4IARBAnRqKAIAIgMpAgQiDKdB/////wdxIAVHIAxCPoinIAJHciAMQiCIp0H/////A3EgB0dyDQAgAyABIAUQ6gUNACAEQdgBSA0EIAMgAygCAEEBajYCAAwECyADQQxqIQMMAAsACyACQQNHIQdBAwshBQJAIAAoAjwNAEEAIQQgAEEQaiILIAAoAjhB0wEgACgCLEEDbEECbSICIAJB0wFMGyICQQJ0IAAoAggRAQAiCEUNASAAKAIsIgkhAyAJRQRAIAtBECAAKAIAEQMAIgZFBEAgCyAIIAAoAgQRAAAMAwsgBkKAgICAgICAgEA3AgQgBkEBNgIAIAZBADYADCAIIAY2AgAgACAAKAIoQQFqNgIoQQEhAwsgACADNgI8IAAgCDYCOCAAIAI2AiwgCSACIAIgCUkbIQQgAkEBayEGA0AgAyAERg0BIAAoAjggA0ECdGpBASADQQFqIgJBAXRBAXIgAyAGRhs2AgAgAiEDDAALAAsCQCABBEAgASkCBCIMQv//////////P1gEQCABIAwgBa1CPoaENwIEDAILIABBEGogDKciAkEfdSACQf////8HcSACQR92dGpBEWogACgCABEDACICRQRAQQAhBAwECyACQQE2AgAgAiACKQIEQv////93gyABKQIEQoCAgIAIg4QiDDcCBCACIAxCgICAgHiDIAEpAgRC/////weDhDcCBCACQRBqIAFBEGogASgCBCIDQf////8HcSADQR92dCADQX9zQR92ahAeGiAAIAEQkAQgAiEBDAELIABBEGpBECAAKAIAEQMAIgFFBEBBAA8LIAFCgYCAgICAgICAfzcCAAsgACAAKAI4IAAoAjwiBEECdGoiAigCAEEBdjYCPCACIAE2AgAgASAENgIMIAEgATUCBCAHrUIghoQgBa1CPoaENwIEIAAgACgCKEEBajYCKCAFQQNGDQIgASAAKAI0IApBAnRqIgEoAgA2AgwgASAENgIAIAAo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QQAQEgwBCwJAIARFIAJBAExyRQRAIAAgBSAHQgAgAUF/EPMCDQIMAQsgASEICyACQQAgAkEAShutIQlCACEBA0AgASAJUgRAIAMgAadBA3RqKQMAIgdCIIinQXVPBEAgB6ciAiACKAIAQQFqNgIACyABIAh8IQogAUIBfCEBIAAgBSAKIAcQe0EATg0BDAILCyAAIAVBMCAGQoCAgIAIfCIIQv////8PWAR+IAZC/////w+DBUKAgICAwH4gBrm9IgFCgICAgMCBgPz/AH0gAUL///////////8Ag0KAgICAgICA+P8AVhsLEDlBAEgNACAAIAUQDCAGQv////8PgyAIQv////8PWA0BGkKAgICAwH4gBrm9IgFCgICAgMCBgPz/AH0gAUL///////////8Ag0KAgICAgICA+P8AVhsMAQsgACAFEAxCgICAgOAACyELIAxBEGokACALCxUBAn4gACABEIcFIQMgACABEAwgAwv5DgIKfgR/IwBBEGsiECQAIBAgAjcDCAJAAkACfgJAAkACQAJAAkACQAJAAkACQAJAQQcgAkIgiKciDiAOQQdrQW5JGyIOQQdqDg8EAwMDAwMABQUFAwMDAwECCwJAAkACQAJAIAKnIg4vAQYiD0EEaw4DAQACAwtCgICAgDAhByAAIAIQNCICQoCAgIBwg0KAgICA4ABRDQsgACACEO4DIgJCgICAgHCDQoCAgIDgAFENCyABKAIoIAIQhAEhDgwOC0KAgICAMCEHIAAgAhCWASICQoCAgIBwg0KAgICA4ABRDQogASgCKCACEIQBIQ4MDQsgASgCKCAOKQMgEI0BIQ4gACACEAwMDAsgD0EhRg0HQoCAgIAwIQYgACABKQMIQQEgEEEIahDxAyIEQoCAgIDwAINCgICAgOAAUQ0GIAAgBBAnBEAgAEHJ3wBBABASDAcLIANCIIinQXVPBEAgA6ciDiAOKAIAQQFqNgIACyABKQMYIgRCIIinQXVPBEAgBKciDiAOKAIAQQFqNgIACwJAAkACQAJAIAAgAyAEELYCIghCgICAgHCDQoCAgIDgAFEEQEKAgICAMCEHDAELIAEpAxgiBEKAgICAcINCgICAgJB/UQRAIASnKAIEQf////8HcUUNAwsgCEIgiKdBdU8EQCAIpyIOIA4oAgBBAWo2AgALIABB65YBIAhB7JYBELIBIgdCgICAgHCDQoCAgIDgAFINAQtCgICAgDAhCQwICyAAQbCSARBgIglCgICAgHCDQoCAgIDgAFINAQwHCyABKQMgIgdCIIinQXVPBEAgB6ciDiAOKAIAQQJqNgIACyAHIQkLIAAgACABKQMIQQEgEEEIakEAEO0DEP8BDQUgACACEMwBIg5BAEgNBQJAAkAgDgRAIAAgECACEC8NCCABKAIoQdsAEDwaIBApAwAiCkIAIApCAFUbIQwgAUEoaiEOAkADQCAFIAxRDQEgBVBFBEAgASgCKEEsEDwaCyABKAIoIAcQjQEaIAAgAiAFEGwiC0KAgICAcINCgICAgOAAUQ0KIAAgBSIEQoCAgIAIWgR+QoCAgIDAfiAEub0iBEKAgICAwIGA/P8AfSAEQv///////////wCDQoCAgICAgID4/wBWGwUgBAsQNCIEQoCAgIBwg0KAgICA4ABRDQ8gACABIAIgCyAEEPADIQsgACAEEAwgC0KAgICAcIMiDUKAgICA4ABRDQogBUIBfCEFQoCAgIAwIQQgACABQoCAgIAgIAsgDUKAgICAMFEbIAgQ7wNFDQALDA4LIApCAFcEQEHdACEPQoCAgIAwIQQMAwsgASkDGCIFQoCAgIBwg0KAgICAkH9SBEBB3QAhD0KAgICAMCEEDAILQd0AIQ9CgICAgDAhBCAFpygCBEH/////B3ENAQwCCwJAIAEpAxAiBkKAgICAcIMiBUKAgICAMFIEQCAGQiCIp0F1SQ0BIAanIg4gDigCAEEBajYCAAwBCyAAIAJBEUEAELICIgZCgICAgHCDIQULQoCAgIAwIQQgBUKAgICA4ABRDQwgACAQIAYQLw0MIAEoAihB+wAQPBpCACEFIBApAwAiBEIAIARCAFUbIQsgAUEoaiEOQQAhD0KAgICAMCEEA0AgBSALUgRAIAAgBBAMIAAgBiAFEGwiBEKAgICAcINCgICAgOAAUQ0OIARCIIinQXVPBEAgBKciESARKAIAQQFqNgIACyAAIAIgBBBOIgpCgICAgHCDQoCAgIDgAFENDiAAIAEgAiAKIAQQ8AMiCkKAgICAcIMiDEKAgICAMFIEQCAMQoCAgIDgAFENDyAPBEAgASgCKEEsEDwaCyAAIAQQ7gMiBEKAgICAcINCgICAgOAAUQRAIAAgChAMDBALIAEoAiggBxCNARogASgCKCAEEI0BGiABKAIoQToQPBogASgCKCAJEI0BGkEBIQ8gACABIAogCBDvAw0PCyAFQgF8IQUMAQsLIA9FBEBB/QAhDwwCC0H9ACEPIAEoAhgoAgRB/////wdxRQ0BCyAOKAIAQQoQPBogDigCACADEI0BGgsgASgCKCAPEDwaQQAhDiAAIAAgASkDCCAQIBBBABCuBRD/AQ0KIAAgAhAMIAAgBhAMIAAgBxAMIAAgCRAMIAAgCBAMIAAgBBAMDAsLQoCAgIAgIAIgAkKAgICAwIGA/P8AfEKAgICAgICA+P8Ag0KAgICAgICA+P8AURshAgwDCyAOQXZGDQULIAAgAhAMQQAhDgwIC0KAgICAMCEHQoCAgIAwIQlCgICAgDAhBkKAgICAMCEEQoCAgIAwIQggACACEO4DIgJCgICAgHCDQoCAgIDgAFINAAwGCyABKAIoIAIQhAEhDgwGC0KAgICAMCEEDAQLQoCAgIAwIQdCgICAgDAMAgsgAEHeDEEAEBJCgICAgDAhBwtCgICAgDAhBkKAgICAMAshCUKAgICAMCEEQoCAgIAwIQgLIAAgAhAMIAAgBhAMIAAgBxAMIAAgCRAMIAAgCBAMIAAgBBAMQX8hDgsgEEEQaiQAIA4L/AICAX8BfiMAQSBrIgUkACAFIAQ3AxgCQAJAAkAgA0KAgICAcINCgICAgOB+UiADQv////9vWHFFBEBCgICAgOAAIQYgACADQZEBIANBABARIgRCgICAgHCDQoCAgIDgAFEEQCADIQQMAwsgACAEEDUEQCAAIAQgA0EBIAVBGGoQNiEEIAAgAxAMIARCgICAgHCDQoCAgIDgAFINAgwDCyAAIAQQDAsgAyEECwJAIAEpAwAiA0KAgICAcINCgICAgDBRBEAgBCEDDAELIAUgBDcDCCAFIAUpAxg3AwAgACADIAJBAiAFEBwhAyAAIAQQDEKAgICA4AAhBiADIQQgA0KAgICAcINCgICAgOAAUQ0BCwJAQQcgA0IgiKciASABQQdrQW5JG0EKaiIBQRFLDQBBASABdEGJuAxxDQIgAUEJRw0AIAMhBEKAgICAMCEGIAAgAxA1RQ0CDAELIAMhBEKAgICAMCEGCyAAIAQQDCAGIQMLIAVBIGokACADC58DAgV+An8jAEEgayIJJABCgICAgOAAIQQCQCAAIAlBGGogACABECAiBxAvDQACQCAJKQMYIgVCAFcNAEIAIQEgCUIANwMQIAJBAk4EQCAAIAlBEGogAykDCEIAIAUgBRBmDQIgCSkDECEBCwJAAkAgByAJQQxqIAlBCGoQjwFFDQAgASAJNQIIIgQgASAEVRshBCAJKAIMIQIDQCABIARRBEAgBCEBDAILIAMpAwAiBkIgiKdBdU8EQCAGpyIKIAooAgBBAWo2AgALIAIgAadBA3RqKQMAIghCIIinQXVPBEAgCKciCiAKKAIAQQFqNgIACyABQgF8IQEgACAGIAhBAhC0AUUNAAsMAQsgASAFIAEgBVUbIQUDQCABIAVRDQJCgICAgOAAIQQgACAHIAEQbCIGQoCAgIBwg0KAgICA4ABRDQMgAykDACIEQiCIp0F1TwRAIASnIgIgAigCAEEBajYCAAsgAUIBfCEBIAAgBCAGQQIQtAFFDQALC0KBgICAECEEDAELQoCAgIAQIQQLIAAgBxAMIAlBIGokACAEC4QJAgV/CX4jAEHgAGsiBCQAQoCAgIAwIQwgBEKAgICAMDcDMCAEQoCAgIAwNwMoIARCgICAgDA3AxggBCAEQcgAaiIGNgJAIAQgAEEvECkiCzcDOCAAIAZBABA+GiAEIAAQOyIJNwMgQoCAgIDgACEKAkACQCAJQoCAgIBwg0KAgICA4ABRDQACQAJAIAAgAhA1BEAgBCACNwMYDAELIAAgAhDMASIFQQBIDQIgBUUNACAEIAAQOyINNwMoIA1CgICAgHCDQoCAgIDgAFENAiAAIARBCGogAhAvDQIgBCkDCCIKQgAgCkIAVRshEQNAIA4gEVENASAEIAAgAiAOEGwiCTcDEEKAgICA4AAhCiAJQoCAgIBwgyIPQoCAgIDgAFENAwJAAkACQCAJQoCAgIBwWgRAIAmnLwEGQf7/A3FBBEcNAiAEIAAgCRA0Igk3AxAgCUKAgICAcINCgICAgOAAUg0BDAYLIAlCIIinIgVBACAFQQtqQRJJG0UEQCAEIAAgCRA0Igk3AxAgCUKAgICAcINCgICAgOAAUQ0GDAELIA9CgICAgJB/Ug0BCyAAIA1BASAEQRBqEPEDIg9CgICAgPAAg0KAgICA4ABRBEAgACAJEAwMBgsgACAPECcNACAAIA0gECAJEHsaIBBCAXwhEAwBCyAAIAkQDAsgDkIBfCEODAALAAsgA0IgiKciBUF1TwRAIAOnIgcgBygCAEEBajYCAAsCQCADQoCAgIBwWgRAAkACQAJAIAOnLwEGQQRrDgIAAQILIAAgAxCWASEDDAELIAAgAxA0IQMLQoCAgIDgACEKIANCgICAgHCDQoCAgIDgAFENASADQiCIpyEFCwJAIAVBACAFQQtqQRJJG0UEQCAAIARBBGogA0EKQQAQVg0DIAQgAEGnkgEgBCgCBBDqASICNwMwDAELIANCgICAgHCDQoCAgICQf1EEQCAEIAAgA6ciBUEAQQogBSgCBEH/////B3EiBSAFQQpPGxCOASICNwMwDAELIAtCIIinQXVPBEAgC6ciBSAFKAIAQQFqNgIACyAEIAs3AzAgCyECCyAAIAMQDEKAgICA4AAhCiACQoCAgIBwg0KAgICA4ABRDQIgABAzIgxCgICAgHCDQoCAgIDgAFEEQEKAgICA4AAhDAwDCyABQiCIpyIFQXVPBEAgAaciByAHKAIAQQFqNgIACyAAIAxBLyABQQcQFUEASA0CIAVBdU8EQCABpyIFIAUoAgBBAWo2AgALQoCAgIAwIQogACAEQRhqIAwgASALEPADIgJCgICAgHCDIgFCgICAgDBRDQJCgICAgOAAIQogAUKAgICA4ABRBEAgASEKDAMLIAAgBEEYaiACIAsQ7wMhCCAEKAJAIQYgCA0CIAYQNyEKDAMLIAAgAxAMDAELQoCAgIDgACEKCyAGKAIAKAIQIgVBEGogBigCBCAFKAIEEQAAIAZBADYCBAsgACAMEAwgACAEKQM4EAwgACAEKQMwEAwgACAEKQMoEAwgACAEKQMgEAwgBEHgAGokACAKC7YBAgF/AX4jAEHQAGsiBCQAIARBAEHQABAsIgQgAzYCDCAEIAA2AgAgBEKggICAEDcDECAEIAE2AjggBCABIAJqNgI8IARBATYCCCAEQQA2AkxCgICAgDAhBQJAAkAgBBCiAQ0AIAQQ9QMiBUKAgICAcINCgICAgOAAUQ0AIAQoAhBBqn9GDQEgBEGu4gBBABATCyAAIAUQDCAEIARBEGoQgQJCgICAgOAAIQULIARB0ABqJAAgBQtAAQJ/IwBBEGsiAiQAAn8gASAAKAIQRwRAIAIgATYCACAAQcyQASACEBNBfwwBCyAAEKIBCyEDIAJBEGokACADC9AFAgJ+BX8jAEEQayIGJAAgACgCACEFAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIQIgRBgAFqDgQCAQUDAAsgBEGqf0YNAyAEQdsARwRAIARB+wBHDQVCgICAgCAhASAAEKIBDQlCgICAgOAAIQEgBRAzIgJCgICAgHCDQoCAgIDgAFENCQJAIAAoAhAiA0H9AEYNAANAAkAgA0GBf0YEQCAFIAApAyAQMCIDDQEMDAsgA0GDf0cNCiAAKAJMRQ0KIAUgACgCIBAWIQMLAkACQCAAEKIBDQAgAEE6EPQDDQAgABD1AyIBQoCAgIBwg0KAgICA4ABSDQELIAUgAxAQDAsLIAUgAiADIAFBBxAVIQcgBSADEBAgB0EASA0KIAAoAhBBLEcNASAAEKIBDQogACgCTEUgACgCECIDQf0AR3INAAsLIAIhASAAQf0AEPQDDQkMCgtCgICAgCAhASAAEKIBDQhCgICAgOAAIQEgBRA7IgJCgICAgHCDQoCAgIDgAFENCAJAIAAoAhBB3QBGDQADQCAAEPUDIgFCgICAgHCDQoCAgIDgAFENCSAFIAIgAyABQQcQkwFBAEgNCSAAKAIQQSxHDQEgABCiAQ0JIANBAWohAyAAKAJMRQ0AIAAoAhBB3QBHDQALCyACIQEgAEHdABD0Aw0IDAkLIAApAyAiAUIgiKdBdU8EQCABpyIEIAQoAgBBAWo2AgALIAEhAiAAEKIBDQcMCAsgACkDICIBIQIgABCiAQ0GDAcLIAAoAiBBAWsiBEECSw0BIARBA3RB4PQBaikDACIBIQIgABCiAQ0FDAYLIABB9RRBABATDAELIAAoAjghAyAGIAAoAhgiBDYCBCAGIAMgBGs2AgAgAEGzjQEgBhATC0KAgICAICEBDAILIABBrNQAQQAQEwsgAiEBCyAFIAEQDEKAgICA4AAhAgsgBkEQaiQAIAILVgECfgJ/QQAgAUKAgICAcFQNABogACABQc0BIAFBABARIgJCgICAgHCDIgNCgICAgDBSBEBBfyADQoCAgIDgAFENARogACACECcPCyABpy8BBkESRgsLGAAgACgCECIAQRBqIAEgAiAAKAIIEQEAC7gBAgJ+A38jAEEQayIGJAACQAJAIAAgAUEtEFoEQCAAIAFCgICAgDAQ/QEiBEKAgICAcINCgICAgOAAUQ0CIAAgBiAEEIICIQUgACAEEAwgBUKAgICAcINCgICAgOAAUQ0BIAAgASADIAYQqQIhCANAIAdBAkZFBEAgACAGIAdBA3RqKQMAEAwgB0EBaiEHDAELCyAIRQ0BIAAgBRAMC0KAgICA4AAhBAwBCyAFIQQLIAZBEGokACAEC6gBAQZ/AkAgASgCVCICQYD+A3ENACABIAJBgAJyNgJUA0AgASgCFCADTARAQQAPCyABKAIQIANBA3RqIgcoAgAhBEF/IQYgACABKAIEEI8EIgJFDQECQCAAIAQQjwQiBEUEQEEAIQUMAQsgACACIAQQuQUhBSAAIAIQMSAEIQILIAAgAhAxIAVFDQEgByAFNgIEIANBAWohAyAAIAUQ+QNBAE4NAAsLIAYLiAEBAn9BjQEhAgJAAkACQAJAAkACQAJAAkACQAJAQQcgAUIgiKciAyADQQdrQW5JG0EKag4SCQgHAggICAgIAwABBgQICAgACAtBxwAPC0HIAA8LQckADwsgAacsAAVBAE4NAQtBxgAPC0EbIQIgACABEDUNAwtBygAPC0HLAA8LQc0AIQILIAILbQECfwJAIAFCgICAgHBUDQAgAaciAy8BBhDgAUUNACADKAIgLQARQQhxRQ0AIAMoAigiBARAIAAgBK1CgICAgHCEEAwLQQAhACACQoCAgIBwWgRAIAKnIgAgACgCAEEBajYCAAsgAyAANgIoCwsMACAAQZHBAEEAEBILzAICBn8BfiMAQRBrIgYkAAJAIAJC/////29YBEAgAEGrH0EAEBIMAQsgACAGQQxqIAIQygENACAGKAIMIgRBgIAETwRAIABBoyFBABA6DAELIABBASAEIARBAU0bQQN0EFwiBUUNAAJAAkAgAqciBy8BBiIDQQhHIANBAkdxDQAgBy0ABUEIcUUNACAEIAcoAihHDQBBACEDA0AgAyAERg0CIANBA3QiCCAHKAIkaikDACICQiCIp0F1TwRAIAKnIgAgACgCAEEBajYCAAsgBSAIaiACNwMAIANBAWohAwwACwALQQAhAwNAIAMgBEYNASAAIAIgAxCmASIJQoCAgIBwg0KAgICA4ABRBEAgACAFIAMQhgNBACEDDAMFIAUgA0EDdGogCTcDACADQQFqIQMMAQsACwALIAEgBDYCACAFIQMLIAZBEGokACADC5wCAgJ/AX4CfkKAgICA4AAgABB2DQAaAkACQCABQoCAgIBwWgRAIAGnIgctAAVBEHFFBEAgAEGdLEEAEBJCgICAgOAADwsgBUEBciEGIAcvAQYiBUENRg0CIAAoAhAoAkQgBUEYbGooAhAiBQ0BCyAAQfs5QQAQEkKAgICA4AAPCyAAIAEgAiADIAQgBiAFERYADwsgBygCIC0AEUEEcQRAIAAgAUKAgICAMCACIAMgBCAGENIBDwtCgICAgOAAIAAgAkEBEF4iCEKAgICAcINCgICAgOAAUQ0AGiAAIAEgCCACIAMgBCAGENIBIgFC/////29YIAFCgICAgHCDQoCAgIDgAFJxRQRAIAAgCBAMIAEPCyAAIAEQDCAICwvPAgEEfyABQRxqIQQgAUEYaiEGA0AgBiAEKAIAIgRHBEACQCAEQRJrLwEAIAJHDQAgBEETay0AAEEBdkEBcSADRw0AIARBGGsiACAAKAIAQQFqNgIAIAAPCyAEQQRqIQQMAQsLIABBKBAkIgRFBEBBAA8LIARBATYCACAAKAIQIQAgBEEDOgAEIAAoAlAiBSAEQQhqIgc2AgQgBCAAQdAAajYCDCAEIAU2AgggACAHNgJQIAQgAjsBBiAEIAQtAAVB/AFxIANBAXRBAnFyOgAFIAEoAhgiACAEQRhqIgU2AgQgBCAGNgIcIAQgADYCGCABIAU2AhgCQCABLQAoQQhxBEAgBCABQThrIgA2AiAgACAAKAIAQQFqNgIADAELIARBADYCIAsgAwRAIAQgASgCECACQQN0ajYCECAEDwsgBCABKAIUIAJBA3RqNgIQIAQLjAICAX8BfgJAAkAgACABpyIELwARQQN2QQZxQZC3AWovAQAQhgEiBUKAgICAcINCgICAgOAAUQRADAELAkAgACAFIAQgAiADEMMFIgFCgICAgHCDQoCAgIDgAFENACAAIAEgBCgCHCICQS8gAhsgBC8BLBCYAyAELwARIgJBEHEEQCAAIAAoAihBqANB2AIgAkEwcUEwRhtqKQMAEEEiBUKAgICAcINCgICAgOAAUQ0BIAAgAUE8IAVBAhAVGiABDwsgAkEBcUUNAiABQoCAgIBwWgRAIAGnIgIgAi0ABUEQcjoABQsgACABQTxBAEEAQQIQgAMaIAEPCwsgACABEAxCgICAgOAAIQELIAELiAQBDX8jAEEgayIFJAAgA0EAIANBAEobIQ5BACEDA0ACQCADIA5GBEBBACEKDAELIAVBADYCGCAFQgA3AxAgBUIANwMIIAUgASADQQxsaiIEKAIENgIMIAUgBCgCCDYCECACIANqIQZBfyEKIANBAWohAyAEKAIAIQlBfyELAkAgBkH//wNLDQACQCAGIAAoAkAiBEkEQCAAKAJEIgQgBkEYbGooAgBFDQEMAgtBNiAGQQFqIgcgBEEDbEEBdiIEIAQgB0gbIgQgBEE2TBsiB0EDdCEPIABBEGohDCAAQcwAaiEEIABByABqIRADQCAQIAQoAgAiCEcEQCAMIAgoAhQgDyAAKAIIEQEAIg1FDQMgACgCQCEEA0AgBCAHSARAIA0gBEEDdGpCgICAgCA3AwAgBEEBaiEEDAELCyAIIA02AhQgCEEEaiEEDAELCyAMIAAoAkQgB0EYbCAAKAIIEQEAIgRFDQEgBCAAKAJAIghBGGxqQQAgByAIa0EYbBAsGiAAIAc2AkAgACAENgJECyAEIAZBGGxqIgQgBjYCACAJQdgBTgRAIAAoAjggCUECdGooAgAiBiAGKAIAQQFqNgIACyAEIAk2AgQgBCAFKAIMNgIIIAQgBSgCEDYCDCAEIAUoAhQ2AhAgBCAFKAIYNgIUQQAhCwsgC0EATg0BCwsgBUEgaiQAIAoLNQECfwJAIABCgICAgHBUDQAgAKciBC8BBkEMRw0AIAQoAiQgAUcNACAELgEqIAJGIQMLIAMLUAEDfyAAKALgASABKAIUQSAgACgC1AFrdkECdGohAgNAIAIiAygCACIEQShqIQIgASAERw0ACyADIAEoAig2AgAgACAAKALcAUEBazYC3AELgAkBC38jAEEQayIIJAACQAJAAkACQAJAAkADQCABKAIQIgNBMGohBiADIAMoAhggAnFBf3MiCUECdGooAgAhBEEAIQMDQCAEBEAgCCAGIARBAWsiCkEDdGoiBTYCDCAFKAIAIQcgAiAFKAIERgRAQQAhBCAHQYCAgCBxRQ0JQX8hBCAAIAEgCEEMahDTAQ0JIAEoAhAhAgJAIAMEQCACIAMgBmtqIgNBMGogAygCMEGAgIBgcSAIKAIMKAIAQf///x9xcjYCACAIKAIMIQkMAQsgAiAJQQJ0aiAIKAIMIgkoAgBB////H3E2AgALQQEhBCACIAIoAiRBAWo2AiQgACgCECABKAIUIApBA3RqIgMgCSgCAEEadhDUBSAAIAgoAgwoAgQQECAIKAIMIgUgBSgCAEH///8fcTYCACAIKAIMQQA2AgQgA0KAgICAMDcDACACKAIkIgNBCEgNCSADIAIoAiBBAXZJDQkgASgCECIHLQAQDQVBAiAHKAIgIAcoAiRrIgIgAkECTBsiCiAHKAIcSw0GIAcoAhhBAWohBANAIAQiAkEBdiIEIApPDQALIAAgCkEDdCINIAJBAnQiBWpBMGoQJCIERQ0IIAJBAWshCyAHKAIIIgIgBygCDCIDNgIEIAMgAjYCACAHQgA3AgggBCAFaiAHQTAQHiEGIAAoAhAiAigCUCIDIAZBCGoiCTYCBCAGIAJB0ABqNgIMIAYgAzYCCCACIAk2AlBBACEDIARBACAFECwaIAdBMGohBCAGQTBqIQIgASgCFCEMQQAhCQNAIAkgBigCICIFT0UEQCAEKAIEIgUEQCACIAU2AgQgAiAEKAIAQYCAgGBxIgUgAigCAEH///8fcXI2AgAgAiAFIAYgBCgCBCALcUF/c0ECdGoiBSgCAEH///8fcXI2AgAgBSADQQFqIgU2AgAgDCADQQN0aiAMIAlBA3RqKQMANwMAIAUhAyACQQhqIQILIAlBAWohCSAEQQhqIQQMAQsLIAMgBSAGKAIka0cNByAGQQA2AiQgBiAKNgIcIAYgCzYCGCAGIAM2AiAgASAGNgIQIAAoAhAiAkEQaiAHIAcoAhhBf3NBAnRqIAIoAgQRAABBASEEIAAgASgCFCANEMUCIgBFDQkgASAANgIUDAkFIAdB////H3EhBCAFIQMMAgsACwtBASEEIAEtAAUiA0EEcUUNBiADQQhxRQ0BIAAgCEEIaiACEKUBRQ0GIAgoAggiAyABKAIoIgVPDQYgAS8BBiIEQQhGIARBAkZyRQRAQQAhBAwHCyAFQQFrIANGBEAgACABKAIkIANBA3RqKQMAEAwgASADNgIoDAYLIAAgARCOA0UNAAtBfyEEDAULIAAoAhAoAkQgAS8BBkEYbGooAhQiA0UNBCADKAIIIgNFDQQgACABrUKAgICAcIQgAiADERMAIQQMBAtByuoAQajsAEG4I0HLKBAAAAtB9s0AQajsAEG8I0HLKBAAAAtB14gBQajsAEHhI0HLKBAAAAtBASEECyAIQRBqJAAgBAtQAQN/IwBBIGsiAyQAAn8gACADQQxqIAIQ2wUiBEUEQCABQgA3AwBBfwwBCyABIARBARCwBBogACAEIANBDGoQ5gFBAAshBSADQSBqJAAgBQuQAQIDfwF+IAEoAhQiBSkDACIHQv////8PViABKAIoIgZBAWoiBCAHp01yRQRAIAEoAhAtADNBCHFFBEAgACACEAwgACADQTAQ5wEPCyAFIAStNwMACwJAIAQgASgCIE0NACAAIAEgBBDYBUUNACAAIAIQDEF/DwsgASgCJCAGQQN0aiACNwMAIAEgBDYCKEEBC7wBAQF/IwBBEGsiBSQAIAUgAzcDCAJAIAEEQCABIAEoAgBBAWo2AgAgACABrUKAgICAcIQgAkEBIAVBCGoQNiECIAAgBSkDCBAMQX8hASACQoCAgIBwg0KAgICA4ABRDQEgACACEAxBASEBDAELIAAgAxAMIARBgIABcUUEQEEAIQEgBEGAgAJxRQ0BIAAoAhAoAowBIgRFDQEgBC0AKEEBcUUNAQsgAEHbCUEAEBJBfyEBCyAFQRBqJAAgAQs/AQF+IAAQ4gEiAkKAgICAcINCgICAgOAAUgRAIAKnQQRqIAEQMkUEQCACDwsgACACEAwgABBwC0KAgICA4AALCwAgACABQQEQjQQL2wEBA38jAEEQayIEJAACQAJAIAFCgICAgHBUDQAgAaciAi8BBkEsRgRAAkAgACAEQQhqIAFB4wAQfiIDRQ0AIAQpAwgiAUKAgICAcINCgICAgDBRBEAgACADKQMAEIoEIQIMBAsgACABIAMpAwhBASADEDYiAUKAgICAcINCgICAgOAAUQ0AIAAgARAnIgJFDQIgACADKQMAEJcBIgNBAEgNACADRQ0DIABBnSVBABASC0F/IQIMAgsgAiACLQAFQf4BcToABUEBIQIMAQtBACECCyAEQRBqJAAgAgt7AgJ/AX5BiAIhAkKAgICAICEEAkACQAJAAkACQAJAAkBBByABQiCIpyIDIANBB2tBbkkbIgNBCmoODAUGBAMGBgYGBgYBAgALIANBB0cNBQtBICECDAMLQTAhAgwCC0EoIQIMAQtBOCECCyAAKAIoIAJqKQMAIQQLIAQLYAEBfCAAKQIEQv//////////P1gEQCABIAErAwhEAAAAAAAA8D8gACgCALciAqOgOQMIIAEgASsDECAAKAIEIgBBH3UgAEH/////B3EgAEEfdnRqQRFquCACo6A5AxALC/gCAgF+A38jAEEwayIEJABB9e8AIQVCgICAgOAAIQMCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQEEHIAFCIIinIgYgBkEHa0FuSRtBCmoOEggJBgAJCQkJCgUBAgMECQkMBwkLIAZBdUkNCiABpyIAIAAoAgBBAWo2AgAMCgsgBCABPgIAIARBEGoiBUEgQe7rACAEEEgaDAgLIABBA0ECIAGnGxApIQMMCQsgAEEBECkhAwwICyAAQcYAECkhAwwHCyAAIAFBABC7AiIBQoCAgIBwg0KAgICA4ABRBEAgASEDDAcLIAAgASACEI0EIQMgACABEAwMBgsgAgRAIAZBdUkNBSABpyIAIAAoAgBBAWo2AgAMBQsgAEGNyQBBABASDAULIAAgAUKAgICAwIGA/P8AfL9BCkEAQQAQugIhAwwECyAAIAEgACgCECgCoAIRCAAhAwwDC0Hi7wAhBQsgACAFEGAhAwwBCyABIQMLIARBMGokACADCzcAIAAgASACIAMCf0EAIAAoAhAiAC0AiAENABpBASAAKAKMASIARQ0AGiAAKQMIEJYDRQsQ5AULMQIBfwF+IAAgARApIgNCgICAgHCDQoCAgIDgAFIEQCAAIAMQqAEhAiAAIAMQDAsgAgtGAQF/IAEgASgCACICQQFrNgIAIAJBAUwEQCABKQIEQoCAgICAgICAwABaBEAgACABEJsDDwsgAEEQaiABIAAoAgQRAAALC1kBA38jAEEQayICJAAgACgCECEAAn8CQCACQQxqIAEQ7QVFDQAgAigCDCIDQQBIDQAgACABEJAEIANBgICAgHhyDAELIAAgAUEBEMcCCyEEIAJBEGokACAEC0QBAX8jAEEQayIFJAAgBSABIAIgAyAEQoCAgICAgICAgH+FEG8gBSkDACEBIAAgBSkDCDcDCCAAIAE3AwAgBUEQaiQACxAAIAAgASACQQBBABCUBBoLxgIBBX8jAEHQAWsiBSQAIAUgAjYCzAEgBUGgAWoiAkEAQSgQLBogBSAFKALMATYCyAECQEEAIAEgBUHIAWogBUHQAGogAiADIAQQ/QVBAEgEQEF/IQQMAQsgACgCTEEASCEJIAAgACgCACIIQV9xNgIAAn8CQAJAIAAoAjBFBEAgAEHQADYCMCAAQQA2AhwgAEIANwMQIAAoAiwhBiAAIAU2AiwMAQsgACgCEA0BC0F/IAAQmAQNARoLIAAgASAFQcgBaiAFQdAAaiAFQaABaiADIAQQ/QULIQIgBgRAIABBAEEAIAAoAiQRAQAaIABBADYCMCAAIAY2AiwgAEEANgIcIAAoAhQhASAAQgA3AxAgAkF/IAEbIQILIAAgACgCACIAIAhBIHFyNgIAQX8gAiAAQSBxGyEEIAkNAAsgBUHQAWokACAECzwBAX8gAEIANwNwIAAgACgCLCAAKAIEIgFrrDcDeCAAIAAoAggiACABa6xCAFdBAXIEfyAABSABCzYCaAtKAQJ/AkAgAC0AACICRSACIAEtAAAiA0dyDQADQCABLQABIQMgAC0AASICRQ0BIAFBAWohASAAQQFqIQAgAiADRg0ACwsgAiADawvCAQEDfwJAIAEgAigCECIDBH8gAwUgAhCYBA0BIAIoAhALIAIoAhQiBGtLBEAgAiAAIAEgAigCJBEBAA8LAkACQCABRSACKAJQQQBIcg0AIAEhAwNAIAAgA2oiBUEBay0AAEEKRwRAIANBAWsiAw0BDAILCyACIAAgAyACKAIkEQEAIgQgA0kNAiABIANrIQEgAigCFCEEDAELIAAhBUEAIQMLIAQgBSABEB4aIAIgAigCFCABajYCFCABIANqIQQLIAQLWQEBfyAAIAAoAkgiAUEBayABcjYCSCAAKAIAIgFBCHEEQCAAIAFBIHI2AgBBfw8LIABCADcCBCAAIAAoAiwiATYCHCAAIAE2AhQgACABIAAoAjBqNgIQQQALiQQCBX4DfwJAAkAgAb0iBEIBhiIDUA0AIAG9IQYgAL0iBUI0iKdB/w9xIgdB/w9GDQAgBkL///////////8Ag0KBgICAgICA+P8AVA0BCyAAIAGiIgAgAKMPCyADIAVCAYYiAloEQCAARAAAAAAAAAAAoiAAIAIgA1EbDwsgBEI0iKdB/w9xIQgCfiAHRQRAQQAhByAFQgyGIgJCAFkEQANAIAdBAWshByACQgGGIgJCAFkNAAsLIAVBASAHa62GDAELIAVC/////////weDQoCAgICAgIAIhAshAgJ+IAhFBEBBACEIIARCDIYiA0IAWQRAA0AgCEEBayEIIANCAYYiA0IAWQ0ACwsgBEEBIAhrrYYMAQsgBEL/////////B4NCgICAgICAgAiECyEEIAcgCEoEQANAAkAgAiAEfSIDQgBTDQAgAyICQgBSDQAgAEQAAAAAAAAAAKIPCyACQgGGIQIgB0EBayIHIAhKDQALIAghBwsCQCACIAR9IgNCAFMNACADIgJCAFINACAARAAAAAAAAAAAog8LAkAgAkL/////////B1YEQCACIQMMAQsDQCAHQQFrIQcgAkKAgICAgICABFQhCSACQgGGIgMhAiAJDQALCyAFQoCAgICAgICAgH+DIANCgICAgICAgAh9IAetQjSGhCADQQEgB2utiCAHQQBKG4S/C8YEAwN8A38CfgJ8AkAgABDKAkH/D3EiBUQAAAAAAACQPBDKAiIEa0QAAAAAAACAQBDKAiAEa0kEQCAFIQQMAQsgBCAFSwRAIABEAAAAAAAA8D+gDwtBACEERAAAAAAAAJBAEMoCIAVLDQBEAAAAAAAAAAAgAL0iB0KAgICAgICAeFENARpEAAAAAAAA8H8QygIgBU0EQCAARAAAAAAAAPA/oA8LIAdCAFMEQEQAAAAAAAAAEBCMBg8LRAAAAAAAAABwEIwGDwtB4LwEKwMAIACiQei8BCsDACIBoCICIAGhIgFB+LwEKwMAoiABQfC8BCsDAKIgAKCgIgEgAaIiACAAoiABQZi9BCsDAKJBkL0EKwMAoKIgACABQYi9BCsDAKJBgL0EKwMAoKIgAr0iB6dBBHRB8A9xIgVB0L0EaisDACABoKCgIQEgBUHYvQRqKQMAIAdCLYZ8IQggBEUEQAJ8IAdCgICAgAiDUARAIAhCgICAgICAgIg/fb8iACABoiAAoEQAAAAAAAAAf6IMAQsgCEKAgICAgICA8D98vyICIAGiIgEgAqAiA0QAAAAAAADwP2MEfCMAQRBrIgQhBiAEQoCAgICAgIAINwMIIAYgBCsDCEQAAAAAAAAQAKI5AwhEAAAAAAAAAAAgA0QAAAAAAADwP6AiACABIAIgA6GgIANEAAAAAAAA8D8gAKGgoKBEAAAAAAAA8L+gIgAgAEQAAAAAAAAAAGEbBSADC0QAAAAAAAAQAKILDwsgCL8iACABoiAAoAsLuxgDGX8EfAF+IwBBMGsiCCQAAkACQAJAIAC9Ih9CIIinIgNB/////wdxIgZB+tS9gARNBEAgA0H//z9xQfvDJEYNASAGQfyyi4AETQRAIB9CAFkEQCABIABEAABAVPsh+b+gIgBEMWNiGmG00L2gIhs5AwAgASAAIBuhRDFjYhphtNC9oDkDCEEBIQMMBQsgASAARAAAQFT7Ifk/oCIARDFjYhphtNA9oCIbOQMAIAEgACAboUQxY2IaYbTQPaA5AwhBfyEDDAQLIB9CAFkEQCABIABEAABAVPshCcCgIgBEMWNiGmG04L2gIhs5AwAgASAAIBuhRDFjYhphtOC9oDkDCEECIQMMBAsgASAARAAAQFT7IQlAoCIARDFjYhphtOA9oCIbOQMAIAEgACAboUQxY2IaYbTgPaA5AwhBfiEDDAMLIAZBu4zxgARNBEAgBkG8+9eABE0EQCAGQfyyy4AERg0CIB9CAFkEQCABIABEAAAwf3zZEsCgIgBEypSTp5EO6b2gIhs5AwAgASAAIBuhRMqUk6eRDum9oDkDCEEDIQMMBQsgASAARAAAMH982RJAoCIARMqUk6eRDuk9oCIbOQMAIAEgACAboUTKlJOnkQ7pPaA5AwhBfSEDDAQLIAZB+8PkgARGDQEgH0IAWQRAIAEgAEQAAEBU+yEZwKAiAEQxY2IaYbTwvaAiGzkDACABIAAgG6FEMWNiGmG08L2gOQMIQQQhAwwECyABIABEAABAVPshGUCgIgBEMWNiGmG08D2gIhs5AwAgASAAIBuhRDFjYhphtPA9oDkDCEF8IQMMAwsgBkH6w+SJBEsNAQsgACAARIPIyW0wX+Q/okQAAAAAAAA4Q6BEAAAAAAAAOMOgIhxEAABAVPsh+b+ioCIbIBxEMWNiGmG00D2iIh2hIh5EGC1EVPsh6b9jIQICfyAcmUQAAAAAAADgQWMEQCAcqgwBC0GAgICAeAshAwJAIAIEQCADQQFrIQMgHEQAAAAAAADwv6AiHEQxY2IaYbTQPaIhHSAAIBxEAABAVPsh+b+ioCEbDAELIB5EGC1EVPsh6T9kRQ0AIANBAWohAyAcRAAAAAAAAPA/oCIcRDFjYhphtNA9oiEdIAAgHEQAAEBU+yH5v6KgIRsLIAEgGyAdoSIAOQMAAkAgBkEUdiICIAC9QjSIp0H/D3FrQRFIDQAgASAbIBxEAABgGmG00D2iIgChIh4gHERzcAMuihmjO6IgGyAeoSAAoaEiHaEiADkDACACIAC9QjSIp0H/D3FrQTJIBEAgHiEbDAELIAEgHiAcRAAAAC6KGaM7oiIAoSIbIBxEwUkgJZqDezmiIB4gG6EgAKGhIh2hIgA5AwALIAEgGyAAoSAdoTkDCAwBCyAGQYCAwP8HTwRAIAEgACAAoSIAOQMAIAEgADkDCEEAIQMMAQsgH0L/////////B4NCgICAgICAgLDBAIS/IQBBACEDQQEhAgNAIAhBEGogA0EDdGoCfyAAmUQAAAAAAADgQWMEQCAAqgwBC0GAgICAeAu3Ihs5AwAgACAboUQAAAAAAABwQaIhAEEBIQMgAiEWQQAhAiAWDQALIAggADkDIEECIQMDQCADIgJBAWshAyAIQRBqIg4gAkEDdGorAwBEAAAAAAAAAABhDQALQQAhBCMAQbAEayIFJAAgBkEUdkGWCGsiA0EDa0EYbSIGQQAgBkEAShsiEEFobCADaiEGQcSmBCgCACIJIAJBAWoiDEEBayIHakEATgRAIAkgDGohAyAQIAdrIQIDQCAFQcACaiAEQQN0aiACQQBIBHxEAAAAAAAAAAAFIAJBAnRB0KYEaigCALcLOQMAIAJBAWohAiAEQQFqIgQgA0cNAAsLIAZBGGshCkEAIQMgCUEAIAlBAEobIQQgDEEATCELA0ACQCALBEBEAAAAAAAAAAAhAAwBCyADIAdqIQ9BACECRAAAAAAAAAAAIQADQCAOIAJBA3RqKwMAIAVBwAJqIA8gAmtBA3RqKwMAoiAAoCEAIAJBAWoiAiAMRw0ACwsgBSADQQN0aiAAOQMAIAMgBEYhFyADQQFqIQMgF0UNAAtBLyAGayESQTAgBmshDyAGQRlrIRMgCSEDAkADQCAFIANBA3RqKwMAIQBBACECIAMhBCADQQBMIg1FBEADQCAFQeADaiACQQJ0agJ/An8gAEQAAAAAAABwPqIiG5lEAAAAAAAA4EFjBEAgG6oMAQtBgICAgHgLtyIbRAAAAAAAAHDBoiAAoCIAmUQAAAAAAADgQWMEQCAAqgwBC0GAgICAeAs2AgAgBSAEQQFrIgRBA3RqKwMAIBugIQAgAkEBaiICIANHDQALCwJ/IAAgChDVASIAIABEAAAAAAAAwD+inEQAAAAAAAAgwKKgIgCZRAAAAAAAAOBBYwRAIACqDAELQYCAgIB4CyEHIAAgB7ehIQACQAJAAkACfyAKQQBMIhRFBEAgA0ECdCAFaiICIAIoAtwDIgIgAiAPdSICIA90ayIENgLcAyACIAdqIQcgBCASdQwBCyAKDQEgA0ECdCAFaigC3ANBF3ULIgtBAEwNAgwBC0ECIQsgAEQAAAAAAADgP2YNAEEAIQsMAQtBACECQQAhBCANRQRAA0AgBUHgA2ogAkECdGoiFSgCACENQf///wchEQJ/AkAgBA0AQYCAgAghESANDQBBAAwBCyAVIBEgDWs2AgBBAQshBCACQQFqIgIgA0cNAAsLAkAgFA0AQf///wMhAgJAAkAgEw4CAQACC0H///8BIQILIANBAnQgBWoiDSANKALcAyACcTYC3AMLIAdBAWohByALQQJHDQBEAAAAAAAA8D8gAKEhAEECIQsgBEUNACAARAAAAAAAAPA/IAoQ1QGhIQALIABEAAAAAAAAAABhBEBBACEEIAMhAgJAIAMgCUwNAANAIAVB4ANqIAJBAWsiAkECdGooAgAgBHIhBCACIAlKDQALIARFDQAgCiEGA0AgBkEYayEGIAVB4ANqIANBAWsiA0ECdGooAgBFDQALDAMLQQEhAgNAIAIiBEEBaiECIAVB4ANqIAkgBGtBAnRqKAIARQ0ACyADIARqIQQDQCAFQcACaiADIAxqIgdBA3RqIANBAWoiAyAQakECdEHQpgRqKAIAtzkDAEEAIQJEAAAAAAAAAAAhACAMQQBKBEADQCAOIAJBA3RqKwMAIAVBwAJqIAcgAmtBA3RqKwMAoiAAoCEAIAJBAWoiAiAMRw0ACwsgBSADQQN0aiAAOQMAIAMgBEgNAAsgBCEDDAELCwJAIABBGCAGaxDVASIARAAAAAAAAHBBZgRAIAVB4ANqIANBAnRqAn8CfyAARAAAAAAAAHA+oiIbmUQAAAAAAADgQWMEQCAbqgwBC0GAgICAeAsiArdEAAAAAAAAcMGiIACgIgCZRAAAAAAAAOBBYwRAIACqDAELQYCAgIB4CzYCACADQQFqIQMMAQsCfyAAmUQAAAAAAADgQWMEQCAAqgwBC0GAgICAeAshAiAKIQYLIAVB4ANqIANBAnRqIAI2AgALRAAAAAAAAPA/IAYQ1QEhAAJAIANBAEgNACADIQIDQCAFIAIiBEEDdGogACAFQeADaiACQQJ0aigCALeiOQMAIAJBAWshAiAARAAAAAAAAHA+oiEAIAQNAAsgA0EASA0AIAMhBANARAAAAAAAAAAAIQBBACECIAkgAyAEayIGIAYgCUobIgpBAE4EQANAIAJBA3RBoLwEaisDACAFIAIgBGpBA3RqKwMAoiAAoCEAIAIgCkchGCACQQFqIQIgGA0ACwsgBUGgAWogBkEDdGogADkDACAEQQBKIRkgBEEBayEEIBkNAAsLRAAAAAAAAAAAIQAgA0EATgRAIAMhAgNAIAIiBEEBayECIAAgBUGgAWogBEEDdGorAwCgIQAgBA0ACwsgCCAAmiAAIAsbOQMAIAUrA6ABIAChIQBBASECIANBAEoEQANAIAAgBUGgAWogAkEDdGorAwCgIQAgAiADRyEaIAJBAWohAiAaDQALCyAIIACaIAAgCxs5AwggBUGwBGokACAHQQdxIQMgCCsDACEAIB9CAFMEQCABIACaOQMAIAEgCCsDCJo5AwhBACADayEDDAELIAEgADkDACABIAgrAwg5AwgLIAhBMGokACADC/4DAwN8A38BfiAAvSIHQiCIp0H/////B3EiBEGAgMCgBE8EQCAARBgtRFT7Ifk/IACmIAC9Qv///////////wCDQoCAgICAgID4/wBWGw8LAkACfyAEQf//7/4DTQRAQX8gBEGAgIDyA08NARoMAgsgAJkhACAEQf//y/8DTQRAIARB//+X/wNNBEAgACAAoEQAAAAAAADwv6AgAEQAAAAAAAAAQKCjIQBBAAwCCyAARAAAAAAAAPC/oCAARAAAAAAAAPA/oKMhAEEBDAELIARB//+NgARNBEAgAEQAAAAAAAD4v6AgAEQAAAAAAAD4P6JEAAAAAAAA8D+goyEAQQIMAQtEAAAAAAAA8L8gAKMhAEEDCyEGIAAgAKIiAiACoiIBIAEgASABIAFEL2xqLES0or+iRJr93lIt3q2/oKJEbZp0r/Kws7+gokRxFiP+xnG8v6CiRMTrmJmZmcm/oKIhAyACIAEgASABIAEgAUQR2iLjOq2QP6JE6w12JEt7qT+gokRRPdCgZg2xP6CiRG4gTMXNRbc/oKJE/4MAkiRJwj+gokQNVVVVVVXVP6CiIQEgBEH//+/+A00EQCAAIAAgAyABoKKhDwsgBkEDdCIEQcClBGorAwAgACADIAGgoiAEQeClBGorAwChIAChoSIAmiAAIAdCAFMbIQALIAALaQEEfyABED0hAwNAAkAgAC0AAEUEQEF/IQIMAQsDQAJ/IABBLBCfAyIERQRAIAAQPQwBCyAEIABrCyIFIANGBEAgACABIAMQaEUNAgsgACAFakEBaiEAIAQNAAsgAkEBaiECDAELCyACCxEAIABBoJQCQfCcAkEjEKUDC1sAIAAgASACIAMgBBDsAyIDRQRAQoCAgIDgAA8LQoCAgIDgACECIAAgA0EoahC3AiIBQoCAgIBwg0KAgICA4ABSBEAgACADEKwFIAEhAgsgACgCECADEM4BIAILkwUBBH8gBEEIdEGAHnEiByADQdDfAmotAAAiBnIhAyAEQQ92IQUCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQCAEQQR2IghBD3EiBA4NAAAAAAECAwQFBgYIBwkLIAJBAkcgBEECSXIgAiAIQQFxR3ENCiABIAVrIANBAnRBoIACaigCAEEPdmohAQwKCyABIAVrIgNBAXEgAkEAR0YNCSADQQFzIAVqIQEMCQsgASAFayIDQQFGBEBBAUF/IAIbIAFqIQEMCQsgAyACRUEBdEcNCEECQX4gAhsgAWohAQwICyABIAVrIQEgAg0GIABBmQc2AgQgACABIANBBXZB/gBxQdDiAmovAQBqNgIAQQIPCyACQQFGDQYgAyACQQJGQQV0aiEBDAYLIAJBAUYNBSADQQF0QdDiAmovAQAgAkECRmohAQwFCyAEQQlrIAJBAEdHDQQgA0EBdEHQ4gJqLwEAIQEMBAsgAkUNAyAAIAZBP3FBAXRB0OICai8BADYCBCAAIANBBXZB/gBxQdDiAmovAQAgASAFa2o2AgBBAg8LIAJBAUYNAiAAIAZBP3FBAXRB0OICai8BACIGNgIEIAAgA0EFdkH+AHFB0OICai8BACABIAVraiIBNgIAQQIgAkECRw0DGiAAIAEQ0wI2AgAgACAGENMCNgIEQQIPCyACQQFGDQEgACAHQQd2QdDiAmovAQAiATYCACAAIAZBD3FBAXRB0OICai8BACIDNgIIIAAgBkEDdkEecUHQ4gJqLwEAIgU2AgRBAyACQQJHDQIaIAAgARDTAjYCACAAIAUQ0wI2AgQgACADENMCNgIIQQMPCyABIAZBP3FBAXRB0OICai8BAGohAQsgACABNgIAQQELCxcAIAAgAUH/AXEQDiAAIAJB//8DcRAmC64ZARJ/IwBBkAFrIggkACAIIAIoAgAiBDYCDAJAAkACQAJAAkACQAJAAkACQAJAIAQtAAAiCQRAIAlB3ABHDQUgBEEBaiIGIAAoAhxPDQEgCCAEQQJqIgU2AgwCQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBC0AASIJQdMAaw4FBAEBAQYACwJAIAlB4wBrDgIIBwALAkAgCUHzAGsOBQMBAQEFAAsgCUHEAEYNASAJQdAARiAJQfAARnINCAsgACgCKCEBDA4LQQEhBwwEC0ECIQcMAwtBAyEHDAILQQQhBwwBC0EFIQcLIAdBAXRBDHFBwP8BaigCACIFLwEAIRQgASAAKAJAENICIAdBAXEhBiAFQQJqIQUgFEEBdCEDQQAhCQNAIAMgCUcEQCAFIAlBAXRqLwEAIQAgASgCACIEIAEoAgROBEAgASAEQQFqENECDQUgASgCACEECyABIARBAWo2AgAgASgCCCAEQQJ0aiAANgIAIAlBAWohCQwBCwtBgICAgAQhCSAGRQ0LIAEQlAINAgwLCwJAIAUtAAAiBUHfAXFBwQBrQf8BcUEaTwRAIAAoAighASADRSAFQd8ARiAFQTBrQf8BcUEKSXJFcg0BIAENDQsgCCAEQQNqNgIMIAVBH3EhCQwLCyABDQsgCCAGNgIMQdwAIQkMCgsgACgCKEUEQEEAIQEMBwsgBS0AAEH7AEcNBCAIQdAAaiEEAkACQANAAkAgBUEBaiEDIAUtAAEiBxCnA0UNACAEIAhB0ABqa0E+Sw0CIAQgBzoAACAEQQFqIQQgAyEFDAELCyAEQQA6AAAgCEEQaiEEAkAgB0E9Rw0AIAVBAmohAwNAIAMtAAAiBxCnA0UNASAEIAhBEGprQT9PBEAgAEGizwBBABA/DBAFIAQgBzoAACAEQQFqIQQgA0EBaiEDDAELAAsACyAEQQA6AAAgB0H9AEcEQCAAQcGMAUEAED8MDgtBACEEAkACQCAIQdAAaiIFQdsWQQcQaEUNACAFQfHrAEEDEGhFDQBBASEEIAVBwyVBEhBoRQ0AIAgoAlBB88bhA0cNAQsgASAAKAJAENICQQAhBiMAQTBrIgskAAJ/QX5BwKMCIAhBEGoQnQQiDkEASA0AGiABIQwgBARAIAEoAhAhByALIAEoAgwiBTYCKCALQQA2AiQgC0IANwIcIAsgBTYCFCALQQA2AhAgC0IANwIIIAsgB0GbAyAHGyIFNgIsIAsgBTYCGCALQRxqIQwLIA5BAWohEQJAAkADQCAGQZ8VTARAIAohByAGQZC2AmotAAAiCsAhFQJ/IAZBAWoiBSAKQf8AcSIKQeAASQ0AGiAFQZC2AmotAAAhBSAKQe8ATQRAIApBCHQgBXJBoL8BayEKIAZBAmoMAQsgBkGStgJqLQAAIApBEHRyIAVBCHRyQaDfvwNrIQogBkEDagshBSAVQQBOBEAgByAKakEBaiEKIAUhBgwCCyAFQQFqIQYgByAKakEBaiEKIBEgBUGQtgJqLQAARw0BIAwgByAKEGlFDQEMAgsLQQAiByAERQ0CGiAOQTdGIRIgDkEYRyETQQAhBgNAIAZBuwZMBEAgByEFIAZBsMsCaiwAACINQf8BcSEKAn8gBkEBaiIHIA1BAE4NABogB0GwywJqLQAAIQcgDUG/f00EQCAKQQh0IAdyQYD/AWshCiAGQQJqDAELIAZBsssCai0AACAKQRB0ciAHQQh0ckGA//4FayEKIAZBA2oLIQ8gBSAKakEBaiEHIA9BsMsCai0AACEQAkAgEiATRXJFBEAgD0GxywJqIQ1BACEGA0AgBiAQRg0CIAYgDWohCiAGQQFqIQYgESAKLQAARw0ACyALQQhqIAUgBxBpRQ0BDAQLIBBFDQAgC0EIaiAFIAcQaQ0DCyAPQQFqIBBqIQYMAQsLIA5BN0cgDkEYR3FFBEAgC0EIahCUAg0BIAEgDCgCCCAMKAIAIAsoAhAiBiALKAIIQQEQ7AENAQwCCyABIAwoAgggDCgCACALKAIQIgYgCygCCEEAEOwBRQ0BCyALKAIQIQIgCygCFCEBIAsoAhghAANAIARFDQAgDCgCDCAMKAIIQQAgDCgCEBEBABogASACQQAgABEBABoMAAsACyAMKAIMIAwoAghBACAMKAIQEQEAGiALKAIUIAZBACALKAIYEQEAGkEACyEFIAtBMGokACAFRQ0CIAEQmwEgBUF+Rw0IIABBxBZBABA/DA4LAkAgCEHQAGoiBUGJDEEREGgEQCAFQYjsAEEDEGgNAQsgASAAKAJAENICIAEgCEEQahCTBiIFRQ0CIAEQmwEgBUF+Rw0IIABB6AtBABA/DA4LIAgtABANACABIAAoAkAQ0gIgASAIQdAAahCTBiIFQX9GBEAgARCbAQwICyAFQQBODQEjAEGgBGsiBCQAQX4hBgJAQbDXAiAIQdAAahCdBCIFQQBIDQACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBUEiaw4TAAcBAgYQDg0RDwwICRIEAwULChMLQX8hBkEAIAFBAEGAARBpRQ0TGgwUC0F/IQZBACABQQBBgIDEABBpRQ0SGgwTCyAEQoaAgIDwADcDCCAEQoCAgIAQNwMAIAEgBBB5DBELIARCg4CAgPAANwMgIARCgYCAgBA3AxggBEKAgICAgIAENwMQIAEgBEEQahB5DBALIARBQGtCg4CAgPAANwMAIARCgYCAgDA3AzggBEKAgICAwAA3AzAgASAEQTBqEHkMDwsgBEKDgICA8AA3A2AgBEKBgICAwAA3A1ggBEKAgICAIDcDUCABIARB0ABqEHkMDgsgBEEHNgKQASAEQoOAgIAwNwOIASAEQoOAgIAQNwOAASAEQoGAgIDAADcDeCAEQoCAgIDgATcDcCABIARB8ABqEHkMDQsgBEKDgICA8AA3A8gBIARCgYCAgCA3A8ABIARCg4CAgDA3A7gBIARCg4CAgBA3A7ABIARCgYCAgMAANwOoASAEQoCAgIDghwE3A6ABIAEgBEGgAWoQeQwMCyAEQQc2AugBIARCg4CAgOAANwPgASAEQoGAgIDQADcD2AEgBEKAgICAkKiAgD83A9ABIAEgBEHQAWoQeQwLCyAEQoOAgIDwADcDgAIgBEKBgICA0AA3A/gBIARCgICAgIAoNwPwASABIARB8AFqEHkMCgsgBEKEgICA8AA3A8gCIARCg4CAgOAANwPAAiAEQoGAgICwATcDuAIgBEKegICAMDcDsAIgBEKdgICAEDcDqAIgBEKDgICAEDcDoAIgBEKBgICA8AA3A5gCIARCgICAgOCHATcDkAIgASAEQZACahB5DAkLIARBBzYCmAMgBEKGgICAwAA3A5ADIARCjICAgDA3A4gDIARCg4CAgBA3A4ADIARCgYCAgOADNwP4AiAEQoGAgIDQAzcD8AIgBEKIgICAMDcD6AIgBEKDgICAEDcD4AIgBEKBgICA8AA3A9gCIARCgICAgODfwQA3A9ACIAEgBEHQAmoQeQwICyABQQEQzwIMBwsgAUECEM8CDAYLIAFBBxDPAgwFCyAEQoWAgIDwADcDsAMgBEKBgICA0AE3A6gDIARCgoCAgBA3A6ADIAEgBEGgA2oQeQwECyAEQoWAgIDwADcD0AMgBEKBgICA4AE3A8gDIARCgoCAgMAANwPAAyABIARBwANqEHkMAwsgBEKFgICA8AA3A/ADIARCgYCAgPABNwPoAyAEQoKAgIDAADcD4AMgASAEQeADahB5DAILIARChYCAgPAANwOQBCAEQoGAgICgATcDiAQgBEKBgICAgAY3A4AEIAEgBEGABGoQeQwBCyAFQSFLDQEgASAFQRBqEJEGCyEGCyAEQaAEaiQAIAZFDQEgARCbASAGQX5HDQcLIABBxNQAQQAQPwwMCyAJQdAARw0BIAEQlAJFDQELIAEQmwEMCgsgCCADQQFqNgIMQYCAgIAEIQkMBwtBACEJIAQgACgCHEkNBQsgAEHJ4gBBABA/DAcLIABB4TdBABA/DAYLIAAQ1QIMBQsgCCAGNgIMIAhBDGogAUEBdBCXAiIDQQBOBEAgAyEJDAMLAkAgA0F+Rw0AIAgoAgwiBC0AACIDRQ0AQdeHASADQRAQkgIgAUVyDQEMBAsgAQ0DIAgoAgwhBAsgCcBBAE4NACAEQQYgCEEMahBRIglBgIAESQ0BIAAoAigNASAAQcM1QQAQPwwDCyAIIARBAWo2AgwLIAIgCCgCDDYCAAwCCyAAQeU8QQAQPwtBfyEJCyAIQZABaiQAIAkLHwEBfyAAKAI8IgFBAEgEfyAAEKAGGiAAKAI8BSABCwu7AwEFfyMAQRBrIgMkACADIAEoAgAiBTYCDCAAIQQCfwNAAkACQAJAAkACQAJAIAUtAAAiAkHcAEcEQCACQT5HDQEgACAERg0GIARBADoAACABIAMoAgxBAWo2AgBBAAwICyADIAVBAWo2AgwgBS0AAUH1AEYNAQwFCyACwEEATg0CIAVBBiADQQxqEFEiAkGAeHFBgLADRw0BIAMoAgxBBiADQQhqEFEiBUGAeHFBgLgDRw0DIAMgAygCCDYCDCACQQp0IAVqQYC4/xprIQIMAwsgA0EMakECEJcCIQILIAJB///DAEsNAgwBCyADIAVBAWo2AgwLAkAgACAERgRAAn8gAkH/AE0EQCACQQN2Qfz///8BcUGg/wFqKAIAIAJ2QQFxDAELIAIQngQLRQ0CDAELAn8gAkH/AE0EQCACQQN2Qfz///8BcUGw/wFqKAIAIAJ2QQFxDAELIAJBfnFBjMAARiACEJYGQQBHcgtFDQELIAQgAGtB+QBKDQACfyACQf8ATQRAIAQgAjoAACAEQQFqDAELIAQgAhDdAiAEagshBCADKAIMIQUMAQsLQX8LIQYgA0EQaiQAIAYLMQEBf0EBIQECQAJAAkAgAEEKaw4EAgEBAgALIABBqMAARg0BCyAAQanAAEYhAQsgAQuoAgEDfwJAAkAgACgCMCIJQQFqIgogACgCLCIITQRAIAAoAighCAwBCyAAKAIgIAAoAihBCCAIQQNsQQF2IgggCEEITRsiCSAAKAIkbBD3AyIIRQRAQX8hCAwCCyAAIAg2AiggACAJNgIsIAAoAjAiCUEBaiEKCyAAIAo2AjAgCCAAKAIkIAlsaiIIIAc2AgQgCCAGOgAAIAggBDYCDCAIIAU2AgggCCADOgABIAhBEGohBCAAKAIMQQF0IQVBACEAA0AgACAFRkUEQCAEIABBAnQiBmogASAGaigCADYCACAAQQFqIQAMAQsLIAQgBUECdGohAUEAIQhBACEAA0AgACADRg0BIAEgAEECdCIEaiACIARqKAIANgIAIABBAWohAAwACwALIAgLDQAgAEEGQX9BBRDxBQvLBQIIfwN+IwBBMGsiCCQAAn8CQAJAAkACQAJAIAMOAwABAgMLQf2DAUHY7ABByxpBkOwAEAAACyABIAIoAhAgAigCDCIAIABBBXQgAigCCGsQcTYCAAwCCyACKAIQIgMgAigCDCIAIABBBXQgAigCCGsiAkEgahBxrUIghiADIAAgAhBxrYQhECAGQYCU69wDRgRAIAEgEEKAlOvcA4AiET4CBCABIBAgEUKAlOvcA359PgIADAILIAEgECAGrSIRgCISPgIEIAEgECARIBJ+fT4CAAwBCyACKAIAIQogCEIANwIoIAhCgICAgICAgICAfzcCICAIIAo2AhwgCEIANwIUIAhCgICAgICAgICAfzcCDCAIIAo2AgggAyAFQQF0IARBAWoiC3ZBAWpBAXYiCmshDCAAIARBAXRBAXJBFGxqIQ1BACEDIAAgBEEobGoiBCgCDEUEQCAEIAYgCkH/////A0EBENcCIAhBCGoiCUIBEDJyIA0gCSAEIApBAWogB2xBAmpBABCIAXIhCQsCQAJAIAhBHGoiDiACIA0gByAMbEEAEEAgCXIgDkEBEO8BciAIQQhqIgkgDiAEQf////8DQQEQQHIgCSACIAlB/////wNBARDuAXJBIHENAANAAkAgCCgCDEUNACAIKAIURQ0AIAhBCGoiAiACIARB/////wNBARC4AQ0CIANBAWshAwwBCwsDQCAIQQhqIgIgBBDyAUEATgRAIAIgAiAEQf////8DQQEQ7gENAiADQQFqIQMMAQsLIAMEQCAIQRxqIgIgAiADrEH/////A0EBEHoNAQsgACABIApBAnRqIAhBHGogDCALIAUgBiAHEKgEDQAgACABIAhBCGogCiALIAUgBiAHEKgERQ0BCyAIQRxqEBkgCEEIahAZQX8MAgsgCEEcahAZIAhBCGoQGQtBAAshDyAIQTBqJAAgDwsWAEH81QRB/NQENgIAQbTVBEEqNgIAC4gBAQR/AkACfwJAIANBB3EiCEEGRwRAQSAhBwNAIAAgASACIAdqIgkgBSAEEQcAIgZBLHENBCAGQRBxRQ0CIAdBAXQhByAAIAIgCCAJELYDRQ0AC0EQDAILIAAgASACIAUgBBEHABoLQQALIQYgACgCDCIBRQ0AIAAgAiADIAEgBhDcAiEGCyAGC48BAQN/IwBBMGsiAiQAIAAoAgAhAyACQgA3AiggAkKAgICAgICAgIB/NwIgIAIgAzYCHCACQgA3AhQgAkKAgICAgICAgIB/NwIMIAIgAzYCCCAAIAJBHGoiBCACQQhqIgNBACABQQ9qQQNuQQFqQQAQqwMgACAAIAMgAUEAEIgBGiAEEBkgAxAZIAJBMGokAAsPACAAIAEgAkEAQQMQ9AELvQECBH8BfiAAIABBH3UiA3MgA2shAyAAQR92RSEFQQACfyABIAFBAWsiBHFFBEBBICAEZyIGayEEIAIEQEEfIAZrQQAgBRsgA2ogBG4MAgsgBEEAIAFBAk8bIANsDAELIAFBAmshASAFAn4gAgRAIAOtIgcgAUEDdCIBQZT4AWo1AgB+QiCIIAFBkPgBajUCACAHfnxCH4gMAQsgAUECdEGw+gFqNQIAIAOtfkIdiAunagsiAWsgASAAQQBIGwtAAQN/QQEgAEG+/gFqLQAAIgEgAUEBTRshA0EBIQIgACEBA0AgAiADRkUEQCACQQFqIQIgACABbCEBDAELCyABC1ABAn8DQCABLAAAIgQEQCAEIAAsAAAiA0EgciADIANBwQBrQRpJG0cEQEEADwUgAUEBaiEBIABBAWohAAwCCwALCyACBEAgAiAANgIAC0EBC4cDAgN+BH8CQCABKAIIIgZB/v///wdOBEBBASEHIAJBAXENAUL///////////8AIQMgBkH+////B0cNASABNAIEQv///////////wB8IQMMAQsgBkEATARADAELIAZBP00EQCABKAIQIAEoAgwiCEECdGoiCUEEaygCACECQgAgBkEgTQR+IAJBICAGa3atBSAIQQJPBH4gCUEIazUCAAVCAAsgAq1CIIaEQcAAIAZrrYgLIgN9IAMgASgCBBshAwwBCyACQQFxRQRAIAEoAgRFBEBC////////////ACEDQQEhBwwCC0KAgICAgICAgIB/IQNBASEHIAZBwABHDQEgASgCECABKAIMIgFBAnRqIgJBBGs1AgBCIIYhBCABQQJPBH4gAkEIazUCAAVCAAsgBIRCgICAgICAgICAf1IhBwwBC0IAIAEoAhAiCCABKAIMIgIgAkEFdCAGayIGEHGtIAggAiAGQSBqEHGtQiCGhCIDfSADIAEoAgQbIQMLIAAgAzcDACAHC60CAgJ/An4jAEEgayICJAACQCAAKAIIQf////8HRgRAQoCAgICAgID8/wAhBAwBCyAAKAIAIQMgAkIANwIYIAJCgICAgICAgICAfzcCECACIAM2AgwgAkEMaiIDIAAQSRoCfiACKAIUIgBB/f///wdMBEAgA0E1QcgEELoBGiACKAIUIQALQoCAgICAgID4/wAgAEH+////B0YNABpCACAAQYCAgIB4Rg0AGiACKAIcIQMCfiACKAIYQQJGBEAgAykCAAwBCyADNQIAQiCGCyEEIABBgnhMBEAgBEGOeCAAa62IIQRCAAwBCyAEQguIQv////////8HgyEEIABB/gdqrUI0hgshBSAEIAWEIAI1AhBCP4aEIQQgAkEMahAZCyABIAQ3AwAgAkEgaiQACw0AIAAgASACQQIQsAMLIwACQAJAAkAgAg4CAAECCyAAIAFyDwsgACABcw8LIAAgAXEL4QgBEX8gAigCBCAFcyIFIAEoAgQiBnMhDQJAIAEgAhDyASIIIA1Fcg0AIAEoAghB/f///wdKDQAgACAEQQdxQQJGEIABQQAPCyAFIAYgCEEASCIGGyEFIAEgAiAGGyEKAkACQAJAIAIgASAGGyIIKAIMIgcEQCAKKAIMIgsNAQsgCCgCCCIBQf7///8H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CyAAIAsQDCAAIAgQDCAAIAoQDCAAIAEQDAwBCyABIQ0LIAVBIGokACANC0sBAn8gACABRwRAIAAoAhAiAgRAIAAoAgAiAygCACACQQAgAygCBBEBABoLIAAgASkCADcCACAAIAEoAhA2AhAgACABKQIINwIICwv0AQIDfgF/AkAgAykDACIEQoCAgIBwWgRAIAMpAwgiBUL/////b1YNAQsgABAiQoCAgIDgAA8LQoCAgIDgACEGIABCgICAgCBBLBBHIgFCgICAgHCDQoCAgIDgAFIEfiAAQRgQJCICRQRAIAAgARAMQoCAgIDgAA8LIASnIgMgAygCAEEBajYCACACIAQ3AwAgBaciByAHKAIAQQFqNgIAIAIgBTcDCCAAIAQQNSEAIAJBADoAESACIAA6ABAgAUKAgICAcFoEQCABpyIAIAI2AiAgACAALQAFQe8BcSADLQAFQRBxcjoABQsgAQVCgICAgOAACwsbACAAEBkgAEIANwIQIABCADcCCCAAQgA3AgALCQAgASACEPgFCxMAIABBEGogASACIAAoAggRAQALqAECAX8CfiAAvSIEQv///////////wCDQoGAgICAgID4/wBaBEAgAb1C////////////AINCgYCAgICAgPj/AFQPC0F/IQICQCAAIAFjDQAgAb0iA0L///////////8Ag0KAgICAgICA+P8AVg0AQQEhAiAAIAFkDQBBACECIABEAAAAAAAAAABiDQAgBEIAUwRAIANCP4enQX9zDwsgA0I/iKchAgsgAgvKBQIFfwN+IwBBMGsiAiQAIAIgATcDECACQQA2AgwgAiAANgIIIAIgAykDACIKNwMYAkACQCAKQoCAgIBwgyILQoCAgIAwUgRAQoCAgIDgACEJIAAgChBVDQELQoCAgIDgACEJIAAgARCKASIFQQBIDQACQCAFQQJJDQAgAaciAy8BBkEVayIEQf//A3FBC08NAiACIARBAnRB/P8PcSIEQZz1AWooAgA2AiBBASADLwEGQcqeAWotAAAiBnQhCCADKAIkIQcgC0KAgICAMFIEQCAAIAVBAnQQJCIERQ0CQQAhAwNAIAMgBUZFBEAgBCADQQJ0aiADNgIAIANBAWohAwwBCwsgAiAINgIoIAIgBzYCJCAEIAVBBEHLACACQQhqENcBAkACQAJAAkAgAigCDA4CAAEDCyAAIAUgBnQiAxAkIgYNAQsgACgCECIAQRBqIAQgACgCBBEAAAwECyAGIAcgAxAeIQZBACEDAkACQAJAAkACQCAIQQFrDggAAQkCCQkJAwkLA0AgAyAFRg0EIAMgB2ogBiAEIANBAnRqKAIAai0AADoAACADQQFqIQMMAAsACwNAIAMgBUYNAyAHIANBAXRqIAYgBCADQQJ0aigCAEEBdGovAQA7AQAgA0EBaiEDDAALAAsDQCADIAVGDQIgByADQQJ0IghqIAYgBCAIaigCAEECdGooAgA2AgAgA0EBaiEDDAALAAsDQCADIAVGDQEgByADQQN0aiAGIAQgA0ECdGooAgBBA3RqKQMANwMAIANBAWohAwwACwALIAAoAhAiA0EQaiAGIAMoAgQRAAALIAAoAhAiAEEQaiAEIAAoAgQRAAAMAQsgByAFIAggBEHI9QFqKAIAIAJBCGoQ1wEgAigCDA0BCyABQiCIp0F1TwRAIAGnIgAgACgCAEEBajYCAAsgASEJCyACQTBqJAAgCQ8LEAEAC+cCAQF+IAAgARCKASICQQBIBEBCgICAgOAADwsCQCACRQ0AAkACQAJAAkACQCABpyIALwEGQcqeAWotAAAOBAABAgMECyAAKAIkIgAgAmohAgNAIAAgAkEBayICTw0FIAAtAAAhAyAAIAItAAA6AAAgAiADOgAAIABBAWohAAwACwALIAAoAiQiACACQQF0aiECA0AgACACQQJrIgJPDQQgAC8BACEDIAAgAi8BADsBACACIAM7AQAgAEECaiEADAALAAsgACgCJCIAIAJBAnRqIQIDQCAAIAJBBGsiAk8NAyAAKAIAIQMgACACKAIANgIAIAIgAzYCACAAQQRqIQAMAAsACyAAKAIkIgAgAkEDdGohAgNAIAAgAkEIayICTw0CIAApAwAhBCAAIAIpAwA3AwAgAiAENwMAIABBCGohAAwACwALEAEACyABQiCIp0F1TwRAIAGnIgAgACgCAEEBajYCAAsgAQtRAgF/AX5CgICAgOAAIQQgACABIAIQayIDBH4gAygCICIDKAIMKAIgLQAEBEAgAkUEQEIADwsgABBfQoCAgIDgAA8LIAM1AhAFQoCAgIDgAAsLNwAgACABIAIQayIARQRAQoCAgIDgAA8LIAAoAiAoAgwiACAAKAIAQQFqNgIAIACtQoCAgIBwhAsMACAAKAIQIAEQ5wML2gEBAn4CQAJAIAJFBEAgAUKAgICAcIMhBSAAQS8QKSEEDAELAn4gAUKAgICAcIMiBUKAgICAMFIgAykDACIEQoCAgIBwg0KAgICAgH9SckUEQCAAQbmMASAAIAAoAhAgBKcQxgIQKUGrjAEQsgEMAQsgACAEECULIgRCgICAgHCDQoCAgIDgAFENAQsgBUKAgICAMFENACAAIAFBBRBeIgFCgICAgHCDQoCAgIDgAFIEQCAAIAEgBBC9ASAAIAFBMCAEpykCBEL/////B4NBABAVGgsgASEECyAEC0YBAX8CQCAAKAIIIAJqIgMgACgCDEoEQCAAIAMgARDEAg0BCwNAIAJBAEwEQEEADwsgAkEBayECIAAgARCHAUUNAAsLQX8LlQECBX8BfiABKQIEIginQf////8HcSIDRQRAIAIPCyAAKAIEQf////8HcSEHAn8gCEKAgICACINQRQRAIAEvARAMAQsgAS0AEAshBSADQQFrIQYgByADayEEAkADQCACIARKDQEgACAFIAIQoAEiA0EASCADIARKcg0BIAAgASADQQFqIgJBASAGELwDDQALIAMPC0F/C6cBAgN/AX4CQAJAIAAgARD2AyIDQQBIDQAgA0UNAUGbHiECIAAgACABQe4AIAFBABARIgVCgICAgHCDIgFCgICAgCBRIAFCgICAgDBRcgR/QZseBSABQoCAgIDgAFENASAAIAUQNCIBQoCAgIBwg0KAgICA4ABRDQFBACECIAGnQecAQQAQoAEhBCAAIAEQDCAEQQBODQJB2ssAC0EAEBILQX8hAgsgAguhAQIDfwF+AkACQCAAKQIEIgRCgICAgAiDUA0AIABBEGohAiAEp0H/////B3EhA0EAIQADQCAAIANODQECQCACIABBAXRqLwEAIgFBgPADcUGAsANHBEAgACEBDAELIAFB/7cDSw0DIABBAWoiASADTg0DIAIgAUEBdGovAQBBgEBrQf//A3FBgPgDSQ0DCyABQQFqIQAMAAsAC0F/IQALIAALVQEBfwJAAkACQCABQiCIp0EBag4DAAECAQsgAaciAi8BBkEGRw0AIAIpAyAiAUKAgICAcINCgICAgBBRDQELIABBlMAAQQAQEkKAgICA4AAhAQsgAQsQAEHOkQEgAEELEJICQQBHC4kB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ADcCECAAQRBqIAIgACgCBBEAAAwBCyACQoCAgIAwNwMoIAJCgICAgDA3AyAgAkEBNgIECyABIAEoAgxBAWs2AgwLC4YBACAAIAEgBEEiahBaIgJFBEBCgICAgOAADwsgACACIAMpAwAiAUIAIAFCIIinQQdrQW5PGyABIAFCgICAgMCBgPz/AHxC////////////AINQGxDyAiIARQRAQoCAgIAwDwsgACkDKCIBQiCIp0F1TwRAIAGnIgAgACgCAEEBajYCAAsgAQu7BQIDfgd/IwBBEGsiCyQAQoCAgIDgACEHAkAgACABIARBImoQWiICRQ0AIAIoAgBFIAMpAwAiBUIAIAVCIIinQQdrQW5PGyAFIAVCgICAgMCBgPz/AHxC////////////AINQGyIFQv////9vVnJFBEAgABAiDAELQoCAgIAwIQYgBEEBcUUEQCADKQMIIQYLAkAgACACIAUQ8gIiAwRAIAAgAykDKBAMDAELIABBMBAkIgNFDQEgAyACNgIIIANCATcDAAJAIAIoAgAEQCADIAWnIgQoAhg2AgwgBCADNgIYDAELIAVCIIinQXVJDQAgBaciBCAEKAIAQQFqNgIACyADIAU3AyAgAigCECIJIAIoAhQiBEEBayAFENkDcUEDdGoiCCgCACIKIANBGGoiDDYCBCADIAg2AhwgAyAKNgIYIAggDDYCACACKAIEIgggA0EQaiIKNgIEIAMgAkEEaiIMNgIUIAMgCDYCECACIAo2AgQgAiACKAIMQQFqIgg2AgwgCCACKAIYSQ0AIAAgCUEEIARBAXQgBEEBRhsiAEEDdCALQQxqEKcBIghFDQAgCygCDEEDdiAAaiEEQQAhAANAIAAgBEZFBEAgCCAAQQN0aiIJIAk2AgQgCSAJNgIAIABBAWohAAwBCwsgBEEBayEKIAJBCGohAANAIAwgACgCACIARwRAIABBDGsoAgBFBEAgCCAAKQMQENkDIApxQQN0aiIJKAIAIg0gAEEIaiIONgIEIAAgCTYCDCAAIA02AgggCSAONgIACyAAQQRqIQAMAQsLIAIgBDYCFCACIAg2AhAgAiAEQQF0NgIYCyAGQiCIp0F1TwRAIAanIgAgACgCAEEBajYCAAsgAyAGNwMoIAFCIIinQXVPBEAgAaciACAAKAIAQQFqNgIACyABIQcLIAtBEGok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AmoQI0UNDAJAIAMoAqgGIgVBAEgEQCADKALYBiEFDAELIAMgBTYC2AYLIAEgAygCxAYgBRAuIANBwAZqQfIBEA4gAygCrAZBAXMhBQwSCyADQX82AogDIANCw/aAgOABNwOAAyADQZwGaiAEIANBgANqECNFDQsCQCADKAKoBiICQQBIBEAgAygC2AYhAgwBCyADIAI2AtgGCyABIAMoAsQGIAIQLiADQcAGaiICIAMtAKwGEA4gAiADKAK8BhAbDBALIANBfzYCuAMgA0LZuP2CcDcDsAMgA0GcBmogBCADQbADahAjRQ0KIAMoAqgGIgJBAE4EQCADIAI2AtgGCyADQo6AgIBwNwOgAyADKAKsBiIFQQFqIQYCQCADQZwGaiADKAKkBiICIANBoANqECMEfyADKAKoBiICQQBOBEAgAyACNgLYBgsgAyADKAKwBjYClANBfyEEIANBfzYCmAMgAyAFQQFrNgKQAyADQZwGaiADKAKkBiICIANBkANqECNFDQEgAygCpAYhAiADKAKoBgVBfwshBCAGIQULIAEgAygCxAYgAygC2AYQLiADQcAGaiAFIAMoArAGEFkgBEEASA0TIAMgBDYC2AYMEwsgBi8AASICQf8BSw0JIANCjoCAgHA3AswEIAMgAjYCyAQgA0KRpYKAkAs3A8AEAkAgA0GcBmoiBiAEIANBwARqECNFBEAgA0KOgICAcDcDsAQgAyACNgKsBCADQdkANgKoBCADQo+hgoCQAjcDoAQgBiAEIANBoARqECNFDQELAkAgAygCqAYiBUEASARAIAMoAtgGIQUMAQsgAyAFNgLYBgsgASADKALEBiAFEC4gA0HABmoiBEGUAUGTASADKAKsBkF9cUGQAUYbEA4gBCACQf8BcRAODA8LIANCjoCAgHA3ApQEIAMgAjYCkAQgA0KRgICAkAs3A4gEIANChICAgOATNwOABCADQZwGaiAEIANBgARqECMEQAJAIAMoAqgGIgVBAEgEQCADKALYBiEFDAELIAMgBTYC2AYLIAEgAygCxAYgBRAuAkAgAygCvAZBL0YEQCADQcAGakHBARAODAELIANBwAZqIgRBBBAOIAQgAygCvAYQGwsgA0HABmoiBEGVARAOIAQgAkH/AXEQDgwPCyADQo6AgIBwNwL0AyADIAI2AvADIANCkYCAgJALNwPoAyADQoGAgIDgEzcD4AMgA0GcBmogBCADQeADahAjBEACQCADKAKoBiIFQQBIBEAgAygC2AYhBQwBCyADIAU2AtgGCyABIAMoAsQGIAUQLiADQcAGaiIEIAMoArQGEM4DIARBlQEQDiAEIAJB/wFxEA4MDwsgA0KOgICAcDcD2AMgAyACNgLUAyADQdkANgLQAyADQp6BgICQAjcDyAMgA0LYtvmCcDcDwAMgA0GcBmogBCADQcADahAjBEACQCADKAKoBiIFQQBIBEAgAygC2AYhBQwBCyADIAU2AtgGCyABIAMoAsQGIAUQLiADQcAGaiIEIAMoAqwGIAMoArAGEFkgBEGVARAOIAQgAkH/AXEQDgwPCyABIAMoAsQGIAMoAtgGEC4gA0HABmpB2AAgAhBZIAQhAgwSCyAGLwABIQIgASADKALEBiADKALYBhAuIANBwAZqIAUgAhBZIAQhAgwRCyADIAYvAAEiAjYC5AQgA0F/NgLoBCADIAVBAWs2AuAEIANBnAZqIAQgA0HgBGoQIwRAAkAgAygCqAYiBEEASARAIAMoAtgGIQQMAQsgAyAENgLYBgsgASADKALEBiAEEC4gA0HABmogBUEBaiACEFkMDQsgASADKALEBiADKALYBhAuIANBwAZqIAUgAhBZIAQhAgwQCyABIAogCCAEIANB2AZqEKUCIQQMBgsgASgC1AIhCyABKALMAiEGQQAhCUEAIQgDQAJAIAkgC0gEQEEDIQogBigCACICQeoAa0EDTwRAIAJB7QFHDQJBASEKCwJAIAEoAqQCIAYoAgxBFGxqKAIMIAYoAggiBWsiBEGAf0ggBCAKQf8AakpyRQRAIAZBATYCBCACQe0BRgRAQewBIQIgBkHsATYCAAwCCyAGIAJBgAFqIgI2AgAMAQsgAkHsAEcgBEGAgAJqQf//A0tyDQIgBkLtgYCAIDcCAEECIQpB7QEhAgsgAygCwAYgBWpBAWsgAjoAACAGKAIEIgIgAygCwAYgBWpqIgQgBCAKaiADKALEBiAFIApqIAJqaxCrASADIAMoAsQGIAprNgLEBkEAIQQgASgCrAIiAkEAIAJBAEobIQcgASgCpAIhAgNAIAQgB0YEQCABKALUAiELIAYhByAJIQQDQAJAIAsgBEEBaiIETARAQQAhAiABKALgAiIEQQAgBEEAShshBANAIAIgBEYNAiAFIAEoAtgCIAJBA3RqIgcoAgAiDEkEQCAHIAwgCms2AgALIAJBAWohAgwACwALIAciAkEQaiEHIAIoAhgiDCAFTA0BIAIgDCAKazYCGAwBCwsgCEEBaiEIDAMLIAUgAigCDCILSARAIAIgCyAKazYCDAsgAkEUaiECIARBAWohBAwACwALIAEoAswCIQIgCARAQQAhBQNAIAUgC0gEQCABKAKkAiACKAIMQRRsaigCDCACKAIIIgRrIQYCQAJAAkACQCACKAIEQQFrDgQAAQMCAwsgAygCwAYgBGogBjoAACABKALUAiELDAILIAMoAsAGIARqIAY7AAAMAQsgAygCwAYgBGogBjYAAAsgAkEQaiECIAVBAWohBQwBCwsgASgCzAIhAgsgACgCECIEQRBqIAIgBCgCBBEAACABQQA2AswCIAAoAhAiAkEQaiABKAKkAiACKAIEEQAAIAFBADYCpAIgASgC2AIhAgJAIAEtAG5BAnEEQCACIQUMAQtBACEFIAJFDQAgASgC8AIhByABKAIAIAFB9AJqIggQgwJBACECQQAhCgNAIAEoAtgCIQUgAiABKALgAk4NAQJAIAUgAkEDdGoiBigCBCIEQQBIIAQgB0ZyDQAgBigCACIGIAprIgVBAEgNAAJAIAQgB2siB0EBaiIKQQRLIAVBMktyRQRAIAggCiAFQQVsakEBakH/AXEQDgwBCyAIQQAQDiAIIAUQsQUgCCAHQQF0IAdBH3VzELEFCyAGIQogBCEHCyACQQFqIQIMAAsACyAAKAIQIgJBEGogBSACKAIEEQAAIAFBADYC2AIgDRCJASANIAMpAtAGNwIQIA0gAykCyAY3AgggDSADKQLABjcCACABQQE2AqACIAEoAowCBEAgABBwDCALIAEoAoACIQcgAyABKAKEAiIENgKcBiADIAAgBEEBdBAkIgY2AqQGIAZFDR9BACECIARBACAEQQBKGyEFA0AgAiAFRwRAIAYgAkEBdGpB//8DOwEAIAJBAWohAgwBCwsgA0EANgKsBiADIAAgBEECdBAkIgI2AqgGAkAgAkUNACADQgA3ArAGIANBADYCoAYgACADQZwGakEAQQBBAEF/ELABDQADQCADKAKsBiECAkACQAJAIAMoArAGIgRBAEoEQCADIARBAWsiBDYCsAYgByACIARBAnRq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IAIgCTYCSCACIAo2AkQgAkHBAEHQACAHQQxIGzYCTCACIAdBC2pBDG9BAWo2AkAgAkGQAmogA2pBwAAgA2tB5vQAIAJBQGsQSCADaiEDCyAAIAJBkAJqIAMQ6gEhEQsgAkHQAmokACARCzcCA38BfiMAQRBrIgAkACAAEI0GIAApAwAhAyAAKAIIIQIgAEEQaiQAIAJB6AdtrCADQugHfnwLhwEBAXwgACADKQMAEKgBIgJFBEBCgICAgOAADwsgAhAHIQQgACACEDEgBL0iAQJ/IASZRAAAAAAAAOBBYwRAIASqDAELQYCAgIB4CyIAt71RBEAgAK0PC0KAgICAwH4gAUKAgICAwIGA/P8AfSABQv///////////wCDQoCAgICAgID4/wBWGwvxAQIGfwF+IABBCBAkIgRFBEBBfw8LIARCATcCACACpyEGIAJCIIinQXVJIQgDQAJAAkAgA0ECRg0AIAAgACkDMCADQS5yEEciCUKAgICAcINCgICAgOAAUgRAIABBEBAkIgUNAiAAIAkQDAtBfyEHIANFDQAgACABKQMAEAwLIAAoAhAgBBD/BCAHDwsgBCAEKAIAQQFqNgIAIAUgBDYCCCAIRQRAIAYgBigCAEEBajYCAAsgBSACNwMAIAlCgICAgHBaBEAgCacgBTYCIAsgACAJQS9BARCYAyABIANBA3RqIAk3AwAgA0EBaiEDDAALAAt/AQV/IABBEGohBCABQQxqIQUgASgCECECA0AgAiAFRkUEQCACKAIEIQYgACACKQMQECEgACACKQMYECEgACACKQMgECEgACACKQMoECEgBCACIAAoAgQRAAAgBiECDAELCyABKAIIIgMEQCAAIAMQzgELIAQgASAAKAIEEQAAC+EDAgR/An4jAEFAaiICJAAgAiAAIAEQsQIiBjcDOAJAAkAgASgCIARAIAZCgICAgHCDQoCAgIDgAFENASAAIAEpAyhCgICAgDBBASACQThqEBwhBiAAIAIpAzgQDCAAIAYQDAwCCyACIAEoAmRBCGsiAykDADcDKCADQoCAgIAwNwMAIAAgBhAMQQAhAyAAIAApA1AgACACQShqQQAQ3gEhBiAAIAIpAygQDCAGQoCAgIBwg0KAgICA4ABRDQADQAJAIANBAkcEQCACQRBqIANBA3RqIAAgACkDMCADQTFqEEciBzcD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aiIGKAIEIAJBABARIgNCgICAgHCDQoCAgIDgAFENAyAGKAIEIQYCfyAEBEAgACABIAYgAxA5DAELIAAgASAGIANBBxAVC0EASA0DCyAFQQFqIQUMAQsLIAAgCCALEFtBACEJDAELIAAgCCALEFsLIAdBMGokACAJC6YBAQF+AkACQAJ+IARBBHEEQEEpIQIgACABEEoMAQtBKCECIAAgARAgCyIBQoCAgIBwg0KAgICA4ABRDQAgACACEIYBIgVCgICAgHCDQoCAgIDgAFENACAAQRAQJCICBEAgAkEANgIMIAIgBEEDcTYCCCACIAE3AwAgBUKAgICAcFQNAiAFpyACNgIgDAILIAAgBRAMCyAAIAEQDEKAgICA4AAPCyAFC8QBAQR/IAGnIgUgAjYCICAFQgA3AiQCQCACKAI8IgZFDQACQCAAIAZBAnQQXCIIRQ0AIAUgCDYCJEEAIQUDQCAFIAIoAjxODQIgAigCJCAFQQN0aiIHLwECIQYCQCAHLQAAIgdBAXEEQCAAIAQgBiAHQQF2QQFxEP8DIgYNAQwDCyADIAZBAnRqKAIAIgYgBigCAEEBajYCAAsgCCAFQQJ0aiAGNgIAIAVBAWohBQwACwALIAAgARAMQoCAgIDgACEBCyABC4IBAQJ+IAAgARApIQICQCABQQBIDQAgACgCECgCOCABQQJ0aigCACkCBCIDp0GAgICAeEYgA0KAgICA8P///z+DUCADQv//////////v39WcSADQoCAgICAgICAQINCgICAgICAgICAf1FyRXINACAAQa/wACACQa3wABCyASECCyACC2QBAn8CQAJAIAFCgICAgHBUDQAgARCUBQ0AQX8hAyAAIAIQMCIERQ0BIAAgBBDEBSECIAAgBBAQIAJCgICAgHCDQoCAgIDgAFENASAAIAFBNyACQQEQFUEASA0BC0EAIQMLIAMLNQACQCACRSABQoCAgIBwVHINACABEJQFDQAgACABQTcgACACEClBARAVQQBODQBBfw8LQQALDAAgACABQbYVELUBC2gCAX8BfgJAIAAgAUHqACABQQAQESIEQoCAgIBwg0KAgICA4ABSBEAgACAEECchAyAAIAFBwQAgAUEAEBEiAUKAgICAcINCgICAgOAAUg0BC0EAIQNCgICAgOAAIQELIAIgAzYCACABCxQBAn4gACABECAhAyAAIAEQDCADC/sBAgR/AX4gACgCyAEiBSgCECIEQTBqIQYgBCAEKAIYIAFxQX9zQQJ0aigCACEEAkADQCAERQ0BIAEgBiAEQQFrIgdBA3RqIgQoAgRHBEAgBCgCAEH///8fcSEEDAELCyAFKAIUIAdBA3RqIQUCQCADQQFGDQAgBTUCBEIghkKAgICAwABRBEAgACACEAwgACAEKAIEENEBQX8PCyAELQADQQhxDQAgACACEAwgAEGAgAEgARDnAQ8LIAAgBSACEB1BAA8LIAAgACkDwAEiCCABIAIgCAJ/IAAoAhAoAowBIgMEQEGAgAYgAygCKEEBcQ0BGgtBgIACCxDQAQuKAQEBfwJAIAJCgICAgHCDQoCAgICQf1EgA0KAgICAcINCgICAgJB/UXFFBEAgAEGl5gBBABASDAELIAAgAUESEF4iAUKAgICAcINCgICAgOAAUQ0AIAGnIgQgAz4CJCAEIAI+AiAgACABQdYAQgBBAhAVGiABDwsgACADEAwgACACEAxCgICAgOAACw0AIAAgAUHMjQEQgQMLZwEBfwJAIAFBAE4EQCAAKAIQIgIoAiwgAU0NASACKAI4IAFBAnRqKAIAIgEgASgCAEEBajYCACAAIAFBBBDmAw8LQYaJAUGo7ABB1RdBycAAEAAAC0GQzgBBqOwAQdYXQcnAABAAAAuxAgEEfwJAAkACQAJAIAJCgICAgHBUDQAgAqciAy8BBhDgAUUNACADKAIoIgRFDQAgBCgCECIDQTBqIQUgAyADKAIYQX9zQQJ0QdR5cmooAgAhAwNAIANFDQMgBSADQQFrIgNBA3RqIgYoAgRBygFHBEAgBigCAEH///8fcSEDDAELCyABQoCAgIBwVA0AIAQoAhQgA0EDdGopAwAiAkKAgICAcINCgICAgIB/UQ0BCyAAECIMAgsgACACEIgCIQMgAacoAhAiAEEwaiEEIAAgAyAAKAIYcUF/c0ECdGooAgAhAANAIABFBEBBAA8LIAQgAEEDdGoiBUEIayEAIAMgBUEEaygCAEYEQCAAQQBHDwUgACgCAEH///8fcSEADAELAAsACyAAQZ3kAEEAEBILQX8LRAEBfyAAQeQBaiECIABB4AFqIQADfyAAIAIoAgAiAkYEQEEADwsgASACQQRrKAIARgR/IAJBCGsFIAJBBGohAgwBCwsLiQECA38BfgJAIAAoAhAoAowBIgJFDQADQCABQQBMBEADQCACKQMIIgRCgICAgHBUDQMgBKciAS8BBhDgAUUNAyABKAIgIgEvABEiA0GAwABxRQRAIANBgAhxRQ0EIAAgASgCQBAWDwsgAigCACICDQAMAwsACyABQQFrIQEgAigCACICDQALC0EACykBAX8gAkIgiKdBdU8EQCACpyIDIAMoAgBBAWo2AgALIAAgASACEIUEC/QBAwF+An8BfANAAkBBfyEEAkACQAJAQQcgAkIgiKciBSAFQQdrQW5JGw4IAAAAAAICAwECCyACxCEDQQAhBAwCC0EAIQQgAkKAgICAwIGA/P8AfCICQv///////////wCDQoCAgICAgID4/wBWDQFCgICAgICAgICAfyEDIAK/IgZEAAAAAAAA4MNjDQFC////////////ACEDIAZEAAAAAAAA4ENkDQEgBplEAAAAAAAA4ENjBEAgBrAhAwwCC0KAgICAgICAgIB/IQMMAQsgACACEJYBIgJCgICAgHCDQoCAgIDgAFINAQsLIAEgAzcDACAEC+YBAgN/AXwDQAJAQX8hBAJAAkACQEEHIAJCIIinIgUgBUEHa0FuSRsOCAAAAAACAgMBAgsgAqchA0EAIQQMAgtBACEEIAJCgICAgMCBgPz/AHwiAkL///////////8Ag0KAgICAgICA+P8AVgRADAILQYCAgIB4IQMgAr8iBkQAAAAAAADgwWMNAUH/////ByEDIAZEAADA////30FkDQEgBplEAAAAAAAA4EFjBEAgBqohAwwCC0GAgICAeCEDDAELIAAgAhCWASICQoCAgIBwg0KAgICA4ABSDQELCyABIAM2AgAgBAttAAJAAkACQAJAAkAgAkEEdkEDcUEBaw4DAAECAwsgASgCACICBEAgACACrUKAgICAcIQQIQsgASgCBCIBRQ0DIAAgAa1CgICAgHCEECEPCyAAIAEoAgAQ5QEPCyABEOAFDwsgACABKQMAECELC/UBAQl/QX8hAiABIAFBAWtxRQRAIABBEGoiCCABQQJ0IgMgACgCABEDACIFBH8gBUEAIAMQLCEGIAFB/////wNqQf////8DcSEJIAAoAjQhBwNAIAQgACgCJE9FBEAgByAEQQJ0aigCACECA0AgAgRAIAAoAjggAkECdGooAgAiAygC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QQpPBH8gAEHBAGsgA00EQCAAQTdrDwsgAiAAQdcAayAAQeEAayABTxsFIAQLC6IDAQJ/IAAgASgCBBAQA0AgASgCECEDIAIgASgCFE5FBEAgACADIAJBA3RqKAIAEBAgAkEBaiECDAELCyAAKAIQIgJBEGogAyACKAIEEQAAQQAhAgNAAkAgASgCHCEDIAIgASgCIE4NACADIAJBFGxqIgMoAghFBEAgACgCECADKAIEEOUBCyAAIAMoAhAQECAAIAMoAgwQECACQQFqIQIMAQsLIAAoAhAiAkEQaiADIAIoAgQRAAAgACgCECICQRBqIAEoAiggAigCBBEAAEEAIQIDQCABKAI0IQMgAiABKAI4TkUEQCAAIAMgAkEMbGooAgQQECACQQFqIQIMAQsLIAAoAhAiAkEQaiADIAIoAgQRAAAgACgCECICQRBqIAEoAmQgAigCBBEAACAAIAEpA0AQDCAAIAEpA0gQDCAAIAEpA6gBEAwgACABKQOwARAMIAAgASkDiAEQDCAAIAEpA5ABEAwgACABKQOYARAMIAEoAggiAiABKAIMIgM2AgQgAyACNgIAIAFCADcCCCAAKAIQIgBBEGogASAAKAIEEQAAC9IDAgJ+An8jAEEgayIEJAACQCABQv///////////wCDIgNCgICAgICAwIA8fSADQoCAgICAgMD/wwB9VARAIAFCBIYgAEI8iIQhAyAAQv//////////D4MiAEKBgICAgICAgAhaBEAgA0KBgICAgICAgMAAfCECDAILIANCgICAgICAgIBAfSECIABCgICAgICAgIAIUg0BIAIgA0IBg3whAgwBCyAAUCADQoCAgICAgMD//wBUIANCgICAgICAwP//AFEbRQRAIAFCBIYgAEI8iIRC/////////wODQoCAgICAgID8/wCEIQIMAQtCgICAgICAgPj/ACECIANC////////v//DAFYNAEIAIQIgA0IwiKciBUGR9wBJDQAgBEEQaiAAIAFC////////P4NCgICAgICAwACEIgIgBUGB9wBrEGIgBCAAIAJBgfgAIAVrEI0CIAQpAwhCBIYgBCkDACIAQjyIhCECIAQpAxAgBCkDGIRCAFKtIABC//////////8Pg4QiAEKBgICAgICAgAhaBEAgAkIBfCECDAELIABCgICAgICAgIAIUg0AIAJCAYMgAnwhAgsgBEEgaiQAIAIgAUKAgICAgICAgIB/g4S/C6oPAgV/D34jAEHQAmsiBSQAIARC////////P4MhCiACQv///////z+DIQsgAiAEhUKAgICAgICAgIB/gyEMIARCMIinQf//AXEhCAJAAkAgAkIwiKdB//8BcSIJQf//AWtBgoB+TwRAIAhB//8Ba0GBgH5LDQELIAFQIAJC////////////AIMiDUKAgICAgIDA//8AVCANQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQwMAgsgA1AgBEL///////////8AgyICQoCAgICAgMD//wBUIAJCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhDCADIQEMAgsgASANQoCAgICAgMD//wCFhFAEQCADIAJCgICAgICAwP//AIWEUARAQgAhAUKAgICAgIDg//8AIQwMAwsgDEKAgICAgIDA//8AhCEMQgAhAQwCCyADIAJCgICAgICAwP//AIWEUARAQgAhAQwCCyABIA2EUARAQoCAgICAgOD//wAgDCACIAOEUBshDEIAIQEMAgsgAiADhFAEQCAMQoCAgICAgMD//wCEIQxCACEBDAILIA1C////////P1gEQCAFQcACaiABIAsgASALIAtQIgYbeSAGQQZ0rXynIgZBD2sQYkEQIAZrIQYgBSkDyAIhCyAFKQPAAiEBCyACQv///////z9WDQAgBUGwAmogAyAKIAMgCiAKUCIHG3kgB0EGdK18pyIHQQ9rEGIgBiAHakEQayEGIAUpA7gCIQogBSkDsAIhAwsgBUGgAmogCkKAgICAgIDAAIQiEkIPhiADQjGIhCICQgBCgICAgLDmvIL1ACACfSIEQgAQYSAFQZACakIAIAUpA6gCfUIAIARCABBhIAVBgAJqIAUpA5gCQgGGIAUpA5ACQj+IhCIEQgAgAkIAEGEgBUHwAWogBEIAQgAgBSkDiAJ9QgAQYSAFQeABaiAFKQP4AUIBhiAFKQPwAUI/iIQiBEIAIAJCABBhIAVB0AFqIARCAEIAIAUpA+gBfUIAEGEgBUHAAWogBSkD2AFCAYYgBSkD0AFCP4iEIgRCACACQgAQYSAFQbABaiAEQgBCACAFKQPIAX1CABBhIAVBoAFqIAJCACAFKQO4AUIBhiAFKQOwAUI/iIRCAX0iAkIA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IAUgA0E5ShshAwJAIBdCB1cEQCADIAdBBHRqIQcMAQsgF0IcWARAIAJBMGogAxB4IAJBIGogHCAYQgBCgICAgICAwP0/ECsgAkEQaiACKQMwIAIpAzggAikDICIcIAIpAygiGBArIAIgAikDECACKQMYIBkgGxBvIAIpAwghGyACKQMAIRkMAQsgA0UgCHINACACQdAAaiAcIBhCAEKAgICAgICA/z8QKyACQUBrIAIpA1AgAikDWCAZIBsQbyACKQNIIRtBASEIIAIpA0AhGQsgF0IBfCEXQQEhCQsgACgCBCIDIAAoAmhHBH8gACADQQFqNgIEIAMtAAAFIAAQTwshAwwBCwsCfiAJRQRAIAApA3BCAFkEQAJAIAAgACgCBCIDQQFrNgIEIAAgA0ECazYCBCABRQ0AIAAgA0EDazYCBAsLIAJB4ABqIAS3RAAAAAAAAAAAohCpASACKQNgIRkgAikDaAwBCyAXQgdXBEAgFyEYA0AgB0EEdCEHIBhCAXwiGEIIUg0ACwsCQAJAAkAgA0FfcUHQAEYEQCAAEIEGIhhCgICAgICAgICAf1INAyAAKQNwQgBZDQEMAgtCACEYIAApA3BCAFMNAgsgACAAKAIEQQFrNgIEC0IAIRgLIAdFBEAgAkHwAGogBLdEAAAAAAAAAACiEKkBIAIpA3AhGSACKQN4DAELIBogFyABG0IChiAYfEIgfSIXQQAgD2utVQRAQcTUBEHEADYCACACQaABaiAEEHggAkGQAWogAikDoAEgAikDqAFCf0L///////+///8AECsgAkGAAWogAikDkAEgAikDmAFCf0L///////+///8AECsgAikDgAEhGSACKQOIAQwBCyAPQeIBa6wgF1cEQCAHQQBOBEADQCACQaADaiAZIBtCAEKAgICAgIDA/79/EG8gGSAbQoCAgICAgID/PxD1BSEAIAJBkANqIBkgGyACKQOgAyAZIABBAE4iABsgAikDqAMgGyAAGxBvIBdCAX0hFyACKQOYAyEbIAIpA5ADIRkgB0EBdCAAciIHQQBODQALCwJ+IBcgD6x9QiB8IhinIgBBACAAQQBKGyANIBggDa1TGyIAQfEATgRAIAJBgANqIAQQeCACKQOIAyEaIAIpA4ADIRxCAAwBCyACQeACakQAAAAAAADwP0GQASAAaxDVARCpASACQdAC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QQFqNgIEIAEtAAAMAQsgABBPC0Ewa0EKSQ0ACwsgACkDcEIAWQRAIAAgACgCBEEBazYCBAtCACAFfSAFIAMbIQUMAQtCgICAgICAgICAfyEFIAApA3BCAFMNACAAIAAoAgRBAWs2AgRCgICAgICAgICAfw8LIAULygYCBX8EfiMAQYABayIFJAACQAJAAkAgAyAEQgBCABDrAUUNAAJ/IARC////////P4MhCwJ/IARCMIinQf//AXEiBkH//wFHBEBBBCAGDQEaQQJBAyADIAuEUBsMAgsgAyALhFALCyEJIAJCMIinIghB//8BcSIHQf//AUYNACAJDQELIAVBEGogASACIAMgBBArIAUgBSkDECICIAUpAxgiASACIAEQ9AUgBSkDCCECIAUpAwAhBAwBCyABIAJC////////////AIMiCyADIARC////////////AIMiChDrAUEATARAIAEgCyADIAoQ6wEEQCABIQQMAgsgBUHwAGogASACQgBCABArIAUpA3ghAiAFKQNwIQQMAQsgBEIwiKdB//8BcSEGIAcEfiABBSAFQeAAaiABIAtCAEKAgICAgIDAu8AAECsgBSkDaCILQjCIp0H4AGshByAFKQNgCyEEIAZFBEAgBUHQAGogAyAKQgBCgICAgICAwLvAABArIAUpA1giCkIwiKdB+ABrIQYgBSkDUCEDCyAKQv///////z+DQoCAgICAgMAAhCEMIAtC////////P4NCgICAgICAwACEIQsgBiAHSARAA0ACfiALIAx9IAMgBFatfSIKQgBZBEAgCiAEIAN9IgSEUARAIAVBIGogASACQgBCABArIAUpAyghAiAFKQMgIQQMBQsgCkIBhiAEQj+IhAwBCyALQgGGIARCP4iECyELIARCAYYhBCAHQQFrIgcgBkoNAAsgBiEHCwJAIAsgDH0gAyAEVq19IgpCAFMEQCALIQoMAQsgCiAEIAN9IgSEQgBSDQAgBUEwaiABIAJCAEIAECsgBSkDOCECIAUpAzAhBAwBCyAKQv///////z9YBEADQCAEQj+IIQ0gB0EBayEHIARCAYYhBCANIApCAYaEIgpCgICAgICAwABUDQALCyAIQYCAAnEhBiAHQQBMBEAgBUFAayAEIApC////////P4MgB0H4AGogBnKtQjCGhEIAQoCAgICAgMDDPxArIAUpA0ghAiAFKQNAIQQMAQsgCkL///////8/gyAGIAdyrUIwhoQhAgsgACAENwMAIAAgAjcDCCAFQYABaiQAC78CAQF/IwBB0ABrIgQkAAJAIANBgIABTgRAIARBIGogASACQgBCgICAgICAgP//ABArIAQpAyghAiAEKQMgIQEgA0H//wFJBEAgA0H//wBrIQMMAgsgBEEQaiABIAJCAEKAgICAgICA//8AECtB/f8CIAMgA0H9/wJOG0H+/wFrIQMgBCkDGCECIAQpAxAhAQwBCyADQYGAf0oNACAEQUBrIAEgAkIAQoCAgICAgIA5ECsgBCkDSCECIAQpA0AhASADQfSAfksEQCADQY3/AGohAwwBCyAEQTBqIAEgAkIAQoCAgICAgIA5ECtB6IF9IAMgA0HogX1MG0Ga/gFqIQMgBCkDOCECIAQpAzAhAQsgBCABIAJCACADQf//AGqtQjCGECsgACAEKQMINwMIIAAgBCkDADcDACAEQdAAaiQACzwAIAAgATcDACAAIAJC////////P4MgAkKAgICAgIDA//8Ag0IwiKcgBEIwiKdBgIACcXKtQjCGhDcDCAsxAQJ/An8gABA9QQFqIQEDQEEAIAFFDQEaIAAgAUEBayIBaiICLQAAQS9HDQALIAILCxcBAX8gAEEAIAEQkgIiAiAAayABIAIbC9EBAQF/AkACQCAAIAFzQQNxBEAgAS0AACECDAELIAFBA3EEQANAIAAgAS0AACICOgAAIAJFDQMgAEEBaiEAIAFBAWoiAUEDcQ0ACwsgASgCACICQX9zIAJBgYKECGtxQYCBgoR4cQ0AA0AgACACNgIAIAEoAgQhAiAAQQRqIQAgAUEEaiEBIAJBgYKECGsgAkF/c3FBgIGChHhxRQ0ACwsgACACOgAAIAJB/wFxRQ0AA0AgACABLQABIgI6AAEgAEEBaiEAIAFBAWohASACDQALCwtFAQJ8IAAgAiACoiIEOQMAIAEgAiACRAAAAAIAAKBBoiIDIAIgA6GgIgKhIgMgA6IgAiACoCADoiACIAKiIAShoKA5AwALMwAgAQJ/IAIoAkxBAEgEQCAAIAEgAhCXBAwBCyAAIAEgAhCXBAsiAEYEQA8LIAAgAW4aC30BAn8jAEEQayIBJAAgAUEKOgAPAkACQCAAKAIQIgIEfyACBSAAEJgEDQIgACgCEAsgACgCFCICRg0AIAAoAlBBCkYNACAAIAJBAWo2AhQgAkEKOgAADAELIAAgAUEPakEBIAAoAiQRAQBBAUcNACABLQAPGgsgAUEQaiQAC9sBAQR/IAAoAlQhAwJAIAAoAhQiBiAAKAIcIgVHBEAgACAFNgIUIAAgBSAGIAVrIgUQiwYgBUkNAQsCQCADKAIQQeEARwRAIAMoAgAhBAwBCyADIAMoAgQiBDYCAAsgAygCDCAEaiABIAMoAgggBGsiASACIAEgAkkbIgQQHhogAyADKAIAIARqIgE2AgAgASADKAIETQ0AIAMgATYCBAJ/IAMoAggiAiABSwRAIAMoAgwgAWoMAQsgAkUNASAAKAIAQQRxRQ0BIAMoAgwgAmpBAWsLQQA6AAALIAQLGAEBfyMAQRBrIgEgADkDCCABKwMIIACiC3UCAnwBfiAAAn4QBCIBRAAAAAAAQI9AoyICmUQAAAAAAADgQ2MEQCACsAwBC0KAgICAgICAgIB/CyIDNwMAIAACfyABIANC6Ad+uaFEAAAAAABAj0CiIgGZRAAAAAAAAOBBYwRAIAGqDAELQYCAgIB4CzYCCAsoACABRAAAAAAAAMB/oiAARIvdGhVmIJbAoBCaBKJEAAAAAAAAwH+iCxAAIABBIEYgAEEJa0EFSXILjAMCAn4DfyMAQSBrIgIkAEKAgICA4AAhBAJAIAAgAykDACIFEFUNACAAIAFBLRBeIgFCgICAgHCDQoCAgIDgAFENACAAAn4CQCAAQSAQXCIGRQ0AQQAhAyAGQQA2AhQgBkEANgIAIAZBBGohCANAIANBAkZFBEAgCCADQQN0aiIHIAc2AgQgByAHNgIAIANBAWohAwwBCwsgBkKAgICAMDcDGCABQoCAgIBwWgRAIAGnIAY2AiALIAAgAkEQaiIDIAEQqgUNAAJAIAAgBUKAgICAMEECIAMQHCIFQoCAgIBwg0KAgICA4ABRBEAgACgCECIDKQOAASEEIANCgICAgCA3A4ABIAIgBDcDCCAAIAIpAxhCgICAgDBBASACQQhqEBwhBCAAIAIpAwgQDCAEQoCAgIBwg0KAgICA4ABRDQEgACAEEAwLIAAgBRAMIAAgAikDEBAMIAEhBCACKQMYDAILIAAgAikDEBAMIAAgAikDGBAMQoCAgIDgACEECyABCxAMCyACQSBqJAAgBAuLAgEHfyABQQJ0QaCDBGooAgAiAiABQQF0QfCEBGovAQBqIQhBACEBAkADQCACIAhPDQEgAkEBaiEGAkACQCACLQAAIgRBP00EQCADIARBA3ZqQQFqIQIgAQRAIAAgAyACEGkNAwsgAUEBcyEBIARBB3EgAmpBAWohBQwBCwJ/IAMgBGpB/wBrIATAQQBIDQAaIAYtAAAhBSAEQd8ATQRAIAJBAmohBiADIARBCHRqIAVqQf//AGsMAQsgAkEDaiEGIAItAAIgAyAEQRB0aiAFQQh0ampB////AmsLIQUgAyECCyABBEAgACACIAUQaQ0BCyABQQFzIQEgBiECIAUhAwwBCwtBfyEHCyAHC7UCAQp/IAFBBnEhByABQQJ2QQFxIQoCQANAIANB6x5KDQEgAiEEIANBsOQDai0AACIFQR9xIQkCfyADQQFqIAVBBXYiAkEHRw0AGiADQQJqIQUgA0Gx5ANqLAAAIgJB/wFxIQYgAkEATgRAIAZBB2ohAiAFDAELIAVBsOQDai0AACEFIAJBv39NBEAgBkEIdCAFckH5/gFrIQIgA0EDagwBCyADQbPkA2otAAAgBkEQdHIgBUEIdHJB+f7+BWshAiADQQRqCyEDIAIgBGpBAWohAgJAAkAgCUEfRgRAIAdFDQMgB0EGRg0BIAQgCmohBANAIAIgBE0NBCAAIAQgBEEBahBpIQsgBEECaiEEIAtFDQALDAILIAEgCXZBAXFFDQILIAAgBCACEGlFDQELC0F/IQgLIAgLOABB8NECIAEQnQQiAUEASARAQX4PCyAAIAFBHU0Ef0IBIAGthqcFIAFBAnRBmNYCaigCAAsQkgYLmgYBBH9BASEJIAJBAXRBwPkCai8BACECIAVFBEAgACACNgIAQQEPCyACQcCEA2ohBkESIQcCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAFQQFrDiIAAAAAAAAAAQECAgICAgQDAwMDAwMFBQUFBQUFBQYHCAkJCwsgBiABIANrIAVsQQF0aiEBQQAhAgNAIAIgBUYEQCAFDwsgACACQQJ0aiABIAJBAXRqLwAAIgM2AgAgAkEBaiECIAMNAAsMCwsgBUEHayIIIAEgA2tsIQcgBiAEIAhsQQF0aiEBQQAhAgNAIAIgCEYNCiAGIAdBAXQiA2ovAAAgASAHQQJ2ai0AACADQQZxdkEQdEGAgAxxciIDRQ0LIAAgAkECdGogAzYCACACQQFqIQIgB0EBaiEHDAALAAsgBiAFQQlrIgggASADa2xqIQFBACECA0AgAiAIRg0JIAAgAkECdGogASACai0AABCkAyIDNgIAIAJBAWohAiADDQALDAkLIAVBAXEgBUEQayICQQFLaiEIIAJBAXZBAmohCQsgASADayEBQQAhAgNAIAIgCUYEQCAJDwUgACACQQJ0aiAGIAJBAXRqLwAAIAFBACACIAhGG2o2AgAgAkEBaiECDAELAAsACyAFQRVrIQcLIAYgByABIANrbGpBAmohASAGLwAAIQNBACECA0AgAiAHRgRAIAcPBSAAIAJBAnRqQSAgAyABIAJqLQAAIgRqIARB/wFGGzYCACACQQFqIQIMAQsACwALIAAgBiABIANrQQNsaiIBLwAAIgI2AgAgAkUNAyAAIAEtAAIQpAM2AgQMAgsgACAGLwACNgIIIAAgBi8AADYCACAAIAYgASADa0EBdGovAAQ2AgRBAw8LIAEgA2shAQJ/IAVBIUYEQCAGIAFBfnFqIgJBAWohAyACLQAAEKQDDAELIAYgAUEBdkEDbGoiAkECaiEDIAIvAAALIQIgAEEgQSBBASACQZAIa0EgSRsgAkGAAkkbIAJqIAIgAUEBcRs2AgAgACADLQAAEKQDNgIEC0ECIQgLIAgPC0EAC7QCAQh/IwBB0ABrIgckACACQQAgAkEAShshCwNAAkACQCAGIAtHBEAgASAGQQJ0aigCACIFQYDYAmsiAkGj1wBNDQFBugUhAkEAIQQCQANAIAIgBEgNASAFIAIgBGpBAm0iCEECdEHQ4wJqKAIAIglBDnYiCkkEQCAIQQFrIQIMAQsgBSAJQQd2Qf8AcSIEIApqTwRAIAhBAWohBAwBCwsgCUEBcSADSw0AIAcgBSAIIAogBCAJQQF2QT9xEJQGIgJFDQAgACAHIAIgAxCVBgwDCyAAIAUQGwwCCyAHQdAAaiQADwsgACACQf//A3EiBUHMBG4iBEGAInIQGyAAIAIgBEHMBGxrQf//A3FBHG5B4SJqEBsgBUEccCICRQ0AIAAgAkGnI2oQGwsgBkEBaiEGDAALAAsiAQF/QQEhASAAEJ4EBH9BAQUgAEHgnQJBgKMCQRUQpQMLC00BBX8gACgCCCEDIABBADYCCCAAKAIAIQQgAEIANwIAIAAoAhAhBSAAKAIMIQcgACADIAQgASACQQAQ7AEhACAHIANBACAFEQEAGiAAC7EBAQd/IAAoAggiA0EEaiEFIAAoAgAhBgNAIAFBAWoiAiAGTkUEQAJAIAMgAUECdGooAgAiByADIAJBAnRqKAIARgRAIAEhAgwBCwNAIAYgASICQQNqSgRAIAUgAUECdGooAgAgAyABQQJqIgFBAnRqKAIARg0BCwsgAyAEQQJ0aiIBIAc2AgAgASAFIAJBAnRqKAIANgIEIARBAmohBAsgAkECaiEBDAELCyAAIAQ2AgALEQAgAEHgjQJB0JMCQRcQpQMLzwEBA38gASACLwAAIAItAAJBEHRBgID8AHFySQRAIABBADYCAEEADwtBfyEFIAEgAiADQQFrIgRBA2xqIgMvAAAgAy0AAkEQdHJJBH9BACEDA0AgBCADa0ECSEUEQCADIARqQQJtIgUgBCACIAVBA2xqIgQvAAAgBC0AAkEQdEGAgPwAcXIgAUsiBhshBCADIAUgBhshAwwBCwsgACACIANBA2xqIgAvAAAgAC0AAiIAQRB0QYCA/ABxcjYCACADQQV0IABBBXZyQSBqBUF/CwtuAQV/QfECIQEDQCABIAJOBEAgACABIAJqQQF2IgNBAnRBoIACaigCACIEQQ92IgVJBEAgA0EBayEBDAILIAAgBEEIdkH/AHEgBWpJBEBBAQ8FIANBAWohAgwCCwALCyAAQfCLAkHAjQJBBxClAwupAQECfyMAQRBrIgQkAAJ/IAMEQCAEQQRqIABBAiABIAIQoARBAUYEQCAEKAIEDAILQYX2AyAAQYb2A0YNARpBkAcgAEHTP0YNARpBsAcgACAAQeM/RhsMAQsgAEEgayAAIABB4QBrQRpJGyAAQf8ATQ0AGiAEQQRqIABBACABIAIQoAQhASAEKAIEIgIgACACQf8ASxsgACABQQFGGwshBSAEQRBqJAAgBQupAQEFfwJAIAFB/wBLBEBB8QIhAwNAIAMgBEgNAiABIAMgBGpBAXYiBUECdEGggAJqKAIAIgZBD3YiB0kEQCAFQQFrIQMMAQsgASAGQQh2Qf8AcSAHak8EQCAFQQFqIQQMAQsLIAAgASACIAUgBhCgBA8LIAIEQCABQSByIAEgAUHBAGtBGkkbIQEMAQsgAUEgayABIAFB4QBrQRpJGyEBCyAAIAE2AgBBAQuRAgEDfyABKAIAIgJB/v8HTwRAIABBkClBABA/QX8PCwJAIAJBAU0EQCAAQQJBfxC3ARoMAQsgASgCCCACQQJ0aiIEQQRrKAIAIgNBf0YEQCAEQQhrKAIAIQMLIAJBAXYhAiADQf//A00EQCAAQRUgAhChBEEAIQIDQCACIAEoAgBODQIgACACQQJ0IgMgASgCCGovAQAQJiAAQX8gASgCCCADaigCBEEBayIDIANBfkYbQf//A3EQJiACQQJqIQIMAAsACyAAQRYgAhChBEEAIQIDQCACIAEoAgBODQEgACACQQJ0IgMgASgCCGooAgAQGyAAIAEoAgggA2ooAgRBAWsQGyACQQJqIQIMAAsAC0EACzUBAn8jAEEQayIDJAAgAyABNgIIIAMgAkEBajYCDCAAIANBCGpBAhCXBiEEIANBEGokACAECyYBAX8gACgCOCIBQQBIBEAgACAAIABBPGpBABChBiIBNgI4CyABC9sCAQZ/IwBBkAFrIgQkACABQQA2AgAgACgCICEDQQEhBgNAIAQgAzYCjAECQAJAAkAgACgCHCIHIANNBEAgBiEFDAELAkACQAJAAkAgAy0AACIFQdsAaw4CAQIACyAFQShHDQUgAy0AAUE/Rw0CIAMtAAJBPEcNBSADLQADIgVBIUYgBUE9RnINBSABQQE2AgACQCACRQ0AIAQgA0EDajYCjAEgBCAEQYwBahCkBA0AIAQgAhCWBEUNBQsgBkEBaiEFIAZB/QFKDQMgBCgCjAEhAyAFIQYMBQsDQCAEIAMiBUEBaiIDNgKMASADIAdPDQUCQCADLQAAQdwAaw4CAAYBCyAEIAVBAmoiAzYCjAEMAAsACyAEIANBAWoiAzYCjAEMAwsgBkH9AUohCCAGQQFqIgUhBiAIRQ0CC0F/IAUgAhshBgsgBEGQAWokACAGDwsgA0EBaiEDDAALAAtdAQR/IAEQPSEDIAAoAkQiAiAAKAJIaiEEQQEhAANAAkAgAiAETwRAQX8hAAwBCyADIAIQPSIFRgRAIAEgAiADEGhFDQELIABBAWohACACIAVqQQFqIQIMAQsLIAAL0xoBDX8gAkEEayEPIAAoAgQhDSAAKAIIIQwDQCAFIQcgBEEBaiEIAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAIAQtAAAiCUEBaw4cAwIJCgcIBhUVAAsLDA8NDhEREhIaGQUFEAEYFxYLQQEhCSAGRQ0fIAcPCyAIIQQgByACIANBAWsiA0ECdGooAgBHDSIMHQtBBSEKIAgoAAAMAQtBAyEKIAgvAAALIQggByANTw0aAkAgDEUEQCAHQQFqIQUgBy0AACEJDAELIAcvAQAiCUGA+ANxQYCwA0cgDEECR3IgDSAHQQJqIgVNcg0AIAUvAQAiC0GA+ANxQYC4A0cNACAJQQp0QYD4P3EgC0H/B3FyQYCABGohCSAHQQRqIQULIAQgCmohBCAAKAIYBH8gCSAAKAIcENYBBSAJCyAIRg0fDBoLIAAgASACIAMgBCgAASAEQQVqIgRqIAcgCUEWa0EAEKYEQQBODR4MGAsgCCAIKAAAakEEaiEEDBYLIAghBCAFIAAoAgAiB0YNHCAAKAIURQ0XAkAgDEUEQCAFQQFrLQAAIQoMAQsgBUECay8BACIKQYD4A3FBgLgDRyAMQQJHcg0AIAcgBUEEayIHSw0AIAcvAQAiB0GA+ANxQYCwA0cNACAKQf8HcSAHQf8HcUEKdHJBgIAEaiEKCyAKEKUEDRwMFwsgCCEEIAcgDSIFRg0bIAAoAhRFDRYCQCAMRQRAIActAAAhCQwBCyAHLwEAIglBgPgDcUGAsANHIAxBAkdyIAdBAmogDU9yDQAgBy8BAiIFQYD4A3FBgLgDRw0AIAlBCnRBgPg/cSAFQf8HcXJBgIAEaiEJCyAHIQUgCRClBA0bDBYLIAcgDUYNFQJAIAxFBEAgB0EBaiEFIActAAAhCQwBCyAHLwEAIglBgPgDcUGAsANHIAxBAkdyIA0gB0ECaiIFTXINACAFLwEAIgRBgPgDcUGAuANHDQAgCUEKdEGA+D9xIARB/wdxckGAgARqIQkgB0EEaiEFCyAIIQQgCRClBEUNGgwVCyAHIA1GDRQgDEUEQCAHQQFqIQUgCCEEDBoLIAdBAmohBSAIIQQgBy8BAEGA+ANxQYCwA0cgDEECR3IgBSANT3INGSAHQQRqIAUgBy8BAkGA+ANxQYC4A0YbIQUMGQsgCC0AACIFIAAoAgxPDQggASAFQQN0aiAJQQJ0akEsayAHNgIAIARBAmohBAwRCyAELQACIgkgACgCDE8NBiAEQQNqIQQgCC0AACEFA0AgBSAJSw0RIAEgBUEDdGpCADcCACAFQQFqIQUMAAsACyACIANBAnRqIAQoAAE2AgAgA0EBaiEDIARBBWohBAwPCyADQQFrIQMMDQsgBCgAASEFIA8gA0ECdGoiCCAIKAIAQQFrIgg2AgAgBCAFQQAgCBtqQQVqIQQMDQsgAiADQQJ0aiAHNgIAIANBAWohAwwLC0EAIQtBACEKIAAoAgAiBCAHRwRAAkAgDEUEQCAHQQFrLQAAIQUMAQsgB0ECay8BACIFQYD4A3FBgLgDRyAMQQJHcg0AIAQgB0EEayIESw0AIAQvAQAiBEGA+ANxQYCwA0cNACAFQf8HcSAEQf8HcUEKdHJBgIAEaiEFCyAFEKcDIQoLIAcgDUkEQAJAIAxFBEAgBy0AACEFDAELIAcvAQAiBUGA+ANxQYCwA0cgDEECR3IgB0ECaiANT3INACAHLwECIgRBgPgDcUGAuANHDQAgBUEKdEGA+D9xIARB/wdxckGAgARqIQULIAUQpwMhCwsgByEFIAghBEESIAlrIAogC3NGDRIMDQsgBC0AASIIIAAoAgxPDQwgBEECaiEEIAEgCEEDdGoiBygCACIIRQ0RIAcoAgQiCkUNESAJQRNGDQgDQCAIIApPDRIgBSAAKAIAIg5GDQ0CQAJAAkAgDARAIApBAmsiBy8BACIJQYD4A3FBgLgDRyAHIAhNciAMQQJHcg0BIApBBGsiCi8BACILQYD4A3FBgLADRw0BIAlB/wdxIAtB/wdxQQp0ckGAgARqIQkMAgsgBUEBayIFLQAAIQsgCkEBayIKLQAAIQkMAgsgByEKCwJAIAVBAmsiBy8BACILQYD4A3FBgLgDRyAHIA5NciAMQQJHcg0AIAVBBGsiBS8BACIOQYD4A3FBgLADRw0AIAtB/wdxIA5B/wdxQQp0ckGAgARqIQsMAQsgByEFCyAAKAIYBH8gCSAAKAIcENYBIQkgCyAAKAIcENYBBSALCyAJRg0ACwwMC0G7GEG/7ABBjhFB98UAEAAAC0GkGEG/7ABBhRFB98UAEAAACyAEQQVqIgggCCAEKAABaiIKIAlBCUYiCxshBEF/IQkgACABIAIgAyAKIAggCxsgB0EAQQAQpgRBAE4NDgwLCxABAAsgBEERaiIQIAQoAAFqIRIgBCgABSEOQQAhCiAEKAAJIgRB/////wdGIREDQAJAAkAgACABIAIgAyAQIAVBARCjBiIJQQFqDgIMAQALIAkhBSAEIApBAWoiCksgEXINAQsLIAogDkkNByASIQQgCiAOTQ0MIAAgASACIAMgCCAFQQMgCiAOaxCmBEEATg0MDAYLIAcgACgCACIJRg0GIAxFBEAgB0EBayEFIAghBAwMCyAHQQJrIQUgCCEEIAxBAkcNCyAFLwEAQYD4A3FBgLgDRyAFIAlNcg0LIAdBBGsiByAFIAcvAQBBgPgDcUGAsANGGyEFDAsLIAcgDU8NBQJAIAxFBEAgB0EBaiEFIActAAAhCAwBCyAHLwEAIghBgPgDcUGAsANHIAxBAkdyIA0gB0ECaiIFTXINACAFLwEAIglBgPgDcUGAuANHDQAgCEEKdEGA+D9xIAlB/wdxckGAgARqIQggB0EEaiEFCyAELwABIQogACgCGARAIAggACgCHBDWASEICyAIIARBA2oiBygAAEkNBUEAIQkgCCAHIApBAWsiBEEDdGooAARLDQUDQCAEIAlJDQYgByAEIAlqQQF2IgtBA3RqIg4oAAAgCEsEQCALQQFrIQQMAQsgDigABCAISQRAIAtBAWohCQwBCwsgByAKQQN0aiEEDAoLIAcgDU8NBAJAIAxFBEAgB0EBaiEFIActAAAhCAwBCyAHLwEAIghBgPgDcUGAsANHIAxBAkdyIA0gB0ECaiIFTXINACAFLwEAIglBgPgDcUGAuANHDQAgCEEKdEGA+D9xIAlB/wdxckGAgARqIQggB0EEaiEFCyAELwABIQogACgCGARAIAggACgCHBDWASEICyAIIARBA2oiBy8AAEkNBAJAIAcgCkEBayIEQQJ0ai8AAiIJQf//A0YgCEH//wNPcQ0AIAggCUsNBUEAIQkDQCAEIAlJDQYgByAEIAlqQQF2IgtBAnRqIg4vAAAgCEsEQCALQQFrIQQMAQsgDi8AAiAIQf//A3FPDQEgC0EBaiEJDAALAAsgByAKQQJ0aiEEDAkLA0AgCCAKTw0JIAUgDU8NBAJ/An8CQCAMBEAgCC8BACIJQYD4A3FBgLADRyAMQQJHciAIQQJqIgcgCk9yDQEgBy8BACILQYD4A3FBgLgDRw0BIAlBCnRBgPg/cSALQf8HcXJBgIAEaiEJIAhBBGoMAgsgBS0AACELIAgtAAAhCSAIQQFqIQggBUEBagwCCyAHCyEIAkAgBS8BACILQYD4A3FBgLADRyAMQQJHciAFQQJqIgcgDU9yDQAgBy8BACIOQYD4A3FBgLgDRw0AIAtBCnRBgPg/cSAOQf8HcXJBgIAEaiELIAVBBGoMAQsgBwshBSAAKAIYBH8gCSAAKAIcENYBIQkgCyAAKAIcENYBBSALCyAJRg0ACwwDCyAIIQQMBwsgByEFDAYLQX8PC0EAIQkgBg0BCyAAKAIwIQUDQCAJIQMgBUUEQCAJDwsCQAJAAkACQCAAKAIoIAVBAWsiBSAAKAIkbGoiCC0AACIEDgQAAgIBAgtBASEJIAMNAgwFC0EBIQkgAw0BIAEgCEEQaiIDIAAoAgxBA3QQHhogAiADIAAoAgxBA3RqIAgtAAEiA0ECdBAeGiAIKAIIIQUgCCgCDCIJKAAMIQpBACEEA0ACfwJAIAQgCkcEQCAFQQFrIAxFDQIaIAVBAmshByAMQQJHDQEgBy8BAEGA+ANxQYC4A0cNASAHIAAoAgBNDQEgBUEEayIFIAcgBS8BAEGA+ANxQYCwA0YbDAILIAkoAAAhEyAIIAU2AgggCCAIKAIEQQFrIgc2AgQgEyAJakEQaiEEIAcNCSAAIAAoAjBBAWs2AjAMCQsgBwshBSAEQQFqIQQMAAsACyADQQAgBEEBRhsNBEEAIQkgAw0AIARBAkYNAwsgACAFNgIwDAALAAsgCQ8LIAEgCEEQaiAAKAIMQQN0EB4aCyAIKAIIIQUgCCgCDCEEIAIgCCAAKAIMQQN0akEQaiAILQABIgNBAnQQHhogACAAKAIwQQFrNgIwDAALAAucAgEFfyMAQUBqIgckACAHIAEtAAAiCEEBdkEBcTYCJCAHIAhBAnZBAXE2AiAgByAIQQR2QQFxIgg2AiggByABLQABIgk2AhggAS0AAiEKIAdBADYCPCAHIAY2AiwgByAFQQIgBSAIGyAFQQFHGzYCFCAHIAIgBCAFdGo2AhAgByACNgIMIAcgCjYCHCAHQgA3AjQgByAKQQJ0IgYgCUEDdGpBEGo2AjAgCUEBdCEEQQAhCANAIAQgCEZFBEAgACAIQQJ0akEANgIAIAhBAWohCAwBCwsgByAGQQ9qQfAPcWsiBCQAIAdBDGogACAEQQAgAUEHaiACIAMgBXRqQQAQowYhCyAHKAIsIAcoAjRBABD3AxogB0FAayQAIAsLriQBIH8jAEHQAGsiBCQAQQwgAWshFyABQQtqIRggAEHEAGohFCABQRNqIRkgAEHcAGohDyAAKAIEIRMCQAJAAkADQCAAKAIYIgIgACgCHE8NAyACLQAAIgNBKUYgA0H8AEZyDQMgACgCBCEQIAQgAjYCHAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgA0HbAGsOBAIBAwkACwJAAkACQAJAAkAgA0Ekaw4LAQkJCQQJFhYJCQIACyADQfsAaw4DAggGBwsgBCACQQFqIgc2AhwgAEEGEA4MEQsgBCACQQFqNgIcIAAoAjQhDSABRQ0IIABBGxAOIABBBEEDIAAoAjAbEA4gAEEbEA4MCQsgACgCKARAIABB0C1BABA/DBQLIAItAAFBOmtBdkkNBSAEIAJBAWo2AjggBEE4akEBENQCGgJAIAQoAjgiAi0AACIFQSxHDQAgBCACQQFqNgI4IAItAAEiBUE6a0F2SQ0AIARBOGpBARDUAhogBCgCOC0AACEFCyAFQf8BcUH9AEcNBQwSCwJAIAItAAFBP0YEQEEDIQlBACENQQAhCEEAIQMCQAJAAkACQCACLQACIgZBOmsOBAADAQ8CCyAAIAJBA2o2AhggACgCNCENIAAgARCoAw0XIAQgACgCGDYCHCAQIQIgACAEQRxqQSkQpgNFDQ8MFwtBASEIQQQhCSACLQADIgZBPUYEQEEBIQMMDgtBASEDIAZBIUYNDSAEIAJBA2o2AhwgDyAEQRxqEKQEBEAgAEHr1QBBABA/DBcLIAAgDxCiBkEASgRAIABB1tUAQQAQPwwXCyAUIA8gDxA9QQFqEHIaIABBATYCPAwDCyAGQSFGDQwLIABB9jZBABA/DBQLIAQgAkEBajYCHCAUQQAQDgsgACgCNCINQf8BTgRAIABBtCdBABA/DBMLIAAgDUEBajYCNCAAKAIEIQIgACAYIA0Q1gIgACAEKAIcNgIYIAAgARCoAw0SIAQgACgCGDYCHCAAIBcgDRDWAiAAIARBHGpBKRCmA0UNCgwSCwJAAkACQAJAAkACQAJAIAItAAEiA0Ewaw4TAwQEBAQEBAQEBAoKCgoKCgoKAQALIANB6wBGDQEgA0HiAEcNCQsgAEERQRIgA0HiAEYbEA4gAkECaiEHDA8LAkAgAi0AAkE8RwRAQcHVACEFIAAoAigNASAAEKMEDQEMCQsgBCACQQNqNgI4IA8gBEE4ahCkBARAQevVACEFIAAoAigNASAAEKMEDQEMCQsgACAPEKIGIgZBAE4NAyAAIARBJGogDxChBiIGQQBODQNB0OkAIQUgACgCKA0AIAAQowRFDQgLIAAgBUEAED8MFQsgBCACQQJqNgIcIAItAAIhAyAAKAIoBEBBACEGIANBOmtBdkkNCCAAQYY8QQAQPwwVC0EAIQYgA0H4AXFBMEcNByAEIAJBA2o2AhwgA0EwayEGIAItAAMiA0H4AXFBMEcNByAEIAJBBGo2AhwgBkEDdCADakEwayEGDAcLIAQgAkEBaiIINgIcIARBHGpBABDUAiIGQQBOBEAgBiAAKAI0SA0CIAAQoAYgBkoNAgsgACgCKEUEQCAEIAg2AhwgCC0AACIGQTdNBEBBACEDIAZBM00EQCAEIAJBAmoiCDYCHCAGQTBrIQMgAi0AAiEGCyAGQfgBcUEwRwRAIAMhBgwJCyAEIAhBAWo2AhwgBkH/AXEgA0EDdGpBMGshBiAILQABIgJB+AFxQTBHDQggBCAIQQJqNgIcIAZBA3QgAmpBMGshBgwICyAEIAJBAmo2AhwMBwsgAEGzPEEAED8MEwsgBCAEKAI4NgIcCyAAKAI0IQ0gACgCBCECIAAgGSAGENYCDAkLIAAoAjQhDSABBEAgAEEbEA4LIARBOGogACgCQBDSAiAEIAJBAWoiBjYCTCACLQABQd4ARyIaRQRAIAQgAkECaiIGNgJMCwJAA0ACQAJAIAYtAABB3QBHBEAgACAEQSRqIgMgBEHMAGpBARCiBCICQQBIDQQCQAJAAkACQCAEKAJMIgYtAABBLUcNACAGLQABQd0ARg0AIAQgBkEBajYCICACQYCAgIAETwRAIAAoAihFDQEgAxCbAQwDCyAAIARBJGoiCCAEQSBqQQEQogQiA0EASA0IIANBgICAgARJDQEgCBCbASAAKAIoDQILIAJBgICAgARJDQIgBEE4aiAEKAIsIAQoAiQQlwYhHiAEQSRqEJsBIB5FDQYMBQsgBCAEKAIgIgY2AkwgAiADTQ0DCyAAQbTaAEEAED8MBQsgBEE4aiACIAIQnwZFDQMMAgsgACgCLARAIAAoAighEkEAIQdBACEJQQAhDiMAQdAAayIFJAAgBEE4aiILKAIQIQMgBSALKAIMIgI2AjQgBUEANgIwIAVCADcCKCAFIAI2AkggBUEANgJEIAVCADcCPCAFIAI2AiAgBUEANgIcIAVCADcCFCAFIAI2AgwgBUEANgIIIAVCADcCACAFIANBmwMgAxsiAjYCOCAFIAI2AkwgBSACNgIkIAUgAjYCECAFQShqIgJBBEEBIBIbEM8CIQMgBSgCMCEMAkACQCADDQAgBUE8aiAMIAUoAiggCygCCCALKAIAQQEQ7AENACACEJQCIR8gBSgCMCEMIB8NACAFIAwgBSgCKCALKAIIIAsoAgBBARDsAQ0AQbC0ggEhEUHBACEKQRohFSAFKAJEIRYgBSgCPCEbQX8hA0F/IQgCQANAIA4gG0kEQCAWIA5BAnRqIgIoAgAiByACKAIEIgIgAiAHSRshHANAIAcgHEcEQANAIAcgCiAVakkgByAKT3FFBEAgCUEBaiIJQfICTw0GIAlBAnRBoIACaigCACIRQQ92IQogEUEIdkH/AHEhFQwBCwsgByAJIBEgEhCcBiECAkAgA0F/RwRAIAIgCEYEQCAIIQIMAgsgBUEUaiADIAgQaRoLIAIhAwsgB0EBaiEHIAJBAWohCAwBCwsgDkECaiEODAELCwJAIANBf0YEQCAFKAIcIQcMAQsgBUEUaiADIAgQaSEgIAUoAhwhByAgDQILQQAhCiAHIAUoAhQiA0ECbUEIQZwDQQAQ1wFBACECA0AgAyAKSwRAIAcgCkECdGoiCCgCACEOIAgoAgQhCQNAAkAgCkECaiIKIANPDQAgByAKQQJ0aiIIKAIAIAlLDQAgCCgCBCIIIAkgCCAJSxshCQwBCwsgByACQQJ0aiIIIA42AgAgCCAJNgIEIAJBAmohAgwBCwtBACEJIAtBADYCACALIAcgAiAFKAIIIgogBSgCAEEAEOwBDQEgBSgCSCAWQQAgBSgCTBEBABogBSgCNCAMQQAgBSgCOBEBABogBSgCICAHQQAgBSgCJBEBABoMAgtB4YsBQe3sAEGTC0HlzgAQAAALIAUoAkggBSgCREEAIAUoAkwRAQAaIAUoAjQgDEEAIAUoAjgRAQAaIAUoAiAgB0EAIAUoAiQRAQAaQX8hCSAFKAIIIQoLIAUoAgwgCkEAIAUoAhARAQAaIAVB0ABqJAAgCQ0CCyAaRQRAIARBOGoQlAINAgsgACAEQThqIgIQngYNAyACEJsBIAQgBkEBajYCHCABRQ0JIABBGxAODAkLIARBOGogAiADEJ8GRQ0BCwsgABDVAgsgBEE4ahCbAQwQCyAAKAIoRQ0BIABB0C1BABA/DA8LIANBP0YNDQsgACAEQQhqIARBHGpBABCiBCIGQQBIDQ0LIAAoAjQhDSAAKAIEIQIgAQRAIABBGxAOCwJAIAZBgICAgAROBEAgACAEQQhqIgMQngYhISADEJsBICFFDQEMDgsgACgCLARAIAYgACgCKBDWASEGCyAGQf//A0wEQCAAQQEgBhChBAwBCyAAQQIgBhC3ARoLIAFFDQQgAEEbEA4MBAsgAEEEQQMgACgCMBsQDgsgECECDAILIAQgAkEBaiIHNgIcIABBBRAODAULIAIgCWohBUF/IQICQCAIDQAgACgCKA0AIAAoAjQhDSAQIQILIABBGEEXIAZBIUYbQQAQtwEhBiAAIAU2AhggACADEKgDDQggBCAAKAIYNgIcIAAgBEEcakEpEKYDDQggAEEKEA4gACgCDA0IIAAoAgAgBmogACgCBCAGa0EEazYAAAsgBCgCHCEHIAJBAEgNAwJAAkACQAJAAkAgBy0AACIDQSprDgIBAgALIANBP0YNAiADQfsARw0HIActAAFBOmtBdUsNAyAAKAIoRQ0HDAgLIAdBAWohB0EAIQtB/////wchCgwFC0EBIQsgBCAHQQFqIgc2AhxB/////wchCgwEC0EBIQogBCAHQQFqIgc2AhxBACELDAMLIAQgB0EBajYCHCAEQRxqQQEQ1AIiCyEKAkAgBCgCHCIDLQAAIgVBLEcNACAEIANBAWo2AhxB/////wchCiADLQABIgVBOmtBdkkNACAEQRxqQQEQ1AIiCiALSA0FIAQoAhwtAAAhBQsgBUH/AXFB/QBGDQEgACgCKA0BCyAEIAc2AhwMAgsgACAEQRxqQf0AEKYDDQUgBCgCHCEHCwJAAkAgBy0AAEE/RgRAIAQgB0EBaiIHNgIcIAAoAgQgAmshCUEAIQxBACEDDAELIAAoAgwhCAJAIApBAEwNACAIDQIgACgCBCACayEMIAAoAgAgAmohDkEAIQVBACEJA0AgBSAMSARAIAUgDmoiES0AACISQYCAAmotAAAhBkECIQMCQAJAAkACQCASQQFrDhYCAgICAwMGBgYGBgYGBgYGAwMGBgEABgtBAyEDCyARLwABIAN0IAZqIQYLIAlBAWohCQsgBSAGaiEFDAELCyAJQQBMDQAgAEEKEA4gACACQREQlgINAiAAKAIAIAJqQRw6AAAgACgCBCEGIAAoAgAgAmoiAyAJNgANIAMgCjYACSADIAs2AAUgAyAGIAJrQRFrNgABDAMLIAgNASAAKAIEIAJrIQkgACgCACACaiERQQAhBUEBIQgDQCAFIAlOBEBBASEMIAghAwwCCyAFIBFqIg4tAAAiEkGAgAJqLQAAIQZBASEMQQEhAwJAAkACQAJAIBJBAWsOGwICAgIDAwUFBQUDAwMFAwMDAwMDAAEFBQMFAwULIA4vAAFBAnQgBmohBgwBCyAOLwABQQN0IAZqIQYLQQAhCAsgBSAGaiEFDAALAAsgC0UEQCAAKAI0IA1HBEAgACACQQMQlgINAiAAKAIAIAJqQQ06AAAgACgCACACaiANOgABIAAoAgAgAmogAC0ANEEBazoAAiACQQNqIQILIApFBEAgACACNgIEDAMLIApB/////wdGIgZFIApBAUdxRQRAIAAgAiADQQVqEJYCDQIgACgCACACaiAMQQhyOgAAIAAoAgAgAmoiCCADQQF0QQVBACAGG2ogCWo2AAEgAwRAIAhBGToABSAAQRoQDgsgCkH/////B0cNAyAAQQcgAhCVAgwDCyAAIAIgA0EKahCWAg0BIAAoAgAgAmpBDzoAACAAKAIAIAJqIgYgDEEIcjoABSAGIAo2AAEgACgCACACaiIGIANBAXQgCWpBBWo2AAYgAwRAIAZBGToACiAAQRoQDgsgAEEOIAJBBWoQlQIgAEEQEA4MAgsgAyALQQFHIApB/////wdHcnJFBEAgACAMQQlzIAIQlQIMAgsgC0EBRwRAIAAgAkEFEJYCDQEgACgCACACakEPOgAAIAAoAgAgAmogCzYAASAAQQ4gAkEFaiICEJUCIABBEBAOCyAKQf////8HRgRAIAAoAgQhBiAAIAxBCHIgA0EBdCAJakEFahC3ARoCQCADBEAgAEEZEA4gACACIAkQ3wIgAEEaEA4MAQsgACACIAkQ3wILIABBByAGEJUCDAILIAogC0wNASAAQQ8gCiALaxC3ARogACgCBCEGIAAgDEEIciADQQF0IAlqQQVqELcBGgJAIAMEQCAAQRkQDiAAIAIgCRDfAiAAQRoQDgwBCyAAIAIgCRDfAgsgAEEOIAYQlQIgAEEQEA4MAQsgABDVAgwECyAAIAc2AhggAUUNASAAIAAoAgQiAiAQayIQIAJqELwBDQMgACgCACATaiIDIBBqIAMgAiATaxCrASAAKAIAIgMgE2ogAiADaiAQEB4aDAELCyAAQegYQQAQPwwBCyAAQdEfQQAQPwtBfyEdCyAEQdAAaiQAIB0LoggCCH4EfyMAQRBrIg0kACAEQcqeAWotAAAiD60hCgJAAkAgAykDACIGQv////9vWARAQoCAgIDgACEFIAAgDUEIaiAGEKQBDQJCACEGIABCgICAgDAgDSkDCCIIIAqGEPoCIgdCgICAgHCDQoCAgIDgAFENAgwBCwJAAkAgBqciDi8BBiICQRNrQf//A3FBAU0EQCAOKAIgIQ5CgICAgOAAIQUgACANIAMpAwgQpAENBCAOLQAEDQICQCANKQMAIgZBfyAPdEF/cyIPrYNQBEAgDigCACICrCIHIAZaDQELIABB/htBABBEDAULAkAgAykDECIIQoCAgIBwg0KAgICAMFEEQCACIA9xDQEgByAGfSAKiCEIDAMLIAAgDUEIaiAIEKQBDQUgDi0ABA0DIA40AgAgDSkDCCIIIAqGIAZ8Wg0CCyAAQbvHAEEAEEQMBAsgAkEVa0H//wNxQQpNBEAgACABIAYgBBD5AiEFDAQLQoCAgIDgACEFIAAgASAEEF4iCEKAgICAcINCgICAgOAAUQ0DQoCAgIAwIQECfgJAAkAgACAGQcwBIAZBABARIgxCgICAgHCDIgVCgICAgCBRIAVCgICAgDBRckUEQCAFQoCAgIDgAFENAkIAIQUCQCAAEDsiB0KAgICAcINCgICAgOAAUQRAQoCAgIDgACEBDAELQoCAgIDgACEBQoCAgIAwIQsCQCAAIAYgDBDkAyIJQoCAgIBwg0KAgICA4ABRDQBBACEEIAAgCUHrACAJQQAQESILQoCAgIBwg0KAgICA4ABRDQADQCAAIAkgCyANQQhqEJEBIgZCgICAgHCDQoCAgIDgAFENASANKAIIBEAgACAGEAwgACALEAwgACAJEAwgBK0hBSAHIQEMAwsgACAHIAStIAZBgIABEMgBQQBIDQEgBEEBaiEEDAALAAsgACALEAwgACAJEAwgACAHEAwLIAAgDBAMIAFCgICAgHCDQoCAgIDgAFINAQwCCyAAIA1BCGogBhAvDQEgDiAOKAIAQQFqNgIAIA0pAwghBSAGIQELIABCgICAgDAgBSAKhhD6AiIHQoCAgIBwg0KAgICA4ABRDQAgACAIIAdCACAFEOMDDQBBACEEA0AgCCAErSAFWQ0CGiAAIAEgBBCmASIHQoCAgIBwg0KAgICA4ABRDQEgACAIIAQgBxCGAiEQIARBAWohBCAQQQBODQALCyAAIAEQDCAIIQFCgICAgOAACyEFIAAgARAMDAMLIAMpAwAiB0IgiKdBdUkNASAHpyICIAIoAgBBAWo2AgAMAQsgABBfDAELIAAgASAEEF4iAUKAgICAcINCgICAgOAAUQRAIAAgBxAMDAELIAAgASAHIAYgCBDjA0UEQCABIQUMAQsgACABEAwLIA1BEGokACAFC9IEAgZ/AX4jAEEgayIFJAAgACgCACEEIAVCADcCGCAFQoCAgICAgICAgH83AhAgBSAENgIMIAVBDGoiBCABIAJBIGoiAUHmDxCqAyAEIAQgAyABQeYPEEAaAkAgBSgCFEH/////B0YEQCAAECoMAQsjAEEwayICJAACQCAFQQxqIgMgAEcEQCAAKAIAIQcgAkIANwIoIAJCgICAgICAgICAfzcCICACIAc2AhwCfyADKAIIIgZBAEgEQEF/QQAgAygCBBsMAQsgAkEcaiIEQSBBARCYAiAEIAMgBEEgQQIQiAEaIAJBGGogBEEAEO0BIAMoAgghBiACKAIYCyEIIAJBHGoiBCABIAZBACAGQQBKG2ogAUEBayABQQFqQQF2ELkEIgZuQQFqIgkgBmpBAXRqQRpqIgFBBhCYAiAEIAQgCKwgAUEAENgCIAQgAyAEIAFBABDuARogBEEAIAZrQQEQuQEaIAJCADcCECACQoCAgICAgICAgH83AgggAiAHNgIEIABCARAyGiAJrSEKA0AgCqdBAEoEQCACQQRqIgMgChAyGiADIAJBHGogAyABQQAQiAEaIAAgACADIAFBABBAGiAAIABCASABQQAQehogCkIBfSEKDAELC0EAIQMgBkEAIAZBAEobIQQgAkEEahAZIAJBHGoQGQNAIAMgBEcEQCAAIAAgACABQeAPEEAaIANBAWohAwwBCwsgACAIQeEPELkBGiACQTBqJAAMAQtB6e0AQdjsAEHUIUGzxAAQAAALCyAFQQxqEBkgBUEgaiQAQRALrwEBAn8jAEEgayIEJAAgACgCACEFIARBCGogA0EAEO0BIAAgASAEKAIIIgEgAUEfdSIBcyABayIBIAJBwAAgAUEBa2dBAXRrQQAgAUECTxtqQQhqIgJB4A8QrwMhASADKAIEBEAgBEIANwIYIARCgICAgICAgICAfzcCECAEIAU2AgwgBEEMaiIDQgEQMhogACADIAAgAkHgDxCIASABciEBIAMQGQsgBEEgaiQAIAELkAYCCH8BfiMAQfAAayIDJAAgACABRwRAIAAoAgAhBCADQgA3AmggA0KAgICAgICAgIB/NwJgIAMgBDYCXCADQdwAaiIFIAEQSRogA0IANwJUIANCgICAgICAgICAfzcCTCADIAQ2AkggAygCZCEGIANBADYCZCADQcgAaiIBQqrVqtUKEDIaIANBADYCUCAFIAEQrAIEQCADIAMoAmRBAWo2AmQgBkEBayEGCyADQcgAahAZIAJBAWpBAXYQuQQhBSADQgA3AlQgA0KAgICAgICAgIB/NwJMIAMgBDYCSCADQgA3AkAgA0KAgICAgICAgIB/NwI4IAMgBDYCNCADQdwAaiIBIAFCf0H/////A0EAEHoaIAVBACAFQQBKGyEJIAIgBWogAiAFQQF0bkEBaiIKQQF0akEgaiECQQAhAQNAIAEgCUZFBEAgA0HIAGoiByADQdwAaiIIQgEgAkEAEHoaIANBNGoiCyAHIAJBBhC1BCAHIAtCASACQQAQehogCCAIIAcgAkEAEIgBGiABQQFqIQEMAQsLIANCADcCLCADQoCAgICAgICAgH83AiQgAyAENgIgIANCADcCGCADQoCAgICAgICAgH83AhAgAyAENgIMIANBIGoiASADQdwAaiIEQgIgAkEAEHoaIAEgBCABIAJBABCIARogA0EMaiABIAEgAkEAEEAaIABCABAyGiAKrSEMA0AgDKdBAExFBEAgA0HIAGoiAUIBEDIaIANBNGoiBCAMQgGGQv7///8Pg0IBhBAyGiABIAEgBCACQQAQiAEaIAAgACABIAJBABC4ARogACAAIANBDGogAkEAEEAaIAxCAX0hDAwBCwsgACAAQgEgAkEAEHoaIAAgACADQSBqIgEgAkEAEEAaIAEQGSADQQxqEBkgA0E0ahAZ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C0KAgICAMCEFIAZCgICAgHCDQoCAgIAwUQ0DIAAgBkEBEJABGgwDC0KAgICAMCEJQoCAgIAwIQZCgICAgDAhBSAAIAQQICIHQoCAgIBwg0KAgICA4ABRDQILIAAgDUEIaiAHEC9BAEgNACANAn4gDSkDCCIEQoCAgIAIfEL/////D1gEQCAEQv////8PgwwBC0KAgICAwH4gBLm9IgVCgICAgMCBgPz/AH0gBUL///////////8Ag0KAgICAgICA+P8AVhsLIgg3AyAgACABQQEgDUEgahC/AyEFIAAgCBAMAkAgBUKAgICAcINCgICAgOAAUQ0AQgAhCCAEQgAgBEIAVRshDANAIAggDFENBCAAIAcgCBBsIgRCgICAgHCDQoCAgIDgAFENAQJAIA4EQCAEIQEMAQsgDSAENwMgIA0gCEL/////D4M3AyggACAKIAtBAiANQSBqEBwhASAAIAQQDCABQoCAgIBwg0KAgICA4ABRDQILIAAgBSAIIAEQeyERIAhCAXwhCCARQQBODQALCwwBC0KAgICAMCEFCyAAIAUQDEKAgICA4AAhBQsgACAHEAwgACAGEAwgACAJEAwgDUEwaiQAIAULDwAgACsDACABKwMAEMQECzkBAX5CgICAgMB+IAEpAwAiAkKAgICAwIGA/P8AfSACQv///////////wCDQoCAgICAgID4/wBWGwsRACAAKgIAuyABKgIAuxDEBAs7AQF+QoCAgIDAfiABKgIAu70iAkKAgICAwIGA/P8AfSACQv///////////wCDQoCAgICAgID4/wBWGwsZAQJ+IAEpAwAiAyAAKQMAIgRUIAMgBFZrCwwAIAAgASkDABCIBAsZAQJ+IAEpAwAiAyAAKQMAIgRTIAMgBFVrCwwAIAAgASkDABC/AgsXACABKAIAIgEgACgCACIASSAAIAFJaws9AQF+IAEoAgAiAEEATgRAIACtDwtCgICAgMB+IAC4vSICQoCAgIDAgYD8/wB9IAJCgICAgICAgPj/AFYbC9sFAwV/A34BfCMAQUBqIgUkAAJAAnwCQAJAAkACQAJAIAJBACABQoCAgIBwgyILQoCAgIAwUhsiAg4CAgABCwJAIAMpAwAiCUKAgICAcFQNACAJpyIELwEGQQpHDQAgBCkDICIKQiCIpyIEQQAgBEELakESSRsNACAAIAUg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IQULIAJBEGokACAFCx0AIAAgAUEAEGsiAEUEQEKAgICA4AAPCyAANQIoCz0BAX5CgICAgBAhASADKQMAIgRCgICAgHBaBH4gBKcvAQZBFWtB//8DcUEMSa1CgICAgBCEBUKAgICAEAsL7gMCBX4CfyMAQSBrIgokAEKAgICA4AAhBQJAIAAgASAEEFoiC0UNACALLQAEBEAgABBfDAELIAAgCkEYaiADKQMAQgAgCzQCACIGIAYQZg0AIAogBjcDECADKQMIIgdCgICAgHCDQoCAgIAwUgRAIAAgCkEQaiAHQgAgBiAGEGYNASAKKQMQIQYLIAopAxghCSAAIAFCgICAgDAQ/QEiB0KAgICAcIMiBUKAgICA4ABRBEAgByEFDAELIAYgCX0iBkIAIAZCAFUbIQgCQCAFQoCAgIAwUQRAIABCgICAgDAgCCAEEOUDIQUMAQsgCiAGQv////8HVwR+IAhC/////w+DBUKAgICAwH4gCLm9IgVCgICAgMCBgPz/AH0gBUL///////////8Ag0KAgICAgICA+P8AVhsLNwMIIAAgB0EBIApBCGoQowEhBSAAIAcQDCAAIAopAwgQDAsgBUKAgICAcINCgICAgOAAUQ0AAkAgACAFIAQQWiICRQ0AIAAgBSABEE0EQCAAQco0QQAQEgwBCwJAIAItAAQNACACNAIAIAhTBEAgAEHOwgBBABASDAILIAstAAQNACACKAIIIAsoAgggCadqIAinEB4aDAILIAAQXwsgACAFEAxCgICAgOAAIQULIApBIGokACAFC1EAIAAgASACEFoiAEUEQEKAgICA4AAPCyAAKAIAIgBBAE4EQCAArQ8LQoCAgIDAfiAAuL0iAUKAgICAwIGA/P8AfSABQoCAgICAgID4/wBWGwv/AwICfwF+AkACQAJAAkACQAJAIAFCgICAgHBaBEAgAaciAi8BBkErRg0BCyAEQQE2AgAMAQsgAigCICEGIARBATYCACAGDQELIABBsS1BABASDAELIAYoAgQhAgJAAkACQAJ/AkACQAJAAkAgBigCACIHQQFrDgQCAgcBAAsgBUUNAiAAIAYQyQQLQoCAgIAwIQEgBUEBaw4CAwQHCyADKQMAIgFCIIinQXVPBEAgAaciAyADKAIAQQFqNgIACwJAIAVBAkcNAEEBIQMgB0EBRw0AIAAgARCYASAGKAIEDAILIAIoAmQiAyAFrTcDACADQQhrIAE3AwAgAiADQQhqNgJkC0EAIQMgAgsiBSADNgIcIAZBAzYCACAAIAUQsQIhASAGQQE2AgAgBigCBCgCIARAIAAgBhDJBCABDwsgAUKAgICAEFoNBSACKAJkQQhrIgApAwAhCCAAQoCAgIAwNwMAIAFCAlEEQCAGQQI2AgAgBEECNgIAIAgPCyAEQQA2AgAgCA8LIAMpAwAiAUIgiKdBdUkNAyABpyIAIAAoAgBBAWo2AgAgAQ8LIAMpAwAiAUIgiKdBdU8EQCABpyICIAIoAgBBAWo2AgALIAAgARCYAQwBCyAAQY8tQQAQEgtCgICAgOAAIQELIAEPC0HW8QBBqOwAQaCUAUHEFBAAAAt3AQF+IAMpAwAiAUKAgICAcINCgICAgIB/UgRAIABBkcEAQQAQEkKAgICA4AAPC0KAgICAMCEEIAGnIgApAgRCgICAgICAgIBAg0KAgICAgICAgIB/UQR+IAAgACgCAEEBajYCACABQoCAgICQf4QFQoCAgIAwCws8AQF+QoCAgIDgACEBIAAgAykDABAlIgRCgICAgHCDQoCAgIDgAFIEfiAAIASnQQIQ5gMFQoCAgIDgAAsLVgIBfgF/IAAgARC7AyIBQoCAgIBwg0KAgICA4ABRBEAgAQ8LQoCAgIAwIQIgAaciAygCBEGAgICAeEcEQCAAIAAoAhAgAxDGAhApIQILIAAgARAMIAILCQAgACABELsDC1sBAX4jAEEQayICJAAgAiAAIAEQuwMiATcDCAJAIAFCgICAgHCDQoCAgIDgAFEEQCABIQQMAQsgAEKAgICAMEEBIAJBCGoQygQhBCAAIAEQDAsgAkEQaiQAIAQLLQBCgICAgOAAIAAgAykDACADKQMIQQAQiQIiAEEAR61CgICAgBCEIABBAEgbC6ABAQN+IAMpAwAiBSEEIAJBBE4EQCADKQMYIQQLIAVC/////29YBEAgABAiQoCAgIDgAA8LIAMpAxAhAUKAgICA4AAhBgJAIAAgAykDCBAwIgJFDQAgAUIgiKdBdU8EQCABpyIDIAMoAgBBAWo2AgALIAAgBSACIAEgBEEAENABIQMgACACEBAgA0EASA0AIANBAEetQoCAgIAQhCEGCyAGCyoAIAMpAwAiAUL/////b1gEQCAAECJCgICAgOAADwsgACABQQNBABCyAgtjAQF+IAMpAwAiBEL/////b1gEQCAAECJCgICAgOAADwtCgICAgOAAIQECQCAAIAMpAwgQMCICRQ0AIAAgBCACEG4hAyAAIAIQECADQQBIDQAgA0EAR61CgICAgBCEIQELIAELYwEDfgJAAkAgAykDACIBQv////9vWARAIAAQIgwBCyADKQMIIQUgASEEIAJBA04EQCADKQMQIQQLIAAgBRAwIgINAQtCgICAgOAADwsgACABIAIgBEEAEBEhBiAAIAIQECAGC2YBAX4gAykDACIEQv////9vWARAIAAQIkKAgICA4AAPC0KAgICA4AAhAQJAIAAgAykDCBAwIgJFDQAgACAEIAJBABDNASEDIAAgAhAQIANBAEgNACADQQBHrUKAgICAEIQhAQsgAQuaAQIBfwJ+IwBBEGsiBCQAIAMpAwghBSADKQMAIgYhAQJAAkACQAJAIAJBA0gNACADKQMQIgFCgICAgHBaBEAgAactAAVBEHENAQsgAEGdLEEAEBIMAQsgACAEQQxqIAUQ/QMiAg0BC0KAgICA4AAhAQwBCyAAIAYgASAEKAIMIgMgAhD+AiEBIAAgAiADEIYDCyAEQRBqJAAgAQt5AQF/IAFCgICAgHCDQoCAgIAwUgRAIABBnSxBABASQoCAgIDgAA8LAn4CQCACRQ0AIAMpAwAiAUKAgICAcINCgICAgDBRDQBCgICAgOAAIAAgARAlIgFCgICAgHCDQoCAgIDgAFENARogAachBAsgACAEQQMQ5gMLCxUAIAAgAykDACADIANBCGpBAhCIAws3ACMAQRBrIgIkACAAIAJBDGogAykDABB1IQAgAigCDCEDIAJBEGokAEKAgICA4AAgA2etIAAbC04AIwBBEGsiAiQAQoCAgIDgACEBAkAgACACQQxqIAMpAwAQdQ0AIAAgAkEIaiADKQMIEHUNACACKAIIIAIoAgxsrSEBCyACQRBqJAAgAQsGACAAtrsLfwAgACAAKQPQASIBQgyIIAGFIgFCGYYgAYUiAUIbiCABhSIBNwPQAUKAgICAwH4gAUKdurP7lJL9oiV+QgyIQoCAgICAgID4P4S/RAAAAAAAAPC/oL0iAUKAgICAwIGA/P8AfSABQv///////////wCDQoCAgICAgID4/wBWGwuIBAMFfAV/AX4jAEEQayIKJAAgCkIANwMIAkACQCACQQBMDQBCgICAgOAAIQEgACAKQQhqIAMpAwAQQg0BQQEhCyAKKwMIIQQgAkEBRwRAA0AgAiALRg0CIAAgCiADIAtBA3RqKQMAEEINAyALQQFqIQsgCisDACEFIwBBIGsiCSQAAkAgBJkiByAFmSIGIAe9IAa9VCIMGyIEvSIOQjSIpyINQf8PRg0AIAYgByAMGyEFAkAgDlANACAFvUI0iKciDEH/D0YNACAMIA1rQcEATgRAIAcgBqAhBAwCCwJ8IAxB/gtPBEAgBEQAAAAAAAAwFKIhBCAFRAAAAAAAADAUoiEFRAAAAAAAALBrDAELRAAAAAAAAPA/IA1BvARLDQAaIAREAAAAAAAAsGuiIQQgBUQAAAAAAACwa6IhBUQAAAAAAAAwFAshCCAJQRhqIAlBEGogBRCIBiAJQQhqIAkgBBCIBiAIIAkrAwAgCSsDEKAgCSsDCKAgCSsDGKCfoiEEDAELIAUhBAsgCUEgaiQADAALAAsgBJkhBAsgBL0iAQJ/IASZRAAAAAAAAOBBYwRAIASqDAELQYCAgIB4CyIAt71RBEAgAK0hAQwBC0KAgICAwH4gAUKAgICAwIGA/P8AfSABQv///////////wCDQoCAgICAgID4/wBWGyEBCyAKQRBqJAAgAQtOACAAIABEAAAAAAAA8L9EAAAAAAAA8D8gAEQAAAAAAAAAAGMbIAC9Qv///////////wCDQoCAgICAgID4/wBWGyAARAAAAAAAAAAAYRsLgwECAn4BfyAAvSIBQjSIp0H/D3EiA0H+B00EQCABQoCAgICAgICAgH+DIQIgA0H+B0cgAUKAgICAgICA8L9/UXJFBEAgAkKAgICAgICA+D+Evw8LIAK/DwsgA0GyCE0EfCABQj+HIAF8QgFBswggA2uthiIBQgGIfEIAIAF9g78FIAALC4IFAwJ8BX8CfiMAQRBrIgkkAAJ+QoCAgIDA/v/7/wBCgICAgMD+/3sgBBsgAkUNABoCfCADKQMAIgFC/////w9YBEBBASACIAJBAUwbIQogAachCEEBIQcDQCAHIApHBEAgCLcgAyAHQQN0aikDACIBQoCAgIAQWg0DGiAIIAGnIgsgCCALShsgCCALIAggC0gbIAQbIQggB0EBaiEHDAELCyAIrQwCC0KAgICA4AAgACAJQQhqIAEQQg0BGkEBIQcgCSsDCAshBSAHIAIgAiAHSBshAgNAIAIgB0cEQEKAgICA4AAgACAJIAMgB0EDdGopAwAQQg0CGgJAIAW9IgxC////////////AINCgICAgICAgPj/AFYNACAJKwMAIga9IgFC////////////AINCgICAgICAgPj/AFYEQCAGIQUMAQsgBUQAAAAAAAAAAGEgBkQAAAAAAAAAAGFxIQogBARAIAoEQCABIAyDvyEFDAILIAUgBSAGpSAGvUL///////////8Ag0KAgICAgICA+P8AVhsgBiAFvUL///////////8Ag0KAgICAgICA+P8AWBshBQwBCyAKBEAgASAMhL8hBQwBCyAFIAUgBqQgBr1C////////////AINCgICAgICAgPj/AFYbIAYgBb1C////////////AINCgICAgICAgPj/AFgbIQULIAdBAWohBwwBCwsgBb0iAQJ/IAWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4CyIAt71RBEAgAK0MAQtCgICAgMB+IAFCgICAgMCBgPz/AH0gAUL///////////8Ag0KAgICAgICA+P8AVhsLIQ0gCUEQaiQAIA0L4wECAX4CfyMAQRBrIgIkAAJAIAAgAUEpEFoiA0UEQCAEQQA2AgBCgICAgOAAIQEMAQtCgICAgDAhAQJAIAMpAwAiBkKAgICAcINCgICAgDBSBEAgAiADKAIMIgU2AgwgBSAGpyIHKAIEQf////8HcUkNASAAIAYQDCADQoCAgIAwNwMACyAEQQE2AgAMAQsgByACQQxqEMYBIQggAyACKAIMNgIMIARBADYCACAIQf//A00EQCAAIAhB//8DcRCUAyEBDAELIAAgByAFQQF0akEQakECEJIDIQELIAJBEGokACABC5EDAgN/An4jAEEgayICJABCgICAgOAAIQgCQCAAIAEQSiIBQoCAgIBwg0KAgICA4ABRDQAgACACQQhqIgVBBxA+GiAFQTwQPBogBSAEQQN0IgRB0OEBaigCACIGEIMBGiAEQdThAWooAgAiBARAIAVBIBA8GiAFIAQQgwEaIAVB2pEBEIMBGiAAIAMpAwAQSiIJQoCAgIBwg0KAgICA4ABRBEAgACABEAwgAigCCCgCECIAQRBqIAIoAgwgACgCBBEAAAwCCyAJpyIH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QdAAaiQAIAYLuAICA38DfiMAQSBrIgIkAEKAgICA4AAhBwJAAkACQCAAIAEQSiIBQoCAgIBwg0KAgICA4ABRDQAgACACIAMpAwAQ4wENACACKQMAIghCgICAgAhaBEAgAEHTGEEAEEQMAQsgCKciA0EBRg0BIAGnIgQpAgQiCaciBkH/////B3EiBUUNASAJQv////8HgyAIfkKAgICABFoEQCAAQeTIAEEAEDoMAQsgACACQQhqIAMgBWwgBkEfdhCZAw0AAkAgBUEBRwRAA0AgA0EATA0CIAJBCGogBEEAIAUQSxogA0EBayEDDAALAAsgAkEIagJ/IAQtAAdBgAFxBEAgBC8BEAwBCyAELQAQCyADEMsEGgsgACABEAwgAkEIahA3IQcMAgsgACABEAwMAQsgASEHCyACQSBqJAAgBwtYAQF+IAAgAykDABDkAUEAR61CgICAgBCEIQQgAUKAgICAcINCgICAgDBRBEAgBA8LIAAgAUEGEF4iAUKAgICAcINCgICAgOAAUgRAIAAgASAEEL0BCyABC8EBAgJ/An4jAEEQayIEJABCgICAgOAAIQYCQCAAIAEQSiIBQoCAgIBwg0KAgICA4ABRBEAgASEGDAELAkAgACAEQQxqIAMpAwAgAaciBSgCBEH/////B3EiAiACEFYNACAEIAI2AgggAykDCCIHQoCAgIBwg0KAgICAMFIEQCAAIARBCGogByACIAIQVg0BIAQoAgghAgsgACAFIAQoAgwiAyACIAMgAiADShsQjgEhBgsgACABEAwLIARBEGokACAGC8ABAgN/An4jAEEQayICJABCgICAgOAAIQcCQCAAIAEQSiIBQoCAgIBwg0KAgICA4ABRBEAgASEHDAELAkAgACACQQxqIAMpAwAgAaciBigCBEH/////B3EiBCAEEFYNACACIAQgAigCDCIFayIENgIIIAAgBiAFIAMpAwgiCEKAgICAcINCgICAgDBSBH8gACACQQhqIAggBEEAEFYNASACKAIIBSAECyAFahCOASEHCyAAIAEQDAsgAkEQaiQAIAcL0wECAn8CfiMAQRBrIgIkAEKAgICA4AAhBgJAIAAgARBKIgFCgICAgHCDQoCAgIDgAFEEQCABIQYMAQsCQCAAIAJBDGogAykDACABpyIFKAIEQf////8HcUEAEFYNACACIAUo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ABogAy0AAEEBcUUEQCADKAI4IQAgAygCNCIBBEAgASAANgI4CyAABEAgACABNgI0CyADQZjVBCgCAEYEQEGY1QQgADYCAAsgAygCYBDUASADENQBCyAMEAogDBDUAQsgB0HQAWokAAsJACAAIAEQzwQLLAAgACABEM8EIgFCgICAgHCDQoCAgIDgAFIEfiAAQQNBAiABpxsQKQUgAQsLkAECAXwBfiMAQRBrIgIkAAJ+IAMpAwAiAUIgiKciAwRAQoCAgIAQIANBC2pBEkkNARoLQoCAgIDgACAAIAJBCGogARBCDQAaIAIrAwgiBJlE////////P0NlIAS9QoCAgICAgID4/wCDQoCAgICAgID4/wBSIAScIARhcXGtQoCAgIAQhAshBSACQRBqJAAgBQsmAEKAgICA4AAgACADKQMAENkFIgBBAEetQoCAgIAQhCAAQQBIGwsvAQF+An4gAygCBCICBEBCgICAgBAiBCACQQtqQRJJDQEaCyAAIAQgAyADENIECwsvAQF+An4gAygCBCICBEBCgICAgBAiBCACQQtqQRJJDQEaCyAAIAQgAyADENMECwsJACAAIAEQngILowECAn4BfyMAQRBrIgIkAAJ+IAAgARCeAiIFQoCAgIBwg0KAgICA4ABRBEAgBQwBC0EKIQcCQAJAIAQNACADKQMAIgFCgICAgHCDQoCAgIAwUQ0AIAAgARDbBCIHQQBIDQELQoCAgIDgACAAIAJBCGogBRBtDQEaIAAgAisDCCAHQQBBABC6AgwBCyAAIAUQDEKAgICA4AALIQYgAkEQaiQAIAYLkAICAX4BfCMAQRBrIgIkAEKAgICA4AAhBAJAIAAgARCeAiIBQoCAgIBwg0KAgICA4ABRBEAgASEEDAELIAAgAiABEG0NAAJAAkAgAykDACIBQoCAgIBwg0KAgICAMFEEQCACKwMAIgW9IQEMAQsgACACQQxqIAEQswENAiACKwMAIgW9IgFCgICAgICAgPj/AINCgICAgICAgPj/AFINAQsgAEKAgICAwH4gAUKAgICAwIGA/P8AfSAFvUL///////////8Ag0KAgICAgICA+P8AVhsQNCEEDAELIAIoAgwiA0HlAGtBm39NBEAgAEHrIUEAEEQMAQsgACAFQQogA0EBELoCIQQLIAJBEGokACAEC80BAgF+AnwjAEEQ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IAQgCjcDACAEQQhqIQQgCEIBfCEIDAELCyAJIAx8IQgDQCAIIAtZDQIgBiAIp0EDdGopAwAiCUIgiKdBdU8EQCAJpyIDIAMoAgBBAWo2AgALIAQgCTcDACAEQQhqIQQgCEIBfCEIDAALAAsDQAJAIAkgClEEQCADQRBqIQNCACEJA0AgCSAPUQ0CIAMgCadBA3RqKQMAIhBCIIinQXVPBEAgEKciBiAGKAIAQQFqNgIACyAEIBA3AwAgBEEIaiEEIAlCAXwhCQwACwALIAAgDiAJIAQQVEF/Rg0DIARBCGohBCAJQgF8IQkMAQsLIAogDHwhCQNAIAkgC1kNASAAIA4gCSAEEFRBf0YNAiAEQQhqIQQgCUIBfCEJDAALAAsgAiAERgRAIAFCgICAgDAgACABQTAgDUKAgICACFoEfkKAgICAwH4gDbm9IghCgICAgMCBgPz/AH0gCEL///////////8Ag0KAgICAgICA+P8AVhsFIA0LEDlBAEgiAxshC0KAgICA4AAgASADGyEIIAIhBAwDC0GJFkGo7ABB4rkCQfHqABAAAAsgASELDAELQQAhAkKAgICAMCELCwNAIAIgBEZFBEAgBEKAgICAMDcDACAEQQhqIQQMAQsLIAAgCxAMIAAgDhAMIAVBMGokACAIC8gIAgl+A38jAEEwayIOJABCgICAgDAhBQJAAkAgACAOQSBqIAAgARAgIgoQLw0AIAAgDkEYaiADKQMAQgAgDikDICIGIAYQZg0AAkAgBARAAkACQAJAIAIOAgIAAQsgBiAOKQMYfSEHQQAhAgwBCyAAIA5BEGogAykDCEIAIAYgDikDGH1CABBmDQMgAkECayECIA4pAxAhBwsgBiACrXwgB31CgICAgICAgBBTDQEgAEH0yABBABASDAILIA4gBjcDECAGIQEgAykDCCINQoCAgIBwg0KAgICAMFIEfiAAIA5BEGogDUIAIAEgARBmDQIgDikDEAUgAQsgDikDGH0iAUIAIAFCAFUbIQdBACECCyAAIAogB0KAgICACHxC/////w9YBH4gB0L/////D4MFQoCAgIDAfiAHub0iAUKAgICAwIGA/P8AfSABQv///////////wCDQoCAgICAgID4/wBWGwsiBRCfAiEBIAAgBRAMAkAgAUKAgICAcINCgICAgOAAUQ0AIA4pAxgiDSAH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AiAAIAFBNyABQQAQESIBQoCAgIBwg0KAgICAMFEEfiAAQS8QKQUgAQtBnggQsgELC+EFAwN+B38DfAJAIAAgARBVDQAgACAAKQMwQQ4QRyIFQoCAgIBwg0KAgICA4ABRDQAgBaciCSABQoCAgIBwWgR/IAGnLQAFQRBxBUEACyAJLQAFQe8BcXI6AAUCQCAAQQEgAiACQQFMGyIKQQFrIghBA3RBGGoQJCIHRQ0AIAFCIIinQXVPBEAgAaciAiACKAIAQQFqNgIACyAHIAE3AwAgAykDACIEQiCIp0F1TwRAIASnIgIgAigCAEEBajYCAAsgByAINgIQIAcgBDcDCCAHQRhqIQtBACECA0AgAiAIRwRAIAMgAkEBaiIMQQN0aikDACIEQiCIp0F1TwRAIASnIg0gDSgCAEEBajYCAAsgCyACQQN0aiAENwMAIAwhAgwBCwsgCSAHNgIgAn8gAUL/////b1gEQCAAECJBfwwBCyAAQQAgAadBMBBDCyICQQBIDQACQCACRQ0AIAAgAUEwIAFBABARIgRCgICAgHCDQoCAgIDgAFENASAEQv////8PWARAIASnIgIgCGtBACACIApOG60hBgwBCyAEQiCIp0EHa0FtTQRAAkAgBEKAgICAwIGA/P8AfCIEQv///////////wCDQoCAgICAgID4/wBWDQAgBL+dIg8gCLciEGUNACAPIBChIQ4LIA69IgQCfyAOmUQAAAAAAADgQWMEQCAOqgwBC0GAgICAeAsiAre9UQRAIAKtIQYMAgtCgICAgMB+IARCgICAgMCBgPz/AH0gBEL///////////8Ag0KAgICAgICA+P8AVhshBgwBCyAAIAQQDAsgACAFQTAgBkEBEBUaIABBgJIBIAAgAUE3IAFBABARIgFCgICAgHCDIgRCgICAgJB/UgR+IARCgICAgOAAUQ0BIAAgARAMIABBLxApBSABC0HslgEQsgEiAUKAgICAcINCgICAgOAAUQ0AIAAgBUE3IAFBARAVGiAFDwsgACAFEAwLQoCAgIDgAAswACACQQBMBEAgACABQoCAgIAwQQBBABAcDwsgACABIAMpAwAgAkEBayADQQhqEBwLgwICAX4BfyMAQSBrIgIkAEKAgICA4AAhBQJAAkAgACABECAiAUKAgICAcINCgICAgOAAUQ0AIAAgAykDABAw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ARAgCzYAIAMpAwAiAUIgiKciAkF/RiAERSACQX5xQQJHcXJFBEAgABAiQoCAgIDgAA8LIAAgARDoAQuJAQEBfiADKQMAIgFC/////29WIAFCgICAgHCDQoCAgIAgUXJFBEAgAEHe0gBBABASQoCAgIDgAA8LAkAgACABEEEiAUKAgICAcINCgICAgOAAUgRAIAMpAwgiBEKAgICAcINCgICAgDBRDQEgACABIAQQ2gRFDQEgACABEAwLQoCAgIDgAA8LIAELnwIBA34gAUL/////b1gEQCAAECJCgICAgOAADwtCgICAgOAAIQUCfiAAIAFBNyABQQAQESIEQoCAgIBwg0KAgICAMFEEQCAAQZQBECkMAQsgACAEEDQLIgRCgICAgHCDIgZCgICAgOAAUgR+An4gACABQTMgAUEAEBEiAUKAgICAcINCgICAgDBRBEAgAEEvECkMAQsgACABEDQLIgFCgICAgHCDIgVCgICAgOAAUQRAIAAgBBAMQoCAgIDgAA8LAkAgBkKAgICAkH9RBEAgBKcoAgRB/////wdxRQ0BCyAFQoCAgICQf1EEQCABpygCBEH/////B3FFDQELIABB7JYBIARBpJIBELIBIQQLIAAgBCABELYCBUKAgICA4AALC5UCAgF+An8jAEEwayICJABCgICAgOAAIQECQCAAIAJBKGogAykDABCkAQ0AIAAQ4gEiBUKAgICAcINCgICAgOAAUQ0AIAAgAkEUaiADKQMIEK4CIgZFBEAgACAFEAwMAQsgACgC2AEgAhC7ASACQgEQMhogAiACKQMoIgGnIgdBARC5ARogAiACQn9B/////wNBARB6GiAFp0EEaiIDIAYgAhCyBBoCQCAERSABUHINACACQgEQMhogAiAHQQFrQQEQuQEaIAMgAhDyAUEASA0AIAJCARAyGiACIAdBARC5ARogAyADIAJB/////wNBARDuARoLIAIQGSAAIAYgAkEUahDmASAFEK8CIQELIAJBMGokACABCwkAIAAgARDcBAt0AgJ+AX8gACABENwEIgFCgICAgHCDQoCAgIDgAFEEQCABDwtBCiEGAn4CQCACRQ0AIAMpAwAiBEKAgICAcINCgICAgDBRDQAgACAEENsEIgZBAE4NAEKAgICA4AAMAQsgACABIAYQogULIQUgACABEAwgBQvOAQIBfwJ+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/////////wCDQoCAgICAgID4/wBWGwvvAQEDfiMAQRBrIgIkAEKAgICA4AAhBAJAIAAgACABECAiAUEBELsCIgVCgICAgHCDQoCAgIDgAFENACAFQiCIpyIDQQAgA0ELakESSRtFBEAgACACQQhqIAUQQkEASA0BQoCAgIAgIQQgAikDCEKAgICAgICA+P8Ag0KAgICAgICA+P8AUQ0BC0KAgICA4AAhBCAAIAFB48oAEIcCIgZCgICAgHCDQoCAgIDgAFENACAAIAYQNUUEQCAAQergAEEAEBIgACAGEAwMAQsgACAGIAFBAEEAEDYhBAsgACABEAwgACAFEAwgAkEQaiQAIAQLjAIDAXwBfgF/IwBBEGsiAiQAQoCAgIDgACEFAkAgACACQQhqIgYgARCmAg0AIAAgBiADKQMAEEINACACAn4gAisDCCIEvUKAgICAgICA+P8Ag0KAgICAgICA+P8AUgRAIASdIgREAAAAAACwnUCgIAQgBEQAAAAAAABZQGMbIAQgBEQAAAAAAAAAAGYbIQQLIAS9IgUCfyAEmUQAAAAAAADgQWMEQCAEqgwBC0GAgICAeAsiA7e9UQRAIAOtDAELQoCAgIDAfiAFQoCAgIDAgYD8/wB9IAVC////////////AINCgICAgICAgPj/AFYbCzcDACAAIAFBASACQREQ+AQhBQsgAkEQaiQAIAULigEDAX4BfAF/IwBBEGsiAiQAQoCAgIDgACEEAkAgACACQQhqIgYgARCmAg0AIAAgBiADKQMAEEINACAAIAEgAisDCCIFnUQAAAAAAAAAAKBEAAAAAAAA+H8gBUQAANzCCLI+Q2UbRAAAAAAAAPh/IAVEAADcwgiyPsNmGxD5BCEECyACQRBqJAAgBAvZAQIBfAF+IwBB0ABrIgIkAAJ+QoCAgIDgACAAIAEgAiAEQQ9xQQAQ1QMiAEEASA0AGkKAgICAwH4gAEUNABogBEGAAnEEQCACIAIrAwBEAAAAAACwncCgOQMACyACIARBBHZBD3FBA3RqKwMAIgW9IgECfyAFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAsiBLe9UQRAIAStDAELQoCAgIDAfiABQoCAgIDAgYD8/wB9IAFC////////////AINCgICAgICAgPj/AFYbCyEGIAJB0ABqJAAgBguHAQIBfAF+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IAMpAxAiBUIgiKdBdU8EQCAFpyIJIAkoAgBBAWo2AgALIAggBTcDCAJAIAQNACADKQMYIgVCIIinQXVJDQAgBaciCSAJKAIAQQFqNgIACyAIIAE3AxAgCCAFNwMAIAAgByAGQQMgCBAcIQUgACAIKQMAEAwgBEUEQCAAIAgpAwgQDAsgAygCBCEDIAAoAhAgAhDiAyAFQoCAgIBwg0KAgICA4ABRDQIgACAFEAwLDAALAAsgCEEgaiQAIAULVAAgACABIAJBImoQWiIARQRAQoCAgIDgAA8LIAAoAgwiAEEATgRAIACtDwtCgICAgMB+IAC4vSIBQoCAgIDAgYD8/wB9IAFCgICAgICAgPj/AFYbC1kBAX8gACABIARBImoQWiICRQRAQoCAgIDgAA8LIAJBBGohAyACKAIIIQQDfiADIARGBH5CgICAgDAFIARBEGshBSAEKAIEIQQgACgCECACIAUQgAUMAQsLC3UAIAAgASAEQSJqEFoiAkUEQEKAgICA4AAPCyAAIAIgAykDACIBQgAgAUIgiKdBB2tBbk8bIAEgAUKAgICAwIGA/P8AfEL///////////8Ag1AbEPICIgNFBEBCgICAgBAPCyAAKAIQIAIgAxCABUKBgICAEAthACAAIAEgBEEiahBaIgJFBEBCgICAgOAADwsgACACIAMpAwAiAUIAIAFCIIinQQdrQW5PGyABIAFCgICAgMCBgPz/AHxC////////////AINQGxDyAkEAR61CgICAgBCECwgAQoCAgIAwC0oAAkAgBSkDACIBQoCAgIBwVA0AIAGnIgIvAQZBLEcNACACKAIgIgJFDQAgAkEBOgARIAAgARAMIAVCgICAgCA3AwALQoCAgIAwC88BAQN+IwBBEGsiAiQAQoCAgIDgACEFAkACQAJ+QoCAgIAwIABCgICAgDAgACADEMAEIgRCgICAgHCDQoCAgIDgAFENABogAiAENwMIQoCAgIDgACAAQcMAQQBBAEEBIAJBCGoQhQEiBkKAgICAcINCgICAgOAAUQ0AGiAAEDMiAUKAgICAcINCgICAgOAAUg0BIAYLIQEgACAEEAwgACABEAwMAQsgACABQYQBIARBBxAVGiAAIAFBhQEgBkEHEBUaIAEhBQsgAkEQaiQAIAULswMCA38CfiMAQdAAayIGJABBfyEHAkAgACAG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QoCAgIBwg0KAgICA4ABRcg0AIAAgAykDCCIGEDVFDQBCgICAgOAAIQQCQCAAEDMiBUKAgICAcINCgICAgOAAUQRAIAEhBQwBCyAAIAVBLyABQQcQFUEASA0AIAAgBUEvIAYQhQUhBAsgACAFEAwMAQsgASEECyAHQRBqJAAgBAsQACAAIAMpAwBBESAEELICC6UDAQR+IwBBEGsiAyQAIAQCfwJAAkACQAJAIAAgAUEqEFoiAkUEQEKAgICAMCEBDAELIAIoAhgEQEKAgICAMCEBQQEMBQsgACACKQMAIgggAikDCCIGEMUBIgFCgICAgHCDIgdCgICAgOAAUg0BC0KAgICAMCEHDAELIAdCgICAgCBRBEAgAkEBNgIYQoCAgIAwIQFBAQwDCyACKAIQBEAgACAAIAFCABBOEDQiB0KAgICAcIMiCUKAgICA4ABRDQECQCAJQoCAgICQf1INACAHpygCBEH/////B3ENACAAIANBCGogACAIQdYAIAhBABAREKEBQQBIDQIgACAIQdYAAn4gBqcgAykDCCACKAIUEPQCIgZCgICAgAh8Qv////8PWARAIAZC/////w+DDAELQoCAgIDAfiAGub0iBkKAgICAwIGA/P8AfSAGQv///////////wCDQoCAgICAgID4/wBWGwsQOUEASA0CCyAAIAcQDAwCCyACQQE2AhgMAQsgACABEAwgACAHEAxCgICAgOAAIQELQQALNgIAIANBEGokACABCyAAIAFCIIinQXVPBEAgAaciACAAKAIAQQFqNgIACyABC/EHAgR/C34jAEEwayIEJAACQCABQv////9vWARAIAAQIkKAgICA4AAhAQwBC0KAgICAMCEIAkACQCAAIAMpAwAQJSIPQoCAgIBwg0KAgICA4ABRBEBCgICAgDAhDEKAgICAMCEBQoCAgIAwIQ1CgICAgDAhEAwBCyAAIAEgACkDSBD9ASIQQoCAgIBwg0KAgICA4ABRBEBCgICAgDAhDEKAgICAMCEBQoCAgIAwIQ0MAQsCQAJAIAAgACABQe4AIAFBABAREDQiDUKAgICAcINCgICAgOAAUQ0AIA2nIgJB9QBBABCgASEGIAJB+QBBABCgAUEASARAIABB7JYBIA1B0A4QsgEiDUKAgICAcINCgICAgOAAUQ0BCyAEIA03AyggBCABNwMgIAAgEEECIARBIGoQowEiDEKAgICAcINCgICAgOAAUQ0BIAAQOyIBQoCAgIBwg0KAgICA4ABRBEBCgICAgOAAIQEMAwtBfyECAkAgAykDCCIJQoCAgIBwg0KAgICAMFENACAAIARBHGogCRB1QQBIDQMgBCgCHCICDQAMBAsCQAJAIA+nIgcpAgQiCKdB/////wdxIgUEQCAGQX9zQR92IQYgCEL/////B4MhESACrSESQgAhCUKAgICAMCEIQQAhAgNAIAKtIQogAiEDA0AgAyAFTw0DIAAgDEHWACADrSIOEDlBAEgNByAAIAgQDAJAIAAgDCAPEMUBIghCgICAgHCDIgtCgICAgCBRDQAgC0KAgICA4ABRDQggACAEQRBqIAAgDEHWACAMQQAQERChAQ0IIAQgBCkDECILIBEgCyARUxsiCzcDECAKIAtRDQAgACAHIAIgAxCOASIKQoCAgIBwg0KAgICA4ABRDQggACABIAkgChBnQQBIDQggCUIBfCIKIBJRDQkgACAEQQhqIAgQLw0IIAunIQJCASELIAlCASAEKQMIIg4gDkIBVxt8IQkDQCAJIApRDQMgACAAIAggCxBsEDQiDkKAgICAcINCgICAgOAAUQ0JIAAgASAKIA4QZ0EASA0JIAtCAXwhCyAKQgF8IgogElINAAsMCQsgByAOIAYQ9AKnIQMMAAsACwALIAAgDCAPEMUBIghCgICAgHCDIglCgICAgCBSDQFCACEJQQAhAgsgACAHIAIgBSACIAVJGyAFEI4BIgpCgICAgHCDQoCAgIDgAFENAyAAIAEgCSAKEGdBAEgNAwwECyAJQoCAgIDgAFINAwwCC0KAgICAMCEMC0KAgICAMCEBCyAAIAEQDEKAgICA4AAhAQsgACAPEAwgACAQEAwgACAMEAwgACANEAwgACAIEAwLIARBMGokACABC+ACAQd+IAFC/////29YBEAgABAiQoCAgIDgAA8LQoCAgIDgACEIQoCAgIAwIQYCQAJAAkAgACADKQMAECUiB0KAgICAcINCgICAgOAAUQRAQoCAgIAwIQQMAQsgACABQdYAIAFBABARIgRCgICAgHCDQoCAgIDgAFENACAAIARCABBNRQRAIAAgAUHWAEIAEDlBAEgNAQsgACABIAcQxQEiBUKAgICAcIMiCUKAgICA4ABRDQEgACABQdYAIAFBABARIgZCgICAgHCDQoCAgIDgAFENAQJAIAAgBiAEEE0EQCAAIAQQDAwBCyAAIAFB1gAgBBA5QQBODQBCgICAgDAhBAwCCyAAIAcQDCAAIAYQDEL/////DyEIIAlCgICAgCBRDQIgACAFQdgAIAVBABARIQogACAFEAwgCg8LQoCAgIAwIQULIAAgBRAMIAAgBxAMIAAgBhAMIAAgBBAMCyAIC84EAgZ+AX8jAEEgayICJAACQCABQv////9vWARAIAAQIkKAgICA4AAhBwwBC0KAgICA4AAhB0KAgICAMCEIAkAgACADKQMAECUiCUKAgICAcINCgICAgOAAUQRAQoCAgIAwIQRCgICAgDAhBUKAgICAMCEGDAELAkACQCAAIAEgACkDSBD9ASIGQoCAgIBwg0KAgICA4ABRBEBCgICAgDAhBAwBCyAAIAAgAUHuACABQQAQERA0IgRCgICAgHCDQoCAgIDgAFINAQtCgICAgDAhBQwBCyACIAQ3AxggAiABNwMQIAAgBkECIAJBEGoQowEiBUKAgICAcINCgICAgOAAUQ0AIAAgAkEIaiAAIAFB1gAgAUEAEBEQoQENACAAIAVB1gACfiACKQMIIgFCgICAgAh8Qv////8PWARAIAFC/////w+DDAELQoCAgIDAfiABub0iAUKAgICAwIGA/P8AfSABQv///////////wCDQoCAgICAgID4/wBWGwsQOUEASA0AQoCAgIDgACEIIABBKhCGASIBQoCAgIBwg0KAgICA4ABRDQAgAEEgECQiA0UEQCABIQgMAQsgAyAJNwMIIAMgBTcDACADIASnIgpB5wBBABCgAUF/c0EfdjYCECAKQfUAQQAQoAEhCiADQQA2AhggAyAKQX9zQR92NgIUIAFCgICAgHBaBEAgAacgAzYCIAsgACAGEAwgACAEEAwgASEHDAELIAAgCRAMIAAgBhAMIAAgBBAMIAAgBRAMIAAgCBAMCyACQSBqJAAgBwv+BAIIfgJ/IwBBEGsiAiQAAkAgAUL/////b1gEQCAAECJCgICAgOAAIQcMAQtCgICAgOAAIQdCgICAgDAhBQJAAkACQCAAIAMpAwAQJSIJQoCAgIBwg0KAgICA4ABRBEBCgICAgDAhCAwBCyAAIAFB7gAgAUEAEBEiCEKAgICAcINCgICAgOAAUQ0AIAAgCBA0IghCgICAgHCDQoCAgIDgAFENACAIp0HnAEEAEKABQX9GBEAgACABIAkQxQEhBwwDCyAAIAAgAUHwACABQQAQERAnIgxBAEgNACAAIAFB1gBCABA5QQBIDQAgABA7IgZCgICAgHCDQoCAgIDgAFEEQEKAgICA4AAhBgwCCyAJpyENA0ACQCAAIAUQDCAAIAEgCRDFASIFQoCAgIBwgyIEQoCAgIAgUQ0AIARCgICAgOAAUQ0DAkAgACAAIAVCABBOEDQiBEKAgICAcIMiC0KAgICAkH9SBEBBACEDIAtCgICAgOAAUQ0FDAELIASnKAIEQf////8HcUUhAwsgACAGIAogBBB7QQBIDQMgCkIBfCEKIANFDQEgACACQQhqIAAgAUHWACABQQAQERChAUEASA0DIAAgAUHWAAJ+IA0gAikDCCAMEPQCIgRCgICAgAh8Qv////8PWARAIARC/////w+DDAELQoCAgIDAfiAEub0iBEKAgICAwIGA/P8AfSAEQv///////////wCDQoCAgICAgID4/wBWGwsQOUEATg0BDAMLCyAKpwRAIAYhBwwDCyAAIAYQDEKAgICAICEHDAILQoCAgIAwIQYLIAAgBhAMCyAAIAUQDCAAIAgQDCAAIAkQDAsgAkEQaiQAIAcLjgEBAn8gASgCACICQQBKBEAgASACQQFrIgI2AgACQCACDQAgAS0ABEHwAXFBEEcNACABKAIIIgIgASgCDCIDNgIEIAMgAjYCACABQQA2AgggACgCYCICIAFBCGoiAzYCBCABIABB4ABqNgIMIAEgAjYCCCAAIAM2AmALDwtB5oQBQajsAEHWLEHN4wAQAAAL8BQCDn8OfiMAQZABayIEJAACQCABQv////9vWARAIAAQIkKAgICA4AAhFQwBCyADKQMIIR4gACAEQThqQQAQPhogBEEANgIwIARCgICAgMAANwMoIAQgADYCACAEIARBCGoiBzYCBEKAgICA4AAhFUKAgICAMCEWQoCAgIAwIRdCgICAgDAhE0KAgICAMCEUQoCAgIAwIR1CgICAgDAhHAJAAkAgACADKQMAECUiGEKAgICAcINCgICAgOAAUQ0AIAAgHhA1IglFBEAgACAeECUiHUKAgICAcINCgICAgOAAUQ0BIB2nIQULAkACQCAAIAFB7gAgAUEAEBEiHEKAgICA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QQRqIQMMAAsACwuaAQEHfyABpygCICIDBEAgAEEQaiEEIANBBGohBiADKAIIIQIDQCACIAZHBEAgAigCBCEIIAJBEGshBSACQQxrKAIARQRAAkAgAygCAARAIAUQnAUMAQsgACACKQMQECELIAAgAikDGBAhCyAEIAUgACgCBBEAACAIIQIMAQsLIAQgAygCECAAKAIEEQAAIAQgAyAAKAIEEQAACwsbAQF/IAGnKAIgIgMEQCAAIAMoAgwgAhEAAAsLUgEDfyABpygCICICBEAgAigCBCIDBEAgAigCACIEIAM2AgQgAyAENgIAIAJCADcCAAsgACACNQIMQoCAgIBwhBAhIABBEGogAiAAKAIEEQAACwupAQEGfyABpygCICIDBEAgA0EMaiEFIAMoAhAhAgNAIAIgBUcEQCACKAIEIQcgAkIANwIAIAIoAgghBCAHIQIgBC8BBkEgRg0BIARCADcCJAwBCwsCQAJAIAMtAAVFDQAgACgCyAEiAkUNACAAKALQASADKAIIIAIRAAAMAQsgAygCGCICRQ0AIAAgAygCFCADKAIIIAIRBgALIABBEGogAyAAKAIEEQAACwspAQF/IAAgAaciAjUCJEKAgICAkH+EECEgACACNQIgQoCAgICQf4QQIQshACABpygCICkDACIBQoCAgIBgWgRAIAAgAacgAhEAAAsLaQEDfyAAIAGnKAIgIgIpAwAQISACLQARRQRAA0AgAigCFCEEIAMgAigCDE9FBEAgACAEIANBA3RqKAIEEMcBIANBAWohAwwBCwsgAEEQaiAEIAAoAgQRAAALIABBEGogAiAAKAIEEQAAC2wBA38CQCABQoCAgIBwVA0AIAGnIgMvAQZBD0cNACADKAIgIgRFDQAgBEEIaiEFQQAhAwNAIAMgBC0ABU8NASAFIANBA3RqKQMAIgFCgICAgGBaBEAgACABpyACEQAACyADQQFqIQMMAAsACwtqAQN/AkAgAUKAgICAcFQNACABpyICLwEGQQ9HDQAgAigCICIDRQ0AIANBCGohBEEAIQIDQCACIAMtAAVPRQRAIAAgBCACQQN0aikDABAhIAJBAWohAgwBCwsgAEEQaiADIAAoAgQRAAALC38BA38gAacoAiAiBCkDACIBQoCAgIBgWgRAIAAgAacgAhEAAAsgBCkDCCIBQoCAgIBgWgRAIAAgAacgAhEAAAsgBEEYaiEFA0AgBCgCECADSgRAIAUgA0EDdGopAwAiAUKAgICAYFoEQCAAIAGnIAIRAAALIANBAWohAwwBCwsLWQEDfyAAIAGnKAIgIgIpAwAQISAAIAIpAwgQISACQRhqIQQDQCADIAIoAhBORQRAIAAgBCADQQN0aikDABAhIANBAWohAwwBCwsgAEEQaiACIAAoAgQRAAALcgEEfyABpyIDKAIgIQQgAygCJCEFIAMoAigiAwRAIAAgAyACEQAACyAEBEACQCAFRQ0AQQAhAwNAIAMgBCgCPE4NASAFIANBAnRqKAIAIgYEQCAAIAYgAhEAAAsgA0EBaiEDDAALAAsgACAEIAIRAAALC3wBA38gAaciAigCKCIDBEAgACADrUKAgICAcIQQIQsgAigCICIDBEAgAigCJCIEBEBBACECA0AgAiADKAI8TkUEQCAAIAQgAkECdGooAgAQ5QEgAkEBaiECDAELCyAAQRBqIAQgACgCBBEAAAsgACADrUKAgICAYIQQIQsLEgAgAacoAiAiAARAIAAQngMLCx4AIAGnKQMgIgFCgICAgGBaBEAgACABpyACEQAACwsZACAAIAGnIgApAyAQISAAQoCAgIAwNwMgC0QBAn8gAachBANAIAQoAiggA0sEQCAEKAIkIANBA3RqKQMAIgFCgICAgGBaBEAgACABpyACEQAACyADQQFqIQMMAQsLC0YBA38gAachAwNAIAMoAiQhBCACIAMoAihPRQRAIAAgBCACQQN0aikDABAhIAJBAWohAgwBCwsgAEEQaiAEIAAoAgQRAAALEQAgAEEQaiACIAAoAgQRAAAL2wECAX8CfiMAQSBrIgMkACABQQNGBEAgAikDECEEIAIpAwghBQJAIAAgA0EQaiACKQMAEKoFQQBIBEBCgICAgOAAIQQMAQsgACAEIAVBAiADQRBqEBwiBEKAgICAcINCgICAgOAAUQRAIAAoAhAiASkDgAEhBCABQoCAgIAgNwOAASADIAQ3AwggACADKQMYQoCAgIAwQQEgA0EIahAcIQQgACADKQMIEAwLIAAgAykDEBAMIAAgAykDGBAMCyADQSBqJAAgBA8LQZuCAUGo7ABBy/UCQaDtABAAAAuIAQIBfgF/QQAhAkKAgICAMCEBA0ACQCACQQJHBH4gBSACQQN0IgRq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Y29kZV0KfQBjYW5ub3QgbWl4ID8/IHdpdGggJiYgb3IgfHwAcHJveHk6IHByb3BlcnR5IG5vdCBwcmVzZW50IGluIHRhcmdldCB3ZXJlIHJldHVybmVkIGJ5IG5vbiBleHRlbnNpYmxlIHByb3h5AHJldm9rZWQgcHJveHkAUHJveHkAYWRkX3Byb3BlcnR5AHByb3h5OiBjYW5ub3Qgc2V0IHByb3BlcnR5AG5vIHNldHRlciBmb3IgcHJvcGVydHkAdmFsdWUgaGFzIG5vIHByb3BlcnR5AGNvdWxkIG5vdCBkZWxldGUgcHJvcGVydHkAcHJveHk6IGR1cGxpY2F0ZSBwcm9wZXJ0eQBKU19EZWZpbmVBdXRvSW5pdFByb3BlcnR5AGhhc093blByb3BlcnR5AHByb3h5OiBpbmNvbnNpc3RlbnQgZGVsZXRlUHJvcGVydHkAcHJveHk6IGluY29uc2lzdGVudCBkZWZpbmVQcm9wZXJ0eQBKU19EZWZpbmVQcm9wZXJ0eQAhbXItPmVtcHR5AGluZmluaXR5AEluZmluaXR5AG91dCBvZiBtZW1vcnkAdW5rbm93biB1bmljb2RlIGdlbmVyYWwgY2F0ZWdvcnkAR2VuZXJhbF9DYXRlZ29yeQBldmVyeQBhbnkAYXBwbHkAJyVzJyBpcyByZWFkLW9ubHkAZXhwZWN0aW5nIGNhdGNoIG9yIGZpbmFsbHkAc3RpY2t5AGJpZ2ludCBhcmUgZm9yYmlkZGVuIGluIEpTT04uc3RyaW5naWZ5AHN1YmFycmF5AGVtcHR5IGFycmF5AG5vbiBpbnRlZ2VyIGluZGV4IGluIHR5cGVkIGFycmF5AG5lZ2F0aXZlIGluZGV4IGluIHR5cGVkIGFycmF5AG91dC1vZi1ib3VuZCBpbmRleCBpbiB0eXBlZCBhcnJheQBjYW5ub3QgY3JlYXRlIG51bWVyaWMgaW5kZXggaW4gdHlwZWQgYXJyYXkAaXNBcnJheQBUeXBlZEFycmF5AGdldERheQBnZXRVVENEYXkAZ3JvdXBCeQBtLT5kZnNfYW5jZXN0b3JfaW5kZXggPD0gbS0+ZGZzX2luZGV4AGpzX2dldF9hdG9tX2luZGV4AGludmFsaWQgYXJyYXkgaW5kZXgASlNfQXRvbUlzQXJyYXlJbmRleABmaW5kTGFzdEluZGV4AGZpbmRJbmRleABpbnZhbGlkIGV4cG9ydCBzeW50YXgAaW52YWxpZCBhc3NpZ25tZW50IHN5bnRheABtYXgAXHUlMDR4AGludmFsaWQgb3Bjb2RlOiBwYz0ldSBvcGNvZGU9MHglMDJ4AC0rICAgMFgweAAtMFgrMFggMFgtMHgrMHggMHgAbGluZSB0ZXJtaW5hdG9yIG5vdCBhbGxvd2VkIGFmdGVyIHRocm93AGJmX3BvdwBub3cAaW50ZWdlciBvdmVyZmxvdwBzdGFjayBvdmVyZmxvdwBtdXN0IGJlIGNhbGxlZCB3aXRoIG5ldwBpc1ZpZXcARGF0YVZpZXcAcmF3ACV1AGNsYXNzIGRlY2xhcmF0aW9ucyBjYW4ndCBhcHBlYXIgaW4gc2luZ2xlLXN0YXRlbWVudCBjb250ZXh0AGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBjYW4ndCBhcHBlYXIgaW4gc2luZ2xlLXN0YXRlbWVudCBjb250ZXh0AGxleGljYWwgZGVjbGFyYXRpb25zIGNhbid0IGFwcGVhciBpbiBzaW5nbGUtc3RhdGVtZW50IGNvbnRleHQAZHVwbGljYXRlIGFyZ3VtZW50IG5hbWVzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dABkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dABpbXBvcnQubWV0YSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgY29udGV4dABKU19GcmVlQ29udGV4dABKU0NvbnRleHQAanNfbWFwX2l0ZXJhdG9yX25leHQAanNfZ2VuZXJhdG9yX25leHQAanNfYXN5bmNfZ2VuZXJhdG9yX3Jlc3VtZV9uZXh0AHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0AHR0AGV4cG9ydGVkIHZhcmlhYmxlICclcycgZG9lcyBub3QgZXhpc3QAcHJpdmF0ZSBjbGFzcyBmaWVsZCAnJXMnIGRvZXMgbm90IGV4aXN0AHRlc3QAYXNzaWdubWVudCByZXN0IHByb3BlcnR5IG11c3QgYmUgbGFzdABwdmFsID09IGxhc3QAZmluZExhc3QAYmZfc3FydABzb3J0AGNicnQAdHJpbVN0YXJ0AHBhZFN0YXJ0AHVua25vd24gdW5pY29kZSBzY3JpcHQAU2NyaXB0AGh5cG90AGZyZWVfemVyb19yZWZjb3VudABzdHJfaW5kZXggPT0gbnVtX2tleXNfY291bnQgKyBzdHJfa2V5c19jb3VudABudW1faW5kZXggPT0gbnVtX2tleXNfY291bnQAc3ltX2luZGV4ID09IGF0b21fY291bnQAbGFiZWwgPj0gMCAmJiBsYWJlbCA8IHMtPmxhYmVsX2NvdW50AGxhYjEgPj0gMCAmJiBsYWIxIDwgcy0+bGFiZWxfY291bnQAdmFsIDwgcy0+Y2FwdHVyZV9jb3VudAB2YWwyIDwgcy0+Y2FwdHVyZV9jb3VudABpbnZhbGlkIHJlcGVhdCBjb3VudABpbnZhbGlkIHJlcGV0aXRpb24gY291bnQAZm9udABpbnZhbGlkIGNvZGUgcG9pbnQAZnJvbUNvZGVQb2ludABpbnZhbGlkIGhpbnQAY2Fubm90IGNvbnZlcnQgTmFOIG9yIEluZmluaXR5IHRvIGJpZ2ludABjYW5ub3QgY29udmVydCB0byBiaWdpbnQAYm90aCBvcGVyYW5kcyBtdXN0IGJlIGJpZ2ludABub3QgYSBiaWdpbnQAcHJpdmF0ZSBtZXRob2QgaXMgYWxyZWFkeSBwcmVzZW50AGVuY29kZVVSSUNvbXBvbmVudABkZWNvZGVVUklDb21wb25lbnQAdW5leHBlY3RlZCBlbmQgb2YgY29tbWVudABpbnZhbGlkIHN3aXRjaCBzdGF0ZW1lbnQAQmlnSW50AHBhcnNlSW50AGR1cGxpY2F0ZSBkZWZhdWx0AHNwbGl0AGV4cGVjdGluZyBoZXggZGlnaXQAdHJpbVJpZ2h0AHJlZHVjZVJpZ2h0AHVuc2hpZnQAdHJpbUxlZnQAaW52YWxpZCBvZmZzZXQAaW52YWxpZCBieXRlT2Zmc2V0AGdldFRpbWV6b25lT2Zmc2V0AHJlc29sdmluZyBmdW5jdGlvbiBhbHJlYWR5IHNldABwcm94eTogaW5jb25zaXN0ZW50IHNldABmaW5kX2p1bXBfdGFyZ2V0AGV4cGVjdGluZyB0YXJnZXQAaW52YWxpZCBkZXN0cnVjdHVyaW5nIHRhcmdldABwcm94eTogaW5jb25zaXN0ZW50IGdldABXZWFrU2V0AGNvbnN0cnVjdABKU19GcmVlQXRvbVN0cnVjdAB1c2Ugc3RyaWN0AFJlZmxlY3QAcmVqZWN0AG5vdCBhbiBBc3luY0dlbmVyYXRvciBvYmplY3QAY2Fubm90IGNvbnZlcnQgdG8gb2JqZWN0AGludmFsaWQgYnJhbmQgb24gb2JqZWN0AG9wZXJhbmQgJ3Byb3RvdHlwZScgcHJvcGVydHkgaXMgbm90IGFuIG9iamVjdABpdGVyYXRvciBtdXN0IHJldHVybiBhbiBvYmplY3QAbm90IGEgRGF0ZSBvYmplY3QAbm90IGEgb2JqZWN0AEpTT2JqZWN0AHBhcnNlRmxvYXQAZmxhdABub3RoaW5nIHRvIHJlcGVhdABjb25jYXQAY29kZVBvaW50QXQAY2hhckF0AGNoYXJDb2RlQXQAa2V5cwBwcm94eTogdGFyZ2V0IHByb3BlcnR5IG11c3QgYmUgcHJlc2VudCBpbiBwcm94eSBvd25LZXlzACAgZmFzdCBhcnJheXMAZXhwb3J0ICclcycgaW4gbW9kdWxlICclcycgaXMgYW1iaWd1b3VzAHByaXZhdGUgY2xhc3MgZmllbGQgJyVzJyBhbHJlYWR5IGV4aXN0cwB0b28gbWFueSBhcmd1bWVudHMAVG9vIG1hbnkgY2FsbCBhcmd1bWVudHMAdG9vIG1hbnkgZWxlbWVudHMAICBlbGVtZW50cwBpbnZhbGlkIG51bWJlciBvZiBkaWdpdHMAYmluYXJ5IG9iamVjdHMAaW52YWxpZCBwcm9wZXJ0eSBhY2Nlc3MAanNfb3BfZGVmaW5lX2NsYXNzAGZkLT5ieXRlX2NvZGUuYnVmW2RlZmluZV9jbGFzc19wb3NdID09IE9QX2RlZmluZV9jbGFzcwBfX2dldENsYXNzAHNldEhvdXJzAGdldEhvdXJzAHNldFVUQ0hvdXJzAGdldFVUQ0hvdXJzAGdhdGhlcl9hdmFpbGFibGVfYW5jZXN0b3JzAGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMAd2l0aFJlc29sdmVycwB0b28gbWFueSBpbWJyaWNhdGVkIHF1YW50aWZpZXJzAHVuaWNvZGVfcHJvcF9vcHMAYWNvcwBmb3IgYXdhaXQgaXMgb25seSB2YWxpZCBpbiBhc3luY2hyb25vdXMgZnVuY3Rpb25zAG5ldy50YXJnZXQgb25seSBhbGxvd2VkIHdpdGhpbiBmdW5jdGlvbnMAYnl0ZWNvZGUgZnVuY3Rpb25zAEMgZnVuY3Rpb25zAHByb3h5OiBpbmNvbnNpc3RlbnQgcHJldmVudEV4dGVuc2lvbnMAU2NyaXB0X0V4dGVuc2lvbnMAYXRvbXMAcHJveHk6IHByb3BlcnRpZXMgbXVzdCBiZSBzdHJpbmdzIG9yIHN5bWJvbHMAZ2V0T3duUHJvcGVydHlTeW1ib2xzAHJlc29sdmVfbGFiZWxzAEpTX0V2YWxUaGlzAHN0cmluZ3MAaW52YWxpZCBkZXNjcmlwdG9yIGZsYWdzAGludmFsaWQgcmVndWxhciBleHByZXNzaW9uIGZsYWdzAHZhbHVlcwBzZXRNaW51dGVzAGdldE1pbnV0ZXMAc2V0VVRDTWludXRlcwBnZXRVVENNaW51dGVzAHRvbyBtYW55IGNhcHR1cmVzACAgc2hhcGVzAGdldE93blByb3BlcnR5TmFtZXMAZ2NfZnJlZV9jeWNsZXMAYWRkX2V2YWxfdmFyaWFibGVzAHJlc29sdmVfdmFyaWFibGVzAHRvbyBtYW55IGxvY2FsIHZhcmlhYmxlcwB0b28gbWFueSBjbG9zdXJlIHZhcmlhYmxlcwBjb21wYWN0X3Byb3BlcnRpZXMAICBwcm9wZXJ0aWVzAGRlZmluZVByb3BlcnRpZXMAZW50cmllcwBmcm9tRW50cmllcwB0b28gbWFueSByYW5nZXMAaW5jbHVkZXMAaGFzSW5kaWNlcwBzZXRNaWxsaXNlY29uZHMAZ2V0TWlsbGlzZWNvbmRzAHNldFVUQ01pbGxpc2Vjb25kcwBnZXRVVENNaWxsaXNlY29uZHMAc2V0U2Vjb25kcwBnZXRTZWNvbmRzAHNldFVUQ1NlY29uZHMAZ2V0VVRDU2Vjb25kcwBpdGFsaWNzAGFicwBwcm94eTogaW5jb25zaXN0ZW50IGhhcwAlLipzACAoJXMAc2V0ICVzAGdldCAlcwAgICAgYXQgJXMAbm90IGEgJXMAdW5zdXBwb3J0ZWQga2V5d29yZDogJXMAc3Vic3RyAHByb3h5OiBpbmNvbnNpc3RlbnQgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yAHN1cGVyKCkgaXMgb25seSB2YWxpZCBpbiBhIGRlcml2ZWQgY2xhc3MgY29uc3RydWN0b3IAcGFyZW50IGNsYXNzIG11c3QgYmUgY29uc3RydWN0b3IAbm90IGEgY29uc3RydWN0b3IAQXJyYXkgSXRlcmF0b3IAU2V0IEl0ZXJhdG9yAE1hcCBJdGVyYXRvcgBSZWdFeHAgU3RyaW5nIEl0ZXJhdG9yAG5vdCBhbiBBc3luYy1mcm9tLVN5bmMgSXRlcmF0b3IAY2Fubm90IGludm9rZSBhIHJ1bm5pbmcgZ2VuZXJhdG9yAG5vdCBhIGdlbmVyYXRvcgBBc3luY0dlbmVyYXRvcgBzeW50YXggZXJyb3IAU3ludGF4RXJyb3IARXZhbEVycm9yAEludGVybmFsRXJyb3IAQWdncmVnYXRlRXJyb3IAVHlwZUVycm9yAFJhbmdlRXJyb3IAUmVmZXJlbmNlRXJyb3IAVVJJRXJyb3IAZmxvb3IAZm9udGNvbG9yAGFuY2hvcgBmb3IAa2V5Rm9yAGV4cGVjdGluZyBzdXJyb2dhdGUgcGFpcgBhIGRlY2xhcmF0aW9uIGluIHRoZSBoZWFkIG9mIGEgZm9yLSVzIGxvb3AgY2FuJ3QgaGF2ZSBhbiBpbml0aWFsaXplcgAnYXJndW1lbnRzJyBpZGVudGlmaWVyIGlzIG5vdCBhbGxvd2VkIGluIGNsYXNzIGZpZWxkIGluaXRpYWxpemVyAGludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgZ2V0dGVyIG9yIHNldHRlcgBpbnZhbGlkIHNldHRlcgBpbnZhbGlkIGdldHRlcgBmaWx0ZXIAbWlzc2luZyBmb3JtYWwgcGFyYW1ldGVyACJ1c2Ugc3RyaWN0IiBub3QgYWxsb3dlZCBpbiBmdW5jdGlvbiB3aXRoIGRlZmF1bHQgb3IgZGVzdHJ1Y3R1cmluZyBwYXJhbWV0ZXIAaW52YWxpZCBjaGFyYWN0ZXIAdW5leHBlY3RlZCBjaGFyYWN0ZXIAcHJpdmF0ZSBjbGFzcyBmaWVsZCBmb3JiaWRkZW4gYWZ0ZXIgc3VwZXIAaW52YWxpZCByZWRlZmluaXRpb24gb2YgbGV4aWNhbCBpZGVudGlmaWVyACdsZXQnIGlzIG5vdCBhIHZhbGlkIGxleGljYWwgaWRlbnRpZmllcgBpbnZhbGlkIHJlZGVmaW5pdGlvbiBvZiBnbG9iYWwgaWRlbnRpZmllcgB5aWVsZCBpcyBhIHJlc2VydmVkIGlkZW50aWZpZXIAJyVzJyBpcyBhIHJlc2VydmVkIGlkZW50aWZpZXIAb3RoZXIAYXRvbTFfaXNfaW50ZWdlciAmJiBhdG9tMl9pc19pbnRlZ2VyAGNhbm5vdCBjb252ZXJ0IHRvIGJpZ2ludDogbm90IGFuIGludGVnZXIAaXNJbnRlZ2VyAGlzU2FmZUludGVnZXIAYnVmZmVyAFNoYXJlZEFycmF5QnVmZmVyAGNhbm5vdCB1c2UgaWRlbnRpY2FsIEFycmF5QnVmZmVyAGNhbm5vdCBjb252ZXJ0IGJpZ2ludCB0byBudW1iZXIAY2Fubm90IGNvbnZlcnQgc3ltYm9sIHRvIG51bWJlcgBub3QgYSBudW1iZXIAbGluZU51bWJlcgBtYWxmb3JtZWQgdW5pY29kZSBjaGFyAGNsZWFyAHNldFllYXIAZ2V0WWVhcgBzZXRGdWxsWWVhcgBnZXRGdWxsWWVhcgBzZXRVVENGdWxsWWVhcgBnZXRVVENGdWxsWWVhcgBxICE9IHIAdW5leHBlY3RlZCBsaW5lIHRlcm1pbmF0b3IgaW4gcmVnZXhwAHVuZXhwZWN0ZWQgZW5kIG9mIHJlZ2V4cABSZWdFeHAAc3VwAGludmFsaWQgZ3JvdXAAcG9wAGNvbnRpbnVlIG11c3QgYmUgaW5zaWRlIGxvb3AAYmZfbG9naWNfb3AAZHVtcABudW1fa2V5c19jbXAAdXNlIHN0cmlwAG1hcABmbGF0TWFwAFdlYWtNYXAAZXhwZWN0aW5nICd7JyBhZnRlciBccABsb2cxcABkaXZpc2lvbiBieSB6ZXJvADBvAGhhc093bgByZXR1cm4AcHJvbWlzZSBzZWxmIHJlc29sdXRpb24Ab3V0IG9mIG1lbW9yeSBpbiByZWdleHAgZXhlY3V0aW9uAGRlc2NyaXB0aW9uACFtLT5ldmFsX2hhc19leGNlcHRpb24AIW1vZHVsZS0+ZXZhbF9oYXNfZXhjZXB0aW9uAHByb3h5OiBkZWZpbmVQcm9wZXJ0eSBleGNlcHRpb24AanNfYXN5bmNfZ2VuZXJhdG9yX3Jlc29sdmVfZnVuY3Rpb24AanNfY3JlYXRlX2Z1bmN0aW9uAHNldC9hZGQgaXMgbm90IGEgZnVuY3Rpb24AcmV0dXJuIG5vdCBpbiBhIGZ1bmN0aW9uAEFzeW5jR2VuZXJhdG9yRnVuY3Rpb24AY2FsbEV4dGVybmFsRnVuY3Rpb24AQXN5bmNGdW5jdGlvbgBqc19pbm5lcl9tb2R1bGVfZXZhbHVhdGlvbgAhbS0+YXN5bmNfZXZhbHVhdGlvbgBtb2R1bGUtPmFzeW5jX2V2YWx1YXRpb24AaW52YWxpZCBvcGVyYXRpb24AdW5zdXBwb3J0ZWQgb3BlcmF0aW9uAGF3YWl0IGluIGRlZmF1bHQgZXhwcmVzc2lvbgB5aWVsZCBpbiBkZWZhdWx0IGV4cHJlc3Npb24AaW52YWxpZCBkZWNpbWFsIGVzY2FwZSBpbiByZWd1bGFyIGV4cHJlc3Npb24AYmFjayByZWZlcmVuY2Ugb3V0IG9mIHJhbmdlIGluIHJlZ3VsYXIgZXhwcmVzc2lvbgBpbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZSBpbiByZWd1bGFyIGV4cHJlc3Npb24AZXhwZWN0ZWQgJ29mJyBvciAnaW4nIGluIGZvciBjb250cm9sIGV4cHJlc3Npb24AdG9vIGNvbXBsaWNhdGVkIGRlc3RydWN0dXJpbmcgZXhwcmVzc2lvbgBleHBlY3RlZCAnfScgYWZ0ZXIgdGVtcGxhdGUgZXhwcmVzc2lvbgB0b1ByZWNpc2lvbgBhc2luAGpvaW4AbWluAGNvcHlXaXRoaW4AdGVtcGxhdGUgbGl0ZXJhbCBjYW5ub3QgYXBwZWFyIGluIGFuIG9wdGlvbmFsIGNoYWluAGNpcmN1bGFyIHByb3RvdHlwZSBjaGFpbgBhc3NpZ24AIXktPnNpZ24AaXNGcm96ZW4AKHBvcyArIGxlbikgPD0gYmNfYnVmX2xlbgB1bmV4cGVjdGVkIGVsbGlwc2lzIHRva2VuAHRoZW4Ac2V0dGVyIGlzIGZvcmJpZGRlbgBudWxsIG9yIHVuZGVmaW5lZCBhcmUgZm9yYmlkZGVuAGF0YW4AbmFuAG5vdCBhIGJvb2xlYW4AQm9vbGVhbgBnY19zY2FuAGJhZCBub3JtYWxpemF0aW9uIGZvcm0ASlNfTmV3U3ltYm9sRnJvbUF0b20AZnJvbQByYW5kb20AdHJpbQBiZl9kaXZyZW0AbS0+Y3ljbGVfcm9vdCA9PSBtAGltdWwAbm90IGEgc3ltYm9sAFN5bWJvbABSZWdFeHAgZXhlYyBtZXRob2QgbXVzdCByZXR1cm4gYW4gb2JqZWN0IG9yIG51bGwAcGFyZW50IHByb3RvdHlwZSBtdXN0IGJlIGFuIG9iamVjdCBvciBudWxsAGNhbm5vdCBzZXQgcHJvcGVydHkgJyVzJyBvZiBudWxsAGNhbm5vdCByZWFkIHByb3BlcnR5ICclcycgb2YgbnVsbABOdWxsAGZpbGwAbmV3IEFycmF5QnVmZmVyIGlzIHRvbyBzbWFsbABUeXBlZEFycmF5IGxlbmd0aCBpcyB0b28gc21hbGwAY2FsbABkb3RBbGwAbWF0Y2hBbGwAcmVwbGFjZUFsbABjZWlsAHVwZGF0ZV9sYWJlbABiY19idWZbcG9zXSA9PSBPUF9sYWJlbABldmFsAGludmFsaWQgYmlnaW50IGxpdGVyYWwAaW52YWxpZCBudW1iZXIgbGl0ZXJhbABtYWxmb3JtZWQgZXNjYXBlIHNlcXVlbmNlIGluIHN0cmluZyBsaXRlcmFsAGJmX2V4cF9pbnRlcm5hbABiZl9sb2dfaW50ZXJuYWwAYmZfZnRvYV9pbnRlcm5hbABKU19TZXRQcm9wZXJ0eUludGVybmFsAEpTX0dldE93blByb3BlcnR5TmFtZXNJbnRlcm5hbABfX0pTX0V2YWxJbnRlcm5hbAB0b0V4cG9uZW50aWFsAHNlYWwAZ2xvYmFsAGJsaW5rAHJldHVybiBpbiBhIHN0YXRpYyBpbml0aWFsaXplciBibG9jawBzdGFjawBscmVfZXhlY19iYWNrdHJhY2sAcy0+aXNfd2VhawBiZl9wb3dfdWkAc2V0TW9udGgAZ2V0TW9udGgAc2V0VVRDTW9udGgAZ2V0VVRDTW9udGgAaW52YWxpZCBrZXl3b3JkOiB3aXRoAHN0YXJ0c1dpdGgAZW5kc1dpdGgAcHJvcCA9PSBKU19BVE9NX2xlbmd0aABpbnZhbGlkIGFycmF5IGxlbmd0aABpbnZhbGlkIGFycmF5IGJ1ZmZlciBsZW5ndGgAaW52YWxpZCBsZW5ndGgAaW52YWxpZCBieXRlTGVuZ3RoAE1hdGgAcHVzaABhY29zaABKU19SZXNpemVBdG9tSGFzaABhc2luaABhdGFuaABicmVhayBtdXN0IGJlIGluc2lkZSBsb29wIG9yIHN3aXRjaABtYXRjaABuaXBfY2F0Y2gAc2VhcmNoAGZvckVhY2gAYmZfbG9nAEFycmF5IHRvbyBsb25nAHN0cmluZyB0b28gbG9uZwBBcnJheSBsb28gbG9uZwBzdWJzdHJpbmcAY2Fubm90IGNvbnZlcnQgc3ltYm9sIHRvIHN0cmluZwB1bmV4cGVjdGVkIGVuZCBvZiBzdHJpbmcAbm90IGEgc3RyaW5nAGludmFsaWQgY2hhcmFjdGVyIGluIGEgSlNPTiBzdHJpbmcAdG9TdHJpbmcAdG9EYXRlU3RyaW5nAHRvTG9jYWxlRGF0ZVN0cmluZwB0b1RpbWVTdHJpbmcAdG9Mb2NhbGVUaW1lU3RyaW5nAHRvTG9jYWxlU3RyaW5nAHRvR01UU3RyaW5nAEpTU3RyaW5nAHRvSVNPU3RyaW5nAHRvVVRDU3RyaW5nAGpzX2lubmVyX21vZHVsZV9saW5raW5nAGR1cGxpY2F0ZSBpbXBvcnQgYmluZGluZwBpbnZhbGlkIGltcG9ydCBiaW5kaW5nAHByb21pc2UgaXMgcGVuZGluZwBiaWcAcmVnZXhwIG11c3QgaGF2ZSB0aGUgJ2cnIGZsYWcAb2YAaW5mAEluZgBkaWZmID09IChpbnQ4X3QpZGlmZgBkaWZmID09IChpbnQxNl90KWRpZmYAaHJlZgBnY19kZWNyZWYAZnJlZV92YXJfcmVmAG9wdGltaXplX3Njb3BlX21ha2VfZ2xvYmFsX3JlZgByZXNldF93ZWFrX3JlZgBkZWxldGVfd2Vha19yZWYAb3B0aW1pemVfc2NvcGVfbWFrZV9yZWYAaW5kZXhPZgBsYXN0SW5kZXhPZgB2YWx1ZU9mAHNldFByb3RvdHlwZU9mAGdldFByb3RvdHlwZU9mAGlzUHJvdG90eXBlT2YAJS4qZgBmb250c2l6ZQBuZXdfc2l6ZSA8PSBzaC0+cHJvcF9zaXplAGRlc2NyIDwgcnQtPmF0b21fc2l6ZQBhdG9tIDwgcnQtPmF0b21fc2l6ZQBjb21wdXRlX3N0YWNrX3NpemUAbiA8IGJ1Zl9zaXplAG5vcm1hbGl6ZQBjcl9yZWdleHBfY2Fub25pY2FsaXplAGZyZWV6ZQByZXNvbHZlAHRvUHJpbWl0aXZlAHB1dF9sdmFsdWUAdW5rbm93biB1bmljb2RlIHByb3BlcnR5IHZhbHVlAHJlc3QgZWxlbWVudCBjYW5ub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUAaW52YWxpZCByZXQgdmFsdWUAX19KU19BdG9tVG9WYWx1ZQBfX3F1b3RlAGlzRmluaXRlAGRlbGV0ZQBjcmVhdGUAc2V0RGF0ZQBnZXREYXRlAHNldFVUQ0RhdGUAZ2V0VVRDRGF0ZQBJbnZhbGlkIERhdGUAcmV2ZXJzZQBwYXJzZQBwcm94eSBwcmV2ZW50RXh0ZW5zaW9ucyBoYW5kbGVyIHJldHVybmVkIGZhbHNlAG1vZHVsZSBuYW1lc3BhY2UgcHJvcGVydGllcyBoYXZlIHdyaXRhYmxlID0gZmFsc2UAUHJvbWlzZQB0b0xvd2VyQ2FzZQB0b0xvY2FsZUxvd2VyQ2FzZQB0b1VwcGVyQ2FzZQB0b0xvY2FsZVVwcGVyQ2FzZQBpZ25vcmVDYXNlAGxvY2FsZUNvbXBhcmUAcHJveHk6IGluY29uc2lzdGVudCBwcm90b3R5cGUAcHJveHk6IGJhZCBwcm90b3R5cGUAbm90IGEgcHJvdG90eXBlAGludmFsaWQgb2JqZWN0IHR5cGUAdW5lc2NhcGUAbm9uZQByZXN0IGVsZW1lbnQgbXVzdCBiZSB0aGUgbGFzdCBvbmUAbXVsdGlsaW5lACAgcGMybGluZQBhc3luY19mdW5jX3Jlc3VtZQBzb21lAEpTX0ZyZWVSdW50aW1lAEpTUnVudGltZQBzZXRUaW1lAGdldFRpbWUAYXN5bmNfZnVuY19mcmVlX2ZyYW1lAHNldF9vYmplY3RfbmFtZQBleHBlY3RpbmcgcHJvcGVydHkgbmFtZQB1bmtub3duIHVuaWNvZGUgcHJvcGVydHkgbmFtZQBpbnZhbGlkIHByb3BlcnR5IG5hbWUAZHVwbGljYXRlIF9fcHJvdG9fXyBwcm9wZXJ0eSBuYW1lAGludmFsaWQgcmVkZWZpbml0aW9uIG9mIHBhcmFtZXRlciBuYW1lAGV4cGVjdGluZyBncm91cCBuYW1lAGR1cGxpY2F0ZSBncm91cCBuYW1lAGludmFsaWQgZ3JvdXAgbmFtZQBkdXBsaWNhdGUgbGFiZWwgbmFtZQBpbnZhbGlkIGZpcnN0IGNoYXJhY3RlciBvZiBwcml2YXRlIG5hbWUAaW52YWxpZCBsZXhpY2FsIHZhcmlhYmxlIG5hbWUAaW52YWxpZCBtZXRob2QgbmFtZQBleHBlY3RpbmcgZmllbGQgbmFtZQBpbnZhbGlkIGZpZWxkIG5hbWUAY2xhc3Mgc3RhdGVtZW50IHJlcXVpcmVzIGEgbmFtZQBmaWxlTmFtZQBqc19saW5rX21vZHVsZQBqc19ldmFsdWF0ZV9tb2R1bGUAbW9kdWxlLT5jeWNsZV9yb290ID09IG1vZHVsZQBjb21waWxlAG9iamVjdCBpcyBub3QgZXh0ZW5zaWJsZQBwcm94eTogaW5jb25zaXN0ZW50IGlzRXh0ZW5zaWJsZQBjYW5ub3QgaGF2ZSBzZXR0ZXIvZ2V0dGVyIGFuZCB2YWx1ZSBvciB3cml0YWJsZQBwcm9wZXJ0eSBpcyBub3QgY29uZmlndXJhYmxlAHZhbHVlIGlzIG5vdCBpdGVyYWJsZQBwcm9wZXJ0eUlzRW51bWVyYWJsZQBtaXNzaW5nIGluaXRpYWxpemVyIGZvciBjb25zdCB2YXJpYWJsZQBsZXhpY2FsIHZhcmlhYmxlAGludmFsaWQgcmVkZWZpbml0aW9uIG9mIGEgdmFyaWFibGUAcmV2b2NhYmxlAHN0cmlrZQBtcF9kaXZub3JtX2xhcmdlAGludmFsaWQgY2xhc3MgcmFuZ2UAbWVzc2FnZQBpbnZhbGlkIGx2YWx1ZSBpbiBzdHJpY3QgbW9kZQBpbnZhbGlkIHZhcmlhYmxlIG5hbWUgaW4gc3RyaWN0IG1vZGUAY2Fubm90IGRlbGV0ZSBhIGRpcmVjdCByZWZlcmVuY2UgaW4gc3RyaWN0IG1vZGUAb2N0YWwgZXNjYXBlIHNlcXVlbmNlcyBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUAb2N0YWwgbGl0ZXJhbHMgYXJlIGRlcHJlY2F0ZWQgaW4gc3RyaWN0IG1vZGUAdW5pY29kZQAgIGJ5dGVjb2RlAEpTRnVuY3Rpb25CeXRlY29kZQBza2lwX2RlYWRfY29kZQBpbnZhbGlkIGFyZ3VtZW50IG5hbWUgaW4gc3RyaWN0IGNvZGUAaW52YWxpZCBmdW5jdGlvbiBuYW1lIGluIHN0cmljdCBjb2RlAGludmFsaWQgcmVkZWZpbml0aW9uIG9mIGdsb2JhbCBpZGVudGlmaWVyIGluIG1vZHVsZSBjb2RlAGltcG9ydC5tZXRhIG9ubHkgdmFsaWQgaW4gbW9kdWxlIGNvZGUAZnJvbUNoYXJDb2RlAGludmFsaWQgZm9yIGluL29mIGxlZnQgaGFuZC1zaWRlAGludmFsaWQgYXNzaWdubWVudCBsZWZ0LWhhbmQgc2lkZQByZWR1Y2UAc291cmNlACd0aGlzJyBjYW4gYmUgaW5pdGlhbGl6ZWQgb25seSBvbmNlAHByb3BlcnR5IGNvbnN0cnVjdG9yIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UAaW52YWxpZCBVVEYtOCBzZXF1ZW5jZQBjaXJjdWxhciByZWZlcmVuY2UAc2xpY2UAc3BsaWNlAHJhY2UAcmVwbGFjZQAlKy4qZQB1bmV4cGVjdGVkICdhd2FpdCcga2V5d29yZAB1bmV4cGVjdGVkICd5aWVsZCcga2V5d29yZABtYXBfZGVjcmVmX3JlY29yZABpdGVyYXRvciBkb2VzIG5vdCBoYXZlIGEgdGhyb3cgbWV0aG9kAG9iamVjdCBuZWVkcyB0b0lTT1N0cmluZyBtZXRob2QAJ3N1cGVyJyBpcyBvbmx5IHZhbGlkIGluIGEgbWV0aG9kAGZyb3VuZABfX2JmX3JvdW5kAGJyZWFrL2NvbnRpbnVlIGxhYmVsIG5vdCBmb3VuZABvdXQgb2YgYm91bmQAZmluZABiaW5kAGludmFsaWQgaW5kZXggZm9yIGFwcGVuZABleHRyYW5lb3VzIGNoYXJhY3RlcnMgYXQgdGhlIGVuZAB1bmV4cGVjdGVkIGRhdGEgYXQgdGhlIGVuZAB1bmV4cGVjdGVkIGVuZABpbnZhbGlkIGluY3JlbWVudC9kZWNyZW1lbnQgb3BlcmFuZABpbnZhbGlkICdpbnN0YW5jZW9mJyByaWdodCBvcGVyYW5kAGludmFsaWQgJ2luJyBvcGVyYW5kAHRyaW1FbmQAcGFkRW5kAGJvbGQAJWxsZABnY19kZWNyZWZfY2hpbGQAcmVzb2x2ZV9zY29wZV9wcml2YXRlX2ZpZWxkAGNhbm5vdCBkZWxldGUgYSBwcml2YXRlIGNsYXNzIGZpZWxkAGV4cGVjdGluZyA8YnJhbmQ+IHByaXZhdGUgZmllbGQAJXMgaXMgbm90IGluaXRpYWxpemVkAGZpeGVkAHRvRml4ZWQAc2V0X29iamVjdF9uYW1lX2NvbXB1dGVkAHJlZ2V4IG5vdCBzdXBwb3J0ZWQAZXZhbCBpcyBub3Qgc3VwcG9ydGVkAFJlZ0V4cCBhcmUgbm90IHN1cHBvcnRlZAB0b1NvcnRlZABpbnRlcnJ1cHRlZAAhcy0+aXNfY29tcGxldGVkACVzIG9iamVjdCBleHBlY3RlZABpZGVudGlmaWVyIGV4cGVjdGVkAGJ5dGVjb2RlIGZ1bmN0aW9uIGV4cGVjdGVkAHN0cmluZyBleHBlY3RlZABmcm9tIGNsYXVzZSBleHBlY3RlZABmdW5jdGlvbiBuYW1lIGV4cGVjdGVkAHZhcmlhYmxlIG5hbWUgZXhwZWN0ZWQAbWV0YSBleHBlY3RlZABqc19hc3luY19tb2R1bGVfZXhlY3V0aW9uX3JlamVjdGVkAGpzX3NldF9tb2R1bGVfZXZhbHVhdGVkAG1lbW9yeSBhbGxvY2F0ZWQAbWVtb3J5IHVzZWQAdG9SZXZlcnNlZABkZXJpdmVkIGNsYXNzIGNvbnN0cnVjdG9yIG11c3QgcmV0dXJuIGFuIG9iamVjdCBvciB1bmRlZmluZWQAY2Fubm90IHNldCBwcm9wZXJ0eSAnJXMnIG9mIHVuZGVmaW5lZABjYW5ub3QgcmVhZCBwcm9wZXJ0eSAnJXMnIG9mIHVuZGVmaW5lZABmbGFncyBtdXN0IGJlIHVuZGVmaW5lZABVbmRlZmluZWQAcHJpdmF0ZSBjbGFzcyBmaWVsZCBpcyBhbHJlYWR5IGRlZmluZWQAJyVzJyBpcyBub3QgZGVmaW5lZABncm91cCBuYW1lIG5vdCBkZWZpbmVkAGlzV2VsbEZvcm1lZAB0b1dlbGxGb3JtZWQAYWxsU2V0dGxlZABqc19hc3luY19tb2R1bGVfZXhlY3V0aW9uX2Z1bGZpbGxlZABjYW5ub3QgYmUgY2FsbGVkAGlzU2VhbGVkACFzaC0+aXNfaGFzaGVkAEFycmF5QnVmZmVyIGlzIGRldGFjaGVkAGpzX2FycmF5X3RvU3BsaWNlZABhZGQAJSswN2QAJTA0ZAAlMDJkJTAyZABwJStkACVjJStkACUwMmQvJTAyZC8lMCpkACUuM3MgJS4zcyAlMDJkICUwKmQAcCVkACVjJWQAOiVkAGludmFsaWQgdGhyb3cgdmFyIHR5cGUgJWQAc2MAanNfZGVmX21hbGxvYwB0cnVuYwBnYwBleGVjAGJmX2ludGVnZXJfdG9fcmFkaXhfcmVjAC90bXAvcXVpY2tqcy9xdWlja2pzLmMAL3RtcC9xdWlja2pzL2xpYnJlZ2V4cC5jAC90bXAvcXVpY2tqcy9saWJiZi5jAC90bXAvcXVpY2tqcy9saWJ1bmljb2RlLmMAc3ViAHByb21pc2VfcmVhY3Rpb25fam9iAGpzX3Byb21pc2VfcmVzb2x2ZV90aGVuYWJsZV9qb2IAMGIAciAhPSBhICYmIHIgIT0gYgBxICE9IGEgJiYgcSAhPSBiAHJ3YQByICE9IGEAX19sb29rdXBTZXR0ZXJfXwBfX2RlZmluZVNldHRlcl9fAF9fbG9va3VwR2V0dGVyX18AX19kZWZpbmVHZXR0ZXJfXwBfX3Byb3RvX18AW1N5bWJvbC5zcGxpdF0AW1N5bWJvbC5zcGVjaWVzXQBbU3ltYm9sLml0ZXJhdG9yXQBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdAFtTeW1ib2wubWF0Y2hBbGxdAFtTeW1ib2wubWF0Y2hdAFtTeW1ib2wuc2VhcmNoXQBbU3ltYm9sLnRvU3RyaW5nVGFnXQBbU3ltYm9sLnRvUHJpbWl0aXZlXQBbdW5zdXBwb3J0ZWQgdHlwZV0AW2Z1bmN0aW9uIGJ5dGVjb2RlXQBbU3ltYm9sLmhhc0luc3RhbmNlXQBbU3ltYm9sLnJlcGxhY2VdAFsAJTAyZDolMDJkOiUwMmQuJTAzZFoAUE9TSVRJVkVfSU5GSU5JVFkATkVHQVRJVkVfSU5GSU5JVFkAcC0+Y2xhc3NfaWQgPT0gSlNfQ0xBU1NfQVJSQVkAc3RhY2tfbGVuIDwgUE9QX1NUQUNLX0xFTl9NQVgALSUwMmQtJTAyZFQASlNfQXRvbUdldFN0clJUAG9wY29kZSA8IFJFT1BfQ09VTlQASlNfVkFMVUVfR0VUX1RBRyhmdW5jX3JldCkgPT0gSlNfVEFHX0lOVABCWVRFU19QRVJfRUxFTUVOVAAlMDJkOiUwMmQ6JTAyZCBHTVQASlNfVkFMVUVfR0VUX1RBRyhzZi0+Y3VyX2Z1bmMpID09IEpTX1RBR19PQkpFQ1QAdmFyX2tpbmQgPT0gSlNfVkFSX1BSSVZBVEVfU0VUVEVSAE1BWF9TQUZFX0lOVEVHRVIATUlOX1NBRkVfSU5URUdFUgBhc1VpbnROAGFzSW50TgBpc05hTgBEYXRlIHZhbHVlIGlzIE5hTgB0b0pTT04ARVBTSUxPTgBwLT5nY19vYmpfdHlwZSA9PSBKU19HQ19PQkpfVFlQRV9KU19PQkpFQ1QgfHwgcC0+Z2Nfb2JqX3R5cGUgPT0gSlNfR0NfT0JKX1RZUEVfRlVOQ1RJT05fQllURUNPREUgfHwgcC0+Z2Nfb2JqX3R5cGUgPT0gSlNfR0NfT0JKX1RZUEVfQVNZTkNfRlVOQ1RJT04ATkFOACUwMmQ6JTAyZDolMDJkICVjTQBzdGFja190b3AgPT0gTlVMTABzLT5sYWJlbF9zbG90c1tsYWJlbF0uZmlyc3RfcmVsb2MgPT0gTlVMTABsYWJlbF9zbG90c1tpXS5maXJzdF9yZWxvYyA9PSBOVUxMAHBycyAhPSBOVUxMAHNmLT5jdXJfc3AgIT0gTlVMTABzZiAhPSBOVUxMAG1yMSAhPSBOVUxMAHZhcl9raW5kICE9IEpTX1ZBUl9OT1JNQUwAYi0+ZnVuY19raW5kID09IEpTX0ZVTkNfTk9STUFMAGVuY29kZVVSSQBkZWNvZGVVUkkAUEkAc3BlY2lhbCA9PSBQVVRfTFZBTFVFX05PS0VFUCB8fCBzcGVjaWFsID09IFBVVF9MVkFMVUVfTk9LRUVQX0RFUFRIAHMtPnN0YXRlID09IEpTX0FTWU5DX0dFTkVSQVRPUl9TVEFURV9FWEVDVVRJTkcAbTEtPnN0YXR1cyA9PSBKU19NT0RVTEVfU1RBVFVTX0VWQUxVQVRJTkcAbTEtPnN0YXR1cyA9PSBKU19NT0RVTEVfU1RBVFVTX0xJTktJTkcAcHJlYyAhPSBCRl9QUkVDX0lORgBwcmVjMSAhPSBCRl9QUkVDX0lORgAwMTIzNDU2Nzg5QUJDREVGAFNJWkUATUFYX1ZBTFVFAE1JTl9WQUxVRQBOQU1FAGV2YWxfdHlwZSA9PSBKU19FVkFMX1RZUEVfR0xPQkFMIHx8IGV2YWxfdHlwZSA9PSBKU19FVkFMX1RZUEVfTU9EVUxFAExPRzJFAExPRzEwRQBzLT5zdGF0ZSA9PSBKU19BU1lOQ19HRU5FUkFUT1JfU1RBVEVfQVdBSVRJTkdfUkVUVVJOIHx8IHMtPnN0YXRlID09IEpTX0FTWU5DX0dFTkVSQVRPUl9TVEFURV9DT01QTEVURUQAbS0+c3RhdHVzID09IEpTX01PRFVMRV9TVEFUVVNfVU5MSU5LRUQgfHwgbS0+c3RhdHVzID09IEpTX01PRFVMRV9TVEFUVVNfTElOS0VEIHx8IG0tPnN0YXR1cyA9PSBKU19NT0RVTEVfU1RBVFVTX0VWQUxVQVRJTkdfQVNZTkMgfHwgbS0+c3RhdHVzID09IEpTX01PRFVMRV9TVEFUVVNfRVZBTFVBVEVEAG0xLT5zdGF0dXMgPT0gSlNfTU9EVUxFX1NUQVRVU19FVkFMVUFUSU5HIHx8IG0xLT5zdGF0dXMgPT0gSlNfTU9EVUxFX1NUQVRVU19FVkFMVUFUSU5HX0FTWU5DIHx8IG0xLT5zdGF0dXMgPT0gSlNfTU9EVUxFX1NUQVRVU19FVkFMVUFURUQAbTEtPnN0YXR1cyA9PSBKU19NT0RVTEVfU1RBVFVTX0xJTktJTkcgfHwgbTEtPnN0YXR1cyA9PSBKU19NT0RVTEVfU1RBVFVTX0xJTktFRCB8fCBtMS0+c3RhdHVzID09IEpTX01PRFVMRV9TVEFUVVNfRVZBTFVBVElOR19BU1lOQyB8fCBtMS0+c3RhdHVzID09IEpTX01PRFVMRV9TVEFUVVNfRVZBTFVBVEVEAG0tPnN0YXR1cyA9PSBKU19NT0RVTEVfU1RBVFVTX0xJTktFRABtLT5zdGF0dXMgPT0gSlNfTU9EVUxFX1NUQVRVU19VTkxJTktFRABVVEMAbS0+c3RhdHVzID09IEpTX01PRFVMRV9TVEFUVVNfRVZBTFVBVElOR19BU1lOQwBtb2R1bGUtPnN0YXR1cyA9PSBKU19NT0RVTEVfU1RBVFVTX0VWQUxVQVRJTkdfQVNZTkMAPGlucHV0PgA8aW5pdFNjcmlwdD4APGV2YWxTY3JpcHQ+ADxzZXQ+ADxhbm9ueW1vdXM+ADxjb21tRnVuPgA8Y2FsbEV4dGVybmFsRnVuY3Rpb24+ADxudWxsPgBiaWdpbnQgb3BlcmFuZHMgYXJlIGZvcmJpZGRlbiBmb3IgPj4+ACZxdW90OwBzZXRVaW50OABnZXRVaW50OABzZXRJbnQ4AGdldEludDgAbWFsZm9ybWVkIFVURi04AHJhZGl4IG11c3QgYmUgYmV0d2VlbiAyIGFuZCAzNgBzZXRVaW50MTYAZ2V0VWludDE2AHNldEludDE2AGdldEludDE2AGFyZ2MgPT0gNQBzZXRCaWdVaW50NjQAZ2V0QmlnVWludDY0AHNldEJpZ0ludDY0AGdldEJpZ0ludDY0AHNldEZsb2F0NjQAZ2V0RmxvYXQ2NABhcmdjID09IDMAYXRhbjIAbG9nMgBTUVJUMV8yAFNRUlQyAExOMgBjbHozMgBzZXRVaW50MzIAZ2V0VWludDMyAHNldEludDMyAGdldEludDMyAHNldEZsb2F0MzIAZ2V0RmxvYXQzMgBzdGFja19sZW4gPj0gMgBKU19BdG9tSXNOdW1lcmljSW5kZXgxAGpzX2ZjdnQxAEpTX0NvbXBhY3RCaWdJbnQxAGV4cG0xAHIgIT0gYTEgJiYgciAhPSBiMQBscy0+YWRkciA9PSAtMQBucSA+PSAxAHN0YWNrX2xlbiA+PSAxAHAtPmhlYWRlci5yZWZfY291bnQgPT0gMQBwLT5zaGFwZS0+aGVhZGVyLnJlZl9jb3VudCA9PSAxAHN0YWNrX2xlbiA9PSAxAGpzX2ZyZWVfc2hhcGUwAGxvZzEwAExOMTAAcC0+cmVmX2NvdW50ID4gMAB2YXJfcmVmLT5oZWFkZXIucmVmX2NvdW50ID4gMABtLT5wZW5kaW5nX2FzeW5jX2RlcGVuZGVuY2llcyA+IDAAc3RhY2tfc2l6ZSA+IDAAY3Bvb2xfaWR4ID49IDAAcnQtPmF0b21fY291bnQgPj0gMABscy0+cmVmX2NvdW50ID49IDAAcy0+aXNfZXZhbCB8fCBzLT5jbG9zdXJlX3Zhcl9jb3VudCA9PSAwAHAtPnJlZl9jb3VudCA9PSAwAGN0eC0+aGVhZGVyLnJlZl9jb3VudCA9PSAwAHNoLT5oZWFkZXIucmVmX2NvdW50ID09IDAAcC0+bWFyayA9PSAwAChwci0+dS5pbml0LnJlYWxtX2FuZF9pZCAmIDMpID09IDAAKG5ld19oYXNoX3NpemUgJiAobmV3X2hhc2hfc2l6ZSAtIDEpKSA9PSAwAGkgIT0gMABzaXplICE9IDAAXiRcLiorPygpW117fXwvADwvADAuAG1pc3NpbmcgYmluZGluZyBwYXR0ZXJuLi4uAGJpZ2ludCBhcmd1bWVudCB3aXRoIHVuYXJ5ICsAYXN5bmMgZnVuY3Rpb24gKgAKfSkAbGlzdF9lbXB0eSgmcnQtPmdjX29ial9saXN0KQBqID09IChzaC0+cHJvcF9jb3VudCAtIHNoLT5kZWxldGVkX3Byb3BfY291bnQpACFfX0pTX0F0b21Jc1RhZ2dlZEludChkZXNjcikAIWF0b21faXNfZnJlZShwKQAobnVsbCkAIChuYXRpdmUpAGpzX2NsYXNzX2hhc19ieXRlY29kZShwLT5jbGFzc19pZCkAbmlwX2NhdGNoOiBubyBjYXRjaCBvcCAocGM9JWQpAGluY29uc2lzdGVudCBjYXRjaCBwb3NpdGlvbjogJWQgJWQgKHBjPSVkKQBpbmNvbnNpc3RlbnQgc3RhY2sgc2l6ZTogJWQgJWQgKHBjPSVkKQBieXRlY29kZSBidWZmZXIgb3ZlcmZsb3cgKG9wPSVkLCBwYz0lZCkAc3RhY2sgb3ZlcmZsb3cgKG9wPSVkLCBwYz0lZCkAc3RhY2sgdW5kZXJmbG93IChvcD0lZCwgcGM9JWQpAGludmFsaWQgb3Bjb2RlIChvcD0lZCwgcGM9JWQpACg/OikAaWR4IDwgY291bnRvZihjYXNlX2NvbnZfdGFibGUxKQBubyBmdW5jdGlvbiBmaWxlbmFtZSBmb3IgaW1wb3J0KCkALV8uIX4qJygpACBhbm9ueW1vdXMoAFN5bWJvbCgAZXhwZWN0aW5nICd9JwBjbGFzcyBjb25zdHJ1Y3RvcnMgbXVzdCBiZSBpbnZva2VkIHdpdGggJ25ldycAZXhwZWN0aW5nICdhcycAdW5leHBlY3RlZCB0b2tlbiBpbiBleHByZXNzaW9uOiAnJS4qcycAdW5leHBlY3RlZCB0b2tlbjogJyUuKnMnAHJlZGVjbGFyYXRpb24gb2YgJyVzJwBkdXBsaWNhdGUgZXhwb3J0ZWQgbmFtZSAn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XwAAcF8AAAwLBQQCAgAAuwAAAHoAAAB7AAAAvAAAAHwAAAB9AAAAvQAAAHwAAAB9AAAAvgAAAFIAAABTAAAAvwAAAH4AAAB/AAAAwAAAAH4AAAB/AAAALwAAAIAAAACBAAAAwQAAAFIAAABTAAAAwgAAAIIAAACDAAAAAAAAAOkWAAAaFwAAJRcAAN0WAAAQFwAANBcAAPMWAAABFwAAY29weVdpdGhpbgBlbnRyaWVzAGZpbGwAZmluZABmaW5kSW5kZXgAZmluZExhc3QAZmluZExhc3RJbmRleABmbGF0AGZsYXRNYXAAaW5jbHVkZXMAa2V5cwB0b1JldmVyc2VkAHRvU29ydGVkAHRvU3BsaWNlZAB2YWx1ZXMAAAAAAAEBAgIDAwIDAAAAAAAAbnVsbABmYWxzZQB0cnVlAGlmAGVsc2UAcmV0dXJuAHZhcgB0aGlzAGRlbGV0ZQB2b2lkAHR5cGVvZgBuZXcAaW4AaW5zdGFuY2VvZgBkbwB3aGlsZQBmb3IAYnJlYWsAY29udGludWUAc3dpdGNoAGNhc2UAZGVmYXVsdAB0aHJvdwB0cnkAY2F0Y2gAZmluYWxseQBmdW5jdGlvbgBkZWJ1Z2dlcgB3aXRoAGNsYXNzAGNvbnN0AGVudW0AZXhwb3J0AGV4dGVuZHMAaW1wb3J0AHN1cGVyAGltcGxlbWVudHMAaW50ZXJmYWNlAGxldABwYWNrYWdlAHByaXZhdGUAcHJvdGVjdGVkAHB1YmxpYwBzdGF0aWMAeWllbGQAYXdhaXQAAGxlbmd0aABmaWxlTmFtZQBsaW5lTnVtYmVyAG1lc3NhZ2UAY2F1c2UAZXJyb3JzAHN0YWNrAG5hbWUAdG9TdHJpbmcAdG9Mb2NhbGVTdHJpbmcAdmFsdWVPZgBldmFsAHByb3RvdHlwZQBjb25zdHJ1Y3RvcgBjb25maWd1cmFibGUAd3JpdGFibGUAZW51bWVyYWJsZQB2YWx1ZQBnZXQAc2V0AG9mAF9fcHJvdG9fXwB1bmRlZmluZWQAbnVtYmVyAGJvb2xlYW4Ac3RyaW5nAG9iamVjdABzeW1ib2wAaW50ZWdlcgB1bmtub3duAGFyZ3VtZW50cwBjYWxsZWUAY2FsbGVyADxldmFsPgA8cmV0PgA8dmFyPgA8YXJnX3Zhcj4APHdpdGg+AGxhc3RJbmRleAB0YXJnZXQAaW5kZXgAaW5wdXQAZGVmaW5lUHJvcGVydGllcwBhcHBseQBqb2luAGNvbmNhdABzcGxpdABjb25zdHJ1Y3QAZ2V0UHJvdG90eXBlT2YAc2V0UHJvdG90eXBlT2YAaXNFeHRlbnNpYmxlAHByZXZlbnRFeHRlbnNpb25zAGhhcwBkZWxldGVQcm9wZXJ0eQBkZWZpbmVQcm9wZXJ0eQBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IAb3duS2V5cwBhZGQAZG9uZQBuZXh0AHZhbHVlcwBzb3VyY2UAZmxhZ3MAZ2xvYmFsAHVuaWNvZGUAcmF3AG5ldy50YXJnZXQAdGhpcy5hY3RpdmVfZnVuYwA8aG9tZV9vYmplY3Q+ADxjb21wdXRlZF9maWVsZD4APHN0YXRpY19jb21wdXRlZF9maWVsZD4APGNsYXNzX2ZpZWxkc19pbml0PgA8YnJhbmQ+ACNjb25zdHJ1Y3RvcgBhcwBmcm9tAG1ldGEAKmRlZmF1bHQqACoATW9kdWxlAHRoZW4AcmVzb2x2ZQByZWplY3QAcHJvbWlzZQBwcm94eQByZXZva2UAYXN5bmMAZXhlYwBncm91cHMAaW5kaWNlcwBzdGF0dXMAcmVhc29uAGdsb2JhbFRoaXMAYmlnaW50AG5vdC1lcXVhbAB0aW1lZC1vdXQAb2sAdG9KU09OAE9iamVjdABBcnJheQBFcnJvcgBOdW1iZXIAU3RyaW5nAEJvb2xlYW4AU3ltYm9sAEFyZ3VtZW50cwBNYXRoAEpTT04ARGF0ZQBGdW5jdGlvbgBHZW5lcmF0b3JGdW5jdGlvbgBGb3JJbkl0ZXJhdG9yAFJlZ0V4cABBcnJheUJ1ZmZlcgBTaGFyZWRBcnJheUJ1ZmZlcgBVaW50OENsYW1wZWRBcnJheQBJbnQ4QXJyYXkAVWludDhBcnJheQBJbnQxNkFycmF5AFVpbnQxNkFycmF5AEludDMyQXJyYXkAVWludDMyQXJyYXkAQmlnSW50NjRBcnJheQBCaWdVaW50NjRBcnJheQBGbG9hdDMyQXJyYXkARmxvYXQ2NEFycmF5AERhdGFWaWV3AEJpZ0ludABNYXAAU2V0AFdlYWtNYXAAV2Vha1NldABNYXAgSXRlcmF0b3IAU2V0IEl0ZXJhdG9yAEFycmF5IEl0ZXJhdG9yAFN0cmluZyBJdGVyYXRvcgBSZWdFeHAgU3RyaW5nIEl0ZXJhdG9yAEdlbmVyYXRvcgBQcm94eQBQcm9taXNlAFByb21pc2VSZXNvbHZlRnVuY3Rpb24AUHJvbWlzZVJlamVjdEZ1bmN0aW9uAEFzeW5jRnVuY3Rpb24AQXN5bmNGdW5jdGlvblJlc29sdmUAQXN5bmNGdW5jdGlvblJlamVjdABBc3luY0dlbmVyYXRvckZ1bmN0aW9uAEFzeW5jR2VuZXJhdG9yAEV2YWxFcnJvcgBSYW5nZUVycm9yAFJlZmVyZW5jZUVycm9yAFN5bnRheEVycm9yAFR5cGVFcnJvcgBVUklFcnJvcgBJbnRlcm5hbEVycm9yADxicmFuZD4AU3ltYm9sLnRvUHJpbWl0aXZlAFN5bWJvbC5pdGVyYXRvcgBTeW1ib2wubWF0Y2gAU3ltYm9sLm1hdGNoQWxsAFN5bWJvbC5yZXBsYWNlAFN5bWJvbC5zZWFyY2gAU3ltYm9sLnNwbGl0AFN5bWJvbC50b1N0cmluZ1RhZwBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlAFN5bWJvbC5oYXNJbnN0YW5jZQBTeW1ib2wuc3BlY2llcwBTeW1ib2wudW5zY29wYWJsZXMAU3ltYm9sLmFzeW5jSXRlcmF0b3IAAAAAAAEAAAAFAAEUBQABFQUAARUFAAEXBQABFwEAAQABAAEAAQABAAEAAQABAAEAAQABAAIAAQUDAAEKAQEAAAECAQABAwIAAQECAAECAwABAgQAAQMGAAECAwABAwQAAQQFAAEDAwABBAQAAQUFAAECAgABBAQAAQMDAAEDAwABBAQAAQUFAAMCAQ0DAQENAwEADQMCAQ0DAgANAwABDQMDAQoBAQAAAQAAAAEBAgABAAAAAQICAAECAAABAQAAAQEAAAYAABgFAQEPAwIBCgECAQABAQEAAQEBAAUAARcFAAEXBQABFwUBABcFAQAXBQIAFwECAwABAwAABgAAGAYAABgGAQAYBQEBFwUBAhcFAgAXAQIBAAEDAAABAwEAAQIBAAECAgABAwAAAQMBAAEEAAAFAgEXBQEBFwECAgABAgEAAQICAAEDAgABAwIAAgMDBQYCARgCAwEFBgICGAYDAxgDAAEQAwEAEAMBARAD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BOOAQJ+GiIlBY4C8jUHxjUPVhuw0iVKViWwFBUDvAEGAowILhBP6BgBwCQDwCkBXDADwDWDHDyDqF0AFGwBBIAAMqIA3qiBQ/iA6DSF0EQFaFCFEGYFaHaH1aiFF0kGv4iHwAQ4AQWRsYW0sQWRsbQBBaG9tLEFob20AQW5hdG9saWFuX0hpZXJvZ2x5cGhzLEhsdXcAQXJhYmljLEFyYWIAQXJtZW5pYW4sQXJtbgBBdmVzdGFuLEF2c3QAQmFsaW5lc2UsQmFsaQBCYW11bSxCYW11AEJhc3NhX1ZhaCxCYXNzAEJhdGFrLEJhdGsAQmVuZ2FsaSxCZW5nAEJoYWlrc3VraSxCaGtzAEJvcG9tb2ZvLEJvcG8AQnJhaG1pLEJyYWgAQnJhaWxsZSxCcmFpAEJ1Z2luZXNlLEJ1Z2kAQnVoaWQsQnVoZABDYW5hZGlhbl9BYm9yaWdpbmFsLENhbnMAQ2FyaWFuLENhcmkAQ2F1Y2FzaWFuX0FsYmFuaWFuLEFnaGIAQ2hha21hLENha20AQ2hhbSxDaGFtAENoZXJva2VlLENoZXIAQ2hvcmFzbWlhbixDaHJzAENvbW1vbixaeXl5AENvcHRpYyxDb3B0LFFhYWMAQ3VuZWlmb3JtLFhzdXgAQ3lwcmlvdCxDcHJ0AEN5cmlsbGljLEN5cmwAQ3lwcm9fTWlub2FuLENwbW4ARGVzZXJldCxEc3J0AERldmFuYWdhcmksRGV2YQBEaXZlc19Ba3VydSxEaWFrAERvZ3JhLERvZ3IARHVwbG95YW4sRHVwbABFZ3lwdGlhbl9IaWVyb2dseXBocyxFZ3lwAEVsYmFzYW4sRWxiYQBFbHltYWljLEVseW0ARXRoaW9waWMsRXRoaQBHZW9yZ2lhbixHZW9yAEdsYWdvbGl0aWMsR2xhZwBHb3RoaWMsR290aABHcmFudGhhLEdyYW4AR3JlZWssR3JlawBHdWphcmF0aSxHdWpyAEd1bmphbGFfR29uZGksR29uZwBHdXJtdWtoaSxHdXJ1AEhhbixIYW5pAEhhbmd1bCxIYW5nAEhhbmlmaV9Sb2hpbmd5YSxSb2hnAEhhbnVub28sSGFubwBIYXRyYW4sSGF0cgBIZWJyZXcsSGVicgBIaXJhZ2FuYSxIaXJhAEltcGVyaWFsX0FyYW1haWMsQXJtaQBJbmhlcml0ZWQsWmluaCxRYWFpAEluc2NyaXB0aW9uYWxfUGFobGF2aSxQaGxpAEluc2NyaXB0aW9uYWxfUGFydGhpYW4sUHJ0aQBKYXZhbmVzZSxKYXZhAEthaXRoaSxLdGhpAEthbm5hZGEsS25kYQBLYXRha2FuYSxLYW5hAEthd2ksS2F3aQBLYXlhaF9MaSxLYWxpAEtoYXJvc2h0aGksS2hhcgBLaG1lcixLaG1yAEtob2praSxLaG9qAEtoaXRhbl9TbWFsbF9TY3JpcHQsS2l0cwBLaHVkYXdhZGksU2luZABMYW8sTGFvbwBMYXRpbixMYXRuAExlcGNoYSxMZXBjAExpbWJ1LExpbWIATGluZWFyX0EsTGluYQBMaW5lYXJfQixMaW5iAExpc3UsTGlzdQBMeWNpYW4sTHljaQBMeWRpYW4sTHlkaQBNYWthc2FyLE1ha2EATWFoYWphbmksTWFoagBNYWxheWFsYW0sTWx5bQBNYW5kYWljLE1hbmQATWFuaWNoYWVhbixNYW5pAE1hcmNoZW4sTWFyYwBNYXNhcmFtX0dvbmRpLEdvbm0ATWVkZWZhaWRyaW4sTWVkZgBNZWV0ZWlfTWF5ZWssTXRlaQBNZW5kZV9LaWtha3VpLE1lbmQATWVyb2l0aWNfQ3Vyc2l2ZSxNZXJjAE1lcm9pdGljX0hpZXJvZ2x5cGhzLE1lcm8ATWlhbyxQbHJkAE1vZGksTW9kaQBNb25nb2xpYW4sTW9uZwBNcm8sTXJvbwBNdWx0YW5pLE11bHQATXlhbm1hcixNeW1yAE5hYmF0YWVhbixOYmF0AE5hZ19NdW5kYXJpLE5hZ20ATmFuZGluYWdhcmksTmFuZABOZXdfVGFpX0x1ZSxUYWx1AE5ld2EsTmV3YQBOa28sTmtvbwBOdXNodSxOc2h1AE55aWFrZW5nX1B1YWNodWVfSG1vbmcsSG1ucABPZ2hhbSxPZ2FtAE9sX0NoaWtpLE9sY2sAT2xkX0h1bmdhcmlhbixIdW5nAE9sZF9JdGFsaWMsSXRhbABPbGRfTm9ydGhfQXJhYmlhbixOYXJiAE9sZF9QZXJtaWMsUGVybQBPbGRfUGVyc2lhbixYcGVvAE9sZF9Tb2dkaWFuLFNvZ28AT2xkX1NvdXRoX0FyYWJpYW4sU2FyYgBPbGRfVHVya2ljLE9ya2gAT2xkX1V5Z2h1cixPdWdyAE9yaXlhLE9yeWEAT3NhZ2UsT3NnZQBPc21hbnlhLE9zbWEAUGFoYXdoX0htb25nLEhtbmcAUGFsbXlyZW5lLFBhbG0AUGF1X0Npbl9IYXUsUGF1YwBQaGFnc19QYSxQaGFnAFBob2VuaWNpYW4sUGhueABQc2FsdGVyX1BhaGxhdmksUGhscABSZWphbmcsUmpuZwBSdW5pYyxSdW5yAFNhbWFyaXRhbixTYW1yAFNhdXJhc2h0cmEsU2F1cgBTaGFyYWRhLFNocmQAU2hhdmlhbixTaGF3AFNpZGRoYW0sU2lkZABTaWduV3JpdGluZyxTZ253AFNpbmhhbGEsU2luaABTb2dkaWFuLFNvZ2QAU29yYV9Tb21wZW5nLFNvcmEAU295b21ibyxTb3lvAFN1bmRhbmVzZSxTdW5kAFN5bG90aV9OYWdyaSxTeWxvAFN5cmlhYyxTeXJjAFRhZ2Fsb2csVGdsZwBUYWdiYW53YSxUYWdiAFRhaV9MZSxUYWxlAFRhaV9UaGFtLExhbmEAVGFpX1ZpZXQsVGF2dABUYWtyaSxUYWtyAFRhbWlsLFRhbWwAVGFuZ3V0LFRhbmcAVGVsdWd1LFRlbHUAVGhhYW5hLFRoYWEAVGhhaSxUaGFpAFRpYmV0YW4sVGlidABUaWZpbmFnaCxUZm5nAFRpcmh1dGEsVGlyaABUYW5nc2EsVG5zYQBUb3RvLFRvdG8AVWdhcml0aWMsVWdhcgBWYWksVmFpaQBWaXRoa3VxaSxWaXRoAFdhbmNobyxXY2hvAFdhcmFuZ19DaXRpLFdhcmEAWWV6aWRpLFllemkAWWksWWlpaQBaYW5hYmF6YXJfU3F1YXJlLFphbmIAQZC2AgvyIMAZmUeFGZlHrhmAR44ZgEeEGZZHgBmeR4AZ4WBHphmER4QZgQ2TGeAPOIMsgBmCLAGDLIAZgCwDgCyAGYAsgBmCLACALACTLAC+LI0ajyzgJB2BOOBIHQClBQGxBQGCBQC2NQeaNQOFNQqEBIAZhQSAGY0EgBmCBIAZnwSAGYkEijiZBIA44AsEgBmhBI2LALuLAYKLrwSxlQ26ZgGCZq1/AY5/AJtSAYBSAIqLBJ4EAIEEBckEgBmcBNAggziOIIEZmSCDCwCHCwGBCwGVCwCGCwCACwKDCwGI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eW1ib2wAU28sT3RoZXJfU3ltYm9sAFBjLENvbm5lY3Rvcl9QdW5jdHVhdGlvbgBQZCxEYXNoX1B1bmN0dWF0aW9uAFBzLE9wZW5fUHVuY3R1YXRpb24AUGUsQ2xvc2VfUHVuY3R1YXRpb24AUGksSW5pdGlhbF9QdW5jdHVhdGlvbgBQZixGaW5hbF9QdW5jdHVhdGlvbgBQbyxPdGhlcl9QdW5jdHVhdGlvbgBacyxTcGFjZV9TZXBhcmF0b3IAWmwsTGluZV9TZXBhcmF0b3IAWnAsUGFyYWdyYXBoX1NlcGFyYXRvcgBDYyxDb250cm9sLGNudHJsAENmLEZvcm1hdABDcyxTdXJyb2dhdGUAQ28sUHJpdmF0ZV9Vc2UATEMsQ2FzZWRfTGV0dGVyAEwsTGV0dGVyAE0sTWFyayxDb21iaW5pbmdfTWFyawBOLE51bWJlcgBTLFN5bWJvbABQLFB1bmN0dWF0aW9uLHB1bmN0AFosU2VwYXJhdG9yAEMsT3RoZXIAQZDXAguwCA4AAAA+AAAAwAEAAAAOAAAA8AAAAAB/AAAAgAMBAAA8QVNDSUlfSGV4X0RpZ2l0LEFIZXgAQmlkaV9Db250cm9sLEJpZGlfQwBEYXNoAERlcHJlY2F0ZWQsRGVwAERpYWNyaXRpYyxEaWEARXh0ZW5kZXIsRXh0AEhleF9EaWdpdCxIZXgASURTX0JpbmFyeV9PcGVyYXRvcixJRFNCAElEU19UcmluYXJ5X09wZXJhdG9yLElEU1QASWRlb2dyYXBoaWMsSWRlbwBKb2luX0NvbnRyb2wsSm9pbl9DAExvZ2ljYWxfT3JkZXJfRXhjZXB0aW9uLExPRQBOb25jaGFyYWN0ZXJfQ29kZV9Qb2ludCxOQ2hhcgBQYXR0ZXJuX1N5bnRheCxQYXRfU3luAFBhdHRlcm5fV2hpdGVfU3BhY2UsUGF0X1dTAFF1b3RhdGlvbl9NYXJrLFFNYXJrAFJhZGljYWwAUmVnaW9uYWxfSW5kaWNhdG9yLFJJAFNlbnRlbmNlX1Rlcm1pbmFsLFNUZXJtAFNvZnRfRG90dGVkLFNEAFRlcm1pbmFsX1B1bmN0dWF0aW9uLFRlcm0AVW5pZmllZF9JZGVvZ3JhcGgsVUlkZW8AVmFyaWF0aW9uX1NlbGVjdG9yLFZTAFdoaXRlX1NwYWNlLHNwYWNlAEJpZGlfTWlycm9yZWQsQmlkaV9NAEVtb2ppAEVtb2ppX0NvbXBvbmVudCxFQ29tcABFbW9qaV9Nb2RpZmllcixFTW9kAEVtb2ppX01vZGlmaWVyX0Jhc2UsRUJhc2UARW1vamlfUHJlc2VudGF0aW9uLEVQcmVzAEV4dGVuZGVkX1BpY3RvZ3JhcGhpYyxFeHRQaWN0AERlZmF1bHRfSWdub3JhYmxlX0NvZGVfUG9pbnQsREkASURfU3RhcnQsSURTAENhc2VfSWdub3JhYmxlLENJAEFTQ0lJAEFscGhhYmV0aWMsQWxwaGEAQW55AEFzc2lnbmVkAENhc2VkAENoYW5nZXNfV2hlbl9DYXNlZm9sZGVkLENXQ0YAQ2hhbmdlc19XaGVuX0Nhc2VtYXBwZWQsQ1dDTQBDaGFuZ2VzX1doZW5fTG93ZXJjYXNlZCxDV0wAQ2hhbmdlc19XaGVuX05GS0NfQ2FzZWZvbGRlZCxDV0tDRgBDaGFuZ2VzX1doZW5fVGl0bGVjYXNlZCxDV1QAQ2hhbmdlc19XaGVuX1VwcGVyY2FzZWQsQ1dVAEdyYXBoZW1lX0Jhc2UsR3JfQmFzZQBHcmFwaGVtZV9FeHRlbmQsR3JfRXh0AElEX0NvbnRpbnVlLElEQwBMb3dlcmNhc2UsTG93ZXIATWF0aABVcHBlcmNhc2UsVXBwZXIAWElEX0NvbnRpbnVlLFhJREMAWElEX1N0YXJ0LFhJRFMAQdDfAgvyAgEAnAYHTQMEEACPCwAAEQAIAFNKUQBSAFMAOlRVAFdZP11cAEZhY0JkAGYAaABqAGwAbgAAQAAAAAAaAJMAACA1ACcAIQAkIioAE2ttACYkJxQWGBscPh4/Hzk9IiFBHkAlJSYoICpILEMuSzBMMkRCmQAAlY99foOEEoCCdncSe6N8eHmKkpimoIUAmqGTdTOVAI4AdJmYl5YAAJ4AnAChoBUuLzC0tU+qqRIUHiEiIio0NaanNh9JAACXAVraHTYFAMTDxsXIx8rJzMvE1UXWQtdG2M7Q0tTa2e72/g4HD4CfACGAo+0AwEDGYOfb5pnAAAAGYNwp/RUSBhb43QYVEoQIxhb/3wPAQABGYN7gbTc4ORUUFxYAGhkcGwBft2VERwBPYk5QAABIAAAAo6SlAAAAAAC2AABaAEcAW1ZY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n4PLdYFAzXWfjM11gcDTdS0D1HWfiNV1gcDZdZ8D2nWBwNt1nwzcdYFA4nUtg+J1nwjkdYFA6HWfg+h1gUDqdZ+M6nWBwPB1LQTxdR+F83UfBfZ1H4X4dR8F+3Ufhf11nwQMeJ9BDnifBQ94A8IReK3QEngDARt4LQKAe61NgXsDQoh7gcCJey1FinsDBI17gYCQewPckXstBaB7rciie4NEqHutyKp7lwBAfCFFQHwlDUR8h4BKfBXBSnwXQUt8Hw1MfBeCUnyZgFN8l8BTfJeBWnyXAGR8LwGAfIGAgHwDFoR8wQSQfAMBlHwfBfx+rAEAvhDRAL6sRwm+EDkNviyHKb4sAi2+kDcuvpD/Sb4QvGm+AAAAACAAAABhAAIABAAGALwDCAAKAAwAFQCVAKUAuQDBAMMAxwDLANEA1wDdAOAA5gD4AAgBCgFzABABEgEUASABLAFEAU0BUwFiAWgBagF2AZIBlAGpAbsBxwHRAdUBuQLXATsA2QHbAbcA4QH8AQwCGAIdAiMCJwKjAzMCPwJCAksCTgJRAl0CYAJpAmwCbwJ1AngCgQKKApwCnwKjAq8CuQLFAskCzQLRAtUC5wLtAvEC9QL5Av0CBQMJAw0DEwMXAxsDIwMnAysDLwM1Az0DQQNJA00DUQMLD1cDWwNfA2MDZwNrA28DcwN5A30DgQOFA4kDjQORA5UDmQOdA6ED3BClA8kDzQPZA90D4QPvA/EDPQRPBJkE8AQCBUoFZAVsBXAFcwWaBfoF/gUHBgsGFAYYBh4GIgYoBo4GlAaYBp4GogarBqwD8watA/YGrgP5Bq8D/AbMA/8GzQMCB84DBQcJBw0HEQeGAzIHNQe5AzcHOweIA1MHiQNWB5ADaweKA3cHsAOJB44DmQefB6MHjAO4B48Duwe0AL4HwAfCBxAgywcuAM0HzwcgANIH1gfbB98H5AfqB/AHIAD2BxIiAQgFCAcIHQglCCcIQwAtCDAIkAE2CDkITgBFCEcITAhOCFEIWgCpA1oAUwhXCGAIaQBiCGUIbwh0CHoIfgiiCEkApAimCKkIVgCrCK0IsAi0CFgAtgi4CLsIwAjCCMUIdgDHCMkIzAjQCHgA0gjUCNcI2wjeCOQI5wjwCPMI9gj5CAIJBgkLCQ8JFAkXCRoJIwksCTsJPglBCUQJRwlKCVYJXAlgCWIJZAloCWoJ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\";if(!K(L)){var M=L;L=d.locateFile?d.locateFile(M,q):q+M;}function ca(){var a=L;return Promise.resolve().then(()=>{if(a==L&&v)var b=new Uint8Array(v);else{if(K(a)){b=atob(a.slice(37));for(var c=new Uint8Array(b.length),e=0;e<b.length;++e)c[e]=b.charCodeAt(e);b=c;}else b=void 0;if(!b)throw\"both async and sync fetching of the wasm failed\";}return b;});}function da(a,b){return ca().then(c=>WebAssembly.instantiate(c,a)).then(c=>c).then(b,c=>{u(`failed to asynchronously prepare wasm: ${c}`);w(c);});}function ea(a,b){return da(a,b);}var N=a=>{for(;0<a.length;)a.shift()(d);},O=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf8\"):void 0,P=(a,b)=>{for(var c=b+NaN,e=b;a[e]&&!(e>=c);)++e;if(16<e-b&&a.buffer&&O)return O.decode(a.subarray(b,e));for(c=\"\";b<e;){var f=a[b++];if(f&128){var g=a[b++]&63;if(192==(f&224))c+=String.fromCharCode((f&31)<<6|g);else{var l=a[b++]&63;f=224==(f&240)?(f&15)<<12|g<<6|l:(f&7)<<18|g<<12|l<<6|a[b++]&63;65536>f?c+=String.fromCharCode(f):(f-=65536,c+=String.fromCharCode(55296|f>>10,56320|f&1023));}}else c+=String.fromCharCode(f);}return c;},fa=[0,31,60,91,121,152,182,213,244,274,305,335],ha=[0,31,59,90,120,151,181,212,243,273,304,334],Q=a=>{for(var b=0,c=0;c<a.length;++c){var e=a.charCodeAt(c);127>=e?b++:2047>=e?b+=2:55296<=e&&57343>=e?(b+=4,++c):b+=3;}return b;},R=(a,b,c)=>{var e=A;if(0<c){c=b+c-1;for(var f=0;f<a.length;++f){var g=a.charCodeAt(f);if(55296<=g&&57343>=g){var l=a.charCodeAt(++f);g=65536+((g&1023)<<10)|l&1023;}if(127>=g){if(b>=c)break;e[b++]=g;}else{if(2047>=g){if(b+1>=c)break;e[b++]=192|g>>6;}else{if(65535>=g){if(b+2>=c)break;e[b++]=224|g>>12;}else{if(b+3>=c)break;e[b++]=240|g>>18;e[b++]=128|g>>12&63;}e[b++]=128|g>>6&63;}e[b++]=128|g&63;}}e[b]=0;}},T=a=>{var b=Q(a)+1,c=S(b);c&&R(a,c,b);return c;};function U(){}var ia=[null,[],[]],ka=(a,b,c,e)=>{var f={string:h=>{var r=0;if(null!==h&&void 0!==h&&0!==h){r=Q(h)+1;var Y=V(r);R(h,Y,r);r=Y;}return r;},array:h=>{var r=V(h.length);z.set(h,r);return r;}};a=d[\"_\"+a];var g=[],l=0;if(e)for(var m=0;m<e.length;m++){var t=f[c[m]];t?(0===l&&(l=W()),g[m]=t(e[m])):g[m]=e[m];}c=a.apply(null,g);return c=function(h){0!==l&&ja(l);return\"string\"===b?h?P(A,h):\"\":\"boolean\"===b?!!h:h;}(c);};U=(a,b,c)=>{a=a?P(A,a):\"\";b=null!==b?JSON.parse(b?P(A,b):\"\"):[];try{const e=d.externalCall(a,b);return e?T(e):null;}catch(e){return d.HEAPU8[c]=1,T(e.message);}};var la={a:(a,b,c,e)=>{w(`Assertion failed: ${a?P(A,a):\"\"}, at: `+[b?b?P(A,b):\"\":\"unknown filename\",c,e?e?P(A,e):\"\":\"unknown function\"]);},i:function(a,b,c){a=new Date(1E3*(b+2097152>>>0<4194305-!!a?(a>>>0)+4294967296*b:NaN));B[c>>2]=a.getSeconds();B[c+4>>2]=a.getMinutes();B[c+8>>2]=a.getHours();B[c+12>>2]=a.getDate();B[c+16>>2]=a.getMonth();B[c+20>>2]=a.getFullYear()-1900;B[c+24>>2]=a.getDay();b=a.getFullYear();B[c+28>>2]=(0!==b%4||0===b%100&&0!==b%400?ha:fa)[a.getMonth()]+a.getDate()-1|0;B[c+36>>2]=-(60*a.getTimezoneOffset());b=new Date(a.getFullYear(),6,1).getTimezoneOffset();var e=new Date(a.getFullYear(),0,1).getTimezoneOffset();B[c+32>>2]=(b!=e&&a.getTimezoneOffset()==Math.min(e,b))|0;},d:(a,b,c)=>{function e(t){return(t=t.toTimeString().match(/\\(([A-Za-z ]+)\\)$/))?t[1]:\"GMT\";}var f=new Date().getFullYear(),g=new Date(f,0,1),l=new Date(f,6,1);f=g.getTimezoneOffset();var m=l.getTimezoneOffset();C[a>>2]=60*Math.max(f,m);B[b>>2]=Number(f!=m);a=e(g);b=e(l);a=T(a);b=T(b);m<f?(C[c>>2]=a,C[c+4>>2]=b):(C[c>>2]=b,C[c+4>>2]=a);},b:()=>{w(\"\");},g:U,f:function(a,b){a=a?P(A,a):\"\";let c;try{c=window.JSON.parse(a);}catch(e){c=a;}0!==b?window.alert(a):window.console.log(\"DUMP\",c);},e:()=>Date.now(),j:a=>{var b=A.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var e=b*(1+.2/c);e=Math.min(e,a+100663296);var f=Math;e=Math.max(a,e);a:{f=(f.min.call(f,2147483648,e+(65536-e%65536)%65536)-x.buffer.byteLength+65535)/65536;try{x.grow(f);D();var g=1;break a;}catch(l){}g=void 0;}if(g)return!0;}return!1;},c:(a,b,c,e)=>{for(var f=0,g=0;g<c;g++){var l=C[b>>2],m=C[b+4>>2];b+=8;for(var t=0;t<m;t++){var h=A[l+t],r=ia[a];0===h||10===h?((1===a?aa:u)(P(r,0)),r.length=0):r.push(h);}f+=m;}C[e>>2]=f;return 0;},k:function(a){a=a?P(A,a):\"\";window.console.log(a);},h:function(a){a=a?P(A,a):\"\";return Date.parse(a);},l:function(a,b,c,e){a=a?P(A,a):\"\";b=b?P(A,b):\"\";c=c?P(A,c):\"\";c=`Quickjs -- ${a}: ${b}\\n${c}`;0!==e?window.alert(c):window.console.error(c);}},X=function(){function a(c){X=c.exports;x=X.m;D();F.unshift(X.n);H--;d.monitorRunDependencies?.(H);0==H&&(null!==I&&(clearInterval(I),I=null),J&&(c=J,J=null,c()));return X;}var b={a:la};H++;d.monitorRunDependencies?.(H);if(d.instantiateWasm)try{return d.instantiateWasm(b,a);}catch(c){u(`Module.instantiateWasm callback failed with error: ${c}`),n(c);}ea(b,function(c){a(c.instance);}).catch(n);return{};}();d._evalInSandbox=(a,b)=>(d._evalInSandbox=X.o)(a,b);d._nukeSandbox=()=>(d._nukeSandbox=X.p)();d._init=(a,b)=>(d._init=X.q)(a,b);d._commFun=(a,b)=>(d._commFun=X.r)(a,b);d._dumpMemoryUse=()=>(d._dumpMemoryUse=X.s)();var S=a=>(S=X.t)(a);d._free=a=>(d._free=X.u)(a);var W=()=>(W=X.w)(),ja=a=>(ja=X.x)(a),V=a=>(V=X.y)(a);d.ccall=ka;d.cwrap=(a,b,c,e)=>{var f=!c||c.every(g=>\"number\"===g||\"boolean\"===g);return\"string\"!==b&&f&&!e?d[\"_\"+a]:function(){return ka(a,b,c,arguments,e);};};d.stringToNewUTF8=T;var Z;J=function ma(){Z||na();Z||(J=ma);};function na(){function a(){if(!Z&&(Z=!0,d.calledRun=!0,!y)){N(F);k(d);if(d.onRuntimeInitialized)d.onRuntimeInitialized();if(d.postRun)for(\"function\"==typeof d.postRun&&(d.postRun=[d.postRun]);d.postRun.length;){var b=d.postRun.shift();G.unshift(b);}N(G);}}if(!(0<H)){if(d.preRun)for(\"function\"==typeof d.preRun&&(d.preRun=[d.preRun]);d.preRun.length;)ba();N(E);0<H||(d.setStatus?(d.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){d.setStatus(\"\");},1);a();},1)):a());}}if(d.preInit)for(\"function\"==typeof d.preInit&&(d.preInit=[d.preInit]);0<d.preInit.length;)d.preInit.pop()();na();return moduleArg.ready;};})();/* harmony default export */ const quickjs_eval = (Module);\n;// CONCATENATED MODULE: ./src/pdf.sandbox.external.js\nclass SandboxSupportBase {\n  constructor(win) {\n    this.win = win;\n    this.timeoutIds = new Map();\n    this.commFun = null;\n  }\n  destroy() {\n    this.commFun = null;\n    for (const id of this.timeoutIds.values()) {\n      this.win.clearTimeout(id);\n    }\n    this.timeoutIds = null;\n  }\n  exportValueToSandbox(val) {\n    throw new Error(\"Not implemented\");\n  }\n  importValueFromSandbox(val) {\n    throw new Error(\"Not implemented\");\n  }\n  createErrorForSandbox(errorMessage) {\n    throw new Error(\"Not implemented\");\n  }\n  callSandboxFunction(name, args) {\n    try {\n      args = this.exportValueToSandbox(args);\n      this.commFun(name, args);\n    } catch (e) {\n      this.win.console.error(e);\n    }\n  }\n  createSandboxExternals() {\n    const externals = {\n      setTimeout: (callbackId, nMilliseconds) => {\n        if (typeof callbackId !== \"number\" || typeof nMilliseconds !== \"number\") {\n          return;\n        }\n        if (callbackId === 0) {\n          this.win.clearTimeout(this.timeoutIds.get(callbackId));\n        }\n        const id = this.win.setTimeout(() => {\n          this.timeoutIds.delete(callbackId);\n          this.callSandboxFunction(\"timeoutCb\", {\n            callbackId,\n            interval: false\n          });\n        }, nMilliseconds);\n        this.timeoutIds.set(callbackId, id);\n      },\n      clearTimeout: callbackId => {\n        this.win.clearTimeout(this.timeoutIds.get(callbackId));\n        this.timeoutIds.delete(callbackId);\n      },\n      setInterval: (callbackId, nMilliseconds) => {\n        if (typeof callbackId !== \"number\" || typeof nMilliseconds !== \"number\") {\n          return;\n        }\n        const id = this.win.setInterval(() => {\n          this.callSandboxFunction(\"timeoutCb\", {\n            callbackId,\n            interval: true\n          });\n        }, nMilliseconds);\n        this.timeoutIds.set(callbackId, id);\n      },\n      clearInterval: callbackId => {\n        this.win.clearInterval(this.timeoutIds.get(callbackId));\n        this.timeoutIds.delete(callbackId);\n      },\n      alert: cMsg => {\n        if (typeof cMsg !== \"string\") {\n          return;\n        }\n        this.win.alert(cMsg);\n      },\n      confirm: cMsg => {\n        if (typeof cMsg !== \"string\") {\n          return false;\n        }\n        return this.win.confirm(cMsg);\n      },\n      prompt: (cQuestion, cDefault) => {\n        if (typeof cQuestion !== \"string\" || typeof cDefault !== \"string\") {\n          return null;\n        }\n        return this.win.prompt(cQuestion, cDefault);\n      },\n      parseURL: cUrl => {\n        const url = new this.win.URL(cUrl);\n        const props = [\"hash\", \"host\", \"hostname\", \"href\", \"origin\", \"password\", \"pathname\", \"port\", \"protocol\", \"search\", \"searchParams\", \"username\"];\n        return Object.fromEntries(props.map(name => [name, url[name].toString()]));\n      },\n      send: data => {\n        if (!data) {\n          return;\n        }\n        const event = new this.win.CustomEvent(\"updatefromsandbox\", {\n          detail: this.importValueFromSandbox(data)\n        });\n        this.win.dispatchEvent(event);\n      }\n    };\n    Object.setPrototypeOf(externals, null);\n    return (name, args) => {\n      try {\n        const result = externals[name](...args);\n        return this.exportValueToSandbox(result);\n      } catch (error) {\n        throw this.createErrorForSandbox(error?.toString() ?? \"\");\n      }\n    };\n  }\n}\n;// CONCATENATED MODULE: ./src/pdf.sandbox.js\n\n\nconst pdfjsVersion = \"4.3.136\";\nconst pdfjsBuild = \"0cec64437\";\nclass SandboxSupport extends SandboxSupportBase {\n  exportValueToSandbox(val) {\n    return JSON.stringify(val);\n  }\n  importValueFromSandbox(val) {\n    return val;\n  }\n  createErrorForSandbox(errorMessage) {\n    return new Error(errorMessage);\n  }\n}\nclass Sandbox {\n  constructor(win, module) {\n    this.support = new SandboxSupport(win, this);\n    module.externalCall = this.support.createSandboxExternals();\n    this._module = module;\n    this._alertOnError = 0;\n  }\n  create(data) {\n    const code = [\"var __webpack_exports__ = globalThis.pdfjsSandbox = {};\\n\\n;// CONCATENATED MODULE: ./src/scripting_api/constants.js\\nconst Border = Object.freeze({\\n  s: \\\"solid\\\",\\n  d: \\\"dashed\\\",\\n  b: \\\"beveled\\\",\\n  i: \\\"inset\\\",\\n  u: \\\"underline\\\"\\n});\\nconst Cursor = Object.freeze({\\n  visible: 0,\\n  hidden: 1,\\n  delay: 2\\n});\\nconst Display = Object.freeze({\\n  visible: 0,\\n  hidden: 1,\\n  noPrint: 2,\\n  noView: 3\\n});\\nconst Font = Object.freeze({\\n  Times: \\\"Times-Roman\\\",\\n  TimesB: \\\"Times-Bold\\\",\\n  TimesI: \\\"Times-Italic\\\",\\n  TimesBI: \\\"Times-BoldItalic\\\",\\n  Helv: \\\"Helvetica\\\",\\n  HelvB: \\\"Helvetica-Bold\\\",\\n  HelvI: \\\"Helvetica-Oblique\\\",\\n  HelvBI: \\\"Helvetica-BoldOblique\\\",\\n  Cour: \\\"Courier\\\",\\n  CourB: \\\"Courier-Bold\\\",\\n  CourI: \\\"Courier-Oblique\\\",\\n  CourBI: \\\"Courier-BoldOblique\\\",\\n  Symbol: \\\"Symbol\\\",\\n  ZapfD: \\\"ZapfDingbats\\\",\\n  KaGo: \\\"HeiseiKakuGo-W5-UniJIS-UCS2-H\\\",\\n  KaMi: \\\"HeiseiMin-W3-UniJIS-UCS2-H\\\"\\n});\\nconst Highlight = Object.freeze({\\n  n: \\\"none\\\",\\n  i: \\\"invert\\\",\\n  p: \\\"push\\\",\\n  o: \\\"outline\\\"\\n});\\nconst Position = Object.freeze({\\n  textOnly: 0,\\n  iconOnly: 1,\\n  iconTextV: 2,\\n  textIconV: 3,\\n  iconTextH: 4,\\n  textIconH: 5,\\n  overlay: 6\\n});\\nconst ScaleHow = Object.freeze({\\n  proportional: 0,\\n  anamorphic: 1\\n});\\nconst ScaleWhen = Object.freeze({\\n  always: 0,\\n  never: 1,\\n  tooBig: 2,\\n  tooSmall: 3\\n});\\nconst Style = Object.freeze({\\n  ch: \\\"check\\\",\\n  cr: \\\"cross\\\",\\n  di: \\\"diamond\\\",\\n  ci: \\\"circle\\\",\\n  st: \\\"star\\\",\\n  sq: \\\"square\\\"\\n});\\nconst Trans = Object.freeze({\\n  blindsH: \\\"BlindsHorizontal\\\",\\n  blindsV: \\\"BlindsVertical\\\",\\n  boxI: \\\"BoxIn\\\",\\n  boxO: \\\"BoxOut\\\",\\n  dissolve: \\\"Dissolve\\\",\\n  glitterD: \\\"GlitterDown\\\",\\n  glitterR: \\\"GlitterRight\\\",\\n  glitterRD: \\\"GlitterRightDown\\\",\\n  random: \\\"Random\\\",\\n  replace: \\\"Replace\\\",\\n  splitHI: \\\"SplitHorizontalIn\\\",\\n  splitHO: \\\"SplitHorizontalOut\\\",\\n  splitVI: \\\"SplitVerticalIn\\\",\\n  splitVO: \\\"SplitVerticalOut\\\",\\n  wipeD: \\\"WipeDown\\\",\\n  wipeL: \\\"WipeLeft\\\",\\n  wipeR: \\\"WipeRight\\\",\\n  wipeU: \\\"WipeUp\\\"\\n});\\nconst ZoomType = Object.freeze({\\n  none: \\\"NoVary\\\",\\n  fitP: \\\"FitPage\\\",\\n  fitW: \\\"FitWidth\\\",\\n  fitH: \\\"FitHeight\\\",\\n  fitV: \\\"FitVisibleWidth\\\",\\n  pref: \\\"Preferred\\\",\\n  refW: \\\"ReflowWidth\\\"\\n});\\nconst GlobalConstants = Object.freeze({\\n  IDS_GREATER_THAN: \\\"Invalid value: must be greater than or equal to % s.\\\",\\n  IDS_GT_AND_LT: \\\"Invalid value: must be greater than or equal to % s \\\" + \\\"and less than or equal to % s.\\\",\\n  IDS_LESS_THAN: \\\"Invalid value: must be less than or equal to % s.\\\",\\n  IDS_INVALID_MONTH: \\\"** Invalid **\\\",\\n  IDS_INVALID_DATE: \\\"Invalid date / time: please ensure that the date / time exists. Field\\\",\\n  IDS_INVALID_DATE2: \\\" should match format \\\",\\n  IDS_INVALID_VALUE: \\\"The value entered does not match the format of the field\\\",\\n  IDS_AM: \\\"am\\\",\\n  IDS_PM: \\\"pm\\\",\\n  IDS_MONTH_INFO: \\\"January[1] February[2] March[3] April[4] May[5] \\\" + \\\"June[6] July[7] August[8] September[9] October[10] \\\" + \\\"November[11] December[12] Sept[9] Jan[1] Feb[2] Mar[3] \\\" + \\\"Apr[4] Jun[6] Jul[7] Aug[8] Sep[9] Oct[10] Nov[11] Dec[12]\\\",\\n  IDS_STARTUP_CONSOLE_MSG: \\\"** ^ _ ^ **\\\",\\n  RE_NUMBER_ENTRY_DOT_SEP: [\\\"[+-]?\\\\\\\\d*\\\\\\\\.?\\\\\\\\d*\\\"],\\n  RE_NUMBER_COMMIT_DOT_SEP: [\\\"[+-]?\\\\\\\\d+(\\\\\\\\.\\\\\\\\d+)?\\\", \\\"[+-]?\\\\\\\\.\\\\\\\\d+\\\", \\\"[+-]?\\\\\\\\d+\\\\\\\\.\\\"],\\n  RE_NUMBER_ENTRY_COMMA_SEP: [\\\"[+-]?\\\\\\\\d*,?\\\\\\\\d*\\\"],\\n  RE_NUMBER_COMMIT_COMMA_SEP: [\\\"[+-]?\\\\\\\\d+([.,]\\\\\\\\d+)?\\\", \\\"[+-]?[.,]\\\\\\\\d+\\\", \\\"[+-]?\\\\\\\\d+[.,]\\\"],\\n  RE_ZIP_ENTRY: [\\\"\\\\\\\\d{0,5}\\\"],\\n  RE_ZIP_COMMIT: [\\\"\\\\\\\\d{5}\\\"],\\n  RE_ZIP4_ENTRY: [\\\"\\\\\\\\d{0,5}(\\\\\\\\.|[- ])?\\\\\\\\d{0,4}\\\"],\\n  RE_ZIP4_COMMIT: [\\\"\\\\\\\\d{5}(\\\\\\\\.|[- ])?\\\\\\\\d{4}\\\"],\\n  RE_PHONE_ENTRY: [\\\"\\\\\\\\d{0,3}(\\\\\\\\.|[- ])?\\\\\\\\d{0,3}(\\\\\\\\.|[- ])?\\\\\\\\d{0,4}\\\", \\\"\\\\\\\\(\\\\\\\\d{0,3}\\\", \\\"\\\\\\\\(\\\\\\\\d{0,3}\\\\\\\\)(\\\\\\\\.|[- ])?\\\\\\\\d{0,3}(\\\\\\\\.|[- ])?\\\\\\\\d{0,4}\\\", \\\"\\\\\\\\(\\\\\\\\d{0,3}(\\\\\\\\.|[- ])?\\\\\\\\d{0,3}(\\\\\\\\.|[- ])?\\\\\\\\d{0,4}\\\", \\\"\\\\\\\\d{0,3}\\\\\\\\)(\\\\\\\\.|[- ])?\\\\\\\\d{0,3}(\\\\\\\\.|[- ])?\\\\\\\\d{0,4}\\\", \\\"011(\\\\\\\\.|[- \\\\\\\\d])*\\\"],\\n  RE_PHONE_COMMIT: [\\\"\\\\\\\\d{3}(\\\\\\\\.|[- ])?\\\\\\\\d{4}\\\", \\\"\\\\\\\\d{3}(\\\\\\\\.|[- ])?\\\\\\\\d{3}(\\\\\\\\.|[- ])?\\\\\\\\d{4}\\\", \\\"\\\\\\\\(\\\\\\\\d{3}\\\\\\\\)(\\\\\\\\.|[- ])?\\\\\\\\d{3}(\\\\\\\\.|[- ])?\\\\\\\\d{4}\\\", \\\"011(\\\\\\\\.|[- \\\\\\\\d])*\\\"],\\n  RE_SSN_ENTRY: [\\\"\\\\\\\\d{0,3}(\\\\\\\\.|[- ])?\\\\\\\\d{0,2}(\\\\\\\\.|[- ])?\\\\\\\\d{0,4}\\\"],\\n  RE_SSN_COMMIT: [\\\"\\\\\\\\d{3}(\\\\\\\\.|[- ])?\\\\\\\\d{2}(\\\\\\\\.|[- ])?\\\\\\\\d{4}\\\"]\\n});\\n\\n;// CONCATENATED MODULE: ./src/scripting_api/common.js\\nconst FieldType = {\\n  none: 0,\\n  number: 1,\\n  percent: 2,\\n  date: 3,\\n  time: 4\\n};\\nfunction createActionsMap(actions) {\\n  const actionsMap = new Map();\\n  if (actions) {\\n    for (const [eventType, actionsForEvent] of Object.entries(actions)) {\\n      actionsMap.set(eventType, actionsForEvent);\\n    }\\n  }\\n  return actionsMap;\\n}\\nfunction getFieldType(actions) {\\n  let format = actions.get(\\\"Format\\\");\\n  if (!format) {\\n    return FieldType.none;\\n  }\\n  format = format[0];\\n  format = format.trim();\\n  if (format.startsWith(\\\"AFNumber_\\\")) {\\n    return FieldType.number;\\n  }\\n  if (format.startsWith(\\\"AFPercent_\\\")) {\\n    return FieldType.percent;\\n  }\\n  if (format.startsWith(\\\"AFDate_\\\")) {\\n    return FieldType.date;\\n  }\\n  if (format.startsWith(\\\"AFTime_\\\")) {\\n    return FieldType.time;\\n  }\\n  return FieldType.none;\\n}\\n\\n;// CONCATENATED MODULE: ./src/shared/scripting_utils.js\\nfunction makeColorComp(n) {\\n  return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, \\\"0\\\");\\n}\\nfunction scaleAndClamp(x) {\\n  return Math.max(0, Math.min(255, 255 * x));\\n}\\nclass ColorConverters {\\n  static CMYK_G([c, y, m, k]) {\\n    return [\\\"G\\\", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)];\\n  }\\n  static G_CMYK([g]) {\\n    return [\\\"CMYK\\\", 0, 0, 0, 1 - g];\\n  }\\n  static G_RGB([g]) {\\n    return [\\\"RGB\\\", g, g, g];\\n  }\\n  static G_rgb([g]) {\\n    g = scaleAndClamp(g);\\n    return [g, g, g];\\n  }\\n  static G_HTML([g]) {\\n    const G = makeColorComp(g);\\n    return `#${G}${G}${G}`;\\n  }\\n  static RGB_G([r, g, b]) {\\n    return [\\\"G\\\", 0.3 * r + 0.59 * g + 0.11 * b];\\n  }\\n  static RGB_rgb(color) {\\n    return color.map(scaleAndClamp);\\n  }\\n  static RGB_HTML(color) {\\n    return `#${color.map(makeColorComp).join(\\\"\\\")}`;\\n  }\\n  static T_HTML() {\\n    return \\\"#00000000\\\";\\n  }\\n  static T_rgb() {\\n    return [null];\\n  }\\n  static CMYK_RGB([c, y, m, k]) {\\n    return [\\\"RGB\\\", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)];\\n  }\\n  static CMYK_rgb([c, y, m, k]) {\\n    return [scaleAndClamp(1 - Math.min(1, c + k)), scaleAndClamp(1 - Math.min(1, m + k)), scaleAndClamp(1 - Math.min(1, y + k))];\\n  }\\n  static CMYK_HTML(components) {\\n    const rgb = this.CMYK_RGB(components).slice(1);\\n    return this.RGB_HTML(rgb);\\n  }\\n  static RGB_CMYK([r, g, b]) {\\n    const c = 1 - r;\\n    const m = 1 - g;\\n    const y = 1 - b;\\n    const k = Math.min(c, m, y);\\n    return [\\\"CMYK\\\", c, m, y, k];\\n  }\\n}\\n\\n;// CONCATENATED MODULE: ./src/scripting_api/pdf_object.js\\nclass PDFObject {\\n  constructor(data) {\\n    this._expandos = Object.create(null);\\n    this._send = data.send || null;\\n    this._id = data.id || null;\\n  }\\n}\\n\\n;// CONCATENATED MODULE: ./src/scripting_api/color.js\\n\\n\\nclass Color extends PDFObject {\\n  constructor() {\\n    super({});\\n    this.transparent = [\\\"T\\\"];\\n    this.black = [\\\"G\\\", 0];\\n    this.white = [\\\"G\\\", 1];\\n    this.red = [\\\"RGB\\\", 1, 0, 0];\\n    this.green = [\\\"RGB\\\", 0, 1, 0];\\n    this.blue = [\\\"RGB\\\", 0, 0, 1];\\n    this.cyan = [\\\"CMYK\\\", 1, 0, 0, 0];\\n    this.magenta = [\\\"CMYK\\\", 0, 1, 0, 0];\\n    this.yellow = [\\\"CMYK\\\", 0, 0, 1, 0];\\n    this.dkGray = [\\\"G\\\", 0.25];\\n    this.gray = [\\\"G\\\", 0.5];\\n    this.ltGray = [\\\"G\\\", 0.75];\\n  }\\n  static _isValidSpace(cColorSpace) {\\n    return typeof cColorSpace === \\\"string\\\" && (cColorSpace === \\\"T\\\" || cColorSpace === \\\"G\\\" || cColorSpace === \\\"RGB\\\" || cColorSpace === \\\"CMYK\\\");\\n  }\\n  static _isValidColor(colorArray) {\\n    if (!Array.isArray(colorArray) || colorArray.length === 0) {\\n      return false;\\n    }\\n    const space = colorArray[0];\\n    if (!Color._isValidSpace(space)) {\\n      return false;\\n    }\\n    switch (space) {\\n      case \\\"T\\\":\\n        if (colorArray.length !== 1) {\\n          return false;\\n        }\\n        break;\\n      case \\\"G\\\":\\n        if (colorArray.length !== 2) {\\n          return false;\\n        }\\n        break;\\n      case \\\"RGB\\\":\\n        if (colorArray.length !== 4) {\\n          return false;\\n        }\\n        break;\\n      case \\\"CMYK\\\":\\n        if (colorArray.length !== 5) {\\n          return false;\\n        }\\n        break;\\n      default:\\n        return false;\\n    }\\n    return colorArray.slice(1).every(c => typeof c === \\\"number\\\" && c >= 0 && c <= 1);\\n  }\\n  static _getCorrectColor(colorArray) {\\n    return Color._isValidColor(colorArray) ? colorArray : [\\\"G\\\", 0];\\n  }\\n  convert(colorArray, cColorSpace) {\\n    if (!Color._isValidSpace(cColorSpace)) {\\n      return this.black;\\n    }\\n    if (cColorSpace === \\\"T\\\") {\\n      return [\\\"T\\\"];\\n    }\\n    colorArray = Color._getCorrectColor(colorArray);\\n    if (colorArray[0] === cColorSpace) {\\n      return colorArray;\\n    }\\n    if (colorArray[0] === \\\"T\\\") {\\n      return this.convert(this.black, cColorSpace);\\n    }\\n    return ColorConverters[`${colorArray[0]}_${cColorSpace}`](colorArray.slice(1));\\n  }\\n  equal(colorArray1, colorArray2) {\\n    colorArray1 = Color._getCorrectColor(colorArray1);\\n    colorArray2 = Color._getCorrectColor(colorArray2);\\n    if (colorArray1[0] === \\\"T\\\" || colorArray2[0] === \\\"T\\\") {\\n      return colorArray1[0] === \\\"T\\\" && colorArray2[0] === \\\"T\\\";\\n    }\\n    if (colorArray1[0] !== colorArray2[0]) {\\n      colorArray2 = this.convert(colorArray2, colorArray1[0]);\\n    }\\n    return colorArray1.slice(1).every((c, i) => c === colorArray2[i + 1]);\\n  }\\n}\\n\\n;// CONCATENATED MODULE: ./src/scripting_api/field.js\\n\\n\\n\\nclass Field extends PDFObject {\\n  constructor(data) {\\n    super(data);\\n    this.alignment = data.alignment || \\\"left\\\";\\n    this.borderStyle = data.borderStyle || \\\"\\\";\\n    this.buttonAlignX = data.buttonAlignX || 50;\\n    this.buttonAlignY = data.buttonAlignY || 50;\\n    this.buttonFitBounds = data.buttonFitBounds;\\n    this.buttonPosition = data.buttonPosition;\\n    this.buttonScaleHow = data.buttonScaleHow;\\n    this.ButtonScaleWhen = data.buttonScaleWhen;\\n    this.calcOrderIndex = data.calcOrderIndex;\\n    this.comb = data.comb;\\n    this.commitOnSelChange = data.commitOnSelChange;\\n    this.currentValueIndices = data.currentValueIndices;\\n    this.defaultStyle = data.defaultStyle;\\n    this.defaultValue = data.defaultValue;\\n    this.doNotScroll = data.doNotScroll;\\n    this.doNotSpellCheck = data.doNotSpellCheck;\\n    this.delay = data.delay;\\n    this.display = data.display;\\n    this.doc = data.doc.wrapped;\\n    this.editable = data.editable;\\n    this.exportValues = data.exportValues;\\n    this.fileSelect = data.fileSelect;\\n    this.hidden = data.hidden;\\n    this.highlight = data.highlight;\\n    this.lineWidth = data.lineWidth;\\n    this.multiline = data.multiline;\\n    this.multipleSelection = !!data.multipleSelection;\\n    this.name = data.name;\\n    this.password = data.password;\\n    this.print = data.print;\\n    this.radiosInUnison = data.radiosInUnison;\\n    this.readonly = data.readonly;\\n    this.rect = data.rect;\\n    this.required = data.required;\\n    this.richText = data.richText;\\n    this.richValue = data.richValue;\\n    this.style = data.style;\\n    this.submitName = data.submitName;\\n    this.textFont = data.textFont;\\n    this.textSize = data.textSize;\\n    this.type = data.type;\\n    this.userName = data.userName;\\n    this._actions = createActionsMap(data.actions);\\n    this._browseForFileToSubmit = data.browseForFileToSubmit || null;\\n    this._buttonCaption = null;\\n    this._buttonIcon = null;\\n    this._charLimit = data.charLimit;\\n    this._children = null;\\n    this._currentValueIndices = data.currentValueIndices || 0;\\n    this._document = data.doc;\\n    this._fieldPath = data.fieldPath;\\n    this._fillColor = data.fillColor || [\\\"T\\\"];\\n    this._isChoice = Array.isArray(data.items);\\n    this._items = data.items || [];\\n    this._hasValue = data.hasOwnProperty(\\\"value\\\");\\n    this._page = data.page || 0;\\n    this._strokeColor = data.strokeColor || [\\\"G\\\", 0];\\n    this._textColor = data.textColor || [\\\"G\\\", 0];\\n    this._value = null;\\n    this._kidIds = data.kidIds || null;\\n    this._fieldType = getFieldType(this._actions);\\n    this._siblings = data.siblings || null;\\n    this._rotation = data.rotation || 0;\\n    this._globalEval = data.globalEval;\\n    this._appObjects = data.appObjects;\\n    this.value = data.value || \\\"\\\";\\n  }\\n  get currentValueIndices() {\\n    if (!this._isChoice) {\\n      return 0;\\n    }\\n    return this._currentValueIndices;\\n  }\\n  set currentValueIndices(indices) {\\n    if (!this._isChoice) {\\n      return;\\n    }\\n    if (!Array.isArray(indices)) {\\n      indices = [indices];\\n    }\\n    if (!indices.every(i => typeof i === \\\"number\\\" && Number.isInteger(i) && i >= 0 && i < this.numItems)) {\\n      return;\\n    }\\n    indices.sort();\\n    if (this.multipleSelection) {\\n      this._currentValueIndices = indices;\\n      this._value = [];\\n      indices.forEach(i => {\\n        this._value.push(this._items[i].displayValue);\\n      });\\n    } else if (indices.length > 0) {\\n      indices = indices.splice(1, indices.length - 1);\\n      this._currentValueIndices = indices[0];\\n      this._value = this._items[this._currentValueIndices];\\n    }\\n    this._send({\\n      id: this._id,\\n      indices\\n    });\\n  }\\n  get fillColor() {\\n    return this._fillColor;\\n  }\\n  set fillColor(color) {\\n    if (Color._isValidColor(color)) {\\n      this._fillColor = color;\\n    }\\n  }\\n  get bgColor() {\\n    return this.fillColor;\\n  }\\n  set bgColor(color) {\\n    this.fillColor = color;\\n  }\\n  get charLimit() {\\n    return this._charLimit;\\n  }\\n  set charLimit(limit) {\\n    if (typeof limit !== \\\"number\\\") {\\n      throw new Error(\\\"Invalid argument value\\\");\\n    }\\n    this._charLimit = Math.max(0, Math.floor(limit));\\n  }\\n  get numItems() {\\n    if (!this._isChoice) {\\n      throw new Error(\\\"Not a choice widget\\\");\\n    }\\n    return this._items.length;\\n  }\\n  set numItems(_) {\\n    throw new Error(\\\"field.numItems is read-only\\\");\\n  }\\n  get strokeColor() {\\n    return this._strokeColor;\\n  }\\n  set strokeColor(color) {\\n    if (Color._isValidColor(color)) {\\n      this._strokeColor = color;\\n    }\\n  }\\n  get borderColor() {\\n    return this.strokeColor;\\n  }\\n  set borderColor(color) {\\n    this.strokeColor = color;\\n  }\\n  get page() {\\n    return this._page;\\n  }\\n  set page(_) {\\n    throw new Error(\\\"field.page is read-only\\\");\\n  }\\n  get rotation() {\\n    return this._rotation;\\n  }\\n  set rotation(angle) {\\n    angle = Math.floor(angle);\\n    if (angle % 90 !== 0) {\\n      throw new Error(\\\"Invalid rotation: must be a multiple of 90\\\");\\n    }\\n    angle %= 360;\\n    if (angle < 0) {\\n      angle += 360;\\n    }\\n    this._rotation = angle;\\n  }\\n  get textColor() {\\n    return this._textColor;\\n  }\\n  set textColor(color) {\\n    if (Color._isValidColor(color)) {\\n      this._textColor = color;\\n    }\\n  }\\n  get fgColor() {\\n    return this.textColor;\\n  }\\n  set fgColor(color) {\\n    this.textColor = color;\\n  }\\n  get value() {\\n    return this._value;\\n  }\\n  set value(value) {\\n    if (this._isChoice) {\\n      this._setChoiceValue(value);\\n      return;\\n    }\\n    if (value === \\\"\\\" || typeof value !== \\\"string\\\" || this._fieldType >= FieldType.date) {\\n      this._originalValue = undefined;\\n      this._value = value;\\n      return;\\n    }\\n    this._originalValue = value;\\n    const _value = value.trim().replace(\\\",\\\", \\\".\\\");\\n    this._value = !isNaN(_value) ? parseFloat(_value) : value;\\n  }\\n  _getValue() {\\n    return this._originalValue ?? this.value;\\n  }\\n  _setChoiceValue(value) {\\n    if (this.multipleSelection) {\\n      if (!Array.isArray(value)) {\\n        value = [value];\\n      }\\n      const values = new Set(value);\\n      if (Array.isArray(this._currentValueIndices)) {\\n        this._currentValueIndices.length = 0;\\n        this._value.length = 0;\\n      } else {\\n        this._currentValueIndices = [];\\n        this._value = [];\\n      }\\n      this._items.forEach((item, i) => {\\n        if (values.has(item.exportValue)) {\\n          this._currentValueIndices.push(i);\\n          this._value.push(item.exportValue);\\n        }\\n      });\\n    } else {\\n      if (Array.isArray(value)) {\\n        value = value[0];\\n      }\\n      const index = this._items.findIndex(({\\n        exportValue\\n      }) => value === exportValue);\\n      if (index !== -1) {\\n        this._currentValueIndices = index;\\n        this._value = this._items[index].exportValue;\\n      }\\n    }\\n  }\\n  get valueAsString() {\\n    return (this._value ?? \\\"\\\").toString();\\n  }\\n  set valueAsString(_) {}\\n  browseForFileToSubmit() {\\n    if (this._browseForFileToSubmit) {\\n      this._browseForFileToSubmit();\\n    }\\n  }\\n  buttonGetCaption(nFace = 0) {\\n    if (this._buttonCaption) {\\n      return this._buttonCaption[nFace];\\n    }\\n    return \\\"\\\";\\n  }\\n  buttonGetIcon(nFace = 0) {\\n    if (this._buttonIcon) {\\n      return this._buttonIcon[nFace];\\n    }\\n    return null;\\n  }\\n  buttonImportIcon(cPath = null, nPave = 0) {}\\n  buttonSetCaption(cCaption, nFace = 0) {\\n    if (!this._buttonCaption) {\\n      this._buttonCaption = [\\\"\\\", \\\"\\\", \\\"\\\"];\\n    }\\n    this._buttonCaption[nFace] = cCaption;\\n  }\\n  buttonSetIcon(oIcon, nFace = 0) {\\n    if (!this._buttonIcon) {\\n      this._buttonIcon = [null, null, null];\\n    }\\n    this._buttonIcon[nFace] = oIcon;\\n  }\\n  checkThisBox(nWidget, bCheckIt = true) {}\\n  clearItems() {\\n    if (!this._isChoice) {\\n      throw new Error(\\\"Not a choice widget\\\");\\n    }\\n    this._items = [];\\n    this._send({\\n      id: this._id,\\n      clear: null\\n    });\\n  }\\n  deleteItemAt(nIdx = null) {\\n    if (!this._isChoice) {\\n      throw new Error(\\\"Not a choice widget\\\");\\n    }\\n    if (!this.numItems) {\\n      return;\\n    }\\n    if (nIdx === null) {\\n      nIdx = Array.isArray(this._currentValueIndices) ? this._currentValueIndices[0] : this._currentValueIndices;\\n      nIdx ||= 0;\\n    }\\n    if (nIdx < 0 || nIdx >= this.numItems) {\\n      nIdx = this.numItems - 1;\\n    }\\n    this._items.splice(nIdx, 1);\\n    if (Array.isArray(this._currentValueIndices)) {\\n      let index = this._currentValueIndices.findIndex(i => i >= nIdx);\\n      if (index !== -1) {\\n        if (this._currentValueIndices[index] === nIdx) {\\n          this._currentValueIndices.splice(index, 1);\\n        }\\n        for (const ii = this._currentValueIndices.length; index < ii; index++) {\\n          --this._currentValueIndices[index];\\n        }\\n      }\\n    } else if (this._currentValueIndices === nIdx) {\\n      this._currentValueIndices = this.numItems > 0 ? 0 : -1;\\n    } else if (this._currentValueIndices > nIdx) {\\n      --this._currentValueIndices;\\n    }\\n    this._send({\\n      id: this._id,\\n      remove: nIdx\\n    });\\n  }\\n  getItemAt(nIdx = -1, bExportValue = false) {\\n    if (!this._isChoice) {\\n      throw new Error(\\\"Not a choice widget\\\");\\n    }\\n    if (nIdx < 0 || nIdx >= this.numItems) {\\n      nIdx = this.numItems - 1;\\n    }\\n    const item = this._items[nIdx];\\n    return bExportValue ? item.exportValue : item.displayValue;\\n  }\\n  getArray() {\\n    if (this._kidIds) {\\n      const array = [];\\n      const fillArrayWithKids = kidIds => {\\n        for (const id of kidIds) {\\n          const obj = this._appObjects[id];\\n          if (!obj) {\\n            continue;\\n          }\\n          if (obj.obj._hasValue) {\\n            array.push(obj.wrapped);\\n          }\\n          if (obj.obj._kidIds) {\\n            fillArrayWithKids(obj.obj._kidIds);\\n          }\\n        }\\n      };\\n      fillArrayWithKids(this._kidIds);\\n      return array;\\n    }\\n    if (this._children === null) {\\n      this._children = this._document.obj._getTerminalChildren(this._fieldPath);\\n    }\\n    return this._children;\\n  }\\n  getLock() {\\n    return undefined;\\n  }\\n  isBoxChecked(nWidget) {\\n    return false;\\n  }\\n  isDefaultChecked(nWidget) {\\n    return false;\\n  }\\n  insertItemAt(cName, cExport = undefined, nIdx = 0) {\\n    if (!this._isChoice) {\\n      throw new Error(\\\"Not a choice widget\\\");\\n    }\\n    if (!cName) {\\n      return;\\n    }\\n    if (nIdx < 0 || nIdx > this.numItems) {\\n      nIdx = this.numItems;\\n    }\\n    if (this._items.some(({\\n      displayValue\\n    }) => displayValue === cName)) {\\n      return;\\n    }\\n    if (cExport === undefined) {\\n      cExport = cName;\\n    }\\n    const data = {\\n      displayValue: cName,\\n      exportValue: cExport\\n    };\\n    this._items.splice(nIdx, 0, data);\\n    if (Array.isArray(this._currentValueIndices)) {\\n      let index = this._currentValueIndices.findIndex(i => i >= nIdx);\\n      if (index !== -1) {\\n        for (const ii = this._currentValueIndices.length; index < ii; index++) {\\n          ++this._currentValueIndices[index];\\n        }\\n      }\\n    } else if (this._currentValueIndices >= nIdx) {\\n      ++this._currentValueIndices;\\n    }\\n    this._send({\\n      id: this._id,\\n      insert: {\\n        index: nIdx,\\n        ...data\\n      }\\n    });\\n  }\\n  setAction(cTrigger, cScript) {\\n    if (typeof cTrigger !== \\\"string\\\" || typeof cScript !== \\\"string\\\") {\\n      return;\\n    }\\n    if (!(cTrigger in this._actions)) {\\n      this._actions[cTrigger] = [];\\n    }\\n    this._actions[cTrigger].push(cScript);\\n  }\\n  setFocus() {\\n    this._send({\\n      id: this._id,\\n      focus: true\\n    });\\n  }\\n  setItems(oArray) {\\n    if (!this._isChoice) {\\n      throw new Error(\\\"Not a choice widget\\\");\\n    }\\n    this._items.length = 0;\\n    for (const element of oArray) {\\n      let displayValue, exportValue;\\n      if (Array.isArray(element)) {\\n        displayValue = element[0]?.toString() || \\\"\\\";\\n        exportValue = element[1]?.toString() || \\\"\\\";\\n      } else {\\n        displayValue = exportValue = element?.toString() || \\\"\\\";\\n      }\\n      this._items.push({\\n        displayValue,\\n        exportValue\\n      });\\n    }\\n    this._currentValueIndices = 0;\\n    this._send({\\n      id: this._id,\\n      items: this._items\\n    });\\n  }\\n  setLock() {}\\n  signatureGetModifications() {}\\n  signatureGetSeedValue() {}\\n  signatureInfo() {}\\n  signatureSetSeedValue() {}\\n  signatureSign() {}\\n  signatureValidate() {}\\n  _isButton() {\\n    return false;\\n  }\\n  _reset() {\\n    this.value = this.defaultValue;\\n  }\\n  _runActions(event) {\\n    const eventName = event.name;\\n    if (!this._actions.has(eventName)) {\\n      return false;\\n    }\\n    const actions = this._actions.get(eventName);\\n    try {\\n      for (const action of actions) {\\n        this._globalEval(action);\\n      }\\n    } catch (error) {\\n      event.rc = false;\\n      throw error;\\n    }\\n    return true;\\n  }\\n}\\nclass RadioButtonField extends Field {\\n  constructor(otherButtons, data) {\\n    super(data);\\n    this.exportValues = [this.exportValues];\\n    this._radioIds = [this._id];\\n    this._radioActions = [this._actions];\\n    for (const radioData of otherButtons) {\\n      this.exportValues.push(radioData.exportValues);\\n      this._radioIds.push(radioData.id);\\n      this._radioActions.push(createActionsMap(radioData.actions));\\n      if (this._value === radioData.exportValues) {\\n        this._id = radioData.id;\\n      }\\n    }\\n    this._hasBeenInitialized = true;\\n    this._value = data.value || \\\"\\\";\\n  }\\n  get value() {\\n    return this._value;\\n  }\\n  set value(value) {\\n    if (!this._hasBeenInitialized) {\\n      return;\\n    }\\n    if (value === null || value === undefined) {\\n      this._value = \\\"\\\";\\n    }\\n    const i = this.exportValues.indexOf(value);\\n    if (0 <= i && i < this._radioIds.length) {\\n      this._id = this._radioIds[i];\\n      this._value = value;\\n    } else if (value === \\\"Off\\\" && this._radioIds.length === 2) {\\n      const nextI = (1 + this._radioIds.indexOf(this._id)) % 2;\\n      this._id = this._radioIds[nextI];\\n      this._value = this.exportValues[nextI];\\n    }\\n  }\\n  checkThisBox(nWidget, bCheckIt = true) {\\n    if (nWidget < 0 || nWidget >= this._radioIds.length || !bCheckIt) {\\n      return;\\n    }\\n    this._id = this._radioIds[nWidget];\\n    this._value = this.exportValues[nWidget];\\n    this._send({\\n      id: this._id,\\n      value: this._value\\n    });\\n  }\\n  isBoxChecked(nWidget) {\\n    return nWidget >= 0 && nWidget < this._radioIds.length && this._id === this._radioIds[nWidget];\\n  }\\n  isDefaultChecked(nWidget) {\\n    return nWidget >= 0 && nWidget < this.exportValues.length && this.defaultValue === this.exportValues[nWidget];\\n  }\\n  _getExportValue(state) {\\n    const i = this._radioIds.indexOf(this._id);\\n    return this.exportValues[i];\\n  }\\n  _runActions(event) {\\n    const i = this._radioIds.indexOf(this._id);\\n    this._actions = this._radioActions[i];\\n    return super._runActions(event);\\n  }\\n  _isButton() {\\n    return true;\\n  }\\n}\\nclass CheckboxField extends RadioButtonField {\\n  get value() {\\n    return this._value;\\n  }\\n  set value(value) {\\n    if (!value || value === \\\"Off\\\") {\\n      this._value = \\\"Off\\\";\\n    } else {\\n      super.value = value;\\n    }\\n  }\\n  _getExportValue(state) {\\n    return state ? super._getExportValue(state) : \\\"Off\\\";\\n  }\\n  isBoxChecked(nWidget) {\\n    if (this._value === \\\"Off\\\") {\\n      return false;\\n    }\\n    return super.isBoxChecked(nWidget);\\n  }\\n  isDefaultChecked(nWidget) {\\n    if (this.defaultValue === \\\"Off\\\") {\\n      return this._value === \\\"Off\\\";\\n    }\\n    return super.isDefaultChecked(nWidget);\\n  }\\n  checkThisBox(nWidget, bCheckIt = true) {\\n    if (nWidget < 0 || nWidget >= this._radioIds.length) {\\n      return;\\n    }\\n    this._id = this._radioIds[nWidget];\\n    this._value = bCheckIt ? this.exportValues[nWidget] : \\\"Off\\\";\\n    this._send({\\n      id: this._id,\\n      value: this._value\\n    });\\n  }\\n}\\n\\n;// CONCATENATED MODULE: ./src/scripting_api/aform.js\\n\\nclass AForm {\\n  constructor(document, app, util, color) {\\n    this._document = document;\\n    this._app = app;\\n    this._util = util;\\n    this._color = color;\\n    this._dateFormats = [\\\"m/d\\\", \\\"m/d/yy\\\", \\\"mm/dd/yy\\\", \\\"mm/yy\\\", \\\"d-mmm\\\", \\\"d-mmm-yy\\\", \\\"dd-mmm-yy\\\", \\\"yy-mm-dd\\\", \\\"mmm-yy\\\", \\\"mmmm-yy\\\", \\\"mmm d, yyyy\\\", \\\"mmmm d, yyyy\\\", \\\"m/d/yy h:MM tt\\\", \\\"m/d/yy HH:MM\\\"];\\n    this._timeFormats = [\\\"HH:MM\\\", \\\"h:MM tt\\\", \\\"HH:MM:ss\\\", \\\"h:MM:ss tt\\\"];\\n    this._dateActionsCache = new Map();\\n    this._emailRegex = new RegExp(\\\"^[a-zA-Z0-9.!#$%&'*+\\\\\\\\/=?^_`{|}~-]+\\\" + \\\"@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\\" + \\\"(?:\\\\\\\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$\\\");\\n  }\\n  _mkTargetName(event) {\\n    return event.target ? `[ ${event.target.name} ]` : \\\"\\\";\\n  }\\n  _tryToGuessDate(cFormat, cDate) {\\n    let actions = this._dateActionsCache.get(cFormat);\\n    if (!actions) {\\n      actions = [];\\n      this._dateActionsCache.set(cFormat, actions);\\n      cFormat.replaceAll(/(d+)|(m+)|(y+)|(H+)|(M+)|(s+)/g, function (match, d, m, y, H, M, s) {\\n        if (d) {\\n          actions.push((n, date) => {\\n            if (n >= 1 && n <= 31) {\\n              date.setDate(n);\\n              return true;\\n            }\\n            return false;\\n          });\\n        } else if (m) {\\n          actions.push((n, date) => {\\n            if (n >= 1 && n <= 12) {\\n              date.setMonth(n - 1);\\n              return true;\\n            }\\n            return false;\\n          });\\n        } else if (y) {\\n          actions.push((n, date) => {\\n            if (n < 50) {\\n              n += 2000;\\n            } else if (n < 100) {\\n              n += 1900;\\n            }\\n            date.setYear(n);\\n            return true;\\n          });\\n        } else if (H) {\\n          actions.push((n, date) => {\\n            if (n >= 0 && n <= 23) {\\n              date.setHours(n);\\n              return true;\\n            }\\n            return false;\\n          });\\n        } else if (M) {\\n          actions.push((n, date) => {\\n            if (n >= 0 && n <= 59) {\\n              date.setMinutes(n);\\n              return true;\\n            }\\n            return false;\\n          });\\n        } else if (s) {\\n          actions.push((n, date) => {\\n            if (n >= 0 && n <= 59) {\\n              date.setSeconds(n);\\n              return true;\\n            }\\n            return false;\\n          });\\n        }\\n        return \\\"\\\";\\n      });\\n    }\\n    const number = /\\\\d+/g;\\n    let i = 0;\\n    let array;\\n    const date = new Date();\\n    while ((array = number.exec(cDate)) !== null) {\\n      if (i < actions.length) {\\n        if (!actions[i++](parseInt(array[0]), date)) {\\n          return null;\\n        }\\n      } else {\\n        break;\\n      }\\n    }\\n    if (i === 0) {\\n      return null;\\n    }\\n    return date;\\n  }\\n  _parseDate(cFormat, cDate) {\\n    let date = null;\\n    try {\\n      date = this._util.scand(cFormat, cDate);\\n    } catch {}\\n    if (!date) {\\n      date = Date.parse(cDate);\\n      date = isNaN(date) ? this._tryToGuessDate(cFormat, cDate) : new Date(date);\\n    }\\n    return date;\\n  }\\n  AFMergeChange(event = globalThis.event) {\\n    if (event.willCommit) {\\n      return event.value.toString();\\n    }\\n    return this._app._eventDispatcher.mergeChange(event);\\n  }\\n  AFParseDateEx(cString, cOrder) {\\n    return this._parseDate(cOrder, cString);\\n  }\\n  AFExtractNums(str) {\\n    if (typeof str === \\\"number\\\") {\\n      return [str];\\n    }\\n    if (!str || typeof str !== \\\"string\\\") {\\n      return null;\\n    }\\n    const first = str.charAt(0);\\n    if (first === \\\".\\\" || first === \\\",\\\") {\\n      str = `0${str}`;\\n    }\\n    const numbers = str.match(/(\\\\d+)/g);\\n    if (numbers.length === 0) {\\n      return null;\\n    }\\n    return numbers;\\n  }\\n  AFMakeNumber(str) {\\n    if (typeof str === \\\"number\\\") {\\n      return str;\\n    }\\n    if (typeof str !== \\\"string\\\") {\\n      return null;\\n    }\\n    str = str.trim().replace(\\\",\\\", \\\".\\\");\\n    const number = parseFloat(str);\\n    if (isNaN(number) || !isFinite(number)) {\\n      return null;\\n    }\\n    return number;\\n  }\\n  AFMakeArrayFromList(string) {\\n    if (typeof string === \\\"string\\\") {\\n      return string.split(/, ?/g);\\n    }\\n    return string;\\n  }\\n  AFNumber_Format(nDec, sepStyle, negStyle, currStyle, strCurrency, bCurrencyPrepend) {\\n    const event = globalThis.event;\\n    let value = this.AFMakeNumber(event.value);\\n    if (value === null) {\\n      event.value = \\\"\\\";\\n      return;\\n    }\\n    const sign = Math.sign(value);\\n    const buf = [];\\n    let hasParen = false;\\n    if (sign === -1 && bCurrencyPrepend && negStyle === 0) {\\n      buf.push(\\\"-\\\");\\n    }\\n    if ((negStyle === 2 || negStyle === 3) && sign === -1) {\\n      buf.push(\\\"(\\\");\\n      hasParen = true;\\n    }\\n    if (bCurrencyPrepend) {\\n      buf.push(strCurrency);\\n    }\\n    sepStyle = Math.min(Math.max(0, Math.floor(sepStyle)), 4);\\n    buf.push(\\\"%,\\\", sepStyle, \\\".\\\", nDec.toString(), \\\"f\\\");\\n    if (!bCurrencyPrepend) {\\n      buf.push(strCurrency);\\n    }\\n    if (hasParen) {\\n      buf.push(\\\")\\\");\\n    }\\n    if (negStyle === 1 || negStyle === 3) {\\n      event.target.textColor = sign === 1 ? this._color.black : this._color.red;\\n    }\\n    if ((negStyle !== 0 || bCurrencyPrepend) && sign === -1) {\\n      value = -value;\\n    }\\n    const formatStr = buf.join(\\\"\\\");\\n    event.value = this._util.printf(formatStr, value);\\n  }\\n  AFNumber_Keystroke(nDec, sepStyle, negStyle, currStyle, strCurrency, bCurrencyPrepend) {\\n    const event = globalThis.event;\\n    let value = this.AFMergeChange(event);\\n    if (!value) {\\n      return;\\n    }\\n    value = value.trim();\\n    let pattern;\\n    if (sepStyle > 1) {\\n      pattern = event.willCommit ? /^[+-]?(\\\\d+(,\\\\d*)?|,\\\\d+)$/ : /^[+-]?\\\\d*,?\\\\d*$/;\\n    } else {\\n      pattern = event.willCommit ? /^[+-]?(\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)$/ : /^[+-]?\\\\d*\\\\.?\\\\d*$/;\\n    }\\n    if (!pattern.test(value)) {\\n      if (event.willCommit) {\\n        const err = `${GlobalConstants.IDS_INVALID_VALUE} ${this._mkTargetName(event)}`;\\n        this._app.alert(err);\\n      }\\n      event.rc = false;\\n    }\\n    if (event.willCommit && sepStyle > 1) {\\n      event.value = parseFloat(value.replace(\\\",\\\", \\\".\\\"));\\n    }\\n  }\\n  AFPercent_Format(nDec, sepStyle, percentPrepend = false) {\\n    if (typeof nDec !== \\\"number\\\") {\\n      return;\\n    }\\n    if (typeof sepStyle !== \\\"number\\\") {\\n      return;\\n    }\\n    if (nDec < 0) {\\n      throw new Error(\\\"Invalid nDec value in AFPercent_Format\\\");\\n    }\\n    const event = globalThis.event;\\n    if (nDec > 512) {\\n      event.value = \\\"%\\\";\\n      return;\\n    }\\n    nDec = Math.floor(nDec);\\n    sepStyle = Math.min(Math.max(0, Math.floor(sepStyle)), 4);\\n    let value = this.AFMakeNumber(event.value);\\n    if (value === null) {\\n      event.value = \\\"%\\\";\\n      return;\\n    }\\n    const formatStr = `%,${sepStyle}.${nDec}f`;\\n    value = this._util.printf(formatStr, value * 100);\\n    event.value = percentPrepend ? `%${value}` : `${value}%`;\\n  }\\n  AFPercent_Keystroke(nDec, sepStyle) {\\n    this.AFNumber_Keystroke(nDec, sepStyle, 0, 0, \\\"\\\", true);\\n  }\\n  AFDate_FormatEx(cFormat) {\\n    const event = globalThis.event;\\n    const value = event.value;\\n    if (!value) {\\n      return;\\n    }\\n    const date = this._parseDate(cFormat, value);\\n    if (date !== null) {\\n      event.value = this._util.printd(cFormat, date);\\n    }\\n  }\\n  AFDate_Format(pdf) {\\n    if (pdf >= 0 && pdf < this._dateFormats.length) {\\n      this.AFDate_FormatEx(this._dateFormats[pdf]);\\n    }\\n  }\\n  AFDate_KeystrokeEx(cFormat) {\\n    const event = globalThis.event;\\n    if (!event.willCommit) {\\n      return;\\n    }\\n    const value = this.AFMergeChange(event);\\n    if (!value) {\\n      return;\\n    }\\n    if (this._parseDate(cFormat, value) === null) {\\n      const invalid = GlobalConstants.IDS_INVALID_DATE;\\n      const invalid2 = GlobalConstants.IDS_INVALID_DATE2;\\n      const err = `${invalid} ${this._mkTargetName(event)}${invalid2}${cFormat}`;\\n      this._app.alert(err);\\n      event.rc = false;\\n    }\\n  }\\n  AFDate_Keystroke(pdf) {\\n    if (pdf >= 0 && pdf < this._dateFormats.length) {\\n      this.AFDate_KeystrokeEx(this._dateFormats[pdf]);\\n    }\\n  }\\n  AFRange_Validate(bGreaterThan, nGreaterThan, bLessThan, nLessThan) {\\n    const event = globalThis.event;\\n    if (!event.value) {\\n      return;\\n    }\\n    const value = this.AFMakeNumber(event.value);\\n    if (value === null) {\\n      return;\\n    }\\n    bGreaterThan = !!bGreaterThan;\\n    bLessThan = !!bLessThan;\\n    if (bGreaterThan) {\\n      nGreaterThan = this.AFMakeNumber(nGreaterThan);\\n      if (nGreaterThan === null) {\\n        return;\\n      }\\n    }\\n    if (bLessThan) {\\n      nLessThan = this.AFMakeNumber(nLessThan);\\n      if (nLessThan === null) {\\n        return;\\n      }\\n    }\\n    let err = \\\"\\\";\\n    if (bGreaterThan && bLessThan) {\\n      if (value < nGreaterThan || value > nLessThan) {\\n        err = this._util.printf(GlobalConstants.IDS_GT_AND_LT, nGreaterThan, nLessThan);\\n      }\\n    } else if (bGreaterThan) {\\n      if (value < nGreaterThan) {\\n        err = this._util.printf(GlobalConstants.IDS_GREATER_THAN, nGreaterThan);\\n      }\\n    } else if (value > nLessThan) {\\n      err = this._util.printf(GlobalConstants.IDS_LESS_THAN, nLessThan);\\n    }\\n    if (err) {\\n      this._app.alert(err);\\n      event.rc = false;\\n    }\\n  }\\n  AFSimple(cFunction, nValue1, nValue2) {\\n    const value1 = this.AFMakeNumber(nValue1);\\n    if (value1 === null) {\\n      throw new Error(\\\"Invalid nValue1 in AFSimple\\\");\\n    }\\n    const value2 = this.AFMakeNumber(nValue2);\\n    if (value2 === null) {\\n      throw new Error(\\\"Invalid nValue2 in AFSimple\\\");\\n    }\\n    switch (cFunction) {\\n      case \\\"AVG\\\":\\n        return (value1 + value2) / 2;\\n      case \\\"SUM\\\":\\n        return value1 + value2;\\n      case \\\"PRD\\\":\\n        return value1 * value2;\\n      case \\\"MIN\\\":\\n        return Math.min(value1, value2);\\n      case \\\"MAX\\\":\\n        return Math.max(value1, value2);\\n    }\\n    throw new Error(\\\"Invalid cFunction in AFSimple\\\");\\n  }\\n  AFSimple_Calculate(cFunction, cFields) {\\n    const actions = {\\n      AVG: args => args.reduce((acc, value) => acc + value, 0) / args.length,\\n      SUM: args => args.reduce((acc, value) => acc + value, 0),\\n      PRD: args => args.reduce((acc, value) => acc * value, 1),\\n      MIN: args => args.reduce((acc, value) => Math.min(acc, value), Number.MAX_VALUE),\\n      MAX: args => args.reduce((acc, value) => Math.max(acc, value), Number.MIN_VALUE)\\n    };\\n    if (!(cFunction in actions)) {\\n      throw new TypeError(\\\"Invalid function in AFSimple_Calculate\\\");\\n    }\\n    const event = globalThis.event;\\n    const values = [];\\n    cFields = this.AFMakeArrayFromList(cFields);\\n    for (const cField of cFields) {\\n      const field = this._document.getField(cField);\\n      if (!field) {\\n        continue;\\n      }\\n      for (const child of field.getArray()) {\\n        const number = this.AFMakeNumber(child.value);\\n        if (number !== null) {\\n          values.push(number);\\n        }\\n      }\\n    }\\n    if (values.length === 0) {\\n      event.value = cFunction === \\\"PRD\\\" ? 1 : 0;\\n      return;\\n    }\\n    const res = actions[cFunction](values);\\n    event.value = Math.round(1e6 * res) / 1e6;\\n  }\\n  AFSpecial_Format(psf) {\\n    const event = globalThis.event;\\n    if (!event.value) {\\n      return;\\n    }\\n    psf = this.AFMakeNumber(psf);\\n    let formatStr;\\n    switch (psf) {\\n      case 0:\\n        formatStr = \\\"99999\\\";\\n        break;\\n      case 1:\\n        formatStr = \\\"99999-9999\\\";\\n        break;\\n      case 2:\\n        formatStr = this._util.printx(\\\"9999999999\\\", event.value).length >= 10 ? \\\"(999) 999-9999\\\" : \\\"999-9999\\\";\\n        break;\\n      case 3:\\n        formatStr = \\\"999-99-9999\\\";\\n        break;\\n      default:\\n        throw new Error(\\\"Invalid psf in AFSpecial_Format\\\");\\n    }\\n    event.value = this._util.printx(formatStr, event.value);\\n  }\\n  AFSpecial_KeystrokeEx(cMask) {\\n    if (!cMask) {\\n      return;\\n    }\\n    const event = globalThis.event;\\n    const value = this.AFMergeChange(event);\\n    if (!value) {\\n      return;\\n    }\\n    const checkers = new Map([[\\\"9\\\", char => char >= \\\"0\\\" && char <= \\\"9\\\"], [\\\"A\\\", char => \\\"a\\\" <= char && char <= \\\"z\\\" || \\\"A\\\" <= char && char <= \\\"Z\\\"], [\\\"O\\\", char => \\\"a\\\" <= char && char <= \\\"z\\\" || \\\"A\\\" <= char && char <= \\\"Z\\\" || \\\"0\\\" <= char && char <= \\\"9\\\"], [\\\"X\\\", char => true]]);\\n    function _checkValidity(_value, _cMask) {\\n      for (let i = 0, ii = _value.length; i < ii; i++) {\\n        const mask = _cMask.charAt(i);\\n        const char = _value.charAt(i);\\n        const checker = checkers.get(mask);\\n        if (checker) {\\n          if (!checker(char)) {\\n            return false;\\n          }\\n        } else if (mask !== char) {\\n          return false;\\n        }\\n      }\\n      return true;\\n    }\\n    const err = `${GlobalConstants.IDS_INVALID_VALUE} = \\\"${cMask}\\\"`;\\n    if (value.length > cMask.length) {\\n      this._app.alert(err);\\n      event.rc = false;\\n      return;\\n    }\\n    if (event.willCommit) {\\n      if (value.length < cMask.length) {\\n        this._app.alert(err);\\n        event.rc = false;\\n        return;\\n      }\\n      if (!_checkValidity(value, cMask)) {\\n        this._app.alert(err);\\n        event.rc = false;\\n        return;\\n      }\\n      event.value += cMask.substring(value.length);\\n      return;\\n    }\\n    if (value.length < cMask.length) {\\n      cMask = cMask.substring(0, value.length);\\n    }\\n    if (!_checkValidity(value, cMask)) {\\n      this._app.alert(err);\\n      event.rc = false;\\n    }\\n  }\\n  AFSpecial_Keystroke(psf) {\\n    const event = globalThis.event;\\n    psf = this.AFMakeNumber(psf);\\n    let formatStr;\\n    switch (psf) {\\n      case 0:\\n        formatStr = \\\"99999\\\";\\n        break;\\n      case 1:\\n        formatStr = \\\"99999-9999\\\";\\n        break;\\n      case 2:\\n        const value = this.AFMergeChange(event);\\n        formatStr = value.length > 8 || value.startsWith(\\\"(\\\") ? \\\"(999) 999-9999\\\" : \\\"999-9999\\\";\\n        break;\\n      case 3:\\n        formatStr = \\\"999-99-9999\\\";\\n        break;\\n      default:\\n        throw new Error(\\\"Invalid psf in AFSpecial_Keystroke\\\");\\n    }\\n    this.AFSpecial_KeystrokeEx(formatStr);\\n  }\\n  AFTime_FormatEx(cFormat) {\\n    this.AFDate_FormatEx(cFormat);\\n  }\\n  AFTime_Format(pdf) {\\n    if (pdf >= 0 && pdf < this._timeFormats.length) {\\n      this.AFDate_FormatEx(this._timeFormats[pdf]);\\n    }\\n  }\\n  AFTime_KeystrokeEx(cFormat) {\\n    this.AFDate_KeystrokeEx(cFormat);\\n  }\\n  AFTime_Keystroke(pdf) {\\n    if (pdf >= 0 && pdf < this._timeFormats.length) {\\n      this.AFDate_KeystrokeEx(this._timeFormats[pdf]);\\n    }\\n  }\\n  eMailValidate(str) {\\n    return this._emailRegex.test(str);\\n  }\\n  AFExactMatch(rePatterns, str) {\\n    if (rePatterns instanceof RegExp) {\\n      return str.match(rePatterns)?.[0] === str || 0;\\n    }\\n    return rePatterns.findIndex(re => str.match(re)?.[0] === str) + 1;\\n  }\\n}\\n\\n;// CONCATENATED MODULE: ./src/scripting_api/app_utils.js\\nconst VIEWER_TYPE = \\\"PDF.js\\\";\\nconst VIEWER_VARIATION = \\\"Full\\\";\\nconst VIEWER_VERSION = 21.00720099;\\nconst FORMS_VERSION = 21.00720099;\\nconst USERACTIVATION_CALLBACKID = 0;\\nconst USERACTIVATION_MAXTIME_VALIDITY = 5000;\\nfunction serializeError(error) {\\n  const value = `${error.toString()}\\\\n${error.stack}`;\\n  return {\\n    command: \\\"error\\\",\\n    value\\n  };\\n}\\n\\n;// CONCATENATED MODULE: ./src/scripting_api/event.js\\n\\nclass Event {\\n  constructor(data) {\\n    this.change = data.change || \\\"\\\";\\n    this.changeEx = data.changeEx || null;\\n    this.commitKey = data.commitKey || 0;\\n    this.fieldFull = data.fieldFull || false;\\n    this.keyDown = data.keyDown || false;\\n    this.modifier = data.modifier || false;\\n    this.name = data.name;\\n    this.rc = true;\\n    this.richChange = data.richChange || [];\\n    this.richChangeEx = data.richChangeEx || [];\\n    this.richValue = data.richValue || [];\\n    this.selEnd = data.selEnd ?? -1;\\n    this.selStart = data.selStart ?? -1;\\n    this.shift = data.shift || false;\\n    this.source = data.source || null;\\n    this.target = data.target || null;\\n    this.targetName = \\\"\\\";\\n    this.type = \\\"Field\\\";\\n    this.value = data.value || \\\"\\\";\\n    this.willCommit = data.willCommit || false;\\n  }\\n}\\nclass EventDispatcher {\\n  constructor(document, calculationOrder, objects, externalCall) {\\n    this._document = document;\\n    this._calculationOrder = calculationOrder;\\n    this._objects = objects;\\n    this._externalCall = externalCall;\\n    this._document.obj._eventDispatcher = this;\\n    this._isCalculating = false;\\n  }\\n  mergeChange(event) {\\n    let value = event.value;\\n    if (Array.isArray(value)) {\\n      return value;\\n    }\\n    if (typeof value !== \\\"string\\\") {\\n      value = value.toString();\\n    }\\n    const prefix = event.selStart >= 0 ? value.substring(0, event.selStart) : \\\"\\\";\\n    const postfix = event.selEnd >= 0 && event.selEnd <= value.length ? value.substring(event.selEnd) : \\\"\\\";\\n    return `${prefix}${event.change}${postfix}`;\\n  }\\n  userActivation() {\\n    this._document.obj._userActivation = true;\\n    this._externalCall(\\\"setTimeout\\\", [USERACTIVATION_CALLBACKID, USERACTIVATION_MAXTIME_VALIDITY]);\\n  }\\n  dispatch(baseEvent) {\\n    const id = baseEvent.id;\\n    if (!(id in this._objects)) {\\n      let event;\\n      if (id === \\\"doc\\\" || id === \\\"page\\\") {\\n        event = globalThis.event = new Event(baseEvent);\\n        event.source = event.target = this._document.wrapped;\\n        event.name = baseEvent.name;\\n      }\\n      if (id === \\\"doc\\\") {\\n        const eventName = event.name;\\n        if (eventName === \\\"Open\\\") {\\n          this.userActivation();\\n          this._document.obj._initActions();\\n          this.formatAll();\\n        }\\n        if (![\\\"DidPrint\\\", \\\"DidSave\\\", \\\"WillPrint\\\", \\\"WillSave\\\"].includes(eventName)) {\\n          this.userActivation();\\n        }\\n        this._document.obj._dispatchDocEvent(event.name);\\n      } else if (id === \\\"page\\\") {\\n        this.userActivation();\\n        this._document.obj._dispatchPageEvent(event.name, baseEvent.actions, baseEvent.pageNumber);\\n      } else if (id === \\\"app\\\" && baseEvent.name === \\\"ResetForm\\\") {\\n        this.userActivation();\\n        for (const fieldId of baseEvent.ids) {\\n          const obj = this._objects[fieldId];\\n          obj?.obj._reset();\\n        }\\n      }\\n      return;\\n    }\\n    const name = baseEvent.name;\\n    const source = this._objects[id];\\n    const event = globalThis.event = new Event(baseEvent);\\n    let savedChange;\\n    this.userActivation();\\n    if (source.obj._isButton()) {\\n      source.obj._id = id;\\n      event.value = source.obj._getExportValue(event.value);\\n      if (name === \\\"Action\\\") {\\n        source.obj._value = event.value;\\n      }\\n    }\\n    switch (name) {\\n      case \\\"Keystroke\\\":\\n        savedChange = {\\n          value: event.value,\\n          changeEx: event.changeEx,\\n          change: event.change,\\n          selStart: event.selStart,\\n          selEnd: event.selEnd\\n        };\\n        break;\\n      case \\\"Blur\\\":\\n      case \\\"Focus\\\":\\n        Object.defineProperty(event, \\\"value\\\", {\\n          configurable: false,\\n          writable: false,\\n          enumerable: true,\\n          value: event.value\\n        });\\n        break;\\n      case \\\"Validate\\\":\\n        this.runValidation(source, event);\\n        return;\\n      case \\\"Action\\\":\\n        this.runActions(source, source, event, name);\\n        this.runCalculate(source, event);\\n        return;\\n    }\\n    this.runActions(source, source, event, name);\\n    if (name !== \\\"Keystroke\\\") {\\n      return;\\n    }\\n    if (event.rc) {\\n      if (event.willCommit) {\\n        this.runValidation(source, event);\\n      } else {\\n        if (source.obj._isChoice) {\\n          source.obj.value = savedChange.changeEx;\\n          source.obj._send({\\n            id: source.obj._id,\\n            siblings: source.obj._siblings,\\n            value: source.obj.value\\n          });\\n          return;\\n        }\\n        const value = source.obj.value = this.mergeChange(event);\\n        let selStart, selEnd;\\n        if (event.selStart !== savedChange.selStart || event.selEnd !== savedChange.selEnd) {\\n          selStart = event.selStart;\\n          selEnd = event.selEnd;\\n        } else {\\n          selEnd = selStart = savedChange.selStart + event.change.length;\\n        }\\n        source.obj._send({\\n          id: source.obj._id,\\n          siblings: source.obj._siblings,\\n          value,\\n          selRange: [selStart, selEnd]\\n        });\\n      }\\n    } else if (!event.willCommit) {\\n      source.obj._send({\\n        id: source.obj._id,\\n        siblings: source.obj._siblings,\\n        value: savedChange.value,\\n        selRange: [savedChange.selStart, savedChange.selEnd]\\n      });\\n    } else {\\n      source.obj._send({\\n        id: source.obj._id,\\n        siblings: source.obj._siblings,\\n        value: \\\"\\\",\\n        formattedValue: null,\\n        selRange: [0, 0]\\n      });\\n    }\\n  }\\n  formatAll() {\\n    const event = globalThis.event = new Event({});\\n    for (const source of Object.values(this._objects)) {\\n      event.value = source.obj._getValue();\\n      this.runActions(source, source, event, \\\"Format\\\");\\n    }\\n  }\\n  runValidation(source, event) {\\n    const didValidateRun = this.runActions(source, source, event, \\\"Validate\\\");\\n    if (event.rc) {\\n      source.obj.value = event.value;\\n      this.runCalculate(source, event);\\n      const savedValue = event.value = source.obj._getValue();\\n      let formattedValue = null;\\n      if (this.runActions(source, source, event, \\\"Format\\\")) {\\n        formattedValue = event.value?.toString?.();\\n      }\\n      source.obj._send({\\n        id: source.obj._id,\\n        siblings: source.obj._siblings,\\n        value: savedValue,\\n        formattedValue\\n      });\\n      event.value = savedValue;\\n    } else if (didValidateRun) {\\n      source.obj._send({\\n        id: source.obj._id,\\n        siblings: source.obj._siblings,\\n        value: \\\"\\\",\\n        formattedValue: null,\\n        selRange: [0, 0],\\n        focus: true\\n      });\\n    }\\n  }\\n  runActions(source, target, event, eventName) {\\n    event.source = source.wrapped;\\n    event.target = target.wrapped;\\n    event.name = eventName;\\n    event.targetName = target.obj.name;\\n    event.rc = true;\\n    return target.obj._runActions(event);\\n  }\\n  calculateNow() {\\n    if (!this._calculationOrder || this._isCalculating || !this._document.obj.calculate) {\\n      return;\\n    }\\n    this._isCalculating = true;\\n    const first = this._calculationOrder[0];\\n    const source = this._objects[first];\\n    globalThis.event = new Event({});\\n    try {\\n      this.runCalculate(source, globalThis.event);\\n    } catch (error) {\\n      this._isCalculating = false;\\n      throw error;\\n    }\\n    this._isCalculating = false;\\n  }\\n  runCalculate(source, event) {\\n    if (!this._calculationOrder || !this._document.obj.calculate) {\\n      return;\\n    }\\n    for (const targetId of this._calculationOrder) {\\n      if (!(targetId in this._objects)) {\\n        continue;\\n      }\\n      if (!this._document.obj.calculate) {\\n        break;\\n      }\\n      event.value = null;\\n      const target = this._objects[targetId];\\n      let savedValue = target.obj._getValue();\\n      this.runActions(source, target, event, \\\"Calculate\\\");\\n      if (!event.rc) {\\n        continue;\\n      }\\n      if (event.value !== null) {\\n        target.obj.value = event.value;\\n      } else {\\n        event.value = target.obj._getValue();\\n      }\\n      this.runActions(target, target, event, \\\"Validate\\\");\\n      if (!event.rc) {\\n        if (target.obj._getValue() !== savedValue) {\\n          target.wrapped.value = savedValue;\\n        }\\n        continue;\\n      }\\n      if (event.value === null) {\\n        event.value = target.obj._getValue();\\n      }\\n      savedValue = target.obj._getValue();\\n      let formattedValue = null;\\n      if (this.runActions(target, target, event, \\\"Format\\\")) {\\n        formattedValue = event.value?.toString?.();\\n      }\\n      target.obj._send({\\n        id: target.obj._id,\\n        siblings: target.obj._siblings,\\n        value: savedValue,\\n        formattedValue\\n      });\\n    }\\n  }\\n}\\n\\n;// CONCATENATED MODULE: ./src/scripting_api/fullscreen.js\\n\\n\\nclass FullScreen extends PDFObject {\\n  constructor(data) {\\n    super(data);\\n    this._backgroundColor = [];\\n    this._clickAdvances = true;\\n    this._cursor = Cursor.hidden;\\n    this._defaultTransition = \\\"\\\";\\n    this._escapeExits = true;\\n    this._isFullScreen = true;\\n    this._loop = false;\\n    this._timeDelay = 3600;\\n    this._usePageTiming = false;\\n    this._useTimer = false;\\n  }\\n  get backgroundColor() {\\n    return this._backgroundColor;\\n  }\\n  set backgroundColor(_) {}\\n  get clickAdvances() {\\n    return this._clickAdvances;\\n  }\\n  set clickAdvances(_) {}\\n  get cursor() {\\n    return this._cursor;\\n  }\\n  set cursor(_) {}\\n  get defaultTransition() {\\n    return this._defaultTransition;\\n  }\\n  set defaultTransition(_) {}\\n  get escapeExits() {\\n    return this._escapeExits;\\n  }\\n  set escapeExits(_) {}\\n  get isFullScreen() {\\n    return this._isFullScreen;\\n  }\\n  set isFullScreen(_) {}\\n  get loop() {\\n    return this._loop;\\n  }\\n  set loop(_) {}\\n  get timeDelay() {\\n    return this._timeDelay;\\n  }\\n  set timeDelay(_) {}\\n  get transitions() {\\n    return [\\\"Replace\\\", \\\"WipeRight\\\", \\\"WipeLeft\\\", \\\"WipeDown\\\", \\\"WipeUp\\\", \\\"SplitHorizontalIn\\\", \\\"SplitHorizontalOut\\\", \\\"SplitVerticalIn\\\", \\\"SplitVerticalOut\\\", \\\"BlindsHorizontal\\\", \\\"BlindsVertical\\\", \\\"BoxIn\\\", \\\"BoxOut\\\", \\\"GlitterRight\\\", \\\"GlitterDown\\\", \\\"GlitterRightDown\\\", \\\"Dissolve\\\", \\\"Random\\\"];\\n  }\\n  set transitions(_) {\\n    throw new Error(\\\"fullscreen.transitions is read-only\\\");\\n  }\\n  get usePageTiming() {\\n    return this._usePageTiming;\\n  }\\n  set usePageTiming(_) {}\\n  get useTimer() {\\n    return this._useTimer;\\n  }\\n  set useTimer(_) {}\\n}\\n\\n;// CONCATENATED MODULE: ./src/scripting_api/thermometer.js\\n\\nclass Thermometer extends PDFObject {\\n  constructor(data) {\\n    super(data);\\n    this._cancelled = false;\\n    this._duration = 100;\\n    this._text = \\\"\\\";\\n    this._value = 0;\\n  }\\n  get cancelled() {\\n    return this._cancelled;\\n  }\\n  set cancelled(_) {\\n    throw new Error(\\\"thermometer.cancelled is read-only\\\");\\n  }\\n  get duration() {\\n    return this._duration;\\n  }\\n  set duration(val) {\\n    this._duration = val;\\n  }\\n  get text() {\\n    return this._text;\\n  }\\n  set text(val) {\\n    this._text = val;\\n  }\\n  get value() {\\n    return this._value;\\n  }\\n  set value(val) {\\n    this._value = val;\\n  }\\n  begin() {}\\n  end() {}\\n}\\n\\n;// CONCATENATED MODULE: ./src/scripting_api/app.js\\n\\n\\n\\n\\n\\n\\nclass App extends PDFObject {\\n  constructor(data) {\\n    super(data);\\n    this._constants = null;\\n    this._focusRect = true;\\n    this._fs = null;\\n    this._language = App._getLanguage(data.language);\\n    this._openInPlace = false;\\n    this._platform = App._getPlatform(data.platform);\\n    this._runtimeHighlight = false;\\n    this._runtimeHighlightColor = [\\\"T\\\"];\\n    this._thermometer = null;\\n    this._toolbar = false;\\n    this._document = data._document;\\n    this._proxyHandler = data.proxyHandler;\\n    this._objects = Object.create(null);\\n    this._eventDispatcher = new EventDispatcher(this._document, data.calculationOrder, this._objects, data.externalCall);\\n    this._timeoutIds = new WeakMap();\\n    if (typeof FinalizationRegistry !== \\\"undefined\\\") {\\n      this._timeoutIdsRegistry = new FinalizationRegistry(this._cleanTimeout.bind(this));\\n    } else {\\n      this._timeoutIdsRegistry = null;\\n    }\\n    this._timeoutCallbackIds = new Map();\\n    this._timeoutCallbackId = USERACTIVATION_CALLBACKID + 1;\\n    this._globalEval = data.globalEval;\\n    this._externalCall = data.externalCall;\\n  }\\n  _dispatchEvent(pdfEvent) {\\n    this._eventDispatcher.dispatch(pdfEvent);\\n  }\\n  _registerTimeoutCallback(cExpr) {\\n    const id = this._timeoutCallbackId++;\\n    this._timeoutCallbackIds.set(id, cExpr);\\n    return id;\\n  }\\n  _unregisterTimeoutCallback(id) {\\n    this._timeoutCallbackIds.delete(id);\\n  }\\n  _evalCallback({\\n    callbackId,\\n    interval\\n  }) {\\n    if (callbackId === USERACTIVATION_CALLBACKID) {\\n      this._document.obj._userActivation = false;\\n      return;\\n    }\\n    const expr = this._timeoutCallbackIds.get(callbackId);\\n    if (!interval) {\\n      this._unregisterTimeoutCallback(callbackId);\\n    }\\n    if (expr) {\\n      this._globalEval(expr);\\n    }\\n  }\\n  _registerTimeout(callbackId, interval) {\\n    const timeout = Object.create(null);\\n    const id = {\\n      callbackId,\\n      interval\\n    };\\n    this._timeoutIds.set(timeout, id);\\n    this._timeoutIdsRegistry?.register(timeout, id);\\n    return timeout;\\n  }\\n  _unregisterTimeout(timeout) {\\n    this._timeoutIdsRegistry?.unregister(timeout);\\n    const data = this._timeoutIds.get(timeout);\\n    if (!data) {\\n      return;\\n    }\\n    this._timeoutIds.delete(timeout);\\n    this._cleanTimeout(data);\\n  }\\n  _cleanTimeout({\\n    callbackId,\\n    interval\\n  }) {\\n    this._unregisterTimeoutCallback(callbackId);\\n    if (interval) {\\n      this._externalCall(\\\"clearInterval\\\", [callbackId]);\\n    } else {\\n      this._externalCall(\\\"clearTimeout\\\", [callbackId]);\\n    }\\n  }\\n  static _getPlatform(platform) {\\n    if (typeof platform === \\\"string\\\") {\\n      platform = platform.toLowerCase();\\n      if (platform.includes(\\\"win\\\")) {\\n        return \\\"WIN\\\";\\n      } else if (platform.includes(\\\"mac\\\")) {\\n        return \\\"MAC\\\";\\n      }\\n    }\\n    return \\\"UNIX\\\";\\n  }\\n  static _getLanguage(language) {\\n    const [main, sub] = language.toLowerCase().split(/[-_]/);\\n    switch (main) {\\n      case \\\"zh\\\":\\n        if (sub === \\\"cn\\\" || sub === \\\"sg\\\") {\\n          return \\\"CHS\\\";\\n        }\\n        return \\\"CHT\\\";\\n      case \\\"da\\\":\\n        return \\\"DAN\\\";\\n      case \\\"de\\\":\\n        return \\\"DEU\\\";\\n      case \\\"es\\\":\\n        return \\\"ESP\\\";\\n      case \\\"fr\\\":\\n        return \\\"FRA\\\";\\n      case \\\"it\\\":\\n        return \\\"ITA\\\";\\n      case \\\"ko\\\":\\n        return \\\"KOR\\\";\\n      case \\\"ja\\\":\\n        return \\\"JPN\\\";\\n      case \\\"nl\\\":\\n        return \\\"NLD\\\";\\n      case \\\"no\\\":\\n        return \\\"NOR\\\";\\n      case \\\"pt\\\":\\n        if (sub === \\\"br\\\") {\\n          return \\\"PTB\\\";\\n        }\\n        return \\\"ENU\\\";\\n      case \\\"fi\\\":\\n        return \\\"SUO\\\";\\n      case \\\"SV\\\":\\n        return \\\"SVE\\\";\\n      default:\\n        return \\\"ENU\\\";\\n    }\\n  }\\n  get activeDocs() {\\n    return [this._document.wrapped];\\n  }\\n  set activeDocs(_) {\\n    throw new Error(\\\"app.activeDocs is read-only\\\");\\n  }\\n  get calculate() {\\n    return this._document.obj.calculate;\\n  }\\n  set calculate(calculate) {\\n    this._document.obj.calculate = calculate;\\n  }\\n  get constants() {\\n    if (!this._constants) {\\n      this._constants = Object.freeze({\\n        align: Object.freeze({\\n          left: 0,\\n          center: 1,\\n          right: 2,\\n          top: 3,\\n          bottom: 4\\n        })\\n      });\\n    }\\n    return this._constants;\\n  }\\n  set constants(_) {\\n    throw new Error(\\\"app.constants is read-only\\\");\\n  }\\n  get focusRect() {\\n    return this._focusRect;\\n  }\\n  set focusRect(val) {\\n    this._focusRect = val;\\n  }\\n  get formsVersion() {\\n    return FORMS_VERSION;\\n  }\\n  set formsVersion(_) {\\n    throw new Error(\\\"app.formsVersion is read-only\\\");\\n  }\\n  get fromPDFConverters() {\\n    return [];\\n  }\\n  set fromPDFConverters(_) {\\n    throw new Error(\\\"app.fromPDFConverters is read-only\\\");\\n  }\\n  get fs() {\\n    if (this._fs === null) {\\n      this._fs = new Proxy(new FullScreen({\\n        send: this._send\\n      }), this._proxyHandler);\\n    }\\n    return this._fs;\\n  }\\n  set fs(_) {\\n    throw new Error(\\\"app.fs is read-only\\\");\\n  }\\n  get language() {\\n    return this._language;\\n  }\\n  set language(_) {\\n    throw new Error(\\\"app.language is read-only\\\");\\n  }\\n  get media() {\\n    return undefined;\\n  }\\n  set media(_) {\\n    throw new Error(\\\"app.media is read-only\\\");\\n  }\\n  get monitors() {\\n    return [];\\n  }\\n  set monitors(_) {\\n    throw new Error(\\\"app.monitors is read-only\\\");\\n  }\\n  get numPlugins() {\\n    return 0;\\n  }\\n  set numPlugins(_) {\\n    throw new Error(\\\"app.numPlugins is read-only\\\");\\n  }\\n  get openInPlace() {\\n    return this._openInPlace;\\n  }\\n  set openInPlace(val) {\\n    this._openInPlace = val;\\n  }\\n  get platform() {\\n    return this._platform;\\n  }\\n  set platform(_) {\\n    throw new Error(\\\"app.platform is read-only\\\");\\n  }\\n  get plugins() {\\n    return [];\\n  }\\n  set plugins(_) {\\n    throw new Error(\\\"app.plugins is read-only\\\");\\n  }\\n  get printColorProfiles() {\\n    return [];\\n  }\\n  set printColorProfiles(_) {\\n    throw new Error(\\\"app.printColorProfiles is read-only\\\");\\n  }\\n  get printerNames() {\\n    return [];\\n  }\\n  set printerNames(_) {\\n    throw new Error(\\\"app.printerNames is read-only\\\");\\n  }\\n  get runtimeHighlight() {\\n    return this._runtimeHighlight;\\n  }\\n  set runtimeHighlight(val) {\\n    this._runtimeHighlight = val;\\n  }\\n  get runtimeHighlightColor() {\\n    return this._runtimeHighlightColor;\\n  }\\n  set runtimeHighlightColor(val) {\\n    if (Color._isValidColor(val)) {\\n      this._runtimeHighlightColor = val;\\n    }\\n  }\\n  get thermometer() {\\n    if (this._thermometer === null) {\\n      this._thermometer = new Proxy(new Thermometer({\\n        send: this._send\\n      }), this._proxyHandler);\\n    }\\n    return this._thermometer;\\n  }\\n  set thermometer(_) {\\n    throw new Error(\\\"app.thermometer is read-only\\\");\\n  }\\n  get toolbar() {\\n    return this._toolbar;\\n  }\\n  set toolbar(val) {\\n    this._toolbar = val;\\n  }\\n  get toolbarHorizontal() {\\n    return this.toolbar;\\n  }\\n  set toolbarHorizontal(value) {\\n    this.toolbar = value;\\n  }\\n  get toolbarVertical() {\\n    return this.toolbar;\\n  }\\n  set toolbarVertical(value) {\\n    this.toolbar = value;\\n  }\\n  get viewerType() {\\n    return VIEWER_TYPE;\\n  }\\n  set viewerType(_) {\\n    throw new Error(\\\"app.viewerType is read-only\\\");\\n  }\\n  get viewerVariation() {\\n    return VIEWER_VARIATION;\\n  }\\n  set viewerVariation(_) {\\n    throw new Error(\\\"app.viewerVariation is read-only\\\");\\n  }\\n  get viewerVersion() {\\n    return VIEWER_VERSION;\\n  }\\n  set viewerVersion(_) {\\n    throw new Error(\\\"app.viewerVersion is read-only\\\");\\n  }\\n  addMenuItem() {}\\n  addSubMenu() {}\\n  addToolButton() {}\\n  alert(cMsg, nIcon = 0, nType = 0, cTitle = \\\"PDF.js\\\", oDoc = null, oCheckbox = null) {\\n    if (!this._document.obj._userActivation) {\\n      return 0;\\n    }\\n    this._document.obj._userActivation = false;\\n    if (cMsg && typeof cMsg === \\\"object\\\") {\\n      nType = cMsg.nType;\\n      cMsg = cMsg.cMsg;\\n    }\\n    cMsg = (cMsg || \\\"\\\").toString();\\n    nType = typeof nType !== \\\"number\\\" || isNaN(nType) || nType < 0 || nType > 3 ? 0 : nType;\\n    if (nType >= 2) {\\n      return this._externalCall(\\\"confirm\\\", [cMsg]) ? 4 : 3;\\n    }\\n    this._externalCall(\\\"alert\\\", [cMsg]);\\n    return 1;\\n  }\\n  beep() {}\\n  beginPriv() {}\\n  browseForDoc() {}\\n  clearInterval(oInterval) {\\n    this._unregisterTimeout(oInterval);\\n  }\\n  clearTimeOut(oTime) {\\n    this._unregisterTimeout(oTime);\\n  }\\n  endPriv() {}\\n  execDialog() {}\\n  execMenuItem(item) {\\n    if (!this._document.obj._userActivation) {\\n      return;\\n    }\\n    this._document.obj._userActivation = false;\\n    switch (item) {\\n      case \\\"SaveAs\\\":\\n        if (this._document.obj._disableSaving) {\\n          return;\\n        }\\n        this._send({\\n          command: item\\n        });\\n        break;\\n      case \\\"FirstPage\\\":\\n      case \\\"LastPage\\\":\\n      case \\\"NextPage\\\":\\n      case \\\"PrevPage\\\":\\n      case \\\"ZoomViewIn\\\":\\n      case \\\"ZoomViewOut\\\":\\n        this._send({\\n          command: item\\n        });\\n        break;\\n      case \\\"FitPage\\\":\\n        this._send({\\n          command: \\\"zoom\\\",\\n          value: \\\"page-fit\\\"\\n        });\\n        break;\\n      case \\\"Print\\\":\\n        if (this._document.obj._disablePrinting) {\\n          return;\\n        }\\n        this._send({\\n          command: \\\"print\\\"\\n        });\\n        break;\\n    }\\n  }\\n  getNthPlugInName() {}\\n  getPath() {}\\n  goBack() {}\\n  goForward() {}\\n  hideMenuItem() {}\\n  hideToolbarButton() {}\\n  launchURL() {}\\n  listMenuItems() {}\\n  listToolbarButtons() {}\\n  loadPolicyFile() {}\\n  mailGetAddrs() {}\\n  mailMsg() {}\\n  newDoc() {}\\n  newCollection() {}\\n  newFDF() {}\\n  openDoc() {}\\n  openFDF() {}\\n  popUpMenu() {}\\n  popUpMenuEx() {}\\n  removeToolButton() {}\\n  response(cQuestion, cTitle = \\\"\\\", cDefault = \\\"\\\", bPassword = \\\"\\\", cLabel = \\\"\\\") {\\n    if (cQuestion && typeof cQuestion === \\\"object\\\") {\\n      cDefault = cQuestion.cDefault;\\n      cQuestion = cQuestion.cQuestion;\\n    }\\n    cQuestion = (cQuestion || \\\"\\\").toString();\\n    cDefault = (cDefault || \\\"\\\").toString();\\n    return this._externalCall(\\\"prompt\\\", [cQuestion, cDefault || \\\"\\\"]);\\n  }\\n  setInterval(cExpr, nMilliseconds = 0) {\\n    if (cExpr && typeof cExpr === \\\"object\\\") {\\n      nMilliseconds = cExpr.nMilliseconds || 0;\\n      cExpr = cExpr.cExpr;\\n    }\\n    if (typeof cExpr !== \\\"string\\\") {\\n      throw new TypeError(\\\"First argument of app.setInterval must be a string\\\");\\n    }\\n    if (typeof nMilliseconds !== \\\"number\\\") {\\n      throw new TypeError(\\\"Second argument of app.setInterval must be a number\\\");\\n    }\\n    const callbackId = this._registerTimeoutCallback(cExpr);\\n    this._externalCall(\\\"setInterval\\\", [callbackId, nMilliseconds]);\\n    return this._registerTimeout(callbackId, true);\\n  }\\n  setTimeOut(cExpr, nMilliseconds = 0) {\\n    if (cExpr && typeof cExpr === \\\"object\\\") {\\n      nMilliseconds = cExpr.nMilliseconds || 0;\\n      cExpr = cExpr.cExpr;\\n    }\\n    if (typeof cExpr !== \\\"string\\\") {\\n      throw new TypeError(\\\"First argument of app.setTimeOut must be a string\\\");\\n    }\\n    if (typeof nMilliseconds !== \\\"number\\\") {\\n      throw new TypeError(\\\"Second argument of app.setTimeOut must be a number\\\");\\n    }\\n    const callbackId = this._registerTimeoutCallback(cExpr);\\n    this._externalCall(\\\"setTimeout\\\", [callbackId, nMilliseconds]);\\n    return this._registerTimeout(callbackId, false);\\n  }\\n  trustedFunction() {}\\n  trustPropagatorFunction() {}\\n}\\n\\n;// CONCATENATED MODULE: ./src/scripting_api/console.js\\n\\nclass Console extends PDFObject {\\n  clear() {\\n    this._send({\\n      id: \\\"clear\\\"\\n    });\\n  }\\n  hide() {}\\n  println(msg) {\\n    if (typeof msg === \\\"string\\\") {\\n      this._send({\\n        command: \\\"println\\\",\\n        value: \\\"PDF.js Console:: \\\" + msg\\n      });\\n    }\\n  }\\n  show() {}\\n}\\n\\n;// CONCATENATED MODULE: ./src/scripting_api/print_params.js\\nclass PrintParams {\\n  constructor(data) {\\n    this.binaryOk = true;\\n    this.bitmapDPI = 150;\\n    this.booklet = {\\n      binding: 0,\\n      duplexMode: 0,\\n      subsetFrom: 0,\\n      subsetTo: -1\\n    };\\n    this.colorOverride = 0;\\n    this.colorProfile = \\\"\\\";\\n    this.constants = Object.freeze({\\n      bookletBindings: Object.freeze({\\n        Left: 0,\\n        Right: 1,\\n        LeftTall: 2,\\n        RightTall: 3\\n      }),\\n      bookletDuplexMode: Object.freeze({\\n        BothSides: 0,\\n        FrontSideOnly: 1,\\n        BasicSideOnly: 2\\n      }),\\n      colorOverrides: Object.freeze({\\n        auto: 0,\\n        gray: 1,\\n        mono: 2\\n      }),\\n      fontPolicies: Object.freeze({\\n        everyPage: 0,\\n        jobStart: 1,\\n        pageRange: 2\\n      }),\\n      handling: Object.freeze({\\n        none: 0,\\n        fit: 1,\\n        shrink: 2,\\n        tileAll: 3,\\n        tileLarge: 4,\\n        nUp: 5,\\n        booklet: 6\\n      }),\\n      interactionLevel: Object.freeze({\\n        automatic: 0,\\n        full: 1,\\n        silent: 2\\n      }),\\n      nUpPageOrders: Object.freeze({\\n        Horizontal: 0,\\n        HorizontalReversed: 1,\\n        Vertical: 2\\n      }),\\n      printContents: Object.freeze({\\n        doc: 0,\\n        docAndComments: 1,\\n        formFieldsOnly: 2\\n      }),\\n      flagValues: Object.freeze({\\n        applyOverPrint: 1,\\n        applySoftProofSettings: 1 << 1,\\n        applyWorkingColorSpaces: 1 << 2,\\n        emitHalftones: 1 << 3,\\n        emitPostScriptXObjects: 1 << 4,\\n        emitFormsAsPSForms: 1 << 5,\\n        maxJP2KRes: 1 << 6,\\n        setPageSize: 1 << 7,\\n        suppressBG: 1 << 8,\\n        suppressCenter: 1 << 9,\\n        suppressCJKFontSubst: 1 << 10,\\n        suppressCropClip: 1 << 1,\\n        suppressRotate: 1 << 12,\\n        suppressTransfer: 1 << 13,\\n        suppressUCR: 1 << 14,\\n        useTrapAnnots: 1 << 15,\\n        usePrintersMarks: 1 << 16\\n      }),\\n      rasterFlagValues: Object.freeze({\\n        textToOutline: 1,\\n        strokesToOutline: 1 << 1,\\n        allowComplexClip: 1 << 2,\\n        preserveOverprint: 1 << 3\\n      }),\\n      subsets: Object.freeze({\\n        all: 0,\\n        even: 1,\\n        odd: 2\\n      }),\\n      tileMarks: Object.freeze({\\n        none: 0,\\n        west: 1,\\n        east: 2\\n      }),\\n      usages: Object.freeze({\\n        auto: 0,\\n        use: 1,\\n        noUse: 2\\n      })\\n    });\\n    this.downloadFarEastFonts = false;\\n    this.fileName = \\\"\\\";\\n    this.firstPage = 0;\\n    this.flags = 0;\\n    this.fontPolicy = 0;\\n    this.gradientDPI = 150;\\n    this.interactive = 1;\\n    this.lastPage = data.lastPage;\\n    this.npUpAutoRotate = false;\\n    this.npUpNumPagesH = 2;\\n    this.npUpNumPagesV = 2;\\n    this.npUpPageBorder = false;\\n    this.npUpPageOrder = 0;\\n    this.pageHandling = 0;\\n    this.pageSubset = 0;\\n    this.printAsImage = false;\\n    this.printContent = 0;\\n    this.printerName = \\\"\\\";\\n    this.psLevel = 0;\\n    this.rasterFlags = 0;\\n    this.reversePages = false;\\n    this.tileLabel = false;\\n    this.tileMark = 0;\\n    this.tileOverlap = 0;\\n    this.tileScale = 1.0;\\n    this.transparencyLevel = 75;\\n    this.usePrinterCRD = 0;\\n    this.useT1Conversion = 0;\\n  }\\n}\\n\\n;// CONCATENATED MODULE: ./src/scripting_api/doc.js\\n\\n\\n\\n\\n\\nconst DOC_EXTERNAL = false;\\nclass InfoProxyHandler {\\n  static get(obj, prop) {\\n    return obj[prop.toLowerCase()];\\n  }\\n  static set(obj, prop, value) {\\n    throw new Error(`doc.info.${prop} is read-only`);\\n  }\\n}\\nclass Doc extends PDFObject {\\n  constructor(data) {\\n    super(data);\\n    this._expandos = globalThis;\\n    this._baseURL = data.baseURL || \\\"\\\";\\n    this._calculate = true;\\n    this._delay = false;\\n    this._dirty = false;\\n    this._disclosed = false;\\n    this._media = undefined;\\n    this._metadata = data.metadata || \\\"\\\";\\n    this._noautocomplete = undefined;\\n    this._nocache = undefined;\\n    this._spellDictionaryOrder = [];\\n    this._spellLanguageOrder = [];\\n    this._printParams = null;\\n    this._fields = new Map();\\n    this._fieldNames = [];\\n    this._event = null;\\n    this._author = data.Author || \\\"\\\";\\n    this._creator = data.Creator || \\\"\\\";\\n    this._creationDate = this._getDate(data.CreationDate) || null;\\n    this._docID = data.docID || [\\\"\\\", \\\"\\\"];\\n    this._documentFileName = data.filename || \\\"\\\";\\n    this._filesize = data.filesize || 0;\\n    this._keywords = data.Keywords || \\\"\\\";\\n    this._layout = data.layout || \\\"\\\";\\n    this._modDate = this._getDate(data.ModDate) || null;\\n    this._numFields = 0;\\n    this._numPages = data.numPages || 1;\\n    this._pageNum = data.pageNum || 0;\\n    this._producer = data.Producer || \\\"\\\";\\n    this._securityHandler = data.EncryptFilterName || null;\\n    this._subject = data.Subject || \\\"\\\";\\n    this._title = data.Title || \\\"\\\";\\n    this._URL = data.URL || \\\"\\\";\\n    this._info = new Proxy({\\n      title: this._title,\\n      author: this._author,\\n      authors: data.authors || [this._author],\\n      subject: this._subject,\\n      keywords: this._keywords,\\n      creator: this._creator,\\n      producer: this._producer,\\n      creationdate: this._creationDate,\\n      moddate: this._modDate,\\n      trapped: data.Trapped || \\\"Unknown\\\"\\n    }, InfoProxyHandler);\\n    this._zoomType = ZoomType.none;\\n    this._zoom = data.zoom || 100;\\n    this._actions = createActionsMap(data.actions);\\n    this._globalEval = data.globalEval;\\n    this._pageActions = new Map();\\n    this._userActivation = false;\\n    this._disablePrinting = false;\\n    this._disableSaving = false;\\n  }\\n  _initActions() {\\n    const dontRun = new Set([\\\"WillClose\\\", \\\"WillSave\\\", \\\"DidSave\\\", \\\"WillPrint\\\", \\\"DidPrint\\\", \\\"OpenAction\\\"]);\\n    this._disableSaving = true;\\n    for (const actionName of this._actions.keys()) {\\n      if (!dontRun.has(actionName)) {\\n        this._runActions(actionName);\\n      }\\n    }\\n    this._runActions(\\\"OpenAction\\\");\\n    this._disableSaving = false;\\n  }\\n  _dispatchDocEvent(name) {\\n    switch (name) {\\n      case \\\"Open\\\":\\n        this._disableSaving = true;\\n        this._runActions(\\\"OpenAction\\\");\\n        this._disableSaving = false;\\n        break;\\n      case \\\"WillPrint\\\":\\n        this._disablePrinting = true;\\n        try {\\n          this._runActions(name);\\n        } catch (error) {\\n          this._send(serializeError(error));\\n        }\\n        this._send({\\n          command: \\\"WillPrintFinished\\\"\\n        });\\n        this._disablePrinting = false;\\n        break;\\n      case \\\"WillSave\\\":\\n        this._disableSaving = true;\\n        this._runActions(name);\\n        this._disableSaving = false;\\n        break;\\n      default:\\n        this._runActions(name);\\n    }\\n  }\\n  _dispatchPageEvent(name, actions, pageNumber) {\\n    if (name === \\\"PageOpen\\\") {\\n      if (!this._pageActions.has(pageNumber)) {\\n        this._pageActions.set(pageNumber, createActionsMap(actions));\\n      }\\n      this._pageNum = pageNumber - 1;\\n    }\\n    actions = this._pageActions.get(pageNumber)?.get(name);\\n    if (actions) {\\n      for (const action of actions) {\\n        this._globalEval(action);\\n      }\\n    }\\n  }\\n  _runActions(name) {\\n    const actions = this._actions.get(name);\\n    if (actions) {\\n      for (const action of actions) {\\n        this._globalEval(action);\\n      }\\n    }\\n  }\\n  _addField(name, field) {\\n    this._fields.set(name, field);\\n    this._fieldNames.push(name);\\n    this._numFields++;\\n  }\\n  _getDate(date) {\\n    if (!date || date.length < 15 || !date.startsWith(\\\"D:\\\")) {\\n      return date;\\n    }\\n    date = date.substring(2);\\n    const year = date.substring(0, 4);\\n    const month = date.substring(4, 6);\\n    const day = date.substring(6, 8);\\n    const hour = date.substring(8, 10);\\n    const minute = date.substring(10, 12);\\n    const o = date.charAt(12);\\n    let second, offsetPos;\\n    if (o === \\\"Z\\\" || o === \\\"+\\\" || o === \\\"-\\\") {\\n      second = \\\"00\\\";\\n      offsetPos = 12;\\n    } else {\\n      second = date.substring(12, 14);\\n      offsetPos = 14;\\n    }\\n    const offset = date.substring(offsetPos).replaceAll(\\\"'\\\", \\\"\\\");\\n    return new Date(`${year}-${month}-${day}T${hour}:${minute}:${second}${offset}`);\\n  }\\n  get author() {\\n    return this._author;\\n  }\\n  set author(_) {\\n    throw new Error(\\\"doc.author is read-only\\\");\\n  }\\n  get baseURL() {\\n    return this._baseURL;\\n  }\\n  set baseURL(baseURL) {\\n    this._baseURL = baseURL;\\n  }\\n  get bookmarkRoot() {\\n    return undefined;\\n  }\\n  set bookmarkRoot(_) {\\n    throw new Error(\\\"doc.bookmarkRoot is read-only\\\");\\n  }\\n  get calculate() {\\n    return this._calculate;\\n  }\\n  set calculate(calculate) {\\n    this._calculate = calculate;\\n  }\\n  get creator() {\\n    return this._creator;\\n  }\\n  set creator(_) {\\n    throw new Error(\\\"doc.creator is read-only\\\");\\n  }\\n  get dataObjects() {\\n    return [];\\n  }\\n  set dataObjects(_) {\\n    throw new Error(\\\"doc.dataObjects is read-only\\\");\\n  }\\n  get delay() {\\n    return this._delay;\\n  }\\n  set delay(delay) {\\n    this._delay = delay;\\n  }\\n  get dirty() {\\n    return this._dirty;\\n  }\\n  set dirty(dirty) {\\n    this._dirty = dirty;\\n  }\\n  get disclosed() {\\n    return this._disclosed;\\n  }\\n  set disclosed(disclosed) {\\n    this._disclosed = disclosed;\\n  }\\n  get docID() {\\n    return this._docID;\\n  }\\n  set docID(_) {\\n    throw new Error(\\\"doc.docID is read-only\\\");\\n  }\\n  get documentFileName() {\\n    return this._documentFileName;\\n  }\\n  set documentFileName(_) {\\n    throw new Error(\\\"doc.documentFileName is read-only\\\");\\n  }\\n  get dynamicXFAForm() {\\n    return false;\\n  }\\n  set dynamicXFAForm(_) {\\n    throw new Error(\\\"doc.dynamicXFAForm is read-only\\\");\\n  }\\n  get external() {\\n    return DOC_EXTERNAL;\\n  }\\n  set external(_) {\\n    throw new Error(\\\"doc.external is read-only\\\");\\n  }\\n  get filesize() {\\n    return this._filesize;\\n  }\\n  set filesize(_) {\\n    throw new Error(\\\"doc.filesize is read-only\\\");\\n  }\\n  get hidden() {\\n    return false;\\n  }\\n  set hidden(_) {\\n    throw new Error(\\\"doc.hidden is read-only\\\");\\n  }\\n  get hostContainer() {\\n    return undefined;\\n  }\\n  set hostContainer(_) {\\n    throw new Error(\\\"doc.hostContainer is read-only\\\");\\n  }\\n  get icons() {\\n    return undefined;\\n  }\\n  set icons(_) {\\n    throw new Error(\\\"doc.icons is read-only\\\");\\n  }\\n  get info() {\\n    return this._info;\\n  }\\n  set info(_) {\\n    throw new Error(\\\"doc.info is read-only\\\");\\n  }\\n  get innerAppWindowRect() {\\n    return [0, 0, 0, 0];\\n  }\\n  set innerAppWindowRect(_) {\\n    throw new Error(\\\"doc.innerAppWindowRect is read-only\\\");\\n  }\\n  get innerDocWindowRect() {\\n    return [0, 0, 0, 0];\\n  }\\n  set innerDocWindowRect(_) {\\n    throw new Error(\\\"doc.innerDocWindowRect is read-only\\\");\\n  }\\n  get isModal() {\\n    return false;\\n  }\\n  set isModal(_) {\\n    throw new Error(\\\"doc.isModal is read-only\\\");\\n  }\\n  get keywords() {\\n    return this._keywords;\\n  }\\n  set keywords(_) {\\n    throw new Error(\\\"doc.keywords is read-only\\\");\\n  }\\n  get layout() {\\n    return this._layout;\\n  }\\n  set layout(value) {\\n    if (!this._userActivation) {\\n      return;\\n    }\\n    this._userActivation = false;\\n    if (typeof value !== \\\"string\\\") {\\n      return;\\n    }\\n    if (value !== \\\"SinglePage\\\" && value !== \\\"OneColumn\\\" && value !== \\\"TwoColumnLeft\\\" && value !== \\\"TwoPageLeft\\\" && value !== \\\"TwoColumnRight\\\" && value !== \\\"TwoPageRight\\\") {\\n      value = \\\"SinglePage\\\";\\n    }\\n    this._send({\\n      command: \\\"layout\\\",\\n      value\\n    });\\n    this._layout = value;\\n  }\\n  get media() {\\n    return this._media;\\n  }\\n  set media(media) {\\n    this._media = media;\\n  }\\n  get metadata() {\\n    return this._metadata;\\n  }\\n  set metadata(metadata) {\\n    this._metadata = metadata;\\n  }\\n  get modDate() {\\n    return this._modDate;\\n  }\\n  set modDate(_) {\\n    throw new Error(\\\"doc.modDate is read-only\\\");\\n  }\\n  get mouseX() {\\n    return 0;\\n  }\\n  set mouseX(_) {\\n    throw new Error(\\\"doc.mouseX is read-only\\\");\\n  }\\n  get mouseY() {\\n    return 0;\\n  }\\n  set mouseY(_) {\\n    throw new Error(\\\"doc.mouseY is read-only\\\");\\n  }\\n  get noautocomplete() {\\n    return this._noautocomplete;\\n  }\\n  set noautocomplete(noautocomplete) {\\n    this._noautocomplete = noautocomplete;\\n  }\\n  get nocache() {\\n    return this._nocache;\\n  }\\n  set nocache(nocache) {\\n    this._nocache = nocache;\\n  }\\n  get numFields() {\\n    return this._numFields;\\n  }\\n  set numFields(_) {\\n    throw new Error(\\\"doc.numFields is read-only\\\");\\n  }\\n  get numPages() {\\n    return this._numPages;\\n  }\\n  set numPages(_) {\\n    throw new Error(\\\"doc.numPages is read-only\\\");\\n  }\\n  get numTemplates() {\\n    return 0;\\n  }\\n  set numTemplates(_) {\\n    throw new Error(\\\"doc.numTemplates is read-only\\\");\\n  }\\n  get outerAppWindowRect() {\\n    return [0, 0, 0, 0];\\n  }\\n  set outerAppWindowRect(_) {\\n    throw new Error(\\\"doc.outerAppWindowRect is read-only\\\");\\n  }\\n  get outerDocWindowRect() {\\n    return [0, 0, 0, 0];\\n  }\\n  set outerDocWindowRect(_) {\\n    throw new Error(\\\"doc.outerDocWindowRect is read-only\\\");\\n  }\\n  get pageNum() {\\n    return this._pageNum;\\n  }\\n  set pageNum(value) {\\n    if (!this._userActivation) {\\n      return;\\n    }\\n    this._userActivation = false;\\n    if (typeof value !== \\\"number\\\" || value < 0 || value >= this._numPages) {\\n      return;\\n    }\\n    this._send({\\n      command: \\\"page-num\\\",\\n      value\\n    });\\n    this._pageNum = value;\\n  }\\n  get pageWindowRect() {\\n    return [0, 0, 0, 0];\\n  }\\n  set pageWindowRect(_) {\\n    throw new Error(\\\"doc.pageWindowRect is read-only\\\");\\n  }\\n  get path() {\\n    return \\\"\\\";\\n  }\\n  set path(_) {\\n    throw new Error(\\\"doc.path is read-only\\\");\\n  }\\n  get permStatusReady() {\\n    return true;\\n  }\\n  set permStatusReady(_) {\\n    throw new Error(\\\"doc.permStatusReady is read-only\\\");\\n  }\\n  get producer() {\\n    return this._producer;\\n  }\\n  set producer(_) {\\n    throw new Error(\\\"doc.producer is read-only\\\");\\n  }\\n  get requiresFullSave() {\\n    return false;\\n  }\\n  set requiresFullSave(_) {\\n    throw new Error(\\\"doc.requiresFullSave is read-only\\\");\\n  }\\n  get securityHandler() {\\n    return this._securityHandler;\\n  }\\n  set securityHandler(_) {\\n    throw new Error(\\\"doc.securityHandler is read-only\\\");\\n  }\\n  get selectedAnnots() {\\n    return [];\\n  }\\n  set selectedAnnots(_) {\\n    throw new Error(\\\"doc.selectedAnnots is read-only\\\");\\n  }\\n  get sounds() {\\n    return [];\\n  }\\n  set sounds(_) {\\n    throw new Error(\\\"doc.sounds is read-only\\\");\\n  }\\n  get spellDictionaryOrder() {\\n    return this._spellDictionaryOrder;\\n  }\\n  set spellDictionaryOrder(spellDictionaryOrder) {\\n    this._spellDictionaryOrder = spellDictionaryOrder;\\n  }\\n  get spellLanguageOrder() {\\n    return this._spellLanguageOrder;\\n  }\\n  set spellLanguageOrder(spellLanguageOrder) {\\n    this._spellLanguageOrder = spellLanguageOrder;\\n  }\\n  get subject() {\\n    return this._subject;\\n  }\\n  set subject(_) {\\n    throw new Error(\\\"doc.subject is read-only\\\");\\n  }\\n  get templates() {\\n    return [];\\n  }\\n  set templates(_) {\\n    throw new Error(\\\"doc.templates is read-only\\\");\\n  }\\n  get title() {\\n    return this._title;\\n  }\\n  set title(_) {\\n    throw new Error(\\\"doc.title is read-only\\\");\\n  }\\n  get URL() {\\n    return this._URL;\\n  }\\n  set URL(_) {\\n    throw new Error(\\\"doc.URL is read-only\\\");\\n  }\\n  get viewState() {\\n    return undefined;\\n  }\\n  set viewState(_) {\\n    throw new Error(\\\"doc.viewState is read-only\\\");\\n  }\\n  get xfa() {\\n    return this._xfa;\\n  }\\n  set xfa(_) {\\n    throw new Error(\\\"doc.xfa is read-only\\\");\\n  }\\n  get XFAForeground() {\\n    return false;\\n  }\\n  set XFAForeground(_) {\\n    throw new Error(\\\"doc.XFAForeground is read-only\\\");\\n  }\\n  get zoomType() {\\n    return this._zoomType;\\n  }\\n  set zoomType(type) {\\n    if (!this._userActivation) {\\n      return;\\n    }\\n    this._userActivation = false;\\n    if (typeof type !== \\\"string\\\") {\\n      return;\\n    }\\n    switch (type) {\\n      case ZoomType.none:\\n        this._send({\\n          command: \\\"zoom\\\",\\n          value: 1\\n        });\\n        break;\\n      case ZoomType.fitP:\\n        this._send({\\n          command: \\\"zoom\\\",\\n          value: \\\"page-fit\\\"\\n        });\\n        break;\\n      case ZoomType.fitW:\\n        this._send({\\n          command: \\\"zoom\\\",\\n          value: \\\"page-width\\\"\\n        });\\n        break;\\n      case ZoomType.fitH:\\n        this._send({\\n          command: \\\"zoom\\\",\\n          value: \\\"page-height\\\"\\n        });\\n        break;\\n      case ZoomType.fitV:\\n        this._send({\\n          command: \\\"zoom\\\",\\n          value: \\\"auto\\\"\\n        });\\n        break;\\n      case ZoomType.pref:\\n      case ZoomType.refW:\\n        break;\\n      default:\\n        return;\\n    }\\n    this._zoomType = type;\\n  }\\n  get zoom() {\\n    return this._zoom;\\n  }\\n  set zoom(value) {\\n    if (!this._userActivation) {\\n      return;\\n    }\\n    this._userActivation = false;\\n    if (typeof value !== \\\"number\\\" || value < 8.33 || value > 6400) {\\n      return;\\n    }\\n    this._send({\\n      command: \\\"zoom\\\",\\n      value: value / 100\\n    });\\n  }\\n  addAnnot() {}\\n  addField() {}\\n  addIcon() {}\\n  addLink() {}\\n  addRecipientListCryptFilter() {}\\n  addRequirement() {}\\n  addScript() {}\\n  addThumbnails() {}\\n  addWatermarkFromFile() {}\\n  addWatermarkFromText() {}\\n  addWeblinks() {}\\n  bringToFront() {}\\n  calculateNow() {\\n    this._eventDispatcher.calculateNow();\\n  }\\n  closeDoc() {}\\n  colorConvertPage() {}\\n  createDataObject() {}\\n  createTemplate() {}\\n  deletePages() {}\\n  deleteSound() {}\\n  embedDocAsDataObject() {}\\n  embedOutputIntent() {}\\n  encryptForRecipients() {}\\n  encryptUsingPolicy() {}\\n  exportAsFDF() {}\\n  exportAsFDFStr() {}\\n  exportAsText() {}\\n  exportAsXFDF() {}\\n  exportAsXFDFStr() {}\\n  exportDataObject() {}\\n  exportXFAData() {}\\n  extractPages() {}\\n  flattenPages() {}\\n  getAnnot() {}\\n  getAnnots() {}\\n  getAnnot3D() {}\\n  getAnnots3D() {}\\n  getColorConvertAction() {}\\n  getDataObject() {}\\n  getDataObjectContents() {}\\n  _getField(cName) {\\n    if (cName && typeof cName === \\\"object\\\") {\\n      cName = cName.cName;\\n    }\\n    if (typeof cName !== \\\"string\\\") {\\n      throw new TypeError(\\\"Invalid field name: must be a string\\\");\\n    }\\n    const searchedField = this._fields.get(cName);\\n    if (searchedField) {\\n      return searchedField;\\n    }\\n    const parts = cName.split(\\\"#\\\");\\n    let childIndex = NaN;\\n    if (parts.length === 2) {\\n      childIndex = Math.floor(parseFloat(parts[1]));\\n      cName = parts[0];\\n    }\\n    for (const [name, field] of this._fields.entries()) {\\n      if (name.endsWith(cName)) {\\n        if (!isNaN(childIndex)) {\\n          const children = this._getChildren(name);\\n          if (childIndex < 0 || childIndex >= children.length) {\\n            childIndex = 0;\\n          }\\n          if (childIndex < children.length) {\\n            this._fields.set(cName, children[childIndex]);\\n            return children[childIndex];\\n          }\\n        }\\n        this._fields.set(cName, field);\\n        return field;\\n      }\\n    }\\n    return null;\\n  }\\n  getField(cName) {\\n    const field = this._getField(cName);\\n    if (!field) {\\n      return null;\\n    }\\n    return field.wrapped;\\n  }\\n  _getChildren(fieldName) {\\n    const len = fieldName.length;\\n    const children = [];\\n    const pattern = /^\\\\.[^.]+$/;\\n    for (const [name, field] of this._fields.entries()) {\\n      if (name.startsWith(fieldName)) {\\n        const finalPart = name.slice(len);\\n        if (pattern.test(finalPart)) {\\n          children.push(field);\\n        }\\n      }\\n    }\\n    return children;\\n  }\\n  _getTerminalChildren(fieldName) {\\n    const children = [];\\n    const len = fieldName.length;\\n    for (const [name, field] of this._fields.entries()) {\\n      if (name.startsWith(fieldName)) {\\n        const finalPart = name.slice(len);\\n        if (field.obj._hasValue && (finalPart === \\\"\\\" || finalPart.startsWith(\\\".\\\"))) {\\n          children.push(field.wrapped);\\n        }\\n      }\\n    }\\n    return children;\\n  }\\n  getIcon() {}\\n  getLegalWarnings() {}\\n  getLinks() {}\\n  getNthFieldName(nIndex) {\\n    if (nIndex && typeof nIndex === \\\"object\\\") {\\n      nIndex = nIndex.nIndex;\\n    }\\n    if (typeof nIndex !== \\\"number\\\") {\\n      throw new TypeError(\\\"Invalid field index: must be a number\\\");\\n    }\\n    if (0 <= nIndex && nIndex < this.numFields) {\\n      return this._fieldNames[Math.trunc(nIndex)];\\n    }\\n    return null;\\n  }\\n  getNthTemplate() {\\n    return null;\\n  }\\n  getOCGs() {}\\n  getOCGOrder() {}\\n  getPageBox() {}\\n  getPageLabel() {}\\n  getPageNthWord() {}\\n  getPageNthWordQuads() {}\\n  getPageNumWords() {}\\n  getPageRotation() {}\\n  getPageTransition() {}\\n  getPrintParams() {\\n    return this._printParams ||= new PrintParams({\\n      lastPage: this._numPages - 1\\n    });\\n  }\\n  getSound() {}\\n  getTemplate() {}\\n  getURL() {}\\n  gotoNamedDest() {}\\n  importAnFDF() {}\\n  importAnXFDF() {}\\n  importDataObject() {}\\n  importIcon() {}\\n  importSound() {}\\n  importTextData() {}\\n  importXFAData() {}\\n  insertPages() {}\\n  mailDoc() {}\\n  mailForm() {}\\n  movePage() {}\\n  newPage() {}\\n  openDataObject() {}\\n  print(bUI = true, nStart = 0, nEnd = -1, bSilent = false, bShrinkToFit = false, bPrintAsImage = false, bReverse = false, bAnnotations = true, printParams = null) {\\n    if (this._disablePrinting || !this._userActivation) {\\n      return;\\n    }\\n    this._userActivation = false;\\n    if (bUI && typeof bUI === \\\"object\\\") {\\n      nStart = bUI.nStart;\\n      nEnd = bUI.nEnd;\\n      bSilent = bUI.bSilent;\\n      bShrinkToFit = bUI.bShrinkToFit;\\n      bPrintAsImage = bUI.bPrintAsImage;\\n      bReverse = bUI.bReverse;\\n      bAnnotations = bUI.bAnnotations;\\n      printParams = bUI.printParams;\\n      bUI = bUI.bUI;\\n    }\\n    if (printParams) {\\n      nStart = printParams.firstPage;\\n      nEnd = printParams.lastPage;\\n    }\\n    nStart = typeof nStart === \\\"number\\\" ? Math.max(0, Math.trunc(nStart)) : 0;\\n    nEnd = typeof nEnd === \\\"number\\\" ? Math.max(0, Math.trunc(nEnd)) : -1;\\n    this._send({\\n      command: \\\"print\\\",\\n      start: nStart,\\n      end: nEnd\\n    });\\n  }\\n  removeDataObject() {}\\n  removeField() {}\\n  removeIcon() {}\\n  removeLinks() {}\\n  removeRequirement() {}\\n  removeScript() {}\\n  removeTemplate() {}\\n  removeThumbnails() {}\\n  removeWeblinks() {}\\n  replacePages() {}\\n  resetForm(aFields = null) {\\n    if (aFields && typeof aFields === \\\"object\\\" && !Array.isArray(aFields)) {\\n      aFields = aFields.aFields;\\n    }\\n    if (aFields && !Array.isArray(aFields)) {\\n      aFields = [aFields];\\n    }\\n    let mustCalculate = false;\\n    let fieldsToReset;\\n    if (aFields) {\\n      fieldsToReset = [];\\n      for (const fieldName of aFields) {\\n        if (!fieldName) {\\n          continue;\\n        }\\n        if (typeof fieldName !== \\\"string\\\") {\\n          fieldsToReset = null;\\n          break;\\n        }\\n        const field = this._getField(fieldName);\\n        if (!field) {\\n          continue;\\n        }\\n        fieldsToReset.push(field);\\n        mustCalculate = true;\\n      }\\n    }\\n    if (!fieldsToReset) {\\n      fieldsToReset = this._fields.values();\\n      mustCalculate = this._fields.size !== 0;\\n    }\\n    for (const field of fieldsToReset) {\\n      field.obj.value = field.obj.defaultValue;\\n      this._send({\\n        id: field.obj._id,\\n        siblings: field.obj._siblings,\\n        value: field.obj.defaultValue,\\n        formattedValue: null,\\n        selRange: [0, 0]\\n      });\\n    }\\n    if (mustCalculate) {\\n      this.calculateNow();\\n    }\\n  }\\n  saveAs() {}\\n  scroll() {}\\n  selectPageNthWord() {}\\n  setAction() {}\\n  setDataObjectContents() {}\\n  setOCGOrder() {}\\n  setPageAction() {}\\n  setPageBoxes() {}\\n  setPageLabels() {}\\n  setPageRotations() {}\\n  setPageTabOrder() {}\\n  setPageTransitions() {}\\n  spawnPageFromTemplate() {}\\n  submitForm() {}\\n  syncAnnotScan() {}\\n}\\n\\n;// CONCATENATED MODULE: ./src/scripting_api/proxy.js\\nclass ProxyHandler {\\n  constructor() {\\n    this.nosend = new Set([\\\"delay\\\"]);\\n  }\\n  get(obj, prop) {\\n    if (prop in obj._expandos) {\\n      const val = obj._expandos[prop];\\n      if (typeof val === \\\"function\\\") {\\n        return val.bind(obj);\\n      }\\n      return val;\\n    }\\n    if (typeof prop === \\\"string\\\" && !prop.startsWith(\\\"_\\\") && prop in obj) {\\n      const val = obj[prop];\\n      if (typeof val === \\\"function\\\") {\\n        return val.bind(obj);\\n      }\\n      return val;\\n    }\\n    return undefined;\\n  }\\n  set(obj, prop, value) {\\n    if (obj._kidIds) {\\n      obj._kidIds.forEach(id => {\\n        obj._appObjects[id].wrapped[prop] = value;\\n      });\\n    }\\n    if (typeof prop === \\\"string\\\" && !prop.startsWith(\\\"_\\\") && prop in obj) {\\n      const old = obj[prop];\\n      obj[prop] = value;\\n      if (!this.nosend.has(prop) && obj._send && obj._id !== null && typeof old !== \\\"function\\\") {\\n        const data = {\\n          id: obj._id\\n        };\\n        data[prop] = prop === \\\"value\\\" ? obj._getValue() : obj[prop];\\n        if (!obj._siblings) {\\n          obj._send(data);\\n        } else {\\n          data.siblings = obj._siblings;\\n          obj._send(data);\\n        }\\n      }\\n    } else {\\n      obj._expandos[prop] = value;\\n    }\\n    return true;\\n  }\\n  has(obj, prop) {\\n    return prop in obj._expandos || typeof prop === \\\"string\\\" && !prop.startsWith(\\\"_\\\") && prop in obj;\\n  }\\n  getPrototypeOf(obj) {\\n    return null;\\n  }\\n  setPrototypeOf(obj, proto) {\\n    return false;\\n  }\\n  isExtensible(obj) {\\n    return true;\\n  }\\n  preventExtensions(obj) {\\n    return false;\\n  }\\n  getOwnPropertyDescriptor(obj, prop) {\\n    if (prop in obj._expandos) {\\n      return {\\n        configurable: true,\\n        enumerable: true,\\n        value: obj._expandos[prop]\\n      };\\n    }\\n    if (typeof prop === \\\"string\\\" && !prop.startsWith(\\\"_\\\") && prop in obj) {\\n      return {\\n        configurable: true,\\n        enumerable: true,\\n        value: obj[prop]\\n      };\\n    }\\n    return undefined;\\n  }\\n  defineProperty(obj, key, descriptor) {\\n    Object.defineProperty(obj._expandos, key, descriptor);\\n    return true;\\n  }\\n  deleteProperty(obj, prop) {\\n    if (prop in obj._expandos) {\\n      delete obj._expandos[prop];\\n    }\\n  }\\n  ownKeys(obj) {\\n    const fromExpandos = Reflect.ownKeys(obj._expandos);\\n    const fromObj = Reflect.ownKeys(obj).filter(k => !k.startsWith(\\\"_\\\"));\\n    return fromExpandos.concat(fromObj);\\n  }\\n}\\n\\n;// CONCATENATED MODULE: ./src/scripting_api/util.js\\n\\nclass Util extends PDFObject {\\n  constructor(data) {\\n    super(data);\\n    this._scandCache = new Map();\\n    this._months = [\\\"January\\\", \\\"February\\\", \\\"March\\\", \\\"April\\\", \\\"May\\\", \\\"June\\\", \\\"July\\\", \\\"August\\\", \\\"September\\\", \\\"October\\\", \\\"November\\\", \\\"December\\\"];\\n    this._days = [\\\"Sunday\\\", \\\"Monday\\\", \\\"Tuesday\\\", \\\"Wednesday\\\", \\\"Thursday\\\", \\\"Friday\\\", \\\"Saturday\\\"];\\n    this.MILLISECONDS_IN_DAY = 86400000;\\n    this.MILLISECONDS_IN_WEEK = 604800000;\\n    this._externalCall = data.externalCall;\\n  }\\n  printf(...args) {\\n    if (args.length === 0) {\\n      throw new Error(\\\"Invalid number of params in printf\\\");\\n    }\\n    if (typeof args[0] !== \\\"string\\\") {\\n      throw new TypeError(\\\"First argument of printf must be a string\\\");\\n    }\\n    const pattern = /%(,[0-4])?([+ 0#]+)?(\\\\d+)?(\\\\.\\\\d+)?(.)/g;\\n    const PLUS = 1;\\n    const SPACE = 2;\\n    const ZERO = 4;\\n    const HASH = 8;\\n    let i = 0;\\n    return args[0].replaceAll(pattern, function (match, nDecSep, cFlags, nWidth, nPrecision, cConvChar) {\\n      if (cConvChar !== \\\"d\\\" && cConvChar !== \\\"f\\\" && cConvChar !== \\\"s\\\" && cConvChar !== \\\"x\\\") {\\n        const buf = [\\\"%\\\"];\\n        for (const str of [nDecSep, cFlags, nWidth, nPrecision, cConvChar]) {\\n          if (str) {\\n            buf.push(str);\\n          }\\n        }\\n        return buf.join(\\\"\\\");\\n      }\\n      i++;\\n      if (i === args.length) {\\n        throw new Error(\\\"Not enough arguments in printf\\\");\\n      }\\n      const arg = args[i];\\n      if (cConvChar === \\\"s\\\") {\\n        return arg.toString();\\n      }\\n      let flags = 0;\\n      if (cFlags) {\\n        for (const flag of cFlags) {\\n          switch (flag) {\\n            case \\\"+\\\":\\n              flags |= PLUS;\\n              break;\\n            case \\\" \\\":\\n              flags |= SPACE;\\n              break;\\n            case \\\"0\\\":\\n              flags |= ZERO;\\n              break;\\n            case \\\"#\\\":\\n              flags |= HASH;\\n              break;\\n          }\\n        }\\n      }\\n      cFlags = flags;\\n      if (nWidth) {\\n        nWidth = parseInt(nWidth);\\n      }\\n      let intPart = Math.trunc(arg);\\n      if (cConvChar === \\\"x\\\") {\\n        let hex = Math.abs(intPart).toString(16).toUpperCase();\\n        if (nWidth !== undefined) {\\n          hex = hex.padStart(nWidth, cFlags & ZERO ? \\\"0\\\" : \\\" \\\");\\n        }\\n        if (cFlags & HASH) {\\n          hex = `0x${hex}`;\\n        }\\n        return hex;\\n      }\\n      if (nPrecision) {\\n        nPrecision = parseInt(nPrecision.substring(1));\\n      }\\n      nDecSep = nDecSep ? nDecSep.substring(1) : \\\"0\\\";\\n      const separators = {\\n        0: [\\\",\\\", \\\".\\\"],\\n        1: [\\\"\\\", \\\".\\\"],\\n        2: [\\\".\\\", \\\",\\\"],\\n        3: [\\\"\\\", \\\",\\\"],\\n        4: [\\\"'\\\", \\\".\\\"]\\n      };\\n      const [thousandSep, decimalSep] = separators[nDecSep];\\n      let decPart = \\\"\\\";\\n      if (cConvChar === \\\"f\\\") {\\n        decPart = nPrecision !== undefined ? Math.abs(arg - intPart).toFixed(nPrecision) : Math.abs(arg - intPart).toString();\\n        if (decPart.length > 2) {\\n          decPart = `${decimalSep}${decPart.substring(2)}`;\\n        } else {\\n          if (decPart === \\\"1\\\") {\\n            intPart += Math.sign(arg);\\n          }\\n          decPart = cFlags & HASH ? \\\".\\\" : \\\"\\\";\\n        }\\n      }\\n      let sign = \\\"\\\";\\n      if (intPart < 0) {\\n        sign = \\\"-\\\";\\n        intPart = -intPart;\\n      } else if (cFlags & PLUS) {\\n        sign = \\\"+\\\";\\n      } else if (cFlags & SPACE) {\\n        sign = \\\" \\\";\\n      }\\n      if (thousandSep && intPart >= 1000) {\\n        const buf = [];\\n        while (true) {\\n          buf.push((intPart % 1000).toString().padStart(3, \\\"0\\\"));\\n          intPart = Math.trunc(intPart / 1000);\\n          if (intPart < 1000) {\\n            buf.push(intPart.toString());\\n            break;\\n          }\\n        }\\n        intPart = buf.reverse().join(thousandSep);\\n      } else {\\n        intPart = intPart.toString();\\n      }\\n      let n = `${intPart}${decPart}`;\\n      if (nWidth !== undefined) {\\n        n = n.padStart(nWidth - sign.length, cFlags & ZERO ? \\\"0\\\" : \\\" \\\");\\n      }\\n      return `${sign}${n}`;\\n    });\\n  }\\n  iconStreamFromIcon() {}\\n  printd(cFormat, oDate) {\\n    switch (cFormat) {\\n      case 0:\\n        return this.printd(\\\"D:yyyymmddHHMMss\\\", oDate);\\n      case 1:\\n        return this.printd(\\\"yyyy.mm.dd HH:MM:ss\\\", oDate);\\n      case 2:\\n        return this.printd(\\\"m/d/yy h:MM:ss tt\\\", oDate);\\n    }\\n    const handlers = {\\n      mmmm: data => this._months[data.month],\\n      mmm: data => this._months[data.month].substring(0, 3),\\n      mm: data => (data.month + 1).toString().padStart(2, \\\"0\\\"),\\n      m: data => (data.month + 1).toString(),\\n      dddd: data => this._days[data.dayOfWeek],\\n      ddd: data => this._days[data.dayOfWeek].substring(0, 3),\\n      dd: data => data.day.toString().padStart(2, \\\"0\\\"),\\n      d: data => data.day.toString(),\\n      yyyy: data => data.year.toString(),\\n      yy: data => (data.year % 100).toString().padStart(2, \\\"0\\\"),\\n      HH: data => data.hours.toString().padStart(2, \\\"0\\\"),\\n      H: data => data.hours.toString(),\\n      hh: data => (1 + (data.hours + 11) % 12).toString().padStart(2, \\\"0\\\"),\\n      h: data => (1 + (data.hours + 11) % 12).toString(),\\n      MM: data => data.minutes.toString().padStart(2, \\\"0\\\"),\\n      M: data => data.minutes.toString(),\\n      ss: data => data.seconds.toString().padStart(2, \\\"0\\\"),\\n      s: data => data.seconds.toString(),\\n      tt: data => data.hours < 12 ? \\\"am\\\" : \\\"pm\\\",\\n      t: data => data.hours < 12 ? \\\"a\\\" : \\\"p\\\"\\n    };\\n    const data = {\\n      year: oDate.getFullYear(),\\n      month: oDate.getMonth(),\\n      day: oDate.getDate(),\\n      dayOfWeek: oDate.getDay(),\\n      hours: oDate.getHours(),\\n      minutes: oDate.getMinutes(),\\n      seconds: oDate.getSeconds()\\n    };\\n    const patterns = /(mmmm|mmm|mm|m|dddd|ddd|dd|d|yyyy|yy|HH|H|hh|h|MM|M|ss|s|tt|t|\\\\\\\\.)/g;\\n    return cFormat.replaceAll(patterns, function (match, pattern) {\\n      if (pattern in handlers) {\\n        return handlers[pattern](data);\\n      }\\n      return pattern.charCodeAt(1);\\n    });\\n  }\\n  printx(cFormat, cSource) {\\n    cSource = (cSource ?? \\\"\\\").toString();\\n    const handlers = [x => x, x => x.toUpperCase(), x => x.toLowerCase()];\\n    const buf = [];\\n    let i = 0;\\n    const ii = cSource.length;\\n    let currCase = handlers[0];\\n    let escaped = false;\\n    for (const command of cFormat) {\\n      if (escaped) {\\n        buf.push(command);\\n        escaped = false;\\n        continue;\\n      }\\n      if (i >= ii) {\\n        break;\\n      }\\n      switch (command) {\\n        case \\\"?\\\":\\n          buf.push(currCase(cSource.charAt(i++)));\\n          break;\\n        case \\\"X\\\":\\n          while (i < ii) {\\n            const char = cSource.charAt(i++);\\n            if (\\\"a\\\" <= char && char <= \\\"z\\\" || \\\"A\\\" <= char && char <= \\\"Z\\\" || \\\"0\\\" <= char && char <= \\\"9\\\") {\\n              buf.push(currCase(char));\\n              break;\\n            }\\n          }\\n          break;\\n        case \\\"A\\\":\\n          while (i < ii) {\\n            const char = cSource.charAt(i++);\\n            if (\\\"a\\\" <= char && char <= \\\"z\\\" || \\\"A\\\" <= char && char <= \\\"Z\\\") {\\n              buf.push(currCase(char));\\n              break;\\n            }\\n          }\\n          break;\\n        case \\\"9\\\":\\n          while (i < ii) {\\n            const char = cSource.charAt(i++);\\n            if (\\\"0\\\" <= char && char <= \\\"9\\\") {\\n              buf.push(char);\\n              break;\\n            }\\n          }\\n          break;\\n        case \\\"*\\\":\\n          while (i < ii) {\\n            buf.push(currCase(cSource.charAt(i++)));\\n          }\\n          break;\\n        case \\\"\\\\\\\\\\\":\\n          escaped = true;\\n          break;\\n        case \\\">\\\":\\n          currCase = handlers[1];\\n          break;\\n        case \\\"<\\\":\\n          currCase = handlers[2];\\n          break;\\n        case \\\"=\\\":\\n          currCase = handlers[0];\\n          break;\\n        default:\\n          buf.push(command);\\n      }\\n    }\\n    return buf.join(\\\"\\\");\\n  }\\n  scand(cFormat, cDate) {\\n    if (typeof cDate !== \\\"string\\\") {\\n      return new Date(cDate);\\n    }\\n    if (cDate === \\\"\\\") {\\n      return new Date();\\n    }\\n    switch (cFormat) {\\n      case 0:\\n        return this.scand(\\\"D:yyyymmddHHMMss\\\", cDate);\\n      case 1:\\n        return this.scand(\\\"yyyy.mm.dd HH:MM:ss\\\", cDate);\\n      case 2:\\n        return this.scand(\\\"m/d/yy h:MM:ss tt\\\", cDate);\\n    }\\n    if (!this._scandCache.has(cFormat)) {\\n      const months = this._months;\\n      const days = this._days;\\n      const handlers = {\\n        mmmm: {\\n          pattern: `(${months.join(\\\"|\\\")})`,\\n          action: (value, data) => {\\n            data.month = months.indexOf(value);\\n          }\\n        },\\n        mmm: {\\n          pattern: `(${months.map(month => month.substring(0, 3)).join(\\\"|\\\")})`,\\n          action: (value, data) => {\\n            data.month = months.findIndex(month => month.substring(0, 3) === value);\\n          }\\n        },\\n        mm: {\\n          pattern: `(\\\\\\\\d{2})`,\\n          action: (value, data) => {\\n            data.month = parseInt(value) - 1;\\n          }\\n        },\\n        m: {\\n          pattern: `(\\\\\\\\d{1,2})`,\\n          action: (value, data) => {\\n            data.month = parseInt(value) - 1;\\n          }\\n        },\\n        dddd: {\\n          pattern: `(${days.join(\\\"|\\\")})`,\\n          action: (value, data) => {\\n            data.day = days.indexOf(value);\\n          }\\n        },\\n        ddd: {\\n          pattern: `(${days.map(day => day.substring(0, 3)).join(\\\"|\\\")})`,\\n          action: (value, data) => {\\n            data.day = days.findIndex(day => day.substring(0, 3) === value);\\n          }\\n        },\\n        dd: {\\n          pattern: \\\"(\\\\\\\\d{2})\\\",\\n          action: (value, data) => {\\n            data.day = parseInt(value);\\n          }\\n        },\\n        d: {\\n          pattern: \\\"(\\\\\\\\d{1,2})\\\",\\n          action: (value, data) => {\\n            data.day = parseInt(value);\\n          }\\n        },\\n        yyyy: {\\n          pattern: \\\"(\\\\\\\\d{4})\\\",\\n          action: (value, data) => {\\n            data.year = parseInt(value);\\n          }\\n        },\\n        yy: {\\n          pattern: \\\"(\\\\\\\\d{2})\\\",\\n          action: (value, data) => {\\n            data.year = 2000 + parseInt(value);\\n          }\\n        },\\n        HH: {\\n          pattern: \\\"(\\\\\\\\d{2})\\\",\\n          action: (value, data) => {\\n            data.hours = parseInt(value);\\n          }\\n        },\\n        H: {\\n          pattern: \\\"(\\\\\\\\d{1,2})\\\",\\n          action: (value, data) => {\\n            data.hours = parseInt(value);\\n          }\\n        },\\n        hh: {\\n          pattern: \\\"(\\\\\\\\d{2})\\\",\\n          action: (value, data) => {\\n            data.hours = parseInt(value);\\n          }\\n        },\\n        h: {\\n          pattern: \\\"(\\\\\\\\d{1,2})\\\",\\n          action: (value, data) => {\\n            data.hours = parseInt(value);\\n          }\\n        },\\n        MM: {\\n          pattern: \\\"(\\\\\\\\d{2})\\\",\\n          action: (value, data) => {\\n            data.minutes = parseInt(value);\\n          }\\n        },\\n        M: {\\n          pattern: \\\"(\\\\\\\\d{1,2})\\\",\\n          action: (value, data) => {\\n            data.minutes = parseInt(value);\\n          }\\n        },\\n        ss: {\\n          pattern: \\\"(\\\\\\\\d{2})\\\",\\n          action: (value, data) => {\\n            data.seconds = parseInt(value);\\n          }\\n        },\\n        s: {\\n          pattern: \\\"(\\\\\\\\d{1,2})\\\",\\n          action: (value, data) => {\\n            data.seconds = parseInt(value);\\n          }\\n        },\\n        tt: {\\n          pattern: \\\"([aApP][mM])\\\",\\n          action: (value, data) => {\\n            const char = value.charAt(0);\\n            data.am = char === \\\"a\\\" || char === \\\"A\\\";\\n          }\\n        },\\n        t: {\\n          pattern: \\\"([aApP])\\\",\\n          action: (value, data) => {\\n            data.am = value === \\\"a\\\" || value === \\\"A\\\";\\n          }\\n        }\\n      };\\n      const escapedFormat = cFormat.replaceAll(/[.*+\\\\-?^${}()|[\\\\]\\\\\\\\]/g, \\\"\\\\\\\\$&\\\");\\n      const patterns = /(mmmm|mmm|mm|m|dddd|ddd|dd|d|yyyy|yy|HH|H|hh|h|MM|M|ss|s|tt|t)/g;\\n      const actions = [];\\n      const re = escapedFormat.replaceAll(patterns, function (match, patternElement) {\\n        const {\\n          pattern,\\n          action\\n        } = handlers[patternElement];\\n        actions.push(action);\\n        return pattern;\\n      });\\n      this._scandCache.set(cFormat, [re, actions]);\\n    }\\n    const [re, actions] = this._scandCache.get(cFormat);\\n    const matches = new RegExp(`^${re}$`, \\\"g\\\").exec(cDate);\\n    if (!matches || matches.length !== actions.length + 1) {\\n      return null;\\n    }\\n    const data = {\\n      year: 2000,\\n      month: 0,\\n      day: 1,\\n      hours: 0,\\n      minutes: 0,\\n      seconds: 0,\\n      am: null\\n    };\\n    actions.forEach((action, i) => action(matches[i + 1], data));\\n    if (data.am !== null) {\\n      data.hours = data.hours % 12 + (data.am ? 0 : 12);\\n    }\\n    return new Date(data.year, data.month, data.day, data.hours, data.minutes, data.seconds);\\n  }\\n  spansToXML() {}\\n  stringFromStream() {}\\n  xmlToSpans() {}\\n}\\n\\n;// CONCATENATED MODULE: ./src/scripting_api/initialization.js\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nfunction initSandbox(params) {\\n  delete globalThis.pdfjsScripting;\\n  const externalCall = globalThis.callExternalFunction;\\n  delete globalThis.callExternalFunction;\\n  const globalEval = code => globalThis.eval(code);\\n  const send = data => externalCall(\\\"send\\\", [data]);\\n  const proxyHandler = new ProxyHandler();\\n  const {\\n    data\\n  } = params;\\n  const doc = new Doc({\\n    send,\\n    globalEval,\\n    ...data.docInfo\\n  });\\n  const _document = {\\n    obj: doc,\\n    wrapped: new Proxy(doc, proxyHandler)\\n  };\\n  const app = new App({\\n    send,\\n    globalEval,\\n    externalCall,\\n    _document,\\n    calculationOrder: data.calculationOrder,\\n    proxyHandler,\\n    ...data.appInfo\\n  });\\n  const util = new Util({\\n    externalCall\\n  });\\n  const appObjects = app._objects;\\n  if (data.objects) {\\n    const annotations = [];\\n    for (const [name, objs] of Object.entries(data.objects)) {\\n      annotations.length = 0;\\n      let container = null;\\n      for (const obj of objs) {\\n        if (obj.type !== \\\"\\\") {\\n          annotations.push(obj);\\n        } else {\\n          container = obj;\\n        }\\n      }\\n      let obj = container;\\n      if (annotations.length > 0) {\\n        obj = annotations[0];\\n        obj.send = send;\\n      }\\n      obj.globalEval = globalEval;\\n      obj.doc = _document;\\n      obj.fieldPath = name;\\n      obj.appObjects = appObjects;\\n      let field;\\n      switch (obj.type) {\\n        case \\\"radiobutton\\\":\\n          {\\n            const otherButtons = annotations.slice(1);\\n            field = new RadioButtonField(otherButtons, obj);\\n            break;\\n          }\\n        case \\\"checkbox\\\":\\n          {\\n            const otherButtons = annotations.slice(1);\\n            field = new CheckboxField(otherButtons, obj);\\n            break;\\n          }\\n        case \\\"text\\\":\\n          if (annotations.length <= 1) {\\n            field = new Field(obj);\\n            break;\\n          }\\n          obj.siblings = annotations.map(x => x.id).slice(1);\\n          field = new Field(obj);\\n          break;\\n        default:\\n          field = new Field(obj);\\n      }\\n      const wrapped = new Proxy(field, proxyHandler);\\n      const _object = {\\n        obj: field,\\n        wrapped\\n      };\\n      doc._addField(name, _object);\\n      for (const object of objs) {\\n        appObjects[object.id] = _object;\\n      }\\n      if (container) {\\n        appObjects[container.id] = _object;\\n      }\\n    }\\n  }\\n  const color = new Color();\\n  globalThis.event = null;\\n  globalThis.global = Object.create(null);\\n  globalThis.app = new Proxy(app, proxyHandler);\\n  globalThis.color = new Proxy(color, proxyHandler);\\n  globalThis.console = new Proxy(new Console({\\n    send\\n  }), proxyHandler);\\n  globalThis.util = new Proxy(util, proxyHandler);\\n  globalThis.border = Border;\\n  globalThis.cursor = Cursor;\\n  globalThis.display = Display;\\n  globalThis.font = Font;\\n  globalThis.highlight = Highlight;\\n  globalThis.position = Position;\\n  globalThis.scaleHow = ScaleHow;\\n  globalThis.scaleWhen = ScaleWhen;\\n  globalThis.style = Style;\\n  globalThis.trans = Trans;\\n  globalThis.zoomtype = ZoomType;\\n  globalThis.ADBE = {\\n    Reader_Value_Asked: true,\\n    Viewer_Value_Asked: true\\n  };\\n  const aform = new AForm(doc, app, util, color);\\n  for (const name of Object.getOwnPropertyNames(AForm.prototype)) {\\n    if (name !== \\\"constructor\\\" && !name.startsWith(\\\"_\\\")) {\\n      globalThis[name] = aform[name].bind(aform);\\n    }\\n  }\\n  for (const [name, value] of Object.entries(GlobalConstants)) {\\n    Object.defineProperty(globalThis, name, {\\n      value,\\n      writable: false\\n    });\\n  }\\n  Object.defineProperties(globalThis, {\\n    ColorConvert: {\\n      value: color.convert.bind(color),\\n      writable: true\\n    },\\n    ColorEqual: {\\n      value: color.equal.bind(color),\\n      writable: true\\n    }\\n  });\\n  const properties = Object.create(null);\\n  for (const name of Object.getOwnPropertyNames(Doc.prototype)) {\\n    if (name === \\\"constructor\\\" || name.startsWith(\\\"_\\\")) {\\n      continue;\\n    }\\n    const descriptor = Object.getOwnPropertyDescriptor(Doc.prototype, name);\\n    if (descriptor.get) {\\n      properties[name] = {\\n        get: descriptor.get.bind(doc),\\n        set: descriptor.set.bind(doc)\\n      };\\n    } else {\\n      properties[name] = {\\n        value: Doc.prototype[name].bind(doc)\\n      };\\n    }\\n  }\\n  Object.defineProperties(globalThis, properties);\\n  const functions = {\\n    dispatchEvent: app._dispatchEvent.bind(app),\\n    timeoutCb: app._evalCallback.bind(app)\\n  };\\n  return (name, args) => {\\n    try {\\n      functions[name](args);\\n    } catch (error) {\\n      send(serializeError(error));\\n    }\\n  };\\n}\\n\\n;// CONCATENATED MODULE: ./src/pdf.scripting.js\\n\\nconst pdfjsVersion = \\\"4.3.136\\\";\\nconst pdfjsBuild = \\\"0cec64437\\\";\\nglobalThis.pdfjsScripting = {\\n  initSandbox: initSandbox\\n};\\n\"];\n    code.push(\"delete dump;\");\n    let success = false;\n    let buf = 0;\n    try {\n      const sandboxData = JSON.stringify(data);\n      code.push(`pdfjsScripting.initSandbox({ data: ${sandboxData} })`);\n      buf = this._module.stringToNewUTF8(code.join(\"\\n\"));\n      success = !!this._module.ccall(\"init\", \"number\", [\"number\", \"number\"], [buf, this._alertOnError]);\n    } catch (error) {\n      console.error(error);\n    } finally {\n      if (buf) {\n        this._module.ccall(\"free\", \"number\", [\"number\"], [buf]);\n      }\n    }\n    if (success) {\n      this.support.commFun = this._module.cwrap(\"commFun\", null, [\"string\", \"string\"]);\n    } else {\n      this.nukeSandbox();\n      throw new Error(\"Cannot start sandbox\");\n    }\n  }\n  dispatchEvent(event) {\n    this.support?.callSandboxFunction(\"dispatchEvent\", event);\n  }\n  dumpMemoryUse() {\n    this._module?.ccall(\"dumpMemoryUse\", null, []);\n  }\n  nukeSandbox() {\n    if (this._module !== null) {\n      this.support.destroy();\n      this.support = null;\n      this._module.ccall(\"nukeSandbox\", null, []);\n      this._module = null;\n    }\n  }\n  evalForTesting(code, key) {\n    throw new Error(\"Not implemented: evalForTesting\");\n  }\n}\nfunction QuickJSSandbox() {\n  return quickjs_eval().then(module => new Sandbox(window, module));\n}\n\nvar __webpack_exports__QuickJSSandbox = __webpack_exports__.QuickJSSandbox;\nexport { __webpack_exports__QuickJSSandbox as QuickJSSandbox };\n\n//# sourceMappingURL=pdf.sandbox.mjs.map"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/build/pdf.worker.mjs",
    "content": "/**\n * @licstart The following is the entire license notice for the\n * JavaScript code in this page\n *\n * Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * @licend The above is the entire license notice for the\n * JavaScript code in this page\n */\n\n/******/ // The require scope\n/******/ var __webpack_require__ = {};\n/******/ \n/************************************************************************/\n/******/ /* webpack/runtime/define property getters */\n/******/ (() => {\n/******/ \t// define getter functions for harmony exports\n/******/ \t__webpack_require__.d = (exports, definition) => {\n/******/ \t\tfor(var key in definition) {\n/******/ \t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t};\n/******/ })();\n/******/ \n/******/ /* webpack/runtime/hasOwnProperty shorthand */\n/******/ (() => {\n/******/ \t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ })();\n/******/ \n/************************************************************************/\nvar __webpack_exports__ = globalThis.pdfjsWorker = {};\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  WorkerMessageHandler: () => (/* reexport */ WorkerMessageHandler)\n});\n\n;// CONCATENATED MODULE: ./src/shared/util.js\nconst isNodeJS = typeof process === \"object\" && process + \"\" === \"[object process]\" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== \"browser\");\nconst IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];\nconst FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\nconst MAX_IMAGE_SIZE_TO_CACHE = 10e6;\nconst LINE_FACTOR = 1.35;\nconst LINE_DESCENT_FACTOR = 0.35;\nconst BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR;\nconst RenderingIntentFlag = {\n  ANY: 0x01,\n  DISPLAY: 0x02,\n  PRINT: 0x04,\n  SAVE: 0x08,\n  ANNOTATIONS_FORMS: 0x10,\n  ANNOTATIONS_STORAGE: 0x20,\n  ANNOTATIONS_DISABLE: 0x40,\n  OPLIST: 0x100\n};\nconst AnnotationMode = {\n  DISABLE: 0,\n  ENABLE: 1,\n  ENABLE_FORMS: 2,\n  ENABLE_STORAGE: 3\n};\nconst AnnotationEditorPrefix = \"pdfjs_internal_editor_\";\nconst AnnotationEditorType = {\n  DISABLE: -1,\n  NONE: 0,\n  FREETEXT: 3,\n  HIGHLIGHT: 9,\n  STAMP: 13,\n  INK: 15\n};\nconst AnnotationEditorParamsType = {\n  RESIZE: 1,\n  CREATE: 2,\n  FREETEXT_SIZE: 11,\n  FREETEXT_COLOR: 12,\n  FREETEXT_OPACITY: 13,\n  INK_COLOR: 21,\n  INK_THICKNESS: 22,\n  INK_OPACITY: 23,\n  HIGHLIGHT_COLOR: 31,\n  HIGHLIGHT_DEFAULT_COLOR: 32,\n  HIGHLIGHT_THICKNESS: 33,\n  HIGHLIGHT_FREE: 34,\n  HIGHLIGHT_SHOW_ALL: 35\n};\nconst PermissionFlag = {\n  PRINT: 0x04,\n  MODIFY_CONTENTS: 0x08,\n  COPY: 0x10,\n  MODIFY_ANNOTATIONS: 0x20,\n  FILL_INTERACTIVE_FORMS: 0x100,\n  COPY_FOR_ACCESSIBILITY: 0x200,\n  ASSEMBLE: 0x400,\n  PRINT_HIGH_QUALITY: 0x800\n};\nconst TextRenderingMode = {\n  FILL: 0,\n  STROKE: 1,\n  FILL_STROKE: 2,\n  INVISIBLE: 3,\n  FILL_ADD_TO_PATH: 4,\n  STROKE_ADD_TO_PATH: 5,\n  FILL_STROKE_ADD_TO_PATH: 6,\n  ADD_TO_PATH: 7,\n  FILL_STROKE_MASK: 3,\n  ADD_TO_PATH_FLAG: 4\n};\nconst ImageKind = {\n  GRAYSCALE_1BPP: 1,\n  RGB_24BPP: 2,\n  RGBA_32BPP: 3\n};\nconst AnnotationType = {\n  TEXT: 1,\n  LINK: 2,\n  FREETEXT: 3,\n  LINE: 4,\n  SQUARE: 5,\n  CIRCLE: 6,\n  POLYGON: 7,\n  POLYLINE: 8,\n  HIGHLIGHT: 9,\n  UNDERLINE: 10,\n  SQUIGGLY: 11,\n  STRIKEOUT: 12,\n  STAMP: 13,\n  CARET: 14,\n  INK: 15,\n  POPUP: 16,\n  FILEATTACHMENT: 17,\n  SOUND: 18,\n  MOVIE: 19,\n  WIDGET: 20,\n  SCREEN: 21,\n  PRINTERMARK: 22,\n  TRAPNET: 23,\n  WATERMARK: 24,\n  THREED: 25,\n  REDACT: 26\n};\nconst AnnotationReplyType = {\n  GROUP: \"Group\",\n  REPLY: \"R\"\n};\nconst AnnotationFlag = {\n  INVISIBLE: 0x01,\n  HIDDEN: 0x02,\n  PRINT: 0x04,\n  NOZOOM: 0x08,\n  NOROTATE: 0x10,\n  NOVIEW: 0x20,\n  READONLY: 0x40,\n  LOCKED: 0x80,\n  TOGGLENOVIEW: 0x100,\n  LOCKEDCONTENTS: 0x200\n};\nconst AnnotationFieldFlag = {\n  READONLY: 0x0000001,\n  REQUIRED: 0x0000002,\n  NOEXPORT: 0x0000004,\n  MULTILINE: 0x0001000,\n  PASSWORD: 0x0002000,\n  NOTOGGLETOOFF: 0x0004000,\n  RADIO: 0x0008000,\n  PUSHBUTTON: 0x0010000,\n  COMBO: 0x0020000,\n  EDIT: 0x0040000,\n  SORT: 0x0080000,\n  FILESELECT: 0x0100000,\n  MULTISELECT: 0x0200000,\n  DONOTSPELLCHECK: 0x0400000,\n  DONOTSCROLL: 0x0800000,\n  COMB: 0x1000000,\n  RICHTEXT: 0x2000000,\n  RADIOSINUNISON: 0x2000000,\n  COMMITONSELCHANGE: 0x4000000\n};\nconst AnnotationBorderStyleType = {\n  SOLID: 1,\n  DASHED: 2,\n  BEVELED: 3,\n  INSET: 4,\n  UNDERLINE: 5\n};\nconst AnnotationActionEventType = {\n  E: \"Mouse Enter\",\n  X: \"Mouse Exit\",\n  D: \"Mouse Down\",\n  U: \"Mouse Up\",\n  Fo: \"Focus\",\n  Bl: \"Blur\",\n  PO: \"PageOpen\",\n  PC: \"PageClose\",\n  PV: \"PageVisible\",\n  PI: \"PageInvisible\",\n  K: \"Keystroke\",\n  F: \"Format\",\n  V: \"Validate\",\n  C: \"Calculate\"\n};\nconst DocumentActionEventType = {\n  WC: \"WillClose\",\n  WS: \"WillSave\",\n  DS: \"DidSave\",\n  WP: \"WillPrint\",\n  DP: \"DidPrint\"\n};\nconst PageActionEventType = {\n  O: \"PageOpen\",\n  C: \"PageClose\"\n};\nconst VerbosityLevel = {\n  ERRORS: 0,\n  WARNINGS: 1,\n  INFOS: 5\n};\nconst CMapCompressionType = {\n  NONE: 0,\n  BINARY: 1\n};\nconst OPS = {\n  dependency: 1,\n  setLineWidth: 2,\n  setLineCap: 3,\n  setLineJoin: 4,\n  setMiterLimit: 5,\n  setDash: 6,\n  setRenderingIntent: 7,\n  setFlatness: 8,\n  setGState: 9,\n  save: 10,\n  restore: 11,\n  transform: 12,\n  moveTo: 13,\n  lineTo: 14,\n  curveTo: 15,\n  curveTo2: 16,\n  curveTo3: 17,\n  closePath: 18,\n  rectangle: 19,\n  stroke: 20,\n  closeStroke: 21,\n  fill: 22,\n  eoFill: 23,\n  fillStroke: 24,\n  eoFillStroke: 25,\n  closeFillStroke: 26,\n  closeEOFillStroke: 27,\n  endPath: 28,\n  clip: 29,\n  eoClip: 30,\n  beginText: 31,\n  endText: 32,\n  setCharSpacing: 33,\n  setWordSpacing: 34,\n  setHScale: 35,\n  setLeading: 36,\n  setFont: 37,\n  setTextRenderingMode: 38,\n  setTextRise: 39,\n  moveText: 40,\n  setLeadingMoveText: 41,\n  setTextMatrix: 42,\n  nextLine: 43,\n  showText: 44,\n  showSpacedText: 45,\n  nextLineShowText: 46,\n  nextLineSetSpacingShowText: 47,\n  setCharWidth: 48,\n  setCharWidthAndBounds: 49,\n  setStrokeColorSpace: 50,\n  setFillColorSpace: 51,\n  setStrokeColor: 52,\n  setStrokeColorN: 53,\n  setFillColor: 54,\n  setFillColorN: 55,\n  setStrokeGray: 56,\n  setFillGray: 57,\n  setStrokeRGBColor: 58,\n  setFillRGBColor: 59,\n  setStrokeCMYKColor: 60,\n  setFillCMYKColor: 61,\n  shadingFill: 62,\n  beginInlineImage: 63,\n  beginImageData: 64,\n  endInlineImage: 65,\n  paintXObject: 66,\n  markPoint: 67,\n  markPointProps: 68,\n  beginMarkedContent: 69,\n  beginMarkedContentProps: 70,\n  endMarkedContent: 71,\n  beginCompat: 72,\n  endCompat: 73,\n  paintFormXObjectBegin: 74,\n  paintFormXObjectEnd: 75,\n  beginGroup: 76,\n  endGroup: 77,\n  beginAnnotation: 80,\n  endAnnotation: 81,\n  paintImageMaskXObject: 83,\n  paintImageMaskXObjectGroup: 84,\n  paintImageXObject: 85,\n  paintInlineImageXObject: 86,\n  paintInlineImageXObjectGroup: 87,\n  paintImageXObjectRepeat: 88,\n  paintImageMaskXObjectRepeat: 89,\n  paintSolidColorImageMask: 90,\n  constructPath: 91\n};\nconst PasswordResponses = {\n  NEED_PASSWORD: 1,\n  INCORRECT_PASSWORD: 2\n};\nlet verbosity = VerbosityLevel.WARNINGS;\nfunction setVerbosityLevel(level) {\n  if (Number.isInteger(level)) {\n    verbosity = level;\n  }\n}\nfunction getVerbosityLevel() {\n  return verbosity;\n}\nfunction info(msg) {\n  if (verbosity >= VerbosityLevel.INFOS) {\n    console.log(`Info: ${msg}`);\n  }\n}\nfunction warn(msg) {\n  if (verbosity >= VerbosityLevel.WARNINGS) {\n    console.log(`Warning: ${msg}`);\n  }\n}\nfunction unreachable(msg) {\n  throw new Error(msg);\n}\nfunction assert(cond, msg) {\n  if (!cond) {\n    unreachable(msg);\n  }\n}\nfunction _isValidProtocol(url) {\n  switch (url?.protocol) {\n    case \"http:\":\n    case \"https:\":\n    case \"ftp:\":\n    case \"mailto:\":\n    case \"tel:\":\n      return true;\n    default:\n      return false;\n  }\n}\nfunction createValidAbsoluteUrl(url, baseUrl = null, options = null) {\n  if (!url) {\n    return null;\n  }\n  try {\n    if (options && typeof url === \"string\") {\n      if (options.addDefaultProtocol && url.startsWith(\"www.\")) {\n        const dots = url.match(/\\./g);\n        if (dots?.length >= 2) {\n          url = `http://${url}`;\n        }\n      }\n      if (options.tryConvertEncoding) {\n        try {\n          url = stringToUTF8String(url);\n        } catch {}\n      }\n    }\n    const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);\n    if (_isValidProtocol(absoluteUrl)) {\n      return absoluteUrl;\n    }\n  } catch {}\n  return null;\n}\nfunction shadow(obj, prop, value, nonSerializable = false) {\n  Object.defineProperty(obj, prop, {\n    value,\n    enumerable: !nonSerializable,\n    configurable: true,\n    writable: false\n  });\n  return value;\n}\nconst BaseException = function BaseExceptionClosure() {\n  function BaseException(message, name) {\n    if (this.constructor === BaseException) {\n      unreachable(\"Cannot initialize BaseException.\");\n    }\n    this.message = message;\n    this.name = name;\n  }\n  BaseException.prototype = new Error();\n  BaseException.constructor = BaseException;\n  return BaseException;\n}();\nclass PasswordException extends BaseException {\n  constructor(msg, code) {\n    super(msg, \"PasswordException\");\n    this.code = code;\n  }\n}\nclass UnknownErrorException extends BaseException {\n  constructor(msg, details) {\n    super(msg, \"UnknownErrorException\");\n    this.details = details;\n  }\n}\nclass InvalidPDFException extends BaseException {\n  constructor(msg) {\n    super(msg, \"InvalidPDFException\");\n  }\n}\nclass MissingPDFException extends BaseException {\n  constructor(msg) {\n    super(msg, \"MissingPDFException\");\n  }\n}\nclass UnexpectedResponseException extends BaseException {\n  constructor(msg, status) {\n    super(msg, \"UnexpectedResponseException\");\n    this.status = status;\n  }\n}\nclass FormatError extends BaseException {\n  constructor(msg) {\n    super(msg, \"FormatError\");\n  }\n}\nclass AbortException extends BaseException {\n  constructor(msg) {\n    super(msg, \"AbortException\");\n  }\n}\nfunction bytesToString(bytes) {\n  if (typeof bytes !== \"object\" || bytes?.length === undefined) {\n    unreachable(\"Invalid argument for bytesToString\");\n  }\n  const length = bytes.length;\n  const MAX_ARGUMENT_COUNT = 8192;\n  if (length < MAX_ARGUMENT_COUNT) {\n    return String.fromCharCode.apply(null, bytes);\n  }\n  const strBuf = [];\n  for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {\n    const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);\n    const chunk = bytes.subarray(i, chunkEnd);\n    strBuf.push(String.fromCharCode.apply(null, chunk));\n  }\n  return strBuf.join(\"\");\n}\nfunction stringToBytes(str) {\n  if (typeof str !== \"string\") {\n    unreachable(\"Invalid argument for stringToBytes\");\n  }\n  const length = str.length;\n  const bytes = new Uint8Array(length);\n  for (let i = 0; i < length; ++i) {\n    bytes[i] = str.charCodeAt(i) & 0xff;\n  }\n  return bytes;\n}\nfunction string32(value) {\n  return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);\n}\nfunction objectSize(obj) {\n  return Object.keys(obj).length;\n}\nfunction objectFromMap(map) {\n  const obj = Object.create(null);\n  for (const [key, value] of map) {\n    obj[key] = value;\n  }\n  return obj;\n}\nfunction isLittleEndian() {\n  const buffer8 = new Uint8Array(4);\n  buffer8[0] = 1;\n  const view32 = new Uint32Array(buffer8.buffer, 0, 1);\n  return view32[0] === 1;\n}\nfunction isEvalSupported() {\n  try {\n    new Function(\"\");\n    return true;\n  } catch {\n    return false;\n  }\n}\nclass FeatureTest {\n  static get isLittleEndian() {\n    return shadow(this, \"isLittleEndian\", isLittleEndian());\n  }\n  static get isEvalSupported() {\n    return shadow(this, \"isEvalSupported\", isEvalSupported());\n  }\n  static get isOffscreenCanvasSupported() {\n    return shadow(this, \"isOffscreenCanvasSupported\", typeof OffscreenCanvas !== \"undefined\");\n  }\n  static get platform() {\n    if (typeof navigator !== \"undefined\" && typeof navigator?.platform === \"string\") {\n      return shadow(this, \"platform\", {\n        isMac: navigator.platform.includes(\"Mac\")\n      });\n    }\n    return shadow(this, \"platform\", {\n      isMac: false\n    });\n  }\n  static get isCSSRoundSupported() {\n    return shadow(this, \"isCSSRoundSupported\", globalThis.CSS?.supports?.(\"width: round(1.5px, 1px)\"));\n  }\n}\nconst hexNumbers = Array.from(Array(256).keys(), n => n.toString(16).padStart(2, \"0\"));\nclass Util {\n  static makeHexColor(r, g, b) {\n    return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`;\n  }\n  static scaleMinMax(transform, minMax) {\n    let temp;\n    if (transform[0]) {\n      if (transform[0] < 0) {\n        temp = minMax[0];\n        minMax[0] = minMax[2];\n        minMax[2] = temp;\n      }\n      minMax[0] *= transform[0];\n      minMax[2] *= transform[0];\n      if (transform[3] < 0) {\n        temp = minMax[1];\n        minMax[1] = minMax[3];\n        minMax[3] = temp;\n      }\n      minMax[1] *= transform[3];\n      minMax[3] *= transform[3];\n    } else {\n      temp = minMax[0];\n      minMax[0] = minMax[1];\n      minMax[1] = temp;\n      temp = minMax[2];\n      minMax[2] = minMax[3];\n      minMax[3] = temp;\n      if (transform[1] < 0) {\n        temp = minMax[1];\n        minMax[1] = minMax[3];\n        minMax[3] = temp;\n      }\n      minMax[1] *= transform[1];\n      minMax[3] *= transform[1];\n      if (transform[2] < 0) {\n        temp = minMax[0];\n        minMax[0] = minMax[2];\n        minMax[2] = temp;\n      }\n      minMax[0] *= transform[2];\n      minMax[2] *= transform[2];\n    }\n    minMax[0] += transform[4];\n    minMax[1] += transform[5];\n    minMax[2] += transform[4];\n    minMax[3] += transform[5];\n  }\n  static transform(m1, m2) {\n    return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]];\n  }\n  static applyTransform(p, m) {\n    const xt = p[0] * m[0] + p[1] * m[2] + m[4];\n    const yt = p[0] * m[1] + p[1] * m[3] + m[5];\n    return [xt, yt];\n  }\n  static applyInverseTransform(p, m) {\n    const d = m[0] * m[3] - m[1] * m[2];\n    const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\n    const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\n    return [xt, yt];\n  }\n  static getAxialAlignedBoundingBox(r, m) {\n    const p1 = this.applyTransform(r, m);\n    const p2 = this.applyTransform(r.slice(2, 4), m);\n    const p3 = this.applyTransform([r[0], r[3]], m);\n    const p4 = this.applyTransform([r[2], r[1]], m);\n    return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])];\n  }\n  static inverseTransform(m) {\n    const d = m[0] * m[3] - m[1] * m[2];\n    return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];\n  }\n  static singularValueDecompose2dScale(m) {\n    const transpose = [m[0], m[2], m[1], m[3]];\n    const a = m[0] * transpose[0] + m[1] * transpose[2];\n    const b = m[0] * transpose[1] + m[1] * transpose[3];\n    const c = m[2] * transpose[0] + m[3] * transpose[2];\n    const d = m[2] * transpose[1] + m[3] * transpose[3];\n    const first = (a + d) / 2;\n    const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2;\n    const sx = first + second || 1;\n    const sy = first - second || 1;\n    return [Math.sqrt(sx), Math.sqrt(sy)];\n  }\n  static normalizeRect(rect) {\n    const r = rect.slice(0);\n    if (rect[0] > rect[2]) {\n      r[0] = rect[2];\n      r[2] = rect[0];\n    }\n    if (rect[1] > rect[3]) {\n      r[1] = rect[3];\n      r[3] = rect[1];\n    }\n    return r;\n  }\n  static intersect(rect1, rect2) {\n    const xLow = Math.max(Math.min(rect1[0], rect1[2]), Math.min(rect2[0], rect2[2]));\n    const xHigh = Math.min(Math.max(rect1[0], rect1[2]), Math.max(rect2[0], rect2[2]));\n    if (xLow > xHigh) {\n      return null;\n    }\n    const yLow = Math.max(Math.min(rect1[1], rect1[3]), Math.min(rect2[1], rect2[3]));\n    const yHigh = Math.min(Math.max(rect1[1], rect1[3]), Math.max(rect2[1], rect2[3]));\n    if (yLow > yHigh) {\n      return null;\n    }\n    return [xLow, yLow, xHigh, yHigh];\n  }\n  static #getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, t, minMax) {\n    if (t <= 0 || t >= 1) {\n      return;\n    }\n    const mt = 1 - t;\n    const tt = t * t;\n    const ttt = tt * t;\n    const x = mt * (mt * (mt * x0 + 3 * t * x1) + 3 * tt * x2) + ttt * x3;\n    const y = mt * (mt * (mt * y0 + 3 * t * y1) + 3 * tt * y2) + ttt * y3;\n    minMax[0] = Math.min(minMax[0], x);\n    minMax[1] = Math.min(minMax[1], y);\n    minMax[2] = Math.max(minMax[2], x);\n    minMax[3] = Math.max(minMax[3], y);\n  }\n  static #getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, a, b, c, minMax) {\n    if (Math.abs(a) < 1e-12) {\n      if (Math.abs(b) >= 1e-12) {\n        this.#getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, -c / b, minMax);\n      }\n      return;\n    }\n    const delta = b ** 2 - 4 * c * a;\n    if (delta < 0) {\n      return;\n    }\n    const sqrtDelta = Math.sqrt(delta);\n    const a2 = 2 * a;\n    this.#getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, (-b + sqrtDelta) / a2, minMax);\n    this.#getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, (-b - sqrtDelta) / a2, minMax);\n  }\n  static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax) {\n    if (minMax) {\n      minMax[0] = Math.min(minMax[0], x0, x3);\n      minMax[1] = Math.min(minMax[1], y0, y3);\n      minMax[2] = Math.max(minMax[2], x0, x3);\n      minMax[3] = Math.max(minMax[3], y0, y3);\n    } else {\n      minMax = [Math.min(x0, x3), Math.min(y0, y3), Math.max(x0, x3), Math.max(y0, y3)];\n    }\n    this.#getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-x0 + 3 * (x1 - x2) + x3), 6 * (x0 - 2 * x1 + x2), 3 * (x1 - x0), minMax);\n    this.#getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-y0 + 3 * (y1 - y2) + y3), 6 * (y0 - 2 * y1 + y2), 3 * (y1 - y0), minMax);\n    return minMax;\n  }\n}\nconst PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8, 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d, 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac];\nfunction stringToPDFString(str) {\n  if (str[0] >= \"\\xEF\") {\n    let encoding;\n    if (str[0] === \"\\xFE\" && str[1] === \"\\xFF\") {\n      encoding = \"utf-16be\";\n      if (str.length % 2 === 1) {\n        str = str.slice(0, -1);\n      }\n    } else if (str[0] === \"\\xFF\" && str[1] === \"\\xFE\") {\n      encoding = \"utf-16le\";\n      if (str.length % 2 === 1) {\n        str = str.slice(0, -1);\n      }\n    } else if (str[0] === \"\\xEF\" && str[1] === \"\\xBB\" && str[2] === \"\\xBF\") {\n      encoding = \"utf-8\";\n    }\n    if (encoding) {\n      try {\n        const decoder = new TextDecoder(encoding, {\n          fatal: true\n        });\n        const buffer = stringToBytes(str);\n        const decoded = decoder.decode(buffer);\n        if (!decoded.includes(\"\\x1b\")) {\n          return decoded;\n        }\n        return decoded.replaceAll(/\\x1b[^\\x1b]*(?:\\x1b|$)/g, \"\");\n      } catch (ex) {\n        warn(`stringToPDFString: \"${ex}\".`);\n      }\n    }\n  }\n  const strBuf = [];\n  for (let i = 0, ii = str.length; i < ii; i++) {\n    const charCode = str.charCodeAt(i);\n    if (charCode === 0x1b) {\n      while (++i < ii && str.charCodeAt(i) !== 0x1b) {}\n      continue;\n    }\n    const code = PDFStringTranslateTable[charCode];\n    strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));\n  }\n  return strBuf.join(\"\");\n}\nfunction stringToUTF8String(str) {\n  return decodeURIComponent(escape(str));\n}\nfunction utf8StringToString(str) {\n  return unescape(encodeURIComponent(str));\n}\nfunction isArrayEqual(arr1, arr2) {\n  if (arr1.length !== arr2.length) {\n    return false;\n  }\n  for (let i = 0, ii = arr1.length; i < ii; i++) {\n    if (arr1[i] !== arr2[i]) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction getModificationDate(date = new Date()) {\n  const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, \"0\"), date.getUTCDate().toString().padStart(2, \"0\"), date.getUTCHours().toString().padStart(2, \"0\"), date.getUTCMinutes().toString().padStart(2, \"0\"), date.getUTCSeconds().toString().padStart(2, \"0\")];\n  return buffer.join(\"\");\n}\nlet NormalizeRegex = null;\nlet NormalizationMap = null;\nfunction normalizeUnicode(str) {\n  if (!NormalizeRegex) {\n    NormalizeRegex = /([\\u00a0\\u00b5\\u037e\\u0eb3\\u2000-\\u200a\\u202f\\u2126\\ufb00-\\ufb04\\ufb06\\ufb20-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufba1\\ufba4-\\ufba9\\ufbae-\\ufbb1\\ufbd3-\\ufbdc\\ufbde-\\ufbe7\\ufbea-\\ufbf8\\ufbfc-\\ufbfd\\ufc00-\\ufc5d\\ufc64-\\ufcf1\\ufcf5-\\ufd3d\\ufd88\\ufdf4\\ufdfa-\\ufdfb\\ufe71\\ufe77\\ufe79\\ufe7b\\ufe7d]+)|(\\ufb05+)/gu;\n    NormalizationMap = new Map([[\"ﬅ\", \"ſt\"]]);\n  }\n  return str.replaceAll(NormalizeRegex, (_, p1, p2) => p1 ? p1.normalize(\"NFKC\") : NormalizationMap.get(p2));\n}\nfunction getUuid() {\n  if (typeof crypto !== \"undefined\" && typeof crypto?.randomUUID === \"function\") {\n    return crypto.randomUUID();\n  }\n  const buf = new Uint8Array(32);\n  if (typeof crypto !== \"undefined\" && typeof crypto?.getRandomValues === \"function\") {\n    crypto.getRandomValues(buf);\n  } else {\n    for (let i = 0; i < 32; i++) {\n      buf[i] = Math.floor(Math.random() * 255);\n    }\n  }\n  return bytesToString(buf);\n}\nconst AnnotationPrefix = \"pdfjs_internal_id_\";\nconst FontRenderOps = {\n  BEZIER_CURVE_TO: 0,\n  MOVE_TO: 1,\n  LINE_TO: 2,\n  QUADRATIC_CURVE_TO: 3,\n  RESTORE: 4,\n  SAVE: 5,\n  SCALE: 6,\n  TRANSFORM: 7,\n  TRANSLATE: 8\n};\n\n;// CONCATENATED MODULE: ./src/core/primitives.js\n\nconst CIRCULAR_REF = Symbol(\"CIRCULAR_REF\");\nconst EOF = Symbol(\"EOF\");\nlet CmdCache = Object.create(null);\nlet NameCache = Object.create(null);\nlet RefCache = Object.create(null);\nfunction clearPrimitiveCaches() {\n  CmdCache = Object.create(null);\n  NameCache = Object.create(null);\n  RefCache = Object.create(null);\n}\nclass Name {\n  constructor(name) {\n    this.name = name;\n  }\n  static get(name) {\n    return NameCache[name] ||= new Name(name);\n  }\n}\nclass Cmd {\n  constructor(cmd) {\n    this.cmd = cmd;\n  }\n  static get(cmd) {\n    return CmdCache[cmd] ||= new Cmd(cmd);\n  }\n}\nconst nonSerializable = function nonSerializableClosure() {\n  return nonSerializable;\n};\nclass Dict {\n  constructor(xref = null) {\n    this._map = Object.create(null);\n    this.xref = xref;\n    this.objId = null;\n    this.suppressEncryption = false;\n    this.__nonSerializable__ = nonSerializable;\n  }\n  assignXref(newXref) {\n    this.xref = newXref;\n  }\n  get size() {\n    return Object.keys(this._map).length;\n  }\n  get(key1, key2, key3) {\n    let value = this._map[key1];\n    if (value === undefined && key2 !== undefined) {\n      value = this._map[key2];\n      if (value === undefined && key3 !== undefined) {\n        value = this._map[key3];\n      }\n    }\n    if (value instanceof Ref && this.xref) {\n      return this.xref.fetch(value, this.suppressEncryption);\n    }\n    return value;\n  }\n  async getAsync(key1, key2, key3) {\n    let value = this._map[key1];\n    if (value === undefined && key2 !== undefined) {\n      value = this._map[key2];\n      if (value === undefined && key3 !== undefined) {\n        value = this._map[key3];\n      }\n    }\n    if (value instanceof Ref && this.xref) {\n      return this.xref.fetchAsync(value, this.suppressEncryption);\n    }\n    return value;\n  }\n  getArray(key1, key2, key3) {\n    let value = this._map[key1];\n    if (value === undefined && key2 !== undefined) {\n      value = this._map[key2];\n      if (value === undefined && key3 !== undefined) {\n        value = this._map[key3];\n      }\n    }\n    if (value instanceof Ref && this.xref) {\n      value = this.xref.fetch(value, this.suppressEncryption);\n    }\n    if (Array.isArray(value)) {\n      value = value.slice();\n      for (let i = 0, ii = value.length; i < ii; i++) {\n        if (value[i] instanceof Ref && this.xref) {\n          value[i] = this.xref.fetch(value[i], this.suppressEncryption);\n        }\n      }\n    }\n    return value;\n  }\n  getRaw(key) {\n    return this._map[key];\n  }\n  getKeys() {\n    return Object.keys(this._map);\n  }\n  getRawValues() {\n    return Object.values(this._map);\n  }\n  set(key, value) {\n    this._map[key] = value;\n  }\n  has(key) {\n    return this._map[key] !== undefined;\n  }\n  forEach(callback) {\n    for (const key in this._map) {\n      callback(key, this.get(key));\n    }\n  }\n  static get empty() {\n    const emptyDict = new Dict(null);\n    emptyDict.set = (key, value) => {\n      unreachable(\"Should not call `set` on the empty dictionary.\");\n    };\n    return shadow(this, \"empty\", emptyDict);\n  }\n  static merge({\n    xref,\n    dictArray,\n    mergeSubDicts = false\n  }) {\n    const mergedDict = new Dict(xref),\n      properties = new Map();\n    for (const dict of dictArray) {\n      if (!(dict instanceof Dict)) {\n        continue;\n      }\n      for (const [key, value] of Object.entries(dict._map)) {\n        let property = properties.get(key);\n        if (property === undefined) {\n          property = [];\n          properties.set(key, property);\n        } else if (!mergeSubDicts || !(value instanceof Dict)) {\n          continue;\n        }\n        property.push(value);\n      }\n    }\n    for (const [name, values] of properties) {\n      if (values.length === 1 || !(values[0] instanceof Dict)) {\n        mergedDict._map[name] = values[0];\n        continue;\n      }\n      const subDict = new Dict(xref);\n      for (const dict of values) {\n        for (const [key, value] of Object.entries(dict._map)) {\n          if (subDict._map[key] === undefined) {\n            subDict._map[key] = value;\n          }\n        }\n      }\n      if (subDict.size > 0) {\n        mergedDict._map[name] = subDict;\n      }\n    }\n    properties.clear();\n    return mergedDict.size > 0 ? mergedDict : Dict.empty;\n  }\n  clone() {\n    const dict = new Dict(this.xref);\n    for (const key of this.getKeys()) {\n      dict.set(key, this.getRaw(key));\n    }\n    return dict;\n  }\n}\nclass Ref {\n  constructor(num, gen) {\n    this.num = num;\n    this.gen = gen;\n  }\n  toString() {\n    if (this.gen === 0) {\n      return `${this.num}R`;\n    }\n    return `${this.num}R${this.gen}`;\n  }\n  static fromString(str) {\n    const ref = RefCache[str];\n    if (ref) {\n      return ref;\n    }\n    const m = /^(\\d+)R(\\d*)$/.exec(str);\n    if (!m || m[1] === \"0\") {\n      return null;\n    }\n    return RefCache[str] = new Ref(parseInt(m[1]), !m[2] ? 0 : parseInt(m[2]));\n  }\n  static get(num, gen) {\n    const key = gen === 0 ? `${num}R` : `${num}R${gen}`;\n    return RefCache[key] ||= new Ref(num, gen);\n  }\n}\nclass RefSet {\n  constructor(parent = null) {\n    this._set = new Set(parent?._set);\n  }\n  has(ref) {\n    return this._set.has(ref.toString());\n  }\n  put(ref) {\n    this._set.add(ref.toString());\n  }\n  remove(ref) {\n    this._set.delete(ref.toString());\n  }\n  [Symbol.iterator]() {\n    return this._set.values();\n  }\n  clear() {\n    this._set.clear();\n  }\n}\nclass RefSetCache {\n  constructor() {\n    this._map = new Map();\n  }\n  get size() {\n    return this._map.size;\n  }\n  get(ref) {\n    return this._map.get(ref.toString());\n  }\n  has(ref) {\n    return this._map.has(ref.toString());\n  }\n  put(ref, obj) {\n    this._map.set(ref.toString(), obj);\n  }\n  putAlias(ref, aliasRef) {\n    this._map.set(ref.toString(), this.get(aliasRef));\n  }\n  [Symbol.iterator]() {\n    return this._map.values();\n  }\n  clear() {\n    this._map.clear();\n  }\n  *items() {\n    for (const [ref, value] of this._map) {\n      yield [Ref.fromString(ref), value];\n    }\n  }\n}\nfunction isName(v, name) {\n  return v instanceof Name && (name === undefined || v.name === name);\n}\nfunction isCmd(v, cmd) {\n  return v instanceof Cmd && (cmd === undefined || v.cmd === cmd);\n}\nfunction isDict(v, type) {\n  return v instanceof Dict && (type === undefined || isName(v.get(\"Type\"), type));\n}\nfunction isRefsEqual(v1, v2) {\n  return v1.num === v2.num && v1.gen === v2.gen;\n}\n\n;// CONCATENATED MODULE: ./src/core/base_stream.js\n\nclass BaseStream {\n  constructor() {\n    if (this.constructor === BaseStream) {\n      unreachable(\"Cannot initialize BaseStream.\");\n    }\n  }\n  get length() {\n    unreachable(\"Abstract getter `length` accessed\");\n  }\n  get isEmpty() {\n    unreachable(\"Abstract getter `isEmpty` accessed\");\n  }\n  get isDataLoaded() {\n    return shadow(this, \"isDataLoaded\", true);\n  }\n  getByte() {\n    unreachable(\"Abstract method `getByte` called\");\n  }\n  getBytes(length) {\n    unreachable(\"Abstract method `getBytes` called\");\n  }\n  peekByte() {\n    const peekedByte = this.getByte();\n    if (peekedByte !== -1) {\n      this.pos--;\n    }\n    return peekedByte;\n  }\n  peekBytes(length) {\n    const bytes = this.getBytes(length);\n    this.pos -= bytes.length;\n    return bytes;\n  }\n  getUint16() {\n    const b0 = this.getByte();\n    const b1 = this.getByte();\n    if (b0 === -1 || b1 === -1) {\n      return -1;\n    }\n    return (b0 << 8) + b1;\n  }\n  getInt32() {\n    const b0 = this.getByte();\n    const b1 = this.getByte();\n    const b2 = this.getByte();\n    const b3 = this.getByte();\n    return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;\n  }\n  getByteRange(begin, end) {\n    unreachable(\"Abstract method `getByteRange` called\");\n  }\n  getString(length) {\n    return bytesToString(this.getBytes(length));\n  }\n  skip(n) {\n    this.pos += n || 1;\n  }\n  reset() {\n    unreachable(\"Abstract method `reset` called\");\n  }\n  moveStart() {\n    unreachable(\"Abstract method `moveStart` called\");\n  }\n  makeSubStream(start, length, dict = null) {\n    unreachable(\"Abstract method `makeSubStream` called\");\n  }\n  getBaseStreams() {\n    return null;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/core_utils.js\n\n\n\nconst PDF_VERSION_REGEXP = /^[1-9]\\.\\d$/;\nfunction getLookupTableFactory(initializer) {\n  let lookup;\n  return function () {\n    if (initializer) {\n      lookup = Object.create(null);\n      initializer(lookup);\n      initializer = null;\n    }\n    return lookup;\n  };\n}\nclass MissingDataException extends BaseException {\n  constructor(begin, end) {\n    super(`Missing data [${begin}, ${end})`, \"MissingDataException\");\n    this.begin = begin;\n    this.end = end;\n  }\n}\nclass ParserEOFException extends BaseException {\n  constructor(msg) {\n    super(msg, \"ParserEOFException\");\n  }\n}\nclass XRefEntryException extends BaseException {\n  constructor(msg) {\n    super(msg, \"XRefEntryException\");\n  }\n}\nclass XRefParseException extends BaseException {\n  constructor(msg) {\n    super(msg, \"XRefParseException\");\n  }\n}\nfunction arrayBuffersToBytes(arr) {\n  const length = arr.length;\n  if (length === 0) {\n    return new Uint8Array(0);\n  }\n  if (length === 1) {\n    return new Uint8Array(arr[0]);\n  }\n  let dataLength = 0;\n  for (let i = 0; i < length; i++) {\n    dataLength += arr[i].byteLength;\n  }\n  const data = new Uint8Array(dataLength);\n  let pos = 0;\n  for (let i = 0; i < length; i++) {\n    const item = new Uint8Array(arr[i]);\n    data.set(item, pos);\n    pos += item.byteLength;\n  }\n  return data;\n}\nfunction getInheritableProperty({\n  dict,\n  key,\n  getArray = false,\n  stopWhenFound = true\n}) {\n  let values;\n  const visited = new RefSet();\n  while (dict instanceof Dict && !(dict.objId && visited.has(dict.objId))) {\n    if (dict.objId) {\n      visited.put(dict.objId);\n    }\n    const value = getArray ? dict.getArray(key) : dict.get(key);\n    if (value !== undefined) {\n      if (stopWhenFound) {\n        return value;\n      }\n      (values ||= []).push(value);\n    }\n    dict = dict.get(\"Parent\");\n  }\n  return values;\n}\nconst ROMAN_NUMBER_MAP = [\"\", \"C\", \"CC\", \"CCC\", \"CD\", \"D\", \"DC\", \"DCC\", \"DCCC\", \"CM\", \"\", \"X\", \"XX\", \"XXX\", \"XL\", \"L\", \"LX\", \"LXX\", \"LXXX\", \"XC\", \"\", \"I\", \"II\", \"III\", \"IV\", \"V\", \"VI\", \"VII\", \"VIII\", \"IX\"];\nfunction toRomanNumerals(number, lowerCase = false) {\n  assert(Number.isInteger(number) && number > 0, \"The number should be a positive integer.\");\n  const romanBuf = [];\n  let pos;\n  while (number >= 1000) {\n    number -= 1000;\n    romanBuf.push(\"M\");\n  }\n  pos = number / 100 | 0;\n  number %= 100;\n  romanBuf.push(ROMAN_NUMBER_MAP[pos]);\n  pos = number / 10 | 0;\n  number %= 10;\n  romanBuf.push(ROMAN_NUMBER_MAP[10 + pos]);\n  romanBuf.push(ROMAN_NUMBER_MAP[20 + number]);\n  const romanStr = romanBuf.join(\"\");\n  return lowerCase ? romanStr.toLowerCase() : romanStr;\n}\nfunction log2(x) {\n  if (x <= 0) {\n    return 0;\n  }\n  return Math.ceil(Math.log2(x));\n}\nfunction readInt8(data, offset) {\n  return data[offset] << 24 >> 24;\n}\nfunction readUint16(data, offset) {\n  return data[offset] << 8 | data[offset + 1];\n}\nfunction readUint32(data, offset) {\n  return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0;\n}\nfunction isWhiteSpace(ch) {\n  return ch === 0x20 || ch === 0x09 || ch === 0x0d || ch === 0x0a;\n}\nfunction isBooleanArray(arr, len) {\n  return Array.isArray(arr) && (len === null || arr.length === len) && arr.every(x => typeof x === \"boolean\");\n}\nfunction isNumberArray(arr, len) {\n  return Array.isArray(arr) && (len === null || arr.length === len) && arr.every(x => typeof x === \"number\");\n}\nfunction lookupMatrix(arr, fallback) {\n  return isNumberArray(arr, 6) ? arr : fallback;\n}\nfunction lookupRect(arr, fallback) {\n  return isNumberArray(arr, 4) ? arr : fallback;\n}\nfunction lookupNormalRect(arr, fallback) {\n  return isNumberArray(arr, 4) ? Util.normalizeRect(arr) : fallback;\n}\nfunction parseXFAPath(path) {\n  const positionPattern = /(.+)\\[(\\d+)\\]$/;\n  return path.split(\".\").map(component => {\n    const m = component.match(positionPattern);\n    if (m) {\n      return {\n        name: m[1],\n        pos: parseInt(m[2], 10)\n      };\n    }\n    return {\n      name: component,\n      pos: 0\n    };\n  });\n}\nfunction escapePDFName(str) {\n  const buffer = [];\n  let start = 0;\n  for (let i = 0, ii = str.length; i < ii; i++) {\n    const char = str.charCodeAt(i);\n    if (char < 0x21 || char > 0x7e || char === 0x23 || char === 0x28 || char === 0x29 || char === 0x3c || char === 0x3e || char === 0x5b || char === 0x5d || char === 0x7b || char === 0x7d || char === 0x2f || char === 0x25) {\n      if (start < i) {\n        buffer.push(str.substring(start, i));\n      }\n      buffer.push(`#${char.toString(16)}`);\n      start = i + 1;\n    }\n  }\n  if (buffer.length === 0) {\n    return str;\n  }\n  if (start < str.length) {\n    buffer.push(str.substring(start, str.length));\n  }\n  return buffer.join(\"\");\n}\nfunction escapeString(str) {\n  return str.replaceAll(/([()\\\\\\n\\r])/g, match => {\n    if (match === \"\\n\") {\n      return \"\\\\n\";\n    } else if (match === \"\\r\") {\n      return \"\\\\r\";\n    }\n    return `\\\\${match}`;\n  });\n}\nfunction _collectJS(entry, xref, list, parents) {\n  if (!entry) {\n    return;\n  }\n  let parent = null;\n  if (entry instanceof Ref) {\n    if (parents.has(entry)) {\n      return;\n    }\n    parent = entry;\n    parents.put(parent);\n    entry = xref.fetch(entry);\n  }\n  if (Array.isArray(entry)) {\n    for (const element of entry) {\n      _collectJS(element, xref, list, parents);\n    }\n  } else if (entry instanceof Dict) {\n    if (isName(entry.get(\"S\"), \"JavaScript\")) {\n      const js = entry.get(\"JS\");\n      let code;\n      if (js instanceof BaseStream) {\n        code = js.getString();\n      } else if (typeof js === \"string\") {\n        code = js;\n      }\n      code &&= stringToPDFString(code).replaceAll(\"\\x00\", \"\");\n      if (code) {\n        list.push(code);\n      }\n    }\n    _collectJS(entry.getRaw(\"Next\"), xref, list, parents);\n  }\n  if (parent) {\n    parents.remove(parent);\n  }\n}\nfunction collectActions(xref, dict, eventType) {\n  const actions = Object.create(null);\n  const additionalActionsDicts = getInheritableProperty({\n    dict,\n    key: \"AA\",\n    stopWhenFound: false\n  });\n  if (additionalActionsDicts) {\n    for (let i = additionalActionsDicts.length - 1; i >= 0; i--) {\n      const additionalActions = additionalActionsDicts[i];\n      if (!(additionalActions instanceof Dict)) {\n        continue;\n      }\n      for (const key of additionalActions.getKeys()) {\n        const action = eventType[key];\n        if (!action) {\n          continue;\n        }\n        const actionDict = additionalActions.getRaw(key);\n        const parents = new RefSet();\n        const list = [];\n        _collectJS(actionDict, xref, list, parents);\n        if (list.length > 0) {\n          actions[action] = list;\n        }\n      }\n    }\n  }\n  if (dict.has(\"A\")) {\n    const actionDict = dict.get(\"A\");\n    const parents = new RefSet();\n    const list = [];\n    _collectJS(actionDict, xref, list, parents);\n    if (list.length > 0) {\n      actions.Action = list;\n    }\n  }\n  return objectSize(actions) > 0 ? actions : null;\n}\nconst XMLEntities = {\n  0x3c: \"&lt;\",\n  0x3e: \"&gt;\",\n  0x26: \"&amp;\",\n  0x22: \"&quot;\",\n  0x27: \"&apos;\"\n};\nfunction* codePointIter(str) {\n  for (let i = 0, ii = str.length; i < ii; i++) {\n    const char = str.codePointAt(i);\n    if (char > 0xd7ff && (char < 0xe000 || char > 0xfffd)) {\n      i++;\n    }\n    yield char;\n  }\n}\nfunction encodeToXmlString(str) {\n  const buffer = [];\n  let start = 0;\n  for (let i = 0, ii = str.length; i < ii; i++) {\n    const char = str.codePointAt(i);\n    if (0x20 <= char && char <= 0x7e) {\n      const entity = XMLEntities[char];\n      if (entity) {\n        if (start < i) {\n          buffer.push(str.substring(start, i));\n        }\n        buffer.push(entity);\n        start = i + 1;\n      }\n    } else {\n      if (start < i) {\n        buffer.push(str.substring(start, i));\n      }\n      buffer.push(`&#x${char.toString(16).toUpperCase()};`);\n      if (char > 0xd7ff && (char < 0xe000 || char > 0xfffd)) {\n        i++;\n      }\n      start = i + 1;\n    }\n  }\n  if (buffer.length === 0) {\n    return str;\n  }\n  if (start < str.length) {\n    buffer.push(str.substring(start, str.length));\n  }\n  return buffer.join(\"\");\n}\nfunction validateFontName(fontFamily, mustWarn = false) {\n  const m = /^(\"|').*(\"|')$/.exec(fontFamily);\n  if (m && m[1] === m[2]) {\n    const re = new RegExp(`[^\\\\\\\\]${m[1]}`);\n    if (re.test(fontFamily.slice(1, -1))) {\n      if (mustWarn) {\n        warn(`FontFamily contains unescaped ${m[1]}: ${fontFamily}.`);\n      }\n      return false;\n    }\n  } else {\n    for (const ident of fontFamily.split(/[ \\t]+/)) {\n      if (/^(\\d|(-(\\d|-)))/.test(ident) || !/^[\\w-\\\\]+$/.test(ident)) {\n        if (mustWarn) {\n          warn(`FontFamily contains invalid <custom-ident>: ${fontFamily}.`);\n        }\n        return false;\n      }\n    }\n  }\n  return true;\n}\nfunction validateCSSFont(cssFontInfo) {\n  const DEFAULT_CSS_FONT_OBLIQUE = \"14\";\n  const DEFAULT_CSS_FONT_WEIGHT = \"400\";\n  const CSS_FONT_WEIGHT_VALUES = new Set([\"100\", \"200\", \"300\", \"400\", \"500\", \"600\", \"700\", \"800\", \"900\", \"1000\", \"normal\", \"bold\", \"bolder\", \"lighter\"]);\n  const {\n    fontFamily,\n    fontWeight,\n    italicAngle\n  } = cssFontInfo;\n  if (!validateFontName(fontFamily, true)) {\n    return false;\n  }\n  const weight = fontWeight ? fontWeight.toString() : \"\";\n  cssFontInfo.fontWeight = CSS_FONT_WEIGHT_VALUES.has(weight) ? weight : DEFAULT_CSS_FONT_WEIGHT;\n  const angle = parseFloat(italicAngle);\n  cssFontInfo.italicAngle = isNaN(angle) || angle < -90 || angle > 90 ? DEFAULT_CSS_FONT_OBLIQUE : italicAngle.toString();\n  return true;\n}\nfunction recoverJsURL(str) {\n  const URL_OPEN_METHODS = [\"app.launchURL\", \"window.open\", \"xfa.host.gotoURL\"];\n  const regex = new RegExp(\"^\\\\s*(\" + URL_OPEN_METHODS.join(\"|\").replaceAll(\".\", \"\\\\.\") + \")\\\\((?:'|\\\")([^'\\\"]*)(?:'|\\\")(?:,\\\\s*(\\\\w+)\\\\)|\\\\))\", \"i\");\n  const jsUrl = regex.exec(str);\n  if (jsUrl?.[2]) {\n    const url = jsUrl[2];\n    let newWindow = false;\n    if (jsUrl[3] === \"true\" && jsUrl[1] === \"app.launchURL\") {\n      newWindow = true;\n    }\n    return {\n      url,\n      newWindow\n    };\n  }\n  return null;\n}\nfunction numberToString(value) {\n  if (Number.isInteger(value)) {\n    return value.toString();\n  }\n  const roundedValue = Math.round(value * 100);\n  if (roundedValue % 100 === 0) {\n    return (roundedValue / 100).toString();\n  }\n  if (roundedValue % 10 === 0) {\n    return value.toFixed(1);\n  }\n  return value.toFixed(2);\n}\nfunction getNewAnnotationsMap(annotationStorage) {\n  if (!annotationStorage) {\n    return null;\n  }\n  const newAnnotationsByPage = new Map();\n  for (const [key, value] of annotationStorage) {\n    if (!key.startsWith(AnnotationEditorPrefix)) {\n      continue;\n    }\n    let annotations = newAnnotationsByPage.get(value.pageIndex);\n    if (!annotations) {\n      annotations = [];\n      newAnnotationsByPage.set(value.pageIndex, annotations);\n    }\n    annotations.push(value);\n  }\n  return newAnnotationsByPage.size > 0 ? newAnnotationsByPage : null;\n}\nfunction isAscii(str) {\n  return /^[\\x00-\\x7F]*$/.test(str);\n}\nfunction stringToUTF16HexString(str) {\n  const buf = [];\n  for (let i = 0, ii = str.length; i < ii; i++) {\n    const char = str.charCodeAt(i);\n    buf.push((char >> 8 & 0xff).toString(16).padStart(2, \"0\"), (char & 0xff).toString(16).padStart(2, \"0\"));\n  }\n  return buf.join(\"\");\n}\nfunction stringToUTF16String(str, bigEndian = false) {\n  const buf = [];\n  if (bigEndian) {\n    buf.push(\"\\xFE\\xFF\");\n  }\n  for (let i = 0, ii = str.length; i < ii; i++) {\n    const char = str.charCodeAt(i);\n    buf.push(String.fromCharCode(char >> 8 & 0xff), String.fromCharCode(char & 0xff));\n  }\n  return buf.join(\"\");\n}\nfunction getRotationMatrix(rotation, width, height) {\n  switch (rotation) {\n    case 90:\n      return [0, 1, -1, 0, width, 0];\n    case 180:\n      return [-1, 0, 0, -1, width, height];\n    case 270:\n      return [0, -1, 1, 0, 0, height];\n    default:\n      throw new Error(\"Invalid rotation\");\n  }\n}\nfunction getSizeInBytes(x) {\n  return Math.ceil(Math.ceil(Math.log2(1 + x)) / 8);\n}\n\n;// CONCATENATED MODULE: ./src/core/stream.js\n\n\nclass Stream extends BaseStream {\n  constructor(arrayBuffer, start, length, dict) {\n    super();\n    this.bytes = arrayBuffer instanceof Uint8Array ? arrayBuffer : new Uint8Array(arrayBuffer);\n    this.start = start || 0;\n    this.pos = this.start;\n    this.end = start + length || this.bytes.length;\n    this.dict = dict;\n  }\n  get length() {\n    return this.end - this.start;\n  }\n  get isEmpty() {\n    return this.length === 0;\n  }\n  getByte() {\n    if (this.pos >= this.end) {\n      return -1;\n    }\n    return this.bytes[this.pos++];\n  }\n  getBytes(length) {\n    const bytes = this.bytes;\n    const pos = this.pos;\n    const strEnd = this.end;\n    if (!length) {\n      return bytes.subarray(pos, strEnd);\n    }\n    let end = pos + length;\n    if (end > strEnd) {\n      end = strEnd;\n    }\n    this.pos = end;\n    return bytes.subarray(pos, end);\n  }\n  getByteRange(begin, end) {\n    if (begin < 0) {\n      begin = 0;\n    }\n    if (end > this.end) {\n      end = this.end;\n    }\n    return this.bytes.subarray(begin, end);\n  }\n  reset() {\n    this.pos = this.start;\n  }\n  moveStart() {\n    this.start = this.pos;\n  }\n  makeSubStream(start, length, dict = null) {\n    return new Stream(this.bytes.buffer, start, length, dict);\n  }\n}\nclass StringStream extends Stream {\n  constructor(str) {\n    super(stringToBytes(str));\n  }\n}\nclass NullStream extends Stream {\n  constructor() {\n    super(new Uint8Array(0));\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/chunked_stream.js\n\n\n\nclass ChunkedStream extends Stream {\n  constructor(length, chunkSize, manager) {\n    super(new Uint8Array(length), 0, length, null);\n    this.chunkSize = chunkSize;\n    this._loadedChunks = new Set();\n    this.numChunks = Math.ceil(length / chunkSize);\n    this.manager = manager;\n    this.progressiveDataLength = 0;\n    this.lastSuccessfulEnsureByteChunk = -1;\n  }\n  getMissingChunks() {\n    const chunks = [];\n    for (let chunk = 0, n = this.numChunks; chunk < n; ++chunk) {\n      if (!this._loadedChunks.has(chunk)) {\n        chunks.push(chunk);\n      }\n    }\n    return chunks;\n  }\n  get numChunksLoaded() {\n    return this._loadedChunks.size;\n  }\n  get isDataLoaded() {\n    return this.numChunksLoaded === this.numChunks;\n  }\n  onReceiveData(begin, chunk) {\n    const chunkSize = this.chunkSize;\n    if (begin % chunkSize !== 0) {\n      throw new Error(`Bad begin offset: ${begin}`);\n    }\n    const end = begin + chunk.byteLength;\n    if (end % chunkSize !== 0 && end !== this.bytes.length) {\n      throw new Error(`Bad end offset: ${end}`);\n    }\n    this.bytes.set(new Uint8Array(chunk), begin);\n    const beginChunk = Math.floor(begin / chunkSize);\n    const endChunk = Math.floor((end - 1) / chunkSize) + 1;\n    for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) {\n      this._loadedChunks.add(curChunk);\n    }\n  }\n  onReceiveProgressiveData(data) {\n    let position = this.progressiveDataLength;\n    const beginChunk = Math.floor(position / this.chunkSize);\n    this.bytes.set(new Uint8Array(data), position);\n    position += data.byteLength;\n    this.progressiveDataLength = position;\n    const endChunk = position >= this.end ? this.numChunks : Math.floor(position / this.chunkSize);\n    for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) {\n      this._loadedChunks.add(curChunk);\n    }\n  }\n  ensureByte(pos) {\n    if (pos < this.progressiveDataLength) {\n      return;\n    }\n    const chunk = Math.floor(pos / this.chunkSize);\n    if (chunk > this.numChunks) {\n      return;\n    }\n    if (chunk === this.lastSuccessfulEnsureByteChunk) {\n      return;\n    }\n    if (!this._loadedChunks.has(chunk)) {\n      throw new MissingDataException(pos, pos + 1);\n    }\n    this.lastSuccessfulEnsureByteChunk = chunk;\n  }\n  ensureRange(begin, end) {\n    if (begin >= end) {\n      return;\n    }\n    if (end <= this.progressiveDataLength) {\n      return;\n    }\n    const beginChunk = Math.floor(begin / this.chunkSize);\n    if (beginChunk > this.numChunks) {\n      return;\n    }\n    const endChunk = Math.min(Math.floor((end - 1) / this.chunkSize) + 1, this.numChunks);\n    for (let chunk = beginChunk; chunk < endChunk; ++chunk) {\n      if (!this._loadedChunks.has(chunk)) {\n        throw new MissingDataException(begin, end);\n      }\n    }\n  }\n  nextEmptyChunk(beginChunk) {\n    const numChunks = this.numChunks;\n    for (let i = 0; i < numChunks; ++i) {\n      const chunk = (beginChunk + i) % numChunks;\n      if (!this._loadedChunks.has(chunk)) {\n        return chunk;\n      }\n    }\n    return null;\n  }\n  hasChunk(chunk) {\n    return this._loadedChunks.has(chunk);\n  }\n  getByte() {\n    const pos = this.pos;\n    if (pos >= this.end) {\n      return -1;\n    }\n    if (pos >= this.progressiveDataLength) {\n      this.ensureByte(pos);\n    }\n    return this.bytes[this.pos++];\n  }\n  getBytes(length) {\n    const bytes = this.bytes;\n    const pos = this.pos;\n    const strEnd = this.end;\n    if (!length) {\n      if (strEnd > this.progressiveDataLength) {\n        this.ensureRange(pos, strEnd);\n      }\n      return bytes.subarray(pos, strEnd);\n    }\n    let end = pos + length;\n    if (end > strEnd) {\n      end = strEnd;\n    }\n    if (end > this.progressiveDataLength) {\n      this.ensureRange(pos, end);\n    }\n    this.pos = end;\n    return bytes.subarray(pos, end);\n  }\n  getByteRange(begin, end) {\n    if (begin < 0) {\n      begin = 0;\n    }\n    if (end > this.end) {\n      end = this.end;\n    }\n    if (end > this.progressiveDataLength) {\n      this.ensureRange(begin, end);\n    }\n    return this.bytes.subarray(begin, end);\n  }\n  makeSubStream(start, length, dict = null) {\n    if (length) {\n      if (start + length > this.progressiveDataLength) {\n        this.ensureRange(start, start + length);\n      }\n    } else if (start >= this.progressiveDataLength) {\n      this.ensureByte(start);\n    }\n    function ChunkedStreamSubstream() {}\n    ChunkedStreamSubstream.prototype = Object.create(this);\n    ChunkedStreamSubstream.prototype.getMissingChunks = function () {\n      const chunkSize = this.chunkSize;\n      const beginChunk = Math.floor(this.start / chunkSize);\n      const endChunk = Math.floor((this.end - 1) / chunkSize) + 1;\n      const missingChunks = [];\n      for (let chunk = beginChunk; chunk < endChunk; ++chunk) {\n        if (!this._loadedChunks.has(chunk)) {\n          missingChunks.push(chunk);\n        }\n      }\n      return missingChunks;\n    };\n    Object.defineProperty(ChunkedStreamSubstream.prototype, \"isDataLoaded\", {\n      get() {\n        if (this.numChunksLoaded === this.numChunks) {\n          return true;\n        }\n        return this.getMissingChunks().length === 0;\n      },\n      configurable: true\n    });\n    const subStream = new ChunkedStreamSubstream();\n    subStream.pos = subStream.start = start;\n    subStream.end = start + length || this.end;\n    subStream.dict = dict;\n    return subStream;\n  }\n  getBaseStreams() {\n    return [this];\n  }\n}\nclass ChunkedStreamManager {\n  constructor(pdfNetworkStream, args) {\n    this.length = args.length;\n    this.chunkSize = args.rangeChunkSize;\n    this.stream = new ChunkedStream(this.length, this.chunkSize, this);\n    this.pdfNetworkStream = pdfNetworkStream;\n    this.disableAutoFetch = args.disableAutoFetch;\n    this.msgHandler = args.msgHandler;\n    this.currRequestId = 0;\n    this._chunksNeededByRequest = new Map();\n    this._requestsByChunk = new Map();\n    this._promisesByRequest = new Map();\n    this.progressiveDataLength = 0;\n    this.aborted = false;\n    this._loadedStreamCapability = Promise.withResolvers();\n  }\n  sendRequest(begin, end) {\n    const rangeReader = this.pdfNetworkStream.getRangeReader(begin, end);\n    if (!rangeReader.isStreamingSupported) {\n      rangeReader.onProgress = this.onProgress.bind(this);\n    }\n    let chunks = [],\n      loaded = 0;\n    return new Promise((resolve, reject) => {\n      const readChunk = ({\n        value,\n        done\n      }) => {\n        try {\n          if (done) {\n            const chunkData = arrayBuffersToBytes(chunks);\n            chunks = null;\n            resolve(chunkData);\n            return;\n          }\n          loaded += value.byteLength;\n          if (rangeReader.isStreamingSupported) {\n            this.onProgress({\n              loaded\n            });\n          }\n          chunks.push(value);\n          rangeReader.read().then(readChunk, reject);\n        } catch (e) {\n          reject(e);\n        }\n      };\n      rangeReader.read().then(readChunk, reject);\n    }).then(data => {\n      if (this.aborted) {\n        return;\n      }\n      this.onReceiveData({\n        chunk: data,\n        begin\n      });\n    });\n  }\n  requestAllChunks(noFetch = false) {\n    if (!noFetch) {\n      const missingChunks = this.stream.getMissingChunks();\n      this._requestChunks(missingChunks);\n    }\n    return this._loadedStreamCapability.promise;\n  }\n  _requestChunks(chunks) {\n    const requestId = this.currRequestId++;\n    const chunksNeeded = new Set();\n    this._chunksNeededByRequest.set(requestId, chunksNeeded);\n    for (const chunk of chunks) {\n      if (!this.stream.hasChunk(chunk)) {\n        chunksNeeded.add(chunk);\n      }\n    }\n    if (chunksNeeded.size === 0) {\n      return Promise.resolve();\n    }\n    const capability = Promise.withResolvers();\n    this._promisesByRequest.set(requestId, capability);\n    const chunksToRequest = [];\n    for (const chunk of chunksNeeded) {\n      let requestIds = this._requestsByChunk.get(chunk);\n      if (!requestIds) {\n        requestIds = [];\n        this._requestsByChunk.set(chunk, requestIds);\n        chunksToRequest.push(chunk);\n      }\n      requestIds.push(requestId);\n    }\n    if (chunksToRequest.length > 0) {\n      const groupedChunksToRequest = this.groupChunks(chunksToRequest);\n      for (const groupedChunk of groupedChunksToRequest) {\n        const begin = groupedChunk.beginChunk * this.chunkSize;\n        const end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length);\n        this.sendRequest(begin, end).catch(capability.reject);\n      }\n    }\n    return capability.promise.catch(reason => {\n      if (this.aborted) {\n        return;\n      }\n      throw reason;\n    });\n  }\n  getStream() {\n    return this.stream;\n  }\n  requestRange(begin, end) {\n    end = Math.min(end, this.length);\n    const beginChunk = this.getBeginChunk(begin);\n    const endChunk = this.getEndChunk(end);\n    const chunks = [];\n    for (let chunk = beginChunk; chunk < endChunk; ++chunk) {\n      chunks.push(chunk);\n    }\n    return this._requestChunks(chunks);\n  }\n  requestRanges(ranges = []) {\n    const chunksToRequest = [];\n    for (const range of ranges) {\n      const beginChunk = this.getBeginChunk(range.begin);\n      const endChunk = this.getEndChunk(range.end);\n      for (let chunk = beginChunk; chunk < endChunk; ++chunk) {\n        if (!chunksToRequest.includes(chunk)) {\n          chunksToRequest.push(chunk);\n        }\n      }\n    }\n    chunksToRequest.sort(function (a, b) {\n      return a - b;\n    });\n    return this._requestChunks(chunksToRequest);\n  }\n  groupChunks(chunks) {\n    const groupedChunks = [];\n    let beginChunk = -1;\n    let prevChunk = -1;\n    for (let i = 0, ii = chunks.length; i < ii; ++i) {\n      const chunk = chunks[i];\n      if (beginChunk < 0) {\n        beginChunk = chunk;\n      }\n      if (prevChunk >= 0 && prevChunk + 1 !== chunk) {\n        groupedChunks.push({\n          beginChunk,\n          endChunk: prevChunk + 1\n        });\n        beginChunk = chunk;\n      }\n      if (i + 1 === chunks.length) {\n        groupedChunks.push({\n          beginChunk,\n          endChunk: chunk + 1\n        });\n      }\n      prevChunk = chunk;\n    }\n    return groupedChunks;\n  }\n  onProgress(args) {\n    this.msgHandler.send(\"DocProgress\", {\n      loaded: this.stream.numChunksLoaded * this.chunkSize + args.loaded,\n      total: this.length\n    });\n  }\n  onReceiveData(args) {\n    const chunk = args.chunk;\n    const isProgressive = args.begin === undefined;\n    const begin = isProgressive ? this.progressiveDataLength : args.begin;\n    const end = begin + chunk.byteLength;\n    const beginChunk = Math.floor(begin / this.chunkSize);\n    const endChunk = end < this.length ? Math.floor(end / this.chunkSize) : Math.ceil(end / this.chunkSize);\n    if (isProgressive) {\n      this.stream.onReceiveProgressiveData(chunk);\n      this.progressiveDataLength = end;\n    } else {\n      this.stream.onReceiveData(begin, chunk);\n    }\n    if (this.stream.isDataLoaded) {\n      this._loadedStreamCapability.resolve(this.stream);\n    }\n    const loadedRequests = [];\n    for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) {\n      const requestIds = this._requestsByChunk.get(curChunk);\n      if (!requestIds) {\n        continue;\n      }\n      this._requestsByChunk.delete(curChunk);\n      for (const requestId of requestIds) {\n        const chunksNeeded = this._chunksNeededByRequest.get(requestId);\n        if (chunksNeeded.has(curChunk)) {\n          chunksNeeded.delete(curChunk);\n        }\n        if (chunksNeeded.size > 0) {\n          continue;\n        }\n        loadedRequests.push(requestId);\n      }\n    }\n    if (!this.disableAutoFetch && this._requestsByChunk.size === 0) {\n      let nextEmptyChunk;\n      if (this.stream.numChunksLoaded === 1) {\n        const lastChunk = this.stream.numChunks - 1;\n        if (!this.stream.hasChunk(lastChunk)) {\n          nextEmptyChunk = lastChunk;\n        }\n      } else {\n        nextEmptyChunk = this.stream.nextEmptyChunk(endChunk);\n      }\n      if (Number.isInteger(nextEmptyChunk)) {\n        this._requestChunks([nextEmptyChunk]);\n      }\n    }\n    for (const requestId of loadedRequests) {\n      const capability = this._promisesByRequest.get(requestId);\n      this._promisesByRequest.delete(requestId);\n      capability.resolve();\n    }\n    this.msgHandler.send(\"DocProgress\", {\n      loaded: this.stream.numChunksLoaded * this.chunkSize,\n      total: this.length\n    });\n  }\n  onError(err) {\n    this._loadedStreamCapability.reject(err);\n  }\n  getBeginChunk(begin) {\n    return Math.floor(begin / this.chunkSize);\n  }\n  getEndChunk(end) {\n    return Math.floor((end - 1) / this.chunkSize) + 1;\n  }\n  abort(reason) {\n    this.aborted = true;\n    this.pdfNetworkStream?.cancelAllRequests(reason);\n    for (const capability of this._promisesByRequest.values()) {\n      capability.reject(reason);\n    }\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/colorspace.js\n\n\n\n\nfunction resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) {\n  const COMPONENTS = 3;\n  alpha01 = alpha01 !== 1 ? 0 : alpha01;\n  const xRatio = w1 / w2;\n  const yRatio = h1 / h2;\n  let newIndex = 0,\n    oldIndex;\n  const xScaled = new Uint16Array(w2);\n  const w1Scanline = w1 * COMPONENTS;\n  for (let i = 0; i < w2; i++) {\n    xScaled[i] = Math.floor(i * xRatio) * COMPONENTS;\n  }\n  for (let i = 0; i < h2; i++) {\n    const py = Math.floor(i * yRatio) * w1Scanline;\n    for (let j = 0; j < w2; j++) {\n      oldIndex = py + xScaled[j];\n      dest[newIndex++] = src[oldIndex++];\n      dest[newIndex++] = src[oldIndex++];\n      dest[newIndex++] = src[oldIndex++];\n      newIndex += alpha01;\n    }\n  }\n}\nclass ColorSpace {\n  constructor(name, numComps) {\n    if (this.constructor === ColorSpace) {\n      unreachable(\"Cannot initialize ColorSpace.\");\n    }\n    this.name = name;\n    this.numComps = numComps;\n  }\n  getRgb(src, srcOffset) {\n    const rgb = new Uint8ClampedArray(3);\n    this.getRgbItem(src, srcOffset, rgb, 0);\n    return rgb;\n  }\n  getRgbItem(src, srcOffset, dest, destOffset) {\n    unreachable(\"Should not call ColorSpace.getRgbItem\");\n  }\n  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n    unreachable(\"Should not call ColorSpace.getRgbBuffer\");\n  }\n  getOutputLength(inputLength, alpha01) {\n    unreachable(\"Should not call ColorSpace.getOutputLength\");\n  }\n  isPassthrough(bits) {\n    return false;\n  }\n  isDefaultDecode(decodeMap, bpc) {\n    return ColorSpace.isDefaultDecode(decodeMap, this.numComps);\n  }\n  fillRgb(dest, originalWidth, originalHeight, width, height, actualHeight, bpc, comps, alpha01) {\n    const count = originalWidth * originalHeight;\n    let rgbBuf = null;\n    const numComponentColors = 1 << bpc;\n    const needsResizing = originalHeight !== height || originalWidth !== width;\n    if (this.isPassthrough(bpc)) {\n      rgbBuf = comps;\n    } else if (this.numComps === 1 && count > numComponentColors && this.name !== \"DeviceGray\" && this.name !== \"DeviceRGB\") {\n      const allColors = bpc <= 8 ? new Uint8Array(numComponentColors) : new Uint16Array(numComponentColors);\n      for (let i = 0; i < numComponentColors; i++) {\n        allColors[i] = i;\n      }\n      const colorMap = new Uint8ClampedArray(numComponentColors * 3);\n      this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc, 0);\n      if (!needsResizing) {\n        let destPos = 0;\n        for (let i = 0; i < count; ++i) {\n          const key = comps[i] * 3;\n          dest[destPos++] = colorMap[key];\n          dest[destPos++] = colorMap[key + 1];\n          dest[destPos++] = colorMap[key + 2];\n          destPos += alpha01;\n        }\n      } else {\n        rgbBuf = new Uint8Array(count * 3);\n        let rgbPos = 0;\n        for (let i = 0; i < count; ++i) {\n          const key = comps[i] * 3;\n          rgbBuf[rgbPos++] = colorMap[key];\n          rgbBuf[rgbPos++] = colorMap[key + 1];\n          rgbBuf[rgbPos++] = colorMap[key + 2];\n        }\n      }\n    } else if (!needsResizing) {\n      this.getRgbBuffer(comps, 0, width * actualHeight, dest, 0, bpc, alpha01);\n    } else {\n      rgbBuf = new Uint8ClampedArray(count * 3);\n      this.getRgbBuffer(comps, 0, count, rgbBuf, 0, bpc, 0);\n    }\n    if (rgbBuf) {\n      if (needsResizing) {\n        resizeRgbImage(rgbBuf, dest, originalWidth, originalHeight, width, height, alpha01);\n      } else {\n        let destPos = 0,\n          rgbPos = 0;\n        for (let i = 0, ii = width * actualHeight; i < ii; i++) {\n          dest[destPos++] = rgbBuf[rgbPos++];\n          dest[destPos++] = rgbBuf[rgbPos++];\n          dest[destPos++] = rgbBuf[rgbPos++];\n          destPos += alpha01;\n        }\n      }\n    }\n  }\n  get usesZeroToOneRange() {\n    return shadow(this, \"usesZeroToOneRange\", true);\n  }\n  static _cache(cacheKey, xref, localColorSpaceCache, parsedColorSpace) {\n    if (!localColorSpaceCache) {\n      throw new Error('ColorSpace._cache - expected \"localColorSpaceCache\" argument.');\n    }\n    if (!parsedColorSpace) {\n      throw new Error('ColorSpace._cache - expected \"parsedColorSpace\" argument.');\n    }\n    let csName, csRef;\n    if (cacheKey instanceof Ref) {\n      csRef = cacheKey;\n      cacheKey = xref.fetch(cacheKey);\n    }\n    if (cacheKey instanceof Name) {\n      csName = cacheKey.name;\n    }\n    if (csName || csRef) {\n      localColorSpaceCache.set(csName, csRef, parsedColorSpace);\n    }\n  }\n  static getCached(cacheKey, xref, localColorSpaceCache) {\n    if (!localColorSpaceCache) {\n      throw new Error('ColorSpace.getCached - expected \"localColorSpaceCache\" argument.');\n    }\n    if (cacheKey instanceof Ref) {\n      const localColorSpace = localColorSpaceCache.getByRef(cacheKey);\n      if (localColorSpace) {\n        return localColorSpace;\n      }\n      try {\n        cacheKey = xref.fetch(cacheKey);\n      } catch (ex) {\n        if (ex instanceof MissingDataException) {\n          throw ex;\n        }\n      }\n    }\n    if (cacheKey instanceof Name) {\n      const localColorSpace = localColorSpaceCache.getByName(cacheKey.name);\n      if (localColorSpace) {\n        return localColorSpace;\n      }\n    }\n    return null;\n  }\n  static async parseAsync({\n    cs,\n    xref,\n    resources = null,\n    pdfFunctionFactory,\n    localColorSpaceCache\n  }) {\n    const parsedColorSpace = this._parse(cs, xref, resources, pdfFunctionFactory);\n    this._cache(cs, xref, localColorSpaceCache, parsedColorSpace);\n    return parsedColorSpace;\n  }\n  static parse({\n    cs,\n    xref,\n    resources = null,\n    pdfFunctionFactory,\n    localColorSpaceCache\n  }) {\n    const cachedColorSpace = this.getCached(cs, xref, localColorSpaceCache);\n    if (cachedColorSpace) {\n      return cachedColorSpace;\n    }\n    const parsedColorSpace = this._parse(cs, xref, resources, pdfFunctionFactory);\n    this._cache(cs, xref, localColorSpaceCache, parsedColorSpace);\n    return parsedColorSpace;\n  }\n  static _parse(cs, xref, resources = null, pdfFunctionFactory) {\n    cs = xref.fetchIfRef(cs);\n    if (cs instanceof Name) {\n      switch (cs.name) {\n        case \"G\":\n        case \"DeviceGray\":\n          return this.singletons.gray;\n        case \"RGB\":\n        case \"DeviceRGB\":\n          return this.singletons.rgb;\n        case \"CMYK\":\n        case \"DeviceCMYK\":\n          return this.singletons.cmyk;\n        case \"Pattern\":\n          return new PatternCS(null);\n        default:\n          if (resources instanceof Dict) {\n            const colorSpaces = resources.get(\"ColorSpace\");\n            if (colorSpaces instanceof Dict) {\n              const resourcesCS = colorSpaces.get(cs.name);\n              if (resourcesCS) {\n                if (resourcesCS instanceof Name) {\n                  return this._parse(resourcesCS, xref, resources, pdfFunctionFactory);\n                }\n                cs = resourcesCS;\n                break;\n              }\n            }\n          }\n          throw new FormatError(`Unrecognized ColorSpace: ${cs.name}`);\n      }\n    }\n    if (Array.isArray(cs)) {\n      const mode = xref.fetchIfRef(cs[0]).name;\n      let params, numComps, baseCS, whitePoint, blackPoint, gamma;\n      switch (mode) {\n        case \"G\":\n        case \"DeviceGray\":\n          return this.singletons.gray;\n        case \"RGB\":\n        case \"DeviceRGB\":\n          return this.singletons.rgb;\n        case \"CMYK\":\n        case \"DeviceCMYK\":\n          return this.singletons.cmyk;\n        case \"CalGray\":\n          params = xref.fetchIfRef(cs[1]);\n          whitePoint = params.getArray(\"WhitePoint\");\n          blackPoint = params.getArray(\"BlackPoint\");\n          gamma = params.get(\"Gamma\");\n          return new CalGrayCS(whitePoint, blackPoint, gamma);\n        case \"CalRGB\":\n          params = xref.fetchIfRef(cs[1]);\n          whitePoint = params.getArray(\"WhitePoint\");\n          blackPoint = params.getArray(\"BlackPoint\");\n          gamma = params.getArray(\"Gamma\");\n          const matrix = params.getArray(\"Matrix\");\n          return new CalRGBCS(whitePoint, blackPoint, gamma, matrix);\n        case \"ICCBased\":\n          const stream = xref.fetchIfRef(cs[1]);\n          const dict = stream.dict;\n          numComps = dict.get(\"N\");\n          const alt = dict.get(\"Alternate\");\n          if (alt) {\n            const altCS = this._parse(alt, xref, resources, pdfFunctionFactory);\n            if (altCS.numComps === numComps) {\n              return altCS;\n            }\n            warn(\"ICCBased color space: Ignoring incorrect /Alternate entry.\");\n          }\n          if (numComps === 1) {\n            return this.singletons.gray;\n          } else if (numComps === 3) {\n            return this.singletons.rgb;\n          } else if (numComps === 4) {\n            return this.singletons.cmyk;\n          }\n          break;\n        case \"Pattern\":\n          baseCS = cs[1] || null;\n          if (baseCS) {\n            baseCS = this._parse(baseCS, xref, resources, pdfFunctionFactory);\n          }\n          return new PatternCS(baseCS);\n        case \"I\":\n        case \"Indexed\":\n          baseCS = this._parse(cs[1], xref, resources, pdfFunctionFactory);\n          const hiVal = xref.fetchIfRef(cs[2]) + 1;\n          const lookup = xref.fetchIfRef(cs[3]);\n          return new IndexedCS(baseCS, hiVal, lookup);\n        case \"Separation\":\n        case \"DeviceN\":\n          const name = xref.fetchIfRef(cs[1]);\n          numComps = Array.isArray(name) ? name.length : 1;\n          baseCS = this._parse(cs[2], xref, resources, pdfFunctionFactory);\n          const tintFn = pdfFunctionFactory.create(cs[3]);\n          return new AlternateCS(numComps, baseCS, tintFn);\n        case \"Lab\":\n          params = xref.fetchIfRef(cs[1]);\n          whitePoint = params.getArray(\"WhitePoint\");\n          blackPoint = params.getArray(\"BlackPoint\");\n          const range = params.getArray(\"Range\");\n          return new LabCS(whitePoint, blackPoint, range);\n        default:\n          throw new FormatError(`Unimplemented ColorSpace object: ${mode}`);\n      }\n    }\n    throw new FormatError(`Unrecognized ColorSpace object: ${cs}`);\n  }\n  static isDefaultDecode(decode, numComps) {\n    if (!Array.isArray(decode)) {\n      return true;\n    }\n    if (numComps * 2 !== decode.length) {\n      warn(\"The decode map is not the correct length\");\n      return true;\n    }\n    for (let i = 0, ii = decode.length; i < ii; i += 2) {\n      if (decode[i] !== 0 || decode[i + 1] !== 1) {\n        return false;\n      }\n    }\n    return true;\n  }\n  static get singletons() {\n    return shadow(this, \"singletons\", {\n      get gray() {\n        return shadow(this, \"gray\", new DeviceGrayCS());\n      },\n      get rgb() {\n        return shadow(this, \"rgb\", new DeviceRgbCS());\n      },\n      get cmyk() {\n        return shadow(this, \"cmyk\", new DeviceCmykCS());\n      }\n    });\n  }\n}\nclass AlternateCS extends ColorSpace {\n  constructor(numComps, base, tintFn) {\n    super(\"Alternate\", numComps);\n    this.base = base;\n    this.tintFn = tintFn;\n    this.tmpBuf = new Float32Array(base.numComps);\n  }\n  getRgbItem(src, srcOffset, dest, destOffset) {\n    const tmpBuf = this.tmpBuf;\n    this.tintFn(src, srcOffset, tmpBuf, 0);\n    this.base.getRgbItem(tmpBuf, 0, dest, destOffset);\n  }\n  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n    const tintFn = this.tintFn;\n    const base = this.base;\n    const scale = 1 / ((1 << bits) - 1);\n    const baseNumComps = base.numComps;\n    const usesZeroToOneRange = base.usesZeroToOneRange;\n    const isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) && alpha01 === 0;\n    let pos = isPassthrough ? destOffset : 0;\n    const baseBuf = isPassthrough ? dest : new Uint8ClampedArray(baseNumComps * count);\n    const numComps = this.numComps;\n    const scaled = new Float32Array(numComps);\n    const tinted = new Float32Array(baseNumComps);\n    let i, j;\n    for (i = 0; i < count; i++) {\n      for (j = 0; j < numComps; j++) {\n        scaled[j] = src[srcOffset++] * scale;\n      }\n      tintFn(scaled, 0, tinted, 0);\n      if (usesZeroToOneRange) {\n        for (j = 0; j < baseNumComps; j++) {\n          baseBuf[pos++] = tinted[j] * 255;\n        }\n      } else {\n        base.getRgbItem(tinted, 0, baseBuf, pos);\n        pos += baseNumComps;\n      }\n    }\n    if (!isPassthrough) {\n      base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8, alpha01);\n    }\n  }\n  getOutputLength(inputLength, alpha01) {\n    return this.base.getOutputLength(inputLength * this.base.numComps / this.numComps, alpha01);\n  }\n}\nclass PatternCS extends ColorSpace {\n  constructor(baseCS) {\n    super(\"Pattern\", null);\n    this.base = baseCS;\n  }\n  isDefaultDecode(decodeMap, bpc) {\n    unreachable(\"Should not call PatternCS.isDefaultDecode\");\n  }\n}\nclass IndexedCS extends ColorSpace {\n  constructor(base, highVal, lookup) {\n    super(\"Indexed\", 1);\n    this.base = base;\n    this.highVal = highVal;\n    const length = base.numComps * highVal;\n    this.lookup = new Uint8Array(length);\n    if (lookup instanceof BaseStream) {\n      const bytes = lookup.getBytes(length);\n      this.lookup.set(bytes);\n    } else if (typeof lookup === \"string\") {\n      for (let i = 0; i < length; ++i) {\n        this.lookup[i] = lookup.charCodeAt(i) & 0xff;\n      }\n    } else {\n      throw new FormatError(`IndexedCS - unrecognized lookup table: ${lookup}`);\n    }\n  }\n  getRgbItem(src, srcOffset, dest, destOffset) {\n    const numComps = this.base.numComps;\n    const start = src[srcOffset] * numComps;\n    this.base.getRgbBuffer(this.lookup, start, 1, dest, destOffset, 8, 0);\n  }\n  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n    const base = this.base;\n    const numComps = base.numComps;\n    const outputDelta = base.getOutputLength(numComps, alpha01);\n    const lookup = this.lookup;\n    for (let i = 0; i < count; ++i) {\n      const lookupPos = src[srcOffset++] * numComps;\n      base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01);\n      destOffset += outputDelta;\n    }\n  }\n  getOutputLength(inputLength, alpha01) {\n    return this.base.getOutputLength(inputLength * this.base.numComps, alpha01);\n  }\n  isDefaultDecode(decodeMap, bpc) {\n    if (!Array.isArray(decodeMap)) {\n      return true;\n    }\n    if (decodeMap.length !== 2) {\n      warn(\"Decode map length is not correct\");\n      return true;\n    }\n    if (!Number.isInteger(bpc) || bpc < 1) {\n      warn(\"Bits per component is not correct\");\n      return true;\n    }\n    return decodeMap[0] === 0 && decodeMap[1] === (1 << bpc) - 1;\n  }\n}\nclass DeviceGrayCS extends ColorSpace {\n  constructor() {\n    super(\"DeviceGray\", 1);\n  }\n  getRgbItem(src, srcOffset, dest, destOffset) {\n    const c = src[srcOffset] * 255;\n    dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c;\n  }\n  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n    const scale = 255 / ((1 << bits) - 1);\n    let j = srcOffset,\n      q = destOffset;\n    for (let i = 0; i < count; ++i) {\n      const c = scale * src[j++];\n      dest[q++] = c;\n      dest[q++] = c;\n      dest[q++] = c;\n      q += alpha01;\n    }\n  }\n  getOutputLength(inputLength, alpha01) {\n    return inputLength * (3 + alpha01);\n  }\n}\nclass DeviceRgbCS extends ColorSpace {\n  constructor() {\n    super(\"DeviceRGB\", 3);\n  }\n  getRgbItem(src, srcOffset, dest, destOffset) {\n    dest[destOffset] = src[srcOffset] * 255;\n    dest[destOffset + 1] = src[srcOffset + 1] * 255;\n    dest[destOffset + 2] = src[srcOffset + 2] * 255;\n  }\n  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n    if (bits === 8 && alpha01 === 0) {\n      dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset);\n      return;\n    }\n    const scale = 255 / ((1 << bits) - 1);\n    let j = srcOffset,\n      q = destOffset;\n    for (let i = 0; i < count; ++i) {\n      dest[q++] = scale * src[j++];\n      dest[q++] = scale * src[j++];\n      dest[q++] = scale * src[j++];\n      q += alpha01;\n    }\n  }\n  getOutputLength(inputLength, alpha01) {\n    return inputLength * (3 + alpha01) / 3 | 0;\n  }\n  isPassthrough(bits) {\n    return bits === 8;\n  }\n}\nclass DeviceCmykCS extends ColorSpace {\n  constructor() {\n    super(\"DeviceCMYK\", 4);\n  }\n  #toRgb(src, srcOffset, srcScale, dest, destOffset) {\n    const c = src[srcOffset] * srcScale;\n    const m = src[srcOffset + 1] * srcScale;\n    const y = src[srcOffset + 2] * srcScale;\n    const k = src[srcOffset + 3] * srcScale;\n    dest[destOffset] = 255 + c * (-4.387332384609988 * c + 54.48615194189176 * m + 18.82290502165302 * y + 212.25662451639585 * k + -285.2331026137004) + m * (1.7149763477362134 * m - 5.6096736904047315 * y + -17.873870861415444 * k - 5.497006427196366) + y * (-2.5217340131683033 * y - 21.248923337353073 * k + 17.5119270841813) + k * (-21.86122147463605 * k - 189.48180835922747);\n    dest[destOffset + 1] = 255 + c * (8.841041422036149 * c + 60.118027045597366 * m + 6.871425592049007 * y + 31.159100130055922 * k + -79.2970844816548) + m * (-15.310361306967817 * m + 17.575251261109482 * y + 131.35250912493976 * k - 190.9453302588951) + y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) + k * (-20.737325471181034 * k - 187.80453709719578);\n    dest[destOffset + 2] = 255 + c * (0.8842522430003296 * c + 8.078677503112928 * m + 30.89978309703729 * y - 0.23883238689178934 * k + -14.183576799673286) + m * (10.49593273432072 * m + 63.02378494754052 * y + 50.606957656360734 * k - 112.23884253719248) + y * (0.03296041114873217 * y + 115.60384449646641 * k + -193.58209356861505) + k * (-22.33816807309886 * k - 180.12613974708367);\n  }\n  getRgbItem(src, srcOffset, dest, destOffset) {\n    this.#toRgb(src, srcOffset, 1, dest, destOffset);\n  }\n  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n    const scale = 1 / ((1 << bits) - 1);\n    for (let i = 0; i < count; i++) {\n      this.#toRgb(src, srcOffset, scale, dest, destOffset);\n      srcOffset += 4;\n      destOffset += 3 + alpha01;\n    }\n  }\n  getOutputLength(inputLength, alpha01) {\n    return inputLength / 4 * (3 + alpha01) | 0;\n  }\n}\nclass CalGrayCS extends ColorSpace {\n  constructor(whitePoint, blackPoint, gamma) {\n    super(\"CalGray\", 1);\n    if (!whitePoint) {\n      throw new FormatError(\"WhitePoint missing - required for color space CalGray\");\n    }\n    [this.XW, this.YW, this.ZW] = whitePoint;\n    [this.XB, this.YB, this.ZB] = blackPoint || [0, 0, 0];\n    this.G = gamma || 1;\n    if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {\n      throw new FormatError(`Invalid WhitePoint components for ${this.name}, no fallback available`);\n    }\n    if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {\n      info(`Invalid BlackPoint for ${this.name}, falling back to default.`);\n      this.XB = this.YB = this.ZB = 0;\n    }\n    if (this.XB !== 0 || this.YB !== 0 || this.ZB !== 0) {\n      warn(`${this.name}, BlackPoint: XB: ${this.XB}, YB: ${this.YB}, ` + `ZB: ${this.ZB}, only default values are supported.`);\n    }\n    if (this.G < 1) {\n      info(`Invalid Gamma: ${this.G} for ${this.name}, falling back to default.`);\n      this.G = 1;\n    }\n  }\n  #toRgb(src, srcOffset, dest, destOffset, scale) {\n    const A = src[srcOffset] * scale;\n    const AG = A ** this.G;\n    const L = this.YW * AG;\n    const val = Math.max(295.8 * L ** 0.3333333333333333 - 40.8, 0);\n    dest[destOffset] = val;\n    dest[destOffset + 1] = val;\n    dest[destOffset + 2] = val;\n  }\n  getRgbItem(src, srcOffset, dest, destOffset) {\n    this.#toRgb(src, srcOffset, dest, destOffset, 1);\n  }\n  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n    const scale = 1 / ((1 << bits) - 1);\n    for (let i = 0; i < count; ++i) {\n      this.#toRgb(src, srcOffset, dest, destOffset, scale);\n      srcOffset += 1;\n      destOffset += 3 + alpha01;\n    }\n  }\n  getOutputLength(inputLength, alpha01) {\n    return inputLength * (3 + alpha01);\n  }\n}\nclass CalRGBCS extends ColorSpace {\n  static #BRADFORD_SCALE_MATRIX = new Float32Array([0.8951, 0.2664, -0.1614, -0.7502, 1.7135, 0.0367, 0.0389, -0.0685, 1.0296]);\n  static #BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([0.9869929, -0.1470543, 0.1599627, 0.4323053, 0.5183603, 0.0492912, -0.0085287, 0.0400428, 0.9684867]);\n  static #SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([3.2404542, -1.5371385, -0.4985314, -0.9692660, 1.8760108, 0.0415560, 0.0556434, -0.2040259, 1.0572252]);\n  static #FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]);\n  static #tempNormalizeMatrix = new Float32Array(3);\n  static #tempConvertMatrix1 = new Float32Array(3);\n  static #tempConvertMatrix2 = new Float32Array(3);\n  static #DECODE_L_CONSTANT = ((8 + 16) / 116) ** 3 / 8.0;\n  constructor(whitePoint, blackPoint, gamma, matrix) {\n    super(\"CalRGB\", 3);\n    if (!whitePoint) {\n      throw new FormatError(\"WhitePoint missing - required for color space CalRGB\");\n    }\n    const [XW, YW, ZW] = this.whitePoint = whitePoint;\n    const [XB, YB, ZB] = this.blackPoint = blackPoint || new Float32Array(3);\n    [this.GR, this.GG, this.GB] = gamma || new Float32Array([1, 1, 1]);\n    [this.MXA, this.MYA, this.MZA, this.MXB, this.MYB, this.MZB, this.MXC, this.MYC, this.MZC] = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]);\n    if (XW < 0 || ZW < 0 || YW !== 1) {\n      throw new FormatError(`Invalid WhitePoint components for ${this.name}, no fallback available`);\n    }\n    if (XB < 0 || YB < 0 || ZB < 0) {\n      info(`Invalid BlackPoint for ${this.name} [${XB}, ${YB}, ${ZB}], ` + \"falling back to default.\");\n      this.blackPoint = new Float32Array(3);\n    }\n    if (this.GR < 0 || this.GG < 0 || this.GB < 0) {\n      info(`Invalid Gamma [${this.GR}, ${this.GG}, ${this.GB}] for ` + `${this.name}, falling back to default.`);\n      this.GR = this.GG = this.GB = 1;\n    }\n  }\n  #matrixProduct(a, b, result) {\n    result[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n    result[1] = a[3] * b[0] + a[4] * b[1] + a[5] * b[2];\n    result[2] = a[6] * b[0] + a[7] * b[1] + a[8] * b[2];\n  }\n  #toFlat(sourceWhitePoint, LMS, result) {\n    result[0] = LMS[0] * 1 / sourceWhitePoint[0];\n    result[1] = LMS[1] * 1 / sourceWhitePoint[1];\n    result[2] = LMS[2] * 1 / sourceWhitePoint[2];\n  }\n  #toD65(sourceWhitePoint, LMS, result) {\n    const D65X = 0.95047;\n    const D65Y = 1;\n    const D65Z = 1.08883;\n    result[0] = LMS[0] * D65X / sourceWhitePoint[0];\n    result[1] = LMS[1] * D65Y / sourceWhitePoint[1];\n    result[2] = LMS[2] * D65Z / sourceWhitePoint[2];\n  }\n  #sRGBTransferFunction(color) {\n    if (color <= 0.0031308) {\n      return this.#adjustToRange(0, 1, 12.92 * color);\n    }\n    if (color >= 0.99554525) {\n      return 1;\n    }\n    return this.#adjustToRange(0, 1, (1 + 0.055) * color ** (1 / 2.4) - 0.055);\n  }\n  #adjustToRange(min, max, value) {\n    return Math.max(min, Math.min(max, value));\n  }\n  #decodeL(L) {\n    if (L < 0) {\n      return -this.#decodeL(-L);\n    }\n    if (L > 8.0) {\n      return ((L + 16) / 116) ** 3;\n    }\n    return L * CalRGBCS.#DECODE_L_CONSTANT;\n  }\n  #compensateBlackPoint(sourceBlackPoint, XYZ_Flat, result) {\n    if (sourceBlackPoint[0] === 0 && sourceBlackPoint[1] === 0 && sourceBlackPoint[2] === 0) {\n      result[0] = XYZ_Flat[0];\n      result[1] = XYZ_Flat[1];\n      result[2] = XYZ_Flat[2];\n      return;\n    }\n    const zeroDecodeL = this.#decodeL(0);\n    const X_DST = zeroDecodeL;\n    const X_SRC = this.#decodeL(sourceBlackPoint[0]);\n    const Y_DST = zeroDecodeL;\n    const Y_SRC = this.#decodeL(sourceBlackPoint[1]);\n    const Z_DST = zeroDecodeL;\n    const Z_SRC = this.#decodeL(sourceBlackPoint[2]);\n    const X_Scale = (1 - X_DST) / (1 - X_SRC);\n    const X_Offset = 1 - X_Scale;\n    const Y_Scale = (1 - Y_DST) / (1 - Y_SRC);\n    const Y_Offset = 1 - Y_Scale;\n    const Z_Scale = (1 - Z_DST) / (1 - Z_SRC);\n    const Z_Offset = 1 - Z_Scale;\n    result[0] = XYZ_Flat[0] * X_Scale + X_Offset;\n    result[1] = XYZ_Flat[1] * Y_Scale + Y_Offset;\n    result[2] = XYZ_Flat[2] * Z_Scale + Z_Offset;\n  }\n  #normalizeWhitePointToFlat(sourceWhitePoint, XYZ_In, result) {\n    if (sourceWhitePoint[0] === 1 && sourceWhitePoint[2] === 1) {\n      result[0] = XYZ_In[0];\n      result[1] = XYZ_In[1];\n      result[2] = XYZ_In[2];\n      return;\n    }\n    const LMS = result;\n    this.#matrixProduct(CalRGBCS.#BRADFORD_SCALE_MATRIX, XYZ_In, LMS);\n    const LMS_Flat = CalRGBCS.#tempNormalizeMatrix;\n    this.#toFlat(sourceWhitePoint, LMS, LMS_Flat);\n    this.#matrixProduct(CalRGBCS.#BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result);\n  }\n  #normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) {\n    const LMS = result;\n    this.#matrixProduct(CalRGBCS.#BRADFORD_SCALE_MATRIX, XYZ_In, LMS);\n    const LMS_D65 = CalRGBCS.#tempNormalizeMatrix;\n    this.#toD65(sourceWhitePoint, LMS, LMS_D65);\n    this.#matrixProduct(CalRGBCS.#BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result);\n  }\n  #toRgb(src, srcOffset, dest, destOffset, scale) {\n    const A = this.#adjustToRange(0, 1, src[srcOffset] * scale);\n    const B = this.#adjustToRange(0, 1, src[srcOffset + 1] * scale);\n    const C = this.#adjustToRange(0, 1, src[srcOffset + 2] * scale);\n    const AGR = A === 1 ? 1 : A ** this.GR;\n    const BGG = B === 1 ? 1 : B ** this.GG;\n    const CGB = C === 1 ? 1 : C ** this.GB;\n    const X = this.MXA * AGR + this.MXB * BGG + this.MXC * CGB;\n    const Y = this.MYA * AGR + this.MYB * BGG + this.MYC * CGB;\n    const Z = this.MZA * AGR + this.MZB * BGG + this.MZC * CGB;\n    const XYZ = CalRGBCS.#tempConvertMatrix1;\n    XYZ[0] = X;\n    XYZ[1] = Y;\n    XYZ[2] = Z;\n    const XYZ_Flat = CalRGBCS.#tempConvertMatrix2;\n    this.#normalizeWhitePointToFlat(this.whitePoint, XYZ, XYZ_Flat);\n    const XYZ_Black = CalRGBCS.#tempConvertMatrix1;\n    this.#compensateBlackPoint(this.blackPoint, XYZ_Flat, XYZ_Black);\n    const XYZ_D65 = CalRGBCS.#tempConvertMatrix2;\n    this.#normalizeWhitePointToD65(CalRGBCS.#FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65);\n    const SRGB = CalRGBCS.#tempConvertMatrix1;\n    this.#matrixProduct(CalRGBCS.#SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB);\n    dest[destOffset] = this.#sRGBTransferFunction(SRGB[0]) * 255;\n    dest[destOffset + 1] = this.#sRGBTransferFunction(SRGB[1]) * 255;\n    dest[destOffset + 2] = this.#sRGBTransferFunction(SRGB[2]) * 255;\n  }\n  getRgbItem(src, srcOffset, dest, destOffset) {\n    this.#toRgb(src, srcOffset, dest, destOffset, 1);\n  }\n  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n    const scale = 1 / ((1 << bits) - 1);\n    for (let i = 0; i < count; ++i) {\n      this.#toRgb(src, srcOffset, dest, destOffset, scale);\n      srcOffset += 3;\n      destOffset += 3 + alpha01;\n    }\n  }\n  getOutputLength(inputLength, alpha01) {\n    return inputLength * (3 + alpha01) / 3 | 0;\n  }\n}\nclass LabCS extends ColorSpace {\n  constructor(whitePoint, blackPoint, range) {\n    super(\"Lab\", 3);\n    if (!whitePoint) {\n      throw new FormatError(\"WhitePoint missing - required for color space Lab\");\n    }\n    [this.XW, this.YW, this.ZW] = whitePoint;\n    [this.amin, this.amax, this.bmin, this.bmax] = range || [-100, 100, -100, 100];\n    [this.XB, this.YB, this.ZB] = blackPoint || [0, 0, 0];\n    if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {\n      throw new FormatError(\"Invalid WhitePoint components, no fallback available\");\n    }\n    if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {\n      info(\"Invalid BlackPoint, falling back to default\");\n      this.XB = this.YB = this.ZB = 0;\n    }\n    if (this.amin > this.amax || this.bmin > this.bmax) {\n      info(\"Invalid Range, falling back to defaults\");\n      this.amin = -100;\n      this.amax = 100;\n      this.bmin = -100;\n      this.bmax = 100;\n    }\n  }\n  #fn_g(x) {\n    return x >= 6 / 29 ? x ** 3 : 108 / 841 * (x - 4 / 29);\n  }\n  #decode(value, high1, low2, high2) {\n    return low2 + value * (high2 - low2) / high1;\n  }\n  #toRgb(src, srcOffset, maxVal, dest, destOffset) {\n    let Ls = src[srcOffset];\n    let as = src[srcOffset + 1];\n    let bs = src[srcOffset + 2];\n    if (maxVal !== false) {\n      Ls = this.#decode(Ls, maxVal, 0, 100);\n      as = this.#decode(as, maxVal, this.amin, this.amax);\n      bs = this.#decode(bs, maxVal, this.bmin, this.bmax);\n    }\n    if (as > this.amax) {\n      as = this.amax;\n    } else if (as < this.amin) {\n      as = this.amin;\n    }\n    if (bs > this.bmax) {\n      bs = this.bmax;\n    } else if (bs < this.bmin) {\n      bs = this.bmin;\n    }\n    const M = (Ls + 16) / 116;\n    const L = M + as / 500;\n    const N = M - bs / 200;\n    const X = this.XW * this.#fn_g(L);\n    const Y = this.YW * this.#fn_g(M);\n    const Z = this.ZW * this.#fn_g(N);\n    let r, g, b;\n    if (this.ZW < 1) {\n      r = X * 3.1339 + Y * -1.617 + Z * -0.4906;\n      g = X * -0.9785 + Y * 1.916 + Z * 0.0333;\n      b = X * 0.072 + Y * -0.229 + Z * 1.4057;\n    } else {\n      r = X * 3.2406 + Y * -1.5372 + Z * -0.4986;\n      g = X * -0.9689 + Y * 1.8758 + Z * 0.0415;\n      b = X * 0.0557 + Y * -0.204 + Z * 1.057;\n    }\n    dest[destOffset] = Math.sqrt(r) * 255;\n    dest[destOffset + 1] = Math.sqrt(g) * 255;\n    dest[destOffset + 2] = Math.sqrt(b) * 255;\n  }\n  getRgbItem(src, srcOffset, dest, destOffset) {\n    this.#toRgb(src, srcOffset, false, dest, destOffset);\n  }\n  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n    const maxVal = (1 << bits) - 1;\n    for (let i = 0; i < count; i++) {\n      this.#toRgb(src, srcOffset, maxVal, dest, destOffset);\n      srcOffset += 3;\n      destOffset += 3 + alpha01;\n    }\n  }\n  getOutputLength(inputLength, alpha01) {\n    return inputLength * (3 + alpha01) / 3 | 0;\n  }\n  isDefaultDecode(decodeMap, bpc) {\n    return true;\n  }\n  get usesZeroToOneRange() {\n    return shadow(this, \"usesZeroToOneRange\", false);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/binary_cmap.js\n\nfunction hexToInt(a, size) {\n  let n = 0;\n  for (let i = 0; i <= size; i++) {\n    n = n << 8 | a[i];\n  }\n  return n >>> 0;\n}\nfunction hexToStr(a, size) {\n  if (size === 1) {\n    return String.fromCharCode(a[0], a[1]);\n  }\n  if (size === 3) {\n    return String.fromCharCode(a[0], a[1], a[2], a[3]);\n  }\n  return String.fromCharCode(...a.subarray(0, size + 1));\n}\nfunction addHex(a, b, size) {\n  let c = 0;\n  for (let i = size; i >= 0; i--) {\n    c += a[i] + b[i];\n    a[i] = c & 255;\n    c >>= 8;\n  }\n}\nfunction incHex(a, size) {\n  let c = 1;\n  for (let i = size; i >= 0 && c > 0; i--) {\n    c += a[i];\n    a[i] = c & 255;\n    c >>= 8;\n  }\n}\nconst MAX_NUM_SIZE = 16;\nconst MAX_ENCODED_NUM_SIZE = 19;\nclass BinaryCMapStream {\n  constructor(data) {\n    this.buffer = data;\n    this.pos = 0;\n    this.end = data.length;\n    this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE);\n  }\n  readByte() {\n    if (this.pos >= this.end) {\n      return -1;\n    }\n    return this.buffer[this.pos++];\n  }\n  readNumber() {\n    let n = 0;\n    let last;\n    do {\n      const b = this.readByte();\n      if (b < 0) {\n        throw new FormatError(\"unexpected EOF in bcmap\");\n      }\n      last = !(b & 0x80);\n      n = n << 7 | b & 0x7f;\n    } while (!last);\n    return n;\n  }\n  readSigned() {\n    const n = this.readNumber();\n    return n & 1 ? ~(n >>> 1) : n >>> 1;\n  }\n  readHex(num, size) {\n    num.set(this.buffer.subarray(this.pos, this.pos + size + 1));\n    this.pos += size + 1;\n  }\n  readHexNumber(num, size) {\n    let last;\n    const stack = this.tmpBuf;\n    let sp = 0;\n    do {\n      const b = this.readByte();\n      if (b < 0) {\n        throw new FormatError(\"unexpected EOF in bcmap\");\n      }\n      last = !(b & 0x80);\n      stack[sp++] = b & 0x7f;\n    } while (!last);\n    let i = size,\n      buffer = 0,\n      bufferSize = 0;\n    while (i >= 0) {\n      while (bufferSize < 8 && stack.length > 0) {\n        buffer |= stack[--sp] << bufferSize;\n        bufferSize += 7;\n      }\n      num[i] = buffer & 255;\n      i--;\n      buffer >>= 8;\n      bufferSize -= 8;\n    }\n  }\n  readHexSigned(num, size) {\n    this.readHexNumber(num, size);\n    const sign = num[size] & 1 ? 255 : 0;\n    let c = 0;\n    for (let i = 0; i <= size; i++) {\n      c = (c & 1) << 8 | num[i];\n      num[i] = c >> 1 ^ sign;\n    }\n  }\n  readString() {\n    const len = this.readNumber(),\n      buf = new Array(len);\n    for (let i = 0; i < len; i++) {\n      buf[i] = this.readNumber();\n    }\n    return String.fromCharCode(...buf);\n  }\n}\nclass BinaryCMapReader {\n  async process(data, cMap, extend) {\n    const stream = new BinaryCMapStream(data);\n    const header = stream.readByte();\n    cMap.vertical = !!(header & 1);\n    let useCMap = null;\n    const start = new Uint8Array(MAX_NUM_SIZE);\n    const end = new Uint8Array(MAX_NUM_SIZE);\n    const char = new Uint8Array(MAX_NUM_SIZE);\n    const charCode = new Uint8Array(MAX_NUM_SIZE);\n    const tmp = new Uint8Array(MAX_NUM_SIZE);\n    let code;\n    let b;\n    while ((b = stream.readByte()) >= 0) {\n      const type = b >> 5;\n      if (type === 7) {\n        switch (b & 0x1f) {\n          case 0:\n            stream.readString();\n            break;\n          case 1:\n            useCMap = stream.readString();\n            break;\n        }\n        continue;\n      }\n      const sequence = !!(b & 0x10);\n      const dataSize = b & 15;\n      if (dataSize + 1 > MAX_NUM_SIZE) {\n        throw new Error(\"BinaryCMapReader.process: Invalid dataSize.\");\n      }\n      const ucs2DataSize = 1;\n      const subitemsCount = stream.readNumber();\n      switch (type) {\n        case 0:\n          stream.readHex(start, dataSize);\n          stream.readHexNumber(end, dataSize);\n          addHex(end, start, dataSize);\n          cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize));\n          for (let i = 1; i < subitemsCount; i++) {\n            incHex(end, dataSize);\n            stream.readHexNumber(start, dataSize);\n            addHex(start, end, dataSize);\n            stream.readHexNumber(end, dataSize);\n            addHex(end, start, dataSize);\n            cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize));\n          }\n          break;\n        case 1:\n          stream.readHex(start, dataSize);\n          stream.readHexNumber(end, dataSize);\n          addHex(end, start, dataSize);\n          stream.readNumber();\n          for (let i = 1; i < subitemsCount; i++) {\n            incHex(end, dataSize);\n            stream.readHexNumber(start, dataSize);\n            addHex(start, end, dataSize);\n            stream.readHexNumber(end, dataSize);\n            addHex(end, start, dataSize);\n            stream.readNumber();\n          }\n          break;\n        case 2:\n          stream.readHex(char, dataSize);\n          code = stream.readNumber();\n          cMap.mapOne(hexToInt(char, dataSize), code);\n          for (let i = 1; i < subitemsCount; i++) {\n            incHex(char, dataSize);\n            if (!sequence) {\n              stream.readHexNumber(tmp, dataSize);\n              addHex(char, tmp, dataSize);\n            }\n            code = stream.readSigned() + (code + 1);\n            cMap.mapOne(hexToInt(char, dataSize), code);\n          }\n          break;\n        case 3:\n          stream.readHex(start, dataSize);\n          stream.readHexNumber(end, dataSize);\n          addHex(end, start, dataSize);\n          code = stream.readNumber();\n          cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code);\n          for (let i = 1; i < subitemsCount; i++) {\n            incHex(end, dataSize);\n            if (!sequence) {\n              stream.readHexNumber(start, dataSize);\n              addHex(start, end, dataSize);\n            } else {\n              start.set(end);\n            }\n            stream.readHexNumber(end, dataSize);\n            addHex(end, start, dataSize);\n            code = stream.readNumber();\n            cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code);\n          }\n          break;\n        case 4:\n          stream.readHex(char, ucs2DataSize);\n          stream.readHex(charCode, dataSize);\n          cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize));\n          for (let i = 1; i < subitemsCount; i++) {\n            incHex(char, ucs2DataSize);\n            if (!sequence) {\n              stream.readHexNumber(tmp, ucs2DataSize);\n              addHex(char, tmp, ucs2DataSize);\n            }\n            incHex(charCode, dataSize);\n            stream.readHexSigned(tmp, dataSize);\n            addHex(charCode, tmp, dataSize);\n            cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize));\n          }\n          break;\n        case 5:\n          stream.readHex(start, ucs2DataSize);\n          stream.readHexNumber(end, ucs2DataSize);\n          addHex(end, start, ucs2DataSize);\n          stream.readHex(charCode, dataSize);\n          cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize));\n          for (let i = 1; i < subitemsCount; i++) {\n            incHex(end, ucs2DataSize);\n            if (!sequence) {\n              stream.readHexNumber(start, ucs2DataSize);\n              addHex(start, end, ucs2DataSize);\n            } else {\n              start.set(end);\n            }\n            stream.readHexNumber(end, ucs2DataSize);\n            addHex(end, start, ucs2DataSize);\n            stream.readHex(charCode, dataSize);\n            cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize));\n          }\n          break;\n        default:\n          throw new Error(`BinaryCMapReader.process - unknown type: ${type}`);\n      }\n    }\n    if (useCMap) {\n      return extend(useCMap);\n    }\n    return cMap;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/decode_stream.js\n\n\nconst emptyBuffer = new Uint8Array(0);\nclass DecodeStream extends BaseStream {\n  constructor(maybeMinBufferLength) {\n    super();\n    this._rawMinBufferLength = maybeMinBufferLength || 0;\n    this.pos = 0;\n    this.bufferLength = 0;\n    this.eof = false;\n    this.buffer = emptyBuffer;\n    this.minBufferLength = 512;\n    if (maybeMinBufferLength) {\n      while (this.minBufferLength < maybeMinBufferLength) {\n        this.minBufferLength *= 2;\n      }\n    }\n  }\n  get isEmpty() {\n    while (!this.eof && this.bufferLength === 0) {\n      this.readBlock();\n    }\n    return this.bufferLength === 0;\n  }\n  ensureBuffer(requested) {\n    const buffer = this.buffer;\n    if (requested <= buffer.byteLength) {\n      return buffer;\n    }\n    let size = this.minBufferLength;\n    while (size < requested) {\n      size *= 2;\n    }\n    const buffer2 = new Uint8Array(size);\n    buffer2.set(buffer);\n    return this.buffer = buffer2;\n  }\n  getByte() {\n    const pos = this.pos;\n    while (this.bufferLength <= pos) {\n      if (this.eof) {\n        return -1;\n      }\n      this.readBlock();\n    }\n    return this.buffer[this.pos++];\n  }\n  getBytes(length, ignoreColorSpace = false) {\n    const pos = this.pos;\n    let end;\n    if (length) {\n      this.ensureBuffer(pos + length);\n      end = pos + length;\n      while (!this.eof && this.bufferLength < end) {\n        this.readBlock(ignoreColorSpace);\n      }\n      const bufEnd = this.bufferLength;\n      if (end > bufEnd) {\n        end = bufEnd;\n      }\n    } else {\n      while (!this.eof) {\n        this.readBlock(ignoreColorSpace);\n      }\n      end = this.bufferLength;\n    }\n    this.pos = end;\n    return this.buffer.subarray(pos, end);\n  }\n  reset() {\n    this.pos = 0;\n  }\n  makeSubStream(start, length, dict = null) {\n    if (length === undefined) {\n      while (!this.eof) {\n        this.readBlock();\n      }\n    } else {\n      const end = start + length;\n      while (this.bufferLength <= end && !this.eof) {\n        this.readBlock();\n      }\n    }\n    return new Stream(this.buffer, start, length, dict);\n  }\n  getBaseStreams() {\n    return this.str ? this.str.getBaseStreams() : null;\n  }\n}\nclass StreamsSequenceStream extends DecodeStream {\n  constructor(streams, onError = null) {\n    let maybeLength = 0;\n    for (const stream of streams) {\n      maybeLength += stream instanceof DecodeStream ? stream._rawMinBufferLength : stream.length;\n    }\n    super(maybeLength);\n    this.streams = streams;\n    this._onError = onError;\n  }\n  readBlock() {\n    const streams = this.streams;\n    if (streams.length === 0) {\n      this.eof = true;\n      return;\n    }\n    const stream = streams.shift();\n    let chunk;\n    try {\n      chunk = stream.getBytes();\n    } catch (reason) {\n      if (this._onError) {\n        this._onError(reason, stream.dict?.objId);\n        return;\n      }\n      throw reason;\n    }\n    const bufferLength = this.bufferLength;\n    const newLength = bufferLength + chunk.length;\n    const buffer = this.ensureBuffer(newLength);\n    buffer.set(chunk, bufferLength);\n    this.bufferLength = newLength;\n  }\n  getBaseStreams() {\n    const baseStreamsBuf = [];\n    for (const stream of this.streams) {\n      const baseStreams = stream.getBaseStreams();\n      if (baseStreams) {\n        baseStreamsBuf.push(...baseStreams);\n      }\n    }\n    return baseStreamsBuf.length > 0 ? baseStreamsBuf : null;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/ascii_85_stream.js\n\n\nclass Ascii85Stream extends DecodeStream {\n  constructor(str, maybeLength) {\n    if (maybeLength) {\n      maybeLength *= 0.8;\n    }\n    super(maybeLength);\n    this.str = str;\n    this.dict = str.dict;\n    this.input = new Uint8Array(5);\n  }\n  readBlock() {\n    const TILDA_CHAR = 0x7e;\n    const Z_LOWER_CHAR = 0x7a;\n    const EOF = -1;\n    const str = this.str;\n    let c = str.getByte();\n    while (isWhiteSpace(c)) {\n      c = str.getByte();\n    }\n    if (c === EOF || c === TILDA_CHAR) {\n      this.eof = true;\n      return;\n    }\n    const bufferLength = this.bufferLength;\n    let buffer, i;\n    if (c === Z_LOWER_CHAR) {\n      buffer = this.ensureBuffer(bufferLength + 4);\n      for (i = 0; i < 4; ++i) {\n        buffer[bufferLength + i] = 0;\n      }\n      this.bufferLength += 4;\n    } else {\n      const input = this.input;\n      input[0] = c;\n      for (i = 1; i < 5; ++i) {\n        c = str.getByte();\n        while (isWhiteSpace(c)) {\n          c = str.getByte();\n        }\n        input[i] = c;\n        if (c === EOF || c === TILDA_CHAR) {\n          break;\n        }\n      }\n      buffer = this.ensureBuffer(bufferLength + i - 1);\n      this.bufferLength += i - 1;\n      if (i < 5) {\n        for (; i < 5; ++i) {\n          input[i] = 0x21 + 84;\n        }\n        this.eof = true;\n      }\n      let t = 0;\n      for (i = 0; i < 5; ++i) {\n        t = t * 85 + (input[i] - 0x21);\n      }\n      for (i = 3; i >= 0; --i) {\n        buffer[bufferLength + i] = t & 0xff;\n        t >>= 8;\n      }\n    }\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/ascii_hex_stream.js\n\nclass AsciiHexStream extends DecodeStream {\n  constructor(str, maybeLength) {\n    if (maybeLength) {\n      maybeLength *= 0.5;\n    }\n    super(maybeLength);\n    this.str = str;\n    this.dict = str.dict;\n    this.firstDigit = -1;\n  }\n  readBlock() {\n    const UPSTREAM_BLOCK_SIZE = 8000;\n    const bytes = this.str.getBytes(UPSTREAM_BLOCK_SIZE);\n    if (!bytes.length) {\n      this.eof = true;\n      return;\n    }\n    const maxDecodeLength = bytes.length + 1 >> 1;\n    const buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength);\n    let bufferLength = this.bufferLength;\n    let firstDigit = this.firstDigit;\n    for (const ch of bytes) {\n      let digit;\n      if (ch >= 0x30 && ch <= 0x39) {\n        digit = ch & 0x0f;\n      } else if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) {\n        digit = (ch & 0x0f) + 9;\n      } else if (ch === 0x3e) {\n        this.eof = true;\n        break;\n      } else {\n        continue;\n      }\n      if (firstDigit < 0) {\n        firstDigit = digit;\n      } else {\n        buffer[bufferLength++] = firstDigit << 4 | digit;\n        firstDigit = -1;\n      }\n    }\n    if (firstDigit >= 0 && this.eof) {\n      buffer[bufferLength++] = firstDigit << 4;\n      firstDigit = -1;\n    }\n    this.firstDigit = firstDigit;\n    this.bufferLength = bufferLength;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/ccitt.js\n\nconst ccittEOL = -2;\nconst ccittEOF = -1;\nconst twoDimPass = 0;\nconst twoDimHoriz = 1;\nconst twoDimVert0 = 2;\nconst twoDimVertR1 = 3;\nconst twoDimVertL1 = 4;\nconst twoDimVertR2 = 5;\nconst twoDimVertL2 = 6;\nconst twoDimVertR3 = 7;\nconst twoDimVertL3 = 8;\nconst twoDimTable = [[-1, -1], [-1, -1], [7, twoDimVertL3], [7, twoDimVertR3], [6, twoDimVertL2], [6, twoDimVertL2], [6, twoDimVertR2], [6, twoDimVertR2], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0]];\nconst whiteTable1 = [[-1, -1], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [12, 1984], [12, 2048], [12, 2112], [12, 2176], [12, 2240], [12, 2304], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [12, 2368], [12, 2432], [12, 2496], [12, 2560]];\nconst whiteTable2 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [8, 29], [8, 29], [8, 30], [8, 30], [8, 45], [8, 45], [8, 46], [8, 46], [7, 22], [7, 22], [7, 22], [7, 22], [7, 23], [7, 23], [7, 23], [7, 23], [8, 47], [8, 47], [8, 48], [8, 48], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [7, 20], [7, 20], [7, 20], [7, 20], [8, 33], [8, 33], [8, 34], [8, 34], [8, 35], [8, 35], [8, 36], [8, 36], [8, 37], [8, 37], [8, 38], [8, 38], [7, 19], [7, 19], [7, 19], [7, 19], [8, 31], [8, 31], [8, 32], [8, 32], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [8, 53], [8, 53], [8, 54], [8, 54], [7, 26], [7, 26], [7, 26], [7, 26], [8, 39], [8, 39], [8, 40], [8, 40], [8, 41], [8, 41], [8, 42], [8, 42], [8, 43], [8, 43], [8, 44], [8, 44], [7, 21], [7, 21], [7, 21], [7, 21], [7, 28], [7, 28], [7, 28], [7, 28], [8, 61], [8, 61], [8, 62], [8, 62], [8, 63], [8, 63], [8, 0], [8, 0], [8, 320], [8, 320], [8, 384], [8, 384], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [7, 27], [7, 27], [7, 27], [7, 27], [8, 59], [8, 59], [8, 60], [8, 60], [9, 1472], [9, 1536], [9, 1600], [9, 1728], [7, 18], [7, 18], [7, 18], [7, 18], [7, 24], [7, 24], [7, 24], [7, 24], [8, 49], [8, 49], [8, 50], [8, 50], [8, 51], [8, 51], [8, 52], [8, 52], [7, 25], [7, 25], [7, 25], [7, 25], [8, 55], [8, 55], [8, 56], [8, 56], [8, 57], [8, 57], [8, 58], [8, 58], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [8, 448], [8, 448], [8, 512], [8, 512], [9, 704], [9, 768], [8, 640], [8, 640], [8, 576], [8, 576], [9, 832], [9, 896], [9, 960], [9, 1024], [9, 1088], [9, 1152], [9, 1216], [9, 1280], [9, 1344], [9, 1408], [7, 256], [7, 256], [7, 256], [7, 256], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [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], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7]];\nconst blackTable1 = [[-1, -1], [-1, -1], [12, ccittEOL], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [11, 1792], [11, 1792], [12, 1984], [12, 1984], [12, 2048], [12, 2048], [12, 2112], [12, 2112], [12, 2176], [12, 2176], [12, 2240], [12, 2240], [12, 2304], [12, 2304], [11, 1856], [11, 1856], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [11, 1920], [11, 1920], [12, 2368], [12, 2368], [12, 2432], [12, 2432], [12, 2496], [12, 2496], [12, 2560], [12, 2560], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [12, 52], [12, 52], [13, 640], [13, 704], [13, 768], [13, 832], [12, 55], [12, 55], [12, 56], [12, 56], [13, 1280], [13, 1344], [13, 1408], [13, 1472], [12, 59], [12, 59], [12, 60], [12, 60], [13, 1536], [13, 1600], [11, 24], [11, 24], [11, 24], [11, 24], [11, 25], [11, 25], [11, 25], [11, 25], [13, 1664], [13, 1728], [12, 320], [12, 320], [12, 384], [12, 384], [12, 448], [12, 448], [13, 512], [13, 576], [12, 53], [12, 53], [12, 54], [12, 54], [13, 896], [13, 960], [13, 1024], [13, 1088], [13, 1152], [13, 1216], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64]];\nconst blackTable2 = [[8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [11, 23], [11, 23], [12, 50], [12, 51], [12, 44], [12, 45], [12, 46], [12, 47], [12, 57], [12, 58], [12, 61], [12, 256], [10, 16], [10, 16], [10, 16], [10, 16], [10, 17], [10, 17], [10, 17], [10, 17], [12, 48], [12, 49], [12, 62], [12, 63], [12, 30], [12, 31], [12, 32], [12, 33], [12, 40], [12, 41], [11, 22], [11, 22], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [12, 128], [12, 192], [12, 26], [12, 27], [12, 28], [12, 29], [11, 19], [11, 19], [11, 20], [11, 20], [12, 34], [12, 35], [12, 36], [12, 37], [12, 38], [12, 39], [11, 21], [11, 21], [12, 42], [12, 43], [10, 0], [10, 0], [10, 0], [10, 0], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12]];\nconst blackTable3 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [6, 9], [6, 8], [5, 7], [5, 7], [4, 6], [4, 6], [4, 6], [4, 6], [4, 5], [4, 5], [4, 5], [4, 5], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [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, 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]];\nclass CCITTFaxDecoder {\n  constructor(source, options = {}) {\n    if (!source || typeof source.next !== \"function\") {\n      throw new Error('CCITTFaxDecoder - invalid \"source\" parameter.');\n    }\n    this.source = source;\n    this.eof = false;\n    this.encoding = options.K || 0;\n    this.eoline = options.EndOfLine || false;\n    this.byteAlign = options.EncodedByteAlign || false;\n    this.columns = options.Columns || 1728;\n    this.rows = options.Rows || 0;\n    this.eoblock = options.EndOfBlock ?? true;\n    this.black = options.BlackIs1 || false;\n    this.codingLine = new Uint32Array(this.columns + 1);\n    this.refLine = new Uint32Array(this.columns + 2);\n    this.codingLine[0] = this.columns;\n    this.codingPos = 0;\n    this.row = 0;\n    this.nextLine2D = this.encoding < 0;\n    this.inputBits = 0;\n    this.inputBuf = 0;\n    this.outputBits = 0;\n    this.rowsDone = false;\n    let code1;\n    while ((code1 = this._lookBits(12)) === 0) {\n      this._eatBits(1);\n    }\n    if (code1 === 1) {\n      this._eatBits(12);\n    }\n    if (this.encoding > 0) {\n      this.nextLine2D = !this._lookBits(1);\n      this._eatBits(1);\n    }\n  }\n  readNextChar() {\n    if (this.eof) {\n      return -1;\n    }\n    const refLine = this.refLine;\n    const codingLine = this.codingLine;\n    const columns = this.columns;\n    let refPos, blackPixels, bits, i;\n    if (this.outputBits === 0) {\n      if (this.rowsDone) {\n        this.eof = true;\n      }\n      if (this.eof) {\n        return -1;\n      }\n      this.err = false;\n      let code1, code2, code3;\n      if (this.nextLine2D) {\n        for (i = 0; codingLine[i] < columns; ++i) {\n          refLine[i] = codingLine[i];\n        }\n        refLine[i++] = columns;\n        refLine[i] = columns;\n        codingLine[0] = 0;\n        this.codingPos = 0;\n        refPos = 0;\n        blackPixels = 0;\n        while (codingLine[this.codingPos] < columns) {\n          code1 = this._getTwoDimCode();\n          switch (code1) {\n            case twoDimPass:\n              this._addPixels(refLine[refPos + 1], blackPixels);\n              if (refLine[refPos + 1] < columns) {\n                refPos += 2;\n              }\n              break;\n            case twoDimHoriz:\n              code1 = code2 = 0;\n              if (blackPixels) {\n                do {\n                  code1 += code3 = this._getBlackCode();\n                } while (code3 >= 64);\n                do {\n                  code2 += code3 = this._getWhiteCode();\n                } while (code3 >= 64);\n              } else {\n                do {\n                  code1 += code3 = this._getWhiteCode();\n                } while (code3 >= 64);\n                do {\n                  code2 += code3 = this._getBlackCode();\n                } while (code3 >= 64);\n              }\n              this._addPixels(codingLine[this.codingPos] + code1, blackPixels);\n              if (codingLine[this.codingPos] < columns) {\n                this._addPixels(codingLine[this.codingPos] + code2, blackPixels ^ 1);\n              }\n              while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\n                refPos += 2;\n              }\n              break;\n            case twoDimVertR3:\n              this._addPixels(refLine[refPos] + 3, blackPixels);\n              blackPixels ^= 1;\n              if (codingLine[this.codingPos] < columns) {\n                ++refPos;\n                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\n                  refPos += 2;\n                }\n              }\n              break;\n            case twoDimVertR2:\n              this._addPixels(refLine[refPos] + 2, blackPixels);\n              blackPixels ^= 1;\n              if (codingLine[this.codingPos] < columns) {\n                ++refPos;\n                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\n                  refPos += 2;\n                }\n              }\n              break;\n            case twoDimVertR1:\n              this._addPixels(refLine[refPos] + 1, blackPixels);\n              blackPixels ^= 1;\n              if (codingLine[this.codingPos] < columns) {\n                ++refPos;\n                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\n                  refPos += 2;\n                }\n              }\n              break;\n            case twoDimVert0:\n              this._addPixels(refLine[refPos], blackPixels);\n              blackPixels ^= 1;\n              if (codingLine[this.codingPos] < columns) {\n                ++refPos;\n                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\n                  refPos += 2;\n                }\n              }\n              break;\n            case twoDimVertL3:\n              this._addPixelsNeg(refLine[refPos] - 3, blackPixels);\n              blackPixels ^= 1;\n              if (codingLine[this.codingPos] < columns) {\n                if (refPos > 0) {\n                  --refPos;\n                } else {\n                  ++refPos;\n                }\n                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\n                  refPos += 2;\n                }\n              }\n              break;\n            case twoDimVertL2:\n              this._addPixelsNeg(refLine[refPos] - 2, blackPixels);\n              blackPixels ^= 1;\n              if (codingLine[this.codingPos] < columns) {\n                if (refPos > 0) {\n                  --refPos;\n                } else {\n                  ++refPos;\n                }\n                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\n                  refPos += 2;\n                }\n              }\n              break;\n            case twoDimVertL1:\n              this._addPixelsNeg(refLine[refPos] - 1, blackPixels);\n              blackPixels ^= 1;\n              if (codingLine[this.codingPos] < columns) {\n                if (refPos > 0) {\n                  --refPos;\n                } else {\n                  ++refPos;\n                }\n                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\n                  refPos += 2;\n                }\n              }\n              break;\n            case ccittEOF:\n              this._addPixels(columns, 0);\n              this.eof = true;\n              break;\n            default:\n              info(\"bad 2d code\");\n              this._addPixels(columns, 0);\n              this.err = true;\n          }\n        }\n      } else {\n        codingLine[0] = 0;\n        this.codingPos = 0;\n        blackPixels = 0;\n        while (codingLine[this.codingPos] < columns) {\n          code1 = 0;\n          if (blackPixels) {\n            do {\n              code1 += code3 = this._getBlackCode();\n            } while (code3 >= 64);\n          } else {\n            do {\n              code1 += code3 = this._getWhiteCode();\n            } while (code3 >= 64);\n          }\n          this._addPixels(codingLine[this.codingPos] + code1, blackPixels);\n          blackPixels ^= 1;\n        }\n      }\n      let gotEOL = false;\n      if (this.byteAlign) {\n        this.inputBits &= ~7;\n      }\n      if (!this.eoblock && this.row === this.rows - 1) {\n        this.rowsDone = true;\n      } else {\n        code1 = this._lookBits(12);\n        if (this.eoline) {\n          while (code1 !== ccittEOF && code1 !== 1) {\n            this._eatBits(1);\n            code1 = this._lookBits(12);\n          }\n        } else {\n          while (code1 === 0) {\n            this._eatBits(1);\n            code1 = this._lookBits(12);\n          }\n        }\n        if (code1 === 1) {\n          this._eatBits(12);\n          gotEOL = true;\n        } else if (code1 === ccittEOF) {\n          this.eof = true;\n        }\n      }\n      if (!this.eof && this.encoding > 0 && !this.rowsDone) {\n        this.nextLine2D = !this._lookBits(1);\n        this._eatBits(1);\n      }\n      if (this.eoblock && gotEOL && this.byteAlign) {\n        code1 = this._lookBits(12);\n        if (code1 === 1) {\n          this._eatBits(12);\n          if (this.encoding > 0) {\n            this._lookBits(1);\n            this._eatBits(1);\n          }\n          if (this.encoding >= 0) {\n            for (i = 0; i < 4; ++i) {\n              code1 = this._lookBits(12);\n              if (code1 !== 1) {\n                info(\"bad rtc code: \" + code1);\n              }\n              this._eatBits(12);\n              if (this.encoding > 0) {\n                this._lookBits(1);\n                this._eatBits(1);\n              }\n            }\n          }\n          this.eof = true;\n        }\n      } else if (this.err && this.eoline) {\n        while (true) {\n          code1 = this._lookBits(13);\n          if (code1 === ccittEOF) {\n            this.eof = true;\n            return -1;\n          }\n          if (code1 >> 1 === 1) {\n            break;\n          }\n          this._eatBits(1);\n        }\n        this._eatBits(12);\n        if (this.encoding > 0) {\n          this._eatBits(1);\n          this.nextLine2D = !(code1 & 1);\n        }\n      }\n      this.outputBits = codingLine[0] > 0 ? codingLine[this.codingPos = 0] : codingLine[this.codingPos = 1];\n      this.row++;\n    }\n    let c;\n    if (this.outputBits >= 8) {\n      c = this.codingPos & 1 ? 0 : 0xff;\n      this.outputBits -= 8;\n      if (this.outputBits === 0 && codingLine[this.codingPos] < columns) {\n        this.codingPos++;\n        this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1];\n      }\n    } else {\n      bits = 8;\n      c = 0;\n      do {\n        if (typeof this.outputBits !== \"number\") {\n          throw new FormatError('Invalid /CCITTFaxDecode data, \"outputBits\" must be a number.');\n        }\n        if (this.outputBits > bits) {\n          c <<= bits;\n          if (!(this.codingPos & 1)) {\n            c |= 0xff >> 8 - bits;\n          }\n          this.outputBits -= bits;\n          bits = 0;\n        } else {\n          c <<= this.outputBits;\n          if (!(this.codingPos & 1)) {\n            c |= 0xff >> 8 - this.outputBits;\n          }\n          bits -= this.outputBits;\n          this.outputBits = 0;\n          if (codingLine[this.codingPos] < columns) {\n            this.codingPos++;\n            this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1];\n          } else if (bits > 0) {\n            c <<= bits;\n            bits = 0;\n          }\n        }\n      } while (bits);\n    }\n    if (this.black) {\n      c ^= 0xff;\n    }\n    return c;\n  }\n  _addPixels(a1, blackPixels) {\n    const codingLine = this.codingLine;\n    let codingPos = this.codingPos;\n    if (a1 > codingLine[codingPos]) {\n      if (a1 > this.columns) {\n        info(\"row is wrong length\");\n        this.err = true;\n        a1 = this.columns;\n      }\n      if (codingPos & 1 ^ blackPixels) {\n        ++codingPos;\n      }\n      codingLine[codingPos] = a1;\n    }\n    this.codingPos = codingPos;\n  }\n  _addPixelsNeg(a1, blackPixels) {\n    const codingLine = this.codingLine;\n    let codingPos = this.codingPos;\n    if (a1 > codingLine[codingPos]) {\n      if (a1 > this.columns) {\n        info(\"row is wrong length\");\n        this.err = true;\n        a1 = this.columns;\n      }\n      if (codingPos & 1 ^ blackPixels) {\n        ++codingPos;\n      }\n      codingLine[codingPos] = a1;\n    } else if (a1 < codingLine[codingPos]) {\n      if (a1 < 0) {\n        info(\"invalid code\");\n        this.err = true;\n        a1 = 0;\n      }\n      while (codingPos > 0 && a1 < codingLine[codingPos - 1]) {\n        --codingPos;\n      }\n      codingLine[codingPos] = a1;\n    }\n    this.codingPos = codingPos;\n  }\n  _findTableCode(start, end, table, limit) {\n    const limitValue = limit || 0;\n    for (let i = start; i <= end; ++i) {\n      let code = this._lookBits(i);\n      if (code === ccittEOF) {\n        return [true, 1, false];\n      }\n      if (i < end) {\n        code <<= end - i;\n      }\n      if (!limitValue || code >= limitValue) {\n        const p = table[code - limitValue];\n        if (p[0] === i) {\n          this._eatBits(i);\n          return [true, p[1], true];\n        }\n      }\n    }\n    return [false, 0, false];\n  }\n  _getTwoDimCode() {\n    let code = 0;\n    let p;\n    if (this.eoblock) {\n      code = this._lookBits(7);\n      p = twoDimTable[code];\n      if (p?.[0] > 0) {\n        this._eatBits(p[0]);\n        return p[1];\n      }\n    } else {\n      const result = this._findTableCode(1, 7, twoDimTable);\n      if (result[0] && result[2]) {\n        return result[1];\n      }\n    }\n    info(\"Bad two dim code\");\n    return ccittEOF;\n  }\n  _getWhiteCode() {\n    let code = 0;\n    let p;\n    if (this.eoblock) {\n      code = this._lookBits(12);\n      if (code === ccittEOF) {\n        return 1;\n      }\n      p = code >> 5 === 0 ? whiteTable1[code] : whiteTable2[code >> 3];\n      if (p[0] > 0) {\n        this._eatBits(p[0]);\n        return p[1];\n      }\n    } else {\n      let result = this._findTableCode(1, 9, whiteTable2);\n      if (result[0]) {\n        return result[1];\n      }\n      result = this._findTableCode(11, 12, whiteTable1);\n      if (result[0]) {\n        return result[1];\n      }\n    }\n    info(\"bad white code\");\n    this._eatBits(1);\n    return 1;\n  }\n  _getBlackCode() {\n    let code, p;\n    if (this.eoblock) {\n      code = this._lookBits(13);\n      if (code === ccittEOF) {\n        return 1;\n      }\n      if (code >> 7 === 0) {\n        p = blackTable1[code];\n      } else if (code >> 9 === 0 && code >> 7 !== 0) {\n        p = blackTable2[(code >> 1) - 64];\n      } else {\n        p = blackTable3[code >> 7];\n      }\n      if (p[0] > 0) {\n        this._eatBits(p[0]);\n        return p[1];\n      }\n    } else {\n      let result = this._findTableCode(2, 6, blackTable3);\n      if (result[0]) {\n        return result[1];\n      }\n      result = this._findTableCode(7, 12, blackTable2, 64);\n      if (result[0]) {\n        return result[1];\n      }\n      result = this._findTableCode(10, 13, blackTable1);\n      if (result[0]) {\n        return result[1];\n      }\n    }\n    info(\"bad black code\");\n    this._eatBits(1);\n    return 1;\n  }\n  _lookBits(n) {\n    let c;\n    while (this.inputBits < n) {\n      if ((c = this.source.next()) === -1) {\n        if (this.inputBits === 0) {\n          return ccittEOF;\n        }\n        return this.inputBuf << n - this.inputBits & 0xffff >> 16 - n;\n      }\n      this.inputBuf = this.inputBuf << 8 | c;\n      this.inputBits += 8;\n    }\n    return this.inputBuf >> this.inputBits - n & 0xffff >> 16 - n;\n  }\n  _eatBits(n) {\n    if ((this.inputBits -= n) < 0) {\n      this.inputBits = 0;\n    }\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/ccitt_stream.js\n\n\n\nclass CCITTFaxStream extends DecodeStream {\n  constructor(str, maybeLength, params) {\n    super(maybeLength);\n    this.str = str;\n    this.dict = str.dict;\n    if (!(params instanceof Dict)) {\n      params = Dict.empty;\n    }\n    const source = {\n      next() {\n        return str.getByte();\n      }\n    };\n    this.ccittFaxDecoder = new CCITTFaxDecoder(source, {\n      K: params.get(\"K\"),\n      EndOfLine: params.get(\"EndOfLine\"),\n      EncodedByteAlign: params.get(\"EncodedByteAlign\"),\n      Columns: params.get(\"Columns\"),\n      Rows: params.get(\"Rows\"),\n      EndOfBlock: params.get(\"EndOfBlock\"),\n      BlackIs1: params.get(\"BlackIs1\")\n    });\n  }\n  readBlock() {\n    while (!this.eof) {\n      const c = this.ccittFaxDecoder.readNextChar();\n      if (c === -1) {\n        this.eof = true;\n        return;\n      }\n      this.ensureBuffer(this.bufferLength + 1);\n      this.buffer[this.bufferLength++] = c;\n    }\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/flate_stream.js\n\n\nconst codeLenCodeMap = new Int32Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nconst lengthDecode = new Int32Array([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]);\nconst distDecode = new Int32Array([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]);\nconst fixedLitCodeTab = [new Int32Array([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];\nconst fixedDistCodeTab = [new Int32Array([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];\nclass FlateStream extends DecodeStream {\n  constructor(str, maybeLength) {\n    super(maybeLength);\n    this.str = str;\n    this.dict = str.dict;\n    const cmf = str.getByte();\n    const flg = str.getByte();\n    if (cmf === -1 || flg === -1) {\n      throw new FormatError(`Invalid header in flate stream: ${cmf}, ${flg}`);\n    }\n    if ((cmf & 0x0f) !== 0x08) {\n      throw new FormatError(`Unknown compression method in flate stream: ${cmf}, ${flg}`);\n    }\n    if (((cmf << 8) + flg) % 31 !== 0) {\n      throw new FormatError(`Bad FCHECK in flate stream: ${cmf}, ${flg}`);\n    }\n    if (flg & 0x20) {\n      throw new FormatError(`FDICT bit set in flate stream: ${cmf}, ${flg}`);\n    }\n    this.codeSize = 0;\n    this.codeBuf = 0;\n  }\n  getBits(bits) {\n    const str = this.str;\n    let codeSize = this.codeSize;\n    let codeBuf = this.codeBuf;\n    let b;\n    while (codeSize < bits) {\n      if ((b = str.getByte()) === -1) {\n        throw new FormatError(\"Bad encoding in flate stream\");\n      }\n      codeBuf |= b << codeSize;\n      codeSize += 8;\n    }\n    b = codeBuf & (1 << bits) - 1;\n    this.codeBuf = codeBuf >> bits;\n    this.codeSize = codeSize -= bits;\n    return b;\n  }\n  getCode(table) {\n    const str = this.str;\n    const codes = table[0];\n    const maxLen = table[1];\n    let codeSize = this.codeSize;\n    let codeBuf = this.codeBuf;\n    let b;\n    while (codeSize < maxLen) {\n      if ((b = str.getByte()) === -1) {\n        break;\n      }\n      codeBuf |= b << codeSize;\n      codeSize += 8;\n    }\n    const code = codes[codeBuf & (1 << maxLen) - 1];\n    const codeLen = code >> 16;\n    const codeVal = code & 0xffff;\n    if (codeLen < 1 || codeSize < codeLen) {\n      throw new FormatError(\"Bad encoding in flate stream\");\n    }\n    this.codeBuf = codeBuf >> codeLen;\n    this.codeSize = codeSize - codeLen;\n    return codeVal;\n  }\n  generateHuffmanTable(lengths) {\n    const n = lengths.length;\n    let maxLen = 0;\n    let i;\n    for (i = 0; i < n; ++i) {\n      if (lengths[i] > maxLen) {\n        maxLen = lengths[i];\n      }\n    }\n    const size = 1 << maxLen;\n    const codes = new Int32Array(size);\n    for (let len = 1, code = 0, skip = 2; len <= maxLen; ++len, code <<= 1, skip <<= 1) {\n      for (let val = 0; val < n; ++val) {\n        if (lengths[val] === len) {\n          let code2 = 0;\n          let t = code;\n          for (i = 0; i < len; ++i) {\n            code2 = code2 << 1 | t & 1;\n            t >>= 1;\n          }\n          for (i = code2; i < size; i += skip) {\n            codes[i] = len << 16 | val;\n          }\n          ++code;\n        }\n      }\n    }\n    return [codes, maxLen];\n  }\n  #endsStreamOnError(err) {\n    info(err);\n    this.eof = true;\n  }\n  readBlock() {\n    let buffer, len;\n    const str = this.str;\n    let hdr = this.getBits(3);\n    if (hdr & 1) {\n      this.eof = true;\n    }\n    hdr >>= 1;\n    if (hdr === 0) {\n      let b;\n      if ((b = str.getByte()) === -1) {\n        this.#endsStreamOnError(\"Bad block header in flate stream\");\n        return;\n      }\n      let blockLen = b;\n      if ((b = str.getByte()) === -1) {\n        this.#endsStreamOnError(\"Bad block header in flate stream\");\n        return;\n      }\n      blockLen |= b << 8;\n      if ((b = str.getByte()) === -1) {\n        this.#endsStreamOnError(\"Bad block header in flate stream\");\n        return;\n      }\n      let check = b;\n      if ((b = str.getByte()) === -1) {\n        this.#endsStreamOnError(\"Bad block header in flate stream\");\n        return;\n      }\n      check |= b << 8;\n      if (check !== (~blockLen & 0xffff) && (blockLen !== 0 || check !== 0)) {\n        throw new FormatError(\"Bad uncompressed block length in flate stream\");\n      }\n      this.codeBuf = 0;\n      this.codeSize = 0;\n      const bufferLength = this.bufferLength,\n        end = bufferLength + blockLen;\n      buffer = this.ensureBuffer(end);\n      this.bufferLength = end;\n      if (blockLen === 0) {\n        if (str.peekByte() === -1) {\n          this.eof = true;\n        }\n      } else {\n        const block = str.getBytes(blockLen);\n        buffer.set(block, bufferLength);\n        if (block.length < blockLen) {\n          this.eof = true;\n        }\n      }\n      return;\n    }\n    let litCodeTable;\n    let distCodeTable;\n    if (hdr === 1) {\n      litCodeTable = fixedLitCodeTab;\n      distCodeTable = fixedDistCodeTab;\n    } else if (hdr === 2) {\n      const numLitCodes = this.getBits(5) + 257;\n      const numDistCodes = this.getBits(5) + 1;\n      const numCodeLenCodes = this.getBits(4) + 4;\n      const codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length);\n      let i;\n      for (i = 0; i < numCodeLenCodes; ++i) {\n        codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3);\n      }\n      const codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths);\n      len = 0;\n      i = 0;\n      const codes = numLitCodes + numDistCodes;\n      const codeLengths = new Uint8Array(codes);\n      let bitsLength, bitsOffset, what;\n      while (i < codes) {\n        const code = this.getCode(codeLenCodeTab);\n        if (code === 16) {\n          bitsLength = 2;\n          bitsOffset = 3;\n          what = len;\n        } else if (code === 17) {\n          bitsLength = 3;\n          bitsOffset = 3;\n          what = len = 0;\n        } else if (code === 18) {\n          bitsLength = 7;\n          bitsOffset = 11;\n          what = len = 0;\n        } else {\n          codeLengths[i++] = len = code;\n          continue;\n        }\n        let repeatLength = this.getBits(bitsLength) + bitsOffset;\n        while (repeatLength-- > 0) {\n          codeLengths[i++] = what;\n        }\n      }\n      litCodeTable = this.generateHuffmanTable(codeLengths.subarray(0, numLitCodes));\n      distCodeTable = this.generateHuffmanTable(codeLengths.subarray(numLitCodes, codes));\n    } else {\n      throw new FormatError(\"Unknown block type in flate stream\");\n    }\n    buffer = this.buffer;\n    let limit = buffer ? buffer.length : 0;\n    let pos = this.bufferLength;\n    while (true) {\n      let code1 = this.getCode(litCodeTable);\n      if (code1 < 256) {\n        if (pos + 1 >= limit) {\n          buffer = this.ensureBuffer(pos + 1);\n          limit = buffer.length;\n        }\n        buffer[pos++] = code1;\n        continue;\n      }\n      if (code1 === 256) {\n        this.bufferLength = pos;\n        return;\n      }\n      code1 -= 257;\n      code1 = lengthDecode[code1];\n      let code2 = code1 >> 16;\n      if (code2 > 0) {\n        code2 = this.getBits(code2);\n      }\n      len = (code1 & 0xffff) + code2;\n      code1 = this.getCode(distCodeTable);\n      code1 = distDecode[code1];\n      code2 = code1 >> 16;\n      if (code2 > 0) {\n        code2 = this.getBits(code2);\n      }\n      const dist = (code1 & 0xffff) + code2;\n      if (pos + len >= limit) {\n        buffer = this.ensureBuffer(pos + len);\n        limit = buffer.length;\n      }\n      for (let k = 0; k < len; ++k, ++pos) {\n        buffer[pos] = buffer[pos - dist];\n      }\n    }\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/arithmetic_decoder.js\nconst QeTable = [{\n  qe: 0x5601,\n  nmps: 1,\n  nlps: 1,\n  switchFlag: 1\n}, {\n  qe: 0x3401,\n  nmps: 2,\n  nlps: 6,\n  switchFlag: 0\n}, {\n  qe: 0x1801,\n  nmps: 3,\n  nlps: 9,\n  switchFlag: 0\n}, {\n  qe: 0x0ac1,\n  nmps: 4,\n  nlps: 12,\n  switchFlag: 0\n}, {\n  qe: 0x0521,\n  nmps: 5,\n  nlps: 29,\n  switchFlag: 0\n}, {\n  qe: 0x0221,\n  nmps: 38,\n  nlps: 33,\n  switchFlag: 0\n}, {\n  qe: 0x5601,\n  nmps: 7,\n  nlps: 6,\n  switchFlag: 1\n}, {\n  qe: 0x5401,\n  nmps: 8,\n  nlps: 14,\n  switchFlag: 0\n}, {\n  qe: 0x4801,\n  nmps: 9,\n  nlps: 14,\n  switchFlag: 0\n}, {\n  qe: 0x3801,\n  nmps: 10,\n  nlps: 14,\n  switchFlag: 0\n}, {\n  qe: 0x3001,\n  nmps: 11,\n  nlps: 17,\n  switchFlag: 0\n}, {\n  qe: 0x2401,\n  nmps: 12,\n  nlps: 18,\n  switchFlag: 0\n}, {\n  qe: 0x1c01,\n  nmps: 13,\n  nlps: 20,\n  switchFlag: 0\n}, {\n  qe: 0x1601,\n  nmps: 29,\n  nlps: 21,\n  switchFlag: 0\n}, {\n  qe: 0x5601,\n  nmps: 15,\n  nlps: 14,\n  switchFlag: 1\n}, {\n  qe: 0x5401,\n  nmps: 16,\n  nlps: 14,\n  switchFlag: 0\n}, {\n  qe: 0x5101,\n  nmps: 17,\n  nlps: 15,\n  switchFlag: 0\n}, {\n  qe: 0x4801,\n  nmps: 18,\n  nlps: 16,\n  switchFlag: 0\n}, {\n  qe: 0x3801,\n  nmps: 19,\n  nlps: 17,\n  switchFlag: 0\n}, {\n  qe: 0x3401,\n  nmps: 20,\n  nlps: 18,\n  switchFlag: 0\n}, {\n  qe: 0x3001,\n  nmps: 21,\n  nlps: 19,\n  switchFlag: 0\n}, {\n  qe: 0x2801,\n  nmps: 22,\n  nlps: 19,\n  switchFlag: 0\n}, {\n  qe: 0x2401,\n  nmps: 23,\n  nlps: 20,\n  switchFlag: 0\n}, {\n  qe: 0x2201,\n  nmps: 24,\n  nlps: 21,\n  switchFlag: 0\n}, {\n  qe: 0x1c01,\n  nmps: 25,\n  nlps: 22,\n  switchFlag: 0\n}, {\n  qe: 0x1801,\n  nmps: 26,\n  nlps: 23,\n  switchFlag: 0\n}, {\n  qe: 0x1601,\n  nmps: 27,\n  nlps: 24,\n  switchFlag: 0\n}, {\n  qe: 0x1401,\n  nmps: 28,\n  nlps: 25,\n  switchFlag: 0\n}, {\n  qe: 0x1201,\n  nmps: 29,\n  nlps: 26,\n  switchFlag: 0\n}, {\n  qe: 0x1101,\n  nmps: 30,\n  nlps: 27,\n  switchFlag: 0\n}, {\n  qe: 0x0ac1,\n  nmps: 31,\n  nlps: 28,\n  switchFlag: 0\n}, {\n  qe: 0x09c1,\n  nmps: 32,\n  nlps: 29,\n  switchFlag: 0\n}, {\n  qe: 0x08a1,\n  nmps: 33,\n  nlps: 30,\n  switchFlag: 0\n}, {\n  qe: 0x0521,\n  nmps: 34,\n  nlps: 31,\n  switchFlag: 0\n}, {\n  qe: 0x0441,\n  nmps: 35,\n  nlps: 32,\n  switchFlag: 0\n}, {\n  qe: 0x02a1,\n  nmps: 36,\n  nlps: 33,\n  switchFlag: 0\n}, {\n  qe: 0x0221,\n  nmps: 37,\n  nlps: 34,\n  switchFlag: 0\n}, {\n  qe: 0x0141,\n  nmps: 38,\n  nlps: 35,\n  switchFlag: 0\n}, {\n  qe: 0x0111,\n  nmps: 39,\n  nlps: 36,\n  switchFlag: 0\n}, {\n  qe: 0x0085,\n  nmps: 40,\n  nlps: 37,\n  switchFlag: 0\n}, {\n  qe: 0x0049,\n  nmps: 41,\n  nlps: 38,\n  switchFlag: 0\n}, {\n  qe: 0x0025,\n  nmps: 42,\n  nlps: 39,\n  switchFlag: 0\n}, {\n  qe: 0x0015,\n  nmps: 43,\n  nlps: 40,\n  switchFlag: 0\n}, {\n  qe: 0x0009,\n  nmps: 44,\n  nlps: 41,\n  switchFlag: 0\n}, {\n  qe: 0x0005,\n  nmps: 45,\n  nlps: 42,\n  switchFlag: 0\n}, {\n  qe: 0x0001,\n  nmps: 45,\n  nlps: 43,\n  switchFlag: 0\n}, {\n  qe: 0x5601,\n  nmps: 46,\n  nlps: 46,\n  switchFlag: 0\n}];\nclass ArithmeticDecoder {\n  constructor(data, start, end) {\n    this.data = data;\n    this.bp = start;\n    this.dataEnd = end;\n    this.chigh = data[start];\n    this.clow = 0;\n    this.byteIn();\n    this.chigh = this.chigh << 7 & 0xffff | this.clow >> 9 & 0x7f;\n    this.clow = this.clow << 7 & 0xffff;\n    this.ct -= 7;\n    this.a = 0x8000;\n  }\n  byteIn() {\n    const data = this.data;\n    let bp = this.bp;\n    if (data[bp] === 0xff) {\n      if (data[bp + 1] > 0x8f) {\n        this.clow += 0xff00;\n        this.ct = 8;\n      } else {\n        bp++;\n        this.clow += data[bp] << 9;\n        this.ct = 7;\n        this.bp = bp;\n      }\n    } else {\n      bp++;\n      this.clow += bp < this.dataEnd ? data[bp] << 8 : 0xff00;\n      this.ct = 8;\n      this.bp = bp;\n    }\n    if (this.clow > 0xffff) {\n      this.chigh += this.clow >> 16;\n      this.clow &= 0xffff;\n    }\n  }\n  readBit(contexts, pos) {\n    let cx_index = contexts[pos] >> 1,\n      cx_mps = contexts[pos] & 1;\n    const qeTableIcx = QeTable[cx_index];\n    const qeIcx = qeTableIcx.qe;\n    let d;\n    let a = this.a - qeIcx;\n    if (this.chigh < qeIcx) {\n      if (a < qeIcx) {\n        a = qeIcx;\n        d = cx_mps;\n        cx_index = qeTableIcx.nmps;\n      } else {\n        a = qeIcx;\n        d = 1 ^ cx_mps;\n        if (qeTableIcx.switchFlag === 1) {\n          cx_mps = d;\n        }\n        cx_index = qeTableIcx.nlps;\n      }\n    } else {\n      this.chigh -= qeIcx;\n      if ((a & 0x8000) !== 0) {\n        this.a = a;\n        return cx_mps;\n      }\n      if (a < qeIcx) {\n        d = 1 ^ cx_mps;\n        if (qeTableIcx.switchFlag === 1) {\n          cx_mps = d;\n        }\n        cx_index = qeTableIcx.nlps;\n      } else {\n        d = cx_mps;\n        cx_index = qeTableIcx.nmps;\n      }\n    }\n    do {\n      if (this.ct === 0) {\n        this.byteIn();\n      }\n      a <<= 1;\n      this.chigh = this.chigh << 1 & 0xffff | this.clow >> 15 & 1;\n      this.clow = this.clow << 1 & 0xffff;\n      this.ct--;\n    } while ((a & 0x8000) === 0);\n    this.a = a;\n    contexts[pos] = cx_index << 1 | cx_mps;\n    return d;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/jbig2.js\n\n\n\n\nclass Jbig2Error extends BaseException {\n  constructor(msg) {\n    super(msg, \"Jbig2Error\");\n  }\n}\nclass ContextCache {\n  getContexts(id) {\n    if (id in this) {\n      return this[id];\n    }\n    return this[id] = new Int8Array(1 << 16);\n  }\n}\nclass DecodingContext {\n  constructor(data, start, end) {\n    this.data = data;\n    this.start = start;\n    this.end = end;\n  }\n  get decoder() {\n    const decoder = new ArithmeticDecoder(this.data, this.start, this.end);\n    return shadow(this, \"decoder\", decoder);\n  }\n  get contextCache() {\n    const cache = new ContextCache();\n    return shadow(this, \"contextCache\", cache);\n  }\n}\nconst MAX_INT_32 = 2 ** 31 - 1;\nconst MIN_INT_32 = -(2 ** 31);\nfunction decodeInteger(contextCache, procedure, decoder) {\n  const contexts = contextCache.getContexts(procedure);\n  let prev = 1;\n  function readBits(length) {\n    let v = 0;\n    for (let i = 0; i < length; i++) {\n      const bit = decoder.readBit(contexts, prev);\n      prev = prev < 256 ? prev << 1 | bit : (prev << 1 | bit) & 511 | 256;\n      v = v << 1 | bit;\n    }\n    return v >>> 0;\n  }\n  const sign = readBits(1);\n  const value = readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(32) + 4436 : readBits(12) + 340 : readBits(8) + 84 : readBits(6) + 20 : readBits(4) + 4 : readBits(2);\n  let signedValue;\n  if (sign === 0) {\n    signedValue = value;\n  } else if (value > 0) {\n    signedValue = -value;\n  }\n  if (signedValue >= MIN_INT_32 && signedValue <= MAX_INT_32) {\n    return signedValue;\n  }\n  return null;\n}\nfunction decodeIAID(contextCache, decoder, codeLength) {\n  const contexts = contextCache.getContexts(\"IAID\");\n  let prev = 1;\n  for (let i = 0; i < codeLength; i++) {\n    const bit = decoder.readBit(contexts, prev);\n    prev = prev << 1 | bit;\n  }\n  if (codeLength < 31) {\n    return prev & (1 << codeLength) - 1;\n  }\n  return prev & 0x7fffffff;\n}\nconst SegmentTypes = [\"SymbolDictionary\", null, null, null, \"IntermediateTextRegion\", null, \"ImmediateTextRegion\", \"ImmediateLosslessTextRegion\", null, null, null, null, null, null, null, null, \"PatternDictionary\", null, null, null, \"IntermediateHalftoneRegion\", null, \"ImmediateHalftoneRegion\", \"ImmediateLosslessHalftoneRegion\", null, null, null, null, null, null, null, null, null, null, null, null, \"IntermediateGenericRegion\", null, \"ImmediateGenericRegion\", \"ImmediateLosslessGenericRegion\", \"IntermediateGenericRefinementRegion\", null, \"ImmediateGenericRefinementRegion\", \"ImmediateLosslessGenericRefinementRegion\", null, null, null, null, \"PageInformation\", \"EndOfPage\", \"EndOfStripe\", \"EndOfFile\", \"Profiles\", \"Tables\", null, null, null, null, null, null, null, null, \"Extension\"];\nconst CodingTemplates = [[{\n  x: -1,\n  y: -2\n}, {\n  x: 0,\n  y: -2\n}, {\n  x: 1,\n  y: -2\n}, {\n  x: -2,\n  y: -1\n}, {\n  x: -1,\n  y: -1\n}, {\n  x: 0,\n  y: -1\n}, {\n  x: 1,\n  y: -1\n}, {\n  x: 2,\n  y: -1\n}, {\n  x: -4,\n  y: 0\n}, {\n  x: -3,\n  y: 0\n}, {\n  x: -2,\n  y: 0\n}, {\n  x: -1,\n  y: 0\n}], [{\n  x: -1,\n  y: -2\n}, {\n  x: 0,\n  y: -2\n}, {\n  x: 1,\n  y: -2\n}, {\n  x: 2,\n  y: -2\n}, {\n  x: -2,\n  y: -1\n}, {\n  x: -1,\n  y: -1\n}, {\n  x: 0,\n  y: -1\n}, {\n  x: 1,\n  y: -1\n}, {\n  x: 2,\n  y: -1\n}, {\n  x: -3,\n  y: 0\n}, {\n  x: -2,\n  y: 0\n}, {\n  x: -1,\n  y: 0\n}], [{\n  x: -1,\n  y: -2\n}, {\n  x: 0,\n  y: -2\n}, {\n  x: 1,\n  y: -2\n}, {\n  x: -2,\n  y: -1\n}, {\n  x: -1,\n  y: -1\n}, {\n  x: 0,\n  y: -1\n}, {\n  x: 1,\n  y: -1\n}, {\n  x: -2,\n  y: 0\n}, {\n  x: -1,\n  y: 0\n}], [{\n  x: -3,\n  y: -1\n}, {\n  x: -2,\n  y: -1\n}, {\n  x: -1,\n  y: -1\n}, {\n  x: 0,\n  y: -1\n}, {\n  x: 1,\n  y: -1\n}, {\n  x: -4,\n  y: 0\n}, {\n  x: -3,\n  y: 0\n}, {\n  x: -2,\n  y: 0\n}, {\n  x: -1,\n  y: 0\n}]];\nconst RefinementTemplates = [{\n  coding: [{\n    x: 0,\n    y: -1\n  }, {\n    x: 1,\n    y: -1\n  }, {\n    x: -1,\n    y: 0\n  }],\n  reference: [{\n    x: 0,\n    y: -1\n  }, {\n    x: 1,\n    y: -1\n  }, {\n    x: -1,\n    y: 0\n  }, {\n    x: 0,\n    y: 0\n  }, {\n    x: 1,\n    y: 0\n  }, {\n    x: -1,\n    y: 1\n  }, {\n    x: 0,\n    y: 1\n  }, {\n    x: 1,\n    y: 1\n  }]\n}, {\n  coding: [{\n    x: -1,\n    y: -1\n  }, {\n    x: 0,\n    y: -1\n  }, {\n    x: 1,\n    y: -1\n  }, {\n    x: -1,\n    y: 0\n  }],\n  reference: [{\n    x: 0,\n    y: -1\n  }, {\n    x: -1,\n    y: 0\n  }, {\n    x: 0,\n    y: 0\n  }, {\n    x: 1,\n    y: 0\n  }, {\n    x: 0,\n    y: 1\n  }, {\n    x: 1,\n    y: 1\n  }]\n}];\nconst ReusedContexts = [0x9b25, 0x0795, 0x00e5, 0x0195];\nconst RefinementReusedContexts = [0x0020, 0x0008];\nfunction decodeBitmapTemplate0(width, height, decodingContext) {\n  const decoder = decodingContext.decoder;\n  const contexts = decodingContext.contextCache.getContexts(\"GB\");\n  const bitmap = [];\n  let contextLabel, i, j, pixel, row, row1, row2;\n  const OLD_PIXEL_MASK = 0x7bf7;\n  for (i = 0; i < height; i++) {\n    row = bitmap[i] = new Uint8Array(width);\n    row1 = i < 1 ? row : bitmap[i - 1];\n    row2 = i < 2 ? row : bitmap[i - 2];\n    contextLabel = row2[0] << 13 | row2[1] << 12 | row2[2] << 11 | row1[0] << 7 | row1[1] << 6 | row1[2] << 5 | row1[3] << 4;\n    for (j = 0; j < width; j++) {\n      row[j] = pixel = decoder.readBit(contexts, contextLabel);\n      contextLabel = (contextLabel & OLD_PIXEL_MASK) << 1 | (j + 3 < width ? row2[j + 3] << 11 : 0) | (j + 4 < width ? row1[j + 4] << 4 : 0) | pixel;\n    }\n  }\n  return bitmap;\n}\nfunction decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, decodingContext) {\n  if (mmr) {\n    const input = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);\n    return decodeMMRBitmap(input, width, height, false);\n  }\n  if (templateIndex === 0 && !skip && !prediction && at.length === 4 && at[0].x === 3 && at[0].y === -1 && at[1].x === -3 && at[1].y === -1 && at[2].x === 2 && at[2].y === -2 && at[3].x === -2 && at[3].y === -2) {\n    return decodeBitmapTemplate0(width, height, decodingContext);\n  }\n  const useskip = !!skip;\n  const template = CodingTemplates[templateIndex].concat(at);\n  template.sort(function (a, b) {\n    return a.y - b.y || a.x - b.x;\n  });\n  const templateLength = template.length;\n  const templateX = new Int8Array(templateLength);\n  const templateY = new Int8Array(templateLength);\n  const changingTemplateEntries = [];\n  let reuseMask = 0,\n    minX = 0,\n    maxX = 0,\n    minY = 0;\n  let c, k;\n  for (k = 0; k < templateLength; k++) {\n    templateX[k] = template[k].x;\n    templateY[k] = template[k].y;\n    minX = Math.min(minX, template[k].x);\n    maxX = Math.max(maxX, template[k].x);\n    minY = Math.min(minY, template[k].y);\n    if (k < templateLength - 1 && template[k].y === template[k + 1].y && template[k].x === template[k + 1].x - 1) {\n      reuseMask |= 1 << templateLength - 1 - k;\n    } else {\n      changingTemplateEntries.push(k);\n    }\n  }\n  const changingEntriesLength = changingTemplateEntries.length;\n  const changingTemplateX = new Int8Array(changingEntriesLength);\n  const changingTemplateY = new Int8Array(changingEntriesLength);\n  const changingTemplateBit = new Uint16Array(changingEntriesLength);\n  for (c = 0; c < changingEntriesLength; c++) {\n    k = changingTemplateEntries[c];\n    changingTemplateX[c] = template[k].x;\n    changingTemplateY[c] = template[k].y;\n    changingTemplateBit[c] = 1 << templateLength - 1 - k;\n  }\n  const sbb_left = -minX;\n  const sbb_top = -minY;\n  const sbb_right = width - maxX;\n  const pseudoPixelContext = ReusedContexts[templateIndex];\n  let row = new Uint8Array(width);\n  const bitmap = [];\n  const decoder = decodingContext.decoder;\n  const contexts = decodingContext.contextCache.getContexts(\"GB\");\n  let ltp = 0,\n    j,\n    i0,\n    j0,\n    contextLabel = 0,\n    bit,\n    shift;\n  for (let i = 0; i < height; i++) {\n    if (prediction) {\n      const sltp = decoder.readBit(contexts, pseudoPixelContext);\n      ltp ^= sltp;\n      if (ltp) {\n        bitmap.push(row);\n        continue;\n      }\n    }\n    row = new Uint8Array(row);\n    bitmap.push(row);\n    for (j = 0; j < width; j++) {\n      if (useskip && skip[i][j]) {\n        row[j] = 0;\n        continue;\n      }\n      if (j >= sbb_left && j < sbb_right && i >= sbb_top) {\n        contextLabel = contextLabel << 1 & reuseMask;\n        for (k = 0; k < changingEntriesLength; k++) {\n          i0 = i + changingTemplateY[k];\n          j0 = j + changingTemplateX[k];\n          bit = bitmap[i0][j0];\n          if (bit) {\n            bit = changingTemplateBit[k];\n            contextLabel |= bit;\n          }\n        }\n      } else {\n        contextLabel = 0;\n        shift = templateLength - 1;\n        for (k = 0; k < templateLength; k++, shift--) {\n          j0 = j + templateX[k];\n          if (j0 >= 0 && j0 < width) {\n            i0 = i + templateY[k];\n            if (i0 >= 0) {\n              bit = bitmap[i0][j0];\n              if (bit) {\n                contextLabel |= bit << shift;\n              }\n            }\n          }\n        }\n      }\n      const pixel = decoder.readBit(contexts, contextLabel);\n      row[j] = pixel;\n    }\n  }\n  return bitmap;\n}\nfunction decodeRefinement(width, height, templateIndex, referenceBitmap, offsetX, offsetY, prediction, at, decodingContext) {\n  let codingTemplate = RefinementTemplates[templateIndex].coding;\n  if (templateIndex === 0) {\n    codingTemplate = codingTemplate.concat([at[0]]);\n  }\n  const codingTemplateLength = codingTemplate.length;\n  const codingTemplateX = new Int32Array(codingTemplateLength);\n  const codingTemplateY = new Int32Array(codingTemplateLength);\n  let k;\n  for (k = 0; k < codingTemplateLength; k++) {\n    codingTemplateX[k] = codingTemplate[k].x;\n    codingTemplateY[k] = codingTemplate[k].y;\n  }\n  let referenceTemplate = RefinementTemplates[templateIndex].reference;\n  if (templateIndex === 0) {\n    referenceTemplate = referenceTemplate.concat([at[1]]);\n  }\n  const referenceTemplateLength = referenceTemplate.length;\n  const referenceTemplateX = new Int32Array(referenceTemplateLength);\n  const referenceTemplateY = new Int32Array(referenceTemplateLength);\n  for (k = 0; k < referenceTemplateLength; k++) {\n    referenceTemplateX[k] = referenceTemplate[k].x;\n    referenceTemplateY[k] = referenceTemplate[k].y;\n  }\n  const referenceWidth = referenceBitmap[0].length;\n  const referenceHeight = referenceBitmap.length;\n  const pseudoPixelContext = RefinementReusedContexts[templateIndex];\n  const bitmap = [];\n  const decoder = decodingContext.decoder;\n  const contexts = decodingContext.contextCache.getContexts(\"GR\");\n  let ltp = 0;\n  for (let i = 0; i < height; i++) {\n    if (prediction) {\n      const sltp = decoder.readBit(contexts, pseudoPixelContext);\n      ltp ^= sltp;\n      if (ltp) {\n        throw new Jbig2Error(\"prediction is not supported\");\n      }\n    }\n    const row = new Uint8Array(width);\n    bitmap.push(row);\n    for (let j = 0; j < width; j++) {\n      let i0, j0;\n      let contextLabel = 0;\n      for (k = 0; k < codingTemplateLength; k++) {\n        i0 = i + codingTemplateY[k];\n        j0 = j + codingTemplateX[k];\n        if (i0 < 0 || j0 < 0 || j0 >= width) {\n          contextLabel <<= 1;\n        } else {\n          contextLabel = contextLabel << 1 | bitmap[i0][j0];\n        }\n      }\n      for (k = 0; k < referenceTemplateLength; k++) {\n        i0 = i + referenceTemplateY[k] - offsetY;\n        j0 = j + referenceTemplateX[k] - offsetX;\n        if (i0 < 0 || i0 >= referenceHeight || j0 < 0 || j0 >= referenceWidth) {\n          contextLabel <<= 1;\n        } else {\n          contextLabel = contextLabel << 1 | referenceBitmap[i0][j0];\n        }\n      }\n      const pixel = decoder.readBit(contexts, contextLabel);\n      row[j] = pixel;\n    }\n  }\n  return bitmap;\n}\nfunction decodeSymbolDictionary(huffman, refinement, symbols, numberOfNewSymbols, numberOfExportedSymbols, huffmanTables, templateIndex, at, refinementTemplateIndex, refinementAt, decodingContext, huffmanInput) {\n  if (huffman && refinement) {\n    throw new Jbig2Error(\"symbol refinement with Huffman is not supported\");\n  }\n  const newSymbols = [];\n  let currentHeight = 0;\n  let symbolCodeLength = log2(symbols.length + numberOfNewSymbols);\n  const decoder = decodingContext.decoder;\n  const contextCache = decodingContext.contextCache;\n  let tableB1, symbolWidths;\n  if (huffman) {\n    tableB1 = getStandardTable(1);\n    symbolWidths = [];\n    symbolCodeLength = Math.max(symbolCodeLength, 1);\n  }\n  while (newSymbols.length < numberOfNewSymbols) {\n    const deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache, \"IADH\", decoder);\n    currentHeight += deltaHeight;\n    let currentWidth = 0,\n      totalWidth = 0;\n    const firstSymbol = huffman ? symbolWidths.length : 0;\n    while (true) {\n      const deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache, \"IADW\", decoder);\n      if (deltaWidth === null) {\n        break;\n      }\n      currentWidth += deltaWidth;\n      totalWidth += currentWidth;\n      let bitmap;\n      if (refinement) {\n        const numberOfInstances = decodeInteger(contextCache, \"IAAI\", decoder);\n        if (numberOfInstances > 1) {\n          bitmap = decodeTextRegion(huffman, refinement, currentWidth, currentHeight, 0, numberOfInstances, 1, symbols.concat(newSymbols), symbolCodeLength, 0, 0, 1, 0, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, 0, huffmanInput);\n        } else {\n          const symbolId = decodeIAID(contextCache, decoder, symbolCodeLength);\n          const rdx = decodeInteger(contextCache, \"IARDX\", decoder);\n          const rdy = decodeInteger(contextCache, \"IARDY\", decoder);\n          const symbol = symbolId < symbols.length ? symbols[symbolId] : newSymbols[symbolId - symbols.length];\n          bitmap = decodeRefinement(currentWidth, currentHeight, refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt, decodingContext);\n        }\n        newSymbols.push(bitmap);\n      } else if (huffman) {\n        symbolWidths.push(currentWidth);\n      } else {\n        bitmap = decodeBitmap(false, currentWidth, currentHeight, templateIndex, false, null, at, decodingContext);\n        newSymbols.push(bitmap);\n      }\n    }\n    if (huffman && !refinement) {\n      const bitmapSize = huffmanTables.tableBitmapSize.decode(huffmanInput);\n      huffmanInput.byteAlign();\n      let collectiveBitmap;\n      if (bitmapSize === 0) {\n        collectiveBitmap = readUncompressedBitmap(huffmanInput, totalWidth, currentHeight);\n      } else {\n        const originalEnd = huffmanInput.end;\n        const bitmapEnd = huffmanInput.position + bitmapSize;\n        huffmanInput.end = bitmapEnd;\n        collectiveBitmap = decodeMMRBitmap(huffmanInput, totalWidth, currentHeight, false);\n        huffmanInput.end = originalEnd;\n        huffmanInput.position = bitmapEnd;\n      }\n      const numberOfSymbolsDecoded = symbolWidths.length;\n      if (firstSymbol === numberOfSymbolsDecoded - 1) {\n        newSymbols.push(collectiveBitmap);\n      } else {\n        let i,\n          y,\n          xMin = 0,\n          xMax,\n          bitmapWidth,\n          symbolBitmap;\n        for (i = firstSymbol; i < numberOfSymbolsDecoded; i++) {\n          bitmapWidth = symbolWidths[i];\n          xMax = xMin + bitmapWidth;\n          symbolBitmap = [];\n          for (y = 0; y < currentHeight; y++) {\n            symbolBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));\n          }\n          newSymbols.push(symbolBitmap);\n          xMin = xMax;\n        }\n      }\n    }\n  }\n  const exportedSymbols = [],\n    flags = [];\n  let currentFlag = false,\n    i,\n    ii;\n  const totalSymbolsLength = symbols.length + numberOfNewSymbols;\n  while (flags.length < totalSymbolsLength) {\n    let runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache, \"IAEX\", decoder);\n    while (runLength--) {\n      flags.push(currentFlag);\n    }\n    currentFlag = !currentFlag;\n  }\n  for (i = 0, ii = symbols.length; i < ii; i++) {\n    if (flags[i]) {\n      exportedSymbols.push(symbols[i]);\n    }\n  }\n  for (let j = 0; j < numberOfNewSymbols; i++, j++) {\n    if (flags[i]) {\n      exportedSymbols.push(newSymbols[j]);\n    }\n  }\n  return exportedSymbols;\n}\nfunction decodeTextRegion(huffman, refinement, width, height, defaultPixelValue, numberOfSymbolInstances, stripSize, inputSymbols, symbolCodeLength, transposed, dsOffset, referenceCorner, combinationOperator, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, logStripSize, huffmanInput) {\n  if (huffman && refinement) {\n    throw new Jbig2Error(\"refinement with Huffman is not supported\");\n  }\n  const bitmap = [];\n  let i, row;\n  for (i = 0; i < height; i++) {\n    row = new Uint8Array(width);\n    if (defaultPixelValue) {\n      for (let j = 0; j < width; j++) {\n        row[j] = defaultPixelValue;\n      }\n    }\n    bitmap.push(row);\n  }\n  const decoder = decodingContext.decoder;\n  const contextCache = decodingContext.contextCache;\n  let stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache, \"IADT\", decoder);\n  let firstS = 0;\n  i = 0;\n  while (i < numberOfSymbolInstances) {\n    const deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache, \"IADT\", decoder);\n    stripT += deltaT;\n    const deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache, \"IAFS\", decoder);\n    firstS += deltaFirstS;\n    let currentS = firstS;\n    do {\n      let currentT = 0;\n      if (stripSize > 1) {\n        currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache, \"IAIT\", decoder);\n      }\n      const t = stripSize * stripT + currentT;\n      const symbolId = huffman ? huffmanTables.symbolIDTable.decode(huffmanInput) : decodeIAID(contextCache, decoder, symbolCodeLength);\n      const applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache, \"IARI\", decoder));\n      let symbolBitmap = inputSymbols[symbolId];\n      let symbolWidth = symbolBitmap[0].length;\n      let symbolHeight = symbolBitmap.length;\n      if (applyRefinement) {\n        const rdw = decodeInteger(contextCache, \"IARDW\", decoder);\n        const rdh = decodeInteger(contextCache, \"IARDH\", decoder);\n        const rdx = decodeInteger(contextCache, \"IARDX\", decoder);\n        const rdy = decodeInteger(contextCache, \"IARDY\", decoder);\n        symbolWidth += rdw;\n        symbolHeight += rdh;\n        symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, (rdh >> 1) + rdy, false, refinementAt, decodingContext);\n      }\n      let increment = 0;\n      if (!transposed) {\n        if (referenceCorner > 1) {\n          currentS += symbolWidth - 1;\n        } else {\n          increment = symbolWidth - 1;\n        }\n      } else if (!(referenceCorner & 1)) {\n        currentS += symbolHeight - 1;\n      } else {\n        increment = symbolHeight - 1;\n      }\n      const offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight - 1);\n      const offsetS = currentS - (referenceCorner & 2 ? symbolWidth - 1 : 0);\n      let s2, t2, symbolRow;\n      if (transposed) {\n        for (s2 = 0; s2 < symbolHeight; s2++) {\n          row = bitmap[offsetS + s2];\n          if (!row) {\n            continue;\n          }\n          symbolRow = symbolBitmap[s2];\n          const maxWidth = Math.min(width - offsetT, symbolWidth);\n          switch (combinationOperator) {\n            case 0:\n              for (t2 = 0; t2 < maxWidth; t2++) {\n                row[offsetT + t2] |= symbolRow[t2];\n              }\n              break;\n            case 2:\n              for (t2 = 0; t2 < maxWidth; t2++) {\n                row[offsetT + t2] ^= symbolRow[t2];\n              }\n              break;\n            default:\n              throw new Jbig2Error(`operator ${combinationOperator} is not supported`);\n          }\n        }\n      } else {\n        for (t2 = 0; t2 < symbolHeight; t2++) {\n          row = bitmap[offsetT + t2];\n          if (!row) {\n            continue;\n          }\n          symbolRow = symbolBitmap[t2];\n          switch (combinationOperator) {\n            case 0:\n              for (s2 = 0; s2 < symbolWidth; s2++) {\n                row[offsetS + s2] |= symbolRow[s2];\n              }\n              break;\n            case 2:\n              for (s2 = 0; s2 < symbolWidth; s2++) {\n                row[offsetS + s2] ^= symbolRow[s2];\n              }\n              break;\n            default:\n              throw new Jbig2Error(`operator ${combinationOperator} is not supported`);\n          }\n        }\n      }\n      i++;\n      const deltaS = huffman ? huffmanTables.tableDeltaS.decode(huffmanInput) : decodeInteger(contextCache, \"IADS\", decoder);\n      if (deltaS === null) {\n        break;\n      }\n      currentS += increment + deltaS + dsOffset;\n    } while (true);\n  }\n  return bitmap;\n}\nfunction decodePatternDictionary(mmr, patternWidth, patternHeight, maxPatternIndex, template, decodingContext) {\n  const at = [];\n  if (!mmr) {\n    at.push({\n      x: -patternWidth,\n      y: 0\n    });\n    if (template === 0) {\n      at.push({\n        x: -3,\n        y: -1\n      }, {\n        x: 2,\n        y: -2\n      }, {\n        x: -2,\n        y: -2\n      });\n    }\n  }\n  const collectiveWidth = (maxPatternIndex + 1) * patternWidth;\n  const collectiveBitmap = decodeBitmap(mmr, collectiveWidth, patternHeight, template, false, null, at, decodingContext);\n  const patterns = [];\n  for (let i = 0; i <= maxPatternIndex; i++) {\n    const patternBitmap = [];\n    const xMin = patternWidth * i;\n    const xMax = xMin + patternWidth;\n    for (let y = 0; y < patternHeight; y++) {\n      patternBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));\n    }\n    patterns.push(patternBitmap);\n  }\n  return patterns;\n}\nfunction decodeHalftoneRegion(mmr, patterns, template, regionWidth, regionHeight, defaultPixelValue, enableSkip, combinationOperator, gridWidth, gridHeight, gridOffsetX, gridOffsetY, gridVectorX, gridVectorY, decodingContext) {\n  const skip = null;\n  if (enableSkip) {\n    throw new Jbig2Error(\"skip is not supported\");\n  }\n  if (combinationOperator !== 0) {\n    throw new Jbig2Error(`operator \"${combinationOperator}\" is not supported in halftone region`);\n  }\n  const regionBitmap = [];\n  let i, j, row;\n  for (i = 0; i < regionHeight; i++) {\n    row = new Uint8Array(regionWidth);\n    if (defaultPixelValue) {\n      for (j = 0; j < regionWidth; j++) {\n        row[j] = defaultPixelValue;\n      }\n    }\n    regionBitmap.push(row);\n  }\n  const numberOfPatterns = patterns.length;\n  const pattern0 = patterns[0];\n  const patternWidth = pattern0[0].length,\n    patternHeight = pattern0.length;\n  const bitsPerValue = log2(numberOfPatterns);\n  const at = [];\n  if (!mmr) {\n    at.push({\n      x: template <= 1 ? 3 : 2,\n      y: -1\n    });\n    if (template === 0) {\n      at.push({\n        x: -3,\n        y: -1\n      }, {\n        x: 2,\n        y: -2\n      }, {\n        x: -2,\n        y: -2\n      });\n    }\n  }\n  const grayScaleBitPlanes = [];\n  let mmrInput, bitmap;\n  if (mmr) {\n    mmrInput = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);\n  }\n  for (i = bitsPerValue - 1; i >= 0; i--) {\n    if (mmr) {\n      bitmap = decodeMMRBitmap(mmrInput, gridWidth, gridHeight, true);\n    } else {\n      bitmap = decodeBitmap(false, gridWidth, gridHeight, template, false, skip, at, decodingContext);\n    }\n    grayScaleBitPlanes[i] = bitmap;\n  }\n  let mg, ng, bit, patternIndex, patternBitmap, x, y, patternRow, regionRow;\n  for (mg = 0; mg < gridHeight; mg++) {\n    for (ng = 0; ng < gridWidth; ng++) {\n      bit = 0;\n      patternIndex = 0;\n      for (j = bitsPerValue - 1; j >= 0; j--) {\n        bit ^= grayScaleBitPlanes[j][mg][ng];\n        patternIndex |= bit << j;\n      }\n      patternBitmap = patterns[patternIndex];\n      x = gridOffsetX + mg * gridVectorY + ng * gridVectorX >> 8;\n      y = gridOffsetY + mg * gridVectorX - ng * gridVectorY >> 8;\n      if (x >= 0 && x + patternWidth <= regionWidth && y >= 0 && y + patternHeight <= regionHeight) {\n        for (i = 0; i < patternHeight; i++) {\n          regionRow = regionBitmap[y + i];\n          patternRow = patternBitmap[i];\n          for (j = 0; j < patternWidth; j++) {\n            regionRow[x + j] |= patternRow[j];\n          }\n        }\n      } else {\n        let regionX, regionY;\n        for (i = 0; i < patternHeight; i++) {\n          regionY = y + i;\n          if (regionY < 0 || regionY >= regionHeight) {\n            continue;\n          }\n          regionRow = regionBitmap[regionY];\n          patternRow = patternBitmap[i];\n          for (j = 0; j < patternWidth; j++) {\n            regionX = x + j;\n            if (regionX >= 0 && regionX < regionWidth) {\n              regionRow[regionX] |= patternRow[j];\n            }\n          }\n        }\n      }\n    }\n  }\n  return regionBitmap;\n}\nfunction readSegmentHeader(data, start) {\n  const segmentHeader = {};\n  segmentHeader.number = readUint32(data, start);\n  const flags = data[start + 4];\n  const segmentType = flags & 0x3f;\n  if (!SegmentTypes[segmentType]) {\n    throw new Jbig2Error(\"invalid segment type: \" + segmentType);\n  }\n  segmentHeader.type = segmentType;\n  segmentHeader.typeName = SegmentTypes[segmentType];\n  segmentHeader.deferredNonRetain = !!(flags & 0x80);\n  const pageAssociationFieldSize = !!(flags & 0x40);\n  const referredFlags = data[start + 5];\n  let referredToCount = referredFlags >> 5 & 7;\n  const retainBits = [referredFlags & 31];\n  let position = start + 6;\n  if (referredFlags === 7) {\n    referredToCount = readUint32(data, position - 1) & 0x1fffffff;\n    position += 3;\n    let bytes = referredToCount + 7 >> 3;\n    retainBits[0] = data[position++];\n    while (--bytes > 0) {\n      retainBits.push(data[position++]);\n    }\n  } else if (referredFlags === 5 || referredFlags === 6) {\n    throw new Jbig2Error(\"invalid referred-to flags\");\n  }\n  segmentHeader.retainBits = retainBits;\n  let referredToSegmentNumberSize = 4;\n  if (segmentHeader.number <= 256) {\n    referredToSegmentNumberSize = 1;\n  } else if (segmentHeader.number <= 65536) {\n    referredToSegmentNumberSize = 2;\n  }\n  const referredTo = [];\n  let i, ii;\n  for (i = 0; i < referredToCount; i++) {\n    let number;\n    if (referredToSegmentNumberSize === 1) {\n      number = data[position];\n    } else if (referredToSegmentNumberSize === 2) {\n      number = readUint16(data, position);\n    } else {\n      number = readUint32(data, position);\n    }\n    referredTo.push(number);\n    position += referredToSegmentNumberSize;\n  }\n  segmentHeader.referredTo = referredTo;\n  if (!pageAssociationFieldSize) {\n    segmentHeader.pageAssociation = data[position++];\n  } else {\n    segmentHeader.pageAssociation = readUint32(data, position);\n    position += 4;\n  }\n  segmentHeader.length = readUint32(data, position);\n  position += 4;\n  if (segmentHeader.length === 0xffffffff) {\n    if (segmentType === 38) {\n      const genericRegionInfo = readRegionSegmentInformation(data, position);\n      const genericRegionSegmentFlags = data[position + RegionSegmentInformationFieldLength];\n      const genericRegionMmr = !!(genericRegionSegmentFlags & 1);\n      const searchPatternLength = 6;\n      const searchPattern = new Uint8Array(searchPatternLength);\n      if (!genericRegionMmr) {\n        searchPattern[0] = 0xff;\n        searchPattern[1] = 0xac;\n      }\n      searchPattern[2] = genericRegionInfo.height >>> 24 & 0xff;\n      searchPattern[3] = genericRegionInfo.height >> 16 & 0xff;\n      searchPattern[4] = genericRegionInfo.height >> 8 & 0xff;\n      searchPattern[5] = genericRegionInfo.height & 0xff;\n      for (i = position, ii = data.length; i < ii; i++) {\n        let j = 0;\n        while (j < searchPatternLength && searchPattern[j] === data[i + j]) {\n          j++;\n        }\n        if (j === searchPatternLength) {\n          segmentHeader.length = i + searchPatternLength;\n          break;\n        }\n      }\n      if (segmentHeader.length === 0xffffffff) {\n        throw new Jbig2Error(\"segment end was not found\");\n      }\n    } else {\n      throw new Jbig2Error(\"invalid unknown segment length\");\n    }\n  }\n  segmentHeader.headerEnd = position;\n  return segmentHeader;\n}\nfunction readSegments(header, data, start, end) {\n  const segments = [];\n  let position = start;\n  while (position < end) {\n    const segmentHeader = readSegmentHeader(data, position);\n    position = segmentHeader.headerEnd;\n    const segment = {\n      header: segmentHeader,\n      data\n    };\n    if (!header.randomAccess) {\n      segment.start = position;\n      position += segmentHeader.length;\n      segment.end = position;\n    }\n    segments.push(segment);\n    if (segmentHeader.type === 51) {\n      break;\n    }\n  }\n  if (header.randomAccess) {\n    for (let i = 0, ii = segments.length; i < ii; i++) {\n      segments[i].start = position;\n      position += segments[i].header.length;\n      segments[i].end = position;\n    }\n  }\n  return segments;\n}\nfunction readRegionSegmentInformation(data, start) {\n  return {\n    width: readUint32(data, start),\n    height: readUint32(data, start + 4),\n    x: readUint32(data, start + 8),\n    y: readUint32(data, start + 12),\n    combinationOperator: data[start + 16] & 7\n  };\n}\nconst RegionSegmentInformationFieldLength = 17;\nfunction processSegment(segment, visitor) {\n  const header = segment.header;\n  const data = segment.data,\n    end = segment.end;\n  let position = segment.start;\n  let args, at, i, atLength;\n  switch (header.type) {\n    case 0:\n      const dictionary = {};\n      const dictionaryFlags = readUint16(data, position);\n      dictionary.huffman = !!(dictionaryFlags & 1);\n      dictionary.refinement = !!(dictionaryFlags & 2);\n      dictionary.huffmanDHSelector = dictionaryFlags >> 2 & 3;\n      dictionary.huffmanDWSelector = dictionaryFlags >> 4 & 3;\n      dictionary.bitmapSizeSelector = dictionaryFlags >> 6 & 1;\n      dictionary.aggregationInstancesSelector = dictionaryFlags >> 7 & 1;\n      dictionary.bitmapCodingContextUsed = !!(dictionaryFlags & 256);\n      dictionary.bitmapCodingContextRetained = !!(dictionaryFlags & 512);\n      dictionary.template = dictionaryFlags >> 10 & 3;\n      dictionary.refinementTemplate = dictionaryFlags >> 12 & 1;\n      position += 2;\n      if (!dictionary.huffman) {\n        atLength = dictionary.template === 0 ? 4 : 1;\n        at = [];\n        for (i = 0; i < atLength; i++) {\n          at.push({\n            x: readInt8(data, position),\n            y: readInt8(data, position + 1)\n          });\n          position += 2;\n        }\n        dictionary.at = at;\n      }\n      if (dictionary.refinement && !dictionary.refinementTemplate) {\n        at = [];\n        for (i = 0; i < 2; i++) {\n          at.push({\n            x: readInt8(data, position),\n            y: readInt8(data, position + 1)\n          });\n          position += 2;\n        }\n        dictionary.refinementAt = at;\n      }\n      dictionary.numberOfExportedSymbols = readUint32(data, position);\n      position += 4;\n      dictionary.numberOfNewSymbols = readUint32(data, position);\n      position += 4;\n      args = [dictionary, header.number, header.referredTo, data, position, end];\n      break;\n    case 6:\n    case 7:\n      const textRegion = {};\n      textRegion.info = readRegionSegmentInformation(data, position);\n      position += RegionSegmentInformationFieldLength;\n      const textRegionSegmentFlags = readUint16(data, position);\n      position += 2;\n      textRegion.huffman = !!(textRegionSegmentFlags & 1);\n      textRegion.refinement = !!(textRegionSegmentFlags & 2);\n      textRegion.logStripSize = textRegionSegmentFlags >> 2 & 3;\n      textRegion.stripSize = 1 << textRegion.logStripSize;\n      textRegion.referenceCorner = textRegionSegmentFlags >> 4 & 3;\n      textRegion.transposed = !!(textRegionSegmentFlags & 64);\n      textRegion.combinationOperator = textRegionSegmentFlags >> 7 & 3;\n      textRegion.defaultPixelValue = textRegionSegmentFlags >> 9 & 1;\n      textRegion.dsOffset = textRegionSegmentFlags << 17 >> 27;\n      textRegion.refinementTemplate = textRegionSegmentFlags >> 15 & 1;\n      if (textRegion.huffman) {\n        const textRegionHuffmanFlags = readUint16(data, position);\n        position += 2;\n        textRegion.huffmanFS = textRegionHuffmanFlags & 3;\n        textRegion.huffmanDS = textRegionHuffmanFlags >> 2 & 3;\n        textRegion.huffmanDT = textRegionHuffmanFlags >> 4 & 3;\n        textRegion.huffmanRefinementDW = textRegionHuffmanFlags >> 6 & 3;\n        textRegion.huffmanRefinementDH = textRegionHuffmanFlags >> 8 & 3;\n        textRegion.huffmanRefinementDX = textRegionHuffmanFlags >> 10 & 3;\n        textRegion.huffmanRefinementDY = textRegionHuffmanFlags >> 12 & 3;\n        textRegion.huffmanRefinementSizeSelector = !!(textRegionHuffmanFlags & 0x4000);\n      }\n      if (textRegion.refinement && !textRegion.refinementTemplate) {\n        at = [];\n        for (i = 0; i < 2; i++) {\n          at.push({\n            x: readInt8(data, position),\n            y: readInt8(data, position + 1)\n          });\n          position += 2;\n        }\n        textRegion.refinementAt = at;\n      }\n      textRegion.numberOfSymbolInstances = readUint32(data, position);\n      position += 4;\n      args = [textRegion, header.referredTo, data, position, end];\n      break;\n    case 16:\n      const patternDictionary = {};\n      const patternDictionaryFlags = data[position++];\n      patternDictionary.mmr = !!(patternDictionaryFlags & 1);\n      patternDictionary.template = patternDictionaryFlags >> 1 & 3;\n      patternDictionary.patternWidth = data[position++];\n      patternDictionary.patternHeight = data[position++];\n      patternDictionary.maxPatternIndex = readUint32(data, position);\n      position += 4;\n      args = [patternDictionary, header.number, data, position, end];\n      break;\n    case 22:\n    case 23:\n      const halftoneRegion = {};\n      halftoneRegion.info = readRegionSegmentInformation(data, position);\n      position += RegionSegmentInformationFieldLength;\n      const halftoneRegionFlags = data[position++];\n      halftoneRegion.mmr = !!(halftoneRegionFlags & 1);\n      halftoneRegion.template = halftoneRegionFlags >> 1 & 3;\n      halftoneRegion.enableSkip = !!(halftoneRegionFlags & 8);\n      halftoneRegion.combinationOperator = halftoneRegionFlags >> 4 & 7;\n      halftoneRegion.defaultPixelValue = halftoneRegionFlags >> 7 & 1;\n      halftoneRegion.gridWidth = readUint32(data, position);\n      position += 4;\n      halftoneRegion.gridHeight = readUint32(data, position);\n      position += 4;\n      halftoneRegion.gridOffsetX = readUint32(data, position) & 0xffffffff;\n      position += 4;\n      halftoneRegion.gridOffsetY = readUint32(data, position) & 0xffffffff;\n      position += 4;\n      halftoneRegion.gridVectorX = readUint16(data, position);\n      position += 2;\n      halftoneRegion.gridVectorY = readUint16(data, position);\n      position += 2;\n      args = [halftoneRegion, header.referredTo, data, position, end];\n      break;\n    case 38:\n    case 39:\n      const genericRegion = {};\n      genericRegion.info = readRegionSegmentInformation(data, position);\n      position += RegionSegmentInformationFieldLength;\n      const genericRegionSegmentFlags = data[position++];\n      genericRegion.mmr = !!(genericRegionSegmentFlags & 1);\n      genericRegion.template = genericRegionSegmentFlags >> 1 & 3;\n      genericRegion.prediction = !!(genericRegionSegmentFlags & 8);\n      if (!genericRegion.mmr) {\n        atLength = genericRegion.template === 0 ? 4 : 1;\n        at = [];\n        for (i = 0; i < atLength; i++) {\n          at.push({\n            x: readInt8(data, position),\n            y: readInt8(data, position + 1)\n          });\n          position += 2;\n        }\n        genericRegion.at = at;\n      }\n      args = [genericRegion, data, position, end];\n      break;\n    case 48:\n      const pageInfo = {\n        width: readUint32(data, position),\n        height: readUint32(data, position + 4),\n        resolutionX: readUint32(data, position + 8),\n        resolutionY: readUint32(data, position + 12)\n      };\n      if (pageInfo.height === 0xffffffff) {\n        delete pageInfo.height;\n      }\n      const pageSegmentFlags = data[position + 16];\n      readUint16(data, position + 17);\n      pageInfo.lossless = !!(pageSegmentFlags & 1);\n      pageInfo.refinement = !!(pageSegmentFlags & 2);\n      pageInfo.defaultPixelValue = pageSegmentFlags >> 2 & 1;\n      pageInfo.combinationOperator = pageSegmentFlags >> 3 & 3;\n      pageInfo.requiresBuffer = !!(pageSegmentFlags & 32);\n      pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64);\n      args = [pageInfo];\n      break;\n    case 49:\n      break;\n    case 50:\n      break;\n    case 51:\n      break;\n    case 53:\n      args = [header.number, data, position, end];\n      break;\n    case 62:\n      break;\n    default:\n      throw new Jbig2Error(`segment type ${header.typeName}(${header.type}) is not implemented`);\n  }\n  const callbackName = \"on\" + header.typeName;\n  if (callbackName in visitor) {\n    visitor[callbackName].apply(visitor, args);\n  }\n}\nfunction processSegments(segments, visitor) {\n  for (let i = 0, ii = segments.length; i < ii; i++) {\n    processSegment(segments[i], visitor);\n  }\n}\nfunction parseJbig2Chunks(chunks) {\n  const visitor = new SimpleSegmentVisitor();\n  for (let i = 0, ii = chunks.length; i < ii; i++) {\n    const chunk = chunks[i];\n    const segments = readSegments({}, chunk.data, chunk.start, chunk.end);\n    processSegments(segments, visitor);\n  }\n  return visitor.buffer;\n}\nfunction parseJbig2(data) {\n  throw new Error(\"Not implemented: parseJbig2\");\n}\nclass SimpleSegmentVisitor {\n  onPageInformation(info) {\n    this.currentPageInfo = info;\n    const rowSize = info.width + 7 >> 3;\n    const buffer = new Uint8ClampedArray(rowSize * info.height);\n    if (info.defaultPixelValue) {\n      buffer.fill(0xff);\n    }\n    this.buffer = buffer;\n  }\n  drawBitmap(regionInfo, bitmap) {\n    const pageInfo = this.currentPageInfo;\n    const width = regionInfo.width,\n      height = regionInfo.height;\n    const rowSize = pageInfo.width + 7 >> 3;\n    const combinationOperator = pageInfo.combinationOperatorOverride ? regionInfo.combinationOperator : pageInfo.combinationOperator;\n    const buffer = this.buffer;\n    const mask0 = 128 >> (regionInfo.x & 7);\n    let offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3);\n    let i, j, mask, offset;\n    switch (combinationOperator) {\n      case 0:\n        for (i = 0; i < height; i++) {\n          mask = mask0;\n          offset = offset0;\n          for (j = 0; j < width; j++) {\n            if (bitmap[i][j]) {\n              buffer[offset] |= mask;\n            }\n            mask >>= 1;\n            if (!mask) {\n              mask = 128;\n              offset++;\n            }\n          }\n          offset0 += rowSize;\n        }\n        break;\n      case 2:\n        for (i = 0; i < height; i++) {\n          mask = mask0;\n          offset = offset0;\n          for (j = 0; j < width; j++) {\n            if (bitmap[i][j]) {\n              buffer[offset] ^= mask;\n            }\n            mask >>= 1;\n            if (!mask) {\n              mask = 128;\n              offset++;\n            }\n          }\n          offset0 += rowSize;\n        }\n        break;\n      default:\n        throw new Jbig2Error(`operator ${combinationOperator} is not supported`);\n    }\n  }\n  onImmediateGenericRegion(region, data, start, end) {\n    const regionInfo = region.info;\n    const decodingContext = new DecodingContext(data, start, end);\n    const bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height, region.template, region.prediction, null, region.at, decodingContext);\n    this.drawBitmap(regionInfo, bitmap);\n  }\n  onImmediateLosslessGenericRegion() {\n    this.onImmediateGenericRegion(...arguments);\n  }\n  onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) {\n    let huffmanTables, huffmanInput;\n    if (dictionary.huffman) {\n      huffmanTables = getSymbolDictionaryHuffmanTables(dictionary, referredSegments, this.customTables);\n      huffmanInput = new Reader(data, start, end);\n    }\n    let symbols = this.symbols;\n    if (!symbols) {\n      this.symbols = symbols = {};\n    }\n    const inputSymbols = [];\n    for (const referredSegment of referredSegments) {\n      const referredSymbols = symbols[referredSegment];\n      if (referredSymbols) {\n        inputSymbols.push(...referredSymbols);\n      }\n    }\n    const decodingContext = new DecodingContext(data, start, end);\n    symbols[currentSegment] = decodeSymbolDictionary(dictionary.huffman, dictionary.refinement, inputSymbols, dictionary.numberOfNewSymbols, dictionary.numberOfExportedSymbols, huffmanTables, dictionary.template, dictionary.at, dictionary.refinementTemplate, dictionary.refinementAt, decodingContext, huffmanInput);\n  }\n  onImmediateTextRegion(region, referredSegments, data, start, end) {\n    const regionInfo = region.info;\n    let huffmanTables, huffmanInput;\n    const symbols = this.symbols;\n    const inputSymbols = [];\n    for (const referredSegment of referredSegments) {\n      const referredSymbols = symbols[referredSegment];\n      if (referredSymbols) {\n        inputSymbols.push(...referredSymbols);\n      }\n    }\n    const symbolCodeLength = log2(inputSymbols.length);\n    if (region.huffman) {\n      huffmanInput = new Reader(data, start, end);\n      huffmanTables = getTextRegionHuffmanTables(region, referredSegments, this.customTables, inputSymbols.length, huffmanInput);\n    }\n    const decodingContext = new DecodingContext(data, start, end);\n    const bitmap = decodeTextRegion(region.huffman, region.refinement, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.numberOfSymbolInstances, region.stripSize, inputSymbols, symbolCodeLength, region.transposed, region.dsOffset, region.referenceCorner, region.combinationOperator, huffmanTables, region.refinementTemplate, region.refinementAt, decodingContext, region.logStripSize, huffmanInput);\n    this.drawBitmap(regionInfo, bitmap);\n  }\n  onImmediateLosslessTextRegion() {\n    this.onImmediateTextRegion(...arguments);\n  }\n  onPatternDictionary(dictionary, currentSegment, data, start, end) {\n    let patterns = this.patterns;\n    if (!patterns) {\n      this.patterns = patterns = {};\n    }\n    const decodingContext = new DecodingContext(data, start, end);\n    patterns[currentSegment] = decodePatternDictionary(dictionary.mmr, dictionary.patternWidth, dictionary.patternHeight, dictionary.maxPatternIndex, dictionary.template, decodingContext);\n  }\n  onImmediateHalftoneRegion(region, referredSegments, data, start, end) {\n    const patterns = this.patterns[referredSegments[0]];\n    const regionInfo = region.info;\n    const decodingContext = new DecodingContext(data, start, end);\n    const bitmap = decodeHalftoneRegion(region.mmr, patterns, region.template, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.enableSkip, region.combinationOperator, region.gridWidth, region.gridHeight, region.gridOffsetX, region.gridOffsetY, region.gridVectorX, region.gridVectorY, decodingContext);\n    this.drawBitmap(regionInfo, bitmap);\n  }\n  onImmediateLosslessHalftoneRegion() {\n    this.onImmediateHalftoneRegion(...arguments);\n  }\n  onTables(currentSegment, data, start, end) {\n    let customTables = this.customTables;\n    if (!customTables) {\n      this.customTables = customTables = {};\n    }\n    customTables[currentSegment] = decodeTablesSegment(data, start, end);\n  }\n}\nclass HuffmanLine {\n  constructor(lineData) {\n    if (lineData.length === 2) {\n      this.isOOB = true;\n      this.rangeLow = 0;\n      this.prefixLength = lineData[0];\n      this.rangeLength = 0;\n      this.prefixCode = lineData[1];\n      this.isLowerRange = false;\n    } else {\n      this.isOOB = false;\n      this.rangeLow = lineData[0];\n      this.prefixLength = lineData[1];\n      this.rangeLength = lineData[2];\n      this.prefixCode = lineData[3];\n      this.isLowerRange = lineData[4] === \"lower\";\n    }\n  }\n}\nclass HuffmanTreeNode {\n  constructor(line) {\n    this.children = [];\n    if (line) {\n      this.isLeaf = true;\n      this.rangeLength = line.rangeLength;\n      this.rangeLow = line.rangeLow;\n      this.isLowerRange = line.isLowerRange;\n      this.isOOB = line.isOOB;\n    } else {\n      this.isLeaf = false;\n    }\n  }\n  buildTree(line, shift) {\n    const bit = line.prefixCode >> shift & 1;\n    if (shift <= 0) {\n      this.children[bit] = new HuffmanTreeNode(line);\n    } else {\n      let node = this.children[bit];\n      if (!node) {\n        this.children[bit] = node = new HuffmanTreeNode(null);\n      }\n      node.buildTree(line, shift - 1);\n    }\n  }\n  decodeNode(reader) {\n    if (this.isLeaf) {\n      if (this.isOOB) {\n        return null;\n      }\n      const htOffset = reader.readBits(this.rangeLength);\n      return this.rangeLow + (this.isLowerRange ? -htOffset : htOffset);\n    }\n    const node = this.children[reader.readBit()];\n    if (!node) {\n      throw new Jbig2Error(\"invalid Huffman data\");\n    }\n    return node.decodeNode(reader);\n  }\n}\nclass HuffmanTable {\n  constructor(lines, prefixCodesDone) {\n    if (!prefixCodesDone) {\n      this.assignPrefixCodes(lines);\n    }\n    this.rootNode = new HuffmanTreeNode(null);\n    for (let i = 0, ii = lines.length; i < ii; i++) {\n      const line = lines[i];\n      if (line.prefixLength > 0) {\n        this.rootNode.buildTree(line, line.prefixLength - 1);\n      }\n    }\n  }\n  decode(reader) {\n    return this.rootNode.decodeNode(reader);\n  }\n  assignPrefixCodes(lines) {\n    const linesLength = lines.length;\n    let prefixLengthMax = 0;\n    for (let i = 0; i < linesLength; i++) {\n      prefixLengthMax = Math.max(prefixLengthMax, lines[i].prefixLength);\n    }\n    const histogram = new Uint32Array(prefixLengthMax + 1);\n    for (let i = 0; i < linesLength; i++) {\n      histogram[lines[i].prefixLength]++;\n    }\n    let currentLength = 1,\n      firstCode = 0,\n      currentCode,\n      currentTemp,\n      line;\n    histogram[0] = 0;\n    while (currentLength <= prefixLengthMax) {\n      firstCode = firstCode + histogram[currentLength - 1] << 1;\n      currentCode = firstCode;\n      currentTemp = 0;\n      while (currentTemp < linesLength) {\n        line = lines[currentTemp];\n        if (line.prefixLength === currentLength) {\n          line.prefixCode = currentCode;\n          currentCode++;\n        }\n        currentTemp++;\n      }\n      currentLength++;\n    }\n  }\n}\nfunction decodeTablesSegment(data, start, end) {\n  const flags = data[start];\n  const lowestValue = readUint32(data, start + 1) & 0xffffffff;\n  const highestValue = readUint32(data, start + 5) & 0xffffffff;\n  const reader = new Reader(data, start + 9, end);\n  const prefixSizeBits = (flags >> 1 & 7) + 1;\n  const rangeSizeBits = (flags >> 4 & 7) + 1;\n  const lines = [];\n  let prefixLength,\n    rangeLength,\n    currentRangeLow = lowestValue;\n  do {\n    prefixLength = reader.readBits(prefixSizeBits);\n    rangeLength = reader.readBits(rangeSizeBits);\n    lines.push(new HuffmanLine([currentRangeLow, prefixLength, rangeLength, 0]));\n    currentRangeLow += 1 << rangeLength;\n  } while (currentRangeLow < highestValue);\n  prefixLength = reader.readBits(prefixSizeBits);\n  lines.push(new HuffmanLine([lowestValue - 1, prefixLength, 32, 0, \"lower\"]));\n  prefixLength = reader.readBits(prefixSizeBits);\n  lines.push(new HuffmanLine([highestValue, prefixLength, 32, 0]));\n  if (flags & 1) {\n    prefixLength = reader.readBits(prefixSizeBits);\n    lines.push(new HuffmanLine([prefixLength, 0]));\n  }\n  return new HuffmanTable(lines, false);\n}\nconst standardTablesCache = {};\nfunction getStandardTable(number) {\n  let table = standardTablesCache[number];\n  if (table) {\n    return table;\n  }\n  let lines;\n  switch (number) {\n    case 1:\n      lines = [[0, 1, 4, 0x0], [16, 2, 8, 0x2], [272, 3, 16, 0x6], [65808, 3, 32, 0x7]];\n      break;\n    case 2:\n      lines = [[0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [75, 6, 32, 0x3e], [6, 0x3f]];\n      break;\n    case 3:\n      lines = [[-256, 8, 8, 0xfe], [0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [-257, 8, 32, 0xff, \"lower\"], [75, 7, 32, 0x7e], [6, 0x3e]];\n      break;\n    case 4:\n      lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [76, 5, 32, 0x1f]];\n      break;\n    case 5:\n      lines = [[-255, 7, 8, 0x7e], [1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [-256, 7, 32, 0x7f, \"lower\"], [76, 6, 32, 0x3e]];\n      break;\n    case 6:\n      lines = [[-2048, 5, 10, 0x1c], [-1024, 4, 9, 0x8], [-512, 4, 8, 0x9], [-256, 4, 7, 0xa], [-128, 5, 6, 0x1d], [-64, 5, 5, 0x1e], [-32, 4, 5, 0xb], [0, 2, 7, 0x0], [128, 3, 7, 0x2], [256, 3, 8, 0x3], [512, 4, 9, 0xc], [1024, 4, 10, 0xd], [-2049, 6, 32, 0x3e, \"lower\"], [2048, 6, 32, 0x3f]];\n      break;\n    case 7:\n      lines = [[-1024, 4, 9, 0x8], [-512, 3, 8, 0x0], [-256, 4, 7, 0x9], [-128, 5, 6, 0x1a], [-64, 5, 5, 0x1b], [-32, 4, 5, 0xa], [0, 4, 5, 0xb], [32, 5, 5, 0x1c], [64, 5, 6, 0x1d], [128, 4, 7, 0xc], [256, 3, 8, 0x1], [512, 3, 9, 0x2], [1024, 3, 10, 0x3], [-1025, 5, 32, 0x1e, \"lower\"], [2048, 5, 32, 0x1f]];\n      break;\n    case 8:\n      lines = [[-15, 8, 3, 0xfc], [-7, 9, 1, 0x1fc], [-5, 8, 1, 0xfd], [-3, 9, 0, 0x1fd], [-2, 7, 0, 0x7c], [-1, 4, 0, 0xa], [0, 2, 1, 0x0], [2, 5, 0, 0x1a], [3, 6, 0, 0x3a], [4, 3, 4, 0x4], [20, 6, 1, 0x3b], [22, 4, 4, 0xb], [38, 4, 5, 0xc], [70, 5, 6, 0x1b], [134, 5, 7, 0x1c], [262, 6, 7, 0x3c], [390, 7, 8, 0x7d], [646, 6, 10, 0x3d], [-16, 9, 32, 0x1fe, \"lower\"], [1670, 9, 32, 0x1ff], [2, 0x1]];\n      break;\n    case 9:\n      lines = [[-31, 8, 4, 0xfc], [-15, 9, 2, 0x1fc], [-11, 8, 2, 0xfd], [-7, 9, 1, 0x1fd], [-5, 7, 1, 0x7c], [-3, 4, 1, 0xa], [-1, 3, 1, 0x2], [1, 3, 1, 0x3], [3, 5, 1, 0x1a], [5, 6, 1, 0x3a], [7, 3, 5, 0x4], [39, 6, 2, 0x3b], [43, 4, 5, 0xb], [75, 4, 6, 0xc], [139, 5, 7, 0x1b], [267, 5, 8, 0x1c], [523, 6, 8, 0x3c], [779, 7, 9, 0x7d], [1291, 6, 11, 0x3d], [-32, 9, 32, 0x1fe, \"lower\"], [3339, 9, 32, 0x1ff], [2, 0x0]];\n      break;\n    case 10:\n      lines = [[-21, 7, 4, 0x7a], [-5, 8, 0, 0xfc], [-4, 7, 0, 0x7b], [-3, 5, 0, 0x18], [-2, 2, 2, 0x0], [2, 5, 0, 0x19], [3, 6, 0, 0x36], [4, 7, 0, 0x7c], [5, 8, 0, 0xfd], [6, 2, 6, 0x1], [70, 5, 5, 0x1a], [102, 6, 5, 0x37], [134, 6, 6, 0x38], [198, 6, 7, 0x39], [326, 6, 8, 0x3a], [582, 6, 9, 0x3b], [1094, 6, 10, 0x3c], [2118, 7, 11, 0x7d], [-22, 8, 32, 0xfe, \"lower\"], [4166, 8, 32, 0xff], [2, 0x2]];\n      break;\n    case 11:\n      lines = [[1, 1, 0, 0x0], [2, 2, 1, 0x2], [4, 4, 0, 0xc], [5, 4, 1, 0xd], [7, 5, 1, 0x1c], [9, 5, 2, 0x1d], [13, 6, 2, 0x3c], [17, 7, 2, 0x7a], [21, 7, 3, 0x7b], [29, 7, 4, 0x7c], [45, 7, 5, 0x7d], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]];\n      break;\n    case 12:\n      lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 1, 0x6], [5, 5, 0, 0x1c], [6, 5, 1, 0x1d], [8, 6, 1, 0x3c], [10, 7, 0, 0x7a], [11, 7, 1, 0x7b], [13, 7, 2, 0x7c], [17, 7, 3, 0x7d], [25, 7, 4, 0x7e], [41, 8, 5, 0xfe], [73, 8, 32, 0xff]];\n      break;\n    case 13:\n      lines = [[1, 1, 0, 0x0], [2, 3, 0, 0x4], [3, 4, 0, 0xc], [4, 5, 0, 0x1c], [5, 4, 1, 0xd], [7, 3, 3, 0x5], [15, 6, 1, 0x3a], [17, 6, 2, 0x3b], [21, 6, 3, 0x3c], [29, 6, 4, 0x3d], [45, 6, 5, 0x3e], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]];\n      break;\n    case 14:\n      lines = [[-2, 3, 0, 0x4], [-1, 3, 0, 0x5], [0, 1, 0, 0x0], [1, 3, 0, 0x6], [2, 3, 0, 0x7]];\n      break;\n    case 15:\n      lines = [[-24, 7, 4, 0x7c], [-8, 6, 2, 0x3c], [-4, 5, 1, 0x1c], [-2, 4, 0, 0xc], [-1, 3, 0, 0x4], [0, 1, 0, 0x0], [1, 3, 0, 0x5], [2, 4, 0, 0xd], [3, 5, 1, 0x1d], [5, 6, 2, 0x3d], [9, 7, 4, 0x7d], [-25, 7, 32, 0x7e, \"lower\"], [25, 7, 32, 0x7f]];\n      break;\n    default:\n      throw new Jbig2Error(`standard table B.${number} does not exist`);\n  }\n  for (let i = 0, ii = lines.length; i < ii; i++) {\n    lines[i] = new HuffmanLine(lines[i]);\n  }\n  table = new HuffmanTable(lines, true);\n  standardTablesCache[number] = table;\n  return table;\n}\nclass Reader {\n  constructor(data, start, end) {\n    this.data = data;\n    this.start = start;\n    this.end = end;\n    this.position = start;\n    this.shift = -1;\n    this.currentByte = 0;\n  }\n  readBit() {\n    if (this.shift < 0) {\n      if (this.position >= this.end) {\n        throw new Jbig2Error(\"end of data while reading bit\");\n      }\n      this.currentByte = this.data[this.position++];\n      this.shift = 7;\n    }\n    const bit = this.currentByte >> this.shift & 1;\n    this.shift--;\n    return bit;\n  }\n  readBits(numBits) {\n    let result = 0,\n      i;\n    for (i = numBits - 1; i >= 0; i--) {\n      result |= this.readBit() << i;\n    }\n    return result;\n  }\n  byteAlign() {\n    this.shift = -1;\n  }\n  next() {\n    if (this.position >= this.end) {\n      return -1;\n    }\n    return this.data[this.position++];\n  }\n}\nfunction getCustomHuffmanTable(index, referredTo, customTables) {\n  let currentIndex = 0;\n  for (let i = 0, ii = referredTo.length; i < ii; i++) {\n    const table = customTables[referredTo[i]];\n    if (table) {\n      if (index === currentIndex) {\n        return table;\n      }\n      currentIndex++;\n    }\n  }\n  throw new Jbig2Error(\"can't find custom Huffman table\");\n}\nfunction getTextRegionHuffmanTables(textRegion, referredTo, customTables, numberOfSymbols, reader) {\n  const codes = [];\n  for (let i = 0; i <= 34; i++) {\n    const codeLength = reader.readBits(4);\n    codes.push(new HuffmanLine([i, codeLength, 0, 0]));\n  }\n  const runCodesTable = new HuffmanTable(codes, false);\n  codes.length = 0;\n  for (let i = 0; i < numberOfSymbols;) {\n    const codeLength = runCodesTable.decode(reader);\n    if (codeLength >= 32) {\n      let repeatedLength, numberOfRepeats, j;\n      switch (codeLength) {\n        case 32:\n          if (i === 0) {\n            throw new Jbig2Error(\"no previous value in symbol ID table\");\n          }\n          numberOfRepeats = reader.readBits(2) + 3;\n          repeatedLength = codes[i - 1].prefixLength;\n          break;\n        case 33:\n          numberOfRepeats = reader.readBits(3) + 3;\n          repeatedLength = 0;\n          break;\n        case 34:\n          numberOfRepeats = reader.readBits(7) + 11;\n          repeatedLength = 0;\n          break;\n        default:\n          throw new Jbig2Error(\"invalid code length in symbol ID table\");\n      }\n      for (j = 0; j < numberOfRepeats; j++) {\n        codes.push(new HuffmanLine([i, repeatedLength, 0, 0]));\n        i++;\n      }\n    } else {\n      codes.push(new HuffmanLine([i, codeLength, 0, 0]));\n      i++;\n    }\n  }\n  reader.byteAlign();\n  const symbolIDTable = new HuffmanTable(codes, false);\n  let customIndex = 0,\n    tableFirstS,\n    tableDeltaS,\n    tableDeltaT;\n  switch (textRegion.huffmanFS) {\n    case 0:\n    case 1:\n      tableFirstS = getStandardTable(textRegion.huffmanFS + 6);\n      break;\n    case 3:\n      tableFirstS = getCustomHuffmanTable(customIndex, referredTo, customTables);\n      customIndex++;\n      break;\n    default:\n      throw new Jbig2Error(\"invalid Huffman FS selector\");\n  }\n  switch (textRegion.huffmanDS) {\n    case 0:\n    case 1:\n    case 2:\n      tableDeltaS = getStandardTable(textRegion.huffmanDS + 8);\n      break;\n    case 3:\n      tableDeltaS = getCustomHuffmanTable(customIndex, referredTo, customTables);\n      customIndex++;\n      break;\n    default:\n      throw new Jbig2Error(\"invalid Huffman DS selector\");\n  }\n  switch (textRegion.huffmanDT) {\n    case 0:\n    case 1:\n    case 2:\n      tableDeltaT = getStandardTable(textRegion.huffmanDT + 11);\n      break;\n    case 3:\n      tableDeltaT = getCustomHuffmanTable(customIndex, referredTo, customTables);\n      customIndex++;\n      break;\n    default:\n      throw new Jbig2Error(\"invalid Huffman DT selector\");\n  }\n  if (textRegion.refinement) {\n    throw new Jbig2Error(\"refinement with Huffman is not supported\");\n  }\n  return {\n    symbolIDTable,\n    tableFirstS,\n    tableDeltaS,\n    tableDeltaT\n  };\n}\nfunction getSymbolDictionaryHuffmanTables(dictionary, referredTo, customTables) {\n  let customIndex = 0,\n    tableDeltaHeight,\n    tableDeltaWidth;\n  switch (dictionary.huffmanDHSelector) {\n    case 0:\n    case 1:\n      tableDeltaHeight = getStandardTable(dictionary.huffmanDHSelector + 4);\n      break;\n    case 3:\n      tableDeltaHeight = getCustomHuffmanTable(customIndex, referredTo, customTables);\n      customIndex++;\n      break;\n    default:\n      throw new Jbig2Error(\"invalid Huffman DH selector\");\n  }\n  switch (dictionary.huffmanDWSelector) {\n    case 0:\n    case 1:\n      tableDeltaWidth = getStandardTable(dictionary.huffmanDWSelector + 2);\n      break;\n    case 3:\n      tableDeltaWidth = getCustomHuffmanTable(customIndex, referredTo, customTables);\n      customIndex++;\n      break;\n    default:\n      throw new Jbig2Error(\"invalid Huffman DW selector\");\n  }\n  let tableBitmapSize, tableAggregateInstances;\n  if (dictionary.bitmapSizeSelector) {\n    tableBitmapSize = getCustomHuffmanTable(customIndex, referredTo, customTables);\n    customIndex++;\n  } else {\n    tableBitmapSize = getStandardTable(1);\n  }\n  if (dictionary.aggregationInstancesSelector) {\n    tableAggregateInstances = getCustomHuffmanTable(customIndex, referredTo, customTables);\n  } else {\n    tableAggregateInstances = getStandardTable(1);\n  }\n  return {\n    tableDeltaHeight,\n    tableDeltaWidth,\n    tableBitmapSize,\n    tableAggregateInstances\n  };\n}\nfunction readUncompressedBitmap(reader, width, height) {\n  const bitmap = [];\n  for (let y = 0; y < height; y++) {\n    const row = new Uint8Array(width);\n    bitmap.push(row);\n    for (let x = 0; x < width; x++) {\n      row[x] = reader.readBit();\n    }\n    reader.byteAlign();\n  }\n  return bitmap;\n}\nfunction decodeMMRBitmap(input, width, height, endOfBlock) {\n  const params = {\n    K: -1,\n    Columns: width,\n    Rows: height,\n    BlackIs1: true,\n    EndOfBlock: endOfBlock\n  };\n  const decoder = new CCITTFaxDecoder(input, params);\n  const bitmap = [];\n  let currentByte,\n    eof = false;\n  for (let y = 0; y < height; y++) {\n    const row = new Uint8Array(width);\n    bitmap.push(row);\n    let shift = -1;\n    for (let x = 0; x < width; x++) {\n      if (shift < 0) {\n        currentByte = decoder.readNextChar();\n        if (currentByte === -1) {\n          currentByte = 0;\n          eof = true;\n        }\n        shift = 7;\n      }\n      row[x] = currentByte >> shift & 1;\n      shift--;\n    }\n  }\n  if (endOfBlock && !eof) {\n    const lookForEOFLimit = 5;\n    for (let i = 0; i < lookForEOFLimit; i++) {\n      if (decoder.readNextChar() === -1) {\n        break;\n      }\n    }\n  }\n  return bitmap;\n}\nclass Jbig2Image {\n  parseChunks(chunks) {\n    return parseJbig2Chunks(chunks);\n  }\n  parse(data) {\n    throw new Error(\"Not implemented: Jbig2Image.parse\");\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/jbig2_stream.js\n\n\n\n\n\nclass Jbig2Stream extends DecodeStream {\n  constructor(stream, maybeLength, params) {\n    super(maybeLength);\n    this.stream = stream;\n    this.dict = stream.dict;\n    this.maybeLength = maybeLength;\n    this.params = params;\n  }\n  get bytes() {\n    return shadow(this, \"bytes\", this.stream.getBytes(this.maybeLength));\n  }\n  ensureBuffer(requested) {}\n  readBlock() {\n    if (this.eof) {\n      return;\n    }\n    const jbig2Image = new Jbig2Image();\n    const chunks = [];\n    if (this.params instanceof Dict) {\n      const globalsStream = this.params.get(\"JBIG2Globals\");\n      if (globalsStream instanceof BaseStream) {\n        const globals = globalsStream.getBytes();\n        chunks.push({\n          data: globals,\n          start: 0,\n          end: globals.length\n        });\n      }\n    }\n    chunks.push({\n      data: this.bytes,\n      start: 0,\n      end: this.bytes.length\n    });\n    const data = jbig2Image.parseChunks(chunks);\n    const dataLength = data.length;\n    for (let i = 0; i < dataLength; i++) {\n      data[i] ^= 0xff;\n    }\n    this.buffer = data;\n    this.bufferLength = dataLength;\n    this.eof = true;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/shared/image_utils.js\n\nfunction convertToRGBA(params) {\n  switch (params.kind) {\n    case ImageKind.GRAYSCALE_1BPP:\n      return convertBlackAndWhiteToRGBA(params);\n    case ImageKind.RGB_24BPP:\n      return convertRGBToRGBA(params);\n  }\n  return null;\n}\nfunction convertBlackAndWhiteToRGBA({\n  src,\n  srcPos = 0,\n  dest,\n  width,\n  height,\n  nonBlackColor = 0xffffffff,\n  inverseDecode = false\n}) {\n  const black = FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;\n  const [zeroMapping, oneMapping] = inverseDecode ? [nonBlackColor, black] : [black, nonBlackColor];\n  const widthInSource = width >> 3;\n  const widthRemainder = width & 7;\n  const srcLength = src.length;\n  dest = new Uint32Array(dest.buffer);\n  let destPos = 0;\n  for (let i = 0; i < height; i++) {\n    for (const max = srcPos + widthInSource; srcPos < max; srcPos++) {\n      const elem = srcPos < srcLength ? src[srcPos] : 255;\n      dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping;\n      dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping;\n      dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping;\n      dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping;\n      dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping;\n      dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping;\n      dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping;\n      dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping;\n    }\n    if (widthRemainder === 0) {\n      continue;\n    }\n    const elem = srcPos < srcLength ? src[srcPos++] : 255;\n    for (let j = 0; j < widthRemainder; j++) {\n      dest[destPos++] = elem & 1 << 7 - j ? oneMapping : zeroMapping;\n    }\n  }\n  return {\n    srcPos,\n    destPos\n  };\n}\nfunction convertRGBToRGBA({\n  src,\n  srcPos = 0,\n  dest,\n  destPos = 0,\n  width,\n  height\n}) {\n  let i = 0;\n  const len32 = src.length >> 2;\n  const src32 = new Uint32Array(src.buffer, srcPos, len32);\n  if (FeatureTest.isLittleEndian) {\n    for (; i < len32 - 2; i += 3, destPos += 4) {\n      const s1 = src32[i];\n      const s2 = src32[i + 1];\n      const s3 = src32[i + 2];\n      dest[destPos] = s1 | 0xff000000;\n      dest[destPos + 1] = s1 >>> 24 | s2 << 8 | 0xff000000;\n      dest[destPos + 2] = s2 >>> 16 | s3 << 16 | 0xff000000;\n      dest[destPos + 3] = s3 >>> 8 | 0xff000000;\n    }\n    for (let j = i * 4, jj = src.length; j < jj; j += 3) {\n      dest[destPos++] = src[j] | src[j + 1] << 8 | src[j + 2] << 16 | 0xff000000;\n    }\n  } else {\n    for (; i < len32 - 2; i += 3, destPos += 4) {\n      const s1 = src32[i];\n      const s2 = src32[i + 1];\n      const s3 = src32[i + 2];\n      dest[destPos] = s1 | 0xff;\n      dest[destPos + 1] = s1 << 24 | s2 >>> 8 | 0xff;\n      dest[destPos + 2] = s2 << 16 | s3 >>> 16 | 0xff;\n      dest[destPos + 3] = s3 << 8 | 0xff;\n    }\n    for (let j = i * 4, jj = src.length; j < jj; j += 3) {\n      dest[destPos++] = src[j] << 24 | src[j + 1] << 16 | src[j + 2] << 8 | 0xff;\n    }\n  }\n  return {\n    srcPos,\n    destPos\n  };\n}\nfunction grayToRGBA(src, dest) {\n  if (FeatureTest.isLittleEndian) {\n    for (let i = 0, ii = src.length; i < ii; i++) {\n      dest[i] = src[i] * 0x10101 | 0xff000000;\n    }\n  } else {\n    for (let i = 0, ii = src.length; i < ii; i++) {\n      dest[i] = src[i] * 0x1010100 | 0x000000ff;\n    }\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/jpg.js\n\n\n\nclass JpegError extends BaseException {\n  constructor(msg) {\n    super(msg, \"JpegError\");\n  }\n}\nclass DNLMarkerError extends BaseException {\n  constructor(message, scanLines) {\n    super(message, \"DNLMarkerError\");\n    this.scanLines = scanLines;\n  }\n}\nclass EOIMarkerError extends BaseException {\n  constructor(msg) {\n    super(msg, \"EOIMarkerError\");\n  }\n}\nconst dctZigZag = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]);\nconst dctCos1 = 4017;\nconst dctSin1 = 799;\nconst dctCos3 = 3406;\nconst dctSin3 = 2276;\nconst dctCos6 = 1567;\nconst dctSin6 = 3784;\nconst dctSqrt2 = 5793;\nconst dctSqrt1d2 = 2896;\nfunction buildHuffmanTable(codeLengths, values) {\n  let k = 0,\n    i,\n    j,\n    length = 16;\n  while (length > 0 && !codeLengths[length - 1]) {\n    length--;\n  }\n  const code = [{\n    children: [],\n    index: 0\n  }];\n  let p = code[0],\n    q;\n  for (i = 0; i < length; i++) {\n    for (j = 0; j < codeLengths[i]; j++) {\n      p = code.pop();\n      p.children[p.index] = values[k];\n      while (p.index > 0) {\n        p = code.pop();\n      }\n      p.index++;\n      code.push(p);\n      while (code.length <= i) {\n        code.push(q = {\n          children: [],\n          index: 0\n        });\n        p.children[p.index] = q.children;\n        p = q;\n      }\n      k++;\n    }\n    if (i + 1 < length) {\n      code.push(q = {\n        children: [],\n        index: 0\n      });\n      p.children[p.index] = q.children;\n      p = q;\n    }\n  }\n  return code[0].children;\n}\nfunction getBlockBufferOffset(component, row, col) {\n  return 64 * ((component.blocksPerLine + 1) * row + col);\n}\nfunction decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive, parseDNLMarker = false) {\n  const mcusPerLine = frame.mcusPerLine;\n  const progressive = frame.progressive;\n  const startOffset = offset;\n  let bitsData = 0,\n    bitsCount = 0;\n  function readBit() {\n    if (bitsCount > 0) {\n      bitsCount--;\n      return bitsData >> bitsCount & 1;\n    }\n    bitsData = data[offset++];\n    if (bitsData === 0xff) {\n      const nextByte = data[offset++];\n      if (nextByte) {\n        if (nextByte === 0xdc && parseDNLMarker) {\n          offset += 2;\n          const scanLines = readUint16(data, offset);\n          offset += 2;\n          if (scanLines > 0 && scanLines !== frame.scanLines) {\n            throw new DNLMarkerError(\"Found DNL marker (0xFFDC) while parsing scan data\", scanLines);\n          }\n        } else if (nextByte === 0xd9) {\n          if (parseDNLMarker) {\n            const maybeScanLines = blockRow * (frame.precision === 8 ? 8 : 0);\n            if (maybeScanLines > 0 && Math.round(frame.scanLines / maybeScanLines) >= 5) {\n              throw new DNLMarkerError(\"Found EOI marker (0xFFD9) while parsing scan data, \" + \"possibly caused by incorrect `scanLines` parameter\", maybeScanLines);\n            }\n          }\n          throw new EOIMarkerError(\"Found EOI marker (0xFFD9) while parsing scan data\");\n        }\n        throw new JpegError(`unexpected marker ${(bitsData << 8 | nextByte).toString(16)}`);\n      }\n    }\n    bitsCount = 7;\n    return bitsData >>> 7;\n  }\n  function decodeHuffman(tree) {\n    let node = tree;\n    while (true) {\n      node = node[readBit()];\n      switch (typeof node) {\n        case \"number\":\n          return node;\n        case \"object\":\n          continue;\n      }\n      throw new JpegError(\"invalid huffman sequence\");\n    }\n  }\n  function receive(length) {\n    let n = 0;\n    while (length > 0) {\n      n = n << 1 | readBit();\n      length--;\n    }\n    return n;\n  }\n  function receiveAndExtend(length) {\n    if (length === 1) {\n      return readBit() === 1 ? 1 : -1;\n    }\n    const n = receive(length);\n    if (n >= 1 << length - 1) {\n      return n;\n    }\n    return n + (-1 << length) + 1;\n  }\n  function decodeBaseline(component, blockOffset) {\n    const t = decodeHuffman(component.huffmanTableDC);\n    const diff = t === 0 ? 0 : receiveAndExtend(t);\n    component.blockData[blockOffset] = component.pred += diff;\n    let k = 1;\n    while (k < 64) {\n      const rs = decodeHuffman(component.huffmanTableAC);\n      const s = rs & 15,\n        r = rs >> 4;\n      if (s === 0) {\n        if (r < 15) {\n          break;\n        }\n        k += 16;\n        continue;\n      }\n      k += r;\n      const z = dctZigZag[k];\n      component.blockData[blockOffset + z] = receiveAndExtend(s);\n      k++;\n    }\n  }\n  function decodeDCFirst(component, blockOffset) {\n    const t = decodeHuffman(component.huffmanTableDC);\n    const diff = t === 0 ? 0 : receiveAndExtend(t) << successive;\n    component.blockData[blockOffset] = component.pred += diff;\n  }\n  function decodeDCSuccessive(component, blockOffset) {\n    component.blockData[blockOffset] |= readBit() << successive;\n  }\n  let eobrun = 0;\n  function decodeACFirst(component, blockOffset) {\n    if (eobrun > 0) {\n      eobrun--;\n      return;\n    }\n    let k = spectralStart;\n    const e = spectralEnd;\n    while (k <= e) {\n      const rs = decodeHuffman(component.huffmanTableAC);\n      const s = rs & 15,\n        r = rs >> 4;\n      if (s === 0) {\n        if (r < 15) {\n          eobrun = receive(r) + (1 << r) - 1;\n          break;\n        }\n        k += 16;\n        continue;\n      }\n      k += r;\n      const z = dctZigZag[k];\n      component.blockData[blockOffset + z] = receiveAndExtend(s) * (1 << successive);\n      k++;\n    }\n  }\n  let successiveACState = 0,\n    successiveACNextValue;\n  function decodeACSuccessive(component, blockOffset) {\n    let k = spectralStart;\n    const e = spectralEnd;\n    let r = 0;\n    let s;\n    let rs;\n    while (k <= e) {\n      const offsetZ = blockOffset + dctZigZag[k];\n      const sign = component.blockData[offsetZ] < 0 ? -1 : 1;\n      switch (successiveACState) {\n        case 0:\n          rs = decodeHuffman(component.huffmanTableAC);\n          s = rs & 15;\n          r = rs >> 4;\n          if (s === 0) {\n            if (r < 15) {\n              eobrun = receive(r) + (1 << r);\n              successiveACState = 4;\n            } else {\n              r = 16;\n              successiveACState = 1;\n            }\n          } else {\n            if (s !== 1) {\n              throw new JpegError(\"invalid ACn encoding\");\n            }\n            successiveACNextValue = receiveAndExtend(s);\n            successiveACState = r ? 2 : 3;\n          }\n          continue;\n        case 1:\n        case 2:\n          if (component.blockData[offsetZ]) {\n            component.blockData[offsetZ] += sign * (readBit() << successive);\n          } else {\n            r--;\n            if (r === 0) {\n              successiveACState = successiveACState === 2 ? 3 : 0;\n            }\n          }\n          break;\n        case 3:\n          if (component.blockData[offsetZ]) {\n            component.blockData[offsetZ] += sign * (readBit() << successive);\n          } else {\n            component.blockData[offsetZ] = successiveACNextValue << successive;\n            successiveACState = 0;\n          }\n          break;\n        case 4:\n          if (component.blockData[offsetZ]) {\n            component.blockData[offsetZ] += sign * (readBit() << successive);\n          }\n          break;\n      }\n      k++;\n    }\n    if (successiveACState === 4) {\n      eobrun--;\n      if (eobrun === 0) {\n        successiveACState = 0;\n      }\n    }\n  }\n  let blockRow = 0;\n  function decodeMcu(component, decode, mcu, row, col) {\n    const mcuRow = mcu / mcusPerLine | 0;\n    const mcuCol = mcu % mcusPerLine;\n    blockRow = mcuRow * component.v + row;\n    const blockCol = mcuCol * component.h + col;\n    const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);\n    decode(component, blockOffset);\n  }\n  function decodeBlock(component, decode, mcu) {\n    blockRow = mcu / component.blocksPerLine | 0;\n    const blockCol = mcu % component.blocksPerLine;\n    const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);\n    decode(component, blockOffset);\n  }\n  const componentsLength = components.length;\n  let component, i, j, k, n;\n  let decodeFn;\n  if (progressive) {\n    if (spectralStart === 0) {\n      decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;\n    } else {\n      decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;\n    }\n  } else {\n    decodeFn = decodeBaseline;\n  }\n  let mcu = 0,\n    fileMarker;\n  const mcuExpected = componentsLength === 1 ? components[0].blocksPerLine * components[0].blocksPerColumn : mcusPerLine * frame.mcusPerColumn;\n  let h, v;\n  while (mcu <= mcuExpected) {\n    const mcuToRead = resetInterval ? Math.min(mcuExpected - mcu, resetInterval) : mcuExpected;\n    if (mcuToRead > 0) {\n      for (i = 0; i < componentsLength; i++) {\n        components[i].pred = 0;\n      }\n      eobrun = 0;\n      if (componentsLength === 1) {\n        component = components[0];\n        for (n = 0; n < mcuToRead; n++) {\n          decodeBlock(component, decodeFn, mcu);\n          mcu++;\n        }\n      } else {\n        for (n = 0; n < mcuToRead; n++) {\n          for (i = 0; i < componentsLength; i++) {\n            component = components[i];\n            h = component.h;\n            v = component.v;\n            for (j = 0; j < v; j++) {\n              for (k = 0; k < h; k++) {\n                decodeMcu(component, decodeFn, mcu, j, k);\n              }\n            }\n          }\n          mcu++;\n        }\n      }\n    }\n    bitsCount = 0;\n    fileMarker = findNextFileMarker(data, offset);\n    if (!fileMarker) {\n      break;\n    }\n    if (fileMarker.invalid) {\n      const partialMsg = mcuToRead > 0 ? \"unexpected\" : \"excessive\";\n      warn(`decodeScan - ${partialMsg} MCU data, current marker is: ${fileMarker.invalid}`);\n      offset = fileMarker.offset;\n    }\n    if (fileMarker.marker >= 0xffd0 && fileMarker.marker <= 0xffd7) {\n      offset += 2;\n    } else {\n      break;\n    }\n  }\n  return offset - startOffset;\n}\nfunction quantizeAndInverse(component, blockBufferOffset, p) {\n  const qt = component.quantizationTable,\n    blockData = component.blockData;\n  let v0, v1, v2, v3, v4, v5, v6, v7;\n  let p0, p1, p2, p3, p4, p5, p6, p7;\n  let t;\n  if (!qt) {\n    throw new JpegError(\"missing required Quantization Table.\");\n  }\n  for (let row = 0; row < 64; row += 8) {\n    p0 = blockData[blockBufferOffset + row];\n    p1 = blockData[blockBufferOffset + row + 1];\n    p2 = blockData[blockBufferOffset + row + 2];\n    p3 = blockData[blockBufferOffset + row + 3];\n    p4 = blockData[blockBufferOffset + row + 4];\n    p5 = blockData[blockBufferOffset + row + 5];\n    p6 = blockData[blockBufferOffset + row + 6];\n    p7 = blockData[blockBufferOffset + row + 7];\n    p0 *= qt[row];\n    if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {\n      t = dctSqrt2 * p0 + 512 >> 10;\n      p[row] = t;\n      p[row + 1] = t;\n      p[row + 2] = t;\n      p[row + 3] = t;\n      p[row + 4] = t;\n      p[row + 5] = t;\n      p[row + 6] = t;\n      p[row + 7] = t;\n      continue;\n    }\n    p1 *= qt[row + 1];\n    p2 *= qt[row + 2];\n    p3 *= qt[row + 3];\n    p4 *= qt[row + 4];\n    p5 *= qt[row + 5];\n    p6 *= qt[row + 6];\n    p7 *= qt[row + 7];\n    v0 = dctSqrt2 * p0 + 128 >> 8;\n    v1 = dctSqrt2 * p4 + 128 >> 8;\n    v2 = p2;\n    v3 = p6;\n    v4 = dctSqrt1d2 * (p1 - p7) + 128 >> 8;\n    v7 = dctSqrt1d2 * (p1 + p7) + 128 >> 8;\n    v5 = p3 << 4;\n    v6 = p5 << 4;\n    v0 = v0 + v1 + 1 >> 1;\n    v1 = v0 - v1;\n    t = v2 * dctSin6 + v3 * dctCos6 + 128 >> 8;\n    v2 = v2 * dctCos6 - v3 * dctSin6 + 128 >> 8;\n    v3 = t;\n    v4 = v4 + v6 + 1 >> 1;\n    v6 = v4 - v6;\n    v7 = v7 + v5 + 1 >> 1;\n    v5 = v7 - v5;\n    v0 = v0 + v3 + 1 >> 1;\n    v3 = v0 - v3;\n    v1 = v1 + v2 + 1 >> 1;\n    v2 = v1 - v2;\n    t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12;\n    v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12;\n    v7 = t;\n    t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12;\n    v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12;\n    v6 = t;\n    p[row] = v0 + v7;\n    p[row + 7] = v0 - v7;\n    p[row + 1] = v1 + v6;\n    p[row + 6] = v1 - v6;\n    p[row + 2] = v2 + v5;\n    p[row + 5] = v2 - v5;\n    p[row + 3] = v3 + v4;\n    p[row + 4] = v3 - v4;\n  }\n  for (let col = 0; col < 8; ++col) {\n    p0 = p[col];\n    p1 = p[col + 8];\n    p2 = p[col + 16];\n    p3 = p[col + 24];\n    p4 = p[col + 32];\n    p5 = p[col + 40];\n    p6 = p[col + 48];\n    p7 = p[col + 56];\n    if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {\n      t = dctSqrt2 * p0 + 8192 >> 14;\n      if (t < -2040) {\n        t = 0;\n      } else if (t >= 2024) {\n        t = 255;\n      } else {\n        t = t + 2056 >> 4;\n      }\n      blockData[blockBufferOffset + col] = t;\n      blockData[blockBufferOffset + col + 8] = t;\n      blockData[blockBufferOffset + col + 16] = t;\n      blockData[blockBufferOffset + col + 24] = t;\n      blockData[blockBufferOffset + col + 32] = t;\n      blockData[blockBufferOffset + col + 40] = t;\n      blockData[blockBufferOffset + col + 48] = t;\n      blockData[blockBufferOffset + col + 56] = t;\n      continue;\n    }\n    v0 = dctSqrt2 * p0 + 2048 >> 12;\n    v1 = dctSqrt2 * p4 + 2048 >> 12;\n    v2 = p2;\n    v3 = p6;\n    v4 = dctSqrt1d2 * (p1 - p7) + 2048 >> 12;\n    v7 = dctSqrt1d2 * (p1 + p7) + 2048 >> 12;\n    v5 = p3;\n    v6 = p5;\n    v0 = (v0 + v1 + 1 >> 1) + 4112;\n    v1 = v0 - v1;\n    t = v2 * dctSin6 + v3 * dctCos6 + 2048 >> 12;\n    v2 = v2 * dctCos6 - v3 * dctSin6 + 2048 >> 12;\n    v3 = t;\n    v4 = v4 + v6 + 1 >> 1;\n    v6 = v4 - v6;\n    v7 = v7 + v5 + 1 >> 1;\n    v5 = v7 - v5;\n    v0 = v0 + v3 + 1 >> 1;\n    v3 = v0 - v3;\n    v1 = v1 + v2 + 1 >> 1;\n    v2 = v1 - v2;\n    t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12;\n    v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12;\n    v7 = t;\n    t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12;\n    v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12;\n    v6 = t;\n    p0 = v0 + v7;\n    p7 = v0 - v7;\n    p1 = v1 + v6;\n    p6 = v1 - v6;\n    p2 = v2 + v5;\n    p5 = v2 - v5;\n    p3 = v3 + v4;\n    p4 = v3 - v4;\n    if (p0 < 16) {\n      p0 = 0;\n    } else if (p0 >= 4080) {\n      p0 = 255;\n    } else {\n      p0 >>= 4;\n    }\n    if (p1 < 16) {\n      p1 = 0;\n    } else if (p1 >= 4080) {\n      p1 = 255;\n    } else {\n      p1 >>= 4;\n    }\n    if (p2 < 16) {\n      p2 = 0;\n    } else if (p2 >= 4080) {\n      p2 = 255;\n    } else {\n      p2 >>= 4;\n    }\n    if (p3 < 16) {\n      p3 = 0;\n    } else if (p3 >= 4080) {\n      p3 = 255;\n    } else {\n      p3 >>= 4;\n    }\n    if (p4 < 16) {\n      p4 = 0;\n    } else if (p4 >= 4080) {\n      p4 = 255;\n    } else {\n      p4 >>= 4;\n    }\n    if (p5 < 16) {\n      p5 = 0;\n    } else if (p5 >= 4080) {\n      p5 = 255;\n    } else {\n      p5 >>= 4;\n    }\n    if (p6 < 16) {\n      p6 = 0;\n    } else if (p6 >= 4080) {\n      p6 = 255;\n    } else {\n      p6 >>= 4;\n    }\n    if (p7 < 16) {\n      p7 = 0;\n    } else if (p7 >= 4080) {\n      p7 = 255;\n    } else {\n      p7 >>= 4;\n    }\n    blockData[blockBufferOffset + col] = p0;\n    blockData[blockBufferOffset + col + 8] = p1;\n    blockData[blockBufferOffset + col + 16] = p2;\n    blockData[blockBufferOffset + col + 24] = p3;\n    blockData[blockBufferOffset + col + 32] = p4;\n    blockData[blockBufferOffset + col + 40] = p5;\n    blockData[blockBufferOffset + col + 48] = p6;\n    blockData[blockBufferOffset + col + 56] = p7;\n  }\n}\nfunction buildComponentData(frame, component) {\n  const blocksPerLine = component.blocksPerLine;\n  const blocksPerColumn = component.blocksPerColumn;\n  const computationBuffer = new Int16Array(64);\n  for (let blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n    for (let blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n      const offset = getBlockBufferOffset(component, blockRow, blockCol);\n      quantizeAndInverse(component, offset, computationBuffer);\n    }\n  }\n  return component.blockData;\n}\nfunction findNextFileMarker(data, currentPos, startPos = currentPos) {\n  const maxPos = data.length - 1;\n  let newPos = startPos < currentPos ? startPos : currentPos;\n  if (currentPos >= maxPos) {\n    return null;\n  }\n  const currentMarker = readUint16(data, currentPos);\n  if (currentMarker >= 0xffc0 && currentMarker <= 0xfffe) {\n    return {\n      invalid: null,\n      marker: currentMarker,\n      offset: currentPos\n    };\n  }\n  let newMarker = readUint16(data, newPos);\n  while (!(newMarker >= 0xffc0 && newMarker <= 0xfffe)) {\n    if (++newPos >= maxPos) {\n      return null;\n    }\n    newMarker = readUint16(data, newPos);\n  }\n  return {\n    invalid: currentMarker.toString(16),\n    marker: newMarker,\n    offset: newPos\n  };\n}\nclass JpegImage {\n  constructor({\n    decodeTransform = null,\n    colorTransform = -1\n  } = {}) {\n    this._decodeTransform = decodeTransform;\n    this._colorTransform = colorTransform;\n  }\n  parse(data, {\n    dnlScanLines = null\n  } = {}) {\n    function readDataBlock() {\n      const length = readUint16(data, offset);\n      offset += 2;\n      let endOffset = offset + length - 2;\n      const fileMarker = findNextFileMarker(data, endOffset, offset);\n      if (fileMarker?.invalid) {\n        warn(\"readDataBlock - incorrect length, current marker is: \" + fileMarker.invalid);\n        endOffset = fileMarker.offset;\n      }\n      const array = data.subarray(offset, endOffset);\n      offset += array.length;\n      return array;\n    }\n    function prepareComponents(frame) {\n      const mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);\n      const mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);\n      for (const component of frame.components) {\n        const blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH);\n        const blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV);\n        const blocksPerLineForMcu = mcusPerLine * component.h;\n        const blocksPerColumnForMcu = mcusPerColumn * component.v;\n        const blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1);\n        component.blockData = new Int16Array(blocksBufferSize);\n        component.blocksPerLine = blocksPerLine;\n        component.blocksPerColumn = blocksPerColumn;\n      }\n      frame.mcusPerLine = mcusPerLine;\n      frame.mcusPerColumn = mcusPerColumn;\n    }\n    let offset = 0;\n    let jfif = null;\n    let adobe = null;\n    let frame, resetInterval;\n    let numSOSMarkers = 0;\n    const quantizationTables = [];\n    const huffmanTablesAC = [],\n      huffmanTablesDC = [];\n    let fileMarker = readUint16(data, offset);\n    offset += 2;\n    if (fileMarker !== 0xffd8) {\n      throw new JpegError(\"SOI not found\");\n    }\n    fileMarker = readUint16(data, offset);\n    offset += 2;\n    markerLoop: while (fileMarker !== 0xffd9) {\n      let i, j, l;\n      switch (fileMarker) {\n        case 0xffe0:\n        case 0xffe1:\n        case 0xffe2:\n        case 0xffe3:\n        case 0xffe4:\n        case 0xffe5:\n        case 0xffe6:\n        case 0xffe7:\n        case 0xffe8:\n        case 0xffe9:\n        case 0xffea:\n        case 0xffeb:\n        case 0xffec:\n        case 0xffed:\n        case 0xffee:\n        case 0xffef:\n        case 0xfffe:\n          const appData = readDataBlock();\n          if (fileMarker === 0xffe0) {\n            if (appData[0] === 0x4a && appData[1] === 0x46 && appData[2] === 0x49 && appData[3] === 0x46 && appData[4] === 0) {\n              jfif = {\n                version: {\n                  major: appData[5],\n                  minor: appData[6]\n                },\n                densityUnits: appData[7],\n                xDensity: appData[8] << 8 | appData[9],\n                yDensity: appData[10] << 8 | appData[11],\n                thumbWidth: appData[12],\n                thumbHeight: appData[13],\n                thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13])\n              };\n            }\n          }\n          if (fileMarker === 0xffee) {\n            if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6f && appData[3] === 0x62 && appData[4] === 0x65) {\n              adobe = {\n                version: appData[5] << 8 | appData[6],\n                flags0: appData[7] << 8 | appData[8],\n                flags1: appData[9] << 8 | appData[10],\n                transformCode: appData[11]\n              };\n            }\n          }\n          break;\n        case 0xffdb:\n          const quantizationTablesLength = readUint16(data, offset);\n          offset += 2;\n          const quantizationTablesEnd = quantizationTablesLength + offset - 2;\n          let z;\n          while (offset < quantizationTablesEnd) {\n            const quantizationTableSpec = data[offset++];\n            const tableData = new Uint16Array(64);\n            if (quantizationTableSpec >> 4 === 0) {\n              for (j = 0; j < 64; j++) {\n                z = dctZigZag[j];\n                tableData[z] = data[offset++];\n              }\n            } else if (quantizationTableSpec >> 4 === 1) {\n              for (j = 0; j < 64; j++) {\n                z = dctZigZag[j];\n                tableData[z] = readUint16(data, offset);\n                offset += 2;\n              }\n            } else {\n              throw new JpegError(\"DQT - invalid table spec\");\n            }\n            quantizationTables[quantizationTableSpec & 15] = tableData;\n          }\n          break;\n        case 0xffc0:\n        case 0xffc1:\n        case 0xffc2:\n          if (frame) {\n            throw new JpegError(\"Only single frame JPEGs supported\");\n          }\n          offset += 2;\n          frame = {};\n          frame.extended = fileMarker === 0xffc1;\n          frame.progressive = fileMarker === 0xffc2;\n          frame.precision = data[offset++];\n          const sofScanLines = readUint16(data, offset);\n          offset += 2;\n          frame.scanLines = dnlScanLines || sofScanLines;\n          frame.samplesPerLine = readUint16(data, offset);\n          offset += 2;\n          frame.components = [];\n          frame.componentIds = {};\n          const componentsCount = data[offset++];\n          let maxH = 0,\n            maxV = 0;\n          for (i = 0; i < componentsCount; i++) {\n            const componentId = data[offset];\n            const h = data[offset + 1] >> 4;\n            const v = data[offset + 1] & 15;\n            if (maxH < h) {\n              maxH = h;\n            }\n            if (maxV < v) {\n              maxV = v;\n            }\n            const qId = data[offset + 2];\n            l = frame.components.push({\n              h,\n              v,\n              quantizationId: qId,\n              quantizationTable: null\n            });\n            frame.componentIds[componentId] = l - 1;\n            offset += 3;\n          }\n          frame.maxH = maxH;\n          frame.maxV = maxV;\n          prepareComponents(frame);\n          break;\n        case 0xffc4:\n          const huffmanLength = readUint16(data, offset);\n          offset += 2;\n          for (i = 2; i < huffmanLength;) {\n            const huffmanTableSpec = data[offset++];\n            const codeLengths = new Uint8Array(16);\n            let codeLengthSum = 0;\n            for (j = 0; j < 16; j++, offset++) {\n              codeLengthSum += codeLengths[j] = data[offset];\n            }\n            const huffmanValues = new Uint8Array(codeLengthSum);\n            for (j = 0; j < codeLengthSum; j++, offset++) {\n              huffmanValues[j] = data[offset];\n            }\n            i += 17 + codeLengthSum;\n            (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = buildHuffmanTable(codeLengths, huffmanValues);\n          }\n          break;\n        case 0xffdd:\n          offset += 2;\n          resetInterval = readUint16(data, offset);\n          offset += 2;\n          break;\n        case 0xffda:\n          const parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines;\n          offset += 2;\n          const selectorsCount = data[offset++],\n            components = [];\n          for (i = 0; i < selectorsCount; i++) {\n            const index = data[offset++];\n            const componentIndex = frame.componentIds[index];\n            const component = frame.components[componentIndex];\n            component.index = index;\n            const tableSpec = data[offset++];\n            component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];\n            component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];\n            components.push(component);\n          }\n          const spectralStart = data[offset++],\n            spectralEnd = data[offset++],\n            successiveApproximation = data[offset++];\n          try {\n            const processed = decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successiveApproximation >> 4, successiveApproximation & 15, parseDNLMarker);\n            offset += processed;\n          } catch (ex) {\n            if (ex instanceof DNLMarkerError) {\n              warn(`${ex.message} -- attempting to re-parse the JPEG image.`);\n              return this.parse(data, {\n                dnlScanLines: ex.scanLines\n              });\n            } else if (ex instanceof EOIMarkerError) {\n              warn(`${ex.message} -- ignoring the rest of the image data.`);\n              break markerLoop;\n            }\n            throw ex;\n          }\n          break;\n        case 0xffdc:\n          offset += 4;\n          break;\n        case 0xffff:\n          if (data[offset] !== 0xff) {\n            offset--;\n          }\n          break;\n        default:\n          const nextFileMarker = findNextFileMarker(data, offset - 2, offset - 3);\n          if (nextFileMarker?.invalid) {\n            warn(\"JpegImage.parse - unexpected data, current marker is: \" + nextFileMarker.invalid);\n            offset = nextFileMarker.offset;\n            break;\n          }\n          if (!nextFileMarker || offset >= data.length - 1) {\n            warn(\"JpegImage.parse - reached the end of the image data \" + \"without finding an EOI marker (0xFFD9).\");\n            break markerLoop;\n          }\n          throw new JpegError(\"JpegImage.parse - unknown marker: \" + fileMarker.toString(16));\n      }\n      fileMarker = readUint16(data, offset);\n      offset += 2;\n    }\n    if (!frame) {\n      throw new JpegError(\"JpegImage.parse - no frame data found.\");\n    }\n    this.width = frame.samplesPerLine;\n    this.height = frame.scanLines;\n    this.jfif = jfif;\n    this.adobe = adobe;\n    this.components = [];\n    for (const component of frame.components) {\n      const quantizationTable = quantizationTables[component.quantizationId];\n      if (quantizationTable) {\n        component.quantizationTable = quantizationTable;\n      }\n      this.components.push({\n        index: component.index,\n        output: buildComponentData(frame, component),\n        scaleX: component.h / frame.maxH,\n        scaleY: component.v / frame.maxV,\n        blocksPerLine: component.blocksPerLine,\n        blocksPerColumn: component.blocksPerColumn\n      });\n    }\n    this.numComponents = this.components.length;\n    return undefined;\n  }\n  _getLinearizedBlockData(width, height, isSourcePDF = false) {\n    const scaleX = this.width / width,\n      scaleY = this.height / height;\n    let component, componentScaleX, componentScaleY, blocksPerScanline;\n    let x, y, i, j, k;\n    let index;\n    let offset = 0;\n    let output;\n    const numComponents = this.components.length;\n    const dataLength = width * height * numComponents;\n    const data = new Uint8ClampedArray(dataLength);\n    const xScaleBlockOffset = new Uint32Array(width);\n    const mask3LSB = 0xfffffff8;\n    let lastComponentScaleX;\n    for (i = 0; i < numComponents; i++) {\n      component = this.components[i];\n      componentScaleX = component.scaleX * scaleX;\n      componentScaleY = component.scaleY * scaleY;\n      offset = i;\n      output = component.output;\n      blocksPerScanline = component.blocksPerLine + 1 << 3;\n      if (componentScaleX !== lastComponentScaleX) {\n        for (x = 0; x < width; x++) {\n          j = 0 | x * componentScaleX;\n          xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7;\n        }\n        lastComponentScaleX = componentScaleX;\n      }\n      for (y = 0; y < height; y++) {\n        j = 0 | y * componentScaleY;\n        index = blocksPerScanline * (j & mask3LSB) | (j & 7) << 3;\n        for (x = 0; x < width; x++) {\n          data[offset] = output[index + xScaleBlockOffset[x]];\n          offset += numComponents;\n        }\n      }\n    }\n    let transform = this._decodeTransform;\n    if (!isSourcePDF && numComponents === 4 && !transform) {\n      transform = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255]);\n    }\n    if (transform) {\n      for (i = 0; i < dataLength;) {\n        for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) {\n          data[i] = (data[i] * transform[k] >> 8) + transform[k + 1];\n        }\n      }\n    }\n    return data;\n  }\n  get _isColorConversionNeeded() {\n    if (this.adobe) {\n      return !!this.adobe.transformCode;\n    }\n    if (this.numComponents === 3) {\n      if (this._colorTransform === 0) {\n        return false;\n      } else if (this.components[0].index === 0x52 && this.components[1].index === 0x47 && this.components[2].index === 0x42) {\n        return false;\n      }\n      return true;\n    }\n    if (this._colorTransform === 1) {\n      return true;\n    }\n    return false;\n  }\n  _convertYccToRgb(data) {\n    let Y, Cb, Cr;\n    for (let i = 0, length = data.length; i < length; i += 3) {\n      Y = data[i];\n      Cb = data[i + 1];\n      Cr = data[i + 2];\n      data[i] = Y - 179.456 + 1.402 * Cr;\n      data[i + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr;\n      data[i + 2] = Y - 226.816 + 1.772 * Cb;\n    }\n    return data;\n  }\n  _convertYccToRgba(data, out) {\n    for (let i = 0, j = 0, length = data.length; i < length; i += 3, j += 4) {\n      const Y = data[i];\n      const Cb = data[i + 1];\n      const Cr = data[i + 2];\n      out[j] = Y - 179.456 + 1.402 * Cr;\n      out[j + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr;\n      out[j + 2] = Y - 226.816 + 1.772 * Cb;\n      out[j + 3] = 255;\n    }\n    return out;\n  }\n  _convertYcckToRgb(data) {\n    let Y, Cb, Cr, k;\n    let offset = 0;\n    for (let i = 0, length = data.length; i < length; i += 4) {\n      Y = data[i];\n      Cb = data[i + 1];\n      Cr = data[i + 2];\n      k = data[i + 3];\n      data[offset++] = -122.67195406894 + Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr - 5.4080610064599e-5 * Y + 0.00048449797120281 * k - 0.154362151871126) + Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y - 0.00477271405408747 * k + 1.53380253221734) + Y * (0.000961250184130688 * Y - 0.00266257332283933 * k + 0.48357088451265) + k * (-0.000336197177618394 * k + 0.484791561490776);\n      data[offset++] = 107.268039397724 + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + 0.000659397001245577 * Y + 0.000426105652938837 * k - 0.176491792462875) + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + 0.000770482631801132 * k - 0.151051492775562) + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + 0.25802910206845) + k * (-0.000318913117588328 * k - 0.213742400323665);\n      data[offset++] = -20.810012546947 + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + 0.0020741088115012 * Y - 0.00288260236853442 * k + 0.814272968359295) + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + 0.000560833691242812 * k - 0.195152027534049) + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + 0.116935020465145) + k * (-0.000343531996510555 * k + 0.24165260232407);\n    }\n    return data.subarray(0, offset);\n  }\n  _convertYcckToRgba(data) {\n    for (let i = 0, length = data.length; i < length; i += 4) {\n      const Y = data[i];\n      const Cb = data[i + 1];\n      const Cr = data[i + 2];\n      const k = data[i + 3];\n      data[i] = -122.67195406894 + Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr - 5.4080610064599e-5 * Y + 0.00048449797120281 * k - 0.154362151871126) + Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y - 0.00477271405408747 * k + 1.53380253221734) + Y * (0.000961250184130688 * Y - 0.00266257332283933 * k + 0.48357088451265) + k * (-0.000336197177618394 * k + 0.484791561490776);\n      data[i + 1] = 107.268039397724 + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + 0.000659397001245577 * Y + 0.000426105652938837 * k - 0.176491792462875) + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + 0.000770482631801132 * k - 0.151051492775562) + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + 0.25802910206845) + k * (-0.000318913117588328 * k - 0.213742400323665);\n      data[i + 2] = -20.810012546947 + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + 0.0020741088115012 * Y - 0.00288260236853442 * k + 0.814272968359295) + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + 0.000560833691242812 * k - 0.195152027534049) + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + 0.116935020465145) + k * (-0.000343531996510555 * k + 0.24165260232407);\n      data[i + 3] = 255;\n    }\n    return data;\n  }\n  _convertYcckToCmyk(data) {\n    let Y, Cb, Cr;\n    for (let i = 0, length = data.length; i < length; i += 4) {\n      Y = data[i];\n      Cb = data[i + 1];\n      Cr = data[i + 2];\n      data[i] = 434.456 - Y - 1.402 * Cr;\n      data[i + 1] = 119.541 - Y + 0.344 * Cb + 0.714 * Cr;\n      data[i + 2] = 481.816 - Y - 1.772 * Cb;\n    }\n    return data;\n  }\n  _convertCmykToRgb(data) {\n    let c, m, y, k;\n    let offset = 0;\n    for (let i = 0, length = data.length; i < length; i += 4) {\n      c = data[i];\n      m = data[i + 1];\n      y = data[i + 2];\n      k = data[i + 3];\n      data[offset++] = 255 + c * (-0.00006747147073602441 * c + 0.0008379262121013727 * m + 0.0002894718188643294 * y + 0.003264231057537806 * k - 1.1185611867203937) + m * (0.000026374107616089405 * m - 0.00008626949158638572 * y - 0.0002748769067499491 * k - 0.02155688794978967) + y * (-0.00003878099212869363 * y - 0.0003267808279485286 * k + 0.0686742238595345) - k * (0.0003361971776183937 * k + 0.7430659151342254);\n      data[offset++] = 255 + c * (0.00013596372813588848 * c + 0.000924537132573585 * m + 0.00010567359618683593 * y + 0.0004791864687436512 * k - 0.3109689587515875) + m * (-0.00023545346108370344 * m + 0.0002702845253534714 * y + 0.0020200308977307156 * k - 0.7488052167015494) + y * (0.00006834815998235662 * y + 0.00015168452363460973 * k - 0.09751927774728933) - k * (0.0003189131175883281 * k + 0.7364883807733168);\n      data[offset++] = 255 + c * (0.000013598650411385307 * c + 0.00012423956175490851 * m + 0.0004751985097583589 * y - 0.0000036729317476630422 * k - 0.05562186980264034) + m * (0.00016141380598724676 * m + 0.0009692239130725186 * y + 0.0007782692450036253 * k - 0.44015232367526463) + y * (5.068882914068769e-7 * y + 0.0017778369011375071 * k - 0.7591454649749609) - k * (0.0003435319965105553 * k + 0.7063770186160144);\n    }\n    return data.subarray(0, offset);\n  }\n  _convertCmykToRgba(data) {\n    for (let i = 0, length = data.length; i < length; i += 4) {\n      const c = data[i];\n      const m = data[i + 1];\n      const y = data[i + 2];\n      const k = data[i + 3];\n      data[i] = 255 + c * (-0.00006747147073602441 * c + 0.0008379262121013727 * m + 0.0002894718188643294 * y + 0.003264231057537806 * k - 1.1185611867203937) + m * (0.000026374107616089405 * m - 0.00008626949158638572 * y - 0.0002748769067499491 * k - 0.02155688794978967) + y * (-0.00003878099212869363 * y - 0.0003267808279485286 * k + 0.0686742238595345) - k * (0.0003361971776183937 * k + 0.7430659151342254);\n      data[i + 1] = 255 + c * (0.00013596372813588848 * c + 0.000924537132573585 * m + 0.00010567359618683593 * y + 0.0004791864687436512 * k - 0.3109689587515875) + m * (-0.00023545346108370344 * m + 0.0002702845253534714 * y + 0.0020200308977307156 * k - 0.7488052167015494) + y * (0.00006834815998235662 * y + 0.00015168452363460973 * k - 0.09751927774728933) - k * (0.0003189131175883281 * k + 0.7364883807733168);\n      data[i + 2] = 255 + c * (0.000013598650411385307 * c + 0.00012423956175490851 * m + 0.0004751985097583589 * y - 0.0000036729317476630422 * k - 0.05562186980264034) + m * (0.00016141380598724676 * m + 0.0009692239130725186 * y + 0.0007782692450036253 * k - 0.44015232367526463) + y * (5.068882914068769e-7 * y + 0.0017778369011375071 * k - 0.7591454649749609) - k * (0.0003435319965105553 * k + 0.7063770186160144);\n      data[i + 3] = 255;\n    }\n    return data;\n  }\n  getData({\n    width,\n    height,\n    forceRGBA = false,\n    forceRGB = false,\n    isSourcePDF = false\n  }) {\n    if (this.numComponents > 4) {\n      throw new JpegError(\"Unsupported color mode\");\n    }\n    const data = this._getLinearizedBlockData(width, height, isSourcePDF);\n    if (this.numComponents === 1 && (forceRGBA || forceRGB)) {\n      const len = data.length * (forceRGBA ? 4 : 3);\n      const rgbaData = new Uint8ClampedArray(len);\n      let offset = 0;\n      if (forceRGBA) {\n        grayToRGBA(data, new Uint32Array(rgbaData.buffer));\n      } else {\n        for (const grayColor of data) {\n          rgbaData[offset++] = grayColor;\n          rgbaData[offset++] = grayColor;\n          rgbaData[offset++] = grayColor;\n        }\n      }\n      return rgbaData;\n    } else if (this.numComponents === 3 && this._isColorConversionNeeded) {\n      if (forceRGBA) {\n        const rgbaData = new Uint8ClampedArray(data.length / 3 * 4);\n        return this._convertYccToRgba(data, rgbaData);\n      }\n      return this._convertYccToRgb(data);\n    } else if (this.numComponents === 4) {\n      if (this._isColorConversionNeeded) {\n        if (forceRGBA) {\n          return this._convertYcckToRgba(data);\n        }\n        if (forceRGB) {\n          return this._convertYcckToRgb(data);\n        }\n        return this._convertYcckToCmyk(data);\n      } else if (forceRGBA) {\n        return this._convertCmykToRgba(data);\n      } else if (forceRGB) {\n        return this._convertCmykToRgb(data);\n      }\n    }\n    return data;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/jpeg_stream.js\n\n\n\n\nclass JpegStream extends DecodeStream {\n  constructor(stream, maybeLength, params) {\n    let ch;\n    while ((ch = stream.getByte()) !== -1) {\n      if (ch === 0xff) {\n        stream.skip(-1);\n        break;\n      }\n    }\n    super(maybeLength);\n    this.stream = stream;\n    this.dict = stream.dict;\n    this.maybeLength = maybeLength;\n    this.params = params;\n  }\n  get bytes() {\n    return shadow(this, \"bytes\", this.stream.getBytes(this.maybeLength));\n  }\n  ensureBuffer(requested) {}\n  readBlock() {\n    if (this.eof) {\n      return;\n    }\n    const jpegOptions = {\n      decodeTransform: undefined,\n      colorTransform: undefined\n    };\n    const decodeArr = this.dict.getArray(\"D\", \"Decode\");\n    if ((this.forceRGBA || this.forceRGB) && Array.isArray(decodeArr)) {\n      const bitsPerComponent = this.dict.get(\"BPC\", \"BitsPerComponent\") || 8;\n      const decodeArrLength = decodeArr.length;\n      const transform = new Int32Array(decodeArrLength);\n      let transformNeeded = false;\n      const maxValue = (1 << bitsPerComponent) - 1;\n      for (let i = 0; i < decodeArrLength; i += 2) {\n        transform[i] = (decodeArr[i + 1] - decodeArr[i]) * 256 | 0;\n        transform[i + 1] = decodeArr[i] * maxValue | 0;\n        if (transform[i] !== 256 || transform[i + 1] !== 0) {\n          transformNeeded = true;\n        }\n      }\n      if (transformNeeded) {\n        jpegOptions.decodeTransform = transform;\n      }\n    }\n    if (this.params instanceof Dict) {\n      const colorTransform = this.params.get(\"ColorTransform\");\n      if (Number.isInteger(colorTransform)) {\n        jpegOptions.colorTransform = colorTransform;\n      }\n    }\n    const jpegImage = new JpegImage(jpegOptions);\n    jpegImage.parse(this.bytes);\n    const data = jpegImage.getData({\n      width: this.drawWidth,\n      height: this.drawHeight,\n      forceRGBA: this.forceRGBA,\n      forceRGB: this.forceRGB,\n      isSourcePDF: true\n    });\n    this.buffer = data;\n    this.bufferLength = data.length;\n    this.eof = true;\n  }\n}\n\n;// CONCATENATED MODULE: ./external/openjpeg/openjpeg.js\nvar OpenJPEG = (() => {\n  var _scriptName = typeof document != 'undefined' ? document.currentScript?.src : undefined;\n  return function (moduleArg = {}) {\n    var moduleRtn;\n    var Module = Object.assign({}, moduleArg);\n    var readyPromiseResolve, readyPromiseReject;\n    var readyPromise = new Promise((resolve, reject) => {\n      readyPromiseResolve = resolve;\n      readyPromiseReject = reject;\n    });\n    var ENVIRONMENT_IS_WEB = true;\n    var ENVIRONMENT_IS_WORKER = false;\n    Module.decode = function (bytes, ignoreColorSpace) {\n      const size = bytes.length;\n      const ptr = Module._malloc(size);\n      Module.HEAPU8.set(bytes, ptr);\n      const ret = Module._jp2_decode(ptr, size, ignoreColorSpace ? 1 : 0);\n      Module._free(ptr);\n      if (ret) {\n        const {\n          errorMessages: errorMessages\n        } = Module;\n        if (errorMessages) {\n          delete Module.errorMessages;\n          return errorMessages;\n        }\n        return \"Unknown error\";\n      }\n      const {\n        imageData: imageData\n      } = Module;\n      Module.imageData = null;\n      return imageData;\n    };\n    var moduleOverrides = Object.assign({}, Module);\n    var arguments_ = [];\n    var thisProgram = \"./this.program\";\n    var quit_ = (status, toThrow) => {\n      throw toThrow;\n    };\n    var scriptDirectory = \"\";\n    var read_, readAsync, readBinary;\n    if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n      if (ENVIRONMENT_IS_WORKER) {\n        scriptDirectory = self.location.href;\n      } else if (typeof document != \"undefined\" && document.currentScript) {\n        scriptDirectory = document.currentScript.src;\n      }\n      if (_scriptName) {\n        scriptDirectory = _scriptName;\n      }\n      if (scriptDirectory.startsWith(\"blob:\")) {\n        scriptDirectory = \"\";\n      } else {\n        scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, \"\").lastIndexOf(\"/\") + 1);\n      }\n      read_ = url => {\n        var xhr = new XMLHttpRequest();\n        xhr.open(\"GET\", url, false);\n        xhr.send(null);\n        return xhr.responseText;\n      };\n      if (ENVIRONMENT_IS_WORKER) {\n        readBinary = url => {\n          var xhr = new XMLHttpRequest();\n          xhr.open(\"GET\", url, false);\n          xhr.responseType = \"arraybuffer\";\n          xhr.send(null);\n          return new Uint8Array(xhr.response);\n        };\n      }\n      readAsync = (url, onload, onerror) => {\n        var xhr = new XMLHttpRequest();\n        xhr.open(\"GET\", url, true);\n        xhr.responseType = \"arraybuffer\";\n        xhr.onload = () => {\n          if (xhr.status == 200 || xhr.status == 0 && xhr.response) {\n            onload(xhr.response);\n            return;\n          }\n          onerror();\n        };\n        xhr.onerror = onerror;\n        xhr.send(null);\n      };\n    } else {}\n    var out = Module[\"print\"] || console.log.bind(console);\n    var err = Module[\"printErr\"] || console.error.bind(console);\n    Object.assign(Module, moduleOverrides);\n    moduleOverrides = null;\n    if (Module[\"arguments\"]) arguments_ = Module[\"arguments\"];\n    if (Module[\"thisProgram\"]) thisProgram = Module[\"thisProgram\"];\n    if (Module[\"quit\"]) quit_ = Module[\"quit\"];\n    var wasmBinary;\n    if (Module[\"wasmBinary\"]) wasmBinary = Module[\"wasmBinary\"];\n    function intArrayFromBase64(s) {\n      var decoded = atob(s);\n      var bytes = new Uint8Array(decoded.length);\n      for (var i = 0; i < decoded.length; ++i) {\n        bytes[i] = decoded.charCodeAt(i);\n      }\n      return bytes;\n    }\n    function tryParseAsDataURI(filename) {\n      if (!isDataURI(filename)) {\n        return;\n      }\n      return intArrayFromBase64(filename.slice(dataURIPrefix.length));\n    }\n    var wasmMemory;\n    var ABORT = false;\n    var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;\n    function updateMemoryViews() {\n      var b = wasmMemory.buffer;\n      Module[\"HEAP8\"] = HEAP8 = new Int8Array(b);\n      Module[\"HEAP16\"] = HEAP16 = new Int16Array(b);\n      Module[\"HEAPU8\"] = HEAPU8 = new Uint8Array(b);\n      Module[\"HEAPU16\"] = HEAPU16 = new Uint16Array(b);\n      Module[\"HEAP32\"] = HEAP32 = new Int32Array(b);\n      Module[\"HEAPU32\"] = HEAPU32 = new Uint32Array(b);\n      Module[\"HEAPF32\"] = HEAPF32 = new Float32Array(b);\n      Module[\"HEAPF64\"] = HEAPF64 = new Float64Array(b);\n    }\n    var __ATPRERUN__ = [];\n    var __ATINIT__ = [];\n    var __ATPOSTRUN__ = [];\n    var runtimeInitialized = false;\n    function preRun() {\n      if (Module[\"preRun\"]) {\n        if (typeof Module[\"preRun\"] == \"function\") Module[\"preRun\"] = [Module[\"preRun\"]];\n        while (Module[\"preRun\"].length) {\n          addOnPreRun(Module[\"preRun\"].shift());\n        }\n      }\n      callRuntimeCallbacks(__ATPRERUN__);\n    }\n    function initRuntime() {\n      runtimeInitialized = true;\n      callRuntimeCallbacks(__ATINIT__);\n    }\n    function postRun() {\n      if (Module[\"postRun\"]) {\n        if (typeof Module[\"postRun\"] == \"function\") Module[\"postRun\"] = [Module[\"postRun\"]];\n        while (Module[\"postRun\"].length) {\n          addOnPostRun(Module[\"postRun\"].shift());\n        }\n      }\n      callRuntimeCallbacks(__ATPOSTRUN__);\n    }\n    function addOnPreRun(cb) {\n      __ATPRERUN__.unshift(cb);\n    }\n    function addOnInit(cb) {\n      __ATINIT__.unshift(cb);\n    }\n    function addOnPostRun(cb) {\n      __ATPOSTRUN__.unshift(cb);\n    }\n    var runDependencies = 0;\n    var runDependencyWatcher = null;\n    var dependenciesFulfilled = null;\n    function addRunDependency(id) {\n      runDependencies++;\n      Module[\"monitorRunDependencies\"]?.(runDependencies);\n    }\n    function removeRunDependency(id) {\n      runDependencies--;\n      Module[\"monitorRunDependencies\"]?.(runDependencies);\n      if (runDependencies == 0) {\n        if (runDependencyWatcher !== null) {\n          clearInterval(runDependencyWatcher);\n          runDependencyWatcher = null;\n        }\n        if (dependenciesFulfilled) {\n          var callback = dependenciesFulfilled;\n          dependenciesFulfilled = null;\n          callback();\n        }\n      }\n    }\n    var dataURIPrefix = \"data:application/octet-stream;base64,\";\n    var isDataURI = filename => filename.startsWith(dataURIPrefix);\n    function findWasmBinary() {\n      var f = \"data:application/octet-stream;base64,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dEGwnQFqKAIAIQICfiAAKQMIIg5CAFMEQEEMIAFBAWogAUELThshBCADQQFrIQNBfyACdEF/c0EBdCEBQgEMAQsgAUEBa0EAIAFBAUobIQQgDkE/IAJrrYinQX8gAnRBf3NxQQF0QQFyIQEgAyACQQFqIgJrIQMgAq0LIQ8gACADNgIQIAAgBDYCHCAAIA4gD4Y3AwggACAAKQMoQv//////QIMgAa1CI4aENwMoQQYhBSADQQZIDQAgACgCHCIBQQJ0QbCdAWooAgAhAgJ+IAApAwgiDkIAUwRAQQwgAUEBaiABQQtOGyEEIANBAWshA0F/IAJ0QX9zQQF0IQFCAQwBCyABQQFrQQAgAUEBShshBCAOQT8gAmutiKdBfyACdEF/c3FBAXRBAXIhASADIAJBAWoiAmshAyACrQshDyAAIAM2AhAgACAENgIcIAAgDiAPhjcDCCAAIAApAyhC////////QIMgAa1CKoaENwMoQQchBSADQQZIDQAgACgCHCIBQQJ0QbCdAWooAgAhAgJ+IAApAwgiDkIAUwRAQQwgAUEBaiABQQtOGyEEIANBAWshA0F/IAJ0QX9zQQF0IQFCAQwBCyABQQFrQQAgAUEBShshBCAOQT8gAmutiKdBfyACdEF/c3FBAXRBAXIhASADIAJBAWoiAmshAyACrQshDyAAIAM2AhAgACAENgIcIAAgDiAPhjcDCCAAIAApAyhC/////////0CDIAGtQjGGhDcDKEEIIQULIAAgBUEBazYCICAAIAApAygiDkIHiDcDKCAOp0H/AHELIgEBfyAABEAgACgCDCIBBEAgARAJIABBADYCDAsgABAJCwuFAQIFfwF+AkAgAEKAgICAEFQEQCAAIQcMAQsDQCABQQFrIgEgAEIKgCIHQvYBfiAAfKdBMHI6AAAgAEL/////nwFWIQUgByEAIAUNAAsLIAenIgIEQANAIAFBAWsiASACQQpuIgNB9gFsIAJqQTByOgAAIAJBCUshBiADIQIgBg0ACwsgAQv54gEEen8Gewh+AX0jAEEQayJOJAACQCAALQAIQYABcUUNACAAKALMASABRw0AIAAoApwBIAFBjCxsaiJPKALcKyIVRQRAIE8QKQwBCyAAKALIARogACgC0AEhGSAAKAJMIgdFBEAgACgCSCEHCyAHKAIAIQYgBygCBCELIAco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AAACAAAA/a4BQQL9rAH9sQH9CwIAIAEiBkEBaiIBIA9HDQALIA8hBwsgByAbTg0AA0AgB0EDdCEBIAcgLEghBgJAIAdBAEwEQCA2KAIAIQogB0EATgRAIBQgAUECdCIBaiIyIDIoAgAgCiABIDZqIEUgBhsoAgBqQQJqQQJ1azYCACABICRqIgogCigCACAgKAIAIAEgIGogPCAGGygCAGpBAmpBAnVrNgIAIAEgKmoiCiAKKAIAIB8oAgAgASAfaiA6IAYbKAIAakECakECdWs2AgAgQygCACABIENqICYgBhsoAgBqQQJqIQYgASApaiEBDAILIBQgAUECdCIBaiIGIAYoAgAgCkEBdEECakECdWs2AgAgASAkaiIGIAYoAgAgFCgCFEEBdEECakECdWs2AgAgASAqaiIGIAYoAgAgFCgCGEEBdEECakECdWs2AgAgASApaiEBIBQoAhxBAXRBAmohBgwBCyAUIAcgLCAGG0EDdEEEa0ECdCIKaigCACEyIAZFBEAgFCABQQJ0IgFqIgYgBigCACAyIEUoAgBqQQJqQQJ1azYCACABICRqIgYgBigCACAKICRqKAIAIDwoAgBqQQJqQQJ1azYCACABICpqIgYgBigCACAKICpqKAIAIDooAgBqQQJqQQJ1azYCACABIClqIQEgCiApaigCACAmKAIAakECaiEGDAELIBQgAUECdCIBaiIGIAYoAgAgMiAGKAIQakECakECdWs2AgAgASAkaiIGIAYoAgAgCiAkaigCACAGKAIQakECakECdWs2AgAgASAqaiIGIAYoAgAgCiAqaigCACAGKAIQakECakECdWs2AgAgCiApaigCACABIClqIgEoAhBqQQJqIQYLIAEgASgCACAGQQJ1azYCACAHQQFqIgcgG0cNAAsLIA4gHE4NACAMIA4iASIHSgRAA0AgFCABQQV0aiIHIAf9AAIgIAf9AAIA/a4BQQH9rAEgB/0AAhD9rgH9CwIQIAFBAWoiASAMRw0ACyAMIQcLIAcgHE4NAANAIEMgB0EDdCIBQQJ0aiIyAn8gB0EASARAIBQoAgAhBiAHQX9HBEAgNiABQQJ0IgFqIgogCigCACAGajYCACABICBqIgYgBigCACAkKAIAajYCACABIB9qIgEgASgCACAqKAIAajYCACApKAIADAILIDYgAUECdCIBaiIKIAooAgAgVygCACAGakEBdWo2AgAgASAgaiIGIAYoAgAgVigCACAkKAIAakEBdWo2AgAgASAfaiIBIAEoAgAgVSgCACAqKAIAakEBdWo2AgAgVCgCACApKAIAakEBdQwBCyABID4gByASSBshBiASIAdBAWoiZkwEQCA2IAFBAnQiCmoiASABKAIAIGsoAgAgFCAGQQJ0aiIBKAIAakEBdWo2AgAgCiAgaiIGIAYoAgAgaigCACABKAIEakEBdWo2AgAgCiAfaiIGIAYoAgAgaSgCACABKAIIakEBdWo2AgAgaCgCACABKAIMakEBdQwBCyA2IAFBAnQiCmoiASABKAIAIBQgZkEFdGoiASgCACAUIAZBAnRqIgYoAgBqQQF1ajYCACAKICBqImYgZigCACABKAIEIAYoAgRqQQF1ajYCACAKIB9qIgogCigCACABKAIIIAYoAghqQQF1ajYCACABKAIMIAYoAgxqQQF1CyAyKAIAajYCACAHQQFqIgcgHEcNAAsLIDkgFiBdIBggSCBeQQFBBEEAEB8NAAsLDAILIBQQCUEBIQcLIDkgNUEQaygCACIBIF8oAgAiBmsgNUEMaygCACBgKAIAIgprIDVBCGsoAgAiCCAGayA1QQRrKAIAIAprIAkoAjRBASAIIAFrEBcgORAdDAMLIDkQHSAUEAlBACEHDAILIDkQHUEAIQcMAQtBACEHIA4QGiAPEAkLICVBIGokACAHDQEMBQsgASEIQQAhDv0MAAAAAAAAAAAAAAAAAAAAACGAASMAQUBqIhwkAAJAAn8CQCAZKAJABEAgCSgCHCIVIAkoAhhBmAFsaiIBQZgBaygCACEaIAFBkAFrKAIAIRsgFSgCBCEMIBUoAgwheiAVKAIAIRAgFSgCCCETQQEhByAZKAIsIh8oAgQhKyAIQQFGDQNBACEGIAhBAWsiFiEIIBUhAQJAIBZBBE8EQCAWQQNxIQggASAWQXxxIgpBmAFsaiEBQQAhBwNAIIABIBUgB0GYAWxqIgZB6ARqIAZB0ANqIAZBuAJqIAb9CQKgAf1WAgAB/VYCAAL9VgIAAyAGQeAEaiAGQcgDaiAGQbACaiAG/QkCmAH9VgIAAf1WAgAC/VYCAAP9sQH9uQEgBkHsBGogBkHUA2ogBkG8AmogBv0JAqQB/VYCAAH9VgIAAv1WAgADIAZB5ARqIAZBzANqIAZBtAJqIAb9CQKcAf1WAgAB/VYCAAL9VgIAA/2xAf25ASGAASAHQQRqIgcgCkcNAAsggAEggAEggAH9DQgJCgsMDQ4PAAECAwABAgP9uQEigAEggAEggAH9DQQFBgcAAQIDAAECAwABAgP9uQH9GwAhBiAKIBZGDQELA0AgBiABKAKgASABKAKYAWsiByAGIAdLGyIHIAEoAqQBIAEoApwBayIGIAYgB0kbIQYgAUGYAWohASAIQQFrIggNAAsLQQAhByAGQf///z9LDQMgHCAGQQV0IkYQFiIBNgIgIAFFDQMgHCABNgIAIBZFBEBBASEHIAEQCQwECyB6IAxrIQ8gEyAQayEOQQIgK0EBdiIBIAFBAk0bIUcgCSgCJCIKIBtBHGwiTSAaQRxsIl9raiEvIAogG0EYbCJgIBpBGGwiUmtqIT0gCiAbQRRsIlMgGkEUbCJUa2ohPiAKIBtBBHQiVSAaQQR0IlZraiE/IAogG0EMbCJXIBpBDGwiWGtqITggGyAaayIQQQdsIUkgEEEGbCFFIBBBBWwhMiAQQQNsIUggEEEBdCFQIAogEEEDdCJRaiFCIAogEEECdCJBaiEUIBBBBXQhWSAQ/REhhAEDQCAcIA82AgggHCAOIgE2AiggFSgCnAEhJCAVKAKkASEpIBUoAqABIR4gFSgCmAEhICAcQQA2AjggHCABNgI0IBxBADYCMCAcICBBAm8iGDYCLCAcIB4gIGsiDiABayITNgI8IBwgEzYCJAJAICtBAkgiWkUgKSAkayIPQQ9LcUUEQEEAIQcgCiEGIA9BCEkNASA/IAYgUyAeQQJ0IgFqIFQgIEECdCIIamtqIjpJID4gBiABIFVqIAggVmpraiJDSXEgPSBDSSA/IAYgASBgaiAIIFJqa2oiPElxciAvIENJID8gBiABIE1qIAggX2praiJESXFyIVsgPSBESSAvIDxJcSFcID4gREkgLyA6SXEhXSA8ID5LIDogPUtxIV4gQiAGIAEgV2ogCCBYamtqIkpJIDggBiABIFFqIAhraiJLSXEhYSAUIEpJIDggBiAbIB5qIBogIGprQQJ0aiJMSXEhYiAUIEtJIEIgTElxIWMgBiABIAhraiEqIA5BfHEhCCAcKAIgIhMgDkEFdGoiEUEQayElIBFBFGshLCARQRhrIS4gEUEcayE2IBFBBGshOSARQQhrITsgEUEMayE0QQAhGCATQQxqIiMgHiAgQX9zaiIMQQV0IgFqICNJIAxB////P0siDCATQQRqIiEgAWogIUkgASATaiATSXJyIBNBCGoiIiABaiAiSXJyIA5ByAJJciFkIBNBFGoiKCABaiAoSSATQRBqIicgAWogJ0lyIAxyIBNBGGoiMCABaiAwSXIgE0EcaiItIAFqIC1JciAOQdQASXIhZQNAIAchDCAcQSBqIgEgBiAQQQgQNCABEBwCQCAORQ0AIBggWWwhB0EAIQECQAJAIGQNACBhIAYgNkkgEyAHICpqIjdJcSAGIAcgSmoiEkkgKiA4S3EgFCAqSSAGIAcgTGoiJklxIAYgByBLaiI1SSAqIEJLcXJyciAGIC5JICEgN0lxciAGICxJICIgN0lxciAGICVJICMgN0lxciBjciBiciATICZJIAcgFGoiNyA2SXFyICEgJkkgLiA3S3FyICIgJkkgLCA3S3FyICMgJkkgJSA3S3Fycg0AIBMgNUkgByBCaiImIDZJcQ0AICEgNUkgJiAuSXENACAiIDVJICYgLElxDQAgIyA1SSAlICZLcQ0AIAcgOGoiJiA2SSASIBNLcQ0AICYgLkkgEiAhS3ENACAmICxJIBIgIktxDQAgEiAjSyAlICZLcQ0AA0AgBiABQQJ0aiATIAFBBXRqIhL9CQIAIBIqAiD9IAEgEkFAayoCAP0gAiASKgJg/SAD/QsCACAGIAEgEGpBAnRqIBL9CQIEIBIqAiT9IAEgEioCRP0gAiASKgJk/SAD/QsCACAGIAEgUGpBAnRqIBL9CQIIIBIqAij9IAEgEioCSP0gAiASKgJo/SAD/QsCACAGIAEgSGpBAnRqIBL9CQIMIBIqAiz9IAEgEioCTP0gAiASKgJs/SAD/QsCACABQQRqIgEgCEcNAAsgCCIBIA5GDQELA0AgBiABQQJ0aiATIAFBBXRqIhIqAgA4AgAgBiABIBBqQQJ0aiASKgIEOAIAIAYgASBQakECdGogEioCCDgCACAGIAEgSGpBAnRqIBIqAgw4AgAgAUEBaiIBIA5HDQALC0EAIQECQCBlDQAgXCAHID5qIhIgNEkgJyAHIDpqIiZJcSBbIAcgP2oiNSA0SSAnIAcgQ2oiN0lxciAoIDdJIDUgO0lxciAwIDdJIDUgOUlxciAtIDdJIBEgNUtxciBeciBdcnIgEiA7SSAmIChLcXIgEiA5SSAmIDBLcXIgJiAtSyARIBJLcXJyDQAgByA9aiISIDRJICcgByA8aiImSXENACASIDtJICYgKEtxDQAgEiA5SSAmIDBLcQ0AICYgLUsgESASS3ENACAHIC9qIhIgNEkgJyAHIERqIgdJcQ0AIBIgO0kgByAoS3ENACASIDlJIAcgMEtxDQAgByAtSyARIBJLcQ0AA0AgBiABIEFqQQJ0aiATIAFBBXRqIgf9CQIQIAcqAjD9IAEgByoCUP0gAiAHKgJw/SAD/QsCACAGIAEgMmpBAnRqIAf9CQIUIAcqAjT9IAEgByoCVP0gAiAHKgJ0/SAD/QsCACAGIAEgRWpBAnRqIAf9CQIYIAcqAjj9IAEgByoCWP0gAiAHKgJ4/SAD/QsCACAGIAEgSWpBAnRqIAf9CQIcIAcqAjz9IAEgByoCXP0gAiAHKgJ8/SAD/QsCACABQQRqIgEgCEcNAAsgCCIBIA5GDQELA0AgBiABIEFqQQJ0aiATIAFBBXRqIgcqAhA4AgAgBiABIDJqQQJ0aiAHKgIUOAIAIAYgASBFakECdGogByoCGDgCACAGIAEgSWpBAnRqIAcqAhw4AgAgAUEBaiIBIA5HDQALCyAYQQFqIRggDEEIaiEHIAYgUUECdGohBiAMQQ9qIA9JDQALDAELIA8gD0EDdiIHICsgByArSRsiEm5BeHEhESAPQXhxIQdBACEIIAohBgNAQTAQDSIMRQ0EIAwgRhAWIiM2AgAgI0UEQCAfEBogDBAJQQAMBgsgDCAGNgIoIAwgEDYCJCAMIA42AiAgDCATNgIcIAxBADYCGCAMIAE2AhQgDEEANgIQIAwgGDYCDCAMIAE2AgggDCATNgIEIAwgByAIIBFsayARIAhBAWoiCCASRhsiIzYCLCAfQQwgDBAmIAYgECAjbEECdGohBiAIIBJHDQALIB8QGgsCQCAHIA9PDQAgHEEgaiIBIAYgECAPIAdrIhgQNCABEBwgDkUNACAcKAIgIiMgHkEFdEEBIBggGEEBTRsiEkECdGogIEEFdGtqQSBrIR4gEkEDcSEgIBJBfHEhDCBBIBJBAWtsISFBACEIA0AgIyAIQQV0aiETQQAhBwJAAkAgGEEESQ0AIB4gBiAIQQJ0IhFqIgEgBiARICFqaiIRIAEgEUkbSwRAICMgASARIAEgEUsbQQRqSQ0BCyAI/REhgQH9DAAAAAABAAAAAgAAAAMAAAAhgAFBACEBA0AgBiCAASCEAf21ASCBAf2uASKCAf0bAEECdGogEyABQQJ0av0AAgAigwH9HwA4AgAgBiCCAf0bAUECdGoggwH9HwE4AgAgBiCCAf0bAkECdGoggwH9HwI4AgAgBiCCAf0bA0ECdGoggwH9HwM4AgAggAH9DAQAAAAEAAAABAAAAAQAAAD9rgEhgAEgAUEEaiIBIAxHDQALIAwiByASRg0BC0EAIREgByEBICAEQANAIAYgASAQbCAIakECdGogEyABQQJ0aioCADgCACABQQFqIQEgEUEBaiIRICBHDQALCyAHIBJrQXxLDQADQCAGIAEgEGwgCGpBAnRqIBMgAUECdGoqAgA4AgAgBiABQQFqIgcgEGwgCGpBAnRqIBMgB0ECdGoqAgA4AgAgBiABQQJqIgcgEGwgCGpBAnRqIBMgB0ECdGoqAgA4AgAgBiABQQNqIgcgEGwgCGpBAnRqIBMgB0ECdGoqAgA4AgAgGCABQQRqIgFHDQALCyAIQQFqIgggDkcNAAsLIBwgDyAcKAIIIgxrIhM2AgQgFSgCnAEhASAcQQA2AhAgHCAMNgIUIBxBADYCGCAcIBM2AhwgHCABQQJvIhg2AgwCQCBaRSAOQQ9LcUUEQCAKIQEgDkEISQ0BIA9BfnEhISAPQQFxISIgE0F+cSEoIBNBAXEhJyAMQX5xITAgDEEBcSEtICkgJEF/c2ohIyAcKAIAIhIgGEEFdCIHaiEgIBIgB2tBIGohHiAMIBBsQQJ0ISogDiEIA0BBACEGQQAhBwJAAkACQCAMDgICAQALA0AgICAGQQZ0aiIRIAEgBiAQbEECdGoiJf0AAgD9CwIAIBEgJf0AAhD9CwIQICAgBkEBciIRQQZ0aiIlIAEgECARbEECdGoiEf0AAhD9CwIQICUgEf0AAgD9CwIAIAZBAmohBiAHQQJqIgcgMEcNAAsLIC1FDQAgICAGQQZ0aiIHIAEgBiAQbEECdGoiBv0AAgD9CwIAIAcgBv0AAhD9CwIQCwJAIAwgD0YNACABICpqIQdBACEGQQAhESAMICNHBEADQCAeIAZBBnRqIiUgByAGIBBsQQJ0aiIs/QACAP0LAgAgJSAs/QACEP0LAhAgHiAGQQFyIiVBBnRqIiwgByAQICVsQQJ0aiIl/QACEP0LAhAgLCAl/QACAP0LAgAgBkECaiEGIBFBAmoiESAoRw0ACwsgJ0UNACAeIAZBBnRqIhEgByAGIBBsQQJ0aiIH/QACAP0LAgAgESAH/QACEP0LAhALIBwQHAJAIA9FDQBBACEGQQAhByAjBEADQCABIAYgEGxBAnRqIhEgEiAGQQV0aiIl/QACAP0LAgAgESAl/QACEP0LAhAgASAGQQFyIhEgEGxBAnRqIiUgEiARQQV0aiIR/QACEP0LAhAgJSAR/QACAP0LAgAgBkECaiEGIAdBAmoiByAhRw0ACwsgIkUNACABIAYgEGxBAnRqIgcgEiAGQQV0aiIG/QACAP0LAgAgByAG/QACEP0LAhALIAFBIGohASAIQQhrIghBB0sNAAsMAQtBASAOQQN2IgEgRyABIEdJGyIIIAhBAU0bIREgDiAIbkF4cSESIA5BeHEhIEEAIQcgCiEBA0BBMBANIgZFDQQgBiBGEBYiHjYCACAeRQRAIB8QGiAGEAlBAAwGCyAGIAE2AiggBiAQNgIkIAYgDzYCICAGIBM2AhwgBkEANgIYIAYgDDYCFCAGQQA2AhAgBiAYNgIMIAYgDDYCCCAGIBM2AgQgBiAgIAcgEmxrIBIgB0EBaiIHIAhGGyIeNgIsIB9BDSAGECYgASAeQQJ0aiEBIAcgEUcNAAsgHxAaCwJAIA5BB3EiEkUNACAYQQV0ISAgHCgCACEIAkAgDEUNACAIICBqIREgEkECdCEYQQAhBiAMQQFHBEAgDEF+cSEeQQAhBwNAIBEgBkEGdGogASAGIBBsQQJ0aiAYEAsaIBEgBkEBciIjQQZ0aiABIBAgI2xBAnRqIBgQCxogBkECaiEGIAdBAmoiByAeRw0ACwsgDEEBcUUNACARIAZBBnRqIAEgBiAQbEECdGogGBALGgsCQCAMIA9GDQAgCCAga0EgaiEHIAEgDCAQbEECdGohESASQQJ0IRhBACEGIAwgKSAkQX9zakcEQCATQX5xISBBACEMA0AgByAGQQZ0aiARIAYgEGxBAnRqIBgQCxogByAGQQFyIh5BBnRqIBEgECAebEECdGogGBALGiAGQQJqIQYgDEECaiIMICBHDQALCyATQQFxRQ0AIAcgBkEGdGogESAGIBBsQQJ0aiAYEAsaCyAcEBwgD0UNACASQQJ0IQdBACEGICRBAWogKUcEQCAPQX5xIQxBACERA0AgASAGIBBsQQJ0aiAIIAZBBXRqIAcQCxogASAGQQFyIhMgEGxBAnRqIAggE0EFdGogBxALGiAGQQJqIQYgEUECaiIRIAxHDQALCyAPQQFxRQ0AIAEgBiAQbEECdGogCCAGQQV0aiAHEAsaCyAVQZgBaiEVIBZBAWsiFg0AC0EBDAILQQEhByAJKAIcIgwgCEGYAWxqIiNBmAFrIi8oAgAgI0GQAWsoAgBGDQIgI0GUAWsiPSgCACAjQYwBaygCAEYNAiAMKAIEIQ8gDCgCDCEWIAwoAgAhECAMKAIIIRMgCSgCRCESIAkoAkAhESAJKAI8IRogCSgCOCEfIAkgCBBVIh5FBEBBACEHDAMLIAhBAUYEQCAeICNBEGsoAgAiASAvKAIAIgZrICNBDGsoAgAgPSgCACIKayAjQQhrKAIAIgggBmsgI0EEaygCACAKayAJKAI0QQEgCCABaxAXIB4QHQwDC0EAIQYCQAJAIAhBAWsiCkEESQRAIAohByAMIQEMAQsgCkEDcSEHIAwgCkF8cSIVQZgBbGohAQNAIIABIAwgDkGYAWxqIgZB6ARqIAZB0ANqIAZBuAJqIAb9CQKgAf1WAgAB/VYCAAL9VgIAAyAGQeAEaiAGQcgDaiAGQbACaiAG/QkCmAH9VgIAAf1WAgAC/VYCAAP9sQH9uQEgBkHsBGogBkHUA2ogBkG8AmogBv0JAqQB/VYCAAH9VgIAAv1WAgADIAZB5ARqIAZBzANqIAZBtAJqIAb9CQKcAf1WAgAB/VYCAAL9VgIAA/2xAf25ASGAASAOQQRqIg4gFUcNAAsggAEggAEggAH9DQgJCgsMDQ4PAAECAwABAgP9uQEigAEggAEggAH9DQQFBgcAAQIDAAECAwABAgP9uQH9GwAhBiAKIBVGDQELA0AgBiABKAKgASABKAKYAWsiCiAGIApLGyIGIAEoAqQBIAEoApwBayIKIAYgCksbIQYgAUGYAWohASAHQQFrIgcNAAsLAkAgBkGAgIDAAE8NACAcIAZBBXQQFiIhNgIgICFFDQAgHCAhNgIAAkAgCARAIBYgD2shCiATIBBrIQYgIUEgaiE+IAitIYcBIBKtIYoBIBGtIYsBIBqtIYgBIB+tIYwBIAkoAhQiQq0hjQFCASGGAQNAIBwgCjYCCCAcIAY2AiggDCgCpAEhByAMKAKgASEIIAwoApwBIQEgHCAMKAKYASIVQQJvIiI2AiwgHCABQQJvIj82AgwgHCAIIBVrIiAgBmsiKDYCJCAcIAcgAWsiEyAKayI4NgIEIB8iFiEIIBoiASEOIBEiByEYIBIiFSEPAkAghgEgjQFRDQAgQiCGAadrIRBBACEOQQAhCCAWBEBCfyAQrSKJAYZCf4UgjAF8IIkBiKchCAsgGgRAQn8gEK0iiQGGQn+FIIgBfCCJAYinIQ4LQQAhFUEAIQcgEQRAQn8gEK0iiQGGQn+FIIsBfCCJAYinIQcLIBIEQEJ/IBCtIokBhkJ/hSCKAXwgiQGIpyEVC0EAIRhBACEWQQEgEEEBa3QiGyAfSQRAIB8gG2utQn8gEK0iiQGGQn+FfCCJAYinIRYLIBEgG0sEQCARIBtrrUJ/IBCtIokBhkJ/hXwgiQGIpyEYC0EAIQ9BACEBIBogG0sEQCAaIBtrrUJ/IBCtIokBhkJ/hXwgiQGIpyEBCyASIBtNDQAgEiAba61CfyAQrSKJAYZCf4V8IIkBiKchDwtBfyAYIAwoArQBIhBrIhtBACAYIBtPGyIYQQRqIhsgGCAbSxsiGCAoIBggKEkbIi1BfyAHIAwoAtgBIhhrIhtBACAHIBtPGyIHQQRqIhsgByAbSxsiByAGIAYgB0sbIisgIhtBAXQiByArIC0gIhtBAXRBAXIiGyAHIBtLGyIoICBJIRQgFiAQayIHQQAgByAWTRsiB0EEayIWQQAgByAWTxsiJyAIIBhrIgdBACAHIAhNGyIHQQRrIghBACAHIAhPGyIwICIbQQF0IhggMCAnICIbQQF0QQFyIiRJISkgDiAMKAK4ASIWayIHQQAgByAOTRsiB0EEayIIQQAgByAITxsiCCEQIAEgDCgC3AEiDmsiB0EAIAEgB08bIgFBBGsiB0EAIAEgB08bIgEhB0F/IBUgFmsiFkEAIBUgFk8bIhVBBGoiFiAVIBZLGyIVIAogCiAVSxsiFiEVQX8gDyAOayIOQQAgDiAPTRsiDkEEaiIPIA4gD0sbIg4gOCAOIDhJGyIbIQ8gPwRAIAEhECAWIQ8gGyEVIAghBwsgKCAgIBQbISggGCAkICkbIRggHCAtNgI8IBwgJzYCOCAcICs2AjQgHCAwNgIwAkAgE0EISQRAQQchBkEAIQ4MAQsgPiAiQQV0Ig5rICdBBnRqITggDiAhaiAwQQZ0aiEUIAYgLWohLSAGICdqIScgCiAbaiEkIAEgCmohKSAhIBhBBXRqISpBACEOA0ACQAJAIA4gFkkgDkEHciIGIAhPcQ0AIA4gJEkgBiApT3ENACAOQQhqIQ4MAQtBCCATIA5rIgYgBkEITxshJUEAIQYDQCAeIDAgBiAOaiIiICsgIkEBaiIsIBQgBkECdCIuakEQQQAQFyAeICcgIiAtICwgLiA4akEQQQAQFyAGQQFqIgYgJUcNAAsgHEEgahAcIB4gGCAOICggDkEIaiIOICpBCEEBQQAQH0UNBQsgDkEHciIGIBNJDQALCwJAIA4gE08NACAOIBZJIAYgCE9xRQRAIA4gCiAbak8NASAGIAEgCmpJDQELIBxBIGohBkEAISIgEyAOayIwBEADQCAeIAYoAhAiLSAOICJqIicgBigCFCAnQQFqIisgIkECdCI4IAYoAgAgBigCDEEFdGogLUEGdGpqQRBBABAXIB4gBigCGCItIAYoAggiFGogJyAGKAIcIBRqICsgBigCACAGKAIMQQV0ayAtQQZ0aiA4akEgakEQQQAQFyAiQQFqIiIgMEcNAAsLIAYQHCAeIBggDiAoIBMgISAYQQV0akEIQQFBABAfRQ0DCyAcIBs2AhwgHCABNgIYIBwgFjYCFCAcIAg2AhAgGCAoSQRAIBVBAXQiBiAPQQF0QQFyIhUgBiAVSxsiBiATIAYgE0kbIQYgPiA/QQV0IhVrIAFBBnRqIQ4gFSAhaiAIQQZ0aiEVIAogG2ohDyABIApqIQogISAQQQF0IgEgB0EBdEEBciIHIAEgB0kbIgdBBXRqIRADQCAeIBggCEEIICggGGsiASABQQhPGyAYaiIBIBYgFUEBQRAQFyAeIBggCiABIA8gDkEBQRAQFyAcEBwgHiAYIAcgASAGIBBBAUEIQQAQH0UNBCAYQQhqIhggKEkNAAsLIAxBmAFqIQwgICEGIBMhCiCGAUIBfCKGASCHAVINAAsLQQEhByAeICNBEGsoAgAiASAvKAIAIgZrICNBDGsoAgAgPSgCACIKayAjQQhrKAIAIgggBmsgI0EEaygCACAKayAJKAI0QQEgCCABaxAXIB4QHSAhEAkMBAsgHhAdICEQCUEAIQcMAwsgHhAdQQAhBwwCCyAfEBpBAAshByAcKAIgEAkLIBxBQGskACAHDQAMBAsgHUG4CGohHSANQTRqIQ0gCUHMAGohCSALQQFqIgsgFygCEEkNAAsgGSgCICEdIBkoAhQoAgAhFwsCQCAdKAIQIglFDQAgGSgCRA0AIBcoAhQiDSgCHCEBAkACQAJAIBkoAkAiBgRAIBcoAhAiC0EDSQ0CAkAgDSgCGCIHIA0oAmRGBEAgByANKAKwAUYNAQsgM0EBQa/KAEEAEAgMBwsCQCAZKAIYKAIYIgooAiQiCCAKKAJYRw0AIAggCigCjAFHDQAgASAHQZgBbCIKaiIBQYwBaygCACABQZQBaygCAGsgAUGQAWsoAgAgAUGYAWsoAgBrbCIBIA0oAmggCmoiB0GMAWsoAgAgB0GUAWsoAgBrIAdBkAFrKAIAIAdBmAFrKAIAa2xHDQAgDSgCtAEgCmoiB0GMAWsoAgAgB0GUAWsoAgBrIAdBkAFrKAIAIAdBmAFrKAIAa2wgAUYNAgsgM0EBQa/KAEEAEAgMBgsgFygCECILQQNJDQECQCAZKAIYKAIYIgcoAiQiCiAHKAJYRw0AIAogBygCjAEiCEcNACABIApBmAFsIgdqIgEoApQBIAEoAowBayABKAKQASABKAKIAWtsIgEgByANKAJoaiIHKAKUASAHKAKMAWsgBygCkAEgBygCiAFrbEcNACANKAK0ASAIQZgBbGoiBygClAEgBygCjAFrIAcoApABIAcoAogBa2wgAUYNAQsgM0EBQa/KAEEAEAgMBQsgCUECRgRAIB0oAugrRQ0DIAtBAnQQDSILRQ0FIBcoAhAiCEUNAiAZKAJABEBBACEXAkAgCEEMSQRAQQAhBgwBCyANQSRqIQoCQCALIA0gCEHMAGxqQSRrTw0AIAogCyAIQQJ0ak8NAEEAIQYMAQsgDUGIAmohDCANQbwBaiEVIA1B8ABqIQ4gDSAIQXxxIgZBzABsaiENQQAhCQNAIAsgCUECdGogDCAJQcwAbCIHaiAHIBVqIAcgDmogByAKav0JAgD9VgIAAf1WAgAC/VYCAAP9CwIAIAlBBGoiCSAGRw0ACyAGIAhGDQQLAkAgCEEDcSIHRQRAIAYhCQwBCyAGIQkDQCALIAlBAnRqIA0oAiQ2AgAgCUEBaiEJIA1BzABqIQ0gF0EBaiIXIAdHDQALCyAGIAhrQXxLDQMgC0EMaiEGIAtBCGohCiALQQRqIQwDQCALIAlBAnQiB2ogDSgCJDYCACAHIAxqIA0oAnA2AgAgByAKaiANKAK8ATYCACAGIAdqIA0oAogCNgIAIA1BsAJqIQ0gCUEEaiIJIAhHDQALDAMLQQAhFwJAIAhBDEkEQEEAIQYMAQsgDUE0aiEKAkAgCyANIAhBzABsakEUa08NACAKIAsgCEECdGpPDQBBACEGDAELIA1BmAJqIQwgDUHMAWohFSANQYABaiEOIA0gCEF8cSIGQcwAbGohDUEAIQkDQCALIAlBAnRqIAwgCUHMAGwiB2ogByAVaiAHIA5qIAcgCmr9CQIA/VYCAAH9VgIAAv1WAgAD/QsCACAJQQRqIgkgBkcNAAsgBiAIRg0DCwJAIAhBA3EiB0UEQCAGIQkMAQsgBiEJA0AgCyAJQQJ0aiANKAI0NgIAIAlBAWohCSANQcwAaiENIBdBAWoiFyAHRw0ACwsgBiAIa0F8Sw0CIAtBDGohBiALQQhqIQogC0EEaiEMA0AgCyAJQQJ0IgdqIA0oAjQ2AgAgByAMaiANKAKAATYCACAHIApqIA0oAswBNgIAIAYgB2ogDSgCmAI2AgAgDUGwAmohDSAJQQRqIgkgCEcNAAsMAgsgHSgC0CsoAhRBAUYEQCAGBEAgDSgCJCANKAJwIA0oArwBIAEQWAwECyANKAI0IA0oAoABIA0oAswBIAEQWAwDCyAGBEAgDSgCJCANKAJwIA0oArwBIAEQVwwDCyANKAI0IA0oAoABIA0oAswBIAEQVwwCCyBAIAs2AgAgM0EBQezKACBAEAgMAQsgGSgCGCgCGCgCIBoCfyAdKALoKyEHQQAhDkEAIAhBA3QQDSINRQ0AGgJAIAFFDQAgCEUNACANIAhBAnRqIRMgCEF8cSEPIAhBA3EhDCAIQQFrIRADQEEAIRdBACEJIBBBA08EQANAIA0gF0ECdCIGaiAGIAtqKAIAKgIAOAIAIA0gBkEEciIKaiAKIAtqKAIAKgIAOAIAIA0gBkEIciIKaiAKIAtqKAIAKgIAOAIAIA0gBkEMciIGaiAGIAtqKAIAKgIAOAIAIBdBBGohFyAJQQRqIgkgD0cNAAsLQQAhCiAMBEADQCANIBdBAnQiBmogBiALaigCACoCADgCACAXQQFqIRcgCkEBaiIKIAxHDQALC0EAIQYgByEXA0AgEyAGQQJ0IhJqIglBADYCAEMAAAAAIY4BQQAhCkEAIRYgEEECSwRAA0AgCSAXKgIAIA0gCkECdGoiFSoCAJQgjgGSIo4BOAIAIAkgFyoCBCAVKgIElCCOAZIijgE4AgAgCSAXKgIIIBUqAgiUII4BkiKOATgCACAJIBcqAgwgFSoCDJQgjgGSIo4BOAIAIApBBGohCiAXQRBqIRcgFkEEaiIWIA9HDQALC0EAIRUgDARAA0AgCSAXKgIAIA0gCkECdGoqAgCUII4BkiKOATgCACAKQQFqIQogF0EEaiEXIBVBAWoiFSAMRw0ACwsgCyASaiIKIAooAgAiCkEEajYCACAKII4BOAIAIAZBAWoiBiAIRw0ACyAOQQFqIg4gAUcNAAsLIA0QCUEBCyF7IAsQCSB7RQ0CCyAZKAIUKAIAIhYoAhBFBEBBASExDAILIBkoAiAoAtArIhdBuAhqIRMgF0G0CGohEiAZKAJEIRAgFigCFCEHIBkoAhgoAhghCkEAIQgDQAJAIBAEQCAQIAhBAnRqKAIARQ0BCyAHKAIcIgEgCigCJEGYAWxqIQsCfyAZKAJARQRAIAsoApQBIAsoAowBayEGIAsoApABIAsoAogBayEBQQAhDEE0DAELIAEgBygCGEGYAWxqIgZBkAFrKAIAIAsoAgggCygCAGsiASAGQZgBaygCAGprIQwgCygCDCALKAIEayEGQSQLIQkgCigCGCELAn8gCigCIARAQQEgC0EBa3QiC0EBayEdQQAgC2sMAQtBfyALdEF/cyEdQQALIQ8gAUUNACAGRQ0AIAcgCWooAgAhCSAXKAIUQQFGBEAgEyAIQbgIbCILaiERIAsgEmohGCABQQFxIRogAUECdCEzIAFBfHEiDkECdCEbIB39ESGCASAP/REhgAFBACEVIAFBBEkhHwNAAkACQAJAIB8NACAJIBFJIBggCSAzaklxDQAgCSAbaiENIBf9CQK0CCGDAUEAIQsDQCAJIAtBAnRqIiAggAEggwEgIP0AAgD9rgEihAEgggH9tgEghAEggAH9Of1S/QsCACALQQRqIgsgDkcNAAsgDiILIAFGDQIMAQsgCSENQQAhCwsgC0EBciEJIBoEQCANIA8gFygCtAggDSgCAGoiCyAdIAsgHUgbIAsgD0gbNgIAIA1BBGohDSAJIQsLIAEgCUYNAANAIA0gDyAXKAK0CCANKAIAaiIJIB0gCSAdSBsgCSAPSBs2AgAgDSAPIBcoArQIIA0oAgRqIgkgHSAJIB1IGyAJIA9IGzYCBCANQQhqIQ0gC0ECaiILIAFHDQALCyANIAxBAnRqIQkgFUEBaiIVIAZHDQALDAELIB2sIYYBIA+sIYcBQQAhFQNAQQAhCwNAIAkCfyAdIAkqAgAijgFDAAAAT14NABogDyCOAUMAAADPXQ0AGiCHASAXNAK0CAJ/II4BkCKOAYtDAAAAT10EQCCOAagMAQtBgICAgHgLrHwiigEghgEghgEgigFVGyCHASCKAVUbpws2AgAgCUEEaiEJIAtBAWoiCyABRw0ACyAJIAxBAnRqIQkgFUEBaiIVIAZHDQALCyAHQcwAaiEHIBdBuAhqIRcgCkE0aiEKQQEhMSAIQQFqIgggFigCEEkNAAsMAQsgBUEBQZoZQQAQCAsgQEEQaiQAIDFFBEAgTxApIAAgACgCCEGAgAJyNgIIIAVBAUHL1ABBABAIDAELAkAgAkUNAAJ/IAIhB0EAIQYCQCAAKALQASIVQQEQTSIBQX9GDQAgASADSw0AQQEgFSgCGCIBKAIQRQ0BGiABKAIYIQggFSgCFCgCACgCFCEXA0AgCCgCGCIBQQdxIQIgAUEDdiEDIBcoAhwiBiAIKAIkQZgBbGohAQJ/IBUoAkAEQCAGIBcoAhhBmAFsaiIGQZABaygCACABKAIIIAEoAgBrIgsgBkGYAWsoAgBqayEMIAEoAgwgASgCBGshCUEkDAELIAEoApQBIAEoAowBayEJIAEoApABIAEoAogBayELQQAhDEE0CyAXaigCACEBAkACQAJAAkACQEEEIAMgAkEAR2oiAiACQQNGG0EBaw4EAQIEAAQLIAlFDQMgCyAMaiEGIAtBAnQhAiAJQQRPBEAgCUF8cSEKQQAhCwNAIAcgASACEAshByABIAZBAnQiA2oiDSADaiIMIANqIg4gA2ohASACIAdqIA0gAhALIAJqIAwgAhALIAJqIA4gAhALIAJqIQcgC0EEaiILIApHDQALC0EAIQsgCUEDcSIDRQ0DA0AgByABIAIQCyEHIAEgBkECdGohASACIAdqIQcgC0EBaiILIANHDQALDAMLIAlFIAtFciECIAgoAiBFDQEgAg0CIAtBAnQhDiALQXxxIgNBAnQhD0EAIQ0DQAJAAkACQCALQQRJDQAgASAHIAtqSSABIA5qIAdLcQ0AIAMgB2ohfCABIA9qIQZBACEKA0AgByAKaiABIApBAnRq/QACAP0MAAAAAAAAAAAAAAAAAAAAAP0NAAQIDAAAAAAAAAAAAAAAAP1aAAAAIApBBGoiCiADRw0ACyB8IQcgAyICIAtGDQIMAQsgASEGQQAhAgtBACEKIAsgAiIBa0EHcSIWBEADQCAHIAYoAgA6AAAgAUEBaiEBIAdBAWohByAGQQRqIQYgCkEBaiIKIBZHDQALCyACIAtrQXhLDQADQCAHIAYoAgA6AAAgByAGKAIEOgABIAcgBigCCDoAAiAHIAYoAgw6AAMgByAGKAIQOgAEIAcgBigCFDoABSAHIAYoAhg6AAYgByAGKAIcOgAHIAdBCGohByAGQSBqIQYgAUEIaiIBIAtHDQALCyAGIAxBAnRqIQEgDUEBaiINIAlHDQALDAILIAlFIAtFciECIAgoAiAEQCACDQIgC0ECdCEOIAtBAXQhDyALQXxxIgNBAnQhFiADQQF0IRBBACENA0ACQAJAAkAgC0EESQ0AIAEgByAPakkgASAOaiAHS3ENACABIBZqIQYgByAQaiF9QQAhCgNAIAcgCkEBdGogASAKQQJ0av0AAgD9DAAAAAAAAAAAAAAAAAAAAAD9DQABBAUICQwNAAEAAQABAAH9WwEAACAKQQRqIgogA0cNAAsgfSEHIAMiAiALRg0CDAELIAEhBkEAIQILQQAhCiALIAIiAWtBB3EiEwRAA0AgByAGKAIAOwEAIAFBAWohASAHQQJqIQcgBkEEaiEGIApBAWoiCiATRw0ACwsgAiALa0F4Sw0AA0AgByAGKAIAOwEAIAcgBigCBDsBAiAHIAYoAgg7AQQgByAGKAIMOwEGIAcgBigCEDsBCCAHIAYoAhQ7AQogByAGKAIYOwEMIAcgBigCHDsBDiAHQRBqIQcgBkEgaiEGIAFBCGoiASALRw0ACwsgBiAMQQJ0aiEBIA1BAWoiDSAJRw0ACwwCCyACDQEgC0ECdCEOIAtBAXQhDyALQXxxIgNBAnQhFiADQQF0IRBBACENA0ACQAJAAkAgC0EESQ0AIAEgByAPakkgASAOaiAHS3ENACABIBZqIQYgByAQaiF+QQAhCgNAIAcgCkEBdGogASAKQQJ0av0AAgD9DAAAAAAAAAAAAAAAAAAAAAD9DQABBAUICQwNAAEAAQABAAH9WwEAACAKQQRqIgogA0cNAAsgfiEHIAMiAiALRg0CDAELIAEhBkEAIQILQQAhCiALIAIiAWtBB3EiEwRAA0AgByAGKAIAOwEAIAFBAWohASAHQQJqIQcgBkEEaiEGIApBAWoiCiATRw0ACwsgAiALa0F4Sw0AA0AgByAGKAIAOwEAIAcgBigCBDsBAiAHIAYoAgg7AQQgByAGKAIMOwEGIAcgBigCEDsBCCAHIAYoAhQ7AQogByAGKAIYOwEMIAcgBigCHDsBDiAHQRBqIQcgBkEgaiEGIAFBCGoiASALRw0ACwsgBiAMQQJ0aiEBIA1BAWoiDSAJRw0ACwwBCyACDQAgC0ECdCEOIAtBfHEiA0ECdCEPQQAhDQNAAkACQAJAIAtBBEkNACABIAcgC2pJIAEgDmogB0txDQAgAyAHaiF/IAEgD2ohBkEAIQoDQCAHIApqIAEgCkECdGr9AAIA/QwAAAAAAAAAAAAAAAAAAAAA/Q0ABAgMAAAAAAAAAAAAAAAA/VoAAAAgCkEEaiIKIANHDQALIH8hByADIgIgC0YNAgwBCyABIQZBACECC0EAIQogCyACIgFrQQdxIhYEQANAIAcgBigCADoAACABQQFqIQEgB0EBaiEHIAZBBGohBiAKQQFqIgogFkcNAAsLIAIgC2tBeEsNAANAIAcgBigCADoAACAHIAYoAgQ6AAEgByAGKAIIOgACIAcgBigCDDoAAyAHIAYoAhA6AAQgByAGKAIUOgAFIAcgBigCGDoABiAHIAYoAhw6AAcgB0EIaiEHIAZBIGohBiABQQhqIgEgC0cNAAsLIAYgDEECdGohASANQQFqIg0gCUcNAAsLIBdBzABqIRcgCEE0aiEIQQEhBiByQQFqInIgFSgCGCgCEEkNAAsLIAYLRQ0BIE8oAtwrIgFFDQAgARAJIE9CADcC3CsLIAAgAC0AREH+AXE6AEQgACAAKAIIQf9+cTYCCEEBIWcgBCkDCCKGAVAEfkIABSCGASAEKQM4fQtQIAAoAggiAUHAAEZxDQAgAUGAAkYNACAEIE5BCmpBAiAFEBJBAkcEQCAFQQFBAiAAKAK4ARtBlhJBABAIIAAoArgBRSFnDAELIE5BCmogTkEMakECEAogTigCDCIBQZD/A0YNACABQdn/A0YEQCAAQYACNgIIIABBADYCzAEMAQsgBCkDCCKGAVAEfkIABSCGASAEKQM4fQtQBEAgAEHAADYCCCAFQQJBrT5BABAIDAELQQAhZyAFQQFB7T1BABAICyBOQRBqJAAgZwsLACAABEAgABAJCwu0AQEBfyAAKAIMRQRAIAIgACgCJCABEQMADwsCQEEIEA0iA0UNACADIAI2AgQgAyABNgIAQQgQDSIBRQRAIAMQCQ8LIAEgAzYCACAAIAAoAgRB5ABsIgI2AigDQCAAKAIYIAJKDQALIAEgACgCFDYCBCAAIAE2AhQgACAAKAIYQQFqNgIYIAAoAhwiAUUNACABKAIAQQA2AgggACABKAIENgIcIAAgACgCIEEBazYCICABEAkLCy8BAX8gAARAIAAoAgQiAQRAIAAoAgAgARECAAsgACgCIBAJIABBADYCICAAEAkLCyoAIAAEQCAAKAIwIABBFEEQIAAoAkwbaigCABECACAAQQA2AjAgABAJCwv6AgEEfwJAIABFDQAgACgCrCgiAQRAIAAoAqgoIgIEQEEAIQEDQCAAKAKsKCABQQN0aigCACIDBEAgAxAJIAAoAqgoIQILIAFBAWoiASACSQ0ACyAAKAKsKCEBCyAAQQA2AqgoIAEQCSAAQQA2AqwoCyAAKAK0KCIBBEAgARAJIABBADYCtCgLIAAoAtArIgEEQCABEAkgAEEANgLQKwsgACgC7CsiAQRAIAEQCSAAQQA2AuwrCyAAKALoKyIBBEAgARAJIABBADYC6CsLIAAoAvwrIgEEQCABEAkgAEEANgKELCAAQgA3AvwrCyAAKALwKyIBBEAgACgC9CsiAwR/QQAhAgNAIAEoAgwiBARAIAQQCSABQQA2AgwgACgC9CshAwsgAUEUaiEBIAJBAWoiAiADSQ0ACyAAKALwKwUgAQsQCSAAQQA2AvArCyAAKALkKyIBBEAgARAJIABBADYC5CsLIAAoAtwrIgFFDQAgARAJIABCADcC3CsLC8gHAhF/AX4gACgCECIIQSBPBEAgACkDCKcPCwJAIAAoAhQiA0EETgRAIAAoAgAiAkEDaygCACEBIAAgA0EEayIDNgIUIAAgAkEEazYCAAwBCyADQQBMBEAMAQsgA0EBcSENIAAoAgAhAgJAIANBAUYEQEEYIQQMAQsgA0H+////B3EhCUEYIQQDQCAAIAJBAWsiBjYCACACLQAAIQwgACACQQJrIgI2AgAgACADQQFrNgIUIAYtAAAhBiAAIANBAmsiAzYCFCAMIAR0IAFyIAYgBEEIa3RyIQEgBEEQayEEIAVBAmoiBSAJRw0ACwsgDQRAIAAgAkEBazYCACACLQAAIQ4gACADQQFrNgIUIA4gBHQgAXIhAQtBACEDCyAAKAIYIQIgACABQf8BcSIJQY8BSzYCGCAAQQdBCCABQYCAgPgHcUGAgID4B0YbQQggAhsiAkEIQQdBCCABQYCA/ANxQYCA/ANGGyABQf////94TRtqIgRBCEEHQQggAUGA/gFxQYD+AUYbIAFBEHZB/wFxIgVBjwFNG2oiBkEIQQdBCCABQf8AcUH/AEYbIAFBCHZB/wFxIgdBjwFNGyAIamoiCjYCECAAIAApAwggBSACdCABQRh2ciAHIAR0ciAJIAZ0cq0gCK2GhCISNwMIIApBH00EQAJAIANBBE4EQCAAKAIAIgJBA2soAgAhASAAIANBBGs2AhQgACACQQRrNgIADAELIANBAEwEQEEAIQEMAQsgA0EBcSEQIAAoAgAhAgJAIANBAUYEQEEYIQRBACEBDAELIANB/v///wdxIQZBGCEEQQAhAUEAIQUDQCAAIAJBAWsiBzYCACACLQAAIQ8gACACQQJrIgI2AgAgACADQQFrNgIUIActAAAhByAAIANBAmsiAzYCFCAPIAR0IAFyIAcgBEEIa3RyIQEgBEEQayEEIAVBAmoiBSAGRw0ACwsgEEUNACAAIAJBAWs2AgAgAi0AACERIAAgA0EBazYCFCARIAR0IAFyIQELIAAgAUH/AXEiAkGPAUs2AhggAEEIQQdBCCABQYCAgPgHcUGAgID4B0YbIAlBjwFNGyIDQQhBB0EIIAFBgID8A3FBgID8A0YbIAFB/////3hNG2oiBEEIQQdBCCABQYD+AXFBgP4BRhsgAUEQdkH/AXEiBUGPAU0baiIIQQhBB0EIIAFB/wBxQf8ARhsgAUEIdkH/AXEiCUGPAU0bIApqajYCECAAIAUgA3QgAUEYdnIgCSAEdHIgAiAIdHKtIAqthiAShCISNwMICyASpwvJFAIdfwZ7IAAoAggiCiAAKAIEaiEIAkAgACgCDEUEQCAIQQJIDQEgA0EATA0BIAAoAgAiBSAIQQRrIgZBAXYiDEECdCIJIAEgCkECdGoiByADQQJ0IgRqakEEakkgBSAMQQN0akEIaiIAIAdBBGpLcSAFIAEgBGogCWpBBGpJIAFBBGogAElxciESIAhBBEkiFCACQQFHciEVIAJBAUYgBkEFS3EhFiAIQfz///8HcSETIAhBAXEhFyAKQQFqIQ8gCEEDcSERIAEgBWshGCAFIAhBAnRqIRkgBSAIQQFrIgBBAnRqIRogDEEBaiIbQXxxIhBBAXQhCyACIApsQQJ0IRwgAEEBdiACbEECdCEdA0AgASgCACABIBxqKAIAIglBAWpBAXVrIQcCQCAUBEAgCSEEQQAhBgwBC0EAIQYCQAJ/QQAgFkUNABpBACASDQAaIAn9ESEiIAf9ESEh/QwAAAAAAgAAAAQAAAAGAAAAISVBACEAA0AgASAAQQJ0av0AAgQhJCABIAAgD2pBAnRq/QACACEjIAUgAEEDdGoiBCAh/VoCAAMgBEEIaiAkICMgIiAj/Q0MDQ4PEBESExQVFhcYGRobIiT9rgH9DAIAAAACAAAAAgAAAAIAAAD9rgFBAv2sAf2xASIi/VoCAAAgBEEQaiAi/VoCAAEgBEEYaiAi/VoCAAIgBSAl/QwBAAAAAQAAAAEAAAABAAAA/VAiJv0bAEECdGogIiAhICL9DQwNDg8QERITFBUWFxgZGhv9rgFBAf2sASAk/a4BIiH9WgIAACAFICb9GwFBAnRqICH9WgIAASAFICb9GwJBAnRqICH9WgIAAiAFICb9GwNBAnRqICH9WgIAAyAl/QwIAAAACAAAAAgAAAAIAAAA/a4BISUgIiEhICMhIiAAQQRqIgAgEEcNAAsgIv0bAyEEICH9GwMhByAQIBtGDQEgCyEGIAQhCSAQCyEAA0AgASAAQQFqIgogAmxBAnRqKAIAIR4gASAAIA9qIAJsQQJ0aigCACEEIAUgBkECdGoiDiAHNgIAIA4gByAeIAQgCWpBAmpBAnVrIgdqQQF1IAlqNgIEIAZBAmohBiAAIAxHIR8gBCEJIAohACAfDQALDAELIAshBgsgBSAGQQJ0aiAHNgIAQXwhACAXBH8gGiABIB1qKAIAIARBAWpBAXVrIgA2AgAgACAHakEBdSEHQXgFQXwLIBlqIAQgB2o2AgBBACEGQQAhAEEAIQQCQCAVIBggDUECdGpBEElyRQRAA0AgASAAQQJ0IgRqIAQgBWr9AAIA/QsCACAAQQRqIgAgE0cNAAsgEyIEIAhGDQELIAQhACARBEADQCABIAAgAmxBAnRqIAUgAEECdGooAgA2AgAgAEEBaiEAIAZBAWoiBiARRw0ACwsgBCAIa0F8Sw0AA0AgASAAIAJsQQJ0aiAFIABBAnRqKAIANgIAIAEgAEEBaiIEIAJsQQJ0aiAFIARBAnRqKAIANgIAIAEgAEECaiIEIAJsQQJ0aiAFIARBAnRqKAIANgIAIAEgAEEDaiIEIAJsQQJ0aiAFIARBAnRqKAIANgIAIABBBGoiACAIRw0ACwsgAUEEaiEBIA1BAWoiDSADRw0ACwwBCwJAAkACQCAIQQFrDgIAAQILIANBAEwNAkEAIQICQCADQQRJBEAgASEADAELIAEgA0H8////B3EiAkECdGohAANAIAEgBkECdGoiBCAE/QACACIh/RsAQQJt/REgIf0bAUECbf0cASAh/RsCQQJt/RwCICH9GwNBAm39HAP9CwIAIAZBBGoiBiACRw0ACyACIANGDQMLA0AgACAAKAIAQQJtNgIAIABBBGohACACQQFqIgIgA0cNAAsMAgsgA0EATA0BIAAoAgAhCSACIApsQQJ0IQcDQCAJIAEoAgAgASAHaiIEKAIAQQFqQQF1ayIANgIEIAkgACAEKAIAaiIANgIAIAEgADYCACABIAJBAnRqIAkoAgQ2AgAgAUEEaiEBIAZBAWoiBiADRw0ACwwBCyAIQQNIDQAgA0EATA0AIAAoAgAiBSAIIAhBAXEiFEUiBmtBBGsiCUEBdiILQQJ0IgcgASADQQJ0IgBqakkgBSALQQN0akEMaiIEIAFBBGpLcSAFQQRqIAAgASAKQQJ0aiIAaiAHakEIakkgAEEIaiAESXFyIRUgAkEBRyAIQQRJciEWIAJBAUYgCUEFS3EhFyAIQfz///8HcSEQIAhBA3EhESABIAVrIRggBSAIQQJ0akEEayEZIAUgCEECayIAQQJ0aiEaIAtBAWoiEkF8cSIMQQFyIRMgDEEBdEEBciELIAIgCmxBAnQhGyAAIAZrQQJJIRwgCEEBdkEBayACbEECdCEdA0AgBSABKAIAIAEgG2oiDyACQQJ0aigCACIJIA8oAgAiAGpBAmpBAnVrIgcgAGo2AgBBASEEAkAgHARAIAkhBgwBCwJAAn9BASAXRQ0AGkEBIBUNABogCf0RISEgB/0RISJBACEAA0AgBSAAQQN0aiIHIAEgAEECdCIEav0AAgQgISAEIA9q/QACCCIh/Q0MDQ4PEBESExQVFhcYGRobIiQgIf2uAf0MAgAAAAIAAAACAAAAAgAAAP2uAUEC/awB/bEBIiMgIyAiICP9DQwNDg8QERITFBUWFxgZGhv9rgFBAf2sASAk/a4BIiT9DQQFBgcYGRobCAkKCxwdHh/9CwIUIAcgIiAk/Q0MDQ4PEBESEwABAgMUFRYXICP9DQABAgMEBQYHEBESEwwNDg/9CwIEICMhIiAAQQRqIgAgDEcNAAsgIf0bAyEGICL9GwMhByAMIBJGDQEgCyEEIAYhCSATCyEAA0AgASAAIAJsQQJ0aigCACEeIA8gAEEBaiIKIAJsQQJ0aigCACEGIAUgBEECdGoiDiAHNgIAIA4gByAeIAYgCWpBAmpBAnVrIgdqQQF1IAlqNgIEIARBAmohBCAAIBJHISAgCiEAIAYhCSAgDQALDAELIAshBAsgGCANQQJ0aiEJIAUgBEECdGogBzYCAAJAIBRFBEAgGiABIB1qKAIAIAZBAWpBAXVrIgAgB2pBAXUgBmo2AgAMAQsgBiAHaiEACyAZIAA2AgBBACEGQQAhAEEAIQQCQCAWIAlBEElyRQRAA0AgASAAQQJ0IgRqIAQgBWr9AAIA/QsCACAAQQRqIgAgEEcNAAsgECIEIAhGDQELIAQhACARBEADQCABIAAgAmxBAnRqIAUgAEECdGooAgA2AgAgAEEBaiEAIAZBAWoiBiARRw0ACwsgBCAIa0F8Sw0AA0AgASAAIAJsQQJ0aiAFIABBAnRqKAIANgIAIAEgAEEBaiIEIAJsQQJ0aiAFIARBAnRqKAIANgIAIAEgAEECaiIEIAJsQQJ0aiAFIARBAnRqKAIANgIAIAEgAEEDaiIEIAJsQQJ0aiAFIARBAnRqKAIANgIAIABBBGoiACAIRw0ACwsgAUEEaiEBIA1BAWoiDSADRw0ACwsLNwECfyMAQRBrIgEkACAABH8gAUEMakEgIAAQZSEAQQAgASgCDCAAGwVBAAshAiABQRBqJAAgAgsbAQF/IAAEQCAAKAIIIgEEQCABEAkLIAAQCQsLMQECf0EBQQwQDCIABEAgAEEKNgIEIABBCkEEEAwiATYCCCABBEAgAA8LIAAQCQtBAAtTAQJ/IABBADYCMCAAIAAoAiA2AiQgASAAKAIAIAAoAhwRCQAhBCAAKAJEIQIgBEUEQCAAIAJBBHI2AkRBAA8LIAAgATcDOCAAIAJBe3E2AkRBAQuGAwIFfwp+IwBBIGsiAyQAAkAgACgCECIFRQRAQQEhAgwBCwJAIAA0AgAiB0IAUw0AIAA0AgQiCEIAUw0AIAA0AggiCUIAUw0AIAA0AgwiCkIAUw0AIAAoAhghACAHQgF9IQwgCEIBfSENIAlCAX0hCSAKQgF9IQoDQCAAIAwgACgCACICrSIHfCAHgCILPgIQIAAgDSAAKAIEIgatIgd8IAeAIg4+AhRCASAANQIoIgeGIg9CAX0iCCAJIAKsIhB8IBB/xHwgB4enIAggC8R8IAeHp2siAkEASARAIAMgAjYCBCADIAQ2AgAgAUEBQePkACADEAhBACECDAMLIAAgAjYCCCAIIAogBqwiC3wgC3/EfCAHh6cgDsQgD3xCAX0gB4enayICQQBIBEAgAyACNgIUIAMgBDYCECABQQFBqOUAIANBEGoQCEEAIQIMAwsgACACNgIMIABBNGohAEEBIQIgBEEBaiIEIAVHDQALDAELIAFBAUGnM0EAEAgLIANBIGokACACC9cGAQZ/IAAEQAJAIAAoAgAEQCAAKAIMIgEEQCABECkgACgCDBAJIABBADYCDAsgACgCECIBBEAgARAJIABCADcDEAsgACgCQBAJIABCADcCPAwBCyAAKAIsIgEEQCABEAkgAEEANgIsCyAAKAIgIgEEQCABEAkgAEIANwMgCyAAKAI0IgFFDQAgARAJIABCADcCNAsgACgC0AEQTiAAKAKcASIBBEAgACgCaCAAKAJsbCIDBH8DQCABECkgAUGMLGohASACQQFqIgIgA0cNAAsgACgCnAEFIAELEAkgAEEANgKcAQsgACgCdCIBBEAgACgCcCICBEBBACEBA0AgACgCdCABQQN0aigCACIDBEAgAxAJIAAoAnAhAgsgAUEBaiIBIAJJDQALIAAoAnQhAQsgAEEANgJwIAEQCSAAQQA2AnQLIAAoAogBEAkgAEEANgJ4IABBADYCiAEgACgCZBAJIABBADYCZCAALQC8AUECcUUEQCAAKAKoARAJCyAAQdAAakEAQfAAEA4aIAAoAsABEC0gAEEANgLAASAAKALEARAtIABBADYCwAEgACgCyAEiAQRAIAEoAhwiAgRAIAIQCSABQQA2AhwLIAEoAigiAgRAIAEoAiQEQANAIAIgBUEobCIDaigCJCIEBEAgBBAJIAEoAigiAiADakEANgIkCyACIANqKAIQIgQEQCAEEAkgASgCKCICIANqQQA2AhALIAIgA2ooAhgiBARAIAQQCSABKAIoIgIgA2pBADYCGAsgBUEBaiIFIAEoAiRJDQALCyACEAkgAUEANgIoCyABEAkLIABBADYCyAEgACgCSBAYIABBADYCSCAAKAJMEBggAEEANgJMIAAoAtQBIgMEQAJAIAMoAghFDQAgAygCDARAIANBADYCKANAIAMoAhhBAEoNAAsLIANBATYCECADKAIAEAkgAygCHCICRQ0AA0AgAigCBCEBIAIQCSADIAE2AhwgASICDQALCyADKAIkIgIEQCACKAIEIgVBAEoEQEEAIQEDQCACKAIAIAFBDGxqIgQoAggiBgRAIAQoAgQgBhECACACKAIEIQULIAFBAWoiASAFSA0ACwsgAigCABAJIAIQCQsgAxAJCyAAQQA2AtQBIAAQCQsL5gMCCH8EfiAAKAIUKAIAKAIUIAFBzABsaiIJKAIMIgggACgCGCgCGCABQTRsaiIKNQIEIhBCAX0iEiAANQI8fCAQgKciCyAIIAtJGyEMIAkoAggiCCAKNQIAIhFCAX0iEyAANQI4fCARgKciCiAIIApJGyEKIAkoAgQiCCASIAA1AjR8IBCApyILIAggC0sbIQsgCSgCACIIIBMgADUCMHwgEYCnIg0gCCANSxshDUEAIQggACgCICgC0CsgAUG4CGxqKAIUIQ4CQCAJKAIUQQAgAmtBfyACG2oiAkUEQCAKIQAgDSEIIAshAQwBCyADQQFxIAJBAWsiD3QiCSANSQRAIA0gCWutQn8gAq0iEIZCf4V8IBCIpyEIC0EAIQBBACEBIANBAXYgD3QiAyALSQRAIAsgA2utQn8gAq0iEIZCf4V8IBCIpyEBCyAJIApJBEAgCiAJa61CfyACrSIQhkJ/hXwgEIinIQALIAMgDE8EQEEAIQwMAQsgDCADa61CfyACrSIQhkJ/hXwgEIinIQwLQX8gAEECQQMgDkEBRhsiAmoiAyAAIANLGyAES0F/IAIgDGoiACAAIAxJGyAFS3EgCCACayIAQQAgACAITRsgBklxIAEgAmsiAEEAIAAgAU0bIAdJcQuiAQEGfyAABEAgACgCBCICBEAgAhAJIABBADYCBAsgAQRAIAAhAgNAIAIoAsgBIgMEQEEAIQUgAigCxAEiBAR/A0AgAygCDCIGBEAgBhAJIANBADYCDCACKALEASEECyADQRBqIQMgBUEBaiIFIARJDQALIAIoAsgBBSADCxAJIAJBADYCyAELIAJB8AFqIQIgB0EBaiIHIAFHDQALCyAAEAkLC9UZAhN/A3sgACgCACIKIAAoAgwiDUEFdCIFaiEGIAogBWshFiAAKAIQIQUgACgCHCELIAAoAhQhCSAAKAIIIQ4CQAJAAkACQCADQQhJDQAgAUEPcQ0AIAZBD3FFDQELIAUgCU8NAgJAAkAgA0EBaw4CAAEDCwJAIAkgBWsiCEEYSQ0AIAEgBUECdGohByANQQV0IgQgCiAFQQZ0amogASAJQQJ0akkEQCAHIAogCUEGdGogBGpBPGtJDQELIAX9Ef0MAAAAAAEAAAACAAAAAwAAAP2uASEYIAUgCEF8cSIPaiEFQQAhBANAIAYgGEEE/asBIhf9GwBBAnRqIAcgBEECdGr9AAIAIhn9HwA4AgAgBiAX/RsBQQJ0aiAZ/R8BOAIAIAYgF/0bAkECdGogGf0fAjgCACAGIBf9GwNBAnRqIBn9HwM4AgAgGP0MBAAAAAQAAAAEAAAABAAAAP2uASEYIARBBGoiBCAPRw0ACyAIIA9GDQQLIAUhBCAJIAVrQQNxIgcEQEEAIQgDQCAGIARBBnRqIAEgBEECdGoqAgA4AgAgBEEBaiEEIAhBAWoiCCAHRw0ACwsgBSAJa0F8Sw0DA0AgBiAEQQZ0aiABIARBAnRqKgIAOAIAIAYgBEEBaiIFQQZ0aiABIAVBAnRqKgIAOAIAIAYgBEECaiIFQQZ0aiABIAVBAnRqKgIAOAIAIAYgBEEDaiIFQQZ0aiABIAVBAnRqKgIAOAIAIARBBGoiBCAJRw0ACwwDCyABIAJBAnRqIQgCQCAJIAVrIg9BPEkEQCAFIQQMAQsgCiAFQQZ0IA1BBXRqaiIEIAkgBUF/c2oiB0EGdCIQaiAESQRAIAUhBAwBCyAEQQRqIgQgEGogBEkEQCAFIQQMAQsgB0H///8fSwRAIAUhBAwBCyANQQV0IgQgCiAFQQZ0amoiByABIAIgCWpBAnRqSSAKIAlBBnRqIARqQThrIgQgASACIAVqQQJ0aktxBEAgBSEEDAELIAcgASAJQQJ0akkgASAFQQJ0aiAESXEEQCAFIQQMAQsgBf0R/QwAAAAAAQAAAAIAAAADAAAA/a4BIRggBSAPQXxxIhBqIQRBACEHA0AgBiAYQQT9qwEiF/0bAEECdGoiESABIAUgB2pBAnQiDGr9AAIAIhn9HwA4AgAgBiAX/RsBQQJ0aiITIBn9HwE4AgAgBiAX/RsCQQJ0aiIUIBn9HwI4AgAgBiAX/RsDQQJ0aiIVIBn9HwM4AgAgESAIIAxq/QACACIX/R8AOAIEIBMgF/0fATgCBCAUIBf9HwI4AgQgFSAX/R8DOAIEIBj9DAQAAAAEAAAABAAAAAQAAAD9rgEhGCAHQQRqIgcgEEcNAAsgDyAQRg0DCyAEQQFqIQUgCSAEa0EBcQRAIAYgBEEGdGoiByABIARBAnQiBGoqAgA4AgAgByAEIAhqKgIAOAIEIAUhBAsgBSAJRg0CA0AgBiAEQQZ0aiIFIAEgBEECdCIHaioCADgCACAFIAcgCGoqAgA4AgQgBiAEQQFqIgVBBnRqIgcgASAFQQJ0IgVqKgIAOAIAIAcgBSAIaioCADgCBCAEQQJqIgQgCUcNAAsMAgsgBSAJTw0BIAEgAkECdGohCANAIAYgBUEGdGoiBCABIAVBAnRqKgIAOAIAIAQgASACIAVqIgdBAnRqKgIAOAIEIAQgASACIAdqIgdBAnRqKgIAOAIIIAQgASACIAdqIgdBAnRqKgIAOAIMIAQgASACIAdqIgdBAnRqKgIAOAIQIAQgASACIAdqIgdBAnRqKgIAOAIUIAQgASACIAdqQQJ0IgdqKgIAOAIYIAQgByAIaioCADgCHCAFQQFqIgUgCUcNAAsMAQsgASACQQJ0aiEIIANBA0YhByADQQRGIQ8gA0EFRiEQIANBB0YhEQNAIAYgBUEGdGoiBCABIAVBAnRqKgIAOAIAIAQgASACIAVqIgxBAnRqKgIAOAIEIAQgASACIAxqIgxBAnRqKgIAOAIIAkAgBw0AIAQgASACIAxqIgxBAnRqKgIAOAIMIA8NACAEIAEgAiAMaiIMQQJ0aioCADgCECAQDQAgBCABIAIgDGoiDEECdGoqAgA4AhQgA0EGRg0AIAQgASACIAxqQQJ0IgxqKgIAOAIYIBENACAEIAggDGoqAgA4AhwLIAVBAWoiBSAJRw0ACwsgFkEgaiEGIAEgDkECdGohBCAAKAIYIQUCQAJAAkAgA0EISQ0AIARBD3ENACAGQQ9xRQ0BCyAFIAtPDQECQAJAAkAgA0EBaw4CAAECCwJAIAsgBWsiAEEcSQ0AIAogBUEGdEEgciANQQV0IgJraiABIAsgDmpBAnRqSQRAIAEgBSAOakECdGogC0EGdCACayAKakEca0kNAQsgBCAFQQJ0aiEDIAX9Ef0MAAAAAAEAAAACAAAAAwAAAP2uASEYIAUgAEF8cSIBaiEFQQAhAgNAIAYgGEEE/asBIhf9GwBBAnRqIAMgAkECdGr9AAIAIhn9HwA4AgAgBiAX/RsBQQJ0aiAZ/R8BOAIAIAYgF/0bAkECdGogGf0fAjgCACAGIBf9GwNBAnRqIBn9HwM4AgAgGP0MBAAAAAQAAAAEAAAABAAAAP2uASEYIAJBBGoiAiABRw0ACyAAIAFGDQQLIAUhAiALIAVrQQNxIgAEQEEAIQEDQCAGIAJBBnRqIAQgAkECdGoqAgA4AgAgAkEBaiECIAFBAWoiASAARw0ACwsgBSALa0F8Sw0DA0AgBiACQQZ0aiAEIAJBAnRqKgIAOAIAIAYgAkEBaiIAQQZ0aiAEIABBAnRqKgIAOAIAIAYgAkECaiIAQQZ0aiAEIABBAnRqKgIAOAIAIAYgAkEDaiIAQQZ0aiAEIABBAnRqKgIAOAIAIAJBBGoiAiALRw0ACwwDCyAEIAJBAnRqIQMCQCALIAVrIgBBxABJBEAgBSECDAELIAogBUEGdCIJQSByIA1BBXQiCGtqIgcgCyAFQX9zaiIPQQZ0IhBqIAdJBEAgBSECDAELIAogCUEkciAIa2oiCSAQaiAJSQRAIAUhAgwBCyAPQf///x9LBEAgBSECDAELIAogBUEGdEEgciANQQV0IglraiINIAEgCyAOaiIIIAJqQQJ0akkgC0EGdCAJayAKakEYayIJIAEgDkECdGogBUECdGoiCiACQQJ0aktxBEAgBSECDAELIA0gASAIQQJ0akkgCSAKS3EEQCAFIQIMAQsgBf0R/QwAAAAAAQAAAAIAAAADAAAA/a4BIRggBSAAQXxxIglqIQJBACEBA0AgBiAYQQT9qwEiF/0bAEECdGoiCiAEIAEgBWpBAnQiDWr9AAIAIhn9HwA4AgAgBiAX/RsBQQJ0aiIOIBn9HwE4AgAgBiAX/RsCQQJ0aiIIIBn9HwI4AgAgBiAX/RsDQQJ0aiIHIBn9HwM4AgAgCiADIA1q/QACACIX/R8AOAIEIA4gF/0fATgCBCAIIBf9HwI4AgQgByAX/R8DOAIEIBj9DAQAAAAEAAAABAAAAAQAAAD9rgEhGCABQQRqIgEgCUcNAAsgACAJRg0DCyACQQFqIQAgCyACa0EBcQRAIAYgAkEGdGoiASAEIAJBAnQiAmoqAgA4AgAgASACIANqKgIAOAIEIAAhAgsgACALRg0CA0AgBiACQQZ0aiIAIAQgAkECdCIBaioCADgCACAAIAEgA2oqAgA4AgQgBiACQQFqIgBBBnRqIgEgBCAAQQJ0IgBqKgIAOAIAIAEgACADaioCADgCBCACQQJqIgIgC0cNAAsMAgsgBCACQQJ0aiEBIANBA0YhCSADQQRGIQogA0EFRiENIANBB0YhDgNAIAYgBUEGdGoiACAEIAVBAnRqKgIAOAIAIAAgBCACIAVqIghBAnRqKgIAOAIEIAAgBCACIAhqIghBAnRqKgIAOAIIAkAgCQ0AIAAgBCACIAhqIghBAnRqKgIAOAIMIAoNACAAIAQgAiAIaiIIQQJ0aioCADgCECANDQAgACAEIAIgCGoiCEECdGoqAgA4AhQgA0EGRg0AIAAgBCACIAhqQQJ0IghqKgIAOAIYIA4NACAAIAEgCGoqAgA4AhwLIAVBAWoiBSALRw0ACwwBCyAFIAtPDQAgBCACQQJ0aiEBA0AgBiAFQQZ0aiIAIAQgBUECdGoqAgA4AgAgACAEIAIgBWoiA0ECdGoqAgA4AgQgACAEIAIgA2oiA0ECdGoqAgA4AgggACAEIAIgA2oiA0ECdGoqAgA4AgwgACAEIAIgA2oiA0ECdGoqAgA4AhAgACAEIAIgA2oiA0ECdGoqAgA4AhQgACAEIAIgA2pBAnQiA2oqAgA4AhggACABIANqKgIAOAIcIAVBAWoiBSALRw0ACwsLmwMBBH8gASAAQQRqIgRqQQFrQQAgAWtxIgUgAmogACAAKAIAIgFqQQRrTQR/IAAoAgQiAyAAKAIIIgY2AgggBiADNgIEIAQgBUcEQCAAIABBBGsoAgBBfnFrIgMgBSAEayIEIAMoAgBqIgU2AgAgAyAFQXxxakEEayAFNgIAIAAgBGoiACABIARrIgE2AgALAn8gASACQRhqTwRAIAAgAmpBCGoiAyABIAJrQQhrIgE2AgAgAyABQXxxakEEayABQQFyNgIAIAMCfyADKAIAQQhrIgFB/wBNBEAgAUEDdkEBawwBCyABZyEEIAFBHSAEa3ZBBHMgBEECdGtB7gBqIAFB/x9NDQAaQT8gAUEeIARrdkECcyAEQQF0a0HHAGoiASABQT9PGwsiAUEEdCIEQaDGAWo2AgQgAyAEQajGAWoiBCgCADYCCCAEIAM2AgAgAygCCCADNgIEQajOAUGozgEpAwBCASABrYaENwMAIAAgAkEIaiIBNgIAIAAgAUF8cWoMAQsgACABagtBBGsgATYCACAAQQRqBUEACwvCAQEDfwJAIAEgAigCECIDBH8gAwUgAhA3DQEgAigCEAsgAigCFCIEa0sEQCACIAAgASACKAIkEQAADwsCQAJAIAIoAlBBAEgNACABRQ0AIAEhAwNAIAAgA2oiBUEBay0AAEEKRwRAIANBAWsiAw0BDAILCyACIAAgAyACKAIkEQAAIgQgA0kNAiABIANrIQEgAigCFCEEDAELIAAhBUEAIQMLIAQgBSABEAsaIAIgAigCFCABajYCFCABIANqIQQLIAQLWQEBfyAAIAAoAkgiAUEBayABcjYCSCAAKAIAIgFBCHEEQCAAIAFBIHI2AgBBfw8LIABCADcCBCAAIAAoAiwiATYCHCAAIAE2AhQgACABIAAoAjBqNgIQQQALzAIBBH8gASAA/QACAP0LAgAgASgCGCICBEAgASgCECIDBH9BACECA0AgASgCGCACQTRsaigCLCIEBEAgBBAJIAEoAhAhAwsgAkEBaiICIANJDQALIAEoAhgFIAILEAkgAUEANgIYCyABIAAoAhAiAjYCECABIAJBNGwQDSICNgIYIAIEQCABKAIQBEBBACEDA0AgAiADQTRsIgVqIgIgACgCGCAFaiIE/QACAP0LAgAgAiAEKAIwNgIwIAIgBP0AAiD9CwIgIAIgBP0AAhD9CwIQIAEoAhgiAiAFakEANgIsIANBAWoiAyABKAIQSQ0ACwsgASAAKAIUNgIUIAEgACgCICICNgIgIAIEQCABIAIQDSICNgIcIAJFBEAgAUIANwIcDwsgAiAAKAIcIAAoAiAQCxoPCyABQQA2AhwPCyABQQA2AhAgAUEANgIYCwQAQQELxgEBA38DQCAAQQR0IgFBpMYBaiABQaDGAWoiAjYCACABQajGAWogAjYCACAAQQFqIgBBwABHDQALQTAQZhojAEEQayIAJAACQCAAQQxqIABBCGoQAw0AQbDOAUEIIAAoAgxBAnRBBGoQGyIBNgIAIAFFDQBBCCAAKAIIEBsiAQRAQbDOASgCACICIAAoAgxBAnRqQQA2AgAgAiABEAJFDQELQbDOAUEANgIACyAAQRBqJABBzM4BQSo2AgBBlM8BQdjPATYCAAuQBgIFfwN7IwBBEGsiBiQAAn8gACgCCEEQRgRAIAAoApwBIAAoAswBQYwsbGoMAQsgACgCDAshAAJAIAMoAgAiBUUEQEEAIQIgBEEBQcATQQAQCAwBCyAAKALQKyEJIAMgBUEBazYCACACIAZBDGpBARAKIAkgAUG4CGxqIgcgBigCDCIAQQV2NgKkBiAHIABBH3EiATYCGCACQQFqIQAgAwJ/An8CQAJ/AkACQCABDgIAAwELIAMoAgAMAQsgAygCAEEBdgsiBUHiAE8EfyAGQuGAgICQDDcCBCAGIAU2AgAgBEECQdX4ACAGEAggBygCGAUgAQsEQCAFIgENAUEADAILIAUEQCAHQRxqIQFBACECA0AgACAGQQxqQQEQCiACQeAATQRAIAYoAgwhBCABIAJBA3RqIghBADYCBCAIIARBA3Y2AgALIABBAWohACACQQFqIgIgBUcNAAsLQQAhAiADKAIAIgAgBUkNAyAAIAVrDAILIAdBHGohBEEAIQIDQCAAIAZBDGpBAhAKIAJB4ABNBEAgBCACQQN0aiIFIAYoAgwiCEH/D3E2AgQgBSAIQQt2NgIACyAAQQJqIQAgAkEBaiICIAFHDQALIAFBAXQLIQBBACECIAMoAgAiASAASQ0BIAEgAGsLNgIAQQEhAiAHKAIYQQFHDQAgB0EcaiEEIAf9CQIcIQwgBygCICED/QwBAAAAAgAAAAMAAAAEAAAAIQtBACEBA0AgBCABQQN0aiIAQRhqIAwgC/0M//////////////////////2uASIK/RsAQQNu/REgCv0bAUEDbv0cASAK/RsCQQNu/RwCIAr9GwNBA279HAP9sQH9DAAAAAAAAAAAAAAAAAAAAAD9uAEiCv1aAgACIABBEGogCv1aAgABIABBCGogCv1aAgAAIAQgAUEEaiIBQQN0aiIFIAr9WgIAAyAAIAM2AhwgACADNgIUIAAgAzYCDCAFIAM2AgQgC/0MBAAAAAQAAAAEAAAABAAAAP2uASELIAFB4ABHDQALCyAGQRBqJAAgAgufBgEGfyMAQSBrIgYkAAJ/IAAoAghBEEYEQCAAKAKcASAAKALMAUGMLGxqDAELIAAoAgwLIQUCQCADKAIAQQRNBEBBACEAIARBAUGdE0EAEAgMAQsgAiAFKALQKyABQbgIbGoiBSIJQQRqQQEQCiAFIAUoAgRBAWoiBzYCBCAHQSJPBEAgBkEhNgIEIAYgBzYCACAEQQFB+TkgBhAIQQAhAAwBCyAHIAAoAqABIghNBEAgBiAHNgIYIAYgCDYCFCAGIAE2AhAgBEEBQcT7ACAGQRBqEAggACAAKAIIQYCAAnI2AghBACEADAELIAJBAWogBUEIakEBEAogBSAFKAIIQQJqNgIIIAJBAmogBUEMakEBEAogBSAFKAIMQQJqIgA2AgwCQAJAIAUoAggiAUEKSw0AIABBCksNACAAIAFqQQ1JDQELQQAhACAEQQFBwylBABAIDAELIAJBA2ogBUEQakEBEAogBS0AEEGAAXEEQEEAIQAgBEEBQYsyQQAQCAwBCyACQQRqIAVBFGpBARAKIAUoAhRBAk8EQEEAIQAgBEEBQcoxQQAQCAwBCyADIAMoAgBBBWsiBzYCAEEBIQAgBSgCBCEBIAUtAABBAXFFBEAgAUUNASAFQbAHaiEBIAVBrAZqIQJBACEFA0AgAiAFQQJ0IgBqQQ82AgAgACABakEPNgIAQQEhACAFQQFqIgUgCSgCBEkNAAsMAQsgASAHTQRAAkAgAUUEQEEAIQEMAQsgAkEFaiAGQRxqQQEQCiAFIAYoAhwiAEEEdjYCsAcgBSAAQQ9xNgKsBiAFKAIEIgFBAk8EQCAFQbAHaiEHIAVBrAZqIQggAkEGaiEAQQEhBQNAIAAgBkEcakEBEAoCQCAGKAIcIgFBEE8EQCABQQ9xIgINAQtBACEAIARBAUHwLUEAEAgMBQsgCCAFQQJ0IgpqIAI2AgAgByAKaiABQQR2NgIAIABBAWohACAFQQFqIgUgCSgCBCIBSQ0ACwsgAygCACEHCyADIAcgAWs2AgBBASEADAELQQAhACAEQQFBnRNBABAICyAGQSBqJAAgAAtSACABIAAtAAA6AAcgASAALQABOgAGIAEgAC0AAjoABSABIAAtAAM6AAQgASAALQAEOgADIAEgAC0ABToAAiABIAAtAAY6AAEgASAALQAHOgAAC5IBAQR/IAAgATYCoAECQCAAKAJIIgNFDQAgAygCGCIGRQ0AIAAoAgwiBEUNACAEKALQK0UNACADKAIQIgRFBEBBAQ8LQQAhAwNAIAEgACgCDCgC0CsgA0G4CGxqKAIETwRAIAJBAUGjxABBABAIQQAPCyAGIANBNGxqIAE2AihBASEFIANBAWoiAyAERw0ACwsgBQusBwIJfwh+IwBBEGsiCiQAAkAgAkUEQCADQQFBitYAQQAQCAwBCyACKAIQIgsgACgCSCIGKAIQSQRAIANBAUGQzgBBABAIDAELIAQgACgCaCIFIAAoAmxsIgdPBEAgCiAENgIAIAogB0EBazYCBCADQQFBh/sAIAoQCEEAIQUMAQsgAiAAKAJUIAQgBSAEIAVuIgdsayIIIAAoAlxsaiIFNgIAIAIgBSAGKAIAIgYgBSAGSxsiBjYCACACIAAoAlQgACgCXCAIQQFqbGoiBTYCCCACIAUgACgCSCgCCCIIIAUgCEkbIgg2AgggAiAAKAJYIAAoAmAgB2xqIgU2AgQgAiAFIAAoAkgoAgQiCSAFIAlLGyIJNgIEIAIgACgCWCAAKAJgIAdBAWpsaiIFNgIMIAIgBSAAKAJIKAIMIgcgBSAHSRsiBTYCDCAAKAJIIgwoAhAiBwRAIAWsQgF9IREgCKxCAX0hEiAJrUIBfSETIAatQgF9IRQgDCgCGCEIIAIoAhghBUEAIQYDQCAFIAggBkE0bGooAigiCTYCKCAFIBQgBSgCACIMrSIOfCAOgCIVPgIQIAUgEyAFKAIEIg2tIg58IA6AIhA+AhQgBUJ/IAmtIg6GIg8gEMR9IA6HpyAPIBEgDawiEHwgEH/EfSAOh6drNgIMIAUgDyAVxH0gDoenIA8gEiAMrCIPfCAPf8R9IA6Hp2s2AgggBUE0aiEFIAZBAWoiBiAHRw0ACwsgByALSQRAIAIoAhghBQNAIAUgB0E0bCIGaigCLBAJIAIoAhgiBSAGakEANgIsIAdBAWoiByACKAIQSQ0ACyACIAAoAkgoAhA2AhALIAAoAkwiBQRAIAUQGAsgAEEBQSQQDCIHNgJMQQAhBSAHRQ0AIAIgBxA4IAAgBDYCLCAAKALAAUEXIAMQHkUNACAAKALAASIEKAIAIQYgBCgCCCEHAkAgBgRAQQEhBSAGQQFxIQsgBkEBRgR/QQAFIAZBfnEhCEEAIQYDQAJ/QQAgBUUNABpBACAAIAEgAyAHKAIAEQAARQ0AGiAAIAEgAyAHKAIEEQAAQQBHCyEFIAdBCGohByAGQQJqIgYgCEcNAAsgBUEBcwshBgJAAkAgCwRAIAYNASAAIAEgAyAHKAIAEQAAQQBHIQULIARBADYCACAFQQFxRQ0BDAMLIARBADYCAAsgACgCSBAYQQAhBSAAQQA2AkgMAgsgBEEANgIACyAAIAIQQCEFCyAKQRBqJAAgBQvyAwEFfwJAAkAgACgCPCICRQRAIAEoAhANAUEBDwsgAkE0bBANIgVFDQEgASgCEARAIAEoAhghAgNAIAIgA0E0bCIEaigCLBAJIAEoAhgiAiAEakEANgIsIANBAWoiAyABKAIQIgRJDQALCyABIAAoAjwEfyAAKAJMKAIYIQNBACECA0AgBSACQTRsaiIEIAMgACgCQCACQQJ0aigCAEE0bCIGaiID/QACAP0LAgAgBCADKAIwNgIwIAQgA/0AAiD9CwIgIAQgA/0AAhD9CwIQIAQgACgCTCgCGCIDIAZqIgYoAiQ2AiQgBCAGKAIsNgIsIAZBADYCLCACQQFqIgIgACgCPCIGSQ0ACyABKAIQBSAECwR/IAAoAkwoAhghAkEAIQMDQCACIANBNGwiBGooAiwQCSAAKAJMKAIYIgIgBGpBADYCLCADQQFqIgMgASgCEEkNAAsgACgCPAUgBgs2AhAgASgCGBAJIAEgBTYCGEEBDwsgASgCGCEEIAAoAkwoAhghA0EAIQIDQCAEIAJBNGwiBWoiBCADIAVqKAIkNgIkIAQoAiwQCSABKAIYIgQgBWogACgCTCgCGCIDIAVqIgUoAiw2AiwgBUEANgIsIAJBAWoiAiABKAIQSQ0AC0EBDwsgACgCSBAYIABBADYCSEEAC84EAQh/AkAgAkUNAAJAIAAoAqABIgVFDQAgACgCSCIERQ0AIAQoAhBFDQAgBCgCGCgCKCAFRw0AIAIoAhAiCEUNACACKAIYIgYoAigNACAGKAIsDQBBACEEIAhBCE8EQCAIQXhxIQkDQCAGIARBNGxqIAU2AiggBiAEQQFyQTRsaiAFNgIoIAYgBEECckE0bGogBTYCKCAGIARBA3JBNGxqIAU2AiggBiAEQQRyQTRsaiAFNgIoIAYgBEEFckE0bGogBTYCKCAGIARBBnJBNGxqIAU2AiggBiAEQQdyQTRsaiAFNgIoIARBCGohBCAKQQhqIgogCUcNAAsLIAhBB3EiCARAA0AgBiAEQTRsaiAFNgIoIARBAWohBCALQQFqIgsgCEcNAAsLIAIgAxAwDQBBAA8LIAAoAkwiBUUEQCAAQQFBJBAMIgU2AkwgBUUNAQsgAiAFEDggACgCwAFBFiADEB5FDQAgACgCwAEiBigCACEEIAYoAgghBQJAIAQEQEEBIQcgBEEBcSEIIARBAUYEf0EABSAEQX5xIQlBACEEA0ACf0EAIAdFDQAaQQAgACABIAMgBSgCABEAAEUNABogACABIAMgBSgCBBEAAEEARwshByAFQQhqIQUgBEECaiIEIAlHDQALIAdBAXMLIQQCQAJAIAgEQCAEDQEgACABIAMgBSgCABEAAEEARyEHCyAGQQA2AgAgB0EBcUUNAQwDCyAGQQA2AgALIAAoAkgQGCAAQQA2AkhBAA8LIAZBADYCAAsgACACEEAhBwsgBwv4BAEGfwJAQQFBMBAMIgIEfyACIAAoAsgBIgH9AAMA/QsDACACIAEpAxA3AxAgAiABKAIYIgE2AhggAiABQRhsEA0iATYCHCABRQRAIAIQCUEADwsCQCAAKALIASgCHCIDBEAgASADIAIoAhhBGGwQCxoMAQsgARAJIAJBADYCHAsgAiAAKALIASgCJCIBNgIkIAIgAUEoEAwiATYCKCABRQRAIAIoAhwQCSACEAlBAA8LAkAgACgCyAEoAigEQCACKAIkRQ0BA0AgASAFQShsIgNqIAAoAsgBKAIoIANqKAIUIgE2AhQgAUEYbBANIQEgAigCKCIEIANqIgYgATYCGCABRQRAIAUEf0EAIQEDQCACKAIoIAFBKGxqKAIYEAkgAUEBaiIBIAVHDQALIAIoAigFIAQLEAkMBQsCQCAAKALIASgCKCADaigCGCIEBEAgASAEIAYoAhRBGGwQCxogAigCKCEBDAELIAEQCSACKAIoIgEgA2pBADYCGAsgASADaiAAKALIASgCKCADaigCBCIBNgIEIAFBGGwQDSEBIAIoAigiBCADaiIGIAE2AhAgAUUEQCAFBH9BACEBA0AgAUEobCIAIAIoAihqKAIYEAkgAigCKCAAaigCEBAJIAFBAWoiASAFRw0ACyACKAIoBSAECxAJDAULAkAgACgCyAEoAiggA2ooAhAiBARAIAEgBCAGKAIEQRhsEAsaIAIoAighAQwBCyABEAkgAigCKCIBIANqQQA2AhALIAEgA2pCADcCICAFQQFqIgUgAigCJEkNAAsMAQsgARAJIAJBADYCKAsgAgVBAAsPCyACKAIcEAkgAhAJQQALoAYCDn8BeyMAQRBrIggkACAAKAJIKAIQIQ0gCEEBQTgQDCIBNgIMAkAgAUUNACABIAAoAkgoAhAiCTYCGCABIAD9AAJU/QsCACABIAAoAmg2AhAgACgCbCECIAFBADYCNCABIAI2AhQgASAAKAIMIgwoAgA2AiAgASAMKAIENgIkIAEgDCgCCDYCKCABIAwoAhA2AiwgASAJQbgIEAwiADYCMCAABEAgDQRAA0AgDkG4CGwiACABKAIwaiIFIAwoAtArIABqIgT9AAIAIg/9CwIEIAUgBCgCEDYCFCAFIAQoAhQ2AhggD/0bASIAQSBNBEAgBUG0B2ogBEGwB2ogABALGiAFQbAGaiAEQawGaiAEKAIEEAsaCyAFIAQoAhgiADYCHCAFIAQoAqQGNgKoBkEBIQYCQCAAQQFHBEAgBCgCBEEDbCIAQQNrQd8ASw0BIABBAmshBgsgBUGkA2ohCSAFQSBqIQogBEEcaiELQQAhAAJAIAZBCEkNACAEIAZBA3RqQRxqIApLBEAgCyAFIAZBAnRqQaQDakkNAQsgBkF8cSEAQQAhAgNAIAogAkECdCIDaiALIAJBA3RqIgdBHGogB0EUaiAHQQxqIAf9CQIE/VYCAAH9VgIAAv1WAgAD/QsCACADIAlqIAdBGGogB0EQaiAHQQhqIAf9CQIA/VYCAAH9VgIAAv1WAgAD/QsCACACQQRqIgIgAEcNAAsgACAGRg0BCyAAQQFyIQMgBkEBcQRAIAogAEECdCICaiALIABBA3RqIgAoAgQ2AgAgAiAJaiAAKAIANgIAIAMhAAsgAyAGRg0AA0AgCiAAQQJ0IgJqIAsgAEEDdGoiAygCBDYCACACIAlqIAMoAgA2AgAgCiAAQQFqIgNBAnQiAmogCyADQQN0aiIDKAIENgIAIAIgCWogAygCADYCACAAQQJqIgAgBkcNAAsLIAUgBCgCqAY2AqwGIA5BAWoiDiANRw0ACwsgASEDDAELIAhBDGoEQCAIKAIMIgEoAjAiAAR/IAAQCSAIKAIMBSABCxAJIAhBADYCDAsLIAhBEGokACADC/kEAQh/IwBBgAJrIgMkACAABEBB/AxBESACEBUgAyAAKAIANgLwASACQZoRIANB8AFqEA8gAyAAKAIENgLgASACQacRIANB4AFqEA8gAyAAKAIINgLQASACQYI3IANB0AFqEA8gAyAAKAIQNgLAASACQf0QIANBwAFqEA8gAUEASgRAA0AgACgC0CshBCADIAc2ArABIAJBog0gA0GwAWoQDyADIAQgB0G4CGxqIgQoAgA2AqABIAJBmREgA0GgAWoQDyADIAQoAgQ2ApABIAJB9DcgA0GQAWoQDyADIAQoAgg2AoABIAJBoDYgA0GAAWoQDyADIAQoAgw2AnAgAkGwNiADQfAAahAPIAMgBCgCEDYCYCACQYgRIANB4ABqEA8gAyAEKAIUNgJQIAJBtjggA0HQAGoQD0HVC0EXIAIQFSAEKAIEBEAgBEGwB2ohBiAEQawGaiEIQQAhBQNAIAggBUECdCIJaigCACEKIAMgBiAJaigCADYCRCADIAo2AkAgAkGLDCADQUBrEA8gBUEBaiIFIAQoAgRJDQALCyACEGcgAyAEKAIYNgIwIAJBwDYgA0EwahAPIAMgBCgCpAY2AiAgAkHxNiADQSBqEA9BASEGQe0LQRQgAhAVAkAgBCgCGEEBRwRAIAQoAgQiBUEATA0BIAVBA2xBAmshBgsgBEEcaiEIQQAhBQNAIAMgCCAFQQN0aikCAEIgiTcDECACQYsMIANBEGoQDyAFQQFqIgUgBkcNAAsLIAIQZyADIAQoAqgGNgIAIAJB4DYgAxAPQZkMQQUgAhAVIAdBAWoiByABRw0ACwtBmgxBBCACEBULIANBgAJqJAAL5goDCX8BewF+IwBBsAFrIgUkAAJAIAFBgANxBEBBni1BCyACEBUMAQsCQCABQQFxRQ0AIAAoAkgiBkUNACMAQdAAayIDJABB7gxBDSACEBUgA0EAOgBPIANBCToATiADIAYpAgA3AkQgAyADQc4AaiIENgJAIAJBhjkgA0FAaxAPIAMgBikCCDcCNCADIAQ2AjAgAkH1OCADQTBqEA8gAyAGKAIQNgIkIAMgBDYCICACQZM3IANBIGoQDwJAIAYoAhhFDQAgBigCEEUNAANAIAMgA0HOAGoiCjYCECADIAc2AhQgAkGODSADQRBqEA8gBigCGCAHQTRsaiEIIwBBMGsiBCQAIARBCTsALiAEQQk6AC0gBCAIKQIANwIkIAQgBEEtaiIJNgIgIAJBzzYgBEEgahAPIAQgCCgCGDYCFCAEIAk2AhAgAkHFOCAEQRBqEA8gBCAIKAIgNgIEIAQgCTYCACACQao4IAQQDyAEQTBqJAAgAyAKNgIAIAJBlAwgAxAPIAdBAWoiByAGKAIQSQ0ACwtBnAxBAiACEBUgA0HQAGokAAsCQCABQQJxRQ0AIAAoAkhFDQBB+Q1BJCACEBUgBSAAKQJUNwOgASACQecRIAVBoAFqEA8gBSAAKQJcNwOQASACQcURIAVBkAFqEA8gBSAAKQNoNwOAASACQdcRIAVBgAFqEA8gACgCDCAAKAJIKAIQIAIQREGcDEECIAIQFQsCQCABQQhxRQ0AIAAoAkhFDQAgACgCaCAAKAJsbCIERQ0AIAAoApwBIQMDQCADIAAoAkgoAhAgAhBEIANBjCxqIQMgC0EBaiILIARHDQALCyABQRBxRQ0AIAAoAsgBIQFB0w1BJSACEBUgBSAB/QADAP0LBHAgAkHJKyAFQfAAahAPQcENQREgAhAVAkAgASgCHEUNACABKAIYRQ0AQQAhAwNAIAEoAhwgA0EYbGoiAC8BACEEIAApAwghDSAFIAAoAhA2AmAgBSANNwNYIAUgBDYCUCACQYs4IAVB0ABqEA8gA0EBaiIDIAEoAhhJDQALC0GaDEEEIAIQFQJAIAEoAigiBEUNACABKAIkIgdFDQBBACEDQQAhAAJAIAdBBE8EQCAHQXxxIQADQCAEIANBA3JBKGxqQQRqIAQgA0ECckEobGpBBGogBCADQQFyQShsakEEaiAEIANBKGxq/QkCBP1WAgAB/VYCAAL9VgIAAyAM/a4BIQwgA0EEaiIDIABHDQALIAwgDCAM/Q0ICQoLDA0ODwABAgMAAQID/a4BIgwgDCAM/Q0EBQYHAAECAwABAgMAAQID/a4B/RsAIQMgACAHRg0BCwNAIAQgAEEobGooAgQgA2ohAyAAQQFqIgAgB0cNAAsLIANFDQBBsA1BECACEBUgASgCJARAIAEoAighAEEAIQcDQCAFIAAgB0EobCIEaigCBCIGNgJEIAUgBzYCQCACQdE4IAVBQGsQDyABKAIoIQACQCAGRQ0AQQAhAyAAIARqKAIQRQ0AA0AgASgCKCAEaigCECADQRhsaiIA/QADACEMIAUgACkDEDcDOCAFIAz9CwMoIAUgAzYCICACQYDRACAFQSBqEA8gA0EBaiIDIAZHDQALIAEoAighAAsCQCAAIARqIgYoAhhFDQBBACEDIAYoAhRFDQADQCAAIARqKAIYIANBGGxqIgAvAQAhBiAAKQMIIQ0gBSAAKAIQNgIQIAUgDTcDCCAFIAY2AgAgAkGLOCAFEA8gA0EBaiIDIAEoAigiACAEaigCFEkNAAsLIAdBAWoiByABKAIkSQ0ACwtBmgxBBCACEBULQZwMQQIgAhAVCyAFQbABaiQAC48CAQN/AkBBAUHoARAMIgEEfyABQQE2AgAgAUEBNgK4ASABIAEtALwBQQZyOgC8ASABQQFBjCwQDCIANgIMIABFDQEgAUEBQegHEAwiADYCECAARQ0BIAFCADcDMCABQX82AiwgAUHoBzYCFAJAQQFBMBAMIgAEQCAAQQA2AhggAEHkADYCICAAQeQAQRgQDCICNgIcIAINASAAEAkLIAFBADYCyAEMAgsgAEEANgIoIAEgADYCyAEgARAuIgA2AsQBIABFDQEgARAuIgA2AsABIABFDQECQBCKAUUNAAsgAUEAEF4iADYC1AEgAEUEQCABQQAQXiIANgLUASAARQ0CCyABBUEACw8LIAEQMUEAC40JAgl/AX4jAEHQAWsiByQAIAAoAkghCQJAAkACQCAAKAJoQQFHDQAgACgCbEEBRw0AIAAoApwBKALcKw0BCyAAKAIIQQhGDQAgBkEBQbzOAEEAEAgMAQsCQCABKAIQIgxFDQAgACgCoAEhCiABKAIYIQsgDEEITwRAIAxBeHEhDwNAIAsgCEE0bGogCjYCKCALIAhBAXJBNGxqIAo2AiggCyAIQQJyQTRsaiAKNgIoIAsgCEEDckE0bGogCjYCKCALIAhBBHJBNGxqIAo2AiggCyAIQQVyQTRsaiAKNgIoIAsgCEEGckE0bGogCjYCKCALIAhBB3JBNGxqIAo2AiggCEEIaiEIIA5BCGoiDiAPRw0ACwsgDEEHcSIMRQ0AA0AgCyAIQTRsaiAKNgIoIAhBAWohCCANQQFqIg0gDEcNAAsLIAIgA3IgBHIgBXJFBEAgBkEEQa8wQQAQCCAAQgA3AhwgACAAKQJoNwIkIAEgCf0AAgD9CwIAIAEgBhAwIQgMAQsgAkEASARAIAcgAjYCACAGQQFB190AIAcQCEEAIQgMAQsgAiAJKAIIIghLBEAgByAINgIUIAcgAjYCECAGQQFBq+EAIAdBEGoQCEEAIQgMAQsCQCACIAkoAgAiCEkEQCAHIAg2AsQBIAcgAjYCwAEgBkECQYvkACAHQcABahAIIABBADYCHCAJKAIAIQIMAQsgACACIAAoAlRrIAAoAlxuNgIcCyABIAI2AgAgA0EASARAIAcgAzYCICAGQQFBl90AIAdBIGoQCEEAIQgMAQsgAyAJKAIMIgJLBEAgByACNgI0IAcgAzYCMCAGQQFB/t8AIAdBMGoQCEEAIQgMAQsCQCADIAkoAgQiAkkEQCAHIAI2ArQBIAcgAzYCsAEgBkECQdziACAHQbABahAIIABBADYCICAJKAIEIQMMAQsgACADIAAoAlhrIAAoAmBuNgIgCyABIAM2AgRBACEIIARBAEwEQCAHIAQ2AkAgBkEBQdXcACAHQUBrEAgMAQsgBCAJKAIAIgJJBEAgByACNgJUIAcgBDYCUCAGQQFBsuMAIAdB0ABqEAgMAQsCQCAEIAkoAggiAksEQCAHIAI2AqQBIAcgBDYCoAEgBkECQdPgACAHQaABahAIIAAgACgCaDYCJCAJKAIIIQQMAQsgACAANQJcIhAgBCAAKAJUa618QgF9IBCAPgIkCyABIAQ2AgggBUEATARAIAcgBTYCYCAGQQFBktwAIAdB4ABqEAgMAQsgBSAJKAIEIgJJBEAgByACNgJ0IAcgBTYCcCAGQQFBguIAIAdB8ABqEAgMAQsCQCAFIAkoAgwiAksEQCAHIAI2ApQBIAcgBTYCkAEgBkECQaXfACAHQZABahAIIAAgACgCbDYCKCAJKAIMIQUMAQsgACAANQJgIhAgBSAAKAJYa618QgF9IBCAPgIoCyABIAU2AgwgACAALQBEQQJyOgBEIAEgBhAwIghFBEBBACEIDAELIAcgAf0AAgD9CwSAASAGQQRBtDkgB0GAAWoQCAsgB0HQAWokACAIC5UCAQd/IwBBIGsiBSQAAn8gACgCSCIERQRAIANBAUHV5gBBABAIQQAMAQtBAEEEIAQoAhAQDCIERQ0AGiABBEAgACgCSCEIA0ACQAJAIAIgBkECdGooAgAiByAIKAIQTwRAIAUgBzYCECADQQFB+REgBUEQahAIDAELIAQgB0ECdGoiCSgCAEUNASAFIAc2AgAgA0EBQY0aIAUQCAsgBBAJQQAMAwsgCUEBNgIAIAZBAWoiBiABRw0ACwsgBBAJIAAoAkAQCQJAIAEEQCAAIAFBAnQiBBANIgM2AkAgA0UEQCAAQQA2AjxBAAwDCyADIAIgBBALGgwBCyAAQQA2AkALIAAgATYCPEEBCyEKIAVBIGokACAKC7wFAQd/IAFBAUEkEAwiBDYCSAJAAkAgBEUNAAJAIAEoAsQBQRIgAxAeBEAgASgCxAFBEyADEB4NAQsMAgsgASgCxAEiBygCACEGIAcoAgghBAJAIAYEQEEBIQUgBkEBRwRAIAZBfnEhCQNAAn9BACAFRQ0AGkEAIAEgACADIAQoAgARAABFDQAaIAEgACADIAQoAgQRAABBAEcLIQUgBEEIaiEEIAhBAmoiCCAJRw0ACwsCQAJAIAZBAXEEQCAFRQ0BIAEgACADIAQoAgARAABBAEchBQsgB0EANgIAIAVFDQEMAwsgB0EANgIACwwDCyAHQQA2AgALAkAgASgCwAFBFCADEB4EQCABKALAAUEVIAMQHg0BCwwCCyABKALAASIHKAIAIQYgBygCCCEEAkAgBgRAQQEhBSAGQQFxIQkgBkEBRgR/QQAFIAZBfnEhBkEAIQgDQAJ/QQAgBUUNABpBACABIAAgAyAEKAIAEQAARQ0AGiABIAAgAyAEKAIEEQAAQQBHCyEFIARBCGohBCAIQQJqIgggBkcNAAsgBUULIQYCQAJAIAkEQCAGDQEgASAAIAMgBCgCABEAAEEARyEFCyAHQQA2AgAgBUUNAQwDCyAHQQA2AgALDAMLIAdBADYCAAsgAkEBQSQQDCIANgIAIABFDQAgASgCSCAAEDggASgCyAEgASgCbCABKAJobCIANgIkIABBKBAMIQMgASgCyAEiACADNgIoAkAgA0UNACAAKAIkRQRAQQEPC0EAIQQDQCADIARBKGwiBWoiAEEANgIUIABB5AA2AhxB5ABBGBAMIQAgBSABKALIASIHKAIoIgNqIAA2AhggAEUNAUEBIQogBEEBaiIEIAcoAiRJDQALDAELIAIoAgAQGEEAIQogAkEANgIACyAKDwsgASgCSBAYIAFBADYCSEEACwIACwQAQQELNAACQCAARQ0AIAFFDQAgACABKAIENgKkASAAIAEoAgA2AqABIAAgASgCuEBBAnE2AuABCwu0BQEIfyAAKAIYIgQoAhAiCUUEQEEADwsgBCgCGCEFIAAoAhQoAgAoAhQhBAJAAkAgAUUEQEEAIQEDQCAFKAIYIQIgBCgCHCAEKAIYQZgBbGoiAEGMAWsoAgAiByAAQZQBaygCACIIayEDIABBkAFrKAIAIABBmAFrKAIAayEAAkAgByAIRg0AIACtIAOtfkIgiFANAAwECyAAIANsIQMCQEEEIAJBA3YgAkEHcUEAR2oiACAAQQNGGyICRQ0AIAKtIAOtfkIgiFANAAwEC0F/IQAgAiADbCICIAFBf3NLDQIgBEHMAGohBCAFQTRqIQUgASACaiIBIQAgBkEBaiIGIAlHDQALDAELQQAhASAAKAJARQRAA0AgBSgCGCECIAQoAhwgBCgCGEGYAWxqIgBBBGsoAgAiByAAQQxrKAIAIghrIQMgAEEIaygCACAAQRBrKAIAayEAAkAgByAIRg0AIACtIAOtfkIgiFANAAwECyAAIANsIQMCQEEEIAJBA3YgAkEHcUEAR2oiACAAQQNGGyICRQ0AIAKtIAOtfkIgiFANAAwEC0F/IQAgAiADbCICIAFBf3NLDQIgBEHMAGohBCAFQTRqIQUgASACaiIBIQAgBkEBaiIGIAlHDQALDAELA0AgBSgCGCECIAQoAhwgBCgCGEGYAWxqIgBBjAFrKAIAIgcgAEGUAWsoAgAiCGshAyAAQZABaygCACAAQZgBaygCAGshAAJAIAcgCEYNACAArSADrX5CIIhQDQAMAwsgACADbCEDAkBBBCACQQN2IAJBB3FBAEdqIgAgAEEDRhsiAkUNACACrSADrX5CIIhQDQAMAwtBfyEAIAIgA2wiAiABQX9zSw0BIARBzABqIQQgBUE0aiEFIAEgAmoiASEAIAZBAWoiBiAJRw0ACwsgAA8LQX8L2gQBC38gAARAIAAoAhQiAQRAIAEoAgAiBQRAIAUoAhQhAyAFKAIQBH9BEEERIAAtAChBAXEbIQgDQCADKAIcIgIEQCADKAIgIgFBmAFuIQpBACEJIAFBmAFPBH8DQCACKAIwIgEEQCACKAI0IgZBKG4hB0EAIQQgBkEoTwR/A0AgASgCIBAiIAFBADYCICABKAIkECIgAUEANgIkIAEgCBECACABQShqIQEgBEEBaiIEIAdHDQALIAIoAjAFIAELEAkgAkEANgIwCyACKAJUIgEEQCACKAJYIgZBKG4hB0EAIQQgBkEoTwR/A0AgASgCIBAiIAFBADYCICABKAIkECIgAUEANgIkIAEgCBECACABQShqIQEgBEEBaiIEIAdHDQALIAIoAlQFIAELEAkgAkEANgJUCyACKAJ4IgEEQCACKAJ8IgZBKG4hB0EAIQQgBkEoTwR/A0AgASgCIBAiIAFBADYCICABKAIkECIgAUEANgIkIAEgCBECACABQShqIQEgBEEBaiIEIAdHDQALIAIoAngFIAELEAkgAkEANgJ4CyACQZgBaiECIAlBAWoiCSAKRw0ACyADKAIcBSACCxAJIANBADYCHAsCQCADKAIoRQ0AIAMoAiQiAUUNACABEAkgA/0MAAAAAAAAAAAAAAAAAAAAAP0LAiQLIAMoAjQQCSADQcwAaiEDIAtBAWoiCyAFKAIQSQ0ACyAFKAIUBSADCxAJIAVBADYCFCAAKAIUKAIAEAkgACgCFCIBQQA2AgALIAEQCSAAQQA2AhQLIAAoAkQQCSAAEAkLC8sTARV/IwBBIGsiDyQAIA8gBTYCGCABIAMoAhxBzABsaigCHCADKAIgQZgBbGohEQJAAkAgAygCKA0AIBEoAhhFDQAgEUEcaiEJA0ACQCAJKAIIIAkoAgBHBH8gCSgCDCAJKAIERgVBAQsNACADKAIkIgEgCSgCGEEobk8EQCAIQQFBghVBABAIDAQLIAkoAhQgAUEobGoiASgCIBBbIAEoAiQQWyABKAIUIAEoAhBsIg1FDQAgASgCGCEBIA1BCE8EQCANQXhxIQtBACEKA0AgAUIANwLoAyABQgA3AqgDIAFCADcC6AIgAUIANwKoAiABQgA3AugBIAFCADcCqAEgAUIANwJoIAFCADcCKCABQYAEaiEBIApBCGoiCiALRw0ACwtBACEKIA1BB3EiDUUNAANAIAFCADcCKCABQUBrIQEgCkEBaiIKIA1HDQALCyAJQSRqIQkgDEEBaiIMIBEoAhhJDQALCyAFIQ0CQCACLQAAQQJxRQ0AIAdBBU0EQCAIQQJBsR9BABAIDAELAkAgBS0AAEH/AUYEQCAFLQABQZEBRg0BCyAIQQJB2x9BABAIDAELIA8gBUEGaiINNgIYC0EUEA0iC0UNAAJ/IAAtAGxBAXEEQCAAQShqIQcgACgCKCENIABBLGoMAQsgAi0AiCxBAnEEQCACQbAoaiEHIAIoArAoIQ0gAkG8KGoMAQsgDyAFIAdqIA1rNgIcIA9BGGohByAPQRxqCyISKAIAIQAgC0IANwIMIAsgDTYCCCALIA02AgAgCyAAIA1qNgIEIAtBARAZRQRAIAsQXRogCygCCCALKAIAayEaIAsQJSAaIA1qIQECQCACLQAAQQRxRQ0AIAcoAgAgEigCACABa2pBAU0EQCAIQQJBmCFBABAIDAELAkAgAS0AAEH/AUYEQCABLQABQZIBRg0BCyAIQQJBwiFBABAIDAELIAFBAmohAQsgEiASKAIAIAcoAgAgAWtqNgIAIAcgATYCACAEQQA2AgAgBiAPKAIYIAVrNgIAQQEhFwwBCyARKAIYBEAgEUEcaiEQA0AgAygCJCEAIBAoAhQhAQJAIBAoAgggECgCAEcEfyAQKAIMIBAoAgRGBUEBCw0AIAEgAEEobGoiFCgCFCAUKAIQbCIYRQ0AIBQoAhghCUEAIRUDQAJAAn8gCSgCKEUEQCALIBQoAiAgFSADKAIoQQFqEFkMAQsgC0EBEBkLRQRAIAlBADYCJAwBCyAJKAIoRQRAQQAhAQNAIAEiAEEBaiEBIAsgFCgCJCAVIAAQWUUNAAsgECgCHCEBIAlBAzYCICAJIAE2AhggCSABIABrQQFqNgIcCyAJAn9BASALQQEQGUUNABpBAiALQQEQGUUNABogC0ECEBkiAEEDRwRAIABBA2oMAQsgC0EFEBkiAEEfRwRAIABBBmoMAQsgC0EHEBlBJWoLNgIkQQAhAQNAIAEiAEEBaiEBIAtBARAZDQALIAkgCSgCICAAajYCIAJAAkACfyAJKAIoIgBFBEAgAigC0CsgAygCHEG4CGxqKAIQIQAgCSgCMEUEQCAJKAIAQfABEBAiAUUNBCAJIAE2AgAgASAJKAIwQRhsakEAQfABEA4aIAlBCjYCMAsgCSgCACIB/QwAAAAAAAAAAAAAAAAAAAAA/QsCACABQgA3AhBBAUEKQe0AIABBAXEbIABBBHEbIQpBAAwBCyAJKAIAIgEgAEEBayIMQRhsaiIKKAIEIAooAgxHDQEgAigC0CsgAygCHEG4CGxqKAIQIQogCSgCMCIMIABBAWpJBH8gASAMQQpqIgxBGGwQECIBRQ0DIAkgATYCACABIAkoAjBBGGxqQQBB8AEQDhogCSAMNgIwIAkoAgAFIAELIABBGGxqIgH9DAAAAAAAAAAAAAAAAAAAAAD9CwIAIAFCADcCEAJ/QQEgCkEEcQ0AGkHtACAKQQFxRQ0AGkECQQJBASABQQxrKAIAIgpBCkYbIApBAUYbCyEKIAALIQwgASAKNgIMCyAJKAIkIQAgAigC0CsgAygCHEG4CGxqLQAQQcAAcQRAA0AgDEEYbCIOIAkoAgBqIABBASAMGyITNgIQIAkoAiAhFkEAIQogACEBIBNBAk8EQANAIApBAWohCiABQQNLIRsgAUEBdiEBIBsNAAsLIAogFmoiAUEhTwRAIA8gATYCECAIQQFBzPQAIA9BEGoQCAwDCyALIAEQGSEKIAkoAgAiASAOaiIOIAo2AhQgACAOKAIQayIAQQBMDQMgAigC0CsgAygCHEG4CGxqKAIQIQogCSgCMCIOIAxBAmpJBEAgASAOQQpqIg5BGGwQECIBRQ0DIAkgATYCACABIAkoAjBBGGxqQQBB8AEQDhogCSAONgIwIAkoAgAhAQsgASAMQQFqIgxBGGxqIgH9DAAAAAAAAAAAAAAAAAAAAAD9CwIAIAFCADcCECABAn9BASAKQQRxDQAaQe0AIApBAXFFDQAaQQJBAkEBIAFBDGsoAgAiAUEKRhsgAUEBRhsLNgIMDAALAAsDQCAMQRhsIg4gCSgCAGoiASABKAIMIAEoAgRrIgEgACAAIAFKGyIBNgIQIAkoAiAhE0EAIQogAUECTwRAA0AgCkEBaiEKIAFBA0shHCABQQF2IQEgHA0ACwsgCiATaiIBQSFPBEAgDyABNgIAIAhBAUHM9AAgDxAIDAILIAsgARAZIQogCSgCACIBIA5qIg4gCjYCFCAAIA4oAhBrIgBBAEwNAiACKALQKyADKAIcQbgIbGooAhAhCiAJKAIwIg4gDEECakkEQCABIA5BCmoiDkEYbBAQIgFFDQIgCSABNgIAIAEgCSgCMEEYbGpBAEHwARAOGiAJIA42AjAgCSgCACEBCyABIAxBAWoiDEEYbGoiAf0MAAAAAAAAAAAAAAAAAAAAAP0LAgAgAUIANwIQIAECf0EBIApBBHENABpB7QAgCkEBcUUNABpBAkECQQEgAUEMaygCACIBQQpGGyABQQFGGws2AgwMAAsACyALECUMBQsgCUFAayEJIBVBAWoiFSAYRw0ACwsgEEEkaiEQIBlBAWoiGSARKAIYSQ0ACwsgCxBdRQRAIAsQJQwBCyALKAIIIAsoAgBrIR0gCxAlIB0gDWohAQJAIAItAABBBHFFDQAgBygCACASKAIAIAFrakEBTQRAIAhBAkGYIUEAEAgMAQsCQCABLQAAQf8BRgRAIAEtAAFBkgFGDQELIAhBAkHCIUEAEAgMAQsgAUECaiEBCyASIBIoAgAgBygCACABa2o2AgAgByABNgIAQQEhFyAEQQE2AgAgBiAPKAIYIAVrNgIACyAPQSBqJAAgFwuTJAIUfw5+AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAJUDgUAAQIDBAoLAkAgACgCNCIGIAAoAsQBIgFJBEAgACgCQCIHIAFBAWpJDQELIAAoAuwBQQFB9T5BABAIDAwLIAAoAixFBEAgACgCJCECQQAhAQwFCyAAQQA2AiwgACgCRCEDQQEhAQwECwJAIAAoAjQiBiAAKALEASIBSQRAIAAoAkAiByABQQFqSQ0BCyAAKALsAUEBQaI/QQAQCAwLCyAAKAIsRQRAIAAoAiQhBEEAIQEMCAsgAEEANgIsIAAoAjAhA0EBIQEMBwsCQCAAKAI0IgQgACgCxAEiCkkEQCAAKAJAIg4gCkEBakkNAQsgACgC7AFBAUGpwABBABAIDAoLIAAoAixFBEAgACgCKCELDAYLIABCADcC5AEgAEEANgIsIAAoAsgBIQwDQCAMIAdBBHRqIgUoAggiDwRAIAUoAgwhEkEAIQEDQAJAIA8gAUF/c2oiECASIAFBBHRqIhEoAgBqIglBH0sNACAFKAIAIhNBfyAJdksNACAAIAIgEyAJdCIJIAIgCUkbIAkgAhsiAjYC5AELAkAgESgCBCAQaiIJQR9LDQAgBSgCBCIQQX8gCXZLDQAgACADIBAgCXQiCSADIAlJGyAJIAMbIgM2AugBCyABQQFqIgEgD0cNAAsLIAdBAWoiByAKRw0ACyACRQ0HIANFDQcgAC0AAEUEQCAAIAAoAtABNgJsIAAgACgCzAE2AmQgACAAKALYATYCcCAAIAAoAtQBNgJoCyAAKAIwIQVBASEBDAULAkAgACgCNCIFIAAoAsQBIglJBEAgACgCQCISIAlBAWpJDQELIAAoAuwBQQFB/D9BABAIDAkLIAAoAixFBEAgACgCyAEiDSAAKAIcIgRBBHRqIQsgACgCKCEIDAQLIABCADcC5AEgAEEANgIsIAAoAsgBIQ0DQCANIAZBBHRqIgooAggiDgRAIAooAgwhEEEAIQEDQAJAIA4gAUF/c2oiESAQIAFBBHRqIhMoAgBqIgxBH0sNACAKKAIAIhRBfyAMdksNACAAIAIgFCAMdCIMIAIgDEkbIAwgAhsiAjYC5AELAkAgEygCBCARaiIMQR9LDQAgCigCBCIRQX8gDHZLDQAgACADIBEgDHQiDCADIAxJGyAMIAMbIgM2AugBCyABQQFqIgEgDkcNAAsLIAZBAWoiBiAJRw0ACyACRQ0GIANFDQYCQCAALQAABEAgACgCbCEGDAELIAAgACgC0AEiBjYCbCAAIAAoAswBNgJkIAAgACgC2AE2AnAgACAAKALUATYCaAtBASEBDAMLAkAgACgCNCIGIAAoAsQBIgFJBEAgACgCQCIPIAFBAWpJDQELIAAoAuwBQQFBzz9BABAIDAYLIAAoAixFBEAgACgCyAEgACgCHCIGQQR0aiEFIAAoAighB0EAIQEMAgsgACAGNgIcIABBADYCLEEBIQEMAQsDQAJ/AkAgAUUEQCACQQFqIQIMAQsgACADNgIoIAAoAjggA00NCSAAKAIwIQRBAAwBC0EBCyEBA0ACQAJAAkACQCABRQRAIAAgBDYCICAEIAAoAjxPDQEgACAGNgIcIAYhAUEAIQUMBAsgACACNgIkIAAoAkwgAk0EQCAAKAIcIQFBASEFDAQLIAAoAhAgACgCIGwgACgCDCAAKAIobGogACgCFCAAKAIcbGogACgCGCACbGoiASAAKAIITwRADAwLIAAoAgQgAUEBdGoiAS8BAA0BDA0LIAAoAihBAWohAwwBC0EAIQEMAwtBASEBDAILA0ACQAJAAkAgBUUEQCABIAdPDQEgACgCICIFIAAoAsgBIAFBBHRqIg0oAghPDQMgAC0AAEUEQCAAIA0oAgwgBUEEdGoiASgCDCABKAIIbDYCTAsgACgCSCECQQEhAQwFCyAAIAFBAWoiATYCHAwBCyAAKAIgQQFqIQRBACEBDAMLQQAhBQwBC0EBIQUMAAsACwALAAsDQAJ/AkAgAUUEQCAAIAdBAWoiBzYCKAwBCyAGIA9PDQggAEIANwLkASAAKALIASAGQQR0aiIFKAIIIgtFDQggBSgCDCEKQQAhAkEAIQRBACEBA0ACQCALIAFBf3NqIgkgCiABQQR0aiIOKAIAaiIIQR9LDQAgBSgCACIMQX8gCHZLDQAgACAEIAwgCHQiCCAEIAhJGyAIIAQbIgQ2AuQBCwJAIA4oAgQgCWoiCEEfSw0AIAUoAgQiCUF/IAh2Sw0AIAAgAiAJIAh0IgggAiAISRsgCCACGyICNgLoAQsgAUEBaiIBIAtHDQALIARFDQYgAkUNBgJAIAAtAAAEQCAAKAJsIQIMAQsgACAAKALQASICNgJsIAAgACgCzAE2AmQgACAAKALYATYCcCAAIAAoAtQBNgJoC0EADAELQQELIQEDQAJAAkACQAJAIAFFBEAgACACNgLgASACIAAoAnBPDQEgACgCZCENQQAhAQwECyAAKAI4IAdNBEAgACgCICEDQQEhAQwECyAAKAIQIAAoAiBsIAAoAgwgB2xqIAAoAhQgBmxqIAAoAhggACgCJGxqIgEgACgCCE8EQAwLCyAAKAIEIAFBAXRqIgEvAQANAQwMCyAAIAZBAWoiBjYCHAwBC0EAIQEMAwtBASEBDAILA0ACQAJAAkAgAAJ/IAFFBEAgACANNgLcASANIAAoAmhPDQIgACgCMAwBCyADQQFqCyIDNgIgIAAoAjwiASAFKAIIIgQgASAESRsgA0sEQCAFKAIAIgEgAa0iHiAEIANBf3NqIgitIhaGIhcgFoinRw0DIAUoAgQiBEJ/IBaIp3EgBEcNAyAErSIVIBaGIhhCAX0iGSAANQLYAXwgGIAhHyAZIAAoAtABIgmtfCAYgCEaIBdCAX0iGyAANQLUAXwgF4AhICAbIAAoAswBIg6tfCAXgCEcIAFCfyAFKAIMIANBBHRqIgsoAgAiCiAIaq0iHYincSABRw0DIAQgFSALKAIEIgEgCGqtIhWGIiEgFYinRw0DIAAoAuABIgStIiIgIYJCAFIEQCAEIAlHDQRCfyAVhkJ/hSAaQv////8PgyAWhoNQDQQLIAAoAtwBIgStIhUgHiAdhoJCAFIEQCAEIA5HDQRCfyAdhkJ/hSAcQv////8PgyAWhoNQDQQLIAsoAggiBEUNAyALKAIMRQ0DIBynIgsgIKdGDQMgGqciCCAfp0YNAyAAIAAoAkQiBzYCKCAAIBUgG3wgF4CnIAp2IAsgCnZrIBkgInwgGICnIAF2IAggAXZrIARsajYCJEEBIQEMBQsgACgC3AEiASAAKALkASIEaiABIARwayENDAELIAAoAuABIgEgACgC6AEiBGogASAEcGshAkEAIQEMAwtBACEBDAELQQEhAQwACwALAAsACwNAAn8CQCABRQRAIAAgCEEBaiIINgIoDAELIAAgBjYC4AEgACgCcCAGTQ0HIAAoAmQhD0EADAELQQELIQEDQAJAAkACQAJAIAFFBEAgACAPNgLcASAPIAAoAmhPDQEgACAFNgIcIAUhBEEAIQEMBAsgACgCOCAITQRAIAAoAiAhB0EBIQEMBAsgACgCECAAKAIgbCAAKAIMIAhsaiAAKAIUIARsaiAAKAIYIAAoAiRsaiIBIAAoAghPBEAMCgsgACgCBCABQQF0aiIBLwEADQEMCwsgACgC4AEiASAAKALoASIGaiABIAZwayEGDAELQQAhAQwDC0EBIQEMAgsDQAJAAkACQAJAIAFFBEAgBCASTw0CIAAgACgCMCIHNgIgIA0gBEEEdGohCwwBCyAAIAdBAWoiBzYCIAsgACgCPCIBIAsoAggiAiABIAJJGyAHSwRAIAsoAgAiASABrSIeIAIgB0F/c2oiCq0iFoYiFyAWiKdHDQMgCygCBCICQn8gFoincSACRw0DIAKtIhUgFoYiGEIBfSIZIAA1AtgBfCAYgCEfIBkgACgC0AEiDq18IBiAIRogF0IBfSIbIAA1AtQBfCAXgCEgIBsgACgCzAEiDK18IBeAIRwgAUJ/IAsoAgwgB0EEdGoiAygCACIJIApqrSIdiKdxIAFHDQMgAiAVIAMoAgQiASAKaq0iFYYiISAViKdHDQMgACgC4AEiAq0iIiAhgkIAUgRAIAIgDkcNBEJ/IBWGQn+FIBpC/////w+DIBaGg1ANBAsgACgC3AEiAq0iFSAeIB2GgkIAUgRAIAIgDEcNBEJ/IB2GQn+FIBxC/////w+DIBaGg1ANBAsgAygCCCICRQ0DIAMoAgxFDQMgHKciAyAgp0YNAyAapyIKIB+nRg0DIAAgACgCRCIINgIoIAAgFSAbfCAXgKcgCXYgAyAJdmsgGSAifCAYgKcgAXYgCiABdmsgAmxqNgIkQQEhAQwFCyAAIARBAWoiBDYCHAwBCyAAKALcASIBIAAoAuQBIgJqIAEgAnBrIQ9BACEBDAMLQQAhAQwBC0EBIQEMAAsACwALAAsDQAJ/AkAgAUUEQCAAIAtBAWoiCzYCKAwBCyAAIAU2AiAgACgCPCAFTQ0GIAAoAmwhCEEADAELQQELIQEDQAJAAkACQAJAIAFFBEAgACAINgLgASAIIAAoAnBPDQEgACgCZCENQQAhAQwECyAAKAI4IAtNBEAgACgCHCEGQQEhAQwECyAAKAIQIAAoAiBsIAAoAgwgC2xqIAAoAhQgACgCHGxqIAAoAhggACgCJGxqIgEgACgCCE8EQAwJCyAAKAIEIAFBAXRqIgEvAQANAQwKCyAAKAIgQQFqIQUMAQtBACEBDAMLQQEhAQwCCwNAAkACQAJAAkAgAUUEQCAAIA02AtwBIA0gACgCaE8NAiAAIAQ2AhwgBCEGDAELIAAgBkEBaiIGNgIcCyAGIA5JBEAgACgCICIHIAAoAsgBIAZBBHRqIgEoAggiA08NAyABKAIAIgIgAq0iHiADIAdBf3NqIgqtIhaGIhcgFoinRw0DIAEoAgQiA0J/IBaIp3EgA0cNAyADrSIVIBaGIhhCAX0iGSAANQLYAXwgGIAhHyAZIAAoAtABIg+tfCAYgCEaIBdCAX0iGyAANQLUAXwgF4AhICAbIAAoAswBIgmtfCAXgCEcIAJCfyABKAIMIAdBBHRqIgEoAgAiByAKaq0iHYincSACRw0DIAMgFSABKAIEIgIgCmqtIhWGIiEgFYinRw0DIAAoAuABIgOtIiIgIYJCAFIEQCADIA9HDQRCfyAVhkJ/hSAaQv////8PgyAWhoNQDQQLIAAoAtwBIgOtIhUgHiAdhoJCAFIEQCADIAlHDQRCfyAdhkJ/hSAcQv////8PgyAWhoNQDQQLIAEoAggiA0UNAyABKAIMRQ0DIBynIgEgIKdGDQMgGqciCiAfp0YNAyAAIAAoAkQiCzYCKCAAIBUgG3wgF4CnIAd2IAEgB3ZrIBkgInwgGICnIAJ2IAogAnZrIANsajYCJEEBIQEMBQsgACgC3AEiASAAKALkASICaiABIAJwayENDAELIAAoAuABIgEgACgC6AEiAmogASACcGshCEEAIQEMAwtBACEBDAELQQEhAQwACwALAAsACwNAAn8CQCABRQRAIARBAWohBAwBCyAAIAM2AiAgACgCPCADTQ0FIAAoAkQhAkEADAELQQELIQEDQAJAAkACQAJAIAFFBEAgACACNgIoIAIgACgCOE8NASAAIAY2AhwgBiEBQQAhBQwECyAAIAQ2AiQgACgCTCAETQRAIAAoAhwhAUEBIQUMBAsgACgCECAAKAIgbCAAKAIMIAAoAihsaiAAKAIUIAAoAhxsaiAAKAIYIARsaiIBIAAoAghPBEAMCAsgACgCBCABQQF0aiIBLwEADQEMCQsgACgCIEEBaiEDDAELQQAhAQwDC0EBIQEMAgsDQAJAAkACQCAFRQRAIAEgB08NASAAKAIgIgUgACgCyAEgAUEEdGoiDSgCCE8NAyAALQAARQRAIAAgDSgCDCAFQQR0aiIBKAIMIAEoAghsNgJMCyAAKAJIIQRBASEBDAULIAAgAUEBaiIBNgIcDAELIAAoAihBAWohAkEAIQEMAwtBACEFDAELQQEhBQwACwALAAsAC0EADwsgACgC7AFBAUG/CkEAEAgLQQAPCyABQQE7AQBBAQuRCwEKfwJAIAEoAgAgBEEDbCIMdiIGQZCAgAFxDQAgACAAQRxqIg4gACgCbCAGQe8DcWotAABBAnRqIgo2AmggACAAKAIEIAooAgAiCSgCACIIayIGNgIEAkAgCCAAKAIAIgdBEHZLBEAgCSgCBCELIAAgCDYCBCAKIAlBCEEMIAYgCEkiBhtqKAIANgIAIAsgC0UgBhshCSAAKAIIIQYDQAJAIAYNACAAKAIQIgZBAWohCyAGLQABIQogBi0AAEH/AUYEQCAKQZABTwRAIAAgACgCDEEBajYCDCAHQYD+A2ohB0EIIQYMAgsgACALNgIQIAcgCkEJdGohB0EHIQYMAQsgACALNgIQQQghBiAHIApBCHRqIQcLIAAgBkEBayIGNgIIIAAgB0EBdCIHNgIAIAAgCEEBdCIINgIEIAhBgIACSQ0ACyAIIQYMAQsgACAHIAhBEHRrIgc2AgAgBkGAgAJxRQRAIAkoAgQhCyAKIAlBDEEIIAYgCEkiCBtqKAIANgIAIAtFIAsgCBshCSAAKAIIIQgDQAJAIAgNACAAKAIQIghBAWohCyAILQABIQogCC0AAEH/AUYEQCAKQZABTwRAIAAgACgCDEEBajYCDCAHQYD+A2ohB0EIIQgMAgsgACALNgIQIAcgCkEJdGohB0EHIQgMAQsgACALNgIQQQghCCAHIApBCHRqIQcLIAAgCEEBayIINgIIIAAgB0EBdCIHNgIAIAAgBkEBdCIGNgIEIAZBgIACSQ0ACwwBCyAJKAIEIQkLIAlFDQAgACAOIAEoAgQgDEERanZBBHEgAUEEayINKAIAIAxBE2p2QQFxIAEoAgAiCCAMQRBqdkHAAHEgCCAMdkGqAXFyIAggDEEMakEOIAQbdkEQcXJyciIPQeC5AWotAABBAnRqIgs2AmggACAGIAsoAgAiCigCACIIayIGNgIEAkAgCCAHQRB2SwRAIAooAgQhCSAAIAg2AgQgCyAKQQhBDCAGIAhJIgYbaigCADYCACAJIAlFIAYbIQogACgCCCEGA0ACQCAGDQAgACgCECIGQQFqIQsgBi0AASEJIAYtAABB/wFGBEAgCUGQAU8EQCAAIAAoAgxBAWo2AgwgB0GA/gNqIQdBCCEGDAILIAAgCzYCECAHIAlBCXRqIQdBByEGDAELIAAgCzYCEEEIIQYgByAJQQh0aiEHCyAAIAZBAWsiBjYCCCAAIAdBAXQiBzYCACAAIAhBAXQiCDYCBCAIQYCAAkkNAAsMAQsgACAHIAhBEHRrIgk2AgAgBkGAgAJxRQRAIAooAgQhByALIApBDEEIIAYgCEkiCBtqKAIANgIAIAdFIAcgCBshCiAAKAIIIQcDQAJAIAcNACAAKAIQIgdBAWohCyAHLQABIQggBy0AAEH/AUYEQCAIQZABTwRAIAAgACgCDEEBajYCDCAJQYD+A2ohCUEIIQcMAgsgACALNgIQIAkgCEEJdGohCUEHIQcMAQsgACALNgIQQQghByAJIAhBCHRqIQkLIAAgB0EBayIHNgIIIAAgCUEBdCIJNgIAIAAgBkEBdCIGNgIEIAZBgIACSQ0ACwwBCyAKKAIEIQoLIAJBACADayADIAogD0HguwFqLQAAcyIDGzYCACANIA0oAgBBICAMdHI2AgAgASABKAIAIANBE3RBEHIgDHRyNgIAIAEgASgCBEEIIAx0cjYCBCAEIAVyRQRAIAFBfiAAKAJ8a0ECdGoiAiACKAIEQYCAAnI2AgQgAiACKAIAIANBH3RyQYCABHI2AgAgAkEEayICIAIoAgBBgIAIcjYCAAsgBEEDRw0AIAEgACgCfEECdGoiAEEEaiAAKAIEQQRyNgIAIAAgACgCDEEBcjYCDCAAIAAoAgggA0ESdHJBAnI2AggLC6sLAQl/AkAgASgCACAEQQNsIg12IgdBkICAAXENACAHQe8DcSIHRQ0AIAAgAEEcaiIOIAAoAmwgB2otAABBAnRqIgs2AmggACAAKAIEIAsoAgAiCigCACIJayIHNgIEAkAgCSAAKAIAIghBEHZLBEAgCigCBCEMIAAgCTYCBCALIApBCEEMIAcgCUkiBxtqKAIANgIAIAwgDEUgBxshCiAAKAIIIQcDQAJAIAcNACAAKAIQIgdBAWohDCAHLQABIQsgBy0AAEH/AUYEQCALQZABTwRAIAAgACgCDEEBajYCDCAIQYD+A2ohCEEIIQcMAgsgACAMNgIQIAggC0EJdGohCEEHIQcMAQsgACAMNgIQQQghByAIIAtBCHRqIQgLIAAgB0EBayIHNgIIIAAgCEEBdCIINgIAIAAgCUEBdCIJNgIEIAlBgIACSQ0ACyAJIQcMAQsgACAIIAlBEHRrIgg2AgAgB0GAgAJxRQRAIAooAgQhDCALIApBDEEIIAcgCUkiCRtqKAIANgIAIAxFIAwgCRshCiAAKAIIIQkDQAJAIAkNACAAKAIQIglBAWohDCAJLQABIQsgCS0AAEH/AUYEQCALQZABTwRAIAAgACgCDEEBajYCDCAIQYD+A2ohCEEIIQkMAgsgACAMNgIQIAggC0EJdGohCEEHIQkMAQsgACAMNgIQQQghCSAIIAtBCHRqIQgLIAAgCUEBayIJNgIIIAAgCEEBdCIINgIAIAAgB0EBdCIHNgIEIAdBgIACSQ0ACwwBCyAKKAIEIQoLAkAgCkUNACAAIA4gASgCBCANQRFqdkEEcSABQQRrIg8oAgAgDUETanZBAXEgASgCACIJIA1BEGp2QcAAcSAJIA12QaoBcXIgCSANQQxqQQ4gBBt2QRBxcnJyIgpB4LkBai0AAEECdGoiDDYCaCAAIAcgDCgCACILKAIAIglrIgc2AgQgCkHguwFqLQAAIQ4CQCAJIAhBEHZLBEAgCygCBCEKIAAgCTYCBCAMIAtBCEEMIAcgCUkiBxtqKAIANgIAIAogCkUgBxshCyAAKAIIIQcDQAJAIAcNACAAKAIQIgdBAWohDCAHLQABIQogBy0AAEH/AUYEQCAKQZABTwRAIAAgACgCDEEBajYCDCAIQYD+A2ohCEEIIQcMAgsgACAMNgIQIAggCkEJdGohCEEHIQcMAQsgACAMNgIQQQghByAIIApBCHRqIQgLIAAgB0EBayIHNgIIIAAgCEEBdCIINgIAIAAgCUEBdCIJNgIEIAlBgIACSQ0ACwwBCyAAIAggCUEQdGsiCjYCACAHQYCAAnFFBEAgCygCBCEIIAwgC0EMQQggByAJSSIJG2ooAgA2AgAgCEUgCCAJGyELIAAoAgghCANAAkAgCA0AIAAoAhAiCEEBaiEMIAgtAAEhCSAILQAAQf8BRgRAIAlBkAFPBEAgACAAKAIMQQFqNgIMIApBgP4DaiEKQQghCAwCCyAAIAw2AhAgCiAJQQl0aiEKQQchCAwBCyAAIAw2AhBBCCEIIAogCUEIdGohCgsgACAIQQFrIgg2AgggACAKQQF0Igo2AgAgACAHQQF0Igc2AgQgB0GAgAJJDQALDAELIAsoAgQhCwsgAkEAIANrIAMgCyAOcyICGzYCACAPIA8oAgBBICANdHI2AgAgASABKAIAIAJBE3RBEHIgDXRyNgIAIAEgASgCBEEIIA10cjYCBCAEIAZyRQRAIAEgBUECdGsiACAAKAIEQYCAAnI2AgQgACAAKAIAIAJBH3RyQYCABHI2AgAgAEEEayIAIAAoAgBBgIAIcjYCAAsgBEEDRw0AIAEgBUECdGoiACAAKAIEQQFyNgIEIAAgACgCACACQRJ0ckECcjYCACAAQQRrIgAgACgCAEEEcjYCAAsgASABKAIAQYCAgAEgDXRyNgIACwutAQAgAEGAngE2AmQgAEGAngE2AmAgAEGAngE2AlwgAEGAngE2AlggAEGAngE2AlQgAEGAngE2AlAgAEGAngE2AkwgAEGAngE2AkggAEGAngE2AkQgAEGAngE2AkAgAEGAngE2AjwgAEGAngE2AjggAEGAngE2AjQgAEGAngE2AjAgAEGAngE2AiwgAEGAngE2AiggAEGAngE2AiQgAEGAngE2AiAgAEGAngE2AhwLkgYCCX8EfiAAIAE2AgAgAP0MAAAAAAAAAAAAAAAAAAAAAP0LAwggACADNgIcIAAgAkEBayIFNgIYIAFBA3EhCgJ/IAJBAEwEQCABIQQgAwwBCyAAIAFBAWoiBDYCACABLQAACyEBQQghByAAQQg2AhAgACABrSINNwMIIAAgDUL/AYMiDkL/AVEiCTYCFAJAIApBA0YNACAAIAJBAmsiCDYCGAJ/IAJBAkgEQCAEIQEgAwwBCyAAIARBAWoiATYCACAELQAACyEEIABBD0EQIA5C/wFRGyIHNgIQIAAgBK0iDkL/AYMiD0L/AVEiCTYCFCAAIA5CCIYgDYQiDTcDCCAKQQJGBEAgASEEIAUhAiAIIQUMAQsgACACQQNrIgs2AhggAAJ/IAJBA0gEQCABIQYgAwwBCyAAIAFBAWoiBjYCACABLQAAC60iDkL/AYMiEEL/AVEiCTYCFCAAQQdBCCAPQv8BURsgB2oiATYCECAAIA4gB62GIA2EIg03AwggCkEBRgRAIAYhBCABIQcgCCECIAshBQwBCyAAIAJBBGsiBTYCGCAAAn8gAkEESARAIAYhBCADDAELIAAgBkEBaiIENgIAIAYtAAALrSIOQv8Bg0L/AVEiCTYCFCAAQQdBCCAQQv8BURsgAWoiBzYCECAAIA4gAa2GIA2EIg03AwggCyECCwJAIAJBBU4EQCAEKAIAIQMgACACQQVrNgIYIAAgBEEEajYCAAwBC0EAIQFBf0EAIAMbIQMgAkECSA0AA0AgACAEQQFqIgI2AgAgBC0AACEEIAAgBUEBayIGNgIYIANB/wEgAXRBf3NxIAQgAXRyIQMgAUEIaiEBIAVBAUshDCACIQQgBiEFIAwNAAsLIAAgA0EYdiIBQf8BRjYCFCAAQQdBCCAJGyICQQdBCCADQf8BcSIEQf8BRhtqIgVBB0EIIANBCHZB/wFxIgZB/wFGG2oiCEEHQQggA0EQdkH/AXEiA0H/AUYbIAdqajYCECAAIAYgAnQgAyAFdHIgASAIdHIgBHKtIAethiANhDcDCAu2BQISfwJ+An8gACgCHCABQZgBbGoiAkGQAWsoAgAgAkGYAWsoAgBrIgMhBSACQYwBaygCACACQZQBaygCAGsiAiEGQcAAIAMgA0HAAE8bIQNBwAAgAiACQcAATxshBAJAIAVFDQAgBkUNACADRQ0AIARFDQBBfyAEbkECdiADSQ0AQQFBHBAMIgIgBDYCDCACIAM2AgggAiAGNgIEIAIgBTYCACACIAStIhQgBq18QgF9IBSAIhSnIgQ2AhQgAiADrSIVIAWtfEIBfSAVgCIVpyIDNgIQAkAgFEL/////D4MgFUL/////D4N+QiCIpw0AIAJBBCADIARsEAwiAzYCGCADRQ0AIAIMAgsgAhAJC0EACyIJRQRAQQAPCwJAIAEEQANAIA5BmAFsIg8gACgCHGoiBSgCGCICBEAgBUEcaiEQIAUoAhQhAyAFKAIQIQRBACEKA0AgAyAEbARAIBAgCkEkbGohBkEAIQsDQCAGKAIUIAtBKGxqIggoAhQiAiAIKAIQIgdsBEBBACEEA0AgCCgCGCAEQQZ0aiIDKAI8IhEEQCADKAIMIQcgAygCFCESIAMoAhAhDCADKAIIIhMgBigCAGshAyAGKAIQIg1BAXEEQCAAKAIcIA9qIgJBkAFrKAIAIANqIAJBmAFrKAIAayEDCyAHIAYoAgRrIQIgDUECcQRAIAIgACgCHCAPaiINQYwBaygCAGogDUGUAWsoAgBrIQILIAkgAyACIAMgDCATayIMaiASIAdrIAJqIBFBASAMQQAQH0UNCSAIKAIQIQcgCCgCFCECCyAEQQFqIgQgAiAHbEkNAAsgBSgCECEEIAUoAhQhAwsgC0EBaiILIAMgBGxJDQALIAUoAhghAgsgCkEBaiIKIAJJDQALCyAOQQFqIg4gAUcNAAsLIAkPCyAJEB1BAAvQDAIQfwZ7IAAoAggiCyAAKAIEaiEHAkAgACgCDEUEQCAHQQJIDQEgASgCACABIAtBAnRqIg0oAgAiBEEBakEBdWshAyAAKAIAIQYCQCAHQQRJBEAgBCECDAELIAdBBGsiAEEBdiIJQQFqIQwCQCAAQRZJBEBBASEADAELIAYgASALQQJ0aiIFIAlBAnQiAmpBCGpJIAYgCUEDdGpBCGoiACAFQQRqS3EEQEEBIQAMAQsgBiABIAJqQQhqSSABQQRqIABJcQRAQQEhAAwBCyAMQfz///8HcSIFQQFyIQAgBUEBdCEIIAT9ESESIAP9ESET/QwAAAAAAgAAAAQAAAAGAAAAIRZBACECA0AgASACQQJ0QQRyIgNq/QACACEVIAMgDWr9AAIAIRQgBiACQQN0aiIDIBP9WgIAAyADQQhqIBUgFCASIBT9DQwNDg8QERITFBUWFxgZGhsiFf2uAf0MAgAAAAIAAAACAAAAAgAAAP2uAUEC/awB/bEBIhL9WgIAACADQRBqIBL9WgIAASADQRhqIBL9WgIAAiAGIBb9DAEAAAABAAAAAQAAAAEAAAD9UCIX/RsAQQJ0aiASIBMgEv0NDA0ODxAREhMUFRYXGBkaG/2uAUEB/awBIBX9rgEiE/1aAgAAIAYgF/0bAUECdGogE/1aAgABIAYgF/0bAkECdGogE/1aAgACIAYgF/0bA0ECdGogE/1aAgADIBb9DAgAAAAIAAAACAAAAAgAAAD9rgEhFiASIRMgFCESIAJBBGoiAiAFRw0ACyAS/RsDIQIgE/0bAyEDIAUgDEYNASACIQQLA0AgASAAQQJ0IgJqKAIAIQkgAiANaigCACECIAYgCEECdGoiBSADNgIAIAUgAyAJIAIgBGpBAmpBAnVrIgNqQQF1IARqNgIEIAhBAmohCCAAIAxHIRAgAiEEIABBAWohACAQDQALCyAGIAhBAnRqIAM2AgBBfCEAIAdBAXEEfyAGIAdBAWsiAEECdGogASAAQQF0aigCACACQQFqQQF1ayIANgIAIAAgA2pBAXUhA0F4BUF8CyAGIAdBAnQiAGpqIAIgA2o2AgAgASAGIAAQCxoPCwJAAkACQCAHQQFrDgIAAQILIAEgASgCAEECbTYCAA8LIAAoAgAiBCABKAIAIAEgC0ECdGoiAygCAEEBakEBdWsiADYCBCAEIAAgAygCAGo2AgAgASAEKQIANwIADwsgB0EDSA0AIAAoAgAiCiABKAIAIAEgC0ECdGoiDigCBCIEIA4oAgAiAGpBAmpBAnVrIgMgAGo2AgBBASEIAkAgB0ECayIGIAdBAXEiDEUiAGtBAkkEQCAEIQIMAQsgByAAa0EEayIAQQF2IgJBAWohDwJAAkAgAEEWSQ0AIApBBGoiBSABIAJBAnQiAGpBCGpJIAogAkEDdGpBDGoiAiABQQRqS3ENACAFIAAgASALQQJ0aiIAakEMakkgAEEIaiACSXENACAPQXxxIgVBAXIhACAFQQF0QQFyIQggBP0RIRMgA/0RIRJBACECA0AgCiACQQN0aiIEIAEgAkECdCIDav0AAgQgEyADIA5q/QACCCIT/Q0MDQ4PEBESExQVFhcYGRobIhUgE/2uAf0MAgAAAAIAAAACAAAAAgAAAP2uAUEC/awB/bEBIhQgFCASIBT9DQwNDg8QERITFBUWFxgZGhv9rgFBAf2sASAV/a4BIhX9DQQFBgcYGRobCAkKCxwdHh/9CwIUIAQgEiAV/Q0MDQ4PEBESEwABAgMUFRYXIBT9DQABAgMEBQYHEBESEwwNDg/9CwIEIBQhEiACQQRqIgIgBUcNAAsgE/0bAyECIBL9GwMhAyAFIA9GDQIgAiEEDAELQQEhAAsDQCABIABBAnRqKAIAIQ0gDiAAQQFqIgVBAnRqKAIAIQIgCiAIQQJ0aiIJIAM2AgAgCSADIA0gAiAEakECakECdWsiA2pBAXUgBGo2AgQgCEECaiEIIAAgD0chESACIQQgBSEAIBENAAsLIAogCEECdGogAzYCAAJAIAxFBEAgCiAGQQJ0aiABIAdBAXRqQQRrKAIAIAJBAWpBAXVrIgAgA2pBAXUgAmo2AgAMAQsgAiADaiEACyAKIAdBAnQiA2pBBGsgADYCACABIAogAxALGgsLoAcDA30DewJ/IANBCE8EQCADQQN2IQsDQCAB/QAEACEHIAAgAP0ABAAiCCAC/QAEACIJ/Qy8dLM/vHSzP7x0sz+8dLM//eYB/eQB/QsEACABIAggB/0MzzGwPs8xsD7PMbA+zzGwPv3mAf3lASAJ/Qzh0TY/4dE2P+HRNj/h0TY//eYB/eUB/QsEACACIAggB/0M5dDiP+XQ4j/l0OI/5dDiP/3mAf3kAf0LBAAgAf0ABBAhByAAIAD9AAQQIgggAv0ABBAiCf0MvHSzP7x0sz+8dLM/vHSzP/3mAf3kAf0LBBAgASAIIAf9DM8xsD7PMbA+zzGwPs8xsD795gH95QEgCf0M4dE2P+HRNj/h0TY/4dE2P/3mAf3lAf0LBBAgAiAIIAf9DOXQ4j/l0OI/5dDiP+XQ4j/95gH95AH9CwQQIAJBIGohAiABQSBqIQEgAEEgaiEAIApBAWoiCiALRw0ACwsCQCADQQdxIgNFDQAgASoCACEEIAAgAioCACIGQ7x0sz+UIAAqAgAiBZI4AgAgASAFIARDzzGwvpSSIAZD4dE2v5SSOAIAIAIgBSAEQ+XQ4j+UkjgCACADQQFGDQAgASoCBCEEIAAgAioCBCIGQ7x0sz+UIAAqAgQiBZI4AgQgASAFIARDzzGwvpSSIAZD4dE2v5SSOAIEIAIgBSAEQ+XQ4j+UkjgCBCADQQJGDQAgASoCCCEEIAAgAioCCCIGQ7x0sz+UIAAqAggiBZI4AgggASAFIARDzzGwvpSSIAZD4dE2v5SSOAIIIAIgBSAEQ+XQ4j+UkjgCCCADQQNGDQAgASoCDCEEIAAgAioCDCIGQ7x0sz+UIAAqAgwiBZI4AgwgASAFIARDzzGwvpSSIAZD4dE2v5SSOAIMIAIgBSAEQ+XQ4j+UkjgCDCADQQRGDQAgASoCECEEIAAgAioCECIGQ7x0sz+UIAAqAhAiBZI4AhAgASAFIARDzzGwvpSSIAZD4dE2v5SSOAIQIAIgBSAEQ+XQ4j+UkjgCECADQQVGDQAgASoCFCEEIAAgAioCFCIGQ7x0sz+UIAAqAhQiBZI4AhQgASAFIARDzzGwvpSSIAZD4dE2v5SSOAIUIAIgBSAEQ+XQ4j+UkjgCFCADQQZGDQAgASoCGCEEIAAgAioCGCIGQ7x0sz+UIAAqAhgiBZI4AhggASAFIARDzzGwvpSSIAZD4dE2v5SSOAIYIAIgBSAEQ+XQ4j+UkjgCGAsL4AECBn8DewJAIANFDQAgA0EETwRAIANBfHEhBgNAIAAgBEECdCIFaiIHIAf9AAIAIAIgBWoiB/0AAgAiCyABIAVqIgX9AAIAIgz9rgFBAv2sAf2xASIKIAv9rgH9CwIAIAUgCv0LAgAgByAKIAz9rgH9CwIAIARBBGoiBCAGRw0ACyADIAZGDQELA0AgACAGQQJ0IgRqIgUgBSgCACACIARqIgUoAgAiByABIARqIggoAgAiCWpBAnVrIgQgB2o2AgAgCCAENgIAIAUgBCAJajYCACAGQQFqIgYgA0cNAAsLC90BAQR/IwBBgAFrIgYkACAGIQUCQCABKAIMIAJBBHRqIgIoAgAiBEUEQCACIQEMAQsDQCAFIAI2AgAgBUEEaiEFIAQiASICKAIAIgQNAAsLQQAhBANAIAEoAggiAiAESARAIAEgBDYCCCAEIQILAkAgAiADTg0AA0AgAiABKAIETg0BAkAgAEEBEBkEQCABIAI2AgQMAQsgAkEBaiECCyACIANIDQALCyABIAI2AgggBSAGRwRAIAVBBGsiBSgCACEBIAIhBAwBCwsgASgCBCEHIAZBgAFqJAAgByADSAv9BgELfyMAQYACayIKJAACQCAARQRAQQAhAAwBCwJAIAEgACgCAEYEQCAAKAIEIAJGDQELIAAgAjYCBCAAIAE2AgAgCiACNgIAIAogATYCgAEgAiEEIAEhBQNAIAogByIMQQFqIgdBAnQiCGogBEEBakECbSIJNgIAIApBgAFqIAhqIAVBAWpBAm0iCDYCACAGIAQgBWwiC2ohBiAJIQQgCCEFIAtBAUsNAAsgACAGNgIIAkACQAJAAkAgBkUEQCAAKAIMIgRFDQIgAEEMaiEFDAELIAZBBHQiBCAAKAIQTQ0DIAAoAgwgBBAQIgENAiADQQFBmjFBABAIIABBDGoiBSgCACIERQ0BCyAEEAkgBUEANgIACyAAEAlBACEADAMLIAAgATYCDCABIAAoAhAiAmpBACAEIAJrEA4aIAAgBDYCECAAKAIEIQIgACgCACEBCyAAKAIMIQUgDARAQQAhAyAFIAEgAmxBBHRqIgQhBgNAAkAgCiADQQJ0IgFqKAIAIghBAEwNACAIQQFrIQtBACEJAkACQCAKQYABaiABaigCACICQQBMBEAgCEEBcSENQQAhByAIQQFHDQEgBiEBDAILA0AgBiEBIAIhBgNAAkAgBSAENgIAIAZBAUYEQCAFQRBqIQUgBEEQaiEEDAELIAUgBDYCECAEQRBqIQQgBUEgaiEFIAZBAkohDiAGQQJrIQYgDg0BCwsgBCABIAJBBHRqIAkgCSALRnJBAXEiBxshBiAEIAEgBxshBCAJQQFqIgkgCEcNAAsMAgsgCEH+////B3EhCANAIAcgC0YhASAHQQJqIQcgBCAGIAEbIgQhBiAEIQEgCUECaiIJIAhHDQALCyANRQRAIAQhBgwBCyAEIAEgAkEEdGogByAHIAtGckEBcSICGyEGIAQgASACGyEECyADQQFqIgMgDEcNAAsLIAVBADYCAAsgACgCCCIBRQ0AIAAoAgwhBCABQQRPBEAgAUF8cSECQQAhBQNAIARBADYCPCAEQucHNwI0IARBADYCLCAEQucHNwIkIARBADYCHCAEQucHNwIUIARBADYCDCAEQucHNwIEIARBQGshBCAFQQRqIgUgAkcNAAsLIAFBA3EiAUUNAEEAIQUDQCAEQQA2AgwgBELnBzcCBCAEQRBqIQQgBUEBaiIFIAFHDQALCyAKQYACaiQAIAALsQEBA38CQCAARQ0AIAAoAggiAUUNACAAKAIMIQAgAUEETwRAIAFBfHEhAwNAIABBADYCPCAAQucHNwI0IABBADYCLCAAQucHNwIkIABBADYCHCAAQucHNwIUIABBADYCDCAAQucHNwIEIABBQGshACACQQRqIgIgA0cNAAsLIAFBA3EiAUUNAEEAIQIDQCAAQQA2AgwgAELnBzcCBCAAQRBqIQAgAkEBaiICIAFHDQALCwv7BQEQfyMAQYACayIIJAACf0EBQRQQDCIGRQRAIAJBAUH0MEEAEAhBAAwBCyAGIAE2AgQgBiAANgIAIAggATYCACAIIAA2AoABA0AgCCAFIg1BAWoiBUECdCIHaiABQQFqQQJtIgM2AgAgCEGAAWogB2ogAEEBakECbSIHNgIAIAQgACABbCIJaiEEIAMhASAHIQAgCUEBSw0ACyAGIAQ2AgggBEUEQCAGEAlBAAwBCyAGIARBEBAMIgM2AgwgA0UEQCACQQFB2hpBABAIIAYQCUEADAELIAYgBigCCCILQQR0NgIQIAMhACANBEAgAyAGKAIEIAYoAgBsQQR0aiIEIQEDQAJAIAggDkECdCICaigCACIJQQBMDQAgCUEBayEMQQAhBwJAIAhBgAFqIAJqKAIAIgJBAEwEQEEAIQUgCUEBRwRAIAlB/v///wdxIQoDQCAFIAxGIQ8gBUECaiEFIAEgBCAPGyIEIQEgB0ECaiIHIApHDQALCyAJQQFxDQEgBCEBDAILA0AgBCEFIAIhBANAAkAgACABNgIAIARBAUYEQCAAQRBqIQAgAUEQaiEBDAELIAAgATYCECABQRBqIQEgAEEgaiEAIARBAkohECAEQQJrIQQgEA0BCwsgASAFIAJBBHRqIAcgByAMRnJBAXEiChshBCABIAUgChshASAHQQFqIgcgCUcNAAsMAQsgASAEIAJBBHRqIAUgBSAMRnJBAXEiBRshESABIAQgBRshASARIQQLIA5BAWoiDiANRw0ACwsgAEEANgIAAkAgC0UNACALQQRPBEAgC0F8cSEAQQAhAQNAIANBADYCPCADQucHNwI0IANBADYCLCADQucHNwIkIANBADYCHCADQucHNwIUIANBADYCDCADQucHNwIEIANBQGshAyABQQRqIgEgAEcNAAsLIAtBA3EiAEUNAEEAIQEDQCADQQA2AgwgA0LnBzcCBCADQRBqIQMgAUEBaiIBIABHDQALCyAGCyESIAhBgAJqJAAgEgtTAQF/An8gAC0ADEH/AUYEQCAAQoD+g4DwADcCDEEAIAAoAggiASAAKAIETw0BGiAAIAFBAWo2AgggACABLQAAQYD+A3I2AgwLIABBADYCEEEBCwtJAQF/AkBBAUEsEAwiAQRAIAFBADYCEAJAIABBAEwEQCABQQFBCBAMIgA2AiQgAEUNAQwDCyABQQA2AgwLIAEQCQtBACEBCyABC34CAX8BfiAAvSIDQjSIp0H/D3EiAkH/D0cEfCACRQRAIAEgAEQAAAAAAAAAAGEEf0EABSAARAAAAAAAAPBDoiABEF8hACABKAIAQUBqCzYCACAADwsgASACQf4HazYCACADQv////////+HgH+DQoCAgICAgIDwP4S/BSAACwuRAgAgAEUEQEEADwsCfwJAIAFB/wBNDQACQEGUzwEoAgAoAgBFBEAgAUGAf3FBgL8DRg0CDAELIAFB/w9NBEAgACABQT9xQYABcjoAASAAIAFBBnZBwAFyOgAAQQIMAwsgAUGAQHFBgMADRyABQYCwA09xRQRAIAAgAUE/cUGAAXI6AAIgACABQQx2QeABcjoAACAAIAFBBnZBP3FBgAFyOgABQQMMAwsgAUGAgARrQf//P00EQCAAIAFBP3FBgAFyOgADIAAgAUESdkHwAXI6AAAgACABQQZ2QT9xQYABcjoAAiAAIAFBDHZBP3FBgAFyOgABQQQMAwsLQZTGAUEZNgIAQX8MAQsgACABOgAAQQELC7wCAAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUEJaw4SAAgJCggJAQIDBAoJCgoICQUGBwsgAiACKAIAIgFBBGo2AgAgACABKAIANgIADwsgAiACKAIAIgFBBGo2AgAgACABMgEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMwEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMAAANwMADwsgAiACKAIAIgFBBGo2AgAgACABMQAANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKwMAOQMADwsgACACIAMRAwALDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC3MBBn8gACgCACIDLAAAQTBrIgFBCUsEQEEADwsDQEF/IQQgAkHMmbPmAE0EQEF/IAEgAkEKbCIFaiABIAVB/////wdzSxshBAsgACADQQFqIgU2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VP0gAiACKgJ0/SAD/QsCACABIAMgF2pBAnRqIAL9CQIYIAIqAjj9IAEgAioCWP0gAiACKgJ4/SAD/QsCACABIAMgFmpBAnRqIAL9CQIcIAIqAjz9IAEgAioCXP0gAiACKgJ8/SAD/QsCACADQQRqIgMgBEcNAAsgBCALRg0BCwNAIAEgBCAbakECdGogBiAEQQV0aiIDKgIQOAIAIAEgBCAYakECdGogAyoCFDgCACABIAQgF2pBAnRqIAMqAhg4AgAgASAEIBZqQQJ0aiADKgIcOAIAIARBAWoiBCALRw0ACwsgHUEBaiEdIAEgJEECdGohASAcQQhqIhwgACgCLE0NAAsLIAAoAgAQCSAAEAkLcwECfyAAKAIcIgFBCGoiAyAAKAIgIgJNBEADQCAAIAAoAhggAUECdGogACgCFEEIECsgAyIBQQhqIgMgACgCICICTQ0ACwsgASACSQRAIAAgACgCGCABQQJ0aiAAKAIUIAIgAWsQKwsgACgCABAJIAAQCQtEACAAKAIcIgEgACgCIEkEQANAIAAgACgCGCAAKAIUIAFsQQJ0ahBWIAFBAWoiASAAKAIgSQ0ACwsgACgCABAJIAAQCQuoAQEFfyAAKAJUIgMoAgAhBSADKAIEIgQgACgCFCAAKAIcIgdrIgYgBCAGSRsiBgRAIAUgByAGEAsaIAMgAygCACAGaiIFNgIAIAMgAygCBCAGayIENgIECyAEIAIgAiAESxsiBARAIAUgASAEEAsaIAMgAygCACAEaiIFNgIAIAMgAygCBCAEazYCBAsgBUEAOgAAIAAgACgCLCIBNgIcIAAgATYCFCACC54FAgZ+BH8gASABKAIAQQdqQXhxIgFBEGo2AgAgACELIAEpAwAhAyABKQMIIQcjAEEgayIIJAAgB0L///////8/gyEEAn4gB0IwiEL//wGDIgWnIgpBgfgAa0H9D00EQCAEQgSGIANCPIiEIQIgCkGA+ABrrSEFAkAgA0L//////////w+DIgNCgYCAgICAgIAIWgRAIAJCAXwhAgwBCyADQoCAgICAgICACFINACACQgGDIAJ8IQILQgAgAiACQv////////8HViIAGyECIACtIAV8DAELAkAgAyAEhFANACAFQv//AVINACAEQgSGIANCPIiEQoCAgICAgIAEhCECQv8PDAELQv8PIApB/ocBSw0AGkIAQYD4AEGB+AAgBVAiARsiACAKayIJQfAASg0AGiADIQIgBCAEQoCAgICAgMAAhCABGyIGIQQCQEGAASAJayIBQcAAcQRAIAMgAUFAaq2GIQRCACECDAELIAFFDQAgBCABrSIFhiACQcAAIAFrrYiEIQQgAiAFhiECCyAIIAI3AxAgCCAENwMYAkAgCUHAAHEEQCAGIAlBQGqtiCEDQgAhBgwBCyAJRQ0AIAZBwAAgCWuthiADIAmtIgKIhCEDIAYgAoghBgsgCCADNwMAIAggBjcDCCAIKQMIQgSGIAgpAwAiAkI8iIQhAwJAIAAgCkcgCCkDECAIKQMYhEIAUnGtIAJC//////////8Pg4QiAkKBgICAgICAgAhaBEAgA0IBfCEDDAELIAJCgICAgICAgIAIUg0AIANCAYMgA3whAwsgA0KAgICAgICACIUgAyADQv////////8HViIAGyECIACtCyEDIAhBIGokACALIAdCgICAgICAgICAf4MgA0I0hoQgAoS/OQMAC4MYAxN/AXwDfiMAQbAEayIMJAAgDEEANgIsAkAgAb0iGkIAUwRAQQEhEUG6CCETIAGaIgG9IRoMAQsgBEGAEHEEQEEBIRFBvQghEwwBC0HACEG7CCAEQQFxIhEbIRMgEUUhFQsCQCAaQoCAgICAgID4/wCDQoCAgICAgID4/wBRBEAgAEEgIAIgEUEDaiIDIARB//97cRAUIAAgEyAREBEgAEG3CUH2CiAFQSBxIgUbQaAKQfoKIAUbIAEgAWIbQQMQESAAQSAgAiADIARBgMAAcxAUIAMgAiACIANIGyEKDAELIAxBEGohEgJAAn8CQCABIAxBLGoQXyIBIAGgIgFEAAAAAAAAAABiBEAgDCAMKAIsIgZBAWs2AiwgBUEgciIOQeEARw0BDAMLIAVBIHIiDkHhAEYNAiAMKAIsIQlBBiADIANBAEgbDAELIAwgBkEdayIJNgIsIAFEAAAAAAAAsEGiIQFBBiADIANBAEgbCyELIAxBMGpBoAJBACAJQQBOG2oiDSEHA0AgBwJ/IAFEAAAAAAAA8EFjIAFEAAAAAAAAAABmcQRAIAGrDAELQQALIgM2AgAgB0EEaiEHIAEgA7ihRAAAAABlzc1BoiIBRAAAAAAAAAAAYg0ACwJAIAlBAEwEQCAJIQMgByEGIA0hCAwBCyANIQggCSEDA0BBHSADIANBHU8bIQMCQCAHQQRrIgYgCEkNACADrSEbQgAhGgNAIAYgGkL/////D4MgBjUCACAbhnwiHEKAlOvcA4AiGkKA7JSjDH4gHHw+AgAgBkEEayIGIAhPDQALIBqnIgZFDQAgCEEEayIIIAY2AgALA0AgCCAHIgZJBEAgBkEEayIHKAIARQ0BCwsgDCAMKAIsIANrIgM2AiwgBiEHIANBAEoNAAsLIANBAEgEQCALQRlqQQluQQFqIQ8gDkHmAEYhEANAQQlBACADayIDIANBCU8bIQoCQCAGIAhNBEAgCCgCAEVBAnQhBwwBC0GAlOvcAyAKdiEUQX8gCnRBf3MhFkEAIQMgCCEHA0AgByADIAcoAgAiFyAKdmo2AgAgFiAXcSAUbCEDIAdBBGoiByAGSQ0ACyAIKAIARUECdCEHIANFDQAgBiADNgIAIAZBBGohBgsgDCAMKAIsIApqIgM2AiwgDSAHIAhqIgggEBsiByAPQQJ0aiAGIAYgB2tBAnUgD0obIQYgA0EASA0ACwtBACEDAkAgBiAITQ0AIA0gCGtBAnVBCWwhA0EKIQcgCCgCACIKQQpJDQADQCADQQFqIQMgCiAHQQpsIgdPDQALCyALIANBACAOQeYARxtrIA5B5wBGIAtBAEdxayIHIAYgDWtBAnVBCWxBCWtIBEAgDEEwakGEYEGkYiAJQQBIG2ogB0GAyABqIgpBCW0iD0ECdGohCUEKIQcgD0F3bCAKaiIKQQdMBEADQCAHQQpsIQcgCkEBaiIKQQhHDQALCwJAIAkoAgAiECAQIAduIg8gB2wiCkYgCUEEaiIUIAZGcQ0AIBAgCmshEAJAIA9BAXFFBEBEAAAAAAAAQEMhASAHQYCU69wDRw0BIAggCU8NASAJQQRrLQAAQQFxRQ0BC0QBAAAAAABAQyEBC0QAAAAAAADgP0QAAAAAAADwP0QAAAAAAAD4PyAGIBRGG0QAAAAAAAD4PyAQIAdBAXYiFEYbIBAgFEkbIRkCQCAVDQAgEy0AAEEtRw0AIBmaIRkgAZohAQsgCSAKNgIAIAEgGaAgAWENACAJIAcgCmoiAzYCACADQYCU69wDTwRAA0AgCUEANgIAIAggCUEEayIJSwRAIAhBBGsiCEEANgIACyAJIAkoAgBBAWoiAzYCACADQf+T69wDSw0ACwsgDSAIa0ECdUEJbCEDQQohByAIKAIAIgpBCkkNAANAIANBAWohAyAKIAdBCmwiB08NAAsLIAlBBGoiByAGIAYgB0sbIQYLA0AgBiIHIAhNIgpFBEAgBkEEayIGKAIARQ0BCwsCQCAOQecARwRAIARBCHEhCQwBCyADQX9zQX8gC0EBIAsbIgYgA0ogA0F7SnEiCRsgBmohC0F/QX4gCRsgBWohBSAEQQhxIgkNAEF3IQYCQCAKDQAgB0EEaygCACIORQ0AQQohCkEAIQYgDkEKcA0AA0AgBiIJQQFqIQYgDiAKQQpsIgpwRQ0ACyAJQX9zIQYLIAcgDWtBAnVBCWwhCiAFQV9xQcYARgRAQQAhCSALIAYgCmpBCWsiBkEAIAZBAEobIgYgBiALShshCwwBC0EAIQkgCyADIApqIAZqQQlrIgZBACAGQQBKGyIGIAYgC0obIQsLQX8hCiALQf3///8HQf7///8HIAkgC3IiEBtKDQEgCyAQQQBHakEBaiEOAkAgBUFfcSIVQcYARgRAIAMgDkH/////B3NKDQMgA0EAIANBAEobIQYMAQsgEiADIANBH3UiBnMgBmutIBIQIyIGa0EBTARAA0AgBkEBayIGQTA6AAAgEiAGa0ECSA0ACwsgBkECayIPIAU6AAAgBkEBa0EtQSsgA0EASBs6AAAgEiAPayIGIA5B/////wdzSg0CCyAGIA5qIgMgEUH/////B3NKDQEgAEEgIAIgAyARaiIDIAQQFCAAIBMgERARIABBMCACIAMgBEGAgARzEBQCQAJAAkAgFUHGAEYEQCAMQRBqQQlyIQUgDSAIIAggDUsbIgkhCANAIAg1AgAgBRAjIQYCQCAIIAlHBEAgBiAMQRBqTQ0BA0AgBkEBayIGQTA6AAAgBiAMQRBqSw0ACwwBCyAFIAZHDQAgBkEBayIGQTA6AAALIAAgBiAFIAZrEBEgCEEEaiIIIA1NDQALIBAEQCAAQYIMQQEQEQsgByAITQ0BIAtBAEwNAQNAIAg1AgAgBRAjIgYgDEEQaksEQANAIAZBAWsiBkEwOgAAIAYgDEEQaksNAAsLIAAgBkEJIAsgC0EJThsQESALQQlrIQYgCEEEaiIIIAdPDQMgC0EJSiEYIAYhCyAYDQALDAILAkAgC0EASA0AIAcgCEEEaiAHIAhLGyENIAxBEGpBCXIhBSAIIQcDQCAFIAc1AgAgBRAjIgZGBEAgBkEBayIGQTA6AAALAkAgByAIRwRAIAYgDEEQak0NAQNAIAZBAWsiBkEwOgAAIAYgDEEQaksNAAsMAQsgACAGQQEQESAGQQFqIQYgCSALckUNACAAQYIMQQEQEQsgACAGIAUgBmsiBiALIAYgC0gbEBEgCyAGayELIAdBBGoiByANTw0BIAtBAE4NAAsLIABBMCALQRJqQRJBABAUIAAgDyASIA9rEBEMAgsgCyEGCyAAQTAgBkEJakEJQQAQFAsgAEEgIAIgAyAEQYDAAHMQFCADIAIgAiADSBshCgwBCyATIAVBGnRBH3VBCXFqIQgCQCADQQtLDQBBDCADayEGRAAAAAAAADBAIRkDQCAZRAAAAAAAADBAoiEZIAZBAWsiBg0ACyAILQAAQS1GBEAgGSABmiAZoaCaIQEMAQsgASAZoCAZoSEBCyASIAwoAiwiByAHQR91IgZzIAZrrSASECMiBkYEQCAGQQFrIgZBMDoAAAsgEUECciELIAVBIHEhDSAGQQJrIgkgBUEPajoAACAGQQFrQS1BKyAHQQBIGzoAACAEQQhxIQYgDEEQaiEHA0AgByIFAn8gAZlEAAAAAAAA4EFjBEAgAaoMAQtBgICAgHgLIgdB4MQBai0AACANcjoAACABIAe3oUQAAAAAAAAwQKIhAQJAIAVBAWoiByAMQRBqa0EBRw0AAkAgBg0AIANBAEoNACABRAAAAAAAAAAAYQ0BCyAFQS46AAEgBUECaiEHCyABRAAAAAAAAAAAYg0AC0F/IQpB/f///wcgCyASIAlrIgZqIg1rIANIDQAgAEEgIAIgDSADQQJqIAcgDEEQaiIHayIFIAVBAmsgA0gbIAUgAxsiCmoiAyAEEBQgACAIIAsQESAAQTAgAiADIARBgIAEcxAUIAAgByAFEBEgAEEwIAogBWtBAEEAEBQgACAJIAYQESAAQSAgAiADIARBgMAAcxAUIAMgAiACIANIGyEKCyAMQbAEaiQAIAoLBABCAAsEAEEAC58DAQl/QeYKIQACQANAIAAtAAAiAUUNASABQT1GDQEgAEEBaiIAQQNxDQALAkACQEGAgoQIIAAoAgAiAmsgAnJBgIGChHhxQYCBgoR4Rw0AA0BBgIKECCACQb369OkDcyIBayABckGAgYKEeHFBgIGChHhHDQEgACgCBCECIABBBGoiASEAIAJBgIKECCACa3JBgIGChHhxQYCBgoR4Rg0ACwwBCyAAIQELA0AgASIALQAAIgJFDQEgAEEBaiEBIAJBPUcNAAsLIAAiAUHmCkYEQEEADwsCQCABQeYKayIAQeYKai0AAA0AQbDOASgCACIERQ0AIAQoAgAiBUUNAANAAkACfyAFIQJB5gohBkEAIAAiAUUNABpB5gotAAAiAwR/AkADQCADIAItAAAiB0cNASAHRQ0BIAFBAWsiAUUNASACQQFqIQIgBi0AASEDIAZBAWohBiADDQALQQAhAwsgAwVBAAsgAi0AAGsLRQRAIAAgBWoiAS0AAEE9Rg0BCyAEKAIEIQUgBEEEaiEEIAUNAQwCCwsgAUEBaiEICyAIC84CAQh/IwBBIGsiAyQAIAMgACgCHCIENgIQIAAoAhQhBSADIAI2AhwgAyABNgIYIAMgBSAEayIBNgIUIAEgAmohBUECIQYgA0EQaiEBAn8DQAJAAkACQCAAKAI8IAEgBiADQQxqEAQiBAR/QZTGASAENgIAQX8FQQALRQRAIAUgAygCDCIHRg0BIAdBAE4NAgwDCyAFQX9HDQILIAAgACgCLCIBNgIcIAAgATYCFCAAIAEgACgCMGo2AhAgAgwDCyABIAcgASgCBCIISyIJQQN0aiIEIAcgCEEAIAkbayIIIAQoAgBqNgIAIAFBDEEEIAkbaiIBIAEoAgAgCGs2AgAgBSAHayEFIAYgCWshBiAEIQEMAQsLIABBADYCHCAAQgA3AxAgACAAKAIAQSByNgIAQQAgBkECRg0AGiACIAEoAgRrCyEKIANBIGokACAKCwYAIAAQAAsGACAAEAYLzx0DDX8EewN+IwBB0MAAayIJJAAgCUEANgIQQQIhBAJAAkAgACgCACIDQY2UnNQARg0AIANB/5/9jwVHBEACQCADQYCAgOAARw0AIAAoAgRB6qCBgQJHDQAgACgCCEGNlJzUAEYNAgtBzQgQAEEBIQAMAgtBACEECwJ/QQBBAUHgABAMIgNFDQAaIANBATYCTAJAAkACQAJAIAQOAwADAQMLIANBwwA2AlggA0HEADYCVCADQcUANgJQIANBxgA2AhAgA0HHADYCBCADQcgANgIcIANByQA2AhggA0HKADYCFCADQcsANgIAIANBzAA2AlwgA0HNADYCLCADQc4ANgIoIANBzwA2AiQgA0HQADYCICADQdEANgIMIANB0gA2AgggAxBGIgQ2AjAgBA0BDAILIANB0wA2AlggA0HUADYCVCADQdUANgJQIANB1gA2AhAgA0HXADYCBCADQdgANgJcIANB2QA2AiwgA0HaADYCKCADQdsANgIkIANB3AA2AiAgA0HdADYCHCADQd4ANgIYIANB3wA2AhQgA0HgADYCDCADQeEANgIIIANB4gA2AgAgAwJ/QQFBiAEQDCIEBEAgBBBGIgU2AgACQCAFRQ0AIAT9DAAAAAAAAAAAAAAAAAAAAAD9CwJsIARBADoAfCAEEC4iBTYCBCAFRQ0AIAQQLiIFNgIIIAVFDQAgBAwCCyAEEGkLQQALIgQ2AjAgBEUNAQsgA0EBNgJIIANBATYCQCADQQA2AjwgA0IANwI0IANBATYCRCADDAELIAMQCUEACyIEBEAgBEEANgI8IARB4wA2AkgLIAQEQCAEQQA2AjggBEHkADYCRAsgBARAIARBADYCNCAEQeUANgJACyAJQRRqIgUiAwRAIANBAEG4wAAQDiIDQQA2ArhAIANCfzcCiEALIAkgATYCDCAJIAA2AgggCSAANgIEQQEhAEEAIQMCQCAJQQRqIgpFDQBBAUHIABAMIgEEfwJ/IAFBgIDAADYCQCABQYCAwAAQDSIINgIgIAhFBEAgARAJQQAMAQsgASAINgIkIAFBAjYCHCABQQM2AhggAUEENgIUIAFBBTYCECABQQY2AiwgAUEINgIoIAEgASgCREECcjYCRCABCwVBAAsiAUUNACABBEAgAUEANgIEIAEgCjYCAAsgCjUCCCEUIAEEQCABIBQ3AwgLAkAgAUUNACABLQBEQQJxRQ0AIAFBPzYCEAsgAQRAIAFBwQA2AhgLIAEEQCABQcIANgIcCyABIQMLAn8CQCAERQ0AIAVFDQAgBCgCTEUEQCAEQTRqQQFBj8kAQQAQCEEADAILIAQoAjAgBSAEKAIYEQMAQQEhBwsgBwtFBEBBgQkQACADECcgBBAoDAELAn8gCUEQaiEFQQAhAQJAIANFDQAgBEUNACAEKAJMRQRAIARBNGpBAUHgyQBBABAIQQAMAgsgAyAEKAIwIAUgBEE0aiAEKAIAEQEAIQELIAELRQRAQZ0JEAAgAxAnIAQQKCAJKAIQEBgMAQsgCSgCECEAIAIEQEEIIAAoAhAiAUECdBAbIQUCQCABRQ0AQQAhACABQQNLBEAgAUF8cSEA/QwAAAAAAQAAAAIAAAADAAAAIRADQCAFIAZBAnRqIBD9CwIAIBD9DAQAAAAEAAAABAAAAAQAAAD9rgEhECAGQQRqIgYgAEcNAAsgACABRg0BCwNAIAUgAEECdGogADYCACAAQQFqIgAgAUcNAAsLAn9BACAERQ0AGiAEKAJMRQRAIARBNGpBAUG1yABBABAIQQAMAQsgBCgCMCABIAUgBEE0aiAEKAIsEQEAC0UEQEHcCBAAIAMQJyAEECggCSgCEBAYIAUQCUEBIQAMAgsgBRAJIAkoAhAhAAtBACEBAkAgBEUNACADRQ0AIAQoAkxFDQAgBCgCMCADIAAgBEE0aiAEKAIEEQEAIQELAkAgAQRAQQAhAAJAIARFDQAgA0UNACAEKAJMRQ0AIAQoAjAgAyAEQTRqIAQoAhARAAAhAAsgAA0BC0GkChAAIAQQKCADECcgCSgCEBAYQQEhAAwBCyADECcgBBAoQQggCSgCECIKKAIMIAooAghsIgUgCigCECIHbCINEBshAwJAIAINACAHRQ0AIAooAhghDgNAIA4gC0E0bGoiBigCGCIAQQhHBEACQCAAQQdNBEAgBigCDCAGKAIIbCEBIAYoAiwhAiAGKAIgBEAgAUUNAkEBIABBAWt0rSEUQQAhACABQQRPBEAgAUF8cSEAIBT9EiEQQQAhBANAIAIgBEECdGoiCCAI/QACACIS/ccBQQf9ywEiEf0dACAQ/R0AIhV//RIgEf0dASAQ/R0BIhZ//R4BIBIgEP0NCAkKCwwNDg8AAQIDAAECA/3HAUEH/csBIhL9HQAgFX/9EiAS/R0BIBZ//R4B/Q0AAQIDCAkKCxAREhMYGRob/QsCACAEQQRqIgQgAEcNAAsgACABRg0DCwNAIAIgAEECdGoiBCAENAIAQgeGIBR/PgIAIABBAWoiACABRw0ACwwCCyABRQ0BQX8gAHRBf3OtIRRBACEAIAFBBE8EQCABQXxxIQAgFP0SIRBBACEEA0AgAiAEQQJ0aiIIIAj9AAIAIhL9yQH9DP8AAAAAAAAA/wAAAAAAAAD91QEiEf0dACAQ/R0AIhWA/RIgEf0dASAQ/R0BIhaA/R4BIBIgEP0NCAkKCwwNDg8AAQIDAAECA/3JAf0M/wAAAAAAAAD/AAAAAAAAAP3VASIS/R0AIBWA/RIgEv0dASAWgP0eAf0NAAECAwgJCgsQERITGBkaG/0LAgAgBEEEaiIEIABHDQALIAAgAUYNAgsDQCACIABBAnRqIgQgBDUCAEL/AX4gFIA+AgAgAEEBaiIAIAFHDQALDAELIABBCGshBCAGKAIMIAYoAghsIQIgBigCLCEIIAYoAiAEQCACRQ0BQQAhACACQQRPBEAgAkF8cSEAQQAhAQNAIAggAUECdGoiDCAM/QACACAE/awB/QsCACABQQRqIgEgAEcNAAsgACACRg0CCwNAIAggAEECdGoiASABKAIAIAR1NgIAIABBAWoiACACRw0ACwwBCyACRQ0AQQAhACACQQRPBEAgAkF8cSEAQQAhAQNAIAggAUECdGoiDCAM/QACACAE/a0B/QsCACABQQRqIgEgAEcNAAsgACACRg0BCwNAIAggAEECdGoiASABKAIAIAR2NgIAIABBAWoiACACRw0ACwsgBkEINgIYCyALQQFqIgsgB0cNAAsLAkACQAJAAkAgB0EBaw4EAAMBAgMLIAVFDQIgCigCGCgCLCECQQAhBEEAIQECQCAFQQxJDQAgAiADIAVqSSACIAVBAnRqIANLcQ0AIAVBfHEhAUEAIQADQCAAIANqIAIgAEECdGr9AAIAIBD9DQAECAwAAAAAAAAAAAAAAAD9WgAAACAAQQRqIgAgAUcNAAsgASAFRg0DCyABIQAgBUEDcSIGBEADQCAAIANqIAIgAEECdGooAgA6AAAgAEEBaiEAIARBAWoiBCAGRw0ACwsgASAFa0F8Sw0CA0AgACADaiACIABBAnRqKAIAOgAAIAMgAEEBaiIBaiACIAFBAnRqKAIAOgAAIAMgAEECaiIBaiACIAFBAnRqKAIAOgAAIAMgAEEDaiIBaiACIAFBAnRqKAIAOgAAIABBBGoiACAFRw0ACwwCCyAFRQ0BIAooAhgiACgClAEhASAAKAJgIQIgACgCLCEEQQAhACAFQQFHBEAgBUEBcSEPIAVBfnEhBwNAIAMgAEEDbGoiBSAEIABBAnQiBmooAgA6AAAgBSACIAZqKAIAOgABIAUgASAGaigCADoAAiADIABBAXIiBkEDbGoiBSAEIAZBAnQiBmooAgA6AAAgBSACIAZqKAIAOgABIAUgASAGaigCADoAAiAAQQJqIgAgB0cNAAsgD0UNAgsgAyAAQQNsaiIFIAQgAEECdCIAaigCADoAACAFIAAgAmooAgA6AAEgBSAAIAFqKAIAOgACDAELIAVFDQAgCigCGCIEKALIASEAIAQoApQBIQEgBCgCYCECIAQoAiwhCEEAIQQCQCAFQdQASQ0AIAMgBUEBayIHQQJ0IgZqIANJDQAgA0EBaiILIAZqIAtJDQAgA0ECaiILIAZqIAtJDQAgBiADQQNqIgtqIAtJDQAgB0H/////A0sNACADIAggBUECdCIGakkgCCADIAZqIgdJcQ0AIAIgB0kgAyACIAZqSXENACABIAdJIAMgASAGaklxDQAgACAHSSADIAAgBmpJcQ0AIAVB/P///wdxIQT9DAAAAAABAAAAAgAAAAMAAAAhEkEAIQYDQCADIBJBAv2rASIQ/RsAaiAIIAZBAnQiB2r9AAIAIhH9GwA6AAAgAyAQ/RsBaiAR/RsBOgAAIAMgEP0bAmogEf0bAjoAACADIBD9GwNqIBH9GwM6AAAgAyAQ/QwBAAAAAQAAAAEAAAABAAAA/VAiEf0bAGogAiAHav0AAgAiE/0bADoAACADIBH9GwFqIBP9GwE6AAAgAyAR/RsCaiAT/RsCOgAAIAMgEf0bA2ogE/0bAzoAACADIBD9DAIAAAACAAAAAgAAAAIAAAD9UCIR/RsAaiABIAdq/QACACIT/RsAOgAAIAMgEf0bAWogE/0bAToAACADIBH9GwJqIBP9GwI6AAAgAyAR/RsDaiAT/RsDOgAAIAMgEP0MAwAAAAMAAAADAAAAAwAAAP1QIhD9GwBqIAAgB2r9AAIAIhH9GwA6AAAgAyAQ/RsBaiAR/RsBOgAAIAMgEP0bAmogEf0bAjoAACADIBD9GwNqIBH9GwM6AAAgEv0MBAAAAAQAAAAEAAAABAAAAP2uASESIAZBBGoiBiAERw0ACyAEIAVGDQELA0AgAyAEQQJ0IgZqIgcgBiAIaigCADoAACAHIAIgBmooAgA6AAEgByABIAZqKAIAOgACIAcgACAGaigCADoAAyAEQQFqIgQgBUcNAAsLIAoQGCADIA0QByADEAlBACEACyAJQdDAAGokACAACwgAQQggABAbC6sCAgJ+An9CfyEDIAAtAERBCHFFBEAgACAAKAIgIgY2AiQCQAJAAkAgACAAKAIwIgUEfwNAIAYgBSAAKAIAIAAoAhQRAAAiBUF/Rg0CIAAgACgCJCAFaiIGNgIkIAAgACgCMCAFayIFNgIwIAUNAAsgACgCIAUgBgs2AiQgAUIAVQ0BQgAhAwwCCyAAIAAoAkRBCHI2AkQgAkEEQZH1AEEAEAggAEEANgIwIAAgACgCREEIcjYCREJ/DwtCACEDA0AgASAAKAIAIAAoAhgRCwAiBEJ/UQRAIAJBBEGC9QBBABAIIAAgACgCREEIcjYCRCAAIAApAzggA3w3AzhCfyADIANQGw8LIAMgBHwhAyABIAR9IgFCAFUNAAsLIAAgACkDOCADfDcDOAsgAwsjAQF/IAEgASgCACABKAIIIgEgAKciAiABIAJJG2o2AgRBAQs8AgJ/AX4gASgCACABKAIIaiIDIAEoAgQiAkYEQEJ/DwsgASACIACnajYCBCADIAJrrCIEIAAgACAEVRsLmAMCAn4CfyAAKAIwIgUgAaciBk8EQCAAIAUgBms2AjAgACAAKAIkIAZqNgIkIAAgACkDOCABfDcDOCABDwsgAC0AREEEcQRAIABBADYCMCAAIAAoAiQgBWo2AiQgACAFrSIBIAApAzh8NwM4IAFCfyAFGw8LAkAgBUUEQAwBCyAAQQA2AjAgACAAKAIgNgIkIAEgBa0iA30hAQsgAUIAVQRAA0AgACkDCCAAKQM4IAEgA3x8VARAIAJBBEGr9QBBABAIIABBADYCMCAAIAAoAiA2AiQgACAAKQM4IAN8IgM3AzggACkDCCIBIAN9IQQgASAAKAIAIAAoAhwRCQAhBSAAKAJEIQIgACAFBH8gACABNwM4IAJBe3EFIAILQQRyNgJEQn8gBCABIANRGw8LIAEgACgCACAAKAIYEQsAIgRCf1EEQCACQQRBq/UAQQAQCCAAIAAoAkRBBHI2AkQgACAAKQM4IAN8NwM4Qn8gAyADUBsPCyADIAR8IQMgASAEfSIBQgBVDQALCyAAIAApAzggA3w3AzggAwubAQEFf0EBIAIoAggiByAHQQFNGyEEIAIoAgQiAyACKAIAayEGA0AgBCIFQQF0IQQgBSAGayABSQ0ACyAFIAdHBEAgBRANIgNFBEBBfw8LIAIoAgAiBARAIAMgBCAGEAsaIAIoAgAQCQsgAiAFNgIIIAIgAzYCACACIAMgBmoiAzYCBAsgAyAAIAEQCxogAiACKAIEIAFqNgIEIAELRgECfyACKAIAIAIoAghqIgQgAigCBCIDRgRAQX8PCyAAIAMgBCADayIAIAEgACABSRsiABALGiACIAIoAgQgAGo2AgQgAAuqAgEEfyMAQRBrIgQkAAJAIAAoAnQNACACQQFNBEAgA0EBQfzBAEEAEAgMAQsgASAEQQxqQQIQCiAEKAIMIgZB//8DcSIHRQRAIANBAUGdwgBBABAIDAELIAIgB0EGbEECakkEQCADQQFB/MEAQQAQCAwBCyAGQQZsEA0iA0UNACAAQQgQDSICNgJ0IAJFBEAgAxAJDAELIAIgAzYCACACIAQvAQwiAjsBBCACRQRAQQEhBQwBC0EAIQIDQCABQQJqIARBDGoiBUECEAogAyACQQZsaiIGIAQoAgw7AQAgAUEEaiAFQQIQCiAGIAQoAgw7AQIgAUEGaiIBIAVBAhAKIAYgBCgCDDsBBEEBIQUgAkEBaiICIAAoAnQvAQRJDQALCyAEQRBqJAAgBQvwAQEFfyMAQRBrIgQkAAJ/IAAoAngiBUUEQCADQQFBzsEAQQAQCEEADAELIAUoAgwEQCADQQFBttUAQQAQCEEADAELIAIgBS0AEiIFQQJ0IgZJBEAgA0EBQa3BAEEAEAhBAAwBC0EAIAYQDSICRQ0AGiAFBEBBACEDA0AgASAEQQxqIgdBAhAKIAIgA0ECdGoiBiAEKAIMOwEAIAFBAmogB0EBEAogBiAEKAIMOgACIAFBA2ogB0EBEAogBiAEKAIMOgADIAFBBGohASADQQFqIgMgBUcNAAsLIAAoAnggAjYCDEEBCyEIIARBEGokACAIC/ADAQl/IwBBEGsiBSQAAkAgAkEDSQ0AIAAoAngNACABIAVBDGpBAhAKIAUvAQwiCUGBCGtB/3dNBEAgBSAJNgIAIANBAUG0GiAFEAgMAQsgAUECaiAFQQxqQQEQCiAFLwEMIghFBEAgA0EBQdQXQQAQCAwBCyAIQQNqIAJLDQAgCCAJbEECdBANIgdFDQAgCBANIgpFBEAgBxAJDAELIAgQDSILRQRAIAcQCSAKEAkMAQtBFBANIgZFBEAgBxAJIAoQCSALEAkMAQsgAUEDaiEDIAYgCjYCCCAGIAs2AgQgBiAJOwEQIAYgBzYCACAFKAIMIQwgBkEANgIMIAYgDDoAEiAAIAY2AngDQCADIAVBDGpBARAKIAQgCmogBS0ADEH/AHFBAWo6AAAgBCALaiAFKAIMQYABcUEHdjoAACADQQFqIQMgBEEBaiIEIAhHDQALIAlFBEBBASEEDAELQQAhBgNAQQAhBEEAIQADQCACQQQgBCAKai0AAEEHakEDdiIEIARBBE8bIgQgAyABa2pIBEBBACEEDAMLIAMgBUEMaiAEEAogByAFKAIMNgIAIAdBBGohByADIARqIQMgAEEBaiIAQf//A3EiBCAISQ0AC0EBIQQgBkEBaiIGQf//A3EgCUkNAAsLIAVBEGokACAEC5gBAQJ/IwBBEGsiBSQAIAAoAhgiBEH/AUcEQCAFIAQ2AgAgA0ECQeQTIAUQCAsCQAJAIAIgACgCFEYEQCACDQFBASEEDAILQQAhBCADQQFBy+wAQQAQCAwBC0EAIQIDQEEBIQQgASAAKAJIIAJBDGxqQQhqQQEQCiABQQFqIQEgAkEBaiICIAAoAhRJDQALCyAFQRBqJAAgBAuOBgEGfyMAQdAAayIEJAACQCACQQJNBEAgA0EBQavsAEEAEAgMAQsgAC0AfARAIANBBEHJ0gBBABAIQQEhBgwBC0EBIQYgASAAQShqQQEQCiABQQFqIABBNGpBARAKIAFBAmogAEEsakEBEAogAUEDaiEFAkACQAJAAkACQCAAKAIoIgdBAWsOAgABAgsgAkEGTQRAIAQgAjYCECADQQFB0PEAIARBEGoQCEEAIQYMBQsCQCACQQdGDQAgACgCMEEORg0AIAQgAjYCMCADQQJB0PEAIARBMGoQCAsgBSAAQTBqQQQQCiAAKAIwQQ5HDQNBJBANIgVFBEBBACEGIANBAUGzPEEAEAgMBQsgBUEONgIAIARBADYCQCAEQQA2AjggBEEANgJIIARBADYCPCAEQQA2AkQgBEEANgJMQbDqkAIhBiAEQbDqkAI2AjQgBUGAjJWiBDYCBAJ/IAJBB0cEQCACQSNGBEAgAUEHaiAEQcwAakEEEAogAUELaiAEQcgAakEEEAogAUEPaiAEQcQAakEEEAogAUETaiAEQUBrQQQQCiABQRdqIARBPGpBBBAKIAFBG2ogBEE4akEEEAogAUEfaiAEQTRqQQQQCiAFQQA2AgQgBCgCNCEGIAQoAjghAiAEKAJAIQMgBCgCPCEHIAQoAkQhCCAEKAJMIQkgBCgCSAwCCyAEIAI2AiAgA0ECQfTxACAEQSBqEAgLQQAhAkEAIQNBACEHQQALIQEgBSAHNgIYIAUgCDYCECAFIAk2AgggBSAGNgIgIAUgAjYCHCAFIAM2AhQgBSABNgIMIABBADYCcCAAIAU2AmwMAwsgACACQQNrIgE2AnAgAEEBIAEQDCIDNgJsIANFDQEgAkEDTA0CQQAhAgNAIAUgBEHMAGpBARAKIAAoAmwgAmogBCgCTDoAACAFQQFqIQUgAkEBaiICIAFHDQALDAILIAdBA0kNAiAEIAc2AgAgA0EEQev3ACAEEAgMAgtBACEGIABBADYCcAwBC0EBIQYgAEEBOgB8CyAEQdAAaiQAIAYLtAMBA38jAEEgayIEJAACQCAAKAJIBEAgA0ECQY01QQAQCEEBIQIMAQsgAkEORwRAQQAhAiADQQFBiuwAQQAQCAwBCyABIABBEGpBBBAKIAFBBGogAEEMakEEEAogAUEIaiAAQRRqQQIQCiAAKAIMIQUCQCAEAn8gACgCECIGRQRAIAAoAhQMAQsgACgCFCICIAVFDQAaIAINAUEACzYCCCAEIAY2AgQgBCAFNgIAIANBAUHu6gAgBBAIQQAhAgwBCyACQYGAAWtB//9+TQRAQQAhAiADQQFBmOoAQQAQCAwBCyAAIAJBDBAMIgI2AkggAkUEQEEAIQIgA0EBQb3qAEEAEAgMAQtBASECIAFBCmogAEEYakEBEAogAUELaiAAQRxqQQEQCiAAKAIcIgVBB0cEQCAEIAU2AhAgA0EEQa36ACAEQRBqEAgLIAFBDGogAEEgakEBEAogAUENaiAAQSRqQQEQCiAAKAIAIgEgAS0AvAFB+wFxIAAoAhhB/wFGQQJ0cjoAvAEgACgCACIBIAAoAgw2AtgBIAEgACgCEDYC3AEgAEEBOgCFAQsgBEEgaiQAIAILugQBBn8jAEEQayIGJAACfyAALQBkQQJxRQRAIANBAUHs0wBBABAIQQAMAQsgAEEANgJoAkACQAJAIAIEQANAIAJBB00EQCADQQFBuRlBABAIDAULIAEgBkEMaiIFQQQQCiAGKAIMIQQgAUEEaiAFQQQQCkEIIQcgBigCDCEFAkACQAJAAkAgBA4CAQADCyACQRBJBEBB4RkhBAwHCyABQQhqIAZBCGpBBBAKIAYoAggEQEHLPiEEDAcLIAFBDGogBkEMakEEEAogBigCDCIEDQFBshghBAwGCyADQQFBshhBABAIDAYLQRAhBwsgBCAHSQRAIANBAUGGxABBABAIDAULIAIgBEkEQCADQQFBvsMAQQAQCEEADAYLAkACQCAAIAEgB2ogBCAHayADAn8CQAJAAkAgBUHx2L2bBkwEQCAFQePGwZMGRg0BIAVB5sqRmwZGDQMgBUHwwrWbBkcNBUHwwAEMBAsgBUHy2I2DB0YNAUHQwAEgBUHyyKHLBkYNAxogBUHy2L2bBkcNBEHYwAEMAwtB4MABDAILQejAAQwBC0H4wAELKAIEEQEADQFBAAwHCyAAIAAoAmhB/////wdyNgJoC0EBIAggBUHyyKHLBkYbIQggASAEaiEBIAIgBGsiAg0ACyAIDQELIANBAUHawgBBABAIQQAMAwsgAEEBOgCEASAAIAAoAmRBBHI2AmRBAQwCCyADQQEgBEEAEAgLIANBAUGeDkEAEAhBAAshCSAGQRBqJAAgCQviAQEBfyAAKAJkQQFHBEAgA0EBQZnUAEEAEAhBAA8LAkAgAkEHTQRADAELIAEgAEE4akEEEAogAUEEaiAAQTxqQQQQCiACQQNxBEAMAQsgACACQQhrIgJBAnYiBDYCQAJAIAJFDQAgACAEQQQQDCICNgJEIAJFBEAgA0EBQakQQQAQCEEADwsgACgCQEUNACABQQhqIQNBACECA0AgAyAAKAJEIAJBAnRqQQQQCiADQQRqIQMgAkEBaiICIAAoAkBJDQALCyAAIAAoAmRBAnI2AmRBAQ8LIANBAUGqLUEAEAhBAAvEAQECfyAAIAAoAiAiBDYCJAJAIAAoAjAiAwRAA0AgBCADIAAoAgAgACgCFBEAACIDQX9GDQIgACAAKAIkIANqIgQ2AiQgACAAKAIwIANrIgM2AjAgAw0ACyAAKAIgIQQLIABBADYCMCAAIAQ2AiQgASAAKAIAIAAoAhwRCQBFBEAgACAAKAJEQQhyNgJEQQAPCyAAIAE3AzhBAQ8LIAAgACgCREEIcjYCRCACQQRBkfUAQQAQCCAAIAAoAkRBCHI2AkRBAAuCAQECfyMAQRBrIgQkAAJ/IAAoAmQEQCADQQFBttMAQQAQCEEADAELIAJBBEcEQCADQQFBzi1BABAIQQAMAQsgASAEQQxqQQQQCiAEKAIMQYqOqugARwRAIANBAUH2JUEAEAhBAAwBCyAAIAAoAmRBAXI2AmRBAQshBSAEQRBqJAAgBQsNACAAKAIAIAEgAhA+CwkAIAAoAgAQQwsJACAAKAIAEEILDQAgACgCACABIAIQRQtBAQF/IAIEfyADQQJBtssAQQAQCCAAKAIAIAEgAiADIAQQP0UEQCADQQFBqS9BABAIQQAPCyAAIAIgAxBqBUEACwsVACAAKAIAIAEgAiADIAQgBSAGEEcLDwAgACgCACABIAIgAxBICxMAIAAoAgAgASACIAMgBCAFECQLHQAgACgCACABIAIgAyAEIAUgBiAHIAggCSAKECAL6gQBB38CQCABKAIIQTUgAxAeRQ0AIAEoAgQiBygCACEFIAcoAgghBAJAIAUEQEEBIQYgBUEBRwRAIAVBfnEhCgNAAn9BACAGRQ0AGkEAIAEgACADIAQoAgARAABFDQAaIAEgACADIAQoAgQRAABBAEcLIQYgBEEIaiEEIAlBAmoiCSAKRw0ACwsCQCAFQQFxBEAgBkUNASABIAAgAyAEKAIAEQAAQQBHIQYLIAdBADYCACAGRQ0DDAILIAdBADYCAEEADwsgB0EANgIACyABKAIIIgcoAgAhBSAHKAIIIQQCQAJAAn8CQCAFBEBBASEGIAVBAXEhCCAFQQFHDQFBAAwCCyAHQQA2AgAMAgsgBUF+cSEFQQAhCQNAAn9BACAGRQ0AGkEAIAEgACADIAQoAgARAABFDQAaIAEgACADIAQoAgQRAABBAEcLIQYgBEEIaiEEIAlBAmoiCSAFRw0ACyAGRQshBSAIBEAgBQ0CIAEgACADIAQoAgARAABBAEchBgsgB0EANgIAQQAhCCAGRQ0CCyABLQCEAUUEQCADQQFBzdYAQQAQCEEADwsgAS0AhQFFBEAgA0EBQbDWAEEAEAhBAA8LIAAgASgCACACIAMQSSEIIAJFDQEgAigCACIARQ0BQQEhBAJAAkACQAJAAkACQCABKAIwQQxrDg0DBAQEBQABBAQEBAQCBAtBAiEEDAQLQQMhBAwDC0EEIQQMAgtBBSEEDAELQX8hBAsgACAENgIUIAEoAmwiA0UNASAAIAM2AhwgAigCACABKAJwNgIgIAFBADYCbCAIDwsgB0EANgIAQQAhCAsgCAvkCQIKfwF+IwBB8ABrIgMkAEGACCEIAn8CQEEBQYAIEAwiBgRAIANB3ABqIQsgA0HsAGohCQNAAkACQAJAIAEgA0HoAGoiBEEIIAIQEkEIRw0AIAQgA0HYAGpBBBAKIAkgC0EEEApBCCEFAkACQAJAAkACQCADKAJYDgIAAQQLIAEpAwgiDVAEfkIABSANIAEpAzh9CyINQvj///8PUw0BIAJBAUHLPkEAEAgMBAsgASADQegAaiIEQQggAhASQQhHDQMgBCADQeQAakEEEAogAygCZEUNASACQQFByz5BABAIDAMLIAMgDadBCGo2AlgMAQsgCSADQdgAakEEEApBECEFCyADKAJcIgRB4+TA0wZGBEAgACgCZCIBQQRxBEAgACABQQhyNgJkDAILIAJBAUGtK0EAEAggBhAJQQAMBwsgAygCWCIHRQRAIAJBAUGyGEEAEAggBhAJQQAMBwsgBSAHSwRAIAMgBDYCBCADIAc2AgAgAkEBQYroACADEAgMBgsCQAJ/An8CQAJ/AkACQAJAAkACQCAEQfHYvZsGTARAIARB48bBkwZGDQIgBEHmypGbBkYNBCAEQfDCtZsGRw0BQfDAAQwGCyAEQZ/AwNIGTARAIARB8ti9mwZGDQVB0MABIARB8sihywZGDQYaIARB8PLRswZHDQFBuMABDAgLIARB8tiNgwdGDQIgBEGgwMDSBkYNBkHAwAEgBEHo5MDTBkYNBxoLIAAoAmQiBEEBcQ0IIAJBAUH8DkEAEAggBhAJQQAMDwtB4MABDAMLQejAAQwCC0H4wAEMAQtB2MABCyEKIAMgBEH/AXE2AkwgAyAEQRh2NgJAIAMgBEEIdkH/AXE2AkggAyAEQRB2Qf8BcTYCRCACQQJByQ4gA0FAaxAIIAcgBWsiBSAALQBkQQRxDQIaIAMgAygCXCIEQRh2NgIwIAMgBEH/AXE2AjwgAyAEQRB2Qf8BcTYCNCADIARBCHZB/wFxNgI4IAJBAkHaMyADQTBqEAggACAAKAJkQf////8HcjYCZCABIAWtIg0gAiABKAIoEQgAIA1RDQcgAkEBQZIcQQAQCCAGEAlBAAwKC0GwwAELIQogByAFawshBSABKQMIIg1QBH5CAAUgDSABKQM4fQsgBa1TBEAgAygCWCEEIAMoAlwhACADIAEpAwgiDVAEfkIABSANIAEpAzh9Cz4CKCADIAU2AiQgAyAAQf8BcTYCICADIABBGHY2AhQgAyAENgIQIAMgAEEIdkH/AXE2AhwgAyAAQRB2Qf8BcTYCGCACQQFB3fUAIANBEGoQCAwHCyAFIAhNBEAgBiEEDAQLIAUhCCAGIAUQECIEDQMgBhAJIAJBAUH/D0EAEAhBAAwHCyAEQQJxRQRAIAJBAUHCD0EAEAggBhAJQQAMBwsgACAEQf////8HcjYCZCABIAcgBWutIg0gAiABKAIoEQgAIA1RDQMgAC0AZEEIcUUNASACQQJBkhxBABAICyAGEAlBAQwFCyACQQFBkhxBABAIIAYQCUEADAQLIAEgBCAFIAIQEiAFRwRAIAJBAUHEHEEAEAggBBAJQQAMBAsgACAEIgYgBSACIAooAgQRAQANAAsgBBAJQQAMAgsgAkEBQaIlQQAQCEEADAELIAYQCUEACyEMIANB8ABqJAAgDAvmAQEGfyAAKAIIQTUgAhAeBEACQCAAKAIIIgYoAgAhAyAGKAIIIQUCQAJAAn8CQCADBEBBASEEIANBAXEhByADQQFHDQFBAAwCCyAGQQA2AgAMAgsgA0F+cSEDA0ACf0EAIARFDQAaQQAgACABIAIgBSgCABEAAEUNABogACABIAIgBSgCBBEAAEEARwshBCAFQQhqIQUgCEECaiIIIANHDQALIARFCyEDIAcEQCADDQIgACABIAIgBSgCABEAAEEARyEECyAGQQA2AgAgBEUNAgsgACgCABpBAQ8LIAZBADYCAAsLQQALCgAgACgCABpBAAsUACAAKAIAIgAEQCAAIAE2ArgBCwshACAAKAIAIAEQTCAAQQA6AHwgACABKAK4QEEBcTYCgAELMgAgAkUEQEEADwsgACgCACABIAIgAxBBRQRAIANBAUGpL0EAEAhBAA8LIAAgAiADEGoLaQICfwF8IwBBEGsiAyQAIAIEQANAIAAgA0EIahA9IAECfyADKwMIIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4CzYCACABQQRqIQEgAEEIaiEAIARBAWoiBCACRw0ACwsgA0EQaiQAC4QBAgJ/AX0jAEEQayIDJAAgAgRAA0AgAyAALQAAOgAPIAMgAC0AAToADiADIAAtAAI6AA0gAyAALQADOgAMIAECfyADKgIMIgWLQwAAAE9dBEAgBagMAQtBgICAgHgLNgIAIAFBBGohASAAQQRqIQAgBEEBaiIEIAJHDQALCyADQRBqJAALSwECfyMAQRBrIgMkACACBEADQCAAIANBDGpBBBAKIAEgAygCDDYCACABQQRqIQEgAEEEaiEAIARBAWoiBCACRw0ACwsgA0EQaiQAC0sBAn8jAEEQayIDJAAgAgRAA0AgACADQQxqQQIQCiABIAMoAgw2AgAgAUEEaiEBIABBAmohACAEQQFqIgQgAkcNAAsLIANBEGokAAtKAQJ/IwBBEGsiAyQAIAIEQANAIAAgA0EIahA9IAEgAysDCLY4AgAgAUEEaiEBIABBCGohACAEQQFqIgQgAkcNAAsLIANBEGokAAtoAQJ/IwBBEGsiAyQAIAIEQANAIAMgAC0AADoADyADIAAtAAE6AA4gAyAALQACOgANIAMgAC0AAzoADCABIAMqAgw4AgAgAUEEaiEBIABBBGohACAEQQFqIgQgAkcNAAsLIANBEGokAAtMAQJ/IwBBEGsiAyQAIAIEQANAIAAgA0EMakEEEAogASADKAIMszgCACABQQRqIQEgAEEEaiEAIARBAWoiBCACRw0ACwsgA0EQaiQAC0wBAn8jAEEQayIDJAAgAgRAA0AgACADQQxqQQIQCiABIAMoAgyzOAIAIAFBBGohASAAQQJqIQAgBEEBaiIEIAJHDQALCyADQRBqJAALqggCDX8BeyMAQRBrIggkAAJ/IAAoAghBEEYEQCAAKAKcASAAKALMAUGMLGxqDAELIAAoAgwLIQkCQCACRQRAIANBAUHwH0EAEAgMAQsgACgCSCEGQQEhBCABIAhBCGpBARAKIAgoAggiBUECTwRAIANBAkHHxwBBABAIDAELIAIgBUEBakcEQEEAIQQgA0ECQfAfQQAQCAwBCwJAIAYoAhAiA0UNACAJKALQKyEEIANBCE8EQCADQXhxIQZBACECA0AgBEEANgK8QyAEQQA2AoQ7IARBADYCzDIgBEEANgKUKiAEQQA2AtwhIARBADYCpBkgBEEANgLsECAEQQA2ArQIIARBwMMAaiEEIAJBCGoiAiAGRw0ACwsgA0EHcSIDRQ0AQQAhAgNAIARBADYCtAggBEG4CGohBCACQQFqIgIgA0cNAAsLIAkoAugrIgIEfyACEAkgCUEANgLoKyAIKAIIBSAFC0UEQEEBIQQMAQsDQCABQQFqIgEgCEEMakEBEAoCQCAJKAKALEUNACAJKAL8KyIDKAIAIAgoAgxHDQAgAygCBCIFIAAoAkgiBigCEEcNACADKAIIIgIEQEEAIQQgAigCECAFIAVsIgUgAigCAEECdEHgvQFqKAIAbEcNAyAJIAVBAnQQDSIHNgLoKyAHRQ0DIAIoAgwgByAFIAIoAgBBAnRBkMABaigCABEFAAsgAygCDCICRQ0AQQAhBCACKAIQIAYoAhAiAyACKAIAQQJ0QeC9AWooAgBsRw0CIANBAnQQDSIFRQ0CIAIoAgwgBSADIAIoAgBBAnRBoMABaigCABEFAAJAIAYoAhAiB0UNACAJKALQKyEEQQAhCwJAAkAgB0EESQ0AIARBtAhqIgwgBSAHQQJ0akkEQCAFIAQgB0G4CGxqSQ0BCyAEQdwhaiENIARBpBlqIQ4gBEHsEGohDyAFIAdBfHEiBkECdGohAiAEIAZBuAhsaiEEQQAhAwNAIAwgA0G4CGwiCmogBSADQQJ0av0AAgAiEf1aAgAAIAogD2ogEf1aAgABIAogDmogEf1aAgACIAogDWogEf1aAgADIANBBGoiAyAGRw0ACyAGIAdGDQIMAQsgBSECQQAhBgsgByAGIgNrQQdxIgoEQANAIAQgAigCADYCtAggA0EBaiEDIARBuAhqIQQgAkEEaiECIAtBAWoiCyAKRw0ACwsgBiAHa0F4Sw0AA0AgBCACKAIANgK0CCAEIAIoAgQ2AuwQIAQgAigCCDYCpBkgBCACKAIMNgLcISAEIAIoAhA2ApQqIAQgAigCFDYCzDIgBCACKAIYNgKEOyAEIAIoAhw2ArxDIARBwMMAaiEEIAJBIGohAiADQQhqIgMgB0cNAAsLIAUQCQtBASEEIBBBAWoiECAIKAIISQ0ACwsgCEEQaiQAIAQLBABCfwu/CQELfyMAQRBrIgUkAAJ/IAAoAghBEEYEQCAAKAKcASAAKALMAUGMLGxqDAELIAAoAgwLIQcCfyACQQFNBEAgA0EBQdgjQQAQCEEADAELIAEgBUEMakECEAogBSgCDARAIANBAkHwLEEAEAhBAQwBCyACQQZNBEAgA0EBQdgjQQAQCEEADAELIAFBAmogBUEIakEBEAogBygC/CsiCSEAAkACQAJAIAcoAoAsIgZFDQAgBSgCCCEIA0AgACgCACAIRg0BIABBFGohACAEQQFqIgQgBkcNAAsMAQsgBCAGRw0BCyAHKAKELCAGRgR/IAcgBkEKaiIANgKELCAJIABBFGwQECIARQRAIAcoAvwrEAkgB0EANgKELCAHQgA3AvwrIANBAUHyI0EAEAhBAAwDCyAHIAA2AvwrIAAgBygCgCwiBEEUbGpBACAHKAKELCAEa0EUbBAOGiAHKAL8KyEJIAcoAoAsBSAGC0EUbCAJaiEAQQEhCwsgACAFKAIINgIAIAFBA2ogBUEMakECEAogBSgCDARAIANBAkHwLEEAEAhBAQwBCyABQQVqIAVBBGpBAhAKIAUoAgQiBEECTwRAIANBAkGoF0EAEAhBAQwBCyACQQdrIQYgBARAIAFBB2ohAkEAIQkDQCAGQQJNBEAgA0EBQdgjQQAQCEEADAMLIAIgBUEMakEBEAogBSgCDEEBRwRAIANBAkGyKkEAEAhBAQwDCyACQQFqIAVBAhAKIAAgBSgCACIEQf//AXEiATYCBCAGQQNrIgggBEEPdkEBaiIGIAFsQQJqIgpJBEAgA0EBQdgjQQAQCEEADAMLIAJBA2ohAkEAIQQgAQRAA0AgAiAFQQxqIAYQCiAEIAUoAgxHBEAgA0ECQdovQQAQCEEBDAULIAIgBmohAiAEQQFqIgQgACgCBEkNAAsLIAIgBUECEAogBSAFKAIAIgRB//8BcSIBNgIAIAAoAgQgAUcEQCADQQJB2BhBABAIQQEMAwsgCCAKayIKIARBD3ZBAWoiBiABbEEDaiIMSQRAIANBAUHYI0EAEAhBAAwDCyACQQJqIQJBACEEIAEEQANAIAIgBUEMaiAGEAogBCAFKAIMRwRAIANBAkHaL0EAEAhBAQwFCyACIAZqIQIgBEEBaiIEIAAoAgRJDQALCyACIAVBDGpBAxAKIAUoAgwhBiAAQgA3AgggACAGQYCABHFFIAAtABBB/gFxcjoAECAFIAZB/wFxIgg2AggCQCAIRQ0AIAcoAvQrIg0EQCAHKALwKyEEQQAhAQNAIAggBCgCCEYEQCAAIAQ2AggMAwsgBEEUaiEEIAFBAWoiASANRw0ACwsgA0EBQdgjQQAQCEEADAMLIAUgBkEIdkH/AXEiBjYCCAJAIAZFDQAgBygC9CsiCARAIAcoAvArIQRBACEBA0AgBiAEKAIIRgRAIAAgBDYCDAwDCyAEQRRqIQQgAUEBaiIBIAhHDQALCyADQQFB2CNBABAIQQAMAwsgCiAMayEGIAJBA2ohAiAJQQFqIgkgBSgCBEkNAAsLIAYEQCADQQFB2CNBABAIQQAMAQtBASALRQ0AGiAHIAcoAoAsQQFqNgKALEEBCyEOIAVBEGokACAOC/UBAQV/IwBBEGsiBCQAAkAgAiAAKAJIKAIQIgZBAmpHBEAgA0EBQfAiQQAQCAwBCyABIARBDGpBAhAKIAYgBCgCDEcEQCADQQFB8CJBABAIDAELIAZFBEBBASEFDAELIAFBAmohAiAAKAJIKAIYIQBBACEBA0AgAiAEQQhqQQEQCiAAIAQoAggiBUH/AHEiB0EBaiIINgIYIAAgBUEHdkEBcTYCICAHQR9PBEAgBCAINgIEIAQgATYCACADQQFBx/MAIAQQCEEAIQUMAgsgAEE0aiEAQQEhBSACQQFqIQIgAUEBaiIBIAZHDQALCyAEQRBqJAAgBQuYBQEKfyMAQRBrIgckAAJ/IAAoAghBEEYEQCAAKAKcASAAKALMAUGMLGxqDAELIAAoAgwLIQUCfyACQQFNBEAgA0EBQfEeQQAQCEEADAELIAEgB0EMakECEAoCQCAHKAIMBEAgA0ECQYYbQQAQCAwBCyACQQZNBEAgA0EBQfEeQQAQCEEADAILIAFBAmogB0EMakECEAogBSgC8CshBCAHLQAMIQoCQAJAAkAgBSgC9CsiBkUEQCAEIQAMAQsgBCEAA0AgACgCCCAKRg0BIABBFGohACAIQQFqIgggBkcNAAsMAQsgBiAIRw0BCyAFKAL4KyAGRgRAIAUgBkEKaiIANgL4KyAEIABBFGwQECEAIAUoAvArIQQgAEUEQCAEEAkgBUEANgL4KyAFQgA3AvArIANBAUGLH0EAEAhBAAwECwJAIAAgBEYNACAFKAKALCILRQ0AIAUoAvwrIQxBACEIA0AgDCAIQRRsaiIGKAIIIgkEQCAGIAAgCSAEa2o2AggLIAYoAgwiCQRAIAYgACAJIARrajYCDAsgCEEBaiIIIAtHDQALCyAFIAA2AvArIAAgBSgC9CsiBEEUbGpBACAFKAL4KyAEa0EUbBAOGiAFKAL0KyEGIAUoAvArIQQLIAUgBkEBajYC9CsgBCAGQRRsaiEACyAAKAIMIgQEQCAEEAkgAEIANwIMCyAAIAo2AgggACAHKAIMIgRBCnZBA3E2AgAgACAEQQh2QQNxNgIEIAFBBGogB0EMakECEAogBygCDARAIANBAkG9FkEAEAgMAQsgACACQQZrIgIQDSIENgIMIARFBEAgA0EBQfEeQQAQCEEADAILIAQgAUEGaiACEAsaIAAgAjYCEAtBAQshDSAHQRBqJAAgDQsnAEEBIQEgAiAAKAJIKAIQQQJ0RwR/IANBAUHXIUEAEAhBAAVBAQsLqwMBBX8jAEEQayIGJAACfyACQQFNBEAgA0EBQf0dQQAQCEEADAELIAAtALwBQQFxBEAgA0EBQZneAEEAEAhBAAwBCyAAKAKcASAAKALMAUGMLGxqIgAgAC0AiCxBAnI6AIgsIAEgBkEMakEBEAoCQCAAKAKsKCIERQRAIAAgBigCDEEBaiIFQQgQDCIENgKsKCAERQRAIANBAUGXHkEAEAhBAAwDCyAAIAU2AqgoDAELIAYoAgwiBSAAKAKoKEkNACAEIAVBAWoiBEEDdBAQIgVFBEAgA0EBQZceQQAQCEEADAILIAAgBTYCrCggBSAAKAKoKCIHQQN0akEAIAQgB2tBA3QQDhogACAENgKoKCAAKAKsKCEECyAEIAYoAgwiBUEDdGooAgAEQCAGIAU2AgAgA0EBQb01IAYQCEEADAELIAJBAWsiAhANIQQgACgCrCgiACAGKAIMIgVBA3RqIAQ2AgAgBEUEQCADQQFBlx5BABAIQQAMAQsgACAFQQN0aiACNgIEIAAgBigCDEEDdGooAgAgAUEBaiACEAsaQQELIQggBkEQaiQAIAgL9QIBBX8jAEEQayIGJAACfyACQQFNBEAgA0EBQaQgQQAQCEEADAELIAAgAC0AvAFBAXI6ALwBIAEgBkEMakEBEAoCQCAAKAJ0IgRFBEAgACAGKAIMQQFqIgVBCBAMIgQ2AnQgBEUEQCADQQFBviBBABAIQQAMAwsgACAFNgJwDAELIAYoAgwiBSAAKAJwSQ0AIAQgBUEBaiIEQQN0EBAiBUUEQCADQQFBviBBABAIQQAMAgsgACAFNgJ0IAUgACgCcCIHQQN0akEAIAQgB2tBA3QQDhogACAENgJwIAAoAnQhBAsgBCAGKAIMIgVBA3RqKAIABEAgBiAFNgIAIANBAUHTNSAGEAhBAAwBCyACQQFrIgIQDSEEIAAoAnQiACAGKAIMIgVBA3RqIAQ2AgAgBEUEQCADQQFBviBBABAIQQAMAQsgACAFQQN0aiACNgIEIAAgBigCDEEDdGooAgAgAUEBaiACEAsaQQELIQggBkEQaiQAIAgLoAEBBH8jAEEQayIEJAACfyACRQRAIANBAUHXHkEAEAhBAAwBCyABIARBDGpBARAKQQEgAkEBayIFRQ0AGkEAIQBBACECA0AgAUEBaiIBIARBCGpBARAKIAQoAggiBkEYdEEfdSAGQf8AcSACckEHdHEhAiAAQQFqIgAgBUcNAAtBASACRQ0AGiADQQFB1x5BABAIQQALIQcgBEEQaiQAIAcLGwBBASEAIAIEf0EBBSADQQFB/iBBABAIQQALC4ABAQF/IwBBEGsiACQAQQEhBAJAIAJBAU0EQEEAIQQgA0EBQeQgQQAQCAwBCyABIABBDGpBARAKIAFBAWogAEEIakEBEAogAkECayAAKAIIIgFBBXZBAnEgAUEEdkEDcWpBAmpwRQ0AQQAhBCADQQFB5CBBABAICyAAQRBqJAAgBAsEAEEACwv5uwEcAEGACAuhdWNhbm5vdCBhbGxvY2F0ZSBvcGpfdGNkX3NlZ19kYXRhX2NodW5rX3QqIGFycmF5AC0rICAgMFgweAAtMFgrMFggMFgtMHgrMHggMHgAVW5rbm93biBmb3JtYXQARmFpbGVkIHRvIHNldCB0aGUgZGVjb2RlZCBjb21wb25lbnRzAEZhaWxlZCB0byBzZXR1cCB0aGUgZGVjb2RlcgBGYWlsZWQgdG8gcmVhZCB0aGUgaGVhZGVyAG5hbgAqbF90aWxlX2xlbiA+IFVJTlRfTUFYIC0gT1BKX0NPTU1PTl9DQkxLX0RBVEFfRVhUUkEgLSBwX2oyay0+bV9zcGVjaWZpY19wYXJhbS5tX2RlY29kZXIubV9zb3RfbGVuZ3RoAGluZgBGYWlsZWQgdG8gZGVjb2RlIHRoZSBpbWFnZQBJbnZhbGlkIGFjY2VzcyB0byBwaS0+aW5jbHVkZQBBTExfQ1BVUwBPUEpfTlVNX1RIUkVBRFMATkFOAElORgBwX2oyay0+bV9zcGVjaWZpY19wYXJhbS5tX2RlY29kZXIubV9zb3RfbGVuZ3RoID4gVUlOVF9NQVggLSBPUEpfQ09NTU9OX0NCTEtfREFUQV9FWFRSQQAJCQkgcHJlY2NpbnRzaXplICh3LGgpPQAJCQkgc3RlcHNpemVzIChtLGUpPQAuAChudWxsKQAoJWQsJWQpIAAlc30KAAkJIH0KAFtERVZdIER1bXAgYW4gaW1hZ2VfY29tcF9oZWFkZXIgc3RydWN0IHsKAFtERVZdIER1bXAgYW4gaW1hZ2VfaGVhZGVyIHN0cnVjdCB7CgBJbWFnZSBpbmZvIHsKAAkgZGVmYXVsdCB0aWxlIHsKACVzCSBjb21wb25lbnQgJWQgewoACQkgY29tcCAlZCB7CgAJIFRpbGUgaW5kZXg6IHsKAAkgTWFya2VyIGxpc3Q6IHsKAENvZGVzdHJlYW0gaW5kZXggZnJvbSBtYWluIGhlYWRlcjogewoAQ29kZXN0cmVhbSBpbmZvIGZyb20gbWFpbiBoZWFkZXI6IHsKAFN0cmVhbSBlcnJvciB3aGlsZSByZWFkaW5nIEpQMiBIZWFkZXIgYm94CgBGb3VuZCBhIG1pc3BsYWNlZCAnJWMlYyVjJWMnIGJveCBvdXRzaWRlIGpwMmggYm94CgBNYWxmb3JtZWQgSlAyIGZpbGUgZm9ybWF0OiBmaXJzdCBib3ggbXVzdCBiZSBKUEVHIDIwMDAgc2lnbmF0dXJlIGJveAoATWFsZm9ybWVkIEpQMiBmaWxlIGZvcm1hdDogc2Vjb25kIGJveCBtdXN0IGJlIGZpbGUgdHlwZSBib3gKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGhhbmRsZSBqcGVnMjAwMCBib3gKAE5vdCBlbm91Z2ggbWVtb3J5IHdpdGggRlRZUCBCb3gKAEEgbWFya2VyIElEIHdhcyBleHBlY3RlZCAoMHhmZi0tKSBpbnN0ZWFkIG9mICUuOHgKAAkJIG1jdD0leAoACQkJIGNibGtzdHk9JSN4CgAJCQkgY3N0eT0lI3gKAAkJIHByZz0lI3gKAEludGVnZXIgb3ZlcmZsb3cKAAkgdGR4PSV1LCB0ZHk9JXUKAAkgdHc9JXUsIHRoPSV1CgAJIHR4MD0ldSwgdHkwPSV1CgBJbnZhbGlkIGNvbXBvbmVudCBpbmRleDogJXUKAFN0cmVhbSB0b28gc2hvcnQKAE1hcmtlciBoYW5kbGVyIGZ1bmN0aW9uIGZhaWxlZCB0byByZWFkIHRoZSBtYXJrZXIgc2VnbWVudAoATm90IGVub3VnaCBtZW1vcnkgZm9yIGN1cnJlbnQgcHJlY2luY3QgY29kZWJsb2NrIGVsZW1lbnQKAEVycm9yIHJlYWRpbmcgU1BDb2QgU1BDb2MgZWxlbWVudAoARXJyb3IgcmVhZGluZyBTUWNkIG9yIFNRY2MgZWxlbWVudAoAQSBCUENDIGhlYWRlciBib3ggaXMgYXZhaWxhYmxlIGFsdGhvdWdoIEJQQyBnaXZlbiBieSB0aGUgSUhEUiBib3ggKCVkKSBpbmRpY2F0ZSBjb21wb25lbnRzIGJpdCBkZXB0aCBpcyBjb25zdGFudAoARXJyb3Igd2l0aCBTSVogbWFya2VyOiBpbGxlZ2FsIHRpbGUgb2Zmc2V0CgBJbnZhbGlkIHByZWNpbmN0CgBOb3QgZW5vdWdoIG1lbW9yeSB0byBoYW5kbGUgYmFuZCBwcmVjaW50cwoARmFpbGVkIHRvIGRlY29kZSBhbGwgdXNlZCBjb21wb25lbnRzCgBTaXplIG9mIGNvZGUgYmxvY2sgZGF0YSBleGNlZWRzIHN5c3RlbSBsaW1pdHMKAFNpemUgb2YgdGlsZSBkYXRhIGV4Y2VlZHMgc3lzdGVtIGxpbWl0cwoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIG11bHRpcGxlIE1DVCBtYXJrZXJzCgBDb3JydXB0ZWQgUFBNIG1hcmtlcnMKAE5vdCBlbm91Z2ggbWVtb3J5IGZvciB0aWxlIHJlc29sdXRpb25zCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgbXVsdGlwbGUgY29sbGVjdGlvbnMKAEludmFsaWQgUENMUiBib3guIFJlcG9ydHMgMCBwYWxldHRlIGNvbHVtbnMKAFdlIGRvIG5vdCBzdXBwb3J0IFJPSSBpbiBkZWNvZGluZyBIVCBjb2RlYmxvY2tzCgBDYW5ub3QgaGFuZGxlIGJveCBvZiB1bmRlZmluZWQgc2l6ZXMKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBjb2xsZWN0aW9ucyB3aXRob3V0IHNhbWUgbnVtYmVyIG9mIGluZGl4ZXMKAEludmFsaWQgdGlsZWMtPndpbl94eHggdmFsdWVzCgBDYW5ub3QgaGFuZGxlIGJveCBvZiBsZXNzIHRoYW4gOCBieXRlcwoAQ2Fubm90IGhhbmRsZSBYTCBib3ggb2YgbGVzcyB0aGFuIDE2IGJ5dGVzCgBDb21wb25lbnQgaW5kZXggJXUgdXNlZCBzZXZlcmFsIHRpbWVzCgBJbnZhbGlkIFBDTFIgYm94LiBSZXBvcnRzICVkIGVudHJpZXMKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGNyZWF0ZSBUYWctdHJlZSBub2RlcwoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIG1jdCBkYXRhIHdpdGhpbiBtdWx0aXBsZSBNQ1QgcmVjb3JkcwoAQ2Fubm90IGRlY29kZSB0aWxlLCBtZW1vcnkgZXJyb3IKAG9wal9qMmtfYXBwbHlfbmJfdGlsZV9wYXJ0c19jb3JyZWN0aW9uIGVycm9yCgBQcm9ibGVtIHdpdGggc2tpcHBpbmcgSlBFRzIwMDAgYm94LCBzdHJlYW0gZXJyb3IKAFByb2JsZW0gd2l0aCByZWFkaW5nIEpQRUcyMDAwIGJveCwgc3RyZWFtIGVycm9yCgBVbmtub3duIG1hcmtlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gYWRkIHRsIG1hcmtlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gYWRkIG1oIG1hcmtlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gdGFrZSBpbiBjaGFyZ2UgU0laIG1hcmtlcgoARXJyb3IgcmVhZGluZyBQUFQgbWFya2VyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWFkIFBQVCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgU09UIG1hcmtlcgoARXJyb3IgcmVhZGluZyBQTFQgbWFya2VyCgBFcnJvciByZWFkaW5nIE1DVCBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlYWQgTUNUIG1hcmtlcgoATm90IGVub3VnaCBzcGFjZSBmb3IgZXhwZWN0ZWQgU09QIG1hcmtlcgoARXhwZWN0ZWQgU09QIG1hcmtlcgoARXJyb3IgcmVhZGluZyBNQ08gbWFya2VyCgBFcnJvciByZWFkaW5nIFJHTiBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUFBNIG1hcmtlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBQUE0gbWFya2VyCgBFcnJvciByZWFkaW5nIFRMTSBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUExNIG1hcmtlcgoATm90IGVub3VnaCBzcGFjZSBmb3IgZXhwZWN0ZWQgRVBIIG1hcmtlcgoARXhwZWN0ZWQgRVBIIG1hcmtlcgoARXJyb3IgcmVhZGluZyBDUkcgbWFya2VyCgBVbmtub3duIHByb2dyZXNzaW9uIG9yZGVyIGluIENPRCBtYXJrZXIKAFVua25vd24gU2NvZCB2YWx1ZSBpbiBDT0QgbWFya2VyCgBFcnJvciByZWFkaW5nIENPRCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUUNEIG1hcmtlcgoAQ3Jyb3IgcmVhZGluZyBDQkQgbWFya2VyCgBFcnJvciByZWFkaW5nIFBPQyBtYXJrZXIKAEVycm9yIHJlYWRpbmcgQ09DIG1hcmtlcgoARXJyb3IgcmVhZGluZyBRQ0MgbWFya2VyCgBFcnJvciByZWFkaW5nIE1DQyBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlYWQgTUNDIG1hcmtlcgoAcmVxdWlyZWQgU0laIG1hcmtlciBub3QgZm91bmQgaW4gbWFpbiBoZWFkZXIKAHJlcXVpcmVkIENPRCBtYXJrZXIgbm90IGZvdW5kIGluIG1haW4gaGVhZGVyCgByZXF1aXJlZCBRQ0QgbWFya2VyIG5vdCBmb3VuZCBpbiBtYWluIGhlYWRlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gaGFuZGxlIGpwZWcyMDAwIGZpbGUgaGVhZGVyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWFkIGhlYWRlcgoARXJyb3Igd2l0aCBKUCBTaWduYXR1cmUgOiBiYWQgbWFnaWMgbnVtYmVyCgBJbiBTT1QgbWFya2VyLCBUUFNvdCAoJWQpIGlzIG5vdCB2YWxpZCByZWdhcmRzIHRvIHRoZSBjdXJyZW50IG51bWJlciBvZiB0aWxlLXBhcnQgKCVkKSwgZ2l2aW5nIHVwCgBJbiBTT1QgbWFya2VyLCBUUFNvdCAoJWQpIGlzIG5vdCB2YWxpZCByZWdhcmRzIHRvIHRoZSBwcmV2aW91cyBudW1iZXIgb2YgdGlsZS1wYXJ0ICglZCksIGdpdmluZyB1cAoASW4gU09UIG1hcmtlciwgVFBTb3QgKCVkKSBpcyBub3QgdmFsaWQgcmVnYXJkcyB0byB0aGUgY3VycmVudCBudW1iZXIgb2YgdGlsZS1wYXJ0IChoZWFkZXIpICglZCksIGdpdmluZyB1cAoAdGlsZXMgcmVxdWlyZSBhdCBsZWFzdCBvbmUgcmVzb2x1dGlvbgoATWFya2VyIGlzIG5vdCBjb21wbGlhbnQgd2l0aCBpdHMgcG9zaXRpb24KAFByb2JsZW0gd2l0aCBzZWVrIGZ1bmN0aW9uCgBFcnJvciByZWFkaW5nIFNQQ29kIFNQQ29jIGVsZW1lbnQsIEludmFsaWQgY2Jsa3cvY2Jsa2ggY29tYmluYXRpb24KAEludmFsaWQgbXVsdGlwbGUgY29tcG9uZW50IHRyYW5zZm9ybWF0aW9uCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgY29sbGVjdGlvbnMgb3RoZXIgdGhhbiBhcnJheSBkZWNvcnJlbGF0aW9uCgBUb28gbGFyZ2UgdmFsdWUgZm9yIE5wcG0KAE5vdCBlbm91Z2ggYnl0ZXMgdG8gcmVhZCBOcHBtCgBiYWQgcGxhY2VkIGpwZWcgY29kZXN0cmVhbQoACSBNYWluIGhlYWRlciBzdGFydCBwb3NpdGlvbj0lbGxpCgkgTWFpbiBoZWFkZXIgZW5kIHBvc2l0aW9uPSVsbGkKAE1hcmtlciBzaXplIGluY29uc2lzdGVudCB3aXRoIHN0cmVhbSBsZW5ndGgKAFRpbGUgcGFydCBsZW5ndGggc2l6ZSBpbmNvbnNpc3RlbnQgd2l0aCBzdHJlYW0gbGVuZ3RoCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgbXVsdGlwbGUgZGF0YSBzcGFubmluZwoAV3JvbmcgZmxhZwoARXJyb3Igd2l0aCBGVFlQIHNpZ25hdHVyZSBCb3ggc2l6ZQoARXJyb3Igd2l0aCBKUCBzaWduYXR1cmUgQm94IHNpemUKAEludmFsaWQgcHJlY2luY3Qgc2l6ZQoASW5jb25zaXN0ZW50IG1hcmtlciBzaXplCgBJbnZhbGlkIG1hcmtlciBzaXplCgBFcnJvciB3aXRoIFNJWiBtYXJrZXIgc2l6ZQoATm90IGVub3VnaCBtZW1vcnkgdG8gYWRkIGEgbmV3IHZhbGlkYXRpb24gcHJvY2VkdXJlCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBkZWNvZGUgdGlsZQoARmFpbGVkIHRvIGRlY29kZSB0aGUgY29kZXN0cmVhbSBpbiB0aGUgSlAyIGZpbGUKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBjb2xsZWN0aW9ucyB3aXRoIGluZGl4IHNodWZmbGUKAENhbm5vdCBhbGxvY2F0ZSBUaWVyIDEgaGFuZGxlCgBObyBkZWNvZGVkIGFyZWEgcGFyYW1ldGVycywgc2V0IHRoZSBkZWNvZGVkIGFyZWEgdG8gdGhlIHdob2xlIGltYWdlCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBjcmVhdGUgVGFnLXRyZWUKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlaW5pdGlhbGl6ZSB0aGUgdGFnIHRyZWUKAEVycm9yIHJlYWRpbmcgU1BDb2QgU1BDb2MgZWxlbWVudCwgSW52YWxpZCB0cmFuc2Zvcm1hdGlvbiBmb3VuZAoARXJyb3IgcmVhZGluZyBTUENvZCBTUENvYyBlbGVtZW50LiBVbnN1cHBvcnRlZCBNaXhlZCBIVCBjb2RlLWJsb2NrIHN0eWxlIGZvdW5kCgBUaWxlIFkgY29vcmRpbmF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQKAFRpbGUgWCBjb29yZGluYXRlcyBhcmUgbm90IHN1cHBvcnRlZAoASW1hZ2UgY29vcmRpbmF0ZXMgYWJvdmUgSU5UX01BWCBhcmUgbm90IHN1cHBvcnRlZAoASlBFRzIwMDAgSGVhZGVyIGJveCBub3QgcmVhZCB5ZXQsICclYyVjJWMlYycgYm94IHdpbGwgYmUgaWdub3JlZAoAb3BqX2oya19tZXJnZV9wcHQoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZAoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBTT1QgbWFya2VyLiBUaWxlIGluZGV4IGFsbG9jYXRpb24gZmFpbGVkCgBJZ25vcmluZyBpaGRyIGJveC4gRmlyc3QgaWhkciBib3ggYWxyZWFkeSByZWFkCgBacHB0ICV1IGFscmVhZHkgcmVhZAoAWnBwbSAldSBhbHJlYWR5IHJlYWQKAFBURVJNIGNoZWNrIGZhaWx1cmU6ICVkIHN5bnRoZXRpemVkIDB4RkYgbWFya2VycyByZWFkCgAJCQkgY2Jsa3c9Ml4lZAoACQkJIGNibGtoPTJeJWQKAAkJCSBxbnRzdHk9JWQKACVzIGR4PSVkLCBkeT0lZAoACQkJIHJvaXNoaWZ0PSVkCgAJCQkgbnVtZ2JpdHM9JWQKAAkJIG51bWxheWVycz0lZAoAJXMgbnVtY29tcHM9JWQKAG9wal9qcDJfYXBwbHlfY2RlZjogYWNuPSVkLCBudW1jb21wcz0lZAoAb3BqX2pwMl9hcHBseV9jZGVmOiBjbj0lZCwgbnVtY29tcHM9JWQKAAkJCSBudW1yZXNvbHV0aW9ucz0lZAoACQkgdHlwZT0lI3gsIHBvcz0lbGxpLCBsZW49JWQKACVzIHNnbmQ9JWQKAAkJCSBxbWZiaWQ9JWQKACVzIHByZWM9JWQKAAkJIG5iIG9mIHRpbGUtcGFydCBpbiB0aWxlIFslZF09JWQKACVzIHgxPSVkLCB5MT0lZAoAJXMgeDA9JWQsIHkwPSVkCgBGYWlsZWQgdG8gZGVjb2RlIHRpbGUgJWQvJWQKAFNldHRpbmcgZGVjb2RpbmcgYXJlYSB0byAlZCwlZCwlZCwlZAoARmFpbGVkIHRvIGRlY29kZSBjb21wb25lbnQgJWQKAEludmFsaWQgdmFsdWUgZm9yIG51bXJlc29sdXRpb25zIDogJWQsIG1heCB2YWx1ZSBpcyBzZXQgaW4gb3BlbmpwZWcuaCBhdCAlZAoASW52YWxpZCBjb21wb25lbnQgbnVtYmVyOiAlZCwgcmVnYXJkaW5nIHRoZSBudW1iZXIgb2YgY29tcG9uZW50cyAlZAoAVG9vIG1hbnkgUE9DcyAlZAoASW52YWxpZCB0aWxlIG51bWJlciAlZAoASW52YWxpZCB0aWxlIHBhcnQgaW5kZXggZm9yIHRpbGUgbnVtYmVyICVkLiBHb3QgJWQsIGV4cGVjdGVkICVkCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IG51bWJlciBvZiBjb21wb25lbnQgaXMgaWxsZWdhbCAtPiAlZAoATm90IGVub3VnaCBtZW1vcnkgZm9yIGNpZWxhYgoAQ2Fubm90IGFsbG9jYXRlIGNibGstPmRlY29kZWRfZGF0YQoARmFpbGVkIHRvIG1lcmdlIFBQVCBkYXRhCgBGYWlsZWQgdG8gbWVyZ2UgUFBNIGRhdGEKAEludmFsaWQgbnVtYmVyIG9mIGxheWVycyBpbiBDT0QgbWFya2VyIDogJWQgbm90IGluIHJhbmdlIFsxLTY1NTM1XQoAU3RyZWFtIHRvbyBzaG9ydCwgZXhwZWN0ZWQgU09UCgBVbmFibGUgdG8gc2V0IHQxIGhhbmRsZSBhcyBUTFMKAFN0cmVhbSBkb2VzIG5vdCBlbmQgd2l0aCBFT0MKAENhbm5vdCBoYW5kbGUgYm94IHNpemVzIGhpZ2hlciB0aGFuIDJeMzIKAG9wal9waV9uZXh0X2xyY3AoKTogaW52YWxpZCBjb21wbm8wL2NvbXBubzEKAG9wal9waV9uZXh0X3JsY3AoKTogaW52YWxpZCBjb21wbm8wL2NvbXBubzEKAG9wal9waV9uZXh0X2NwcmwoKTogaW52YWxpZCBjb21wbm8wL2NvbXBubzEKAG9wal9waV9uZXh0X3BjcmwoKTogaW52YWxpZCBjb21wbm8wL2NvbXBubzEKAG9wal9waV9uZXh0X3JwY2woKTogaW52YWxpZCBjb21wbm8wL2NvbXBubzEKAG9wal90MV9kZWNvZGVfY2JsaygpOiB1bnN1cHBvcnRlZCBicG5vX3BsdXNfb25lID0gJWQgPj0gMzEKAEZhaWxlZCB0byBkZWNvZGUgdGlsZSAxLzEKAEluc3VmZmljaWVudCBkYXRhIGZvciBDTUFQIGJveC4KAE5lZWQgdG8gcmVhZCBhIFBDTFIgYm94IGJlZm9yZSB0aGUgQ01BUCBib3guCgBJbnN1ZmZpY2llbnQgZGF0YSBmb3IgQ0RFRiBib3guCgBOdW1iZXIgb2YgY2hhbm5lbCBkZXNjcmlwdGlvbiBpcyBlcXVhbCB0byB6ZXJvIGluIENERUYgYm94LgoAU3RyZWFtIGVycm9yIHdoaWxlIHJlYWRpbmcgSlAyIEhlYWRlciBib3g6IG5vICdpaGRyJyBib3guCgBOb24gY29uZm9ybWFudCBjb2Rlc3RyZWFtIFRQc290PT1UTnNvdC4KAFN0cmVhbSBlcnJvciB3aGlsZSByZWFkaW5nIEpQMiBIZWFkZXIgYm94OiBib3ggbGVuZ3RoIGlzIGluY29uc2lzdGVudC4KAEJveCBsZW5ndGggaXMgaW5jb25zaXN0ZW50LgoAUmVzb2x1dGlvbiBmYWN0b3IgaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIHJlc29sdXRpb24gaW4gdGhlIGNvbXBvbmVudC4KAENvbXBvbmVudCBtYXBwaW5nIHNlZW1zIHdyb25nLiBUcnlpbmcgdG8gY29ycmVjdC4KAEluY29tcGxldGUgY2hhbm5lbCBkZWZpbml0aW9ucy4KAE1hbGZvcm1lZCBIVCBjb2RlYmxvY2suIEludmFsaWQgY29kZWJsb2NrIGxlbmd0aCB2YWx1ZXMuCgBXZSBkbyBub3Qgc3VwcG9ydCBtb3JlIHRoYW4gMyBjb2RpbmcgcGFzc2VzIGluIGFuIEhUIGNvZGVibG9jazsgVGhpcyBjb2RlYmxvY2tzIGhhcyAlZCBwYXNzZXMuCgBNYWxmb3JtZWQgSFQgY29kZWJsb2NrLiBEZWNvZGluZyB0aGlzIGNvZGVibG9jayBpcyBzdG9wcGVkLiBUaGVyZSBhcmUgJWQgemVybyBiaXRwbGFuZXMgaW4gJWQgYml0cGxhbmVzLgoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIG11bHRpcGxlIHRyYW5zZm9ybWF0aW9uIHN0YWdlcy4KAFVua25vd24gbWFya2VyIGhhcyBiZWVuIGRldGVjdGVkIGFuZCBnZW5lcmF0ZWQgZXJyb3IuCgBDb2RlYyBwcm92aWRlZCB0byB0aGUgb3BqX3NldF9kZWNvZGVkX2NvbXBvbmVudHMgZnVuY3Rpb24gaXMgbm90IGEgZGVjb21wcmVzc29yIGhhbmRsZXIuCgBDb2RlYyBwcm92aWRlZCB0byB0aGUgb3BqX3NldHVwX2RlY29kZXIgZnVuY3Rpb24gaXMgbm90IGEgZGVjb21wcmVzc29yIGhhbmRsZXIuCgBDb2RlYyBwcm92aWRlZCB0byB0aGUgb3BqX3JlYWRfaGVhZGVyIGZ1bmN0aW9uIGlzIG5vdCBhIGRlY29tcHJlc3NvciBoYW5kbGVyLgoAVGlsZXMgZG9uJ3QgYWxsIGhhdmUgdGhlIHNhbWUgZGltZW5zaW9uLiBTa2lwIHRoZSBNQ1Qgc3RlcC4KAE51bWJlciBvZiBjb21wb25lbnRzICglZCkgaXMgaW5jb25zaXN0ZW50IHdpdGggYSBNQ1QuIFNraXAgdGhlIE1DVCBzdGVwLgoASlAyIGJveCB3aGljaCBhcmUgYWZ0ZXIgdGhlIGNvZGVzdHJlYW0gd2lsbCBub3QgYmUgcmVhZCBieSB0aGlzIGZ1bmN0aW9uLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gV2hlbiB0aGUgbnVtYmVyIG9mIHplcm8gcGxhbmVzIGJpdHBsYW5lcyBpcyBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGJpdHBsYW5lcywgb25seSB0aGUgY2xlYW51cCBwYXNzIG1ha2VzIHNlbnNlLCBidXQgd2UgaGF2ZSAlZCBwYXNzZXMgaW4gdGhpcyBjb2RlYmxvY2suIFRoZXJlZm9yZSwgb25seSB0aGUgY2xlYW51cCBwYXNzIHdpbGwgYmUgZGVjb2RlZC4gVGhpcyBtZXNzYWdlIHdpbGwgbm90IGJlIGRpc3BsYXllZCBhZ2Fpbi4KAEltYWdlIGhhcyBsZXNzIGNvbXBvbmVudHMgdGhhbiBjb2Rlc3RyZWFtLgoATmVlZCB0byBkZWNvZGUgdGhlIG1haW4gaGVhZGVyIGJlZm9yZSBiZWdpbiB0byBkZWNvZGUgdGhlIHJlbWFpbmluZyBjb2Rlc3RyZWFtLgoAUHNvdCB2YWx1ZSBvZiB0aGUgY3VycmVudCB0aWxlLXBhcnQgaXMgZXF1YWwgdG8gemVybywgd2UgYXNzdW1pbmcgaXQgaXMgdGhlIGxhc3QgdGlsZS1wYXJ0IG9mIHRoZSBjb2Rlc3RyZWFtLgoAQSBtYWxmb3JtZWQgY29kZWJsb2NrIHRoYXQgaGFzIG1vcmUgdGhhbiBvbmUgY29kaW5nIHBhc3MsIGJ1dCB6ZXJvIGxlbmd0aCBmb3IgMm5kIGFuZCBwb3RlbnRpYWxseSB0aGUgM3JkIHBhc3MgaW4gYW4gSFQgY29kZWJsb2NrLgoACQkJIHRpbGUtcGFydFslZF06IHN0YXJfcG9zPSVsbGksIGVuZF9oZWFkZXI9JWxsaSwgZW5kX3Bvcz0lbGxpLgoAVGlsZSAldSBoYXMgVFBzb3QgPT0gMCBhbmQgVE5zb3QgPT0gMCwgYnV0IG5vIG90aGVyIHRpbGUtcGFydHMgd2VyZSBmb3VuZC4gRU9DIGlzIGFsc28gbWlzc2luZy4KAENvbXBvbmVudCAlZCBkb2Vzbid0IGhhdmUgYSBtYXBwaW5nLgoAQSBjb25mb3JtaW5nIEpQMiByZWFkZXIgc2hhbGwgaWdub3JlIGFsbCBDb2xvdXIgU3BlY2lmaWNhdGlvbiBib3hlcyBhZnRlciB0aGUgZmlyc3QsIHNvIHdlIGlnbm9yZSB0aGlzIG9uZS4KAFRoZSBzaWduYXR1cmUgYm94IG11c3QgYmUgdGhlIGZpcnN0IGJveCBpbiB0aGUgZmlsZS4KAFRoZSAgYm94IG11c3QgYmUgdGhlIGZpcnN0IGJveCBpbiB0aGUgZmlsZS4KAFRoZSBmdHlwIGJveCBtdXN0IGJlIHRoZSBzZWNvbmQgYm94IGluIHRoZSBmaWxlLgoARmFpbGVkIHRvIGRlY29kZS4KAE1hbGZvcm1lZCBIVCBjb2RlYmxvY2suIEluY29ycmVjdCBNRUwgc2VnbWVudCBzZXF1ZW5jZS4KAENvbXBvbmVudCAlZCBpcyBtYXBwZWQgdHdpY2UuCgBPbmx5IG9uZSBDTUFQIGJveCBpcyBhbGxvd2VkLgoAYXBwbHlfY29sb3JfdHJhbnNmb3JtcyA9IE9QSl9UUlVFIGlzIG5vdCBzdXBwb3J0ZWQuCgBXZSBuZWVkIGFuIGltYWdlIHByZXZpb3VzbHkgY3JlYXRlZC4KAElIRFIgYm94X21pc3NpbmcuIFJlcXVpcmVkLgoASlAySCBib3ggbWlzc2luZy4gUmVxdWlyZWQuCgBOb3Qgc3VyZSBob3cgdGhhdCBoYXBwZW5lZC4KAE1haW4gaGVhZGVyIGhhcyBiZWVuIGNvcnJlY3RseSBkZWNvZGVkLgoAVGlsZSAlZC8lZCBoYXMgYmVlbiBkZWNvZGVkLgoASGVhZGVyIG9mIHRpbGUgJWQgLyAlZCBoYXMgYmVlbiByZWFkLgoARW1wdHkgU09UIG1hcmtlciBkZXRlY3RlZDogUHNvdD0lZC4KAERpcmVjdCB1c2UgYXQgIyVkIGhvd2V2ZXIgcGNvbD0lZC4KAEltcGxlbWVudGF0aW9uIGxpbWl0YXRpb246IGZvciBwYWxldHRlIG1hcHBpbmcsIHBjb2xbJWRdIHNob3VsZCBiZSBlcXVhbCB0byAlZCwgYnV0IGlzIGVxdWFsIHRvICVkLgoASW52YWxpZCBjb21wb25lbnQvcGFsZXR0ZSBpbmRleCBmb3IgZGlyZWN0IG1hcHBpbmcgJWQuCgBJbnZhbGlkIHZhbHVlIGZvciBjbWFwWyVkXS5tdHlwID0gJWQuCgBQc290IHZhbHVlIGlzIG5vdCBjb3JyZWN0IHJlZ2FyZHMgdG8gdGhlIEpQRUcyMDAwIG5vcm06ICVkLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gVkxDIGNvZGUgcHJvZHVjZXMgc2lnbmlmaWNhbnQgc2FtcGxlcyBvdXRzaWRlIHRoZSBjb2RlYmxvY2sgYXJlYS4KAFVuZXhwZWN0ZWQgT09NLgoAMzIgYml0cyBhcmUgbm90IGVub3VnaCB0byBkZWNvZGUgdGhpcyBjb2RlYmxvY2ssIHNpbmNlIHRoZSBudW1iZXIgb2YgYml0cGxhbmUsICVkLCBpcyBsYXJnZXIgdGhhbiAzMC4KAEJvdHRvbSBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feTE9JWQpIHNob3VsZCBiZSA+IDAuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIHNob3VsZCBiZSA+IDAuCgBVcCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feTA9JWQpIHNob3VsZCBiZSA+PSAwLgoATGVmdCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDA9JWQpIHNob3VsZCBiZSA+PSAwLgoARXJyb3IgcmVhZGluZyBQUFQgbWFya2VyOiBwYWNrZXQgaGVhZGVyIGhhdmUgYmVlbiBwcmV2aW91c2x5IGZvdW5kIGluIHRoZSBtYWluIGhlYWRlciAoUFBNIG1hcmtlcikuCgBTdGFydCB0byByZWFkIGoyayBtYWluIGhlYWRlciAoJWxsZCkuCgBCb3R0b20gcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kxPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZc2l6PSVkKS4KAFVwIHBvc2l0aW9uIG9mIHRoZSBkZWNvZGVkIGFyZWEgKHJlZ2lvbl95MD0lZCkgaXMgb3V0c2lkZSB0aGUgaW1hZ2UgYXJlYSAoWXNpej0lZCkuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhzaXo9JWQpLgoATGVmdCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDA9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhzaXo9JWQpLgoAQm90dG9tIHBvc2l0aW9uIG9mIHRoZSBkZWNvZGVkIGFyZWEgKHJlZ2lvbl95MT0lZCkgaXMgb3V0c2lkZSB0aGUgaW1hZ2UgYXJlYSAoWU9zaXo9JWQpLgoAVXAgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZT3Npej0lZCkuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhPc2l6PSVkKS4KAExlZnQgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3gwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChYT3Npej0lZCkuCgBTaXplIHggb2YgdGhlIGRlY29kZWQgY29tcG9uZW50IGltYWdlIGlzIGluY29ycmVjdCAoY29tcFslZF0udz0lZCkuCgBTaXplIHkgb2YgdGhlIGRlY29kZWQgY29tcG9uZW50IGltYWdlIGlzIGluY29ycmVjdCAoY29tcFslZF0uaD0lZCkuCgBUaWxlIHJlYWQsIGRlY29kZWQgYW5kIHVwZGF0ZWQgaXMgbm90IHRoZSBkZXNpcmVkIG9uZSAoJWQgdnMgJWQpLgoASW52YWxpZCBjb21wb25lbnQgaW5kZXggJWQgKD49ICVkKS4KAG9wal9yZWFkX2hlYWRlcigpIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIG9wal9zZXRfZGVjb2RlZF9jb21wb25lbnRzKCkuCgBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGluIG9wal9qcDJfYXBwbHlfcGNscigpLgoAaW1hZ2UtPmNvbXBzWyVkXS5kYXRhID09IE5VTEwgaW4gb3BqX2pwMl9hcHBseV9wY2xyKCkuCgBpbnZhbGlkIGJveCBzaXplICVkICgleCkKAEZhaWwgdG8gcmVhZCB0aGUgY3VycmVudCBtYXJrZXIgc2VnbWVudCAoJSN4KQoARXJyb3Igd2l0aCBTSVogbWFya2VyOiBJSERSIHcoJXUpIGgoJXUpIHZzLiBTSVogdygldSkgaCgldSkKAEVycm9yIHJlYWRpbmcgQ09DIG1hcmtlciAoYmFkIG51bWJlciBvZiBjb21wb25lbnRzKQoASW52YWxpZCBudW1iZXIgb2YgdGlsZXMgOiAldSB4ICV1IChtYXhpbXVtIGZpeGVkIGJ5IGpwZWcyMDAwIG5vcm0gaXMgNjU1MzUgdGlsZXMpCgBJbnZhbGlkIG51bWJlciBvZiBjb21wb25lbnRzIChpaGRyKQoATm90IGVub3VnaCBtZW1vcnkgdG8gaGFuZGxlIGltYWdlIGhlYWRlciAoaWhkcikKAFdyb25nIHZhbHVlcyBmb3I6IHcoJWQpIGgoJWQpIG51bWNvbXBzKCVkKSAoaWhkcikKAEludmFsaWQgdmFsdWVzIGZvciBjb21wID0gJWQgOiBkeD0ldSBkeT0ldSAoc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMjU1IGFjY29yZGluZyB0byB0aGUgSlBFRzIwMDAgbm9ybSkKAEJhZCBpbWFnZSBoZWFkZXIgYm94IChiYWQgc2l6ZSkKAEJhZCBDT0xSIGhlYWRlciBib3ggKGJhZCBzaXplKQoAQmFkIEJQQ0MgaGVhZGVyIGJveCAoYmFkIHNpemUpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IG5lZ2F0aXZlIG9yIHplcm8gaW1hZ2Ugc2l6ZSAoJWxsZCB4ICVsbGQpCgBza2lwOiBzZWdtZW50IHRvbyBsb25nICglZCkgd2l0aCBtYXggKCVkKSBmb3IgY29kZWJsb2NrICVkIChwPSVkLCBiPSVkLCByPSVkLCBjPSVkKQoAcmVhZDogc2VnbWVudCB0b28gbG9uZyAoJWQpIHdpdGggbWF4ICglZCkgZm9yIGNvZGVibG9jayAlZCAocD0lZCwgYj0lZCwgcj0lZCwgYz0lZCkKAERlc3BpdGUgSlAyIEJQQyE9MjU1LCBwcmVjaXNpb24gYW5kL29yIHNnbmQgdmFsdWVzIGZvciBjb21wWyVkXSBpcyBkaWZmZXJlbnQgdGhhbiBjb21wWzBdOgogICAgICAgIFswXSBwcmVjKCVkKSBzZ25kKCVkKSBbJWRdIHByZWMoJWQpIHNnbmQoJWQpCgBiYWQgY29tcG9uZW50IG51bWJlciBpbiBSR04gKCVkIHdoZW4gdGhlcmUgYXJlIG9ubHkgJWQpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IG51bWJlciBvZiBjb21wb25lbnQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgcmVtYWluaW5nIG51bWJlciBvZiBwYXJhbWV0ZXJzICggJWQgdnMgJWQpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IGludmFsaWQgdGlsZSBzaXplICh0ZHg6ICVkLCB0ZHk6ICVkKQoAQmFkIENPTFIgaGVhZGVyIGJveCAoYmFkIHNpemU6ICVkKQoAQmFkIENPTFIgaGVhZGVyIGJveCAoQ0lFTGFiLCBiYWQgc2l6ZTogJWQpCgBQVEVSTSBjaGVjayBmYWlsdXJlOiAlZCByZW1haW5pbmcgYnl0ZXMgaW4gY29kZSBibG9jayAoJWQgdXNlZCAvICVkKQoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gT25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIGlzIG5vdCBtZXQ6IDIgPD0gU2N1cCA8PSBtaW4oTGN1cCwgNDA3OSkKAEludmFsaWQgdmFsdWVzIGZvciBjb21wID0gJWQgOiBwcmVjPSV1IChzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzOCBhY2NvcmRpbmcgdG8gdGhlIEpQRUcyMDAwIG5vcm0uIE9wZW5KcGVnIG9ubHkgc3VwcG9ydHMgdXAgdG8gMzEpCgBJbnZhbGlkIGJpdCBudW1iZXIgJWQgaW4gb3BqX3QyX3JlYWRfcGFja2V0X2hlYWRlcigpCgBTdHJlYW0gZXJyb3IhCgBFcnJvciBvbiB3cml0aW5nIHN0cmVhbSEKAFN0cmVhbSByZWFjaGVkIGl0cyBlbmQgIQoARXhwZWN0ZWQgYSBTT0MgbWFya2VyIAoASW52YWxpZCBib3ggc2l6ZSAlZCBmb3IgYm94ICclYyVjJWMlYycuIE5lZWQgJWQgYnl0ZXMsICVkIGJ5dGVzIHJlbWFpbmluZyAKAE1hbGZvcm1lZCBIVCBjb2RlYmxvY2suIERlY29kaW5nIHRoaXMgY29kZWJsb2NrIGlzIHN0b3BwZWQuIFVfcSBpcyBsYXJnZXIgdGhhbiB6ZXJvIGJpdHBsYW5lcyArIDEgCgBNYWxmb3JtZWQgSFQgY29kZWJsb2NrLiBEZWNvZGluZyB0aGlzIGNvZGVibG9jayBpcyBzdG9wcGVkLiBVX3EgaXNsYXJnZXIgdGhhbiBiaXRwbGFuZXMgKyAxIAoAQ09MUiBCT1ggbWV0aCB2YWx1ZSBpcyBub3QgYSByZWd1bGFyIHZhbHVlICglZCksIHNvIHdlIHdpbGwgaWdub3JlIHRoZSBlbnRpcmUgQ29sb3VyIFNwZWNpZmljYXRpb24gYm94LiAKAFdoaWxlIHJlYWRpbmcgQ0NQX1FOVFNUWSBlbGVtZW50IGluc2lkZSBRQ0Qgb3IgUUNDIG1hcmtlciBzZWdtZW50LCBudW1iZXIgb2Ygc3ViYmFuZHMgKCVkKSBpcyBncmVhdGVyIHRvIE9QSl9KMktfTUFYQkFORFMgKCVkKS4gU28gd2UgbGltaXQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBzdG9yZWQgdG8gT1BKX0oyS19NQVhCQU5EUyAoJWQpIGFuZCBza2lwIHRoZSByZXN0LiAKAEpQMiBJSERSIGJveDogY29tcHJlc3Npb24gdHlwZSBpbmRpY2F0ZSB0aGF0IHRoZSBmaWxlIGlzIG5vdCBhIGNvbmZvcm1pbmcgSlAyIGZpbGUgKCVkKSAKAFRpbGUgaW5kZXggcHJvdmlkZWQgYnkgdGhlIHVzZXIgaXMgaW5jb3JyZWN0ICVkIChtYXggPSAlZCkgCgBFcnJvciBkZWNvZGluZyBjb21wb25lbnQgJWQuClRoZSBudW1iZXIgb2YgcmVzb2x1dGlvbnMgdG8gcmVtb3ZlICglZCkgaXMgZ3JlYXRlciBvciBlcXVhbCB0aGFuIHRoZSBudW1iZXIgb2YgcmVzb2x1dGlvbnMgb2YgdGhpcyBjb21wb25lbnQg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AAABVAAAAQAAABBQAADQUAAAAUgAAAAAAAAgUAAAwFAAAAFIAAABAAAAMFAAANBQAAABOAAAAAAAAEBQAADAUAAAATgAAAEAAABQUAAA0FAAAAEwAAAAAAAAYFAAACBRAAABMAAAAQAAAHBQAAAwUQAAASQAAAAAAACAUAAAQFEAAAEkAAABAAAAkFAAAFBRAAABHAAAAAAAAKBQAACAUQAAARwAAAEAAACwUAAAkFEAAAEWAAAAAAAAoFIAAKBRAAABFgAAAQAAALBSAACwUQAAAVYAAAAAAADgUAAA0FAAAAFWAAABAAAA8FAAAMBQAAABVAAAAAAAAABRAADAUAAAAVQAAAEAAAAQUQAA0FAAAAFRAAAAAAAAIFEAAOBQAAABUQAAAQAAADBRAADwUAAAAUgAAAAAAABAUQAAAFEAAAFIAAABAAAAUFEAABBRAAABOAAAAAAAAGBRAAAgUQAAATgAAAEAAABwUQAAMFEAAAE0AAAAAAAAgFEAAEBRAAABNAAAAQAAAJBRAABQUQAAATAAAAAAAACgUQAAYFEAAAEwAAABAAAAsFEAAHBRAAABKAAAAAAAAMBRAABgUQAAASgAAAEAAADQUQAAcFEAAAEkAAAAAAAA4FEAAIBRAAABJAAAAQAAAPBRAACQUQAAASIAAAAAAAAAUgAAoFEAAAEiAAABAAAAEFIAALBRAAABHAAAAAAAACBSAADAUQAAARwAAAEAAAAwUgAA0FEAAAEYAAAAAAAAQFIAAOBRAAABGAAAAQAAAFBSAADwUQAAARYAAAAAAABgUgAAAFIAAAEWAAABAAAAcFIAABBSAAABFAAAAAAAAIBSAAAgUgAAARQAAAEAAACQUgAAMFIAAAESAAAAAAAAoFIAAEBSAAABEgAAAQAAALBSAABQUgAAAREAAAAAAADAUgAAYFIAAAERAAABAAAA0FIAAHBSAADBCgAAAAAAAOBSAACAUgAAwQoAAAEAAADwUgAAkFIAAMEJAAAAAAAAAFMAAKBSAADBCQAAAQAAABBTAACwUgAAoQgAAAAAAAAgUwAAwFIAAKEIAAABAAAAMFMAANBSAAAhBQAAAAAAAEBTAADgUgAAIQUAAAEAAABQUwAA8FIAAEEEAAAAAAAAYFMAAABTAABBBAAAAQAAAHBTAAAQUwAAoQIAAAAAAACAUwAAIFMAAKECAAABAAAAkFMAADBTAAAhAgAAAAAAAKBTAABAUwAAIQIAAAEAAACwUwAAUFMAAEEBAAAAAAAAwFMAAGBTAABBAQAAAQAAANBTAABwUwAAEQEAAAAAAADgUwAAgFMAABEBAAABAAAA8FMAAJBTAACFAAAAAAAAAABUAACgUwAAhQAAAAEAAAAQVAAAsFMAAEkAAAAAAAAAIFQAAMBTAABJAAAAAQAAADBUAADQUwAAJQAAAAAAAABAVAAA4FMAACUAAAABAAAAUFQAAPBTAAAVAAAAAAAAAGBUAAAAVAAAFQAAAAEAAABwVAAAEFQAAAkAAAAAAAAAgFQAACBUAAAJAAAAAQAAAJBUAAAwVAAABQAAAAAAAACgVAAAQFQAAAUAAAABAAAAsFQAAFBUAAABAAAAAAAAAKBUAABgVAAAAQAAAAEAAACwVAAAcFQAAAFWAAAAAAAAwFQAAMBUAAABVgAAAQAAANBUAADQVAAAAAEDAwECAwMFBgcHBgYHBwABAwMBAgMDBQYHBwYGBwcFBgcHBgYHBwgICAgICAgIBQYHBwYGBwcICAgICAgICAECAwMCAgMDBgYHBwYGBwcBAgMDAgIDAwYGBwcGBgcHBgYHBwYGBwcICAgICAgICAYGBwcGBgcHCAgICAgICAgDAwQEAwMEBAcHBwcHBwcHAwMEBAMDBAQHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgHBwcHBwcHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAECAwMCAgMDBgYHBwYGBwcBAgMDAgIDAwYGBwcGBgcHBgYHBwYGBwcICAgICAgICAYGBwcGBgcHCAgICAgICAgCAgMDAgIDAwYGBwcGBgcHAgIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgAAQUGAQIGBgMDBwcDAwcHAAEFBgECBgYDAwcHAwMHBwMDBwcDAwcHBAQHBwQEBwcDAwcHAwMHBwQEBwcEBAcHAQIGBgICBgYDAwcHAwMHBwECBgYCAgYGAwMHBwMDBwcDAwcHAwMHBwQEBwcEBAcHAwMHBwMDBwcEBAcHBAQHBwUGCAgGBggIBwcICAcHCAgFBggIBgYICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgGBggIBgYICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIAQIGBgICBgYDAwcHAwMHBwECBgYCAgYGAwMHBwMDBwcDAwcHAwMHBwQEBwcEBAcHAwMHBwMDBwcEBAcHBAQHBwICBgYCAgYGAwMHBwMDBwcCAgYGAgIGBgMDBwcDAwcHAwMHBwMDBwcEBAcHBAQHBwMDBwcDAwcHBAQHBwQEBwcGBggIBgYICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAYGCAgGBggIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAABAwMBAgMDBQYHBwYGBwcAAQMDAQIDAwUGBwcGBgcHBQYHBwYGBwcICAgICAgICAUGBwcGBgcHCAgICAgICAgBAgMDAgIDAwYGBwcGBgcHAQIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgBAgMDAgIDAwYGBwcGBgcHAQIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAgIDAwICAwMGBgcHBgYHBwICAwMCAgMDBgYHBwYGBwcGBgcHBgYHBwgICAgICAgIBgYHBwYGBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgDAwQEAwMEBAcHBwcHBwcHAwMEBAMDBAQHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgHBwcHBwcHBwgICAgICAgIAAMBBAMGBAcBBAIFBAcFBwADAQQDBgQHAQQCBQQHBQcBBAIFBAcFBwIFAgUFBwUHAQQCBQQHBQcCBQIFBQcFBwMGBAcGCAcIBAcFBwcIBwgDBgQHBggHCAQHBQcHCAcIBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgBBAIFBAcFBwIFAgUFBwUHAQQCBQQHBQcCBQIFBQcFBwIFAgUFBwUHAgUCBQUHBQcCBQIFBQcFBwIFAgUFBwUHBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAUHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAMGBAcGCAcIBAcFBwcIBwgDBgQHBggHCAQHBQcHCAcIBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgGCAcICAgICAcIBwgICAgIBggHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAUHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgJCQoKCQkKCgwMDQsMDA0LCQkKCgkJCgoMDAsNDAwLDQwMDQ0MDAsLDAkNCgkMCgsMDAsLDAwNDQwJCwoJDAoNCQkKCgkJCgoMDA0LDAwNCwkJCgoJCQoKDAwLDQwMCw0MDA0NDAwLCwwJDQoJDAoLDAwLCwwMDQ0MCQsKCQwKDQoKCgoKCgoKDQsNCw0LDQsKCgkJCgoJCQ0LDAwNCwwMDQ0NDQsLCwsNCg0KCgsKCw0NDAwLCwwMDQoMCQoLCQwKCgkJCgoJCQsNDAwLDQwMCgoKCgoKCgoLDQsNCw0LDQsLDAwNDQwMCwoMCQoNCQwLCwsLDQ0NDQsKCwoKDQoNAEHpuwELNwEAAQABAAEAAAEBAAABAQABAAEAAQABAAAAAAEBAQEAAAAAAAEAAQAAAAABAQEBAAAAAQABAQEAQam8AQs3AQABAAEAAQAAAQEAAAEBAAEAAQABAAEAAAAAAQEBAQAAAAAAAQABAAAAAAEBAQEAAAABAAEBAQBB6bwBCwcBAAEAAQABAEH5vAELlQIBAAEAAQABAAAAAAEBAQEAAAAAAAEAAQAAAAABAQEBAAAAAAABAAEBAQAAAQEAAAABAAEAAQABAQEBAQEBAQEAAQABAAEAAQAAAAABAQEBAAEAAAEBAAEAAAAAAQEBAQABAAEBAQEBAgAAAAQAAAAEAAAACAAAAJD/AAAMAAAAGAAAAFL/AAAUAAAAGQAAAFP/AAAUAAAAGgAAAF7/AAAUAAAAGwAAAFz/AAAUAAAAHAAAAF3/AAAUAAAAHQAAAF//AAAUAAAAHgAAAFH/AAACAAAAHwAAAFX/AAAEAAAAIAAAAFf/AAAEAAAAIQAAAFj/AAAQAAAAIgAAAGD/AAAEAAAAIwAAAGH/AAAQAAAAJAAAAJH/AEGYvwELZWP/AAAEAAAAJQAAAGT/AAAUAAAAJgAAAHT/AAAUAAAAJwAAAHj/AAAEAAAAKAAAAFD/AAAEAAAAKQAAAFn/AAAEAAAAKgAAAHX/AAAUAAAAKwAAAHf/AAAUAAAALAAAAAAAAAAUAEGQwAELNS0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAAICBQajYAAABweXRmNwAAAGgycGo4AEHQwAELMnJkaGk5AAAAcmxvYzoAAABjY3BiOwAAAHJsY3A8AAAAcGFtYz0AAABmZWRjPgAAAHhiAEGQwQELQRkACwAZGRkAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAGQAKChkZGQMKBwABAAkLGAAACQYLAAALAAYZAAAAGRkZAEHhwQELIQ4AAAAAAAAAABkACw0ZGRkADQAAAgAJDgAAAAkADgAADgBBm8IBCwEMAEGnwgELFRMAAAAAEwAAAAAJDAAAAAAADAAADABB1cIBCwEQAEHhwgELFQ8AAAAEDwAAAAAJEAAAAAAAEAAAEABBj8MBCwESAEGbwwELHhEAAAAAEQAAAAAJEgAAAAAAEgAAEgAAGgAAABoaGgBB0sMBCw4aAAAAGhoaAAAAAAAACQBBg8QBCwEUAEGPxAELFRcAAAAAFwAAAAAJFAAAAAAAFAAAFABBvcQBCwEWAEHJxAELJxUAAAAAFQAAAAAJFgAAAAAAFgAAFgAAMDEyMzQ1Njc4OUFCQ0RFRgBB8cQBCwhsAQAAAAAABQBBhMUBCwFpAEGcxQELDmoAAABrAAAA+GcAAAAEAEG0xQELAQEAQcTFAQsF/////wo=\";\n      return f;\n    }\n    var wasmBinaryFile;\n    function getBinarySync(file) {\n      if (file == wasmBinaryFile && wasmBinary) {\n        return new Uint8Array(wasmBinary);\n      }\n      var binary = tryParseAsDataURI(file);\n      if (binary) {\n        return binary;\n      }\n      if (readBinary) {\n        return readBinary(file);\n      }\n      throw 'sync fetching of the wasm failed: you can preload it to Module[\"wasmBinary\"] manually, or emcc.py will do that for you when generating HTML (but not JS)';\n    }\n    function instantiateSync(file, info) {\n      var module;\n      var binary = getBinarySync(file);\n      module = new WebAssembly.Module(binary);\n      var instance = new WebAssembly.Instance(module, info);\n      return [instance, module];\n    }\n    function getWasmImports() {\n      return {\n        \"a\": wasmImports\n      };\n    }\n    function createWasm() {\n      var info = getWasmImports();\n      function receiveInstance(instance, module) {\n        wasmExports = instance.exports;\n        wasmMemory = wasmExports[\"i\"];\n        updateMemoryViews();\n        addOnInit(wasmExports[\"j\"]);\n        removeRunDependency(\"wasm-instantiate\");\n        return wasmExports;\n      }\n      addRunDependency(\"wasm-instantiate\");\n      if (Module[\"instantiateWasm\"]) {\n        try {\n          return Module[\"instantiateWasm\"](info, receiveInstance);\n        } catch (e) {\n          err(`Module.instantiateWasm callback failed with error: ${e}`);\n          readyPromiseReject(e);\n        }\n      }\n      if (!wasmBinaryFile) wasmBinaryFile = findWasmBinary();\n      var result = instantiateSync(wasmBinaryFile, info);\n      return receiveInstance(result[0]);\n    }\n    var callRuntimeCallbacks = callbacks => {\n      while (callbacks.length > 0) {\n        callbacks.shift()(Module);\n      }\n    };\n    var noExitRuntime = Module[\"noExitRuntime\"] || true;\n    var __emscripten_memcpy_js = (dest, src, num) => HEAPU8.copyWithin(dest, src, src + num);\n    var getHeapMax = () => 2147483648;\n    var growMemory = size => {\n      var b = wasmMemory.buffer;\n      var pages = (size - b.byteLength + 65535) / 65536;\n      try {\n        wasmMemory.grow(pages);\n        updateMemoryViews();\n        return 1;\n      } catch (e) {}\n    };\n    var _emscripten_resize_heap = requestedSize => {\n      var oldSize = HEAPU8.length;\n      requestedSize >>>= 0;\n      var maxHeapSize = getHeapMax();\n      if (requestedSize > maxHeapSize) {\n        return false;\n      }\n      var alignUp = (x, multiple) => x + (multiple - x % multiple) % multiple;\n      for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {\n        var overGrownHeapSize = oldSize * (1 + .2 / cutDown);\n        overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);\n        var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536));\n        var replacement = growMemory(newSize);\n        if (replacement) {\n          return true;\n        }\n      }\n      return false;\n    };\n    var ENV = {};\n    var getExecutableName = () => thisProgram || \"./this.program\";\n    var getEnvStrings = () => {\n      if (!getEnvStrings.strings) {\n        var lang = (typeof navigator == \"object\" && navigator.languages && navigator.languages[0] || \"C\").replace(\"-\", \"_\") + \".UTF-8\";\n        var env = {\n          \"USER\": \"web_user\",\n          \"LOGNAME\": \"web_user\",\n          \"PATH\": \"/\",\n          \"PWD\": \"/\",\n          \"HOME\": \"/home/web_user\",\n          \"LANG\": lang,\n          \"_\": getExecutableName()\n        };\n        for (var x in ENV) {\n          if (ENV[x] === undefined) delete env[x];else env[x] = ENV[x];\n        }\n        var strings = [];\n        for (var x in env) {\n          strings.push(`${x}=${env[x]}`);\n        }\n        getEnvStrings.strings = strings;\n      }\n      return getEnvStrings.strings;\n    };\n    var stringToAscii = (str, buffer) => {\n      for (var i = 0; i < str.length; ++i) {\n        HEAP8[buffer++] = str.charCodeAt(i);\n      }\n      HEAP8[buffer] = 0;\n    };\n    var _environ_get = (__environ, environ_buf) => {\n      var bufSize = 0;\n      getEnvStrings().forEach((string, i) => {\n        var ptr = environ_buf + bufSize;\n        HEAPU32[__environ + i * 4 >> 2] = ptr;\n        stringToAscii(string, ptr);\n        bufSize += string.length + 1;\n      });\n      return 0;\n    };\n    var _environ_sizes_get = (penviron_count, penviron_buf_size) => {\n      var strings = getEnvStrings();\n      HEAPU32[penviron_count >> 2] = strings.length;\n      var bufSize = 0;\n      strings.forEach(string => bufSize += string.length + 1);\n      HEAPU32[penviron_buf_size >> 2] = bufSize;\n      return 0;\n    };\n    var printCharBuffers = [null, [], []];\n    var UTF8Decoder = typeof TextDecoder != \"undefined\" ? new TextDecoder(\"utf8\") : undefined;\n    var UTF8ArrayToString = (heapOrArray, idx, maxBytesToRead) => {\n      var endIdx = idx + maxBytesToRead;\n      var endPtr = idx;\n      while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;\n      if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {\n        return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));\n      }\n      var str = \"\";\n      while (idx < endPtr) {\n        var u0 = heapOrArray[idx++];\n        if (!(u0 & 128)) {\n          str += String.fromCharCode(u0);\n          continue;\n        }\n        var u1 = heapOrArray[idx++] & 63;\n        if ((u0 & 224) == 192) {\n          str += String.fromCharCode((u0 & 31) << 6 | u1);\n          continue;\n        }\n        var u2 = heapOrArray[idx++] & 63;\n        if ((u0 & 240) == 224) {\n          u0 = (u0 & 15) << 12 | u1 << 6 | u2;\n        } else {\n          u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heapOrArray[idx++] & 63;\n        }\n        if (u0 < 65536) {\n          str += String.fromCharCode(u0);\n        } else {\n          var ch = u0 - 65536;\n          str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023);\n        }\n      }\n      return str;\n    };\n    var printChar = (stream, curr) => {\n      var buffer = printCharBuffers[stream];\n      if (curr === 0 || curr === 10) {\n        (stream === 1 ? out : err)(UTF8ArrayToString(buffer, 0));\n        buffer.length = 0;\n      } else {\n        buffer.push(curr);\n      }\n    };\n    var UTF8ToString = (ptr, maxBytesToRead) => ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : \"\";\n    var _fd_write = (fd, iov, iovcnt, pnum) => {\n      var num = 0;\n      for (var i = 0; i < iovcnt; i++) {\n        var ptr = HEAPU32[iov >> 2];\n        var len = HEAPU32[iov + 4 >> 2];\n        iov += 8;\n        for (var j = 0; j < len; j++) {\n          printChar(fd, HEAPU8[ptr + j]);\n        }\n        num += len;\n      }\n      HEAPU32[pnum >> 2] = num;\n      return 0;\n    };\n    function _jsPrintWarning(message_ptr) {\n      const message = UTF8ToString(message_ptr);\n      (Module.warn || console.warn)(`OpenJPEG: ${message}`);\n    }\n    function _setImageData(array_ptr, array_size) {\n      Module.imageData = new Uint8ClampedArray(Module.HEAPU8.subarray(array_ptr, array_ptr + array_size));\n    }\n    function _storeErrorMessage(message_ptr) {\n      const message = UTF8ToString(message_ptr);\n      if (!Module.errorMessages) {\n        Module.errorMessages = message;\n      } else {\n        Module.errorMessages += \"\\n\" + message;\n      }\n    }\n    var wasmImports = {\n      f: __emscripten_memcpy_js,\n      b: _emscripten_resize_heap,\n      c: _environ_get,\n      d: _environ_sizes_get,\n      e: _fd_write,\n      g: _jsPrintWarning,\n      h: _setImageData,\n      a: _storeErrorMessage\n    };\n    var wasmExports = createWasm();\n    var ___wasm_call_ctors = wasmExports[\"j\"];\n    var _malloc = Module[\"_malloc\"] = wasmExports[\"k\"];\n    var _free = Module[\"_free\"] = wasmExports[\"l\"];\n    var _jp2_decode = Module[\"_jp2_decode\"] = wasmExports[\"n\"];\n    var __emscripten_stack_restore = wasmExports[\"_emscripten_stack_restore\"];\n    var __emscripten_stack_alloc = wasmExports[\"_emscripten_stack_alloc\"];\n    var _emscripten_stack_get_current = wasmExports[\"emscripten_stack_get_current\"];\n    var calledRun;\n    dependenciesFulfilled = function runCaller() {\n      if (!calledRun) run();\n      if (!calledRun) dependenciesFulfilled = runCaller;\n    };\n    function run() {\n      if (runDependencies > 0) {\n        return;\n      }\n      preRun();\n      if (runDependencies > 0) {\n        return;\n      }\n      function doRun() {\n        if (calledRun) return;\n        calledRun = true;\n        Module[\"calledRun\"] = true;\n        if (ABORT) return;\n        initRuntime();\n        readyPromiseResolve(Module);\n        if (Module[\"onRuntimeInitialized\"]) Module[\"onRuntimeInitialized\"]();\n        postRun();\n      }\n      if (Module[\"setStatus\"]) {\n        Module[\"setStatus\"](\"Running...\");\n        setTimeout(function () {\n          setTimeout(function () {\n            Module[\"setStatus\"](\"\");\n          }, 1);\n          doRun();\n        }, 1);\n      } else {\n        doRun();\n      }\n    }\n    if (Module[\"preInit\"]) {\n      if (typeof Module[\"preInit\"] == \"function\") Module[\"preInit\"] = [Module[\"preInit\"]];\n      while (Module[\"preInit\"].length > 0) {\n        Module[\"preInit\"].pop()();\n      }\n    }\n    run();\n    moduleRtn = Module;\n    return moduleRtn;\n  };\n})();\n/* harmony default export */ const openjpeg = (OpenJPEG);\n;// CONCATENATED MODULE: ./src/core/jpx.js\n\n\n\nclass JpxError extends BaseException {\n  constructor(msg) {\n    super(msg, \"JpxError\");\n  }\n}\nclass JpxImage {\n  static #module = null;\n  static decode(data, ignoreColorSpace = false) {\n    this.#module ||= openjpeg({\n      warn: warn\n    });\n    const imageData = this.#module.decode(data, ignoreColorSpace);\n    if (typeof imageData === \"string\") {\n      throw new JpxError(imageData);\n    }\n    return imageData;\n  }\n  static cleanup() {\n    this.#module = null;\n  }\n  static parseImageProperties(stream) {\n    let newByte = stream.getByte();\n    while (newByte >= 0) {\n      const oldByte = newByte;\n      newByte = stream.getByte();\n      const code = oldByte << 8 | newByte;\n      if (code === 0xff51) {\n        stream.skip(4);\n        const Xsiz = stream.getInt32() >>> 0;\n        const Ysiz = stream.getInt32() >>> 0;\n        const XOsiz = stream.getInt32() >>> 0;\n        const YOsiz = stream.getInt32() >>> 0;\n        stream.skip(16);\n        const Csiz = stream.getUint16();\n        return {\n          width: Xsiz - XOsiz,\n          height: Ysiz - YOsiz,\n          bitsPerComponent: 8,\n          componentsCount: Csiz\n        };\n      }\n    }\n    throw new JpxError(\"No size marker found in JPX stream\");\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/jpx_stream.js\n\n\n\nclass JpxStream extends DecodeStream {\n  constructor(stream, maybeLength, params) {\n    super(maybeLength);\n    this.stream = stream;\n    this.dict = stream.dict;\n    this.maybeLength = maybeLength;\n    this.params = params;\n  }\n  get bytes() {\n    return shadow(this, \"bytes\", this.stream.getBytes(this.maybeLength));\n  }\n  ensureBuffer(requested) {}\n  readBlock(ignoreColorSpace) {\n    if (this.eof) {\n      return;\n    }\n    this.buffer = JpxImage.decode(this.bytes, ignoreColorSpace);\n    this.bufferLength = this.buffer.length;\n    this.eof = true;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/lzw_stream.js\n\nclass LZWStream extends DecodeStream {\n  constructor(str, maybeLength, earlyChange) {\n    super(maybeLength);\n    this.str = str;\n    this.dict = str.dict;\n    this.cachedData = 0;\n    this.bitsCached = 0;\n    const maxLzwDictionarySize = 4096;\n    const lzwState = {\n      earlyChange,\n      codeLength: 9,\n      nextCode: 258,\n      dictionaryValues: new Uint8Array(maxLzwDictionarySize),\n      dictionaryLengths: new Uint16Array(maxLzwDictionarySize),\n      dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize),\n      currentSequence: new Uint8Array(maxLzwDictionarySize),\n      currentSequenceLength: 0\n    };\n    for (let i = 0; i < 256; ++i) {\n      lzwState.dictionaryValues[i] = i;\n      lzwState.dictionaryLengths[i] = 1;\n    }\n    this.lzwState = lzwState;\n  }\n  readBits(n) {\n    let bitsCached = this.bitsCached;\n    let cachedData = this.cachedData;\n    while (bitsCached < n) {\n      const c = this.str.getByte();\n      if (c === -1) {\n        this.eof = true;\n        return null;\n      }\n      cachedData = cachedData << 8 | c;\n      bitsCached += 8;\n    }\n    this.bitsCached = bitsCached -= n;\n    this.cachedData = cachedData;\n    this.lastCode = null;\n    return cachedData >>> bitsCached & (1 << n) - 1;\n  }\n  readBlock() {\n    const blockSize = 512,\n      decodedSizeDelta = blockSize;\n    let estimatedDecodedSize = blockSize * 2;\n    let i, j, q;\n    const lzwState = this.lzwState;\n    if (!lzwState) {\n      return;\n    }\n    const earlyChange = lzwState.earlyChange;\n    let nextCode = lzwState.nextCode;\n    const dictionaryValues = lzwState.dictionaryValues;\n    const dictionaryLengths = lzwState.dictionaryLengths;\n    const dictionaryPrevCodes = lzwState.dictionaryPrevCodes;\n    let codeLength = lzwState.codeLength;\n    let prevCode = lzwState.prevCode;\n    const currentSequence = lzwState.currentSequence;\n    let currentSequenceLength = lzwState.currentSequenceLength;\n    let decodedLength = 0;\n    let currentBufferLength = this.bufferLength;\n    let buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);\n    for (i = 0; i < blockSize; i++) {\n      const code = this.readBits(codeLength);\n      const hasPrev = currentSequenceLength > 0;\n      if (code < 256) {\n        currentSequence[0] = code;\n        currentSequenceLength = 1;\n      } else if (code >= 258) {\n        if (code < nextCode) {\n          currentSequenceLength = dictionaryLengths[code];\n          for (j = currentSequenceLength - 1, q = code; j >= 0; j--) {\n            currentSequence[j] = dictionaryValues[q];\n            q = dictionaryPrevCodes[q];\n          }\n        } else {\n          currentSequence[currentSequenceLength++] = currentSequence[0];\n        }\n      } else if (code === 256) {\n        codeLength = 9;\n        nextCode = 258;\n        currentSequenceLength = 0;\n        continue;\n      } else {\n        this.eof = true;\n        delete this.lzwState;\n        break;\n      }\n      if (hasPrev) {\n        dictionaryPrevCodes[nextCode] = prevCode;\n        dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1;\n        dictionaryValues[nextCode] = currentSequence[0];\n        nextCode++;\n        codeLength = nextCode + earlyChange & nextCode + earlyChange - 1 ? codeLength : Math.min(Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1, 12) | 0;\n      }\n      prevCode = code;\n      decodedLength += currentSequenceLength;\n      if (estimatedDecodedSize < decodedLength) {\n        do {\n          estimatedDecodedSize += decodedSizeDelta;\n        } while (estimatedDecodedSize < decodedLength);\n        buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);\n      }\n      for (j = 0; j < currentSequenceLength; j++) {\n        buffer[currentBufferLength++] = currentSequence[j];\n      }\n    }\n    lzwState.nextCode = nextCode;\n    lzwState.codeLength = codeLength;\n    lzwState.prevCode = prevCode;\n    lzwState.currentSequenceLength = currentSequenceLength;\n    this.bufferLength = currentBufferLength;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/predictor_stream.js\n\n\n\nclass PredictorStream extends DecodeStream {\n  constructor(str, maybeLength, params) {\n    super(maybeLength);\n    if (!(params instanceof Dict)) {\n      return str;\n    }\n    const predictor = this.predictor = params.get(\"Predictor\") || 1;\n    if (predictor <= 1) {\n      return str;\n    }\n    if (predictor !== 2 && (predictor < 10 || predictor > 15)) {\n      throw new FormatError(`Unsupported predictor: ${predictor}`);\n    }\n    this.readBlock = predictor === 2 ? this.readBlockTiff : this.readBlockPng;\n    this.str = str;\n    this.dict = str.dict;\n    const colors = this.colors = params.get(\"Colors\") || 1;\n    const bits = this.bits = params.get(\"BPC\", \"BitsPerComponent\") || 8;\n    const columns = this.columns = params.get(\"Columns\") || 1;\n    this.pixBytes = colors * bits + 7 >> 3;\n    this.rowBytes = columns * colors * bits + 7 >> 3;\n    return this;\n  }\n  readBlockTiff() {\n    const rowBytes = this.rowBytes;\n    const bufferLength = this.bufferLength;\n    const buffer = this.ensureBuffer(bufferLength + rowBytes);\n    const bits = this.bits;\n    const colors = this.colors;\n    const rawBytes = this.str.getBytes(rowBytes);\n    this.eof = !rawBytes.length;\n    if (this.eof) {\n      return;\n    }\n    let inbuf = 0,\n      outbuf = 0;\n    let inbits = 0,\n      outbits = 0;\n    let pos = bufferLength;\n    let i;\n    if (bits === 1 && colors === 1) {\n      for (i = 0; i < rowBytes; ++i) {\n        let c = rawBytes[i] ^ inbuf;\n        c ^= c >> 1;\n        c ^= c >> 2;\n        c ^= c >> 4;\n        inbuf = (c & 1) << 7;\n        buffer[pos++] = c;\n      }\n    } else if (bits === 8) {\n      for (i = 0; i < colors; ++i) {\n        buffer[pos++] = rawBytes[i];\n      }\n      for (; i < rowBytes; ++i) {\n        buffer[pos] = buffer[pos - colors] + rawBytes[i];\n        pos++;\n      }\n    } else if (bits === 16) {\n      const bytesPerPixel = colors * 2;\n      for (i = 0; i < bytesPerPixel; ++i) {\n        buffer[pos++] = rawBytes[i];\n      }\n      for (; i < rowBytes; i += 2) {\n        const sum = ((rawBytes[i] & 0xff) << 8) + (rawBytes[i + 1] & 0xff) + ((buffer[pos - bytesPerPixel] & 0xff) << 8) + (buffer[pos - bytesPerPixel + 1] & 0xff);\n        buffer[pos++] = sum >> 8 & 0xff;\n        buffer[pos++] = sum & 0xff;\n      }\n    } else {\n      const compArray = new Uint8Array(colors + 1);\n      const bitMask = (1 << bits) - 1;\n      let j = 0,\n        k = bufferLength;\n      const columns = this.columns;\n      for (i = 0; i < columns; ++i) {\n        for (let kk = 0; kk < colors; ++kk) {\n          if (inbits < bits) {\n            inbuf = inbuf << 8 | rawBytes[j++] & 0xff;\n            inbits += 8;\n          }\n          compArray[kk] = compArray[kk] + (inbuf >> inbits - bits) & bitMask;\n          inbits -= bits;\n          outbuf = outbuf << bits | compArray[kk];\n          outbits += bits;\n          if (outbits >= 8) {\n            buffer[k++] = outbuf >> outbits - 8 & 0xff;\n            outbits -= 8;\n          }\n        }\n      }\n      if (outbits > 0) {\n        buffer[k++] = (outbuf << 8 - outbits) + (inbuf & (1 << 8 - outbits) - 1);\n      }\n    }\n    this.bufferLength += rowBytes;\n  }\n  readBlockPng() {\n    const rowBytes = this.rowBytes;\n    const pixBytes = this.pixBytes;\n    const predictor = this.str.getByte();\n    const rawBytes = this.str.getBytes(rowBytes);\n    this.eof = !rawBytes.length;\n    if (this.eof) {\n      return;\n    }\n    const bufferLength = this.bufferLength;\n    const buffer = this.ensureBuffer(bufferLength + rowBytes);\n    let prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength);\n    if (prevRow.length === 0) {\n      prevRow = new Uint8Array(rowBytes);\n    }\n    let i,\n      j = bufferLength,\n      up,\n      c;\n    switch (predictor) {\n      case 0:\n        for (i = 0; i < rowBytes; ++i) {\n          buffer[j++] = rawBytes[i];\n        }\n        break;\n      case 1:\n        for (i = 0; i < pixBytes; ++i) {\n          buffer[j++] = rawBytes[i];\n        }\n        for (; i < rowBytes; ++i) {\n          buffer[j] = buffer[j - pixBytes] + rawBytes[i] & 0xff;\n          j++;\n        }\n        break;\n      case 2:\n        for (i = 0; i < rowBytes; ++i) {\n          buffer[j++] = prevRow[i] + rawBytes[i] & 0xff;\n        }\n        break;\n      case 3:\n        for (i = 0; i < pixBytes; ++i) {\n          buffer[j++] = (prevRow[i] >> 1) + rawBytes[i];\n        }\n        for (; i < rowBytes; ++i) {\n          buffer[j] = (prevRow[i] + buffer[j - pixBytes] >> 1) + rawBytes[i] & 0xff;\n          j++;\n        }\n        break;\n      case 4:\n        for (i = 0; i < pixBytes; ++i) {\n          up = prevRow[i];\n          c = rawBytes[i];\n          buffer[j++] = up + c;\n        }\n        for (; i < rowBytes; ++i) {\n          up = prevRow[i];\n          const upLeft = prevRow[i - pixBytes];\n          const left = buffer[j - pixBytes];\n          const p = left + up - upLeft;\n          let pa = p - left;\n          if (pa < 0) {\n            pa = -pa;\n          }\n          let pb = p - up;\n          if (pb < 0) {\n            pb = -pb;\n          }\n          let pc = p - upLeft;\n          if (pc < 0) {\n            pc = -pc;\n          }\n          c = rawBytes[i];\n          if (pa <= pb && pa <= pc) {\n            buffer[j++] = left + c;\n          } else if (pb <= pc) {\n            buffer[j++] = up + c;\n          } else {\n            buffer[j++] = upLeft + c;\n          }\n        }\n        break;\n      default:\n        throw new FormatError(`Unsupported predictor: ${predictor}`);\n    }\n    this.bufferLength += rowBytes;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/run_length_stream.js\n\nclass RunLengthStream extends DecodeStream {\n  constructor(str, maybeLength) {\n    super(maybeLength);\n    this.str = str;\n    this.dict = str.dict;\n  }\n  readBlock() {\n    const repeatHeader = this.str.getBytes(2);\n    if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) {\n      this.eof = true;\n      return;\n    }\n    let buffer;\n    let bufferLength = this.bufferLength;\n    let n = repeatHeader[0];\n    if (n < 128) {\n      buffer = this.ensureBuffer(bufferLength + n + 1);\n      buffer[bufferLength++] = repeatHeader[1];\n      if (n > 0) {\n        const source = this.str.getBytes(n);\n        buffer.set(source, bufferLength);\n        bufferLength += n;\n      }\n    } else {\n      n = 257 - n;\n      const b = repeatHeader[1];\n      buffer = this.ensureBuffer(bufferLength + n + 1);\n      for (let i = 0; i < n; i++) {\n        buffer[bufferLength++] = b;\n      }\n    }\n    this.bufferLength = bufferLength;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/parser.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst MAX_LENGTH_TO_CACHE = 1000;\nfunction getInlineImageCacheKey(bytes) {\n  const strBuf = [],\n    ii = bytes.length;\n  let i = 0;\n  while (i < ii - 1) {\n    strBuf.push(bytes[i++] << 8 | bytes[i++]);\n  }\n  if (i < ii) {\n    strBuf.push(bytes[i]);\n  }\n  return ii + \"_\" + String.fromCharCode.apply(null, strBuf);\n}\nclass Parser {\n  constructor({\n    lexer,\n    xref,\n    allowStreams = false,\n    recoveryMode = false\n  }) {\n    this.lexer = lexer;\n    this.xref = xref;\n    this.allowStreams = allowStreams;\n    this.recoveryMode = recoveryMode;\n    this.imageCache = Object.create(null);\n    this._imageId = 0;\n    this.refill();\n  }\n  refill() {\n    this.buf1 = this.lexer.getObj();\n    this.buf2 = this.lexer.getObj();\n  }\n  shift() {\n    if (this.buf2 instanceof Cmd && this.buf2.cmd === \"ID\") {\n      this.buf1 = this.buf2;\n      this.buf2 = null;\n    } else {\n      this.buf1 = this.buf2;\n      this.buf2 = this.lexer.getObj();\n    }\n  }\n  tryShift() {\n    try {\n      this.shift();\n      return true;\n    } catch (e) {\n      if (e instanceof MissingDataException) {\n        throw e;\n      }\n      return false;\n    }\n  }\n  getObj(cipherTransform = null) {\n    const buf1 = this.buf1;\n    this.shift();\n    if (buf1 instanceof Cmd) {\n      switch (buf1.cmd) {\n        case \"BI\":\n          return this.makeInlineImage(cipherTransform);\n        case \"[\":\n          const array = [];\n          while (!isCmd(this.buf1, \"]\") && this.buf1 !== EOF) {\n            array.push(this.getObj(cipherTransform));\n          }\n          if (this.buf1 === EOF) {\n            if (this.recoveryMode) {\n              return array;\n            }\n            throw new ParserEOFException(\"End of file inside array.\");\n          }\n          this.shift();\n          return array;\n        case \"<<\":\n          const dict = new Dict(this.xref);\n          while (!isCmd(this.buf1, \">>\") && this.buf1 !== EOF) {\n            if (!(this.buf1 instanceof Name)) {\n              info(\"Malformed dictionary: key must be a name object\");\n              this.shift();\n              continue;\n            }\n            const key = this.buf1.name;\n            this.shift();\n            if (this.buf1 === EOF) {\n              break;\n            }\n            dict.set(key, this.getObj(cipherTransform));\n          }\n          if (this.buf1 === EOF) {\n            if (this.recoveryMode) {\n              return dict;\n            }\n            throw new ParserEOFException(\"End of file inside dictionary.\");\n          }\n          if (isCmd(this.buf2, \"stream\")) {\n            return this.allowStreams ? this.makeStream(dict, cipherTransform) : dict;\n          }\n          this.shift();\n          return dict;\n        default:\n          return buf1;\n      }\n    }\n    if (Number.isInteger(buf1)) {\n      if (Number.isInteger(this.buf1) && isCmd(this.buf2, \"R\")) {\n        const ref = Ref.get(buf1, this.buf1);\n        this.shift();\n        this.shift();\n        return ref;\n      }\n      return buf1;\n    }\n    if (typeof buf1 === \"string\") {\n      if (cipherTransform) {\n        return cipherTransform.decryptString(buf1);\n      }\n      return buf1;\n    }\n    return buf1;\n  }\n  findDefaultInlineStreamEnd(stream) {\n    const E = 0x45,\n      I = 0x49,\n      SPACE = 0x20,\n      LF = 0xa,\n      CR = 0xd,\n      NUL = 0x0;\n    const {\n        knownCommands\n      } = this.lexer,\n      startPos = stream.pos,\n      n = 15;\n    let state = 0,\n      ch,\n      maybeEIPos;\n    while ((ch = stream.getByte()) !== -1) {\n      if (state === 0) {\n        state = ch === E ? 1 : 0;\n      } else if (state === 1) {\n        state = ch === I ? 2 : 0;\n      } else {\n        if (ch === SPACE || ch === LF || ch === CR) {\n          maybeEIPos = stream.pos;\n          const followingBytes = stream.peekBytes(n);\n          const ii = followingBytes.length;\n          if (ii === 0) {\n            break;\n          }\n          for (let i = 0; i < ii; i++) {\n            ch = followingBytes[i];\n            if (ch === NUL && followingBytes[i + 1] !== NUL) {\n              continue;\n            }\n            if (ch !== LF && ch !== CR && (ch < SPACE || ch > 0x7f)) {\n              state = 0;\n              break;\n            }\n          }\n          if (state !== 2) {\n            continue;\n          }\n          if (!knownCommands) {\n            warn(\"findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined.\");\n            continue;\n          }\n          const tmpLexer = new Lexer(new Stream(followingBytes.slice()), knownCommands);\n          tmpLexer._hexStringWarn = () => {};\n          let numArgs = 0;\n          while (true) {\n            const nextObj = tmpLexer.getObj();\n            if (nextObj === EOF) {\n              state = 0;\n              break;\n            }\n            if (nextObj instanceof Cmd) {\n              const knownCommand = knownCommands[nextObj.cmd];\n              if (!knownCommand) {\n                state = 0;\n                break;\n              } else if (knownCommand.variableArgs ? numArgs <= knownCommand.numArgs : numArgs === knownCommand.numArgs) {\n                break;\n              }\n              numArgs = 0;\n              continue;\n            }\n            numArgs++;\n          }\n          if (state === 2) {\n            break;\n          }\n        } else {\n          state = 0;\n        }\n      }\n    }\n    if (ch === -1) {\n      warn(\"findDefaultInlineStreamEnd: \" + \"Reached the end of the stream without finding a valid EI marker\");\n      if (maybeEIPos) {\n        warn('... trying to recover by using the last \"EI\" occurrence.');\n        stream.skip(-(stream.pos - maybeEIPos));\n      }\n    }\n    let endOffset = 4;\n    stream.skip(-endOffset);\n    ch = stream.peekByte();\n    stream.skip(endOffset);\n    if (!isWhiteSpace(ch)) {\n      endOffset--;\n    }\n    return stream.pos - endOffset - startPos;\n  }\n  findDCTDecodeInlineStreamEnd(stream) {\n    const startPos = stream.pos;\n    let foundEOI = false,\n      b,\n      markerLength;\n    while ((b = stream.getByte()) !== -1) {\n      if (b !== 0xff) {\n        continue;\n      }\n      switch (stream.getByte()) {\n        case 0x00:\n          break;\n        case 0xff:\n          stream.skip(-1);\n          break;\n        case 0xd9:\n          foundEOI = true;\n          break;\n        case 0xc0:\n        case 0xc1:\n        case 0xc2:\n        case 0xc3:\n        case 0xc5:\n        case 0xc6:\n        case 0xc7:\n        case 0xc9:\n        case 0xca:\n        case 0xcb:\n        case 0xcd:\n        case 0xce:\n        case 0xcf:\n        case 0xc4:\n        case 0xcc:\n        case 0xda:\n        case 0xdb:\n        case 0xdc:\n        case 0xdd:\n        case 0xde:\n        case 0xdf:\n        case 0xe0:\n        case 0xe1:\n        case 0xe2:\n        case 0xe3:\n        case 0xe4:\n        case 0xe5:\n        case 0xe6:\n        case 0xe7:\n        case 0xe8:\n        case 0xe9:\n        case 0xea:\n        case 0xeb:\n        case 0xec:\n        case 0xed:\n        case 0xee:\n        case 0xef:\n        case 0xfe:\n          markerLength = stream.getUint16();\n          if (markerLength > 2) {\n            stream.skip(markerLength - 2);\n          } else {\n            stream.skip(-2);\n          }\n          break;\n      }\n      if (foundEOI) {\n        break;\n      }\n    }\n    const length = stream.pos - startPos;\n    if (b === -1) {\n      warn(\"Inline DCTDecode image stream: \" + \"EOI marker not found, searching for /EI/ instead.\");\n      stream.skip(-length);\n      return this.findDefaultInlineStreamEnd(stream);\n    }\n    this.inlineStreamSkipEI(stream);\n    return length;\n  }\n  findASCII85DecodeInlineStreamEnd(stream) {\n    const TILDE = 0x7e,\n      GT = 0x3e;\n    const startPos = stream.pos;\n    let ch;\n    while ((ch = stream.getByte()) !== -1) {\n      if (ch === TILDE) {\n        const tildePos = stream.pos;\n        ch = stream.peekByte();\n        while (isWhiteSpace(ch)) {\n          stream.skip();\n          ch = stream.peekByte();\n        }\n        if (ch === GT) {\n          stream.skip();\n          break;\n        }\n        if (stream.pos > tildePos) {\n          const maybeEI = stream.peekBytes(2);\n          if (maybeEI[0] === 0x45 && maybeEI[1] === 0x49) {\n            break;\n          }\n        }\n      }\n    }\n    const length = stream.pos - startPos;\n    if (ch === -1) {\n      warn(\"Inline ASCII85Decode image stream: \" + \"EOD marker not found, searching for /EI/ instead.\");\n      stream.skip(-length);\n      return this.findDefaultInlineStreamEnd(stream);\n    }\n    this.inlineStreamSkipEI(stream);\n    return length;\n  }\n  findASCIIHexDecodeInlineStreamEnd(stream) {\n    const GT = 0x3e;\n    const startPos = stream.pos;\n    let ch;\n    while ((ch = stream.getByte()) !== -1) {\n      if (ch === GT) {\n        break;\n      }\n    }\n    const length = stream.pos - startPos;\n    if (ch === -1) {\n      warn(\"Inline ASCIIHexDecode image stream: \" + \"EOD marker not found, searching for /EI/ instead.\");\n      stream.skip(-length);\n      return this.findDefaultInlineStreamEnd(stream);\n    }\n    this.inlineStreamSkipEI(stream);\n    return length;\n  }\n  inlineStreamSkipEI(stream) {\n    const E = 0x45,\n      I = 0x49;\n    let state = 0,\n      ch;\n    while ((ch = stream.getByte()) !== -1) {\n      if (state === 0) {\n        state = ch === E ? 1 : 0;\n      } else if (state === 1) {\n        state = ch === I ? 2 : 0;\n      } else if (state === 2) {\n        break;\n      }\n    }\n  }\n  makeInlineImage(cipherTransform) {\n    const lexer = this.lexer;\n    const stream = lexer.stream;\n    const dictMap = Object.create(null);\n    let dictLength;\n    while (!isCmd(this.buf1, \"ID\") && this.buf1 !== EOF) {\n      if (!(this.buf1 instanceof Name)) {\n        throw new FormatError(\"Dictionary key must be a name object\");\n      }\n      const key = this.buf1.name;\n      this.shift();\n      if (this.buf1 === EOF) {\n        break;\n      }\n      dictMap[key] = this.getObj(cipherTransform);\n    }\n    if (lexer.beginInlineImagePos !== -1) {\n      dictLength = stream.pos - lexer.beginInlineImagePos;\n    }\n    const filter = this.xref.fetchIfRef(dictMap.F || dictMap.Filter);\n    let filterName;\n    if (filter instanceof Name) {\n      filterName = filter.name;\n    } else if (Array.isArray(filter)) {\n      const filterZero = this.xref.fetchIfRef(filter[0]);\n      if (filterZero instanceof Name) {\n        filterName = filterZero.name;\n      }\n    }\n    const startPos = stream.pos;\n    let length;\n    switch (filterName) {\n      case \"DCT\":\n      case \"DCTDecode\":\n        length = this.findDCTDecodeInlineStreamEnd(stream);\n        break;\n      case \"A85\":\n      case \"ASCII85Decode\":\n        length = this.findASCII85DecodeInlineStreamEnd(stream);\n        break;\n      case \"AHx\":\n      case \"ASCIIHexDecode\":\n        length = this.findASCIIHexDecodeInlineStreamEnd(stream);\n        break;\n      default:\n        length = this.findDefaultInlineStreamEnd(stream);\n    }\n    let cacheKey;\n    if (length < MAX_LENGTH_TO_CACHE && dictLength > 0) {\n      const initialStreamPos = stream.pos;\n      stream.pos = lexer.beginInlineImagePos;\n      cacheKey = getInlineImageCacheKey(stream.getBytes(dictLength + length));\n      stream.pos = initialStreamPos;\n      const cacheEntry = this.imageCache[cacheKey];\n      if (cacheEntry !== undefined) {\n        this.buf2 = Cmd.get(\"EI\");\n        this.shift();\n        cacheEntry.reset();\n        return cacheEntry;\n      }\n    }\n    const dict = new Dict(this.xref);\n    for (const key in dictMap) {\n      dict.set(key, dictMap[key]);\n    }\n    let imageStream = stream.makeSubStream(startPos, length, dict);\n    if (cipherTransform) {\n      imageStream = cipherTransform.createStream(imageStream, length);\n    }\n    imageStream = this.filter(imageStream, dict, length);\n    imageStream.dict = dict;\n    if (cacheKey !== undefined) {\n      imageStream.cacheKey = `inline_img_${++this._imageId}`;\n      this.imageCache[cacheKey] = imageStream;\n    }\n    this.buf2 = Cmd.get(\"EI\");\n    this.shift();\n    return imageStream;\n  }\n  #findStreamLength(startPos) {\n    const {\n      stream\n    } = this.lexer;\n    stream.pos = startPos;\n    const SCAN_BLOCK_LENGTH = 2048;\n    const signatureLength = \"endstream\".length;\n    const END_SIGNATURE = new Uint8Array([0x65, 0x6e, 0x64]);\n    const endLength = END_SIGNATURE.length;\n    const PARTIAL_SIGNATURE = [new Uint8Array([0x73, 0x74, 0x72, 0x65, 0x61, 0x6d]), new Uint8Array([0x73, 0x74, 0x65, 0x61, 0x6d]), new Uint8Array([0x73, 0x74, 0x72, 0x65, 0x61])];\n    const normalLength = signatureLength - endLength;\n    while (stream.pos < stream.end) {\n      const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH);\n      const scanLength = scanBytes.length - signatureLength;\n      if (scanLength <= 0) {\n        break;\n      }\n      let pos = 0;\n      while (pos < scanLength) {\n        let j = 0;\n        while (j < endLength && scanBytes[pos + j] === END_SIGNATURE[j]) {\n          j++;\n        }\n        if (j >= endLength) {\n          let found = false;\n          for (const part of PARTIAL_SIGNATURE) {\n            const partLen = part.length;\n            let k = 0;\n            while (k < partLen && scanBytes[pos + j + k] === part[k]) {\n              k++;\n            }\n            if (k >= normalLength) {\n              found = true;\n              break;\n            }\n            if (k >= partLen) {\n              const lastByte = scanBytes[pos + j + k];\n              if (isWhiteSpace(lastByte)) {\n                info(`Found \"${bytesToString([...END_SIGNATURE, ...part])}\" when ` + \"searching for endstream command.\");\n                found = true;\n              }\n              break;\n            }\n          }\n          if (found) {\n            stream.pos += pos;\n            return stream.pos - startPos;\n          }\n        }\n        pos++;\n      }\n      stream.pos += scanLength;\n    }\n    return -1;\n  }\n  makeStream(dict, cipherTransform) {\n    const lexer = this.lexer;\n    let stream = lexer.stream;\n    lexer.skipToNextLine();\n    const startPos = stream.pos - 1;\n    let length = dict.get(\"Length\");\n    if (!Number.isInteger(length)) {\n      info(`Bad length \"${length && length.toString()}\" in stream.`);\n      length = 0;\n    }\n    stream.pos = startPos + length;\n    lexer.nextChar();\n    if (this.tryShift() && isCmd(this.buf2, \"endstream\")) {\n      this.shift();\n    } else {\n      length = this.#findStreamLength(startPos);\n      if (length < 0) {\n        throw new FormatError(\"Missing endstream command.\");\n      }\n      lexer.nextChar();\n      this.shift();\n      this.shift();\n    }\n    this.shift();\n    stream = stream.makeSubStream(startPos, length, dict);\n    if (cipherTransform) {\n      stream = cipherTransform.createStream(stream, length);\n    }\n    stream = this.filter(stream, dict, length);\n    stream.dict = dict;\n    return stream;\n  }\n  filter(stream, dict, length) {\n    let filter = dict.get(\"F\", \"Filter\");\n    let params = dict.get(\"DP\", \"DecodeParms\");\n    if (filter instanceof Name) {\n      if (Array.isArray(params)) {\n        warn(\"/DecodeParms should not be an Array, when /Filter is a Name.\");\n      }\n      return this.makeFilter(stream, filter.name, length, params);\n    }\n    let maybeLength = length;\n    if (Array.isArray(filter)) {\n      const filterArray = filter;\n      const paramsArray = params;\n      for (let i = 0, ii = filterArray.length; i < ii; ++i) {\n        filter = this.xref.fetchIfRef(filterArray[i]);\n        if (!(filter instanceof Name)) {\n          throw new FormatError(`Bad filter name \"${filter}\"`);\n        }\n        params = null;\n        if (Array.isArray(paramsArray) && i in paramsArray) {\n          params = this.xref.fetchIfRef(paramsArray[i]);\n        }\n        stream = this.makeFilter(stream, filter.name, maybeLength, params);\n        maybeLength = null;\n      }\n    }\n    return stream;\n  }\n  makeFilter(stream, name, maybeLength, params) {\n    if (maybeLength === 0) {\n      warn(`Empty \"${name}\" stream.`);\n      return new NullStream();\n    }\n    try {\n      switch (name) {\n        case \"Fl\":\n        case \"FlateDecode\":\n          if (params) {\n            return new PredictorStream(new FlateStream(stream, maybeLength), maybeLength, params);\n          }\n          return new FlateStream(stream, maybeLength);\n        case \"LZW\":\n        case \"LZWDecode\":\n          let earlyChange = 1;\n          if (params) {\n            if (params.has(\"EarlyChange\")) {\n              earlyChange = params.get(\"EarlyChange\");\n            }\n            return new PredictorStream(new LZWStream(stream, maybeLength, earlyChange), maybeLength, params);\n          }\n          return new LZWStream(stream, maybeLength, earlyChange);\n        case \"DCT\":\n        case \"DCTDecode\":\n          return new JpegStream(stream, maybeLength, params);\n        case \"JPX\":\n        case \"JPXDecode\":\n          return new JpxStream(stream, maybeLength, params);\n        case \"A85\":\n        case \"ASCII85Decode\":\n          return new Ascii85Stream(stream, maybeLength);\n        case \"AHx\":\n        case \"ASCIIHexDecode\":\n          return new AsciiHexStream(stream, maybeLength);\n        case \"CCF\":\n        case \"CCITTFaxDecode\":\n          return new CCITTFaxStream(stream, maybeLength, params);\n        case \"RL\":\n        case \"RunLengthDecode\":\n          return new RunLengthStream(stream, maybeLength);\n        case \"JBIG2Decode\":\n          return new Jbig2Stream(stream, maybeLength, params);\n      }\n      warn(`Filter \"${name}\" is not supported.`);\n      return stream;\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(`Invalid stream: \"${ex}\"`);\n      return new NullStream();\n    }\n  }\n}\nconst specialChars = [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 0, 0, 0, 0, 0, 2, 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, 0, 0, 0, 0, 0, 0, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\nfunction toHexDigit(ch) {\n  if (ch >= 0x30 && ch <= 0x39) {\n    return ch & 0x0f;\n  }\n  if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) {\n    return (ch & 0x0f) + 9;\n  }\n  return -1;\n}\nclass Lexer {\n  constructor(stream, knownCommands = null) {\n    this.stream = stream;\n    this.nextChar();\n    this.strBuf = [];\n    this.knownCommands = knownCommands;\n    this._hexStringNumWarn = 0;\n    this.beginInlineImagePos = -1;\n  }\n  nextChar() {\n    return this.currentChar = this.stream.getByte();\n  }\n  peekChar() {\n    return this.stream.peekByte();\n  }\n  getNumber() {\n    let ch = this.currentChar;\n    let eNotation = false;\n    let divideBy = 0;\n    let sign = 1;\n    if (ch === 0x2d) {\n      sign = -1;\n      ch = this.nextChar();\n      if (ch === 0x2d) {\n        ch = this.nextChar();\n      }\n    } else if (ch === 0x2b) {\n      ch = this.nextChar();\n    }\n    if (ch === 0x0a || ch === 0x0d) {\n      do {\n        ch = this.nextChar();\n      } while (ch === 0x0a || ch === 0x0d);\n    }\n    if (ch === 0x2e) {\n      divideBy = 10;\n      ch = this.nextChar();\n    }\n    if (ch < 0x30 || ch > 0x39) {\n      const msg = `Invalid number: ${String.fromCharCode(ch)} (charCode ${ch})`;\n      if (isWhiteSpace(ch) || ch === -1) {\n        info(`Lexer.getNumber - \"${msg}\".`);\n        return 0;\n      }\n      throw new FormatError(msg);\n    }\n    let baseValue = ch - 0x30;\n    let powerValue = 0;\n    let powerValueSign = 1;\n    while ((ch = this.nextChar()) >= 0) {\n      if (ch >= 0x30 && ch <= 0x39) {\n        const currentDigit = ch - 0x30;\n        if (eNotation) {\n          powerValue = powerValue * 10 + currentDigit;\n        } else {\n          if (divideBy !== 0) {\n            divideBy *= 10;\n          }\n          baseValue = baseValue * 10 + currentDigit;\n        }\n      } else if (ch === 0x2e) {\n        if (divideBy === 0) {\n          divideBy = 1;\n        } else {\n          break;\n        }\n      } else if (ch === 0x2d) {\n        warn(\"Badly formatted number: minus sign in the middle\");\n      } else if (ch === 0x45 || ch === 0x65) {\n        ch = this.peekChar();\n        if (ch === 0x2b || ch === 0x2d) {\n          powerValueSign = ch === 0x2d ? -1 : 1;\n          this.nextChar();\n        } else if (ch < 0x30 || ch > 0x39) {\n          break;\n        }\n        eNotation = true;\n      } else {\n        break;\n      }\n    }\n    if (divideBy !== 0) {\n      baseValue /= divideBy;\n    }\n    if (eNotation) {\n      baseValue *= 10 ** (powerValueSign * powerValue);\n    }\n    return sign * baseValue;\n  }\n  getString() {\n    let numParen = 1;\n    let done = false;\n    const strBuf = this.strBuf;\n    strBuf.length = 0;\n    let ch = this.nextChar();\n    while (true) {\n      let charBuffered = false;\n      switch (ch | 0) {\n        case -1:\n          warn(\"Unterminated string\");\n          done = true;\n          break;\n        case 0x28:\n          ++numParen;\n          strBuf.push(\"(\");\n          break;\n        case 0x29:\n          if (--numParen === 0) {\n            this.nextChar();\n            done = true;\n          } else {\n            strBuf.push(\")\");\n          }\n          break;\n        case 0x5c:\n          ch = this.nextChar();\n          switch (ch) {\n            case -1:\n              warn(\"Unterminated string\");\n              done = true;\n              break;\n            case 0x6e:\n              strBuf.push(\"\\n\");\n              break;\n            case 0x72:\n              strBuf.push(\"\\r\");\n              break;\n            case 0x74:\n              strBuf.push(\"\\t\");\n              break;\n            case 0x62:\n              strBuf.push(\"\\b\");\n              break;\n            case 0x66:\n              strBuf.push(\"\\f\");\n              break;\n            case 0x5c:\n            case 0x28:\n            case 0x29:\n              strBuf.push(String.fromCharCode(ch));\n              break;\n            case 0x30:\n            case 0x31:\n            case 0x32:\n            case 0x33:\n            case 0x34:\n            case 0x35:\n            case 0x36:\n            case 0x37:\n              let x = ch & 0x0f;\n              ch = this.nextChar();\n              charBuffered = true;\n              if (ch >= 0x30 && ch <= 0x37) {\n                x = (x << 3) + (ch & 0x0f);\n                ch = this.nextChar();\n                if (ch >= 0x30 && ch <= 0x37) {\n                  charBuffered = false;\n                  x = (x << 3) + (ch & 0x0f);\n                }\n              }\n              strBuf.push(String.fromCharCode(x));\n              break;\n            case 0x0d:\n              if (this.peekChar() === 0x0a) {\n                this.nextChar();\n              }\n              break;\n            case 0x0a:\n              break;\n            default:\n              strBuf.push(String.fromCharCode(ch));\n              break;\n          }\n          break;\n        default:\n          strBuf.push(String.fromCharCode(ch));\n          break;\n      }\n      if (done) {\n        break;\n      }\n      if (!charBuffered) {\n        ch = this.nextChar();\n      }\n    }\n    return strBuf.join(\"\");\n  }\n  getName() {\n    let ch, previousCh;\n    const strBuf = this.strBuf;\n    strBuf.length = 0;\n    while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {\n      if (ch === 0x23) {\n        ch = this.nextChar();\n        if (specialChars[ch]) {\n          warn(\"Lexer_getName: \" + \"NUMBER SIGN (#) should be followed by a hexadecimal number.\");\n          strBuf.push(\"#\");\n          break;\n        }\n        const x = toHexDigit(ch);\n        if (x !== -1) {\n          previousCh = ch;\n          ch = this.nextChar();\n          const x2 = toHexDigit(ch);\n          if (x2 === -1) {\n            warn(`Lexer_getName: Illegal digit (${String.fromCharCode(ch)}) ` + \"in hexadecimal number.\");\n            strBuf.push(\"#\", String.fromCharCode(previousCh));\n            if (specialChars[ch]) {\n              break;\n            }\n            strBuf.push(String.fromCharCode(ch));\n            continue;\n          }\n          strBuf.push(String.fromCharCode(x << 4 | x2));\n        } else {\n          strBuf.push(\"#\", String.fromCharCode(ch));\n        }\n      } else {\n        strBuf.push(String.fromCharCode(ch));\n      }\n    }\n    if (strBuf.length > 127) {\n      warn(`Name token is longer than allowed by the spec: ${strBuf.length}`);\n    }\n    return Name.get(strBuf.join(\"\"));\n  }\n  _hexStringWarn(ch) {\n    const MAX_HEX_STRING_NUM_WARN = 5;\n    if (this._hexStringNumWarn++ === MAX_HEX_STRING_NUM_WARN) {\n      warn(\"getHexString - ignoring additional invalid characters.\");\n      return;\n    }\n    if (this._hexStringNumWarn > MAX_HEX_STRING_NUM_WARN) {\n      return;\n    }\n    warn(`getHexString - ignoring invalid character: ${ch}`);\n  }\n  getHexString() {\n    const strBuf = this.strBuf;\n    strBuf.length = 0;\n    let ch = this.currentChar;\n    let isFirstHex = true;\n    let firstDigit, secondDigit;\n    this._hexStringNumWarn = 0;\n    while (true) {\n      if (ch < 0) {\n        warn(\"Unterminated hex string\");\n        break;\n      } else if (ch === 0x3e) {\n        this.nextChar();\n        break;\n      } else if (specialChars[ch] === 1) {\n        ch = this.nextChar();\n        continue;\n      } else {\n        if (isFirstHex) {\n          firstDigit = toHexDigit(ch);\n          if (firstDigit === -1) {\n            this._hexStringWarn(ch);\n            ch = this.nextChar();\n            continue;\n          }\n        } else {\n          secondDigit = toHexDigit(ch);\n          if (secondDigit === -1) {\n            this._hexStringWarn(ch);\n            ch = this.nextChar();\n            continue;\n          }\n          strBuf.push(String.fromCharCode(firstDigit << 4 | secondDigit));\n        }\n        isFirstHex = !isFirstHex;\n        ch = this.nextChar();\n      }\n    }\n    return strBuf.join(\"\");\n  }\n  getObj() {\n    let comment = false;\n    let ch = this.currentChar;\n    while (true) {\n      if (ch < 0) {\n        return EOF;\n      }\n      if (comment) {\n        if (ch === 0x0a || ch === 0x0d) {\n          comment = false;\n        }\n      } else if (ch === 0x25) {\n        comment = true;\n      } else if (specialChars[ch] !== 1) {\n        break;\n      }\n      ch = this.nextChar();\n    }\n    switch (ch | 0) {\n      case 0x30:\n      case 0x31:\n      case 0x32:\n      case 0x33:\n      case 0x34:\n      case 0x35:\n      case 0x36:\n      case 0x37:\n      case 0x38:\n      case 0x39:\n      case 0x2b:\n      case 0x2d:\n      case 0x2e:\n        return this.getNumber();\n      case 0x28:\n        return this.getString();\n      case 0x2f:\n        return this.getName();\n      case 0x5b:\n        this.nextChar();\n        return Cmd.get(\"[\");\n      case 0x5d:\n        this.nextChar();\n        return Cmd.get(\"]\");\n      case 0x3c:\n        ch = this.nextChar();\n        if (ch === 0x3c) {\n          this.nextChar();\n          return Cmd.get(\"<<\");\n        }\n        return this.getHexString();\n      case 0x3e:\n        ch = this.nextChar();\n        if (ch === 0x3e) {\n          this.nextChar();\n          return Cmd.get(\">>\");\n        }\n        return Cmd.get(\">\");\n      case 0x7b:\n        this.nextChar();\n        return Cmd.get(\"{\");\n      case 0x7d:\n        this.nextChar();\n        return Cmd.get(\"}\");\n      case 0x29:\n        this.nextChar();\n        throw new FormatError(`Illegal character: ${ch}`);\n    }\n    let str = String.fromCharCode(ch);\n    if (ch < 0x20 || ch > 0x7f) {\n      const nextCh = this.peekChar();\n      if (nextCh >= 0x20 && nextCh <= 0x7f) {\n        this.nextChar();\n        return Cmd.get(str);\n      }\n    }\n    const knownCommands = this.knownCommands;\n    let knownCommandFound = knownCommands?.[str] !== undefined;\n    while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {\n      const possibleCommand = str + String.fromCharCode(ch);\n      if (knownCommandFound && knownCommands[possibleCommand] === undefined) {\n        break;\n      }\n      if (str.length === 128) {\n        throw new FormatError(`Command token too long: ${str.length}`);\n      }\n      str = possibleCommand;\n      knownCommandFound = knownCommands?.[str] !== undefined;\n    }\n    if (str === \"true\") {\n      return true;\n    }\n    if (str === \"false\") {\n      return false;\n    }\n    if (str === \"null\") {\n      return null;\n    }\n    if (str === \"BI\") {\n      this.beginInlineImagePos = this.stream.pos;\n    }\n    return Cmd.get(str);\n  }\n  skipToNextLine() {\n    let ch = this.currentChar;\n    while (ch >= 0) {\n      if (ch === 0x0d) {\n        ch = this.nextChar();\n        if (ch === 0x0a) {\n          this.nextChar();\n        }\n        break;\n      } else if (ch === 0x0a) {\n        this.nextChar();\n        break;\n      }\n      ch = this.nextChar();\n    }\n  }\n}\nclass Linearization {\n  static create(stream) {\n    function getInt(linDict, name, allowZeroValue = false) {\n      const obj = linDict.get(name);\n      if (Number.isInteger(obj) && (allowZeroValue ? obj >= 0 : obj > 0)) {\n        return obj;\n      }\n      throw new Error(`The \"${name}\" parameter in the linearization ` + \"dictionary is invalid.\");\n    }\n    function getHints(linDict) {\n      const hints = linDict.get(\"H\");\n      let hintsLength;\n      if (Array.isArray(hints) && ((hintsLength = hints.length) === 2 || hintsLength === 4)) {\n        for (let index = 0; index < hintsLength; index++) {\n          const hint = hints[index];\n          if (!(Number.isInteger(hint) && hint > 0)) {\n            throw new Error(`Hint (${index}) in the linearization dictionary is invalid.`);\n          }\n        }\n        return hints;\n      }\n      throw new Error(\"Hint array in the linearization dictionary is invalid.\");\n    }\n    const parser = new Parser({\n      lexer: new Lexer(stream),\n      xref: null\n    });\n    const obj1 = parser.getObj();\n    const obj2 = parser.getObj();\n    const obj3 = parser.getObj();\n    const linDict = parser.getObj();\n    let obj, length;\n    if (!(Number.isInteger(obj1) && Number.isInteger(obj2) && isCmd(obj3, \"obj\") && linDict instanceof Dict && typeof (obj = linDict.get(\"Linearized\")) === \"number\" && obj > 0)) {\n      return null;\n    } else if ((length = getInt(linDict, \"L\")) !== stream.length) {\n      throw new Error('The \"L\" parameter in the linearization dictionary ' + \"does not equal the stream length.\");\n    }\n    return {\n      length,\n      hints: getHints(linDict),\n      objectNumberFirst: getInt(linDict, \"O\"),\n      endFirst: getInt(linDict, \"E\"),\n      numPages: getInt(linDict, \"N\"),\n      mainXRefEntriesOffset: getInt(linDict, \"T\"),\n      pageFirst: linDict.has(\"P\") ? getInt(linDict, \"P\", true) : 0\n    };\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/cmap.js\n\n\n\n\n\n\n\nconst BUILT_IN_CMAPS = [\"Adobe-GB1-UCS2\", \"Adobe-CNS1-UCS2\", \"Adobe-Japan1-UCS2\", \"Adobe-Korea1-UCS2\", \"78-EUC-H\", \"78-EUC-V\", \"78-H\", \"78-RKSJ-H\", \"78-RKSJ-V\", \"78-V\", \"78ms-RKSJ-H\", \"78ms-RKSJ-V\", \"83pv-RKSJ-H\", \"90ms-RKSJ-H\", \"90ms-RKSJ-V\", \"90msp-RKSJ-H\", \"90msp-RKSJ-V\", \"90pv-RKSJ-H\", \"90pv-RKSJ-V\", \"Add-H\", \"Add-RKSJ-H\", \"Add-RKSJ-V\", \"Add-V\", \"Adobe-CNS1-0\", \"Adobe-CNS1-1\", \"Adobe-CNS1-2\", \"Adobe-CNS1-3\", \"Adobe-CNS1-4\", \"Adobe-CNS1-5\", \"Adobe-CNS1-6\", \"Adobe-GB1-0\", \"Adobe-GB1-1\", \"Adobe-GB1-2\", \"Adobe-GB1-3\", \"Adobe-GB1-4\", \"Adobe-GB1-5\", \"Adobe-Japan1-0\", \"Adobe-Japan1-1\", \"Adobe-Japan1-2\", \"Adobe-Japan1-3\", \"Adobe-Japan1-4\", \"Adobe-Japan1-5\", \"Adobe-Japan1-6\", \"Adobe-Korea1-0\", \"Adobe-Korea1-1\", \"Adobe-Korea1-2\", \"B5-H\", \"B5-V\", \"B5pc-H\", \"B5pc-V\", \"CNS-EUC-H\", \"CNS-EUC-V\", \"CNS1-H\", \"CNS1-V\", \"CNS2-H\", \"CNS2-V\", \"ETHK-B5-H\", \"ETHK-B5-V\", \"ETen-B5-H\", \"ETen-B5-V\", \"ETenms-B5-H\", \"ETenms-B5-V\", \"EUC-H\", \"EUC-V\", \"Ext-H\", \"Ext-RKSJ-H\", \"Ext-RKSJ-V\", \"Ext-V\", \"GB-EUC-H\", \"GB-EUC-V\", \"GB-H\", \"GB-V\", \"GBK-EUC-H\", \"GBK-EUC-V\", \"GBK2K-H\", \"GBK2K-V\", \"GBKp-EUC-H\", \"GBKp-EUC-V\", \"GBT-EUC-H\", \"GBT-EUC-V\", \"GBT-H\", \"GBT-V\", \"GBTpc-EUC-H\", \"GBTpc-EUC-V\", \"GBpc-EUC-H\", \"GBpc-EUC-V\", \"H\", \"HKdla-B5-H\", \"HKdla-B5-V\", \"HKdlb-B5-H\", \"HKdlb-B5-V\", \"HKgccs-B5-H\", \"HKgccs-B5-V\", \"HKm314-B5-H\", \"HKm314-B5-V\", \"HKm471-B5-H\", \"HKm471-B5-V\", \"HKscs-B5-H\", \"HKscs-B5-V\", \"Hankaku\", \"Hiragana\", \"KSC-EUC-H\", \"KSC-EUC-V\", \"KSC-H\", \"KSC-Johab-H\", \"KSC-Johab-V\", \"KSC-V\", \"KSCms-UHC-H\", \"KSCms-UHC-HW-H\", \"KSCms-UHC-HW-V\", \"KSCms-UHC-V\", \"KSCpc-EUC-H\", \"KSCpc-EUC-V\", \"Katakana\", \"NWP-H\", \"NWP-V\", \"RKSJ-H\", \"RKSJ-V\", \"Roman\", \"UniCNS-UCS2-H\", \"UniCNS-UCS2-V\", \"UniCNS-UTF16-H\", \"UniCNS-UTF16-V\", \"UniCNS-UTF32-H\", \"UniCNS-UTF32-V\", \"UniCNS-UTF8-H\", \"UniCNS-UTF8-V\", \"UniGB-UCS2-H\", \"UniGB-UCS2-V\", \"UniGB-UTF16-H\", \"UniGB-UTF16-V\", \"UniGB-UTF32-H\", \"UniGB-UTF32-V\", \"UniGB-UTF8-H\", \"UniGB-UTF8-V\", \"UniJIS-UCS2-H\", \"UniJIS-UCS2-HW-H\", \"UniJIS-UCS2-HW-V\", \"UniJIS-UCS2-V\", \"UniJIS-UTF16-H\", \"UniJIS-UTF16-V\", \"UniJIS-UTF32-H\", \"UniJIS-UTF32-V\", \"UniJIS-UTF8-H\", \"UniJIS-UTF8-V\", \"UniJIS2004-UTF16-H\", \"UniJIS2004-UTF16-V\", \"UniJIS2004-UTF32-H\", \"UniJIS2004-UTF32-V\", \"UniJIS2004-UTF8-H\", \"UniJIS2004-UTF8-V\", \"UniJISPro-UCS2-HW-V\", \"UniJISPro-UCS2-V\", \"UniJISPro-UTF8-V\", \"UniJISX0213-UTF32-H\", \"UniJISX0213-UTF32-V\", \"UniJISX02132004-UTF32-H\", \"UniJISX02132004-UTF32-V\", \"UniKS-UCS2-H\", \"UniKS-UCS2-V\", \"UniKS-UTF16-H\", \"UniKS-UTF16-V\", \"UniKS-UTF32-H\", \"UniKS-UTF32-V\", \"UniKS-UTF8-H\", \"UniKS-UTF8-V\", \"V\", \"WP-Symbol\"];\nconst MAX_MAP_RANGE = 2 ** 24 - 1;\nclass CMap {\n  constructor(builtInCMap = false) {\n    this.codespaceRanges = [[], [], [], []];\n    this.numCodespaceRanges = 0;\n    this._map = [];\n    this.name = \"\";\n    this.vertical = false;\n    this.useCMap = null;\n    this.builtInCMap = builtInCMap;\n  }\n  addCodespaceRange(n, low, high) {\n    this.codespaceRanges[n - 1].push(low, high);\n    this.numCodespaceRanges++;\n  }\n  mapCidRange(low, high, dstLow) {\n    if (high - low > MAX_MAP_RANGE) {\n      throw new Error(\"mapCidRange - ignoring data above MAX_MAP_RANGE.\");\n    }\n    while (low <= high) {\n      this._map[low++] = dstLow++;\n    }\n  }\n  mapBfRange(low, high, dstLow) {\n    if (high - low > MAX_MAP_RANGE) {\n      throw new Error(\"mapBfRange - ignoring data above MAX_MAP_RANGE.\");\n    }\n    const lastByte = dstLow.length - 1;\n    while (low <= high) {\n      this._map[low++] = dstLow;\n      const nextCharCode = dstLow.charCodeAt(lastByte) + 1;\n      if (nextCharCode > 0xff) {\n        dstLow = dstLow.substring(0, lastByte - 1) + String.fromCharCode(dstLow.charCodeAt(lastByte - 1) + 1) + \"\\x00\";\n        continue;\n      }\n      dstLow = dstLow.substring(0, lastByte) + String.fromCharCode(nextCharCode);\n    }\n  }\n  mapBfRangeToArray(low, high, array) {\n    if (high - low > MAX_MAP_RANGE) {\n      throw new Error(\"mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.\");\n    }\n    const ii = array.length;\n    let i = 0;\n    while (low <= high && i < ii) {\n      this._map[low] = array[i++];\n      ++low;\n    }\n  }\n  mapOne(src, dst) {\n    this._map[src] = dst;\n  }\n  lookup(code) {\n    return this._map[code];\n  }\n  contains(code) {\n    return this._map[code] !== undefined;\n  }\n  forEach(callback) {\n    const map = this._map;\n    const length = map.length;\n    if (length <= 0x10000) {\n      for (let i = 0; i < length; i++) {\n        if (map[i] !== undefined) {\n          callback(i, map[i]);\n        }\n      }\n    } else {\n      for (const i in map) {\n        callback(i, map[i]);\n      }\n    }\n  }\n  charCodeOf(value) {\n    const map = this._map;\n    if (map.length <= 0x10000) {\n      return map.indexOf(value);\n    }\n    for (const charCode in map) {\n      if (map[charCode] === value) {\n        return charCode | 0;\n      }\n    }\n    return -1;\n  }\n  getMap() {\n    return this._map;\n  }\n  readCharCode(str, offset, out) {\n    let c = 0;\n    const codespaceRanges = this.codespaceRanges;\n    for (let n = 0, nn = codespaceRanges.length; n < nn; n++) {\n      c = (c << 8 | str.charCodeAt(offset + n)) >>> 0;\n      const codespaceRange = codespaceRanges[n];\n      for (let k = 0, kk = codespaceRange.length; k < kk;) {\n        const low = codespaceRange[k++];\n        const high = codespaceRange[k++];\n        if (c >= low && c <= high) {\n          out.charcode = c;\n          out.length = n + 1;\n          return;\n        }\n      }\n    }\n    out.charcode = 0;\n    out.length = 1;\n  }\n  getCharCodeLength(charCode) {\n    const codespaceRanges = this.codespaceRanges;\n    for (let n = 0, nn = codespaceRanges.length; n < nn; n++) {\n      const codespaceRange = codespaceRanges[n];\n      for (let k = 0, kk = codespaceRange.length; k < kk;) {\n        const low = codespaceRange[k++];\n        const high = codespaceRange[k++];\n        if (charCode >= low && charCode <= high) {\n          return n + 1;\n        }\n      }\n    }\n    return 1;\n  }\n  get length() {\n    return this._map.length;\n  }\n  get isIdentityCMap() {\n    if (!(this.name === \"Identity-H\" || this.name === \"Identity-V\")) {\n      return false;\n    }\n    if (this._map.length !== 0x10000) {\n      return false;\n    }\n    for (let i = 0; i < 0x10000; i++) {\n      if (this._map[i] !== i) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\nclass IdentityCMap extends CMap {\n  constructor(vertical, n) {\n    super();\n    this.vertical = vertical;\n    this.addCodespaceRange(n, 0, 0xffff);\n  }\n  mapCidRange(low, high, dstLow) {\n    unreachable(\"should not call mapCidRange\");\n  }\n  mapBfRange(low, high, dstLow) {\n    unreachable(\"should not call mapBfRange\");\n  }\n  mapBfRangeToArray(low, high, array) {\n    unreachable(\"should not call mapBfRangeToArray\");\n  }\n  mapOne(src, dst) {\n    unreachable(\"should not call mapCidOne\");\n  }\n  lookup(code) {\n    return Number.isInteger(code) && code <= 0xffff ? code : undefined;\n  }\n  contains(code) {\n    return Number.isInteger(code) && code <= 0xffff;\n  }\n  forEach(callback) {\n    for (let i = 0; i <= 0xffff; i++) {\n      callback(i, i);\n    }\n  }\n  charCodeOf(value) {\n    return Number.isInteger(value) && value <= 0xffff ? value : -1;\n  }\n  getMap() {\n    const map = new Array(0x10000);\n    for (let i = 0; i <= 0xffff; i++) {\n      map[i] = i;\n    }\n    return map;\n  }\n  get length() {\n    return 0x10000;\n  }\n  get isIdentityCMap() {\n    unreachable(\"should not access .isIdentityCMap\");\n  }\n}\nfunction strToInt(str) {\n  let a = 0;\n  for (let i = 0; i < str.length; i++) {\n    a = a << 8 | str.charCodeAt(i);\n  }\n  return a >>> 0;\n}\nfunction expectString(obj) {\n  if (typeof obj !== \"string\") {\n    throw new FormatError(\"Malformed CMap: expected string.\");\n  }\n}\nfunction expectInt(obj) {\n  if (!Number.isInteger(obj)) {\n    throw new FormatError(\"Malformed CMap: expected int.\");\n  }\n}\nfunction parseBfChar(cMap, lexer) {\n  while (true) {\n    let obj = lexer.getObj();\n    if (obj === EOF) {\n      break;\n    }\n    if (isCmd(obj, \"endbfchar\")) {\n      return;\n    }\n    expectString(obj);\n    const src = strToInt(obj);\n    obj = lexer.getObj();\n    expectString(obj);\n    const dst = obj;\n    cMap.mapOne(src, dst);\n  }\n}\nfunction parseBfRange(cMap, lexer) {\n  while (true) {\n    let obj = lexer.getObj();\n    if (obj === EOF) {\n      break;\n    }\n    if (isCmd(obj, \"endbfrange\")) {\n      return;\n    }\n    expectString(obj);\n    const low = strToInt(obj);\n    obj = lexer.getObj();\n    expectString(obj);\n    const high = strToInt(obj);\n    obj = lexer.getObj();\n    if (Number.isInteger(obj) || typeof obj === \"string\") {\n      const dstLow = Number.isInteger(obj) ? String.fromCharCode(obj) : obj;\n      cMap.mapBfRange(low, high, dstLow);\n    } else if (isCmd(obj, \"[\")) {\n      obj = lexer.getObj();\n      const array = [];\n      while (!isCmd(obj, \"]\") && obj !== EOF) {\n        array.push(obj);\n        obj = lexer.getObj();\n      }\n      cMap.mapBfRangeToArray(low, high, array);\n    } else {\n      break;\n    }\n  }\n  throw new FormatError(\"Invalid bf range.\");\n}\nfunction parseCidChar(cMap, lexer) {\n  while (true) {\n    let obj = lexer.getObj();\n    if (obj === EOF) {\n      break;\n    }\n    if (isCmd(obj, \"endcidchar\")) {\n      return;\n    }\n    expectString(obj);\n    const src = strToInt(obj);\n    obj = lexer.getObj();\n    expectInt(obj);\n    const dst = obj;\n    cMap.mapOne(src, dst);\n  }\n}\nfunction parseCidRange(cMap, lexer) {\n  while (true) {\n    let obj = lexer.getObj();\n    if (obj === EOF) {\n      break;\n    }\n    if (isCmd(obj, \"endcidrange\")) {\n      return;\n    }\n    expectString(obj);\n    const low = strToInt(obj);\n    obj = lexer.getObj();\n    expectString(obj);\n    const high = strToInt(obj);\n    obj = lexer.getObj();\n    expectInt(obj);\n    const dstLow = obj;\n    cMap.mapCidRange(low, high, dstLow);\n  }\n}\nfunction parseCodespaceRange(cMap, lexer) {\n  while (true) {\n    let obj = lexer.getObj();\n    if (obj === EOF) {\n      break;\n    }\n    if (isCmd(obj, \"endcodespacerange\")) {\n      return;\n    }\n    if (typeof obj !== \"string\") {\n      break;\n    }\n    const low = strToInt(obj);\n    obj = lexer.getObj();\n    if (typeof obj !== \"string\") {\n      break;\n    }\n    const high = strToInt(obj);\n    cMap.addCodespaceRange(obj.length, low, high);\n  }\n  throw new FormatError(\"Invalid codespace range.\");\n}\nfunction parseWMode(cMap, lexer) {\n  const obj = lexer.getObj();\n  if (Number.isInteger(obj)) {\n    cMap.vertical = !!obj;\n  }\n}\nfunction parseCMapName(cMap, lexer) {\n  const obj = lexer.getObj();\n  if (obj instanceof Name) {\n    cMap.name = obj.name;\n  }\n}\nasync function parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap) {\n  let previous, embeddedUseCMap;\n  objLoop: while (true) {\n    try {\n      const obj = lexer.getObj();\n      if (obj === EOF) {\n        break;\n      } else if (obj instanceof Name) {\n        if (obj.name === \"WMode\") {\n          parseWMode(cMap, lexer);\n        } else if (obj.name === \"CMapName\") {\n          parseCMapName(cMap, lexer);\n        }\n        previous = obj;\n      } else if (obj instanceof Cmd) {\n        switch (obj.cmd) {\n          case \"endcmap\":\n            break objLoop;\n          case \"usecmap\":\n            if (previous instanceof Name) {\n              embeddedUseCMap = previous.name;\n            }\n            break;\n          case \"begincodespacerange\":\n            parseCodespaceRange(cMap, lexer);\n            break;\n          case \"beginbfchar\":\n            parseBfChar(cMap, lexer);\n            break;\n          case \"begincidchar\":\n            parseCidChar(cMap, lexer);\n            break;\n          case \"beginbfrange\":\n            parseBfRange(cMap, lexer);\n            break;\n          case \"begincidrange\":\n            parseCidRange(cMap, lexer);\n            break;\n        }\n      }\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(\"Invalid cMap data: \" + ex);\n      continue;\n    }\n  }\n  if (!useCMap && embeddedUseCMap) {\n    useCMap = embeddedUseCMap;\n  }\n  if (useCMap) {\n    return extendCMap(cMap, fetchBuiltInCMap, useCMap);\n  }\n  return cMap;\n}\nasync function extendCMap(cMap, fetchBuiltInCMap, useCMap) {\n  cMap.useCMap = await createBuiltInCMap(useCMap, fetchBuiltInCMap);\n  if (cMap.numCodespaceRanges === 0) {\n    const useCodespaceRanges = cMap.useCMap.codespaceRanges;\n    for (let i = 0; i < useCodespaceRanges.length; i++) {\n      cMap.codespaceRanges[i] = useCodespaceRanges[i].slice();\n    }\n    cMap.numCodespaceRanges = cMap.useCMap.numCodespaceRanges;\n  }\n  cMap.useCMap.forEach(function (key, value) {\n    if (!cMap.contains(key)) {\n      cMap.mapOne(key, cMap.useCMap.lookup(key));\n    }\n  });\n  return cMap;\n}\nasync function createBuiltInCMap(name, fetchBuiltInCMap) {\n  if (name === \"Identity-H\") {\n    return new IdentityCMap(false, 2);\n  } else if (name === \"Identity-V\") {\n    return new IdentityCMap(true, 2);\n  }\n  if (!BUILT_IN_CMAPS.includes(name)) {\n    throw new Error(\"Unknown CMap name: \" + name);\n  }\n  if (!fetchBuiltInCMap) {\n    throw new Error(\"Built-in CMap parameters are not provided.\");\n  }\n  const {\n    cMapData,\n    compressionType\n  } = await fetchBuiltInCMap(name);\n  const cMap = new CMap(true);\n  if (compressionType === CMapCompressionType.BINARY) {\n    return new BinaryCMapReader().process(cMapData, cMap, useCMap => extendCMap(cMap, fetchBuiltInCMap, useCMap));\n  }\n  if (compressionType === CMapCompressionType.NONE) {\n    const lexer = new Lexer(new Stream(cMapData));\n    return parseCMap(cMap, lexer, fetchBuiltInCMap, null);\n  }\n  throw new Error(`Invalid CMap \"compressionType\" value: ${compressionType}`);\n}\nclass CMapFactory {\n  static async create({\n    encoding,\n    fetchBuiltInCMap,\n    useCMap\n  }) {\n    if (encoding instanceof Name) {\n      return createBuiltInCMap(encoding.name, fetchBuiltInCMap);\n    } else if (encoding instanceof BaseStream) {\n      const parsedCMap = await parseCMap(new CMap(), new Lexer(encoding), fetchBuiltInCMap, useCMap);\n      if (parsedCMap.isIdentityCMap) {\n        return createBuiltInCMap(parsedCMap.name, fetchBuiltInCMap);\n      }\n      return parsedCMap;\n    }\n    throw new Error(\"Encoding required.\");\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/charsets.js\nconst 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\"];\nconst 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\"];\nconst 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\"];\n\n;// CONCATENATED MODULE: ./src/core/encodings.js\nconst 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\"];\nconst MacExpertEncoding = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"space\", \"exclamsmall\", \"Hungarumlautsmall\", \"centoldstyle\", \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\", \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\", \"onedotenleader\", \"comma\", \"hyphen\", \"period\", \"fraction\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\", \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\", \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"colon\", \"semicolon\", \"\", \"threequartersemdash\", \"\", \"questionsmall\", \"\", \"\", \"\", \"\", \"Ethsmall\", \"\", \"\", \"onequarter\", \"onehalf\", \"threequarters\", \"oneeighth\", \"threeeighths\", \"fiveeighths\", \"seveneighths\", \"onethird\", \"twothirds\", \"\", \"\", \"\", \"\", \"\", \"\", \"ff\", \"fi\", \"fl\", \"ffi\", \"ffl\", \"parenleftinferior\", \"\", \"parenrightinferior\", \"Circumflexsmall\", \"hypheninferior\", \"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\", \"\", \"\", \"asuperior\", \"centsuperior\", \"\", \"\", \"\", \"\", \"Aacutesmall\", \"Agravesmall\", \"Acircumflexsmall\", \"Adieresissmall\", \"Atildesmall\", \"Aringsmall\", \"Ccedillasmall\", \"Eacutesmall\", \"Egravesmall\", \"Ecircumflexsmall\", \"Edieresissmall\", \"Iacutesmall\", \"Igravesmall\", \"Icircumflexsmall\", \"Idieresissmall\", \"Ntildesmall\", \"Oacutesmall\", \"Ogravesmall\", \"Ocircumflexsmall\", \"Odieresissmall\", \"Otildesmall\", \"Uacutesmall\", \"Ugravesmall\", \"Ucircumflexsmall\", \"Udieresissmall\", \"\", \"eightsuperior\", \"fourinferior\", \"threeinferior\", \"sixinferior\", \"eightinferior\", \"seveninferior\", \"Scaronsmall\", \"\", \"centinferior\", \"twoinferior\", \"\", \"Dieresissmall\", \"\", \"Caronsmall\", \"osuperior\", \"fiveinferior\", \"\", \"commainferior\", \"periodinferior\", \"Yacutesmall\", \"\", \"dollarinferior\", \"\", \"\", \"Thornsmall\", \"\", \"nineinferior\", \"zeroinferior\", \"Zcaronsmall\", \"AEsmall\", \"Oslashsmall\", \"questiondownsmall\", \"oneinferior\", \"Lslashsmall\", \"\", \"\", \"\", \"\", \"\", \"\", \"Cedillasmall\", \"\", \"\", \"\", \"\", \"\", \"OEsmall\", \"figuredash\", \"hyphensuperior\", \"\", \"\", \"\", \"\", \"exclamdownsmall\", \"\", \"Ydieresissmall\", \"\", \"onesuperior\", \"twosuperior\", \"threesuperior\", \"foursuperior\", \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"ninesuperior\", \"zerosuperior\", \"\", \"esuperior\", \"rsuperior\", \"tsuperior\", \"\", \"\", \"isuperior\", \"ssuperior\", \"dsuperior\", \"\", \"\", \"\", \"\", \"\", \"lsuperior\", \"Ogoneksmall\", \"Brevesmall\", \"Macronsmall\", \"bsuperior\", \"nsuperior\", \"msuperior\", \"commasuperior\", \"periodsuperior\", \"Dotaccentsmall\", \"Ringsmall\", \"\", \"\", \"\", \"\"];\nconst MacRomanEncoding = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"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\", \"space\", \"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\"];\nconst 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\", \"\", \"\", \"\", \"\"];\nconst WinAnsiEncoding = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"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\", \"bullet\", \"Euro\", \"bullet\", \"quotesinglbase\", \"florin\", \"quotedblbase\", \"ellipsis\", \"dagger\", \"daggerdbl\", \"circumflex\", \"perthousand\", \"Scaron\", \"guilsinglleft\", \"OE\", \"bullet\", \"Zcaron\", \"bullet\", \"bullet\", \"quoteleft\", \"quoteright\", \"quotedblleft\", \"quotedblright\", \"bullet\", \"endash\", \"emdash\", \"tilde\", \"trademark\", \"scaron\", \"guilsinglright\", \"oe\", \"bullet\", \"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\"];\nconst SymbolSetEncoding = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"space\", \"exclam\", \"universal\", \"numbersign\", \"existential\", \"percent\", \"ampersand\", \"suchthat\", \"parenleft\", \"parenright\", \"asteriskmath\", \"plus\", \"comma\", \"minus\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"congruent\", \"Alpha\", \"Beta\", \"Chi\", \"Delta\", \"Epsilon\", \"Phi\", \"Gamma\", \"Eta\", \"Iota\", \"theta1\", \"Kappa\", \"Lambda\", \"Mu\", \"Nu\", \"Omicron\", \"Pi\", \"Theta\", \"Rho\", \"Sigma\", \"Tau\", \"Upsilon\", \"sigma1\", \"Omega\", \"Xi\", \"Psi\", \"Zeta\", \"bracketleft\", \"therefore\", \"bracketright\", \"perpendicular\", \"underscore\", \"radicalex\", \"alpha\", \"beta\", \"chi\", \"delta\", \"epsilon\", \"phi\", \"gamma\", \"eta\", \"iota\", \"phi1\", \"kappa\", \"lambda\", \"mu\", \"nu\", \"omicron\", \"pi\", \"theta\", \"rho\", \"sigma\", \"tau\", \"upsilon\", \"omega1\", \"omega\", \"xi\", \"psi\", \"zeta\", \"braceleft\", \"bar\", \"braceright\", \"similar\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"Euro\", \"Upsilon1\", \"minute\", \"lessequal\", \"fraction\", \"infinity\", \"florin\", \"club\", \"diamond\", \"heart\", \"spade\", \"arrowboth\", \"arrowleft\", \"arrowup\", \"arrowright\", \"arrowdown\", \"degree\", \"plusminus\", \"second\", \"greaterequal\", \"multiply\", \"proportional\", \"partialdiff\", \"bullet\", \"divide\", \"notequal\", \"equivalence\", \"approxequal\", \"ellipsis\", \"arrowvertex\", \"arrowhorizex\", \"carriagereturn\", \"aleph\", \"Ifraktur\", \"Rfraktur\", \"weierstrass\", \"circlemultiply\", \"circleplus\", \"emptyset\", \"intersection\", \"union\", \"propersuperset\", \"reflexsuperset\", \"notsubset\", \"propersubset\", \"reflexsubset\", \"element\", \"notelement\", \"angle\", \"gradient\", \"registerserif\", \"copyrightserif\", \"trademarkserif\", \"product\", \"radical\", \"dotmath\", \"logicalnot\", \"logicaland\", \"logicalor\", \"arrowdblboth\", \"arrowdblleft\", \"arrowdblup\", \"arrowdblright\", \"arrowdbldown\", \"lozenge\", \"angleleft\", \"registersans\", \"copyrightsans\", \"trademarksans\", \"summation\", \"parenlefttp\", \"parenleftex\", \"parenleftbt\", \"bracketlefttp\", \"bracketleftex\", \"bracketleftbt\", \"bracelefttp\", \"braceleftmid\", \"braceleftbt\", \"braceex\", \"\", \"angleright\", \"integral\", \"integraltp\", \"integralex\", \"integralbt\", \"parenrighttp\", \"parenrightex\", \"parenrightbt\", \"bracketrighttp\", \"bracketrightex\", \"bracketrightbt\", \"bracerighttp\", \"bracerightmid\", \"bracerightbt\", \"\"];\nconst ZapfDingbatsEncoding = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"space\", \"a1\", \"a2\", \"a202\", \"a3\", \"a4\", \"a5\", \"a119\", \"a118\", \"a117\", \"a11\", \"a12\", \"a13\", \"a14\", \"a15\", \"a16\", \"a105\", \"a17\", \"a18\", \"a19\", \"a20\", \"a21\", \"a22\", \"a23\", \"a24\", \"a25\", \"a26\", \"a27\", \"a28\", \"a6\", \"a7\", \"a8\", \"a9\", \"a10\", \"a29\", \"a30\", \"a31\", \"a32\", \"a33\", \"a34\", \"a35\", \"a36\", \"a37\", \"a38\", \"a39\", \"a40\", \"a41\", \"a42\", \"a43\", \"a44\", \"a45\", \"a46\", \"a47\", \"a48\", \"a49\", \"a50\", \"a51\", \"a52\", \"a53\", \"a54\", \"a55\", \"a56\", \"a57\", \"a58\", \"a59\", \"a60\", \"a61\", \"a62\", \"a63\", \"a64\", \"a65\", \"a66\", \"a67\", \"a68\", \"a69\", \"a70\", \"a71\", \"a72\", \"a73\", \"a74\", \"a203\", \"a75\", \"a204\", \"a76\", \"a77\", \"a78\", \"a79\", \"a81\", \"a82\", \"a83\", \"a84\", \"a97\", \"a98\", \"a99\", \"a100\", \"\", \"a89\", \"a90\", \"a93\", \"a94\", \"a91\", \"a92\", \"a205\", \"a85\", \"a206\", \"a86\", \"a87\", \"a88\", \"a95\", \"a96\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"a101\", \"a102\", \"a103\", \"a104\", \"a106\", \"a107\", \"a108\", \"a112\", \"a111\", \"a110\", \"a109\", \"a120\", \"a121\", \"a122\", \"a123\", \"a124\", \"a125\", \"a126\", \"a127\", \"a128\", \"a129\", \"a130\", \"a131\", \"a132\", \"a133\", \"a134\", \"a135\", \"a136\", \"a137\", \"a138\", \"a139\", \"a140\", \"a141\", \"a142\", \"a143\", \"a144\", \"a145\", \"a146\", \"a147\", \"a148\", \"a149\", \"a150\", \"a151\", \"a152\", \"a153\", \"a154\", \"a155\", \"a156\", \"a157\", \"a158\", \"a159\", \"a160\", \"a161\", \"a163\", \"a164\", \"a196\", \"a165\", \"a192\", \"a166\", \"a167\", \"a168\", \"a169\", \"a170\", \"a171\", \"a172\", \"a173\", \"a162\", \"a174\", \"a175\", \"a176\", \"a177\", \"a178\", \"a179\", \"a193\", \"a180\", \"a199\", \"a181\", \"a200\", \"a182\", \"\", \"a201\", \"a183\", \"a184\", \"a197\", \"a185\", \"a194\", \"a198\", \"a186\", \"a195\", \"a187\", \"a188\", \"a189\", \"a190\", \"a191\", \"\"];\nfunction getEncoding(encodingName) {\n  switch (encodingName) {\n    case \"WinAnsiEncoding\":\n      return WinAnsiEncoding;\n    case \"StandardEncoding\":\n      return StandardEncoding;\n    case \"MacRomanEncoding\":\n      return MacRomanEncoding;\n    case \"SymbolSetEncoding\":\n      return SymbolSetEncoding;\n    case \"ZapfDingbatsEncoding\":\n      return ZapfDingbatsEncoding;\n    case \"ExpertEncoding\":\n      return ExpertEncoding;\n    case \"MacExpertEncoding\":\n      return MacExpertEncoding;\n    default:\n      return null;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/cff_parser.js\n\n\n\nconst MAX_SUBR_NESTING = 10;\nconst CFFStandardStrings = [\".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\"];\nconst NUM_STANDARD_CFF_STRINGS = 391;\nconst CharstringValidationData = [null, {\n  id: \"hstem\",\n  min: 2,\n  stackClearing: true,\n  stem: true\n}, null, {\n  id: \"vstem\",\n  min: 2,\n  stackClearing: true,\n  stem: true\n}, {\n  id: \"vmoveto\",\n  min: 1,\n  stackClearing: true\n}, {\n  id: \"rlineto\",\n  min: 2,\n  resetStack: true\n}, {\n  id: \"hlineto\",\n  min: 1,\n  resetStack: true\n}, {\n  id: \"vlineto\",\n  min: 1,\n  resetStack: true\n}, {\n  id: \"rrcurveto\",\n  min: 6,\n  resetStack: true\n}, null, {\n  id: \"callsubr\",\n  min: 1,\n  undefStack: true\n}, {\n  id: \"return\",\n  min: 0,\n  undefStack: true\n}, null, null, {\n  id: \"endchar\",\n  min: 0,\n  stackClearing: true\n}, null, null, null, {\n  id: \"hstemhm\",\n  min: 2,\n  stackClearing: true,\n  stem: true\n}, {\n  id: \"hintmask\",\n  min: 0,\n  stackClearing: true\n}, {\n  id: \"cntrmask\",\n  min: 0,\n  stackClearing: true\n}, {\n  id: \"rmoveto\",\n  min: 2,\n  stackClearing: true\n}, {\n  id: \"hmoveto\",\n  min: 1,\n  stackClearing: true\n}, {\n  id: \"vstemhm\",\n  min: 2,\n  stackClearing: true,\n  stem: true\n}, {\n  id: \"rcurveline\",\n  min: 8,\n  resetStack: true\n}, {\n  id: \"rlinecurve\",\n  min: 8,\n  resetStack: true\n}, {\n  id: \"vvcurveto\",\n  min: 4,\n  resetStack: true\n}, {\n  id: \"hhcurveto\",\n  min: 4,\n  resetStack: true\n}, null, {\n  id: \"callgsubr\",\n  min: 1,\n  undefStack: true\n}, {\n  id: \"vhcurveto\",\n  min: 4,\n  resetStack: true\n}, {\n  id: \"hvcurveto\",\n  min: 4,\n  resetStack: true\n}];\nconst CharstringValidationData12 = [null, null, null, {\n  id: \"and\",\n  min: 2,\n  stackDelta: -1\n}, {\n  id: \"or\",\n  min: 2,\n  stackDelta: -1\n}, {\n  id: \"not\",\n  min: 1,\n  stackDelta: 0\n}, null, null, null, {\n  id: \"abs\",\n  min: 1,\n  stackDelta: 0\n}, {\n  id: \"add\",\n  min: 2,\n  stackDelta: -1,\n  stackFn(stack, index) {\n    stack[index - 2] = stack[index - 2] + stack[index - 1];\n  }\n}, {\n  id: \"sub\",\n  min: 2,\n  stackDelta: -1,\n  stackFn(stack, index) {\n    stack[index - 2] = stack[index - 2] - stack[index - 1];\n  }\n}, {\n  id: \"div\",\n  min: 2,\n  stackDelta: -1,\n  stackFn(stack, index) {\n    stack[index - 2] = stack[index - 2] / stack[index - 1];\n  }\n}, null, {\n  id: \"neg\",\n  min: 1,\n  stackDelta: 0,\n  stackFn(stack, index) {\n    stack[index - 1] = -stack[index - 1];\n  }\n}, {\n  id: \"eq\",\n  min: 2,\n  stackDelta: -1\n}, null, null, {\n  id: \"drop\",\n  min: 1,\n  stackDelta: -1\n}, null, {\n  id: \"put\",\n  min: 2,\n  stackDelta: -2\n}, {\n  id: \"get\",\n  min: 1,\n  stackDelta: 0\n}, {\n  id: \"ifelse\",\n  min: 4,\n  stackDelta: -3\n}, {\n  id: \"random\",\n  min: 0,\n  stackDelta: 1\n}, {\n  id: \"mul\",\n  min: 2,\n  stackDelta: -1,\n  stackFn(stack, index) {\n    stack[index - 2] = stack[index - 2] * stack[index - 1];\n  }\n}, null, {\n  id: \"sqrt\",\n  min: 1,\n  stackDelta: 0\n}, {\n  id: \"dup\",\n  min: 1,\n  stackDelta: 1\n}, {\n  id: \"exch\",\n  min: 2,\n  stackDelta: 0\n}, {\n  id: \"index\",\n  min: 2,\n  stackDelta: 0\n}, {\n  id: \"roll\",\n  min: 3,\n  stackDelta: -2\n}, null, null, null, {\n  id: \"hflex\",\n  min: 7,\n  resetStack: true\n}, {\n  id: \"flex\",\n  min: 13,\n  resetStack: true\n}, {\n  id: \"hflex1\",\n  min: 9,\n  resetStack: true\n}, {\n  id: \"flex1\",\n  min: 11,\n  resetStack: true\n}];\nclass CFFParser {\n  constructor(file, properties, seacAnalysisEnabled) {\n    this.bytes = file.getBytes();\n    this.properties = properties;\n    this.seacAnalysisEnabled = !!seacAnalysisEnabled;\n  }\n  parse() {\n    const properties = this.properties;\n    const cff = new CFF();\n    this.cff = cff;\n    const header = this.parseHeader();\n    const nameIndex = this.parseIndex(header.endPos);\n    const topDictIndex = this.parseIndex(nameIndex.endPos);\n    const stringIndex = this.parseIndex(topDictIndex.endPos);\n    const globalSubrIndex = this.parseIndex(stringIndex.endPos);\n    const topDictParsed = this.parseDict(topDictIndex.obj.get(0));\n    const topDict = this.createDict(CFFTopDict, topDictParsed, cff.strings);\n    cff.header = header.obj;\n    cff.names = this.parseNameIndex(nameIndex.obj);\n    cff.strings = this.parseStringIndex(stringIndex.obj);\n    cff.topDict = topDict;\n    cff.globalSubrIndex = globalSubrIndex.obj;\n    this.parsePrivateDict(cff.topDict);\n    cff.isCIDFont = topDict.hasName(\"ROS\");\n    const charStringOffset = topDict.getByName(\"CharStrings\");\n    const charStringIndex = this.parseIndex(charStringOffset).obj;\n    const fontMatrix = topDict.getByName(\"FontMatrix\");\n    if (fontMatrix) {\n      properties.fontMatrix = fontMatrix;\n    }\n    const fontBBox = topDict.getByName(\"FontBBox\");\n    if (fontBBox) {\n      properties.ascent = Math.max(fontBBox[3], fontBBox[1]);\n      properties.descent = Math.min(fontBBox[1], fontBBox[3]);\n      properties.ascentScaled = true;\n    }\n    let charset, encoding;\n    if (cff.isCIDFont) {\n      const fdArrayIndex = this.parseIndex(topDict.getByName(\"FDArray\")).obj;\n      for (let i = 0, ii = fdArrayIndex.count; i < ii; ++i) {\n        const dictRaw = fdArrayIndex.get(i);\n        const fontDict = this.createDict(CFFTopDict, this.parseDict(dictRaw), cff.strings);\n        this.parsePrivateDict(fontDict);\n        cff.fdArray.push(fontDict);\n      }\n      encoding = null;\n      charset = this.parseCharsets(topDict.getByName(\"charset\"), charStringIndex.count, cff.strings, true);\n      cff.fdSelect = this.parseFDSelect(topDict.getByName(\"FDSelect\"), charStringIndex.count);\n    } else {\n      charset = this.parseCharsets(topDict.getByName(\"charset\"), charStringIndex.count, cff.strings, false);\n      encoding = this.parseEncoding(topDict.getByName(\"Encoding\"), properties, cff.strings, charset.charset);\n    }\n    cff.charset = charset;\n    cff.encoding = encoding;\n    const charStringsAndSeacs = this.parseCharStrings({\n      charStrings: charStringIndex,\n      localSubrIndex: topDict.privateDict.subrsIndex,\n      globalSubrIndex: globalSubrIndex.obj,\n      fdSelect: cff.fdSelect,\n      fdArray: cff.fdArray,\n      privateDict: topDict.privateDict\n    });\n    cff.charStrings = charStringsAndSeacs.charStrings;\n    cff.seacs = charStringsAndSeacs.seacs;\n    cff.widths = charStringsAndSeacs.widths;\n    return cff;\n  }\n  parseHeader() {\n    let bytes = this.bytes;\n    const bytesLength = bytes.length;\n    let offset = 0;\n    while (offset < bytesLength && bytes[offset] !== 1) {\n      ++offset;\n    }\n    if (offset >= bytesLength) {\n      throw new FormatError(\"Invalid CFF header\");\n    }\n    if (offset !== 0) {\n      info(\"cff data is shifted\");\n      bytes = bytes.subarray(offset);\n      this.bytes = bytes;\n    }\n    const major = bytes[0];\n    const minor = bytes[1];\n    const hdrSize = bytes[2];\n    const offSize = bytes[3];\n    const header = new CFFHeader(major, minor, hdrSize, offSize);\n    return {\n      obj: header,\n      endPos: hdrSize\n    };\n  }\n  parseDict(dict) {\n    let pos = 0;\n    function parseOperand() {\n      let value = dict[pos++];\n      if (value === 30) {\n        return parseFloatOperand();\n      } else if (value === 28) {\n        value = dict[pos++];\n        value = (value << 24 | dict[pos++] << 16) >> 16;\n        return value;\n      } else if (value === 29) {\n        value = dict[pos++];\n        value = value << 8 | dict[pos++];\n        value = value << 8 | dict[pos++];\n        value = value << 8 | dict[pos++];\n        return value;\n      } else if (value >= 32 && value <= 246) {\n        return value - 139;\n      } else if (value >= 247 && value <= 250) {\n        return (value - 247) * 256 + dict[pos++] + 108;\n      } else if (value >= 251 && value <= 254) {\n        return -((value - 251) * 256) - dict[pos++] - 108;\n      }\n      warn('CFFParser_parseDict: \"' + value + '\" is a reserved command.');\n      return NaN;\n    }\n    function parseFloatOperand() {\n      let str = \"\";\n      const eof = 15;\n      const lookup = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \".\", \"E\", \"E-\", null, \"-\"];\n      const length = dict.length;\n      while (pos < length) {\n        const b = dict[pos++];\n        const b1 = b >> 4;\n        const b2 = b & 15;\n        if (b1 === eof) {\n          break;\n        }\n        str += lookup[b1];\n        if (b2 === eof) {\n          break;\n        }\n        str += lookup[b2];\n      }\n      return parseFloat(str);\n    }\n    let operands = [];\n    const entries = [];\n    pos = 0;\n    const end = dict.length;\n    while (pos < end) {\n      let b = dict[pos];\n      if (b <= 21) {\n        if (b === 12) {\n          b = b << 8 | dict[++pos];\n        }\n        entries.push([b, operands]);\n        operands = [];\n        ++pos;\n      } else {\n        operands.push(parseOperand());\n      }\n    }\n    return entries;\n  }\n  parseIndex(pos) {\n    const cffIndex = new CFFIndex();\n    const bytes = this.bytes;\n    const count = bytes[pos++] << 8 | bytes[pos++];\n    const offsets = [];\n    let end = pos;\n    let i, ii;\n    if (count !== 0) {\n      const offsetSize = bytes[pos++];\n      const startPos = pos + (count + 1) * offsetSize - 1;\n      for (i = 0, ii = count + 1; i < ii; ++i) {\n        let offset = 0;\n        for (let j = 0; j < offsetSize; ++j) {\n          offset <<= 8;\n          offset += bytes[pos++];\n        }\n        offsets.push(startPos + offset);\n      }\n      end = offsets[count];\n    }\n    for (i = 0, ii = offsets.length - 1; i < ii; ++i) {\n      const offsetStart = offsets[i];\n      const offsetEnd = offsets[i + 1];\n      cffIndex.add(bytes.subarray(offsetStart, offsetEnd));\n    }\n    return {\n      obj: cffIndex,\n      endPos: end\n    };\n  }\n  parseNameIndex(index) {\n    const names = [];\n    for (let i = 0, ii = index.count; i < ii; ++i) {\n      const name = index.get(i);\n      names.push(bytesToString(name));\n    }\n    return names;\n  }\n  parseStringIndex(index) {\n    const strings = new CFFStrings();\n    for (let i = 0, ii = index.count; i < ii; ++i) {\n      const data = index.get(i);\n      strings.add(bytesToString(data));\n    }\n    return strings;\n  }\n  createDict(Type, dict, strings) {\n    const cffDict = new Type(strings);\n    for (const [key, value] of dict) {\n      cffDict.setByKey(key, value);\n    }\n    return cffDict;\n  }\n  parseCharString(state, data, localSubrIndex, globalSubrIndex) {\n    if (!data || state.callDepth > MAX_SUBR_NESTING) {\n      return false;\n    }\n    let stackSize = state.stackSize;\n    const stack = state.stack;\n    let length = data.length;\n    for (let j = 0; j < length;) {\n      const value = data[j++];\n      let validationCommand = null;\n      if (value === 12) {\n        const q = data[j++];\n        if (q === 0) {\n          data[j - 2] = 139;\n          data[j - 1] = 22;\n          stackSize = 0;\n        } else {\n          validationCommand = CharstringValidationData12[q];\n        }\n      } else if (value === 28) {\n        stack[stackSize] = (data[j] << 24 | data[j + 1] << 16) >> 16;\n        j += 2;\n        stackSize++;\n      } else if (value === 14) {\n        if (stackSize >= 4) {\n          stackSize -= 4;\n          if (this.seacAnalysisEnabled) {\n            state.seac = stack.slice(stackSize, stackSize + 4);\n            return false;\n          }\n        }\n        validationCommand = CharstringValidationData[value];\n      } else if (value >= 32 && value <= 246) {\n        stack[stackSize] = value - 139;\n        stackSize++;\n      } else if (value >= 247 && value <= 254) {\n        stack[stackSize] = value < 251 ? (value - 247 << 8) + data[j] + 108 : -(value - 251 << 8) - data[j] - 108;\n        j++;\n        stackSize++;\n      } else if (value === 255) {\n        stack[stackSize] = (data[j] << 24 | data[j + 1] << 16 | data[j + 2] << 8 | data[j + 3]) / 65536;\n        j += 4;\n        stackSize++;\n      } else if (value === 19 || value === 20) {\n        state.hints += stackSize >> 1;\n        if (state.hints === 0) {\n          data.copyWithin(j - 1, j, -1);\n          j -= 1;\n          length -= 1;\n          continue;\n        }\n        j += state.hints + 7 >> 3;\n        stackSize %= 2;\n        validationCommand = CharstringValidationData[value];\n      } else if (value === 10 || value === 29) {\n        const subrsIndex = value === 10 ? localSubrIndex : globalSubrIndex;\n        if (!subrsIndex) {\n          validationCommand = CharstringValidationData[value];\n          warn(\"Missing subrsIndex for \" + validationCommand.id);\n          return false;\n        }\n        let bias = 32768;\n        if (subrsIndex.count < 1240) {\n          bias = 107;\n        } else if (subrsIndex.count < 33900) {\n          bias = 1131;\n        }\n        const subrNumber = stack[--stackSize] + bias;\n        if (subrNumber < 0 || subrNumber >= subrsIndex.count || isNaN(subrNumber)) {\n          validationCommand = CharstringValidationData[value];\n          warn(\"Out of bounds subrIndex for \" + validationCommand.id);\n          return false;\n        }\n        state.stackSize = stackSize;\n        state.callDepth++;\n        const valid = this.parseCharString(state, subrsIndex.get(subrNumber), localSubrIndex, globalSubrIndex);\n        if (!valid) {\n          return false;\n        }\n        state.callDepth--;\n        stackSize = state.stackSize;\n        continue;\n      } else if (value === 11) {\n        state.stackSize = stackSize;\n        return true;\n      } else if (value === 0 && j === data.length) {\n        data[j - 1] = 14;\n        validationCommand = CharstringValidationData[14];\n      } else if (value === 9) {\n        data.copyWithin(j - 1, j, -1);\n        j -= 1;\n        length -= 1;\n        continue;\n      } else {\n        validationCommand = CharstringValidationData[value];\n      }\n      if (validationCommand) {\n        if (validationCommand.stem) {\n          state.hints += stackSize >> 1;\n          if (value === 3 || value === 23) {\n            state.hasVStems = true;\n          } else if (state.hasVStems && (value === 1 || value === 18)) {\n            warn(\"CFF stem hints are in wrong order\");\n            data[j - 1] = value === 1 ? 3 : 23;\n          }\n        }\n        if (\"min\" in validationCommand) {\n          if (!state.undefStack && stackSize < validationCommand.min) {\n            warn(\"Not enough parameters for \" + validationCommand.id + \"; actual: \" + stackSize + \", expected: \" + validationCommand.min);\n            if (stackSize === 0) {\n              data[j - 1] = 14;\n              return true;\n            }\n            return false;\n          }\n        }\n        if (state.firstStackClearing && validationCommand.stackClearing) {\n          state.firstStackClearing = false;\n          stackSize -= validationCommand.min;\n          if (stackSize >= 2 && validationCommand.stem) {\n            stackSize %= 2;\n          } else if (stackSize > 1) {\n            warn(\"Found too many parameters for stack-clearing command\");\n          }\n          if (stackSize > 0) {\n            state.width = stack[stackSize - 1];\n          }\n        }\n        if (\"stackDelta\" in validationCommand) {\n          if (\"stackFn\" in validationCommand) {\n            validationCommand.stackFn(stack, stackSize);\n          }\n          stackSize += validationCommand.stackDelta;\n        } else if (validationCommand.stackClearing) {\n          stackSize = 0;\n        } else if (validationCommand.resetStack) {\n          stackSize = 0;\n          state.undefStack = false;\n        } else if (validationCommand.undefStack) {\n          stackSize = 0;\n          state.undefStack = true;\n          state.firstStackClearing = false;\n        }\n      }\n    }\n    if (length < data.length) {\n      data.fill(14, length);\n    }\n    state.stackSize = stackSize;\n    return true;\n  }\n  parseCharStrings({\n    charStrings,\n    localSubrIndex,\n    globalSubrIndex,\n    fdSelect,\n    fdArray,\n    privateDict\n  }) {\n    const seacs = [];\n    const widths = [];\n    const count = charStrings.count;\n    for (let i = 0; i < count; i++) {\n      const charstring = charStrings.get(i);\n      const state = {\n        callDepth: 0,\n        stackSize: 0,\n        stack: [],\n        undefStack: true,\n        hints: 0,\n        firstStackClearing: true,\n        seac: null,\n        width: null,\n        hasVStems: false\n      };\n      let valid = true;\n      let localSubrToUse = null;\n      let privateDictToUse = privateDict;\n      if (fdSelect && fdArray.length) {\n        const fdIndex = fdSelect.getFDIndex(i);\n        if (fdIndex === -1) {\n          warn(\"Glyph index is not in fd select.\");\n          valid = false;\n        }\n        if (fdIndex >= fdArray.length) {\n          warn(\"Invalid fd index for glyph index.\");\n          valid = false;\n        }\n        if (valid) {\n          privateDictToUse = fdArray[fdIndex].privateDict;\n          localSubrToUse = privateDictToUse.subrsIndex;\n        }\n      } else if (localSubrIndex) {\n        localSubrToUse = localSubrIndex;\n      }\n      if (valid) {\n        valid = this.parseCharString(state, charstring, localSubrToUse, globalSubrIndex);\n      }\n      if (state.width !== null) {\n        const nominalWidth = privateDictToUse.getByName(\"nominalWidthX\");\n        widths[i] = nominalWidth + state.width;\n      } else {\n        const defaultWidth = privateDictToUse.getByName(\"defaultWidthX\");\n        widths[i] = defaultWidth;\n      }\n      if (state.seac !== null) {\n        seacs[i] = state.seac;\n      }\n      if (!valid) {\n        charStrings.set(i, new Uint8Array([14]));\n      }\n    }\n    return {\n      charStrings,\n      seacs,\n      widths\n    };\n  }\n  emptyPrivateDictionary(parentDict) {\n    const privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings);\n    parentDict.setByKey(18, [0, 0]);\n    parentDict.privateDict = privateDict;\n  }\n  parsePrivateDict(parentDict) {\n    if (!parentDict.hasName(\"Private\")) {\n      this.emptyPrivateDictionary(parentDict);\n      return;\n    }\n    const privateOffset = parentDict.getByName(\"Private\");\n    if (!Array.isArray(privateOffset) || privateOffset.length !== 2) {\n      parentDict.removeByName(\"Private\");\n      return;\n    }\n    const size = privateOffset[0];\n    const offset = privateOffset[1];\n    if (size === 0 || offset >= this.bytes.length) {\n      this.emptyPrivateDictionary(parentDict);\n      return;\n    }\n    const privateDictEnd = offset + size;\n    const dictData = this.bytes.subarray(offset, privateDictEnd);\n    const dict = this.parseDict(dictData);\n    const privateDict = this.createDict(CFFPrivateDict, dict, parentDict.strings);\n    parentDict.privateDict = privateDict;\n    if (privateDict.getByName(\"ExpansionFactor\") === 0) {\n      privateDict.setByName(\"ExpansionFactor\", 0.06);\n    }\n    if (!privateDict.getByName(\"Subrs\")) {\n      return;\n    }\n    const subrsOffset = privateDict.getByName(\"Subrs\");\n    const relativeOffset = offset + subrsOffset;\n    if (subrsOffset === 0 || relativeOffset >= this.bytes.length) {\n      this.emptyPrivateDictionary(parentDict);\n      return;\n    }\n    const subrsIndex = this.parseIndex(relativeOffset);\n    privateDict.subrsIndex = subrsIndex.obj;\n  }\n  parseCharsets(pos, length, strings, cid) {\n    if (pos === 0) {\n      return new CFFCharset(true, CFFCharsetPredefinedTypes.ISO_ADOBE, ISOAdobeCharset);\n    } else if (pos === 1) {\n      return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT, ExpertCharset);\n    } else if (pos === 2) {\n      return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT_SUBSET, ExpertSubsetCharset);\n    }\n    const bytes = this.bytes;\n    const start = pos;\n    const format = bytes[pos++];\n    const charset = [cid ? 0 : \".notdef\"];\n    let id, count, i;\n    length -= 1;\n    switch (format) {\n      case 0:\n        for (i = 0; i < length; i++) {\n          id = bytes[pos++] << 8 | bytes[pos++];\n          charset.push(cid ? id : strings.get(id));\n        }\n        break;\n      case 1:\n        while (charset.length <= length) {\n          id = bytes[pos++] << 8 | bytes[pos++];\n          count = bytes[pos++];\n          for (i = 0; i <= count; i++) {\n            charset.push(cid ? id++ : strings.get(id++));\n          }\n        }\n        break;\n      case 2:\n        while (charset.length <= length) {\n          id = bytes[pos++] << 8 | bytes[pos++];\n          count = bytes[pos++] << 8 | bytes[pos++];\n          for (i = 0; i <= count; i++) {\n            charset.push(cid ? id++ : strings.get(id++));\n          }\n        }\n        break;\n      default:\n        throw new FormatError(\"Unknown charset format\");\n    }\n    const end = pos;\n    const raw = bytes.subarray(start, end);\n    return new CFFCharset(false, format, charset, raw);\n  }\n  parseEncoding(pos, properties, strings, charset) {\n    const encoding = Object.create(null);\n    const bytes = this.bytes;\n    let predefined = false;\n    let format, i, ii;\n    let raw = null;\n    function readSupplement() {\n      const supplementsCount = bytes[pos++];\n      for (i = 0; i < supplementsCount; i++) {\n        const code = bytes[pos++];\n        const sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff);\n        encoding[code] = charset.indexOf(strings.get(sid));\n      }\n    }\n    if (pos === 0 || pos === 1) {\n      predefined = true;\n      format = pos;\n      const baseEncoding = pos ? ExpertEncoding : StandardEncoding;\n      for (i = 0, ii = charset.length; i < ii; i++) {\n        const index = baseEncoding.indexOf(charset[i]);\n        if (index !== -1) {\n          encoding[index] = i;\n        }\n      }\n    } else {\n      const dataStart = pos;\n      format = bytes[pos++];\n      switch (format & 0x7f) {\n        case 0:\n          const glyphsCount = bytes[pos++];\n          for (i = 1; i <= glyphsCount; i++) {\n            encoding[bytes[pos++]] = i;\n          }\n          break;\n        case 1:\n          const rangesCount = bytes[pos++];\n          let gid = 1;\n          for (i = 0; i < rangesCount; i++) {\n            const start = bytes[pos++];\n            const left = bytes[pos++];\n            for (let j = start; j <= start + left; j++) {\n              encoding[j] = gid++;\n            }\n          }\n          break;\n        default:\n          throw new FormatError(`Unknown encoding format: ${format} in CFF`);\n      }\n      const dataEnd = pos;\n      if (format & 0x80) {\n        bytes[dataStart] &= 0x7f;\n        readSupplement();\n      }\n      raw = bytes.subarray(dataStart, dataEnd);\n    }\n    format &= 0x7f;\n    return new CFFEncoding(predefined, format, encoding, raw);\n  }\n  parseFDSelect(pos, length) {\n    const bytes = this.bytes;\n    const format = bytes[pos++];\n    const fdSelect = [];\n    let i;\n    switch (format) {\n      case 0:\n        for (i = 0; i < length; ++i) {\n          const id = bytes[pos++];\n          fdSelect.push(id);\n        }\n        break;\n      case 3:\n        const rangesCount = bytes[pos++] << 8 | bytes[pos++];\n        for (i = 0; i < rangesCount; ++i) {\n          let first = bytes[pos++] << 8 | bytes[pos++];\n          if (i === 0 && first !== 0) {\n            warn(\"parseFDSelect: The first range must have a first GID of 0\" + \" -- trying to recover.\");\n            first = 0;\n          }\n          const fdIndex = bytes[pos++];\n          const next = bytes[pos] << 8 | bytes[pos + 1];\n          for (let j = first; j < next; ++j) {\n            fdSelect.push(fdIndex);\n          }\n        }\n        pos += 2;\n        break;\n      default:\n        throw new FormatError(`parseFDSelect: Unknown format \"${format}\".`);\n    }\n    if (fdSelect.length !== length) {\n      throw new FormatError(\"parseFDSelect: Invalid font data.\");\n    }\n    return new CFFFDSelect(format, fdSelect);\n  }\n}\nclass CFF {\n  constructor() {\n    this.header = null;\n    this.names = [];\n    this.topDict = null;\n    this.strings = new CFFStrings();\n    this.globalSubrIndex = null;\n    this.encoding = null;\n    this.charset = null;\n    this.charStrings = null;\n    this.fdArray = [];\n    this.fdSelect = null;\n    this.isCIDFont = false;\n  }\n  duplicateFirstGlyph() {\n    if (this.charStrings.count >= 65535) {\n      warn(\"Not enough space in charstrings to duplicate first glyph.\");\n      return;\n    }\n    const glyphZero = this.charStrings.get(0);\n    this.charStrings.add(glyphZero);\n    if (this.isCIDFont) {\n      this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]);\n    }\n  }\n  hasGlyphId(id) {\n    if (id < 0 || id >= this.charStrings.count) {\n      return false;\n    }\n    const glyph = this.charStrings.get(id);\n    return glyph.length > 0;\n  }\n}\nclass CFFHeader {\n  constructor(major, minor, hdrSize, offSize) {\n    this.major = major;\n    this.minor = minor;\n    this.hdrSize = hdrSize;\n    this.offSize = offSize;\n  }\n}\nclass CFFStrings {\n  constructor() {\n    this.strings = [];\n  }\n  get(index) {\n    if (index >= 0 && index <= NUM_STANDARD_CFF_STRINGS - 1) {\n      return CFFStandardStrings[index];\n    }\n    if (index - NUM_STANDARD_CFF_STRINGS <= this.strings.length) {\n      return this.strings[index - NUM_STANDARD_CFF_STRINGS];\n    }\n    return CFFStandardStrings[0];\n  }\n  getSID(str) {\n    let index = CFFStandardStrings.indexOf(str);\n    if (index !== -1) {\n      return index;\n    }\n    index = this.strings.indexOf(str);\n    if (index !== -1) {\n      return index + NUM_STANDARD_CFF_STRINGS;\n    }\n    return -1;\n  }\n  add(value) {\n    this.strings.push(value);\n  }\n  get count() {\n    return this.strings.length;\n  }\n}\nclass CFFIndex {\n  constructor() {\n    this.objects = [];\n    this.length = 0;\n  }\n  add(data) {\n    this.length += data.length;\n    this.objects.push(data);\n  }\n  set(index, data) {\n    this.length += data.length - this.objects[index].length;\n    this.objects[index] = data;\n  }\n  get(index) {\n    return this.objects[index];\n  }\n  get count() {\n    return this.objects.length;\n  }\n}\nclass CFFDict {\n  constructor(tables, strings) {\n    this.keyToNameMap = tables.keyToNameMap;\n    this.nameToKeyMap = tables.nameToKeyMap;\n    this.defaults = tables.defaults;\n    this.types = tables.types;\n    this.opcodes = tables.opcodes;\n    this.order = tables.order;\n    this.strings = strings;\n    this.values = Object.create(null);\n  }\n  setByKey(key, value) {\n    if (!(key in this.keyToNameMap)) {\n      return false;\n    }\n    if (value.length === 0) {\n      return true;\n    }\n    for (const val of value) {\n      if (isNaN(val)) {\n        warn(`Invalid CFFDict value: \"${value}\" for key \"${key}\".`);\n        return true;\n      }\n    }\n    const type = this.types[key];\n    if (type === \"num\" || type === \"sid\" || type === \"offset\") {\n      value = value[0];\n    }\n    this.values[key] = value;\n    return true;\n  }\n  setByName(name, value) {\n    if (!(name in this.nameToKeyMap)) {\n      throw new FormatError(`Invalid dictionary name \"${name}\"`);\n    }\n    this.values[this.nameToKeyMap[name]] = value;\n  }\n  hasName(name) {\n    return this.nameToKeyMap[name] in this.values;\n  }\n  getByName(name) {\n    if (!(name in this.nameToKeyMap)) {\n      throw new FormatError(`Invalid dictionary name ${name}\"`);\n    }\n    const key = this.nameToKeyMap[name];\n    if (!(key in this.values)) {\n      return this.defaults[key];\n    }\n    return this.values[key];\n  }\n  removeByName(name) {\n    delete this.values[this.nameToKeyMap[name]];\n  }\n  static createTables(layout) {\n    const tables = {\n      keyToNameMap: {},\n      nameToKeyMap: {},\n      defaults: {},\n      types: {},\n      opcodes: {},\n      order: []\n    };\n    for (const entry of layout) {\n      const key = Array.isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0];\n      tables.keyToNameMap[key] = entry[1];\n      tables.nameToKeyMap[entry[1]] = key;\n      tables.types[key] = entry[2];\n      tables.defaults[key] = entry[3];\n      tables.opcodes[key] = Array.isArray(entry[0]) ? entry[0] : [entry[0]];\n      tables.order.push(key);\n    }\n    return tables;\n  }\n}\nconst CFFTopDictLayout = [[[12, 30], \"ROS\", [\"sid\", \"sid\", \"num\"], null], [[12, 20], \"SyntheticBase\", \"num\", 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\", \"num\", 0], [[12, 2], \"ItalicAngle\", \"num\", 0], [[12, 3], \"UnderlinePosition\", \"num\", -100], [[12, 4], \"UnderlineThickness\", \"num\", 50], [[12, 5], \"PaintType\", \"num\", 0], [[12, 6], \"CharstringType\", \"num\", 2], [[12, 7], \"FontMatrix\", [\"num\", \"num\", \"num\", \"num\", \"num\", \"num\"], [0.001, 0, 0, 0.001, 0, 0]], [13, \"UniqueID\", \"num\", null], [5, \"FontBBox\", [\"num\", \"num\", \"num\", \"num\"], [0, 0, 0, 0]], [[12, 8], \"StrokeWidth\", \"num\", 0], [14, \"XUID\", \"array\", null], [15, \"charset\", \"offset\", 0], [16, \"Encoding\", \"offset\", 0], [17, \"CharStrings\", \"offset\", 0], [18, \"Private\", [\"offset\", \"offset\"], null], [[12, 21], \"PostScript\", \"sid\", null], [[12, 22], \"BaseFontName\", \"sid\", null], [[12, 23], \"BaseFontBlend\", \"delta\", null], [[12, 31], \"CIDFontVersion\", \"num\", 0], [[12, 32], \"CIDFontRevision\", \"num\", 0], [[12, 33], \"CIDFontType\", \"num\", 0], [[12, 34], \"CIDCount\", \"num\", 8720], [[12, 35], \"UIDBase\", \"num\", null], [[12, 37], \"FDSelect\", \"offset\", null], [[12, 36], \"FDArray\", \"offset\", null], [[12, 38], \"FontName\", \"sid\", null]];\nclass CFFTopDict extends CFFDict {\n  static get tables() {\n    return shadow(this, \"tables\", this.createTables(CFFTopDictLayout));\n  }\n  constructor(strings) {\n    super(CFFTopDict.tables, strings);\n    this.privateDict = null;\n  }\n}\nconst CFFPrivateDictLayout = [[6, \"BlueValues\", \"delta\", null], [7, \"OtherBlues\", \"delta\", null], [8, \"FamilyBlues\", \"delta\", null], [9, \"FamilyOtherBlues\", \"delta\", null], [[12, 9], \"BlueScale\", \"num\", 0.039625], [[12, 10], \"BlueShift\", \"num\", 7], [[12, 11], \"BlueFuzz\", \"num\", 1], [10, \"StdHW\", \"num\", null], [11, \"StdVW\", \"num\", null], [[12, 12], \"StemSnapH\", \"delta\", null], [[12, 13], \"StemSnapV\", \"delta\", null], [[12, 14], \"ForceBold\", \"num\", 0], [[12, 17], \"LanguageGroup\", \"num\", 0], [[12, 18], \"ExpansionFactor\", \"num\", 0.06], [[12, 19], \"initialRandomSeed\", \"num\", 0], [20, \"defaultWidthX\", \"num\", 0], [21, \"nominalWidthX\", \"num\", 0], [19, \"Subrs\", \"offset\", null]];\nclass CFFPrivateDict extends CFFDict {\n  static get tables() {\n    return shadow(this, \"tables\", this.createTables(CFFPrivateDictLayout));\n  }\n  constructor(strings) {\n    super(CFFPrivateDict.tables, strings);\n    this.subrsIndex = null;\n  }\n}\nconst CFFCharsetPredefinedTypes = {\n  ISO_ADOBE: 0,\n  EXPERT: 1,\n  EXPERT_SUBSET: 2\n};\nclass CFFCharset {\n  constructor(predefined, format, charset, raw) {\n    this.predefined = predefined;\n    this.format = format;\n    this.charset = charset;\n    this.raw = raw;\n  }\n}\nclass CFFEncoding {\n  constructor(predefined, format, encoding, raw) {\n    this.predefined = predefined;\n    this.format = format;\n    this.encoding = encoding;\n    this.raw = raw;\n  }\n}\nclass CFFFDSelect {\n  constructor(format, fdSelect) {\n    this.format = format;\n    this.fdSelect = fdSelect;\n  }\n  getFDIndex(glyphIndex) {\n    if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) {\n      return -1;\n    }\n    return this.fdSelect[glyphIndex];\n  }\n}\nclass CFFOffsetTracker {\n  constructor() {\n    this.offsets = Object.create(null);\n  }\n  isTracking(key) {\n    return key in this.offsets;\n  }\n  track(key, location) {\n    if (key in this.offsets) {\n      throw new FormatError(`Already tracking location of ${key}`);\n    }\n    this.offsets[key] = location;\n  }\n  offset(value) {\n    for (const key in this.offsets) {\n      this.offsets[key] += value;\n    }\n  }\n  setEntryLocation(key, values, output) {\n    if (!(key in this.offsets)) {\n      throw new FormatError(`Not tracking location of ${key}`);\n    }\n    const data = output.data;\n    const dataOffset = this.offsets[key];\n    const size = 5;\n    for (let i = 0, ii = values.length; i < ii; ++i) {\n      const offset0 = i * size + dataOffset;\n      const offset1 = offset0 + 1;\n      const offset2 = offset0 + 2;\n      const offset3 = offset0 + 3;\n      const offset4 = offset0 + 4;\n      if (data[offset0] !== 0x1d || data[offset1] !== 0 || data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0) {\n        throw new FormatError(\"writing to an offset that is not empty\");\n      }\n      const value = values[i];\n      data[offset0] = 0x1d;\n      data[offset1] = value >> 24 & 0xff;\n      data[offset2] = value >> 16 & 0xff;\n      data[offset3] = value >> 8 & 0xff;\n      data[offset4] = value & 0xff;\n    }\n  }\n}\nclass CFFCompiler {\n  constructor(cff) {\n    this.cff = cff;\n  }\n  compile() {\n    const cff = this.cff;\n    const output = {\n      data: [],\n      length: 0,\n      add(data) {\n        try {\n          this.data.push(...data);\n        } catch {\n          this.data = this.data.concat(data);\n        }\n        this.length = this.data.length;\n      }\n    };\n    const header = this.compileHeader(cff.header);\n    output.add(header);\n    const nameIndex = this.compileNameIndex(cff.names);\n    output.add(nameIndex);\n    if (cff.isCIDFont) {\n      if (cff.topDict.hasName(\"FontMatrix\")) {\n        const base = cff.topDict.getByName(\"FontMatrix\");\n        cff.topDict.removeByName(\"FontMatrix\");\n        for (const subDict of cff.fdArray) {\n          let matrix = base.slice(0);\n          if (subDict.hasName(\"FontMatrix\")) {\n            matrix = Util.transform(matrix, subDict.getByName(\"FontMatrix\"));\n          }\n          subDict.setByName(\"FontMatrix\", matrix);\n        }\n      }\n    }\n    const xuid = cff.topDict.getByName(\"XUID\");\n    if (xuid?.length > 16) {\n      cff.topDict.removeByName(\"XUID\");\n    }\n    cff.topDict.setByName(\"charset\", 0);\n    let compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont);\n    output.add(compiled.output);\n    const topDictTracker = compiled.trackers[0];\n    const stringIndex = this.compileStringIndex(cff.strings.strings);\n    output.add(stringIndex);\n    const globalSubrIndex = this.compileIndex(cff.globalSubrIndex);\n    output.add(globalSubrIndex);\n    if (cff.encoding && cff.topDict.hasName(\"Encoding\")) {\n      if (cff.encoding.predefined) {\n        topDictTracker.setEntryLocation(\"Encoding\", [cff.encoding.format], output);\n      } else {\n        const encoding = this.compileEncoding(cff.encoding);\n        topDictTracker.setEntryLocation(\"Encoding\", [output.length], output);\n        output.add(encoding);\n      }\n    }\n    const charset = this.compileCharset(cff.charset, cff.charStrings.count, cff.strings, cff.isCIDFont);\n    topDictTracker.setEntryLocation(\"charset\", [output.length], output);\n    output.add(charset);\n    const charStrings = this.compileCharStrings(cff.charStrings);\n    topDictTracker.setEntryLocation(\"CharStrings\", [output.length], output);\n    output.add(charStrings);\n    if (cff.isCIDFont) {\n      topDictTracker.setEntryLocation(\"FDSelect\", [output.length], output);\n      const fdSelect = this.compileFDSelect(cff.fdSelect);\n      output.add(fdSelect);\n      compiled = this.compileTopDicts(cff.fdArray, output.length, true);\n      topDictTracker.setEntryLocation(\"FDArray\", [output.length], output);\n      output.add(compiled.output);\n      const fontDictTrackers = compiled.trackers;\n      this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output);\n    }\n    this.compilePrivateDicts([cff.topDict], [topDictTracker], output);\n    output.add([0]);\n    return output.data;\n  }\n  encodeNumber(value) {\n    if (Number.isInteger(value)) {\n      return this.encodeInteger(value);\n    }\n    return this.encodeFloat(value);\n  }\n  static get EncodeFloatRegExp() {\n    return shadow(this, \"EncodeFloatRegExp\", /\\.(\\d*?)(?:9{5,20}|0{5,20})\\d{0,2}(?:e(.+)|$)/);\n  }\n  encodeFloat(num) {\n    let value = num.toString();\n    const m = CFFCompiler.EncodeFloatRegExp.exec(value);\n    if (m) {\n      const epsilon = parseFloat(\"1e\" + ((m[2] ? +m[2] : 0) + m[1].length));\n      value = (Math.round(num * epsilon) / epsilon).toString();\n    }\n    let nibbles = \"\";\n    let i, ii;\n    for (i = 0, ii = value.length; i < ii; ++i) {\n      const a = value[i];\n      if (a === \"e\") {\n        nibbles += value[++i] === \"-\" ? \"c\" : \"b\";\n      } else if (a === \".\") {\n        nibbles += \"a\";\n      } else if (a === \"-\") {\n        nibbles += \"e\";\n      } else {\n        nibbles += a;\n      }\n    }\n    nibbles += nibbles.length & 1 ? \"f\" : \"ff\";\n    const out = [30];\n    for (i = 0, ii = nibbles.length; i < ii; i += 2) {\n      out.push(parseInt(nibbles.substring(i, i + 2), 16));\n    }\n    return out;\n  }\n  encodeInteger(value) {\n    let code;\n    if (value >= -107 && value <= 107) {\n      code = [value + 139];\n    } else if (value >= 108 && value <= 1131) {\n      value -= 108;\n      code = [(value >> 8) + 247, value & 0xff];\n    } else if (value >= -1131 && value <= -108) {\n      value = -value - 108;\n      code = [(value >> 8) + 251, value & 0xff];\n    } else if (value >= -32768 && value <= 32767) {\n      code = [0x1c, value >> 8 & 0xff, value & 0xff];\n    } else {\n      code = [0x1d, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff];\n    }\n    return code;\n  }\n  compileHeader(header) {\n    return [header.major, header.minor, 4, header.offSize];\n  }\n  compileNameIndex(names) {\n    const nameIndex = new CFFIndex();\n    for (const name of names) {\n      const length = Math.min(name.length, 127);\n      let sanitizedName = new Array(length);\n      for (let j = 0; j < length; j++) {\n        let char = name[j];\n        if (char < \"!\" || char > \"~\" || char === \"[\" || char === \"]\" || char === \"(\" || char === \")\" || char === \"{\" || char === \"}\" || char === \"<\" || char === \">\" || char === \"/\" || char === \"%\") {\n          char = \"_\";\n        }\n        sanitizedName[j] = char;\n      }\n      sanitizedName = sanitizedName.join(\"\");\n      if (sanitizedName === \"\") {\n        sanitizedName = \"Bad_Font_Name\";\n      }\n      nameIndex.add(stringToBytes(sanitizedName));\n    }\n    return this.compileIndex(nameIndex);\n  }\n  compileTopDicts(dicts, length, removeCidKeys) {\n    const fontDictTrackers = [];\n    let fdArrayIndex = new CFFIndex();\n    for (const fontDict of dicts) {\n      if (removeCidKeys) {\n        fontDict.removeByName(\"CIDFontVersion\");\n        fontDict.removeByName(\"CIDFontRevision\");\n        fontDict.removeByName(\"CIDFontType\");\n        fontDict.removeByName(\"CIDCount\");\n        fontDict.removeByName(\"UIDBase\");\n      }\n      const fontDictTracker = new CFFOffsetTracker();\n      const fontDictData = this.compileDict(fontDict, fontDictTracker);\n      fontDictTrackers.push(fontDictTracker);\n      fdArrayIndex.add(fontDictData);\n      fontDictTracker.offset(length);\n    }\n    fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers);\n    return {\n      trackers: fontDictTrackers,\n      output: fdArrayIndex\n    };\n  }\n  compilePrivateDicts(dicts, trackers, output) {\n    for (let i = 0, ii = dicts.length; i < ii; ++i) {\n      const fontDict = dicts[i];\n      const privateDict = fontDict.privateDict;\n      if (!privateDict || !fontDict.hasName(\"Private\")) {\n        throw new FormatError(\"There must be a private dictionary.\");\n      }\n      const privateDictTracker = new CFFOffsetTracker();\n      const privateDictData = this.compileDict(privateDict, privateDictTracker);\n      let outputLength = output.length;\n      privateDictTracker.offset(outputLength);\n      if (!privateDictData.length) {\n        outputLength = 0;\n      }\n      trackers[i].setEntryLocation(\"Private\", [privateDictData.length, outputLength], output);\n      output.add(privateDictData);\n      if (privateDict.subrsIndex && privateDict.hasName(\"Subrs\")) {\n        const subrs = this.compileIndex(privateDict.subrsIndex);\n        privateDictTracker.setEntryLocation(\"Subrs\", [privateDictData.length], output);\n        output.add(subrs);\n      }\n    }\n  }\n  compileDict(dict, offsetTracker) {\n    const out = [];\n    for (const key of dict.order) {\n      if (!(key in dict.values)) {\n        continue;\n      }\n      let values = dict.values[key];\n      let types = dict.types[key];\n      if (!Array.isArray(types)) {\n        types = [types];\n      }\n      if (!Array.isArray(values)) {\n        values = [values];\n      }\n      if (values.length === 0) {\n        continue;\n      }\n      for (let j = 0, jj = types.length; j < jj; ++j) {\n        const type = types[j];\n        const value = values[j];\n        switch (type) {\n          case \"num\":\n          case \"sid\":\n            out.push(...this.encodeNumber(value));\n            break;\n          case \"offset\":\n            const name = dict.keyToNameMap[key];\n            if (!offsetTracker.isTracking(name)) {\n              offsetTracker.track(name, out.length);\n            }\n            out.push(0x1d, 0, 0, 0, 0);\n            break;\n          case \"array\":\n          case \"delta\":\n            out.push(...this.encodeNumber(value));\n            for (let k = 1, kk = values.length; k < kk; ++k) {\n              out.push(...this.encodeNumber(values[k]));\n            }\n            break;\n          default:\n            throw new FormatError(`Unknown data type of ${type}`);\n        }\n      }\n      out.push(...dict.opcodes[key]);\n    }\n    return out;\n  }\n  compileStringIndex(strings) {\n    const stringIndex = new CFFIndex();\n    for (const string of strings) {\n      stringIndex.add(stringToBytes(string));\n    }\n    return this.compileIndex(stringIndex);\n  }\n  compileCharStrings(charStrings) {\n    const charStringsIndex = new CFFIndex();\n    for (let i = 0; i < charStrings.count; i++) {\n      const glyph = charStrings.get(i);\n      if (glyph.length === 0) {\n        charStringsIndex.add(new Uint8Array([0x8b, 0x0e]));\n        continue;\n      }\n      charStringsIndex.add(glyph);\n    }\n    return this.compileIndex(charStringsIndex);\n  }\n  compileCharset(charset, numGlyphs, strings, isCIDFont) {\n    let out;\n    const numGlyphsLessNotDef = numGlyphs - 1;\n    if (isCIDFont) {\n      out = new Uint8Array([2, 0, 0, numGlyphsLessNotDef >> 8 & 0xff, numGlyphsLessNotDef & 0xff]);\n    } else {\n      const length = 1 + numGlyphsLessNotDef * 2;\n      out = new Uint8Array(length);\n      out[0] = 0;\n      let charsetIndex = 0;\n      const numCharsets = charset.charset.length;\n      let warned = false;\n      for (let i = 1; i < out.length; i += 2) {\n        let sid = 0;\n        if (charsetIndex < numCharsets) {\n          const name = charset.charset[charsetIndex++];\n          sid = strings.getSID(name);\n          if (sid === -1) {\n            sid = 0;\n            if (!warned) {\n              warned = true;\n              warn(`Couldn't find ${name} in CFF strings`);\n            }\n          }\n        }\n        out[i] = sid >> 8 & 0xff;\n        out[i + 1] = sid & 0xff;\n      }\n    }\n    return this.compileTypedArray(out);\n  }\n  compileEncoding(encoding) {\n    return this.compileTypedArray(encoding.raw);\n  }\n  compileFDSelect(fdSelect) {\n    const format = fdSelect.format;\n    let out, i;\n    switch (format) {\n      case 0:\n        out = new Uint8Array(1 + fdSelect.fdSelect.length);\n        out[0] = format;\n        for (i = 0; i < fdSelect.fdSelect.length; i++) {\n          out[i + 1] = fdSelect.fdSelect[i];\n        }\n        break;\n      case 3:\n        const start = 0;\n        let lastFD = fdSelect.fdSelect[0];\n        const ranges = [format, 0, 0, start >> 8 & 0xff, start & 0xff, lastFD];\n        for (i = 1; i < fdSelect.fdSelect.length; i++) {\n          const currentFD = fdSelect.fdSelect[i];\n          if (currentFD !== lastFD) {\n            ranges.push(i >> 8 & 0xff, i & 0xff, currentFD);\n            lastFD = currentFD;\n          }\n        }\n        const numRanges = (ranges.length - 3) / 3;\n        ranges[1] = numRanges >> 8 & 0xff;\n        ranges[2] = numRanges & 0xff;\n        ranges.push(i >> 8 & 0xff, i & 0xff);\n        out = new Uint8Array(ranges);\n        break;\n    }\n    return this.compileTypedArray(out);\n  }\n  compileTypedArray(data) {\n    return Array.from(data);\n  }\n  compileIndex(index, trackers = []) {\n    const objects = index.objects;\n    const count = objects.length;\n    if (count === 0) {\n      return [0, 0];\n    }\n    const data = [count >> 8 & 0xff, count & 0xff];\n    let lastOffset = 1,\n      i;\n    for (i = 0; i < count; ++i) {\n      lastOffset += objects[i].length;\n    }\n    let offsetSize;\n    if (lastOffset < 0x100) {\n      offsetSize = 1;\n    } else if (lastOffset < 0x10000) {\n      offsetSize = 2;\n    } else if (lastOffset < 0x1000000) {\n      offsetSize = 3;\n    } else {\n      offsetSize = 4;\n    }\n    data.push(offsetSize);\n    let relativeOffset = 1;\n    for (i = 0; i < count + 1; i++) {\n      if (offsetSize === 1) {\n        data.push(relativeOffset & 0xff);\n      } else if (offsetSize === 2) {\n        data.push(relativeOffset >> 8 & 0xff, relativeOffset & 0xff);\n      } else if (offsetSize === 3) {\n        data.push(relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff);\n      } else {\n        data.push(relativeOffset >>> 24 & 0xff, relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff);\n      }\n      if (objects[i]) {\n        relativeOffset += objects[i].length;\n      }\n    }\n    for (i = 0; i < count; i++) {\n      if (trackers[i]) {\n        trackers[i].offset(data.length);\n      }\n      data.push(...objects[i]);\n    }\n    return data;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/glyphlist.js\n\nconst getGlyphsUnicode = getLookupTableFactory(function (t) {\n  t.A = 0x0041;\n  t.AE = 0x00c6;\n  t.AEacute = 0x01fc;\n  t.AEmacron = 0x01e2;\n  t.AEsmall = 0xf7e6;\n  t.Aacute = 0x00c1;\n  t.Aacutesmall = 0xf7e1;\n  t.Abreve = 0x0102;\n  t.Abreveacute = 0x1eae;\n  t.Abrevecyrillic = 0x04d0;\n  t.Abrevedotbelow = 0x1eb6;\n  t.Abrevegrave = 0x1eb0;\n  t.Abrevehookabove = 0x1eb2;\n  t.Abrevetilde = 0x1eb4;\n  t.Acaron = 0x01cd;\n  t.Acircle = 0x24b6;\n  t.Acircumflex = 0x00c2;\n  t.Acircumflexacute = 0x1ea4;\n  t.Acircumflexdotbelow = 0x1eac;\n  t.Acircumflexgrave = 0x1ea6;\n  t.Acircumflexhookabove = 0x1ea8;\n  t.Acircumflexsmall = 0xf7e2;\n  t.Acircumflextilde = 0x1eaa;\n  t.Acute = 0xf6c9;\n  t.Acutesmall = 0xf7b4;\n  t.Acyrillic = 0x0410;\n  t.Adblgrave = 0x0200;\n  t.Adieresis = 0x00c4;\n  t.Adieresiscyrillic = 0x04d2;\n  t.Adieresismacron = 0x01de;\n  t.Adieresissmall = 0xf7e4;\n  t.Adotbelow = 0x1ea0;\n  t.Adotmacron = 0x01e0;\n  t.Agrave = 0x00c0;\n  t.Agravesmall = 0xf7e0;\n  t.Ahookabove = 0x1ea2;\n  t.Aiecyrillic = 0x04d4;\n  t.Ainvertedbreve = 0x0202;\n  t.Alpha = 0x0391;\n  t.Alphatonos = 0x0386;\n  t.Amacron = 0x0100;\n  t.Amonospace = 0xff21;\n  t.Aogonek = 0x0104;\n  t.Aring = 0x00c5;\n  t.Aringacute = 0x01fa;\n  t.Aringbelow = 0x1e00;\n  t.Aringsmall = 0xf7e5;\n  t.Asmall = 0xf761;\n  t.Atilde = 0x00c3;\n  t.Atildesmall = 0xf7e3;\n  t.Aybarmenian = 0x0531;\n  t.B = 0x0042;\n  t.Bcircle = 0x24b7;\n  t.Bdotaccent = 0x1e02;\n  t.Bdotbelow = 0x1e04;\n  t.Becyrillic = 0x0411;\n  t.Benarmenian = 0x0532;\n  t.Beta = 0x0392;\n  t.Bhook = 0x0181;\n  t.Blinebelow = 0x1e06;\n  t.Bmonospace = 0xff22;\n  t.Brevesmall = 0xf6f4;\n  t.Bsmall = 0xf762;\n  t.Btopbar = 0x0182;\n  t.C = 0x0043;\n  t.Caarmenian = 0x053e;\n  t.Cacute = 0x0106;\n  t.Caron = 0xf6ca;\n  t.Caronsmall = 0xf6f5;\n  t.Ccaron = 0x010c;\n  t.Ccedilla = 0x00c7;\n  t.Ccedillaacute = 0x1e08;\n  t.Ccedillasmall = 0xf7e7;\n  t.Ccircle = 0x24b8;\n  t.Ccircumflex = 0x0108;\n  t.Cdot = 0x010a;\n  t.Cdotaccent = 0x010a;\n  t.Cedillasmall = 0xf7b8;\n  t.Chaarmenian = 0x0549;\n  t.Cheabkhasiancyrillic = 0x04bc;\n  t.Checyrillic = 0x0427;\n  t.Chedescenderabkhasiancyrillic = 0x04be;\n  t.Chedescendercyrillic = 0x04b6;\n  t.Chedieresiscyrillic = 0x04f4;\n  t.Cheharmenian = 0x0543;\n  t.Chekhakassiancyrillic = 0x04cb;\n  t.Cheverticalstrokecyrillic = 0x04b8;\n  t.Chi = 0x03a7;\n  t.Chook = 0x0187;\n  t.Circumflexsmall = 0xf6f6;\n  t.Cmonospace = 0xff23;\n  t.Coarmenian = 0x0551;\n  t.Csmall = 0xf763;\n  t.D = 0x0044;\n  t.DZ = 0x01f1;\n  t.DZcaron = 0x01c4;\n  t.Daarmenian = 0x0534;\n  t.Dafrican = 0x0189;\n  t.Dcaron = 0x010e;\n  t.Dcedilla = 0x1e10;\n  t.Dcircle = 0x24b9;\n  t.Dcircumflexbelow = 0x1e12;\n  t.Dcroat = 0x0110;\n  t.Ddotaccent = 0x1e0a;\n  t.Ddotbelow = 0x1e0c;\n  t.Decyrillic = 0x0414;\n  t.Deicoptic = 0x03ee;\n  t.Delta = 0x2206;\n  t.Deltagreek = 0x0394;\n  t.Dhook = 0x018a;\n  t.Dieresis = 0xf6cb;\n  t.DieresisAcute = 0xf6cc;\n  t.DieresisGrave = 0xf6cd;\n  t.Dieresissmall = 0xf7a8;\n  t.Digammagreek = 0x03dc;\n  t.Djecyrillic = 0x0402;\n  t.Dlinebelow = 0x1e0e;\n  t.Dmonospace = 0xff24;\n  t.Dotaccentsmall = 0xf6f7;\n  t.Dslash = 0x0110;\n  t.Dsmall = 0xf764;\n  t.Dtopbar = 0x018b;\n  t.Dz = 0x01f2;\n  t.Dzcaron = 0x01c5;\n  t.Dzeabkhasiancyrillic = 0x04e0;\n  t.Dzecyrillic = 0x0405;\n  t.Dzhecyrillic = 0x040f;\n  t.E = 0x0045;\n  t.Eacute = 0x00c9;\n  t.Eacutesmall = 0xf7e9;\n  t.Ebreve = 0x0114;\n  t.Ecaron = 0x011a;\n  t.Ecedillabreve = 0x1e1c;\n  t.Echarmenian = 0x0535;\n  t.Ecircle = 0x24ba;\n  t.Ecircumflex = 0x00ca;\n  t.Ecircumflexacute = 0x1ebe;\n  t.Ecircumflexbelow = 0x1e18;\n  t.Ecircumflexdotbelow = 0x1ec6;\n  t.Ecircumflexgrave = 0x1ec0;\n  t.Ecircumflexhookabove = 0x1ec2;\n  t.Ecircumflexsmall = 0xf7ea;\n  t.Ecircumflextilde = 0x1ec4;\n  t.Ecyrillic = 0x0404;\n  t.Edblgrave = 0x0204;\n  t.Edieresis = 0x00cb;\n  t.Edieresissmall = 0xf7eb;\n  t.Edot = 0x0116;\n  t.Edotaccent = 0x0116;\n  t.Edotbelow = 0x1eb8;\n  t.Efcyrillic = 0x0424;\n  t.Egrave = 0x00c8;\n  t.Egravesmall = 0xf7e8;\n  t.Eharmenian = 0x0537;\n  t.Ehookabove = 0x1eba;\n  t.Eightroman = 0x2167;\n  t.Einvertedbreve = 0x0206;\n  t.Eiotifiedcyrillic = 0x0464;\n  t.Elcyrillic = 0x041b;\n  t.Elevenroman = 0x216a;\n  t.Emacron = 0x0112;\n  t.Emacronacute = 0x1e16;\n  t.Emacrongrave = 0x1e14;\n  t.Emcyrillic = 0x041c;\n  t.Emonospace = 0xff25;\n  t.Encyrillic = 0x041d;\n  t.Endescendercyrillic = 0x04a2;\n  t.Eng = 0x014a;\n  t.Enghecyrillic = 0x04a4;\n  t.Enhookcyrillic = 0x04c7;\n  t.Eogonek = 0x0118;\n  t.Eopen = 0x0190;\n  t.Epsilon = 0x0395;\n  t.Epsilontonos = 0x0388;\n  t.Ercyrillic = 0x0420;\n  t.Ereversed = 0x018e;\n  t.Ereversedcyrillic = 0x042d;\n  t.Escyrillic = 0x0421;\n  t.Esdescendercyrillic = 0x04aa;\n  t.Esh = 0x01a9;\n  t.Esmall = 0xf765;\n  t.Eta = 0x0397;\n  t.Etarmenian = 0x0538;\n  t.Etatonos = 0x0389;\n  t.Eth = 0x00d0;\n  t.Ethsmall = 0xf7f0;\n  t.Etilde = 0x1ebc;\n  t.Etildebelow = 0x1e1a;\n  t.Euro = 0x20ac;\n  t.Ezh = 0x01b7;\n  t.Ezhcaron = 0x01ee;\n  t.Ezhreversed = 0x01b8;\n  t.F = 0x0046;\n  t.Fcircle = 0x24bb;\n  t.Fdotaccent = 0x1e1e;\n  t.Feharmenian = 0x0556;\n  t.Feicoptic = 0x03e4;\n  t.Fhook = 0x0191;\n  t.Fitacyrillic = 0x0472;\n  t.Fiveroman = 0x2164;\n  t.Fmonospace = 0xff26;\n  t.Fourroman = 0x2163;\n  t.Fsmall = 0xf766;\n  t.G = 0x0047;\n  t.GBsquare = 0x3387;\n  t.Gacute = 0x01f4;\n  t.Gamma = 0x0393;\n  t.Gammaafrican = 0x0194;\n  t.Gangiacoptic = 0x03ea;\n  t.Gbreve = 0x011e;\n  t.Gcaron = 0x01e6;\n  t.Gcedilla = 0x0122;\n  t.Gcircle = 0x24bc;\n  t.Gcircumflex = 0x011c;\n  t.Gcommaaccent = 0x0122;\n  t.Gdot = 0x0120;\n  t.Gdotaccent = 0x0120;\n  t.Gecyrillic = 0x0413;\n  t.Ghadarmenian = 0x0542;\n  t.Ghemiddlehookcyrillic = 0x0494;\n  t.Ghestrokecyrillic = 0x0492;\n  t.Gheupturncyrillic = 0x0490;\n  t.Ghook = 0x0193;\n  t.Gimarmenian = 0x0533;\n  t.Gjecyrillic = 0x0403;\n  t.Gmacron = 0x1e20;\n  t.Gmonospace = 0xff27;\n  t.Grave = 0xf6ce;\n  t.Gravesmall = 0xf760;\n  t.Gsmall = 0xf767;\n  t.Gsmallhook = 0x029b;\n  t.Gstroke = 0x01e4;\n  t.H = 0x0048;\n  t.H18533 = 0x25cf;\n  t.H18543 = 0x25aa;\n  t.H18551 = 0x25ab;\n  t.H22073 = 0x25a1;\n  t.HPsquare = 0x33cb;\n  t.Haabkhasiancyrillic = 0x04a8;\n  t.Hadescendercyrillic = 0x04b2;\n  t.Hardsigncyrillic = 0x042a;\n  t.Hbar = 0x0126;\n  t.Hbrevebelow = 0x1e2a;\n  t.Hcedilla = 0x1e28;\n  t.Hcircle = 0x24bd;\n  t.Hcircumflex = 0x0124;\n  t.Hdieresis = 0x1e26;\n  t.Hdotaccent = 0x1e22;\n  t.Hdotbelow = 0x1e24;\n  t.Hmonospace = 0xff28;\n  t.Hoarmenian = 0x0540;\n  t.Horicoptic = 0x03e8;\n  t.Hsmall = 0xf768;\n  t.Hungarumlaut = 0xf6cf;\n  t.Hungarumlautsmall = 0xf6f8;\n  t.Hzsquare = 0x3390;\n  t.I = 0x0049;\n  t.IAcyrillic = 0x042f;\n  t.IJ = 0x0132;\n  t.IUcyrillic = 0x042e;\n  t.Iacute = 0x00cd;\n  t.Iacutesmall = 0xf7ed;\n  t.Ibreve = 0x012c;\n  t.Icaron = 0x01cf;\n  t.Icircle = 0x24be;\n  t.Icircumflex = 0x00ce;\n  t.Icircumflexsmall = 0xf7ee;\n  t.Icyrillic = 0x0406;\n  t.Idblgrave = 0x0208;\n  t.Idieresis = 0x00cf;\n  t.Idieresisacute = 0x1e2e;\n  t.Idieresiscyrillic = 0x04e4;\n  t.Idieresissmall = 0xf7ef;\n  t.Idot = 0x0130;\n  t.Idotaccent = 0x0130;\n  t.Idotbelow = 0x1eca;\n  t.Iebrevecyrillic = 0x04d6;\n  t.Iecyrillic = 0x0415;\n  t.Ifraktur = 0x2111;\n  t.Igrave = 0x00cc;\n  t.Igravesmall = 0xf7ec;\n  t.Ihookabove = 0x1ec8;\n  t.Iicyrillic = 0x0418;\n  t.Iinvertedbreve = 0x020a;\n  t.Iishortcyrillic = 0x0419;\n  t.Imacron = 0x012a;\n  t.Imacroncyrillic = 0x04e2;\n  t.Imonospace = 0xff29;\n  t.Iniarmenian = 0x053b;\n  t.Iocyrillic = 0x0401;\n  t.Iogonek = 0x012e;\n  t.Iota = 0x0399;\n  t.Iotaafrican = 0x0196;\n  t.Iotadieresis = 0x03aa;\n  t.Iotatonos = 0x038a;\n  t.Ismall = 0xf769;\n  t.Istroke = 0x0197;\n  t.Itilde = 0x0128;\n  t.Itildebelow = 0x1e2c;\n  t.Izhitsacyrillic = 0x0474;\n  t.Izhitsadblgravecyrillic = 0x0476;\n  t.J = 0x004a;\n  t.Jaarmenian = 0x0541;\n  t.Jcircle = 0x24bf;\n  t.Jcircumflex = 0x0134;\n  t.Jecyrillic = 0x0408;\n  t.Jheharmenian = 0x054b;\n  t.Jmonospace = 0xff2a;\n  t.Jsmall = 0xf76a;\n  t.K = 0x004b;\n  t.KBsquare = 0x3385;\n  t.KKsquare = 0x33cd;\n  t.Kabashkircyrillic = 0x04a0;\n  t.Kacute = 0x1e30;\n  t.Kacyrillic = 0x041a;\n  t.Kadescendercyrillic = 0x049a;\n  t.Kahookcyrillic = 0x04c3;\n  t.Kappa = 0x039a;\n  t.Kastrokecyrillic = 0x049e;\n  t.Kaverticalstrokecyrillic = 0x049c;\n  t.Kcaron = 0x01e8;\n  t.Kcedilla = 0x0136;\n  t.Kcircle = 0x24c0;\n  t.Kcommaaccent = 0x0136;\n  t.Kdotbelow = 0x1e32;\n  t.Keharmenian = 0x0554;\n  t.Kenarmenian = 0x053f;\n  t.Khacyrillic = 0x0425;\n  t.Kheicoptic = 0x03e6;\n  t.Khook = 0x0198;\n  t.Kjecyrillic = 0x040c;\n  t.Klinebelow = 0x1e34;\n  t.Kmonospace = 0xff2b;\n  t.Koppacyrillic = 0x0480;\n  t.Koppagreek = 0x03de;\n  t.Ksicyrillic = 0x046e;\n  t.Ksmall = 0xf76b;\n  t.L = 0x004c;\n  t.LJ = 0x01c7;\n  t.LL = 0xf6bf;\n  t.Lacute = 0x0139;\n  t.Lambda = 0x039b;\n  t.Lcaron = 0x013d;\n  t.Lcedilla = 0x013b;\n  t.Lcircle = 0x24c1;\n  t.Lcircumflexbelow = 0x1e3c;\n  t.Lcommaaccent = 0x013b;\n  t.Ldot = 0x013f;\n  t.Ldotaccent = 0x013f;\n  t.Ldotbelow = 0x1e36;\n  t.Ldotbelowmacron = 0x1e38;\n  t.Liwnarmenian = 0x053c;\n  t.Lj = 0x01c8;\n  t.Ljecyrillic = 0x0409;\n  t.Llinebelow = 0x1e3a;\n  t.Lmonospace = 0xff2c;\n  t.Lslash = 0x0141;\n  t.Lslashsmall = 0xf6f9;\n  t.Lsmall = 0xf76c;\n  t.M = 0x004d;\n  t.MBsquare = 0x3386;\n  t.Macron = 0xf6d0;\n  t.Macronsmall = 0xf7af;\n  t.Macute = 0x1e3e;\n  t.Mcircle = 0x24c2;\n  t.Mdotaccent = 0x1e40;\n  t.Mdotbelow = 0x1e42;\n  t.Menarmenian = 0x0544;\n  t.Mmonospace = 0xff2d;\n  t.Msmall = 0xf76d;\n  t.Mturned = 0x019c;\n  t.Mu = 0x039c;\n  t.N = 0x004e;\n  t.NJ = 0x01ca;\n  t.Nacute = 0x0143;\n  t.Ncaron = 0x0147;\n  t.Ncedilla = 0x0145;\n  t.Ncircle = 0x24c3;\n  t.Ncircumflexbelow = 0x1e4a;\n  t.Ncommaaccent = 0x0145;\n  t.Ndotaccent = 0x1e44;\n  t.Ndotbelow = 0x1e46;\n  t.Nhookleft = 0x019d;\n  t.Nineroman = 0x2168;\n  t.Nj = 0x01cb;\n  t.Njecyrillic = 0x040a;\n  t.Nlinebelow = 0x1e48;\n  t.Nmonospace = 0xff2e;\n  t.Nowarmenian = 0x0546;\n  t.Nsmall = 0xf76e;\n  t.Ntilde = 0x00d1;\n  t.Ntildesmall = 0xf7f1;\n  t.Nu = 0x039d;\n  t.O = 0x004f;\n  t.OE = 0x0152;\n  t.OEsmall = 0xf6fa;\n  t.Oacute = 0x00d3;\n  t.Oacutesmall = 0xf7f3;\n  t.Obarredcyrillic = 0x04e8;\n  t.Obarreddieresiscyrillic = 0x04ea;\n  t.Obreve = 0x014e;\n  t.Ocaron = 0x01d1;\n  t.Ocenteredtilde = 0x019f;\n  t.Ocircle = 0x24c4;\n  t.Ocircumflex = 0x00d4;\n  t.Ocircumflexacute = 0x1ed0;\n  t.Ocircumflexdotbelow = 0x1ed8;\n  t.Ocircumflexgrave = 0x1ed2;\n  t.Ocircumflexhookabove = 0x1ed4;\n  t.Ocircumflexsmall = 0xf7f4;\n  t.Ocircumflextilde = 0x1ed6;\n  t.Ocyrillic = 0x041e;\n  t.Odblacute = 0x0150;\n  t.Odblgrave = 0x020c;\n  t.Odieresis = 0x00d6;\n  t.Odieresiscyrillic = 0x04e6;\n  t.Odieresissmall = 0xf7f6;\n  t.Odotbelow = 0x1ecc;\n  t.Ogoneksmall = 0xf6fb;\n  t.Ograve = 0x00d2;\n  t.Ogravesmall = 0xf7f2;\n  t.Oharmenian = 0x0555;\n  t.Ohm = 0x2126;\n  t.Ohookabove = 0x1ece;\n  t.Ohorn = 0x01a0;\n  t.Ohornacute = 0x1eda;\n  t.Ohorndotbelow = 0x1ee2;\n  t.Ohorngrave = 0x1edc;\n  t.Ohornhookabove = 0x1ede;\n  t.Ohorntilde = 0x1ee0;\n  t.Ohungarumlaut = 0x0150;\n  t.Oi = 0x01a2;\n  t.Oinvertedbreve = 0x020e;\n  t.Omacron = 0x014c;\n  t.Omacronacute = 0x1e52;\n  t.Omacrongrave = 0x1e50;\n  t.Omega = 0x2126;\n  t.Omegacyrillic = 0x0460;\n  t.Omegagreek = 0x03a9;\n  t.Omegaroundcyrillic = 0x047a;\n  t.Omegatitlocyrillic = 0x047c;\n  t.Omegatonos = 0x038f;\n  t.Omicron = 0x039f;\n  t.Omicrontonos = 0x038c;\n  t.Omonospace = 0xff2f;\n  t.Oneroman = 0x2160;\n  t.Oogonek = 0x01ea;\n  t.Oogonekmacron = 0x01ec;\n  t.Oopen = 0x0186;\n  t.Oslash = 0x00d8;\n  t.Oslashacute = 0x01fe;\n  t.Oslashsmall = 0xf7f8;\n  t.Osmall = 0xf76f;\n  t.Ostrokeacute = 0x01fe;\n  t.Otcyrillic = 0x047e;\n  t.Otilde = 0x00d5;\n  t.Otildeacute = 0x1e4c;\n  t.Otildedieresis = 0x1e4e;\n  t.Otildesmall = 0xf7f5;\n  t.P = 0x0050;\n  t.Pacute = 0x1e54;\n  t.Pcircle = 0x24c5;\n  t.Pdotaccent = 0x1e56;\n  t.Pecyrillic = 0x041f;\n  t.Peharmenian = 0x054a;\n  t.Pemiddlehookcyrillic = 0x04a6;\n  t.Phi = 0x03a6;\n  t.Phook = 0x01a4;\n  t.Pi = 0x03a0;\n  t.Piwrarmenian = 0x0553;\n  t.Pmonospace = 0xff30;\n  t.Psi = 0x03a8;\n  t.Psicyrillic = 0x0470;\n  t.Psmall = 0xf770;\n  t.Q = 0x0051;\n  t.Qcircle = 0x24c6;\n  t.Qmonospace = 0xff31;\n  t.Qsmall = 0xf771;\n  t.R = 0x0052;\n  t.Raarmenian = 0x054c;\n  t.Racute = 0x0154;\n  t.Rcaron = 0x0158;\n  t.Rcedilla = 0x0156;\n  t.Rcircle = 0x24c7;\n  t.Rcommaaccent = 0x0156;\n  t.Rdblgrave = 0x0210;\n  t.Rdotaccent = 0x1e58;\n  t.Rdotbelow = 0x1e5a;\n  t.Rdotbelowmacron = 0x1e5c;\n  t.Reharmenian = 0x0550;\n  t.Rfraktur = 0x211c;\n  t.Rho = 0x03a1;\n  t.Ringsmall = 0xf6fc;\n  t.Rinvertedbreve = 0x0212;\n  t.Rlinebelow = 0x1e5e;\n  t.Rmonospace = 0xff32;\n  t.Rsmall = 0xf772;\n  t.Rsmallinverted = 0x0281;\n  t.Rsmallinvertedsuperior = 0x02b6;\n  t.S = 0x0053;\n  t.SF010000 = 0x250c;\n  t.SF020000 = 0x2514;\n  t.SF030000 = 0x2510;\n  t.SF040000 = 0x2518;\n  t.SF050000 = 0x253c;\n  t.SF060000 = 0x252c;\n  t.SF070000 = 0x2534;\n  t.SF080000 = 0x251c;\n  t.SF090000 = 0x2524;\n  t.SF100000 = 0x2500;\n  t.SF110000 = 0x2502;\n  t.SF190000 = 0x2561;\n  t.SF200000 = 0x2562;\n  t.SF210000 = 0x2556;\n  t.SF220000 = 0x2555;\n  t.SF230000 = 0x2563;\n  t.SF240000 = 0x2551;\n  t.SF250000 = 0x2557;\n  t.SF260000 = 0x255d;\n  t.SF270000 = 0x255c;\n  t.SF280000 = 0x255b;\n  t.SF360000 = 0x255e;\n  t.SF370000 = 0x255f;\n  t.SF380000 = 0x255a;\n  t.SF390000 = 0x2554;\n  t.SF400000 = 0x2569;\n  t.SF410000 = 0x2566;\n  t.SF420000 = 0x2560;\n  t.SF430000 = 0x2550;\n  t.SF440000 = 0x256c;\n  t.SF450000 = 0x2567;\n  t.SF460000 = 0x2568;\n  t.SF470000 = 0x2564;\n  t.SF480000 = 0x2565;\n  t.SF490000 = 0x2559;\n  t.SF500000 = 0x2558;\n  t.SF510000 = 0x2552;\n  t.SF520000 = 0x2553;\n  t.SF530000 = 0x256b;\n  t.SF540000 = 0x256a;\n  t.Sacute = 0x015a;\n  t.Sacutedotaccent = 0x1e64;\n  t.Sampigreek = 0x03e0;\n  t.Scaron = 0x0160;\n  t.Scarondotaccent = 0x1e66;\n  t.Scaronsmall = 0xf6fd;\n  t.Scedilla = 0x015e;\n  t.Schwa = 0x018f;\n  t.Schwacyrillic = 0x04d8;\n  t.Schwadieresiscyrillic = 0x04da;\n  t.Scircle = 0x24c8;\n  t.Scircumflex = 0x015c;\n  t.Scommaaccent = 0x0218;\n  t.Sdotaccent = 0x1e60;\n  t.Sdotbelow = 0x1e62;\n  t.Sdotbelowdotaccent = 0x1e68;\n  t.Seharmenian = 0x054d;\n  t.Sevenroman = 0x2166;\n  t.Shaarmenian = 0x0547;\n  t.Shacyrillic = 0x0428;\n  t.Shchacyrillic = 0x0429;\n  t.Sheicoptic = 0x03e2;\n  t.Shhacyrillic = 0x04ba;\n  t.Shimacoptic = 0x03ec;\n  t.Sigma = 0x03a3;\n  t.Sixroman = 0x2165;\n  t.Smonospace = 0xff33;\n  t.Softsigncyrillic = 0x042c;\n  t.Ssmall = 0xf773;\n  t.Stigmagreek = 0x03da;\n  t.T = 0x0054;\n  t.Tau = 0x03a4;\n  t.Tbar = 0x0166;\n  t.Tcaron = 0x0164;\n  t.Tcedilla = 0x0162;\n  t.Tcircle = 0x24c9;\n  t.Tcircumflexbelow = 0x1e70;\n  t.Tcommaaccent = 0x0162;\n  t.Tdotaccent = 0x1e6a;\n  t.Tdotbelow = 0x1e6c;\n  t.Tecyrillic = 0x0422;\n  t.Tedescendercyrillic = 0x04ac;\n  t.Tenroman = 0x2169;\n  t.Tetsecyrillic = 0x04b4;\n  t.Theta = 0x0398;\n  t.Thook = 0x01ac;\n  t.Thorn = 0x00de;\n  t.Thornsmall = 0xf7fe;\n  t.Threeroman = 0x2162;\n  t.Tildesmall = 0xf6fe;\n  t.Tiwnarmenian = 0x054f;\n  t.Tlinebelow = 0x1e6e;\n  t.Tmonospace = 0xff34;\n  t.Toarmenian = 0x0539;\n  t.Tonefive = 0x01bc;\n  t.Tonesix = 0x0184;\n  t.Tonetwo = 0x01a7;\n  t.Tretroflexhook = 0x01ae;\n  t.Tsecyrillic = 0x0426;\n  t.Tshecyrillic = 0x040b;\n  t.Tsmall = 0xf774;\n  t.Twelveroman = 0x216b;\n  t.Tworoman = 0x2161;\n  t.U = 0x0055;\n  t.Uacute = 0x00da;\n  t.Uacutesmall = 0xf7fa;\n  t.Ubreve = 0x016c;\n  t.Ucaron = 0x01d3;\n  t.Ucircle = 0x24ca;\n  t.Ucircumflex = 0x00db;\n  t.Ucircumflexbelow = 0x1e76;\n  t.Ucircumflexsmall = 0xf7fb;\n  t.Ucyrillic = 0x0423;\n  t.Udblacute = 0x0170;\n  t.Udblgrave = 0x0214;\n  t.Udieresis = 0x00dc;\n  t.Udieresisacute = 0x01d7;\n  t.Udieresisbelow = 0x1e72;\n  t.Udieresiscaron = 0x01d9;\n  t.Udieresiscyrillic = 0x04f0;\n  t.Udieresisgrave = 0x01db;\n  t.Udieresismacron = 0x01d5;\n  t.Udieresissmall = 0xf7fc;\n  t.Udotbelow = 0x1ee4;\n  t.Ugrave = 0x00d9;\n  t.Ugravesmall = 0xf7f9;\n  t.Uhookabove = 0x1ee6;\n  t.Uhorn = 0x01af;\n  t.Uhornacute = 0x1ee8;\n  t.Uhorndotbelow = 0x1ef0;\n  t.Uhorngrave = 0x1eea;\n  t.Uhornhookabove = 0x1eec;\n  t.Uhorntilde = 0x1eee;\n  t.Uhungarumlaut = 0x0170;\n  t.Uhungarumlautcyrillic = 0x04f2;\n  t.Uinvertedbreve = 0x0216;\n  t.Ukcyrillic = 0x0478;\n  t.Umacron = 0x016a;\n  t.Umacroncyrillic = 0x04ee;\n  t.Umacrondieresis = 0x1e7a;\n  t.Umonospace = 0xff35;\n  t.Uogonek = 0x0172;\n  t.Upsilon = 0x03a5;\n  t.Upsilon1 = 0x03d2;\n  t.Upsilonacutehooksymbolgreek = 0x03d3;\n  t.Upsilonafrican = 0x01b1;\n  t.Upsilondieresis = 0x03ab;\n  t.Upsilondieresishooksymbolgreek = 0x03d4;\n  t.Upsilonhooksymbol = 0x03d2;\n  t.Upsilontonos = 0x038e;\n  t.Uring = 0x016e;\n  t.Ushortcyrillic = 0x040e;\n  t.Usmall = 0xf775;\n  t.Ustraightcyrillic = 0x04ae;\n  t.Ustraightstrokecyrillic = 0x04b0;\n  t.Utilde = 0x0168;\n  t.Utildeacute = 0x1e78;\n  t.Utildebelow = 0x1e74;\n  t.V = 0x0056;\n  t.Vcircle = 0x24cb;\n  t.Vdotbelow = 0x1e7e;\n  t.Vecyrillic = 0x0412;\n  t.Vewarmenian = 0x054e;\n  t.Vhook = 0x01b2;\n  t.Vmonospace = 0xff36;\n  t.Voarmenian = 0x0548;\n  t.Vsmall = 0xf776;\n  t.Vtilde = 0x1e7c;\n  t.W = 0x0057;\n  t.Wacute = 0x1e82;\n  t.Wcircle = 0x24cc;\n  t.Wcircumflex = 0x0174;\n  t.Wdieresis = 0x1e84;\n  t.Wdotaccent = 0x1e86;\n  t.Wdotbelow = 0x1e88;\n  t.Wgrave = 0x1e80;\n  t.Wmonospace = 0xff37;\n  t.Wsmall = 0xf777;\n  t.X = 0x0058;\n  t.Xcircle = 0x24cd;\n  t.Xdieresis = 0x1e8c;\n  t.Xdotaccent = 0x1e8a;\n  t.Xeharmenian = 0x053d;\n  t.Xi = 0x039e;\n  t.Xmonospace = 0xff38;\n  t.Xsmall = 0xf778;\n  t.Y = 0x0059;\n  t.Yacute = 0x00dd;\n  t.Yacutesmall = 0xf7fd;\n  t.Yatcyrillic = 0x0462;\n  t.Ycircle = 0x24ce;\n  t.Ycircumflex = 0x0176;\n  t.Ydieresis = 0x0178;\n  t.Ydieresissmall = 0xf7ff;\n  t.Ydotaccent = 0x1e8e;\n  t.Ydotbelow = 0x1ef4;\n  t.Yericyrillic = 0x042b;\n  t.Yerudieresiscyrillic = 0x04f8;\n  t.Ygrave = 0x1ef2;\n  t.Yhook = 0x01b3;\n  t.Yhookabove = 0x1ef6;\n  t.Yiarmenian = 0x0545;\n  t.Yicyrillic = 0x0407;\n  t.Yiwnarmenian = 0x0552;\n  t.Ymonospace = 0xff39;\n  t.Ysmall = 0xf779;\n  t.Ytilde = 0x1ef8;\n  t.Yusbigcyrillic = 0x046a;\n  t.Yusbigiotifiedcyrillic = 0x046c;\n  t.Yuslittlecyrillic = 0x0466;\n  t.Yuslittleiotifiedcyrillic = 0x0468;\n  t.Z = 0x005a;\n  t.Zaarmenian = 0x0536;\n  t.Zacute = 0x0179;\n  t.Zcaron = 0x017d;\n  t.Zcaronsmall = 0xf6ff;\n  t.Zcircle = 0x24cf;\n  t.Zcircumflex = 0x1e90;\n  t.Zdot = 0x017b;\n  t.Zdotaccent = 0x017b;\n  t.Zdotbelow = 0x1e92;\n  t.Zecyrillic = 0x0417;\n  t.Zedescendercyrillic = 0x0498;\n  t.Zedieresiscyrillic = 0x04de;\n  t.Zeta = 0x0396;\n  t.Zhearmenian = 0x053a;\n  t.Zhebrevecyrillic = 0x04c1;\n  t.Zhecyrillic = 0x0416;\n  t.Zhedescendercyrillic = 0x0496;\n  t.Zhedieresiscyrillic = 0x04dc;\n  t.Zlinebelow = 0x1e94;\n  t.Zmonospace = 0xff3a;\n  t.Zsmall = 0xf77a;\n  t.Zstroke = 0x01b5;\n  t.a = 0x0061;\n  t.aabengali = 0x0986;\n  t.aacute = 0x00e1;\n  t.aadeva = 0x0906;\n  t.aagujarati = 0x0a86;\n  t.aagurmukhi = 0x0a06;\n  t.aamatragurmukhi = 0x0a3e;\n  t.aarusquare = 0x3303;\n  t.aavowelsignbengali = 0x09be;\n  t.aavowelsigndeva = 0x093e;\n  t.aavowelsigngujarati = 0x0abe;\n  t.abbreviationmarkarmenian = 0x055f;\n  t.abbreviationsigndeva = 0x0970;\n  t.abengali = 0x0985;\n  t.abopomofo = 0x311a;\n  t.abreve = 0x0103;\n  t.abreveacute = 0x1eaf;\n  t.abrevecyrillic = 0x04d1;\n  t.abrevedotbelow = 0x1eb7;\n  t.abrevegrave = 0x1eb1;\n  t.abrevehookabove = 0x1eb3;\n  t.abrevetilde = 0x1eb5;\n  t.acaron = 0x01ce;\n  t.acircle = 0x24d0;\n  t.acircumflex = 0x00e2;\n  t.acircumflexacute = 0x1ea5;\n  t.acircumflexdotbelow = 0x1ead;\n  t.acircumflexgrave = 0x1ea7;\n  t.acircumflexhookabove = 0x1ea9;\n  t.acircumflextilde = 0x1eab;\n  t.acute = 0x00b4;\n  t.acutebelowcmb = 0x0317;\n  t.acutecmb = 0x0301;\n  t.acutecomb = 0x0301;\n  t.acutedeva = 0x0954;\n  t.acutelowmod = 0x02cf;\n  t.acutetonecmb = 0x0341;\n  t.acyrillic = 0x0430;\n  t.adblgrave = 0x0201;\n  t.addakgurmukhi = 0x0a71;\n  t.adeva = 0x0905;\n  t.adieresis = 0x00e4;\n  t.adieresiscyrillic = 0x04d3;\n  t.adieresismacron = 0x01df;\n  t.adotbelow = 0x1ea1;\n  t.adotmacron = 0x01e1;\n  t.ae = 0x00e6;\n  t.aeacute = 0x01fd;\n  t.aekorean = 0x3150;\n  t.aemacron = 0x01e3;\n  t.afii00208 = 0x2015;\n  t.afii08941 = 0x20a4;\n  t.afii10017 = 0x0410;\n  t.afii10018 = 0x0411;\n  t.afii10019 = 0x0412;\n  t.afii10020 = 0x0413;\n  t.afii10021 = 0x0414;\n  t.afii10022 = 0x0415;\n  t.afii10023 = 0x0401;\n  t.afii10024 = 0x0416;\n  t.afii10025 = 0x0417;\n  t.afii10026 = 0x0418;\n  t.afii10027 = 0x0419;\n  t.afii10028 = 0x041a;\n  t.afii10029 = 0x041b;\n  t.afii10030 = 0x041c;\n  t.afii10031 = 0x041d;\n  t.afii10032 = 0x041e;\n  t.afii10033 = 0x041f;\n  t.afii10034 = 0x0420;\n  t.afii10035 = 0x0421;\n  t.afii10036 = 0x0422;\n  t.afii10037 = 0x0423;\n  t.afii10038 = 0x0424;\n  t.afii10039 = 0x0425;\n  t.afii10040 = 0x0426;\n  t.afii10041 = 0x0427;\n  t.afii10042 = 0x0428;\n  t.afii10043 = 0x0429;\n  t.afii10044 = 0x042a;\n  t.afii10045 = 0x042b;\n  t.afii10046 = 0x042c;\n  t.afii10047 = 0x042d;\n  t.afii10048 = 0x042e;\n  t.afii10049 = 0x042f;\n  t.afii10050 = 0x0490;\n  t.afii10051 = 0x0402;\n  t.afii10052 = 0x0403;\n  t.afii10053 = 0x0404;\n  t.afii10054 = 0x0405;\n  t.afii10055 = 0x0406;\n  t.afii10056 = 0x0407;\n  t.afii10057 = 0x0408;\n  t.afii10058 = 0x0409;\n  t.afii10059 = 0x040a;\n  t.afii10060 = 0x040b;\n  t.afii10061 = 0x040c;\n  t.afii10062 = 0x040e;\n  t.afii10063 = 0xf6c4;\n  t.afii10064 = 0xf6c5;\n  t.afii10065 = 0x0430;\n  t.afii10066 = 0x0431;\n  t.afii10067 = 0x0432;\n  t.afii10068 = 0x0433;\n  t.afii10069 = 0x0434;\n  t.afii10070 = 0x0435;\n  t.afii10071 = 0x0451;\n  t.afii10072 = 0x0436;\n  t.afii10073 = 0x0437;\n  t.afii10074 = 0x0438;\n  t.afii10075 = 0x0439;\n  t.afii10076 = 0x043a;\n  t.afii10077 = 0x043b;\n  t.afii10078 = 0x043c;\n  t.afii10079 = 0x043d;\n  t.afii10080 = 0x043e;\n  t.afii10081 = 0x043f;\n  t.afii10082 = 0x0440;\n  t.afii10083 = 0x0441;\n  t.afii10084 = 0x0442;\n  t.afii10085 = 0x0443;\n  t.afii10086 = 0x0444;\n  t.afii10087 = 0x0445;\n  t.afii10088 = 0x0446;\n  t.afii10089 = 0x0447;\n  t.afii10090 = 0x0448;\n  t.afii10091 = 0x0449;\n  t.afii10092 = 0x044a;\n  t.afii10093 = 0x044b;\n  t.afii10094 = 0x044c;\n  t.afii10095 = 0x044d;\n  t.afii10096 = 0x044e;\n  t.afii10097 = 0x044f;\n  t.afii10098 = 0x0491;\n  t.afii10099 = 0x0452;\n  t.afii10100 = 0x0453;\n  t.afii10101 = 0x0454;\n  t.afii10102 = 0x0455;\n  t.afii10103 = 0x0456;\n  t.afii10104 = 0x0457;\n  t.afii10105 = 0x0458;\n  t.afii10106 = 0x0459;\n  t.afii10107 = 0x045a;\n  t.afii10108 = 0x045b;\n  t.afii10109 = 0x045c;\n  t.afii10110 = 0x045e;\n  t.afii10145 = 0x040f;\n  t.afii10146 = 0x0462;\n  t.afii10147 = 0x0472;\n  t.afii10148 = 0x0474;\n  t.afii10192 = 0xf6c6;\n  t.afii10193 = 0x045f;\n  t.afii10194 = 0x0463;\n  t.afii10195 = 0x0473;\n  t.afii10196 = 0x0475;\n  t.afii10831 = 0xf6c7;\n  t.afii10832 = 0xf6c8;\n  t.afii10846 = 0x04d9;\n  t.afii299 = 0x200e;\n  t.afii300 = 0x200f;\n  t.afii301 = 0x200d;\n  t.afii57381 = 0x066a;\n  t.afii57388 = 0x060c;\n  t.afii57392 = 0x0660;\n  t.afii57393 = 0x0661;\n  t.afii57394 = 0x0662;\n  t.afii57395 = 0x0663;\n  t.afii57396 = 0x0664;\n  t.afii57397 = 0x0665;\n  t.afii57398 = 0x0666;\n  t.afii57399 = 0x0667;\n  t.afii57400 = 0x0668;\n  t.afii57401 = 0x0669;\n  t.afii57403 = 0x061b;\n  t.afii57407 = 0x061f;\n  t.afii57409 = 0x0621;\n  t.afii57410 = 0x0622;\n  t.afii57411 = 0x0623;\n  t.afii57412 = 0x0624;\n  t.afii57413 = 0x0625;\n  t.afii57414 = 0x0626;\n  t.afii57415 = 0x0627;\n  t.afii57416 = 0x0628;\n  t.afii57417 = 0x0629;\n  t.afii57418 = 0x062a;\n  t.afii57419 = 0x062b;\n  t.afii57420 = 0x062c;\n  t.afii57421 = 0x062d;\n  t.afii57422 = 0x062e;\n  t.afii57423 = 0x062f;\n  t.afii57424 = 0x0630;\n  t.afii57425 = 0x0631;\n  t.afii57426 = 0x0632;\n  t.afii57427 = 0x0633;\n  t.afii57428 = 0x0634;\n  t.afii57429 = 0x0635;\n  t.afii57430 = 0x0636;\n  t.afii57431 = 0x0637;\n  t.afii57432 = 0x0638;\n  t.afii57433 = 0x0639;\n  t.afii57434 = 0x063a;\n  t.afii57440 = 0x0640;\n  t.afii57441 = 0x0641;\n  t.afii57442 = 0x0642;\n  t.afii57443 = 0x0643;\n  t.afii57444 = 0x0644;\n  t.afii57445 = 0x0645;\n  t.afii57446 = 0x0646;\n  t.afii57448 = 0x0648;\n  t.afii57449 = 0x0649;\n  t.afii57450 = 0x064a;\n  t.afii57451 = 0x064b;\n  t.afii57452 = 0x064c;\n  t.afii57453 = 0x064d;\n  t.afii57454 = 0x064e;\n  t.afii57455 = 0x064f;\n  t.afii57456 = 0x0650;\n  t.afii57457 = 0x0651;\n  t.afii57458 = 0x0652;\n  t.afii57470 = 0x0647;\n  t.afii57505 = 0x06a4;\n  t.afii57506 = 0x067e;\n  t.afii57507 = 0x0686;\n  t.afii57508 = 0x0698;\n  t.afii57509 = 0x06af;\n  t.afii57511 = 0x0679;\n  t.afii57512 = 0x0688;\n  t.afii57513 = 0x0691;\n  t.afii57514 = 0x06ba;\n  t.afii57519 = 0x06d2;\n  t.afii57534 = 0x06d5;\n  t.afii57636 = 0x20aa;\n  t.afii57645 = 0x05be;\n  t.afii57658 = 0x05c3;\n  t.afii57664 = 0x05d0;\n  t.afii57665 = 0x05d1;\n  t.afii57666 = 0x05d2;\n  t.afii57667 = 0x05d3;\n  t.afii57668 = 0x05d4;\n  t.afii57669 = 0x05d5;\n  t.afii57670 = 0x05d6;\n  t.afii57671 = 0x05d7;\n  t.afii57672 = 0x05d8;\n  t.afii57673 = 0x05d9;\n  t.afii57674 = 0x05da;\n  t.afii57675 = 0x05db;\n  t.afii57676 = 0x05dc;\n  t.afii57677 = 0x05dd;\n  t.afii57678 = 0x05de;\n  t.afii57679 = 0x05df;\n  t.afii57680 = 0x05e0;\n  t.afii57681 = 0x05e1;\n  t.afii57682 = 0x05e2;\n  t.afii57683 = 0x05e3;\n  t.afii57684 = 0x05e4;\n  t.afii57685 = 0x05e5;\n  t.afii57686 = 0x05e6;\n  t.afii57687 = 0x05e7;\n  t.afii57688 = 0x05e8;\n  t.afii57689 = 0x05e9;\n  t.afii57690 = 0x05ea;\n  t.afii57694 = 0xfb2a;\n  t.afii57695 = 0xfb2b;\n  t.afii57700 = 0xfb4b;\n  t.afii57705 = 0xfb1f;\n  t.afii57716 = 0x05f0;\n  t.afii57717 = 0x05f1;\n  t.afii57718 = 0x05f2;\n  t.afii57723 = 0xfb35;\n  t.afii57793 = 0x05b4;\n  t.afii57794 = 0x05b5;\n  t.afii57795 = 0x05b6;\n  t.afii57796 = 0x05bb;\n  t.afii57797 = 0x05b8;\n  t.afii57798 = 0x05b7;\n  t.afii57799 = 0x05b0;\n  t.afii57800 = 0x05b2;\n  t.afii57801 = 0x05b1;\n  t.afii57802 = 0x05b3;\n  t.afii57803 = 0x05c2;\n  t.afii57804 = 0x05c1;\n  t.afii57806 = 0x05b9;\n  t.afii57807 = 0x05bc;\n  t.afii57839 = 0x05bd;\n  t.afii57841 = 0x05bf;\n  t.afii57842 = 0x05c0;\n  t.afii57929 = 0x02bc;\n  t.afii61248 = 0x2105;\n  t.afii61289 = 0x2113;\n  t.afii61352 = 0x2116;\n  t.afii61573 = 0x202c;\n  t.afii61574 = 0x202d;\n  t.afii61575 = 0x202e;\n  t.afii61664 = 0x200c;\n  t.afii63167 = 0x066d;\n  t.afii64937 = 0x02bd;\n  t.agrave = 0x00e0;\n  t.agujarati = 0x0a85;\n  t.agurmukhi = 0x0a05;\n  t.ahiragana = 0x3042;\n  t.ahookabove = 0x1ea3;\n  t.aibengali = 0x0990;\n  t.aibopomofo = 0x311e;\n  t.aideva = 0x0910;\n  t.aiecyrillic = 0x04d5;\n  t.aigujarati = 0x0a90;\n  t.aigurmukhi = 0x0a10;\n  t.aimatragurmukhi = 0x0a48;\n  t.ainarabic = 0x0639;\n  t.ainfinalarabic = 0xfeca;\n  t.aininitialarabic = 0xfecb;\n  t.ainmedialarabic = 0xfecc;\n  t.ainvertedbreve = 0x0203;\n  t.aivowelsignbengali = 0x09c8;\n  t.aivowelsigndeva = 0x0948;\n  t.aivowelsigngujarati = 0x0ac8;\n  t.akatakana = 0x30a2;\n  t.akatakanahalfwidth = 0xff71;\n  t.akorean = 0x314f;\n  t.alef = 0x05d0;\n  t.alefarabic = 0x0627;\n  t.alefdageshhebrew = 0xfb30;\n  t.aleffinalarabic = 0xfe8e;\n  t.alefhamzaabovearabic = 0x0623;\n  t.alefhamzaabovefinalarabic = 0xfe84;\n  t.alefhamzabelowarabic = 0x0625;\n  t.alefhamzabelowfinalarabic = 0xfe88;\n  t.alefhebrew = 0x05d0;\n  t.aleflamedhebrew = 0xfb4f;\n  t.alefmaddaabovearabic = 0x0622;\n  t.alefmaddaabovefinalarabic = 0xfe82;\n  t.alefmaksuraarabic = 0x0649;\n  t.alefmaksurafinalarabic = 0xfef0;\n  t.alefmaksurainitialarabic = 0xfef3;\n  t.alefmaksuramedialarabic = 0xfef4;\n  t.alefpatahhebrew = 0xfb2e;\n  t.alefqamatshebrew = 0xfb2f;\n  t.aleph = 0x2135;\n  t.allequal = 0x224c;\n  t.alpha = 0x03b1;\n  t.alphatonos = 0x03ac;\n  t.amacron = 0x0101;\n  t.amonospace = 0xff41;\n  t.ampersand = 0x0026;\n  t.ampersandmonospace = 0xff06;\n  t.ampersandsmall = 0xf726;\n  t.amsquare = 0x33c2;\n  t.anbopomofo = 0x3122;\n  t.angbopomofo = 0x3124;\n  t.angbracketleft = 0x3008;\n  t.angbracketright = 0x3009;\n  t.angkhankhuthai = 0x0e5a;\n  t.angle = 0x2220;\n  t.anglebracketleft = 0x3008;\n  t.anglebracketleftvertical = 0xfe3f;\n  t.anglebracketright = 0x3009;\n  t.anglebracketrightvertical = 0xfe40;\n  t.angleleft = 0x2329;\n  t.angleright = 0x232a;\n  t.angstrom = 0x212b;\n  t.anoteleia = 0x0387;\n  t.anudattadeva = 0x0952;\n  t.anusvarabengali = 0x0982;\n  t.anusvaradeva = 0x0902;\n  t.anusvaragujarati = 0x0a82;\n  t.aogonek = 0x0105;\n  t.apaatosquare = 0x3300;\n  t.aparen = 0x249c;\n  t.apostrophearmenian = 0x055a;\n  t.apostrophemod = 0x02bc;\n  t.apple = 0xf8ff;\n  t.approaches = 0x2250;\n  t.approxequal = 0x2248;\n  t.approxequalorimage = 0x2252;\n  t.approximatelyequal = 0x2245;\n  t.araeaekorean = 0x318e;\n  t.araeakorean = 0x318d;\n  t.arc = 0x2312;\n  t.arighthalfring = 0x1e9a;\n  t.aring = 0x00e5;\n  t.aringacute = 0x01fb;\n  t.aringbelow = 0x1e01;\n  t.arrowboth = 0x2194;\n  t.arrowdashdown = 0x21e3;\n  t.arrowdashleft = 0x21e0;\n  t.arrowdashright = 0x21e2;\n  t.arrowdashup = 0x21e1;\n  t.arrowdblboth = 0x21d4;\n  t.arrowdbldown = 0x21d3;\n  t.arrowdblleft = 0x21d0;\n  t.arrowdblright = 0x21d2;\n  t.arrowdblup = 0x21d1;\n  t.arrowdown = 0x2193;\n  t.arrowdownleft = 0x2199;\n  t.arrowdownright = 0x2198;\n  t.arrowdownwhite = 0x21e9;\n  t.arrowheaddownmod = 0x02c5;\n  t.arrowheadleftmod = 0x02c2;\n  t.arrowheadrightmod = 0x02c3;\n  t.arrowheadupmod = 0x02c4;\n  t.arrowhorizex = 0xf8e7;\n  t.arrowleft = 0x2190;\n  t.arrowleftdbl = 0x21d0;\n  t.arrowleftdblstroke = 0x21cd;\n  t.arrowleftoverright = 0x21c6;\n  t.arrowleftwhite = 0x21e6;\n  t.arrowright = 0x2192;\n  t.arrowrightdblstroke = 0x21cf;\n  t.arrowrightheavy = 0x279e;\n  t.arrowrightoverleft = 0x21c4;\n  t.arrowrightwhite = 0x21e8;\n  t.arrowtableft = 0x21e4;\n  t.arrowtabright = 0x21e5;\n  t.arrowup = 0x2191;\n  t.arrowupdn = 0x2195;\n  t.arrowupdnbse = 0x21a8;\n  t.arrowupdownbase = 0x21a8;\n  t.arrowupleft = 0x2196;\n  t.arrowupleftofdown = 0x21c5;\n  t.arrowupright = 0x2197;\n  t.arrowupwhite = 0x21e7;\n  t.arrowvertex = 0xf8e6;\n  t.asciicircum = 0x005e;\n  t.asciicircummonospace = 0xff3e;\n  t.asciitilde = 0x007e;\n  t.asciitildemonospace = 0xff5e;\n  t.ascript = 0x0251;\n  t.ascriptturned = 0x0252;\n  t.asmallhiragana = 0x3041;\n  t.asmallkatakana = 0x30a1;\n  t.asmallkatakanahalfwidth = 0xff67;\n  t.asterisk = 0x002a;\n  t.asteriskaltonearabic = 0x066d;\n  t.asteriskarabic = 0x066d;\n  t.asteriskmath = 0x2217;\n  t.asteriskmonospace = 0xff0a;\n  t.asterisksmall = 0xfe61;\n  t.asterism = 0x2042;\n  t.asuperior = 0xf6e9;\n  t.asymptoticallyequal = 0x2243;\n  t.at = 0x0040;\n  t.atilde = 0x00e3;\n  t.atmonospace = 0xff20;\n  t.atsmall = 0xfe6b;\n  t.aturned = 0x0250;\n  t.aubengali = 0x0994;\n  t.aubopomofo = 0x3120;\n  t.audeva = 0x0914;\n  t.augujarati = 0x0a94;\n  t.augurmukhi = 0x0a14;\n  t.aulengthmarkbengali = 0x09d7;\n  t.aumatragurmukhi = 0x0a4c;\n  t.auvowelsignbengali = 0x09cc;\n  t.auvowelsigndeva = 0x094c;\n  t.auvowelsigngujarati = 0x0acc;\n  t.avagrahadeva = 0x093d;\n  t.aybarmenian = 0x0561;\n  t.ayin = 0x05e2;\n  t.ayinaltonehebrew = 0xfb20;\n  t.ayinhebrew = 0x05e2;\n  t.b = 0x0062;\n  t.babengali = 0x09ac;\n  t.backslash = 0x005c;\n  t.backslashmonospace = 0xff3c;\n  t.badeva = 0x092c;\n  t.bagujarati = 0x0aac;\n  t.bagurmukhi = 0x0a2c;\n  t.bahiragana = 0x3070;\n  t.bahtthai = 0x0e3f;\n  t.bakatakana = 0x30d0;\n  t.bar = 0x007c;\n  t.barmonospace = 0xff5c;\n  t.bbopomofo = 0x3105;\n  t.bcircle = 0x24d1;\n  t.bdotaccent = 0x1e03;\n  t.bdotbelow = 0x1e05;\n  t.beamedsixteenthnotes = 0x266c;\n  t.because = 0x2235;\n  t.becyrillic = 0x0431;\n  t.beharabic = 0x0628;\n  t.behfinalarabic = 0xfe90;\n  t.behinitialarabic = 0xfe91;\n  t.behiragana = 0x3079;\n  t.behmedialarabic = 0xfe92;\n  t.behmeeminitialarabic = 0xfc9f;\n  t.behmeemisolatedarabic = 0xfc08;\n  t.behnoonfinalarabic = 0xfc6d;\n  t.bekatakana = 0x30d9;\n  t.benarmenian = 0x0562;\n  t.bet = 0x05d1;\n  t.beta = 0x03b2;\n  t.betasymbolgreek = 0x03d0;\n  t.betdagesh = 0xfb31;\n  t.betdageshhebrew = 0xfb31;\n  t.bethebrew = 0x05d1;\n  t.betrafehebrew = 0xfb4c;\n  t.bhabengali = 0x09ad;\n  t.bhadeva = 0x092d;\n  t.bhagujarati = 0x0aad;\n  t.bhagurmukhi = 0x0a2d;\n  t.bhook = 0x0253;\n  t.bihiragana = 0x3073;\n  t.bikatakana = 0x30d3;\n  t.bilabialclick = 0x0298;\n  t.bindigurmukhi = 0x0a02;\n  t.birusquare = 0x3331;\n  t.blackcircle = 0x25cf;\n  t.blackdiamond = 0x25c6;\n  t.blackdownpointingtriangle = 0x25bc;\n  t.blackleftpointingpointer = 0x25c4;\n  t.blackleftpointingtriangle = 0x25c0;\n  t.blacklenticularbracketleft = 0x3010;\n  t.blacklenticularbracketleftvertical = 0xfe3b;\n  t.blacklenticularbracketright = 0x3011;\n  t.blacklenticularbracketrightvertical = 0xfe3c;\n  t.blacklowerlefttriangle = 0x25e3;\n  t.blacklowerrighttriangle = 0x25e2;\n  t.blackrectangle = 0x25ac;\n  t.blackrightpointingpointer = 0x25ba;\n  t.blackrightpointingtriangle = 0x25b6;\n  t.blacksmallsquare = 0x25aa;\n  t.blacksmilingface = 0x263b;\n  t.blacksquare = 0x25a0;\n  t.blackstar = 0x2605;\n  t.blackupperlefttriangle = 0x25e4;\n  t.blackupperrighttriangle = 0x25e5;\n  t.blackuppointingsmalltriangle = 0x25b4;\n  t.blackuppointingtriangle = 0x25b2;\n  t.blank = 0x2423;\n  t.blinebelow = 0x1e07;\n  t.block = 0x2588;\n  t.bmonospace = 0xff42;\n  t.bobaimaithai = 0x0e1a;\n  t.bohiragana = 0x307c;\n  t.bokatakana = 0x30dc;\n  t.bparen = 0x249d;\n  t.bqsquare = 0x33c3;\n  t.braceex = 0xf8f4;\n  t.braceleft = 0x007b;\n  t.braceleftbt = 0xf8f3;\n  t.braceleftmid = 0xf8f2;\n  t.braceleftmonospace = 0xff5b;\n  t.braceleftsmall = 0xfe5b;\n  t.bracelefttp = 0xf8f1;\n  t.braceleftvertical = 0xfe37;\n  t.braceright = 0x007d;\n  t.bracerightbt = 0xf8fe;\n  t.bracerightmid = 0xf8fd;\n  t.bracerightmonospace = 0xff5d;\n  t.bracerightsmall = 0xfe5c;\n  t.bracerighttp = 0xf8fc;\n  t.bracerightvertical = 0xfe38;\n  t.bracketleft = 0x005b;\n  t.bracketleftbt = 0xf8f0;\n  t.bracketleftex = 0xf8ef;\n  t.bracketleftmonospace = 0xff3b;\n  t.bracketlefttp = 0xf8ee;\n  t.bracketright = 0x005d;\n  t.bracketrightbt = 0xf8fb;\n  t.bracketrightex = 0xf8fa;\n  t.bracketrightmonospace = 0xff3d;\n  t.bracketrighttp = 0xf8f9;\n  t.breve = 0x02d8;\n  t.brevebelowcmb = 0x032e;\n  t.brevecmb = 0x0306;\n  t.breveinvertedbelowcmb = 0x032f;\n  t.breveinvertedcmb = 0x0311;\n  t.breveinverteddoublecmb = 0x0361;\n  t.bridgebelowcmb = 0x032a;\n  t.bridgeinvertedbelowcmb = 0x033a;\n  t.brokenbar = 0x00a6;\n  t.bstroke = 0x0180;\n  t.bsuperior = 0xf6ea;\n  t.btopbar = 0x0183;\n  t.buhiragana = 0x3076;\n  t.bukatakana = 0x30d6;\n  t.bullet = 0x2022;\n  t.bulletinverse = 0x25d8;\n  t.bulletoperator = 0x2219;\n  t.bullseye = 0x25ce;\n  t.c = 0x0063;\n  t.caarmenian = 0x056e;\n  t.cabengali = 0x099a;\n  t.cacute = 0x0107;\n  t.cadeva = 0x091a;\n  t.cagujarati = 0x0a9a;\n  t.cagurmukhi = 0x0a1a;\n  t.calsquare = 0x3388;\n  t.candrabindubengali = 0x0981;\n  t.candrabinducmb = 0x0310;\n  t.candrabindudeva = 0x0901;\n  t.candrabindugujarati = 0x0a81;\n  t.capslock = 0x21ea;\n  t.careof = 0x2105;\n  t.caron = 0x02c7;\n  t.caronbelowcmb = 0x032c;\n  t.caroncmb = 0x030c;\n  t.carriagereturn = 0x21b5;\n  t.cbopomofo = 0x3118;\n  t.ccaron = 0x010d;\n  t.ccedilla = 0x00e7;\n  t.ccedillaacute = 0x1e09;\n  t.ccircle = 0x24d2;\n  t.ccircumflex = 0x0109;\n  t.ccurl = 0x0255;\n  t.cdot = 0x010b;\n  t.cdotaccent = 0x010b;\n  t.cdsquare = 0x33c5;\n  t.cedilla = 0x00b8;\n  t.cedillacmb = 0x0327;\n  t.cent = 0x00a2;\n  t.centigrade = 0x2103;\n  t.centinferior = 0xf6df;\n  t.centmonospace = 0xffe0;\n  t.centoldstyle = 0xf7a2;\n  t.centsuperior = 0xf6e0;\n  t.chaarmenian = 0x0579;\n  t.chabengali = 0x099b;\n  t.chadeva = 0x091b;\n  t.chagujarati = 0x0a9b;\n  t.chagurmukhi = 0x0a1b;\n  t.chbopomofo = 0x3114;\n  t.cheabkhasiancyrillic = 0x04bd;\n  t.checkmark = 0x2713;\n  t.checyrillic = 0x0447;\n  t.chedescenderabkhasiancyrillic = 0x04bf;\n  t.chedescendercyrillic = 0x04b7;\n  t.chedieresiscyrillic = 0x04f5;\n  t.cheharmenian = 0x0573;\n  t.chekhakassiancyrillic = 0x04cc;\n  t.cheverticalstrokecyrillic = 0x04b9;\n  t.chi = 0x03c7;\n  t.chieuchacirclekorean = 0x3277;\n  t.chieuchaparenkorean = 0x3217;\n  t.chieuchcirclekorean = 0x3269;\n  t.chieuchkorean = 0x314a;\n  t.chieuchparenkorean = 0x3209;\n  t.chochangthai = 0x0e0a;\n  t.chochanthai = 0x0e08;\n  t.chochingthai = 0x0e09;\n  t.chochoethai = 0x0e0c;\n  t.chook = 0x0188;\n  t.cieucacirclekorean = 0x3276;\n  t.cieucaparenkorean = 0x3216;\n  t.cieuccirclekorean = 0x3268;\n  t.cieuckorean = 0x3148;\n  t.cieucparenkorean = 0x3208;\n  t.cieucuparenkorean = 0x321c;\n  t.circle = 0x25cb;\n  t.circlecopyrt = 0x00a9;\n  t.circlemultiply = 0x2297;\n  t.circleot = 0x2299;\n  t.circleplus = 0x2295;\n  t.circlepostalmark = 0x3036;\n  t.circlewithlefthalfblack = 0x25d0;\n  t.circlewithrighthalfblack = 0x25d1;\n  t.circumflex = 0x02c6;\n  t.circumflexbelowcmb = 0x032d;\n  t.circumflexcmb = 0x0302;\n  t.clear = 0x2327;\n  t.clickalveolar = 0x01c2;\n  t.clickdental = 0x01c0;\n  t.clicklateral = 0x01c1;\n  t.clickretroflex = 0x01c3;\n  t.club = 0x2663;\n  t.clubsuitblack = 0x2663;\n  t.clubsuitwhite = 0x2667;\n  t.cmcubedsquare = 0x33a4;\n  t.cmonospace = 0xff43;\n  t.cmsquaredsquare = 0x33a0;\n  t.coarmenian = 0x0581;\n  t.colon = 0x003a;\n  t.colonmonetary = 0x20a1;\n  t.colonmonospace = 0xff1a;\n  t.colonsign = 0x20a1;\n  t.colonsmall = 0xfe55;\n  t.colontriangularhalfmod = 0x02d1;\n  t.colontriangularmod = 0x02d0;\n  t.comma = 0x002c;\n  t.commaabovecmb = 0x0313;\n  t.commaaboverightcmb = 0x0315;\n  t.commaaccent = 0xf6c3;\n  t.commaarabic = 0x060c;\n  t.commaarmenian = 0x055d;\n  t.commainferior = 0xf6e1;\n  t.commamonospace = 0xff0c;\n  t.commareversedabovecmb = 0x0314;\n  t.commareversedmod = 0x02bd;\n  t.commasmall = 0xfe50;\n  t.commasuperior = 0xf6e2;\n  t.commaturnedabovecmb = 0x0312;\n  t.commaturnedmod = 0x02bb;\n  t.compass = 0x263c;\n  t.congruent = 0x2245;\n  t.contourintegral = 0x222e;\n  t.control = 0x2303;\n  t.controlACK = 0x0006;\n  t.controlBEL = 0x0007;\n  t.controlBS = 0x0008;\n  t.controlCAN = 0x0018;\n  t.controlCR = 0x000d;\n  t.controlDC1 = 0x0011;\n  t.controlDC2 = 0x0012;\n  t.controlDC3 = 0x0013;\n  t.controlDC4 = 0x0014;\n  t.controlDEL = 0x007f;\n  t.controlDLE = 0x0010;\n  t.controlEM = 0x0019;\n  t.controlENQ = 0x0005;\n  t.controlEOT = 0x0004;\n  t.controlESC = 0x001b;\n  t.controlETB = 0x0017;\n  t.controlETX = 0x0003;\n  t.controlFF = 0x000c;\n  t.controlFS = 0x001c;\n  t.controlGS = 0x001d;\n  t.controlHT = 0x0009;\n  t.controlLF = 0x000a;\n  t.controlNAK = 0x0015;\n  t.controlNULL = 0x0000;\n  t.controlRS = 0x001e;\n  t.controlSI = 0x000f;\n  t.controlSO = 0x000e;\n  t.controlSOT = 0x0002;\n  t.controlSTX = 0x0001;\n  t.controlSUB = 0x001a;\n  t.controlSYN = 0x0016;\n  t.controlUS = 0x001f;\n  t.controlVT = 0x000b;\n  t.copyright = 0x00a9;\n  t.copyrightsans = 0xf8e9;\n  t.copyrightserif = 0xf6d9;\n  t.cornerbracketleft = 0x300c;\n  t.cornerbracketlefthalfwidth = 0xff62;\n  t.cornerbracketleftvertical = 0xfe41;\n  t.cornerbracketright = 0x300d;\n  t.cornerbracketrighthalfwidth = 0xff63;\n  t.cornerbracketrightvertical = 0xfe42;\n  t.corporationsquare = 0x337f;\n  t.cosquare = 0x33c7;\n  t.coverkgsquare = 0x33c6;\n  t.cparen = 0x249e;\n  t.cruzeiro = 0x20a2;\n  t.cstretched = 0x0297;\n  t.curlyand = 0x22cf;\n  t.curlyor = 0x22ce;\n  t.currency = 0x00a4;\n  t.cyrBreve = 0xf6d1;\n  t.cyrFlex = 0xf6d2;\n  t.cyrbreve = 0xf6d4;\n  t.cyrflex = 0xf6d5;\n  t.d = 0x0064;\n  t.daarmenian = 0x0564;\n  t.dabengali = 0x09a6;\n  t.dadarabic = 0x0636;\n  t.dadeva = 0x0926;\n  t.dadfinalarabic = 0xfebe;\n  t.dadinitialarabic = 0xfebf;\n  t.dadmedialarabic = 0xfec0;\n  t.dagesh = 0x05bc;\n  t.dageshhebrew = 0x05bc;\n  t.dagger = 0x2020;\n  t.daggerdbl = 0x2021;\n  t.dagujarati = 0x0aa6;\n  t.dagurmukhi = 0x0a26;\n  t.dahiragana = 0x3060;\n  t.dakatakana = 0x30c0;\n  t.dalarabic = 0x062f;\n  t.dalet = 0x05d3;\n  t.daletdagesh = 0xfb33;\n  t.daletdageshhebrew = 0xfb33;\n  t.dalethebrew = 0x05d3;\n  t.dalfinalarabic = 0xfeaa;\n  t.dammaarabic = 0x064f;\n  t.dammalowarabic = 0x064f;\n  t.dammatanaltonearabic = 0x064c;\n  t.dammatanarabic = 0x064c;\n  t.danda = 0x0964;\n  t.dargahebrew = 0x05a7;\n  t.dargalefthebrew = 0x05a7;\n  t.dasiapneumatacyrilliccmb = 0x0485;\n  t.dblGrave = 0xf6d3;\n  t.dblanglebracketleft = 0x300a;\n  t.dblanglebracketleftvertical = 0xfe3d;\n  t.dblanglebracketright = 0x300b;\n  t.dblanglebracketrightvertical = 0xfe3e;\n  t.dblarchinvertedbelowcmb = 0x032b;\n  t.dblarrowleft = 0x21d4;\n  t.dblarrowright = 0x21d2;\n  t.dbldanda = 0x0965;\n  t.dblgrave = 0xf6d6;\n  t.dblgravecmb = 0x030f;\n  t.dblintegral = 0x222c;\n  t.dbllowline = 0x2017;\n  t.dbllowlinecmb = 0x0333;\n  t.dbloverlinecmb = 0x033f;\n  t.dblprimemod = 0x02ba;\n  t.dblverticalbar = 0x2016;\n  t.dblverticallineabovecmb = 0x030e;\n  t.dbopomofo = 0x3109;\n  t.dbsquare = 0x33c8;\n  t.dcaron = 0x010f;\n  t.dcedilla = 0x1e11;\n  t.dcircle = 0x24d3;\n  t.dcircumflexbelow = 0x1e13;\n  t.dcroat = 0x0111;\n  t.ddabengali = 0x09a1;\n  t.ddadeva = 0x0921;\n  t.ddagujarati = 0x0aa1;\n  t.ddagurmukhi = 0x0a21;\n  t.ddalarabic = 0x0688;\n  t.ddalfinalarabic = 0xfb89;\n  t.dddhadeva = 0x095c;\n  t.ddhabengali = 0x09a2;\n  t.ddhadeva = 0x0922;\n  t.ddhagujarati = 0x0aa2;\n  t.ddhagurmukhi = 0x0a22;\n  t.ddotaccent = 0x1e0b;\n  t.ddotbelow = 0x1e0d;\n  t.decimalseparatorarabic = 0x066b;\n  t.decimalseparatorpersian = 0x066b;\n  t.decyrillic = 0x0434;\n  t.degree = 0x00b0;\n  t.dehihebrew = 0x05ad;\n  t.dehiragana = 0x3067;\n  t.deicoptic = 0x03ef;\n  t.dekatakana = 0x30c7;\n  t.deleteleft = 0x232b;\n  t.deleteright = 0x2326;\n  t.delta = 0x03b4;\n  t.deltaturned = 0x018d;\n  t.denominatorminusonenumeratorbengali = 0x09f8;\n  t.dezh = 0x02a4;\n  t.dhabengali = 0x09a7;\n  t.dhadeva = 0x0927;\n  t.dhagujarati = 0x0aa7;\n  t.dhagurmukhi = 0x0a27;\n  t.dhook = 0x0257;\n  t.dialytikatonos = 0x0385;\n  t.dialytikatonoscmb = 0x0344;\n  t.diamond = 0x2666;\n  t.diamondsuitwhite = 0x2662;\n  t.dieresis = 0x00a8;\n  t.dieresisacute = 0xf6d7;\n  t.dieresisbelowcmb = 0x0324;\n  t.dieresiscmb = 0x0308;\n  t.dieresisgrave = 0xf6d8;\n  t.dieresistonos = 0x0385;\n  t.dihiragana = 0x3062;\n  t.dikatakana = 0x30c2;\n  t.dittomark = 0x3003;\n  t.divide = 0x00f7;\n  t.divides = 0x2223;\n  t.divisionslash = 0x2215;\n  t.djecyrillic = 0x0452;\n  t.dkshade = 0x2593;\n  t.dlinebelow = 0x1e0f;\n  t.dlsquare = 0x3397;\n  t.dmacron = 0x0111;\n  t.dmonospace = 0xff44;\n  t.dnblock = 0x2584;\n  t.dochadathai = 0x0e0e;\n  t.dodekthai = 0x0e14;\n  t.dohiragana = 0x3069;\n  t.dokatakana = 0x30c9;\n  t.dollar = 0x0024;\n  t.dollarinferior = 0xf6e3;\n  t.dollarmonospace = 0xff04;\n  t.dollaroldstyle = 0xf724;\n  t.dollarsmall = 0xfe69;\n  t.dollarsuperior = 0xf6e4;\n  t.dong = 0x20ab;\n  t.dorusquare = 0x3326;\n  t.dotaccent = 0x02d9;\n  t.dotaccentcmb = 0x0307;\n  t.dotbelowcmb = 0x0323;\n  t.dotbelowcomb = 0x0323;\n  t.dotkatakana = 0x30fb;\n  t.dotlessi = 0x0131;\n  t.dotlessj = 0xf6be;\n  t.dotlessjstrokehook = 0x0284;\n  t.dotmath = 0x22c5;\n  t.dottedcircle = 0x25cc;\n  t.doubleyodpatah = 0xfb1f;\n  t.doubleyodpatahhebrew = 0xfb1f;\n  t.downtackbelowcmb = 0x031e;\n  t.downtackmod = 0x02d5;\n  t.dparen = 0x249f;\n  t.dsuperior = 0xf6eb;\n  t.dtail = 0x0256;\n  t.dtopbar = 0x018c;\n  t.duhiragana = 0x3065;\n  t.dukatakana = 0x30c5;\n  t.dz = 0x01f3;\n  t.dzaltone = 0x02a3;\n  t.dzcaron = 0x01c6;\n  t.dzcurl = 0x02a5;\n  t.dzeabkhasiancyrillic = 0x04e1;\n  t.dzecyrillic = 0x0455;\n  t.dzhecyrillic = 0x045f;\n  t.e = 0x0065;\n  t.eacute = 0x00e9;\n  t.earth = 0x2641;\n  t.ebengali = 0x098f;\n  t.ebopomofo = 0x311c;\n  t.ebreve = 0x0115;\n  t.ecandradeva = 0x090d;\n  t.ecandragujarati = 0x0a8d;\n  t.ecandravowelsigndeva = 0x0945;\n  t.ecandravowelsigngujarati = 0x0ac5;\n  t.ecaron = 0x011b;\n  t.ecedillabreve = 0x1e1d;\n  t.echarmenian = 0x0565;\n  t.echyiwnarmenian = 0x0587;\n  t.ecircle = 0x24d4;\n  t.ecircumflex = 0x00ea;\n  t.ecircumflexacute = 0x1ebf;\n  t.ecircumflexbelow = 0x1e19;\n  t.ecircumflexdotbelow = 0x1ec7;\n  t.ecircumflexgrave = 0x1ec1;\n  t.ecircumflexhookabove = 0x1ec3;\n  t.ecircumflextilde = 0x1ec5;\n  t.ecyrillic = 0x0454;\n  t.edblgrave = 0x0205;\n  t.edeva = 0x090f;\n  t.edieresis = 0x00eb;\n  t.edot = 0x0117;\n  t.edotaccent = 0x0117;\n  t.edotbelow = 0x1eb9;\n  t.eegurmukhi = 0x0a0f;\n  t.eematragurmukhi = 0x0a47;\n  t.efcyrillic = 0x0444;\n  t.egrave = 0x00e8;\n  t.egujarati = 0x0a8f;\n  t.eharmenian = 0x0567;\n  t.ehbopomofo = 0x311d;\n  t.ehiragana = 0x3048;\n  t.ehookabove = 0x1ebb;\n  t.eibopomofo = 0x311f;\n  t.eight = 0x0038;\n  t.eightarabic = 0x0668;\n  t.eightbengali = 0x09ee;\n  t.eightcircle = 0x2467;\n  t.eightcircleinversesansserif = 0x2791;\n  t.eightdeva = 0x096e;\n  t.eighteencircle = 0x2471;\n  t.eighteenparen = 0x2485;\n  t.eighteenperiod = 0x2499;\n  t.eightgujarati = 0x0aee;\n  t.eightgurmukhi = 0x0a6e;\n  t.eighthackarabic = 0x0668;\n  t.eighthangzhou = 0x3028;\n  t.eighthnotebeamed = 0x266b;\n  t.eightideographicparen = 0x3227;\n  t.eightinferior = 0x2088;\n  t.eightmonospace = 0xff18;\n  t.eightoldstyle = 0xf738;\n  t.eightparen = 0x247b;\n  t.eightperiod = 0x248f;\n  t.eightpersian = 0x06f8;\n  t.eightroman = 0x2177;\n  t.eightsuperior = 0x2078;\n  t.eightthai = 0x0e58;\n  t.einvertedbreve = 0x0207;\n  t.eiotifiedcyrillic = 0x0465;\n  t.ekatakana = 0x30a8;\n  t.ekatakanahalfwidth = 0xff74;\n  t.ekonkargurmukhi = 0x0a74;\n  t.ekorean = 0x3154;\n  t.elcyrillic = 0x043b;\n  t.element = 0x2208;\n  t.elevencircle = 0x246a;\n  t.elevenparen = 0x247e;\n  t.elevenperiod = 0x2492;\n  t.elevenroman = 0x217a;\n  t.ellipsis = 0x2026;\n  t.ellipsisvertical = 0x22ee;\n  t.emacron = 0x0113;\n  t.emacronacute = 0x1e17;\n  t.emacrongrave = 0x1e15;\n  t.emcyrillic = 0x043c;\n  t.emdash = 0x2014;\n  t.emdashvertical = 0xfe31;\n  t.emonospace = 0xff45;\n  t.emphasismarkarmenian = 0x055b;\n  t.emptyset = 0x2205;\n  t.enbopomofo = 0x3123;\n  t.encyrillic = 0x043d;\n  t.endash = 0x2013;\n  t.endashvertical = 0xfe32;\n  t.endescendercyrillic = 0x04a3;\n  t.eng = 0x014b;\n  t.engbopomofo = 0x3125;\n  t.enghecyrillic = 0x04a5;\n  t.enhookcyrillic = 0x04c8;\n  t.enspace = 0x2002;\n  t.eogonek = 0x0119;\n  t.eokorean = 0x3153;\n  t.eopen = 0x025b;\n  t.eopenclosed = 0x029a;\n  t.eopenreversed = 0x025c;\n  t.eopenreversedclosed = 0x025e;\n  t.eopenreversedhook = 0x025d;\n  t.eparen = 0x24a0;\n  t.epsilon = 0x03b5;\n  t.epsilontonos = 0x03ad;\n  t.equal = 0x003d;\n  t.equalmonospace = 0xff1d;\n  t.equalsmall = 0xfe66;\n  t.equalsuperior = 0x207c;\n  t.equivalence = 0x2261;\n  t.erbopomofo = 0x3126;\n  t.ercyrillic = 0x0440;\n  t.ereversed = 0x0258;\n  t.ereversedcyrillic = 0x044d;\n  t.escyrillic = 0x0441;\n  t.esdescendercyrillic = 0x04ab;\n  t.esh = 0x0283;\n  t.eshcurl = 0x0286;\n  t.eshortdeva = 0x090e;\n  t.eshortvowelsigndeva = 0x0946;\n  t.eshreversedloop = 0x01aa;\n  t.eshsquatreversed = 0x0285;\n  t.esmallhiragana = 0x3047;\n  t.esmallkatakana = 0x30a7;\n  t.esmallkatakanahalfwidth = 0xff6a;\n  t.estimated = 0x212e;\n  t.esuperior = 0xf6ec;\n  t.eta = 0x03b7;\n  t.etarmenian = 0x0568;\n  t.etatonos = 0x03ae;\n  t.eth = 0x00f0;\n  t.etilde = 0x1ebd;\n  t.etildebelow = 0x1e1b;\n  t.etnahtafoukhhebrew = 0x0591;\n  t.etnahtafoukhlefthebrew = 0x0591;\n  t.etnahtahebrew = 0x0591;\n  t.etnahtalefthebrew = 0x0591;\n  t.eturned = 0x01dd;\n  t.eukorean = 0x3161;\n  t.euro = 0x20ac;\n  t.evowelsignbengali = 0x09c7;\n  t.evowelsigndeva = 0x0947;\n  t.evowelsigngujarati = 0x0ac7;\n  t.exclam = 0x0021;\n  t.exclamarmenian = 0x055c;\n  t.exclamdbl = 0x203c;\n  t.exclamdown = 0x00a1;\n  t.exclamdownsmall = 0xf7a1;\n  t.exclammonospace = 0xff01;\n  t.exclamsmall = 0xf721;\n  t.existential = 0x2203;\n  t.ezh = 0x0292;\n  t.ezhcaron = 0x01ef;\n  t.ezhcurl = 0x0293;\n  t.ezhreversed = 0x01b9;\n  t.ezhtail = 0x01ba;\n  t.f = 0x0066;\n  t.fadeva = 0x095e;\n  t.fagurmukhi = 0x0a5e;\n  t.fahrenheit = 0x2109;\n  t.fathaarabic = 0x064e;\n  t.fathalowarabic = 0x064e;\n  t.fathatanarabic = 0x064b;\n  t.fbopomofo = 0x3108;\n  t.fcircle = 0x24d5;\n  t.fdotaccent = 0x1e1f;\n  t.feharabic = 0x0641;\n  t.feharmenian = 0x0586;\n  t.fehfinalarabic = 0xfed2;\n  t.fehinitialarabic = 0xfed3;\n  t.fehmedialarabic = 0xfed4;\n  t.feicoptic = 0x03e5;\n  t.female = 0x2640;\n  t.ff = 0xfb00;\n  t.f_f = 0xfb00;\n  t.ffi = 0xfb03;\n  t.f_f_i = 0xfb03;\n  t.ffl = 0xfb04;\n  t.f_f_l = 0xfb04;\n  t.fi = 0xfb01;\n  t.f_i = 0xfb01;\n  t.fifteencircle = 0x246e;\n  t.fifteenparen = 0x2482;\n  t.fifteenperiod = 0x2496;\n  t.figuredash = 0x2012;\n  t.filledbox = 0x25a0;\n  t.filledrect = 0x25ac;\n  t.finalkaf = 0x05da;\n  t.finalkafdagesh = 0xfb3a;\n  t.finalkafdageshhebrew = 0xfb3a;\n  t.finalkafhebrew = 0x05da;\n  t.finalmem = 0x05dd;\n  t.finalmemhebrew = 0x05dd;\n  t.finalnun = 0x05df;\n  t.finalnunhebrew = 0x05df;\n  t.finalpe = 0x05e3;\n  t.finalpehebrew = 0x05e3;\n  t.finaltsadi = 0x05e5;\n  t.finaltsadihebrew = 0x05e5;\n  t.firsttonechinese = 0x02c9;\n  t.fisheye = 0x25c9;\n  t.fitacyrillic = 0x0473;\n  t.five = 0x0035;\n  t.fivearabic = 0x0665;\n  t.fivebengali = 0x09eb;\n  t.fivecircle = 0x2464;\n  t.fivecircleinversesansserif = 0x278e;\n  t.fivedeva = 0x096b;\n  t.fiveeighths = 0x215d;\n  t.fivegujarati = 0x0aeb;\n  t.fivegurmukhi = 0x0a6b;\n  t.fivehackarabic = 0x0665;\n  t.fivehangzhou = 0x3025;\n  t.fiveideographicparen = 0x3224;\n  t.fiveinferior = 0x2085;\n  t.fivemonospace = 0xff15;\n  t.fiveoldstyle = 0xf735;\n  t.fiveparen = 0x2478;\n  t.fiveperiod = 0x248c;\n  t.fivepersian = 0x06f5;\n  t.fiveroman = 0x2174;\n  t.fivesuperior = 0x2075;\n  t.fivethai = 0x0e55;\n  t.fl = 0xfb02;\n  t.f_l = 0xfb02;\n  t.florin = 0x0192;\n  t.fmonospace = 0xff46;\n  t.fmsquare = 0x3399;\n  t.fofanthai = 0x0e1f;\n  t.fofathai = 0x0e1d;\n  t.fongmanthai = 0x0e4f;\n  t.forall = 0x2200;\n  t.four = 0x0034;\n  t.fourarabic = 0x0664;\n  t.fourbengali = 0x09ea;\n  t.fourcircle = 0x2463;\n  t.fourcircleinversesansserif = 0x278d;\n  t.fourdeva = 0x096a;\n  t.fourgujarati = 0x0aea;\n  t.fourgurmukhi = 0x0a6a;\n  t.fourhackarabic = 0x0664;\n  t.fourhangzhou = 0x3024;\n  t.fourideographicparen = 0x3223;\n  t.fourinferior = 0x2084;\n  t.fourmonospace = 0xff14;\n  t.fournumeratorbengali = 0x09f7;\n  t.fouroldstyle = 0xf734;\n  t.fourparen = 0x2477;\n  t.fourperiod = 0x248b;\n  t.fourpersian = 0x06f4;\n  t.fourroman = 0x2173;\n  t.foursuperior = 0x2074;\n  t.fourteencircle = 0x246d;\n  t.fourteenparen = 0x2481;\n  t.fourteenperiod = 0x2495;\n  t.fourthai = 0x0e54;\n  t.fourthtonechinese = 0x02cb;\n  t.fparen = 0x24a1;\n  t.fraction = 0x2044;\n  t.franc = 0x20a3;\n  t.g = 0x0067;\n  t.gabengali = 0x0997;\n  t.gacute = 0x01f5;\n  t.gadeva = 0x0917;\n  t.gafarabic = 0x06af;\n  t.gaffinalarabic = 0xfb93;\n  t.gafinitialarabic = 0xfb94;\n  t.gafmedialarabic = 0xfb95;\n  t.gagujarati = 0x0a97;\n  t.gagurmukhi = 0x0a17;\n  t.gahiragana = 0x304c;\n  t.gakatakana = 0x30ac;\n  t.gamma = 0x03b3;\n  t.gammalatinsmall = 0x0263;\n  t.gammasuperior = 0x02e0;\n  t.gangiacoptic = 0x03eb;\n  t.gbopomofo = 0x310d;\n  t.gbreve = 0x011f;\n  t.gcaron = 0x01e7;\n  t.gcedilla = 0x0123;\n  t.gcircle = 0x24d6;\n  t.gcircumflex = 0x011d;\n  t.gcommaaccent = 0x0123;\n  t.gdot = 0x0121;\n  t.gdotaccent = 0x0121;\n  t.gecyrillic = 0x0433;\n  t.gehiragana = 0x3052;\n  t.gekatakana = 0x30b2;\n  t.geometricallyequal = 0x2251;\n  t.gereshaccenthebrew = 0x059c;\n  t.gereshhebrew = 0x05f3;\n  t.gereshmuqdamhebrew = 0x059d;\n  t.germandbls = 0x00df;\n  t.gershayimaccenthebrew = 0x059e;\n  t.gershayimhebrew = 0x05f4;\n  t.getamark = 0x3013;\n  t.ghabengali = 0x0998;\n  t.ghadarmenian = 0x0572;\n  t.ghadeva = 0x0918;\n  t.ghagujarati = 0x0a98;\n  t.ghagurmukhi = 0x0a18;\n  t.ghainarabic = 0x063a;\n  t.ghainfinalarabic = 0xfece;\n  t.ghaininitialarabic = 0xfecf;\n  t.ghainmedialarabic = 0xfed0;\n  t.ghemiddlehookcyrillic = 0x0495;\n  t.ghestrokecyrillic = 0x0493;\n  t.gheupturncyrillic = 0x0491;\n  t.ghhadeva = 0x095a;\n  t.ghhagurmukhi = 0x0a5a;\n  t.ghook = 0x0260;\n  t.ghzsquare = 0x3393;\n  t.gihiragana = 0x304e;\n  t.gikatakana = 0x30ae;\n  t.gimarmenian = 0x0563;\n  t.gimel = 0x05d2;\n  t.gimeldagesh = 0xfb32;\n  t.gimeldageshhebrew = 0xfb32;\n  t.gimelhebrew = 0x05d2;\n  t.gjecyrillic = 0x0453;\n  t.glottalinvertedstroke = 0x01be;\n  t.glottalstop = 0x0294;\n  t.glottalstopinverted = 0x0296;\n  t.glottalstopmod = 0x02c0;\n  t.glottalstopreversed = 0x0295;\n  t.glottalstopreversedmod = 0x02c1;\n  t.glottalstopreversedsuperior = 0x02e4;\n  t.glottalstopstroke = 0x02a1;\n  t.glottalstopstrokereversed = 0x02a2;\n  t.gmacron = 0x1e21;\n  t.gmonospace = 0xff47;\n  t.gohiragana = 0x3054;\n  t.gokatakana = 0x30b4;\n  t.gparen = 0x24a2;\n  t.gpasquare = 0x33ac;\n  t.gradient = 0x2207;\n  t.grave = 0x0060;\n  t.gravebelowcmb = 0x0316;\n  t.gravecmb = 0x0300;\n  t.gravecomb = 0x0300;\n  t.gravedeva = 0x0953;\n  t.gravelowmod = 0x02ce;\n  t.gravemonospace = 0xff40;\n  t.gravetonecmb = 0x0340;\n  t.greater = 0x003e;\n  t.greaterequal = 0x2265;\n  t.greaterequalorless = 0x22db;\n  t.greatermonospace = 0xff1e;\n  t.greaterorequivalent = 0x2273;\n  t.greaterorless = 0x2277;\n  t.greateroverequal = 0x2267;\n  t.greatersmall = 0xfe65;\n  t.gscript = 0x0261;\n  t.gstroke = 0x01e5;\n  t.guhiragana = 0x3050;\n  t.guillemotleft = 0x00ab;\n  t.guillemotright = 0x00bb;\n  t.guilsinglleft = 0x2039;\n  t.guilsinglright = 0x203a;\n  t.gukatakana = 0x30b0;\n  t.guramusquare = 0x3318;\n  t.gysquare = 0x33c9;\n  t.h = 0x0068;\n  t.haabkhasiancyrillic = 0x04a9;\n  t.haaltonearabic = 0x06c1;\n  t.habengali = 0x09b9;\n  t.hadescendercyrillic = 0x04b3;\n  t.hadeva = 0x0939;\n  t.hagujarati = 0x0ab9;\n  t.hagurmukhi = 0x0a39;\n  t.haharabic = 0x062d;\n  t.hahfinalarabic = 0xfea2;\n  t.hahinitialarabic = 0xfea3;\n  t.hahiragana = 0x306f;\n  t.hahmedialarabic = 0xfea4;\n  t.haitusquare = 0x332a;\n  t.hakatakana = 0x30cf;\n  t.hakatakanahalfwidth = 0xff8a;\n  t.halantgurmukhi = 0x0a4d;\n  t.hamzaarabic = 0x0621;\n  t.hamzalowarabic = 0x0621;\n  t.hangulfiller = 0x3164;\n  t.hardsigncyrillic = 0x044a;\n  t.harpoonleftbarbup = 0x21bc;\n  t.harpoonrightbarbup = 0x21c0;\n  t.hasquare = 0x33ca;\n  t.hatafpatah = 0x05b2;\n  t.hatafpatah16 = 0x05b2;\n  t.hatafpatah23 = 0x05b2;\n  t.hatafpatah2f = 0x05b2;\n  t.hatafpatahhebrew = 0x05b2;\n  t.hatafpatahnarrowhebrew = 0x05b2;\n  t.hatafpatahquarterhebrew = 0x05b2;\n  t.hatafpatahwidehebrew = 0x05b2;\n  t.hatafqamats = 0x05b3;\n  t.hatafqamats1b = 0x05b3;\n  t.hatafqamats28 = 0x05b3;\n  t.hatafqamats34 = 0x05b3;\n  t.hatafqamatshebrew = 0x05b3;\n  t.hatafqamatsnarrowhebrew = 0x05b3;\n  t.hatafqamatsquarterhebrew = 0x05b3;\n  t.hatafqamatswidehebrew = 0x05b3;\n  t.hatafsegol = 0x05b1;\n  t.hatafsegol17 = 0x05b1;\n  t.hatafsegol24 = 0x05b1;\n  t.hatafsegol30 = 0x05b1;\n  t.hatafsegolhebrew = 0x05b1;\n  t.hatafsegolnarrowhebrew = 0x05b1;\n  t.hatafsegolquarterhebrew = 0x05b1;\n  t.hatafsegolwidehebrew = 0x05b1;\n  t.hbar = 0x0127;\n  t.hbopomofo = 0x310f;\n  t.hbrevebelow = 0x1e2b;\n  t.hcedilla = 0x1e29;\n  t.hcircle = 0x24d7;\n  t.hcircumflex = 0x0125;\n  t.hdieresis = 0x1e27;\n  t.hdotaccent = 0x1e23;\n  t.hdotbelow = 0x1e25;\n  t.he = 0x05d4;\n  t.heart = 0x2665;\n  t.heartsuitblack = 0x2665;\n  t.heartsuitwhite = 0x2661;\n  t.hedagesh = 0xfb34;\n  t.hedageshhebrew = 0xfb34;\n  t.hehaltonearabic = 0x06c1;\n  t.heharabic = 0x0647;\n  t.hehebrew = 0x05d4;\n  t.hehfinalaltonearabic = 0xfba7;\n  t.hehfinalalttwoarabic = 0xfeea;\n  t.hehfinalarabic = 0xfeea;\n  t.hehhamzaabovefinalarabic = 0xfba5;\n  t.hehhamzaaboveisolatedarabic = 0xfba4;\n  t.hehinitialaltonearabic = 0xfba8;\n  t.hehinitialarabic = 0xfeeb;\n  t.hehiragana = 0x3078;\n  t.hehmedialaltonearabic = 0xfba9;\n  t.hehmedialarabic = 0xfeec;\n  t.heiseierasquare = 0x337b;\n  t.hekatakana = 0x30d8;\n  t.hekatakanahalfwidth = 0xff8d;\n  t.hekutaarusquare = 0x3336;\n  t.henghook = 0x0267;\n  t.herutusquare = 0x3339;\n  t.het = 0x05d7;\n  t.hethebrew = 0x05d7;\n  t.hhook = 0x0266;\n  t.hhooksuperior = 0x02b1;\n  t.hieuhacirclekorean = 0x327b;\n  t.hieuhaparenkorean = 0x321b;\n  t.hieuhcirclekorean = 0x326d;\n  t.hieuhkorean = 0x314e;\n  t.hieuhparenkorean = 0x320d;\n  t.hihiragana = 0x3072;\n  t.hikatakana = 0x30d2;\n  t.hikatakanahalfwidth = 0xff8b;\n  t.hiriq = 0x05b4;\n  t.hiriq14 = 0x05b4;\n  t.hiriq21 = 0x05b4;\n  t.hiriq2d = 0x05b4;\n  t.hiriqhebrew = 0x05b4;\n  t.hiriqnarrowhebrew = 0x05b4;\n  t.hiriqquarterhebrew = 0x05b4;\n  t.hiriqwidehebrew = 0x05b4;\n  t.hlinebelow = 0x1e96;\n  t.hmonospace = 0xff48;\n  t.hoarmenian = 0x0570;\n  t.hohipthai = 0x0e2b;\n  t.hohiragana = 0x307b;\n  t.hokatakana = 0x30db;\n  t.hokatakanahalfwidth = 0xff8e;\n  t.holam = 0x05b9;\n  t.holam19 = 0x05b9;\n  t.holam26 = 0x05b9;\n  t.holam32 = 0x05b9;\n  t.holamhebrew = 0x05b9;\n  t.holamnarrowhebrew = 0x05b9;\n  t.holamquarterhebrew = 0x05b9;\n  t.holamwidehebrew = 0x05b9;\n  t.honokhukthai = 0x0e2e;\n  t.hookabovecomb = 0x0309;\n  t.hookcmb = 0x0309;\n  t.hookpalatalizedbelowcmb = 0x0321;\n  t.hookretroflexbelowcmb = 0x0322;\n  t.hoonsquare = 0x3342;\n  t.horicoptic = 0x03e9;\n  t.horizontalbar = 0x2015;\n  t.horncmb = 0x031b;\n  t.hotsprings = 0x2668;\n  t.house = 0x2302;\n  t.hparen = 0x24a3;\n  t.hsuperior = 0x02b0;\n  t.hturned = 0x0265;\n  t.huhiragana = 0x3075;\n  t.huiitosquare = 0x3333;\n  t.hukatakana = 0x30d5;\n  t.hukatakanahalfwidth = 0xff8c;\n  t.hungarumlaut = 0x02dd;\n  t.hungarumlautcmb = 0x030b;\n  t.hv = 0x0195;\n  t.hyphen = 0x002d;\n  t.hypheninferior = 0xf6e5;\n  t.hyphenmonospace = 0xff0d;\n  t.hyphensmall = 0xfe63;\n  t.hyphensuperior = 0xf6e6;\n  t.hyphentwo = 0x2010;\n  t.i = 0x0069;\n  t.iacute = 0x00ed;\n  t.iacyrillic = 0x044f;\n  t.ibengali = 0x0987;\n  t.ibopomofo = 0x3127;\n  t.ibreve = 0x012d;\n  t.icaron = 0x01d0;\n  t.icircle = 0x24d8;\n  t.icircumflex = 0x00ee;\n  t.icyrillic = 0x0456;\n  t.idblgrave = 0x0209;\n  t.ideographearthcircle = 0x328f;\n  t.ideographfirecircle = 0x328b;\n  t.ideographicallianceparen = 0x323f;\n  t.ideographiccallparen = 0x323a;\n  t.ideographiccentrecircle = 0x32a5;\n  t.ideographicclose = 0x3006;\n  t.ideographiccomma = 0x3001;\n  t.ideographiccommaleft = 0xff64;\n  t.ideographiccongratulationparen = 0x3237;\n  t.ideographiccorrectcircle = 0x32a3;\n  t.ideographicearthparen = 0x322f;\n  t.ideographicenterpriseparen = 0x323d;\n  t.ideographicexcellentcircle = 0x329d;\n  t.ideographicfestivalparen = 0x3240;\n  t.ideographicfinancialcircle = 0x3296;\n  t.ideographicfinancialparen = 0x3236;\n  t.ideographicfireparen = 0x322b;\n  t.ideographichaveparen = 0x3232;\n  t.ideographichighcircle = 0x32a4;\n  t.ideographiciterationmark = 0x3005;\n  t.ideographiclaborcircle = 0x3298;\n  t.ideographiclaborparen = 0x3238;\n  t.ideographicleftcircle = 0x32a7;\n  t.ideographiclowcircle = 0x32a6;\n  t.ideographicmedicinecircle = 0x32a9;\n  t.ideographicmetalparen = 0x322e;\n  t.ideographicmoonparen = 0x322a;\n  t.ideographicnameparen = 0x3234;\n  t.ideographicperiod = 0x3002;\n  t.ideographicprintcircle = 0x329e;\n  t.ideographicreachparen = 0x3243;\n  t.ideographicrepresentparen = 0x3239;\n  t.ideographicresourceparen = 0x323e;\n  t.ideographicrightcircle = 0x32a8;\n  t.ideographicsecretcircle = 0x3299;\n  t.ideographicselfparen = 0x3242;\n  t.ideographicsocietyparen = 0x3233;\n  t.ideographicspace = 0x3000;\n  t.ideographicspecialparen = 0x3235;\n  t.ideographicstockparen = 0x3231;\n  t.ideographicstudyparen = 0x323b;\n  t.ideographicsunparen = 0x3230;\n  t.ideographicsuperviseparen = 0x323c;\n  t.ideographicwaterparen = 0x322c;\n  t.ideographicwoodparen = 0x322d;\n  t.ideographiczero = 0x3007;\n  t.ideographmetalcircle = 0x328e;\n  t.ideographmooncircle = 0x328a;\n  t.ideographnamecircle = 0x3294;\n  t.ideographsuncircle = 0x3290;\n  t.ideographwatercircle = 0x328c;\n  t.ideographwoodcircle = 0x328d;\n  t.ideva = 0x0907;\n  t.idieresis = 0x00ef;\n  t.idieresisacute = 0x1e2f;\n  t.idieresiscyrillic = 0x04e5;\n  t.idotbelow = 0x1ecb;\n  t.iebrevecyrillic = 0x04d7;\n  t.iecyrillic = 0x0435;\n  t.ieungacirclekorean = 0x3275;\n  t.ieungaparenkorean = 0x3215;\n  t.ieungcirclekorean = 0x3267;\n  t.ieungkorean = 0x3147;\n  t.ieungparenkorean = 0x3207;\n  t.igrave = 0x00ec;\n  t.igujarati = 0x0a87;\n  t.igurmukhi = 0x0a07;\n  t.ihiragana = 0x3044;\n  t.ihookabove = 0x1ec9;\n  t.iibengali = 0x0988;\n  t.iicyrillic = 0x0438;\n  t.iideva = 0x0908;\n  t.iigujarati = 0x0a88;\n  t.iigurmukhi = 0x0a08;\n  t.iimatragurmukhi = 0x0a40;\n  t.iinvertedbreve = 0x020b;\n  t.iishortcyrillic = 0x0439;\n  t.iivowelsignbengali = 0x09c0;\n  t.iivowelsigndeva = 0x0940;\n  t.iivowelsigngujarati = 0x0ac0;\n  t.ij = 0x0133;\n  t.ikatakana = 0x30a4;\n  t.ikatakanahalfwidth = 0xff72;\n  t.ikorean = 0x3163;\n  t.ilde = 0x02dc;\n  t.iluyhebrew = 0x05ac;\n  t.imacron = 0x012b;\n  t.imacroncyrillic = 0x04e3;\n  t.imageorapproximatelyequal = 0x2253;\n  t.imatragurmukhi = 0x0a3f;\n  t.imonospace = 0xff49;\n  t.increment = 0x2206;\n  t.infinity = 0x221e;\n  t.iniarmenian = 0x056b;\n  t.integral = 0x222b;\n  t.integralbottom = 0x2321;\n  t.integralbt = 0x2321;\n  t.integralex = 0xf8f5;\n  t.integraltop = 0x2320;\n  t.integraltp = 0x2320;\n  t.intersection = 0x2229;\n  t.intisquare = 0x3305;\n  t.invbullet = 0x25d8;\n  t.invcircle = 0x25d9;\n  t.invsmileface = 0x263b;\n  t.iocyrillic = 0x0451;\n  t.iogonek = 0x012f;\n  t.iota = 0x03b9;\n  t.iotadieresis = 0x03ca;\n  t.iotadieresistonos = 0x0390;\n  t.iotalatin = 0x0269;\n  t.iotatonos = 0x03af;\n  t.iparen = 0x24a4;\n  t.irigurmukhi = 0x0a72;\n  t.ismallhiragana = 0x3043;\n  t.ismallkatakana = 0x30a3;\n  t.ismallkatakanahalfwidth = 0xff68;\n  t.issharbengali = 0x09fa;\n  t.istroke = 0x0268;\n  t.isuperior = 0xf6ed;\n  t.iterationhiragana = 0x309d;\n  t.iterationkatakana = 0x30fd;\n  t.itilde = 0x0129;\n  t.itildebelow = 0x1e2d;\n  t.iubopomofo = 0x3129;\n  t.iucyrillic = 0x044e;\n  t.ivowelsignbengali = 0x09bf;\n  t.ivowelsigndeva = 0x093f;\n  t.ivowelsigngujarati = 0x0abf;\n  t.izhitsacyrillic = 0x0475;\n  t.izhitsadblgravecyrillic = 0x0477;\n  t.j = 0x006a;\n  t.jaarmenian = 0x0571;\n  t.jabengali = 0x099c;\n  t.jadeva = 0x091c;\n  t.jagujarati = 0x0a9c;\n  t.jagurmukhi = 0x0a1c;\n  t.jbopomofo = 0x3110;\n  t.jcaron = 0x01f0;\n  t.jcircle = 0x24d9;\n  t.jcircumflex = 0x0135;\n  t.jcrossedtail = 0x029d;\n  t.jdotlessstroke = 0x025f;\n  t.jecyrillic = 0x0458;\n  t.jeemarabic = 0x062c;\n  t.jeemfinalarabic = 0xfe9e;\n  t.jeeminitialarabic = 0xfe9f;\n  t.jeemmedialarabic = 0xfea0;\n  t.jeharabic = 0x0698;\n  t.jehfinalarabic = 0xfb8b;\n  t.jhabengali = 0x099d;\n  t.jhadeva = 0x091d;\n  t.jhagujarati = 0x0a9d;\n  t.jhagurmukhi = 0x0a1d;\n  t.jheharmenian = 0x057b;\n  t.jis = 0x3004;\n  t.jmonospace = 0xff4a;\n  t.jparen = 0x24a5;\n  t.jsuperior = 0x02b2;\n  t.k = 0x006b;\n  t.kabashkircyrillic = 0x04a1;\n  t.kabengali = 0x0995;\n  t.kacute = 0x1e31;\n  t.kacyrillic = 0x043a;\n  t.kadescendercyrillic = 0x049b;\n  t.kadeva = 0x0915;\n  t.kaf = 0x05db;\n  t.kafarabic = 0x0643;\n  t.kafdagesh = 0xfb3b;\n  t.kafdageshhebrew = 0xfb3b;\n  t.kaffinalarabic = 0xfeda;\n  t.kafhebrew = 0x05db;\n  t.kafinitialarabic = 0xfedb;\n  t.kafmedialarabic = 0xfedc;\n  t.kafrafehebrew = 0xfb4d;\n  t.kagujarati = 0x0a95;\n  t.kagurmukhi = 0x0a15;\n  t.kahiragana = 0x304b;\n  t.kahookcyrillic = 0x04c4;\n  t.kakatakana = 0x30ab;\n  t.kakatakanahalfwidth = 0xff76;\n  t.kappa = 0x03ba;\n  t.kappasymbolgreek = 0x03f0;\n  t.kapyeounmieumkorean = 0x3171;\n  t.kapyeounphieuphkorean = 0x3184;\n  t.kapyeounpieupkorean = 0x3178;\n  t.kapyeounssangpieupkorean = 0x3179;\n  t.karoriisquare = 0x330d;\n  t.kashidaautoarabic = 0x0640;\n  t.kashidaautonosidebearingarabic = 0x0640;\n  t.kasmallkatakana = 0x30f5;\n  t.kasquare = 0x3384;\n  t.kasraarabic = 0x0650;\n  t.kasratanarabic = 0x064d;\n  t.kastrokecyrillic = 0x049f;\n  t.katahiraprolongmarkhalfwidth = 0xff70;\n  t.kaverticalstrokecyrillic = 0x049d;\n  t.kbopomofo = 0x310e;\n  t.kcalsquare = 0x3389;\n  t.kcaron = 0x01e9;\n  t.kcedilla = 0x0137;\n  t.kcircle = 0x24da;\n  t.kcommaaccent = 0x0137;\n  t.kdotbelow = 0x1e33;\n  t.keharmenian = 0x0584;\n  t.kehiragana = 0x3051;\n  t.kekatakana = 0x30b1;\n  t.kekatakanahalfwidth = 0xff79;\n  t.kenarmenian = 0x056f;\n  t.kesmallkatakana = 0x30f6;\n  t.kgreenlandic = 0x0138;\n  t.khabengali = 0x0996;\n  t.khacyrillic = 0x0445;\n  t.khadeva = 0x0916;\n  t.khagujarati = 0x0a96;\n  t.khagurmukhi = 0x0a16;\n  t.khaharabic = 0x062e;\n  t.khahfinalarabic = 0xfea6;\n  t.khahinitialarabic = 0xfea7;\n  t.khahmedialarabic = 0xfea8;\n  t.kheicoptic = 0x03e7;\n  t.khhadeva = 0x0959;\n  t.khhagurmukhi = 0x0a59;\n  t.khieukhacirclekorean = 0x3278;\n  t.khieukhaparenkorean = 0x3218;\n  t.khieukhcirclekorean = 0x326a;\n  t.khieukhkorean = 0x314b;\n  t.khieukhparenkorean = 0x320a;\n  t.khokhaithai = 0x0e02;\n  t.khokhonthai = 0x0e05;\n  t.khokhuatthai = 0x0e03;\n  t.khokhwaithai = 0x0e04;\n  t.khomutthai = 0x0e5b;\n  t.khook = 0x0199;\n  t.khorakhangthai = 0x0e06;\n  t.khzsquare = 0x3391;\n  t.kihiragana = 0x304d;\n  t.kikatakana = 0x30ad;\n  t.kikatakanahalfwidth = 0xff77;\n  t.kiroguramusquare = 0x3315;\n  t.kiromeetorusquare = 0x3316;\n  t.kirosquare = 0x3314;\n  t.kiyeokacirclekorean = 0x326e;\n  t.kiyeokaparenkorean = 0x320e;\n  t.kiyeokcirclekorean = 0x3260;\n  t.kiyeokkorean = 0x3131;\n  t.kiyeokparenkorean = 0x3200;\n  t.kiyeoksioskorean = 0x3133;\n  t.kjecyrillic = 0x045c;\n  t.klinebelow = 0x1e35;\n  t.klsquare = 0x3398;\n  t.kmcubedsquare = 0x33a6;\n  t.kmonospace = 0xff4b;\n  t.kmsquaredsquare = 0x33a2;\n  t.kohiragana = 0x3053;\n  t.kohmsquare = 0x33c0;\n  t.kokaithai = 0x0e01;\n  t.kokatakana = 0x30b3;\n  t.kokatakanahalfwidth = 0xff7a;\n  t.kooposquare = 0x331e;\n  t.koppacyrillic = 0x0481;\n  t.koreanstandardsymbol = 0x327f;\n  t.koroniscmb = 0x0343;\n  t.kparen = 0x24a6;\n  t.kpasquare = 0x33aa;\n  t.ksicyrillic = 0x046f;\n  t.ktsquare = 0x33cf;\n  t.kturned = 0x029e;\n  t.kuhiragana = 0x304f;\n  t.kukatakana = 0x30af;\n  t.kukatakanahalfwidth = 0xff78;\n  t.kvsquare = 0x33b8;\n  t.kwsquare = 0x33be;\n  t.l = 0x006c;\n  t.labengali = 0x09b2;\n  t.lacute = 0x013a;\n  t.ladeva = 0x0932;\n  t.lagujarati = 0x0ab2;\n  t.lagurmukhi = 0x0a32;\n  t.lakkhangyaothai = 0x0e45;\n  t.lamaleffinalarabic = 0xfefc;\n  t.lamalefhamzaabovefinalarabic = 0xfef8;\n  t.lamalefhamzaaboveisolatedarabic = 0xfef7;\n  t.lamalefhamzabelowfinalarabic = 0xfefa;\n  t.lamalefhamzabelowisolatedarabic = 0xfef9;\n  t.lamalefisolatedarabic = 0xfefb;\n  t.lamalefmaddaabovefinalarabic = 0xfef6;\n  t.lamalefmaddaaboveisolatedarabic = 0xfef5;\n  t.lamarabic = 0x0644;\n  t.lambda = 0x03bb;\n  t.lambdastroke = 0x019b;\n  t.lamed = 0x05dc;\n  t.lameddagesh = 0xfb3c;\n  t.lameddageshhebrew = 0xfb3c;\n  t.lamedhebrew = 0x05dc;\n  t.lamfinalarabic = 0xfede;\n  t.lamhahinitialarabic = 0xfcca;\n  t.laminitialarabic = 0xfedf;\n  t.lamjeeminitialarabic = 0xfcc9;\n  t.lamkhahinitialarabic = 0xfccb;\n  t.lamlamhehisolatedarabic = 0xfdf2;\n  t.lammedialarabic = 0xfee0;\n  t.lammeemhahinitialarabic = 0xfd88;\n  t.lammeeminitialarabic = 0xfccc;\n  t.largecircle = 0x25ef;\n  t.lbar = 0x019a;\n  t.lbelt = 0x026c;\n  t.lbopomofo = 0x310c;\n  t.lcaron = 0x013e;\n  t.lcedilla = 0x013c;\n  t.lcircle = 0x24db;\n  t.lcircumflexbelow = 0x1e3d;\n  t.lcommaaccent = 0x013c;\n  t.ldot = 0x0140;\n  t.ldotaccent = 0x0140;\n  t.ldotbelow = 0x1e37;\n  t.ldotbelowmacron = 0x1e39;\n  t.leftangleabovecmb = 0x031a;\n  t.lefttackbelowcmb = 0x0318;\n  t.less = 0x003c;\n  t.lessequal = 0x2264;\n  t.lessequalorgreater = 0x22da;\n  t.lessmonospace = 0xff1c;\n  t.lessorequivalent = 0x2272;\n  t.lessorgreater = 0x2276;\n  t.lessoverequal = 0x2266;\n  t.lesssmall = 0xfe64;\n  t.lezh = 0x026e;\n  t.lfblock = 0x258c;\n  t.lhookretroflex = 0x026d;\n  t.lira = 0x20a4;\n  t.liwnarmenian = 0x056c;\n  t.lj = 0x01c9;\n  t.ljecyrillic = 0x0459;\n  t.ll = 0xf6c0;\n  t.lladeva = 0x0933;\n  t.llagujarati = 0x0ab3;\n  t.llinebelow = 0x1e3b;\n  t.llladeva = 0x0934;\n  t.llvocalicbengali = 0x09e1;\n  t.llvocalicdeva = 0x0961;\n  t.llvocalicvowelsignbengali = 0x09e3;\n  t.llvocalicvowelsigndeva = 0x0963;\n  t.lmiddletilde = 0x026b;\n  t.lmonospace = 0xff4c;\n  t.lmsquare = 0x33d0;\n  t.lochulathai = 0x0e2c;\n  t.logicaland = 0x2227;\n  t.logicalnot = 0x00ac;\n  t.logicalnotreversed = 0x2310;\n  t.logicalor = 0x2228;\n  t.lolingthai = 0x0e25;\n  t.longs = 0x017f;\n  t.lowlinecenterline = 0xfe4e;\n  t.lowlinecmb = 0x0332;\n  t.lowlinedashed = 0xfe4d;\n  t.lozenge = 0x25ca;\n  t.lparen = 0x24a7;\n  t.lslash = 0x0142;\n  t.lsquare = 0x2113;\n  t.lsuperior = 0xf6ee;\n  t.ltshade = 0x2591;\n  t.luthai = 0x0e26;\n  t.lvocalicbengali = 0x098c;\n  t.lvocalicdeva = 0x090c;\n  t.lvocalicvowelsignbengali = 0x09e2;\n  t.lvocalicvowelsigndeva = 0x0962;\n  t.lxsquare = 0x33d3;\n  t.m = 0x006d;\n  t.mabengali = 0x09ae;\n  t.macron = 0x00af;\n  t.macronbelowcmb = 0x0331;\n  t.macroncmb = 0x0304;\n  t.macronlowmod = 0x02cd;\n  t.macronmonospace = 0xffe3;\n  t.macute = 0x1e3f;\n  t.madeva = 0x092e;\n  t.magujarati = 0x0aae;\n  t.magurmukhi = 0x0a2e;\n  t.mahapakhhebrew = 0x05a4;\n  t.mahapakhlefthebrew = 0x05a4;\n  t.mahiragana = 0x307e;\n  t.maichattawalowleftthai = 0xf895;\n  t.maichattawalowrightthai = 0xf894;\n  t.maichattawathai = 0x0e4b;\n  t.maichattawaupperleftthai = 0xf893;\n  t.maieklowleftthai = 0xf88c;\n  t.maieklowrightthai = 0xf88b;\n  t.maiekthai = 0x0e48;\n  t.maiekupperleftthai = 0xf88a;\n  t.maihanakatleftthai = 0xf884;\n  t.maihanakatthai = 0x0e31;\n  t.maitaikhuleftthai = 0xf889;\n  t.maitaikhuthai = 0x0e47;\n  t.maitholowleftthai = 0xf88f;\n  t.maitholowrightthai = 0xf88e;\n  t.maithothai = 0x0e49;\n  t.maithoupperleftthai = 0xf88d;\n  t.maitrilowleftthai = 0xf892;\n  t.maitrilowrightthai = 0xf891;\n  t.maitrithai = 0x0e4a;\n  t.maitriupperleftthai = 0xf890;\n  t.maiyamokthai = 0x0e46;\n  t.makatakana = 0x30de;\n  t.makatakanahalfwidth = 0xff8f;\n  t.male = 0x2642;\n  t.mansyonsquare = 0x3347;\n  t.maqafhebrew = 0x05be;\n  t.mars = 0x2642;\n  t.masoracirclehebrew = 0x05af;\n  t.masquare = 0x3383;\n  t.mbopomofo = 0x3107;\n  t.mbsquare = 0x33d4;\n  t.mcircle = 0x24dc;\n  t.mcubedsquare = 0x33a5;\n  t.mdotaccent = 0x1e41;\n  t.mdotbelow = 0x1e43;\n  t.meemarabic = 0x0645;\n  t.meemfinalarabic = 0xfee2;\n  t.meeminitialarabic = 0xfee3;\n  t.meemmedialarabic = 0xfee4;\n  t.meemmeeminitialarabic = 0xfcd1;\n  t.meemmeemisolatedarabic = 0xfc48;\n  t.meetorusquare = 0x334d;\n  t.mehiragana = 0x3081;\n  t.meizierasquare = 0x337e;\n  t.mekatakana = 0x30e1;\n  t.mekatakanahalfwidth = 0xff92;\n  t.mem = 0x05de;\n  t.memdagesh = 0xfb3e;\n  t.memdageshhebrew = 0xfb3e;\n  t.memhebrew = 0x05de;\n  t.menarmenian = 0x0574;\n  t.merkhahebrew = 0x05a5;\n  t.merkhakefulahebrew = 0x05a6;\n  t.merkhakefulalefthebrew = 0x05a6;\n  t.merkhalefthebrew = 0x05a5;\n  t.mhook = 0x0271;\n  t.mhzsquare = 0x3392;\n  t.middledotkatakanahalfwidth = 0xff65;\n  t.middot = 0x00b7;\n  t.mieumacirclekorean = 0x3272;\n  t.mieumaparenkorean = 0x3212;\n  t.mieumcirclekorean = 0x3264;\n  t.mieumkorean = 0x3141;\n  t.mieumpansioskorean = 0x3170;\n  t.mieumparenkorean = 0x3204;\n  t.mieumpieupkorean = 0x316e;\n  t.mieumsioskorean = 0x316f;\n  t.mihiragana = 0x307f;\n  t.mikatakana = 0x30df;\n  t.mikatakanahalfwidth = 0xff90;\n  t.minus = 0x2212;\n  t.minusbelowcmb = 0x0320;\n  t.minuscircle = 0x2296;\n  t.minusmod = 0x02d7;\n  t.minusplus = 0x2213;\n  t.minute = 0x2032;\n  t.miribaarusquare = 0x334a;\n  t.mirisquare = 0x3349;\n  t.mlonglegturned = 0x0270;\n  t.mlsquare = 0x3396;\n  t.mmcubedsquare = 0x33a3;\n  t.mmonospace = 0xff4d;\n  t.mmsquaredsquare = 0x339f;\n  t.mohiragana = 0x3082;\n  t.mohmsquare = 0x33c1;\n  t.mokatakana = 0x30e2;\n  t.mokatakanahalfwidth = 0xff93;\n  t.molsquare = 0x33d6;\n  t.momathai = 0x0e21;\n  t.moverssquare = 0x33a7;\n  t.moverssquaredsquare = 0x33a8;\n  t.mparen = 0x24a8;\n  t.mpasquare = 0x33ab;\n  t.mssquare = 0x33b3;\n  t.msuperior = 0xf6ef;\n  t.mturned = 0x026f;\n  t.mu = 0x00b5;\n  t.mu1 = 0x00b5;\n  t.muasquare = 0x3382;\n  t.muchgreater = 0x226b;\n  t.muchless = 0x226a;\n  t.mufsquare = 0x338c;\n  t.mugreek = 0x03bc;\n  t.mugsquare = 0x338d;\n  t.muhiragana = 0x3080;\n  t.mukatakana = 0x30e0;\n  t.mukatakanahalfwidth = 0xff91;\n  t.mulsquare = 0x3395;\n  t.multiply = 0x00d7;\n  t.mumsquare = 0x339b;\n  t.munahhebrew = 0x05a3;\n  t.munahlefthebrew = 0x05a3;\n  t.musicalnote = 0x266a;\n  t.musicalnotedbl = 0x266b;\n  t.musicflatsign = 0x266d;\n  t.musicsharpsign = 0x266f;\n  t.mussquare = 0x33b2;\n  t.muvsquare = 0x33b6;\n  t.muwsquare = 0x33bc;\n  t.mvmegasquare = 0x33b9;\n  t.mvsquare = 0x33b7;\n  t.mwmegasquare = 0x33bf;\n  t.mwsquare = 0x33bd;\n  t.n = 0x006e;\n  t.nabengali = 0x09a8;\n  t.nabla = 0x2207;\n  t.nacute = 0x0144;\n  t.nadeva = 0x0928;\n  t.nagujarati = 0x0aa8;\n  t.nagurmukhi = 0x0a28;\n  t.nahiragana = 0x306a;\n  t.nakatakana = 0x30ca;\n  t.nakatakanahalfwidth = 0xff85;\n  t.napostrophe = 0x0149;\n  t.nasquare = 0x3381;\n  t.nbopomofo = 0x310b;\n  t.nbspace = 0x00a0;\n  t.ncaron = 0x0148;\n  t.ncedilla = 0x0146;\n  t.ncircle = 0x24dd;\n  t.ncircumflexbelow = 0x1e4b;\n  t.ncommaaccent = 0x0146;\n  t.ndotaccent = 0x1e45;\n  t.ndotbelow = 0x1e47;\n  t.nehiragana = 0x306d;\n  t.nekatakana = 0x30cd;\n  t.nekatakanahalfwidth = 0xff88;\n  t.newsheqelsign = 0x20aa;\n  t.nfsquare = 0x338b;\n  t.ngabengali = 0x0999;\n  t.ngadeva = 0x0919;\n  t.ngagujarati = 0x0a99;\n  t.ngagurmukhi = 0x0a19;\n  t.ngonguthai = 0x0e07;\n  t.nhiragana = 0x3093;\n  t.nhookleft = 0x0272;\n  t.nhookretroflex = 0x0273;\n  t.nieunacirclekorean = 0x326f;\n  t.nieunaparenkorean = 0x320f;\n  t.nieuncieuckorean = 0x3135;\n  t.nieuncirclekorean = 0x3261;\n  t.nieunhieuhkorean = 0x3136;\n  t.nieunkorean = 0x3134;\n  t.nieunpansioskorean = 0x3168;\n  t.nieunparenkorean = 0x3201;\n  t.nieunsioskorean = 0x3167;\n  t.nieuntikeutkorean = 0x3166;\n  t.nihiragana = 0x306b;\n  t.nikatakana = 0x30cb;\n  t.nikatakanahalfwidth = 0xff86;\n  t.nikhahitleftthai = 0xf899;\n  t.nikhahitthai = 0x0e4d;\n  t.nine = 0x0039;\n  t.ninearabic = 0x0669;\n  t.ninebengali = 0x09ef;\n  t.ninecircle = 0x2468;\n  t.ninecircleinversesansserif = 0x2792;\n  t.ninedeva = 0x096f;\n  t.ninegujarati = 0x0aef;\n  t.ninegurmukhi = 0x0a6f;\n  t.ninehackarabic = 0x0669;\n  t.ninehangzhou = 0x3029;\n  t.nineideographicparen = 0x3228;\n  t.nineinferior = 0x2089;\n  t.ninemonospace = 0xff19;\n  t.nineoldstyle = 0xf739;\n  t.nineparen = 0x247c;\n  t.nineperiod = 0x2490;\n  t.ninepersian = 0x06f9;\n  t.nineroman = 0x2178;\n  t.ninesuperior = 0x2079;\n  t.nineteencircle = 0x2472;\n  t.nineteenparen = 0x2486;\n  t.nineteenperiod = 0x249a;\n  t.ninethai = 0x0e59;\n  t.nj = 0x01cc;\n  t.njecyrillic = 0x045a;\n  t.nkatakana = 0x30f3;\n  t.nkatakanahalfwidth = 0xff9d;\n  t.nlegrightlong = 0x019e;\n  t.nlinebelow = 0x1e49;\n  t.nmonospace = 0xff4e;\n  t.nmsquare = 0x339a;\n  t.nnabengali = 0x09a3;\n  t.nnadeva = 0x0923;\n  t.nnagujarati = 0x0aa3;\n  t.nnagurmukhi = 0x0a23;\n  t.nnnadeva = 0x0929;\n  t.nohiragana = 0x306e;\n  t.nokatakana = 0x30ce;\n  t.nokatakanahalfwidth = 0xff89;\n  t.nonbreakingspace = 0x00a0;\n  t.nonenthai = 0x0e13;\n  t.nonuthai = 0x0e19;\n  t.noonarabic = 0x0646;\n  t.noonfinalarabic = 0xfee6;\n  t.noonghunnaarabic = 0x06ba;\n  t.noonghunnafinalarabic = 0xfb9f;\n  t.nooninitialarabic = 0xfee7;\n  t.noonjeeminitialarabic = 0xfcd2;\n  t.noonjeemisolatedarabic = 0xfc4b;\n  t.noonmedialarabic = 0xfee8;\n  t.noonmeeminitialarabic = 0xfcd5;\n  t.noonmeemisolatedarabic = 0xfc4e;\n  t.noonnoonfinalarabic = 0xfc8d;\n  t.notcontains = 0x220c;\n  t.notelement = 0x2209;\n  t.notelementof = 0x2209;\n  t.notequal = 0x2260;\n  t.notgreater = 0x226f;\n  t.notgreaternorequal = 0x2271;\n  t.notgreaternorless = 0x2279;\n  t.notidentical = 0x2262;\n  t.notless = 0x226e;\n  t.notlessnorequal = 0x2270;\n  t.notparallel = 0x2226;\n  t.notprecedes = 0x2280;\n  t.notsubset = 0x2284;\n  t.notsucceeds = 0x2281;\n  t.notsuperset = 0x2285;\n  t.nowarmenian = 0x0576;\n  t.nparen = 0x24a9;\n  t.nssquare = 0x33b1;\n  t.nsuperior = 0x207f;\n  t.ntilde = 0x00f1;\n  t.nu = 0x03bd;\n  t.nuhiragana = 0x306c;\n  t.nukatakana = 0x30cc;\n  t.nukatakanahalfwidth = 0xff87;\n  t.nuktabengali = 0x09bc;\n  t.nuktadeva = 0x093c;\n  t.nuktagujarati = 0x0abc;\n  t.nuktagurmukhi = 0x0a3c;\n  t.numbersign = 0x0023;\n  t.numbersignmonospace = 0xff03;\n  t.numbersignsmall = 0xfe5f;\n  t.numeralsigngreek = 0x0374;\n  t.numeralsignlowergreek = 0x0375;\n  t.numero = 0x2116;\n  t.nun = 0x05e0;\n  t.nundagesh = 0xfb40;\n  t.nundageshhebrew = 0xfb40;\n  t.nunhebrew = 0x05e0;\n  t.nvsquare = 0x33b5;\n  t.nwsquare = 0x33bb;\n  t.nyabengali = 0x099e;\n  t.nyadeva = 0x091e;\n  t.nyagujarati = 0x0a9e;\n  t.nyagurmukhi = 0x0a1e;\n  t.o = 0x006f;\n  t.oacute = 0x00f3;\n  t.oangthai = 0x0e2d;\n  t.obarred = 0x0275;\n  t.obarredcyrillic = 0x04e9;\n  t.obarreddieresiscyrillic = 0x04eb;\n  t.obengali = 0x0993;\n  t.obopomofo = 0x311b;\n  t.obreve = 0x014f;\n  t.ocandradeva = 0x0911;\n  t.ocandragujarati = 0x0a91;\n  t.ocandravowelsigndeva = 0x0949;\n  t.ocandravowelsigngujarati = 0x0ac9;\n  t.ocaron = 0x01d2;\n  t.ocircle = 0x24de;\n  t.ocircumflex = 0x00f4;\n  t.ocircumflexacute = 0x1ed1;\n  t.ocircumflexdotbelow = 0x1ed9;\n  t.ocircumflexgrave = 0x1ed3;\n  t.ocircumflexhookabove = 0x1ed5;\n  t.ocircumflextilde = 0x1ed7;\n  t.ocyrillic = 0x043e;\n  t.odblacute = 0x0151;\n  t.odblgrave = 0x020d;\n  t.odeva = 0x0913;\n  t.odieresis = 0x00f6;\n  t.odieresiscyrillic = 0x04e7;\n  t.odotbelow = 0x1ecd;\n  t.oe = 0x0153;\n  t.oekorean = 0x315a;\n  t.ogonek = 0x02db;\n  t.ogonekcmb = 0x0328;\n  t.ograve = 0x00f2;\n  t.ogujarati = 0x0a93;\n  t.oharmenian = 0x0585;\n  t.ohiragana = 0x304a;\n  t.ohookabove = 0x1ecf;\n  t.ohorn = 0x01a1;\n  t.ohornacute = 0x1edb;\n  t.ohorndotbelow = 0x1ee3;\n  t.ohorngrave = 0x1edd;\n  t.ohornhookabove = 0x1edf;\n  t.ohorntilde = 0x1ee1;\n  t.ohungarumlaut = 0x0151;\n  t.oi = 0x01a3;\n  t.oinvertedbreve = 0x020f;\n  t.okatakana = 0x30aa;\n  t.okatakanahalfwidth = 0xff75;\n  t.okorean = 0x3157;\n  t.olehebrew = 0x05ab;\n  t.omacron = 0x014d;\n  t.omacronacute = 0x1e53;\n  t.omacrongrave = 0x1e51;\n  t.omdeva = 0x0950;\n  t.omega = 0x03c9;\n  t.omega1 = 0x03d6;\n  t.omegacyrillic = 0x0461;\n  t.omegalatinclosed = 0x0277;\n  t.omegaroundcyrillic = 0x047b;\n  t.omegatitlocyrillic = 0x047d;\n  t.omegatonos = 0x03ce;\n  t.omgujarati = 0x0ad0;\n  t.omicron = 0x03bf;\n  t.omicrontonos = 0x03cc;\n  t.omonospace = 0xff4f;\n  t.one = 0x0031;\n  t.onearabic = 0x0661;\n  t.onebengali = 0x09e7;\n  t.onecircle = 0x2460;\n  t.onecircleinversesansserif = 0x278a;\n  t.onedeva = 0x0967;\n  t.onedotenleader = 0x2024;\n  t.oneeighth = 0x215b;\n  t.onefitted = 0xf6dc;\n  t.onegujarati = 0x0ae7;\n  t.onegurmukhi = 0x0a67;\n  t.onehackarabic = 0x0661;\n  t.onehalf = 0x00bd;\n  t.onehangzhou = 0x3021;\n  t.oneideographicparen = 0x3220;\n  t.oneinferior = 0x2081;\n  t.onemonospace = 0xff11;\n  t.onenumeratorbengali = 0x09f4;\n  t.oneoldstyle = 0xf731;\n  t.oneparen = 0x2474;\n  t.oneperiod = 0x2488;\n  t.onepersian = 0x06f1;\n  t.onequarter = 0x00bc;\n  t.oneroman = 0x2170;\n  t.onesuperior = 0x00b9;\n  t.onethai = 0x0e51;\n  t.onethird = 0x2153;\n  t.oogonek = 0x01eb;\n  t.oogonekmacron = 0x01ed;\n  t.oogurmukhi = 0x0a13;\n  t.oomatragurmukhi = 0x0a4b;\n  t.oopen = 0x0254;\n  t.oparen = 0x24aa;\n  t.openbullet = 0x25e6;\n  t.option = 0x2325;\n  t.ordfeminine = 0x00aa;\n  t.ordmasculine = 0x00ba;\n  t.orthogonal = 0x221f;\n  t.oshortdeva = 0x0912;\n  t.oshortvowelsigndeva = 0x094a;\n  t.oslash = 0x00f8;\n  t.oslashacute = 0x01ff;\n  t.osmallhiragana = 0x3049;\n  t.osmallkatakana = 0x30a9;\n  t.osmallkatakanahalfwidth = 0xff6b;\n  t.ostrokeacute = 0x01ff;\n  t.osuperior = 0xf6f0;\n  t.otcyrillic = 0x047f;\n  t.otilde = 0x00f5;\n  t.otildeacute = 0x1e4d;\n  t.otildedieresis = 0x1e4f;\n  t.oubopomofo = 0x3121;\n  t.overline = 0x203e;\n  t.overlinecenterline = 0xfe4a;\n  t.overlinecmb = 0x0305;\n  t.overlinedashed = 0xfe49;\n  t.overlinedblwavy = 0xfe4c;\n  t.overlinewavy = 0xfe4b;\n  t.overscore = 0x00af;\n  t.ovowelsignbengali = 0x09cb;\n  t.ovowelsigndeva = 0x094b;\n  t.ovowelsigngujarati = 0x0acb;\n  t.p = 0x0070;\n  t.paampssquare = 0x3380;\n  t.paasentosquare = 0x332b;\n  t.pabengali = 0x09aa;\n  t.pacute = 0x1e55;\n  t.padeva = 0x092a;\n  t.pagedown = 0x21df;\n  t.pageup = 0x21de;\n  t.pagujarati = 0x0aaa;\n  t.pagurmukhi = 0x0a2a;\n  t.pahiragana = 0x3071;\n  t.paiyannoithai = 0x0e2f;\n  t.pakatakana = 0x30d1;\n  t.palatalizationcyrilliccmb = 0x0484;\n  t.palochkacyrillic = 0x04c0;\n  t.pansioskorean = 0x317f;\n  t.paragraph = 0x00b6;\n  t.parallel = 0x2225;\n  t.parenleft = 0x0028;\n  t.parenleftaltonearabic = 0xfd3e;\n  t.parenleftbt = 0xf8ed;\n  t.parenleftex = 0xf8ec;\n  t.parenleftinferior = 0x208d;\n  t.parenleftmonospace = 0xff08;\n  t.parenleftsmall = 0xfe59;\n  t.parenleftsuperior = 0x207d;\n  t.parenlefttp = 0xf8eb;\n  t.parenleftvertical = 0xfe35;\n  t.parenright = 0x0029;\n  t.parenrightaltonearabic = 0xfd3f;\n  t.parenrightbt = 0xf8f8;\n  t.parenrightex = 0xf8f7;\n  t.parenrightinferior = 0x208e;\n  t.parenrightmonospace = 0xff09;\n  t.parenrightsmall = 0xfe5a;\n  t.parenrightsuperior = 0x207e;\n  t.parenrighttp = 0xf8f6;\n  t.parenrightvertical = 0xfe36;\n  t.partialdiff = 0x2202;\n  t.paseqhebrew = 0x05c0;\n  t.pashtahebrew = 0x0599;\n  t.pasquare = 0x33a9;\n  t.patah = 0x05b7;\n  t.patah11 = 0x05b7;\n  t.patah1d = 0x05b7;\n  t.patah2a = 0x05b7;\n  t.patahhebrew = 0x05b7;\n  t.patahnarrowhebrew = 0x05b7;\n  t.patahquarterhebrew = 0x05b7;\n  t.patahwidehebrew = 0x05b7;\n  t.pazerhebrew = 0x05a1;\n  t.pbopomofo = 0x3106;\n  t.pcircle = 0x24df;\n  t.pdotaccent = 0x1e57;\n  t.pe = 0x05e4;\n  t.pecyrillic = 0x043f;\n  t.pedagesh = 0xfb44;\n  t.pedageshhebrew = 0xfb44;\n  t.peezisquare = 0x333b;\n  t.pefinaldageshhebrew = 0xfb43;\n  t.peharabic = 0x067e;\n  t.peharmenian = 0x057a;\n  t.pehebrew = 0x05e4;\n  t.pehfinalarabic = 0xfb57;\n  t.pehinitialarabic = 0xfb58;\n  t.pehiragana = 0x307a;\n  t.pehmedialarabic = 0xfb59;\n  t.pekatakana = 0x30da;\n  t.pemiddlehookcyrillic = 0x04a7;\n  t.perafehebrew = 0xfb4e;\n  t.percent = 0x0025;\n  t.percentarabic = 0x066a;\n  t.percentmonospace = 0xff05;\n  t.percentsmall = 0xfe6a;\n  t.period = 0x002e;\n  t.periodarmenian = 0x0589;\n  t.periodcentered = 0x00b7;\n  t.periodhalfwidth = 0xff61;\n  t.periodinferior = 0xf6e7;\n  t.periodmonospace = 0xff0e;\n  t.periodsmall = 0xfe52;\n  t.periodsuperior = 0xf6e8;\n  t.perispomenigreekcmb = 0x0342;\n  t.perpendicular = 0x22a5;\n  t.perthousand = 0x2030;\n  t.peseta = 0x20a7;\n  t.pfsquare = 0x338a;\n  t.phabengali = 0x09ab;\n  t.phadeva = 0x092b;\n  t.phagujarati = 0x0aab;\n  t.phagurmukhi = 0x0a2b;\n  t.phi = 0x03c6;\n  t.phi1 = 0x03d5;\n  t.phieuphacirclekorean = 0x327a;\n  t.phieuphaparenkorean = 0x321a;\n  t.phieuphcirclekorean = 0x326c;\n  t.phieuphkorean = 0x314d;\n  t.phieuphparenkorean = 0x320c;\n  t.philatin = 0x0278;\n  t.phinthuthai = 0x0e3a;\n  t.phisymbolgreek = 0x03d5;\n  t.phook = 0x01a5;\n  t.phophanthai = 0x0e1e;\n  t.phophungthai = 0x0e1c;\n  t.phosamphaothai = 0x0e20;\n  t.pi = 0x03c0;\n  t.pieupacirclekorean = 0x3273;\n  t.pieupaparenkorean = 0x3213;\n  t.pieupcieuckorean = 0x3176;\n  t.pieupcirclekorean = 0x3265;\n  t.pieupkiyeokkorean = 0x3172;\n  t.pieupkorean = 0x3142;\n  t.pieupparenkorean = 0x3205;\n  t.pieupsioskiyeokkorean = 0x3174;\n  t.pieupsioskorean = 0x3144;\n  t.pieupsiostikeutkorean = 0x3175;\n  t.pieupthieuthkorean = 0x3177;\n  t.pieuptikeutkorean = 0x3173;\n  t.pihiragana = 0x3074;\n  t.pikatakana = 0x30d4;\n  t.pisymbolgreek = 0x03d6;\n  t.piwrarmenian = 0x0583;\n  t.planckover2pi = 0x210f;\n  t.planckover2pi1 = 0x210f;\n  t.plus = 0x002b;\n  t.plusbelowcmb = 0x031f;\n  t.pluscircle = 0x2295;\n  t.plusminus = 0x00b1;\n  t.plusmod = 0x02d6;\n  t.plusmonospace = 0xff0b;\n  t.plussmall = 0xfe62;\n  t.plussuperior = 0x207a;\n  t.pmonospace = 0xff50;\n  t.pmsquare = 0x33d8;\n  t.pohiragana = 0x307d;\n  t.pointingindexdownwhite = 0x261f;\n  t.pointingindexleftwhite = 0x261c;\n  t.pointingindexrightwhite = 0x261e;\n  t.pointingindexupwhite = 0x261d;\n  t.pokatakana = 0x30dd;\n  t.poplathai = 0x0e1b;\n  t.postalmark = 0x3012;\n  t.postalmarkface = 0x3020;\n  t.pparen = 0x24ab;\n  t.precedes = 0x227a;\n  t.prescription = 0x211e;\n  t.primemod = 0x02b9;\n  t.primereversed = 0x2035;\n  t.product = 0x220f;\n  t.projective = 0x2305;\n  t.prolongedkana = 0x30fc;\n  t.propellor = 0x2318;\n  t.propersubset = 0x2282;\n  t.propersuperset = 0x2283;\n  t.proportion = 0x2237;\n  t.proportional = 0x221d;\n  t.psi = 0x03c8;\n  t.psicyrillic = 0x0471;\n  t.psilipneumatacyrilliccmb = 0x0486;\n  t.pssquare = 0x33b0;\n  t.puhiragana = 0x3077;\n  t.pukatakana = 0x30d7;\n  t.pvsquare = 0x33b4;\n  t.pwsquare = 0x33ba;\n  t.q = 0x0071;\n  t.qadeva = 0x0958;\n  t.qadmahebrew = 0x05a8;\n  t.qafarabic = 0x0642;\n  t.qaffinalarabic = 0xfed6;\n  t.qafinitialarabic = 0xfed7;\n  t.qafmedialarabic = 0xfed8;\n  t.qamats = 0x05b8;\n  t.qamats10 = 0x05b8;\n  t.qamats1a = 0x05b8;\n  t.qamats1c = 0x05b8;\n  t.qamats27 = 0x05b8;\n  t.qamats29 = 0x05b8;\n  t.qamats33 = 0x05b8;\n  t.qamatsde = 0x05b8;\n  t.qamatshebrew = 0x05b8;\n  t.qamatsnarrowhebrew = 0x05b8;\n  t.qamatsqatanhebrew = 0x05b8;\n  t.qamatsqatannarrowhebrew = 0x05b8;\n  t.qamatsqatanquarterhebrew = 0x05b8;\n  t.qamatsqatanwidehebrew = 0x05b8;\n  t.qamatsquarterhebrew = 0x05b8;\n  t.qamatswidehebrew = 0x05b8;\n  t.qarneyparahebrew = 0x059f;\n  t.qbopomofo = 0x3111;\n  t.qcircle = 0x24e0;\n  t.qhook = 0x02a0;\n  t.qmonospace = 0xff51;\n  t.qof = 0x05e7;\n  t.qofdagesh = 0xfb47;\n  t.qofdageshhebrew = 0xfb47;\n  t.qofhebrew = 0x05e7;\n  t.qparen = 0x24ac;\n  t.quarternote = 0x2669;\n  t.qubuts = 0x05bb;\n  t.qubuts18 = 0x05bb;\n  t.qubuts25 = 0x05bb;\n  t.qubuts31 = 0x05bb;\n  t.qubutshebrew = 0x05bb;\n  t.qubutsnarrowhebrew = 0x05bb;\n  t.qubutsquarterhebrew = 0x05bb;\n  t.qubutswidehebrew = 0x05bb;\n  t.question = 0x003f;\n  t.questionarabic = 0x061f;\n  t.questionarmenian = 0x055e;\n  t.questiondown = 0x00bf;\n  t.questiondownsmall = 0xf7bf;\n  t.questiongreek = 0x037e;\n  t.questionmonospace = 0xff1f;\n  t.questionsmall = 0xf73f;\n  t.quotedbl = 0x0022;\n  t.quotedblbase = 0x201e;\n  t.quotedblleft = 0x201c;\n  t.quotedblmonospace = 0xff02;\n  t.quotedblprime = 0x301e;\n  t.quotedblprimereversed = 0x301d;\n  t.quotedblright = 0x201d;\n  t.quoteleft = 0x2018;\n  t.quoteleftreversed = 0x201b;\n  t.quotereversed = 0x201b;\n  t.quoteright = 0x2019;\n  t.quoterightn = 0x0149;\n  t.quotesinglbase = 0x201a;\n  t.quotesingle = 0x0027;\n  t.quotesinglemonospace = 0xff07;\n  t.r = 0x0072;\n  t.raarmenian = 0x057c;\n  t.rabengali = 0x09b0;\n  t.racute = 0x0155;\n  t.radeva = 0x0930;\n  t.radical = 0x221a;\n  t.radicalex = 0xf8e5;\n  t.radoverssquare = 0x33ae;\n  t.radoverssquaredsquare = 0x33af;\n  t.radsquare = 0x33ad;\n  t.rafe = 0x05bf;\n  t.rafehebrew = 0x05bf;\n  t.ragujarati = 0x0ab0;\n  t.ragurmukhi = 0x0a30;\n  t.rahiragana = 0x3089;\n  t.rakatakana = 0x30e9;\n  t.rakatakanahalfwidth = 0xff97;\n  t.ralowerdiagonalbengali = 0x09f1;\n  t.ramiddlediagonalbengali = 0x09f0;\n  t.ramshorn = 0x0264;\n  t.ratio = 0x2236;\n  t.rbopomofo = 0x3116;\n  t.rcaron = 0x0159;\n  t.rcedilla = 0x0157;\n  t.rcircle = 0x24e1;\n  t.rcommaaccent = 0x0157;\n  t.rdblgrave = 0x0211;\n  t.rdotaccent = 0x1e59;\n  t.rdotbelow = 0x1e5b;\n  t.rdotbelowmacron = 0x1e5d;\n  t.referencemark = 0x203b;\n  t.reflexsubset = 0x2286;\n  t.reflexsuperset = 0x2287;\n  t.registered = 0x00ae;\n  t.registersans = 0xf8e8;\n  t.registerserif = 0xf6da;\n  t.reharabic = 0x0631;\n  t.reharmenian = 0x0580;\n  t.rehfinalarabic = 0xfeae;\n  t.rehiragana = 0x308c;\n  t.rekatakana = 0x30ec;\n  t.rekatakanahalfwidth = 0xff9a;\n  t.resh = 0x05e8;\n  t.reshdageshhebrew = 0xfb48;\n  t.reshhebrew = 0x05e8;\n  t.reversedtilde = 0x223d;\n  t.reviahebrew = 0x0597;\n  t.reviamugrashhebrew = 0x0597;\n  t.revlogicalnot = 0x2310;\n  t.rfishhook = 0x027e;\n  t.rfishhookreversed = 0x027f;\n  t.rhabengali = 0x09dd;\n  t.rhadeva = 0x095d;\n  t.rho = 0x03c1;\n  t.rhook = 0x027d;\n  t.rhookturned = 0x027b;\n  t.rhookturnedsuperior = 0x02b5;\n  t.rhosymbolgreek = 0x03f1;\n  t.rhotichookmod = 0x02de;\n  t.rieulacirclekorean = 0x3271;\n  t.rieulaparenkorean = 0x3211;\n  t.rieulcirclekorean = 0x3263;\n  t.rieulhieuhkorean = 0x3140;\n  t.rieulkiyeokkorean = 0x313a;\n  t.rieulkiyeoksioskorean = 0x3169;\n  t.rieulkorean = 0x3139;\n  t.rieulmieumkorean = 0x313b;\n  t.rieulpansioskorean = 0x316c;\n  t.rieulparenkorean = 0x3203;\n  t.rieulphieuphkorean = 0x313f;\n  t.rieulpieupkorean = 0x313c;\n  t.rieulpieupsioskorean = 0x316b;\n  t.rieulsioskorean = 0x313d;\n  t.rieulthieuthkorean = 0x313e;\n  t.rieultikeutkorean = 0x316a;\n  t.rieulyeorinhieuhkorean = 0x316d;\n  t.rightangle = 0x221f;\n  t.righttackbelowcmb = 0x0319;\n  t.righttriangle = 0x22bf;\n  t.rihiragana = 0x308a;\n  t.rikatakana = 0x30ea;\n  t.rikatakanahalfwidth = 0xff98;\n  t.ring = 0x02da;\n  t.ringbelowcmb = 0x0325;\n  t.ringcmb = 0x030a;\n  t.ringhalfleft = 0x02bf;\n  t.ringhalfleftarmenian = 0x0559;\n  t.ringhalfleftbelowcmb = 0x031c;\n  t.ringhalfleftcentered = 0x02d3;\n  t.ringhalfright = 0x02be;\n  t.ringhalfrightbelowcmb = 0x0339;\n  t.ringhalfrightcentered = 0x02d2;\n  t.rinvertedbreve = 0x0213;\n  t.rittorusquare = 0x3351;\n  t.rlinebelow = 0x1e5f;\n  t.rlongleg = 0x027c;\n  t.rlonglegturned = 0x027a;\n  t.rmonospace = 0xff52;\n  t.rohiragana = 0x308d;\n  t.rokatakana = 0x30ed;\n  t.rokatakanahalfwidth = 0xff9b;\n  t.roruathai = 0x0e23;\n  t.rparen = 0x24ad;\n  t.rrabengali = 0x09dc;\n  t.rradeva = 0x0931;\n  t.rragurmukhi = 0x0a5c;\n  t.rreharabic = 0x0691;\n  t.rrehfinalarabic = 0xfb8d;\n  t.rrvocalicbengali = 0x09e0;\n  t.rrvocalicdeva = 0x0960;\n  t.rrvocalicgujarati = 0x0ae0;\n  t.rrvocalicvowelsignbengali = 0x09c4;\n  t.rrvocalicvowelsigndeva = 0x0944;\n  t.rrvocalicvowelsigngujarati = 0x0ac4;\n  t.rsuperior = 0xf6f1;\n  t.rtblock = 0x2590;\n  t.rturned = 0x0279;\n  t.rturnedsuperior = 0x02b4;\n  t.ruhiragana = 0x308b;\n  t.rukatakana = 0x30eb;\n  t.rukatakanahalfwidth = 0xff99;\n  t.rupeemarkbengali = 0x09f2;\n  t.rupeesignbengali = 0x09f3;\n  t.rupiah = 0xf6dd;\n  t.ruthai = 0x0e24;\n  t.rvocalicbengali = 0x098b;\n  t.rvocalicdeva = 0x090b;\n  t.rvocalicgujarati = 0x0a8b;\n  t.rvocalicvowelsignbengali = 0x09c3;\n  t.rvocalicvowelsigndeva = 0x0943;\n  t.rvocalicvowelsigngujarati = 0x0ac3;\n  t.s = 0x0073;\n  t.sabengali = 0x09b8;\n  t.sacute = 0x015b;\n  t.sacutedotaccent = 0x1e65;\n  t.sadarabic = 0x0635;\n  t.sadeva = 0x0938;\n  t.sadfinalarabic = 0xfeba;\n  t.sadinitialarabic = 0xfebb;\n  t.sadmedialarabic = 0xfebc;\n  t.sagujarati = 0x0ab8;\n  t.sagurmukhi = 0x0a38;\n  t.sahiragana = 0x3055;\n  t.sakatakana = 0x30b5;\n  t.sakatakanahalfwidth = 0xff7b;\n  t.sallallahoualayhewasallamarabic = 0xfdfa;\n  t.samekh = 0x05e1;\n  t.samekhdagesh = 0xfb41;\n  t.samekhdageshhebrew = 0xfb41;\n  t.samekhhebrew = 0x05e1;\n  t.saraaathai = 0x0e32;\n  t.saraaethai = 0x0e41;\n  t.saraaimaimalaithai = 0x0e44;\n  t.saraaimaimuanthai = 0x0e43;\n  t.saraamthai = 0x0e33;\n  t.saraathai = 0x0e30;\n  t.saraethai = 0x0e40;\n  t.saraiileftthai = 0xf886;\n  t.saraiithai = 0x0e35;\n  t.saraileftthai = 0xf885;\n  t.saraithai = 0x0e34;\n  t.saraothai = 0x0e42;\n  t.saraueeleftthai = 0xf888;\n  t.saraueethai = 0x0e37;\n  t.saraueleftthai = 0xf887;\n  t.sarauethai = 0x0e36;\n  t.sarauthai = 0x0e38;\n  t.sarauuthai = 0x0e39;\n  t.sbopomofo = 0x3119;\n  t.scaron = 0x0161;\n  t.scarondotaccent = 0x1e67;\n  t.scedilla = 0x015f;\n  t.schwa = 0x0259;\n  t.schwacyrillic = 0x04d9;\n  t.schwadieresiscyrillic = 0x04db;\n  t.schwahook = 0x025a;\n  t.scircle = 0x24e2;\n  t.scircumflex = 0x015d;\n  t.scommaaccent = 0x0219;\n  t.sdotaccent = 0x1e61;\n  t.sdotbelow = 0x1e63;\n  t.sdotbelowdotaccent = 0x1e69;\n  t.seagullbelowcmb = 0x033c;\n  t.second = 0x2033;\n  t.secondtonechinese = 0x02ca;\n  t.section = 0x00a7;\n  t.seenarabic = 0x0633;\n  t.seenfinalarabic = 0xfeb2;\n  t.seeninitialarabic = 0xfeb3;\n  t.seenmedialarabic = 0xfeb4;\n  t.segol = 0x05b6;\n  t.segol13 = 0x05b6;\n  t.segol1f = 0x05b6;\n  t.segol2c = 0x05b6;\n  t.segolhebrew = 0x05b6;\n  t.segolnarrowhebrew = 0x05b6;\n  t.segolquarterhebrew = 0x05b6;\n  t.segoltahebrew = 0x0592;\n  t.segolwidehebrew = 0x05b6;\n  t.seharmenian = 0x057d;\n  t.sehiragana = 0x305b;\n  t.sekatakana = 0x30bb;\n  t.sekatakanahalfwidth = 0xff7e;\n  t.semicolon = 0x003b;\n  t.semicolonarabic = 0x061b;\n  t.semicolonmonospace = 0xff1b;\n  t.semicolonsmall = 0xfe54;\n  t.semivoicedmarkkana = 0x309c;\n  t.semivoicedmarkkanahalfwidth = 0xff9f;\n  t.sentisquare = 0x3322;\n  t.sentosquare = 0x3323;\n  t.seven = 0x0037;\n  t.sevenarabic = 0x0667;\n  t.sevenbengali = 0x09ed;\n  t.sevencircle = 0x2466;\n  t.sevencircleinversesansserif = 0x2790;\n  t.sevendeva = 0x096d;\n  t.seveneighths = 0x215e;\n  t.sevengujarati = 0x0aed;\n  t.sevengurmukhi = 0x0a6d;\n  t.sevenhackarabic = 0x0667;\n  t.sevenhangzhou = 0x3027;\n  t.sevenideographicparen = 0x3226;\n  t.seveninferior = 0x2087;\n  t.sevenmonospace = 0xff17;\n  t.sevenoldstyle = 0xf737;\n  t.sevenparen = 0x247a;\n  t.sevenperiod = 0x248e;\n  t.sevenpersian = 0x06f7;\n  t.sevenroman = 0x2176;\n  t.sevensuperior = 0x2077;\n  t.seventeencircle = 0x2470;\n  t.seventeenparen = 0x2484;\n  t.seventeenperiod = 0x2498;\n  t.seventhai = 0x0e57;\n  t.sfthyphen = 0x00ad;\n  t.shaarmenian = 0x0577;\n  t.shabengali = 0x09b6;\n  t.shacyrillic = 0x0448;\n  t.shaddaarabic = 0x0651;\n  t.shaddadammaarabic = 0xfc61;\n  t.shaddadammatanarabic = 0xfc5e;\n  t.shaddafathaarabic = 0xfc60;\n  t.shaddakasraarabic = 0xfc62;\n  t.shaddakasratanarabic = 0xfc5f;\n  t.shade = 0x2592;\n  t.shadedark = 0x2593;\n  t.shadelight = 0x2591;\n  t.shademedium = 0x2592;\n  t.shadeva = 0x0936;\n  t.shagujarati = 0x0ab6;\n  t.shagurmukhi = 0x0a36;\n  t.shalshelethebrew = 0x0593;\n  t.shbopomofo = 0x3115;\n  t.shchacyrillic = 0x0449;\n  t.sheenarabic = 0x0634;\n  t.sheenfinalarabic = 0xfeb6;\n  t.sheeninitialarabic = 0xfeb7;\n  t.sheenmedialarabic = 0xfeb8;\n  t.sheicoptic = 0x03e3;\n  t.sheqel = 0x20aa;\n  t.sheqelhebrew = 0x20aa;\n  t.sheva = 0x05b0;\n  t.sheva115 = 0x05b0;\n  t.sheva15 = 0x05b0;\n  t.sheva22 = 0x05b0;\n  t.sheva2e = 0x05b0;\n  t.shevahebrew = 0x05b0;\n  t.shevanarrowhebrew = 0x05b0;\n  t.shevaquarterhebrew = 0x05b0;\n  t.shevawidehebrew = 0x05b0;\n  t.shhacyrillic = 0x04bb;\n  t.shimacoptic = 0x03ed;\n  t.shin = 0x05e9;\n  t.shindagesh = 0xfb49;\n  t.shindageshhebrew = 0xfb49;\n  t.shindageshshindot = 0xfb2c;\n  t.shindageshshindothebrew = 0xfb2c;\n  t.shindageshsindot = 0xfb2d;\n  t.shindageshsindothebrew = 0xfb2d;\n  t.shindothebrew = 0x05c1;\n  t.shinhebrew = 0x05e9;\n  t.shinshindot = 0xfb2a;\n  t.shinshindothebrew = 0xfb2a;\n  t.shinsindot = 0xfb2b;\n  t.shinsindothebrew = 0xfb2b;\n  t.shook = 0x0282;\n  t.sigma = 0x03c3;\n  t.sigma1 = 0x03c2;\n  t.sigmafinal = 0x03c2;\n  t.sigmalunatesymbolgreek = 0x03f2;\n  t.sihiragana = 0x3057;\n  t.sikatakana = 0x30b7;\n  t.sikatakanahalfwidth = 0xff7c;\n  t.siluqhebrew = 0x05bd;\n  t.siluqlefthebrew = 0x05bd;\n  t.similar = 0x223c;\n  t.sindothebrew = 0x05c2;\n  t.siosacirclekorean = 0x3274;\n  t.siosaparenkorean = 0x3214;\n  t.sioscieuckorean = 0x317e;\n  t.sioscirclekorean = 0x3266;\n  t.sioskiyeokkorean = 0x317a;\n  t.sioskorean = 0x3145;\n  t.siosnieunkorean = 0x317b;\n  t.siosparenkorean = 0x3206;\n  t.siospieupkorean = 0x317d;\n  t.siostikeutkorean = 0x317c;\n  t.six = 0x0036;\n  t.sixarabic = 0x0666;\n  t.sixbengali = 0x09ec;\n  t.sixcircle = 0x2465;\n  t.sixcircleinversesansserif = 0x278f;\n  t.sixdeva = 0x096c;\n  t.sixgujarati = 0x0aec;\n  t.sixgurmukhi = 0x0a6c;\n  t.sixhackarabic = 0x0666;\n  t.sixhangzhou = 0x3026;\n  t.sixideographicparen = 0x3225;\n  t.sixinferior = 0x2086;\n  t.sixmonospace = 0xff16;\n  t.sixoldstyle = 0xf736;\n  t.sixparen = 0x2479;\n  t.sixperiod = 0x248d;\n  t.sixpersian = 0x06f6;\n  t.sixroman = 0x2175;\n  t.sixsuperior = 0x2076;\n  t.sixteencircle = 0x246f;\n  t.sixteencurrencydenominatorbengali = 0x09f9;\n  t.sixteenparen = 0x2483;\n  t.sixteenperiod = 0x2497;\n  t.sixthai = 0x0e56;\n  t.slash = 0x002f;\n  t.slashmonospace = 0xff0f;\n  t.slong = 0x017f;\n  t.slongdotaccent = 0x1e9b;\n  t.smileface = 0x263a;\n  t.smonospace = 0xff53;\n  t.sofpasuqhebrew = 0x05c3;\n  t.softhyphen = 0x00ad;\n  t.softsigncyrillic = 0x044c;\n  t.sohiragana = 0x305d;\n  t.sokatakana = 0x30bd;\n  t.sokatakanahalfwidth = 0xff7f;\n  t.soliduslongoverlaycmb = 0x0338;\n  t.solidusshortoverlaycmb = 0x0337;\n  t.sorusithai = 0x0e29;\n  t.sosalathai = 0x0e28;\n  t.sosothai = 0x0e0b;\n  t.sosuathai = 0x0e2a;\n  t.space = 0x0020;\n  t.spacehackarabic = 0x0020;\n  t.spade = 0x2660;\n  t.spadesuitblack = 0x2660;\n  t.spadesuitwhite = 0x2664;\n  t.sparen = 0x24ae;\n  t.squarebelowcmb = 0x033b;\n  t.squarecc = 0x33c4;\n  t.squarecm = 0x339d;\n  t.squarediagonalcrosshatchfill = 0x25a9;\n  t.squarehorizontalfill = 0x25a4;\n  t.squarekg = 0x338f;\n  t.squarekm = 0x339e;\n  t.squarekmcapital = 0x33ce;\n  t.squareln = 0x33d1;\n  t.squarelog = 0x33d2;\n  t.squaremg = 0x338e;\n  t.squaremil = 0x33d5;\n  t.squaremm = 0x339c;\n  t.squaremsquared = 0x33a1;\n  t.squareorthogonalcrosshatchfill = 0x25a6;\n  t.squareupperlefttolowerrightfill = 0x25a7;\n  t.squareupperrighttolowerleftfill = 0x25a8;\n  t.squareverticalfill = 0x25a5;\n  t.squarewhitewithsmallblack = 0x25a3;\n  t.srsquare = 0x33db;\n  t.ssabengali = 0x09b7;\n  t.ssadeva = 0x0937;\n  t.ssagujarati = 0x0ab7;\n  t.ssangcieuckorean = 0x3149;\n  t.ssanghieuhkorean = 0x3185;\n  t.ssangieungkorean = 0x3180;\n  t.ssangkiyeokkorean = 0x3132;\n  t.ssangnieunkorean = 0x3165;\n  t.ssangpieupkorean = 0x3143;\n  t.ssangsioskorean = 0x3146;\n  t.ssangtikeutkorean = 0x3138;\n  t.ssuperior = 0xf6f2;\n  t.sterling = 0x00a3;\n  t.sterlingmonospace = 0xffe1;\n  t.strokelongoverlaycmb = 0x0336;\n  t.strokeshortoverlaycmb = 0x0335;\n  t.subset = 0x2282;\n  t.subsetnotequal = 0x228a;\n  t.subsetorequal = 0x2286;\n  t.succeeds = 0x227b;\n  t.suchthat = 0x220b;\n  t.suhiragana = 0x3059;\n  t.sukatakana = 0x30b9;\n  t.sukatakanahalfwidth = 0xff7d;\n  t.sukunarabic = 0x0652;\n  t.summation = 0x2211;\n  t.sun = 0x263c;\n  t.superset = 0x2283;\n  t.supersetnotequal = 0x228b;\n  t.supersetorequal = 0x2287;\n  t.svsquare = 0x33dc;\n  t.syouwaerasquare = 0x337c;\n  t.t = 0x0074;\n  t.tabengali = 0x09a4;\n  t.tackdown = 0x22a4;\n  t.tackleft = 0x22a3;\n  t.tadeva = 0x0924;\n  t.tagujarati = 0x0aa4;\n  t.tagurmukhi = 0x0a24;\n  t.taharabic = 0x0637;\n  t.tahfinalarabic = 0xfec2;\n  t.tahinitialarabic = 0xfec3;\n  t.tahiragana = 0x305f;\n  t.tahmedialarabic = 0xfec4;\n  t.taisyouerasquare = 0x337d;\n  t.takatakana = 0x30bf;\n  t.takatakanahalfwidth = 0xff80;\n  t.tatweelarabic = 0x0640;\n  t.tau = 0x03c4;\n  t.tav = 0x05ea;\n  t.tavdages = 0xfb4a;\n  t.tavdagesh = 0xfb4a;\n  t.tavdageshhebrew = 0xfb4a;\n  t.tavhebrew = 0x05ea;\n  t.tbar = 0x0167;\n  t.tbopomofo = 0x310a;\n  t.tcaron = 0x0165;\n  t.tccurl = 0x02a8;\n  t.tcedilla = 0x0163;\n  t.tcheharabic = 0x0686;\n  t.tchehfinalarabic = 0xfb7b;\n  t.tchehinitialarabic = 0xfb7c;\n  t.tchehmedialarabic = 0xfb7d;\n  t.tcircle = 0x24e3;\n  t.tcircumflexbelow = 0x1e71;\n  t.tcommaaccent = 0x0163;\n  t.tdieresis = 0x1e97;\n  t.tdotaccent = 0x1e6b;\n  t.tdotbelow = 0x1e6d;\n  t.tecyrillic = 0x0442;\n  t.tedescendercyrillic = 0x04ad;\n  t.teharabic = 0x062a;\n  t.tehfinalarabic = 0xfe96;\n  t.tehhahinitialarabic = 0xfca2;\n  t.tehhahisolatedarabic = 0xfc0c;\n  t.tehinitialarabic = 0xfe97;\n  t.tehiragana = 0x3066;\n  t.tehjeeminitialarabic = 0xfca1;\n  t.tehjeemisolatedarabic = 0xfc0b;\n  t.tehmarbutaarabic = 0x0629;\n  t.tehmarbutafinalarabic = 0xfe94;\n  t.tehmedialarabic = 0xfe98;\n  t.tehmeeminitialarabic = 0xfca4;\n  t.tehmeemisolatedarabic = 0xfc0e;\n  t.tehnoonfinalarabic = 0xfc73;\n  t.tekatakana = 0x30c6;\n  t.tekatakanahalfwidth = 0xff83;\n  t.telephone = 0x2121;\n  t.telephoneblack = 0x260e;\n  t.telishagedolahebrew = 0x05a0;\n  t.telishaqetanahebrew = 0x05a9;\n  t.tencircle = 0x2469;\n  t.tenideographicparen = 0x3229;\n  t.tenparen = 0x247d;\n  t.tenperiod = 0x2491;\n  t.tenroman = 0x2179;\n  t.tesh = 0x02a7;\n  t.tet = 0x05d8;\n  t.tetdagesh = 0xfb38;\n  t.tetdageshhebrew = 0xfb38;\n  t.tethebrew = 0x05d8;\n  t.tetsecyrillic = 0x04b5;\n  t.tevirhebrew = 0x059b;\n  t.tevirlefthebrew = 0x059b;\n  t.thabengali = 0x09a5;\n  t.thadeva = 0x0925;\n  t.thagujarati = 0x0aa5;\n  t.thagurmukhi = 0x0a25;\n  t.thalarabic = 0x0630;\n  t.thalfinalarabic = 0xfeac;\n  t.thanthakhatlowleftthai = 0xf898;\n  t.thanthakhatlowrightthai = 0xf897;\n  t.thanthakhatthai = 0x0e4c;\n  t.thanthakhatupperleftthai = 0xf896;\n  t.theharabic = 0x062b;\n  t.thehfinalarabic = 0xfe9a;\n  t.thehinitialarabic = 0xfe9b;\n  t.thehmedialarabic = 0xfe9c;\n  t.thereexists = 0x2203;\n  t.therefore = 0x2234;\n  t.theta = 0x03b8;\n  t.theta1 = 0x03d1;\n  t.thetasymbolgreek = 0x03d1;\n  t.thieuthacirclekorean = 0x3279;\n  t.thieuthaparenkorean = 0x3219;\n  t.thieuthcirclekorean = 0x326b;\n  t.thieuthkorean = 0x314c;\n  t.thieuthparenkorean = 0x320b;\n  t.thirteencircle = 0x246c;\n  t.thirteenparen = 0x2480;\n  t.thirteenperiod = 0x2494;\n  t.thonangmonthothai = 0x0e11;\n  t.thook = 0x01ad;\n  t.thophuthaothai = 0x0e12;\n  t.thorn = 0x00fe;\n  t.thothahanthai = 0x0e17;\n  t.thothanthai = 0x0e10;\n  t.thothongthai = 0x0e18;\n  t.thothungthai = 0x0e16;\n  t.thousandcyrillic = 0x0482;\n  t.thousandsseparatorarabic = 0x066c;\n  t.thousandsseparatorpersian = 0x066c;\n  t.three = 0x0033;\n  t.threearabic = 0x0663;\n  t.threebengali = 0x09e9;\n  t.threecircle = 0x2462;\n  t.threecircleinversesansserif = 0x278c;\n  t.threedeva = 0x0969;\n  t.threeeighths = 0x215c;\n  t.threegujarati = 0x0ae9;\n  t.threegurmukhi = 0x0a69;\n  t.threehackarabic = 0x0663;\n  t.threehangzhou = 0x3023;\n  t.threeideographicparen = 0x3222;\n  t.threeinferior = 0x2083;\n  t.threemonospace = 0xff13;\n  t.threenumeratorbengali = 0x09f6;\n  t.threeoldstyle = 0xf733;\n  t.threeparen = 0x2476;\n  t.threeperiod = 0x248a;\n  t.threepersian = 0x06f3;\n  t.threequarters = 0x00be;\n  t.threequartersemdash = 0xf6de;\n  t.threeroman = 0x2172;\n  t.threesuperior = 0x00b3;\n  t.threethai = 0x0e53;\n  t.thzsquare = 0x3394;\n  t.tihiragana = 0x3061;\n  t.tikatakana = 0x30c1;\n  t.tikatakanahalfwidth = 0xff81;\n  t.tikeutacirclekorean = 0x3270;\n  t.tikeutaparenkorean = 0x3210;\n  t.tikeutcirclekorean = 0x3262;\n  t.tikeutkorean = 0x3137;\n  t.tikeutparenkorean = 0x3202;\n  t.tilde = 0x02dc;\n  t.tildebelowcmb = 0x0330;\n  t.tildecmb = 0x0303;\n  t.tildecomb = 0x0303;\n  t.tildedoublecmb = 0x0360;\n  t.tildeoperator = 0x223c;\n  t.tildeoverlaycmb = 0x0334;\n  t.tildeverticalcmb = 0x033e;\n  t.timescircle = 0x2297;\n  t.tipehahebrew = 0x0596;\n  t.tipehalefthebrew = 0x0596;\n  t.tippigurmukhi = 0x0a70;\n  t.titlocyrilliccmb = 0x0483;\n  t.tiwnarmenian = 0x057f;\n  t.tlinebelow = 0x1e6f;\n  t.tmonospace = 0xff54;\n  t.toarmenian = 0x0569;\n  t.tohiragana = 0x3068;\n  t.tokatakana = 0x30c8;\n  t.tokatakanahalfwidth = 0xff84;\n  t.tonebarextrahighmod = 0x02e5;\n  t.tonebarextralowmod = 0x02e9;\n  t.tonebarhighmod = 0x02e6;\n  t.tonebarlowmod = 0x02e8;\n  t.tonebarmidmod = 0x02e7;\n  t.tonefive = 0x01bd;\n  t.tonesix = 0x0185;\n  t.tonetwo = 0x01a8;\n  t.tonos = 0x0384;\n  t.tonsquare = 0x3327;\n  t.topatakthai = 0x0e0f;\n  t.tortoiseshellbracketleft = 0x3014;\n  t.tortoiseshellbracketleftsmall = 0xfe5d;\n  t.tortoiseshellbracketleftvertical = 0xfe39;\n  t.tortoiseshellbracketright = 0x3015;\n  t.tortoiseshellbracketrightsmall = 0xfe5e;\n  t.tortoiseshellbracketrightvertical = 0xfe3a;\n  t.totaothai = 0x0e15;\n  t.tpalatalhook = 0x01ab;\n  t.tparen = 0x24af;\n  t.trademark = 0x2122;\n  t.trademarksans = 0xf8ea;\n  t.trademarkserif = 0xf6db;\n  t.tretroflexhook = 0x0288;\n  t.triagdn = 0x25bc;\n  t.triaglf = 0x25c4;\n  t.triagrt = 0x25ba;\n  t.triagup = 0x25b2;\n  t.ts = 0x02a6;\n  t.tsadi = 0x05e6;\n  t.tsadidagesh = 0xfb46;\n  t.tsadidageshhebrew = 0xfb46;\n  t.tsadihebrew = 0x05e6;\n  t.tsecyrillic = 0x0446;\n  t.tsere = 0x05b5;\n  t.tsere12 = 0x05b5;\n  t.tsere1e = 0x05b5;\n  t.tsere2b = 0x05b5;\n  t.tserehebrew = 0x05b5;\n  t.tserenarrowhebrew = 0x05b5;\n  t.tserequarterhebrew = 0x05b5;\n  t.tserewidehebrew = 0x05b5;\n  t.tshecyrillic = 0x045b;\n  t.tsuperior = 0xf6f3;\n  t.ttabengali = 0x099f;\n  t.ttadeva = 0x091f;\n  t.ttagujarati = 0x0a9f;\n  t.ttagurmukhi = 0x0a1f;\n  t.tteharabic = 0x0679;\n  t.ttehfinalarabic = 0xfb67;\n  t.ttehinitialarabic = 0xfb68;\n  t.ttehmedialarabic = 0xfb69;\n  t.tthabengali = 0x09a0;\n  t.tthadeva = 0x0920;\n  t.tthagujarati = 0x0aa0;\n  t.tthagurmukhi = 0x0a20;\n  t.tturned = 0x0287;\n  t.tuhiragana = 0x3064;\n  t.tukatakana = 0x30c4;\n  t.tukatakanahalfwidth = 0xff82;\n  t.tusmallhiragana = 0x3063;\n  t.tusmallkatakana = 0x30c3;\n  t.tusmallkatakanahalfwidth = 0xff6f;\n  t.twelvecircle = 0x246b;\n  t.twelveparen = 0x247f;\n  t.twelveperiod = 0x2493;\n  t.twelveroman = 0x217b;\n  t.twentycircle = 0x2473;\n  t.twentyhangzhou = 0x5344;\n  t.twentyparen = 0x2487;\n  t.twentyperiod = 0x249b;\n  t.two = 0x0032;\n  t.twoarabic = 0x0662;\n  t.twobengali = 0x09e8;\n  t.twocircle = 0x2461;\n  t.twocircleinversesansserif = 0x278b;\n  t.twodeva = 0x0968;\n  t.twodotenleader = 0x2025;\n  t.twodotleader = 0x2025;\n  t.twodotleadervertical = 0xfe30;\n  t.twogujarati = 0x0ae8;\n  t.twogurmukhi = 0x0a68;\n  t.twohackarabic = 0x0662;\n  t.twohangzhou = 0x3022;\n  t.twoideographicparen = 0x3221;\n  t.twoinferior = 0x2082;\n  t.twomonospace = 0xff12;\n  t.twonumeratorbengali = 0x09f5;\n  t.twooldstyle = 0xf732;\n  t.twoparen = 0x2475;\n  t.twoperiod = 0x2489;\n  t.twopersian = 0x06f2;\n  t.tworoman = 0x2171;\n  t.twostroke = 0x01bb;\n  t.twosuperior = 0x00b2;\n  t.twothai = 0x0e52;\n  t.twothirds = 0x2154;\n  t.u = 0x0075;\n  t.uacute = 0x00fa;\n  t.ubar = 0x0289;\n  t.ubengali = 0x0989;\n  t.ubopomofo = 0x3128;\n  t.ubreve = 0x016d;\n  t.ucaron = 0x01d4;\n  t.ucircle = 0x24e4;\n  t.ucircumflex = 0x00fb;\n  t.ucircumflexbelow = 0x1e77;\n  t.ucyrillic = 0x0443;\n  t.udattadeva = 0x0951;\n  t.udblacute = 0x0171;\n  t.udblgrave = 0x0215;\n  t.udeva = 0x0909;\n  t.udieresis = 0x00fc;\n  t.udieresisacute = 0x01d8;\n  t.udieresisbelow = 0x1e73;\n  t.udieresiscaron = 0x01da;\n  t.udieresiscyrillic = 0x04f1;\n  t.udieresisgrave = 0x01dc;\n  t.udieresismacron = 0x01d6;\n  t.udotbelow = 0x1ee5;\n  t.ugrave = 0x00f9;\n  t.ugujarati = 0x0a89;\n  t.ugurmukhi = 0x0a09;\n  t.uhiragana = 0x3046;\n  t.uhookabove = 0x1ee7;\n  t.uhorn = 0x01b0;\n  t.uhornacute = 0x1ee9;\n  t.uhorndotbelow = 0x1ef1;\n  t.uhorngrave = 0x1eeb;\n  t.uhornhookabove = 0x1eed;\n  t.uhorntilde = 0x1eef;\n  t.uhungarumlaut = 0x0171;\n  t.uhungarumlautcyrillic = 0x04f3;\n  t.uinvertedbreve = 0x0217;\n  t.ukatakana = 0x30a6;\n  t.ukatakanahalfwidth = 0xff73;\n  t.ukcyrillic = 0x0479;\n  t.ukorean = 0x315c;\n  t.umacron = 0x016b;\n  t.umacroncyrillic = 0x04ef;\n  t.umacrondieresis = 0x1e7b;\n  t.umatragurmukhi = 0x0a41;\n  t.umonospace = 0xff55;\n  t.underscore = 0x005f;\n  t.underscoredbl = 0x2017;\n  t.underscoremonospace = 0xff3f;\n  t.underscorevertical = 0xfe33;\n  t.underscorewavy = 0xfe4f;\n  t.union = 0x222a;\n  t.universal = 0x2200;\n  t.uogonek = 0x0173;\n  t.uparen = 0x24b0;\n  t.upblock = 0x2580;\n  t.upperdothebrew = 0x05c4;\n  t.upsilon = 0x03c5;\n  t.upsilondieresis = 0x03cb;\n  t.upsilondieresistonos = 0x03b0;\n  t.upsilonlatin = 0x028a;\n  t.upsilontonos = 0x03cd;\n  t.uptackbelowcmb = 0x031d;\n  t.uptackmod = 0x02d4;\n  t.uragurmukhi = 0x0a73;\n  t.uring = 0x016f;\n  t.ushortcyrillic = 0x045e;\n  t.usmallhiragana = 0x3045;\n  t.usmallkatakana = 0x30a5;\n  t.usmallkatakanahalfwidth = 0xff69;\n  t.ustraightcyrillic = 0x04af;\n  t.ustraightstrokecyrillic = 0x04b1;\n  t.utilde = 0x0169;\n  t.utildeacute = 0x1e79;\n  t.utildebelow = 0x1e75;\n  t.uubengali = 0x098a;\n  t.uudeva = 0x090a;\n  t.uugujarati = 0x0a8a;\n  t.uugurmukhi = 0x0a0a;\n  t.uumatragurmukhi = 0x0a42;\n  t.uuvowelsignbengali = 0x09c2;\n  t.uuvowelsigndeva = 0x0942;\n  t.uuvowelsigngujarati = 0x0ac2;\n  t.uvowelsignbengali = 0x09c1;\n  t.uvowelsigndeva = 0x0941;\n  t.uvowelsigngujarati = 0x0ac1;\n  t.v = 0x0076;\n  t.vadeva = 0x0935;\n  t.vagujarati = 0x0ab5;\n  t.vagurmukhi = 0x0a35;\n  t.vakatakana = 0x30f7;\n  t.vav = 0x05d5;\n  t.vavdagesh = 0xfb35;\n  t.vavdagesh65 = 0xfb35;\n  t.vavdageshhebrew = 0xfb35;\n  t.vavhebrew = 0x05d5;\n  t.vavholam = 0xfb4b;\n  t.vavholamhebrew = 0xfb4b;\n  t.vavvavhebrew = 0x05f0;\n  t.vavyodhebrew = 0x05f1;\n  t.vcircle = 0x24e5;\n  t.vdotbelow = 0x1e7f;\n  t.vecyrillic = 0x0432;\n  t.veharabic = 0x06a4;\n  t.vehfinalarabic = 0xfb6b;\n  t.vehinitialarabic = 0xfb6c;\n  t.vehmedialarabic = 0xfb6d;\n  t.vekatakana = 0x30f9;\n  t.venus = 0x2640;\n  t.verticalbar = 0x007c;\n  t.verticallineabovecmb = 0x030d;\n  t.verticallinebelowcmb = 0x0329;\n  t.verticallinelowmod = 0x02cc;\n  t.verticallinemod = 0x02c8;\n  t.vewarmenian = 0x057e;\n  t.vhook = 0x028b;\n  t.vikatakana = 0x30f8;\n  t.viramabengali = 0x09cd;\n  t.viramadeva = 0x094d;\n  t.viramagujarati = 0x0acd;\n  t.visargabengali = 0x0983;\n  t.visargadeva = 0x0903;\n  t.visargagujarati = 0x0a83;\n  t.vmonospace = 0xff56;\n  t.voarmenian = 0x0578;\n  t.voicediterationhiragana = 0x309e;\n  t.voicediterationkatakana = 0x30fe;\n  t.voicedmarkkana = 0x309b;\n  t.voicedmarkkanahalfwidth = 0xff9e;\n  t.vokatakana = 0x30fa;\n  t.vparen = 0x24b1;\n  t.vtilde = 0x1e7d;\n  t.vturned = 0x028c;\n  t.vuhiragana = 0x3094;\n  t.vukatakana = 0x30f4;\n  t.w = 0x0077;\n  t.wacute = 0x1e83;\n  t.waekorean = 0x3159;\n  t.wahiragana = 0x308f;\n  t.wakatakana = 0x30ef;\n  t.wakatakanahalfwidth = 0xff9c;\n  t.wakorean = 0x3158;\n  t.wasmallhiragana = 0x308e;\n  t.wasmallkatakana = 0x30ee;\n  t.wattosquare = 0x3357;\n  t.wavedash = 0x301c;\n  t.wavyunderscorevertical = 0xfe34;\n  t.wawarabic = 0x0648;\n  t.wawfinalarabic = 0xfeee;\n  t.wawhamzaabovearabic = 0x0624;\n  t.wawhamzaabovefinalarabic = 0xfe86;\n  t.wbsquare = 0x33dd;\n  t.wcircle = 0x24e6;\n  t.wcircumflex = 0x0175;\n  t.wdieresis = 0x1e85;\n  t.wdotaccent = 0x1e87;\n  t.wdotbelow = 0x1e89;\n  t.wehiragana = 0x3091;\n  t.weierstrass = 0x2118;\n  t.wekatakana = 0x30f1;\n  t.wekorean = 0x315e;\n  t.weokorean = 0x315d;\n  t.wgrave = 0x1e81;\n  t.whitebullet = 0x25e6;\n  t.whitecircle = 0x25cb;\n  t.whitecircleinverse = 0x25d9;\n  t.whitecornerbracketleft = 0x300e;\n  t.whitecornerbracketleftvertical = 0xfe43;\n  t.whitecornerbracketright = 0x300f;\n  t.whitecornerbracketrightvertical = 0xfe44;\n  t.whitediamond = 0x25c7;\n  t.whitediamondcontainingblacksmalldiamond = 0x25c8;\n  t.whitedownpointingsmalltriangle = 0x25bf;\n  t.whitedownpointingtriangle = 0x25bd;\n  t.whiteleftpointingsmalltriangle = 0x25c3;\n  t.whiteleftpointingtriangle = 0x25c1;\n  t.whitelenticularbracketleft = 0x3016;\n  t.whitelenticularbracketright = 0x3017;\n  t.whiterightpointingsmalltriangle = 0x25b9;\n  t.whiterightpointingtriangle = 0x25b7;\n  t.whitesmallsquare = 0x25ab;\n  t.whitesmilingface = 0x263a;\n  t.whitesquare = 0x25a1;\n  t.whitestar = 0x2606;\n  t.whitetelephone = 0x260f;\n  t.whitetortoiseshellbracketleft = 0x3018;\n  t.whitetortoiseshellbracketright = 0x3019;\n  t.whiteuppointingsmalltriangle = 0x25b5;\n  t.whiteuppointingtriangle = 0x25b3;\n  t.wihiragana = 0x3090;\n  t.wikatakana = 0x30f0;\n  t.wikorean = 0x315f;\n  t.wmonospace = 0xff57;\n  t.wohiragana = 0x3092;\n  t.wokatakana = 0x30f2;\n  t.wokatakanahalfwidth = 0xff66;\n  t.won = 0x20a9;\n  t.wonmonospace = 0xffe6;\n  t.wowaenthai = 0x0e27;\n  t.wparen = 0x24b2;\n  t.wring = 0x1e98;\n  t.wsuperior = 0x02b7;\n  t.wturned = 0x028d;\n  t.wynn = 0x01bf;\n  t.x = 0x0078;\n  t.xabovecmb = 0x033d;\n  t.xbopomofo = 0x3112;\n  t.xcircle = 0x24e7;\n  t.xdieresis = 0x1e8d;\n  t.xdotaccent = 0x1e8b;\n  t.xeharmenian = 0x056d;\n  t.xi = 0x03be;\n  t.xmonospace = 0xff58;\n  t.xparen = 0x24b3;\n  t.xsuperior = 0x02e3;\n  t.y = 0x0079;\n  t.yaadosquare = 0x334e;\n  t.yabengali = 0x09af;\n  t.yacute = 0x00fd;\n  t.yadeva = 0x092f;\n  t.yaekorean = 0x3152;\n  t.yagujarati = 0x0aaf;\n  t.yagurmukhi = 0x0a2f;\n  t.yahiragana = 0x3084;\n  t.yakatakana = 0x30e4;\n  t.yakatakanahalfwidth = 0xff94;\n  t.yakorean = 0x3151;\n  t.yamakkanthai = 0x0e4e;\n  t.yasmallhiragana = 0x3083;\n  t.yasmallkatakana = 0x30e3;\n  t.yasmallkatakanahalfwidth = 0xff6c;\n  t.yatcyrillic = 0x0463;\n  t.ycircle = 0x24e8;\n  t.ycircumflex = 0x0177;\n  t.ydieresis = 0x00ff;\n  t.ydotaccent = 0x1e8f;\n  t.ydotbelow = 0x1ef5;\n  t.yeharabic = 0x064a;\n  t.yehbarreearabic = 0x06d2;\n  t.yehbarreefinalarabic = 0xfbaf;\n  t.yehfinalarabic = 0xfef2;\n  t.yehhamzaabovearabic = 0x0626;\n  t.yehhamzaabovefinalarabic = 0xfe8a;\n  t.yehhamzaaboveinitialarabic = 0xfe8b;\n  t.yehhamzaabovemedialarabic = 0xfe8c;\n  t.yehinitialarabic = 0xfef3;\n  t.yehmedialarabic = 0xfef4;\n  t.yehmeeminitialarabic = 0xfcdd;\n  t.yehmeemisolatedarabic = 0xfc58;\n  t.yehnoonfinalarabic = 0xfc94;\n  t.yehthreedotsbelowarabic = 0x06d1;\n  t.yekorean = 0x3156;\n  t.yen = 0x00a5;\n  t.yenmonospace = 0xffe5;\n  t.yeokorean = 0x3155;\n  t.yeorinhieuhkorean = 0x3186;\n  t.yerahbenyomohebrew = 0x05aa;\n  t.yerahbenyomolefthebrew = 0x05aa;\n  t.yericyrillic = 0x044b;\n  t.yerudieresiscyrillic = 0x04f9;\n  t.yesieungkorean = 0x3181;\n  t.yesieungpansioskorean = 0x3183;\n  t.yesieungsioskorean = 0x3182;\n  t.yetivhebrew = 0x059a;\n  t.ygrave = 0x1ef3;\n  t.yhook = 0x01b4;\n  t.yhookabove = 0x1ef7;\n  t.yiarmenian = 0x0575;\n  t.yicyrillic = 0x0457;\n  t.yikorean = 0x3162;\n  t.yinyang = 0x262f;\n  t.yiwnarmenian = 0x0582;\n  t.ymonospace = 0xff59;\n  t.yod = 0x05d9;\n  t.yoddagesh = 0xfb39;\n  t.yoddageshhebrew = 0xfb39;\n  t.yodhebrew = 0x05d9;\n  t.yodyodhebrew = 0x05f2;\n  t.yodyodpatahhebrew = 0xfb1f;\n  t.yohiragana = 0x3088;\n  t.yoikorean = 0x3189;\n  t.yokatakana = 0x30e8;\n  t.yokatakanahalfwidth = 0xff96;\n  t.yokorean = 0x315b;\n  t.yosmallhiragana = 0x3087;\n  t.yosmallkatakana = 0x30e7;\n  t.yosmallkatakanahalfwidth = 0xff6e;\n  t.yotgreek = 0x03f3;\n  t.yoyaekorean = 0x3188;\n  t.yoyakorean = 0x3187;\n  t.yoyakthai = 0x0e22;\n  t.yoyingthai = 0x0e0d;\n  t.yparen = 0x24b4;\n  t.ypogegrammeni = 0x037a;\n  t.ypogegrammenigreekcmb = 0x0345;\n  t.yr = 0x01a6;\n  t.yring = 0x1e99;\n  t.ysuperior = 0x02b8;\n  t.ytilde = 0x1ef9;\n  t.yturned = 0x028e;\n  t.yuhiragana = 0x3086;\n  t.yuikorean = 0x318c;\n  t.yukatakana = 0x30e6;\n  t.yukatakanahalfwidth = 0xff95;\n  t.yukorean = 0x3160;\n  t.yusbigcyrillic = 0x046b;\n  t.yusbigiotifiedcyrillic = 0x046d;\n  t.yuslittlecyrillic = 0x0467;\n  t.yuslittleiotifiedcyrillic = 0x0469;\n  t.yusmallhiragana = 0x3085;\n  t.yusmallkatakana = 0x30e5;\n  t.yusmallkatakanahalfwidth = 0xff6d;\n  t.yuyekorean = 0x318b;\n  t.yuyeokorean = 0x318a;\n  t.yyabengali = 0x09df;\n  t.yyadeva = 0x095f;\n  t.z = 0x007a;\n  t.zaarmenian = 0x0566;\n  t.zacute = 0x017a;\n  t.zadeva = 0x095b;\n  t.zagurmukhi = 0x0a5b;\n  t.zaharabic = 0x0638;\n  t.zahfinalarabic = 0xfec6;\n  t.zahinitialarabic = 0xfec7;\n  t.zahiragana = 0x3056;\n  t.zahmedialarabic = 0xfec8;\n  t.zainarabic = 0x0632;\n  t.zainfinalarabic = 0xfeb0;\n  t.zakatakana = 0x30b6;\n  t.zaqefgadolhebrew = 0x0595;\n  t.zaqefqatanhebrew = 0x0594;\n  t.zarqahebrew = 0x0598;\n  t.zayin = 0x05d6;\n  t.zayindagesh = 0xfb36;\n  t.zayindageshhebrew = 0xfb36;\n  t.zayinhebrew = 0x05d6;\n  t.zbopomofo = 0x3117;\n  t.zcaron = 0x017e;\n  t.zcircle = 0x24e9;\n  t.zcircumflex = 0x1e91;\n  t.zcurl = 0x0291;\n  t.zdot = 0x017c;\n  t.zdotaccent = 0x017c;\n  t.zdotbelow = 0x1e93;\n  t.zecyrillic = 0x0437;\n  t.zedescendercyrillic = 0x0499;\n  t.zedieresiscyrillic = 0x04df;\n  t.zehiragana = 0x305c;\n  t.zekatakana = 0x30bc;\n  t.zero = 0x0030;\n  t.zeroarabic = 0x0660;\n  t.zerobengali = 0x09e6;\n  t.zerodeva = 0x0966;\n  t.zerogujarati = 0x0ae6;\n  t.zerogurmukhi = 0x0a66;\n  t.zerohackarabic = 0x0660;\n  t.zeroinferior = 0x2080;\n  t.zeromonospace = 0xff10;\n  t.zerooldstyle = 0xf730;\n  t.zeropersian = 0x06f0;\n  t.zerosuperior = 0x2070;\n  t.zerothai = 0x0e50;\n  t.zerowidthjoiner = 0xfeff;\n  t.zerowidthnonjoiner = 0x200c;\n  t.zerowidthspace = 0x200b;\n  t.zeta = 0x03b6;\n  t.zhbopomofo = 0x3113;\n  t.zhearmenian = 0x056a;\n  t.zhebrevecyrillic = 0x04c2;\n  t.zhecyrillic = 0x0436;\n  t.zhedescendercyrillic = 0x0497;\n  t.zhedieresiscyrillic = 0x04dd;\n  t.zihiragana = 0x3058;\n  t.zikatakana = 0x30b8;\n  t.zinorhebrew = 0x05ae;\n  t.zlinebelow = 0x1e95;\n  t.zmonospace = 0xff5a;\n  t.zohiragana = 0x305e;\n  t.zokatakana = 0x30be;\n  t.zparen = 0x24b5;\n  t.zretroflexhook = 0x0290;\n  t.zstroke = 0x01b6;\n  t.zuhiragana = 0x305a;\n  t.zukatakana = 0x30ba;\n  t[\".notdef\"] = 0x0000;\n  t.angbracketleftbig = 0x2329;\n  t.angbracketleftBig = 0x2329;\n  t.angbracketleftbigg = 0x2329;\n  t.angbracketleftBigg = 0x2329;\n  t.angbracketrightBig = 0x232a;\n  t.angbracketrightbig = 0x232a;\n  t.angbracketrightBigg = 0x232a;\n  t.angbracketrightbigg = 0x232a;\n  t.arrowhookleft = 0x21aa;\n  t.arrowhookright = 0x21a9;\n  t.arrowlefttophalf = 0x21bc;\n  t.arrowleftbothalf = 0x21bd;\n  t.arrownortheast = 0x2197;\n  t.arrownorthwest = 0x2196;\n  t.arrowrighttophalf = 0x21c0;\n  t.arrowrightbothalf = 0x21c1;\n  t.arrowsoutheast = 0x2198;\n  t.arrowsouthwest = 0x2199;\n  t.backslashbig = 0x2216;\n  t.backslashBig = 0x2216;\n  t.backslashBigg = 0x2216;\n  t.backslashbigg = 0x2216;\n  t.bardbl = 0x2016;\n  t.bracehtipdownleft = 0xfe37;\n  t.bracehtipdownright = 0xfe37;\n  t.bracehtipupleft = 0xfe38;\n  t.bracehtipupright = 0xfe38;\n  t.braceleftBig = 0x007b;\n  t.braceleftbig = 0x007b;\n  t.braceleftbigg = 0x007b;\n  t.braceleftBigg = 0x007b;\n  t.bracerightBig = 0x007d;\n  t.bracerightbig = 0x007d;\n  t.bracerightbigg = 0x007d;\n  t.bracerightBigg = 0x007d;\n  t.bracketleftbig = 0x005b;\n  t.bracketleftBig = 0x005b;\n  t.bracketleftbigg = 0x005b;\n  t.bracketleftBigg = 0x005b;\n  t.bracketrightBig = 0x005d;\n  t.bracketrightbig = 0x005d;\n  t.bracketrightbigg = 0x005d;\n  t.bracketrightBigg = 0x005d;\n  t.ceilingleftbig = 0x2308;\n  t.ceilingleftBig = 0x2308;\n  t.ceilingleftBigg = 0x2308;\n  t.ceilingleftbigg = 0x2308;\n  t.ceilingrightbig = 0x2309;\n  t.ceilingrightBig = 0x2309;\n  t.ceilingrightbigg = 0x2309;\n  t.ceilingrightBigg = 0x2309;\n  t.circledotdisplay = 0x2299;\n  t.circledottext = 0x2299;\n  t.circlemultiplydisplay = 0x2297;\n  t.circlemultiplytext = 0x2297;\n  t.circleplusdisplay = 0x2295;\n  t.circleplustext = 0x2295;\n  t.contintegraldisplay = 0x222e;\n  t.contintegraltext = 0x222e;\n  t.coproductdisplay = 0x2210;\n  t.coproducttext = 0x2210;\n  t.floorleftBig = 0x230a;\n  t.floorleftbig = 0x230a;\n  t.floorleftbigg = 0x230a;\n  t.floorleftBigg = 0x230a;\n  t.floorrightbig = 0x230b;\n  t.floorrightBig = 0x230b;\n  t.floorrightBigg = 0x230b;\n  t.floorrightbigg = 0x230b;\n  t.hatwide = 0x0302;\n  t.hatwider = 0x0302;\n  t.hatwidest = 0x0302;\n  t.intercal = 0x1d40;\n  t.integraldisplay = 0x222b;\n  t.integraltext = 0x222b;\n  t.intersectiondisplay = 0x22c2;\n  t.intersectiontext = 0x22c2;\n  t.logicalanddisplay = 0x2227;\n  t.logicalandtext = 0x2227;\n  t.logicalordisplay = 0x2228;\n  t.logicalortext = 0x2228;\n  t.parenleftBig = 0x0028;\n  t.parenleftbig = 0x0028;\n  t.parenleftBigg = 0x0028;\n  t.parenleftbigg = 0x0028;\n  t.parenrightBig = 0x0029;\n  t.parenrightbig = 0x0029;\n  t.parenrightBigg = 0x0029;\n  t.parenrightbigg = 0x0029;\n  t.prime = 0x2032;\n  t.productdisplay = 0x220f;\n  t.producttext = 0x220f;\n  t.radicalbig = 0x221a;\n  t.radicalBig = 0x221a;\n  t.radicalBigg = 0x221a;\n  t.radicalbigg = 0x221a;\n  t.radicalbt = 0x221a;\n  t.radicaltp = 0x221a;\n  t.radicalvertex = 0x221a;\n  t.slashbig = 0x002f;\n  t.slashBig = 0x002f;\n  t.slashBigg = 0x002f;\n  t.slashbigg = 0x002f;\n  t.summationdisplay = 0x2211;\n  t.summationtext = 0x2211;\n  t.tildewide = 0x02dc;\n  t.tildewider = 0x02dc;\n  t.tildewidest = 0x02dc;\n  t.uniondisplay = 0x22c3;\n  t.unionmultidisplay = 0x228e;\n  t.unionmultitext = 0x228e;\n  t.unionsqdisplay = 0x2294;\n  t.unionsqtext = 0x2294;\n  t.uniontext = 0x22c3;\n  t.vextenddouble = 0x2225;\n  t.vextendsingle = 0x2223;\n});\nconst getDingbatsGlyphsUnicode = getLookupTableFactory(function (t) {\n  t.space = 0x0020;\n  t.a1 = 0x2701;\n  t.a2 = 0x2702;\n  t.a202 = 0x2703;\n  t.a3 = 0x2704;\n  t.a4 = 0x260e;\n  t.a5 = 0x2706;\n  t.a119 = 0x2707;\n  t.a118 = 0x2708;\n  t.a117 = 0x2709;\n  t.a11 = 0x261b;\n  t.a12 = 0x261e;\n  t.a13 = 0x270c;\n  t.a14 = 0x270d;\n  t.a15 = 0x270e;\n  t.a16 = 0x270f;\n  t.a105 = 0x2710;\n  t.a17 = 0x2711;\n  t.a18 = 0x2712;\n  t.a19 = 0x2713;\n  t.a20 = 0x2714;\n  t.a21 = 0x2715;\n  t.a22 = 0x2716;\n  t.a23 = 0x2717;\n  t.a24 = 0x2718;\n  t.a25 = 0x2719;\n  t.a26 = 0x271a;\n  t.a27 = 0x271b;\n  t.a28 = 0x271c;\n  t.a6 = 0x271d;\n  t.a7 = 0x271e;\n  t.a8 = 0x271f;\n  t.a9 = 0x2720;\n  t.a10 = 0x2721;\n  t.a29 = 0x2722;\n  t.a30 = 0x2723;\n  t.a31 = 0x2724;\n  t.a32 = 0x2725;\n  t.a33 = 0x2726;\n  t.a34 = 0x2727;\n  t.a35 = 0x2605;\n  t.a36 = 0x2729;\n  t.a37 = 0x272a;\n  t.a38 = 0x272b;\n  t.a39 = 0x272c;\n  t.a40 = 0x272d;\n  t.a41 = 0x272e;\n  t.a42 = 0x272f;\n  t.a43 = 0x2730;\n  t.a44 = 0x2731;\n  t.a45 = 0x2732;\n  t.a46 = 0x2733;\n  t.a47 = 0x2734;\n  t.a48 = 0x2735;\n  t.a49 = 0x2736;\n  t.a50 = 0x2737;\n  t.a51 = 0x2738;\n  t.a52 = 0x2739;\n  t.a53 = 0x273a;\n  t.a54 = 0x273b;\n  t.a55 = 0x273c;\n  t.a56 = 0x273d;\n  t.a57 = 0x273e;\n  t.a58 = 0x273f;\n  t.a59 = 0x2740;\n  t.a60 = 0x2741;\n  t.a61 = 0x2742;\n  t.a62 = 0x2743;\n  t.a63 = 0x2744;\n  t.a64 = 0x2745;\n  t.a65 = 0x2746;\n  t.a66 = 0x2747;\n  t.a67 = 0x2748;\n  t.a68 = 0x2749;\n  t.a69 = 0x274a;\n  t.a70 = 0x274b;\n  t.a71 = 0x25cf;\n  t.a72 = 0x274d;\n  t.a73 = 0x25a0;\n  t.a74 = 0x274f;\n  t.a203 = 0x2750;\n  t.a75 = 0x2751;\n  t.a204 = 0x2752;\n  t.a76 = 0x25b2;\n  t.a77 = 0x25bc;\n  t.a78 = 0x25c6;\n  t.a79 = 0x2756;\n  t.a81 = 0x25d7;\n  t.a82 = 0x2758;\n  t.a83 = 0x2759;\n  t.a84 = 0x275a;\n  t.a97 = 0x275b;\n  t.a98 = 0x275c;\n  t.a99 = 0x275d;\n  t.a100 = 0x275e;\n  t.a101 = 0x2761;\n  t.a102 = 0x2762;\n  t.a103 = 0x2763;\n  t.a104 = 0x2764;\n  t.a106 = 0x2765;\n  t.a107 = 0x2766;\n  t.a108 = 0x2767;\n  t.a112 = 0x2663;\n  t.a111 = 0x2666;\n  t.a110 = 0x2665;\n  t.a109 = 0x2660;\n  t.a120 = 0x2460;\n  t.a121 = 0x2461;\n  t.a122 = 0x2462;\n  t.a123 = 0x2463;\n  t.a124 = 0x2464;\n  t.a125 = 0x2465;\n  t.a126 = 0x2466;\n  t.a127 = 0x2467;\n  t.a128 = 0x2468;\n  t.a129 = 0x2469;\n  t.a130 = 0x2776;\n  t.a131 = 0x2777;\n  t.a132 = 0x2778;\n  t.a133 = 0x2779;\n  t.a134 = 0x277a;\n  t.a135 = 0x277b;\n  t.a136 = 0x277c;\n  t.a137 = 0x277d;\n  t.a138 = 0x277e;\n  t.a139 = 0x277f;\n  t.a140 = 0x2780;\n  t.a141 = 0x2781;\n  t.a142 = 0x2782;\n  t.a143 = 0x2783;\n  t.a144 = 0x2784;\n  t.a145 = 0x2785;\n  t.a146 = 0x2786;\n  t.a147 = 0x2787;\n  t.a148 = 0x2788;\n  t.a149 = 0x2789;\n  t.a150 = 0x278a;\n  t.a151 = 0x278b;\n  t.a152 = 0x278c;\n  t.a153 = 0x278d;\n  t.a154 = 0x278e;\n  t.a155 = 0x278f;\n  t.a156 = 0x2790;\n  t.a157 = 0x2791;\n  t.a158 = 0x2792;\n  t.a159 = 0x2793;\n  t.a160 = 0x2794;\n  t.a161 = 0x2192;\n  t.a163 = 0x2194;\n  t.a164 = 0x2195;\n  t.a196 = 0x2798;\n  t.a165 = 0x2799;\n  t.a192 = 0x279a;\n  t.a166 = 0x279b;\n  t.a167 = 0x279c;\n  t.a168 = 0x279d;\n  t.a169 = 0x279e;\n  t.a170 = 0x279f;\n  t.a171 = 0x27a0;\n  t.a172 = 0x27a1;\n  t.a173 = 0x27a2;\n  t.a162 = 0x27a3;\n  t.a174 = 0x27a4;\n  t.a175 = 0x27a5;\n  t.a176 = 0x27a6;\n  t.a177 = 0x27a7;\n  t.a178 = 0x27a8;\n  t.a179 = 0x27a9;\n  t.a193 = 0x27aa;\n  t.a180 = 0x27ab;\n  t.a199 = 0x27ac;\n  t.a181 = 0x27ad;\n  t.a200 = 0x27ae;\n  t.a182 = 0x27af;\n  t.a201 = 0x27b1;\n  t.a183 = 0x27b2;\n  t.a184 = 0x27b3;\n  t.a197 = 0x27b4;\n  t.a185 = 0x27b5;\n  t.a194 = 0x27b6;\n  t.a198 = 0x27b7;\n  t.a186 = 0x27b8;\n  t.a195 = 0x27b9;\n  t.a187 = 0x27ba;\n  t.a188 = 0x27bb;\n  t.a189 = 0x27bc;\n  t.a190 = 0x27bd;\n  t.a191 = 0x27be;\n  t.a89 = 0x2768;\n  t.a90 = 0x2769;\n  t.a93 = 0x276a;\n  t.a94 = 0x276b;\n  t.a91 = 0x276c;\n  t.a92 = 0x276d;\n  t.a205 = 0x276e;\n  t.a85 = 0x276f;\n  t.a206 = 0x2770;\n  t.a86 = 0x2771;\n  t.a87 = 0x2772;\n  t.a88 = 0x2773;\n  t.a95 = 0x2774;\n  t.a96 = 0x2775;\n  t[\".notdef\"] = 0x0000;\n});\n\n;// CONCATENATED MODULE: ./src/core/unicode.js\n\nconst getSpecialPUASymbols = getLookupTableFactory(function (t) {\n  t[63721] = 0x00a9;\n  t[63193] = 0x00a9;\n  t[63720] = 0x00ae;\n  t[63194] = 0x00ae;\n  t[63722] = 0x2122;\n  t[63195] = 0x2122;\n  t[63729] = 0x23a7;\n  t[63730] = 0x23a8;\n  t[63731] = 0x23a9;\n  t[63740] = 0x23ab;\n  t[63741] = 0x23ac;\n  t[63742] = 0x23ad;\n  t[63726] = 0x23a1;\n  t[63727] = 0x23a2;\n  t[63728] = 0x23a3;\n  t[63737] = 0x23a4;\n  t[63738] = 0x23a5;\n  t[63739] = 0x23a6;\n  t[63723] = 0x239b;\n  t[63724] = 0x239c;\n  t[63725] = 0x239d;\n  t[63734] = 0x239e;\n  t[63735] = 0x239f;\n  t[63736] = 0x23a0;\n});\nfunction mapSpecialUnicodeValues(code) {\n  if (code >= 0xfff0 && code <= 0xffff) {\n    return 0;\n  } else if (code >= 0xf600 && code <= 0xf8ff) {\n    return getSpecialPUASymbols()[code] || code;\n  } else if (code === 0x00ad) {\n    return 0x002d;\n  }\n  return code;\n}\nfunction getUnicodeForGlyph(name, glyphsUnicodeMap) {\n  let unicode = glyphsUnicodeMap[name];\n  if (unicode !== undefined) {\n    return unicode;\n  }\n  if (!name) {\n    return -1;\n  }\n  if (name[0] === \"u\") {\n    const nameLen = name.length;\n    let hexStr;\n    if (nameLen === 7 && name[1] === \"n\" && name[2] === \"i\") {\n      hexStr = name.substring(3);\n    } else if (nameLen >= 5 && nameLen <= 7) {\n      hexStr = name.substring(1);\n    } else {\n      return -1;\n    }\n    if (hexStr === hexStr.toUpperCase()) {\n      unicode = parseInt(hexStr, 16);\n      if (unicode >= 0) {\n        return unicode;\n      }\n    }\n  }\n  return -1;\n}\nconst UnicodeRanges = [[0x0000, 0x007f], [0x0080, 0x00ff], [0x0100, 0x017f], [0x0180, 0x024f], [0x0250, 0x02af, 0x1d00, 0x1d7f, 0x1d80, 0x1dbf], [0x02b0, 0x02ff, 0xa700, 0xa71f], [0x0300, 0x036f, 0x1dc0, 0x1dff], [0x0370, 0x03ff], [0x2c80, 0x2cff], [0x0400, 0x04ff, 0x0500, 0x052f, 0x2de0, 0x2dff, 0xa640, 0xa69f], [0x0530, 0x058f], [0x0590, 0x05ff], [0xa500, 0xa63f], [0x0600, 0x06ff, 0x0750, 0x077f], [0x07c0, 0x07ff], [0x0900, 0x097f], [0x0980, 0x09ff], [0x0a00, 0x0a7f], [0x0a80, 0x0aff], [0x0b00, 0x0b7f], [0x0b80, 0x0bff], [0x0c00, 0x0c7f], [0x0c80, 0x0cff], [0x0d00, 0x0d7f], [0x0e00, 0x0e7f], [0x0e80, 0x0eff], [0x10a0, 0x10ff, 0x2d00, 0x2d2f], [0x1b00, 0x1b7f], [0x1100, 0x11ff], [0x1e00, 0x1eff, 0x2c60, 0x2c7f, 0xa720, 0xa7ff], [0x1f00, 0x1fff], [0x2000, 0x206f, 0x2e00, 0x2e7f], [0x2070, 0x209f], [0x20a0, 0x20cf], [0x20d0, 0x20ff], [0x2100, 0x214f], [0x2150, 0x218f], [0x2190, 0x21ff, 0x27f0, 0x27ff, 0x2900, 0x297f, 0x2b00, 0x2bff], [0x2200, 0x22ff, 0x2a00, 0x2aff, 0x27c0, 0x27ef, 0x2980, 0x29ff], [0x2300, 0x23ff], [0x2400, 0x243f], [0x2440, 0x245f], [0x2460, 0x24ff], [0x2500, 0x257f], [0x2580, 0x259f], [0x25a0, 0x25ff], [0x2600, 0x26ff], [0x2700, 0x27bf], [0x3000, 0x303f], [0x3040, 0x309f], [0x30a0, 0x30ff, 0x31f0, 0x31ff], [0x3100, 0x312f, 0x31a0, 0x31bf], [0x3130, 0x318f], [0xa840, 0xa87f], [0x3200, 0x32ff], [0x3300, 0x33ff], [0xac00, 0xd7af], [0xd800, 0xdfff], [0x10900, 0x1091f], [0x4e00, 0x9fff, 0x2e80, 0x2eff, 0x2f00, 0x2fdf, 0x2ff0, 0x2fff, 0x3400, 0x4dbf, 0x20000, 0x2a6df, 0x3190, 0x319f], [0xe000, 0xf8ff], [0x31c0, 0x31ef, 0xf900, 0xfaff, 0x2f800, 0x2fa1f], [0xfb00, 0xfb4f], [0xfb50, 0xfdff], [0xfe20, 0xfe2f], [0xfe10, 0xfe1f], [0xfe50, 0xfe6f], [0xfe70, 0xfeff], [0xff00, 0xffef], [0xfff0, 0xffff], [0x0f00, 0x0fff], [0x0700, 0x074f], [0x0780, 0x07bf], [0x0d80, 0x0dff], [0x1000, 0x109f], [0x1200, 0x137f, 0x1380, 0x139f, 0x2d80, 0x2ddf], [0x13a0, 0x13ff], [0x1400, 0x167f], [0x1680, 0x169f], [0x16a0, 0x16ff], [0x1780, 0x17ff], [0x1800, 0x18af], [0x2800, 0x28ff], [0xa000, 0xa48f], [0x1700, 0x171f, 0x1720, 0x173f, 0x1740, 0x175f, 0x1760, 0x177f], [0x10300, 0x1032f], [0x10330, 0x1034f], [0x10400, 0x1044f], [0x1d000, 0x1d0ff, 0x1d100, 0x1d1ff, 0x1d200, 0x1d24f], [0x1d400, 0x1d7ff], [0xff000, 0xffffd], [0xfe00, 0xfe0f, 0xe0100, 0xe01ef], [0xe0000, 0xe007f], [0x1900, 0x194f], [0x1950, 0x197f], [0x1980, 0x19df], [0x1a00, 0x1a1f], [0x2c00, 0x2c5f], [0x2d30, 0x2d7f], [0x4dc0, 0x4dff], [0xa800, 0xa82f], [0x10000, 0x1007f, 0x10080, 0x100ff, 0x10100, 0x1013f], [0x10140, 0x1018f], [0x10380, 0x1039f], [0x103a0, 0x103df], [0x10450, 0x1047f], [0x10480, 0x104af], [0x10800, 0x1083f], [0x10a00, 0x10a5f], [0x1d300, 0x1d35f], [0x12000, 0x123ff, 0x12400, 0x1247f], [0x1d360, 0x1d37f], [0x1b80, 0x1bbf], [0x1c00, 0x1c4f], [0x1c50, 0x1c7f], [0xa880, 0xa8df], [0xa900, 0xa92f], [0xa930, 0xa95f], [0xaa00, 0xaa5f], [0x10190, 0x101cf], [0x101d0, 0x101ff], [0x102a0, 0x102df, 0x10280, 0x1029f, 0x10920, 0x1093f], [0x1f030, 0x1f09f, 0x1f000, 0x1f02f]];\nfunction getUnicodeRangeFor(value, lastPosition = -1) {\n  if (lastPosition !== -1) {\n    const range = UnicodeRanges[lastPosition];\n    for (let i = 0, ii = range.length; i < ii; i += 2) {\n      if (value >= range[i] && value <= range[i + 1]) {\n        return lastPosition;\n      }\n    }\n  }\n  for (let i = 0, ii = UnicodeRanges.length; i < ii; i++) {\n    const range = UnicodeRanges[i];\n    for (let j = 0, jj = range.length; j < jj; j += 2) {\n      if (value >= range[j] && value <= range[j + 1]) {\n        return i;\n      }\n    }\n  }\n  return -1;\n}\nconst SpecialCharRegExp = new RegExp(\"^(\\\\s)|(\\\\p{Mn})|(\\\\p{Cf})$\", \"u\");\nconst CategoryCache = new Map();\nfunction getCharUnicodeCategory(char) {\n  const cachedCategory = CategoryCache.get(char);\n  if (cachedCategory) {\n    return cachedCategory;\n  }\n  const groups = char.match(SpecialCharRegExp);\n  const category = {\n    isWhitespace: !!groups?.[1],\n    isZeroWidthDiacritic: !!groups?.[2],\n    isInvisibleFormatMark: !!groups?.[3]\n  };\n  CategoryCache.set(char, category);\n  return category;\n}\nfunction clearUnicodeCaches() {\n  CategoryCache.clear();\n}\n\n;// CONCATENATED MODULE: ./src/core/fonts_utils.js\n\n\n\n\nconst SEAC_ANALYSIS_ENABLED = true;\nconst FontFlags = {\n  FixedPitch: 1,\n  Serif: 2,\n  Symbolic: 4,\n  Script: 8,\n  Nonsymbolic: 32,\n  Italic: 64,\n  AllCap: 65536,\n  SmallCap: 131072,\n  ForceBold: 262144\n};\nconst MacStandardGlyphOrdering = [\".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\"];\nfunction recoverGlyphName(name, glyphsUnicodeMap) {\n  if (glyphsUnicodeMap[name] !== undefined) {\n    return name;\n  }\n  const unicode = getUnicodeForGlyph(name, glyphsUnicodeMap);\n  if (unicode !== -1) {\n    for (const key in glyphsUnicodeMap) {\n      if (glyphsUnicodeMap[key] === unicode) {\n        return key;\n      }\n    }\n  }\n  info(\"Unable to recover a standard glyph name for: \" + name);\n  return name;\n}\nfunction type1FontGlyphMapping(properties, builtInEncoding, glyphNames) {\n  const charCodeToGlyphId = Object.create(null);\n  let glyphId, charCode, baseEncoding;\n  const isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);\n  if (properties.isInternalFont) {\n    baseEncoding = builtInEncoding;\n    for (charCode = 0; charCode < baseEncoding.length; charCode++) {\n      glyphId = glyphNames.indexOf(baseEncoding[charCode]);\n      charCodeToGlyphId[charCode] = glyphId >= 0 ? glyphId : 0;\n    }\n  } else if (properties.baseEncodingName) {\n    baseEncoding = getEncoding(properties.baseEncodingName);\n    for (charCode = 0; charCode < baseEncoding.length; charCode++) {\n      glyphId = glyphNames.indexOf(baseEncoding[charCode]);\n      charCodeToGlyphId[charCode] = glyphId >= 0 ? glyphId : 0;\n    }\n  } else if (isSymbolicFont) {\n    for (charCode in builtInEncoding) {\n      charCodeToGlyphId[charCode] = builtInEncoding[charCode];\n    }\n  } else {\n    baseEncoding = StandardEncoding;\n    for (charCode = 0; charCode < baseEncoding.length; charCode++) {\n      glyphId = glyphNames.indexOf(baseEncoding[charCode]);\n      charCodeToGlyphId[charCode] = glyphId >= 0 ? glyphId : 0;\n    }\n  }\n  const differences = properties.differences;\n  let glyphsUnicodeMap;\n  if (differences) {\n    for (charCode in differences) {\n      const glyphName = differences[charCode];\n      glyphId = glyphNames.indexOf(glyphName);\n      if (glyphId === -1) {\n        if (!glyphsUnicodeMap) {\n          glyphsUnicodeMap = getGlyphsUnicode();\n        }\n        const standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap);\n        if (standardGlyphName !== glyphName) {\n          glyphId = glyphNames.indexOf(standardGlyphName);\n        }\n      }\n      charCodeToGlyphId[charCode] = glyphId >= 0 ? glyphId : 0;\n    }\n  }\n  return charCodeToGlyphId;\n}\nfunction normalizeFontName(name) {\n  return name.replaceAll(/[,_]/g, \"-\").replaceAll(/\\s/g, \"\");\n}\n\n;// CONCATENATED MODULE: ./src/core/standard_fonts.js\n\n\nconst getStdFontMap = getLookupTableFactory(function (t) {\n  t[\"Times-Roman\"] = \"Times-Roman\";\n  t.Helvetica = \"Helvetica\";\n  t.Courier = \"Courier\";\n  t.Symbol = \"Symbol\";\n  t[\"Times-Bold\"] = \"Times-Bold\";\n  t[\"Helvetica-Bold\"] = \"Helvetica-Bold\";\n  t[\"Courier-Bold\"] = \"Courier-Bold\";\n  t.ZapfDingbats = \"ZapfDingbats\";\n  t[\"Times-Italic\"] = \"Times-Italic\";\n  t[\"Helvetica-Oblique\"] = \"Helvetica-Oblique\";\n  t[\"Courier-Oblique\"] = \"Courier-Oblique\";\n  t[\"Times-BoldItalic\"] = \"Times-BoldItalic\";\n  t[\"Helvetica-BoldOblique\"] = \"Helvetica-BoldOblique\";\n  t[\"Courier-BoldOblique\"] = \"Courier-BoldOblique\";\n  t.ArialNarrow = \"Helvetica\";\n  t[\"ArialNarrow-Bold\"] = \"Helvetica-Bold\";\n  t[\"ArialNarrow-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"ArialNarrow-Italic\"] = \"Helvetica-Oblique\";\n  t.ArialBlack = \"Helvetica\";\n  t[\"ArialBlack-Bold\"] = \"Helvetica-Bold\";\n  t[\"ArialBlack-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"ArialBlack-Italic\"] = \"Helvetica-Oblique\";\n  t[\"Arial-Black\"] = \"Helvetica\";\n  t[\"Arial-Black-Bold\"] = \"Helvetica-Bold\";\n  t[\"Arial-Black-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"Arial-Black-Italic\"] = \"Helvetica-Oblique\";\n  t.Arial = \"Helvetica\";\n  t[\"Arial-Bold\"] = \"Helvetica-Bold\";\n  t[\"Arial-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"Arial-Italic\"] = \"Helvetica-Oblique\";\n  t.ArialMT = \"Helvetica\";\n  t[\"Arial-BoldItalicMT\"] = \"Helvetica-BoldOblique\";\n  t[\"Arial-BoldMT\"] = \"Helvetica-Bold\";\n  t[\"Arial-ItalicMT\"] = \"Helvetica-Oblique\";\n  t[\"Arial-BoldItalicMT-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"Arial-BoldMT-Bold\"] = \"Helvetica-Bold\";\n  t[\"Arial-ItalicMT-Italic\"] = \"Helvetica-Oblique\";\n  t.ArialUnicodeMS = \"Helvetica\";\n  t[\"ArialUnicodeMS-Bold\"] = \"Helvetica-Bold\";\n  t[\"ArialUnicodeMS-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"ArialUnicodeMS-Italic\"] = \"Helvetica-Oblique\";\n  t[\"Courier-BoldItalic\"] = \"Courier-BoldOblique\";\n  t[\"Courier-Italic\"] = \"Courier-Oblique\";\n  t.CourierNew = \"Courier\";\n  t[\"CourierNew-Bold\"] = \"Courier-Bold\";\n  t[\"CourierNew-BoldItalic\"] = \"Courier-BoldOblique\";\n  t[\"CourierNew-Italic\"] = \"Courier-Oblique\";\n  t[\"CourierNewPS-BoldItalicMT\"] = \"Courier-BoldOblique\";\n  t[\"CourierNewPS-BoldMT\"] = \"Courier-Bold\";\n  t[\"CourierNewPS-ItalicMT\"] = \"Courier-Oblique\";\n  t.CourierNewPSMT = \"Courier\";\n  t[\"Helvetica-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"Helvetica-Italic\"] = \"Helvetica-Oblique\";\n  t[\"Symbol-Bold\"] = \"Symbol\";\n  t[\"Symbol-BoldItalic\"] = \"Symbol\";\n  t[\"Symbol-Italic\"] = \"Symbol\";\n  t.TimesNewRoman = \"Times-Roman\";\n  t[\"TimesNewRoman-Bold\"] = \"Times-Bold\";\n  t[\"TimesNewRoman-BoldItalic\"] = \"Times-BoldItalic\";\n  t[\"TimesNewRoman-Italic\"] = \"Times-Italic\";\n  t.TimesNewRomanPS = \"Times-Roman\";\n  t[\"TimesNewRomanPS-Bold\"] = \"Times-Bold\";\n  t[\"TimesNewRomanPS-BoldItalic\"] = \"Times-BoldItalic\";\n  t[\"TimesNewRomanPS-BoldItalicMT\"] = \"Times-BoldItalic\";\n  t[\"TimesNewRomanPS-BoldMT\"] = \"Times-Bold\";\n  t[\"TimesNewRomanPS-Italic\"] = \"Times-Italic\";\n  t[\"TimesNewRomanPS-ItalicMT\"] = \"Times-Italic\";\n  t.TimesNewRomanPSMT = \"Times-Roman\";\n  t[\"TimesNewRomanPSMT-Bold\"] = \"Times-Bold\";\n  t[\"TimesNewRomanPSMT-BoldItalic\"] = \"Times-BoldItalic\";\n  t[\"TimesNewRomanPSMT-Italic\"] = \"Times-Italic\";\n});\nconst getFontNameToFileMap = getLookupTableFactory(function (t) {\n  t.Courier = \"FoxitFixed.pfb\";\n  t[\"Courier-Bold\"] = \"FoxitFixedBold.pfb\";\n  t[\"Courier-BoldOblique\"] = \"FoxitFixedBoldItalic.pfb\";\n  t[\"Courier-Oblique\"] = \"FoxitFixedItalic.pfb\";\n  t.Helvetica = \"LiberationSans-Regular.ttf\";\n  t[\"Helvetica-Bold\"] = \"LiberationSans-Bold.ttf\";\n  t[\"Helvetica-BoldOblique\"] = \"LiberationSans-BoldItalic.ttf\";\n  t[\"Helvetica-Oblique\"] = \"LiberationSans-Italic.ttf\";\n  t[\"Times-Roman\"] = \"FoxitSerif.pfb\";\n  t[\"Times-Bold\"] = \"FoxitSerifBold.pfb\";\n  t[\"Times-BoldItalic\"] = \"FoxitSerifBoldItalic.pfb\";\n  t[\"Times-Italic\"] = \"FoxitSerifItalic.pfb\";\n  t.Symbol = \"FoxitSymbol.pfb\";\n  t.ZapfDingbats = \"FoxitDingbats.pfb\";\n  t[\"LiberationSans-Regular\"] = \"LiberationSans-Regular.ttf\";\n  t[\"LiberationSans-Bold\"] = \"LiberationSans-Bold.ttf\";\n  t[\"LiberationSans-Italic\"] = \"LiberationSans-Italic.ttf\";\n  t[\"LiberationSans-BoldItalic\"] = \"LiberationSans-BoldItalic.ttf\";\n});\nconst getNonStdFontMap = getLookupTableFactory(function (t) {\n  t.Calibri = \"Helvetica\";\n  t[\"Calibri-Bold\"] = \"Helvetica-Bold\";\n  t[\"Calibri-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"Calibri-Italic\"] = \"Helvetica-Oblique\";\n  t.CenturyGothic = \"Helvetica\";\n  t[\"CenturyGothic-Bold\"] = \"Helvetica-Bold\";\n  t[\"CenturyGothic-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"CenturyGothic-Italic\"] = \"Helvetica-Oblique\";\n  t.ComicSansMS = \"Comic Sans MS\";\n  t[\"ComicSansMS-Bold\"] = \"Comic Sans MS-Bold\";\n  t[\"ComicSansMS-BoldItalic\"] = \"Comic Sans MS-BoldItalic\";\n  t[\"ComicSansMS-Italic\"] = \"Comic Sans MS-Italic\";\n  t.Impact = \"Helvetica\";\n  t[\"ItcSymbol-Bold\"] = \"Helvetica-Bold\";\n  t[\"ItcSymbol-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"ItcSymbol-Book\"] = \"Helvetica\";\n  t[\"ItcSymbol-BookItalic\"] = \"Helvetica-Oblique\";\n  t[\"ItcSymbol-Medium\"] = \"Helvetica\";\n  t[\"ItcSymbol-MediumItalic\"] = \"Helvetica-Oblique\";\n  t.LucidaConsole = \"Courier\";\n  t[\"LucidaConsole-Bold\"] = \"Courier-Bold\";\n  t[\"LucidaConsole-BoldItalic\"] = \"Courier-BoldOblique\";\n  t[\"LucidaConsole-Italic\"] = \"Courier-Oblique\";\n  t[\"LucidaSans-Demi\"] = \"Helvetica-Bold\";\n  t[\"MS-Gothic\"] = \"MS Gothic\";\n  t[\"MS-Gothic-Bold\"] = \"MS Gothic-Bold\";\n  t[\"MS-Gothic-BoldItalic\"] = \"MS Gothic-BoldItalic\";\n  t[\"MS-Gothic-Italic\"] = \"MS Gothic-Italic\";\n  t[\"MS-Mincho\"] = \"MS Mincho\";\n  t[\"MS-Mincho-Bold\"] = \"MS Mincho-Bold\";\n  t[\"MS-Mincho-BoldItalic\"] = \"MS Mincho-BoldItalic\";\n  t[\"MS-Mincho-Italic\"] = \"MS Mincho-Italic\";\n  t[\"MS-PGothic\"] = \"MS PGothic\";\n  t[\"MS-PGothic-Bold\"] = \"MS PGothic-Bold\";\n  t[\"MS-PGothic-BoldItalic\"] = \"MS PGothic-BoldItalic\";\n  t[\"MS-PGothic-Italic\"] = \"MS PGothic-Italic\";\n  t[\"MS-PMincho\"] = \"MS PMincho\";\n  t[\"MS-PMincho-Bold\"] = \"MS PMincho-Bold\";\n  t[\"MS-PMincho-BoldItalic\"] = \"MS PMincho-BoldItalic\";\n  t[\"MS-PMincho-Italic\"] = \"MS PMincho-Italic\";\n  t.NuptialScript = \"Times-Italic\";\n  t.SegoeUISymbol = \"Helvetica\";\n});\nconst getSerifFonts = getLookupTableFactory(function (t) {\n  t[\"Adobe Jenson\"] = true;\n  t[\"Adobe Text\"] = true;\n  t.Albertus = true;\n  t.Aldus = true;\n  t.Alexandria = true;\n  t.Algerian = true;\n  t[\"American Typewriter\"] = true;\n  t.Antiqua = true;\n  t.Apex = true;\n  t.Arno = true;\n  t.Aster = true;\n  t.Aurora = true;\n  t.Baskerville = true;\n  t.Bell = true;\n  t.Bembo = true;\n  t[\"Bembo Schoolbook\"] = true;\n  t.Benguiat = true;\n  t[\"Berkeley Old Style\"] = true;\n  t[\"Bernhard Modern\"] = true;\n  t[\"Berthold City\"] = true;\n  t.Bodoni = true;\n  t[\"Bauer Bodoni\"] = true;\n  t[\"Book Antiqua\"] = true;\n  t.Bookman = true;\n  t[\"Bordeaux Roman\"] = true;\n  t[\"Californian FB\"] = true;\n  t.Calisto = true;\n  t.Calvert = true;\n  t.Capitals = true;\n  t.Cambria = true;\n  t.Cartier = true;\n  t.Caslon = true;\n  t.Catull = true;\n  t.Centaur = true;\n  t[\"Century Old Style\"] = true;\n  t[\"Century Schoolbook\"] = true;\n  t.Chaparral = true;\n  t[\"Charis SIL\"] = true;\n  t.Cheltenham = true;\n  t[\"Cholla Slab\"] = true;\n  t.Clarendon = true;\n  t.Clearface = true;\n  t.Cochin = true;\n  t.Colonna = true;\n  t[\"Computer Modern\"] = true;\n  t[\"Concrete Roman\"] = true;\n  t.Constantia = true;\n  t[\"Cooper Black\"] = true;\n  t.Corona = true;\n  t.Ecotype = true;\n  t.Egyptienne = true;\n  t.Elephant = true;\n  t.Excelsior = true;\n  t.Fairfield = true;\n  t[\"FF Scala\"] = true;\n  t.Folkard = true;\n  t.Footlight = true;\n  t.FreeSerif = true;\n  t[\"Friz Quadrata\"] = true;\n  t.Garamond = true;\n  t.Gentium = true;\n  t.Georgia = true;\n  t.Gloucester = true;\n  t[\"Goudy Old Style\"] = true;\n  t[\"Goudy Schoolbook\"] = true;\n  t[\"Goudy Pro Font\"] = true;\n  t.Granjon = true;\n  t[\"Guardian Egyptian\"] = true;\n  t.Heather = true;\n  t.Hercules = true;\n  t[\"High Tower Text\"] = true;\n  t.Hiroshige = true;\n  t[\"Hoefler Text\"] = true;\n  t[\"Humana Serif\"] = true;\n  t.Imprint = true;\n  t[\"Ionic No. 5\"] = true;\n  t.Janson = true;\n  t.Joanna = true;\n  t.Korinna = true;\n  t.Lexicon = true;\n  t.LiberationSerif = true;\n  t[\"Liberation Serif\"] = true;\n  t[\"Linux Libertine\"] = true;\n  t.Literaturnaya = true;\n  t.Lucida = true;\n  t[\"Lucida Bright\"] = true;\n  t.Melior = true;\n  t.Memphis = true;\n  t.Miller = true;\n  t.Minion = true;\n  t.Modern = true;\n  t[\"Mona Lisa\"] = true;\n  t[\"Mrs Eaves\"] = true;\n  t[\"MS Serif\"] = true;\n  t[\"Museo Slab\"] = true;\n  t[\"New York\"] = true;\n  t[\"Nimbus Roman\"] = true;\n  t[\"NPS Rawlinson Roadway\"] = true;\n  t.NuptialScript = true;\n  t.Palatino = true;\n  t.Perpetua = true;\n  t.Plantin = true;\n  t[\"Plantin Schoolbook\"] = true;\n  t.Playbill = true;\n  t[\"Poor Richard\"] = true;\n  t[\"Rawlinson Roadway\"] = true;\n  t.Renault = true;\n  t.Requiem = true;\n  t.Rockwell = true;\n  t.Roman = true;\n  t[\"Rotis Serif\"] = true;\n  t.Sabon = true;\n  t.Scala = true;\n  t.Seagull = true;\n  t.Sistina = true;\n  t.Souvenir = true;\n  t.STIX = true;\n  t[\"Stone Informal\"] = true;\n  t[\"Stone Serif\"] = true;\n  t.Sylfaen = true;\n  t.Times = true;\n  t.Trajan = true;\n  t[\"Trinité\"] = true;\n  t[\"Trump Mediaeval\"] = true;\n  t.Utopia = true;\n  t[\"Vale Type\"] = true;\n  t[\"Bitstream Vera\"] = true;\n  t[\"Vera Serif\"] = true;\n  t.Versailles = true;\n  t.Wanted = true;\n  t.Weiss = true;\n  t[\"Wide Latin\"] = true;\n  t.Windsor = true;\n  t.XITS = true;\n});\nconst getSymbolsFonts = getLookupTableFactory(function (t) {\n  t.Dingbats = true;\n  t.Symbol = true;\n  t.ZapfDingbats = true;\n  t.Wingdings = true;\n  t[\"Wingdings-Bold\"] = true;\n  t[\"Wingdings-Regular\"] = true;\n});\nconst getGlyphMapForStandardFonts = getLookupTableFactory(function (t) {\n  t[2] = 10;\n  t[3] = 32;\n  t[4] = 33;\n  t[5] = 34;\n  t[6] = 35;\n  t[7] = 36;\n  t[8] = 37;\n  t[9] = 38;\n  t[10] = 39;\n  t[11] = 40;\n  t[12] = 41;\n  t[13] = 42;\n  t[14] = 43;\n  t[15] = 44;\n  t[16] = 45;\n  t[17] = 46;\n  t[18] = 47;\n  t[19] = 48;\n  t[20] = 49;\n  t[21] = 50;\n  t[22] = 51;\n  t[23] = 52;\n  t[24] = 53;\n  t[25] = 54;\n  t[26] = 55;\n  t[27] = 56;\n  t[28] = 57;\n  t[29] = 58;\n  t[30] = 894;\n  t[31] = 60;\n  t[32] = 61;\n  t[33] = 62;\n  t[34] = 63;\n  t[35] = 64;\n  t[36] = 65;\n  t[37] = 66;\n  t[38] = 67;\n  t[39] = 68;\n  t[40] = 69;\n  t[41] = 70;\n  t[42] = 71;\n  t[43] = 72;\n  t[44] = 73;\n  t[45] = 74;\n  t[46] = 75;\n  t[47] = 76;\n  t[48] = 77;\n  t[49] = 78;\n  t[50] = 79;\n  t[51] = 80;\n  t[52] = 81;\n  t[53] = 82;\n  t[54] = 83;\n  t[55] = 84;\n  t[56] = 85;\n  t[57] = 86;\n  t[58] = 87;\n  t[59] = 88;\n  t[60] = 89;\n  t[61] = 90;\n  t[62] = 91;\n  t[63] = 92;\n  t[64] = 93;\n  t[65] = 94;\n  t[66] = 95;\n  t[67] = 96;\n  t[68] = 97;\n  t[69] = 98;\n  t[70] = 99;\n  t[71] = 100;\n  t[72] = 101;\n  t[73] = 102;\n  t[74] = 103;\n  t[75] = 104;\n  t[76] = 105;\n  t[77] = 106;\n  t[78] = 107;\n  t[79] = 108;\n  t[80] = 109;\n  t[81] = 110;\n  t[82] = 111;\n  t[83] = 112;\n  t[84] = 113;\n  t[85] = 114;\n  t[86] = 115;\n  t[87] = 116;\n  t[88] = 117;\n  t[89] = 118;\n  t[90] = 119;\n  t[91] = 120;\n  t[92] = 121;\n  t[93] = 122;\n  t[94] = 123;\n  t[95] = 124;\n  t[96] = 125;\n  t[97] = 126;\n  t[98] = 196;\n  t[99] = 197;\n  t[100] = 199;\n  t[101] = 201;\n  t[102] = 209;\n  t[103] = 214;\n  t[104] = 220;\n  t[105] = 225;\n  t[106] = 224;\n  t[107] = 226;\n  t[108] = 228;\n  t[109] = 227;\n  t[110] = 229;\n  t[111] = 231;\n  t[112] = 233;\n  t[113] = 232;\n  t[114] = 234;\n  t[115] = 235;\n  t[116] = 237;\n  t[117] = 236;\n  t[118] = 238;\n  t[119] = 239;\n  t[120] = 241;\n  t[121] = 243;\n  t[122] = 242;\n  t[123] = 244;\n  t[124] = 246;\n  t[125] = 245;\n  t[126] = 250;\n  t[127] = 249;\n  t[128] = 251;\n  t[129] = 252;\n  t[130] = 8224;\n  t[131] = 176;\n  t[132] = 162;\n  t[133] = 163;\n  t[134] = 167;\n  t[135] = 8226;\n  t[136] = 182;\n  t[137] = 223;\n  t[138] = 174;\n  t[139] = 169;\n  t[140] = 8482;\n  t[141] = 180;\n  t[142] = 168;\n  t[143] = 8800;\n  t[144] = 198;\n  t[145] = 216;\n  t[146] = 8734;\n  t[147] = 177;\n  t[148] = 8804;\n  t[149] = 8805;\n  t[150] = 165;\n  t[151] = 181;\n  t[152] = 8706;\n  t[153] = 8721;\n  t[154] = 8719;\n  t[156] = 8747;\n  t[157] = 170;\n  t[158] = 186;\n  t[159] = 8486;\n  t[160] = 230;\n  t[161] = 248;\n  t[162] = 191;\n  t[163] = 161;\n  t[164] = 172;\n  t[165] = 8730;\n  t[166] = 402;\n  t[167] = 8776;\n  t[168] = 8710;\n  t[169] = 171;\n  t[170] = 187;\n  t[171] = 8230;\n  t[179] = 8220;\n  t[180] = 8221;\n  t[181] = 8216;\n  t[182] = 8217;\n  t[200] = 193;\n  t[203] = 205;\n  t[207] = 211;\n  t[210] = 218;\n  t[223] = 711;\n  t[224] = 321;\n  t[225] = 322;\n  t[226] = 352;\n  t[227] = 353;\n  t[228] = 381;\n  t[229] = 382;\n  t[233] = 221;\n  t[234] = 253;\n  t[252] = 263;\n  t[253] = 268;\n  t[254] = 269;\n  t[258] = 258;\n  t[260] = 260;\n  t[261] = 261;\n  t[265] = 280;\n  t[266] = 281;\n  t[267] = 282;\n  t[268] = 283;\n  t[269] = 313;\n  t[275] = 323;\n  t[276] = 324;\n  t[278] = 328;\n  t[283] = 344;\n  t[284] = 345;\n  t[285] = 346;\n  t[286] = 347;\n  t[292] = 367;\n  t[295] = 377;\n  t[296] = 378;\n  t[298] = 380;\n  t[305] = 963;\n  t[306] = 964;\n  t[307] = 966;\n  t[308] = 8215;\n  t[309] = 8252;\n  t[310] = 8319;\n  t[311] = 8359;\n  t[312] = 8592;\n  t[313] = 8593;\n  t[337] = 9552;\n  t[493] = 1039;\n  t[494] = 1040;\n  t[672] = 1488;\n  t[673] = 1489;\n  t[674] = 1490;\n  t[675] = 1491;\n  t[676] = 1492;\n  t[677] = 1493;\n  t[678] = 1494;\n  t[679] = 1495;\n  t[680] = 1496;\n  t[681] = 1497;\n  t[682] = 1498;\n  t[683] = 1499;\n  t[684] = 1500;\n  t[685] = 1501;\n  t[686] = 1502;\n  t[687] = 1503;\n  t[688] = 1504;\n  t[689] = 1505;\n  t[690] = 1506;\n  t[691] = 1507;\n  t[692] = 1508;\n  t[693] = 1509;\n  t[694] = 1510;\n  t[695] = 1511;\n  t[696] = 1512;\n  t[697] = 1513;\n  t[698] = 1514;\n  t[705] = 1524;\n  t[706] = 8362;\n  t[710] = 64288;\n  t[711] = 64298;\n  t[759] = 1617;\n  t[761] = 1776;\n  t[763] = 1778;\n  t[775] = 1652;\n  t[777] = 1764;\n  t[778] = 1780;\n  t[779] = 1781;\n  t[780] = 1782;\n  t[782] = 771;\n  t[783] = 64726;\n  t[786] = 8363;\n  t[788] = 8532;\n  t[790] = 768;\n  t[791] = 769;\n  t[792] = 768;\n  t[795] = 803;\n  t[797] = 64336;\n  t[798] = 64337;\n  t[799] = 64342;\n  t[800] = 64343;\n  t[801] = 64344;\n  t[802] = 64345;\n  t[803] = 64362;\n  t[804] = 64363;\n  t[805] = 64364;\n  t[2424] = 7821;\n  t[2425] = 7822;\n  t[2426] = 7823;\n  t[2427] = 7824;\n  t[2428] = 7825;\n  t[2429] = 7826;\n  t[2430] = 7827;\n  t[2433] = 7682;\n  t[2678] = 8045;\n  t[2679] = 8046;\n  t[2830] = 1552;\n  t[2838] = 686;\n  t[2840] = 751;\n  t[2842] = 753;\n  t[2843] = 754;\n  t[2844] = 755;\n  t[2846] = 757;\n  t[2856] = 767;\n  t[2857] = 848;\n  t[2858] = 849;\n  t[2862] = 853;\n  t[2863] = 854;\n  t[2864] = 855;\n  t[2865] = 861;\n  t[2866] = 862;\n  t[2906] = 7460;\n  t[2908] = 7462;\n  t[2909] = 7463;\n  t[2910] = 7464;\n  t[2912] = 7466;\n  t[2913] = 7467;\n  t[2914] = 7468;\n  t[2916] = 7470;\n  t[2917] = 7471;\n  t[2918] = 7472;\n  t[2920] = 7474;\n  t[2921] = 7475;\n  t[2922] = 7476;\n  t[2924] = 7478;\n  t[2925] = 7479;\n  t[2926] = 7480;\n  t[2928] = 7482;\n  t[2929] = 7483;\n  t[2930] = 7484;\n  t[2932] = 7486;\n  t[2933] = 7487;\n  t[2934] = 7488;\n  t[2936] = 7490;\n  t[2937] = 7491;\n  t[2938] = 7492;\n  t[2940] = 7494;\n  t[2941] = 7495;\n  t[2942] = 7496;\n  t[2944] = 7498;\n  t[2946] = 7500;\n  t[2948] = 7502;\n  t[2950] = 7504;\n  t[2951] = 7505;\n  t[2952] = 7506;\n  t[2954] = 7508;\n  t[2955] = 7509;\n  t[2956] = 7510;\n  t[2958] = 7512;\n  t[2959] = 7513;\n  t[2960] = 7514;\n  t[2962] = 7516;\n  t[2963] = 7517;\n  t[2964] = 7518;\n  t[2966] = 7520;\n  t[2967] = 7521;\n  t[2968] = 7522;\n  t[2970] = 7524;\n  t[2971] = 7525;\n  t[2972] = 7526;\n  t[2974] = 7528;\n  t[2975] = 7529;\n  t[2976] = 7530;\n  t[2978] = 1537;\n  t[2979] = 1538;\n  t[2980] = 1539;\n  t[2982] = 1549;\n  t[2983] = 1551;\n  t[2984] = 1552;\n  t[2986] = 1554;\n  t[2987] = 1555;\n  t[2988] = 1556;\n  t[2990] = 1623;\n  t[2991] = 1624;\n  t[2995] = 1775;\n  t[2999] = 1791;\n  t[3002] = 64290;\n  t[3003] = 64291;\n  t[3004] = 64292;\n  t[3006] = 64294;\n  t[3007] = 64295;\n  t[3008] = 64296;\n  t[3011] = 1900;\n  t[3014] = 8223;\n  t[3015] = 8244;\n  t[3017] = 7532;\n  t[3018] = 7533;\n  t[3019] = 7534;\n  t[3075] = 7590;\n  t[3076] = 7591;\n  t[3079] = 7594;\n  t[3080] = 7595;\n  t[3083] = 7598;\n  t[3084] = 7599;\n  t[3087] = 7602;\n  t[3088] = 7603;\n  t[3091] = 7606;\n  t[3092] = 7607;\n  t[3095] = 7610;\n  t[3096] = 7611;\n  t[3099] = 7614;\n  t[3100] = 7615;\n  t[3103] = 7618;\n  t[3104] = 7619;\n  t[3107] = 8337;\n  t[3108] = 8338;\n  t[3116] = 1884;\n  t[3119] = 1885;\n  t[3120] = 1885;\n  t[3123] = 1886;\n  t[3124] = 1886;\n  t[3127] = 1887;\n  t[3128] = 1887;\n  t[3131] = 1888;\n  t[3132] = 1888;\n  t[3135] = 1889;\n  t[3136] = 1889;\n  t[3139] = 1890;\n  t[3140] = 1890;\n  t[3143] = 1891;\n  t[3144] = 1891;\n  t[3147] = 1892;\n  t[3148] = 1892;\n  t[3153] = 580;\n  t[3154] = 581;\n  t[3157] = 584;\n  t[3158] = 585;\n  t[3161] = 588;\n  t[3162] = 589;\n  t[3165] = 891;\n  t[3166] = 892;\n  t[3169] = 1274;\n  t[3170] = 1275;\n  t[3173] = 1278;\n  t[3174] = 1279;\n  t[3181] = 7622;\n  t[3182] = 7623;\n  t[3282] = 11799;\n  t[3316] = 578;\n  t[3379] = 42785;\n  t[3393] = 1159;\n  t[3416] = 8377;\n});\nconst getSupplementalGlyphMapForArialBlack = getLookupTableFactory(function (t) {\n  t[227] = 322;\n  t[264] = 261;\n  t[291] = 346;\n});\nconst getSupplementalGlyphMapForCalibri = getLookupTableFactory(function (t) {\n  t[1] = 32;\n  t[4] = 65;\n  t[5] = 192;\n  t[6] = 193;\n  t[9] = 196;\n  t[17] = 66;\n  t[18] = 67;\n  t[21] = 268;\n  t[24] = 68;\n  t[28] = 69;\n  t[29] = 200;\n  t[30] = 201;\n  t[32] = 282;\n  t[38] = 70;\n  t[39] = 71;\n  t[44] = 72;\n  t[47] = 73;\n  t[48] = 204;\n  t[49] = 205;\n  t[58] = 74;\n  t[60] = 75;\n  t[62] = 76;\n  t[68] = 77;\n  t[69] = 78;\n  t[75] = 79;\n  t[76] = 210;\n  t[80] = 214;\n  t[87] = 80;\n  t[89] = 81;\n  t[90] = 82;\n  t[92] = 344;\n  t[94] = 83;\n  t[97] = 352;\n  t[100] = 84;\n  t[104] = 85;\n  t[109] = 220;\n  t[115] = 86;\n  t[116] = 87;\n  t[121] = 88;\n  t[122] = 89;\n  t[124] = 221;\n  t[127] = 90;\n  t[129] = 381;\n  t[258] = 97;\n  t[259] = 224;\n  t[260] = 225;\n  t[263] = 228;\n  t[268] = 261;\n  t[271] = 98;\n  t[272] = 99;\n  t[273] = 263;\n  t[275] = 269;\n  t[282] = 100;\n  t[286] = 101;\n  t[287] = 232;\n  t[288] = 233;\n  t[290] = 283;\n  t[295] = 281;\n  t[296] = 102;\n  t[336] = 103;\n  t[346] = 104;\n  t[349] = 105;\n  t[350] = 236;\n  t[351] = 237;\n  t[361] = 106;\n  t[364] = 107;\n  t[367] = 108;\n  t[371] = 322;\n  t[373] = 109;\n  t[374] = 110;\n  t[381] = 111;\n  t[382] = 242;\n  t[383] = 243;\n  t[386] = 246;\n  t[393] = 112;\n  t[395] = 113;\n  t[396] = 114;\n  t[398] = 345;\n  t[400] = 115;\n  t[401] = 347;\n  t[403] = 353;\n  t[410] = 116;\n  t[437] = 117;\n  t[442] = 252;\n  t[448] = 118;\n  t[449] = 119;\n  t[454] = 120;\n  t[455] = 121;\n  t[457] = 253;\n  t[460] = 122;\n  t[462] = 382;\n  t[463] = 380;\n  t[853] = 44;\n  t[855] = 58;\n  t[856] = 46;\n  t[876] = 47;\n  t[878] = 45;\n  t[882] = 45;\n  t[894] = 40;\n  t[895] = 41;\n  t[896] = 91;\n  t[897] = 93;\n  t[923] = 64;\n  t[1004] = 48;\n  t[1005] = 49;\n  t[1006] = 50;\n  t[1007] = 51;\n  t[1008] = 52;\n  t[1009] = 53;\n  t[1010] = 54;\n  t[1011] = 55;\n  t[1012] = 56;\n  t[1013] = 57;\n  t[1081] = 37;\n  t[1085] = 43;\n  t[1086] = 45;\n});\nfunction getStandardFontName(name) {\n  const fontName = normalizeFontName(name);\n  const stdFontMap = getStdFontMap();\n  return stdFontMap[fontName];\n}\nfunction isKnownFontName(name) {\n  const fontName = normalizeFontName(name);\n  return !!(getStdFontMap()[fontName] || getNonStdFontMap()[fontName] || getSerifFonts()[fontName] || getSymbolsFonts()[fontName]);\n}\n\n;// CONCATENATED MODULE: ./src/core/to_unicode_map.js\n\nclass ToUnicodeMap {\n  constructor(cmap = []) {\n    this._map = cmap;\n  }\n  get length() {\n    return this._map.length;\n  }\n  forEach(callback) {\n    for (const charCode in this._map) {\n      callback(charCode, this._map[charCode].charCodeAt(0));\n    }\n  }\n  has(i) {\n    return this._map[i] !== undefined;\n  }\n  get(i) {\n    return this._map[i];\n  }\n  charCodeOf(value) {\n    const map = this._map;\n    if (map.length <= 0x10000) {\n      return map.indexOf(value);\n    }\n    for (const charCode in map) {\n      if (map[charCode] === value) {\n        return charCode | 0;\n      }\n    }\n    return -1;\n  }\n  amend(map) {\n    for (const charCode in map) {\n      this._map[charCode] = map[charCode];\n    }\n  }\n}\nclass IdentityToUnicodeMap {\n  constructor(firstChar, lastChar) {\n    this.firstChar = firstChar;\n    this.lastChar = lastChar;\n  }\n  get length() {\n    return this.lastChar + 1 - this.firstChar;\n  }\n  forEach(callback) {\n    for (let i = this.firstChar, ii = this.lastChar; i <= ii; i++) {\n      callback(i, i);\n    }\n  }\n  has(i) {\n    return this.firstChar <= i && i <= this.lastChar;\n  }\n  get(i) {\n    if (this.firstChar <= i && i <= this.lastChar) {\n      return String.fromCharCode(i);\n    }\n    return undefined;\n  }\n  charCodeOf(v) {\n    return Number.isInteger(v) && v >= this.firstChar && v <= this.lastChar ? v : -1;\n  }\n  amend(map) {\n    unreachable(\"Should not call amend()\");\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/cff_font.js\n\n\n\nclass CFFFont {\n  constructor(file, properties) {\n    this.properties = properties;\n    const parser = new CFFParser(file, properties, SEAC_ANALYSIS_ENABLED);\n    this.cff = parser.parse();\n    this.cff.duplicateFirstGlyph();\n    const compiler = new CFFCompiler(this.cff);\n    this.seacs = this.cff.seacs;\n    try {\n      this.data = compiler.compile();\n    } catch {\n      warn(\"Failed to compile font \" + properties.loadedName);\n      this.data = file;\n    }\n    this._createBuiltInEncoding();\n  }\n  get numGlyphs() {\n    return this.cff.charStrings.count;\n  }\n  getCharset() {\n    return this.cff.charset.charset;\n  }\n  getGlyphMapping() {\n    const cff = this.cff;\n    const properties = this.properties;\n    const {\n      cidToGidMap,\n      cMap\n    } = properties;\n    const charsets = cff.charset.charset;\n    let charCodeToGlyphId;\n    let glyphId;\n    if (properties.composite) {\n      let invCidToGidMap;\n      if (cidToGidMap?.length > 0) {\n        invCidToGidMap = Object.create(null);\n        for (let i = 0, ii = cidToGidMap.length; i < ii; i++) {\n          const gid = cidToGidMap[i];\n          if (gid !== undefined) {\n            invCidToGidMap[gid] = i;\n          }\n        }\n      }\n      charCodeToGlyphId = Object.create(null);\n      let charCode;\n      if (cff.isCIDFont) {\n        for (glyphId = 0; glyphId < charsets.length; glyphId++) {\n          const cid = charsets[glyphId];\n          charCode = cMap.charCodeOf(cid);\n          if (invCidToGidMap?.[charCode] !== undefined) {\n            charCode = invCidToGidMap[charCode];\n          }\n          charCodeToGlyphId[charCode] = glyphId;\n        }\n      } else {\n        for (glyphId = 0; glyphId < cff.charStrings.count; glyphId++) {\n          charCode = cMap.charCodeOf(glyphId);\n          charCodeToGlyphId[charCode] = glyphId;\n        }\n      }\n      return charCodeToGlyphId;\n    }\n    let encoding = cff.encoding ? cff.encoding.encoding : null;\n    if (properties.isInternalFont) {\n      encoding = properties.defaultEncoding;\n    }\n    charCodeToGlyphId = type1FontGlyphMapping(properties, encoding, charsets);\n    return charCodeToGlyphId;\n  }\n  hasGlyphId(id) {\n    return this.cff.hasGlyphId(id);\n  }\n  _createBuiltInEncoding() {\n    const {\n      charset,\n      encoding\n    } = this.cff;\n    if (!charset || !encoding) {\n      return;\n    }\n    const charsets = charset.charset,\n      encodings = encoding.encoding;\n    const map = [];\n    for (const charCode in encodings) {\n      const glyphId = encodings[charCode];\n      if (glyphId >= 0) {\n        const glyphName = charsets[glyphId];\n        if (glyphName) {\n          map[charCode] = glyphName;\n        }\n      }\n    }\n    if (map.length > 0) {\n      this.properties.builtInEncoding = map;\n    }\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/font_renderer.js\n\n\n\n\n\n\nfunction getUint32(data, offset) {\n  return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0;\n}\nfunction getUint16(data, offset) {\n  return data[offset] << 8 | data[offset + 1];\n}\nfunction getInt16(data, offset) {\n  return (data[offset] << 24 | data[offset + 1] << 16) >> 16;\n}\nfunction getInt8(data, offset) {\n  return data[offset] << 24 >> 24;\n}\nfunction getFloat214(data, offset) {\n  return getInt16(data, offset) / 16384;\n}\nfunction getSubroutineBias(subrs) {\n  const numSubrs = subrs.length;\n  let bias = 32768;\n  if (numSubrs < 1240) {\n    bias = 107;\n  } else if (numSubrs < 33900) {\n    bias = 1131;\n  }\n  return bias;\n}\nfunction parseCmap(data, start, end) {\n  const offset = getUint16(data, start + 2) === 1 ? getUint32(data, start + 8) : getUint32(data, start + 16);\n  const format = getUint16(data, start + offset);\n  let ranges, p, i;\n  if (format === 4) {\n    getUint16(data, start + offset + 2);\n    const segCount = getUint16(data, start + offset + 6) >> 1;\n    p = start + offset + 14;\n    ranges = [];\n    for (i = 0; i < segCount; i++, p += 2) {\n      ranges[i] = {\n        end: getUint16(data, p)\n      };\n    }\n    p += 2;\n    for (i = 0; i < segCount; i++, p += 2) {\n      ranges[i].start = getUint16(data, p);\n    }\n    for (i = 0; i < segCount; i++, p += 2) {\n      ranges[i].idDelta = getUint16(data, p);\n    }\n    for (i = 0; i < segCount; i++, p += 2) {\n      let idOffset = getUint16(data, p);\n      if (idOffset === 0) {\n        continue;\n      }\n      ranges[i].ids = [];\n      for (let j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) {\n        ranges[i].ids[j] = getUint16(data, p + idOffset);\n        idOffset += 2;\n      }\n    }\n    return ranges;\n  } else if (format === 12) {\n    const groups = getUint32(data, start + offset + 12);\n    p = start + offset + 16;\n    ranges = [];\n    for (i = 0; i < groups; i++) {\n      start = getUint32(data, p);\n      ranges.push({\n        start,\n        end: getUint32(data, p + 4),\n        idDelta: getUint32(data, p + 8) - start\n      });\n      p += 12;\n    }\n    return ranges;\n  }\n  throw new FormatError(`unsupported cmap: ${format}`);\n}\nfunction parseCff(data, start, end, seacAnalysisEnabled) {\n  const properties = {};\n  const parser = new CFFParser(new Stream(data, start, end - start), properties, seacAnalysisEnabled);\n  const cff = parser.parse();\n  return {\n    glyphs: cff.charStrings.objects,\n    subrs: cff.topDict.privateDict?.subrsIndex?.objects,\n    gsubrs: cff.globalSubrIndex?.objects,\n    isCFFCIDFont: cff.isCIDFont,\n    fdSelect: cff.fdSelect,\n    fdArray: cff.fdArray\n  };\n}\nfunction parseGlyfTable(glyf, loca, isGlyphLocationsLong) {\n  let itemSize, itemDecode;\n  if (isGlyphLocationsLong) {\n    itemSize = 4;\n    itemDecode = getUint32;\n  } else {\n    itemSize = 2;\n    itemDecode = (data, offset) => 2 * getUint16(data, offset);\n  }\n  const glyphs = [];\n  let startOffset = itemDecode(loca, 0);\n  for (let j = itemSize; j < loca.length; j += itemSize) {\n    const endOffset = itemDecode(loca, j);\n    glyphs.push(glyf.subarray(startOffset, endOffset));\n    startOffset = endOffset;\n  }\n  return glyphs;\n}\nfunction lookupCmap(ranges, unicode) {\n  const code = unicode.codePointAt(0);\n  let gid = 0,\n    l = 0,\n    r = ranges.length - 1;\n  while (l < r) {\n    const c = l + r + 1 >> 1;\n    if (code < ranges[c].start) {\n      r = c - 1;\n    } else {\n      l = c;\n    }\n  }\n  if (ranges[l].start <= code && code <= ranges[l].end) {\n    gid = ranges[l].idDelta + (ranges[l].ids ? ranges[l].ids[code - ranges[l].start] : code) & 0xffff;\n  }\n  return {\n    charCode: code,\n    glyphId: gid\n  };\n}\nfunction compileGlyf(code, cmds, font) {\n  function moveTo(x, y) {\n    cmds.add(FontRenderOps.MOVE_TO, [x, y]);\n  }\n  function lineTo(x, y) {\n    cmds.add(FontRenderOps.LINE_TO, [x, y]);\n  }\n  function quadraticCurveTo(xa, ya, x, y) {\n    cmds.add(FontRenderOps.QUADRATIC_CURVE_TO, [xa, ya, x, y]);\n  }\n  let i = 0;\n  const numberOfContours = getInt16(code, i);\n  let flags;\n  let x = 0,\n    y = 0;\n  i += 10;\n  if (numberOfContours < 0) {\n    do {\n      flags = getUint16(code, i);\n      const glyphIndex = getUint16(code, i + 2);\n      i += 4;\n      let arg1, arg2;\n      if (flags & 0x01) {\n        if (flags & 0x02) {\n          arg1 = getInt16(code, i);\n          arg2 = getInt16(code, i + 2);\n        } else {\n          arg1 = getUint16(code, i);\n          arg2 = getUint16(code, i + 2);\n        }\n        i += 4;\n      } else if (flags & 0x02) {\n        arg1 = getInt8(code, i++);\n        arg2 = getInt8(code, i++);\n      } else {\n        arg1 = code[i++];\n        arg2 = code[i++];\n      }\n      if (flags & 0x02) {\n        x = arg1;\n        y = arg2;\n      } else {\n        x = 0;\n        y = 0;\n      }\n      let scaleX = 1,\n        scaleY = 1,\n        scale01 = 0,\n        scale10 = 0;\n      if (flags & 0x08) {\n        scaleX = scaleY = getFloat214(code, i);\n        i += 2;\n      } else if (flags & 0x40) {\n        scaleX = getFloat214(code, i);\n        scaleY = getFloat214(code, i + 2);\n        i += 4;\n      } else if (flags & 0x80) {\n        scaleX = getFloat214(code, i);\n        scale01 = getFloat214(code, i + 2);\n        scale10 = getFloat214(code, i + 4);\n        scaleY = getFloat214(code, i + 6);\n        i += 8;\n      }\n      const subglyph = font.glyphs[glyphIndex];\n      if (subglyph) {\n        cmds.add(FontRenderOps.SAVE);\n        cmds.add(FontRenderOps.TRANSFORM, [scaleX, scale01, scale10, scaleY, x, y]);\n        if (!(flags & 0x02)) {}\n        compileGlyf(subglyph, cmds, font);\n        cmds.add(FontRenderOps.RESTORE);\n      }\n    } while (flags & 0x20);\n  } else {\n    const endPtsOfContours = [];\n    let j, jj;\n    for (j = 0; j < numberOfContours; j++) {\n      endPtsOfContours.push(getUint16(code, i));\n      i += 2;\n    }\n    const instructionLength = getUint16(code, i);\n    i += 2 + instructionLength;\n    const numberOfPoints = endPtsOfContours.at(-1) + 1;\n    const points = [];\n    while (points.length < numberOfPoints) {\n      flags = code[i++];\n      let repeat = 1;\n      if (flags & 0x08) {\n        repeat += code[i++];\n      }\n      while (repeat-- > 0) {\n        points.push({\n          flags\n        });\n      }\n    }\n    for (j = 0; j < numberOfPoints; j++) {\n      switch (points[j].flags & 0x12) {\n        case 0x00:\n          x += getInt16(code, i);\n          i += 2;\n          break;\n        case 0x02:\n          x -= code[i++];\n          break;\n        case 0x12:\n          x += code[i++];\n          break;\n      }\n      points[j].x = x;\n    }\n    for (j = 0; j < numberOfPoints; j++) {\n      switch (points[j].flags & 0x24) {\n        case 0x00:\n          y += getInt16(code, i);\n          i += 2;\n          break;\n        case 0x04:\n          y -= code[i++];\n          break;\n        case 0x24:\n          y += code[i++];\n          break;\n      }\n      points[j].y = y;\n    }\n    let startPoint = 0;\n    for (i = 0; i < numberOfContours; i++) {\n      const endPoint = endPtsOfContours[i];\n      const contour = points.slice(startPoint, endPoint + 1);\n      if (contour[0].flags & 1) {\n        contour.push(contour[0]);\n      } else if (contour.at(-1).flags & 1) {\n        contour.unshift(contour.at(-1));\n      } else {\n        const p = {\n          flags: 1,\n          x: (contour[0].x + contour.at(-1).x) / 2,\n          y: (contour[0].y + contour.at(-1).y) / 2\n        };\n        contour.unshift(p);\n        contour.push(p);\n      }\n      moveTo(contour[0].x, contour[0].y);\n      for (j = 1, jj = contour.length; j < jj; j++) {\n        if (contour[j].flags & 1) {\n          lineTo(contour[j].x, contour[j].y);\n        } else if (contour[j + 1].flags & 1) {\n          quadraticCurveTo(contour[j].x, contour[j].y, contour[j + 1].x, contour[j + 1].y);\n          j++;\n        } else {\n          quadraticCurveTo(contour[j].x, contour[j].y, (contour[j].x + contour[j + 1].x) / 2, (contour[j].y + contour[j + 1].y) / 2);\n        }\n      }\n      startPoint = endPoint + 1;\n    }\n  }\n}\nfunction compileCharString(charStringCode, cmds, font, glyphId) {\n  function moveTo(x, y) {\n    cmds.add(FontRenderOps.MOVE_TO, [x, y]);\n  }\n  function lineTo(x, y) {\n    cmds.add(FontRenderOps.LINE_TO, [x, y]);\n  }\n  function bezierCurveTo(x1, y1, x2, y2, x, y) {\n    cmds.add(FontRenderOps.BEZIER_CURVE_TO, [x1, y1, x2, y2, x, y]);\n  }\n  const stack = [];\n  let x = 0,\n    y = 0;\n  let stems = 0;\n  function parse(code) {\n    let i = 0;\n    while (i < code.length) {\n      let stackClean = false;\n      let v = code[i++];\n      let xa, xb, ya, yb, y1, y2, y3, n, subrCode;\n      switch (v) {\n        case 1:\n          stems += stack.length >> 1;\n          stackClean = true;\n          break;\n        case 3:\n          stems += stack.length >> 1;\n          stackClean = true;\n          break;\n        case 4:\n          y += stack.pop();\n          moveTo(x, y);\n          stackClean = true;\n          break;\n        case 5:\n          while (stack.length > 0) {\n            x += stack.shift();\n            y += stack.shift();\n            lineTo(x, y);\n          }\n          break;\n        case 6:\n          while (stack.length > 0) {\n            x += stack.shift();\n            lineTo(x, y);\n            if (stack.length === 0) {\n              break;\n            }\n            y += stack.shift();\n            lineTo(x, y);\n          }\n          break;\n        case 7:\n          while (stack.length > 0) {\n            y += stack.shift();\n            lineTo(x, y);\n            if (stack.length === 0) {\n              break;\n            }\n            x += stack.shift();\n            lineTo(x, y);\n          }\n          break;\n        case 8:\n          while (stack.length > 0) {\n            xa = x + stack.shift();\n            ya = y + stack.shift();\n            xb = xa + stack.shift();\n            yb = ya + stack.shift();\n            x = xb + stack.shift();\n            y = yb + stack.shift();\n            bezierCurveTo(xa, ya, xb, yb, x, y);\n          }\n          break;\n        case 10:\n          n = stack.pop();\n          subrCode = null;\n          if (font.isCFFCIDFont) {\n            const fdIndex = font.fdSelect.getFDIndex(glyphId);\n            if (fdIndex >= 0 && fdIndex < font.fdArray.length) {\n              const fontDict = font.fdArray[fdIndex];\n              let subrs;\n              if (fontDict.privateDict?.subrsIndex) {\n                subrs = fontDict.privateDict.subrsIndex.objects;\n              }\n              if (subrs) {\n                n += getSubroutineBias(subrs);\n                subrCode = subrs[n];\n              }\n            } else {\n              warn(\"Invalid fd index for glyph index.\");\n            }\n          } else {\n            subrCode = font.subrs[n + font.subrsBias];\n          }\n          if (subrCode) {\n            parse(subrCode);\n          }\n          break;\n        case 11:\n          return;\n        case 12:\n          v = code[i++];\n          switch (v) {\n            case 34:\n              xa = x + stack.shift();\n              xb = xa + stack.shift();\n              y1 = y + stack.shift();\n              x = xb + stack.shift();\n              bezierCurveTo(xa, y, xb, y1, x, y1);\n              xa = x + stack.shift();\n              xb = xa + stack.shift();\n              x = xb + stack.shift();\n              bezierCurveTo(xa, y1, xb, y, x, y);\n              break;\n            case 35:\n              xa = x + stack.shift();\n              ya = y + stack.shift();\n              xb = xa + stack.shift();\n              yb = ya + stack.shift();\n              x = xb + stack.shift();\n              y = yb + stack.shift();\n              bezierCurveTo(xa, ya, xb, yb, x, y);\n              xa = x + stack.shift();\n              ya = y + stack.shift();\n              xb = xa + stack.shift();\n              yb = ya + stack.shift();\n              x = xb + stack.shift();\n              y = yb + stack.shift();\n              bezierCurveTo(xa, ya, xb, yb, x, y);\n              stack.pop();\n              break;\n            case 36:\n              xa = x + stack.shift();\n              y1 = y + stack.shift();\n              xb = xa + stack.shift();\n              y2 = y1 + stack.shift();\n              x = xb + stack.shift();\n              bezierCurveTo(xa, y1, xb, y2, x, y2);\n              xa = x + stack.shift();\n              xb = xa + stack.shift();\n              y3 = y2 + stack.shift();\n              x = xb + stack.shift();\n              bezierCurveTo(xa, y2, xb, y3, x, y);\n              break;\n            case 37:\n              const x0 = x,\n                y0 = y;\n              xa = x + stack.shift();\n              ya = y + stack.shift();\n              xb = xa + stack.shift();\n              yb = ya + stack.shift();\n              x = xb + stack.shift();\n              y = yb + stack.shift();\n              bezierCurveTo(xa, ya, xb, yb, x, y);\n              xa = x + stack.shift();\n              ya = y + stack.shift();\n              xb = xa + stack.shift();\n              yb = ya + stack.shift();\n              x = xb;\n              y = yb;\n              if (Math.abs(x - x0) > Math.abs(y - y0)) {\n                x += stack.shift();\n              } else {\n                y += stack.shift();\n              }\n              bezierCurveTo(xa, ya, xb, yb, x, y);\n              break;\n            default:\n              throw new FormatError(`unknown operator: 12 ${v}`);\n          }\n          break;\n        case 14:\n          if (stack.length >= 4) {\n            const achar = stack.pop();\n            const bchar = stack.pop();\n            y = stack.pop();\n            x = stack.pop();\n            cmds.add(FontRenderOps.SAVE);\n            cmds.add(FontRenderOps.TRANSLATE, [x, y]);\n            let cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[StandardEncoding[achar]]));\n            compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId);\n            cmds.add(FontRenderOps.RESTORE);\n            cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[StandardEncoding[bchar]]));\n            compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId);\n          }\n          return;\n        case 18:\n          stems += stack.length >> 1;\n          stackClean = true;\n          break;\n        case 19:\n          stems += stack.length >> 1;\n          i += stems + 7 >> 3;\n          stackClean = true;\n          break;\n        case 20:\n          stems += stack.length >> 1;\n          i += stems + 7 >> 3;\n          stackClean = true;\n          break;\n        case 21:\n          y += stack.pop();\n          x += stack.pop();\n          moveTo(x, y);\n          stackClean = true;\n          break;\n        case 22:\n          x += stack.pop();\n          moveTo(x, y);\n          stackClean = true;\n          break;\n        case 23:\n          stems += stack.length >> 1;\n          stackClean = true;\n          break;\n        case 24:\n          while (stack.length > 2) {\n            xa = x + stack.shift();\n            ya = y + stack.shift();\n            xb = xa + stack.shift();\n            yb = ya + stack.shift();\n            x = xb + stack.shift();\n            y = yb + stack.shift();\n            bezierCurveTo(xa, ya, xb, yb, x, y);\n          }\n          x += stack.shift();\n          y += stack.shift();\n          lineTo(x, y);\n          break;\n        case 25:\n          while (stack.length > 6) {\n            x += stack.shift();\n            y += stack.shift();\n            lineTo(x, y);\n          }\n          xa = x + stack.shift();\n          ya = y + stack.shift();\n          xb = xa + stack.shift();\n          yb = ya + stack.shift();\n          x = xb + stack.shift();\n          y = yb + stack.shift();\n          bezierCurveTo(xa, ya, xb, yb, x, y);\n          break;\n        case 26:\n          if (stack.length % 2) {\n            x += stack.shift();\n          }\n          while (stack.length > 0) {\n            xa = x;\n            ya = y + stack.shift();\n            xb = xa + stack.shift();\n            yb = ya + stack.shift();\n            x = xb;\n            y = yb + stack.shift();\n            bezierCurveTo(xa, ya, xb, yb, x, y);\n          }\n          break;\n        case 27:\n          if (stack.length % 2) {\n            y += stack.shift();\n          }\n          while (stack.length > 0) {\n            xa = x + stack.shift();\n            ya = y;\n            xb = xa + stack.shift();\n            yb = ya + stack.shift();\n            x = xb + stack.shift();\n            y = yb;\n            bezierCurveTo(xa, ya, xb, yb, x, y);\n          }\n          break;\n        case 28:\n          stack.push((code[i] << 24 | code[i + 1] << 16) >> 16);\n          i += 2;\n          break;\n        case 29:\n          n = stack.pop() + font.gsubrsBias;\n          subrCode = font.gsubrs[n];\n          if (subrCode) {\n            parse(subrCode);\n          }\n          break;\n        case 30:\n          while (stack.length > 0) {\n            xa = x;\n            ya = y + stack.shift();\n            xb = xa + stack.shift();\n            yb = ya + stack.shift();\n            x = xb + stack.shift();\n            y = yb + (stack.length === 1 ? stack.shift() : 0);\n            bezierCurveTo(xa, ya, xb, yb, x, y);\n            if (stack.length === 0) {\n              break;\n            }\n            xa = x + stack.shift();\n            ya = y;\n            xb = xa + stack.shift();\n            yb = ya + stack.shift();\n            y = yb + stack.shift();\n            x = xb + (stack.length === 1 ? stack.shift() : 0);\n            bezierCurveTo(xa, ya, xb, yb, x, y);\n          }\n          break;\n        case 31:\n          while (stack.length > 0) {\n            xa = x + stack.shift();\n            ya = y;\n            xb = xa + stack.shift();\n            yb = ya + stack.shift();\n            y = yb + stack.shift();\n            x = xb + (stack.length === 1 ? stack.shift() : 0);\n            bezierCurveTo(xa, ya, xb, yb, x, y);\n            if (stack.length === 0) {\n              break;\n            }\n            xa = x;\n            ya = y + stack.shift();\n            xb = xa + stack.shift();\n            yb = ya + stack.shift();\n            x = xb + stack.shift();\n            y = yb + (stack.length === 1 ? stack.shift() : 0);\n            bezierCurveTo(xa, ya, xb, yb, x, y);\n          }\n          break;\n        default:\n          if (v < 32) {\n            throw new FormatError(`unknown operator: ${v}`);\n          }\n          if (v < 247) {\n            stack.push(v - 139);\n          } else if (v < 251) {\n            stack.push((v - 247) * 256 + code[i++] + 108);\n          } else if (v < 255) {\n            stack.push(-(v - 251) * 256 - code[i++] - 108);\n          } else {\n            stack.push((code[i] << 24 | code[i + 1] << 16 | code[i + 2] << 8 | code[i + 3]) / 65536);\n            i += 4;\n          }\n          break;\n      }\n      if (stackClean) {\n        stack.length = 0;\n      }\n    }\n  }\n  parse(charStringCode);\n}\nconst NOOP = [];\nclass Commands {\n  cmds = [];\n  add(cmd, args) {\n    if (args) {\n      if (!isNumberArray(args, null)) {\n        warn(`Commands.add - \"${cmd}\" has at least one non-number arg: \"${args}\".`);\n        const newArgs = args.map(arg => typeof arg === \"number\" ? arg : 0);\n        this.cmds.push(cmd, ...newArgs);\n      } else {\n        this.cmds.push(cmd, ...args);\n      }\n    } else {\n      this.cmds.push(cmd);\n    }\n  }\n}\nclass CompiledFont {\n  constructor(fontMatrix) {\n    if (this.constructor === CompiledFont) {\n      unreachable(\"Cannot initialize CompiledFont.\");\n    }\n    this.fontMatrix = fontMatrix;\n    this.compiledGlyphs = Object.create(null);\n    this.compiledCharCodeToGlyphId = Object.create(null);\n  }\n  getPathJs(unicode) {\n    const {\n      charCode,\n      glyphId\n    } = lookupCmap(this.cmap, unicode);\n    let fn = this.compiledGlyphs[glyphId],\n      compileEx;\n    if (!fn) {\n      try {\n        fn = this.compileGlyph(this.glyphs[glyphId], glyphId);\n      } catch (ex) {\n        fn = NOOP;\n        compileEx = ex;\n      }\n      this.compiledGlyphs[glyphId] = fn;\n    }\n    this.compiledCharCodeToGlyphId[charCode] ??= glyphId;\n    if (compileEx) {\n      throw compileEx;\n    }\n    return fn;\n  }\n  compileGlyph(code, glyphId) {\n    if (!code || code.length === 0 || code[0] === 14) {\n      return NOOP;\n    }\n    let fontMatrix = this.fontMatrix;\n    if (this.isCFFCIDFont) {\n      const fdIndex = this.fdSelect.getFDIndex(glyphId);\n      if (fdIndex >= 0 && fdIndex < this.fdArray.length) {\n        const fontDict = this.fdArray[fdIndex];\n        fontMatrix = fontDict.getByName(\"FontMatrix\") || FONT_IDENTITY_MATRIX;\n      } else {\n        warn(\"Invalid fd index for glyph index.\");\n      }\n    }\n    const cmds = new Commands();\n    cmds.add(FontRenderOps.SAVE);\n    cmds.add(FontRenderOps.TRANSFORM, fontMatrix.slice());\n    cmds.add(FontRenderOps.SCALE);\n    this.compileGlyphImpl(code, cmds, glyphId);\n    cmds.add(FontRenderOps.RESTORE);\n    return cmds.cmds;\n  }\n  compileGlyphImpl() {\n    unreachable(\"Children classes should implement this.\");\n  }\n  hasBuiltPath(unicode) {\n    const {\n      charCode,\n      glyphId\n    } = lookupCmap(this.cmap, unicode);\n    return this.compiledGlyphs[glyphId] !== undefined && this.compiledCharCodeToGlyphId[charCode] !== undefined;\n  }\n}\nclass TrueTypeCompiled extends CompiledFont {\n  constructor(glyphs, cmap, fontMatrix) {\n    super(fontMatrix || [0.000488, 0, 0, 0.000488, 0, 0]);\n    this.glyphs = glyphs;\n    this.cmap = cmap;\n  }\n  compileGlyphImpl(code, cmds) {\n    compileGlyf(code, cmds, this);\n  }\n}\nclass Type2Compiled extends CompiledFont {\n  constructor(cffInfo, cmap, fontMatrix, glyphNameMap) {\n    super(fontMatrix || [0.001, 0, 0, 0.001, 0, 0]);\n    this.glyphs = cffInfo.glyphs;\n    this.gsubrs = cffInfo.gsubrs || [];\n    this.subrs = cffInfo.subrs || [];\n    this.cmap = cmap;\n    this.glyphNameMap = glyphNameMap || getGlyphsUnicode();\n    this.gsubrsBias = getSubroutineBias(this.gsubrs);\n    this.subrsBias = getSubroutineBias(this.subrs);\n    this.isCFFCIDFont = cffInfo.isCFFCIDFont;\n    this.fdSelect = cffInfo.fdSelect;\n    this.fdArray = cffInfo.fdArray;\n  }\n  compileGlyphImpl(code, cmds, glyphId) {\n    compileCharString(code, cmds, this, glyphId);\n  }\n}\nclass FontRendererFactory {\n  static create(font, seacAnalysisEnabled) {\n    const data = new Uint8Array(font.data);\n    let cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm;\n    const numTables = getUint16(data, 4);\n    for (let i = 0, p = 12; i < numTables; i++, p += 16) {\n      const tag = bytesToString(data.subarray(p, p + 4));\n      const offset = getUint32(data, p + 8);\n      const length = getUint32(data, p + 12);\n      switch (tag) {\n        case \"cmap\":\n          cmap = parseCmap(data, offset, offset + length);\n          break;\n        case \"glyf\":\n          glyf = data.subarray(offset, offset + length);\n          break;\n        case \"loca\":\n          loca = data.subarray(offset, offset + length);\n          break;\n        case \"head\":\n          unitsPerEm = getUint16(data, offset + 18);\n          indexToLocFormat = getUint16(data, offset + 50);\n          break;\n        case \"CFF \":\n          cff = parseCff(data, offset, offset + length, seacAnalysisEnabled);\n          break;\n      }\n    }\n    if (glyf) {\n      const fontMatrix = !unitsPerEm ? font.fontMatrix : [1 / unitsPerEm, 0, 0, 1 / unitsPerEm, 0, 0];\n      return new TrueTypeCompiled(parseGlyfTable(glyf, loca, indexToLocFormat), cmap, fontMatrix);\n    }\n    return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/metrics.js\n\nconst getMetrics = getLookupTableFactory(function (t) {\n  t.Courier = 600;\n  t[\"Courier-Bold\"] = 600;\n  t[\"Courier-BoldOblique\"] = 600;\n  t[\"Courier-Oblique\"] = 600;\n  t.Helvetica = getLookupTableFactory(function (t) {\n    t.space = 278;\n    t.exclam = 278;\n    t.quotedbl = 355;\n    t.numbersign = 556;\n    t.dollar = 556;\n    t.percent = 889;\n    t.ampersand = 667;\n    t.quoteright = 222;\n    t.parenleft = 333;\n    t.parenright = 333;\n    t.asterisk = 389;\n    t.plus = 584;\n    t.comma = 278;\n    t.hyphen = 333;\n    t.period = 278;\n    t.slash = 278;\n    t.zero = 556;\n    t.one = 556;\n    t.two = 556;\n    t.three = 556;\n    t.four = 556;\n    t.five = 556;\n    t.six = 556;\n    t.seven = 556;\n    t.eight = 556;\n    t.nine = 556;\n    t.colon = 278;\n    t.semicolon = 278;\n    t.less = 584;\n    t.equal = 584;\n    t.greater = 584;\n    t.question = 556;\n    t.at = 1015;\n    t.A = 667;\n    t.B = 667;\n    t.C = 722;\n    t.D = 722;\n    t.E = 667;\n    t.F = 611;\n    t.G = 778;\n    t.H = 722;\n    t.I = 278;\n    t.J = 500;\n    t.K = 667;\n    t.L = 556;\n    t.M = 833;\n    t.N = 722;\n    t.O = 778;\n    t.P = 667;\n    t.Q = 778;\n    t.R = 722;\n    t.S = 667;\n    t.T = 611;\n    t.U = 722;\n    t.V = 667;\n    t.W = 944;\n    t.X = 667;\n    t.Y = 667;\n    t.Z = 611;\n    t.bracketleft = 278;\n    t.backslash = 278;\n    t.bracketright = 278;\n    t.asciicircum = 469;\n    t.underscore = 556;\n    t.quoteleft = 222;\n    t.a = 556;\n    t.b = 556;\n    t.c = 500;\n    t.d = 556;\n    t.e = 556;\n    t.f = 278;\n    t.g = 556;\n    t.h = 556;\n    t.i = 222;\n    t.j = 222;\n    t.k = 500;\n    t.l = 222;\n    t.m = 833;\n    t.n = 556;\n    t.o = 556;\n    t.p = 556;\n    t.q = 556;\n    t.r = 333;\n    t.s = 500;\n    t.t = 278;\n    t.u = 556;\n    t.v = 500;\n    t.w = 722;\n    t.x = 500;\n    t.y = 500;\n    t.z = 500;\n    t.braceleft = 334;\n    t.bar = 260;\n    t.braceright = 334;\n    t.asciitilde = 584;\n    t.exclamdown = 333;\n    t.cent = 556;\n    t.sterling = 556;\n    t.fraction = 167;\n    t.yen = 556;\n    t.florin = 556;\n    t.section = 556;\n    t.currency = 556;\n    t.quotesingle = 191;\n    t.quotedblleft = 333;\n    t.guillemotleft = 556;\n    t.guilsinglleft = 333;\n    t.guilsinglright = 333;\n    t.fi = 500;\n    t.fl = 500;\n    t.endash = 556;\n    t.dagger = 556;\n    t.daggerdbl = 556;\n    t.periodcentered = 278;\n    t.paragraph = 537;\n    t.bullet = 350;\n    t.quotesinglbase = 222;\n    t.quotedblbase = 333;\n    t.quotedblright = 333;\n    t.guillemotright = 556;\n    t.ellipsis = 1000;\n    t.perthousand = 1000;\n    t.questiondown = 611;\n    t.grave = 333;\n    t.acute = 333;\n    t.circumflex = 333;\n    t.tilde = 333;\n    t.macron = 333;\n    t.breve = 333;\n    t.dotaccent = 333;\n    t.dieresis = 333;\n    t.ring = 333;\n    t.cedilla = 333;\n    t.hungarumlaut = 333;\n    t.ogonek = 333;\n    t.caron = 333;\n    t.emdash = 1000;\n    t.AE = 1000;\n    t.ordfeminine = 370;\n    t.Lslash = 556;\n    t.Oslash = 778;\n    t.OE = 1000;\n    t.ordmasculine = 365;\n    t.ae = 889;\n    t.dotlessi = 278;\n    t.lslash = 222;\n    t.oslash = 611;\n    t.oe = 944;\n    t.germandbls = 611;\n    t.Idieresis = 278;\n    t.eacute = 556;\n    t.abreve = 556;\n    t.uhungarumlaut = 556;\n    t.ecaron = 556;\n    t.Ydieresis = 667;\n    t.divide = 584;\n    t.Yacute = 667;\n    t.Acircumflex = 667;\n    t.aacute = 556;\n    t.Ucircumflex = 722;\n    t.yacute = 500;\n    t.scommaaccent = 500;\n    t.ecircumflex = 556;\n    t.Uring = 722;\n    t.Udieresis = 722;\n    t.aogonek = 556;\n    t.Uacute = 722;\n    t.uogonek = 556;\n    t.Edieresis = 667;\n    t.Dcroat = 722;\n    t.commaaccent = 250;\n    t.copyright = 737;\n    t.Emacron = 667;\n    t.ccaron = 500;\n    t.aring = 556;\n    t.Ncommaaccent = 722;\n    t.lacute = 222;\n    t.agrave = 556;\n    t.Tcommaaccent = 611;\n    t.Cacute = 722;\n    t.atilde = 556;\n    t.Edotaccent = 667;\n    t.scaron = 500;\n    t.scedilla = 500;\n    t.iacute = 278;\n    t.lozenge = 471;\n    t.Rcaron = 722;\n    t.Gcommaaccent = 778;\n    t.ucircumflex = 556;\n    t.acircumflex = 556;\n    t.Amacron = 667;\n    t.rcaron = 333;\n    t.ccedilla = 500;\n    t.Zdotaccent = 611;\n    t.Thorn = 667;\n    t.Omacron = 778;\n    t.Racute = 722;\n    t.Sacute = 667;\n    t.dcaron = 643;\n    t.Umacron = 722;\n    t.uring = 556;\n    t.threesuperior = 333;\n    t.Ograve = 778;\n    t.Agrave = 667;\n    t.Abreve = 667;\n    t.multiply = 584;\n    t.uacute = 556;\n    t.Tcaron = 611;\n    t.partialdiff = 476;\n    t.ydieresis = 500;\n    t.Nacute = 722;\n    t.icircumflex = 278;\n    t.Ecircumflex = 667;\n    t.adieresis = 556;\n    t.edieresis = 556;\n    t.cacute = 500;\n    t.nacute = 556;\n    t.umacron = 556;\n    t.Ncaron = 722;\n    t.Iacute = 278;\n    t.plusminus = 584;\n    t.brokenbar = 260;\n    t.registered = 737;\n    t.Gbreve = 778;\n    t.Idotaccent = 278;\n    t.summation = 600;\n    t.Egrave = 667;\n    t.racute = 333;\n    t.omacron = 556;\n    t.Zacute = 611;\n    t.Zcaron = 611;\n    t.greaterequal = 549;\n    t.Eth = 722;\n    t.Ccedilla = 722;\n    t.lcommaaccent = 222;\n    t.tcaron = 317;\n    t.eogonek = 556;\n    t.Uogonek = 722;\n    t.Aacute = 667;\n    t.Adieresis = 667;\n    t.egrave = 556;\n    t.zacute = 500;\n    t.iogonek = 222;\n    t.Oacute = 778;\n    t.oacute = 556;\n    t.amacron = 556;\n    t.sacute = 500;\n    t.idieresis = 278;\n    t.Ocircumflex = 778;\n    t.Ugrave = 722;\n    t.Delta = 612;\n    t.thorn = 556;\n    t.twosuperior = 333;\n    t.Odieresis = 778;\n    t.mu = 556;\n    t.igrave = 278;\n    t.ohungarumlaut = 556;\n    t.Eogonek = 667;\n    t.dcroat = 556;\n    t.threequarters = 834;\n    t.Scedilla = 667;\n    t.lcaron = 299;\n    t.Kcommaaccent = 667;\n    t.Lacute = 556;\n    t.trademark = 1000;\n    t.edotaccent = 556;\n    t.Igrave = 278;\n    t.Imacron = 278;\n    t.Lcaron = 556;\n    t.onehalf = 834;\n    t.lessequal = 549;\n    t.ocircumflex = 556;\n    t.ntilde = 556;\n    t.Uhungarumlaut = 722;\n    t.Eacute = 667;\n    t.emacron = 556;\n    t.gbreve = 556;\n    t.onequarter = 834;\n    t.Scaron = 667;\n    t.Scommaaccent = 667;\n    t.Ohungarumlaut = 778;\n    t.degree = 400;\n    t.ograve = 556;\n    t.Ccaron = 722;\n    t.ugrave = 556;\n    t.radical = 453;\n    t.Dcaron = 722;\n    t.rcommaaccent = 333;\n    t.Ntilde = 722;\n    t.otilde = 556;\n    t.Rcommaaccent = 722;\n    t.Lcommaaccent = 556;\n    t.Atilde = 667;\n    t.Aogonek = 667;\n    t.Aring = 667;\n    t.Otilde = 778;\n    t.zdotaccent = 500;\n    t.Ecaron = 667;\n    t.Iogonek = 278;\n    t.kcommaaccent = 500;\n    t.minus = 584;\n    t.Icircumflex = 278;\n    t.ncaron = 556;\n    t.tcommaaccent = 278;\n    t.logicalnot = 584;\n    t.odieresis = 556;\n    t.udieresis = 556;\n    t.notequal = 549;\n    t.gcommaaccent = 556;\n    t.eth = 556;\n    t.zcaron = 500;\n    t.ncommaaccent = 556;\n    t.onesuperior = 333;\n    t.imacron = 278;\n    t.Euro = 556;\n  });\n  t[\"Helvetica-Bold\"] = getLookupTableFactory(function (t) {\n    t.space = 278;\n    t.exclam = 333;\n    t.quotedbl = 474;\n    t.numbersign = 556;\n    t.dollar = 556;\n    t.percent = 889;\n    t.ampersand = 722;\n    t.quoteright = 278;\n    t.parenleft = 333;\n    t.parenright = 333;\n    t.asterisk = 389;\n    t.plus = 584;\n    t.comma = 278;\n    t.hyphen = 333;\n    t.period = 278;\n    t.slash = 278;\n    t.zero = 556;\n    t.one = 556;\n    t.two = 556;\n    t.three = 556;\n    t.four = 556;\n    t.five = 556;\n    t.six = 556;\n    t.seven = 556;\n    t.eight = 556;\n    t.nine = 556;\n    t.colon = 333;\n    t.semicolon = 333;\n    t.less = 584;\n    t.equal = 584;\n    t.greater = 584;\n    t.question = 611;\n    t.at = 975;\n    t.A = 722;\n    t.B = 722;\n    t.C = 722;\n    t.D = 722;\n    t.E = 667;\n    t.F = 611;\n    t.G = 778;\n    t.H = 722;\n    t.I = 278;\n    t.J = 556;\n    t.K = 722;\n    t.L = 611;\n    t.M = 833;\n    t.N = 722;\n    t.O = 778;\n    t.P = 667;\n    t.Q = 778;\n    t.R = 722;\n    t.S = 667;\n    t.T = 611;\n    t.U = 722;\n    t.V = 667;\n    t.W = 944;\n    t.X = 667;\n    t.Y = 667;\n    t.Z = 611;\n    t.bracketleft = 333;\n    t.backslash = 278;\n    t.bracketright = 333;\n    t.asciicircum = 584;\n    t.underscore = 556;\n    t.quoteleft = 278;\n    t.a = 556;\n    t.b = 611;\n    t.c = 556;\n    t.d = 611;\n    t.e = 556;\n    t.f = 333;\n    t.g = 611;\n    t.h = 611;\n    t.i = 278;\n    t.j = 278;\n    t.k = 556;\n    t.l = 278;\n    t.m = 889;\n    t.n = 611;\n    t.o = 611;\n    t.p = 611;\n    t.q = 611;\n    t.r = 389;\n    t.s = 556;\n    t.t = 333;\n    t.u = 611;\n    t.v = 556;\n    t.w = 778;\n    t.x = 556;\n    t.y = 556;\n    t.z = 500;\n    t.braceleft = 389;\n    t.bar = 280;\n    t.braceright = 389;\n    t.asciitilde = 584;\n    t.exclamdown = 333;\n    t.cent = 556;\n    t.sterling = 556;\n    t.fraction = 167;\n    t.yen = 556;\n    t.florin = 556;\n    t.section = 556;\n    t.currency = 556;\n    t.quotesingle = 238;\n    t.quotedblleft = 500;\n    t.guillemotleft = 556;\n    t.guilsinglleft = 333;\n    t.guilsinglright = 333;\n    t.fi = 611;\n    t.fl = 611;\n    t.endash = 556;\n    t.dagger = 556;\n    t.daggerdbl = 556;\n    t.periodcentered = 278;\n    t.paragraph = 556;\n    t.bullet = 350;\n    t.quotesinglbase = 278;\n    t.quotedblbase = 500;\n    t.quotedblright = 500;\n    t.guillemotright = 556;\n    t.ellipsis = 1000;\n    t.perthousand = 1000;\n    t.questiondown = 611;\n    t.grave = 333;\n    t.acute = 333;\n    t.circumflex = 333;\n    t.tilde = 333;\n    t.macron = 333;\n    t.breve = 333;\n    t.dotaccent = 333;\n    t.dieresis = 333;\n    t.ring = 333;\n    t.cedilla = 333;\n    t.hungarumlaut = 333;\n    t.ogonek = 333;\n    t.caron = 333;\n    t.emdash = 1000;\n    t.AE = 1000;\n    t.ordfeminine = 370;\n    t.Lslash = 611;\n    t.Oslash = 778;\n    t.OE = 1000;\n    t.ordmasculine = 365;\n    t.ae = 889;\n    t.dotlessi = 278;\n    t.lslash = 278;\n    t.oslash = 611;\n    t.oe = 944;\n    t.germandbls = 611;\n    t.Idieresis = 278;\n    t.eacute = 556;\n    t.abreve = 556;\n    t.uhungarumlaut = 611;\n    t.ecaron = 556;\n    t.Ydieresis = 667;\n    t.divide = 584;\n    t.Yacute = 667;\n    t.Acircumflex = 722;\n    t.aacute = 556;\n    t.Ucircumflex = 722;\n    t.yacute = 556;\n    t.scommaaccent = 556;\n    t.ecircumflex = 556;\n    t.Uring = 722;\n    t.Udieresis = 722;\n    t.aogonek = 556;\n    t.Uacute = 722;\n    t.uogonek = 611;\n    t.Edieresis = 667;\n    t.Dcroat = 722;\n    t.commaaccent = 250;\n    t.copyright = 737;\n    t.Emacron = 667;\n    t.ccaron = 556;\n    t.aring = 556;\n    t.Ncommaaccent = 722;\n    t.lacute = 278;\n    t.agrave = 556;\n    t.Tcommaaccent = 611;\n    t.Cacute = 722;\n    t.atilde = 556;\n    t.Edotaccent = 667;\n    t.scaron = 556;\n    t.scedilla = 556;\n    t.iacute = 278;\n    t.lozenge = 494;\n    t.Rcaron = 722;\n    t.Gcommaaccent = 778;\n    t.ucircumflex = 611;\n    t.acircumflex = 556;\n    t.Amacron = 722;\n    t.rcaron = 389;\n    t.ccedilla = 556;\n    t.Zdotaccent = 611;\n    t.Thorn = 667;\n    t.Omacron = 778;\n    t.Racute = 722;\n    t.Sacute = 667;\n    t.dcaron = 743;\n    t.Umacron = 722;\n    t.uring = 611;\n    t.threesuperior = 333;\n    t.Ograve = 778;\n    t.Agrave = 722;\n    t.Abreve = 722;\n    t.multiply = 584;\n    t.uacute = 611;\n    t.Tcaron = 611;\n    t.partialdiff = 494;\n    t.ydieresis = 556;\n    t.Nacute = 722;\n    t.icircumflex = 278;\n    t.Ecircumflex = 667;\n    t.adieresis = 556;\n    t.edieresis = 556;\n    t.cacute = 556;\n    t.nacute = 611;\n    t.umacron = 611;\n    t.Ncaron = 722;\n    t.Iacute = 278;\n    t.plusminus = 584;\n    t.brokenbar = 280;\n    t.registered = 737;\n    t.Gbreve = 778;\n    t.Idotaccent = 278;\n    t.summation = 600;\n    t.Egrave = 667;\n    t.racute = 389;\n    t.omacron = 611;\n    t.Zacute = 611;\n    t.Zcaron = 611;\n    t.greaterequal = 549;\n    t.Eth = 722;\n    t.Ccedilla = 722;\n    t.lcommaaccent = 278;\n    t.tcaron = 389;\n    t.eogonek = 556;\n    t.Uogonek = 722;\n    t.Aacute = 722;\n    t.Adieresis = 722;\n    t.egrave = 556;\n    t.zacute = 500;\n    t.iogonek = 278;\n    t.Oacute = 778;\n    t.oacute = 611;\n    t.amacron = 556;\n    t.sacute = 556;\n    t.idieresis = 278;\n    t.Ocircumflex = 778;\n    t.Ugrave = 722;\n    t.Delta = 612;\n    t.thorn = 611;\n    t.twosuperior = 333;\n    t.Odieresis = 778;\n    t.mu = 611;\n    t.igrave = 278;\n    t.ohungarumlaut = 611;\n    t.Eogonek = 667;\n    t.dcroat = 611;\n    t.threequarters = 834;\n    t.Scedilla = 667;\n    t.lcaron = 400;\n    t.Kcommaaccent = 722;\n    t.Lacute = 611;\n    t.trademark = 1000;\n    t.edotaccent = 556;\n    t.Igrave = 278;\n    t.Imacron = 278;\n    t.Lcaron = 611;\n    t.onehalf = 834;\n    t.lessequal = 549;\n    t.ocircumflex = 611;\n    t.ntilde = 611;\n    t.Uhungarumlaut = 722;\n    t.Eacute = 667;\n    t.emacron = 556;\n    t.gbreve = 611;\n    t.onequarter = 834;\n    t.Scaron = 667;\n    t.Scommaaccent = 667;\n    t.Ohungarumlaut = 778;\n    t.degree = 400;\n    t.ograve = 611;\n    t.Ccaron = 722;\n    t.ugrave = 611;\n    t.radical = 549;\n    t.Dcaron = 722;\n    t.rcommaaccent = 389;\n    t.Ntilde = 722;\n    t.otilde = 611;\n    t.Rcommaaccent = 722;\n    t.Lcommaaccent = 611;\n    t.Atilde = 722;\n    t.Aogonek = 722;\n    t.Aring = 722;\n    t.Otilde = 778;\n    t.zdotaccent = 500;\n    t.Ecaron = 667;\n    t.Iogonek = 278;\n    t.kcommaaccent = 556;\n    t.minus = 584;\n    t.Icircumflex = 278;\n    t.ncaron = 611;\n    t.tcommaaccent = 333;\n    t.logicalnot = 584;\n    t.odieresis = 611;\n    t.udieresis = 611;\n    t.notequal = 549;\n    t.gcommaaccent = 611;\n    t.eth = 611;\n    t.zcaron = 500;\n    t.ncommaaccent = 611;\n    t.onesuperior = 333;\n    t.imacron = 278;\n    t.Euro = 556;\n  });\n  t[\"Helvetica-BoldOblique\"] = getLookupTableFactory(function (t) {\n    t.space = 278;\n    t.exclam = 333;\n    t.quotedbl = 474;\n    t.numbersign = 556;\n    t.dollar = 556;\n    t.percent = 889;\n    t.ampersand = 722;\n    t.quoteright = 278;\n    t.parenleft = 333;\n    t.parenright = 333;\n    t.asterisk = 389;\n    t.plus = 584;\n    t.comma = 278;\n    t.hyphen = 333;\n    t.period = 278;\n    t.slash = 278;\n    t.zero = 556;\n    t.one = 556;\n    t.two = 556;\n    t.three = 556;\n    t.four = 556;\n    t.five = 556;\n    t.six = 556;\n    t.seven = 556;\n    t.eight = 556;\n    t.nine = 556;\n    t.colon = 333;\n    t.semicolon = 333;\n    t.less = 584;\n    t.equal = 584;\n    t.greater = 584;\n    t.question = 611;\n    t.at = 975;\n    t.A = 722;\n    t.B = 722;\n    t.C = 722;\n    t.D = 722;\n    t.E = 667;\n    t.F = 611;\n    t.G = 778;\n    t.H = 722;\n    t.I = 278;\n    t.J = 556;\n    t.K = 722;\n    t.L = 611;\n    t.M = 833;\n    t.N = 722;\n    t.O = 778;\n    t.P = 667;\n    t.Q = 778;\n    t.R = 722;\n    t.S = 667;\n    t.T = 611;\n    t.U = 722;\n    t.V = 667;\n    t.W = 944;\n    t.X = 667;\n    t.Y = 667;\n    t.Z = 611;\n    t.bracketleft = 333;\n    t.backslash = 278;\n    t.bracketright = 333;\n    t.asciicircum = 584;\n    t.underscore = 556;\n    t.quoteleft = 278;\n    t.a = 556;\n    t.b = 611;\n    t.c = 556;\n    t.d = 611;\n    t.e = 556;\n    t.f = 333;\n    t.g = 611;\n    t.h = 611;\n    t.i = 278;\n    t.j = 278;\n    t.k = 556;\n    t.l = 278;\n    t.m = 889;\n    t.n = 611;\n    t.o = 611;\n    t.p = 611;\n    t.q = 611;\n    t.r = 389;\n    t.s = 556;\n    t.t = 333;\n    t.u = 611;\n    t.v = 556;\n    t.w = 778;\n    t.x = 556;\n    t.y = 556;\n    t.z = 500;\n    t.braceleft = 389;\n    t.bar = 280;\n    t.braceright = 389;\n    t.asciitilde = 584;\n    t.exclamdown = 333;\n    t.cent = 556;\n    t.sterling = 556;\n    t.fraction = 167;\n    t.yen = 556;\n    t.florin = 556;\n    t.section = 556;\n    t.currency = 556;\n    t.quotesingle = 238;\n    t.quotedblleft = 500;\n    t.guillemotleft = 556;\n    t.guilsinglleft = 333;\n    t.guilsinglright = 333;\n    t.fi = 611;\n    t.fl = 611;\n    t.endash = 556;\n    t.dagger = 556;\n    t.daggerdbl = 556;\n    t.periodcentered = 278;\n    t.paragraph = 556;\n    t.bullet = 350;\n    t.quotesinglbase = 278;\n    t.quotedblbase = 500;\n    t.quotedblright = 500;\n    t.guillemotright = 556;\n    t.ellipsis = 1000;\n    t.perthousand = 1000;\n    t.questiondown = 611;\n    t.grave = 333;\n    t.acute = 333;\n    t.circumflex = 333;\n    t.tilde = 333;\n    t.macron = 333;\n    t.breve = 333;\n    t.dotaccent = 333;\n    t.dieresis = 333;\n    t.ring = 333;\n    t.cedilla = 333;\n    t.hungarumlaut = 333;\n    t.ogonek = 333;\n    t.caron = 333;\n    t.emdash = 1000;\n    t.AE = 1000;\n    t.ordfeminine = 370;\n    t.Lslash = 611;\n    t.Oslash = 778;\n    t.OE = 1000;\n    t.ordmasculine = 365;\n    t.ae = 889;\n    t.dotlessi = 278;\n    t.lslash = 278;\n    t.oslash = 611;\n    t.oe = 944;\n    t.germandbls = 611;\n    t.Idieresis = 278;\n    t.eacute = 556;\n    t.abreve = 556;\n    t.uhungarumlaut = 611;\n    t.ecaron = 556;\n    t.Ydieresis = 667;\n    t.divide = 584;\n    t.Yacute = 667;\n    t.Acircumflex = 722;\n    t.aacute = 556;\n    t.Ucircumflex = 722;\n    t.yacute = 556;\n    t.scommaaccent = 556;\n    t.ecircumflex = 556;\n    t.Uring = 722;\n    t.Udieresis = 722;\n    t.aogonek = 556;\n    t.Uacute = 722;\n    t.uogonek = 611;\n    t.Edieresis = 667;\n    t.Dcroat = 722;\n    t.commaaccent = 250;\n    t.copyright = 737;\n    t.Emacron = 667;\n    t.ccaron = 556;\n    t.aring = 556;\n    t.Ncommaaccent = 722;\n    t.lacute = 278;\n    t.agrave = 556;\n    t.Tcommaaccent = 611;\n    t.Cacute = 722;\n    t.atilde = 556;\n    t.Edotaccent = 667;\n    t.scaron = 556;\n    t.scedilla = 556;\n    t.iacute = 278;\n    t.lozenge = 494;\n    t.Rcaron = 722;\n    t.Gcommaaccent = 778;\n    t.ucircumflex = 611;\n    t.acircumflex = 556;\n    t.Amacron = 722;\n    t.rcaron = 389;\n    t.ccedilla = 556;\n    t.Zdotaccent = 611;\n    t.Thorn = 667;\n    t.Omacron = 778;\n    t.Racute = 722;\n    t.Sacute = 667;\n    t.dcaron = 743;\n    t.Umacron = 722;\n    t.uring = 611;\n    t.threesuperior = 333;\n    t.Ograve = 778;\n    t.Agrave = 722;\n    t.Abreve = 722;\n    t.multiply = 584;\n    t.uacute = 611;\n    t.Tcaron = 611;\n    t.partialdiff = 494;\n    t.ydieresis = 556;\n    t.Nacute = 722;\n    t.icircumflex = 278;\n    t.Ecircumflex = 667;\n    t.adieresis = 556;\n    t.edieresis = 556;\n    t.cacute = 556;\n    t.nacute = 611;\n    t.umacron = 611;\n    t.Ncaron = 722;\n    t.Iacute = 278;\n    t.plusminus = 584;\n    t.brokenbar = 280;\n    t.registered = 737;\n    t.Gbreve = 778;\n    t.Idotaccent = 278;\n    t.summation = 600;\n    t.Egrave = 667;\n    t.racute = 389;\n    t.omacron = 611;\n    t.Zacute = 611;\n    t.Zcaron = 611;\n    t.greaterequal = 549;\n    t.Eth = 722;\n    t.Ccedilla = 722;\n    t.lcommaaccent = 278;\n    t.tcaron = 389;\n    t.eogonek = 556;\n    t.Uogonek = 722;\n    t.Aacute = 722;\n    t.Adieresis = 722;\n    t.egrave = 556;\n    t.zacute = 500;\n    t.iogonek = 278;\n    t.Oacute = 778;\n    t.oacute = 611;\n    t.amacron = 556;\n    t.sacute = 556;\n    t.idieresis = 278;\n    t.Ocircumflex = 778;\n    t.Ugrave = 722;\n    t.Delta = 612;\n    t.thorn = 611;\n    t.twosuperior = 333;\n    t.Odieresis = 778;\n    t.mu = 611;\n    t.igrave = 278;\n    t.ohungarumlaut = 611;\n    t.Eogonek = 667;\n    t.dcroat = 611;\n    t.threequarters = 834;\n    t.Scedilla = 667;\n    t.lcaron = 400;\n    t.Kcommaaccent = 722;\n    t.Lacute = 611;\n    t.trademark = 1000;\n    t.edotaccent = 556;\n    t.Igrave = 278;\n    t.Imacron = 278;\n    t.Lcaron = 611;\n    t.onehalf = 834;\n    t.lessequal = 549;\n    t.ocircumflex = 611;\n    t.ntilde = 611;\n    t.Uhungarumlaut = 722;\n    t.Eacute = 667;\n    t.emacron = 556;\n    t.gbreve = 611;\n    t.onequarter = 834;\n    t.Scaron = 667;\n    t.Scommaaccent = 667;\n    t.Ohungarumlaut = 778;\n    t.degree = 400;\n    t.ograve = 611;\n    t.Ccaron = 722;\n    t.ugrave = 611;\n    t.radical = 549;\n    t.Dcaron = 722;\n    t.rcommaaccent = 389;\n    t.Ntilde = 722;\n    t.otilde = 611;\n    t.Rcommaaccent = 722;\n    t.Lcommaaccent = 611;\n    t.Atilde = 722;\n    t.Aogonek = 722;\n    t.Aring = 722;\n    t.Otilde = 778;\n    t.zdotaccent = 500;\n    t.Ecaron = 667;\n    t.Iogonek = 278;\n    t.kcommaaccent = 556;\n    t.minus = 584;\n    t.Icircumflex = 278;\n    t.ncaron = 611;\n    t.tcommaaccent = 333;\n    t.logicalnot = 584;\n    t.odieresis = 611;\n    t.udieresis = 611;\n    t.notequal = 549;\n    t.gcommaaccent = 611;\n    t.eth = 611;\n    t.zcaron = 500;\n    t.ncommaaccent = 611;\n    t.onesuperior = 333;\n    t.imacron = 278;\n    t.Euro = 556;\n  });\n  t[\"Helvetica-Oblique\"] = getLookupTableFactory(function (t) {\n    t.space = 278;\n    t.exclam = 278;\n    t.quotedbl = 355;\n    t.numbersign = 556;\n    t.dollar = 556;\n    t.percent = 889;\n    t.ampersand = 667;\n    t.quoteright = 222;\n    t.parenleft = 333;\n    t.parenright = 333;\n    t.asterisk = 389;\n    t.plus = 584;\n    t.comma = 278;\n    t.hyphen = 333;\n    t.period = 278;\n    t.slash = 278;\n    t.zero = 556;\n    t.one = 556;\n    t.two = 556;\n    t.three = 556;\n    t.four = 556;\n    t.five = 556;\n    t.six = 556;\n    t.seven = 556;\n    t.eight = 556;\n    t.nine = 556;\n    t.colon = 278;\n    t.semicolon = 278;\n    t.less = 584;\n    t.equal = 584;\n    t.greater = 584;\n    t.question = 556;\n    t.at = 1015;\n    t.A = 667;\n    t.B = 667;\n    t.C = 722;\n    t.D = 722;\n    t.E = 667;\n    t.F = 611;\n    t.G = 778;\n    t.H = 722;\n    t.I = 278;\n    t.J = 500;\n    t.K = 667;\n    t.L = 556;\n    t.M = 833;\n    t.N = 722;\n    t.O = 778;\n    t.P = 667;\n    t.Q = 778;\n    t.R = 722;\n    t.S = 667;\n    t.T = 611;\n    t.U = 722;\n    t.V = 667;\n    t.W = 944;\n    t.X = 667;\n    t.Y = 667;\n    t.Z = 611;\n    t.bracketleft = 278;\n    t.backslash = 278;\n    t.bracketright = 278;\n    t.asciicircum = 469;\n    t.underscore = 556;\n    t.quoteleft = 222;\n    t.a = 556;\n    t.b = 556;\n    t.c = 500;\n    t.d = 556;\n    t.e = 556;\n    t.f = 278;\n    t.g = 556;\n    t.h = 556;\n    t.i = 222;\n    t.j = 222;\n    t.k = 500;\n    t.l = 222;\n    t.m = 833;\n    t.n = 556;\n    t.o = 556;\n    t.p = 556;\n    t.q = 556;\n    t.r = 333;\n    t.s = 500;\n    t.t = 278;\n    t.u = 556;\n    t.v = 500;\n    t.w = 722;\n    t.x = 500;\n    t.y = 500;\n    t.z = 500;\n    t.braceleft = 334;\n    t.bar = 260;\n    t.braceright = 334;\n    t.asciitilde = 584;\n    t.exclamdown = 333;\n    t.cent = 556;\n    t.sterling = 556;\n    t.fraction = 167;\n    t.yen = 556;\n    t.florin = 556;\n    t.section = 556;\n    t.currency = 556;\n    t.quotesingle = 191;\n    t.quotedblleft = 333;\n    t.guillemotleft = 556;\n    t.guilsinglleft = 333;\n    t.guilsinglright = 333;\n    t.fi = 500;\n    t.fl = 500;\n    t.endash = 556;\n    t.dagger = 556;\n    t.daggerdbl = 556;\n    t.periodcentered = 278;\n    t.paragraph = 537;\n    t.bullet = 350;\n    t.quotesinglbase = 222;\n    t.quotedblbase = 333;\n    t.quotedblright = 333;\n    t.guillemotright = 556;\n    t.ellipsis = 1000;\n    t.perthousand = 1000;\n    t.questiondown = 611;\n    t.grave = 333;\n    t.acute = 333;\n    t.circumflex = 333;\n    t.tilde = 333;\n    t.macron = 333;\n    t.breve = 333;\n    t.dotaccent = 333;\n    t.dieresis = 333;\n    t.ring = 333;\n    t.cedilla = 333;\n    t.hungarumlaut = 333;\n    t.ogonek = 333;\n    t.caron = 333;\n    t.emdash = 1000;\n    t.AE = 1000;\n    t.ordfeminine = 370;\n    t.Lslash = 556;\n    t.Oslash = 778;\n    t.OE = 1000;\n    t.ordmasculine = 365;\n    t.ae = 889;\n    t.dotlessi = 278;\n    t.lslash = 222;\n    t.oslash = 611;\n    t.oe = 944;\n    t.germandbls = 611;\n    t.Idieresis = 278;\n    t.eacute = 556;\n    t.abreve = 556;\n    t.uhungarumlaut = 556;\n    t.ecaron = 556;\n    t.Ydieresis = 667;\n    t.divide = 584;\n    t.Yacute = 667;\n    t.Acircumflex = 667;\n    t.aacute = 556;\n    t.Ucircumflex = 722;\n    t.yacute = 500;\n    t.scommaaccent = 500;\n    t.ecircumflex = 556;\n    t.Uring = 722;\n    t.Udieresis = 722;\n    t.aogonek = 556;\n    t.Uacute = 722;\n    t.uogonek = 556;\n    t.Edieresis = 667;\n    t.Dcroat = 722;\n    t.commaaccent = 250;\n    t.copyright = 737;\n    t.Emacron = 667;\n    t.ccaron = 500;\n    t.aring = 556;\n    t.Ncommaaccent = 722;\n    t.lacute = 222;\n    t.agrave = 556;\n    t.Tcommaaccent = 611;\n    t.Cacute = 722;\n    t.atilde = 556;\n    t.Edotaccent = 667;\n    t.scaron = 500;\n    t.scedilla = 500;\n    t.iacute = 278;\n    t.lozenge = 471;\n    t.Rcaron = 722;\n    t.Gcommaaccent = 778;\n    t.ucircumflex = 556;\n    t.acircumflex = 556;\n    t.Amacron = 667;\n    t.rcaron = 333;\n    t.ccedilla = 500;\n    t.Zdotaccent = 611;\n    t.Thorn = 667;\n    t.Omacron = 778;\n    t.Racute = 722;\n    t.Sacute = 667;\n    t.dcaron = 643;\n    t.Umacron = 722;\n    t.uring = 556;\n    t.threesuperior = 333;\n    t.Ograve = 778;\n    t.Agrave = 667;\n    t.Abreve = 667;\n    t.multiply = 584;\n    t.uacute = 556;\n    t.Tcaron = 611;\n    t.partialdiff = 476;\n    t.ydieresis = 500;\n    t.Nacute = 722;\n    t.icircumflex = 278;\n    t.Ecircumflex = 667;\n    t.adieresis = 556;\n    t.edieresis = 556;\n    t.cacute = 500;\n    t.nacute = 556;\n    t.umacron = 556;\n    t.Ncaron = 722;\n    t.Iacute = 278;\n    t.plusminus = 584;\n    t.brokenbar = 260;\n    t.registered = 737;\n    t.Gbreve = 778;\n    t.Idotaccent = 278;\n    t.summation = 600;\n    t.Egrave = 667;\n    t.racute = 333;\n    t.omacron = 556;\n    t.Zacute = 611;\n    t.Zcaron = 611;\n    t.greaterequal = 549;\n    t.Eth = 722;\n    t.Ccedilla = 722;\n    t.lcommaaccent = 222;\n    t.tcaron = 317;\n    t.eogonek = 556;\n    t.Uogonek = 722;\n    t.Aacute = 667;\n    t.Adieresis = 667;\n    t.egrave = 556;\n    t.zacute = 500;\n    t.iogonek = 222;\n    t.Oacute = 778;\n    t.oacute = 556;\n    t.amacron = 556;\n    t.sacute = 500;\n    t.idieresis = 278;\n    t.Ocircumflex = 778;\n    t.Ugrave = 722;\n    t.Delta = 612;\n    t.thorn = 556;\n    t.twosuperior = 333;\n    t.Odieresis = 778;\n    t.mu = 556;\n    t.igrave = 278;\n    t.ohungarumlaut = 556;\n    t.Eogonek = 667;\n    t.dcroat = 556;\n    t.threequarters = 834;\n    t.Scedilla = 667;\n    t.lcaron = 299;\n    t.Kcommaaccent = 667;\n    t.Lacute = 556;\n    t.trademark = 1000;\n    t.edotaccent = 556;\n    t.Igrave = 278;\n    t.Imacron = 278;\n    t.Lcaron = 556;\n    t.onehalf = 834;\n    t.lessequal = 549;\n    t.ocircumflex = 556;\n    t.ntilde = 556;\n    t.Uhungarumlaut = 722;\n    t.Eacute = 667;\n    t.emacron = 556;\n    t.gbreve = 556;\n    t.onequarter = 834;\n    t.Scaron = 667;\n    t.Scommaaccent = 667;\n    t.Ohungarumlaut = 778;\n    t.degree = 400;\n    t.ograve = 556;\n    t.Ccaron = 722;\n    t.ugrave = 556;\n    t.radical = 453;\n    t.Dcaron = 722;\n    t.rcommaaccent = 333;\n    t.Ntilde = 722;\n    t.otilde = 556;\n    t.Rcommaaccent = 722;\n    t.Lcommaaccent = 556;\n    t.Atilde = 667;\n    t.Aogonek = 667;\n    t.Aring = 667;\n    t.Otilde = 778;\n    t.zdotaccent = 500;\n    t.Ecaron = 667;\n    t.Iogonek = 278;\n    t.kcommaaccent = 500;\n    t.minus = 584;\n    t.Icircumflex = 278;\n    t.ncaron = 556;\n    t.tcommaaccent = 278;\n    t.logicalnot = 584;\n    t.odieresis = 556;\n    t.udieresis = 556;\n    t.notequal = 549;\n    t.gcommaaccent = 556;\n    t.eth = 556;\n    t.zcaron = 500;\n    t.ncommaaccent = 556;\n    t.onesuperior = 333;\n    t.imacron = 278;\n    t.Euro = 556;\n  });\n  t.Symbol = getLookupTableFactory(function (t) {\n    t.space = 250;\n    t.exclam = 333;\n    t.universal = 713;\n    t.numbersign = 500;\n    t.existential = 549;\n    t.percent = 833;\n    t.ampersand = 778;\n    t.suchthat = 439;\n    t.parenleft = 333;\n    t.parenright = 333;\n    t.asteriskmath = 500;\n    t.plus = 549;\n    t.comma = 250;\n    t.minus = 549;\n    t.period = 250;\n    t.slash = 278;\n    t.zero = 500;\n    t.one = 500;\n    t.two = 500;\n    t.three = 500;\n    t.four = 500;\n    t.five = 500;\n    t.six = 500;\n    t.seven = 500;\n    t.eight = 500;\n    t.nine = 500;\n    t.colon = 278;\n    t.semicolon = 278;\n    t.less = 549;\n    t.equal = 549;\n    t.greater = 549;\n    t.question = 444;\n    t.congruent = 549;\n    t.Alpha = 722;\n    t.Beta = 667;\n    t.Chi = 722;\n    t.Delta = 612;\n    t.Epsilon = 611;\n    t.Phi = 763;\n    t.Gamma = 603;\n    t.Eta = 722;\n    t.Iota = 333;\n    t.theta1 = 631;\n    t.Kappa = 722;\n    t.Lambda = 686;\n    t.Mu = 889;\n    t.Nu = 722;\n    t.Omicron = 722;\n    t.Pi = 768;\n    t.Theta = 741;\n    t.Rho = 556;\n    t.Sigma = 592;\n    t.Tau = 611;\n    t.Upsilon = 690;\n    t.sigma1 = 439;\n    t.Omega = 768;\n    t.Xi = 645;\n    t.Psi = 795;\n    t.Zeta = 611;\n    t.bracketleft = 333;\n    t.therefore = 863;\n    t.bracketright = 333;\n    t.perpendicular = 658;\n    t.underscore = 500;\n    t.radicalex = 500;\n    t.alpha = 631;\n    t.beta = 549;\n    t.chi = 549;\n    t.delta = 494;\n    t.epsilon = 439;\n    t.phi = 521;\n    t.gamma = 411;\n    t.eta = 603;\n    t.iota = 329;\n    t.phi1 = 603;\n    t.kappa = 549;\n    t.lambda = 549;\n    t.mu = 576;\n    t.nu = 521;\n    t.omicron = 549;\n    t.pi = 549;\n    t.theta = 521;\n    t.rho = 549;\n    t.sigma = 603;\n    t.tau = 439;\n    t.upsilon = 576;\n    t.omega1 = 713;\n    t.omega = 686;\n    t.xi = 493;\n    t.psi = 686;\n    t.zeta = 494;\n    t.braceleft = 480;\n    t.bar = 200;\n    t.braceright = 480;\n    t.similar = 549;\n    t.Euro = 750;\n    t.Upsilon1 = 620;\n    t.minute = 247;\n    t.lessequal = 549;\n    t.fraction = 167;\n    t.infinity = 713;\n    t.florin = 500;\n    t.club = 753;\n    t.diamond = 753;\n    t.heart = 753;\n    t.spade = 753;\n    t.arrowboth = 1042;\n    t.arrowleft = 987;\n    t.arrowup = 603;\n    t.arrowright = 987;\n    t.arrowdown = 603;\n    t.degree = 400;\n    t.plusminus = 549;\n    t.second = 411;\n    t.greaterequal = 549;\n    t.multiply = 549;\n    t.proportional = 713;\n    t.partialdiff = 494;\n    t.bullet = 460;\n    t.divide = 549;\n    t.notequal = 549;\n    t.equivalence = 549;\n    t.approxequal = 549;\n    t.ellipsis = 1000;\n    t.arrowvertex = 603;\n    t.arrowhorizex = 1000;\n    t.carriagereturn = 658;\n    t.aleph = 823;\n    t.Ifraktur = 686;\n    t.Rfraktur = 795;\n    t.weierstrass = 987;\n    t.circlemultiply = 768;\n    t.circleplus = 768;\n    t.emptyset = 823;\n    t.intersection = 768;\n    t.union = 768;\n    t.propersuperset = 713;\n    t.reflexsuperset = 713;\n    t.notsubset = 713;\n    t.propersubset = 713;\n    t.reflexsubset = 713;\n    t.element = 713;\n    t.notelement = 713;\n    t.angle = 768;\n    t.gradient = 713;\n    t.registerserif = 790;\n    t.copyrightserif = 790;\n    t.trademarkserif = 890;\n    t.product = 823;\n    t.radical = 549;\n    t.dotmath = 250;\n    t.logicalnot = 713;\n    t.logicaland = 603;\n    t.logicalor = 603;\n    t.arrowdblboth = 1042;\n    t.arrowdblleft = 987;\n    t.arrowdblup = 603;\n    t.arrowdblright = 987;\n    t.arrowdbldown = 603;\n    t.lozenge = 494;\n    t.angleleft = 329;\n    t.registersans = 790;\n    t.copyrightsans = 790;\n    t.trademarksans = 786;\n    t.summation = 713;\n    t.parenlefttp = 384;\n    t.parenleftex = 384;\n    t.parenleftbt = 384;\n    t.bracketlefttp = 384;\n    t.bracketleftex = 384;\n    t.bracketleftbt = 384;\n    t.bracelefttp = 494;\n    t.braceleftmid = 494;\n    t.braceleftbt = 494;\n    t.braceex = 494;\n    t.angleright = 329;\n    t.integral = 274;\n    t.integraltp = 686;\n    t.integralex = 686;\n    t.integralbt = 686;\n    t.parenrighttp = 384;\n    t.parenrightex = 384;\n    t.parenrightbt = 384;\n    t.bracketrighttp = 384;\n    t.bracketrightex = 384;\n    t.bracketrightbt = 384;\n    t.bracerighttp = 494;\n    t.bracerightmid = 494;\n    t.bracerightbt = 494;\n    t.apple = 790;\n  });\n  t[\"Times-Roman\"] = getLookupTableFactory(function (t) {\n    t.space = 250;\n    t.exclam = 333;\n    t.quotedbl = 408;\n    t.numbersign = 500;\n    t.dollar = 500;\n    t.percent = 833;\n    t.ampersand = 778;\n    t.quoteright = 333;\n    t.parenleft = 333;\n    t.parenright = 333;\n    t.asterisk = 500;\n    t.plus = 564;\n    t.comma = 250;\n    t.hyphen = 333;\n    t.period = 250;\n    t.slash = 278;\n    t.zero = 500;\n    t.one = 500;\n    t.two = 500;\n    t.three = 500;\n    t.four = 500;\n    t.five = 500;\n    t.six = 500;\n    t.seven = 500;\n    t.eight = 500;\n    t.nine = 500;\n    t.colon = 278;\n    t.semicolon = 278;\n    t.less = 564;\n    t.equal = 564;\n    t.greater = 564;\n    t.question = 444;\n    t.at = 921;\n    t.A = 722;\n    t.B = 667;\n    t.C = 667;\n    t.D = 722;\n    t.E = 611;\n    t.F = 556;\n    t.G = 722;\n    t.H = 722;\n    t.I = 333;\n    t.J = 389;\n    t.K = 722;\n    t.L = 611;\n    t.M = 889;\n    t.N = 722;\n    t.O = 722;\n    t.P = 556;\n    t.Q = 722;\n    t.R = 667;\n    t.S = 556;\n    t.T = 611;\n    t.U = 722;\n    t.V = 722;\n    t.W = 944;\n    t.X = 722;\n    t.Y = 722;\n    t.Z = 611;\n    t.bracketleft = 333;\n    t.backslash = 278;\n    t.bracketright = 333;\n    t.asciicircum = 469;\n    t.underscore = 500;\n    t.quoteleft = 333;\n    t.a = 444;\n    t.b = 500;\n    t.c = 444;\n    t.d = 500;\n    t.e = 444;\n    t.f = 333;\n    t.g = 500;\n    t.h = 500;\n    t.i = 278;\n    t.j = 278;\n    t.k = 500;\n    t.l = 278;\n    t.m = 778;\n    t.n = 500;\n    t.o = 500;\n    t.p = 500;\n    t.q = 500;\n    t.r = 333;\n    t.s = 389;\n    t.t = 278;\n    t.u = 500;\n    t.v = 500;\n    t.w = 722;\n    t.x = 500;\n    t.y = 500;\n    t.z = 444;\n    t.braceleft = 480;\n    t.bar = 200;\n    t.braceright = 480;\n    t.asciitilde = 541;\n    t.exclamdown = 333;\n    t.cent = 500;\n    t.sterling = 500;\n    t.fraction = 167;\n    t.yen = 500;\n    t.florin = 500;\n    t.section = 500;\n    t.currency = 500;\n    t.quotesingle = 180;\n    t.quotedblleft = 444;\n    t.guillemotleft = 500;\n    t.guilsinglleft = 333;\n    t.guilsinglright = 333;\n    t.fi = 556;\n    t.fl = 556;\n    t.endash = 500;\n    t.dagger = 500;\n    t.daggerdbl = 500;\n    t.periodcentered = 250;\n    t.paragraph = 453;\n    t.bullet = 350;\n    t.quotesinglbase = 333;\n    t.quotedblbase = 444;\n    t.quotedblright = 444;\n    t.guillemotright = 500;\n    t.ellipsis = 1000;\n    t.perthousand = 1000;\n    t.questiondown = 444;\n    t.grave = 333;\n    t.acute = 333;\n    t.circumflex = 333;\n    t.tilde = 333;\n    t.macron = 333;\n    t.breve = 333;\n    t.dotaccent = 333;\n    t.dieresis = 333;\n    t.ring = 333;\n    t.cedilla = 333;\n    t.hungarumlaut = 333;\n    t.ogonek = 333;\n    t.caron = 333;\n    t.emdash = 1000;\n    t.AE = 889;\n    t.ordfeminine = 276;\n    t.Lslash = 611;\n    t.Oslash = 722;\n    t.OE = 889;\n    t.ordmasculine = 310;\n    t.ae = 667;\n    t.dotlessi = 278;\n    t.lslash = 278;\n    t.oslash = 500;\n    t.oe = 722;\n    t.germandbls = 500;\n    t.Idieresis = 333;\n    t.eacute = 444;\n    t.abreve = 444;\n    t.uhungarumlaut = 500;\n    t.ecaron = 444;\n    t.Ydieresis = 722;\n    t.divide = 564;\n    t.Yacute = 722;\n    t.Acircumflex = 722;\n    t.aacute = 444;\n    t.Ucircumflex = 722;\n    t.yacute = 500;\n    t.scommaaccent = 389;\n    t.ecircumflex = 444;\n    t.Uring = 722;\n    t.Udieresis = 722;\n    t.aogonek = 444;\n    t.Uacute = 722;\n    t.uogonek = 500;\n    t.Edieresis = 611;\n    t.Dcroat = 722;\n    t.commaaccent = 250;\n    t.copyright = 760;\n    t.Emacron = 611;\n    t.ccaron = 444;\n    t.aring = 444;\n    t.Ncommaaccent = 722;\n    t.lacute = 278;\n    t.agrave = 444;\n    t.Tcommaaccent = 611;\n    t.Cacute = 667;\n    t.atilde = 444;\n    t.Edotaccent = 611;\n    t.scaron = 389;\n    t.scedilla = 389;\n    t.iacute = 278;\n    t.lozenge = 471;\n    t.Rcaron = 667;\n    t.Gcommaaccent = 722;\n    t.ucircumflex = 500;\n    t.acircumflex = 444;\n    t.Amacron = 722;\n    t.rcaron = 333;\n    t.ccedilla = 444;\n    t.Zdotaccent = 611;\n    t.Thorn = 556;\n    t.Omacron = 722;\n    t.Racute = 667;\n    t.Sacute = 556;\n    t.dcaron = 588;\n    t.Umacron = 722;\n    t.uring = 500;\n    t.threesuperior = 300;\n    t.Ograve = 722;\n    t.Agrave = 722;\n    t.Abreve = 722;\n    t.multiply = 564;\n    t.uacute = 500;\n    t.Tcaron = 611;\n    t.partialdiff = 476;\n    t.ydieresis = 500;\n    t.Nacute = 722;\n    t.icircumflex = 278;\n    t.Ecircumflex = 611;\n    t.adieresis = 444;\n    t.edieresis = 444;\n    t.cacute = 444;\n    t.nacute = 500;\n    t.umacron = 500;\n    t.Ncaron = 722;\n    t.Iacute = 333;\n    t.plusminus = 564;\n    t.brokenbar = 200;\n    t.registered = 760;\n    t.Gbreve = 722;\n    t.Idotaccent = 333;\n    t.summation = 600;\n    t.Egrave = 611;\n    t.racute = 333;\n    t.omacron = 500;\n    t.Zacute = 611;\n    t.Zcaron = 611;\n    t.greaterequal = 549;\n    t.Eth = 722;\n    t.Ccedilla = 667;\n    t.lcommaaccent = 278;\n    t.tcaron = 326;\n    t.eogonek = 444;\n    t.Uogonek = 722;\n    t.Aacute = 722;\n    t.Adieresis = 722;\n    t.egrave = 444;\n    t.zacute = 444;\n    t.iogonek = 278;\n    t.Oacute = 722;\n    t.oacute = 500;\n    t.amacron = 444;\n    t.sacute = 389;\n    t.idieresis = 278;\n    t.Ocircumflex = 722;\n    t.Ugrave = 722;\n    t.Delta = 612;\n    t.thorn = 500;\n    t.twosuperior = 300;\n    t.Odieresis = 722;\n    t.mu = 500;\n    t.igrave = 278;\n    t.ohungarumlaut = 500;\n    t.Eogonek = 611;\n    t.dcroat = 500;\n    t.threequarters = 750;\n    t.Scedilla = 556;\n    t.lcaron = 344;\n    t.Kcommaaccent = 722;\n    t.Lacute = 611;\n    t.trademark = 980;\n    t.edotaccent = 444;\n    t.Igrave = 333;\n    t.Imacron = 333;\n    t.Lcaron = 611;\n    t.onehalf = 750;\n    t.lessequal = 549;\n    t.ocircumflex = 500;\n    t.ntilde = 500;\n    t.Uhungarumlaut = 722;\n    t.Eacute = 611;\n    t.emacron = 444;\n    t.gbreve = 500;\n    t.onequarter = 750;\n    t.Scaron = 556;\n    t.Scommaaccent = 556;\n    t.Ohungarumlaut = 722;\n    t.degree = 400;\n    t.ograve = 500;\n    t.Ccaron = 667;\n    t.ugrave = 500;\n    t.radical = 453;\n    t.Dcaron = 722;\n    t.rcommaaccent = 333;\n    t.Ntilde = 722;\n    t.otilde = 500;\n    t.Rcommaaccent = 667;\n    t.Lcommaaccent = 611;\n    t.Atilde = 722;\n    t.Aogonek = 722;\n    t.Aring = 722;\n    t.Otilde = 722;\n    t.zdotaccent = 444;\n    t.Ecaron = 611;\n    t.Iogonek = 333;\n    t.kcommaaccent = 500;\n    t.minus = 564;\n    t.Icircumflex = 333;\n    t.ncaron = 500;\n    t.tcommaaccent = 278;\n    t.logicalnot = 564;\n    t.odieresis = 500;\n    t.udieresis = 500;\n    t.notequal = 549;\n    t.gcommaaccent = 500;\n    t.eth = 500;\n    t.zcaron = 444;\n    t.ncommaaccent = 500;\n    t.onesuperior = 300;\n    t.imacron = 278;\n    t.Euro = 500;\n  });\n  t[\"Times-Bold\"] = getLookupTableFactory(function (t) {\n    t.space = 250;\n    t.exclam = 333;\n    t.quotedbl = 555;\n    t.numbersign = 500;\n    t.dollar = 500;\n    t.percent = 1000;\n    t.ampersand = 833;\n    t.quoteright = 333;\n    t.parenleft = 333;\n    t.parenright = 333;\n    t.asterisk = 500;\n    t.plus = 570;\n    t.comma = 250;\n    t.hyphen = 333;\n    t.period = 250;\n    t.slash = 278;\n    t.zero = 500;\n    t.one = 500;\n    t.two = 500;\n    t.three = 500;\n    t.four = 500;\n    t.five = 500;\n    t.six = 500;\n    t.seven = 500;\n    t.eight = 500;\n    t.nine = 500;\n    t.colon = 333;\n    t.semicolon = 333;\n    t.less = 570;\n    t.equal = 570;\n    t.greater = 570;\n    t.question = 500;\n    t.at = 930;\n    t.A = 722;\n    t.B = 667;\n    t.C = 722;\n    t.D = 722;\n    t.E = 667;\n    t.F = 611;\n    t.G = 778;\n    t.H = 778;\n    t.I = 389;\n    t.J = 500;\n    t.K = 778;\n    t.L = 667;\n    t.M = 944;\n    t.N = 722;\n    t.O = 778;\n    t.P = 611;\n    t.Q = 778;\n    t.R = 722;\n    t.S = 556;\n    t.T = 667;\n    t.U = 722;\n    t.V = 722;\n    t.W = 1000;\n    t.X = 722;\n    t.Y = 722;\n    t.Z = 667;\n    t.bracketleft = 333;\n    t.backslash = 278;\n    t.bracketright = 333;\n    t.asciicircum = 581;\n    t.underscore = 500;\n    t.quoteleft = 333;\n    t.a = 500;\n    t.b = 556;\n    t.c = 444;\n    t.d = 556;\n    t.e = 444;\n    t.f = 333;\n    t.g = 500;\n    t.h = 556;\n    t.i = 278;\n    t.j = 333;\n    t.k = 556;\n    t.l = 278;\n    t.m = 833;\n    t.n = 556;\n    t.o = 500;\n    t.p = 556;\n    t.q = 556;\n    t.r = 444;\n    t.s = 389;\n    t.t = 333;\n    t.u = 556;\n    t.v = 500;\n    t.w = 722;\n    t.x = 500;\n    t.y = 500;\n    t.z = 444;\n    t.braceleft = 394;\n    t.bar = 220;\n    t.braceright = 394;\n    t.asciitilde = 520;\n    t.exclamdown = 333;\n    t.cent = 500;\n    t.sterling = 500;\n    t.fraction = 167;\n    t.yen = 500;\n    t.florin = 500;\n    t.section = 500;\n    t.currency = 500;\n    t.quotesingle = 278;\n    t.quotedblleft = 500;\n    t.guillemotleft = 500;\n    t.guilsinglleft = 333;\n    t.guilsinglright = 333;\n    t.fi = 556;\n    t.fl = 556;\n    t.endash = 500;\n    t.dagger = 500;\n    t.daggerdbl = 500;\n    t.periodcentered = 250;\n    t.paragraph = 540;\n    t.bullet = 350;\n    t.quotesinglbase = 333;\n    t.quotedblbase = 500;\n    t.quotedblright = 500;\n    t.guillemotright = 500;\n    t.ellipsis = 1000;\n    t.perthousand = 1000;\n    t.questiondown = 500;\n    t.grave = 333;\n    t.acute = 333;\n    t.circumflex = 333;\n    t.tilde = 333;\n    t.macron = 333;\n    t.breve = 333;\n    t.dotaccent = 333;\n    t.dieresis = 333;\n    t.ring = 333;\n    t.cedilla = 333;\n    t.hungarumlaut = 333;\n    t.ogonek = 333;\n    t.caron = 333;\n    t.emdash = 1000;\n    t.AE = 1000;\n    t.ordfeminine = 300;\n    t.Lslash = 667;\n    t.Oslash = 778;\n    t.OE = 1000;\n    t.ordmasculine = 330;\n    t.ae = 722;\n    t.dotlessi = 278;\n    t.lslash = 278;\n    t.oslash = 500;\n    t.oe = 722;\n    t.germandbls = 556;\n    t.Idieresis = 389;\n    t.eacute = 444;\n    t.abreve = 500;\n    t.uhungarumlaut = 556;\n    t.ecaron = 444;\n    t.Ydieresis = 722;\n    t.divide = 570;\n    t.Yacute = 722;\n    t.Acircumflex = 722;\n    t.aacute = 500;\n    t.Ucircumflex = 722;\n    t.yacute = 500;\n    t.scommaaccent = 389;\n    t.ecircumflex = 444;\n    t.Uring = 722;\n    t.Udieresis = 722;\n    t.aogonek = 500;\n    t.Uacute = 722;\n    t.uogonek = 556;\n    t.Edieresis = 667;\n    t.Dcroat = 722;\n    t.commaaccent = 250;\n    t.copyright = 747;\n    t.Emacron = 667;\n    t.ccaron = 444;\n    t.aring = 500;\n    t.Ncommaaccent = 722;\n    t.lacute = 278;\n    t.agrave = 500;\n    t.Tcommaaccent = 667;\n    t.Cacute = 722;\n    t.atilde = 500;\n    t.Edotaccent = 667;\n    t.scaron = 389;\n    t.scedilla = 389;\n    t.iacute = 278;\n    t.lozenge = 494;\n    t.Rcaron = 722;\n    t.Gcommaaccent = 778;\n    t.ucircumflex = 556;\n    t.acircumflex = 500;\n    t.Amacron = 722;\n    t.rcaron = 444;\n    t.ccedilla = 444;\n    t.Zdotaccent = 667;\n    t.Thorn = 611;\n    t.Omacron = 778;\n    t.Racute = 722;\n    t.Sacute = 556;\n    t.dcaron = 672;\n    t.Umacron = 722;\n    t.uring = 556;\n    t.threesuperior = 300;\n    t.Ograve = 778;\n    t.Agrave = 722;\n    t.Abreve = 722;\n    t.multiply = 570;\n    t.uacute = 556;\n    t.Tcaron = 667;\n    t.partialdiff = 494;\n    t.ydieresis = 500;\n    t.Nacute = 722;\n    t.icircumflex = 278;\n    t.Ecircumflex = 667;\n    t.adieresis = 500;\n    t.edieresis = 444;\n    t.cacute = 444;\n    t.nacute = 556;\n    t.umacron = 556;\n    t.Ncaron = 722;\n    t.Iacute = 389;\n    t.plusminus = 570;\n    t.brokenbar = 220;\n    t.registered = 747;\n    t.Gbreve = 778;\n    t.Idotaccent = 389;\n    t.summation = 600;\n    t.Egrave = 667;\n    t.racute = 444;\n    t.omacron = 500;\n    t.Zacute = 667;\n    t.Zcaron = 667;\n    t.greaterequal = 549;\n    t.Eth = 722;\n    t.Ccedilla = 722;\n    t.lcommaaccent = 278;\n    t.tcaron = 416;\n    t.eogonek = 444;\n    t.Uogonek = 722;\n    t.Aacute = 722;\n    t.Adieresis = 722;\n    t.egrave = 444;\n    t.zacute = 444;\n    t.iogonek = 278;\n    t.Oacute = 778;\n    t.oacute = 500;\n    t.amacron = 500;\n    t.sacute = 389;\n    t.idieresis = 278;\n    t.Ocircumflex = 778;\n    t.Ugrave = 722;\n    t.Delta = 612;\n    t.thorn = 556;\n    t.twosuperior = 300;\n    t.Odieresis = 778;\n    t.mu = 556;\n    t.igrave = 278;\n    t.ohungarumlaut = 500;\n    t.Eogonek = 667;\n    t.dcroat = 556;\n    t.threequarters = 750;\n    t.Scedilla = 556;\n    t.lcaron = 394;\n    t.Kcommaaccent = 778;\n    t.Lacute = 667;\n    t.trademark = 1000;\n    t.edotaccent = 444;\n    t.Igrave = 389;\n    t.Imacron = 389;\n    t.Lcaron = 667;\n    t.onehalf = 750;\n    t.lessequal = 549;\n    t.ocircumflex = 500;\n    t.ntilde = 556;\n    t.Uhungarumlaut = 722;\n    t.Eacute = 667;\n    t.emacron = 444;\n    t.gbreve = 500;\n    t.onequarter = 750;\n    t.Scaron = 556;\n    t.Scommaaccent = 556;\n    t.Ohungarumlaut = 778;\n    t.degree = 400;\n    t.ograve = 500;\n    t.Ccaron = 722;\n    t.ugrave = 556;\n    t.radical = 549;\n    t.Dcaron = 722;\n    t.rcommaaccent = 444;\n    t.Ntilde = 722;\n    t.otilde = 500;\n    t.Rcommaaccent = 722;\n    t.Lcommaaccent = 667;\n    t.Atilde = 722;\n    t.Aogonek = 722;\n    t.Aring = 722;\n    t.Otilde = 778;\n    t.zdotaccent = 444;\n    t.Ecaron = 667;\n    t.Iogonek = 389;\n    t.kcommaaccent = 556;\n    t.minus = 570;\n    t.Icircumflex = 389;\n    t.ncaron = 556;\n    t.tcommaaccent = 333;\n    t.logicalnot = 570;\n    t.odieresis = 500;\n    t.udieresis = 556;\n    t.notequal = 549;\n    t.gcommaaccent = 500;\n    t.eth = 500;\n    t.zcaron = 444;\n    t.ncommaaccent = 556;\n    t.onesuperior = 300;\n    t.imacron = 278;\n    t.Euro = 500;\n  });\n  t[\"Times-BoldItalic\"] = getLookupTableFactory(function (t) {\n    t.space = 250;\n    t.exclam = 389;\n    t.quotedbl = 555;\n    t.numbersign = 500;\n    t.dollar = 500;\n    t.percent = 833;\n    t.ampersand = 778;\n    t.quoteright = 333;\n    t.parenleft = 333;\n    t.parenright = 333;\n    t.asterisk = 500;\n    t.plus = 570;\n    t.comma = 250;\n    t.hyphen = 333;\n    t.period = 250;\n    t.slash = 278;\n    t.zero = 500;\n    t.one = 500;\n    t.two = 500;\n    t.three = 500;\n    t.four = 500;\n    t.five = 500;\n    t.six = 500;\n    t.seven = 500;\n    t.eight = 500;\n    t.nine = 500;\n    t.colon = 333;\n    t.semicolon = 333;\n    t.less = 570;\n    t.equal = 570;\n    t.greater = 570;\n    t.question = 500;\n    t.at = 832;\n    t.A = 667;\n    t.B = 667;\n    t.C = 667;\n    t.D = 722;\n    t.E = 667;\n    t.F = 667;\n    t.G = 722;\n    t.H = 778;\n    t.I = 389;\n    t.J = 500;\n    t.K = 667;\n    t.L = 611;\n    t.M = 889;\n    t.N = 722;\n    t.O = 722;\n    t.P = 611;\n    t.Q = 722;\n    t.R = 667;\n    t.S = 556;\n    t.T = 611;\n    t.U = 722;\n    t.V = 667;\n    t.W = 889;\n    t.X = 667;\n    t.Y = 611;\n    t.Z = 611;\n    t.bracketleft = 333;\n    t.backslash = 278;\n    t.bracketright = 333;\n    t.asciicircum = 570;\n    t.underscore = 500;\n    t.quoteleft = 333;\n    t.a = 500;\n    t.b = 500;\n    t.c = 444;\n    t.d = 500;\n    t.e = 444;\n    t.f = 333;\n    t.g = 500;\n    t.h = 556;\n    t.i = 278;\n    t.j = 278;\n    t.k = 500;\n    t.l = 278;\n    t.m = 778;\n    t.n = 556;\n    t.o = 500;\n    t.p = 500;\n    t.q = 500;\n    t.r = 389;\n    t.s = 389;\n    t.t = 278;\n    t.u = 556;\n    t.v = 444;\n    t.w = 667;\n    t.x = 500;\n    t.y = 444;\n    t.z = 389;\n    t.braceleft = 348;\n    t.bar = 220;\n    t.braceright = 348;\n    t.asciitilde = 570;\n    t.exclamdown = 389;\n    t.cent = 500;\n    t.sterling = 500;\n    t.fraction = 167;\n    t.yen = 500;\n    t.florin = 500;\n    t.section = 500;\n    t.currency = 500;\n    t.quotesingle = 278;\n    t.quotedblleft = 500;\n    t.guillemotleft = 500;\n    t.guilsinglleft = 333;\n    t.guilsinglright = 333;\n    t.fi = 556;\n    t.fl = 556;\n    t.endash = 500;\n    t.dagger = 500;\n    t.daggerdbl = 500;\n    t.periodcentered = 250;\n    t.paragraph = 500;\n    t.bullet = 350;\n    t.quotesinglbase = 333;\n    t.quotedblbase = 500;\n    t.quotedblright = 500;\n    t.guillemotright = 500;\n    t.ellipsis = 1000;\n    t.perthousand = 1000;\n    t.questiondown = 500;\n    t.grave = 333;\n    t.acute = 333;\n    t.circumflex = 333;\n    t.tilde = 333;\n    t.macron = 333;\n    t.breve = 333;\n    t.dotaccent = 333;\n    t.dieresis = 333;\n    t.ring = 333;\n    t.cedilla = 333;\n    t.hungarumlaut = 333;\n    t.ogonek = 333;\n    t.caron = 333;\n    t.emdash = 1000;\n    t.AE = 944;\n    t.ordfeminine = 266;\n    t.Lslash = 611;\n    t.Oslash = 722;\n    t.OE = 944;\n    t.ordmasculine = 300;\n    t.ae = 722;\n    t.dotlessi = 278;\n    t.lslash = 278;\n    t.oslash = 500;\n    t.oe = 722;\n    t.germandbls = 500;\n    t.Idieresis = 389;\n    t.eacute = 444;\n    t.abreve = 500;\n    t.uhungarumlaut = 556;\n    t.ecaron = 444;\n    t.Ydieresis = 611;\n    t.divide = 570;\n    t.Yacute = 611;\n    t.Acircumflex = 667;\n    t.aacute = 500;\n    t.Ucircumflex = 722;\n    t.yacute = 444;\n    t.scommaaccent = 389;\n    t.ecircumflex = 444;\n    t.Uring = 722;\n    t.Udieresis = 722;\n    t.aogonek = 500;\n    t.Uacute = 722;\n    t.uogonek = 556;\n    t.Edieresis = 667;\n    t.Dcroat = 722;\n    t.commaaccent = 250;\n    t.copyright = 747;\n    t.Emacron = 667;\n    t.ccaron = 444;\n    t.aring = 500;\n    t.Ncommaaccent = 722;\n    t.lacute = 278;\n    t.agrave = 500;\n    t.Tcommaaccent = 611;\n    t.Cacute = 667;\n    t.atilde = 500;\n    t.Edotaccent = 667;\n    t.scaron = 389;\n    t.scedilla = 389;\n    t.iacute = 278;\n    t.lozenge = 494;\n    t.Rcaron = 667;\n    t.Gcommaaccent = 722;\n    t.ucircumflex = 556;\n    t.acircumflex = 500;\n    t.Amacron = 667;\n    t.rcaron = 389;\n    t.ccedilla = 444;\n    t.Zdotaccent = 611;\n    t.Thorn = 611;\n    t.Omacron = 722;\n    t.Racute = 667;\n    t.Sacute = 556;\n    t.dcaron = 608;\n    t.Umacron = 722;\n    t.uring = 556;\n    t.threesuperior = 300;\n    t.Ograve = 722;\n    t.Agrave = 667;\n    t.Abreve = 667;\n    t.multiply = 570;\n    t.uacute = 556;\n    t.Tcaron = 611;\n    t.partialdiff = 494;\n    t.ydieresis = 444;\n    t.Nacute = 722;\n    t.icircumflex = 278;\n    t.Ecircumflex = 667;\n    t.adieresis = 500;\n    t.edieresis = 444;\n    t.cacute = 444;\n    t.nacute = 556;\n    t.umacron = 556;\n    t.Ncaron = 722;\n    t.Iacute = 389;\n    t.plusminus = 570;\n    t.brokenbar = 220;\n    t.registered = 747;\n    t.Gbreve = 722;\n    t.Idotaccent = 389;\n    t.summation = 600;\n    t.Egrave = 667;\n    t.racute = 389;\n    t.omacron = 500;\n    t.Zacute = 611;\n    t.Zcaron = 611;\n    t.greaterequal = 549;\n    t.Eth = 722;\n    t.Ccedilla = 667;\n    t.lcommaaccent = 278;\n    t.tcaron = 366;\n    t.eogonek = 444;\n    t.Uogonek = 722;\n    t.Aacute = 667;\n    t.Adieresis = 667;\n    t.egrave = 444;\n    t.zacute = 389;\n    t.iogonek = 278;\n    t.Oacute = 722;\n    t.oacute = 500;\n    t.amacron = 500;\n    t.sacute = 389;\n    t.idieresis = 278;\n    t.Ocircumflex = 722;\n    t.Ugrave = 722;\n    t.Delta = 612;\n    t.thorn = 500;\n    t.twosuperior = 300;\n    t.Odieresis = 722;\n    t.mu = 576;\n    t.igrave = 278;\n    t.ohungarumlaut = 500;\n    t.Eogonek = 667;\n    t.dcroat = 500;\n    t.threequarters = 750;\n    t.Scedilla = 556;\n    t.lcaron = 382;\n    t.Kcommaaccent = 667;\n    t.Lacute = 611;\n    t.trademark = 1000;\n    t.edotaccent = 444;\n    t.Igrave = 389;\n    t.Imacron = 389;\n    t.Lcaron = 611;\n    t.onehalf = 750;\n    t.lessequal = 549;\n    t.ocircumflex = 500;\n    t.ntilde = 556;\n    t.Uhungarumlaut = 722;\n    t.Eacute = 667;\n    t.emacron = 444;\n    t.gbreve = 500;\n    t.onequarter = 750;\n    t.Scaron = 556;\n    t.Scommaaccent = 556;\n    t.Ohungarumlaut = 722;\n    t.degree = 400;\n    t.ograve = 500;\n    t.Ccaron = 667;\n    t.ugrave = 556;\n    t.radical = 549;\n    t.Dcaron = 722;\n    t.rcommaaccent = 389;\n    t.Ntilde = 722;\n    t.otilde = 500;\n    t.Rcommaaccent = 667;\n    t.Lcommaaccent = 611;\n    t.Atilde = 667;\n    t.Aogonek = 667;\n    t.Aring = 667;\n    t.Otilde = 722;\n    t.zdotaccent = 389;\n    t.Ecaron = 667;\n    t.Iogonek = 389;\n    t.kcommaaccent = 500;\n    t.minus = 606;\n    t.Icircumflex = 389;\n    t.ncaron = 556;\n    t.tcommaaccent = 278;\n    t.logicalnot = 606;\n    t.odieresis = 500;\n    t.udieresis = 556;\n    t.notequal = 549;\n    t.gcommaaccent = 500;\n    t.eth = 500;\n    t.zcaron = 389;\n    t.ncommaaccent = 556;\n    t.onesuperior = 300;\n    t.imacron = 278;\n    t.Euro = 500;\n  });\n  t[\"Times-Italic\"] = getLookupTableFactory(function (t) {\n    t.space = 250;\n    t.exclam = 333;\n    t.quotedbl = 420;\n    t.numbersign = 500;\n    t.dollar = 500;\n    t.percent = 833;\n    t.ampersand = 778;\n    t.quoteright = 333;\n    t.parenleft = 333;\n    t.parenright = 333;\n    t.asterisk = 500;\n    t.plus = 675;\n    t.comma = 250;\n    t.hyphen = 333;\n    t.period = 250;\n    t.slash = 278;\n    t.zero = 500;\n    t.one = 500;\n    t.two = 500;\n    t.three = 500;\n    t.four = 500;\n    t.five = 500;\n    t.six = 500;\n    t.seven = 500;\n    t.eight = 500;\n    t.nine = 500;\n    t.colon = 333;\n    t.semicolon = 333;\n    t.less = 675;\n    t.equal = 675;\n    t.greater = 675;\n    t.question = 500;\n    t.at = 920;\n    t.A = 611;\n    t.B = 611;\n    t.C = 667;\n    t.D = 722;\n    t.E = 611;\n    t.F = 611;\n    t.G = 722;\n    t.H = 722;\n    t.I = 333;\n    t.J = 444;\n    t.K = 667;\n    t.L = 556;\n    t.M = 833;\n    t.N = 667;\n    t.O = 722;\n    t.P = 611;\n    t.Q = 722;\n    t.R = 611;\n    t.S = 500;\n    t.T = 556;\n    t.U = 722;\n    t.V = 611;\n    t.W = 833;\n    t.X = 611;\n    t.Y = 556;\n    t.Z = 556;\n    t.bracketleft = 389;\n    t.backslash = 278;\n    t.bracketright = 389;\n    t.asciicircum = 422;\n    t.underscore = 500;\n    t.quoteleft = 333;\n    t.a = 500;\n    t.b = 500;\n    t.c = 444;\n    t.d = 500;\n    t.e = 444;\n    t.f = 278;\n    t.g = 500;\n    t.h = 500;\n    t.i = 278;\n    t.j = 278;\n    t.k = 444;\n    t.l = 278;\n    t.m = 722;\n    t.n = 500;\n    t.o = 500;\n    t.p = 500;\n    t.q = 500;\n    t.r = 389;\n    t.s = 389;\n    t.t = 278;\n    t.u = 500;\n    t.v = 444;\n    t.w = 667;\n    t.x = 444;\n    t.y = 444;\n    t.z = 389;\n    t.braceleft = 400;\n    t.bar = 275;\n    t.braceright = 400;\n    t.asciitilde = 541;\n    t.exclamdown = 389;\n    t.cent = 500;\n    t.sterling = 500;\n    t.fraction = 167;\n    t.yen = 500;\n    t.florin = 500;\n    t.section = 500;\n    t.currency = 500;\n    t.quotesingle = 214;\n    t.quotedblleft = 556;\n    t.guillemotleft = 500;\n    t.guilsinglleft = 333;\n    t.guilsinglright = 333;\n    t.fi = 500;\n    t.fl = 500;\n    t.endash = 500;\n    t.dagger = 500;\n    t.daggerdbl = 500;\n    t.periodcentered = 250;\n    t.paragraph = 523;\n    t.bullet = 350;\n    t.quotesinglbase = 333;\n    t.quotedblbase = 556;\n    t.quotedblright = 556;\n    t.guillemotright = 500;\n    t.ellipsis = 889;\n    t.perthousand = 1000;\n    t.questiondown = 500;\n    t.grave = 333;\n    t.acute = 333;\n    t.circumflex = 333;\n    t.tilde = 333;\n    t.macron = 333;\n    t.breve = 333;\n    t.dotaccent = 333;\n    t.dieresis = 333;\n    t.ring = 333;\n    t.cedilla = 333;\n    t.hungarumlaut = 333;\n    t.ogonek = 333;\n    t.caron = 333;\n    t.emdash = 889;\n    t.AE = 889;\n    t.ordfeminine = 276;\n    t.Lslash = 556;\n    t.Oslash = 722;\n    t.OE = 944;\n    t.ordmasculine = 310;\n    t.ae = 667;\n    t.dotlessi = 278;\n    t.lslash = 278;\n    t.oslash = 500;\n    t.oe = 667;\n    t.germandbls = 500;\n    t.Idieresis = 333;\n    t.eacute = 444;\n    t.abreve = 500;\n    t.uhungarumlaut = 500;\n    t.ecaron = 444;\n    t.Ydieresis = 556;\n    t.divide = 675;\n    t.Yacute = 556;\n    t.Acircumflex = 611;\n    t.aacute = 500;\n    t.Ucircumflex = 722;\n    t.yacute = 444;\n    t.scommaaccent = 389;\n    t.ecircumflex = 444;\n    t.Uring = 722;\n    t.Udieresis = 722;\n    t.aogonek = 500;\n    t.Uacute = 722;\n    t.uogonek = 500;\n    t.Edieresis = 611;\n    t.Dcroat = 722;\n    t.commaaccent = 250;\n    t.copyright = 760;\n    t.Emacron = 611;\n    t.ccaron = 444;\n    t.aring = 500;\n    t.Ncommaaccent = 667;\n    t.lacute = 278;\n    t.agrave = 500;\n    t.Tcommaaccent = 556;\n    t.Cacute = 667;\n    t.atilde = 500;\n    t.Edotaccent = 611;\n    t.scaron = 389;\n    t.scedilla = 389;\n    t.iacute = 278;\n    t.lozenge = 471;\n    t.Rcaron = 611;\n    t.Gcommaaccent = 722;\n    t.ucircumflex = 500;\n    t.acircumflex = 500;\n    t.Amacron = 611;\n    t.rcaron = 389;\n    t.ccedilla = 444;\n    t.Zdotaccent = 556;\n    t.Thorn = 611;\n    t.Omacron = 722;\n    t.Racute = 611;\n    t.Sacute = 500;\n    t.dcaron = 544;\n    t.Umacron = 722;\n    t.uring = 500;\n    t.threesuperior = 300;\n    t.Ograve = 722;\n    t.Agrave = 611;\n    t.Abreve = 611;\n    t.multiply = 675;\n    t.uacute = 500;\n    t.Tcaron = 556;\n    t.partialdiff = 476;\n    t.ydieresis = 444;\n    t.Nacute = 667;\n    t.icircumflex = 278;\n    t.Ecircumflex = 611;\n    t.adieresis = 500;\n    t.edieresis = 444;\n    t.cacute = 444;\n    t.nacute = 500;\n    t.umacron = 500;\n    t.Ncaron = 667;\n    t.Iacute = 333;\n    t.plusminus = 675;\n    t.brokenbar = 275;\n    t.registered = 760;\n    t.Gbreve = 722;\n    t.Idotaccent = 333;\n    t.summation = 600;\n    t.Egrave = 611;\n    t.racute = 389;\n    t.omacron = 500;\n    t.Zacute = 556;\n    t.Zcaron = 556;\n    t.greaterequal = 549;\n    t.Eth = 722;\n    t.Ccedilla = 667;\n    t.lcommaaccent = 278;\n    t.tcaron = 300;\n    t.eogonek = 444;\n    t.Uogonek = 722;\n    t.Aacute = 611;\n    t.Adieresis = 611;\n    t.egrave = 444;\n    t.zacute = 389;\n    t.iogonek = 278;\n    t.Oacute = 722;\n    t.oacute = 500;\n    t.amacron = 500;\n    t.sacute = 389;\n    t.idieresis = 278;\n    t.Ocircumflex = 722;\n    t.Ugrave = 722;\n    t.Delta = 612;\n    t.thorn = 500;\n    t.twosuperior = 300;\n    t.Odieresis = 722;\n    t.mu = 500;\n    t.igrave = 278;\n    t.ohungarumlaut = 500;\n    t.Eogonek = 611;\n    t.dcroat = 500;\n    t.threequarters = 750;\n    t.Scedilla = 500;\n    t.lcaron = 300;\n    t.Kcommaaccent = 667;\n    t.Lacute = 556;\n    t.trademark = 980;\n    t.edotaccent = 444;\n    t.Igrave = 333;\n    t.Imacron = 333;\n    t.Lcaron = 611;\n    t.onehalf = 750;\n    t.lessequal = 549;\n    t.ocircumflex = 500;\n    t.ntilde = 500;\n    t.Uhungarumlaut = 722;\n    t.Eacute = 611;\n    t.emacron = 444;\n    t.gbreve = 500;\n    t.onequarter = 750;\n    t.Scaron = 500;\n    t.Scommaaccent = 500;\n    t.Ohungarumlaut = 722;\n    t.degree = 400;\n    t.ograve = 500;\n    t.Ccaron = 667;\n    t.ugrave = 500;\n    t.radical = 453;\n    t.Dcaron = 722;\n    t.rcommaaccent = 389;\n    t.Ntilde = 667;\n    t.otilde = 500;\n    t.Rcommaaccent = 611;\n    t.Lcommaaccent = 556;\n    t.Atilde = 611;\n    t.Aogonek = 611;\n    t.Aring = 611;\n    t.Otilde = 722;\n    t.zdotaccent = 389;\n    t.Ecaron = 611;\n    t.Iogonek = 333;\n    t.kcommaaccent = 444;\n    t.minus = 675;\n    t.Icircumflex = 333;\n    t.ncaron = 500;\n    t.tcommaaccent = 278;\n    t.logicalnot = 675;\n    t.odieresis = 500;\n    t.udieresis = 500;\n    t.notequal = 549;\n    t.gcommaaccent = 500;\n    t.eth = 500;\n    t.zcaron = 389;\n    t.ncommaaccent = 500;\n    t.onesuperior = 300;\n    t.imacron = 278;\n    t.Euro = 500;\n  });\n  t.ZapfDingbats = getLookupTableFactory(function (t) {\n    t.space = 278;\n    t.a1 = 974;\n    t.a2 = 961;\n    t.a202 = 974;\n    t.a3 = 980;\n    t.a4 = 719;\n    t.a5 = 789;\n    t.a119 = 790;\n    t.a118 = 791;\n    t.a117 = 690;\n    t.a11 = 960;\n    t.a12 = 939;\n    t.a13 = 549;\n    t.a14 = 855;\n    t.a15 = 911;\n    t.a16 = 933;\n    t.a105 = 911;\n    t.a17 = 945;\n    t.a18 = 974;\n    t.a19 = 755;\n    t.a20 = 846;\n    t.a21 = 762;\n    t.a22 = 761;\n    t.a23 = 571;\n    t.a24 = 677;\n    t.a25 = 763;\n    t.a26 = 760;\n    t.a27 = 759;\n    t.a28 = 754;\n    t.a6 = 494;\n    t.a7 = 552;\n    t.a8 = 537;\n    t.a9 = 577;\n    t.a10 = 692;\n    t.a29 = 786;\n    t.a30 = 788;\n    t.a31 = 788;\n    t.a32 = 790;\n    t.a33 = 793;\n    t.a34 = 794;\n    t.a35 = 816;\n    t.a36 = 823;\n    t.a37 = 789;\n    t.a38 = 841;\n    t.a39 = 823;\n    t.a40 = 833;\n    t.a41 = 816;\n    t.a42 = 831;\n    t.a43 = 923;\n    t.a44 = 744;\n    t.a45 = 723;\n    t.a46 = 749;\n    t.a47 = 790;\n    t.a48 = 792;\n    t.a49 = 695;\n    t.a50 = 776;\n    t.a51 = 768;\n    t.a52 = 792;\n    t.a53 = 759;\n    t.a54 = 707;\n    t.a55 = 708;\n    t.a56 = 682;\n    t.a57 = 701;\n    t.a58 = 826;\n    t.a59 = 815;\n    t.a60 = 789;\n    t.a61 = 789;\n    t.a62 = 707;\n    t.a63 = 687;\n    t.a64 = 696;\n    t.a65 = 689;\n    t.a66 = 786;\n    t.a67 = 787;\n    t.a68 = 713;\n    t.a69 = 791;\n    t.a70 = 785;\n    t.a71 = 791;\n    t.a72 = 873;\n    t.a73 = 761;\n    t.a74 = 762;\n    t.a203 = 762;\n    t.a75 = 759;\n    t.a204 = 759;\n    t.a76 = 892;\n    t.a77 = 892;\n    t.a78 = 788;\n    t.a79 = 784;\n    t.a81 = 438;\n    t.a82 = 138;\n    t.a83 = 277;\n    t.a84 = 415;\n    t.a97 = 392;\n    t.a98 = 392;\n    t.a99 = 668;\n    t.a100 = 668;\n    t.a89 = 390;\n    t.a90 = 390;\n    t.a93 = 317;\n    t.a94 = 317;\n    t.a91 = 276;\n    t.a92 = 276;\n    t.a205 = 509;\n    t.a85 = 509;\n    t.a206 = 410;\n    t.a86 = 410;\n    t.a87 = 234;\n    t.a88 = 234;\n    t.a95 = 334;\n    t.a96 = 334;\n    t.a101 = 732;\n    t.a102 = 544;\n    t.a103 = 544;\n    t.a104 = 910;\n    t.a106 = 667;\n    t.a107 = 760;\n    t.a108 = 760;\n    t.a112 = 776;\n    t.a111 = 595;\n    t.a110 = 694;\n    t.a109 = 626;\n    t.a120 = 788;\n    t.a121 = 788;\n    t.a122 = 788;\n    t.a123 = 788;\n    t.a124 = 788;\n    t.a125 = 788;\n    t.a126 = 788;\n    t.a127 = 788;\n    t.a128 = 788;\n    t.a129 = 788;\n    t.a130 = 788;\n    t.a131 = 788;\n    t.a132 = 788;\n    t.a133 = 788;\n    t.a134 = 788;\n    t.a135 = 788;\n    t.a136 = 788;\n    t.a137 = 788;\n    t.a138 = 788;\n    t.a139 = 788;\n    t.a140 = 788;\n    t.a141 = 788;\n    t.a142 = 788;\n    t.a143 = 788;\n    t.a144 = 788;\n    t.a145 = 788;\n    t.a146 = 788;\n    t.a147 = 788;\n    t.a148 = 788;\n    t.a149 = 788;\n    t.a150 = 788;\n    t.a151 = 788;\n    t.a152 = 788;\n    t.a153 = 788;\n    t.a154 = 788;\n    t.a155 = 788;\n    t.a156 = 788;\n    t.a157 = 788;\n    t.a158 = 788;\n    t.a159 = 788;\n    t.a160 = 894;\n    t.a161 = 838;\n    t.a163 = 1016;\n    t.a164 = 458;\n    t.a196 = 748;\n    t.a165 = 924;\n    t.a192 = 748;\n    t.a166 = 918;\n    t.a167 = 927;\n    t.a168 = 928;\n    t.a169 = 928;\n    t.a170 = 834;\n    t.a171 = 873;\n    t.a172 = 828;\n    t.a173 = 924;\n    t.a162 = 924;\n    t.a174 = 917;\n    t.a175 = 930;\n    t.a176 = 931;\n    t.a177 = 463;\n    t.a178 = 883;\n    t.a179 = 836;\n    t.a193 = 836;\n    t.a180 = 867;\n    t.a199 = 867;\n    t.a181 = 696;\n    t.a200 = 696;\n    t.a182 = 874;\n    t.a201 = 874;\n    t.a183 = 760;\n    t.a184 = 946;\n    t.a197 = 771;\n    t.a185 = 865;\n    t.a194 = 771;\n    t.a198 = 888;\n    t.a186 = 967;\n    t.a195 = 888;\n    t.a187 = 831;\n    t.a188 = 873;\n    t.a189 = 927;\n    t.a190 = 970;\n    t.a191 = 918;\n  });\n});\nconst getFontBasicMetrics = getLookupTableFactory(function (t) {\n  t.Courier = {\n    ascent: 629,\n    descent: -157,\n    capHeight: 562,\n    xHeight: -426\n  };\n  t[\"Courier-Bold\"] = {\n    ascent: 629,\n    descent: -157,\n    capHeight: 562,\n    xHeight: 439\n  };\n  t[\"Courier-Oblique\"] = {\n    ascent: 629,\n    descent: -157,\n    capHeight: 562,\n    xHeight: 426\n  };\n  t[\"Courier-BoldOblique\"] = {\n    ascent: 629,\n    descent: -157,\n    capHeight: 562,\n    xHeight: 426\n  };\n  t.Helvetica = {\n    ascent: 718,\n    descent: -207,\n    capHeight: 718,\n    xHeight: 523\n  };\n  t[\"Helvetica-Bold\"] = {\n    ascent: 718,\n    descent: -207,\n    capHeight: 718,\n    xHeight: 532\n  };\n  t[\"Helvetica-Oblique\"] = {\n    ascent: 718,\n    descent: -207,\n    capHeight: 718,\n    xHeight: 523\n  };\n  t[\"Helvetica-BoldOblique\"] = {\n    ascent: 718,\n    descent: -207,\n    capHeight: 718,\n    xHeight: 532\n  };\n  t[\"Times-Roman\"] = {\n    ascent: 683,\n    descent: -217,\n    capHeight: 662,\n    xHeight: 450\n  };\n  t[\"Times-Bold\"] = {\n    ascent: 683,\n    descent: -217,\n    capHeight: 676,\n    xHeight: 461\n  };\n  t[\"Times-Italic\"] = {\n    ascent: 683,\n    descent: -217,\n    capHeight: 653,\n    xHeight: 441\n  };\n  t[\"Times-BoldItalic\"] = {\n    ascent: 683,\n    descent: -217,\n    capHeight: 669,\n    xHeight: 462\n  };\n  t.Symbol = {\n    ascent: Math.NaN,\n    descent: Math.NaN,\n    capHeight: Math.NaN,\n    xHeight: Math.NaN\n  };\n  t.ZapfDingbats = {\n    ascent: Math.NaN,\n    descent: Math.NaN,\n    capHeight: Math.NaN,\n    xHeight: Math.NaN\n  };\n});\n\n;// CONCATENATED MODULE: ./src/core/glyf.js\nconst ON_CURVE_POINT = 1 << 0;\nconst X_SHORT_VECTOR = 1 << 1;\nconst Y_SHORT_VECTOR = 1 << 2;\nconst REPEAT_FLAG = 1 << 3;\nconst X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR = 1 << 4;\nconst Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR = 1 << 5;\nconst OVERLAP_SIMPLE = 1 << 6;\nconst ARG_1_AND_2_ARE_WORDS = 1 << 0;\nconst ARGS_ARE_XY_VALUES = 1 << 1;\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;\nclass GlyfTable {\n  constructor({\n    glyfTable,\n    isGlyphLocationsLong,\n    locaTable,\n    numGlyphs\n  }) {\n    this.glyphs = [];\n    const loca = new DataView(locaTable.buffer, locaTable.byteOffset, locaTable.byteLength);\n    const glyf = new DataView(glyfTable.buffer, glyfTable.byteOffset, glyfTable.byteLength);\n    const offsetSize = isGlyphLocationsLong ? 4 : 2;\n    let prev = isGlyphLocationsLong ? loca.getUint32(0) : 2 * loca.getUint16(0);\n    let pos = 0;\n    for (let i = 0; i < numGlyphs; i++) {\n      pos += offsetSize;\n      const next = isGlyphLocationsLong ? loca.getUint32(pos) : 2 * loca.getUint16(pos);\n      if (next === prev) {\n        this.glyphs.push(new Glyph({}));\n        continue;\n      }\n      const glyph = Glyph.parse(prev, glyf);\n      this.glyphs.push(glyph);\n      prev = next;\n    }\n  }\n  getSize() {\n    return this.glyphs.reduce((a, g) => {\n      const size = g.getSize();\n      return a + (size + 3 & ~3);\n    }, 0);\n  }\n  write() {\n    const totalSize = this.getSize();\n    const glyfTable = new DataView(new ArrayBuffer(totalSize));\n    const isLocationLong = totalSize > 0x1fffe;\n    const offsetSize = isLocationLong ? 4 : 2;\n    const locaTable = new DataView(new ArrayBuffer((this.glyphs.length + 1) * offsetSize));\n    if (isLocationLong) {\n      locaTable.setUint32(0, 0);\n    } else {\n      locaTable.setUint16(0, 0);\n    }\n    let pos = 0;\n    let locaIndex = 0;\n    for (const glyph of this.glyphs) {\n      pos += glyph.write(pos, glyfTable);\n      pos = pos + 3 & ~3;\n      locaIndex += offsetSize;\n      if (isLocationLong) {\n        locaTable.setUint32(locaIndex, pos);\n      } else {\n        locaTable.setUint16(locaIndex, pos >> 1);\n      }\n    }\n    return {\n      isLocationLong,\n      loca: new Uint8Array(locaTable.buffer),\n      glyf: new Uint8Array(glyfTable.buffer)\n    };\n  }\n  scale(factors) {\n    for (let i = 0, ii = this.glyphs.length; i < ii; i++) {\n      this.glyphs[i].scale(factors[i]);\n    }\n  }\n}\nclass Glyph {\n  constructor({\n    header = null,\n    simple = null,\n    composites = null\n  }) {\n    this.header = header;\n    this.simple = simple;\n    this.composites = composites;\n  }\n  static parse(pos, glyf) {\n    const [read, header] = GlyphHeader.parse(pos, glyf);\n    pos += read;\n    if (header.numberOfContours < 0) {\n      const composites = [];\n      while (true) {\n        const [n, composite] = CompositeGlyph.parse(pos, glyf);\n        pos += n;\n        composites.push(composite);\n        if (!(composite.flags & MORE_COMPONENTS)) {\n          break;\n        }\n      }\n      return new Glyph({\n        header,\n        composites\n      });\n    }\n    const simple = SimpleGlyph.parse(pos, glyf, header.numberOfContours);\n    return new Glyph({\n      header,\n      simple\n    });\n  }\n  getSize() {\n    if (!this.header) {\n      return 0;\n    }\n    const size = this.simple ? this.simple.getSize() : this.composites.reduce((a, c) => a + c.getSize(), 0);\n    return this.header.getSize() + size;\n  }\n  write(pos, buf) {\n    if (!this.header) {\n      return 0;\n    }\n    const spos = pos;\n    pos += this.header.write(pos, buf);\n    if (this.simple) {\n      pos += this.simple.write(pos, buf);\n    } else {\n      for (const composite of this.composites) {\n        pos += composite.write(pos, buf);\n      }\n    }\n    return pos - spos;\n  }\n  scale(factor) {\n    if (!this.header) {\n      return;\n    }\n    const xMiddle = (this.header.xMin + this.header.xMax) / 2;\n    this.header.scale(xMiddle, factor);\n    if (this.simple) {\n      this.simple.scale(xMiddle, factor);\n    } else {\n      for (const composite of this.composites) {\n        composite.scale(xMiddle, factor);\n      }\n    }\n  }\n}\nclass GlyphHeader {\n  constructor({\n    numberOfContours,\n    xMin,\n    yMin,\n    xMax,\n    yMax\n  }) {\n    this.numberOfContours = numberOfContours;\n    this.xMin = xMin;\n    this.yMin = yMin;\n    this.xMax = xMax;\n    this.yMax = yMax;\n  }\n  static parse(pos, glyf) {\n    return [10, new GlyphHeader({\n      numberOfContours: glyf.getInt16(pos),\n      xMin: glyf.getInt16(pos + 2),\n      yMin: glyf.getInt16(pos + 4),\n      xMax: glyf.getInt16(pos + 6),\n      yMax: glyf.getInt16(pos + 8)\n    })];\n  }\n  getSize() {\n    return 10;\n  }\n  write(pos, buf) {\n    buf.setInt16(pos, this.numberOfContours);\n    buf.setInt16(pos + 2, this.xMin);\n    buf.setInt16(pos + 4, this.yMin);\n    buf.setInt16(pos + 6, this.xMax);\n    buf.setInt16(pos + 8, this.yMax);\n    return 10;\n  }\n  scale(x, factor) {\n    this.xMin = Math.round(x + (this.xMin - x) * factor);\n    this.xMax = Math.round(x + (this.xMax - x) * factor);\n  }\n}\nclass Contour {\n  constructor({\n    flags,\n    xCoordinates,\n    yCoordinates\n  }) {\n    this.xCoordinates = xCoordinates;\n    this.yCoordinates = yCoordinates;\n    this.flags = flags;\n  }\n}\nclass SimpleGlyph {\n  constructor({\n    contours,\n    instructions\n  }) {\n    this.contours = contours;\n    this.instructions = instructions;\n  }\n  static parse(pos, glyf, numberOfContours) {\n    const endPtsOfContours = [];\n    for (let i = 0; i < numberOfContours; i++) {\n      const endPt = glyf.getUint16(pos);\n      pos += 2;\n      endPtsOfContours.push(endPt);\n    }\n    const numberOfPt = endPtsOfContours[numberOfContours - 1] + 1;\n    const instructionLength = glyf.getUint16(pos);\n    pos += 2;\n    const instructions = new Uint8Array(glyf).slice(pos, pos + instructionLength);\n    pos += instructionLength;\n    const flags = [];\n    for (let i = 0; i < numberOfPt; pos++, i++) {\n      let flag = glyf.getUint8(pos);\n      flags.push(flag);\n      if (flag & REPEAT_FLAG) {\n        const count = glyf.getUint8(++pos);\n        flag ^= REPEAT_FLAG;\n        for (let m = 0; m < count; m++) {\n          flags.push(flag);\n        }\n        i += count;\n      }\n    }\n    const allXCoordinates = [];\n    let xCoordinates = [];\n    let yCoordinates = [];\n    let pointFlags = [];\n    const contours = [];\n    let endPtsOfContoursIndex = 0;\n    let lastCoordinate = 0;\n    for (let i = 0; i < numberOfPt; i++) {\n      const flag = flags[i];\n      if (flag & X_SHORT_VECTOR) {\n        const x = glyf.getUint8(pos++);\n        lastCoordinate += flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR ? x : -x;\n        xCoordinates.push(lastCoordinate);\n      } else if (flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR) {\n        xCoordinates.push(lastCoordinate);\n      } else {\n        lastCoordinate += glyf.getInt16(pos);\n        pos += 2;\n        xCoordinates.push(lastCoordinate);\n      }\n      if (endPtsOfContours[endPtsOfContoursIndex] === i) {\n        endPtsOfContoursIndex++;\n        allXCoordinates.push(xCoordinates);\n        xCoordinates = [];\n      }\n    }\n    lastCoordinate = 0;\n    endPtsOfContoursIndex = 0;\n    for (let i = 0; i < numberOfPt; i++) {\n      const flag = flags[i];\n      if (flag & Y_SHORT_VECTOR) {\n        const y = glyf.getUint8(pos++);\n        lastCoordinate += flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR ? y : -y;\n        yCoordinates.push(lastCoordinate);\n      } else if (flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR) {\n        yCoordinates.push(lastCoordinate);\n      } else {\n        lastCoordinate += glyf.getInt16(pos);\n        pos += 2;\n        yCoordinates.push(lastCoordinate);\n      }\n      pointFlags.push(flag & ON_CURVE_POINT | flag & OVERLAP_SIMPLE);\n      if (endPtsOfContours[endPtsOfContoursIndex] === i) {\n        xCoordinates = allXCoordinates[endPtsOfContoursIndex];\n        endPtsOfContoursIndex++;\n        contours.push(new Contour({\n          flags: pointFlags,\n          xCoordinates,\n          yCoordinates\n        }));\n        yCoordinates = [];\n        pointFlags = [];\n      }\n    }\n    return new SimpleGlyph({\n      contours,\n      instructions\n    });\n  }\n  getSize() {\n    let size = this.contours.length * 2 + 2 + this.instructions.length;\n    let lastX = 0;\n    let lastY = 0;\n    for (const contour of this.contours) {\n      size += contour.flags.length;\n      for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) {\n        const x = contour.xCoordinates[i];\n        const y = contour.yCoordinates[i];\n        let abs = Math.abs(x - lastX);\n        if (abs > 255) {\n          size += 2;\n        } else if (abs > 0) {\n          size += 1;\n        }\n        lastX = x;\n        abs = Math.abs(y - lastY);\n        if (abs > 255) {\n          size += 2;\n        } else if (abs > 0) {\n          size += 1;\n        }\n        lastY = y;\n      }\n    }\n    return size;\n  }\n  write(pos, buf) {\n    const spos = pos;\n    const xCoordinates = [];\n    const yCoordinates = [];\n    const flags = [];\n    let lastX = 0;\n    let lastY = 0;\n    for (const contour of this.contours) {\n      for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) {\n        let flag = contour.flags[i];\n        const x = contour.xCoordinates[i];\n        let delta = x - lastX;\n        if (delta === 0) {\n          flag |= X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR;\n          xCoordinates.push(0);\n        } else {\n          const abs = Math.abs(delta);\n          if (abs <= 255) {\n            flag |= delta >= 0 ? X_SHORT_VECTOR | X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR : X_SHORT_VECTOR;\n            xCoordinates.push(abs);\n          } else {\n            xCoordinates.push(delta);\n          }\n        }\n        lastX = x;\n        const y = contour.yCoordinates[i];\n        delta = y - lastY;\n        if (delta === 0) {\n          flag |= Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR;\n          yCoordinates.push(0);\n        } else {\n          const abs = Math.abs(delta);\n          if (abs <= 255) {\n            flag |= delta >= 0 ? Y_SHORT_VECTOR | Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR : Y_SHORT_VECTOR;\n            yCoordinates.push(abs);\n          } else {\n            yCoordinates.push(delta);\n          }\n        }\n        lastY = y;\n        flags.push(flag);\n      }\n      buf.setUint16(pos, xCoordinates.length - 1);\n      pos += 2;\n    }\n    buf.setUint16(pos, this.instructions.length);\n    pos += 2;\n    if (this.instructions.length) {\n      new Uint8Array(buf.buffer, 0, buf.buffer.byteLength).set(this.instructions, pos);\n      pos += this.instructions.length;\n    }\n    for (const flag of flags) {\n      buf.setUint8(pos++, flag);\n    }\n    for (let i = 0, ii = xCoordinates.length; i < ii; i++) {\n      const x = xCoordinates[i];\n      const flag = flags[i];\n      if (flag & X_SHORT_VECTOR) {\n        buf.setUint8(pos++, x);\n      } else if (!(flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR)) {\n        buf.setInt16(pos, x);\n        pos += 2;\n      }\n    }\n    for (let i = 0, ii = yCoordinates.length; i < ii; i++) {\n      const y = yCoordinates[i];\n      const flag = flags[i];\n      if (flag & Y_SHORT_VECTOR) {\n        buf.setUint8(pos++, y);\n      } else if (!(flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR)) {\n        buf.setInt16(pos, y);\n        pos += 2;\n      }\n    }\n    return pos - spos;\n  }\n  scale(x, factor) {\n    for (const contour of this.contours) {\n      if (contour.xCoordinates.length === 0) {\n        continue;\n      }\n      for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) {\n        contour.xCoordinates[i] = Math.round(x + (contour.xCoordinates[i] - x) * factor);\n      }\n    }\n  }\n}\nclass CompositeGlyph {\n  constructor({\n    flags,\n    glyphIndex,\n    argument1,\n    argument2,\n    transf,\n    instructions\n  }) {\n    this.flags = flags;\n    this.glyphIndex = glyphIndex;\n    this.argument1 = argument1;\n    this.argument2 = argument2;\n    this.transf = transf;\n    this.instructions = instructions;\n  }\n  static parse(pos, glyf) {\n    const spos = pos;\n    const transf = [];\n    let flags = glyf.getUint16(pos);\n    const glyphIndex = glyf.getUint16(pos + 2);\n    pos += 4;\n    let argument1, argument2;\n    if (flags & ARG_1_AND_2_ARE_WORDS) {\n      if (flags & ARGS_ARE_XY_VALUES) {\n        argument1 = glyf.getInt16(pos);\n        argument2 = glyf.getInt16(pos + 2);\n      } else {\n        argument1 = glyf.getUint16(pos);\n        argument2 = glyf.getUint16(pos + 2);\n      }\n      pos += 4;\n      flags ^= ARG_1_AND_2_ARE_WORDS;\n    } else {\n      if (flags & ARGS_ARE_XY_VALUES) {\n        argument1 = glyf.getInt8(pos);\n        argument2 = glyf.getInt8(pos + 1);\n      } else {\n        argument1 = glyf.getUint8(pos);\n        argument2 = glyf.getUint8(pos + 1);\n      }\n      pos += 2;\n    }\n    if (flags & WE_HAVE_A_SCALE) {\n      transf.push(glyf.getUint16(pos));\n      pos += 2;\n    } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n      transf.push(glyf.getUint16(pos), glyf.getUint16(pos + 2));\n      pos += 4;\n    } else if (flags & WE_HAVE_A_TWO_BY_TWO) {\n      transf.push(glyf.getUint16(pos), glyf.getUint16(pos + 2), glyf.getUint16(pos + 4), glyf.getUint16(pos + 6));\n      pos += 8;\n    }\n    let instructions = null;\n    if (flags & WE_HAVE_INSTRUCTIONS) {\n      const instructionLength = glyf.getUint16(pos);\n      pos += 2;\n      instructions = new Uint8Array(glyf).slice(pos, pos + instructionLength);\n      pos += instructionLength;\n    }\n    return [pos - spos, new CompositeGlyph({\n      flags,\n      glyphIndex,\n      argument1,\n      argument2,\n      transf,\n      instructions\n    })];\n  }\n  getSize() {\n    let size = 2 + 2 + this.transf.length * 2;\n    if (this.flags & WE_HAVE_INSTRUCTIONS) {\n      size += 2 + this.instructions.length;\n    }\n    size += 2;\n    if (this.flags & 2) {\n      if (!(this.argument1 >= -128 && this.argument1 <= 127 && this.argument2 >= -128 && this.argument2 <= 127)) {\n        size += 2;\n      }\n    } else if (!(this.argument1 >= 0 && this.argument1 <= 255 && this.argument2 >= 0 && this.argument2 <= 255)) {\n      size += 2;\n    }\n    return size;\n  }\n  write(pos, buf) {\n    const spos = pos;\n    if (this.flags & ARGS_ARE_XY_VALUES) {\n      if (!(this.argument1 >= -128 && this.argument1 <= 127 && this.argument2 >= -128 && this.argument2 <= 127)) {\n        this.flags |= ARG_1_AND_2_ARE_WORDS;\n      }\n    } else if (!(this.argument1 >= 0 && this.argument1 <= 255 && this.argument2 >= 0 && this.argument2 <= 255)) {\n      this.flags |= ARG_1_AND_2_ARE_WORDS;\n    }\n    buf.setUint16(pos, this.flags);\n    buf.setUint16(pos + 2, this.glyphIndex);\n    pos += 4;\n    if (this.flags & ARG_1_AND_2_ARE_WORDS) {\n      if (this.flags & ARGS_ARE_XY_VALUES) {\n        buf.setInt16(pos, this.argument1);\n        buf.setInt16(pos + 2, this.argument2);\n      } else {\n        buf.setUint16(pos, this.argument1);\n        buf.setUint16(pos + 2, this.argument2);\n      }\n      pos += 4;\n    } else {\n      buf.setUint8(pos, this.argument1);\n      buf.setUint8(pos + 1, this.argument2);\n      pos += 2;\n    }\n    if (this.flags & WE_HAVE_INSTRUCTIONS) {\n      buf.setUint16(pos, this.instructions.length);\n      pos += 2;\n      if (this.instructions.length) {\n        new Uint8Array(buf.buffer, 0, buf.buffer.byteLength).set(this.instructions, pos);\n        pos += this.instructions.length;\n      }\n    }\n    return pos - spos;\n  }\n  scale(x, factor) {}\n}\n\n;// CONCATENATED MODULE: ./src/core/opentype_file_builder.js\n\n\nfunction writeInt16(dest, offset, num) {\n  dest[offset] = num >> 8 & 0xff;\n  dest[offset + 1] = num & 0xff;\n}\nfunction writeInt32(dest, offset, num) {\n  dest[offset] = num >> 24 & 0xff;\n  dest[offset + 1] = num >> 16 & 0xff;\n  dest[offset + 2] = num >> 8 & 0xff;\n  dest[offset + 3] = num & 0xff;\n}\nfunction writeData(dest, offset, data) {\n  if (data instanceof Uint8Array) {\n    dest.set(data, offset);\n  } else if (typeof data === \"string\") {\n    for (let i = 0, ii = data.length; i < ii; i++) {\n      dest[offset++] = data.charCodeAt(i) & 0xff;\n    }\n  } else {\n    for (const num of data) {\n      dest[offset++] = num & 0xff;\n    }\n  }\n}\nconst OTF_HEADER_SIZE = 12;\nconst OTF_TABLE_ENTRY_SIZE = 16;\nclass OpenTypeFileBuilder {\n  constructor(sfnt) {\n    this.sfnt = sfnt;\n    this.tables = Object.create(null);\n  }\n  static getSearchParams(entriesCount, entrySize) {\n    let maxPower2 = 1,\n      log2 = 0;\n    while ((maxPower2 ^ entriesCount) > maxPower2) {\n      maxPower2 <<= 1;\n      log2++;\n    }\n    const searchRange = maxPower2 * entrySize;\n    return {\n      range: searchRange,\n      entry: log2,\n      rangeShift: entrySize * entriesCount - searchRange\n    };\n  }\n  toArray() {\n    let sfnt = this.sfnt;\n    const tables = this.tables;\n    const tablesNames = Object.keys(tables);\n    tablesNames.sort();\n    const numTables = tablesNames.length;\n    let i, j, jj, table, tableName;\n    let offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE;\n    const tableOffsets = [offset];\n    for (i = 0; i < numTables; i++) {\n      table = tables[tablesNames[i]];\n      const paddedLength = (table.length + 3 & ~3) >>> 0;\n      offset += paddedLength;\n      tableOffsets.push(offset);\n    }\n    const file = new Uint8Array(offset);\n    for (i = 0; i < numTables; i++) {\n      table = tables[tablesNames[i]];\n      writeData(file, tableOffsets[i], table);\n    }\n    if (sfnt === \"true\") {\n      sfnt = string32(0x00010000);\n    }\n    file[0] = sfnt.charCodeAt(0) & 0xff;\n    file[1] = sfnt.charCodeAt(1) & 0xff;\n    file[2] = sfnt.charCodeAt(2) & 0xff;\n    file[3] = sfnt.charCodeAt(3) & 0xff;\n    writeInt16(file, 4, numTables);\n    const searchParams = OpenTypeFileBuilder.getSearchParams(numTables, 16);\n    writeInt16(file, 6, searchParams.range);\n    writeInt16(file, 8, searchParams.entry);\n    writeInt16(file, 10, searchParams.rangeShift);\n    offset = OTF_HEADER_SIZE;\n    for (i = 0; i < numTables; i++) {\n      tableName = tablesNames[i];\n      file[offset] = tableName.charCodeAt(0) & 0xff;\n      file[offset + 1] = tableName.charCodeAt(1) & 0xff;\n      file[offset + 2] = tableName.charCodeAt(2) & 0xff;\n      file[offset + 3] = tableName.charCodeAt(3) & 0xff;\n      let checksum = 0;\n      for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) {\n        const quad = readUint32(file, j);\n        checksum = checksum + quad >>> 0;\n      }\n      writeInt32(file, offset + 4, checksum);\n      writeInt32(file, offset + 8, tableOffsets[i]);\n      writeInt32(file, offset + 12, tables[tableName].length);\n      offset += OTF_TABLE_ENTRY_SIZE;\n    }\n    return file;\n  }\n  addTable(tag, data) {\n    if (tag in this.tables) {\n      throw new Error(\"Table \" + tag + \" already exists\");\n    }\n    this.tables[tag] = data;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/type1_parser.js\n\n\n\n\nconst HINTING_ENABLED = false;\nconst COMMAND_MAP = {\n  hstem: [1],\n  vstem: [3],\n  vmoveto: [4],\n  rlineto: [5],\n  hlineto: [6],\n  vlineto: [7],\n  rrcurveto: [8],\n  callsubr: [10],\n  flex: [12, 35],\n  drop: [12, 18],\n  endchar: [14],\n  rmoveto: [21],\n  hmoveto: [22],\n  vhcurveto: [30],\n  hvcurveto: [31]\n};\nclass Type1CharString {\n  constructor() {\n    this.width = 0;\n    this.lsb = 0;\n    this.flexing = false;\n    this.output = [];\n    this.stack = [];\n  }\n  convert(encoded, subrs, seacAnalysisEnabled) {\n    const count = encoded.length;\n    let error = false;\n    let wx, sbx, subrNumber;\n    for (let i = 0; i < count; i++) {\n      let value = encoded[i];\n      if (value < 32) {\n        if (value === 12) {\n          value = (value << 8) + encoded[++i];\n        }\n        switch (value) {\n          case 1:\n            if (!HINTING_ENABLED) {\n              this.stack = [];\n              break;\n            }\n            error = this.executeCommand(2, COMMAND_MAP.hstem);\n            break;\n          case 3:\n            if (!HINTING_ENABLED) {\n              this.stack = [];\n              break;\n            }\n            error = this.executeCommand(2, COMMAND_MAP.vstem);\n            break;\n          case 4:\n            if (this.flexing) {\n              if (this.stack.length < 1) {\n                error = true;\n                break;\n              }\n              const dy = this.stack.pop();\n              this.stack.push(0, dy);\n              break;\n            }\n            error = this.executeCommand(1, COMMAND_MAP.vmoveto);\n            break;\n          case 5:\n            error = this.executeCommand(2, COMMAND_MAP.rlineto);\n            break;\n          case 6:\n            error = this.executeCommand(1, COMMAND_MAP.hlineto);\n            break;\n          case 7:\n            error = this.executeCommand(1, COMMAND_MAP.vlineto);\n            break;\n          case 8:\n            error = this.executeCommand(6, COMMAND_MAP.rrcurveto);\n            break;\n          case 9:\n            this.stack = [];\n            break;\n          case 10:\n            if (this.stack.length < 1) {\n              error = true;\n              break;\n            }\n            subrNumber = this.stack.pop();\n            if (!subrs[subrNumber]) {\n              error = true;\n              break;\n            }\n            error = this.convert(subrs[subrNumber], subrs, seacAnalysisEnabled);\n            break;\n          case 11:\n            return error;\n          case 13:\n            if (this.stack.length < 2) {\n              error = true;\n              break;\n            }\n            wx = this.stack.pop();\n            sbx = this.stack.pop();\n            this.lsb = sbx;\n            this.width = wx;\n            this.stack.push(wx, sbx);\n            error = this.executeCommand(2, COMMAND_MAP.hmoveto);\n            break;\n          case 14:\n            this.output.push(COMMAND_MAP.endchar[0]);\n            break;\n          case 21:\n            if (this.flexing) {\n              break;\n            }\n            error = this.executeCommand(2, COMMAND_MAP.rmoveto);\n            break;\n          case 22:\n            if (this.flexing) {\n              this.stack.push(0);\n              break;\n            }\n            error = this.executeCommand(1, COMMAND_MAP.hmoveto);\n            break;\n          case 30:\n            error = this.executeCommand(4, COMMAND_MAP.vhcurveto);\n            break;\n          case 31:\n            error = this.executeCommand(4, COMMAND_MAP.hvcurveto);\n            break;\n          case (12 << 8) + 0:\n            this.stack = [];\n            break;\n          case (12 << 8) + 1:\n            if (!HINTING_ENABLED) {\n              this.stack = [];\n              break;\n            }\n            error = this.executeCommand(2, COMMAND_MAP.vstem);\n            break;\n          case (12 << 8) + 2:\n            if (!HINTING_ENABLED) {\n              this.stack = [];\n              break;\n            }\n            error = this.executeCommand(2, COMMAND_MAP.hstem);\n            break;\n          case (12 << 8) + 6:\n            if (seacAnalysisEnabled) {\n              const asb = this.stack.at(-5);\n              this.seac = this.stack.splice(-4, 4);\n              this.seac[0] += this.lsb - asb;\n              error = this.executeCommand(0, COMMAND_MAP.endchar);\n            } else {\n              error = this.executeCommand(4, COMMAND_MAP.endchar);\n            }\n            break;\n          case (12 << 8) + 7:\n            if (this.stack.length < 4) {\n              error = true;\n              break;\n            }\n            this.stack.pop();\n            wx = this.stack.pop();\n            const sby = this.stack.pop();\n            sbx = this.stack.pop();\n            this.lsb = sbx;\n            this.width = wx;\n            this.stack.push(wx, sbx, sby);\n            error = this.executeCommand(3, COMMAND_MAP.rmoveto);\n            break;\n          case (12 << 8) + 12:\n            if (this.stack.length < 2) {\n              error = true;\n              break;\n            }\n            const num2 = this.stack.pop();\n            const num1 = this.stack.pop();\n            this.stack.push(num1 / num2);\n            break;\n          case (12 << 8) + 16:\n            if (this.stack.length < 2) {\n              error = true;\n              break;\n            }\n            subrNumber = this.stack.pop();\n            const numArgs = this.stack.pop();\n            if (subrNumber === 0 && numArgs === 3) {\n              const flexArgs = this.stack.splice(-17, 17);\n              this.stack.push(flexArgs[2] + flexArgs[0], flexArgs[3] + flexArgs[1], flexArgs[4], flexArgs[5], flexArgs[6], flexArgs[7], flexArgs[8], flexArgs[9], flexArgs[10], flexArgs[11], flexArgs[12], flexArgs[13], flexArgs[14]);\n              error = this.executeCommand(13, COMMAND_MAP.flex, true);\n              this.flexing = false;\n              this.stack.push(flexArgs[15], flexArgs[16]);\n            } else if (subrNumber === 1 && numArgs === 0) {\n              this.flexing = true;\n            }\n            break;\n          case (12 << 8) + 17:\n            break;\n          case (12 << 8) + 33:\n            this.stack = [];\n            break;\n          default:\n            warn('Unknown type 1 charstring command of \"' + value + '\"');\n            break;\n        }\n        if (error) {\n          break;\n        }\n        continue;\n      } else if (value <= 246) {\n        value -= 139;\n      } else if (value <= 250) {\n        value = (value - 247) * 256 + encoded[++i] + 108;\n      } else if (value <= 254) {\n        value = -((value - 251) * 256) - encoded[++i] - 108;\n      } else {\n        value = (encoded[++i] & 0xff) << 24 | (encoded[++i] & 0xff) << 16 | (encoded[++i] & 0xff) << 8 | (encoded[++i] & 0xff) << 0;\n      }\n      this.stack.push(value);\n    }\n    return error;\n  }\n  executeCommand(howManyArgs, command, keepStack) {\n    const stackLength = this.stack.length;\n    if (howManyArgs > stackLength) {\n      return true;\n    }\n    const start = stackLength - howManyArgs;\n    for (let i = start; i < stackLength; i++) {\n      let value = this.stack[i];\n      if (Number.isInteger(value)) {\n        this.output.push(28, value >> 8 & 0xff, value & 0xff);\n      } else {\n        value = 65536 * value | 0;\n        this.output.push(255, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);\n      }\n    }\n    this.output.push(...command);\n    if (keepStack) {\n      this.stack.splice(start, howManyArgs);\n    } else {\n      this.stack.length = 0;\n    }\n    return false;\n  }\n}\nconst EEXEC_ENCRYPT_KEY = 55665;\nconst CHAR_STRS_ENCRYPT_KEY = 4330;\nfunction isHexDigit(code) {\n  return code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102;\n}\nfunction decrypt(data, key, discardNumber) {\n  if (discardNumber >= data.length) {\n    return new Uint8Array(0);\n  }\n  const c1 = 52845,\n    c2 = 22719;\n  let r = key | 0,\n    i,\n    j;\n  for (i = 0; i < discardNumber; i++) {\n    r = (data[i] + r) * c1 + c2 & (1 << 16) - 1;\n  }\n  const count = data.length - discardNumber;\n  const decrypted = new Uint8Array(count);\n  for (i = discardNumber, j = 0; j < count; i++, j++) {\n    const value = data[i];\n    decrypted[j] = value ^ r >> 8;\n    r = (value + r) * c1 + c2 & (1 << 16) - 1;\n  }\n  return decrypted;\n}\nfunction decryptAscii(data, key, discardNumber) {\n  const c1 = 52845,\n    c2 = 22719;\n  let r = key | 0;\n  const count = data.length,\n    maybeLength = count >>> 1;\n  const decrypted = new Uint8Array(maybeLength);\n  let i, j;\n  for (i = 0, j = 0; i < count; i++) {\n    const digit1 = data[i];\n    if (!isHexDigit(digit1)) {\n      continue;\n    }\n    i++;\n    let digit2;\n    while (i < count && !isHexDigit(digit2 = data[i])) {\n      i++;\n    }\n    if (i < count) {\n      const value = parseInt(String.fromCharCode(digit1, digit2), 16);\n      decrypted[j++] = value ^ r >> 8;\n      r = (value + r) * c1 + c2 & (1 << 16) - 1;\n    }\n  }\n  return decrypted.slice(discardNumber, j);\n}\nfunction isSpecial(c) {\n  return c === 0x2f || c === 0x5b || c === 0x5d || c === 0x7b || c === 0x7d || c === 0x28 || c === 0x29;\n}\nclass Type1Parser {\n  constructor(stream, encrypted, seacAnalysisEnabled) {\n    if (encrypted) {\n      const data = stream.getBytes();\n      const isBinary = !((isHexDigit(data[0]) || isWhiteSpace(data[0])) && isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3]) && isHexDigit(data[4]) && isHexDigit(data[5]) && isHexDigit(data[6]) && isHexDigit(data[7]));\n      stream = new Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) : decryptAscii(data, EEXEC_ENCRYPT_KEY, 4));\n    }\n    this.seacAnalysisEnabled = !!seacAnalysisEnabled;\n    this.stream = stream;\n    this.nextChar();\n  }\n  readNumberArray() {\n    this.getToken();\n    const array = [];\n    while (true) {\n      const token = this.getToken();\n      if (token === null || token === \"]\" || token === \"}\") {\n        break;\n      }\n      array.push(parseFloat(token || 0));\n    }\n    return array;\n  }\n  readNumber() {\n    const token = this.getToken();\n    return parseFloat(token || 0);\n  }\n  readInt() {\n    const token = this.getToken();\n    return parseInt(token || 0, 10) | 0;\n  }\n  readBoolean() {\n    const token = this.getToken();\n    return token === \"true\" ? 1 : 0;\n  }\n  nextChar() {\n    return this.currentChar = this.stream.getByte();\n  }\n  prevChar() {\n    this.stream.skip(-2);\n    return this.currentChar = this.stream.getByte();\n  }\n  getToken() {\n    let comment = false;\n    let ch = this.currentChar;\n    while (true) {\n      if (ch === -1) {\n        return null;\n      }\n      if (comment) {\n        if (ch === 0x0a || ch === 0x0d) {\n          comment = false;\n        }\n      } else if (ch === 0x25) {\n        comment = true;\n      } else if (!isWhiteSpace(ch)) {\n        break;\n      }\n      ch = this.nextChar();\n    }\n    if (isSpecial(ch)) {\n      this.nextChar();\n      return String.fromCharCode(ch);\n    }\n    let token = \"\";\n    do {\n      token += String.fromCharCode(ch);\n      ch = this.nextChar();\n    } while (ch >= 0 && !isWhiteSpace(ch) && !isSpecial(ch));\n    return token;\n  }\n  readCharStrings(bytes, lenIV) {\n    if (lenIV === -1) {\n      return bytes;\n    }\n    return decrypt(bytes, CHAR_STRS_ENCRYPT_KEY, lenIV);\n  }\n  extractFontProgram(properties) {\n    const stream = this.stream;\n    const subrs = [],\n      charstrings = [];\n    const privateData = Object.create(null);\n    privateData.lenIV = 4;\n    const program = {\n      subrs: [],\n      charstrings: [],\n      properties: {\n        privateData\n      }\n    };\n    let token, length, data, lenIV;\n    while ((token = this.getToken()) !== null) {\n      if (token !== \"/\") {\n        continue;\n      }\n      token = this.getToken();\n      switch (token) {\n        case \"CharStrings\":\n          this.getToken();\n          this.getToken();\n          this.getToken();\n          this.getToken();\n          while (true) {\n            token = this.getToken();\n            if (token === null || token === \"end\") {\n              break;\n            }\n            if (token !== \"/\") {\n              continue;\n            }\n            const glyph = this.getToken();\n            length = this.readInt();\n            this.getToken();\n            data = length > 0 ? stream.getBytes(length) : new Uint8Array(0);\n            lenIV = program.properties.privateData.lenIV;\n            const encoded = this.readCharStrings(data, lenIV);\n            this.nextChar();\n            token = this.getToken();\n            if (token === \"noaccess\") {\n              this.getToken();\n            } else if (token === \"/\") {\n              this.prevChar();\n            }\n            charstrings.push({\n              glyph,\n              encoded\n            });\n          }\n          break;\n        case \"Subrs\":\n          this.readInt();\n          this.getToken();\n          while (this.getToken() === \"dup\") {\n            const index = this.readInt();\n            length = this.readInt();\n            this.getToken();\n            data = length > 0 ? stream.getBytes(length) : new Uint8Array(0);\n            lenIV = program.properties.privateData.lenIV;\n            const encoded = this.readCharStrings(data, lenIV);\n            this.nextChar();\n            token = this.getToken();\n            if (token === \"noaccess\") {\n              this.getToken();\n            }\n            subrs[index] = encoded;\n          }\n          break;\n        case \"BlueValues\":\n        case \"OtherBlues\":\n        case \"FamilyBlues\":\n        case \"FamilyOtherBlues\":\n          const blueArray = this.readNumberArray();\n          if (blueArray.length > 0 && blueArray.length % 2 === 0 && HINTING_ENABLED) {\n            program.properties.privateData[token] = blueArray;\n          }\n          break;\n        case \"StemSnapH\":\n        case \"StemSnapV\":\n          program.properties.privateData[token] = this.readNumberArray();\n          break;\n        case \"StdHW\":\n        case \"StdVW\":\n          program.properties.privateData[token] = this.readNumberArray()[0];\n          break;\n        case \"BlueShift\":\n        case \"lenIV\":\n        case \"BlueFuzz\":\n        case \"BlueScale\":\n        case \"LanguageGroup\":\n          program.properties.privateData[token] = this.readNumber();\n          break;\n        case \"ExpansionFactor\":\n          program.properties.privateData[token] = this.readNumber() || 0.06;\n          break;\n        case \"ForceBold\":\n          program.properties.privateData[token] = this.readBoolean();\n          break;\n      }\n    }\n    for (const {\n      encoded,\n      glyph\n    } of charstrings) {\n      const charString = new Type1CharString();\n      const error = charString.convert(encoded, subrs, this.seacAnalysisEnabled);\n      let output = charString.output;\n      if (error) {\n        output = [14];\n      }\n      const charStringObject = {\n        glyphName: glyph,\n        charstring: output,\n        width: charString.width,\n        lsb: charString.lsb,\n        seac: charString.seac\n      };\n      if (glyph === \".notdef\") {\n        program.charstrings.unshift(charStringObject);\n      } else {\n        program.charstrings.push(charStringObject);\n      }\n      if (properties.builtInEncoding) {\n        const index = properties.builtInEncoding.indexOf(glyph);\n        if (index > -1 && properties.widths[index] === undefined && index >= properties.firstChar && index <= properties.lastChar) {\n          properties.widths[index] = charString.width;\n        }\n      }\n    }\n    return program;\n  }\n  extractFontHeader(properties) {\n    let token;\n    while ((token = this.getToken()) !== null) {\n      if (token !== \"/\") {\n        continue;\n      }\n      token = this.getToken();\n      switch (token) {\n        case \"FontMatrix\":\n          const matrix = this.readNumberArray();\n          properties.fontMatrix = matrix;\n          break;\n        case \"Encoding\":\n          const encodingArg = this.getToken();\n          let encoding;\n          if (!/^\\d+$/.test(encodingArg)) {\n            encoding = getEncoding(encodingArg);\n          } else {\n            encoding = [];\n            const size = parseInt(encodingArg, 10) | 0;\n            this.getToken();\n            for (let j = 0; j < size; j++) {\n              token = this.getToken();\n              while (token !== \"dup\" && token !== \"def\") {\n                token = this.getToken();\n                if (token === null) {\n                  return;\n                }\n              }\n              if (token === \"def\") {\n                break;\n              }\n              const index = this.readInt();\n              this.getToken();\n              const glyph = this.getToken();\n              encoding[index] = glyph;\n              this.getToken();\n            }\n          }\n          properties.builtInEncoding = encoding;\n          break;\n        case \"FontBBox\":\n          const fontBBox = this.readNumberArray();\n          properties.ascent = Math.max(fontBBox[3], fontBBox[1]);\n          properties.descent = Math.min(fontBBox[1], fontBBox[3]);\n          properties.ascentScaled = true;\n          break;\n      }\n    }\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/type1_font.js\n\n\n\n\n\n\nfunction findBlock(streamBytes, signature, startIndex) {\n  const streamBytesLength = streamBytes.length;\n  const signatureLength = signature.length;\n  const scanLength = streamBytesLength - signatureLength;\n  let i = startIndex,\n    found = false;\n  while (i < scanLength) {\n    let j = 0;\n    while (j < signatureLength && streamBytes[i + j] === signature[j]) {\n      j++;\n    }\n    if (j >= signatureLength) {\n      i += j;\n      while (i < streamBytesLength && isWhiteSpace(streamBytes[i])) {\n        i++;\n      }\n      found = true;\n      break;\n    }\n    i++;\n  }\n  return {\n    found,\n    length: i\n  };\n}\nfunction getHeaderBlock(stream, suggestedLength) {\n  const EEXEC_SIGNATURE = [0x65, 0x65, 0x78, 0x65, 0x63];\n  const streamStartPos = stream.pos;\n  let headerBytes, headerBytesLength, block;\n  try {\n    headerBytes = stream.getBytes(suggestedLength);\n    headerBytesLength = headerBytes.length;\n  } catch {}\n  if (headerBytesLength === suggestedLength) {\n    block = findBlock(headerBytes, EEXEC_SIGNATURE, suggestedLength - 2 * EEXEC_SIGNATURE.length);\n    if (block.found && block.length === suggestedLength) {\n      return {\n        stream: new Stream(headerBytes),\n        length: suggestedLength\n      };\n    }\n  }\n  warn('Invalid \"Length1\" property in Type1 font -- trying to recover.');\n  stream.pos = streamStartPos;\n  const SCAN_BLOCK_LENGTH = 2048;\n  let actualLength;\n  while (true) {\n    const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH);\n    block = findBlock(scanBytes, EEXEC_SIGNATURE, 0);\n    if (block.length === 0) {\n      break;\n    }\n    stream.pos += block.length;\n    if (block.found) {\n      actualLength = stream.pos - streamStartPos;\n      break;\n    }\n  }\n  stream.pos = streamStartPos;\n  if (actualLength) {\n    return {\n      stream: new Stream(stream.getBytes(actualLength)),\n      length: actualLength\n    };\n  }\n  warn('Unable to recover \"Length1\" property in Type1 font -- using as is.');\n  return {\n    stream: new Stream(stream.getBytes(suggestedLength)),\n    length: suggestedLength\n  };\n}\nfunction getEexecBlock(stream, suggestedLength) {\n  const eexecBytes = stream.getBytes();\n  if (eexecBytes.length === 0) {\n    throw new FormatError(\"getEexecBlock - no font program found.\");\n  }\n  return {\n    stream: new Stream(eexecBytes),\n    length: eexecBytes.length\n  };\n}\nclass Type1Font {\n  constructor(name, file, properties) {\n    const PFB_HEADER_SIZE = 6;\n    let headerBlockLength = properties.length1;\n    let eexecBlockLength = properties.length2;\n    let pfbHeader = file.peekBytes(PFB_HEADER_SIZE);\n    const pfbHeaderPresent = pfbHeader[0] === 0x80 && pfbHeader[1] === 0x01;\n    if (pfbHeaderPresent) {\n      file.skip(PFB_HEADER_SIZE);\n      headerBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2];\n    }\n    const headerBlock = getHeaderBlock(file, headerBlockLength);\n    const headerBlockParser = new Type1Parser(headerBlock.stream, false, SEAC_ANALYSIS_ENABLED);\n    headerBlockParser.extractFontHeader(properties);\n    if (pfbHeaderPresent) {\n      pfbHeader = file.getBytes(PFB_HEADER_SIZE);\n      eexecBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2];\n    }\n    const eexecBlock = getEexecBlock(file, eexecBlockLength);\n    const eexecBlockParser = new Type1Parser(eexecBlock.stream, true, SEAC_ANALYSIS_ENABLED);\n    const data = eexecBlockParser.extractFontProgram(properties);\n    for (const key in data.properties) {\n      properties[key] = data.properties[key];\n    }\n    const charstrings = data.charstrings;\n    const type2Charstrings = this.getType2Charstrings(charstrings);\n    const subrs = this.getType2Subrs(data.subrs);\n    this.charstrings = charstrings;\n    this.data = this.wrap(name, type2Charstrings, this.charstrings, subrs, properties);\n    this.seacs = this.getSeacs(data.charstrings);\n  }\n  get numGlyphs() {\n    return this.charstrings.length + 1;\n  }\n  getCharset() {\n    const charset = [\".notdef\"];\n    for (const {\n      glyphName\n    } of this.charstrings) {\n      charset.push(glyphName);\n    }\n    return charset;\n  }\n  getGlyphMapping(properties) {\n    const charstrings = this.charstrings;\n    if (properties.composite) {\n      const charCodeToGlyphId = Object.create(null);\n      for (let glyphId = 0, charstringsLen = charstrings.length; glyphId < charstringsLen; glyphId++) {\n        const charCode = properties.cMap.charCodeOf(glyphId);\n        charCodeToGlyphId[charCode] = glyphId + 1;\n      }\n      return charCodeToGlyphId;\n    }\n    const glyphNames = [\".notdef\"];\n    let builtInEncoding, glyphId;\n    for (glyphId = 0; glyphId < charstrings.length; glyphId++) {\n      glyphNames.push(charstrings[glyphId].glyphName);\n    }\n    const encoding = properties.builtInEncoding;\n    if (encoding) {\n      builtInEncoding = Object.create(null);\n      for (const charCode in encoding) {\n        glyphId = glyphNames.indexOf(encoding[charCode]);\n        if (glyphId >= 0) {\n          builtInEncoding[charCode] = glyphId;\n        }\n      }\n    }\n    return type1FontGlyphMapping(properties, builtInEncoding, glyphNames);\n  }\n  hasGlyphId(id) {\n    if (id < 0 || id >= this.numGlyphs) {\n      return false;\n    }\n    if (id === 0) {\n      return true;\n    }\n    const glyph = this.charstrings[id - 1];\n    return glyph.charstring.length > 0;\n  }\n  getSeacs(charstrings) {\n    const seacMap = [];\n    for (let i = 0, ii = charstrings.length; i < ii; i++) {\n      const charstring = charstrings[i];\n      if (charstring.seac) {\n        seacMap[i + 1] = charstring.seac;\n      }\n    }\n    return seacMap;\n  }\n  getType2Charstrings(type1Charstrings) {\n    const type2Charstrings = [];\n    for (const type1Charstring of type1Charstrings) {\n      type2Charstrings.push(type1Charstring.charstring);\n    }\n    return type2Charstrings;\n  }\n  getType2Subrs(type1Subrs) {\n    let bias = 0;\n    const count = type1Subrs.length;\n    if (count < 1133) {\n      bias = 107;\n    } else if (count < 33769) {\n      bias = 1131;\n    } else {\n      bias = 32768;\n    }\n    const type2Subrs = [];\n    let i;\n    for (i = 0; i < bias; i++) {\n      type2Subrs.push([0x0b]);\n    }\n    for (i = 0; i < count; i++) {\n      type2Subrs.push(type1Subrs[i]);\n    }\n    return type2Subrs;\n  }\n  wrap(name, glyphs, charstrings, subrs, properties) {\n    const cff = new CFF();\n    cff.header = new CFFHeader(1, 0, 4, 4);\n    cff.names = [name];\n    const topDict = new CFFTopDict();\n    topDict.setByName(\"version\", 391);\n    topDict.setByName(\"Notice\", 392);\n    topDict.setByName(\"FullName\", 393);\n    topDict.setByName(\"FamilyName\", 394);\n    topDict.setByName(\"Weight\", 395);\n    topDict.setByName(\"Encoding\", null);\n    topDict.setByName(\"FontMatrix\", properties.fontMatrix);\n    topDict.setByName(\"FontBBox\", properties.bbox);\n    topDict.setByName(\"charset\", null);\n    topDict.setByName(\"CharStrings\", null);\n    topDict.setByName(\"Private\", null);\n    cff.topDict = topDict;\n    const strings = new CFFStrings();\n    strings.add(\"Version 0.11\");\n    strings.add(\"See original notice\");\n    strings.add(name);\n    strings.add(name);\n    strings.add(\"Medium\");\n    cff.strings = strings;\n    cff.globalSubrIndex = new CFFIndex();\n    const count = glyphs.length;\n    const charsetArray = [\".notdef\"];\n    let i, ii;\n    for (i = 0; i < count; i++) {\n      const glyphName = charstrings[i].glyphName;\n      const index = CFFStandardStrings.indexOf(glyphName);\n      if (index === -1) {\n        strings.add(glyphName);\n      }\n      charsetArray.push(glyphName);\n    }\n    cff.charset = new CFFCharset(false, 0, charsetArray);\n    const charStringsIndex = new CFFIndex();\n    charStringsIndex.add([0x8b, 0x0e]);\n    for (i = 0; i < count; i++) {\n      charStringsIndex.add(glyphs[i]);\n    }\n    cff.charStrings = charStringsIndex;\n    const privateDict = new CFFPrivateDict();\n    privateDict.setByName(\"Subrs\", null);\n    const fields = [\"BlueValues\", \"OtherBlues\", \"FamilyBlues\", \"FamilyOtherBlues\", \"StemSnapH\", \"StemSnapV\", \"BlueShift\", \"BlueFuzz\", \"BlueScale\", \"LanguageGroup\", \"ExpansionFactor\", \"ForceBold\", \"StdHW\", \"StdVW\"];\n    for (i = 0, ii = fields.length; i < ii; i++) {\n      const field = fields[i];\n      if (!(field in properties.privateData)) {\n        continue;\n      }\n      const value = properties.privateData[field];\n      if (Array.isArray(value)) {\n        for (let j = value.length - 1; j > 0; j--) {\n          value[j] -= value[j - 1];\n        }\n      }\n      privateDict.setByName(field, value);\n    }\n    cff.topDict.privateDict = privateDict;\n    const subrIndex = new CFFIndex();\n    for (i = 0, ii = subrs.length; i < ii; i++) {\n      subrIndex.add(subrs[i]);\n    }\n    privateDict.subrsIndex = subrIndex;\n    const compiler = new CFFCompiler(cff);\n    return compiler.compile();\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/fonts.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst PRIVATE_USE_AREAS = [[0xe000, 0xf8ff], [0x100000, 0x10fffd]];\nconst PDF_GLYPH_SPACE_UNITS = 1000;\nconst EXPORT_DATA_PROPERTIES = [\"ascent\", \"bbox\", \"black\", \"bold\", \"charProcOperatorList\", \"composite\", \"cssFontInfo\", \"data\", \"defaultVMetrics\", \"defaultWidth\", \"descent\", \"fallbackName\", \"fontMatrix\", \"isInvalidPDFjsFont\", \"isType3Font\", \"italic\", \"loadedName\", \"mimetype\", \"missingFile\", \"name\", \"remeasure\", \"subtype\", \"systemFontInfo\", \"type\", \"vertical\"];\nconst EXPORT_DATA_EXTRA_PROPERTIES = [\"cMap\", \"defaultEncoding\", \"differences\", \"isMonospace\", \"isSerifFont\", \"isSymbolicFont\", \"seacMap\", \"toFontChar\", \"toUnicode\", \"vmetrics\", \"widths\"];\nfunction adjustWidths(properties) {\n  if (!properties.fontMatrix) {\n    return;\n  }\n  if (properties.fontMatrix[0] === FONT_IDENTITY_MATRIX[0]) {\n    return;\n  }\n  const scale = 0.001 / properties.fontMatrix[0];\n  const glyphsWidths = properties.widths;\n  for (const glyph in glyphsWidths) {\n    glyphsWidths[glyph] *= scale;\n  }\n  properties.defaultWidth *= scale;\n}\nfunction adjustTrueTypeToUnicode(properties, isSymbolicFont, nameRecords) {\n  if (properties.isInternalFont) {\n    return;\n  }\n  if (properties.hasIncludedToUnicodeMap) {\n    return;\n  }\n  if (properties.hasEncoding) {\n    return;\n  }\n  if (properties.toUnicode instanceof IdentityToUnicodeMap) {\n    return;\n  }\n  if (!isSymbolicFont) {\n    return;\n  }\n  if (nameRecords.length === 0) {\n    return;\n  }\n  if (properties.defaultEncoding === WinAnsiEncoding) {\n    return;\n  }\n  for (const r of nameRecords) {\n    if (!isWinNameRecord(r)) {\n      return;\n    }\n  }\n  const encoding = WinAnsiEncoding;\n  const toUnicode = [],\n    glyphsUnicodeMap = getGlyphsUnicode();\n  for (const charCode in encoding) {\n    const glyphName = encoding[charCode];\n    if (glyphName === \"\") {\n      continue;\n    }\n    const unicode = glyphsUnicodeMap[glyphName];\n    if (unicode === undefined) {\n      continue;\n    }\n    toUnicode[charCode] = String.fromCharCode(unicode);\n  }\n  if (toUnicode.length > 0) {\n    properties.toUnicode.amend(toUnicode);\n  }\n}\nfunction adjustType1ToUnicode(properties, builtInEncoding) {\n  if (properties.isInternalFont) {\n    return;\n  }\n  if (properties.hasIncludedToUnicodeMap) {\n    return;\n  }\n  if (builtInEncoding === properties.defaultEncoding) {\n    return;\n  }\n  if (properties.toUnicode instanceof IdentityToUnicodeMap) {\n    return;\n  }\n  const toUnicode = [],\n    glyphsUnicodeMap = getGlyphsUnicode();\n  for (const charCode in builtInEncoding) {\n    if (properties.hasEncoding) {\n      if (properties.baseEncodingName || properties.differences[charCode] !== undefined) {\n        continue;\n      }\n    }\n    const glyphName = builtInEncoding[charCode];\n    const unicode = getUnicodeForGlyph(glyphName, glyphsUnicodeMap);\n    if (unicode !== -1) {\n      toUnicode[charCode] = String.fromCharCode(unicode);\n    }\n  }\n  if (toUnicode.length > 0) {\n    properties.toUnicode.amend(toUnicode);\n  }\n}\nfunction amendFallbackToUnicode(properties) {\n  if (!properties.fallbackToUnicode) {\n    return;\n  }\n  if (properties.toUnicode instanceof IdentityToUnicodeMap) {\n    return;\n  }\n  const toUnicode = [];\n  for (const charCode in properties.fallbackToUnicode) {\n    if (properties.toUnicode.has(charCode)) {\n      continue;\n    }\n    toUnicode[charCode] = properties.fallbackToUnicode[charCode];\n  }\n  if (toUnicode.length > 0) {\n    properties.toUnicode.amend(toUnicode);\n  }\n}\nclass fonts_Glyph {\n  constructor(originalCharCode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) {\n    this.originalCharCode = originalCharCode;\n    this.fontChar = fontChar;\n    this.unicode = unicode;\n    this.accent = accent;\n    this.width = width;\n    this.vmetric = vmetric;\n    this.operatorListId = operatorListId;\n    this.isSpace = isSpace;\n    this.isInFont = isInFont;\n  }\n  get category() {\n    return shadow(this, \"category\", getCharUnicodeCategory(this.unicode), true);\n  }\n}\nfunction int16(b0, b1) {\n  return (b0 << 8) + b1;\n}\nfunction writeSignedInt16(bytes, index, value) {\n  bytes[index + 1] = value;\n  bytes[index] = value >>> 8;\n}\nfunction signedInt16(b0, b1) {\n  const value = (b0 << 8) + b1;\n  return value & 1 << 15 ? value - 0x10000 : value;\n}\nfunction writeUint32(bytes, index, value) {\n  bytes[index + 3] = value & 0xff;\n  bytes[index + 2] = value >>> 8;\n  bytes[index + 1] = value >>> 16;\n  bytes[index] = value >>> 24;\n}\nfunction int32(b0, b1, b2, b3) {\n  return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;\n}\nfunction string16(value) {\n  return String.fromCharCode(value >> 8 & 0xff, value & 0xff);\n}\nfunction safeString16(value) {\n  if (value > 0x7fff) {\n    value = 0x7fff;\n  } else if (value < -0x8000) {\n    value = -0x8000;\n  }\n  return String.fromCharCode(value >> 8 & 0xff, value & 0xff);\n}\nfunction isTrueTypeFile(file) {\n  const header = file.peekBytes(4);\n  return readUint32(header, 0) === 0x00010000 || bytesToString(header) === \"true\";\n}\nfunction isTrueTypeCollectionFile(file) {\n  const header = file.peekBytes(4);\n  return bytesToString(header) === \"ttcf\";\n}\nfunction isOpenTypeFile(file) {\n  const header = file.peekBytes(4);\n  return bytesToString(header) === \"OTTO\";\n}\nfunction isType1File(file) {\n  const header = file.peekBytes(2);\n  if (header[0] === 0x25 && header[1] === 0x21) {\n    return true;\n  }\n  if (header[0] === 0x80 && header[1] === 0x01) {\n    return true;\n  }\n  return false;\n}\nfunction isCFFFile(file) {\n  const header = file.peekBytes(4);\n  if (header[0] >= 1 && header[3] >= 1 && header[3] <= 4) {\n    return true;\n  }\n  return false;\n}\nfunction getFontFileType(file, {\n  type,\n  subtype,\n  composite\n}) {\n  let fileType, fileSubtype;\n  if (isTrueTypeFile(file) || isTrueTypeCollectionFile(file)) {\n    fileType = composite ? \"CIDFontType2\" : \"TrueType\";\n  } else if (isOpenTypeFile(file)) {\n    fileType = composite ? \"CIDFontType2\" : \"OpenType\";\n  } else if (isType1File(file)) {\n    if (composite) {\n      fileType = \"CIDFontType0\";\n    } else {\n      fileType = type === \"MMType1\" ? \"MMType1\" : \"Type1\";\n    }\n  } else if (isCFFFile(file)) {\n    if (composite) {\n      fileType = \"CIDFontType0\";\n      fileSubtype = \"CIDFontType0C\";\n    } else {\n      fileType = type === \"MMType1\" ? \"MMType1\" : \"Type1\";\n      fileSubtype = \"Type1C\";\n    }\n  } else {\n    warn(\"getFontFileType: Unable to detect correct font file Type/Subtype.\");\n    fileType = type;\n    fileSubtype = subtype;\n  }\n  return [fileType, fileSubtype];\n}\nfunction applyStandardFontGlyphMap(map, glyphMap) {\n  for (const charCode in glyphMap) {\n    map[+charCode] = glyphMap[charCode];\n  }\n}\nfunction buildToFontChar(encoding, glyphsUnicodeMap, differences) {\n  const toFontChar = [];\n  let unicode;\n  for (let i = 0, ii = encoding.length; i < ii; i++) {\n    unicode = getUnicodeForGlyph(encoding[i], glyphsUnicodeMap);\n    if (unicode !== -1) {\n      toFontChar[i] = unicode;\n    }\n  }\n  for (const charCode in differences) {\n    unicode = getUnicodeForGlyph(differences[charCode], glyphsUnicodeMap);\n    if (unicode !== -1) {\n      toFontChar[+charCode] = unicode;\n    }\n  }\n  return toFontChar;\n}\nfunction isMacNameRecord(r) {\n  return r.platform === 1 && r.encoding === 0 && r.language === 0;\n}\nfunction isWinNameRecord(r) {\n  return r.platform === 3 && r.encoding === 1 && r.language === 0x409;\n}\nfunction convertCidString(charCode, cid, shouldThrow = false) {\n  switch (cid.length) {\n    case 1:\n      return cid.charCodeAt(0);\n    case 2:\n      return cid.charCodeAt(0) << 8 | cid.charCodeAt(1);\n  }\n  const msg = `Unsupported CID string (charCode ${charCode}): \"${cid}\".`;\n  if (shouldThrow) {\n    throw new FormatError(msg);\n  }\n  warn(msg);\n  return cid;\n}\nfunction adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId, toUnicode) {\n  const newMap = Object.create(null);\n  const toUnicodeExtraMap = new Map();\n  const toFontChar = [];\n  const usedGlyphIds = new Set();\n  let privateUseAreaIndex = 0;\n  const privateUseOffetStart = PRIVATE_USE_AREAS[privateUseAreaIndex][0];\n  let nextAvailableFontCharCode = privateUseOffetStart;\n  let privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1];\n  const isInPrivateArea = code => PRIVATE_USE_AREAS[0][0] <= code && code <= PRIVATE_USE_AREAS[0][1] || PRIVATE_USE_AREAS[1][0] <= code && code <= PRIVATE_USE_AREAS[1][1];\n  for (const originalCharCode in charCodeToGlyphId) {\n    let glyphId = charCodeToGlyphId[originalCharCode];\n    if (!hasGlyph(glyphId)) {\n      continue;\n    }\n    if (nextAvailableFontCharCode > privateUseOffetEnd) {\n      privateUseAreaIndex++;\n      if (privateUseAreaIndex >= PRIVATE_USE_AREAS.length) {\n        warn(\"Ran out of space in font private use area.\");\n        break;\n      }\n      nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0];\n      privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1];\n    }\n    const fontCharCode = nextAvailableFontCharCode++;\n    if (glyphId === 0) {\n      glyphId = newGlyphZeroId;\n    }\n    let unicode = toUnicode.get(originalCharCode);\n    if (typeof unicode === \"string\") {\n      unicode = unicode.codePointAt(0);\n    }\n    if (unicode && !isInPrivateArea(unicode) && !usedGlyphIds.has(glyphId)) {\n      toUnicodeExtraMap.set(unicode, glyphId);\n      usedGlyphIds.add(glyphId);\n    }\n    newMap[fontCharCode] = glyphId;\n    toFontChar[originalCharCode] = fontCharCode;\n  }\n  return {\n    toFontChar,\n    charCodeToGlyphId: newMap,\n    toUnicodeExtraMap,\n    nextAvailableFontCharCode\n  };\n}\nfunction getRanges(glyphs, toUnicodeExtraMap, numGlyphs) {\n  const codes = [];\n  for (const charCode in glyphs) {\n    if (glyphs[charCode] >= numGlyphs) {\n      continue;\n    }\n    codes.push({\n      fontCharCode: charCode | 0,\n      glyphId: glyphs[charCode]\n    });\n  }\n  if (toUnicodeExtraMap) {\n    for (const [unicode, glyphId] of toUnicodeExtraMap) {\n      if (glyphId >= numGlyphs) {\n        continue;\n      }\n      codes.push({\n        fontCharCode: unicode,\n        glyphId\n      });\n    }\n  }\n  if (codes.length === 0) {\n    codes.push({\n      fontCharCode: 0,\n      glyphId: 0\n    });\n  }\n  codes.sort(function fontGetRangesSort(a, b) {\n    return a.fontCharCode - b.fontCharCode;\n  });\n  const ranges = [];\n  const length = codes.length;\n  for (let n = 0; n < length;) {\n    const start = codes[n].fontCharCode;\n    const codeIndices = [codes[n].glyphId];\n    ++n;\n    let end = start;\n    while (n < length && end + 1 === codes[n].fontCharCode) {\n      codeIndices.push(codes[n].glyphId);\n      ++end;\n      ++n;\n      if (end === 0xffff) {\n        break;\n      }\n    }\n    ranges.push([start, end, codeIndices]);\n  }\n  return ranges;\n}\nfunction createCmapTable(glyphs, toUnicodeExtraMap, numGlyphs) {\n  const ranges = getRanges(glyphs, toUnicodeExtraMap, numGlyphs);\n  const numTables = ranges.at(-1)[1] > 0xffff ? 2 : 1;\n  let cmap = \"\\x00\\x00\" + string16(numTables) + \"\\x00\\x03\" + \"\\x00\\x01\" + string32(4 + numTables * 8);\n  let i, ii, j, jj;\n  for (i = ranges.length - 1; i >= 0; --i) {\n    if (ranges[i][0] <= 0xffff) {\n      break;\n    }\n  }\n  const bmpLength = i + 1;\n  if (ranges[i][0] < 0xffff && ranges[i][1] === 0xffff) {\n    ranges[i][1] = 0xfffe;\n  }\n  const trailingRangesCount = ranges[i][1] < 0xffff ? 1 : 0;\n  const segCount = bmpLength + trailingRangesCount;\n  const searchParams = OpenTypeFileBuilder.getSearchParams(segCount, 2);\n  let startCount = \"\";\n  let endCount = \"\";\n  let idDeltas = \"\";\n  let idRangeOffsets = \"\";\n  let glyphsIds = \"\";\n  let bias = 0;\n  let range, start, end, codes;\n  for (i = 0, ii = bmpLength; i < ii; i++) {\n    range = ranges[i];\n    start = range[0];\n    end = range[1];\n    startCount += string16(start);\n    endCount += string16(end);\n    codes = range[2];\n    let contiguous = true;\n    for (j = 1, jj = codes.length; j < jj; ++j) {\n      if (codes[j] !== codes[j - 1] + 1) {\n        contiguous = false;\n        break;\n      }\n    }\n    if (!contiguous) {\n      const offset = (segCount - i) * 2 + bias * 2;\n      bias += end - start + 1;\n      idDeltas += string16(0);\n      idRangeOffsets += string16(offset);\n      for (j = 0, jj = codes.length; j < jj; ++j) {\n        glyphsIds += string16(codes[j]);\n      }\n    } else {\n      const startCode = codes[0];\n      idDeltas += string16(startCode - start & 0xffff);\n      idRangeOffsets += string16(0);\n    }\n  }\n  if (trailingRangesCount > 0) {\n    endCount += \"\\xFF\\xFF\";\n    startCount += \"\\xFF\\xFF\";\n    idDeltas += \"\\x00\\x01\";\n    idRangeOffsets += \"\\x00\\x00\";\n  }\n  const format314 = \"\\x00\\x00\" + string16(2 * segCount) + string16(searchParams.range) + string16(searchParams.entry) + string16(searchParams.rangeShift) + endCount + \"\\x00\\x00\" + startCount + idDeltas + idRangeOffsets + glyphsIds;\n  let format31012 = \"\";\n  let header31012 = \"\";\n  if (numTables > 1) {\n    cmap += \"\\x00\\x03\" + \"\\x00\\x0A\" + string32(4 + numTables * 8 + 4 + format314.length);\n    format31012 = \"\";\n    for (i = 0, ii = ranges.length; i < ii; i++) {\n      range = ranges[i];\n      start = range[0];\n      codes = range[2];\n      let code = codes[0];\n      for (j = 1, jj = codes.length; j < jj; ++j) {\n        if (codes[j] !== codes[j - 1] + 1) {\n          end = range[0] + j - 1;\n          format31012 += string32(start) + string32(end) + string32(code);\n          start = end + 1;\n          code = codes[j];\n        }\n      }\n      format31012 += string32(start) + string32(range[1]) + string32(code);\n    }\n    header31012 = \"\\x00\\x0C\" + \"\\x00\\x00\" + string32(format31012.length + 16) + \"\\x00\\x00\\x00\\x00\" + string32(format31012.length / 12);\n  }\n  return cmap + \"\\x00\\x04\" + string16(format314.length + 4) + format314 + header31012 + format31012;\n}\nfunction validateOS2Table(os2, file) {\n  file.pos = (file.start || 0) + os2.offset;\n  const version = file.getUint16();\n  file.skip(60);\n  const selection = file.getUint16();\n  if (version < 4 && selection & 0x0300) {\n    return false;\n  }\n  const firstChar = file.getUint16();\n  const lastChar = file.getUint16();\n  if (firstChar > lastChar) {\n    return false;\n  }\n  file.skip(6);\n  const usWinAscent = file.getUint16();\n  if (usWinAscent === 0) {\n    return false;\n  }\n  os2.data[8] = os2.data[9] = 0;\n  return true;\n}\nfunction createOS2Table(properties, charstrings, override) {\n  override ||= {\n    unitsPerEm: 0,\n    yMax: 0,\n    yMin: 0,\n    ascent: 0,\n    descent: 0\n  };\n  let ulUnicodeRange1 = 0;\n  let ulUnicodeRange2 = 0;\n  let ulUnicodeRange3 = 0;\n  let ulUnicodeRange4 = 0;\n  let firstCharIndex = null;\n  let lastCharIndex = 0;\n  let position = -1;\n  if (charstrings) {\n    for (let code in charstrings) {\n      code |= 0;\n      if (firstCharIndex > code || !firstCharIndex) {\n        firstCharIndex = code;\n      }\n      if (lastCharIndex < code) {\n        lastCharIndex = code;\n      }\n      position = getUnicodeRangeFor(code, position);\n      if (position < 32) {\n        ulUnicodeRange1 |= 1 << position;\n      } else if (position < 64) {\n        ulUnicodeRange2 |= 1 << position - 32;\n      } else if (position < 96) {\n        ulUnicodeRange3 |= 1 << position - 64;\n      } else if (position < 123) {\n        ulUnicodeRange4 |= 1 << position - 96;\n      } else {\n        throw new FormatError(\"Unicode ranges Bits > 123 are reserved for internal usage\");\n      }\n    }\n    if (lastCharIndex > 0xffff) {\n      lastCharIndex = 0xffff;\n    }\n  } else {\n    firstCharIndex = 0;\n    lastCharIndex = 255;\n  }\n  const bbox = properties.bbox || [0, 0, 0, 0];\n  const unitsPerEm = override.unitsPerEm || 1 / (properties.fontMatrix || FONT_IDENTITY_MATRIX)[0];\n  const scale = properties.ascentScaled ? 1.0 : unitsPerEm / PDF_GLYPH_SPACE_UNITS;\n  const typoAscent = override.ascent || Math.round(scale * (properties.ascent || bbox[3]));\n  let typoDescent = override.descent || Math.round(scale * (properties.descent || bbox[1]));\n  if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) {\n    typoDescent = -typoDescent;\n  }\n  const winAscent = override.yMax || typoAscent;\n  const winDescent = -override.yMin || -typoDescent;\n  return \"\\x00\\x03\" + \"\\x02\\x24\" + \"\\x01\\xF4\" + \"\\x00\\x05\" + \"\\x00\\x00\" + \"\\x02\\x8A\" + \"\\x02\\xBB\" + \"\\x00\\x00\" + \"\\x00\\x8C\" + \"\\x02\\x8A\" + \"\\x02\\xBB\" + \"\\x00\\x00\" + \"\\x01\\xDF\" + \"\\x00\\x31\" + \"\\x01\\x02\" + \"\\x00\\x00\" + \"\\x00\\x00\\x06\" + String.fromCharCode(properties.fixedPitch ? 0x09 : 0x00) + \"\\x00\\x00\\x00\\x00\\x00\\x00\" + string32(ulUnicodeRange1) + string32(ulUnicodeRange2) + string32(ulUnicodeRange3) + string32(ulUnicodeRange4) + \"\\x2A\\x32\\x31\\x2A\" + string16(properties.italicAngle ? 1 : 0) + string16(firstCharIndex || properties.firstChar) + string16(lastCharIndex || properties.lastChar) + string16(typoAscent) + string16(typoDescent) + \"\\x00\\x64\" + string16(winAscent) + string16(winDescent) + \"\\x00\\x00\\x00\\x00\" + \"\\x00\\x00\\x00\\x00\" + string16(properties.xHeight) + string16(properties.capHeight) + string16(0) + string16(firstCharIndex || properties.firstChar) + \"\\x00\\x03\";\n}\nfunction createPostTable(properties) {\n  const angle = Math.floor(properties.italicAngle * 2 ** 16);\n  return \"\\x00\\x03\\x00\\x00\" + string32(angle) + \"\\x00\\x00\" + \"\\x00\\x00\" + string32(properties.fixedPitch ? 1 : 0) + \"\\x00\\x00\\x00\\x00\" + \"\\x00\\x00\\x00\\x00\" + \"\\x00\\x00\\x00\\x00\" + \"\\x00\\x00\\x00\\x00\";\n}\nfunction createPostscriptName(name) {\n  return name.replaceAll(/[^\\x21-\\x7E]|[[\\](){}<>/%]/g, \"\").slice(0, 63);\n}\nfunction createNameTable(name, proto) {\n  if (!proto) {\n    proto = [[], []];\n  }\n  const strings = [proto[0][0] || \"Original licence\", proto[0][1] || name, proto[0][2] || \"Unknown\", proto[0][3] || \"uniqueID\", proto[0][4] || name, proto[0][5] || \"Version 0.11\", proto[0][6] || createPostscriptName(name), proto[0][7] || \"Unknown\", proto[0][8] || \"Unknown\", proto[0][9] || \"Unknown\"];\n  const stringsUnicode = [];\n  let i, ii, j, jj, str;\n  for (i = 0, ii = strings.length; i < ii; i++) {\n    str = proto[1][i] || strings[i];\n    const strBufUnicode = [];\n    for (j = 0, jj = str.length; j < jj; j++) {\n      strBufUnicode.push(string16(str.charCodeAt(j)));\n    }\n    stringsUnicode.push(strBufUnicode.join(\"\"));\n  }\n  const names = [strings, stringsUnicode];\n  const platforms = [\"\\x00\\x01\", \"\\x00\\x03\"];\n  const encodings = [\"\\x00\\x00\", \"\\x00\\x01\"];\n  const languages = [\"\\x00\\x00\", \"\\x04\\x09\"];\n  const namesRecordCount = strings.length * platforms.length;\n  let nameTable = \"\\x00\\x00\" + string16(namesRecordCount) + string16(namesRecordCount * 12 + 6);\n  let strOffset = 0;\n  for (i = 0, ii = platforms.length; i < ii; i++) {\n    const strs = names[i];\n    for (j = 0, jj = strs.length; j < jj; j++) {\n      str = strs[j];\n      const nameRecord = platforms[i] + encodings[i] + languages[i] + string16(j) + string16(str.length) + string16(strOffset);\n      nameTable += nameRecord;\n      strOffset += str.length;\n    }\n  }\n  nameTable += strings.join(\"\") + stringsUnicode.join(\"\");\n  return nameTable;\n}\nclass Font {\n  constructor(name, file, properties) {\n    this.name = name;\n    this.psName = null;\n    this.mimetype = null;\n    this.disableFontFace = false;\n    this.loadedName = properties.loadedName;\n    this.isType3Font = properties.isType3Font;\n    this.missingFile = false;\n    this.cssFontInfo = properties.cssFontInfo;\n    this._charsCache = Object.create(null);\n    this._glyphCache = Object.create(null);\n    let isSerifFont = !!(properties.flags & FontFlags.Serif);\n    if (!isSerifFont && !properties.isSimulatedFlags) {\n      const baseName = name.replaceAll(/[,_]/g, \"-\").split(\"-\", 1)[0],\n        serifFonts = getSerifFonts();\n      for (const namePart of baseName.split(\"+\")) {\n        if (serifFonts[namePart]) {\n          isSerifFont = true;\n          break;\n        }\n      }\n    }\n    this.isSerifFont = isSerifFont;\n    this.isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);\n    this.isMonospace = !!(properties.flags & FontFlags.FixedPitch);\n    let {\n      type,\n      subtype\n    } = properties;\n    this.type = type;\n    this.subtype = subtype;\n    this.systemFontInfo = properties.systemFontInfo;\n    const matches = name.match(/^InvalidPDFjsFont_(.*)_\\d+$/);\n    this.isInvalidPDFjsFont = !!matches;\n    if (this.isInvalidPDFjsFont) {\n      this.fallbackName = matches[1];\n    } else if (this.isMonospace) {\n      this.fallbackName = \"monospace\";\n    } else if (this.isSerifFont) {\n      this.fallbackName = \"serif\";\n    } else {\n      this.fallbackName = \"sans-serif\";\n    }\n    if (this.systemFontInfo?.guessFallback) {\n      this.systemFontInfo.guessFallback = false;\n      this.systemFontInfo.css += `,${this.fallbackName}`;\n    }\n    this.differences = properties.differences;\n    this.widths = properties.widths;\n    this.defaultWidth = properties.defaultWidth;\n    this.composite = properties.composite;\n    this.cMap = properties.cMap;\n    this.capHeight = properties.capHeight / PDF_GLYPH_SPACE_UNITS;\n    this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS;\n    this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS;\n    this.lineHeight = this.ascent - this.descent;\n    this.fontMatrix = properties.fontMatrix;\n    this.bbox = properties.bbox;\n    this.defaultEncoding = properties.defaultEncoding;\n    this.toUnicode = properties.toUnicode;\n    this.toFontChar = [];\n    if (properties.type === \"Type3\") {\n      for (let charCode = 0; charCode < 256; charCode++) {\n        this.toFontChar[charCode] = this.differences[charCode] || properties.defaultEncoding[charCode];\n      }\n      return;\n    }\n    this.cidEncoding = properties.cidEncoding || \"\";\n    this.vertical = !!properties.vertical;\n    if (this.vertical) {\n      this.vmetrics = properties.vmetrics;\n      this.defaultVMetrics = properties.defaultVMetrics;\n    }\n    if (!file || file.isEmpty) {\n      if (file) {\n        warn('Font file is empty in \"' + name + '\" (' + this.loadedName + \")\");\n      }\n      this.fallbackToSystemFont(properties);\n      return;\n    }\n    [type, subtype] = getFontFileType(file, properties);\n    if (type !== this.type || subtype !== this.subtype) {\n      info(\"Inconsistent font file Type/SubType, expected: \" + `${this.type}/${this.subtype} but found: ${type}/${subtype}.`);\n    }\n    let data;\n    try {\n      switch (type) {\n        case \"MMType1\":\n          info(\"MMType1 font (\" + name + \"), falling back to Type1.\");\n        case \"Type1\":\n        case \"CIDFontType0\":\n          this.mimetype = \"font/opentype\";\n          const cff = subtype === \"Type1C\" || subtype === \"CIDFontType0C\" ? new CFFFont(file, properties) : new Type1Font(name, file, properties);\n          adjustWidths(properties);\n          data = this.convert(name, cff, properties);\n          break;\n        case \"OpenType\":\n        case \"TrueType\":\n        case \"CIDFontType2\":\n          this.mimetype = \"font/opentype\";\n          data = this.checkAndRepair(name, file, properties);\n          if (this.isOpenType) {\n            adjustWidths(properties);\n            type = \"OpenType\";\n          }\n          break;\n        default:\n          throw new FormatError(`Font ${type} is not supported`);\n      }\n    } catch (e) {\n      warn(e);\n      this.fallbackToSystemFont(properties);\n      return;\n    }\n    amendFallbackToUnicode(properties);\n    this.data = data;\n    this.type = type;\n    this.subtype = subtype;\n    this.fontMatrix = properties.fontMatrix;\n    this.widths = properties.widths;\n    this.defaultWidth = properties.defaultWidth;\n    this.toUnicode = properties.toUnicode;\n    this.seacMap = properties.seacMap;\n  }\n  get renderer() {\n    const renderer = FontRendererFactory.create(this, SEAC_ANALYSIS_ENABLED);\n    return shadow(this, \"renderer\", renderer);\n  }\n  exportData(extraProperties = false) {\n    const exportDataProperties = extraProperties ? [...EXPORT_DATA_PROPERTIES, ...EXPORT_DATA_EXTRA_PROPERTIES] : EXPORT_DATA_PROPERTIES;\n    const data = Object.create(null);\n    let property, value;\n    for (property of exportDataProperties) {\n      value = this[property];\n      if (value !== undefined) {\n        data[property] = value;\n      }\n    }\n    return data;\n  }\n  fallbackToSystemFont(properties) {\n    this.missingFile = true;\n    const {\n      name,\n      type\n    } = this;\n    let fontName = normalizeFontName(name);\n    const stdFontMap = getStdFontMap(),\n      nonStdFontMap = getNonStdFontMap();\n    const isStandardFont = !!stdFontMap[fontName];\n    const isMappedToStandardFont = !!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]);\n    fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName;\n    const fontBasicMetricsMap = getFontBasicMetrics();\n    const metrics = fontBasicMetricsMap[fontName];\n    if (metrics) {\n      if (isNaN(this.ascent)) {\n        this.ascent = metrics.ascent / PDF_GLYPH_SPACE_UNITS;\n      }\n      if (isNaN(this.descent)) {\n        this.descent = metrics.descent / PDF_GLYPH_SPACE_UNITS;\n      }\n      if (isNaN(this.capHeight)) {\n        this.capHeight = metrics.capHeight / PDF_GLYPH_SPACE_UNITS;\n      }\n    }\n    this.bold = /bold/gi.test(fontName);\n    this.italic = /oblique|italic/gi.test(fontName);\n    this.black = /Black/g.test(name);\n    const isNarrow = /Narrow/g.test(name);\n    this.remeasure = (!isStandardFont || isNarrow) && Object.keys(this.widths).length > 0;\n    if ((isStandardFont || isMappedToStandardFont) && type === \"CIDFontType2\" && this.cidEncoding.startsWith(\"Identity-\")) {\n      const cidToGidMap = properties.cidToGidMap;\n      const map = [];\n      applyStandardFontGlyphMap(map, getGlyphMapForStandardFonts());\n      if (/Arial-?Black/i.test(name)) {\n        applyStandardFontGlyphMap(map, getSupplementalGlyphMapForArialBlack());\n      } else if (/Calibri/i.test(name)) {\n        applyStandardFontGlyphMap(map, getSupplementalGlyphMapForCalibri());\n      }\n      if (cidToGidMap) {\n        for (const charCode in map) {\n          const cid = map[charCode];\n          if (cidToGidMap[cid] !== undefined) {\n            map[+charCode] = cidToGidMap[cid];\n          }\n        }\n        if (cidToGidMap.length !== this.toUnicode.length && properties.hasIncludedToUnicodeMap && this.toUnicode instanceof IdentityToUnicodeMap) {\n          this.toUnicode.forEach(function (charCode, unicodeCharCode) {\n            const cid = map[charCode];\n            if (cidToGidMap[cid] === undefined) {\n              map[+charCode] = unicodeCharCode;\n            }\n          });\n        }\n      }\n      if (!(this.toUnicode instanceof IdentityToUnicodeMap)) {\n        this.toUnicode.forEach(function (charCode, unicodeCharCode) {\n          map[+charCode] = unicodeCharCode;\n        });\n      }\n      this.toFontChar = map;\n      this.toUnicode = new ToUnicodeMap(map);\n    } else if (/Symbol/i.test(fontName)) {\n      this.toFontChar = buildToFontChar(SymbolSetEncoding, getGlyphsUnicode(), this.differences);\n    } else if (/Dingbats/i.test(fontName)) {\n      this.toFontChar = buildToFontChar(ZapfDingbatsEncoding, getDingbatsGlyphsUnicode(), this.differences);\n    } else if (isStandardFont) {\n      const map = buildToFontChar(this.defaultEncoding, getGlyphsUnicode(), this.differences);\n      if (type === \"CIDFontType2\" && !this.cidEncoding.startsWith(\"Identity-\") && !(this.toUnicode instanceof IdentityToUnicodeMap)) {\n        this.toUnicode.forEach(function (charCode, unicodeCharCode) {\n          map[+charCode] = unicodeCharCode;\n        });\n      }\n      this.toFontChar = map;\n    } else {\n      const glyphsUnicodeMap = getGlyphsUnicode();\n      const map = [];\n      this.toUnicode.forEach((charCode, unicodeCharCode) => {\n        if (!this.composite) {\n          const glyphName = this.differences[charCode] || this.defaultEncoding[charCode];\n          const unicode = getUnicodeForGlyph(glyphName, glyphsUnicodeMap);\n          if (unicode !== -1) {\n            unicodeCharCode = unicode;\n          }\n        }\n        map[+charCode] = unicodeCharCode;\n      });\n      if (this.composite && this.toUnicode instanceof IdentityToUnicodeMap) {\n        if (/Tahoma|Verdana/i.test(name)) {\n          applyStandardFontGlyphMap(map, getGlyphMapForStandardFonts());\n        }\n      }\n      this.toFontChar = map;\n    }\n    amendFallbackToUnicode(properties);\n    this.loadedName = fontName.split(\"-\", 1)[0];\n  }\n  checkAndRepair(name, font, properties) {\n    const VALID_TABLES = [\"OS/2\", \"cmap\", \"head\", \"hhea\", \"hmtx\", \"maxp\", \"name\", \"post\", \"loca\", \"glyf\", \"fpgm\", \"prep\", \"cvt \", \"CFF \"];\n    function readTables(file, numTables) {\n      const tables = Object.create(null);\n      tables[\"OS/2\"] = null;\n      tables.cmap = null;\n      tables.head = null;\n      tables.hhea = null;\n      tables.hmtx = null;\n      tables.maxp = null;\n      tables.name = null;\n      tables.post = null;\n      for (let i = 0; i < numTables; i++) {\n        const table = readTableEntry(file);\n        if (!VALID_TABLES.includes(table.tag)) {\n          continue;\n        }\n        if (table.length === 0) {\n          continue;\n        }\n        tables[table.tag] = table;\n      }\n      return tables;\n    }\n    function readTableEntry(file) {\n      const tag = file.getString(4);\n      const checksum = file.getInt32() >>> 0;\n      const offset = file.getInt32() >>> 0;\n      const length = file.getInt32() >>> 0;\n      const previousPosition = file.pos;\n      file.pos = file.start || 0;\n      file.skip(offset);\n      const data = file.getBytes(length);\n      file.pos = previousPosition;\n      if (tag === \"head\") {\n        data[8] = data[9] = data[10] = data[11] = 0;\n        data[17] |= 0x20;\n      }\n      return {\n        tag,\n        checksum,\n        length,\n        offset,\n        data\n      };\n    }\n    function readOpenTypeHeader(ttf) {\n      return {\n        version: ttf.getString(4),\n        numTables: ttf.getUint16(),\n        searchRange: ttf.getUint16(),\n        entrySelector: ttf.getUint16(),\n        rangeShift: ttf.getUint16()\n      };\n    }\n    function readTrueTypeCollectionHeader(ttc) {\n      const ttcTag = ttc.getString(4);\n      assert(ttcTag === \"ttcf\", \"Must be a TrueType Collection font.\");\n      const majorVersion = ttc.getUint16();\n      const minorVersion = ttc.getUint16();\n      const numFonts = ttc.getInt32() >>> 0;\n      const offsetTable = [];\n      for (let i = 0; i < numFonts; i++) {\n        offsetTable.push(ttc.getInt32() >>> 0);\n      }\n      const header = {\n        ttcTag,\n        majorVersion,\n        minorVersion,\n        numFonts,\n        offsetTable\n      };\n      switch (majorVersion) {\n        case 1:\n          return header;\n        case 2:\n          header.dsigTag = ttc.getInt32() >>> 0;\n          header.dsigLength = ttc.getInt32() >>> 0;\n          header.dsigOffset = ttc.getInt32() >>> 0;\n          return header;\n      }\n      throw new FormatError(`Invalid TrueType Collection majorVersion: ${majorVersion}.`);\n    }\n    function readTrueTypeCollectionData(ttc, fontName) {\n      const {\n        numFonts,\n        offsetTable\n      } = readTrueTypeCollectionHeader(ttc);\n      const fontNameParts = fontName.split(\"+\");\n      let fallbackData;\n      for (let i = 0; i < numFonts; i++) {\n        ttc.pos = (ttc.start || 0) + offsetTable[i];\n        const potentialHeader = readOpenTypeHeader(ttc);\n        const potentialTables = readTables(ttc, potentialHeader.numTables);\n        if (!potentialTables.name) {\n          throw new FormatError('TrueType Collection font must contain a \"name\" table.');\n        }\n        const [nameTable] = readNameTable(potentialTables.name);\n        for (let j = 0, jj = nameTable.length; j < jj; j++) {\n          for (let k = 0, kk = nameTable[j].length; k < kk; k++) {\n            const nameEntry = nameTable[j][k]?.replaceAll(/\\s/g, \"\");\n            if (!nameEntry) {\n              continue;\n            }\n            if (nameEntry === fontName) {\n              return {\n                header: potentialHeader,\n                tables: potentialTables\n              };\n            }\n            if (fontNameParts.length < 2) {\n              continue;\n            }\n            for (const part of fontNameParts) {\n              if (nameEntry === part) {\n                fallbackData = {\n                  name: part,\n                  header: potentialHeader,\n                  tables: potentialTables\n                };\n              }\n            }\n          }\n        }\n      }\n      if (fallbackData) {\n        warn(`TrueType Collection does not contain \"${fontName}\" font, ` + `falling back to \"${fallbackData.name}\" font instead.`);\n        return {\n          header: fallbackData.header,\n          tables: fallbackData.tables\n        };\n      }\n      throw new FormatError(`TrueType Collection does not contain \"${fontName}\" font.`);\n    }\n    function readCmapTable(cmap, file, isSymbolicFont, hasEncoding) {\n      if (!cmap) {\n        warn(\"No cmap table available.\");\n        return {\n          platformId: -1,\n          encodingId: -1,\n          mappings: [],\n          hasShortCmap: false\n        };\n      }\n      let segment;\n      let start = (file.start || 0) + cmap.offset;\n      file.pos = start;\n      file.skip(2);\n      const numTables = file.getUint16();\n      let potentialTable;\n      let canBreak = false;\n      for (let i = 0; i < numTables; i++) {\n        const platformId = file.getUint16();\n        const encodingId = file.getUint16();\n        const offset = file.getInt32() >>> 0;\n        let useTable = false;\n        if (potentialTable?.platformId === platformId && potentialTable?.encodingId === encodingId) {\n          continue;\n        }\n        if (platformId === 0 && (encodingId === 0 || encodingId === 1 || encodingId === 3)) {\n          useTable = true;\n        } else if (platformId === 1 && encodingId === 0) {\n          useTable = true;\n        } else if (platformId === 3 && encodingId === 1 && (hasEncoding || !potentialTable)) {\n          useTable = true;\n          if (!isSymbolicFont) {\n            canBreak = true;\n          }\n        } else if (isSymbolicFont && platformId === 3 && encodingId === 0) {\n          useTable = true;\n          let correctlySorted = true;\n          if (i < numTables - 1) {\n            const nextBytes = file.peekBytes(2),\n              nextPlatformId = int16(nextBytes[0], nextBytes[1]);\n            if (nextPlatformId < platformId) {\n              correctlySorted = false;\n            }\n          }\n          if (correctlySorted) {\n            canBreak = true;\n          }\n        }\n        if (useTable) {\n          potentialTable = {\n            platformId,\n            encodingId,\n            offset\n          };\n        }\n        if (canBreak) {\n          break;\n        }\n      }\n      if (potentialTable) {\n        file.pos = start + potentialTable.offset;\n      }\n      if (!potentialTable || file.peekByte() === -1) {\n        warn(\"Could not find a preferred cmap table.\");\n        return {\n          platformId: -1,\n          encodingId: -1,\n          mappings: [],\n          hasShortCmap: false\n        };\n      }\n      const format = file.getUint16();\n      let hasShortCmap = false;\n      const mappings = [];\n      let j, glyphId;\n      if (format === 0) {\n        file.skip(2 + 2);\n        for (j = 0; j < 256; j++) {\n          const index = file.getByte();\n          if (!index) {\n            continue;\n          }\n          mappings.push({\n            charCode: j,\n            glyphId: index\n          });\n        }\n        hasShortCmap = true;\n      } else if (format === 2) {\n        file.skip(2 + 2);\n        const subHeaderKeys = [];\n        let maxSubHeaderKey = 0;\n        for (let i = 0; i < 256; i++) {\n          const subHeaderKey = file.getUint16() >> 3;\n          subHeaderKeys.push(subHeaderKey);\n          maxSubHeaderKey = Math.max(subHeaderKey, maxSubHeaderKey);\n        }\n        const subHeaders = [];\n        for (let i = 0; i <= maxSubHeaderKey; i++) {\n          subHeaders.push({\n            firstCode: file.getUint16(),\n            entryCount: file.getUint16(),\n            idDelta: signedInt16(file.getByte(), file.getByte()),\n            idRangePos: file.pos + file.getUint16()\n          });\n        }\n        for (let i = 0; i < 256; i++) {\n          if (subHeaderKeys[i] === 0) {\n            file.pos = subHeaders[0].idRangePos + 2 * i;\n            glyphId = file.getUint16();\n            mappings.push({\n              charCode: i,\n              glyphId\n            });\n          } else {\n            const s = subHeaders[subHeaderKeys[i]];\n            for (j = 0; j < s.entryCount; j++) {\n              const charCode = (i << 8) + j + s.firstCode;\n              file.pos = s.idRangePos + 2 * j;\n              glyphId = file.getUint16();\n              if (glyphId !== 0) {\n                glyphId = (glyphId + s.idDelta) % 65536;\n              }\n              mappings.push({\n                charCode,\n                glyphId\n              });\n            }\n          }\n        }\n      } else if (format === 4) {\n        file.skip(2 + 2);\n        const segCount = file.getUint16() >> 1;\n        file.skip(6);\n        const segments = [];\n        let segIndex;\n        for (segIndex = 0; segIndex < segCount; segIndex++) {\n          segments.push({\n            end: file.getUint16()\n          });\n        }\n        file.skip(2);\n        for (segIndex = 0; segIndex < segCount; segIndex++) {\n          segments[segIndex].start = file.getUint16();\n        }\n        for (segIndex = 0; segIndex < segCount; segIndex++) {\n          segments[segIndex].delta = file.getUint16();\n        }\n        let offsetsCount = 0,\n          offsetIndex;\n        for (segIndex = 0; segIndex < segCount; segIndex++) {\n          segment = segments[segIndex];\n          const rangeOffset = file.getUint16();\n          if (!rangeOffset) {\n            segment.offsetIndex = -1;\n            continue;\n          }\n          offsetIndex = (rangeOffset >> 1) - (segCount - segIndex);\n          segment.offsetIndex = offsetIndex;\n          offsetsCount = Math.max(offsetsCount, offsetIndex + segment.end - segment.start + 1);\n        }\n        const offsets = [];\n        for (j = 0; j < offsetsCount; j++) {\n          offsets.push(file.getUint16());\n        }\n        for (segIndex = 0; segIndex < segCount; segIndex++) {\n          segment = segments[segIndex];\n          start = segment.start;\n          const end = segment.end;\n          const delta = segment.delta;\n          offsetIndex = segment.offsetIndex;\n          for (j = start; j <= end; j++) {\n            if (j === 0xffff) {\n              continue;\n            }\n            glyphId = offsetIndex < 0 ? j : offsets[offsetIndex + j - start];\n            glyphId = glyphId + delta & 0xffff;\n            mappings.push({\n              charCode: j,\n              glyphId\n            });\n          }\n        }\n      } else if (format === 6) {\n        file.skip(2 + 2);\n        const firstCode = file.getUint16();\n        const entryCount = file.getUint16();\n        for (j = 0; j < entryCount; j++) {\n          glyphId = file.getUint16();\n          const charCode = firstCode + j;\n          mappings.push({\n            charCode,\n            glyphId\n          });\n        }\n      } else if (format === 12) {\n        file.skip(2 + 4 + 4);\n        const nGroups = file.getInt32() >>> 0;\n        for (j = 0; j < nGroups; j++) {\n          const startCharCode = file.getInt32() >>> 0;\n          const endCharCode = file.getInt32() >>> 0;\n          let glyphCode = file.getInt32() >>> 0;\n          for (let charCode = startCharCode; charCode <= endCharCode; charCode++) {\n            mappings.push({\n              charCode,\n              glyphId: glyphCode++\n            });\n          }\n        }\n      } else {\n        warn(\"cmap table has unsupported format: \" + format);\n        return {\n          platformId: -1,\n          encodingId: -1,\n          mappings: [],\n          hasShortCmap: false\n        };\n      }\n      mappings.sort(function (a, b) {\n        return a.charCode - b.charCode;\n      });\n      for (let i = 1; i < mappings.length; i++) {\n        if (mappings[i - 1].charCode === mappings[i].charCode) {\n          mappings.splice(i, 1);\n          i--;\n        }\n      }\n      return {\n        platformId: potentialTable.platformId,\n        encodingId: potentialTable.encodingId,\n        mappings,\n        hasShortCmap\n      };\n    }\n    function sanitizeMetrics(file, header, metrics, headTable, numGlyphs, dupFirstEntry) {\n      if (!header) {\n        if (metrics) {\n          metrics.data = null;\n        }\n        return;\n      }\n      file.pos = (file.start || 0) + header.offset;\n      file.pos += 4;\n      file.pos += 2;\n      file.pos += 2;\n      file.pos += 2;\n      file.pos += 2;\n      file.pos += 2;\n      file.pos += 2;\n      file.pos += 2;\n      file.pos += 2;\n      file.pos += 2;\n      const caretOffset = file.getUint16();\n      file.pos += 8;\n      file.pos += 2;\n      let numOfMetrics = file.getUint16();\n      if (caretOffset !== 0) {\n        const macStyle = int16(headTable.data[44], headTable.data[45]);\n        if (!(macStyle & 2)) {\n          header.data[22] = 0;\n          header.data[23] = 0;\n        }\n      }\n      if (numOfMetrics > numGlyphs) {\n        info(`The numOfMetrics (${numOfMetrics}) should not be ` + `greater than the numGlyphs (${numGlyphs}).`);\n        numOfMetrics = numGlyphs;\n        header.data[34] = (numOfMetrics & 0xff00) >> 8;\n        header.data[35] = numOfMetrics & 0x00ff;\n      }\n      const numOfSidebearings = numGlyphs - numOfMetrics;\n      const numMissing = numOfSidebearings - (metrics.length - numOfMetrics * 4 >> 1);\n      if (numMissing > 0) {\n        const entries = new Uint8Array(metrics.length + numMissing * 2);\n        entries.set(metrics.data);\n        if (dupFirstEntry) {\n          entries[metrics.length] = metrics.data[2];\n          entries[metrics.length + 1] = metrics.data[3];\n        }\n        metrics.data = entries;\n      }\n    }\n    function sanitizeGlyph(source, sourceStart, sourceEnd, dest, destStart, hintsValid) {\n      const glyphProfile = {\n        length: 0,\n        sizeOfInstructions: 0\n      };\n      if (sourceStart < 0 || sourceStart >= source.length || sourceEnd > source.length || sourceEnd - sourceStart <= 12) {\n        return glyphProfile;\n      }\n      const glyf = source.subarray(sourceStart, sourceEnd);\n      const xMin = signedInt16(glyf[2], glyf[3]);\n      const yMin = signedInt16(glyf[4], glyf[5]);\n      const xMax = signedInt16(glyf[6], glyf[7]);\n      const yMax = signedInt16(glyf[8], glyf[9]);\n      if (xMin > xMax) {\n        writeSignedInt16(glyf, 2, xMax);\n        writeSignedInt16(glyf, 6, xMin);\n      }\n      if (yMin > yMax) {\n        writeSignedInt16(glyf, 4, yMax);\n        writeSignedInt16(glyf, 8, yMin);\n      }\n      const contoursCount = signedInt16(glyf[0], glyf[1]);\n      if (contoursCount < 0) {\n        if (contoursCount < -1) {\n          return glyphProfile;\n        }\n        dest.set(glyf, destStart);\n        glyphProfile.length = glyf.length;\n        return glyphProfile;\n      }\n      let i,\n        j = 10,\n        flagsCount = 0;\n      for (i = 0; i < contoursCount; i++) {\n        const endPoint = glyf[j] << 8 | glyf[j + 1];\n        flagsCount = endPoint + 1;\n        j += 2;\n      }\n      const instructionsStart = j;\n      const instructionsLength = glyf[j] << 8 | glyf[j + 1];\n      glyphProfile.sizeOfInstructions = instructionsLength;\n      j += 2 + instructionsLength;\n      const instructionsEnd = j;\n      let coordinatesLength = 0;\n      for (i = 0; i < flagsCount; i++) {\n        const flag = glyf[j++];\n        if (flag & 0xc0) {\n          glyf[j - 1] = flag & 0x3f;\n        }\n        let xLength = 2;\n        if (flag & 2) {\n          xLength = 1;\n        } else if (flag & 16) {\n          xLength = 0;\n        }\n        let yLength = 2;\n        if (flag & 4) {\n          yLength = 1;\n        } else if (flag & 32) {\n          yLength = 0;\n        }\n        const xyLength = xLength + yLength;\n        coordinatesLength += xyLength;\n        if (flag & 8) {\n          const repeat = glyf[j++];\n          if (repeat === 0) {\n            glyf[j - 1] ^= 8;\n          }\n          i += repeat;\n          coordinatesLength += repeat * xyLength;\n        }\n      }\n      if (coordinatesLength === 0) {\n        return glyphProfile;\n      }\n      let glyphDataLength = j + coordinatesLength;\n      if (glyphDataLength > glyf.length) {\n        return glyphProfile;\n      }\n      if (!hintsValid && instructionsLength > 0) {\n        dest.set(glyf.subarray(0, instructionsStart), destStart);\n        dest.set([0, 0], destStart + instructionsStart);\n        dest.set(glyf.subarray(instructionsEnd, glyphDataLength), destStart + instructionsStart + 2);\n        glyphDataLength -= instructionsLength;\n        if (glyf.length - glyphDataLength > 3) {\n          glyphDataLength = glyphDataLength + 3 & ~3;\n        }\n        glyphProfile.length = glyphDataLength;\n        return glyphProfile;\n      }\n      if (glyf.length - glyphDataLength > 3) {\n        glyphDataLength = glyphDataLength + 3 & ~3;\n        dest.set(glyf.subarray(0, glyphDataLength), destStart);\n        glyphProfile.length = glyphDataLength;\n        return glyphProfile;\n      }\n      dest.set(glyf, destStart);\n      glyphProfile.length = glyf.length;\n      return glyphProfile;\n    }\n    function sanitizeHead(head, numGlyphs, locaLength) {\n      const data = head.data;\n      const version = int32(data[0], data[1], data[2], data[3]);\n      if (version >> 16 !== 1) {\n        info(\"Attempting to fix invalid version in head table: \" + version);\n        data[0] = 0;\n        data[1] = 1;\n        data[2] = 0;\n        data[3] = 0;\n      }\n      const indexToLocFormat = int16(data[50], data[51]);\n      if (indexToLocFormat < 0 || indexToLocFormat > 1) {\n        info(\"Attempting to fix invalid indexToLocFormat in head table: \" + indexToLocFormat);\n        const numGlyphsPlusOne = numGlyphs + 1;\n        if (locaLength === numGlyphsPlusOne << 1) {\n          data[50] = 0;\n          data[51] = 0;\n        } else if (locaLength === numGlyphsPlusOne << 2) {\n          data[50] = 0;\n          data[51] = 1;\n        } else {\n          throw new FormatError(\"Could not fix indexToLocFormat: \" + indexToLocFormat);\n        }\n      }\n    }\n    function sanitizeGlyphLocations(loca, glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions) {\n      let itemSize, itemDecode, itemEncode;\n      if (isGlyphLocationsLong) {\n        itemSize = 4;\n        itemDecode = function fontItemDecodeLong(data, offset) {\n          return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3];\n        };\n        itemEncode = function fontItemEncodeLong(data, offset, value) {\n          data[offset] = value >>> 24 & 0xff;\n          data[offset + 1] = value >> 16 & 0xff;\n          data[offset + 2] = value >> 8 & 0xff;\n          data[offset + 3] = value & 0xff;\n        };\n      } else {\n        itemSize = 2;\n        itemDecode = function fontItemDecode(data, offset) {\n          return data[offset] << 9 | data[offset + 1] << 1;\n        };\n        itemEncode = function fontItemEncode(data, offset, value) {\n          data[offset] = value >> 9 & 0xff;\n          data[offset + 1] = value >> 1 & 0xff;\n        };\n      }\n      const numGlyphsOut = dupFirstEntry ? numGlyphs + 1 : numGlyphs;\n      const locaDataSize = itemSize * (1 + numGlyphsOut);\n      const locaData = new Uint8Array(locaDataSize);\n      locaData.set(loca.data.subarray(0, locaDataSize));\n      loca.data = locaData;\n      const oldGlyfData = glyf.data;\n      const oldGlyfDataLength = oldGlyfData.length;\n      const newGlyfData = new Uint8Array(oldGlyfDataLength);\n      let i, j;\n      const locaEntries = [];\n      for (i = 0, j = 0; i < numGlyphs + 1; i++, j += itemSize) {\n        let offset = itemDecode(locaData, j);\n        if (offset > oldGlyfDataLength) {\n          offset = oldGlyfDataLength;\n        }\n        locaEntries.push({\n          index: i,\n          offset,\n          endOffset: 0\n        });\n      }\n      locaEntries.sort((a, b) => a.offset - b.offset);\n      for (i = 0; i < numGlyphs; i++) {\n        locaEntries[i].endOffset = locaEntries[i + 1].offset;\n      }\n      locaEntries.sort((a, b) => a.index - b.index);\n      for (i = 0; i < numGlyphs; i++) {\n        const {\n          offset,\n          endOffset\n        } = locaEntries[i];\n        if (offset !== 0 || endOffset !== 0) {\n          break;\n        }\n        const nextOffset = locaEntries[i + 1].offset;\n        if (nextOffset === 0) {\n          continue;\n        }\n        locaEntries[i].endOffset = nextOffset;\n        break;\n      }\n      const last = locaEntries.at(-2);\n      if (last.offset !== 0 && last.endOffset === 0) {\n        last.endOffset = oldGlyfDataLength;\n      }\n      const missingGlyphs = Object.create(null);\n      let writeOffset = 0;\n      itemEncode(locaData, 0, writeOffset);\n      for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) {\n        const glyphProfile = sanitizeGlyph(oldGlyfData, locaEntries[i].offset, locaEntries[i].endOffset, newGlyfData, writeOffset, hintsValid);\n        const newLength = glyphProfile.length;\n        if (newLength === 0) {\n          missingGlyphs[i] = true;\n        }\n        if (glyphProfile.sizeOfInstructions > maxSizeOfInstructions) {\n          maxSizeOfInstructions = glyphProfile.sizeOfInstructions;\n        }\n        writeOffset += newLength;\n        itemEncode(locaData, j, writeOffset);\n      }\n      if (writeOffset === 0) {\n        const simpleGlyph = new Uint8Array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0]);\n        for (i = 0, j = itemSize; i < numGlyphsOut; i++, j += itemSize) {\n          itemEncode(locaData, j, simpleGlyph.length);\n        }\n        glyf.data = simpleGlyph;\n      } else if (dupFirstEntry) {\n        const firstEntryLength = itemDecode(locaData, itemSize);\n        if (newGlyfData.length > firstEntryLength + writeOffset) {\n          glyf.data = newGlyfData.subarray(0, firstEntryLength + writeOffset);\n        } else {\n          glyf.data = new Uint8Array(firstEntryLength + writeOffset);\n          glyf.data.set(newGlyfData.subarray(0, writeOffset));\n        }\n        glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset);\n        itemEncode(loca.data, locaData.length - itemSize, writeOffset + firstEntryLength);\n      } else {\n        glyf.data = newGlyfData.subarray(0, writeOffset);\n      }\n      return {\n        missingGlyphs,\n        maxSizeOfInstructions\n      };\n    }\n    function readPostScriptTable(post, propertiesObj, maxpNumGlyphs) {\n      const start = (font.start || 0) + post.offset;\n      font.pos = start;\n      const length = post.length,\n        end = start + length;\n      const version = font.getInt32();\n      font.skip(28);\n      let glyphNames;\n      let valid = true;\n      let i;\n      switch (version) {\n        case 0x00010000:\n          glyphNames = MacStandardGlyphOrdering;\n          break;\n        case 0x00020000:\n          const numGlyphs = font.getUint16();\n          if (numGlyphs !== maxpNumGlyphs) {\n            valid = false;\n            break;\n          }\n          const glyphNameIndexes = [];\n          for (i = 0; i < numGlyphs; ++i) {\n            const index = font.getUint16();\n            if (index >= 32768) {\n              valid = false;\n              break;\n            }\n            glyphNameIndexes.push(index);\n          }\n          if (!valid) {\n            break;\n          }\n          const customNames = [],\n            strBuf = [];\n          while (font.pos < end) {\n            const stringLength = font.getByte();\n            strBuf.length = stringLength;\n            for (i = 0; i < stringLength; ++i) {\n              strBuf[i] = String.fromCharCode(font.getByte());\n            }\n            customNames.push(strBuf.join(\"\"));\n          }\n          glyphNames = [];\n          for (i = 0; i < numGlyphs; ++i) {\n            const j = glyphNameIndexes[i];\n            if (j < 258) {\n              glyphNames.push(MacStandardGlyphOrdering[j]);\n              continue;\n            }\n            glyphNames.push(customNames[j - 258]);\n          }\n          break;\n        case 0x00030000:\n          break;\n        default:\n          warn(\"Unknown/unsupported post table version \" + version);\n          valid = false;\n          if (propertiesObj.defaultEncoding) {\n            glyphNames = propertiesObj.defaultEncoding;\n          }\n          break;\n      }\n      propertiesObj.glyphNames = glyphNames;\n      return valid;\n    }\n    function readNameTable(nameTable) {\n      const start = (font.start || 0) + nameTable.offset;\n      font.pos = start;\n      const names = [[], []],\n        records = [];\n      const length = nameTable.length,\n        end = start + length;\n      const format = font.getUint16();\n      const FORMAT_0_HEADER_LENGTH = 6;\n      if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) {\n        return [names, records];\n      }\n      const numRecords = font.getUint16();\n      const stringsStart = font.getUint16();\n      const NAME_RECORD_LENGTH = 12;\n      let i, ii;\n      for (i = 0; i < numRecords && font.pos + NAME_RECORD_LENGTH <= end; i++) {\n        const r = {\n          platform: font.getUint16(),\n          encoding: font.getUint16(),\n          language: font.getUint16(),\n          name: font.getUint16(),\n          length: font.getUint16(),\n          offset: font.getUint16()\n        };\n        if (isMacNameRecord(r) || isWinNameRecord(r)) {\n          records.push(r);\n        }\n      }\n      for (i = 0, ii = records.length; i < ii; i++) {\n        const record = records[i];\n        if (record.length <= 0) {\n          continue;\n        }\n        const pos = start + stringsStart + record.offset;\n        if (pos + record.length > end) {\n          continue;\n        }\n        font.pos = pos;\n        const nameIndex = record.name;\n        if (record.encoding) {\n          let str = \"\";\n          for (let j = 0, jj = record.length; j < jj; j += 2) {\n            str += String.fromCharCode(font.getUint16());\n          }\n          names[1][nameIndex] = str;\n        } else {\n          names[0][nameIndex] = font.getString(record.length);\n        }\n      }\n      return [names, records];\n    }\n    const TTOpsStackDeltas = [0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1, 1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1, 0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2, 0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1, -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2];\n    function sanitizeTTProgram(table, ttContext) {\n      let data = table.data;\n      let i = 0,\n        j,\n        n,\n        b,\n        funcId,\n        pc,\n        lastEndf = 0,\n        lastDeff = 0;\n      const stack = [];\n      const callstack = [];\n      const functionsCalled = [];\n      let tooComplexToFollowFunctions = ttContext.tooComplexToFollowFunctions;\n      let inFDEF = false,\n        ifLevel = 0,\n        inELSE = 0;\n      for (let ii = data.length; i < ii;) {\n        const op = data[i++];\n        if (op === 0x40) {\n          n = data[i++];\n          if (inFDEF || inELSE) {\n            i += n;\n          } else {\n            for (j = 0; j < n; j++) {\n              stack.push(data[i++]);\n            }\n          }\n        } else if (op === 0x41) {\n          n = data[i++];\n          if (inFDEF || inELSE) {\n            i += n * 2;\n          } else {\n            for (j = 0; j < n; j++) {\n              b = data[i++];\n              stack.push(b << 8 | data[i++]);\n            }\n          }\n        } else if ((op & 0xf8) === 0xb0) {\n          n = op - 0xb0 + 1;\n          if (inFDEF || inELSE) {\n            i += n;\n          } else {\n            for (j = 0; j < n; j++) {\n              stack.push(data[i++]);\n            }\n          }\n        } else if ((op & 0xf8) === 0xb8) {\n          n = op - 0xb8 + 1;\n          if (inFDEF || inELSE) {\n            i += n * 2;\n          } else {\n            for (j = 0; j < n; j++) {\n              b = data[i++];\n              stack.push(b << 8 | data[i++]);\n            }\n          }\n        } else if (op === 0x2b && !tooComplexToFollowFunctions) {\n          if (!inFDEF && !inELSE) {\n            funcId = stack.at(-1);\n            if (isNaN(funcId)) {\n              info(\"TT: CALL empty stack (or invalid entry).\");\n            } else {\n              ttContext.functionsUsed[funcId] = true;\n              if (funcId in ttContext.functionsStackDeltas) {\n                const newStackLength = stack.length + ttContext.functionsStackDeltas[funcId];\n                if (newStackLength < 0) {\n                  warn(\"TT: CALL invalid functions stack delta.\");\n                  ttContext.hintsValid = false;\n                  return;\n                }\n                stack.length = newStackLength;\n              } else if (funcId in ttContext.functionsDefined && !functionsCalled.includes(funcId)) {\n                callstack.push({\n                  data,\n                  i,\n                  stackTop: stack.length - 1\n                });\n                functionsCalled.push(funcId);\n                pc = ttContext.functionsDefined[funcId];\n                if (!pc) {\n                  warn(\"TT: CALL non-existent function\");\n                  ttContext.hintsValid = false;\n                  return;\n                }\n                data = pc.data;\n                i = pc.i;\n              }\n            }\n          }\n        } else if (op === 0x2c && !tooComplexToFollowFunctions) {\n          if (inFDEF || inELSE) {\n            warn(\"TT: nested FDEFs not allowed\");\n            tooComplexToFollowFunctions = true;\n          }\n          inFDEF = true;\n          lastDeff = i;\n          funcId = stack.pop();\n          ttContext.functionsDefined[funcId] = {\n            data,\n            i\n          };\n        } else if (op === 0x2d) {\n          if (inFDEF) {\n            inFDEF = false;\n            lastEndf = i;\n          } else {\n            pc = callstack.pop();\n            if (!pc) {\n              warn(\"TT: ENDF bad stack\");\n              ttContext.hintsValid = false;\n              return;\n            }\n            funcId = functionsCalled.pop();\n            data = pc.data;\n            i = pc.i;\n            ttContext.functionsStackDeltas[funcId] = stack.length - pc.stackTop;\n          }\n        } else if (op === 0x89) {\n          if (inFDEF || inELSE) {\n            warn(\"TT: nested IDEFs not allowed\");\n            tooComplexToFollowFunctions = true;\n          }\n          inFDEF = true;\n          lastDeff = i;\n        } else if (op === 0x58) {\n          ++ifLevel;\n        } else if (op === 0x1b) {\n          inELSE = ifLevel;\n        } else if (op === 0x59) {\n          if (inELSE === ifLevel) {\n            inELSE = 0;\n          }\n          --ifLevel;\n        } else if (op === 0x1c) {\n          if (!inFDEF && !inELSE) {\n            const offset = stack.at(-1);\n            if (offset > 0) {\n              i += offset - 1;\n            }\n          }\n        }\n        if (!inFDEF && !inELSE) {\n          let stackDelta = 0;\n          if (op <= 0x8e) {\n            stackDelta = TTOpsStackDeltas[op];\n          } else if (op >= 0xc0 && op <= 0xdf) {\n            stackDelta = -1;\n          } else if (op >= 0xe0) {\n            stackDelta = -2;\n          }\n          if (op >= 0x71 && op <= 0x75) {\n            n = stack.pop();\n            if (!isNaN(n)) {\n              stackDelta = -n * 2;\n            }\n          }\n          while (stackDelta < 0 && stack.length > 0) {\n            stack.pop();\n            stackDelta++;\n          }\n          while (stackDelta > 0) {\n            stack.push(NaN);\n            stackDelta--;\n          }\n        }\n      }\n      ttContext.tooComplexToFollowFunctions = tooComplexToFollowFunctions;\n      const content = [data];\n      if (i > data.length) {\n        content.push(new Uint8Array(i - data.length));\n      }\n      if (lastDeff > lastEndf) {\n        warn(\"TT: complementing a missing function tail\");\n        content.push(new Uint8Array([0x22, 0x2d]));\n      }\n      foldTTTable(table, content);\n    }\n    function checkInvalidFunctions(ttContext, maxFunctionDefs) {\n      if (ttContext.tooComplexToFollowFunctions) {\n        return;\n      }\n      if (ttContext.functionsDefined.length > maxFunctionDefs) {\n        warn(\"TT: more functions defined than expected\");\n        ttContext.hintsValid = false;\n        return;\n      }\n      for (let j = 0, jj = ttContext.functionsUsed.length; j < jj; j++) {\n        if (j > maxFunctionDefs) {\n          warn(\"TT: invalid function id: \" + j);\n          ttContext.hintsValid = false;\n          return;\n        }\n        if (ttContext.functionsUsed[j] && !ttContext.functionsDefined[j]) {\n          warn(\"TT: undefined function: \" + j);\n          ttContext.hintsValid = false;\n          return;\n        }\n      }\n    }\n    function foldTTTable(table, content) {\n      if (content.length > 1) {\n        let newLength = 0;\n        let j, jj;\n        for (j = 0, jj = content.length; j < jj; j++) {\n          newLength += content[j].length;\n        }\n        newLength = newLength + 3 & ~3;\n        const result = new Uint8Array(newLength);\n        let pos = 0;\n        for (j = 0, jj = content.length; j < jj; j++) {\n          result.set(content[j], pos);\n          pos += content[j].length;\n        }\n        table.data = result;\n        table.length = newLength;\n      }\n    }\n    function sanitizeTTPrograms(fpgm, prep, cvt, maxFunctionDefs) {\n      const ttContext = {\n        functionsDefined: [],\n        functionsUsed: [],\n        functionsStackDeltas: [],\n        tooComplexToFollowFunctions: false,\n        hintsValid: true\n      };\n      if (fpgm) {\n        sanitizeTTProgram(fpgm, ttContext);\n      }\n      if (prep) {\n        sanitizeTTProgram(prep, ttContext);\n      }\n      if (fpgm) {\n        checkInvalidFunctions(ttContext, maxFunctionDefs);\n      }\n      if (cvt && cvt.length & 1) {\n        const cvtData = new Uint8Array(cvt.length + 1);\n        cvtData.set(cvt.data);\n        cvt.data = cvtData;\n      }\n      return ttContext.hintsValid;\n    }\n    font = new Stream(new Uint8Array(font.getBytes()));\n    let header, tables;\n    if (isTrueTypeCollectionFile(font)) {\n      const ttcData = readTrueTypeCollectionData(font, this.name);\n      header = ttcData.header;\n      tables = ttcData.tables;\n    } else {\n      header = readOpenTypeHeader(font);\n      tables = readTables(font, header.numTables);\n    }\n    let cff, cffFile;\n    const isTrueType = !tables[\"CFF \"];\n    if (!isTrueType) {\n      const isComposite = properties.composite && (properties.cidToGidMap?.length > 0 || !(properties.cMap instanceof IdentityCMap));\n      if (header.version === \"OTTO\" && !isComposite || !tables.head || !tables.hhea || !tables.maxp || !tables.post) {\n        cffFile = new Stream(tables[\"CFF \"].data);\n        cff = new CFFFont(cffFile, properties);\n        adjustWidths(properties);\n        return this.convert(name, cff, properties);\n      }\n      delete tables.glyf;\n      delete tables.loca;\n      delete tables.fpgm;\n      delete tables.prep;\n      delete tables[\"cvt \"];\n      this.isOpenType = true;\n    } else {\n      if (!tables.loca) {\n        throw new FormatError('Required \"loca\" table is not found');\n      }\n      if (!tables.glyf) {\n        warn('Required \"glyf\" table is not found -- trying to recover.');\n        tables.glyf = {\n          tag: \"glyf\",\n          data: new Uint8Array(0)\n        };\n      }\n      this.isOpenType = false;\n    }\n    if (!tables.maxp) {\n      throw new FormatError('Required \"maxp\" table is not found');\n    }\n    font.pos = (font.start || 0) + tables.maxp.offset;\n    let version = font.getInt32();\n    const numGlyphs = font.getUint16();\n    if (version !== 0x00010000 && version !== 0x00005000) {\n      if (tables.maxp.length === 6) {\n        version = 0x0005000;\n      } else if (tables.maxp.length >= 32) {\n        version = 0x00010000;\n      } else {\n        throw new FormatError(`\"maxp\" table has a wrong version number`);\n      }\n      writeUint32(tables.maxp.data, 0, version);\n    }\n    if (properties.scaleFactors?.length === numGlyphs && isTrueType) {\n      const {\n        scaleFactors\n      } = properties;\n      const isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]);\n      const glyphs = new GlyfTable({\n        glyfTable: tables.glyf.data,\n        isGlyphLocationsLong,\n        locaTable: tables.loca.data,\n        numGlyphs\n      });\n      glyphs.scale(scaleFactors);\n      const {\n        glyf,\n        loca,\n        isLocationLong\n      } = glyphs.write();\n      tables.glyf.data = glyf;\n      tables.loca.data = loca;\n      if (isLocationLong !== !!isGlyphLocationsLong) {\n        tables.head.data[50] = 0;\n        tables.head.data[51] = isLocationLong ? 1 : 0;\n      }\n      const metrics = tables.hmtx.data;\n      for (let i = 0; i < numGlyphs; i++) {\n        const j = 4 * i;\n        const advanceWidth = Math.round(scaleFactors[i] * int16(metrics[j], metrics[j + 1]));\n        metrics[j] = advanceWidth >> 8 & 0xff;\n        metrics[j + 1] = advanceWidth & 0xff;\n        const lsb = Math.round(scaleFactors[i] * signedInt16(metrics[j + 2], metrics[j + 3]));\n        writeSignedInt16(metrics, j + 2, lsb);\n      }\n    }\n    let numGlyphsOut = numGlyphs + 1;\n    let dupFirstEntry = true;\n    if (numGlyphsOut > 0xffff) {\n      dupFirstEntry = false;\n      numGlyphsOut = numGlyphs;\n      warn(\"Not enough space in glyfs to duplicate first glyph.\");\n    }\n    let maxFunctionDefs = 0;\n    let maxSizeOfInstructions = 0;\n    if (version >= 0x00010000 && tables.maxp.length >= 32) {\n      font.pos += 8;\n      const maxZones = font.getUint16();\n      if (maxZones > 2) {\n        tables.maxp.data[14] = 0;\n        tables.maxp.data[15] = 2;\n      }\n      font.pos += 4;\n      maxFunctionDefs = font.getUint16();\n      font.pos += 4;\n      maxSizeOfInstructions = font.getUint16();\n    }\n    tables.maxp.data[4] = numGlyphsOut >> 8;\n    tables.maxp.data[5] = numGlyphsOut & 255;\n    const hintsValid = sanitizeTTPrograms(tables.fpgm, tables.prep, tables[\"cvt \"], maxFunctionDefs);\n    if (!hintsValid) {\n      delete tables.fpgm;\n      delete tables.prep;\n      delete tables[\"cvt \"];\n    }\n    sanitizeMetrics(font, tables.hhea, tables.hmtx, tables.head, numGlyphsOut, dupFirstEntry);\n    if (!tables.head) {\n      throw new FormatError('Required \"head\" table is not found');\n    }\n    sanitizeHead(tables.head, numGlyphs, isTrueType ? tables.loca.length : 0);\n    let missingGlyphs = Object.create(null);\n    if (isTrueType) {\n      const isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]);\n      const glyphsInfo = sanitizeGlyphLocations(tables.loca, tables.glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions);\n      missingGlyphs = glyphsInfo.missingGlyphs;\n      if (version >= 0x00010000 && tables.maxp.length >= 32) {\n        tables.maxp.data[26] = glyphsInfo.maxSizeOfInstructions >> 8;\n        tables.maxp.data[27] = glyphsInfo.maxSizeOfInstructions & 255;\n      }\n    }\n    if (!tables.hhea) {\n      throw new FormatError('Required \"hhea\" table is not found');\n    }\n    if (tables.hhea.data[10] === 0 && tables.hhea.data[11] === 0) {\n      tables.hhea.data[10] = 0xff;\n      tables.hhea.data[11] = 0xff;\n    }\n    const metricsOverride = {\n      unitsPerEm: int16(tables.head.data[18], tables.head.data[19]),\n      yMax: signedInt16(tables.head.data[42], tables.head.data[43]),\n      yMin: signedInt16(tables.head.data[38], tables.head.data[39]),\n      ascent: signedInt16(tables.hhea.data[4], tables.hhea.data[5]),\n      descent: signedInt16(tables.hhea.data[6], tables.hhea.data[7]),\n      lineGap: signedInt16(tables.hhea.data[8], tables.hhea.data[9])\n    };\n    this.ascent = metricsOverride.ascent / metricsOverride.unitsPerEm;\n    this.descent = metricsOverride.descent / metricsOverride.unitsPerEm;\n    this.lineGap = metricsOverride.lineGap / metricsOverride.unitsPerEm;\n    if (this.cssFontInfo?.lineHeight) {\n      this.lineHeight = this.cssFontInfo.metrics.lineHeight;\n      this.lineGap = this.cssFontInfo.metrics.lineGap;\n    } else {\n      this.lineHeight = this.ascent - this.descent + this.lineGap;\n    }\n    if (tables.post) {\n      readPostScriptTable(tables.post, properties, numGlyphs);\n    }\n    tables.post = {\n      tag: \"post\",\n      data: createPostTable(properties)\n    };\n    const charCodeToGlyphId = Object.create(null);\n    function hasGlyph(glyphId) {\n      return !missingGlyphs[glyphId];\n    }\n    if (properties.composite) {\n      const cidToGidMap = properties.cidToGidMap || [];\n      const isCidToGidMapEmpty = cidToGidMap.length === 0;\n      properties.cMap.forEach(function (charCode, cid) {\n        if (typeof cid === \"string\") {\n          cid = convertCidString(charCode, cid, true);\n        }\n        if (cid > 0xffff) {\n          throw new FormatError(\"Max size of CID is 65,535\");\n        }\n        let glyphId = -1;\n        if (isCidToGidMapEmpty) {\n          glyphId = cid;\n        } else if (cidToGidMap[cid] !== undefined) {\n          glyphId = cidToGidMap[cid];\n        }\n        if (glyphId >= 0 && glyphId < numGlyphs && hasGlyph(glyphId)) {\n          charCodeToGlyphId[charCode] = glyphId;\n        }\n      });\n    } else {\n      const cmapTable = readCmapTable(tables.cmap, font, this.isSymbolicFont, properties.hasEncoding);\n      const cmapPlatformId = cmapTable.platformId;\n      const cmapEncodingId = cmapTable.encodingId;\n      const cmapMappings = cmapTable.mappings;\n      let baseEncoding = [],\n        forcePostTable = false;\n      if (properties.hasEncoding && (properties.baseEncodingName === \"MacRomanEncoding\" || properties.baseEncodingName === \"WinAnsiEncoding\")) {\n        baseEncoding = getEncoding(properties.baseEncodingName);\n      }\n      if (properties.hasEncoding && !this.isSymbolicFont && (cmapPlatformId === 3 && cmapEncodingId === 1 || cmapPlatformId === 1 && cmapEncodingId === 0)) {\n        const glyphsUnicodeMap = getGlyphsUnicode();\n        for (let charCode = 0; charCode < 256; charCode++) {\n          let glyphName;\n          if (this.differences[charCode] !== undefined) {\n            glyphName = this.differences[charCode];\n          } else if (baseEncoding.length && baseEncoding[charCode] !== \"\") {\n            glyphName = baseEncoding[charCode];\n          } else {\n            glyphName = StandardEncoding[charCode];\n          }\n          if (!glyphName) {\n            continue;\n          }\n          const standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap);\n          let unicodeOrCharCode;\n          if (cmapPlatformId === 3 && cmapEncodingId === 1) {\n            unicodeOrCharCode = glyphsUnicodeMap[standardGlyphName];\n          } else if (cmapPlatformId === 1 && cmapEncodingId === 0) {\n            unicodeOrCharCode = MacRomanEncoding.indexOf(standardGlyphName);\n          }\n          if (unicodeOrCharCode === undefined) {\n            if (!properties.glyphNames && properties.hasIncludedToUnicodeMap && !(this.toUnicode instanceof IdentityToUnicodeMap)) {\n              const unicode = this.toUnicode.get(charCode);\n              if (unicode) {\n                unicodeOrCharCode = unicode.codePointAt(0);\n              }\n            }\n            if (unicodeOrCharCode === undefined) {\n              continue;\n            }\n          }\n          for (const mapping of cmapMappings) {\n            if (mapping.charCode !== unicodeOrCharCode) {\n              continue;\n            }\n            charCodeToGlyphId[charCode] = mapping.glyphId;\n            break;\n          }\n        }\n      } else if (cmapPlatformId === 0) {\n        for (const mapping of cmapMappings) {\n          charCodeToGlyphId[mapping.charCode] = mapping.glyphId;\n        }\n        forcePostTable = true;\n      } else if (cmapPlatformId === 3 && cmapEncodingId === 0) {\n        for (const mapping of cmapMappings) {\n          let charCode = mapping.charCode;\n          if (charCode >= 0xf000 && charCode <= 0xf0ff) {\n            charCode &= 0xff;\n          }\n          charCodeToGlyphId[charCode] = mapping.glyphId;\n        }\n      } else {\n        for (const mapping of cmapMappings) {\n          charCodeToGlyphId[mapping.charCode] = mapping.glyphId;\n        }\n      }\n      if (properties.glyphNames && (baseEncoding.length || this.differences.length)) {\n        for (let i = 0; i < 256; ++i) {\n          if (!forcePostTable && charCodeToGlyphId[i] !== undefined) {\n            continue;\n          }\n          const glyphName = this.differences[i] || baseEncoding[i];\n          if (!glyphName) {\n            continue;\n          }\n          const glyphId = properties.glyphNames.indexOf(glyphName);\n          if (glyphId > 0 && hasGlyph(glyphId)) {\n            charCodeToGlyphId[i] = glyphId;\n          }\n        }\n      }\n    }\n    if (charCodeToGlyphId.length === 0) {\n      charCodeToGlyphId[0] = 0;\n    }\n    let glyphZeroId = numGlyphsOut - 1;\n    if (!dupFirstEntry) {\n      glyphZeroId = 0;\n    }\n    if (!properties.cssFontInfo) {\n      const newMapping = adjustMapping(charCodeToGlyphId, hasGlyph, glyphZeroId, this.toUnicode);\n      this.toFontChar = newMapping.toFontChar;\n      tables.cmap = {\n        tag: \"cmap\",\n        data: createCmapTable(newMapping.charCodeToGlyphId, newMapping.toUnicodeExtraMap, numGlyphsOut)\n      };\n      if (!tables[\"OS/2\"] || !validateOS2Table(tables[\"OS/2\"], font)) {\n        tables[\"OS/2\"] = {\n          tag: \"OS/2\",\n          data: createOS2Table(properties, newMapping.charCodeToGlyphId, metricsOverride)\n        };\n      }\n    }\n    if (!isTrueType) {\n      try {\n        cffFile = new Stream(tables[\"CFF \"].data);\n        const parser = new CFFParser(cffFile, properties, SEAC_ANALYSIS_ENABLED);\n        cff = parser.parse();\n        cff.duplicateFirstGlyph();\n        const compiler = new CFFCompiler(cff);\n        tables[\"CFF \"].data = compiler.compile();\n      } catch {\n        warn(\"Failed to compile font \" + properties.loadedName);\n      }\n    }\n    if (!tables.name) {\n      tables.name = {\n        tag: \"name\",\n        data: createNameTable(this.name)\n      };\n    } else {\n      const [namePrototype, nameRecords] = readNameTable(tables.name);\n      tables.name.data = createNameTable(name, namePrototype);\n      this.psName = namePrototype[0][6] || null;\n      if (!properties.composite) {\n        adjustTrueTypeToUnicode(properties, this.isSymbolicFont, nameRecords);\n      }\n    }\n    const builder = new OpenTypeFileBuilder(header.version);\n    for (const tableTag in tables) {\n      builder.addTable(tableTag, tables[tableTag].data);\n    }\n    return builder.toArray();\n  }\n  convert(fontName, font, properties) {\n    properties.fixedPitch = false;\n    if (properties.builtInEncoding) {\n      adjustType1ToUnicode(properties, properties.builtInEncoding);\n    }\n    let glyphZeroId = 1;\n    if (font instanceof CFFFont) {\n      glyphZeroId = font.numGlyphs - 1;\n    }\n    const mapping = font.getGlyphMapping(properties);\n    let newMapping = null;\n    let newCharCodeToGlyphId = mapping;\n    let toUnicodeExtraMap = null;\n    if (!properties.cssFontInfo) {\n      newMapping = adjustMapping(mapping, font.hasGlyphId.bind(font), glyphZeroId, this.toUnicode);\n      this.toFontChar = newMapping.toFontChar;\n      newCharCodeToGlyphId = newMapping.charCodeToGlyphId;\n      toUnicodeExtraMap = newMapping.toUnicodeExtraMap;\n    }\n    const numGlyphs = font.numGlyphs;\n    function getCharCodes(charCodeToGlyphId, glyphId) {\n      let charCodes = null;\n      for (const charCode in charCodeToGlyphId) {\n        if (glyphId === charCodeToGlyphId[charCode]) {\n          (charCodes ||= []).push(charCode | 0);\n        }\n      }\n      return charCodes;\n    }\n    function createCharCode(charCodeToGlyphId, glyphId) {\n      for (const charCode in charCodeToGlyphId) {\n        if (glyphId === charCodeToGlyphId[charCode]) {\n          return charCode | 0;\n        }\n      }\n      newMapping.charCodeToGlyphId[newMapping.nextAvailableFontCharCode] = glyphId;\n      return newMapping.nextAvailableFontCharCode++;\n    }\n    const seacs = font.seacs;\n    if (newMapping && SEAC_ANALYSIS_ENABLED && seacs?.length) {\n      const matrix = properties.fontMatrix || FONT_IDENTITY_MATRIX;\n      const charset = font.getCharset();\n      const seacMap = Object.create(null);\n      for (let glyphId in seacs) {\n        glyphId |= 0;\n        const seac = seacs[glyphId];\n        const baseGlyphName = StandardEncoding[seac[2]];\n        const accentGlyphName = StandardEncoding[seac[3]];\n        const baseGlyphId = charset.indexOf(baseGlyphName);\n        const accentGlyphId = charset.indexOf(accentGlyphName);\n        if (baseGlyphId < 0 || accentGlyphId < 0) {\n          continue;\n        }\n        const accentOffset = {\n          x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4],\n          y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5]\n        };\n        const charCodes = getCharCodes(mapping, glyphId);\n        if (!charCodes) {\n          continue;\n        }\n        for (const charCode of charCodes) {\n          const charCodeToGlyphId = newMapping.charCodeToGlyphId;\n          const baseFontCharCode = createCharCode(charCodeToGlyphId, baseGlyphId);\n          const accentFontCharCode = createCharCode(charCodeToGlyphId, accentGlyphId);\n          seacMap[charCode] = {\n            baseFontCharCode,\n            accentFontCharCode,\n            accentOffset\n          };\n        }\n      }\n      properties.seacMap = seacMap;\n    }\n    const unitsPerEm = 1 / (properties.fontMatrix || FONT_IDENTITY_MATRIX)[0];\n    const builder = new OpenTypeFileBuilder(\"\\x4F\\x54\\x54\\x4F\");\n    builder.addTable(\"CFF \", font.data);\n    builder.addTable(\"OS/2\", createOS2Table(properties, newCharCodeToGlyphId));\n    builder.addTable(\"cmap\", createCmapTable(newCharCodeToGlyphId, toUnicodeExtraMap, numGlyphs));\n    builder.addTable(\"head\", \"\\x00\\x01\\x00\\x00\" + \"\\x00\\x00\\x10\\x00\" + \"\\x00\\x00\\x00\\x00\" + \"\\x5F\\x0F\\x3C\\xF5\" + \"\\x00\\x00\" + safeString16(unitsPerEm) + \"\\x00\\x00\\x00\\x00\\x9e\\x0b\\x7e\\x27\" + \"\\x00\\x00\\x00\\x00\\x9e\\x0b\\x7e\\x27\" + \"\\x00\\x00\" + safeString16(properties.descent) + \"\\x0F\\xFF\" + safeString16(properties.ascent) + string16(properties.italicAngle ? 2 : 0) + \"\\x00\\x11\" + \"\\x00\\x00\" + \"\\x00\\x00\" + \"\\x00\\x00\");\n    builder.addTable(\"hhea\", \"\\x00\\x01\\x00\\x00\" + safeString16(properties.ascent) + safeString16(properties.descent) + \"\\x00\\x00\" + \"\\xFF\\xFF\" + \"\\x00\\x00\" + \"\\x00\\x00\" + \"\\x00\\x00\" + safeString16(properties.capHeight) + safeString16(Math.tan(properties.italicAngle) * properties.xHeight) + \"\\x00\\x00\" + \"\\x00\\x00\" + \"\\x00\\x00\" + \"\\x00\\x00\" + \"\\x00\\x00\" + \"\\x00\\x00\" + string16(numGlyphs));\n    builder.addTable(\"hmtx\", function fontFieldsHmtx() {\n      const charstrings = font.charstrings;\n      const cffWidths = font.cff ? font.cff.widths : null;\n      let hmtx = \"\\x00\\x00\\x00\\x00\";\n      for (let i = 1, ii = numGlyphs; i < ii; i++) {\n        let width = 0;\n        if (charstrings) {\n          const charstring = charstrings[i - 1];\n          width = \"width\" in charstring ? charstring.width : 0;\n        } else if (cffWidths) {\n          width = Math.ceil(cffWidths[i] || 0);\n        }\n        hmtx += string16(width) + string16(0);\n      }\n      return hmtx;\n    }());\n    builder.addTable(\"maxp\", \"\\x00\\x00\\x50\\x00\" + string16(numGlyphs));\n    builder.addTable(\"name\", createNameTable(fontName));\n    builder.addTable(\"post\", createPostTable(properties));\n    return builder.toArray();\n  }\n  _charToGlyph(charcode, isSpace = false) {\n    let glyph = this._glyphCache[charcode];\n    if (glyph?.isSpace === isSpace) {\n      return glyph;\n    }\n    let fontCharCode, width, operatorListId;\n    let widthCode = charcode;\n    if (this.cMap?.contains(charcode)) {\n      widthCode = this.cMap.lookup(charcode);\n      if (typeof widthCode === \"string\") {\n        widthCode = convertCidString(charcode, widthCode);\n      }\n    }\n    width = this.widths[widthCode];\n    if (typeof width !== \"number\") {\n      width = this.defaultWidth;\n    }\n    const vmetric = this.vmetrics?.[widthCode];\n    let unicode = this.toUnicode.get(charcode) || charcode;\n    if (typeof unicode === \"number\") {\n      unicode = String.fromCharCode(unicode);\n    }\n    let isInFont = this.toFontChar[charcode] !== undefined;\n    fontCharCode = this.toFontChar[charcode] || charcode;\n    if (this.missingFile) {\n      const glyphName = this.differences[charcode] || this.defaultEncoding[charcode];\n      if ((glyphName === \".notdef\" || glyphName === \"\") && this.type === \"Type1\") {\n        fontCharCode = 0x20;\n      }\n      fontCharCode = mapSpecialUnicodeValues(fontCharCode);\n    }\n    if (this.isType3Font) {\n      operatorListId = fontCharCode;\n    }\n    let accent = null;\n    if (this.seacMap?.[charcode]) {\n      isInFont = true;\n      const seac = this.seacMap[charcode];\n      fontCharCode = seac.baseFontCharCode;\n      accent = {\n        fontChar: String.fromCodePoint(seac.accentFontCharCode),\n        offset: seac.accentOffset\n      };\n    }\n    let fontChar = \"\";\n    if (typeof fontCharCode === \"number\") {\n      if (fontCharCode <= 0x10ffff) {\n        fontChar = String.fromCodePoint(fontCharCode);\n      } else {\n        warn(`charToGlyph - invalid fontCharCode: ${fontCharCode}`);\n      }\n    }\n    glyph = new fonts_Glyph(charcode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont);\n    return this._glyphCache[charcode] = glyph;\n  }\n  charsToGlyphs(chars) {\n    let glyphs = this._charsCache[chars];\n    if (glyphs) {\n      return glyphs;\n    }\n    glyphs = [];\n    if (this.cMap) {\n      const c = Object.create(null),\n        ii = chars.length;\n      let i = 0;\n      while (i < ii) {\n        this.cMap.readCharCode(chars, i, c);\n        const {\n          charcode,\n          length\n        } = c;\n        i += length;\n        const glyph = this._charToGlyph(charcode, length === 1 && chars.charCodeAt(i - 1) === 0x20);\n        glyphs.push(glyph);\n      }\n    } else {\n      for (let i = 0, ii = chars.length; i < ii; ++i) {\n        const charcode = chars.charCodeAt(i);\n        const glyph = this._charToGlyph(charcode, charcode === 0x20);\n        glyphs.push(glyph);\n      }\n    }\n    return this._charsCache[chars] = glyphs;\n  }\n  getCharPositions(chars) {\n    const positions = [];\n    if (this.cMap) {\n      const c = Object.create(null);\n      let i = 0;\n      while (i < chars.length) {\n        this.cMap.readCharCode(chars, i, c);\n        const length = c.length;\n        positions.push([i, i + length]);\n        i += length;\n      }\n    } else {\n      for (let i = 0, ii = chars.length; i < ii; ++i) {\n        positions.push([i, i + 1]);\n      }\n    }\n    return positions;\n  }\n  get glyphCacheValues() {\n    return Object.values(this._glyphCache);\n  }\n  encodeString(str) {\n    const buffers = [];\n    const currentBuf = [];\n    const hasCurrentBufErrors = () => buffers.length % 2 === 1;\n    const getCharCode = this.toUnicode instanceof IdentityToUnicodeMap ? unicode => this.toUnicode.charCodeOf(unicode) : unicode => this.toUnicode.charCodeOf(String.fromCodePoint(unicode));\n    for (let i = 0, ii = str.length; i < ii; i++) {\n      const unicode = str.codePointAt(i);\n      if (unicode > 0xd7ff && (unicode < 0xe000 || unicode > 0xfffd)) {\n        i++;\n      }\n      if (this.toUnicode) {\n        const charCode = getCharCode(unicode);\n        if (charCode !== -1) {\n          if (hasCurrentBufErrors()) {\n            buffers.push(currentBuf.join(\"\"));\n            currentBuf.length = 0;\n          }\n          const charCodeLength = this.cMap ? this.cMap.getCharCodeLength(charCode) : 1;\n          for (let j = charCodeLength - 1; j >= 0; j--) {\n            currentBuf.push(String.fromCharCode(charCode >> 8 * j & 0xff));\n          }\n          continue;\n        }\n      }\n      if (!hasCurrentBufErrors()) {\n        buffers.push(currentBuf.join(\"\"));\n        currentBuf.length = 0;\n      }\n      currentBuf.push(String.fromCodePoint(unicode));\n    }\n    buffers.push(currentBuf.join(\"\"));\n    return buffers;\n  }\n}\nclass ErrorFont {\n  constructor(error) {\n    this.error = error;\n    this.loadedName = \"g_font_error\";\n    this.missingFile = true;\n  }\n  charsToGlyphs() {\n    return [];\n  }\n  encodeString(chars) {\n    return [chars];\n  }\n  exportData(extraProperties = false) {\n    return {\n      error: this.error\n    };\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/pattern.js\n\n\n\n\nconst ShadingType = {\n  FUNCTION_BASED: 1,\n  AXIAL: 2,\n  RADIAL: 3,\n  FREE_FORM_MESH: 4,\n  LATTICE_FORM_MESH: 5,\n  COONS_PATCH_MESH: 6,\n  TENSOR_PATCH_MESH: 7\n};\nclass Pattern {\n  constructor() {\n    unreachable(\"Cannot initialize Pattern.\");\n  }\n  static parseShading(shading, xref, res, pdfFunctionFactory, localColorSpaceCache) {\n    const dict = shading instanceof BaseStream ? shading.dict : shading;\n    const type = dict.get(\"ShadingType\");\n    try {\n      switch (type) {\n        case ShadingType.AXIAL:\n        case ShadingType.RADIAL:\n          return new RadialAxialShading(dict, xref, res, pdfFunctionFactory, localColorSpaceCache);\n        case ShadingType.FREE_FORM_MESH:\n        case ShadingType.LATTICE_FORM_MESH:\n        case ShadingType.COONS_PATCH_MESH:\n        case ShadingType.TENSOR_PATCH_MESH:\n          return new MeshShading(shading, xref, res, pdfFunctionFactory, localColorSpaceCache);\n        default:\n          throw new FormatError(\"Unsupported ShadingType: \" + type);\n      }\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(ex);\n      return new DummyShading();\n    }\n  }\n}\nclass BaseShading {\n  static SMALL_NUMBER = 1e-6;\n  constructor() {\n    if (this.constructor === BaseShading) {\n      unreachable(\"Cannot initialize BaseShading.\");\n    }\n  }\n  getIR() {\n    unreachable(\"Abstract method `getIR` called.\");\n  }\n}\nclass RadialAxialShading extends BaseShading {\n  constructor(dict, xref, resources, pdfFunctionFactory, localColorSpaceCache) {\n    super();\n    this.shadingType = dict.get(\"ShadingType\");\n    let coordsLen = 0;\n    if (this.shadingType === ShadingType.AXIAL) {\n      coordsLen = 4;\n    } else if (this.shadingType === ShadingType.RADIAL) {\n      coordsLen = 6;\n    }\n    this.coordsArr = dict.getArray(\"Coords\");\n    if (!isNumberArray(this.coordsArr, coordsLen)) {\n      throw new FormatError(\"RadialAxialShading: Invalid /Coords array.\");\n    }\n    const cs = ColorSpace.parse({\n      cs: dict.getRaw(\"CS\") || dict.getRaw(\"ColorSpace\"),\n      xref,\n      resources,\n      pdfFunctionFactory,\n      localColorSpaceCache\n    });\n    this.bbox = lookupNormalRect(dict.getArray(\"BBox\"), null);\n    let t0 = 0.0,\n      t1 = 1.0;\n    const domainArr = dict.getArray(\"Domain\");\n    if (isNumberArray(domainArr, 2)) {\n      [t0, t1] = domainArr;\n    }\n    let extendStart = false,\n      extendEnd = false;\n    const extendArr = dict.getArray(\"Extend\");\n    if (isBooleanArray(extendArr, 2)) {\n      [extendStart, extendEnd] = extendArr;\n    }\n    if (this.shadingType === ShadingType.RADIAL && (!extendStart || !extendEnd)) {\n      const [x1, y1, r1, x2, y2, r2] = this.coordsArr;\n      const distance = Math.hypot(x1 - x2, y1 - y2);\n      if (r1 <= r2 + distance && r2 <= r1 + distance) {\n        warn(\"Unsupported radial gradient.\");\n      }\n    }\n    this.extendStart = extendStart;\n    this.extendEnd = extendEnd;\n    const fnObj = dict.getRaw(\"Function\");\n    const fn = pdfFunctionFactory.createFromArray(fnObj);\n    const NUMBER_OF_SAMPLES = 840;\n    const step = (t1 - t0) / NUMBER_OF_SAMPLES;\n    const colorStops = this.colorStops = [];\n    if (t0 >= t1 || step <= 0) {\n      info(\"Bad shading domain.\");\n      return;\n    }\n    const color = new Float32Array(cs.numComps),\n      ratio = new Float32Array(1);\n    let rgbColor;\n    let iBase = 0;\n    ratio[0] = t0;\n    fn(ratio, 0, color, 0);\n    let rgbBase = cs.getRgb(color, 0);\n    const cssColorBase = Util.makeHexColor(rgbBase[0], rgbBase[1], rgbBase[2]);\n    colorStops.push([0, cssColorBase]);\n    let iPrev = 1;\n    ratio[0] = t0 + step;\n    fn(ratio, 0, color, 0);\n    let rgbPrev = cs.getRgb(color, 0);\n    let maxSlopeR = rgbPrev[0] - rgbBase[0] + 1;\n    let maxSlopeG = rgbPrev[1] - rgbBase[1] + 1;\n    let maxSlopeB = rgbPrev[2] - rgbBase[2] + 1;\n    let minSlopeR = rgbPrev[0] - rgbBase[0] - 1;\n    let minSlopeG = rgbPrev[1] - rgbBase[1] - 1;\n    let minSlopeB = rgbPrev[2] - rgbBase[2] - 1;\n    for (let i = 2; i < NUMBER_OF_SAMPLES; i++) {\n      ratio[0] = t0 + i * step;\n      fn(ratio, 0, color, 0);\n      rgbColor = cs.getRgb(color, 0);\n      const run = i - iBase;\n      maxSlopeR = Math.min(maxSlopeR, (rgbColor[0] - rgbBase[0] + 1) / run);\n      maxSlopeG = Math.min(maxSlopeG, (rgbColor[1] - rgbBase[1] + 1) / run);\n      maxSlopeB = Math.min(maxSlopeB, (rgbColor[2] - rgbBase[2] + 1) / run);\n      minSlopeR = Math.max(minSlopeR, (rgbColor[0] - rgbBase[0] - 1) / run);\n      minSlopeG = Math.max(minSlopeG, (rgbColor[1] - rgbBase[1] - 1) / run);\n      minSlopeB = Math.max(minSlopeB, (rgbColor[2] - rgbBase[2] - 1) / run);\n      const slopesExist = minSlopeR <= maxSlopeR && minSlopeG <= maxSlopeG && minSlopeB <= maxSlopeB;\n      if (!slopesExist) {\n        const cssColor = Util.makeHexColor(rgbPrev[0], rgbPrev[1], rgbPrev[2]);\n        colorStops.push([iPrev / NUMBER_OF_SAMPLES, cssColor]);\n        maxSlopeR = rgbColor[0] - rgbPrev[0] + 1;\n        maxSlopeG = rgbColor[1] - rgbPrev[1] + 1;\n        maxSlopeB = rgbColor[2] - rgbPrev[2] + 1;\n        minSlopeR = rgbColor[0] - rgbPrev[0] - 1;\n        minSlopeG = rgbColor[1] - rgbPrev[1] - 1;\n        minSlopeB = rgbColor[2] - rgbPrev[2] - 1;\n        iBase = iPrev;\n        rgbBase = rgbPrev;\n      }\n      iPrev = i;\n      rgbPrev = rgbColor;\n    }\n    const cssColor = Util.makeHexColor(rgbPrev[0], rgbPrev[1], rgbPrev[2]);\n    colorStops.push([1, cssColor]);\n    let background = \"transparent\";\n    if (dict.has(\"Background\")) {\n      rgbColor = cs.getRgb(dict.get(\"Background\"), 0);\n      background = Util.makeHexColor(rgbColor[0], rgbColor[1], rgbColor[2]);\n    }\n    if (!extendStart) {\n      colorStops.unshift([0, background]);\n      colorStops[1][0] += BaseShading.SMALL_NUMBER;\n    }\n    if (!extendEnd) {\n      colorStops.at(-1)[0] -= BaseShading.SMALL_NUMBER;\n      colorStops.push([1, background]);\n    }\n    this.colorStops = colorStops;\n  }\n  getIR() {\n    const {\n      coordsArr,\n      shadingType\n    } = this;\n    let type, p0, p1, r0, r1;\n    if (shadingType === ShadingType.AXIAL) {\n      p0 = [coordsArr[0], coordsArr[1]];\n      p1 = [coordsArr[2], coordsArr[3]];\n      r0 = null;\n      r1 = null;\n      type = \"axial\";\n    } else if (shadingType === ShadingType.RADIAL) {\n      p0 = [coordsArr[0], coordsArr[1]];\n      p1 = [coordsArr[3], coordsArr[4]];\n      r0 = coordsArr[2];\n      r1 = coordsArr[5];\n      type = \"radial\";\n    } else {\n      unreachable(`getPattern type unknown: ${shadingType}`);\n    }\n    return [\"RadialAxial\", type, this.bbox, this.colorStops, p0, p1, r0, r1];\n  }\n}\nclass MeshStreamReader {\n  constructor(stream, context) {\n    this.stream = stream;\n    this.context = context;\n    this.buffer = 0;\n    this.bufferLength = 0;\n    const numComps = context.numComps;\n    this.tmpCompsBuf = new Float32Array(numComps);\n    const csNumComps = context.colorSpace.numComps;\n    this.tmpCsCompsBuf = context.colorFn ? new Float32Array(csNumComps) : this.tmpCompsBuf;\n  }\n  get hasData() {\n    if (this.stream.end) {\n      return this.stream.pos < this.stream.end;\n    }\n    if (this.bufferLength > 0) {\n      return true;\n    }\n    const nextByte = this.stream.getByte();\n    if (nextByte < 0) {\n      return false;\n    }\n    this.buffer = nextByte;\n    this.bufferLength = 8;\n    return true;\n  }\n  readBits(n) {\n    let buffer = this.buffer;\n    let bufferLength = this.bufferLength;\n    if (n === 32) {\n      if (bufferLength === 0) {\n        return (this.stream.getByte() << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte()) >>> 0;\n      }\n      buffer = buffer << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte();\n      const nextByte = this.stream.getByte();\n      this.buffer = nextByte & (1 << bufferLength) - 1;\n      return (buffer << 8 - bufferLength | (nextByte & 0xff) >> bufferLength) >>> 0;\n    }\n    if (n === 8 && bufferLength === 0) {\n      return this.stream.getByte();\n    }\n    while (bufferLength < n) {\n      buffer = buffer << 8 | this.stream.getByte();\n      bufferLength += 8;\n    }\n    bufferLength -= n;\n    this.bufferLength = bufferLength;\n    this.buffer = buffer & (1 << bufferLength) - 1;\n    return buffer >> bufferLength;\n  }\n  align() {\n    this.buffer = 0;\n    this.bufferLength = 0;\n  }\n  readFlag() {\n    return this.readBits(this.context.bitsPerFlag);\n  }\n  readCoordinate() {\n    const bitsPerCoordinate = this.context.bitsPerCoordinate;\n    const xi = this.readBits(bitsPerCoordinate);\n    const yi = this.readBits(bitsPerCoordinate);\n    const decode = this.context.decode;\n    const scale = bitsPerCoordinate < 32 ? 1 / ((1 << bitsPerCoordinate) - 1) : 2.3283064365386963e-10;\n    return [xi * scale * (decode[1] - decode[0]) + decode[0], yi * scale * (decode[3] - decode[2]) + decode[2]];\n  }\n  readComponents() {\n    const numComps = this.context.numComps;\n    const bitsPerComponent = this.context.bitsPerComponent;\n    const scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) : 2.3283064365386963e-10;\n    const decode = this.context.decode;\n    const components = this.tmpCompsBuf;\n    for (let i = 0, j = 4; i < numComps; i++, j += 2) {\n      const ci = this.readBits(bitsPerComponent);\n      components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j];\n    }\n    const color = this.tmpCsCompsBuf;\n    if (this.context.colorFn) {\n      this.context.colorFn(components, 0, color, 0);\n    }\n    return this.context.colorSpace.getRgb(color, 0);\n  }\n}\nlet bCache = Object.create(null);\nfunction buildB(count) {\n  const lut = [];\n  for (let i = 0; i <= count; i++) {\n    const t = i / count,\n      t_ = 1 - t;\n    lut.push(new Float32Array([t_ ** 3, 3 * t * t_ ** 2, 3 * t ** 2 * t_, t ** 3]));\n  }\n  return lut;\n}\nfunction getB(count) {\n  return bCache[count] ||= buildB(count);\n}\nfunction clearPatternCaches() {\n  bCache = Object.create(null);\n}\nclass MeshShading extends BaseShading {\n  static MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3;\n  static MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20;\n  static TRIANGLE_DENSITY = 20;\n  constructor(stream, xref, resources, pdfFunctionFactory, localColorSpaceCache) {\n    super();\n    if (!(stream instanceof BaseStream)) {\n      throw new FormatError(\"Mesh data is not a stream\");\n    }\n    const dict = stream.dict;\n    this.shadingType = dict.get(\"ShadingType\");\n    this.bbox = lookupNormalRect(dict.getArray(\"BBox\"), null);\n    const cs = ColorSpace.parse({\n      cs: dict.getRaw(\"CS\") || dict.getRaw(\"ColorSpace\"),\n      xref,\n      resources,\n      pdfFunctionFactory,\n      localColorSpaceCache\n    });\n    this.background = dict.has(\"Background\") ? cs.getRgb(dict.get(\"Background\"), 0) : null;\n    const fnObj = dict.getRaw(\"Function\");\n    const fn = fnObj ? pdfFunctionFactory.createFromArray(fnObj) : null;\n    this.coords = [];\n    this.colors = [];\n    this.figures = [];\n    const decodeContext = {\n      bitsPerCoordinate: dict.get(\"BitsPerCoordinate\"),\n      bitsPerComponent: dict.get(\"BitsPerComponent\"),\n      bitsPerFlag: dict.get(\"BitsPerFlag\"),\n      decode: dict.getArray(\"Decode\"),\n      colorFn: fn,\n      colorSpace: cs,\n      numComps: fn ? 1 : cs.numComps\n    };\n    const reader = new MeshStreamReader(stream, decodeContext);\n    let patchMesh = false;\n    switch (this.shadingType) {\n      case ShadingType.FREE_FORM_MESH:\n        this._decodeType4Shading(reader);\n        break;\n      case ShadingType.LATTICE_FORM_MESH:\n        const verticesPerRow = dict.get(\"VerticesPerRow\") | 0;\n        if (verticesPerRow < 2) {\n          throw new FormatError(\"Invalid VerticesPerRow\");\n        }\n        this._decodeType5Shading(reader, verticesPerRow);\n        break;\n      case ShadingType.COONS_PATCH_MESH:\n        this._decodeType6Shading(reader);\n        patchMesh = true;\n        break;\n      case ShadingType.TENSOR_PATCH_MESH:\n        this._decodeType7Shading(reader);\n        patchMesh = true;\n        break;\n      default:\n        unreachable(\"Unsupported mesh type.\");\n        break;\n    }\n    if (patchMesh) {\n      this._updateBounds();\n      for (let i = 0, ii = this.figures.length; i < ii; i++) {\n        this._buildFigureFromPatch(i);\n      }\n    }\n    this._updateBounds();\n    this._packData();\n  }\n  _decodeType4Shading(reader) {\n    const coords = this.coords;\n    const colors = this.colors;\n    const operators = [];\n    const ps = [];\n    let verticesLeft = 0;\n    while (reader.hasData) {\n      const f = reader.readFlag();\n      const coord = reader.readCoordinate();\n      const color = reader.readComponents();\n      if (verticesLeft === 0) {\n        if (!(0 <= f && f <= 2)) {\n          throw new FormatError(\"Unknown type4 flag\");\n        }\n        switch (f) {\n          case 0:\n            verticesLeft = 3;\n            break;\n          case 1:\n            ps.push(ps.at(-2), ps.at(-1));\n            verticesLeft = 1;\n            break;\n          case 2:\n            ps.push(ps.at(-3), ps.at(-1));\n            verticesLeft = 1;\n            break;\n        }\n        operators.push(f);\n      }\n      ps.push(coords.length);\n      coords.push(coord);\n      colors.push(color);\n      verticesLeft--;\n      reader.align();\n    }\n    this.figures.push({\n      type: \"triangles\",\n      coords: new Int32Array(ps),\n      colors: new Int32Array(ps)\n    });\n  }\n  _decodeType5Shading(reader, verticesPerRow) {\n    const coords = this.coords;\n    const colors = this.colors;\n    const ps = [];\n    while (reader.hasData) {\n      const coord = reader.readCoordinate();\n      const color = reader.readComponents();\n      ps.push(coords.length);\n      coords.push(coord);\n      colors.push(color);\n    }\n    this.figures.push({\n      type: \"lattice\",\n      coords: new Int32Array(ps),\n      colors: new Int32Array(ps),\n      verticesPerRow\n    });\n  }\n  _decodeType6Shading(reader) {\n    const coords = this.coords;\n    const colors = this.colors;\n    const ps = new Int32Array(16);\n    const cs = new Int32Array(4);\n    while (reader.hasData) {\n      const f = reader.readFlag();\n      if (!(0 <= f && f <= 3)) {\n        throw new FormatError(\"Unknown type6 flag\");\n      }\n      const pi = coords.length;\n      for (let i = 0, ii = f !== 0 ? 8 : 12; i < ii; i++) {\n        coords.push(reader.readCoordinate());\n      }\n      const ci = colors.length;\n      for (let i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {\n        colors.push(reader.readComponents());\n      }\n      let tmp1, tmp2, tmp3, tmp4;\n      switch (f) {\n        case 0:\n          ps[12] = pi + 3;\n          ps[13] = pi + 4;\n          ps[14] = pi + 5;\n          ps[15] = pi + 6;\n          ps[8] = pi + 2;\n          ps[11] = pi + 7;\n          ps[4] = pi + 1;\n          ps[7] = pi + 8;\n          ps[0] = pi;\n          ps[1] = pi + 11;\n          ps[2] = pi + 10;\n          ps[3] = pi + 9;\n          cs[2] = ci + 1;\n          cs[3] = ci + 2;\n          cs[0] = ci;\n          cs[1] = ci + 3;\n          break;\n        case 1:\n          tmp1 = ps[12];\n          tmp2 = ps[13];\n          tmp3 = ps[14];\n          tmp4 = ps[15];\n          ps[12] = tmp4;\n          ps[13] = pi + 0;\n          ps[14] = pi + 1;\n          ps[15] = pi + 2;\n          ps[8] = tmp3;\n          ps[11] = pi + 3;\n          ps[4] = tmp2;\n          ps[7] = pi + 4;\n          ps[0] = tmp1;\n          ps[1] = pi + 7;\n          ps[2] = pi + 6;\n          ps[3] = pi + 5;\n          tmp1 = cs[2];\n          tmp2 = cs[3];\n          cs[2] = tmp2;\n          cs[3] = ci;\n          cs[0] = tmp1;\n          cs[1] = ci + 1;\n          break;\n        case 2:\n          tmp1 = ps[15];\n          tmp2 = ps[11];\n          ps[12] = ps[3];\n          ps[13] = pi + 0;\n          ps[14] = pi + 1;\n          ps[15] = pi + 2;\n          ps[8] = ps[7];\n          ps[11] = pi + 3;\n          ps[4] = tmp2;\n          ps[7] = pi + 4;\n          ps[0] = tmp1;\n          ps[1] = pi + 7;\n          ps[2] = pi + 6;\n          ps[3] = pi + 5;\n          tmp1 = cs[3];\n          cs[2] = cs[1];\n          cs[3] = ci;\n          cs[0] = tmp1;\n          cs[1] = ci + 1;\n          break;\n        case 3:\n          ps[12] = ps[0];\n          ps[13] = pi + 0;\n          ps[14] = pi + 1;\n          ps[15] = pi + 2;\n          ps[8] = ps[1];\n          ps[11] = pi + 3;\n          ps[4] = ps[2];\n          ps[7] = pi + 4;\n          ps[0] = ps[3];\n          ps[1] = pi + 7;\n          ps[2] = pi + 6;\n          ps[3] = pi + 5;\n          cs[2] = cs[0];\n          cs[3] = ci;\n          cs[0] = cs[1];\n          cs[1] = ci + 1;\n          break;\n      }\n      ps[5] = coords.length;\n      coords.push([(-4 * coords[ps[0]][0] - coords[ps[15]][0] + 6 * (coords[ps[4]][0] + coords[ps[1]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[13]][0] + coords[ps[7]][0])) / 9, (-4 * coords[ps[0]][1] - coords[ps[15]][1] + 6 * (coords[ps[4]][1] + coords[ps[1]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[13]][1] + coords[ps[7]][1])) / 9]);\n      ps[6] = coords.length;\n      coords.push([(-4 * coords[ps[3]][0] - coords[ps[12]][0] + 6 * (coords[ps[2]][0] + coords[ps[7]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[4]][0] + coords[ps[14]][0])) / 9, (-4 * coords[ps[3]][1] - coords[ps[12]][1] + 6 * (coords[ps[2]][1] + coords[ps[7]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[4]][1] + coords[ps[14]][1])) / 9]);\n      ps[9] = coords.length;\n      coords.push([(-4 * coords[ps[12]][0] - coords[ps[3]][0] + 6 * (coords[ps[8]][0] + coords[ps[13]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[11]][0] + coords[ps[1]][0])) / 9, (-4 * coords[ps[12]][1] - coords[ps[3]][1] + 6 * (coords[ps[8]][1] + coords[ps[13]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[11]][1] + coords[ps[1]][1])) / 9]);\n      ps[10] = coords.length;\n      coords.push([(-4 * coords[ps[15]][0] - coords[ps[0]][0] + 6 * (coords[ps[11]][0] + coords[ps[14]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[2]][0] + coords[ps[8]][0])) / 9, (-4 * coords[ps[15]][1] - coords[ps[0]][1] + 6 * (coords[ps[11]][1] + coords[ps[14]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[2]][1] + coords[ps[8]][1])) / 9]);\n      this.figures.push({\n        type: \"patch\",\n        coords: new Int32Array(ps),\n        colors: new Int32Array(cs)\n      });\n    }\n  }\n  _decodeType7Shading(reader) {\n    const coords = this.coords;\n    const colors = this.colors;\n    const ps = new Int32Array(16);\n    const cs = new Int32Array(4);\n    while (reader.hasData) {\n      const f = reader.readFlag();\n      if (!(0 <= f && f <= 3)) {\n        throw new FormatError(\"Unknown type7 flag\");\n      }\n      const pi = coords.length;\n      for (let i = 0, ii = f !== 0 ? 12 : 16; i < ii; i++) {\n        coords.push(reader.readCoordinate());\n      }\n      const ci = colors.length;\n      for (let i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {\n        colors.push(reader.readComponents());\n      }\n      let tmp1, tmp2, tmp3, tmp4;\n      switch (f) {\n        case 0:\n          ps[12] = pi + 3;\n          ps[13] = pi + 4;\n          ps[14] = pi + 5;\n          ps[15] = pi + 6;\n          ps[8] = pi + 2;\n          ps[9] = pi + 13;\n          ps[10] = pi + 14;\n          ps[11] = pi + 7;\n          ps[4] = pi + 1;\n          ps[5] = pi + 12;\n          ps[6] = pi + 15;\n          ps[7] = pi + 8;\n          ps[0] = pi;\n          ps[1] = pi + 11;\n          ps[2] = pi + 10;\n          ps[3] = pi + 9;\n          cs[2] = ci + 1;\n          cs[3] = ci + 2;\n          cs[0] = ci;\n          cs[1] = ci + 3;\n          break;\n        case 1:\n          tmp1 = ps[12];\n          tmp2 = ps[13];\n          tmp3 = ps[14];\n          tmp4 = ps[15];\n          ps[12] = tmp4;\n          ps[13] = pi + 0;\n          ps[14] = pi + 1;\n          ps[15] = pi + 2;\n          ps[8] = tmp3;\n          ps[9] = pi + 9;\n          ps[10] = pi + 10;\n          ps[11] = pi + 3;\n          ps[4] = tmp2;\n          ps[5] = pi + 8;\n          ps[6] = pi + 11;\n          ps[7] = pi + 4;\n          ps[0] = tmp1;\n          ps[1] = pi + 7;\n          ps[2] = pi + 6;\n          ps[3] = pi + 5;\n          tmp1 = cs[2];\n          tmp2 = cs[3];\n          cs[2] = tmp2;\n          cs[3] = ci;\n          cs[0] = tmp1;\n          cs[1] = ci + 1;\n          break;\n        case 2:\n          tmp1 = ps[15];\n          tmp2 = ps[11];\n          ps[12] = ps[3];\n          ps[13] = pi + 0;\n          ps[14] = pi + 1;\n          ps[15] = pi + 2;\n          ps[8] = ps[7];\n          ps[9] = pi + 9;\n          ps[10] = pi + 10;\n          ps[11] = pi + 3;\n          ps[4] = tmp2;\n          ps[5] = pi + 8;\n          ps[6] = pi + 11;\n          ps[7] = pi + 4;\n          ps[0] = tmp1;\n          ps[1] = pi + 7;\n          ps[2] = pi + 6;\n          ps[3] = pi + 5;\n          tmp1 = cs[3];\n          cs[2] = cs[1];\n          cs[3] = ci;\n          cs[0] = tmp1;\n          cs[1] = ci + 1;\n          break;\n        case 3:\n          ps[12] = ps[0];\n          ps[13] = pi + 0;\n          ps[14] = pi + 1;\n          ps[15] = pi + 2;\n          ps[8] = ps[1];\n          ps[9] = pi + 9;\n          ps[10] = pi + 10;\n          ps[11] = pi + 3;\n          ps[4] = ps[2];\n          ps[5] = pi + 8;\n          ps[6] = pi + 11;\n          ps[7] = pi + 4;\n          ps[0] = ps[3];\n          ps[1] = pi + 7;\n          ps[2] = pi + 6;\n          ps[3] = pi + 5;\n          cs[2] = cs[0];\n          cs[3] = ci;\n          cs[0] = cs[1];\n          cs[1] = ci + 1;\n          break;\n      }\n      this.figures.push({\n        type: \"patch\",\n        coords: new Int32Array(ps),\n        colors: new Int32Array(cs)\n      });\n    }\n  }\n  _buildFigureFromPatch(index) {\n    const figure = this.figures[index];\n    assert(figure.type === \"patch\", \"Unexpected patch mesh figure\");\n    const coords = this.coords,\n      colors = this.colors;\n    const pi = figure.coords;\n    const ci = figure.colors;\n    const figureMinX = Math.min(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]);\n    const figureMinY = Math.min(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]);\n    const figureMaxX = Math.max(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]);\n    const figureMaxY = Math.max(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]);\n    let splitXBy = Math.ceil((figureMaxX - figureMinX) * MeshShading.TRIANGLE_DENSITY / (this.bounds[2] - this.bounds[0]));\n    splitXBy = Math.max(MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy));\n    let splitYBy = Math.ceil((figureMaxY - figureMinY) * MeshShading.TRIANGLE_DENSITY / (this.bounds[3] - this.bounds[1]));\n    splitYBy = Math.max(MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy));\n    const verticesPerRow = splitXBy + 1;\n    const figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow);\n    const figureColors = new Int32Array((splitYBy + 1) * verticesPerRow);\n    let k = 0;\n    const cl = new Uint8Array(3),\n      cr = new Uint8Array(3);\n    const c0 = colors[ci[0]],\n      c1 = colors[ci[1]],\n      c2 = colors[ci[2]],\n      c3 = colors[ci[3]];\n    const bRow = getB(splitYBy),\n      bCol = getB(splitXBy);\n    for (let row = 0; row <= splitYBy; row++) {\n      cl[0] = (c0[0] * (splitYBy - row) + c2[0] * row) / splitYBy | 0;\n      cl[1] = (c0[1] * (splitYBy - row) + c2[1] * row) / splitYBy | 0;\n      cl[2] = (c0[2] * (splitYBy - row) + c2[2] * row) / splitYBy | 0;\n      cr[0] = (c1[0] * (splitYBy - row) + c3[0] * row) / splitYBy | 0;\n      cr[1] = (c1[1] * (splitYBy - row) + c3[1] * row) / splitYBy | 0;\n      cr[2] = (c1[2] * (splitYBy - row) + c3[2] * row) / splitYBy | 0;\n      for (let col = 0; col <= splitXBy; col++, k++) {\n        if ((row === 0 || row === splitYBy) && (col === 0 || col === splitXBy)) {\n          continue;\n        }\n        let x = 0,\n          y = 0;\n        let q = 0;\n        for (let i = 0; i <= 3; i++) {\n          for (let j = 0; j <= 3; j++, q++) {\n            const m = bRow[row][i] * bCol[col][j];\n            x += coords[pi[q]][0] * m;\n            y += coords[pi[q]][1] * m;\n          }\n        }\n        figureCoords[k] = coords.length;\n        coords.push([x, y]);\n        figureColors[k] = colors.length;\n        const newColor = new Uint8Array(3);\n        newColor[0] = (cl[0] * (splitXBy - col) + cr[0] * col) / splitXBy | 0;\n        newColor[1] = (cl[1] * (splitXBy - col) + cr[1] * col) / splitXBy | 0;\n        newColor[2] = (cl[2] * (splitXBy - col) + cr[2] * col) / splitXBy | 0;\n        colors.push(newColor);\n      }\n    }\n    figureCoords[0] = pi[0];\n    figureColors[0] = ci[0];\n    figureCoords[splitXBy] = pi[3];\n    figureColors[splitXBy] = ci[1];\n    figureCoords[verticesPerRow * splitYBy] = pi[12];\n    figureColors[verticesPerRow * splitYBy] = ci[2];\n    figureCoords[verticesPerRow * splitYBy + splitXBy] = pi[15];\n    figureColors[verticesPerRow * splitYBy + splitXBy] = ci[3];\n    this.figures[index] = {\n      type: \"lattice\",\n      coords: figureCoords,\n      colors: figureColors,\n      verticesPerRow\n    };\n  }\n  _updateBounds() {\n    let minX = this.coords[0][0],\n      minY = this.coords[0][1],\n      maxX = minX,\n      maxY = minY;\n    for (let i = 1, ii = this.coords.length; i < ii; i++) {\n      const x = this.coords[i][0],\n        y = this.coords[i][1];\n      minX = minX > x ? x : minX;\n      minY = minY > y ? y : minY;\n      maxX = maxX < x ? x : maxX;\n      maxY = maxY < y ? y : maxY;\n    }\n    this.bounds = [minX, minY, maxX, maxY];\n  }\n  _packData() {\n    let i, ii, j, jj;\n    const coords = this.coords;\n    const coordsPacked = new Float32Array(coords.length * 2);\n    for (i = 0, j = 0, ii = coords.length; i < ii; i++) {\n      const xy = coords[i];\n      coordsPacked[j++] = xy[0];\n      coordsPacked[j++] = xy[1];\n    }\n    this.coords = coordsPacked;\n    const colors = this.colors;\n    const colorsPacked = new Uint8Array(colors.length * 3);\n    for (i = 0, j = 0, ii = colors.length; i < ii; i++) {\n      const c = colors[i];\n      colorsPacked[j++] = c[0];\n      colorsPacked[j++] = c[1];\n      colorsPacked[j++] = c[2];\n    }\n    this.colors = colorsPacked;\n    const figures = this.figures;\n    for (i = 0, ii = figures.length; i < ii; i++) {\n      const figure = figures[i],\n        ps = figure.coords,\n        cs = figure.colors;\n      for (j = 0, jj = ps.length; j < jj; j++) {\n        ps[j] *= 2;\n        cs[j] *= 3;\n      }\n    }\n  }\n  getIR() {\n    const {\n      bounds\n    } = this;\n    if (bounds[2] - bounds[0] === 0 || bounds[3] - bounds[1] === 0) {\n      throw new FormatError(`Invalid MeshShading bounds: [${bounds}].`);\n    }\n    return [\"Mesh\", this.shadingType, this.coords, this.colors, this.figures, bounds, this.bbox, this.background];\n  }\n}\nclass DummyShading extends BaseShading {\n  getIR() {\n    return [\"Dummy\"];\n  }\n}\nfunction getTilingPatternIR(operatorList, dict, color) {\n  const matrix = lookupMatrix(dict.getArray(\"Matrix\"), IDENTITY_MATRIX);\n  const bbox = lookupNormalRect(dict.getArray(\"BBox\"), null);\n  if (!bbox || bbox[2] - bbox[0] === 0 || bbox[3] - bbox[1] === 0) {\n    throw new FormatError(`Invalid getTilingPatternIR /BBox array.`);\n  }\n  const xstep = dict.get(\"XStep\");\n  if (typeof xstep !== \"number\") {\n    throw new FormatError(`Invalid getTilingPatternIR /XStep value.`);\n  }\n  const ystep = dict.get(\"YStep\");\n  if (typeof ystep !== \"number\") {\n    throw new FormatError(`Invalid getTilingPatternIR /YStep value.`);\n  }\n  const paintType = dict.get(\"PaintType\");\n  if (!Number.isInteger(paintType)) {\n    throw new FormatError(`Invalid getTilingPatternIR /PaintType value.`);\n  }\n  const tilingType = dict.get(\"TilingType\");\n  if (!Number.isInteger(tilingType)) {\n    throw new FormatError(`Invalid getTilingPatternIR /TilingType value.`);\n  }\n  return [\"TilingPattern\", color, operatorList, matrix, bbox, xstep, ystep, paintType, tilingType];\n}\n\n;// CONCATENATED MODULE: ./src/core/calibri_factors.js\nconst CalibriBoldFactors = [1.3877, 1, 1, 1, 0.97801, 0.92482, 0.89552, 0.91133, 0.81988, 0.97566, 0.98152, 0.93548, 0.93548, 1.2798, 0.85284, 0.92794, 1, 0.96134, 1.54657, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.82845, 0.82845, 0.85284, 0.85284, 0.85284, 0.75859, 0.92138, 0.83908, 0.7762, 0.73293, 0.87289, 0.73133, 0.7514, 0.81921, 0.87356, 0.95958, 0.59526, 0.75727, 0.69225, 1.04924, 0.9121, 0.86943, 0.79795, 0.88198, 0.77958, 0.70864, 0.81055, 0.90399, 0.88653, 0.96017, 0.82577, 0.77892, 0.78257, 0.97507, 1.54657, 0.97507, 0.85284, 0.89552, 0.90176, 0.88762, 0.8785, 0.75241, 0.8785, 0.90518, 0.95015, 0.77618, 0.8785, 0.88401, 0.91916, 0.86304, 0.88401, 0.91488, 0.8785, 0.8801, 0.8785, 0.8785, 0.91343, 0.7173, 1.04106, 0.8785, 0.85075, 0.95794, 0.82616, 0.85162, 0.79492, 0.88331, 1.69808, 0.88331, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.7801, 0.89552, 1.24487, 1.13254, 1.12401, 0.96839, 0.85284, 0.68787, 0.70645, 0.85592, 0.90747, 1.01466, 1.0088, 0.90323, 1, 1.07463, 1, 0.91056, 0.75806, 1.19118, 0.96839, 0.78864, 0.82845, 0.84133, 0.75859, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.77539, 0.73293, 0.73133, 0.73133, 0.73133, 0.73133, 0.95958, 0.95958, 0.95958, 0.95958, 0.88506, 0.9121, 0.86943, 0.86943, 0.86943, 0.86943, 0.86943, 0.85284, 0.87508, 0.90399, 0.90399, 0.90399, 0.90399, 0.77892, 0.79795, 0.90807, 0.88762, 0.88762, 0.88762, 0.88762, 0.88762, 0.88762, 0.8715, 0.75241, 0.90518, 0.90518, 0.90518, 0.90518, 0.88401, 0.88401, 0.88401, 0.88401, 0.8785, 0.8785, 0.8801, 0.8801, 0.8801, 0.8801, 0.8801, 0.90747, 0.89049, 0.8785, 0.8785, 0.8785, 0.8785, 0.85162, 0.8785, 0.85162, 0.83908, 0.88762, 0.83908, 0.88762, 0.83908, 0.88762, 0.73293, 0.75241, 0.73293, 0.75241, 0.73293, 0.75241, 0.73293, 0.75241, 0.87289, 0.83016, 0.88506, 0.93125, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.81921, 0.77618, 0.81921, 0.77618, 0.81921, 0.77618, 1, 1, 0.87356, 0.8785, 0.91075, 0.89608, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.76229, 0.90167, 0.59526, 0.91916, 1, 1, 0.86304, 0.69225, 0.88401, 1, 1, 0.70424, 0.79468, 0.91926, 0.88175, 0.70823, 0.94903, 0.9121, 0.8785, 1, 1, 0.9121, 0.8785, 0.87802, 0.88656, 0.8785, 0.86943, 0.8801, 0.86943, 0.8801, 0.86943, 0.8801, 0.87402, 0.89291, 0.77958, 0.91343, 1, 1, 0.77958, 0.91343, 0.70864, 0.7173, 0.70864, 0.7173, 0.70864, 0.7173, 0.70864, 0.7173, 1, 1, 0.81055, 0.75841, 0.81055, 1.06452, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.96017, 0.95794, 0.77892, 0.85162, 0.77892, 0.78257, 0.79492, 0.78257, 0.79492, 0.78257, 0.79492, 0.9297, 0.56892, 0.83908, 0.88762, 0.77539, 0.8715, 0.87508, 0.89049, 1, 1, 0.81055, 1.04106, 1.20528, 1.20528, 1, 1.15543, 0.70674, 0.98387, 0.94721, 1.33431, 1.45894, 0.95161, 1.06303, 0.83908, 0.80352, 0.57184, 0.6965, 0.56289, 0.82001, 0.56029, 0.81235, 1.02988, 0.83908, 0.7762, 0.68156, 0.80367, 0.73133, 0.78257, 0.87356, 0.86943, 0.95958, 0.75727, 0.89019, 1.04924, 0.9121, 0.7648, 0.86943, 0.87356, 0.79795, 0.78275, 0.81055, 0.77892, 0.9762, 0.82577, 0.99819, 0.84896, 0.95958, 0.77892, 0.96108, 1.01407, 0.89049, 1.02988, 0.94211, 0.96108, 0.8936, 0.84021, 0.87842, 0.96399, 0.79109, 0.89049, 1.00813, 1.02988, 0.86077, 0.87445, 0.92099, 0.84723, 0.86513, 0.8801, 0.75638, 0.85714, 0.78216, 0.79586, 0.87965, 0.94211, 0.97747, 0.78287, 0.97926, 0.84971, 1.02988, 0.94211, 0.8801, 0.94211, 0.84971, 0.73133, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90264, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90518, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90548, 1, 1, 1, 1, 1, 1, 0.96017, 0.95794, 0.96017, 0.95794, 0.96017, 0.95794, 0.77892, 0.85162, 1, 1, 0.89552, 0.90527, 1, 0.90363, 0.92794, 0.92794, 0.92794, 0.92794, 0.87012, 0.87012, 0.87012, 0.89552, 0.89552, 1.42259, 0.71143, 1.06152, 1, 1, 1.03372, 1.03372, 0.97171, 1.4956, 2.2807, 0.93835, 0.83406, 0.91133, 0.84107, 0.91133, 1, 1, 1, 0.72021, 1, 1.23108, 0.83489, 0.88525, 0.88525, 0.81499, 0.90527, 1.81055, 0.90527, 1.81055, 1.31006, 1.53711, 0.94434, 1.08696, 1, 0.95018, 0.77192, 0.85284, 0.90747, 1.17534, 0.69825, 0.9716, 1.37077, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.08004, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90727, 0.90727, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\nconst CalibriBoldMetrics = {\n  lineHeight: 1.2207,\n  lineGap: 0.2207\n};\nconst CalibriBoldItalicFactors = [1.3877, 1, 1, 1, 0.97801, 0.92482, 0.89552, 0.91133, 0.81988, 0.97566, 0.98152, 0.93548, 0.93548, 1.2798, 0.85284, 0.92794, 1, 0.96134, 1.56239, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.82845, 0.82845, 0.85284, 0.85284, 0.85284, 0.75859, 0.92138, 0.83908, 0.7762, 0.71805, 0.87289, 0.73133, 0.7514, 0.81921, 0.87356, 0.95958, 0.59526, 0.75727, 0.69225, 1.04924, 0.90872, 0.85938, 0.79795, 0.87068, 0.77958, 0.69766, 0.81055, 0.90399, 0.88653, 0.96068, 0.82577, 0.77892, 0.78257, 0.97507, 1.529, 0.97507, 0.85284, 0.89552, 0.90176, 0.94908, 0.86411, 0.74012, 0.86411, 0.88323, 0.95015, 0.86411, 0.86331, 0.88401, 0.91916, 0.86304, 0.88401, 0.9039, 0.86331, 0.86331, 0.86411, 0.86411, 0.90464, 0.70852, 1.04106, 0.86331, 0.84372, 0.95794, 0.82616, 0.84548, 0.79492, 0.88331, 1.69808, 0.88331, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.7801, 0.89552, 1.24487, 1.13254, 1.19129, 0.96839, 0.85284, 0.68787, 0.70645, 0.85592, 0.90747, 1.01466, 1.0088, 0.90323, 1, 1.07463, 1, 0.91056, 0.75806, 1.19118, 0.96839, 0.78864, 0.82845, 0.84133, 0.75859, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.77539, 0.71805, 0.73133, 0.73133, 0.73133, 0.73133, 0.95958, 0.95958, 0.95958, 0.95958, 0.88506, 0.90872, 0.85938, 0.85938, 0.85938, 0.85938, 0.85938, 0.85284, 0.87068, 0.90399, 0.90399, 0.90399, 0.90399, 0.77892, 0.79795, 0.90807, 0.94908, 0.94908, 0.94908, 0.94908, 0.94908, 0.94908, 0.85887, 0.74012, 0.88323, 0.88323, 0.88323, 0.88323, 0.88401, 0.88401, 0.88401, 0.88401, 0.8785, 0.86331, 0.86331, 0.86331, 0.86331, 0.86331, 0.86331, 0.90747, 0.89049, 0.86331, 0.86331, 0.86331, 0.86331, 0.84548, 0.86411, 0.84548, 0.83908, 0.94908, 0.83908, 0.94908, 0.83908, 0.94908, 0.71805, 0.74012, 0.71805, 0.74012, 0.71805, 0.74012, 0.71805, 0.74012, 0.87289, 0.79538, 0.88506, 0.92726, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.81921, 0.86411, 0.81921, 0.86411, 0.81921, 0.86411, 1, 1, 0.87356, 0.86331, 0.91075, 0.8777, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.76467, 0.90167, 0.59526, 0.91916, 1, 1, 0.86304, 0.69225, 0.88401, 1, 1, 0.70424, 0.77312, 0.91926, 0.88175, 0.70823, 0.94903, 0.90872, 0.86331, 1, 1, 0.90872, 0.86331, 0.86906, 0.88116, 0.86331, 0.85938, 0.86331, 0.85938, 0.86331, 0.85938, 0.86331, 0.87402, 0.86549, 0.77958, 0.90464, 1, 1, 0.77958, 0.90464, 0.69766, 0.70852, 0.69766, 0.70852, 0.69766, 0.70852, 0.69766, 0.70852, 1, 1, 0.81055, 0.75841, 0.81055, 1.06452, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.96068, 0.95794, 0.77892, 0.84548, 0.77892, 0.78257, 0.79492, 0.78257, 0.79492, 0.78257, 0.79492, 0.9297, 0.56892, 0.83908, 0.94908, 0.77539, 0.85887, 0.87068, 0.89049, 1, 1, 0.81055, 1.04106, 1.20528, 1.20528, 1, 1.15543, 0.70088, 0.98387, 0.94721, 1.33431, 1.45894, 0.95161, 1.48387, 0.83908, 0.80352, 0.57118, 0.6965, 0.56347, 0.79179, 0.55853, 0.80346, 1.02988, 0.83908, 0.7762, 0.67174, 0.86036, 0.73133, 0.78257, 0.87356, 0.86441, 0.95958, 0.75727, 0.89019, 1.04924, 0.90872, 0.74889, 0.85938, 0.87891, 0.79795, 0.7957, 0.81055, 0.77892, 0.97447, 0.82577, 0.97466, 0.87179, 0.95958, 0.77892, 0.94252, 0.95612, 0.8753, 1.02988, 0.92733, 0.94252, 0.87411, 0.84021, 0.8728, 0.95612, 0.74081, 0.8753, 1.02189, 1.02988, 0.84814, 0.87445, 0.91822, 0.84723, 0.85668, 0.86331, 0.81344, 0.87581, 0.76422, 0.82046, 0.96057, 0.92733, 0.99375, 0.78022, 0.95452, 0.86015, 1.02988, 0.92733, 0.86331, 0.92733, 0.86015, 0.73133, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90631, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.88323, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.85174, 1, 1, 1, 1, 1, 1, 0.96068, 0.95794, 0.96068, 0.95794, 0.96068, 0.95794, 0.77892, 0.84548, 1, 1, 0.89552, 0.90527, 1, 0.90363, 0.92794, 0.92794, 0.92794, 0.89807, 0.87012, 0.87012, 0.87012, 0.89552, 0.89552, 1.42259, 0.71094, 1.06152, 1, 1, 1.03372, 1.03372, 0.97171, 1.4956, 2.2807, 0.92972, 0.83406, 0.91133, 0.83326, 0.91133, 1, 1, 1, 0.72021, 1, 1.23108, 0.83489, 0.88525, 0.88525, 0.81499, 0.90616, 1.81055, 0.90527, 1.81055, 1.3107, 1.53711, 0.94434, 1.08696, 1, 0.95018, 0.77192, 0.85284, 0.90747, 1.17534, 0.69825, 0.9716, 1.37077, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.08004, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90727, 0.90727, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\nconst CalibriBoldItalicMetrics = {\n  lineHeight: 1.2207,\n  lineGap: 0.2207\n};\nconst CalibriItalicFactors = [1.3877, 1, 1, 1, 1.17223, 1.1293, 0.89552, 0.91133, 0.80395, 1.02269, 1.15601, 0.91056, 0.91056, 1.2798, 0.85284, 0.89807, 1, 0.90861, 1.39543, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.96309, 0.96309, 0.85284, 0.85284, 0.85284, 0.83319, 0.88071, 0.8675, 0.81552, 0.72346, 0.85193, 0.73206, 0.7522, 0.81105, 0.86275, 0.90685, 0.6377, 0.77892, 0.75593, 1.02638, 0.89249, 0.84118, 0.77452, 0.85374, 0.75186, 0.67789, 0.79776, 0.88844, 0.85066, 0.94309, 0.77818, 0.7306, 0.76659, 1.10369, 1.38313, 1.10369, 1.06139, 0.89552, 0.8739, 0.9245, 0.9245, 0.83203, 0.9245, 0.85865, 1.09842, 0.9245, 0.9245, 1.03297, 1.07692, 0.90918, 1.03297, 0.94959, 0.9245, 0.92274, 0.9245, 0.9245, 1.02933, 0.77832, 1.20562, 0.9245, 0.8916, 0.98986, 0.86621, 0.89453, 0.79004, 0.94152, 1.77256, 0.94152, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.91729, 0.89552, 1.17889, 1.13254, 1.16359, 0.92098, 0.85284, 0.68787, 0.71353, 0.84737, 0.90747, 1.0088, 1.0044, 0.87683, 1, 1.09091, 1, 0.92229, 0.739, 1.15642, 0.92098, 0.76288, 0.80504, 0.80972, 0.75859, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.76318, 0.72346, 0.73206, 0.73206, 0.73206, 0.73206, 0.90685, 0.90685, 0.90685, 0.90685, 0.86477, 0.89249, 0.84118, 0.84118, 0.84118, 0.84118, 0.84118, 0.85284, 0.84557, 0.88844, 0.88844, 0.88844, 0.88844, 0.7306, 0.77452, 0.86331, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245, 0.84843, 0.83203, 0.85865, 0.85865, 0.85865, 0.85865, 0.82601, 0.82601, 0.82601, 0.82601, 0.94469, 0.9245, 0.92274, 0.92274, 0.92274, 0.92274, 0.92274, 0.90747, 0.86651, 0.9245, 0.9245, 0.9245, 0.9245, 0.89453, 0.9245, 0.89453, 0.8675, 0.9245, 0.8675, 0.9245, 0.8675, 0.9245, 0.72346, 0.83203, 0.72346, 0.83203, 0.72346, 0.83203, 0.72346, 0.83203, 0.85193, 0.8875, 0.86477, 0.99034, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.81105, 0.9245, 0.81105, 0.9245, 0.81105, 0.9245, 1, 1, 0.86275, 0.9245, 0.90872, 0.93591, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 1.03297, 0.90685, 0.82601, 0.77896, 1.05611, 0.6377, 1.07692, 1, 1, 0.90918, 0.75593, 1.03297, 1, 1, 0.76032, 0.9375, 0.98156, 0.93407, 0.77261, 1.11429, 0.89249, 0.9245, 1, 1, 0.89249, 0.9245, 0.92534, 0.86698, 0.9245, 0.84118, 0.92274, 0.84118, 0.92274, 0.84118, 0.92274, 0.8667, 0.86291, 0.75186, 1.02933, 1, 1, 0.75186, 1.02933, 0.67789, 0.77832, 0.67789, 0.77832, 0.67789, 0.77832, 0.67789, 0.77832, 1, 1, 0.79776, 0.97655, 0.79776, 1.23023, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.94309, 0.98986, 0.7306, 0.89453, 0.7306, 0.76659, 0.79004, 0.76659, 0.79004, 0.76659, 0.79004, 1.09231, 0.54873, 0.8675, 0.9245, 0.76318, 0.84843, 0.84557, 0.86651, 1, 1, 0.79776, 1.20562, 1.18622, 1.18622, 1, 1.1437, 0.67009, 0.96334, 0.93695, 1.35191, 1.40909, 0.95161, 1.48387, 0.8675, 0.90861, 0.6192, 0.7363, 0.64824, 0.82411, 0.56321, 0.85696, 1.23516, 0.8675, 0.81552, 0.7286, 0.84134, 0.73206, 0.76659, 0.86275, 0.84369, 0.90685, 0.77892, 0.85871, 1.02638, 0.89249, 0.75828, 0.84118, 0.85984, 0.77452, 0.76466, 0.79776, 0.7306, 0.90782, 0.77818, 0.903, 0.87291, 0.90685, 0.7306, 0.99058, 1.03667, 0.94635, 1.23516, 0.9849, 0.99058, 0.92393, 0.8916, 0.942, 1.03667, 0.75026, 0.94635, 1.0297, 1.23516, 0.90918, 0.94048, 0.98217, 0.89746, 0.84153, 0.92274, 0.82507, 0.88832, 0.84438, 0.88178, 1.03525, 0.9849, 1.00225, 0.78086, 0.97248, 0.89404, 1.23516, 0.9849, 0.92274, 0.9849, 0.89404, 0.73206, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89693, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.85865, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90933, 1, 1, 1, 1, 1, 1, 0.94309, 0.98986, 0.94309, 0.98986, 0.94309, 0.98986, 0.7306, 0.89453, 1, 1, 0.89552, 0.90527, 1, 0.90186, 1.12308, 1.12308, 1.12308, 1.12308, 1.2566, 1.2566, 1.2566, 0.89552, 0.89552, 1.42259, 0.68994, 1.03809, 1, 1, 1.0176, 1.0176, 1.11523, 1.4956, 2.01462, 0.97858, 0.82616, 0.91133, 0.83437, 0.91133, 1, 1, 1, 0.70508, 1, 1.23108, 0.79801, 0.84426, 0.84426, 0.774, 0.90572, 1.81055, 0.90749, 1.81055, 1.28809, 1.55469, 0.94434, 1.07806, 1, 0.97094, 0.7589, 0.85284, 0.90747, 1.19658, 0.69825, 0.97622, 1.33512, 0.90747, 0.90747, 0.85284, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.0336, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05859, 1.05859, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\nconst CalibriItalicMetrics = {\n  lineHeight: 1.2207,\n  lineGap: 0.2207\n};\nconst CalibriRegularFactors = [1.3877, 1, 1, 1, 1.17223, 1.1293, 0.89552, 0.91133, 0.80395, 1.02269, 1.15601, 0.91056, 0.91056, 1.2798, 0.85284, 0.89807, 1, 0.90861, 1.39016, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.96309, 0.96309, 0.85284, 0.85284, 0.85284, 0.83319, 0.88071, 0.8675, 0.81552, 0.73834, 0.85193, 0.73206, 0.7522, 0.81105, 0.86275, 0.90685, 0.6377, 0.77892, 0.75593, 1.02638, 0.89385, 0.85122, 0.77452, 0.86503, 0.75186, 0.68887, 0.79776, 0.88844, 0.85066, 0.94258, 0.77818, 0.7306, 0.76659, 1.10369, 1.39016, 1.10369, 1.06139, 0.89552, 0.8739, 0.86128, 0.94469, 0.8457, 0.94469, 0.89464, 1.09842, 0.84636, 0.94469, 1.03297, 1.07692, 0.90918, 1.03297, 0.95897, 0.94469, 0.9482, 0.94469, 0.94469, 1.04692, 0.78223, 1.20562, 0.94469, 0.90332, 0.98986, 0.86621, 0.90527, 0.79004, 0.94152, 1.77256, 0.94152, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.91729, 0.89552, 1.17889, 1.13254, 1.08707, 0.92098, 0.85284, 0.68787, 0.71353, 0.84737, 0.90747, 1.0088, 1.0044, 0.87683, 1, 1.09091, 1, 0.92229, 0.739, 1.15642, 0.92098, 0.76288, 0.80504, 0.80972, 0.75859, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.76318, 0.73834, 0.73206, 0.73206, 0.73206, 0.73206, 0.90685, 0.90685, 0.90685, 0.90685, 0.86477, 0.89385, 0.85122, 0.85122, 0.85122, 0.85122, 0.85122, 0.85284, 0.85311, 0.88844, 0.88844, 0.88844, 0.88844, 0.7306, 0.77452, 0.86331, 0.86128, 0.86128, 0.86128, 0.86128, 0.86128, 0.86128, 0.8693, 0.8457, 0.89464, 0.89464, 0.89464, 0.89464, 0.82601, 0.82601, 0.82601, 0.82601, 0.94469, 0.94469, 0.9482, 0.9482, 0.9482, 0.9482, 0.9482, 0.90747, 0.86651, 0.94469, 0.94469, 0.94469, 0.94469, 0.90527, 0.94469, 0.90527, 0.8675, 0.86128, 0.8675, 0.86128, 0.8675, 0.86128, 0.73834, 0.8457, 0.73834, 0.8457, 0.73834, 0.8457, 0.73834, 0.8457, 0.85193, 0.92454, 0.86477, 0.9921, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.81105, 0.84636, 0.81105, 0.84636, 0.81105, 0.84636, 1, 1, 0.86275, 0.94469, 0.90872, 0.95786, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 1.03297, 0.90685, 0.82601, 0.77741, 1.05611, 0.6377, 1.07692, 1, 1, 0.90918, 0.75593, 1.03297, 1, 1, 0.76032, 0.90452, 0.98156, 1.11842, 0.77261, 1.11429, 0.89385, 0.94469, 1, 1, 0.89385, 0.94469, 0.95877, 0.86901, 0.94469, 0.85122, 0.9482, 0.85122, 0.9482, 0.85122, 0.9482, 0.8667, 0.90016, 0.75186, 1.04692, 1, 1, 0.75186, 1.04692, 0.68887, 0.78223, 0.68887, 0.78223, 0.68887, 0.78223, 0.68887, 0.78223, 1, 1, 0.79776, 0.92188, 0.79776, 1.23023, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.94258, 0.98986, 0.7306, 0.90527, 0.7306, 0.76659, 0.79004, 0.76659, 0.79004, 0.76659, 0.79004, 1.09231, 0.54873, 0.8675, 0.86128, 0.76318, 0.8693, 0.85311, 0.86651, 1, 1, 0.79776, 1.20562, 1.18622, 1.18622, 1, 1.1437, 0.67742, 0.96334, 0.93695, 1.35191, 1.40909, 0.95161, 1.48387, 0.86686, 0.90861, 0.62267, 0.74359, 0.65649, 0.85498, 0.56963, 0.88254, 1.23516, 0.8675, 0.81552, 0.75443, 0.84503, 0.73206, 0.76659, 0.86275, 0.85122, 0.90685, 0.77892, 0.85746, 1.02638, 0.89385, 0.75657, 0.85122, 0.86275, 0.77452, 0.74171, 0.79776, 0.7306, 0.95165, 0.77818, 0.89772, 0.88831, 0.90685, 0.7306, 0.98142, 1.02191, 0.96576, 1.23516, 0.99018, 0.98142, 0.9236, 0.89258, 0.94035, 1.02191, 0.78848, 0.96576, 0.9561, 1.23516, 0.90918, 0.92578, 0.95424, 0.89746, 0.83969, 0.9482, 0.80113, 0.89442, 0.85208, 0.86155, 0.98022, 0.99018, 1.00452, 0.81209, 0.99247, 0.89181, 1.23516, 0.99018, 0.9482, 0.99018, 0.89181, 0.73206, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.88844, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89464, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.96766, 1, 1, 1, 1, 1, 1, 0.94258, 0.98986, 0.94258, 0.98986, 0.94258, 0.98986, 0.7306, 0.90527, 1, 1, 0.89552, 0.90527, 1, 0.90186, 1.12308, 1.12308, 1.12308, 1.12308, 1.2566, 1.2566, 1.2566, 0.89552, 0.89552, 1.42259, 0.69043, 1.03809, 1, 1, 1.0176, 1.0176, 1.11523, 1.4956, 2.01462, 0.99331, 0.82616, 0.91133, 0.84286, 0.91133, 1, 1, 1, 0.70508, 1, 1.23108, 0.79801, 0.84426, 0.84426, 0.774, 0.90527, 1.81055, 0.90527, 1.81055, 1.28809, 1.55469, 0.94434, 1.07806, 1, 0.97094, 0.7589, 0.85284, 0.90747, 1.19658, 0.69825, 0.97622, 1.33512, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.0336, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05859, 1.05859, 1, 1, 1, 1.07185, 0.99413, 0.96334, 1.08065, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\nconst CalibriRegularMetrics = {\n  lineHeight: 1.2207,\n  lineGap: 0.2207\n};\n\n;// CONCATENATED MODULE: ./src/core/helvetica_factors.js\nconst HelveticaBoldFactors = [0.76116, 1, 1, 1.0006, 0.99998, 0.99974, 0.99973, 0.99973, 0.99982, 0.99977, 1.00087, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.00003, 1.00003, 1.00003, 1.00026, 0.9999, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 0.99973, 0.99977, 1.00026, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 0.99998, 1.0006, 0.99998, 1.00003, 0.99973, 0.99998, 0.99973, 1.00026, 0.99973, 1.00026, 0.99973, 0.99998, 1.00026, 1.00026, 1.0006, 1.0006, 0.99973, 1.0006, 0.99982, 1.00026, 1.00026, 1.00026, 1.00026, 0.99959, 0.99973, 0.99998, 1.00026, 0.99973, 1.00022, 0.99973, 0.99973, 1, 0.99959, 1.00077, 0.99959, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.00077, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.99973, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.06409, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 1.00026, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 1.03374, 0.99977, 1.00026, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.00042, 0.99973, 0.99973, 1.0006, 0.99977, 0.99973, 0.99973, 1.00026, 1.0006, 1.00026, 1.0006, 1.00026, 1.03828, 1.00026, 0.99999, 1.00026, 1.0006, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.9993, 0.9998, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1, 1.00016, 0.99977, 0.99959, 0.99977, 0.99959, 0.99977, 0.99959, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00026, 0.99998, 1.00026, 0.8121, 1.00026, 0.99998, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.00016, 1.00022, 1.00001, 0.99973, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 1.0006, 0.99973, 0.99977, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 0.99973, 1.00026, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 1.00034, 0.99977, 1, 0.99997, 1.00026, 1.00078, 1.00036, 0.99973, 1.00013, 1.0006, 0.99977, 0.99977, 0.99988, 0.85148, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 0.99977, 1.00001, 0.99999, 0.99977, 1.00069, 1.00022, 0.99977, 1.00001, 0.99984, 1.00026, 1.00001, 1.00024, 1.00001, 0.9999, 1, 1.0006, 1.00001, 1.00041, 0.99962, 1.00026, 1.0006, 0.99995, 1.00041, 0.99942, 0.99973, 0.99927, 1.00082, 0.99902, 1.00026, 1.00087, 1.0006, 1.00069, 0.99973, 0.99867, 0.99973, 0.9993, 1.00026, 1.00049, 1.00056, 1, 0.99988, 0.99935, 0.99995, 0.99954, 1.00055, 0.99945, 1.00032, 1.0006, 0.99995, 1.00026, 0.99995, 1.00032, 1.00001, 1.00008, 0.99971, 1.00019, 0.9994, 1.00001, 1.0006, 1.00044, 0.99973, 1.00023, 1.00047, 1, 0.99942, 0.99561, 0.99989, 1.00035, 0.99977, 1.00035, 0.99977, 1.00019, 0.99944, 1.00001, 1.00021, 0.99926, 1.00035, 1.00035, 0.99942, 1.00048, 0.99999, 0.99977, 1.00022, 1.00035, 1.00001, 0.99977, 1.00026, 0.99989, 1.00057, 1.00001, 0.99936, 1.00052, 1.00012, 0.99996, 1.00043, 1, 1.00035, 0.9994, 0.99976, 1.00035, 0.99973, 1.00052, 1.00041, 1.00119, 1.00037, 0.99973, 1.00002, 0.99986, 1.00041, 1.00041, 0.99902, 0.9996, 1.00034, 0.99999, 1.00026, 0.99999, 1.00026, 0.99973, 1.00052, 0.99973, 1, 0.99973, 1.00041, 1.00075, 0.9994, 1.0003, 0.99999, 1, 1.00041, 0.99955, 1, 0.99915, 0.99973, 0.99973, 1.00026, 1.00119, 0.99955, 0.99973, 1.0006, 0.99911, 1.0006, 1.00026, 0.99972, 1.00026, 0.99902, 1.00041, 0.99973, 0.99999, 1, 1, 1.00038, 1.0005, 1.00016, 1.00022, 1.00016, 1.00022, 1.00016, 1.00022, 1.00001, 0.99973, 1, 1, 0.99973, 1, 1, 0.99955, 1.0006, 1.0006, 1.0006, 1.0006, 1, 1, 1, 0.99973, 0.99973, 0.99972, 1, 1, 1.00106, 0.99999, 0.99998, 0.99998, 0.99999, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 0.99971, 1.00047, 1.00023, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1, 1, 1, 1, 1, 1, 1, 0.99972, 1, 1.20985, 1.39713, 1.00003, 1.00031, 1.00015, 1, 0.99561, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99972, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\nconst HelveticaBoldMetrics = {\n  lineHeight: 1.2,\n  lineGap: 0.2\n};\nconst HelveticaBoldItalicFactors = [0.76116, 1, 1, 1.0006, 0.99998, 0.99974, 0.99973, 0.99973, 0.99982, 0.99977, 1.00087, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.00003, 1.00003, 1.00003, 1.00026, 0.9999, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 0.99973, 0.99977, 1.00026, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 0.99998, 1.0006, 0.99998, 1.00003, 0.99973, 0.99998, 0.99973, 1.00026, 0.99973, 1.00026, 0.99973, 0.99998, 1.00026, 1.00026, 1.0006, 1.0006, 0.99973, 1.0006, 0.99982, 1.00026, 1.00026, 1.00026, 1.00026, 0.99959, 0.99973, 0.99998, 1.00026, 0.99973, 1.00022, 0.99973, 0.99973, 1, 0.99959, 1.00077, 0.99959, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.00077, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.99973, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.06409, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 1.00026, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 1.0044, 0.99977, 1.00026, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99971, 0.99973, 0.99973, 1.0006, 0.99977, 0.99973, 0.99973, 1.00026, 1.0006, 1.00026, 1.0006, 1.00026, 1.01011, 1.00026, 0.99999, 1.00026, 1.0006, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.9993, 0.9998, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1, 1.00016, 0.99977, 0.99959, 0.99977, 0.99959, 0.99977, 0.99959, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00026, 0.99998, 1.00026, 0.8121, 1.00026, 0.99998, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.00016, 1.00022, 1.00001, 0.99973, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 1.0006, 0.99973, 0.99977, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 0.99973, 1.00026, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99977, 1, 1, 1.00026, 0.99969, 0.99972, 0.99981, 0.9998, 1.0006, 0.99977, 0.99977, 1.00022, 0.91155, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 0.99977, 1.00001, 0.99999, 0.99977, 0.99966, 1.00022, 1.00032, 1.00001, 0.99944, 1.00026, 1.00001, 0.99968, 1.00001, 1.00047, 1, 1.0006, 1.00001, 0.99981, 1.00101, 1.00026, 1.0006, 0.99948, 0.99981, 1.00064, 0.99973, 0.99942, 1.00101, 1.00061, 1.00026, 1.00069, 1.0006, 1.00014, 0.99973, 1.01322, 0.99973, 1.00065, 1.00026, 1.00012, 0.99923, 1, 1.00064, 1.00076, 0.99948, 1.00055, 1.00063, 1.00007, 0.99943, 1.0006, 0.99948, 1.00026, 0.99948, 0.99943, 1.00001, 1.00001, 1.00029, 1.00038, 1.00035, 1.00001, 1.0006, 1.0006, 0.99973, 0.99978, 1.00001, 1.00057, 0.99989, 0.99967, 0.99964, 0.99967, 0.99977, 0.99999, 0.99977, 1.00038, 0.99977, 1.00001, 0.99973, 1.00066, 0.99967, 0.99967, 1.00041, 0.99998, 0.99999, 0.99977, 1.00022, 0.99967, 1.00001, 0.99977, 1.00026, 0.99964, 1.00031, 1.00001, 0.99999, 0.99999, 1, 1.00023, 1, 1, 0.99999, 1.00035, 1.00001, 0.99999, 0.99973, 0.99977, 0.99999, 1.00058, 0.99973, 0.99973, 0.99955, 0.9995, 1.00026, 1.00026, 1.00032, 0.99989, 1.00034, 0.99999, 1.00026, 1.00026, 1.00026, 0.99973, 0.45998, 0.99973, 1.00026, 0.99973, 1.00001, 0.99999, 0.99982, 0.99994, 0.99996, 1, 1.00042, 1.00044, 1.00029, 1.00023, 0.99973, 0.99973, 1.00026, 0.99949, 1.00002, 0.99973, 1.0006, 1.0006, 1.0006, 0.99975, 1.00026, 1.00026, 1.00032, 0.98685, 0.99973, 1.00026, 1, 1, 0.99966, 1.00044, 1.00016, 1.00022, 1.00016, 1.00022, 1.00016, 1.00022, 1.00001, 0.99973, 1, 1, 0.99973, 1, 1, 0.99955, 1.0006, 1.0006, 1.0006, 1.0006, 1, 1, 1, 0.99973, 0.99973, 0.99972, 1, 1, 1.00106, 0.99999, 0.99998, 0.99998, 0.99999, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1, 0.99973, 0.99971, 0.99978, 1, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1.00098, 1, 1, 1, 1.00049, 1, 1, 0.99972, 1, 1.20985, 1.39713, 1.00003, 1.00031, 1.00015, 1, 0.99561, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99972, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\nconst HelveticaBoldItalicMetrics = {\n  lineHeight: 1.35,\n  lineGap: 0.2\n};\nconst HelveticaItalicFactors = [0.76116, 1, 1, 1.0006, 1.0006, 1.00006, 0.99973, 0.99973, 0.99982, 1.00001, 1.00043, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1, 1.00003, 1.00003, 1.00003, 0.99973, 0.99987, 1.00001, 1.00001, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 1, 1.00001, 0.99973, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 1.0006, 1.0006, 1.0006, 0.99949, 0.99973, 0.99998, 0.99973, 0.99973, 1, 0.99973, 0.99973, 1.0006, 0.99973, 0.99973, 0.99924, 0.99924, 1, 0.99924, 0.99999, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.0006, 0.99973, 1, 0.99977, 1, 1, 1, 1.00005, 1.0009, 1.00005, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.0009, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.9998, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 1, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.06409, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 1, 0.99973, 1, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1.0288, 0.99977, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99924, 1.0006, 1.0006, 0.99946, 1.00034, 1, 0.99924, 1.00001, 1, 1, 0.99973, 0.99924, 0.99973, 0.99924, 0.99973, 1.06311, 0.99973, 1.00024, 0.99973, 0.99924, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00041, 0.9998, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1, 1.00016, 0.99977, 0.99998, 0.99977, 0.99998, 0.99977, 0.99998, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00026, 1.0006, 1.00026, 0.89547, 1.00026, 1.0006, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00016, 0.99977, 1.00001, 1, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 0.99924, 0.99973, 1.00001, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 1, 1.00026, 1.0006, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 1.00001, 1, 1.00054, 0.99977, 1.00084, 1.00007, 0.99973, 1.00013, 0.99924, 1.00001, 1.00001, 0.99945, 0.91221, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 1.00001, 1.00001, 0.99999, 0.99977, 0.99933, 1.00022, 1.00054, 1.00001, 1.00065, 1.00026, 1.00001, 1.0001, 1.00001, 1.00052, 1, 1.0006, 1.00001, 0.99945, 0.99897, 0.99968, 0.99924, 1.00036, 0.99945, 0.99949, 1, 1.0006, 0.99897, 0.99918, 0.99968, 0.99911, 0.99924, 1, 0.99962, 1.01487, 1, 1.0005, 0.99973, 1.00012, 1.00043, 1, 0.99995, 0.99994, 1.00036, 0.99947, 1.00019, 1.00063, 1.00025, 0.99924, 1.00036, 0.99973, 1.00036, 1.00025, 1.00001, 1.00001, 1.00027, 1.0001, 1.00068, 1.00001, 1.0006, 1.0006, 1, 1.00008, 0.99957, 0.99972, 0.9994, 0.99954, 0.99975, 1.00051, 1.00001, 1.00019, 1.00001, 1.0001, 0.99986, 1.00001, 1.00001, 1.00038, 0.99954, 0.99954, 0.9994, 1.00066, 0.99999, 0.99977, 1.00022, 1.00054, 1.00001, 0.99977, 1.00026, 0.99975, 1.0001, 1.00001, 0.99993, 0.9995, 0.99955, 1.00016, 0.99978, 0.99974, 1.00019, 1.00022, 0.99955, 1.00053, 0.99973, 1.00089, 1.00005, 0.99967, 1.00048, 0.99973, 1.00002, 1.00034, 0.99973, 0.99973, 0.99964, 1.00006, 1.00066, 0.99947, 0.99973, 0.98894, 0.99973, 1, 0.44898, 1, 0.99946, 1, 1.00039, 1.00082, 0.99991, 0.99991, 0.99985, 1.00022, 1.00023, 1.00061, 1.00006, 0.99966, 0.99973, 0.99973, 0.99973, 1.00019, 1.0008, 1, 0.99924, 0.99924, 0.99924, 0.99983, 1.00044, 0.99973, 0.99964, 0.98332, 1, 0.99973, 1, 1, 0.99962, 0.99895, 1.00016, 0.99977, 1.00016, 0.99977, 1.00016, 0.99977, 1.00001, 1, 1, 1, 0.99973, 1, 1, 0.99955, 0.99924, 0.99924, 0.99924, 0.99924, 0.99998, 0.99998, 0.99998, 0.99973, 0.99973, 0.99972, 1, 1, 1.00267, 0.99999, 0.99998, 0.99998, 1, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 1.00423, 0.99925, 0.99999, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1.00049, 1, 1.00245, 1, 1, 1, 1, 0.96329, 1, 1.20985, 1.39713, 1.00003, 0.8254, 1.00015, 1, 1.00035, 1.00027, 1.00031, 1.00031, 1.00003, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.95317, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\nconst HelveticaItalicMetrics = {\n  lineHeight: 1.35,\n  lineGap: 0.2\n};\nconst HelveticaRegularFactors = [0.76116, 1, 1, 1.0006, 1.0006, 1.00006, 0.99973, 0.99973, 0.99982, 1.00001, 1.00043, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1, 1.00003, 1.00003, 1.00003, 0.99973, 0.99987, 1.00001, 1.00001, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 1, 1.00001, 0.99973, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 1.0006, 1.0006, 1.0006, 0.99949, 0.99973, 0.99998, 0.99973, 0.99973, 1, 0.99973, 0.99973, 1.0006, 0.99973, 0.99973, 0.99924, 0.99924, 1, 0.99924, 0.99999, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.0006, 0.99973, 1, 0.99977, 1, 1, 1, 1.00005, 1.0009, 1.00005, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.0009, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.9998, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 1, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.06409, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 1, 0.99973, 1, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1.04596, 0.99977, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99924, 1.0006, 1.0006, 1.00019, 1.00034, 1, 0.99924, 1.00001, 1, 1, 0.99973, 0.99924, 0.99973, 0.99924, 0.99973, 1.02572, 0.99973, 1.00005, 0.99973, 0.99924, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99999, 0.9998, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1, 1.00016, 0.99977, 0.99998, 0.99977, 0.99998, 0.99977, 0.99998, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00026, 1.0006, 1.00026, 0.84533, 1.00026, 1.0006, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00016, 0.99977, 1.00001, 1, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 0.99924, 0.99973, 1.00001, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 1, 1.00026, 1.0006, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99928, 1, 0.99977, 1.00013, 1.00055, 0.99947, 0.99945, 0.99941, 0.99924, 1.00001, 1.00001, 1.0004, 0.91621, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 1.00001, 1.00005, 0.99999, 0.99977, 1.00015, 1.00022, 0.99977, 1.00001, 0.99973, 1.00026, 1.00001, 1.00019, 1.00001, 0.99946, 1, 1.0006, 1.00001, 0.99978, 1.00045, 0.99973, 0.99924, 1.00023, 0.99978, 0.99966, 1, 1.00065, 1.00045, 1.00019, 0.99973, 0.99973, 0.99924, 1, 1, 0.96499, 1, 1.00055, 0.99973, 1.00008, 1.00027, 1, 0.9997, 0.99995, 1.00023, 0.99933, 1.00019, 1.00015, 1.00031, 0.99924, 1.00023, 0.99973, 1.00023, 1.00031, 1.00001, 0.99928, 1.00029, 1.00092, 1.00035, 1.00001, 1.0006, 1.0006, 1, 0.99988, 0.99975, 1, 1.00082, 0.99561, 0.9996, 1.00035, 1.00001, 0.99962, 1.00001, 1.00092, 0.99964, 1.00001, 0.99963, 0.99999, 1.00035, 1.00035, 1.00082, 0.99962, 0.99999, 0.99977, 1.00022, 1.00035, 1.00001, 0.99977, 1.00026, 0.9996, 0.99967, 1.00001, 1.00034, 1.00074, 1.00054, 1.00053, 1.00063, 0.99971, 0.99962, 1.00035, 0.99975, 0.99977, 0.99973, 1.00043, 0.99953, 1.0007, 0.99915, 0.99973, 1.00008, 0.99892, 1.00073, 1.00073, 1.00114, 0.99915, 1.00073, 0.99955, 0.99973, 1.00092, 0.99973, 1, 0.99998, 1, 1.0003, 1, 1.00043, 1.00001, 0.99969, 1.0003, 1, 1.00035, 1.00001, 0.9995, 1, 1.00092, 0.99973, 0.99973, 0.99973, 1.0007, 0.9995, 1, 0.99924, 1.0006, 0.99924, 0.99972, 1.00062, 0.99973, 1.00114, 1.00073, 1, 0.99955, 1, 1, 1.00047, 0.99968, 1.00016, 0.99977, 1.00016, 0.99977, 1.00016, 0.99977, 1.00001, 1, 1, 1, 0.99973, 1, 1, 0.99955, 0.99924, 0.99924, 0.99924, 0.99924, 0.99998, 0.99998, 0.99998, 0.99973, 0.99973, 0.99972, 1, 1, 1.00267, 0.99999, 0.99998, 0.99998, 1, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 0.99971, 0.99925, 1.00023, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1, 1, 1, 1, 1, 1, 1, 0.96329, 1, 1.20985, 1.39713, 1.00003, 0.8254, 1.00015, 1, 1.00035, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.95317, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\nconst HelveticaRegularMetrics = {\n  lineHeight: 1.2,\n  lineGap: 0.2\n};\n\n;// CONCATENATED MODULE: ./src/core/liberationsans_widths.js\nconst LiberationSansBoldWidths = [365, 0, 333, 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 556, 278, 333, 333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, 611, 611, 611, 549, 611, 611, 611, 611, 611, 556, 611, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 719, 722, 611, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 611, 778, 611, 778, 611, 778, 611, 722, 611, 722, 611, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 785, 556, 556, 278, 722, 556, 556, 611, 278, 611, 278, 611, 385, 611, 479, 611, 278, 722, 611, 722, 611, 722, 611, 708, 723, 611, 778, 611, 778, 611, 778, 611, 1000, 944, 722, 389, 722, 389, 722, 389, 667, 556, 667, 556, 667, 556, 667, 556, 611, 333, 611, 479, 611, 333, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 944, 778, 667, 556, 667, 611, 500, 611, 500, 611, 500, 278, 556, 722, 556, 1000, 889, 778, 611, 667, 556, 611, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 465, 722, 333, 853, 906, 474, 825, 927, 838, 278, 722, 722, 601, 719, 667, 611, 722, 778, 278, 722, 667, 833, 722, 644, 778, 722, 667, 600, 611, 667, 821, 667, 809, 802, 278, 667, 615, 451, 611, 278, 582, 615, 610, 556, 606, 475, 460, 611, 541, 278, 558, 556, 612, 556, 445, 611, 766, 619, 520, 684, 446, 582, 715, 576, 753, 845, 278, 582, 611, 582, 845, 667, 669, 885, 567, 711, 667, 278, 276, 556, 1094, 1062, 875, 610, 722, 622, 719, 722, 719, 722, 567, 712, 667, 904, 626, 719, 719, 610, 702, 833, 722, 778, 719, 667, 722, 611, 622, 854, 667, 730, 703, 1005, 1019, 870, 979, 719, 711, 1031, 719, 556, 618, 615, 417, 635, 556, 709, 497, 615, 615, 500, 635, 740, 604, 611, 604, 611, 556, 490, 556, 875, 556, 615, 581, 833, 844, 729, 854, 615, 552, 854, 583, 556, 556, 611, 417, 552, 556, 278, 281, 278, 969, 906, 611, 500, 615, 556, 604, 778, 611, 487, 447, 944, 778, 944, 778, 944, 778, 667, 556, 333, 333, 556, 1000, 1000, 552, 278, 278, 278, 278, 500, 500, 500, 556, 556, 350, 1000, 1000, 240, 479, 333, 333, 604, 333, 167, 396, 556, 556, 1094, 556, 885, 489, 1115, 1000, 768, 600, 834, 834, 834, 834, 1000, 500, 1000, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 722, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 611, 611, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 333, 333, 333, 333, 333, 333, 333, 333];\nconst LiberationSansBoldMapping = [-1, -1, -1, 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, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1];\nconst LiberationSansBoldItalicWidths = [365, 0, 333, 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 556, 278, 333, 333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, 611, 611, 611, 549, 611, 611, 611, 611, 611, 556, 611, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 740, 722, 611, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 611, 778, 611, 778, 611, 778, 611, 722, 611, 722, 611, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 782, 556, 556, 278, 722, 556, 556, 611, 278, 611, 278, 611, 396, 611, 479, 611, 278, 722, 611, 722, 611, 722, 611, 708, 723, 611, 778, 611, 778, 611, 778, 611, 1000, 944, 722, 389, 722, 389, 722, 389, 667, 556, 667, 556, 667, 556, 667, 556, 611, 333, 611, 479, 611, 333, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 944, 778, 667, 556, 667, 611, 500, 611, 500, 611, 500, 278, 556, 722, 556, 1000, 889, 778, 611, 667, 556, 611, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 722, 333, 854, 906, 473, 844, 930, 847, 278, 722, 722, 610, 671, 667, 611, 722, 778, 278, 722, 667, 833, 722, 657, 778, 718, 667, 590, 611, 667, 822, 667, 829, 781, 278, 667, 620, 479, 611, 278, 591, 620, 621, 556, 610, 479, 492, 611, 558, 278, 566, 556, 603, 556, 450, 611, 712, 605, 532, 664, 409, 591, 704, 578, 773, 834, 278, 591, 611, 591, 834, 667, 667, 886, 614, 719, 667, 278, 278, 556, 1094, 1042, 854, 622, 719, 677, 719, 722, 708, 722, 614, 722, 667, 927, 643, 719, 719, 615, 687, 833, 722, 778, 719, 667, 722, 611, 677, 781, 667, 729, 708, 979, 989, 854, 1000, 708, 719, 1042, 729, 556, 619, 604, 534, 618, 556, 736, 510, 611, 611, 507, 622, 740, 604, 611, 611, 611, 556, 889, 556, 885, 556, 646, 583, 889, 935, 707, 854, 594, 552, 865, 589, 556, 556, 611, 469, 563, 556, 278, 278, 278, 969, 906, 611, 507, 619, 556, 611, 778, 611, 575, 467, 944, 778, 944, 778, 944, 778, 667, 556, 333, 333, 556, 1000, 1000, 552, 278, 278, 278, 278, 500, 500, 500, 556, 556, 350, 1000, 1000, 240, 479, 333, 333, 604, 333, 167, 396, 556, 556, 1104, 556, 885, 516, 1146, 1000, 768, 600, 834, 834, 834, 834, 999, 500, 1000, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 722, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 611, 611, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 333, 333, 333, 333, 333, 333, 333, 333];\nconst LiberationSansBoldItalicMapping = [-1, -1, -1, 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, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1];\nconst LiberationSansItalicWidths = [365, 0, 333, 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334, 584, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 537, 278, 333, 333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, 556, 556, 556, 549, 611, 556, 556, 556, 556, 500, 556, 500, 667, 556, 667, 556, 667, 556, 722, 500, 722, 500, 722, 500, 722, 500, 722, 625, 722, 556, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 556, 778, 556, 778, 556, 778, 556, 722, 556, 722, 556, 278, 278, 278, 278, 278, 278, 278, 222, 278, 278, 733, 444, 500, 222, 667, 500, 500, 556, 222, 556, 222, 556, 281, 556, 400, 556, 222, 722, 556, 722, 556, 722, 556, 615, 723, 556, 778, 556, 778, 556, 778, 556, 1000, 944, 722, 333, 722, 333, 722, 333, 667, 500, 667, 500, 667, 500, 667, 500, 611, 278, 611, 354, 611, 278, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 944, 722, 667, 500, 667, 611, 500, 611, 500, 611, 500, 222, 556, 667, 556, 1000, 889, 778, 611, 667, 500, 611, 278, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 667, 278, 789, 846, 389, 794, 865, 775, 222, 667, 667, 570, 671, 667, 611, 722, 778, 278, 667, 667, 833, 722, 648, 778, 725, 667, 600, 611, 667, 837, 667, 831, 761, 278, 667, 570, 439, 555, 222, 550, 570, 571, 500, 556, 439, 463, 555, 542, 222, 500, 492, 548, 500, 447, 556, 670, 573, 486, 603, 374, 550, 652, 546, 728, 779, 222, 550, 556, 550, 779, 667, 667, 843, 544, 708, 667, 278, 278, 500, 1066, 982, 844, 589, 715, 639, 724, 667, 651, 667, 544, 704, 667, 917, 614, 715, 715, 589, 686, 833, 722, 778, 725, 667, 722, 611, 639, 795, 667, 727, 673, 920, 923, 805, 886, 651, 694, 1022, 682, 556, 562, 522, 493, 553, 556, 688, 465, 556, 556, 472, 564, 686, 550, 556, 556, 556, 500, 833, 500, 835, 500, 572, 518, 830, 851, 621, 736, 526, 492, 752, 534, 556, 556, 556, 378, 496, 500, 222, 222, 222, 910, 828, 556, 472, 565, 500, 556, 778, 556, 492, 339, 944, 722, 944, 722, 944, 722, 667, 500, 333, 333, 556, 1000, 1000, 552, 222, 222, 222, 222, 333, 333, 333, 556, 556, 350, 1000, 1000, 188, 354, 333, 333, 500, 333, 167, 365, 556, 556, 1094, 556, 885, 323, 1083, 1000, 768, 600, 834, 834, 834, 834, 1000, 500, 998, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 719, 274, 549, 549, 584, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 500, 500, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 294, 294, 324, 324, 316, 328, 398, 285];\nconst LiberationSansItalicMapping = [-1, -1, -1, 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, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1];\nconst LiberationSansRegularWidths = [365, 0, 333, 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334, 584, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 537, 278, 333, 333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, 556, 556, 556, 549, 611, 556, 556, 556, 556, 500, 556, 500, 667, 556, 667, 556, 667, 556, 722, 500, 722, 500, 722, 500, 722, 500, 722, 615, 722, 556, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 556, 778, 556, 778, 556, 778, 556, 722, 556, 722, 556, 278, 278, 278, 278, 278, 278, 278, 222, 278, 278, 735, 444, 500, 222, 667, 500, 500, 556, 222, 556, 222, 556, 292, 556, 334, 556, 222, 722, 556, 722, 556, 722, 556, 604, 723, 556, 778, 556, 778, 556, 778, 556, 1000, 944, 722, 333, 722, 333, 722, 333, 667, 500, 667, 500, 667, 500, 667, 500, 611, 278, 611, 375, 611, 278, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 944, 722, 667, 500, 667, 611, 500, 611, 500, 611, 500, 222, 556, 667, 556, 1000, 889, 778, 611, 667, 500, 611, 278, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 667, 278, 784, 838, 384, 774, 855, 752, 222, 667, 667, 551, 668, 667, 611, 722, 778, 278, 667, 668, 833, 722, 650, 778, 722, 667, 618, 611, 667, 798, 667, 835, 748, 278, 667, 578, 446, 556, 222, 547, 578, 575, 500, 557, 446, 441, 556, 556, 222, 500, 500, 576, 500, 448, 556, 690, 569, 482, 617, 395, 547, 648, 525, 713, 781, 222, 547, 556, 547, 781, 667, 667, 865, 542, 719, 667, 278, 278, 500, 1057, 1010, 854, 583, 722, 635, 719, 667, 656, 667, 542, 677, 667, 923, 604, 719, 719, 583, 656, 833, 722, 778, 719, 667, 722, 611, 635, 760, 667, 740, 667, 917, 938, 792, 885, 656, 719, 1010, 722, 556, 573, 531, 365, 583, 556, 669, 458, 559, 559, 438, 583, 688, 552, 556, 542, 556, 500, 458, 500, 823, 500, 573, 521, 802, 823, 625, 719, 521, 510, 750, 542, 556, 556, 556, 365, 510, 500, 222, 278, 222, 906, 812, 556, 438, 559, 500, 552, 778, 556, 489, 411, 944, 722, 944, 722, 944, 722, 667, 500, 333, 333, 556, 1000, 1000, 552, 222, 222, 222, 222, 333, 333, 333, 556, 556, 350, 1000, 1000, 188, 354, 333, 333, 500, 333, 167, 365, 556, 556, 1094, 556, 885, 323, 1073, 1000, 768, 600, 834, 834, 834, 834, 1000, 500, 1000, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 719, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 500, 500, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 294, 294, 324, 324, 316, 328, 398, 285];\nconst LiberationSansRegularMapping = [-1, -1, -1, 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, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1];\n\n;// CONCATENATED MODULE: ./src/core/myriadpro_factors.js\nconst MyriadProBoldFactors = [1.36898, 1, 1, 0.72706, 0.80479, 0.83734, 0.98894, 0.99793, 0.9897, 0.93884, 0.86209, 0.94292, 0.94292, 1.16661, 1.02058, 0.93582, 0.96694, 0.93582, 1.19137, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.78076, 0.78076, 1.02058, 1.02058, 1.02058, 0.72851, 0.78966, 0.90838, 0.83637, 0.82391, 0.96376, 0.80061, 0.86275, 0.8768, 0.95407, 1.0258, 0.73901, 0.85022, 0.83655, 1.0156, 0.95546, 0.92179, 0.87107, 0.92179, 0.82114, 0.8096, 0.89713, 0.94438, 0.95353, 0.94083, 0.91905, 0.90406, 0.9446, 0.94292, 1.18777, 0.94292, 1.02058, 0.89903, 0.90088, 0.94938, 0.97898, 0.81093, 0.97571, 0.94938, 1.024, 0.9577, 0.95933, 0.98621, 1.0474, 0.97455, 0.98981, 0.9672, 0.95933, 0.9446, 0.97898, 0.97407, 0.97646, 0.78036, 1.10208, 0.95442, 0.95298, 0.97579, 0.9332, 0.94039, 0.938, 0.80687, 1.01149, 0.80687, 1.02058, 0.80479, 0.99793, 0.99793, 0.99793, 0.99793, 1.01149, 1.00872, 0.90088, 0.91882, 1.0213, 0.8361, 1.02058, 0.62295, 0.54324, 0.89022, 1.08595, 1, 1, 0.90088, 1, 0.97455, 0.93582, 0.90088, 1, 1.05686, 0.8361, 0.99642, 0.99642, 0.99642, 0.72851, 0.90838, 0.90838, 0.90838, 0.90838, 0.90838, 0.90838, 0.868, 0.82391, 0.80061, 0.80061, 0.80061, 0.80061, 1.0258, 1.0258, 1.0258, 1.0258, 0.97484, 0.95546, 0.92179, 0.92179, 0.92179, 0.92179, 0.92179, 1.02058, 0.92179, 0.94438, 0.94438, 0.94438, 0.94438, 0.90406, 0.86958, 0.98225, 0.94938, 0.94938, 0.94938, 0.94938, 0.94938, 0.94938, 0.9031, 0.81093, 0.94938, 0.94938, 0.94938, 0.94938, 0.98621, 0.98621, 0.98621, 0.98621, 0.93969, 0.95933, 0.9446, 0.9446, 0.9446, 0.9446, 0.9446, 1.08595, 0.9446, 0.95442, 0.95442, 0.95442, 0.95442, 0.94039, 0.97898, 0.94039, 0.90838, 0.94938, 0.90838, 0.94938, 0.90838, 0.94938, 0.82391, 0.81093, 0.82391, 0.81093, 0.82391, 0.81093, 0.82391, 0.81093, 0.96376, 0.84313, 0.97484, 0.97571, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.8768, 0.9577, 0.8768, 0.9577, 0.8768, 0.9577, 1, 1, 0.95407, 0.95933, 0.97069, 0.95933, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 0.887, 1.01591, 0.73901, 1.0474, 1, 1, 0.97455, 0.83655, 0.98981, 1, 1, 0.83655, 0.73977, 0.83655, 0.73903, 0.84638, 1.033, 0.95546, 0.95933, 1, 1, 0.95546, 0.95933, 0.8271, 0.95417, 0.95933, 0.92179, 0.9446, 0.92179, 0.9446, 0.92179, 0.9446, 0.936, 0.91964, 0.82114, 0.97646, 1, 1, 0.82114, 0.97646, 0.8096, 0.78036, 0.8096, 0.78036, 1, 1, 0.8096, 0.78036, 1, 1, 0.89713, 0.77452, 0.89713, 1.10208, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94083, 0.97579, 0.90406, 0.94039, 0.90406, 0.9446, 0.938, 0.9446, 0.938, 0.9446, 0.938, 1, 0.99793, 0.90838, 0.94938, 0.868, 0.9031, 0.92179, 0.9446, 1, 1, 0.89713, 1.10208, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90989, 0.9358, 0.91945, 0.83181, 0.75261, 0.87992, 0.82976, 0.96034, 0.83689, 0.97268, 1.0078, 0.90838, 0.83637, 0.8019, 0.90157, 0.80061, 0.9446, 0.95407, 0.92436, 1.0258, 0.85022, 0.97153, 1.0156, 0.95546, 0.89192, 0.92179, 0.92361, 0.87107, 0.96318, 0.89713, 0.93704, 0.95638, 0.91905, 0.91709, 0.92796, 1.0258, 0.93704, 0.94836, 1.0373, 0.95933, 1.0078, 0.95871, 0.94836, 0.96174, 0.92601, 0.9498, 0.98607, 0.95776, 0.95933, 1.05453, 1.0078, 0.98275, 0.9314, 0.95617, 0.91701, 1.05993, 0.9446, 0.78367, 0.9553, 1, 0.86832, 1.0128, 0.95871, 0.99394, 0.87548, 0.96361, 0.86774, 1.0078, 0.95871, 0.9446, 0.95871, 0.86774, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.94083, 0.97579, 0.94083, 0.97579, 0.94083, 0.97579, 0.90406, 0.94039, 0.96694, 1, 0.89903, 1, 1, 1, 0.93582, 0.93582, 0.93582, 1, 0.908, 0.908, 0.918, 0.94219, 0.94219, 0.96544, 1, 1.285, 1, 1, 0.81079, 0.81079, 1, 1, 0.74854, 1, 1, 1, 1, 0.99793, 1, 1, 1, 0.65, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.17173, 1, 0.80535, 0.76169, 1.02058, 1.0732, 1.05486, 1, 1, 1.30692, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.16161, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\nconst MyriadProBoldMetrics = {\n  lineHeight: 1.2,\n  lineGap: 0.2\n};\nconst MyriadProBoldItalicFactors = [1.36898, 1, 1, 0.66227, 0.80779, 0.81625, 0.97276, 0.97276, 0.97733, 0.92222, 0.83266, 0.94292, 0.94292, 1.16148, 1.02058, 0.93582, 0.96694, 0.93582, 1.17337, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.78076, 0.78076, 1.02058, 1.02058, 1.02058, 0.71541, 0.76813, 0.85576, 0.80591, 0.80729, 0.94299, 0.77512, 0.83655, 0.86523, 0.92222, 0.98621, 0.71743, 0.81698, 0.79726, 0.98558, 0.92222, 0.90637, 0.83809, 0.90637, 0.80729, 0.76463, 0.86275, 0.90699, 0.91605, 0.9154, 0.85308, 0.85458, 0.90531, 0.94292, 1.21296, 0.94292, 1.02058, 0.89903, 1.18616, 0.99613, 0.91677, 0.78216, 0.91677, 0.90083, 0.98796, 0.9135, 0.92168, 0.95381, 0.98981, 0.95298, 0.95381, 0.93459, 0.92168, 0.91513, 0.92004, 0.91677, 0.95077, 0.748, 1.04502, 0.91677, 0.92061, 0.94236, 0.89544, 0.89364, 0.9, 0.80687, 0.8578, 0.80687, 1.02058, 0.80779, 0.97276, 0.97276, 0.97276, 0.97276, 0.8578, 0.99973, 1.18616, 0.91339, 1.08074, 0.82891, 1.02058, 0.55509, 0.71526, 0.89022, 1.08595, 1, 1, 1.18616, 1, 0.96736, 0.93582, 1.18616, 1, 1.04864, 0.82711, 0.99043, 0.99043, 0.99043, 0.71541, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.845, 0.80729, 0.77512, 0.77512, 0.77512, 0.77512, 0.98621, 0.98621, 0.98621, 0.98621, 0.95961, 0.92222, 0.90637, 0.90637, 0.90637, 0.90637, 0.90637, 1.02058, 0.90251, 0.90699, 0.90699, 0.90699, 0.90699, 0.85458, 0.83659, 0.94951, 0.99613, 0.99613, 0.99613, 0.99613, 0.99613, 0.99613, 0.85811, 0.78216, 0.90083, 0.90083, 0.90083, 0.90083, 0.95381, 0.95381, 0.95381, 0.95381, 0.9135, 0.92168, 0.91513, 0.91513, 0.91513, 0.91513, 0.91513, 1.08595, 0.91677, 0.91677, 0.91677, 0.91677, 0.91677, 0.89364, 0.92332, 0.89364, 0.85576, 0.99613, 0.85576, 0.99613, 0.85576, 0.99613, 0.80729, 0.78216, 0.80729, 0.78216, 0.80729, 0.78216, 0.80729, 0.78216, 0.94299, 0.76783, 0.95961, 0.91677, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.86523, 0.9135, 0.86523, 0.9135, 0.86523, 0.9135, 1, 1, 0.92222, 0.92168, 0.92222, 0.92168, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.86036, 0.97096, 0.71743, 0.98981, 1, 1, 0.95298, 0.79726, 0.95381, 1, 1, 0.79726, 0.6894, 0.79726, 0.74321, 0.81691, 1.0006, 0.92222, 0.92168, 1, 1, 0.92222, 0.92168, 0.79464, 0.92098, 0.92168, 0.90637, 0.91513, 0.90637, 0.91513, 0.90637, 0.91513, 0.909, 0.87514, 0.80729, 0.95077, 1, 1, 0.80729, 0.95077, 0.76463, 0.748, 0.76463, 0.748, 1, 1, 0.76463, 0.748, 1, 1, 0.86275, 0.72651, 0.86275, 1.04502, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.9154, 0.94236, 0.85458, 0.89364, 0.85458, 0.90531, 0.9, 0.90531, 0.9, 0.90531, 0.9, 1, 0.97276, 0.85576, 0.99613, 0.845, 0.85811, 0.90251, 0.91677, 1, 1, 0.86275, 1.04502, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.00899, 1.30628, 0.85576, 0.80178, 0.66862, 0.7927, 0.69323, 0.88127, 0.72459, 0.89711, 0.95381, 0.85576, 0.80591, 0.7805, 0.94729, 0.77512, 0.90531, 0.92222, 0.90637, 0.98621, 0.81698, 0.92655, 0.98558, 0.92222, 0.85359, 0.90637, 0.90976, 0.83809, 0.94523, 0.86275, 0.83509, 0.93157, 0.85308, 0.83392, 0.92346, 0.98621, 0.83509, 0.92886, 0.91324, 0.92168, 0.95381, 0.90646, 0.92886, 0.90557, 0.86847, 0.90276, 0.91324, 0.86842, 0.92168, 0.99531, 0.95381, 0.9224, 0.85408, 0.92699, 0.86847, 1.0051, 0.91513, 0.80487, 0.93481, 1, 0.88159, 1.05214, 0.90646, 0.97355, 0.81539, 0.89398, 0.85923, 0.95381, 0.90646, 0.91513, 0.90646, 0.85923, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9154, 0.94236, 0.9154, 0.94236, 0.9154, 0.94236, 0.85458, 0.89364, 0.96694, 1, 0.89903, 1, 1, 1, 0.91782, 0.91782, 0.91782, 1, 0.896, 0.896, 0.896, 0.9332, 0.9332, 0.95973, 1, 1.26, 1, 1, 0.80479, 0.80178, 1, 1, 0.85633, 1, 1, 1, 1, 0.97276, 1, 1, 1, 0.698, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.14542, 1, 0.79199, 0.78694, 1.02058, 1.03493, 1.05486, 1, 1, 1.23026, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.20006, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\nconst MyriadProBoldItalicMetrics = {\n  lineHeight: 1.2,\n  lineGap: 0.2\n};\nconst MyriadProItalicFactors = [1.36898, 1, 1, 0.65507, 0.84943, 0.85639, 0.88465, 0.88465, 0.86936, 0.88307, 0.86948, 0.85283, 0.85283, 1.06383, 1.02058, 0.75945, 0.9219, 0.75945, 1.17337, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.75945, 0.75945, 1.02058, 1.02058, 1.02058, 0.69046, 0.70926, 0.85158, 0.77812, 0.76852, 0.89591, 0.70466, 0.76125, 0.80094, 0.86822, 0.83864, 0.728, 0.77212, 0.79475, 0.93637, 0.87514, 0.8588, 0.76013, 0.8588, 0.72421, 0.69866, 0.77598, 0.85991, 0.80811, 0.87832, 0.78112, 0.77512, 0.8562, 1.0222, 1.18417, 1.0222, 1.27014, 0.89903, 1.15012, 0.93859, 0.94399, 0.846, 0.94399, 0.81453, 1.0186, 0.94219, 0.96017, 1.03075, 1.02175, 0.912, 1.03075, 0.96998, 0.96017, 0.93859, 0.94399, 0.94399, 0.95493, 0.746, 1.12658, 0.94578, 0.91, 0.979, 0.882, 0.882, 0.83, 0.85034, 0.83537, 0.85034, 1.02058, 0.70869, 0.88465, 0.88465, 0.88465, 0.88465, 0.83537, 0.90083, 1.15012, 0.9161, 0.94565, 0.73541, 1.02058, 0.53609, 0.69353, 0.79519, 1.08595, 1, 1, 1.15012, 1, 0.91974, 0.75945, 1.15012, 1, 0.9446, 0.73361, 0.9005, 0.9005, 0.9005, 0.62864, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.773, 0.76852, 0.70466, 0.70466, 0.70466, 0.70466, 0.83864, 0.83864, 0.83864, 0.83864, 0.90561, 0.87514, 0.8588, 0.8588, 0.8588, 0.8588, 0.8588, 1.02058, 0.85751, 0.85991, 0.85991, 0.85991, 0.85991, 0.77512, 0.76013, 0.88075, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 0.8075, 0.846, 0.81453, 0.81453, 0.81453, 0.81453, 0.82424, 0.82424, 0.82424, 0.82424, 0.9278, 0.96017, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 1.08595, 0.8562, 0.94578, 0.94578, 0.94578, 0.94578, 0.882, 0.94578, 0.882, 0.85158, 0.93859, 0.85158, 0.93859, 0.85158, 0.93859, 0.76852, 0.846, 0.76852, 0.846, 0.76852, 0.846, 0.76852, 0.846, 0.89591, 0.8544, 0.90561, 0.94399, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.80094, 0.94219, 0.80094, 0.94219, 0.80094, 0.94219, 1, 1, 0.86822, 0.96017, 0.86822, 0.96017, 0.83864, 0.82424, 0.83864, 0.82424, 0.83864, 0.82424, 0.83864, 1.03075, 0.83864, 0.82424, 0.81402, 1.02738, 0.728, 1.02175, 1, 1, 0.912, 0.79475, 1.03075, 1, 1, 0.79475, 0.83911, 0.79475, 0.66266, 0.80553, 1.06676, 0.87514, 0.96017, 1, 1, 0.87514, 0.96017, 0.86865, 0.87396, 0.96017, 0.8588, 0.93859, 0.8588, 0.93859, 0.8588, 0.93859, 0.867, 0.84759, 0.72421, 0.95493, 1, 1, 0.72421, 0.95493, 0.69866, 0.746, 0.69866, 0.746, 1, 1, 0.69866, 0.746, 1, 1, 0.77598, 0.88417, 0.77598, 1.12658, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.87832, 0.979, 0.77512, 0.882, 0.77512, 0.8562, 0.83, 0.8562, 0.83, 0.8562, 0.83, 1, 0.88465, 0.85158, 0.93859, 0.773, 0.8075, 0.85751, 0.8562, 1, 1, 0.77598, 1.12658, 1.15012, 1.15012, 1.15012, 1.15012, 1.15012, 1.15313, 1.15012, 1.15012, 1.15012, 1.08106, 1.03901, 0.85158, 0.77025, 0.62264, 0.7646, 0.65351, 0.86026, 0.69461, 0.89947, 1.03075, 0.85158, 0.77812, 0.76449, 0.88836, 0.70466, 0.8562, 0.86822, 0.8588, 0.83864, 0.77212, 0.85308, 0.93637, 0.87514, 0.82352, 0.8588, 0.85701, 0.76013, 0.89058, 0.77598, 0.8156, 0.82565, 0.78112, 0.77899, 0.89386, 0.83864, 0.8156, 0.9486, 0.92388, 0.96186, 1.03075, 0.91123, 0.9486, 0.93298, 0.878, 0.93942, 0.92388, 0.84596, 0.96186, 0.95119, 1.03075, 0.922, 0.88787, 0.95829, 0.88, 0.93559, 0.93859, 0.78815, 0.93758, 1, 0.89217, 1.03737, 0.91123, 0.93969, 0.77487, 0.85769, 0.86799, 1.03075, 0.91123, 0.93859, 0.91123, 0.86799, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.87832, 0.979, 0.87832, 0.979, 0.87832, 0.979, 0.77512, 0.882, 0.9219, 1, 0.89903, 1, 1, 1, 0.87321, 0.87321, 0.87321, 1, 1.027, 1.027, 1.027, 0.86847, 0.86847, 0.79121, 1, 1.124, 1, 1, 0.73572, 0.73572, 1, 1, 0.85034, 1, 1, 1, 1, 0.88465, 1, 1, 1, 0.669, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.04828, 1, 0.74948, 0.75187, 1.02058, 0.98391, 1.02119, 1, 1, 1.06233, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05233, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\nconst MyriadProItalicMetrics = {\n  lineHeight: 1.2,\n  lineGap: 0.2\n};\nconst MyriadProRegularFactors = [1.36898, 1, 1, 0.76305, 0.82784, 0.94935, 0.89364, 0.92241, 0.89073, 0.90706, 0.98472, 0.85283, 0.85283, 1.0664, 1.02058, 0.74505, 0.9219, 0.74505, 1.23456, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.74505, 0.74505, 1.02058, 1.02058, 1.02058, 0.73002, 0.72601, 0.91755, 0.8126, 0.80314, 0.92222, 0.73764, 0.79726, 0.83051, 0.90284, 0.86023, 0.74, 0.8126, 0.84869, 0.96518, 0.91115, 0.8858, 0.79761, 0.8858, 0.74498, 0.73914, 0.81363, 0.89591, 0.83659, 0.89633, 0.85608, 0.8111, 0.90531, 1.0222, 1.22736, 1.0222, 1.27014, 0.89903, 0.90088, 0.86667, 1.0231, 0.896, 1.01411, 0.90083, 1.05099, 1.00512, 0.99793, 1.05326, 1.09377, 0.938, 1.06226, 1.00119, 0.99793, 0.98714, 1.0231, 1.01231, 0.98196, 0.792, 1.19137, 0.99074, 0.962, 1.01915, 0.926, 0.942, 0.856, 0.85034, 0.92006, 0.85034, 1.02058, 0.69067, 0.92241, 0.92241, 0.92241, 0.92241, 0.92006, 0.9332, 0.90088, 0.91882, 0.93484, 0.75339, 1.02058, 0.56866, 0.54324, 0.79519, 1.08595, 1, 1, 0.90088, 1, 0.95325, 0.74505, 0.90088, 1, 0.97198, 0.75339, 0.91009, 0.91009, 0.91009, 0.66466, 0.91755, 0.91755, 0.91755, 0.91755, 0.91755, 0.91755, 0.788, 0.80314, 0.73764, 0.73764, 0.73764, 0.73764, 0.86023, 0.86023, 0.86023, 0.86023, 0.92915, 0.91115, 0.8858, 0.8858, 0.8858, 0.8858, 0.8858, 1.02058, 0.8858, 0.89591, 0.89591, 0.89591, 0.89591, 0.8111, 0.79611, 0.89713, 0.86667, 0.86667, 0.86667, 0.86667, 0.86667, 0.86667, 0.86936, 0.896, 0.90083, 0.90083, 0.90083, 0.90083, 0.84224, 0.84224, 0.84224, 0.84224, 0.97276, 0.99793, 0.98714, 0.98714, 0.98714, 0.98714, 0.98714, 1.08595, 0.89876, 0.99074, 0.99074, 0.99074, 0.99074, 0.942, 1.0231, 0.942, 0.91755, 0.86667, 0.91755, 0.86667, 0.91755, 0.86667, 0.80314, 0.896, 0.80314, 0.896, 0.80314, 0.896, 0.80314, 0.896, 0.92222, 0.93372, 0.92915, 1.01411, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.83051, 1.00512, 0.83051, 1.00512, 0.83051, 1.00512, 1, 1, 0.90284, 0.99793, 0.90976, 0.99793, 0.86023, 0.84224, 0.86023, 0.84224, 0.86023, 0.84224, 0.86023, 1.05326, 0.86023, 0.84224, 0.82873, 1.07469, 0.74, 1.09377, 1, 1, 0.938, 0.84869, 1.06226, 1, 1, 0.84869, 0.83704, 0.84869, 0.81441, 0.85588, 1.08927, 0.91115, 0.99793, 1, 1, 0.91115, 0.99793, 0.91887, 0.90991, 0.99793, 0.8858, 0.98714, 0.8858, 0.98714, 0.8858, 0.98714, 0.894, 0.91434, 0.74498, 0.98196, 1, 1, 0.74498, 0.98196, 0.73914, 0.792, 0.73914, 0.792, 1, 1, 0.73914, 0.792, 1, 1, 0.81363, 0.904, 0.81363, 1.19137, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89633, 1.01915, 0.8111, 0.942, 0.8111, 0.90531, 0.856, 0.90531, 0.856, 0.90531, 0.856, 1, 0.92241, 0.91755, 0.86667, 0.788, 0.86936, 0.8858, 0.89876, 1, 1, 0.81363, 1.19137, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90388, 1.03901, 0.92138, 0.78105, 0.7154, 0.86169, 0.80513, 0.94007, 0.82528, 0.98612, 1.06226, 0.91755, 0.8126, 0.81884, 0.92819, 0.73764, 0.90531, 0.90284, 0.8858, 0.86023, 0.8126, 0.91172, 0.96518, 0.91115, 0.83089, 0.8858, 0.87791, 0.79761, 0.89297, 0.81363, 0.88157, 0.89992, 0.85608, 0.81992, 0.94307, 0.86023, 0.88157, 0.95308, 0.98699, 0.99793, 1.06226, 0.95817, 0.95308, 0.97358, 0.928, 0.98088, 0.98699, 0.92761, 0.99793, 0.96017, 1.06226, 0.986, 0.944, 0.95978, 0.938, 0.96705, 0.98714, 0.80442, 0.98972, 1, 0.89762, 1.04552, 0.95817, 0.99007, 0.87064, 0.91879, 0.88888, 1.06226, 0.95817, 0.98714, 0.95817, 0.88888, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89633, 1.01915, 0.89633, 1.01915, 0.89633, 1.01915, 0.8111, 0.942, 0.9219, 1, 0.89903, 1, 1, 1, 0.93173, 0.93173, 0.93173, 1, 1.06304, 1.06304, 1.06904, 0.89903, 0.89903, 0.80549, 1, 1.156, 1, 1, 0.76575, 0.76575, 1, 1, 0.72458, 1, 1, 1, 1, 0.92241, 1, 1, 1, 0.619, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.07257, 1, 0.74705, 0.71119, 1.02058, 1.024, 1.02119, 1, 1, 1.1536, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05638, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\nconst MyriadProRegularMetrics = {\n  lineHeight: 1.2,\n  lineGap: 0.2\n};\n\n;// CONCATENATED MODULE: ./src/core/segoeui_factors.js\nconst SegoeuiBoldFactors = [1.76738, 1, 1, 0.99297, 0.9824, 1.04016, 1.06497, 1.03424, 0.97529, 1.17647, 1.23203, 1.1085, 1.1085, 1.16939, 1.2107, 0.9754, 1.21408, 0.9754, 1.59578, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 0.81378, 0.81378, 1.2107, 1.2107, 1.2107, 0.71703, 0.97847, 0.97363, 0.88776, 0.8641, 1.02096, 0.79795, 0.85132, 0.914, 1.06085, 1.1406, 0.8007, 0.89858, 0.83693, 1.14889, 1.09398, 0.97489, 0.92094, 0.97489, 0.90399, 0.84041, 0.95923, 1.00135, 1, 1.06467, 0.98243, 0.90996, 0.99361, 1.1085, 1.56942, 1.1085, 1.2107, 0.74627, 0.94282, 0.96752, 1.01519, 0.86304, 1.01359, 0.97278, 1.15103, 1.01359, 0.98561, 1.02285, 1.02285, 1.00527, 1.02285, 1.0302, 0.99041, 1.0008, 1.01519, 1.01359, 1.02258, 0.79104, 1.16862, 0.99041, 0.97454, 1.02511, 0.99298, 0.96752, 0.95801, 0.94856, 1.16579, 0.94856, 1.2107, 0.9824, 1.03424, 1.03424, 1, 1.03424, 1.16579, 0.8727, 1.3871, 1.18622, 1.10818, 1.04478, 1.2107, 1.18622, 0.75155, 0.94994, 1.28826, 1.21408, 1.21408, 0.91056, 1, 0.91572, 0.9754, 0.64663, 1.18328, 1.24866, 1.04478, 1.14169, 1.15749, 1.17389, 0.71703, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.93506, 0.8641, 0.79795, 0.79795, 0.79795, 0.79795, 1.1406, 1.1406, 1.1406, 1.1406, 1.02096, 1.09398, 0.97426, 0.97426, 0.97426, 0.97426, 0.97426, 1.2107, 0.97489, 1.00135, 1.00135, 1.00135, 1.00135, 0.90996, 0.92094, 1.02798, 0.96752, 0.96752, 0.96752, 0.96752, 0.96752, 0.96752, 0.93136, 0.86304, 0.97278, 0.97278, 0.97278, 0.97278, 1.02285, 1.02285, 1.02285, 1.02285, 0.97122, 0.99041, 1, 1, 1, 1, 1, 1.28826, 1.0008, 0.99041, 0.99041, 0.99041, 0.99041, 0.96752, 1.01519, 0.96752, 0.97363, 0.96752, 0.97363, 0.96752, 0.97363, 0.96752, 0.8641, 0.86304, 0.8641, 0.86304, 0.8641, 0.86304, 0.8641, 0.86304, 1.02096, 1.03057, 1.02096, 1.03517, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.914, 1.01359, 0.914, 1.01359, 0.914, 1.01359, 1, 1, 1.06085, 0.98561, 1.06085, 1.00879, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 0.97138, 1.08692, 0.8007, 1.02285, 1, 1, 1.00527, 0.83693, 1.02285, 1, 1, 0.83693, 0.9455, 0.83693, 0.90418, 0.83693, 1.13005, 1.09398, 0.99041, 1, 1, 1.09398, 0.99041, 0.96692, 1.09251, 0.99041, 0.97489, 1.0008, 0.97489, 1.0008, 0.97489, 1.0008, 0.93994, 0.97931, 0.90399, 1.02258, 1, 1, 0.90399, 1.02258, 0.84041, 0.79104, 0.84041, 0.79104, 0.84041, 0.79104, 0.84041, 0.79104, 1, 1, 0.95923, 1.07034, 0.95923, 1.16862, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.06467, 1.02511, 0.90996, 0.96752, 0.90996, 0.99361, 0.95801, 0.99361, 0.95801, 0.99361, 0.95801, 1.07733, 1.03424, 0.97363, 0.96752, 0.93506, 0.93136, 0.97489, 1.0008, 1, 1, 0.95923, 1.16862, 1.15103, 1.15103, 1.01173, 1.03959, 0.75953, 0.81378, 0.79912, 1.15103, 1.21994, 0.95161, 0.87815, 1.01149, 0.81525, 0.7676, 0.98167, 1.01134, 1.02546, 0.84097, 1.03089, 1.18102, 0.97363, 0.88776, 0.85134, 0.97826, 0.79795, 0.99361, 1.06085, 0.97489, 1.1406, 0.89858, 1.0388, 1.14889, 1.09398, 0.86039, 0.97489, 1.0595, 0.92094, 0.94793, 0.95923, 0.90996, 0.99346, 0.98243, 1.02112, 0.95493, 1.1406, 0.90996, 1.03574, 1.02597, 1.0008, 1.18102, 1.06628, 1.03574, 1.0192, 1.01932, 1.00886, 0.97531, 1.0106, 1.0008, 1.13189, 1.18102, 1.02277, 0.98683, 1.0016, 0.99561, 1.07237, 1.0008, 0.90434, 0.99921, 0.93803, 0.8965, 1.23085, 1.06628, 1.04983, 0.96268, 1.0499, 0.98439, 1.18102, 1.06628, 1.0008, 1.06628, 0.98439, 0.79795, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.09466, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.97278, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.02065, 1, 1, 1, 1, 1, 1, 1.06467, 1.02511, 1.06467, 1.02511, 1.06467, 1.02511, 0.90996, 0.96752, 1, 1.21408, 0.89903, 1, 1, 0.75155, 1.04394, 1.04394, 1.04394, 1.04394, 0.98633, 0.98633, 0.98633, 0.73047, 0.73047, 1.20642, 0.91211, 1.25635, 1.222, 1.02956, 1.03372, 1.03372, 0.96039, 1.24633, 1, 1.12454, 0.93503, 1.03424, 1.19687, 1.03424, 1, 1, 1, 0.771, 1, 1, 1.15749, 1.15749, 1.15749, 1.10948, 0.86279, 0.94434, 0.86279, 0.94434, 0.86182, 1, 1, 1.16897, 1, 0.96085, 0.90137, 1.2107, 1.18416, 1.13973, 0.69825, 0.9716, 2.10339, 1.29004, 1.29004, 1.21172, 1.29004, 1.29004, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18874, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.09193, 1.09193, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\nconst SegoeuiBoldMetrics = {\n  lineHeight: 1.33008,\n  lineGap: 0\n};\nconst SegoeuiBoldItalicFactors = [1.76738, 1, 1, 0.98946, 1.03959, 1.04016, 1.02809, 1.036, 0.97639, 1.10953, 1.23203, 1.11144, 1.11144, 1.16939, 1.21237, 0.9754, 1.21261, 0.9754, 1.59754, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 0.81378, 0.81378, 1.21237, 1.21237, 1.21237, 0.73541, 0.97847, 0.97363, 0.89723, 0.87897, 1.0426, 0.79429, 0.85292, 0.91149, 1.05815, 1.1406, 0.79631, 0.90128, 0.83853, 1.04396, 1.10615, 0.97552, 0.94436, 0.97552, 0.88641, 0.80527, 0.96083, 1.00135, 1, 1.06777, 0.9817, 0.91142, 0.99361, 1.11144, 1.57293, 1.11144, 1.21237, 0.74627, 1.31818, 1.06585, 0.97042, 0.83055, 0.97042, 0.93503, 1.1261, 0.97042, 0.97922, 1.14236, 0.94552, 1.01054, 1.14236, 1.02471, 0.97922, 0.94165, 0.97042, 0.97042, 1.0276, 0.78929, 1.1261, 0.97922, 0.95874, 1.02197, 0.98507, 0.96752, 0.97168, 0.95107, 1.16579, 0.95107, 1.21237, 1.03959, 1.036, 1.036, 1, 1.036, 1.16579, 0.87357, 1.31818, 1.18754, 1.26781, 1.05356, 1.21237, 1.18622, 0.79487, 0.94994, 1.29004, 1.24047, 1.24047, 1.31818, 1, 0.91484, 0.9754, 1.31818, 1.1349, 1.24866, 1.05356, 1.13934, 1.15574, 1.17389, 0.73541, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.94385, 0.87897, 0.79429, 0.79429, 0.79429, 0.79429, 1.1406, 1.1406, 1.1406, 1.1406, 1.0426, 1.10615, 0.97552, 0.97552, 0.97552, 0.97552, 0.97552, 1.21237, 0.97552, 1.00135, 1.00135, 1.00135, 1.00135, 0.91142, 0.94436, 0.98721, 1.06585, 1.06585, 1.06585, 1.06585, 1.06585, 1.06585, 0.96705, 0.83055, 0.93503, 0.93503, 0.93503, 0.93503, 1.14236, 1.14236, 1.14236, 1.14236, 0.93125, 0.97922, 0.94165, 0.94165, 0.94165, 0.94165, 0.94165, 1.29004, 0.94165, 0.97922, 0.97922, 0.97922, 0.97922, 0.96752, 0.97042, 0.96752, 0.97363, 1.06585, 0.97363, 1.06585, 0.97363, 1.06585, 0.87897, 0.83055, 0.87897, 0.83055, 0.87897, 0.83055, 0.87897, 0.83055, 1.0426, 1.0033, 1.0426, 0.97042, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.91149, 0.97042, 0.91149, 0.97042, 0.91149, 0.97042, 1, 1, 1.05815, 0.97922, 1.05815, 0.97922, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 0.97441, 1.04302, 0.79631, 1.01582, 1, 1, 1.01054, 0.83853, 1.14236, 1, 1, 0.83853, 1.09125, 0.83853, 0.90418, 0.83853, 1.19508, 1.10615, 0.97922, 1, 1, 1.10615, 0.97922, 1.01034, 1.10466, 0.97922, 0.97552, 0.94165, 0.97552, 0.94165, 0.97552, 0.94165, 0.91602, 0.91981, 0.88641, 1.0276, 1, 1, 0.88641, 1.0276, 0.80527, 0.78929, 0.80527, 0.78929, 0.80527, 0.78929, 0.80527, 0.78929, 1, 1, 0.96083, 1.05403, 0.95923, 1.16862, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.06777, 1.02197, 0.91142, 0.96752, 0.91142, 0.99361, 0.97168, 0.99361, 0.97168, 0.99361, 0.97168, 1.23199, 1.036, 0.97363, 1.06585, 0.94385, 0.96705, 0.97552, 0.94165, 1, 1, 0.96083, 1.1261, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 0.95161, 1.27126, 1.00811, 0.83284, 0.77702, 0.99137, 0.95253, 1.0347, 0.86142, 1.07205, 1.14236, 0.97363, 0.89723, 0.86869, 1.09818, 0.79429, 0.99361, 1.05815, 0.97552, 1.1406, 0.90128, 1.06662, 1.04396, 1.10615, 0.84918, 0.97552, 1.04694, 0.94436, 0.98015, 0.96083, 0.91142, 1.00356, 0.9817, 1.01945, 0.98999, 1.1406, 0.91142, 1.04961, 0.9898, 1.00639, 1.14236, 1.07514, 1.04961, 0.99607, 1.02897, 1.008, 0.9898, 0.95134, 1.00639, 1.11121, 1.14236, 1.00518, 0.97981, 1.02186, 1, 1.08578, 0.94165, 0.99314, 0.98387, 0.93028, 0.93377, 1.35125, 1.07514, 1.10687, 0.93491, 1.04232, 1.00351, 1.14236, 1.07514, 0.94165, 1.07514, 1.00351, 0.79429, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.09097, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.93503, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.96609, 1, 1, 1, 1, 1, 1, 1.06777, 1.02197, 1.06777, 1.02197, 1.06777, 1.02197, 0.91142, 0.96752, 1, 1.21261, 0.89903, 1, 1, 0.75155, 1.04745, 1.04745, 1.04745, 1.04394, 0.98633, 0.98633, 0.98633, 0.72959, 0.72959, 1.20502, 0.91406, 1.26514, 1.222, 1.02956, 1.03372, 1.03372, 0.96039, 1.24633, 1, 1.09125, 0.93327, 1.03336, 1.16541, 1.036, 1, 1, 1, 0.771, 1, 1, 1.15574, 1.15574, 1.15574, 1.15574, 0.86364, 0.94434, 0.86279, 0.94434, 0.86224, 1, 1, 1.16798, 1, 0.96085, 0.90068, 1.21237, 1.18416, 1.13904, 0.69825, 0.9716, 2.10339, 1.29004, 1.29004, 1.21339, 1.29004, 1.29004, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18775, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.13269, 1.13269, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\nconst SegoeuiBoldItalicMetrics = {\n  lineHeight: 1.33008,\n  lineGap: 0\n};\nconst SegoeuiItalicFactors = [1.76738, 1, 1, 0.98946, 1.14763, 1.05365, 1.06234, 0.96927, 0.92586, 1.15373, 1.18414, 0.91349, 0.91349, 1.07403, 1.17308, 0.78383, 1.20088, 0.78383, 1.42531, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.78383, 0.78383, 1.17308, 1.17308, 1.17308, 0.77349, 0.94565, 0.94729, 0.85944, 0.88506, 0.9858, 0.74817, 0.80016, 0.88449, 0.98039, 0.95782, 0.69238, 0.89898, 0.83231, 0.98183, 1.03989, 0.96924, 0.86237, 0.96924, 0.80595, 0.74524, 0.86091, 0.95402, 0.94143, 0.98448, 0.8858, 0.83089, 0.93285, 1.0949, 1.39016, 1.0949, 1.45994, 0.74627, 1.04839, 0.97454, 0.97454, 0.87207, 0.97454, 0.87533, 1.06151, 0.97454, 1.00176, 1.16484, 1.08132, 0.98047, 1.16484, 1.02989, 1.01054, 0.96225, 0.97454, 0.97454, 1.06598, 0.79004, 1.16344, 1.00351, 0.94629, 0.9973, 0.91016, 0.96777, 0.9043, 0.91082, 0.92481, 0.91082, 1.17308, 0.95748, 0.96927, 0.96927, 1, 0.96927, 0.92481, 0.80597, 1.04839, 1.23393, 1.1781, 0.9245, 1.17308, 1.20808, 0.63218, 0.94261, 1.24822, 1.09971, 1.09971, 1.04839, 1, 0.85273, 0.78032, 1.04839, 1.09971, 1.22326, 0.9245, 1.09836, 1.13525, 1.15222, 0.70424, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.85498, 0.88506, 0.74817, 0.74817, 0.74817, 0.74817, 0.95782, 0.95782, 0.95782, 0.95782, 0.9858, 1.03989, 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 1.17308, 0.96924, 0.95402, 0.95402, 0.95402, 0.95402, 0.83089, 0.86237, 0.88409, 0.97454, 0.97454, 0.97454, 0.97454, 0.97454, 0.97454, 0.92916, 0.87207, 0.87533, 0.87533, 0.87533, 0.87533, 0.93146, 0.93146, 0.93146, 0.93146, 0.93854, 1.01054, 0.96225, 0.96225, 0.96225, 0.96225, 0.96225, 1.24822, 0.8761, 1.00351, 1.00351, 1.00351, 1.00351, 0.96777, 0.97454, 0.96777, 0.94729, 0.97454, 0.94729, 0.97454, 0.94729, 0.97454, 0.88506, 0.87207, 0.88506, 0.87207, 0.88506, 0.87207, 0.88506, 0.87207, 0.9858, 0.95391, 0.9858, 0.97454, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.88449, 0.97454, 0.88449, 0.97454, 0.88449, 0.97454, 1, 1, 0.98039, 1.00176, 0.98039, 1.00176, 0.95782, 0.93146, 0.95782, 0.93146, 0.95782, 0.93146, 0.95782, 1.16484, 0.95782, 0.93146, 0.84421, 1.12761, 0.69238, 1.08132, 1, 1, 0.98047, 0.83231, 1.16484, 1, 1, 0.84723, 1.04861, 0.84723, 0.78755, 0.83231, 1.23736, 1.03989, 1.01054, 1, 1, 1.03989, 1.01054, 0.9857, 1.03849, 1.01054, 0.96924, 0.96225, 0.96924, 0.96225, 0.96924, 0.96225, 0.92383, 0.90171, 0.80595, 1.06598, 1, 1, 0.80595, 1.06598, 0.74524, 0.79004, 0.74524, 0.79004, 0.74524, 0.79004, 0.74524, 0.79004, 1, 1, 0.86091, 1.02759, 0.85771, 1.16344, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.98448, 0.9973, 0.83089, 0.96777, 0.83089, 0.93285, 0.9043, 0.93285, 0.9043, 0.93285, 0.9043, 1.31868, 0.96927, 0.94729, 0.97454, 0.85498, 0.92916, 0.96924, 0.8761, 1, 1, 0.86091, 1.16344, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 0.81965, 0.81965, 0.94729, 0.78032, 0.71022, 0.90883, 0.84171, 0.99877, 0.77596, 1.05734, 1.2, 0.94729, 0.85944, 0.82791, 0.9607, 0.74817, 0.93285, 0.98039, 0.96924, 0.95782, 0.89898, 0.98316, 0.98183, 1.03989, 0.78614, 0.96924, 0.97642, 0.86237, 0.86075, 0.86091, 0.83089, 0.90082, 0.8858, 0.97296, 1.01284, 0.95782, 0.83089, 1.0976, 1.04, 1.03342, 1.2, 1.0675, 1.0976, 0.98205, 1.03809, 1.05097, 1.04, 0.95364, 1.03342, 1.05401, 1.2, 1.02148, 1.0119, 1.04724, 1.0127, 1.02732, 0.96225, 0.8965, 0.97783, 0.93574, 0.94818, 1.30679, 1.0675, 1.11826, 0.99821, 1.0557, 1.0326, 1.2, 1.0675, 0.96225, 1.0675, 1.0326, 0.74817, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.03754, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.87533, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.98705, 1, 1, 1, 1, 1, 1, 0.98448, 0.9973, 0.98448, 0.9973, 0.98448, 0.9973, 0.83089, 0.96777, 1, 1.20088, 0.89903, 1, 1, 0.75155, 0.94945, 0.94945, 0.94945, 0.94945, 1.12317, 1.12317, 1.12317, 0.67603, 0.67603, 1.15621, 0.73584, 1.21191, 1.22135, 1.06483, 0.94868, 0.94868, 0.95996, 1.24633, 1, 1.07497, 0.87709, 0.96927, 1.01473, 0.96927, 1, 1, 1, 0.77295, 1, 1, 1.09836, 1.09836, 1.09836, 1.01522, 0.86321, 0.94434, 0.8649, 0.94434, 0.86182, 1, 1, 1.083, 1, 0.91578, 0.86438, 1.17308, 1.18416, 1.14589, 0.69825, 0.97622, 1.96791, 1.24822, 1.24822, 1.17308, 1.24822, 1.24822, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.17984, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.10742, 1.10742, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\nconst SegoeuiItalicMetrics = {\n  lineHeight: 1.33008,\n  lineGap: 0\n};\nconst SegoeuiRegularFactors = [1.76738, 1, 1, 0.98594, 1.02285, 1.10454, 1.06234, 0.96927, 0.92037, 1.19985, 1.2046, 0.90616, 0.90616, 1.07152, 1.1714, 0.78032, 1.20088, 0.78032, 1.40246, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.78032, 0.78032, 1.1714, 1.1714, 1.1714, 0.80597, 0.94084, 0.96706, 0.85944, 0.85734, 0.97093, 0.75842, 0.79936, 0.88198, 0.9831, 0.95782, 0.71387, 0.86969, 0.84636, 1.07796, 1.03584, 0.96924, 0.83968, 0.96924, 0.82826, 0.79649, 0.85771, 0.95132, 0.93119, 0.98965, 0.88433, 0.8287, 0.93365, 1.08612, 1.3638, 1.08612, 1.45786, 0.74627, 0.80499, 0.91484, 1.05707, 0.92383, 1.05882, 0.9403, 1.12654, 1.05882, 1.01756, 1.09011, 1.09011, 0.99414, 1.09011, 1.034, 1.01756, 1.05356, 1.05707, 1.05882, 1.04399, 0.84863, 1.21968, 1.01756, 0.95801, 1.00068, 0.91797, 0.96777, 0.9043, 0.90351, 0.92105, 0.90351, 1.1714, 0.85337, 0.96927, 0.96927, 0.99912, 0.96927, 0.92105, 0.80597, 1.2434, 1.20808, 1.05937, 0.90957, 1.1714, 1.20808, 0.75155, 0.94261, 1.24644, 1.09971, 1.09971, 0.84751, 1, 0.85273, 0.78032, 0.61584, 1.05425, 1.17914, 0.90957, 1.08665, 1.11593, 1.14169, 0.73381, 0.96706, 0.96706, 0.96706, 0.96706, 0.96706, 0.96706, 0.86035, 0.85734, 0.75842, 0.75842, 0.75842, 0.75842, 0.95782, 0.95782, 0.95782, 0.95782, 0.97093, 1.03584, 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 1.1714, 0.96924, 0.95132, 0.95132, 0.95132, 0.95132, 0.8287, 0.83968, 0.89049, 0.91484, 0.91484, 0.91484, 0.91484, 0.91484, 0.91484, 0.93575, 0.92383, 0.9403, 0.9403, 0.9403, 0.9403, 0.8717, 0.8717, 0.8717, 0.8717, 1.00527, 1.01756, 1.05356, 1.05356, 1.05356, 1.05356, 1.05356, 1.24644, 0.95923, 1.01756, 1.01756, 1.01756, 1.01756, 0.96777, 1.05707, 0.96777, 0.96706, 0.91484, 0.96706, 0.91484, 0.96706, 0.91484, 0.85734, 0.92383, 0.85734, 0.92383, 0.85734, 0.92383, 0.85734, 0.92383, 0.97093, 1.0969, 0.97093, 1.05882, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.88198, 1.05882, 0.88198, 1.05882, 0.88198, 1.05882, 1, 1, 0.9831, 1.01756, 0.9831, 1.01756, 0.95782, 0.8717, 0.95782, 0.8717, 0.95782, 0.8717, 0.95782, 1.09011, 0.95782, 0.8717, 0.84784, 1.11551, 0.71387, 1.09011, 1, 1, 0.99414, 0.84636, 1.09011, 1, 1, 0.84636, 1.0536, 0.84636, 0.94298, 0.84636, 1.23297, 1.03584, 1.01756, 1, 1, 1.03584, 1.01756, 1.00323, 1.03444, 1.01756, 0.96924, 1.05356, 0.96924, 1.05356, 0.96924, 1.05356, 0.93066, 0.98293, 0.82826, 1.04399, 1, 1, 0.82826, 1.04399, 0.79649, 0.84863, 0.79649, 0.84863, 0.79649, 0.84863, 0.79649, 0.84863, 1, 1, 0.85771, 1.17318, 0.85771, 1.21968, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.98965, 1.00068, 0.8287, 0.96777, 0.8287, 0.93365, 0.9043, 0.93365, 0.9043, 0.93365, 0.9043, 1.08571, 0.96927, 0.96706, 0.91484, 0.86035, 0.93575, 0.96924, 0.95923, 1, 1, 0.85771, 1.21968, 1.11437, 1.11437, 0.93109, 0.91202, 0.60411, 0.84164, 0.55572, 1.01173, 0.97361, 0.81818, 0.81818, 0.96635, 0.78032, 0.72727, 0.92366, 0.98601, 1.03405, 0.77968, 1.09799, 1.2, 0.96706, 0.85944, 0.85638, 0.96491, 0.75842, 0.93365, 0.9831, 0.96924, 0.95782, 0.86969, 0.94152, 1.07796, 1.03584, 0.78437, 0.96924, 0.98715, 0.83968, 0.83491, 0.85771, 0.8287, 0.94492, 0.88433, 0.9287, 1.0098, 0.95782, 0.8287, 1.0625, 0.98248, 1.03424, 1.2, 1.01071, 1.0625, 0.95246, 1.03809, 1.04912, 0.98248, 1.00221, 1.03424, 1.05443, 1.2, 1.04785, 0.99609, 1.00169, 1.05176, 0.99346, 1.05356, 0.9087, 1.03004, 0.95542, 0.93117, 1.23362, 1.01071, 1.07831, 1.02512, 1.05205, 1.03502, 1.2, 1.01071, 1.05356, 1.01071, 1.03502, 0.75842, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.03719, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9403, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.04021, 1, 1, 1, 1, 1, 1, 0.98965, 1.00068, 0.98965, 1.00068, 0.98965, 1.00068, 0.8287, 0.96777, 1, 1.20088, 0.89903, 1, 1, 0.75155, 1.03077, 1.03077, 1.03077, 1.03077, 1.13196, 1.13196, 1.13196, 0.67428, 0.67428, 1.16039, 0.73291, 1.20996, 1.22135, 1.06483, 0.94868, 0.94868, 0.95996, 1.24633, 1, 1.07497, 0.87796, 0.96927, 1.01518, 0.96927, 1, 1, 1, 0.77295, 1, 1, 1.10539, 1.10539, 1.11358, 1.06967, 0.86279, 0.94434, 0.86279, 0.94434, 0.86182, 1, 1, 1.083, 1, 0.91578, 0.86507, 1.1714, 1.18416, 1.14589, 0.69825, 0.97622, 1.9697, 1.24822, 1.24822, 1.17238, 1.24822, 1.24822, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18083, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.10938, 1.10938, 1, 1, 1, 1.05425, 1.09971, 1.09971, 1.09971, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\nconst SegoeuiRegularMetrics = {\n  lineHeight: 1.33008,\n  lineGap: 0\n};\n\n;// CONCATENATED MODULE: ./src/core/xfa_fonts.js\n\n\n\n\n\n\n\n\nconst getXFAFontMap = getLookupTableFactory(function (t) {\n  t[\"MyriadPro-Regular\"] = t[\"PdfJS-Fallback-Regular\"] = {\n    name: \"LiberationSans-Regular\",\n    factors: MyriadProRegularFactors,\n    baseWidths: LiberationSansRegularWidths,\n    baseMapping: LiberationSansRegularMapping,\n    metrics: MyriadProRegularMetrics\n  };\n  t[\"MyriadPro-Bold\"] = t[\"PdfJS-Fallback-Bold\"] = {\n    name: \"LiberationSans-Bold\",\n    factors: MyriadProBoldFactors,\n    baseWidths: LiberationSansBoldWidths,\n    baseMapping: LiberationSansBoldMapping,\n    metrics: MyriadProBoldMetrics\n  };\n  t[\"MyriadPro-It\"] = t[\"MyriadPro-Italic\"] = t[\"PdfJS-Fallback-Italic\"] = {\n    name: \"LiberationSans-Italic\",\n    factors: MyriadProItalicFactors,\n    baseWidths: LiberationSansItalicWidths,\n    baseMapping: LiberationSansItalicMapping,\n    metrics: MyriadProItalicMetrics\n  };\n  t[\"MyriadPro-BoldIt\"] = t[\"MyriadPro-BoldItalic\"] = t[\"PdfJS-Fallback-BoldItalic\"] = {\n    name: \"LiberationSans-BoldItalic\",\n    factors: MyriadProBoldItalicFactors,\n    baseWidths: LiberationSansBoldItalicWidths,\n    baseMapping: LiberationSansBoldItalicMapping,\n    metrics: MyriadProBoldItalicMetrics\n  };\n  t.ArialMT = t.Arial = t[\"Arial-Regular\"] = {\n    name: \"LiberationSans-Regular\",\n    baseWidths: LiberationSansRegularWidths,\n    baseMapping: LiberationSansRegularMapping\n  };\n  t[\"Arial-BoldMT\"] = t[\"Arial-Bold\"] = {\n    name: \"LiberationSans-Bold\",\n    baseWidths: LiberationSansBoldWidths,\n    baseMapping: LiberationSansBoldMapping\n  };\n  t[\"Arial-ItalicMT\"] = t[\"Arial-Italic\"] = {\n    name: \"LiberationSans-Italic\",\n    baseWidths: LiberationSansItalicWidths,\n    baseMapping: LiberationSansItalicMapping\n  };\n  t[\"Arial-BoldItalicMT\"] = t[\"Arial-BoldItalic\"] = {\n    name: \"LiberationSans-BoldItalic\",\n    baseWidths: LiberationSansBoldItalicWidths,\n    baseMapping: LiberationSansBoldItalicMapping\n  };\n  t[\"Calibri-Regular\"] = {\n    name: \"LiberationSans-Regular\",\n    factors: CalibriRegularFactors,\n    baseWidths: LiberationSansRegularWidths,\n    baseMapping: LiberationSansRegularMapping,\n    metrics: CalibriRegularMetrics\n  };\n  t[\"Calibri-Bold\"] = {\n    name: \"LiberationSans-Bold\",\n    factors: CalibriBoldFactors,\n    baseWidths: LiberationSansBoldWidths,\n    baseMapping: LiberationSansBoldMapping,\n    metrics: CalibriBoldMetrics\n  };\n  t[\"Calibri-Italic\"] = {\n    name: \"LiberationSans-Italic\",\n    factors: CalibriItalicFactors,\n    baseWidths: LiberationSansItalicWidths,\n    baseMapping: LiberationSansItalicMapping,\n    metrics: CalibriItalicMetrics\n  };\n  t[\"Calibri-BoldItalic\"] = {\n    name: \"LiberationSans-BoldItalic\",\n    factors: CalibriBoldItalicFactors,\n    baseWidths: LiberationSansBoldItalicWidths,\n    baseMapping: LiberationSansBoldItalicMapping,\n    metrics: CalibriBoldItalicMetrics\n  };\n  t[\"Segoeui-Regular\"] = {\n    name: \"LiberationSans-Regular\",\n    factors: SegoeuiRegularFactors,\n    baseWidths: LiberationSansRegularWidths,\n    baseMapping: LiberationSansRegularMapping,\n    metrics: SegoeuiRegularMetrics\n  };\n  t[\"Segoeui-Bold\"] = {\n    name: \"LiberationSans-Bold\",\n    factors: SegoeuiBoldFactors,\n    baseWidths: LiberationSansBoldWidths,\n    baseMapping: LiberationSansBoldMapping,\n    metrics: SegoeuiBoldMetrics\n  };\n  t[\"Segoeui-Italic\"] = {\n    name: \"LiberationSans-Italic\",\n    factors: SegoeuiItalicFactors,\n    baseWidths: LiberationSansItalicWidths,\n    baseMapping: LiberationSansItalicMapping,\n    metrics: SegoeuiItalicMetrics\n  };\n  t[\"Segoeui-BoldItalic\"] = {\n    name: \"LiberationSans-BoldItalic\",\n    factors: SegoeuiBoldItalicFactors,\n    baseWidths: LiberationSansBoldItalicWidths,\n    baseMapping: LiberationSansBoldItalicMapping,\n    metrics: SegoeuiBoldItalicMetrics\n  };\n  t[\"Helvetica-Regular\"] = t.Helvetica = {\n    name: \"LiberationSans-Regular\",\n    factors: HelveticaRegularFactors,\n    baseWidths: LiberationSansRegularWidths,\n    baseMapping: LiberationSansRegularMapping,\n    metrics: HelveticaRegularMetrics\n  };\n  t[\"Helvetica-Bold\"] = {\n    name: \"LiberationSans-Bold\",\n    factors: HelveticaBoldFactors,\n    baseWidths: LiberationSansBoldWidths,\n    baseMapping: LiberationSansBoldMapping,\n    metrics: HelveticaBoldMetrics\n  };\n  t[\"Helvetica-Italic\"] = {\n    name: \"LiberationSans-Italic\",\n    factors: HelveticaItalicFactors,\n    baseWidths: LiberationSansItalicWidths,\n    baseMapping: LiberationSansItalicMapping,\n    metrics: HelveticaItalicMetrics\n  };\n  t[\"Helvetica-BoldItalic\"] = {\n    name: \"LiberationSans-BoldItalic\",\n    factors: HelveticaBoldItalicFactors,\n    baseWidths: LiberationSansBoldItalicWidths,\n    baseMapping: LiberationSansBoldItalicMapping,\n    metrics: HelveticaBoldItalicMetrics\n  };\n});\nfunction getXfaFontName(name) {\n  const fontName = normalizeFontName(name);\n  const fontMap = getXFAFontMap();\n  return fontMap[fontName];\n}\nfunction getXfaFontWidths(name) {\n  const info = getXfaFontName(name);\n  if (!info) {\n    return null;\n  }\n  const {\n    baseWidths,\n    baseMapping,\n    factors\n  } = info;\n  const rescaledBaseWidths = !factors ? baseWidths : baseWidths.map((w, i) => w * factors[i]);\n  let currentCode = -2;\n  let currentArray;\n  const newWidths = [];\n  for (const [unicode, glyphIndex] of baseMapping.map((charUnicode, index) => [charUnicode, index]).sort(([unicode1], [unicode2]) => unicode1 - unicode2)) {\n    if (unicode === -1) {\n      continue;\n    }\n    if (unicode === currentCode + 1) {\n      currentArray.push(rescaledBaseWidths[glyphIndex]);\n      currentCode += 1;\n    } else {\n      currentCode = unicode;\n      currentArray = [rescaledBaseWidths[glyphIndex]];\n      newWidths.push(unicode, currentArray);\n    }\n  }\n  return newWidths;\n}\nfunction getXfaFontDict(name) {\n  const widths = getXfaFontWidths(name);\n  const dict = new Dict(null);\n  dict.set(\"BaseFont\", Name.get(name));\n  dict.set(\"Type\", Name.get(\"Font\"));\n  dict.set(\"Subtype\", Name.get(\"CIDFontType2\"));\n  dict.set(\"Encoding\", Name.get(\"Identity-H\"));\n  dict.set(\"CIDToGIDMap\", Name.get(\"Identity\"));\n  dict.set(\"W\", widths);\n  dict.set(\"FirstChar\", widths[0]);\n  dict.set(\"LastChar\", widths.at(-2) + widths.at(-1).length - 1);\n  const descriptor = new Dict(null);\n  dict.set(\"FontDescriptor\", descriptor);\n  const systemInfo = new Dict(null);\n  systemInfo.set(\"Ordering\", \"Identity\");\n  systemInfo.set(\"Registry\", \"Adobe\");\n  systemInfo.set(\"Supplement\", 0);\n  dict.set(\"CIDSystemInfo\", systemInfo);\n  return dict;\n}\n\n;// CONCATENATED MODULE: ./src/core/ps_parser.js\n\n\n\nclass PostScriptParser {\n  constructor(lexer) {\n    this.lexer = lexer;\n    this.operators = [];\n    this.token = null;\n    this.prev = null;\n  }\n  nextToken() {\n    this.prev = this.token;\n    this.token = this.lexer.getToken();\n  }\n  accept(type) {\n    if (this.token.type === type) {\n      this.nextToken();\n      return true;\n    }\n    return false;\n  }\n  expect(type) {\n    if (this.accept(type)) {\n      return true;\n    }\n    throw new FormatError(`Unexpected symbol: found ${this.token.type} expected ${type}.`);\n  }\n  parse() {\n    this.nextToken();\n    this.expect(PostScriptTokenTypes.LBRACE);\n    this.parseBlock();\n    this.expect(PostScriptTokenTypes.RBRACE);\n    return this.operators;\n  }\n  parseBlock() {\n    while (true) {\n      if (this.accept(PostScriptTokenTypes.NUMBER)) {\n        this.operators.push(this.prev.value);\n      } else if (this.accept(PostScriptTokenTypes.OPERATOR)) {\n        this.operators.push(this.prev.value);\n      } else if (this.accept(PostScriptTokenTypes.LBRACE)) {\n        this.parseCondition();\n      } else {\n        return;\n      }\n    }\n  }\n  parseCondition() {\n    const conditionLocation = this.operators.length;\n    this.operators.push(null, null);\n    this.parseBlock();\n    this.expect(PostScriptTokenTypes.RBRACE);\n    if (this.accept(PostScriptTokenTypes.IF)) {\n      this.operators[conditionLocation] = this.operators.length;\n      this.operators[conditionLocation + 1] = \"jz\";\n    } else if (this.accept(PostScriptTokenTypes.LBRACE)) {\n      const jumpLocation = this.operators.length;\n      this.operators.push(null, null);\n      const endOfTrue = this.operators.length;\n      this.parseBlock();\n      this.expect(PostScriptTokenTypes.RBRACE);\n      this.expect(PostScriptTokenTypes.IFELSE);\n      this.operators[jumpLocation] = this.operators.length;\n      this.operators[jumpLocation + 1] = \"j\";\n      this.operators[conditionLocation] = endOfTrue;\n      this.operators[conditionLocation + 1] = \"jz\";\n    } else {\n      throw new FormatError(\"PS Function: error parsing conditional.\");\n    }\n  }\n}\nconst PostScriptTokenTypes = {\n  LBRACE: 0,\n  RBRACE: 1,\n  NUMBER: 2,\n  OPERATOR: 3,\n  IF: 4,\n  IFELSE: 5\n};\nclass PostScriptToken {\n  static get opCache() {\n    return shadow(this, \"opCache\", Object.create(null));\n  }\n  constructor(type, value) {\n    this.type = type;\n    this.value = value;\n  }\n  static getOperator(op) {\n    return PostScriptToken.opCache[op] ||= new PostScriptToken(PostScriptTokenTypes.OPERATOR, op);\n  }\n  static get LBRACE() {\n    return shadow(this, \"LBRACE\", new PostScriptToken(PostScriptTokenTypes.LBRACE, \"{\"));\n  }\n  static get RBRACE() {\n    return shadow(this, \"RBRACE\", new PostScriptToken(PostScriptTokenTypes.RBRACE, \"}\"));\n  }\n  static get IF() {\n    return shadow(this, \"IF\", new PostScriptToken(PostScriptTokenTypes.IF, \"IF\"));\n  }\n  static get IFELSE() {\n    return shadow(this, \"IFELSE\", new PostScriptToken(PostScriptTokenTypes.IFELSE, \"IFELSE\"));\n  }\n}\nclass PostScriptLexer {\n  constructor(stream) {\n    this.stream = stream;\n    this.nextChar();\n    this.strBuf = [];\n  }\n  nextChar() {\n    return this.currentChar = this.stream.getByte();\n  }\n  getToken() {\n    let comment = false;\n    let ch = this.currentChar;\n    while (true) {\n      if (ch < 0) {\n        return EOF;\n      }\n      if (comment) {\n        if (ch === 0x0a || ch === 0x0d) {\n          comment = false;\n        }\n      } else if (ch === 0x25) {\n        comment = true;\n      } else if (!isWhiteSpace(ch)) {\n        break;\n      }\n      ch = this.nextChar();\n    }\n    switch (ch | 0) {\n      case 0x30:\n      case 0x31:\n      case 0x32:\n      case 0x33:\n      case 0x34:\n      case 0x35:\n      case 0x36:\n      case 0x37:\n      case 0x38:\n      case 0x39:\n      case 0x2b:\n      case 0x2d:\n      case 0x2e:\n        return new PostScriptToken(PostScriptTokenTypes.NUMBER, this.getNumber());\n      case 0x7b:\n        this.nextChar();\n        return PostScriptToken.LBRACE;\n      case 0x7d:\n        this.nextChar();\n        return PostScriptToken.RBRACE;\n    }\n    const strBuf = this.strBuf;\n    strBuf.length = 0;\n    strBuf[0] = String.fromCharCode(ch);\n    while ((ch = this.nextChar()) >= 0 && (ch >= 0x41 && ch <= 0x5a || ch >= 0x61 && ch <= 0x7a)) {\n      strBuf.push(String.fromCharCode(ch));\n    }\n    const str = strBuf.join(\"\");\n    switch (str.toLowerCase()) {\n      case \"if\":\n        return PostScriptToken.IF;\n      case \"ifelse\":\n        return PostScriptToken.IFELSE;\n      default:\n        return PostScriptToken.getOperator(str);\n    }\n  }\n  getNumber() {\n    let ch = this.currentChar;\n    const strBuf = this.strBuf;\n    strBuf.length = 0;\n    strBuf[0] = String.fromCharCode(ch);\n    while ((ch = this.nextChar()) >= 0) {\n      if (ch >= 0x30 && ch <= 0x39 || ch === 0x2d || ch === 0x2e) {\n        strBuf.push(String.fromCharCode(ch));\n      } else {\n        break;\n      }\n    }\n    const value = parseFloat(strBuf.join(\"\"));\n    if (isNaN(value)) {\n      throw new FormatError(`Invalid floating point number: ${value}`);\n    }\n    return value;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/image_utils.js\n\n\nclass BaseLocalCache {\n  constructor(options) {\n    if (this.constructor === BaseLocalCache) {\n      unreachable(\"Cannot initialize BaseLocalCache.\");\n    }\n    this._onlyRefs = options?.onlyRefs === true;\n    if (!this._onlyRefs) {\n      this._nameRefMap = new Map();\n      this._imageMap = new Map();\n    }\n    this._imageCache = new RefSetCache();\n  }\n  getByName(name) {\n    if (this._onlyRefs) {\n      unreachable(\"Should not call `getByName` method.\");\n    }\n    const ref = this._nameRefMap.get(name);\n    if (ref) {\n      return this.getByRef(ref);\n    }\n    return this._imageMap.get(name) || null;\n  }\n  getByRef(ref) {\n    return this._imageCache.get(ref) || null;\n  }\n  set(name, ref, data) {\n    unreachable(\"Abstract method `set` called.\");\n  }\n}\nclass LocalImageCache extends BaseLocalCache {\n  set(name, ref = null, data) {\n    if (typeof name !== \"string\") {\n      throw new Error('LocalImageCache.set - expected \"name\" argument.');\n    }\n    if (ref) {\n      if (this._imageCache.has(ref)) {\n        return;\n      }\n      this._nameRefMap.set(name, ref);\n      this._imageCache.put(ref, data);\n      return;\n    }\n    if (this._imageMap.has(name)) {\n      return;\n    }\n    this._imageMap.set(name, data);\n  }\n}\nclass LocalColorSpaceCache extends BaseLocalCache {\n  set(name = null, ref = null, data) {\n    if (typeof name !== \"string\" && !ref) {\n      throw new Error('LocalColorSpaceCache.set - expected \"name\" and/or \"ref\" argument.');\n    }\n    if (ref) {\n      if (this._imageCache.has(ref)) {\n        return;\n      }\n      if (name !== null) {\n        this._nameRefMap.set(name, ref);\n      }\n      this._imageCache.put(ref, data);\n      return;\n    }\n    if (this._imageMap.has(name)) {\n      return;\n    }\n    this._imageMap.set(name, data);\n  }\n}\nclass LocalFunctionCache extends BaseLocalCache {\n  constructor(options) {\n    super({\n      onlyRefs: true\n    });\n  }\n  set(name = null, ref, data) {\n    if (!ref) {\n      throw new Error('LocalFunctionCache.set - expected \"ref\" argument.');\n    }\n    if (this._imageCache.has(ref)) {\n      return;\n    }\n    this._imageCache.put(ref, data);\n  }\n}\nclass LocalGStateCache extends BaseLocalCache {\n  set(name, ref = null, data) {\n    if (typeof name !== \"string\") {\n      throw new Error('LocalGStateCache.set - expected \"name\" argument.');\n    }\n    if (ref) {\n      if (this._imageCache.has(ref)) {\n        return;\n      }\n      this._nameRefMap.set(name, ref);\n      this._imageCache.put(ref, data);\n      return;\n    }\n    if (this._imageMap.has(name)) {\n      return;\n    }\n    this._imageMap.set(name, data);\n  }\n}\nclass LocalTilingPatternCache extends BaseLocalCache {\n  constructor(options) {\n    super({\n      onlyRefs: true\n    });\n  }\n  set(name = null, ref, data) {\n    if (!ref) {\n      throw new Error('LocalTilingPatternCache.set - expected \"ref\" argument.');\n    }\n    if (this._imageCache.has(ref)) {\n      return;\n    }\n    this._imageCache.put(ref, data);\n  }\n}\nclass RegionalImageCache extends BaseLocalCache {\n  constructor(options) {\n    super({\n      onlyRefs: true\n    });\n  }\n  set(name = null, ref, data) {\n    if (!ref) {\n      throw new Error('RegionalImageCache.set - expected \"ref\" argument.');\n    }\n    if (this._imageCache.has(ref)) {\n      return;\n    }\n    this._imageCache.put(ref, data);\n  }\n}\nclass GlobalImageCache {\n  static NUM_PAGES_THRESHOLD = 2;\n  static MIN_IMAGES_TO_CACHE = 10;\n  static MAX_BYTE_SIZE = 5 * MAX_IMAGE_SIZE_TO_CACHE;\n  #decodeFailedSet = new RefSet();\n  constructor() {\n    this._refCache = new RefSetCache();\n    this._imageCache = new RefSetCache();\n  }\n  get #byteSize() {\n    let byteSize = 0;\n    for (const imageData of this._imageCache) {\n      byteSize += imageData.byteSize;\n    }\n    return byteSize;\n  }\n  get #cacheLimitReached() {\n    if (this._imageCache.size < GlobalImageCache.MIN_IMAGES_TO_CACHE) {\n      return false;\n    }\n    if (this.#byteSize < GlobalImageCache.MAX_BYTE_SIZE) {\n      return false;\n    }\n    return true;\n  }\n  shouldCache(ref, pageIndex) {\n    let pageIndexSet = this._refCache.get(ref);\n    if (!pageIndexSet) {\n      pageIndexSet = new Set();\n      this._refCache.put(ref, pageIndexSet);\n    }\n    pageIndexSet.add(pageIndex);\n    if (pageIndexSet.size < GlobalImageCache.NUM_PAGES_THRESHOLD) {\n      return false;\n    }\n    if (!this._imageCache.has(ref) && this.#cacheLimitReached) {\n      return false;\n    }\n    return true;\n  }\n  addDecodeFailed(ref) {\n    this.#decodeFailedSet.put(ref);\n  }\n  hasDecodeFailed(ref) {\n    return this.#decodeFailedSet.has(ref);\n  }\n  addByteSize(ref, byteSize) {\n    const imageData = this._imageCache.get(ref);\n    if (!imageData) {\n      return;\n    }\n    if (imageData.byteSize) {\n      return;\n    }\n    imageData.byteSize = byteSize;\n  }\n  getData(ref, pageIndex) {\n    const pageIndexSet = this._refCache.get(ref);\n    if (!pageIndexSet) {\n      return null;\n    }\n    if (pageIndexSet.size < GlobalImageCache.NUM_PAGES_THRESHOLD) {\n      return null;\n    }\n    const imageData = this._imageCache.get(ref);\n    if (!imageData) {\n      return null;\n    }\n    pageIndexSet.add(pageIndex);\n    return imageData;\n  }\n  setData(ref, data) {\n    if (!this._refCache.has(ref)) {\n      throw new Error('GlobalImageCache.setData - expected \"shouldCache\" to have been called.');\n    }\n    if (this._imageCache.has(ref)) {\n      return;\n    }\n    if (this.#cacheLimitReached) {\n      warn(\"GlobalImageCache.setData - cache limit reached.\");\n      return;\n    }\n    this._imageCache.put(ref, data);\n  }\n  clear(onlyData = false) {\n    if (!onlyData) {\n      this.#decodeFailedSet.clear();\n      this._refCache.clear();\n    }\n    this._imageCache.clear();\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/function.js\n\n\n\n\n\n\nclass PDFFunctionFactory {\n  constructor({\n    xref,\n    isEvalSupported = true\n  }) {\n    this.xref = xref;\n    this.isEvalSupported = isEvalSupported !== false;\n  }\n  create(fn) {\n    const cachedFunction = this.getCached(fn);\n    if (cachedFunction) {\n      return cachedFunction;\n    }\n    const parsedFunction = PDFFunction.parse({\n      xref: this.xref,\n      isEvalSupported: this.isEvalSupported,\n      fn: fn instanceof Ref ? this.xref.fetch(fn) : fn\n    });\n    this._cache(fn, parsedFunction);\n    return parsedFunction;\n  }\n  createFromArray(fnObj) {\n    const cachedFunction = this.getCached(fnObj);\n    if (cachedFunction) {\n      return cachedFunction;\n    }\n    const parsedFunction = PDFFunction.parseArray({\n      xref: this.xref,\n      isEvalSupported: this.isEvalSupported,\n      fnObj: fnObj instanceof Ref ? this.xref.fetch(fnObj) : fnObj\n    });\n    this._cache(fnObj, parsedFunction);\n    return parsedFunction;\n  }\n  getCached(cacheKey) {\n    let fnRef;\n    if (cacheKey instanceof Ref) {\n      fnRef = cacheKey;\n    } else if (cacheKey instanceof Dict) {\n      fnRef = cacheKey.objId;\n    } else if (cacheKey instanceof BaseStream) {\n      fnRef = cacheKey.dict?.objId;\n    }\n    if (fnRef) {\n      const localFunction = this._localFunctionCache.getByRef(fnRef);\n      if (localFunction) {\n        return localFunction;\n      }\n    }\n    return null;\n  }\n  _cache(cacheKey, parsedFunction) {\n    if (!parsedFunction) {\n      throw new Error('PDFFunctionFactory._cache - expected \"parsedFunction\" argument.');\n    }\n    let fnRef;\n    if (cacheKey instanceof Ref) {\n      fnRef = cacheKey;\n    } else if (cacheKey instanceof Dict) {\n      fnRef = cacheKey.objId;\n    } else if (cacheKey instanceof BaseStream) {\n      fnRef = cacheKey.dict?.objId;\n    }\n    if (fnRef) {\n      this._localFunctionCache.set(null, fnRef, parsedFunction);\n    }\n  }\n  get _localFunctionCache() {\n    return shadow(this, \"_localFunctionCache\", new LocalFunctionCache());\n  }\n}\nfunction toNumberArray(arr) {\n  if (!Array.isArray(arr)) {\n    return null;\n  }\n  if (!isNumberArray(arr, null)) {\n    return arr.map(x => +x);\n  }\n  return arr;\n}\nclass PDFFunction {\n  static getSampleArray(size, outputSize, bps, stream) {\n    let i, ii;\n    let length = 1;\n    for (i = 0, ii = size.length; i < ii; i++) {\n      length *= size[i];\n    }\n    length *= outputSize;\n    const array = new Array(length);\n    let codeSize = 0;\n    let codeBuf = 0;\n    const sampleMul = 1.0 / (2.0 ** bps - 1);\n    const strBytes = stream.getBytes((length * bps + 7) / 8);\n    let strIdx = 0;\n    for (i = 0; i < length; i++) {\n      while (codeSize < bps) {\n        codeBuf <<= 8;\n        codeBuf |= strBytes[strIdx++];\n        codeSize += 8;\n      }\n      codeSize -= bps;\n      array[i] = (codeBuf >> codeSize) * sampleMul;\n      codeBuf &= (1 << codeSize) - 1;\n    }\n    return array;\n  }\n  static parse({\n    xref,\n    isEvalSupported,\n    fn\n  }) {\n    const dict = fn.dict || fn;\n    const typeNum = dict.get(\"FunctionType\");\n    switch (typeNum) {\n      case 0:\n        return this.constructSampled({\n          xref,\n          isEvalSupported,\n          fn,\n          dict\n        });\n      case 1:\n        break;\n      case 2:\n        return this.constructInterpolated({\n          xref,\n          isEvalSupported,\n          dict\n        });\n      case 3:\n        return this.constructStiched({\n          xref,\n          isEvalSupported,\n          dict\n        });\n      case 4:\n        return this.constructPostScript({\n          xref,\n          isEvalSupported,\n          fn,\n          dict\n        });\n    }\n    throw new FormatError(\"Unknown type of function\");\n  }\n  static parseArray({\n    xref,\n    isEvalSupported,\n    fnObj\n  }) {\n    if (!Array.isArray(fnObj)) {\n      return this.parse({\n        xref,\n        isEvalSupported,\n        fn: fnObj\n      });\n    }\n    const fnArray = [];\n    for (const fn of fnObj) {\n      fnArray.push(this.parse({\n        xref,\n        isEvalSupported,\n        fn: xref.fetchIfRef(fn)\n      }));\n    }\n    return function (src, srcOffset, dest, destOffset) {\n      for (let i = 0, ii = fnArray.length; i < ii; i++) {\n        fnArray[i](src, srcOffset, dest, destOffset + i);\n      }\n    };\n  }\n  static constructSampled({\n    xref,\n    isEvalSupported,\n    fn,\n    dict\n  }) {\n    function toMultiArray(arr) {\n      const inputLength = arr.length;\n      const out = [];\n      let index = 0;\n      for (let i = 0; i < inputLength; i += 2) {\n        out[index++] = [arr[i], arr[i + 1]];\n      }\n      return out;\n    }\n    function interpolate(x, xmin, xmax, ymin, ymax) {\n      return ymin + (x - xmin) * ((ymax - ymin) / (xmax - xmin));\n    }\n    let domain = toNumberArray(dict.getArray(\"Domain\"));\n    let range = toNumberArray(dict.getArray(\"Range\"));\n    if (!domain || !range) {\n      throw new FormatError(\"No domain or range\");\n    }\n    const inputSize = domain.length / 2;\n    const outputSize = range.length / 2;\n    domain = toMultiArray(domain);\n    range = toMultiArray(range);\n    const size = toNumberArray(dict.getArray(\"Size\"));\n    const bps = dict.get(\"BitsPerSample\");\n    const order = dict.get(\"Order\") || 1;\n    if (order !== 1) {\n      info(\"No support for cubic spline interpolation: \" + order);\n    }\n    let encode = toNumberArray(dict.getArray(\"Encode\"));\n    if (!encode) {\n      encode = [];\n      for (let i = 0; i < inputSize; ++i) {\n        encode.push([0, size[i] - 1]);\n      }\n    } else {\n      encode = toMultiArray(encode);\n    }\n    let decode = toNumberArray(dict.getArray(\"Decode\"));\n    decode = !decode ? range : toMultiArray(decode);\n    const samples = this.getSampleArray(size, outputSize, bps, fn);\n    return function constructSampledFn(src, srcOffset, dest, destOffset) {\n      const cubeVertices = 1 << inputSize;\n      const cubeN = new Float64Array(cubeVertices);\n      const cubeVertex = new Uint32Array(cubeVertices);\n      let i, j;\n      for (j = 0; j < cubeVertices; j++) {\n        cubeN[j] = 1;\n      }\n      let k = outputSize,\n        pos = 1;\n      for (i = 0; i < inputSize; ++i) {\n        const domain_2i = domain[i][0];\n        const domain_2i_1 = domain[i][1];\n        const xi = Math.min(Math.max(src[srcOffset + i], domain_2i), domain_2i_1);\n        let e = interpolate(xi, domain_2i, domain_2i_1, encode[i][0], encode[i][1]);\n        const size_i = size[i];\n        e = Math.min(Math.max(e, 0), size_i - 1);\n        const e0 = e < size_i - 1 ? Math.floor(e) : e - 1;\n        const n0 = e0 + 1 - e;\n        const n1 = e - e0;\n        const offset0 = e0 * k;\n        const offset1 = offset0 + k;\n        for (j = 0; j < cubeVertices; j++) {\n          if (j & pos) {\n            cubeN[j] *= n1;\n            cubeVertex[j] += offset1;\n          } else {\n            cubeN[j] *= n0;\n            cubeVertex[j] += offset0;\n          }\n        }\n        k *= size_i;\n        pos <<= 1;\n      }\n      for (j = 0; j < outputSize; ++j) {\n        let rj = 0;\n        for (i = 0; i < cubeVertices; i++) {\n          rj += samples[cubeVertex[i] + j] * cubeN[i];\n        }\n        rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]);\n        dest[destOffset + j] = Math.min(Math.max(rj, range[j][0]), range[j][1]);\n      }\n    };\n  }\n  static constructInterpolated({\n    xref,\n    isEvalSupported,\n    dict\n  }) {\n    const c0 = toNumberArray(dict.getArray(\"C0\")) || [0];\n    const c1 = toNumberArray(dict.getArray(\"C1\")) || [1];\n    const n = dict.get(\"N\");\n    const diff = [];\n    for (let i = 0, ii = c0.length; i < ii; ++i) {\n      diff.push(c1[i] - c0[i]);\n    }\n    const length = diff.length;\n    return function constructInterpolatedFn(src, srcOffset, dest, destOffset) {\n      const x = n === 1 ? src[srcOffset] : src[srcOffset] ** n;\n      for (let j = 0; j < length; ++j) {\n        dest[destOffset + j] = c0[j] + x * diff[j];\n      }\n    };\n  }\n  static constructStiched({\n    xref,\n    isEvalSupported,\n    dict\n  }) {\n    const domain = toNumberArray(dict.getArray(\"Domain\"));\n    if (!domain) {\n      throw new FormatError(\"No domain\");\n    }\n    const inputSize = domain.length / 2;\n    if (inputSize !== 1) {\n      throw new FormatError(\"Bad domain for stiched function\");\n    }\n    const fns = [];\n    for (const fn of dict.get(\"Functions\")) {\n      fns.push(this.parse({\n        xref,\n        isEvalSupported,\n        fn: xref.fetchIfRef(fn)\n      }));\n    }\n    const bounds = toNumberArray(dict.getArray(\"Bounds\"));\n    const encode = toNumberArray(dict.getArray(\"Encode\"));\n    const tmpBuf = new Float32Array(1);\n    return function constructStichedFn(src, srcOffset, dest, destOffset) {\n      const clip = function constructStichedFromIRClip(v, min, max) {\n        if (v > max) {\n          v = max;\n        } else if (v < min) {\n          v = min;\n        }\n        return v;\n      };\n      const v = clip(src[srcOffset], domain[0], domain[1]);\n      const length = bounds.length;\n      let i;\n      for (i = 0; i < length; ++i) {\n        if (v < bounds[i]) {\n          break;\n        }\n      }\n      let dmin = domain[0];\n      if (i > 0) {\n        dmin = bounds[i - 1];\n      }\n      let dmax = domain[1];\n      if (i < bounds.length) {\n        dmax = bounds[i];\n      }\n      const rmin = encode[2 * i];\n      const rmax = encode[2 * i + 1];\n      tmpBuf[0] = dmin === dmax ? rmin : rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin);\n      fns[i](tmpBuf, 0, dest, destOffset);\n    };\n  }\n  static constructPostScript({\n    xref,\n    isEvalSupported,\n    fn,\n    dict\n  }) {\n    const domain = toNumberArray(dict.getArray(\"Domain\"));\n    const range = toNumberArray(dict.getArray(\"Range\"));\n    if (!domain) {\n      throw new FormatError(\"No domain.\");\n    }\n    if (!range) {\n      throw new FormatError(\"No range.\");\n    }\n    const lexer = new PostScriptLexer(fn);\n    const parser = new PostScriptParser(lexer);\n    const code = parser.parse();\n    if (isEvalSupported && FeatureTest.isEvalSupported) {\n      const compiled = new PostScriptCompiler().compile(code, domain, range);\n      if (compiled) {\n        return new Function(\"src\", \"srcOffset\", \"dest\", \"destOffset\", compiled);\n      }\n    }\n    info(\"Unable to compile PS function\");\n    const numOutputs = range.length >> 1;\n    const numInputs = domain.length >> 1;\n    const evaluator = new PostScriptEvaluator(code);\n    const cache = Object.create(null);\n    const MAX_CACHE_SIZE = 2048 * 4;\n    let cache_available = MAX_CACHE_SIZE;\n    const tmpBuf = new Float32Array(numInputs);\n    return function constructPostScriptFn(src, srcOffset, dest, destOffset) {\n      let i, value;\n      let key = \"\";\n      const input = tmpBuf;\n      for (i = 0; i < numInputs; i++) {\n        value = src[srcOffset + i];\n        input[i] = value;\n        key += value + \"_\";\n      }\n      const cachedValue = cache[key];\n      if (cachedValue !== undefined) {\n        dest.set(cachedValue, destOffset);\n        return;\n      }\n      const output = new Float32Array(numOutputs);\n      const stack = evaluator.execute(input);\n      const stackIndex = stack.length - numOutputs;\n      for (i = 0; i < numOutputs; i++) {\n        value = stack[stackIndex + i];\n        let bound = range[i * 2];\n        if (value < bound) {\n          value = bound;\n        } else {\n          bound = range[i * 2 + 1];\n          if (value > bound) {\n            value = bound;\n          }\n        }\n        output[i] = value;\n      }\n      if (cache_available > 0) {\n        cache_available--;\n        cache[key] = output;\n      }\n      dest.set(output, destOffset);\n    };\n  }\n}\nfunction isPDFFunction(v) {\n  let fnDict;\n  if (v instanceof Dict) {\n    fnDict = v;\n  } else if (v instanceof BaseStream) {\n    fnDict = v.dict;\n  } else {\n    return false;\n  }\n  return fnDict.has(\"FunctionType\");\n}\nclass PostScriptStack {\n  static MAX_STACK_SIZE = 100;\n  constructor(initialStack) {\n    this.stack = initialStack ? Array.from(initialStack) : [];\n  }\n  push(value) {\n    if (this.stack.length >= PostScriptStack.MAX_STACK_SIZE) {\n      throw new Error(\"PostScript function stack overflow.\");\n    }\n    this.stack.push(value);\n  }\n  pop() {\n    if (this.stack.length <= 0) {\n      throw new Error(\"PostScript function stack underflow.\");\n    }\n    return this.stack.pop();\n  }\n  copy(n) {\n    if (this.stack.length + n >= PostScriptStack.MAX_STACK_SIZE) {\n      throw new Error(\"PostScript function stack overflow.\");\n    }\n    const stack = this.stack;\n    for (let i = stack.length - n, j = n - 1; j >= 0; j--, i++) {\n      stack.push(stack[i]);\n    }\n  }\n  index(n) {\n    this.push(this.stack[this.stack.length - n - 1]);\n  }\n  roll(n, p) {\n    const stack = this.stack;\n    const l = stack.length - n;\n    const r = stack.length - 1;\n    const c = l + (p - Math.floor(p / n) * n);\n    for (let i = l, j = r; i < j; i++, j--) {\n      const t = stack[i];\n      stack[i] = stack[j];\n      stack[j] = t;\n    }\n    for (let i = l, j = c - 1; i < j; i++, j--) {\n      const t = stack[i];\n      stack[i] = stack[j];\n      stack[j] = t;\n    }\n    for (let i = c, j = r; i < j; i++, j--) {\n      const t = stack[i];\n      stack[i] = stack[j];\n      stack[j] = t;\n    }\n  }\n}\nclass PostScriptEvaluator {\n  constructor(operators) {\n    this.operators = operators;\n  }\n  execute(initialStack) {\n    const stack = new PostScriptStack(initialStack);\n    let counter = 0;\n    const operators = this.operators;\n    const length = operators.length;\n    let operator, a, b;\n    while (counter < length) {\n      operator = operators[counter++];\n      if (typeof operator === \"number\") {\n        stack.push(operator);\n        continue;\n      }\n      switch (operator) {\n        case \"jz\":\n          b = stack.pop();\n          a = stack.pop();\n          if (!a) {\n            counter = b;\n          }\n          break;\n        case \"j\":\n          a = stack.pop();\n          counter = a;\n          break;\n        case \"abs\":\n          a = stack.pop();\n          stack.push(Math.abs(a));\n          break;\n        case \"add\":\n          b = stack.pop();\n          a = stack.pop();\n          stack.push(a + b);\n          break;\n        case \"and\":\n          b = stack.pop();\n          a = stack.pop();\n          if (typeof a === \"boolean\" && typeof b === \"boolean\") {\n            stack.push(a && b);\n          } else {\n            stack.push(a & b);\n          }\n          break;\n        case \"atan\":\n          b = stack.pop();\n          a = stack.pop();\n          a = Math.atan2(a, b) / Math.PI * 180;\n          if (a < 0) {\n            a += 360;\n          }\n          stack.push(a);\n          break;\n        case \"bitshift\":\n          b = stack.pop();\n          a = stack.pop();\n          if (a > 0) {\n            stack.push(a << b);\n          } else {\n            stack.push(a >> b);\n          }\n          break;\n        case \"ceiling\":\n          a = stack.pop();\n          stack.push(Math.ceil(a));\n          break;\n        case \"copy\":\n          a = stack.pop();\n          stack.copy(a);\n          break;\n        case \"cos\":\n          a = stack.pop();\n          stack.push(Math.cos(a % 360 / 180 * Math.PI));\n          break;\n        case \"cvi\":\n          a = stack.pop() | 0;\n          stack.push(a);\n          break;\n        case \"cvr\":\n          break;\n        case \"div\":\n          b = stack.pop();\n          a = stack.pop();\n          stack.push(a / b);\n          break;\n        case \"dup\":\n          stack.copy(1);\n          break;\n        case \"eq\":\n          b = stack.pop();\n          a = stack.pop();\n          stack.push(a === b);\n          break;\n        case \"exch\":\n          stack.roll(2, 1);\n          break;\n        case \"exp\":\n          b = stack.pop();\n          a = stack.pop();\n          stack.push(a ** b);\n          break;\n        case \"false\":\n          stack.push(false);\n          break;\n        case \"floor\":\n          a = stack.pop();\n          stack.push(Math.floor(a));\n          break;\n        case \"ge\":\n          b = stack.pop();\n          a = stack.pop();\n          stack.push(a >= b);\n          break;\n        case \"gt\":\n          b = stack.pop();\n          a = stack.pop();\n          stack.push(a > b);\n          break;\n        case \"idiv\":\n          b = stack.pop();\n          a = stack.pop();\n          stack.push(a / b | 0);\n          break;\n        case \"index\":\n          a = stack.pop();\n          stack.index(a);\n          break;\n        case \"le\":\n          b = stack.pop();\n          a = stack.pop();\n          stack.push(a <= b);\n          break;\n        case \"ln\":\n          a = stack.pop();\n          stack.push(Math.log(a));\n          break;\n        case \"log\":\n          a = stack.pop();\n          stack.push(Math.log10(a));\n          break;\n        case \"lt\":\n          b = stack.pop();\n          a = stack.pop();\n          stack.push(a < b);\n          break;\n        case \"mod\":\n          b = stack.pop();\n          a = stack.pop();\n          stack.push(a % b);\n          break;\n        case \"mul\":\n          b = stack.pop();\n          a = stack.pop();\n          stack.push(a * b);\n          break;\n        case \"ne\":\n          b = stack.pop();\n          a = stack.pop();\n          stack.push(a !== b);\n          break;\n        case \"neg\":\n          a = stack.pop();\n          stack.push(-a);\n          break;\n        case \"not\":\n          a = stack.pop();\n          if (typeof a === \"boolean\") {\n            stack.push(!a);\n          } else {\n            stack.push(~a);\n          }\n          break;\n        case \"or\":\n          b = stack.pop();\n          a = stack.pop();\n          if (typeof a === \"boolean\" && typeof b === \"boolean\") {\n            stack.push(a || b);\n          } else {\n            stack.push(a | b);\n          }\n          break;\n        case \"pop\":\n          stack.pop();\n          break;\n        case \"roll\":\n          b = stack.pop();\n          a = stack.pop();\n          stack.roll(a, b);\n          break;\n        case \"round\":\n          a = stack.pop();\n          stack.push(Math.round(a));\n          break;\n        case \"sin\":\n          a = stack.pop();\n          stack.push(Math.sin(a % 360 / 180 * Math.PI));\n          break;\n        case \"sqrt\":\n          a = stack.pop();\n          stack.push(Math.sqrt(a));\n          break;\n        case \"sub\":\n          b = stack.pop();\n          a = stack.pop();\n          stack.push(a - b);\n          break;\n        case \"true\":\n          stack.push(true);\n          break;\n        case \"truncate\":\n          a = stack.pop();\n          a = a < 0 ? Math.ceil(a) : Math.floor(a);\n          stack.push(a);\n          break;\n        case \"xor\":\n          b = stack.pop();\n          a = stack.pop();\n          if (typeof a === \"boolean\" && typeof b === \"boolean\") {\n            stack.push(a !== b);\n          } else {\n            stack.push(a ^ b);\n          }\n          break;\n        default:\n          throw new FormatError(`Unknown operator ${operator}`);\n      }\n    }\n    return stack.stack;\n  }\n}\nclass AstNode {\n  constructor(type) {\n    this.type = type;\n  }\n  visit(visitor) {\n    unreachable(\"abstract method\");\n  }\n}\nclass AstArgument extends AstNode {\n  constructor(index, min, max) {\n    super(\"args\");\n    this.index = index;\n    this.min = min;\n    this.max = max;\n  }\n  visit(visitor) {\n    visitor.visitArgument(this);\n  }\n}\nclass AstLiteral extends AstNode {\n  constructor(number) {\n    super(\"literal\");\n    this.number = number;\n    this.min = number;\n    this.max = number;\n  }\n  visit(visitor) {\n    visitor.visitLiteral(this);\n  }\n}\nclass AstBinaryOperation extends AstNode {\n  constructor(op, arg1, arg2, min, max) {\n    super(\"binary\");\n    this.op = op;\n    this.arg1 = arg1;\n    this.arg2 = arg2;\n    this.min = min;\n    this.max = max;\n  }\n  visit(visitor) {\n    visitor.visitBinaryOperation(this);\n  }\n}\nclass AstMin extends AstNode {\n  constructor(arg, max) {\n    super(\"max\");\n    this.arg = arg;\n    this.min = arg.min;\n    this.max = max;\n  }\n  visit(visitor) {\n    visitor.visitMin(this);\n  }\n}\nclass AstVariable extends AstNode {\n  constructor(index, min, max) {\n    super(\"var\");\n    this.index = index;\n    this.min = min;\n    this.max = max;\n  }\n  visit(visitor) {\n    visitor.visitVariable(this);\n  }\n}\nclass AstVariableDefinition extends AstNode {\n  constructor(variable, arg) {\n    super(\"definition\");\n    this.variable = variable;\n    this.arg = arg;\n  }\n  visit(visitor) {\n    visitor.visitVariableDefinition(this);\n  }\n}\nclass ExpressionBuilderVisitor {\n  constructor() {\n    this.parts = [];\n  }\n  visitArgument(arg) {\n    this.parts.push(\"Math.max(\", arg.min, \", Math.min(\", arg.max, \", src[srcOffset + \", arg.index, \"]))\");\n  }\n  visitVariable(variable) {\n    this.parts.push(\"v\", variable.index);\n  }\n  visitLiteral(literal) {\n    this.parts.push(literal.number);\n  }\n  visitBinaryOperation(operation) {\n    this.parts.push(\"(\");\n    operation.arg1.visit(this);\n    this.parts.push(\" \", operation.op, \" \");\n    operation.arg2.visit(this);\n    this.parts.push(\")\");\n  }\n  visitVariableDefinition(definition) {\n    this.parts.push(\"var \");\n    definition.variable.visit(this);\n    this.parts.push(\" = \");\n    definition.arg.visit(this);\n    this.parts.push(\";\");\n  }\n  visitMin(max) {\n    this.parts.push(\"Math.min(\");\n    max.arg.visit(this);\n    this.parts.push(\", \", max.max, \")\");\n  }\n  toString() {\n    return this.parts.join(\"\");\n  }\n}\nfunction buildAddOperation(num1, num2) {\n  if (num2.type === \"literal\" && num2.number === 0) {\n    return num1;\n  }\n  if (num1.type === \"literal\" && num1.number === 0) {\n    return num2;\n  }\n  if (num2.type === \"literal\" && num1.type === \"literal\") {\n    return new AstLiteral(num1.number + num2.number);\n  }\n  return new AstBinaryOperation(\"+\", num1, num2, num1.min + num2.min, num1.max + num2.max);\n}\nfunction buildMulOperation(num1, num2) {\n  if (num2.type === \"literal\") {\n    if (num2.number === 0) {\n      return new AstLiteral(0);\n    } else if (num2.number === 1) {\n      return num1;\n    } else if (num1.type === \"literal\") {\n      return new AstLiteral(num1.number * num2.number);\n    }\n  }\n  if (num1.type === \"literal\") {\n    if (num1.number === 0) {\n      return new AstLiteral(0);\n    } else if (num1.number === 1) {\n      return num2;\n    }\n  }\n  const min = Math.min(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max);\n  const max = Math.max(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max);\n  return new AstBinaryOperation(\"*\", num1, num2, min, max);\n}\nfunction buildSubOperation(num1, num2) {\n  if (num2.type === \"literal\") {\n    if (num2.number === 0) {\n      return num1;\n    } else if (num1.type === \"literal\") {\n      return new AstLiteral(num1.number - num2.number);\n    }\n  }\n  if (num2.type === \"binary\" && num2.op === \"-\" && num1.type === \"literal\" && num1.number === 1 && num2.arg1.type === \"literal\" && num2.arg1.number === 1) {\n    return num2.arg2;\n  }\n  return new AstBinaryOperation(\"-\", num1, num2, num1.min - num2.max, num1.max - num2.min);\n}\nfunction buildMinOperation(num1, max) {\n  if (num1.min >= max) {\n    return new AstLiteral(max);\n  } else if (num1.max <= max) {\n    return num1;\n  }\n  return new AstMin(num1, max);\n}\nclass PostScriptCompiler {\n  compile(code, domain, range) {\n    const stack = [];\n    const instructions = [];\n    const inputSize = domain.length >> 1,\n      outputSize = range.length >> 1;\n    let lastRegister = 0;\n    let n, j;\n    let num1, num2, ast1, ast2, tmpVar, item;\n    for (let i = 0; i < inputSize; i++) {\n      stack.push(new AstArgument(i, domain[i * 2], domain[i * 2 + 1]));\n    }\n    for (let i = 0, ii = code.length; i < ii; i++) {\n      item = code[i];\n      if (typeof item === \"number\") {\n        stack.push(new AstLiteral(item));\n        continue;\n      }\n      switch (item) {\n        case \"add\":\n          if (stack.length < 2) {\n            return null;\n          }\n          num2 = stack.pop();\n          num1 = stack.pop();\n          stack.push(buildAddOperation(num1, num2));\n          break;\n        case \"cvr\":\n          if (stack.length < 1) {\n            return null;\n          }\n          break;\n        case \"mul\":\n          if (stack.length < 2) {\n            return null;\n          }\n          num2 = stack.pop();\n          num1 = stack.pop();\n          stack.push(buildMulOperation(num1, num2));\n          break;\n        case \"sub\":\n          if (stack.length < 2) {\n            return null;\n          }\n          num2 = stack.pop();\n          num1 = stack.pop();\n          stack.push(buildSubOperation(num1, num2));\n          break;\n        case \"exch\":\n          if (stack.length < 2) {\n            return null;\n          }\n          ast1 = stack.pop();\n          ast2 = stack.pop();\n          stack.push(ast1, ast2);\n          break;\n        case \"pop\":\n          if (stack.length < 1) {\n            return null;\n          }\n          stack.pop();\n          break;\n        case \"index\":\n          if (stack.length < 1) {\n            return null;\n          }\n          num1 = stack.pop();\n          if (num1.type !== \"literal\") {\n            return null;\n          }\n          n = num1.number;\n          if (n < 0 || !Number.isInteger(n) || stack.length < n) {\n            return null;\n          }\n          ast1 = stack[stack.length - n - 1];\n          if (ast1.type === \"literal\" || ast1.type === \"var\") {\n            stack.push(ast1);\n            break;\n          }\n          tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max);\n          stack[stack.length - n - 1] = tmpVar;\n          stack.push(tmpVar);\n          instructions.push(new AstVariableDefinition(tmpVar, ast1));\n          break;\n        case \"dup\":\n          if (stack.length < 1) {\n            return null;\n          }\n          if (typeof code[i + 1] === \"number\" && code[i + 2] === \"gt\" && code[i + 3] === i + 7 && code[i + 4] === \"jz\" && code[i + 5] === \"pop\" && code[i + 6] === code[i + 1]) {\n            num1 = stack.pop();\n            stack.push(buildMinOperation(num1, code[i + 1]));\n            i += 6;\n            break;\n          }\n          ast1 = stack.at(-1);\n          if (ast1.type === \"literal\" || ast1.type === \"var\") {\n            stack.push(ast1);\n            break;\n          }\n          tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max);\n          stack[stack.length - 1] = tmpVar;\n          stack.push(tmpVar);\n          instructions.push(new AstVariableDefinition(tmpVar, ast1));\n          break;\n        case \"roll\":\n          if (stack.length < 2) {\n            return null;\n          }\n          num2 = stack.pop();\n          num1 = stack.pop();\n          if (num2.type !== \"literal\" || num1.type !== \"literal\") {\n            return null;\n          }\n          j = num2.number;\n          n = num1.number;\n          if (n <= 0 || !Number.isInteger(n) || !Number.isInteger(j) || stack.length < n) {\n            return null;\n          }\n          j = (j % n + n) % n;\n          if (j === 0) {\n            break;\n          }\n          stack.push(...stack.splice(stack.length - n, n - j));\n          break;\n        default:\n          return null;\n      }\n    }\n    if (stack.length !== outputSize) {\n      return null;\n    }\n    const result = [];\n    for (const instruction of instructions) {\n      const statementBuilder = new ExpressionBuilderVisitor();\n      instruction.visit(statementBuilder);\n      result.push(statementBuilder.toString());\n    }\n    for (let i = 0, ii = stack.length; i < ii; i++) {\n      const expr = stack[i],\n        statementBuilder = new ExpressionBuilderVisitor();\n      expr.visit(statementBuilder);\n      const min = range[i * 2],\n        max = range[i * 2 + 1];\n      const out = [statementBuilder.toString()];\n      if (min > expr.min) {\n        out.unshift(\"Math.max(\", min, \", \");\n        out.push(\")\");\n      }\n      if (max < expr.max) {\n        out.unshift(\"Math.min(\", max, \", \");\n        out.push(\")\");\n      }\n      out.unshift(\"dest[destOffset + \", i, \"] = \");\n      out.push(\";\");\n      result.push(out.join(\"\"));\n    }\n    return result.join(\"\\n\");\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/bidi.js\n\nconst baseTypes = [\"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"S\", \"B\", \"S\", \"WS\", \"B\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"B\", \"B\", \"B\", \"S\", \"WS\", \"ON\", \"ON\", \"ET\", \"ET\", \"ET\", \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"ES\", \"CS\", \"ES\", \"CS\", \"CS\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"CS\", \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"ON\", \"ON\", \"ON\", \"ON\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"B\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"CS\", \"ON\", \"ET\", \"ET\", \"ET\", \"ET\", \"ON\", \"ON\", \"ON\", \"ON\", \"L\", \"ON\", \"ON\", \"BN\", \"ON\", \"ON\", \"ET\", \"ET\", \"EN\", \"EN\", \"ON\", \"L\", \"ON\", \"ON\", \"ON\", \"EN\", \"L\", \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"ON\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"ON\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\"];\nconst arabicTypes = [\"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"ON\", \"ON\", \"AL\", \"ET\", \"ET\", \"AL\", \"CS\", \"AL\", \"ON\", \"ON\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"AL\", \"AL\", \"\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"ET\", \"AN\", \"AN\", \"AL\", \"AL\", \"AL\", \"NSM\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"AN\", \"ON\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"AL\", \"AL\", \"NSM\", \"NSM\", \"ON\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"AL\", \"AL\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\"];\nfunction isOdd(i) {\n  return (i & 1) !== 0;\n}\nfunction isEven(i) {\n  return (i & 1) === 0;\n}\nfunction findUnequal(arr, start, value) {\n  let j, jj;\n  for (j = start, jj = arr.length; j < jj; ++j) {\n    if (arr[j] !== value) {\n      return j;\n    }\n  }\n  return j;\n}\nfunction setValues(arr, start, end, value) {\n  for (let j = start; j < end; ++j) {\n    arr[j] = value;\n  }\n}\nfunction reverseValues(arr, start, end) {\n  for (let i = start, j = end - 1; i < j; ++i, --j) {\n    const temp = arr[i];\n    arr[i] = arr[j];\n    arr[j] = temp;\n  }\n}\nfunction createBidiText(str, isLTR, vertical = false) {\n  let dir = \"ltr\";\n  if (vertical) {\n    dir = \"ttb\";\n  } else if (!isLTR) {\n    dir = \"rtl\";\n  }\n  return {\n    str,\n    dir\n  };\n}\nconst chars = [];\nconst types = [];\nfunction bidi(str, startLevel = -1, vertical = false) {\n  let isLTR = true;\n  const strLength = str.length;\n  if (strLength === 0 || vertical) {\n    return createBidiText(str, isLTR, vertical);\n  }\n  chars.length = strLength;\n  types.length = strLength;\n  let numBidi = 0;\n  let i, ii;\n  for (i = 0; i < strLength; ++i) {\n    chars[i] = str.charAt(i);\n    const charCode = str.charCodeAt(i);\n    let charType = \"L\";\n    if (charCode <= 0x00ff) {\n      charType = baseTypes[charCode];\n    } else if (0x0590 <= charCode && charCode <= 0x05f4) {\n      charType = \"R\";\n    } else if (0x0600 <= charCode && charCode <= 0x06ff) {\n      charType = arabicTypes[charCode & 0xff];\n      if (!charType) {\n        warn(\"Bidi: invalid Unicode character \" + charCode.toString(16));\n      }\n    } else if (0x0700 <= charCode && charCode <= 0x08ac || 0xfb50 <= charCode && charCode <= 0xfdff || 0xfe70 <= charCode && charCode <= 0xfeff) {\n      charType = \"AL\";\n    }\n    if (charType === \"R\" || charType === \"AL\" || charType === \"AN\") {\n      numBidi++;\n    }\n    types[i] = charType;\n  }\n  if (numBidi === 0) {\n    isLTR = true;\n    return createBidiText(str, isLTR);\n  }\n  if (startLevel === -1) {\n    if (numBidi / strLength < 0.3 && strLength > 4) {\n      isLTR = true;\n      startLevel = 0;\n    } else {\n      isLTR = false;\n      startLevel = 1;\n    }\n  }\n  const levels = [];\n  for (i = 0; i < strLength; ++i) {\n    levels[i] = startLevel;\n  }\n  const e = isOdd(startLevel) ? \"R\" : \"L\";\n  const sor = e;\n  const eor = sor;\n  let lastType = sor;\n  for (i = 0; i < strLength; ++i) {\n    if (types[i] === \"NSM\") {\n      types[i] = lastType;\n    } else {\n      lastType = types[i];\n    }\n  }\n  lastType = sor;\n  let t;\n  for (i = 0; i < strLength; ++i) {\n    t = types[i];\n    if (t === \"EN\") {\n      types[i] = lastType === \"AL\" ? \"AN\" : \"EN\";\n    } else if (t === \"R\" || t === \"L\" || t === \"AL\") {\n      lastType = t;\n    }\n  }\n  for (i = 0; i < strLength; ++i) {\n    t = types[i];\n    if (t === \"AL\") {\n      types[i] = \"R\";\n    }\n  }\n  for (i = 1; i < strLength - 1; ++i) {\n    if (types[i] === \"ES\" && types[i - 1] === \"EN\" && types[i + 1] === \"EN\") {\n      types[i] = \"EN\";\n    }\n    if (types[i] === \"CS\" && (types[i - 1] === \"EN\" || types[i - 1] === \"AN\") && types[i + 1] === types[i - 1]) {\n      types[i] = types[i - 1];\n    }\n  }\n  for (i = 0; i < strLength; ++i) {\n    if (types[i] === \"EN\") {\n      for (let j = i - 1; j >= 0; --j) {\n        if (types[j] !== \"ET\") {\n          break;\n        }\n        types[j] = \"EN\";\n      }\n      for (let j = i + 1; j < strLength; ++j) {\n        if (types[j] !== \"ET\") {\n          break;\n        }\n        types[j] = \"EN\";\n      }\n    }\n  }\n  for (i = 0; i < strLength; ++i) {\n    t = types[i];\n    if (t === \"WS\" || t === \"ES\" || t === \"ET\" || t === \"CS\") {\n      types[i] = \"ON\";\n    }\n  }\n  lastType = sor;\n  for (i = 0; i < strLength; ++i) {\n    t = types[i];\n    if (t === \"EN\") {\n      types[i] = lastType === \"L\" ? \"L\" : \"EN\";\n    } else if (t === \"R\" || t === \"L\") {\n      lastType = t;\n    }\n  }\n  for (i = 0; i < strLength; ++i) {\n    if (types[i] === \"ON\") {\n      const end = findUnequal(types, i + 1, \"ON\");\n      let before = sor;\n      if (i > 0) {\n        before = types[i - 1];\n      }\n      let after = eor;\n      if (end + 1 < strLength) {\n        after = types[end + 1];\n      }\n      if (before !== \"L\") {\n        before = \"R\";\n      }\n      if (after !== \"L\") {\n        after = \"R\";\n      }\n      if (before === after) {\n        setValues(types, i, end, before);\n      }\n      i = end - 1;\n    }\n  }\n  for (i = 0; i < strLength; ++i) {\n    if (types[i] === \"ON\") {\n      types[i] = e;\n    }\n  }\n  for (i = 0; i < strLength; ++i) {\n    t = types[i];\n    if (isEven(levels[i])) {\n      if (t === \"R\") {\n        levels[i] += 1;\n      } else if (t === \"AN\" || t === \"EN\") {\n        levels[i] += 2;\n      }\n    } else if (t === \"L\" || t === \"AN\" || t === \"EN\") {\n      levels[i] += 1;\n    }\n  }\n  let highestLevel = -1;\n  let lowestOddLevel = 99;\n  let level;\n  for (i = 0, ii = levels.length; i < ii; ++i) {\n    level = levels[i];\n    if (highestLevel < level) {\n      highestLevel = level;\n    }\n    if (lowestOddLevel > level && isOdd(level)) {\n      lowestOddLevel = level;\n    }\n  }\n  for (level = highestLevel; level >= lowestOddLevel; --level) {\n    let start = -1;\n    for (i = 0, ii = levels.length; i < ii; ++i) {\n      if (levels[i] < level) {\n        if (start >= 0) {\n          reverseValues(chars, start, i);\n          start = -1;\n        }\n      } else if (start < 0) {\n        start = i;\n      }\n    }\n    if (start >= 0) {\n      reverseValues(chars, start, levels.length);\n    }\n  }\n  for (i = 0, ii = chars.length; i < ii; ++i) {\n    const ch = chars[i];\n    if (ch === \"<\" || ch === \">\") {\n      chars[i] = \"\";\n    }\n  }\n  return createBidiText(chars.join(\"\"), isLTR);\n}\n\n;// CONCATENATED MODULE: ./src/core/font_substitutions.js\n\n\n\nconst NORMAL = {\n  style: \"normal\",\n  weight: \"normal\"\n};\nconst BOLD = {\n  style: \"normal\",\n  weight: \"bold\"\n};\nconst ITALIC = {\n  style: \"italic\",\n  weight: \"normal\"\n};\nconst BOLDITALIC = {\n  style: \"italic\",\n  weight: \"bold\"\n};\nconst substitutionMap = new Map([[\"Times-Roman\", {\n  local: [\"Times New Roman\", \"Times-Roman\", \"Times\", \"Liberation Serif\", \"Nimbus Roman\", \"Nimbus Roman L\", \"Tinos\", \"Thorndale\", \"TeX Gyre Termes\", \"FreeSerif\", \"Linux Libertine O\", \"Libertinus Serif\", \"DejaVu Serif\", \"Bitstream Vera Serif\", \"Ubuntu\"],\n  style: NORMAL,\n  ultimate: \"serif\"\n}], [\"Times-Bold\", {\n  alias: \"Times-Roman\",\n  style: BOLD,\n  ultimate: \"serif\"\n}], [\"Times-Italic\", {\n  alias: \"Times-Roman\",\n  style: ITALIC,\n  ultimate: \"serif\"\n}], [\"Times-BoldItalic\", {\n  alias: \"Times-Roman\",\n  style: BOLDITALIC,\n  ultimate: \"serif\"\n}], [\"Helvetica\", {\n  local: [\"Helvetica\", \"Helvetica Neue\", \"Arial\", \"Arial Nova\", \"Liberation Sans\", \"Arimo\", \"Nimbus Sans\", \"Nimbus Sans L\", \"A030\", \"TeX Gyre Heros\", \"FreeSans\", \"DejaVu Sans\", \"Albany\", \"Bitstream Vera Sans\", \"Arial Unicode MS\", \"Microsoft Sans Serif\", \"Apple Symbols\", \"Cantarell\"],\n  path: \"LiberationSans-Regular.ttf\",\n  style: NORMAL,\n  ultimate: \"sans-serif\"\n}], [\"Helvetica-Bold\", {\n  alias: \"Helvetica\",\n  path: \"LiberationSans-Bold.ttf\",\n  style: BOLD,\n  ultimate: \"sans-serif\"\n}], [\"Helvetica-Oblique\", {\n  alias: \"Helvetica\",\n  path: \"LiberationSans-Italic.ttf\",\n  style: ITALIC,\n  ultimate: \"sans-serif\"\n}], [\"Helvetica-BoldOblique\", {\n  alias: \"Helvetica\",\n  path: \"LiberationSans-BoldItalic.ttf\",\n  style: BOLDITALIC,\n  ultimate: \"sans-serif\"\n}], [\"Courier\", {\n  local: [\"Courier\", \"Courier New\", \"Liberation Mono\", \"Nimbus Mono\", \"Nimbus Mono L\", \"Cousine\", \"Cumberland\", \"TeX Gyre Cursor\", \"FreeMono\", \"Linux Libertine Mono O\", \"Libertinus Mono\"],\n  style: NORMAL,\n  ultimate: \"monospace\"\n}], [\"Courier-Bold\", {\n  alias: \"Courier\",\n  style: BOLD,\n  ultimate: \"monospace\"\n}], [\"Courier-Oblique\", {\n  alias: \"Courier\",\n  style: ITALIC,\n  ultimate: \"monospace\"\n}], [\"Courier-BoldOblique\", {\n  alias: \"Courier\",\n  style: BOLDITALIC,\n  ultimate: \"monospace\"\n}], [\"ArialBlack\", {\n  local: [\"Arial Black\"],\n  style: {\n    style: \"normal\",\n    weight: \"900\"\n  },\n  fallback: \"Helvetica-Bold\"\n}], [\"ArialBlack-Bold\", {\n  alias: \"ArialBlack\"\n}], [\"ArialBlack-Italic\", {\n  alias: \"ArialBlack\",\n  style: {\n    style: \"italic\",\n    weight: \"900\"\n  },\n  fallback: \"Helvetica-BoldOblique\"\n}], [\"ArialBlack-BoldItalic\", {\n  alias: \"ArialBlack-Italic\"\n}], [\"ArialNarrow\", {\n  local: [\"Arial Narrow\", \"Liberation Sans Narrow\", \"Helvetica Condensed\", \"Nimbus Sans Narrow\", \"TeX Gyre Heros Cn\"],\n  style: NORMAL,\n  fallback: \"Helvetica\"\n}], [\"ArialNarrow-Bold\", {\n  alias: \"ArialNarrow\",\n  style: BOLD,\n  fallback: \"Helvetica-Bold\"\n}], [\"ArialNarrow-Italic\", {\n  alias: \"ArialNarrow\",\n  style: ITALIC,\n  fallback: \"Helvetica-Oblique\"\n}], [\"ArialNarrow-BoldItalic\", {\n  alias: \"ArialNarrow\",\n  style: BOLDITALIC,\n  fallback: \"Helvetica-BoldOblique\"\n}], [\"Calibri\", {\n  local: [\"Calibri\", \"Carlito\"],\n  style: NORMAL,\n  fallback: \"Helvetica\"\n}], [\"Calibri-Bold\", {\n  alias: \"Calibri\",\n  style: BOLD,\n  fallback: \"Helvetica-Bold\"\n}], [\"Calibri-Italic\", {\n  alias: \"Calibri\",\n  style: ITALIC,\n  fallback: \"Helvetica-Oblique\"\n}], [\"Calibri-BoldItalic\", {\n  alias: \"Calibri\",\n  style: BOLDITALIC,\n  fallback: \"Helvetica-BoldOblique\"\n}], [\"Wingdings\", {\n  local: [\"Wingdings\", \"URW Dingbats\"],\n  style: NORMAL\n}], [\"Wingdings-Regular\", {\n  alias: \"Wingdings\"\n}], [\"Wingdings-Bold\", {\n  alias: \"Wingdings\"\n}]]);\nconst fontAliases = new Map([[\"Arial-Black\", \"ArialBlack\"]]);\nfunction getStyleToAppend(style) {\n  switch (style) {\n    case BOLD:\n      return \"Bold\";\n    case ITALIC:\n      return \"Italic\";\n    case BOLDITALIC:\n      return \"Bold Italic\";\n    default:\n      if (style?.weight === \"bold\") {\n        return \"Bold\";\n      }\n      if (style?.style === \"italic\") {\n        return \"Italic\";\n      }\n  }\n  return \"\";\n}\nfunction getFamilyName(str) {\n  const keywords = new Set([\"thin\", \"extralight\", \"ultralight\", \"demilight\", \"semilight\", \"light\", \"book\", \"regular\", \"normal\", \"medium\", \"demibold\", \"semibold\", \"bold\", \"extrabold\", \"ultrabold\", \"black\", \"heavy\", \"extrablack\", \"ultrablack\", \"roman\", \"italic\", \"oblique\", \"ultracondensed\", \"extracondensed\", \"condensed\", \"semicondensed\", \"normal\", \"semiexpanded\", \"expanded\", \"extraexpanded\", \"ultraexpanded\", \"bolditalic\"]);\n  return str.split(/[- ,+]+/g).filter(tok => !keywords.has(tok.toLowerCase())).join(\" \");\n}\nfunction generateFont({\n  alias,\n  local,\n  path,\n  fallback,\n  style,\n  ultimate\n}, src, localFontPath, useFallback = true, usePath = true, append = \"\") {\n  const result = {\n    style: null,\n    ultimate: null\n  };\n  if (local) {\n    const extra = append ? ` ${append}` : \"\";\n    for (const name of local) {\n      src.push(`local(${name}${extra})`);\n    }\n  }\n  if (alias) {\n    const substitution = substitutionMap.get(alias);\n    const aliasAppend = append || getStyleToAppend(style);\n    Object.assign(result, generateFont(substitution, src, localFontPath, useFallback && !fallback, usePath && !path, aliasAppend));\n  }\n  if (style) {\n    result.style = style;\n  }\n  if (ultimate) {\n    result.ultimate = ultimate;\n  }\n  if (useFallback && fallback) {\n    const fallbackInfo = substitutionMap.get(fallback);\n    const {\n      ultimate: fallbackUltimate\n    } = generateFont(fallbackInfo, src, localFontPath, useFallback, usePath && !path, append);\n    result.ultimate ||= fallbackUltimate;\n  }\n  if (usePath && path && localFontPath) {\n    src.push(`url(${localFontPath}${path})`);\n  }\n  return result;\n}\nfunction getFontSubstitution(systemFontCache, idFactory, localFontPath, baseFontName, standardFontName, type) {\n  if (baseFontName.startsWith(\"InvalidPDFjsFont_\")) {\n    return null;\n  }\n  if ((type === \"TrueType\" || type === \"Type1\") && /^[A-Z]{6}\\+/.test(baseFontName)) {\n    baseFontName = baseFontName.slice(7);\n  }\n  baseFontName = normalizeFontName(baseFontName);\n  const key = baseFontName;\n  let substitutionInfo = systemFontCache.get(key);\n  if (substitutionInfo) {\n    return substitutionInfo;\n  }\n  let substitution = substitutionMap.get(baseFontName);\n  if (!substitution) {\n    for (const [alias, subst] of fontAliases) {\n      if (baseFontName.startsWith(alias)) {\n        baseFontName = `${subst}${baseFontName.substring(alias.length)}`;\n        substitution = substitutionMap.get(baseFontName);\n        break;\n      }\n    }\n  }\n  let mustAddBaseFont = false;\n  if (!substitution) {\n    substitution = substitutionMap.get(standardFontName);\n    mustAddBaseFont = true;\n  }\n  const loadedName = `${idFactory.getDocId()}_s${idFactory.createFontId()}`;\n  if (!substitution) {\n    if (!validateFontName(baseFontName)) {\n      warn(`Cannot substitute the font because of its name: ${baseFontName}`);\n      systemFontCache.set(key, null);\n      return null;\n    }\n    const bold = /bold/gi.test(baseFontName);\n    const italic = /oblique|italic/gi.test(baseFontName);\n    const style = bold && italic && BOLDITALIC || bold && BOLD || italic && ITALIC || NORMAL;\n    substitutionInfo = {\n      css: `\"${getFamilyName(baseFontName)}\",${loadedName}`,\n      guessFallback: true,\n      loadedName,\n      baseFontName,\n      src: `local(${baseFontName})`,\n      style\n    };\n    systemFontCache.set(key, substitutionInfo);\n    return substitutionInfo;\n  }\n  const src = [];\n  if (mustAddBaseFont && validateFontName(baseFontName)) {\n    src.push(`local(${baseFontName})`);\n  }\n  const {\n    style,\n    ultimate\n  } = generateFont(substitution, src, localFontPath);\n  const guessFallback = ultimate === null;\n  const fallback = guessFallback ? \"\" : `,${ultimate}`;\n  substitutionInfo = {\n    css: `\"${getFamilyName(baseFontName)}\",${loadedName}${fallback}`,\n    guessFallback,\n    loadedName,\n    baseFontName,\n    src: src.join(\",\"),\n    style\n  };\n  systemFontCache.set(key, substitutionInfo);\n  return substitutionInfo;\n}\n\n;// CONCATENATED MODULE: ./src/core/image_resizer.js\n\nconst MIN_IMAGE_DIM = 2048;\nconst MAX_IMAGE_DIM = 65537;\nconst MAX_ERROR = 128;\nclass ImageResizer {\n  constructor(imgData, isMask) {\n    this._imgData = imgData;\n    this._isMask = isMask;\n  }\n  static needsToBeResized(width, height) {\n    if (width <= this._goodSquareLength && height <= this._goodSquareLength) {\n      return false;\n    }\n    const {\n      MAX_DIM\n    } = this;\n    if (width > MAX_DIM || height > MAX_DIM) {\n      return true;\n    }\n    const area = width * height;\n    if (this._hasMaxArea) {\n      return area > this.MAX_AREA;\n    }\n    if (area < this._goodSquareLength ** 2) {\n      return false;\n    }\n    if (this._areGoodDims(width, height)) {\n      this._goodSquareLength = Math.max(this._goodSquareLength, Math.floor(Math.sqrt(width * height)));\n      return false;\n    }\n    this._goodSquareLength = this._guessMax(this._goodSquareLength, MAX_DIM, MAX_ERROR, 0);\n    const maxArea = this.MAX_AREA = this._goodSquareLength ** 2;\n    return area > maxArea;\n  }\n  static get MAX_DIM() {\n    return shadow(this, \"MAX_DIM\", this._guessMax(MIN_IMAGE_DIM, MAX_IMAGE_DIM, 0, 1));\n  }\n  static get MAX_AREA() {\n    this._hasMaxArea = true;\n    return shadow(this, \"MAX_AREA\", this._guessMax(ImageResizer._goodSquareLength, this.MAX_DIM, MAX_ERROR, 0) ** 2);\n  }\n  static set MAX_AREA(area) {\n    if (area >= 0) {\n      this._hasMaxArea = true;\n      shadow(this, \"MAX_AREA\", area);\n    }\n  }\n  static setMaxArea(area) {\n    if (!this._hasMaxArea) {\n      this.MAX_AREA = area >> 2;\n    }\n  }\n  static _areGoodDims(width, height) {\n    try {\n      const canvas = new OffscreenCanvas(width, height);\n      const ctx = canvas.getContext(\"2d\");\n      ctx.fillRect(0, 0, 1, 1);\n      const opacity = ctx.getImageData(0, 0, 1, 1).data[3];\n      canvas.width = canvas.height = 1;\n      return opacity !== 0;\n    } catch {\n      return false;\n    }\n  }\n  static _guessMax(start, end, tolerance, defaultHeight) {\n    while (start + tolerance + 1 < end) {\n      const middle = Math.floor((start + end) / 2);\n      const height = defaultHeight || middle;\n      if (this._areGoodDims(middle, height)) {\n        start = middle;\n      } else {\n        end = middle;\n      }\n    }\n    return start;\n  }\n  static async createImage(imgData, isMask = false) {\n    return new ImageResizer(imgData, isMask)._createImage();\n  }\n  async _createImage() {\n    const data = this._encodeBMP();\n    const blob = new Blob([data.buffer], {\n      type: \"image/bmp\"\n    });\n    const bitmapPromise = createImageBitmap(blob);\n    const {\n      MAX_AREA,\n      MAX_DIM\n    } = ImageResizer;\n    const {\n      _imgData: imgData\n    } = this;\n    const {\n      width,\n      height\n    } = imgData;\n    const minFactor = Math.max(width / MAX_DIM, height / MAX_DIM, Math.sqrt(width * height / MAX_AREA));\n    const firstFactor = Math.max(minFactor, 2);\n    const factor = Math.round(10 * (minFactor + 1.25)) / 10 / firstFactor;\n    const N = Math.floor(Math.log2(factor));\n    const steps = new Array(N + 2).fill(2);\n    steps[0] = firstFactor;\n    steps.splice(-1, 1, factor / (1 << N));\n    let newWidth = width;\n    let newHeight = height;\n    let bitmap = await bitmapPromise;\n    for (const step of steps) {\n      const prevWidth = newWidth;\n      const prevHeight = newHeight;\n      newWidth = Math.floor(newWidth / step) - 1;\n      newHeight = Math.floor(newHeight / step) - 1;\n      const canvas = new OffscreenCanvas(newWidth, newHeight);\n      const ctx = canvas.getContext(\"2d\");\n      ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight);\n      bitmap = canvas.transferToImageBitmap();\n    }\n    imgData.data = null;\n    imgData.bitmap = bitmap;\n    imgData.width = newWidth;\n    imgData.height = newHeight;\n    return imgData;\n  }\n  _encodeBMP() {\n    const {\n      width,\n      height,\n      kind\n    } = this._imgData;\n    let data = this._imgData.data;\n    let bitPerPixel;\n    let colorTable = new Uint8Array(0);\n    let maskTable = colorTable;\n    let compression = 0;\n    switch (kind) {\n      case ImageKind.GRAYSCALE_1BPP:\n        {\n          bitPerPixel = 1;\n          colorTable = new Uint8Array(this._isMask ? [255, 255, 255, 255, 0, 0, 0, 0] : [0, 0, 0, 0, 255, 255, 255, 255]);\n          const rowLen = width + 7 >> 3;\n          const rowSize = rowLen + 3 & -4;\n          if (rowLen !== rowSize) {\n            const newData = new Uint8Array(rowSize * height);\n            let k = 0;\n            for (let i = 0, ii = height * rowLen; i < ii; i += rowLen, k += rowSize) {\n              newData.set(data.subarray(i, i + rowLen), k);\n            }\n            data = newData;\n          }\n          break;\n        }\n      case ImageKind.RGB_24BPP:\n        {\n          bitPerPixel = 24;\n          if (width & 3) {\n            const rowLen = 3 * width;\n            const rowSize = rowLen + 3 & -4;\n            const extraLen = rowSize - rowLen;\n            const newData = new Uint8Array(rowSize * height);\n            let k = 0;\n            for (let i = 0, ii = height * rowLen; i < ii; i += rowLen) {\n              const row = data.subarray(i, i + rowLen);\n              for (let j = 0; j < rowLen; j += 3) {\n                newData[k++] = row[j + 2];\n                newData[k++] = row[j + 1];\n                newData[k++] = row[j];\n              }\n              k += extraLen;\n            }\n            data = newData;\n          } else {\n            for (let i = 0, ii = data.length; i < ii; i += 3) {\n              const tmp = data[i];\n              data[i] = data[i + 2];\n              data[i + 2] = tmp;\n            }\n          }\n          break;\n        }\n      case ImageKind.RGBA_32BPP:\n        bitPerPixel = 32;\n        compression = 3;\n        maskTable = new Uint8Array(4 + 4 + 4 + 4 + 52);\n        const view = new DataView(maskTable.buffer);\n        if (FeatureTest.isLittleEndian) {\n          view.setUint32(0, 0x000000ff, true);\n          view.setUint32(4, 0x0000ff00, true);\n          view.setUint32(8, 0x00ff0000, true);\n          view.setUint32(12, 0xff000000, true);\n        } else {\n          view.setUint32(0, 0xff000000, true);\n          view.setUint32(4, 0x00ff0000, true);\n          view.setUint32(8, 0x0000ff00, true);\n          view.setUint32(12, 0x000000ff, true);\n        }\n        break;\n      default:\n        throw new Error(\"invalid format\");\n    }\n    let i = 0;\n    const headerLength = 40 + maskTable.length;\n    const fileLength = 14 + headerLength + colorTable.length + data.length;\n    const bmpData = new Uint8Array(fileLength);\n    const view = new DataView(bmpData.buffer);\n    view.setUint16(i, 0x4d42, true);\n    i += 2;\n    view.setUint32(i, fileLength, true);\n    i += 4;\n    view.setUint32(i, 0, true);\n    i += 4;\n    view.setUint32(i, 14 + headerLength + colorTable.length, true);\n    i += 4;\n    view.setUint32(i, headerLength, true);\n    i += 4;\n    view.setInt32(i, width, true);\n    i += 4;\n    view.setInt32(i, -height, true);\n    i += 4;\n    view.setUint16(i, 1, true);\n    i += 2;\n    view.setUint16(i, bitPerPixel, true);\n    i += 2;\n    view.setUint32(i, compression, true);\n    i += 4;\n    view.setUint32(i, 0, true);\n    i += 4;\n    view.setInt32(i, 0, true);\n    i += 4;\n    view.setInt32(i, 0, true);\n    i += 4;\n    view.setUint32(i, colorTable.length / 4, true);\n    i += 4;\n    view.setUint32(i, 0, true);\n    i += 4;\n    bmpData.set(maskTable, i);\n    i += maskTable.length;\n    bmpData.set(colorTable, i);\n    i += colorTable.length;\n    bmpData.set(data, i);\n    return bmpData;\n  }\n}\nImageResizer._goodSquareLength = MIN_IMAGE_DIM;\n\n;// CONCATENATED MODULE: ./src/shared/murmurhash3.js\nconst SEED = 0xc3d2e1f0;\nconst MASK_HIGH = 0xffff0000;\nconst MASK_LOW = 0xffff;\nclass MurmurHash3_64 {\n  constructor(seed) {\n    this.h1 = seed ? seed & 0xffffffff : SEED;\n    this.h2 = seed ? seed & 0xffffffff : SEED;\n  }\n  update(input) {\n    let data, length;\n    if (typeof input === \"string\") {\n      data = new Uint8Array(input.length * 2);\n      length = 0;\n      for (let i = 0, ii = input.length; i < ii; i++) {\n        const code = input.charCodeAt(i);\n        if (code <= 0xff) {\n          data[length++] = code;\n        } else {\n          data[length++] = code >>> 8;\n          data[length++] = code & 0xff;\n        }\n      }\n    } else if (ArrayBuffer.isView(input)) {\n      data = input.slice();\n      length = data.byteLength;\n    } else {\n      throw new Error(\"Invalid data format, must be a string or TypedArray.\");\n    }\n    const blockCounts = length >> 2;\n    const tailLength = length - blockCounts * 4;\n    const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts);\n    let k1 = 0,\n      k2 = 0;\n    let h1 = this.h1,\n      h2 = this.h2;\n    const C1 = 0xcc9e2d51,\n      C2 = 0x1b873593;\n    const C1_LOW = C1 & MASK_LOW,\n      C2_LOW = C2 & MASK_LOW;\n    for (let i = 0; i < blockCounts; i++) {\n      if (i & 1) {\n        k1 = dataUint32[i];\n        k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW;\n        k1 = k1 << 15 | k1 >>> 17;\n        k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW;\n        h1 ^= k1;\n        h1 = h1 << 13 | h1 >>> 19;\n        h1 = h1 * 5 + 0xe6546b64;\n      } else {\n        k2 = dataUint32[i];\n        k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW;\n        k2 = k2 << 15 | k2 >>> 17;\n        k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW;\n        h2 ^= k2;\n        h2 = h2 << 13 | h2 >>> 19;\n        h2 = h2 * 5 + 0xe6546b64;\n      }\n    }\n    k1 = 0;\n    switch (tailLength) {\n      case 3:\n        k1 ^= data[blockCounts * 4 + 2] << 16;\n      case 2:\n        k1 ^= data[blockCounts * 4 + 1] << 8;\n      case 1:\n        k1 ^= data[blockCounts * 4];\n        k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW;\n        k1 = k1 << 15 | k1 >>> 17;\n        k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW;\n        if (blockCounts & 1) {\n          h1 ^= k1;\n        } else {\n          h2 ^= k1;\n        }\n    }\n    this.h1 = h1;\n    this.h2 = h2;\n  }\n  hexdigest() {\n    let h1 = this.h1,\n      h2 = this.h2;\n    h1 ^= h2 >>> 1;\n    h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW;\n    h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16;\n    h1 ^= h2 >>> 1;\n    h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW;\n    h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16;\n    h1 ^= h2 >>> 1;\n    return (h1 >>> 0).toString(16).padStart(8, \"0\") + (h2 >>> 0).toString(16).padStart(8, \"0\");\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/operator_list.js\n\nfunction addState(parentState, pattern, checkFn, iterateFn, processFn) {\n  let state = parentState;\n  for (let i = 0, ii = pattern.length - 1; i < ii; i++) {\n    const item = pattern[i];\n    state = state[item] ||= [];\n  }\n  state[pattern.at(-1)] = {\n    checkFn,\n    iterateFn,\n    processFn\n  };\n}\nconst InitialState = [];\naddState(InitialState, [OPS.save, OPS.transform, OPS.paintInlineImageXObject, OPS.restore], null, function iterateInlineImageGroup(context, i) {\n  const fnArray = context.fnArray;\n  const iFirstSave = context.iCurr - 3;\n  const pos = (i - iFirstSave) % 4;\n  switch (pos) {\n    case 0:\n      return fnArray[i] === OPS.save;\n    case 1:\n      return fnArray[i] === OPS.transform;\n    case 2:\n      return fnArray[i] === OPS.paintInlineImageXObject;\n    case 3:\n      return fnArray[i] === OPS.restore;\n  }\n  throw new Error(`iterateInlineImageGroup - invalid pos: ${pos}`);\n}, function foundInlineImageGroup(context, i) {\n  const MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10;\n  const MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200;\n  const MAX_WIDTH = 1000;\n  const IMAGE_PADDING = 1;\n  const fnArray = context.fnArray,\n    argsArray = context.argsArray;\n  const curr = context.iCurr;\n  const iFirstSave = curr - 3;\n  const iFirstTransform = curr - 2;\n  const iFirstPIIXO = curr - 1;\n  const count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_INLINE_IMAGES_BLOCK);\n  if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) {\n    return i - (i - iFirstSave) % 4;\n  }\n  let maxX = 0;\n  const map = [];\n  let maxLineHeight = 0;\n  let currentX = IMAGE_PADDING,\n    currentY = IMAGE_PADDING;\n  for (let q = 0; q < count; q++) {\n    const transform = argsArray[iFirstTransform + (q << 2)];\n    const img = argsArray[iFirstPIIXO + (q << 2)][0];\n    if (currentX + img.width > MAX_WIDTH) {\n      maxX = Math.max(maxX, currentX);\n      currentY += maxLineHeight + 2 * IMAGE_PADDING;\n      currentX = 0;\n      maxLineHeight = 0;\n    }\n    map.push({\n      transform,\n      x: currentX,\n      y: currentY,\n      w: img.width,\n      h: img.height\n    });\n    currentX += img.width + 2 * IMAGE_PADDING;\n    maxLineHeight = Math.max(maxLineHeight, img.height);\n  }\n  const imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING;\n  const imgHeight = currentY + maxLineHeight + IMAGE_PADDING;\n  const imgData = new Uint8Array(imgWidth * imgHeight * 4);\n  const imgRowSize = imgWidth << 2;\n  for (let q = 0; q < count; q++) {\n    const data = argsArray[iFirstPIIXO + (q << 2)][0].data;\n    const rowSize = map[q].w << 2;\n    let dataOffset = 0;\n    let offset = map[q].x + map[q].y * imgWidth << 2;\n    imgData.set(data.subarray(0, rowSize), offset - imgRowSize);\n    for (let k = 0, kk = map[q].h; k < kk; k++) {\n      imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset);\n      dataOffset += rowSize;\n      offset += imgRowSize;\n    }\n    imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset);\n    while (offset >= 0) {\n      data[offset - 4] = data[offset];\n      data[offset - 3] = data[offset + 1];\n      data[offset - 2] = data[offset + 2];\n      data[offset - 1] = data[offset + 3];\n      data[offset + rowSize] = data[offset + rowSize - 4];\n      data[offset + rowSize + 1] = data[offset + rowSize - 3];\n      data[offset + rowSize + 2] = data[offset + rowSize - 2];\n      data[offset + rowSize + 3] = data[offset + rowSize - 1];\n      offset -= imgRowSize;\n    }\n  }\n  const img = {\n    width: imgWidth,\n    height: imgHeight\n  };\n  if (context.isOffscreenCanvasSupported) {\n    const canvas = new OffscreenCanvas(imgWidth, imgHeight);\n    const ctx = canvas.getContext(\"2d\");\n    ctx.putImageData(new ImageData(new Uint8ClampedArray(imgData.buffer), imgWidth, imgHeight), 0, 0);\n    img.bitmap = canvas.transferToImageBitmap();\n    img.data = null;\n  } else {\n    img.kind = ImageKind.RGBA_32BPP;\n    img.data = imgData;\n  }\n  fnArray.splice(iFirstSave, count * 4, OPS.paintInlineImageXObjectGroup);\n  argsArray.splice(iFirstSave, count * 4, [img, map]);\n  return iFirstSave + 1;\n});\naddState(InitialState, [OPS.save, OPS.transform, OPS.paintImageMaskXObject, OPS.restore], null, function iterateImageMaskGroup(context, i) {\n  const fnArray = context.fnArray;\n  const iFirstSave = context.iCurr - 3;\n  const pos = (i - iFirstSave) % 4;\n  switch (pos) {\n    case 0:\n      return fnArray[i] === OPS.save;\n    case 1:\n      return fnArray[i] === OPS.transform;\n    case 2:\n      return fnArray[i] === OPS.paintImageMaskXObject;\n    case 3:\n      return fnArray[i] === OPS.restore;\n  }\n  throw new Error(`iterateImageMaskGroup - invalid pos: ${pos}`);\n}, function foundImageMaskGroup(context, i) {\n  const MIN_IMAGES_IN_MASKS_BLOCK = 10;\n  const MAX_IMAGES_IN_MASKS_BLOCK = 100;\n  const MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000;\n  const fnArray = context.fnArray,\n    argsArray = context.argsArray;\n  const curr = context.iCurr;\n  const iFirstSave = curr - 3;\n  const iFirstTransform = curr - 2;\n  const iFirstPIMXO = curr - 1;\n  let count = Math.floor((i - iFirstSave) / 4);\n  if (count < MIN_IMAGES_IN_MASKS_BLOCK) {\n    return i - (i - iFirstSave) % 4;\n  }\n  let isSameImage = false;\n  let iTransform, transformArgs;\n  const firstPIMXOArg0 = argsArray[iFirstPIMXO][0];\n  const firstTransformArg0 = argsArray[iFirstTransform][0],\n    firstTransformArg1 = argsArray[iFirstTransform][1],\n    firstTransformArg2 = argsArray[iFirstTransform][2],\n    firstTransformArg3 = argsArray[iFirstTransform][3];\n  if (firstTransformArg1 === firstTransformArg2) {\n    isSameImage = true;\n    iTransform = iFirstTransform + 4;\n    let iPIMXO = iFirstPIMXO + 4;\n    for (let q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) {\n      transformArgs = argsArray[iTransform];\n      if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== firstTransformArg1 || transformArgs[2] !== firstTransformArg2 || transformArgs[3] !== firstTransformArg3) {\n        if (q < MIN_IMAGES_IN_MASKS_BLOCK) {\n          isSameImage = false;\n        } else {\n          count = q;\n        }\n        break;\n      }\n    }\n  }\n  if (isSameImage) {\n    count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK);\n    const positions = new Float32Array(count * 2);\n    iTransform = iFirstTransform;\n    for (let q = 0; q < count; q++, iTransform += 4) {\n      transformArgs = argsArray[iTransform];\n      positions[q << 1] = transformArgs[4];\n      positions[(q << 1) + 1] = transformArgs[5];\n    }\n    fnArray.splice(iFirstSave, count * 4, OPS.paintImageMaskXObjectRepeat);\n    argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg1, firstTransformArg2, firstTransformArg3, positions]);\n  } else {\n    count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK);\n    const images = [];\n    for (let q = 0; q < count; q++) {\n      transformArgs = argsArray[iFirstTransform + (q << 2)];\n      const maskParams = argsArray[iFirstPIMXO + (q << 2)][0];\n      images.push({\n        data: maskParams.data,\n        width: maskParams.width,\n        height: maskParams.height,\n        interpolate: maskParams.interpolate,\n        count: maskParams.count,\n        transform: transformArgs\n      });\n    }\n    fnArray.splice(iFirstSave, count * 4, OPS.paintImageMaskXObjectGroup);\n    argsArray.splice(iFirstSave, count * 4, [images]);\n  }\n  return iFirstSave + 1;\n});\naddState(InitialState, [OPS.save, OPS.transform, OPS.paintImageXObject, OPS.restore], function (context) {\n  const argsArray = context.argsArray;\n  const iFirstTransform = context.iCurr - 2;\n  return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0;\n}, function iterateImageGroup(context, i) {\n  const fnArray = context.fnArray,\n    argsArray = context.argsArray;\n  const iFirstSave = context.iCurr - 3;\n  const pos = (i - iFirstSave) % 4;\n  switch (pos) {\n    case 0:\n      return fnArray[i] === OPS.save;\n    case 1:\n      if (fnArray[i] !== OPS.transform) {\n        return false;\n      }\n      const iFirstTransform = context.iCurr - 2;\n      const firstTransformArg0 = argsArray[iFirstTransform][0];\n      const firstTransformArg3 = argsArray[iFirstTransform][3];\n      if (argsArray[i][0] !== firstTransformArg0 || argsArray[i][1] !== 0 || argsArray[i][2] !== 0 || argsArray[i][3] !== firstTransformArg3) {\n        return false;\n      }\n      return true;\n    case 2:\n      if (fnArray[i] !== OPS.paintImageXObject) {\n        return false;\n      }\n      const iFirstPIXO = context.iCurr - 1;\n      const firstPIXOArg0 = argsArray[iFirstPIXO][0];\n      if (argsArray[i][0] !== firstPIXOArg0) {\n        return false;\n      }\n      return true;\n    case 3:\n      return fnArray[i] === OPS.restore;\n  }\n  throw new Error(`iterateImageGroup - invalid pos: ${pos}`);\n}, function (context, i) {\n  const MIN_IMAGES_IN_BLOCK = 3;\n  const MAX_IMAGES_IN_BLOCK = 1000;\n  const fnArray = context.fnArray,\n    argsArray = context.argsArray;\n  const curr = context.iCurr;\n  const iFirstSave = curr - 3;\n  const iFirstTransform = curr - 2;\n  const iFirstPIXO = curr - 1;\n  const firstPIXOArg0 = argsArray[iFirstPIXO][0];\n  const firstTransformArg0 = argsArray[iFirstTransform][0];\n  const firstTransformArg3 = argsArray[iFirstTransform][3];\n  const count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_BLOCK);\n  if (count < MIN_IMAGES_IN_BLOCK) {\n    return i - (i - iFirstSave) % 4;\n  }\n  const positions = new Float32Array(count * 2);\n  let iTransform = iFirstTransform;\n  for (let q = 0; q < count; q++, iTransform += 4) {\n    const transformArgs = argsArray[iTransform];\n    positions[q << 1] = transformArgs[4];\n    positions[(q << 1) + 1] = transformArgs[5];\n  }\n  const args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, positions];\n  fnArray.splice(iFirstSave, count * 4, OPS.paintImageXObjectRepeat);\n  argsArray.splice(iFirstSave, count * 4, args);\n  return iFirstSave + 1;\n});\naddState(InitialState, [OPS.beginText, OPS.setFont, OPS.setTextMatrix, OPS.showText, OPS.endText], null, function iterateShowTextGroup(context, i) {\n  const fnArray = context.fnArray,\n    argsArray = context.argsArray;\n  const iFirstSave = context.iCurr - 4;\n  const pos = (i - iFirstSave) % 5;\n  switch (pos) {\n    case 0:\n      return fnArray[i] === OPS.beginText;\n    case 1:\n      return fnArray[i] === OPS.setFont;\n    case 2:\n      return fnArray[i] === OPS.setTextMatrix;\n    case 3:\n      if (fnArray[i] !== OPS.showText) {\n        return false;\n      }\n      const iFirstSetFont = context.iCurr - 3;\n      const firstSetFontArg0 = argsArray[iFirstSetFont][0];\n      const firstSetFontArg1 = argsArray[iFirstSetFont][1];\n      if (argsArray[i][0] !== firstSetFontArg0 || argsArray[i][1] !== firstSetFontArg1) {\n        return false;\n      }\n      return true;\n    case 4:\n      return fnArray[i] === OPS.endText;\n  }\n  throw new Error(`iterateShowTextGroup - invalid pos: ${pos}`);\n}, function (context, i) {\n  const MIN_CHARS_IN_BLOCK = 3;\n  const MAX_CHARS_IN_BLOCK = 1000;\n  const fnArray = context.fnArray,\n    argsArray = context.argsArray;\n  const curr = context.iCurr;\n  const iFirstBeginText = curr - 4;\n  const iFirstSetFont = curr - 3;\n  const iFirstSetTextMatrix = curr - 2;\n  const iFirstShowText = curr - 1;\n  const iFirstEndText = curr;\n  const firstSetFontArg0 = argsArray[iFirstSetFont][0];\n  const firstSetFontArg1 = argsArray[iFirstSetFont][1];\n  let count = Math.min(Math.floor((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK);\n  if (count < MIN_CHARS_IN_BLOCK) {\n    return i - (i - iFirstBeginText) % 5;\n  }\n  let iFirst = iFirstBeginText;\n  if (iFirstBeginText >= 4 && fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] && fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] && fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] && fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] && argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 && argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) {\n    count++;\n    iFirst -= 5;\n  }\n  let iEndText = iFirst + 4;\n  for (let q = 1; q < count; q++) {\n    fnArray.splice(iEndText, 3);\n    argsArray.splice(iEndText, 3);\n    iEndText += 2;\n  }\n  return iEndText + 1;\n});\nclass NullOptimizer {\n  constructor(queue) {\n    this.queue = queue;\n  }\n  _optimize() {}\n  push(fn, args) {\n    this.queue.fnArray.push(fn);\n    this.queue.argsArray.push(args);\n    this._optimize();\n  }\n  flush() {}\n  reset() {}\n}\nclass QueueOptimizer extends NullOptimizer {\n  constructor(queue) {\n    super(queue);\n    this.state = null;\n    this.context = {\n      iCurr: 0,\n      fnArray: queue.fnArray,\n      argsArray: queue.argsArray,\n      isOffscreenCanvasSupported: false\n    };\n    this.match = null;\n    this.lastProcessed = 0;\n  }\n  set isOffscreenCanvasSupported(value) {\n    this.context.isOffscreenCanvasSupported = value;\n  }\n  _optimize() {\n    const fnArray = this.queue.fnArray;\n    let i = this.lastProcessed,\n      ii = fnArray.length;\n    let state = this.state;\n    let match = this.match;\n    if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) {\n      this.lastProcessed = ii;\n      return;\n    }\n    const context = this.context;\n    while (i < ii) {\n      if (match) {\n        const iterate = (0, match.iterateFn)(context, i);\n        if (iterate) {\n          i++;\n          continue;\n        }\n        i = (0, match.processFn)(context, i + 1);\n        ii = fnArray.length;\n        match = null;\n        state = null;\n        if (i >= ii) {\n          break;\n        }\n      }\n      state = (state || InitialState)[fnArray[i]];\n      if (!state || Array.isArray(state)) {\n        i++;\n        continue;\n      }\n      context.iCurr = i;\n      i++;\n      if (state.checkFn && !(0, state.checkFn)(context)) {\n        state = null;\n        continue;\n      }\n      match = state;\n      state = null;\n    }\n    this.state = state;\n    this.match = match;\n    this.lastProcessed = i;\n  }\n  flush() {\n    while (this.match) {\n      const length = this.queue.fnArray.length;\n      this.lastProcessed = (0, this.match.processFn)(this.context, length);\n      this.match = null;\n      this.state = null;\n      this._optimize();\n    }\n  }\n  reset() {\n    this.state = null;\n    this.match = null;\n    this.lastProcessed = 0;\n  }\n}\nclass OperatorList {\n  static CHUNK_SIZE = 1000;\n  static CHUNK_SIZE_ABOUT = this.CHUNK_SIZE - 5;\n  constructor(intent = 0, streamSink) {\n    this._streamSink = streamSink;\n    this.fnArray = [];\n    this.argsArray = [];\n    this.optimizer = streamSink && !(intent & RenderingIntentFlag.OPLIST) ? new QueueOptimizer(this) : new NullOptimizer(this);\n    this.dependencies = new Set();\n    this._totalLength = 0;\n    this.weight = 0;\n    this._resolved = streamSink ? null : Promise.resolve();\n  }\n  set isOffscreenCanvasSupported(value) {\n    this.optimizer.isOffscreenCanvasSupported = value;\n  }\n  get length() {\n    return this.argsArray.length;\n  }\n  get ready() {\n    return this._resolved || this._streamSink.ready;\n  }\n  get totalLength() {\n    return this._totalLength + this.length;\n  }\n  addOp(fn, args) {\n    this.optimizer.push(fn, args);\n    this.weight++;\n    if (this._streamSink) {\n      if (this.weight >= OperatorList.CHUNK_SIZE) {\n        this.flush();\n      } else if (this.weight >= OperatorList.CHUNK_SIZE_ABOUT && (fn === OPS.restore || fn === OPS.endText)) {\n        this.flush();\n      }\n    }\n  }\n  addImageOps(fn, args, optionalContent) {\n    if (optionalContent !== undefined) {\n      this.addOp(OPS.beginMarkedContentProps, [\"OC\", optionalContent]);\n    }\n    this.addOp(fn, args);\n    if (optionalContent !== undefined) {\n      this.addOp(OPS.endMarkedContent, []);\n    }\n  }\n  addDependency(dependency) {\n    if (this.dependencies.has(dependency)) {\n      return;\n    }\n    this.dependencies.add(dependency);\n    this.addOp(OPS.dependency, [dependency]);\n  }\n  addDependencies(dependencies) {\n    for (const dependency of dependencies) {\n      this.addDependency(dependency);\n    }\n  }\n  addOpList(opList) {\n    if (!(opList instanceof OperatorList)) {\n      warn('addOpList - ignoring invalid \"opList\" parameter.');\n      return;\n    }\n    for (const dependency of opList.dependencies) {\n      this.dependencies.add(dependency);\n    }\n    for (let i = 0, ii = opList.length; i < ii; i++) {\n      this.addOp(opList.fnArray[i], opList.argsArray[i]);\n    }\n  }\n  getIR() {\n    return {\n      fnArray: this.fnArray,\n      argsArray: this.argsArray,\n      length: this.length\n    };\n  }\n  get _transfers() {\n    const transfers = [];\n    const {\n      fnArray,\n      argsArray,\n      length\n    } = this;\n    for (let i = 0; i < length; i++) {\n      switch (fnArray[i]) {\n        case OPS.paintInlineImageXObject:\n        case OPS.paintInlineImageXObjectGroup:\n        case OPS.paintImageMaskXObject:\n          const arg = argsArray[i][0];\n          if (!arg.cached && arg.data?.buffer instanceof ArrayBuffer) {\n            transfers.push(arg.data.buffer);\n          }\n          break;\n      }\n    }\n    return transfers;\n  }\n  flush(lastChunk = false, separateAnnots = null) {\n    this.optimizer.flush();\n    const length = this.length;\n    this._totalLength += length;\n    this._streamSink.enqueue({\n      fnArray: this.fnArray,\n      argsArray: this.argsArray,\n      lastChunk,\n      separateAnnots,\n      length\n    }, 1, this._transfers);\n    this.dependencies.clear();\n    this.fnArray.length = 0;\n    this.argsArray.length = 0;\n    this.weight = 0;\n    this.optimizer.reset();\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/image.js\n\n\n\n\n\n\n\n\n\nfunction decodeAndClamp(value, addend, coefficient, max) {\n  value = addend + value * coefficient;\n  if (value < 0) {\n    value = 0;\n  } else if (value > max) {\n    value = max;\n  }\n  return value;\n}\nfunction resizeImageMask(src, bpc, w1, h1, w2, h2) {\n  const length = w2 * h2;\n  let dest;\n  if (bpc <= 8) {\n    dest = new Uint8Array(length);\n  } else if (bpc <= 16) {\n    dest = new Uint16Array(length);\n  } else {\n    dest = new Uint32Array(length);\n  }\n  const xRatio = w1 / w2;\n  const yRatio = h1 / h2;\n  let i,\n    j,\n    py,\n    newIndex = 0,\n    oldIndex;\n  const xScaled = new Uint16Array(w2);\n  const w1Scanline = w1;\n  for (i = 0; i < w2; i++) {\n    xScaled[i] = Math.floor(i * xRatio);\n  }\n  for (i = 0; i < h2; i++) {\n    py = Math.floor(i * yRatio) * w1Scanline;\n    for (j = 0; j < w2; j++) {\n      oldIndex = py + xScaled[j];\n      dest[newIndex++] = src[oldIndex];\n    }\n  }\n  return dest;\n}\nclass PDFImage {\n  constructor({\n    xref,\n    res,\n    image,\n    isInline = false,\n    smask = null,\n    mask = null,\n    isMask = false,\n    pdfFunctionFactory,\n    localColorSpaceCache\n  }) {\n    this.image = image;\n    let jpxDecode = false;\n    const dict = image.dict;\n    const filter = dict.get(\"F\", \"Filter\");\n    let filterName;\n    if (filter instanceof Name) {\n      filterName = filter.name;\n    } else if (Array.isArray(filter)) {\n      const filterZero = xref.fetchIfRef(filter[0]);\n      if (filterZero instanceof Name) {\n        filterName = filterZero.name;\n      }\n    }\n    switch (filterName) {\n      case \"JPXDecode\":\n        ({\n          width: image.width,\n          height: image.height,\n          componentsCount: image.numComps,\n          bitsPerComponent: image.bitsPerComponent\n        } = JpxImage.parseImageProperties(image.stream));\n        image.stream.reset();\n        jpxDecode = true;\n        break;\n      case \"JBIG2Decode\":\n        image.bitsPerComponent = 1;\n        image.numComps = 1;\n        break;\n    }\n    let width = dict.get(\"W\", \"Width\");\n    let height = dict.get(\"H\", \"Height\");\n    if (Number.isInteger(image.width) && image.width > 0 && Number.isInteger(image.height) && image.height > 0 && (image.width !== width || image.height !== height)) {\n      warn(\"PDFImage - using the Width/Height of the image data, \" + \"rather than the image dictionary.\");\n      width = image.width;\n      height = image.height;\n    }\n    if (width < 1 || height < 1) {\n      throw new FormatError(`Invalid image width: ${width} or height: ${height}`);\n    }\n    this.width = width;\n    this.height = height;\n    this.interpolate = dict.get(\"I\", \"Interpolate\");\n    this.imageMask = dict.get(\"IM\", \"ImageMask\") || false;\n    this.matte = dict.get(\"Matte\") || false;\n    let bitsPerComponent = image.bitsPerComponent;\n    if (!bitsPerComponent) {\n      bitsPerComponent = dict.get(\"BPC\", \"BitsPerComponent\");\n      if (!bitsPerComponent) {\n        if (this.imageMask) {\n          bitsPerComponent = 1;\n        } else {\n          throw new FormatError(`Bits per component missing in image: ${this.imageMask}`);\n        }\n      }\n    }\n    this.bpc = bitsPerComponent;\n    if (!this.imageMask) {\n      let colorSpace = dict.getRaw(\"CS\") || dict.getRaw(\"ColorSpace\");\n      if (!colorSpace) {\n        info(\"JPX images (which do not require color spaces)\");\n        switch (image.numComps) {\n          case 1:\n            colorSpace = Name.get(\"DeviceGray\");\n            break;\n          case 3:\n            colorSpace = Name.get(\"DeviceRGB\");\n            break;\n          case 4:\n            colorSpace = Name.get(\"DeviceCMYK\");\n            break;\n          default:\n            throw new Error(`JPX images with ${image.numComps} color components not supported.`);\n        }\n      }\n      this.colorSpace = ColorSpace.parse({\n        cs: colorSpace,\n        xref,\n        resources: isInline ? res : null,\n        pdfFunctionFactory,\n        localColorSpaceCache\n      });\n      this.numComps = this.colorSpace.numComps;\n      this.ignoreColorSpace = jpxDecode && this.colorSpace.name === \"Indexed\";\n    }\n    this.decode = dict.getArray(\"D\", \"Decode\");\n    this.needsDecode = false;\n    if (this.decode && (this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, bitsPerComponent) || isMask && !ColorSpace.isDefaultDecode(this.decode, 1))) {\n      this.needsDecode = true;\n      const max = (1 << bitsPerComponent) - 1;\n      this.decodeCoefficients = [];\n      this.decodeAddends = [];\n      const isIndexed = this.colorSpace?.name === \"Indexed\";\n      for (let i = 0, j = 0; i < this.decode.length; i += 2, ++j) {\n        const dmin = this.decode[i];\n        const dmax = this.decode[i + 1];\n        this.decodeCoefficients[j] = isIndexed ? (dmax - dmin) / max : dmax - dmin;\n        this.decodeAddends[j] = isIndexed ? dmin : max * dmin;\n      }\n    }\n    if (smask) {\n      this.smask = new PDFImage({\n        xref,\n        res,\n        image: smask,\n        isInline,\n        pdfFunctionFactory,\n        localColorSpaceCache\n      });\n    } else if (mask) {\n      if (mask instanceof BaseStream) {\n        const maskDict = mask.dict,\n          imageMask = maskDict.get(\"IM\", \"ImageMask\");\n        if (!imageMask) {\n          warn(\"Ignoring /Mask in image without /ImageMask.\");\n        } else {\n          this.mask = new PDFImage({\n            xref,\n            res,\n            image: mask,\n            isInline,\n            isMask: true,\n            pdfFunctionFactory,\n            localColorSpaceCache\n          });\n        }\n      } else {\n        this.mask = mask;\n      }\n    }\n  }\n  static async buildImage({\n    xref,\n    res,\n    image,\n    isInline = false,\n    pdfFunctionFactory,\n    localColorSpaceCache\n  }) {\n    const imageData = image;\n    let smaskData = null;\n    let maskData = null;\n    const smask = image.dict.get(\"SMask\");\n    const mask = image.dict.get(\"Mask\");\n    if (smask) {\n      if (smask instanceof BaseStream) {\n        smaskData = smask;\n      } else {\n        warn(\"Unsupported /SMask format.\");\n      }\n    } else if (mask) {\n      if (mask instanceof BaseStream || Array.isArray(mask)) {\n        maskData = mask;\n      } else {\n        warn(\"Unsupported /Mask format.\");\n      }\n    }\n    return new PDFImage({\n      xref,\n      res,\n      image: imageData,\n      isInline,\n      smask: smaskData,\n      mask: maskData,\n      pdfFunctionFactory,\n      localColorSpaceCache\n    });\n  }\n  static createRawMask({\n    imgArray,\n    width,\n    height,\n    imageIsFromDecodeStream,\n    inverseDecode,\n    interpolate\n  }) {\n    const computedLength = (width + 7 >> 3) * height;\n    const actualLength = imgArray.byteLength;\n    const haveFullData = computedLength === actualLength;\n    let data, i;\n    if (imageIsFromDecodeStream && (!inverseDecode || haveFullData)) {\n      data = imgArray;\n    } else if (!inverseDecode) {\n      data = new Uint8Array(imgArray);\n    } else {\n      data = new Uint8Array(computedLength);\n      data.set(imgArray);\n      data.fill(0xff, actualLength);\n    }\n    if (inverseDecode) {\n      for (i = 0; i < actualLength; i++) {\n        data[i] ^= 0xff;\n      }\n    }\n    return {\n      data,\n      width,\n      height,\n      interpolate\n    };\n  }\n  static async createMask({\n    imgArray,\n    width,\n    height,\n    imageIsFromDecodeStream,\n    inverseDecode,\n    interpolate,\n    isOffscreenCanvasSupported = false\n  }) {\n    const isSingleOpaquePixel = width === 1 && height === 1 && inverseDecode === (imgArray.length === 0 || !!(imgArray[0] & 128));\n    if (isSingleOpaquePixel) {\n      return {\n        isSingleOpaquePixel\n      };\n    }\n    if (isOffscreenCanvasSupported) {\n      if (ImageResizer.needsToBeResized(width, height)) {\n        const data = new Uint8ClampedArray(width * height * 4);\n        convertBlackAndWhiteToRGBA({\n          src: imgArray,\n          dest: data,\n          width,\n          height,\n          nonBlackColor: 0,\n          inverseDecode\n        });\n        return ImageResizer.createImage({\n          kind: ImageKind.RGBA_32BPP,\n          data,\n          width,\n          height,\n          interpolate\n        });\n      }\n      const canvas = new OffscreenCanvas(width, height);\n      const ctx = canvas.getContext(\"2d\");\n      const imgData = ctx.createImageData(width, height);\n      convertBlackAndWhiteToRGBA({\n        src: imgArray,\n        dest: imgData.data,\n        width,\n        height,\n        nonBlackColor: 0,\n        inverseDecode\n      });\n      ctx.putImageData(imgData, 0, 0);\n      const bitmap = canvas.transferToImageBitmap();\n      return {\n        data: null,\n        width,\n        height,\n        interpolate,\n        bitmap\n      };\n    }\n    return this.createRawMask({\n      imgArray,\n      width,\n      height,\n      inverseDecode,\n      imageIsFromDecodeStream,\n      interpolate\n    });\n  }\n  get drawWidth() {\n    return Math.max(this.width, this.smask?.width || 0, this.mask?.width || 0);\n  }\n  get drawHeight() {\n    return Math.max(this.height, this.smask?.height || 0, this.mask?.height || 0);\n  }\n  decodeBuffer(buffer) {\n    const bpc = this.bpc;\n    const numComps = this.numComps;\n    const decodeAddends = this.decodeAddends;\n    const decodeCoefficients = this.decodeCoefficients;\n    const max = (1 << bpc) - 1;\n    let i, ii;\n    if (bpc === 1) {\n      for (i = 0, ii = buffer.length; i < ii; i++) {\n        buffer[i] = +!buffer[i];\n      }\n      return;\n    }\n    let index = 0;\n    for (i = 0, ii = this.width * this.height; i < ii; i++) {\n      for (let j = 0; j < numComps; j++) {\n        buffer[index] = decodeAndClamp(buffer[index], decodeAddends[j], decodeCoefficients[j], max);\n        index++;\n      }\n    }\n  }\n  getComponents(buffer) {\n    const bpc = this.bpc;\n    if (bpc === 8) {\n      return buffer;\n    }\n    const width = this.width;\n    const height = this.height;\n    const numComps = this.numComps;\n    const length = width * height * numComps;\n    let bufferPos = 0;\n    let output;\n    if (bpc <= 8) {\n      output = new Uint8Array(length);\n    } else if (bpc <= 16) {\n      output = new Uint16Array(length);\n    } else {\n      output = new Uint32Array(length);\n    }\n    const rowComps = width * numComps;\n    const max = (1 << bpc) - 1;\n    let i = 0,\n      ii,\n      buf;\n    if (bpc === 1) {\n      let mask, loop1End, loop2End;\n      for (let j = 0; j < height; j++) {\n        loop1End = i + (rowComps & ~7);\n        loop2End = i + rowComps;\n        while (i < loop1End) {\n          buf = buffer[bufferPos++];\n          output[i] = buf >> 7 & 1;\n          output[i + 1] = buf >> 6 & 1;\n          output[i + 2] = buf >> 5 & 1;\n          output[i + 3] = buf >> 4 & 1;\n          output[i + 4] = buf >> 3 & 1;\n          output[i + 5] = buf >> 2 & 1;\n          output[i + 6] = buf >> 1 & 1;\n          output[i + 7] = buf & 1;\n          i += 8;\n        }\n        if (i < loop2End) {\n          buf = buffer[bufferPos++];\n          mask = 128;\n          while (i < loop2End) {\n            output[i++] = +!!(buf & mask);\n            mask >>= 1;\n          }\n        }\n      }\n    } else {\n      let bits = 0;\n      buf = 0;\n      for (i = 0, ii = length; i < ii; ++i) {\n        if (i % rowComps === 0) {\n          buf = 0;\n          bits = 0;\n        }\n        while (bits < bpc) {\n          buf = buf << 8 | buffer[bufferPos++];\n          bits += 8;\n        }\n        const remainingBits = bits - bpc;\n        let value = buf >> remainingBits;\n        if (value < 0) {\n          value = 0;\n        } else if (value > max) {\n          value = max;\n        }\n        output[i] = value;\n        buf &= (1 << remainingBits) - 1;\n        bits = remainingBits;\n      }\n    }\n    return output;\n  }\n  fillOpacity(rgbaBuf, width, height, actualHeight, image) {\n    const smask = this.smask;\n    const mask = this.mask;\n    let alphaBuf, sw, sh, i, ii, j;\n    if (smask) {\n      sw = smask.width;\n      sh = smask.height;\n      alphaBuf = new Uint8ClampedArray(sw * sh);\n      smask.fillGrayBuffer(alphaBuf);\n      if (sw !== width || sh !== height) {\n        alphaBuf = resizeImageMask(alphaBuf, smask.bpc, sw, sh, width, height);\n      }\n    } else if (mask) {\n      if (mask instanceof PDFImage) {\n        sw = mask.width;\n        sh = mask.height;\n        alphaBuf = new Uint8ClampedArray(sw * sh);\n        mask.numComps = 1;\n        mask.fillGrayBuffer(alphaBuf);\n        for (i = 0, ii = sw * sh; i < ii; ++i) {\n          alphaBuf[i] = 255 - alphaBuf[i];\n        }\n        if (sw !== width || sh !== height) {\n          alphaBuf = resizeImageMask(alphaBuf, mask.bpc, sw, sh, width, height);\n        }\n      } else if (Array.isArray(mask)) {\n        alphaBuf = new Uint8ClampedArray(width * height);\n        const numComps = this.numComps;\n        for (i = 0, ii = width * height; i < ii; ++i) {\n          let opacity = 0;\n          const imageOffset = i * numComps;\n          for (j = 0; j < numComps; ++j) {\n            const color = image[imageOffset + j];\n            const maskOffset = j * 2;\n            if (color < mask[maskOffset] || color > mask[maskOffset + 1]) {\n              opacity = 255;\n              break;\n            }\n          }\n          alphaBuf[i] = opacity;\n        }\n      } else {\n        throw new FormatError(\"Unknown mask format.\");\n      }\n    }\n    if (alphaBuf) {\n      for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) {\n        rgbaBuf[j] = alphaBuf[i];\n      }\n    } else {\n      for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) {\n        rgbaBuf[j] = 255;\n      }\n    }\n  }\n  undoPreblend(buffer, width, height) {\n    const matte = this.smask?.matte;\n    if (!matte) {\n      return;\n    }\n    const matteRgb = this.colorSpace.getRgb(matte, 0);\n    const matteR = matteRgb[0];\n    const matteG = matteRgb[1];\n    const matteB = matteRgb[2];\n    const length = width * height * 4;\n    for (let i = 0; i < length; i += 4) {\n      const alpha = buffer[i + 3];\n      if (alpha === 0) {\n        buffer[i] = 255;\n        buffer[i + 1] = 255;\n        buffer[i + 2] = 255;\n        continue;\n      }\n      const k = 255 / alpha;\n      buffer[i] = (buffer[i] - matteR) * k + matteR;\n      buffer[i + 1] = (buffer[i + 1] - matteG) * k + matteG;\n      buffer[i + 2] = (buffer[i + 2] - matteB) * k + matteB;\n    }\n  }\n  async createImageData(forceRGBA = false, isOffscreenCanvasSupported = false) {\n    const drawWidth = this.drawWidth;\n    const drawHeight = this.drawHeight;\n    const imgData = {\n      width: drawWidth,\n      height: drawHeight,\n      interpolate: this.interpolate,\n      kind: 0,\n      data: null\n    };\n    const numComps = this.numComps;\n    const originalWidth = this.width;\n    const originalHeight = this.height;\n    const bpc = this.bpc;\n    const rowBytes = originalWidth * numComps * bpc + 7 >> 3;\n    const mustBeResized = isOffscreenCanvasSupported && ImageResizer.needsToBeResized(drawWidth, drawHeight);\n    if (!forceRGBA) {\n      let kind;\n      if (this.colorSpace.name === \"DeviceGray\" && bpc === 1) {\n        kind = ImageKind.GRAYSCALE_1BPP;\n      } else if (this.colorSpace.name === \"DeviceRGB\" && bpc === 8 && !this.needsDecode) {\n        kind = ImageKind.RGB_24BPP;\n      }\n      if (kind && !this.smask && !this.mask && drawWidth === originalWidth && drawHeight === originalHeight) {\n        const data = this.getImageBytes(originalHeight * rowBytes, {});\n        if (isOffscreenCanvasSupported) {\n          if (mustBeResized) {\n            return ImageResizer.createImage({\n              data,\n              kind,\n              width: drawWidth,\n              height: drawHeight,\n              interpolate: this.interpolate\n            }, this.needsDecode);\n          }\n          return this.createBitmap(kind, originalWidth, originalHeight, data);\n        }\n        imgData.kind = kind;\n        imgData.data = data;\n        if (this.needsDecode) {\n          assert(kind === ImageKind.GRAYSCALE_1BPP, \"PDFImage.createImageData: The image must be grayscale.\");\n          const buffer = imgData.data;\n          for (let i = 0, ii = buffer.length; i < ii; i++) {\n            buffer[i] ^= 0xff;\n          }\n        }\n        return imgData;\n      }\n      if (this.image instanceof JpegStream && !this.smask && !this.mask && !this.needsDecode) {\n        let imageLength = originalHeight * rowBytes;\n        if (isOffscreenCanvasSupported && !mustBeResized) {\n          let isHandled = false;\n          switch (this.colorSpace.name) {\n            case \"DeviceGray\":\n              imageLength *= 4;\n              isHandled = true;\n              break;\n            case \"DeviceRGB\":\n              imageLength = imageLength / 3 * 4;\n              isHandled = true;\n              break;\n            case \"DeviceCMYK\":\n              isHandled = true;\n              break;\n          }\n          if (isHandled) {\n            const rgba = this.getImageBytes(imageLength, {\n              drawWidth,\n              drawHeight,\n              forceRGBA: true\n            });\n            return this.createBitmap(ImageKind.RGBA_32BPP, drawWidth, drawHeight, rgba);\n          }\n        } else {\n          switch (this.colorSpace.name) {\n            case \"DeviceGray\":\n              imageLength *= 3;\n            case \"DeviceRGB\":\n            case \"DeviceCMYK\":\n              imgData.kind = ImageKind.RGB_24BPP;\n              imgData.data = this.getImageBytes(imageLength, {\n                drawWidth,\n                drawHeight,\n                forceRGB: true\n              });\n              if (mustBeResized) {\n                return ImageResizer.createImage(imgData);\n              }\n              return imgData;\n          }\n        }\n      }\n    }\n    const imgArray = this.getImageBytes(originalHeight * rowBytes, {\n      internal: true\n    });\n    const actualHeight = 0 | imgArray.length / rowBytes * drawHeight / originalHeight;\n    const comps = this.getComponents(imgArray);\n    let alpha01, maybeUndoPreblend;\n    let canvas, ctx, canvasImgData, data;\n    if (isOffscreenCanvasSupported && !mustBeResized) {\n      canvas = new OffscreenCanvas(drawWidth, drawHeight);\n      ctx = canvas.getContext(\"2d\");\n      canvasImgData = ctx.createImageData(drawWidth, drawHeight);\n      data = canvasImgData.data;\n    }\n    imgData.kind = ImageKind.RGBA_32BPP;\n    if (!forceRGBA && !this.smask && !this.mask) {\n      if (!isOffscreenCanvasSupported || mustBeResized) {\n        imgData.kind = ImageKind.RGB_24BPP;\n        data = new Uint8ClampedArray(drawWidth * drawHeight * 3);\n        alpha01 = 0;\n      } else {\n        const arr = new Uint32Array(data.buffer);\n        arr.fill(FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff);\n        alpha01 = 1;\n      }\n      maybeUndoPreblend = false;\n    } else {\n      if (!isOffscreenCanvasSupported || mustBeResized) {\n        data = new Uint8ClampedArray(drawWidth * drawHeight * 4);\n      }\n      alpha01 = 1;\n      maybeUndoPreblend = true;\n      this.fillOpacity(data, drawWidth, drawHeight, actualHeight, comps);\n    }\n    if (this.needsDecode) {\n      this.decodeBuffer(comps);\n    }\n    this.colorSpace.fillRgb(data, originalWidth, originalHeight, drawWidth, drawHeight, actualHeight, bpc, comps, alpha01);\n    if (maybeUndoPreblend) {\n      this.undoPreblend(data, drawWidth, actualHeight);\n    }\n    if (isOffscreenCanvasSupported && !mustBeResized) {\n      ctx.putImageData(canvasImgData, 0, 0);\n      const bitmap = canvas.transferToImageBitmap();\n      return {\n        data: null,\n        width: drawWidth,\n        height: drawHeight,\n        bitmap,\n        interpolate: this.interpolate\n      };\n    }\n    imgData.data = data;\n    if (mustBeResized) {\n      return ImageResizer.createImage(imgData);\n    }\n    return imgData;\n  }\n  fillGrayBuffer(buffer) {\n    const numComps = this.numComps;\n    if (numComps !== 1) {\n      throw new FormatError(`Reading gray scale from a color image: ${numComps}`);\n    }\n    const width = this.width;\n    const height = this.height;\n    const bpc = this.bpc;\n    const rowBytes = width * numComps * bpc + 7 >> 3;\n    const imgArray = this.getImageBytes(height * rowBytes, {\n      internal: true\n    });\n    const comps = this.getComponents(imgArray);\n    let i, length;\n    if (bpc === 1) {\n      length = width * height;\n      if (this.needsDecode) {\n        for (i = 0; i < length; ++i) {\n          buffer[i] = comps[i] - 1 & 255;\n        }\n      } else {\n        for (i = 0; i < length; ++i) {\n          buffer[i] = -comps[i] & 255;\n        }\n      }\n      return;\n    }\n    if (this.needsDecode) {\n      this.decodeBuffer(comps);\n    }\n    length = width * height;\n    const scale = 255 / ((1 << bpc) - 1);\n    for (i = 0; i < length; ++i) {\n      buffer[i] = scale * comps[i];\n    }\n  }\n  createBitmap(kind, width, height, src) {\n    const canvas = new OffscreenCanvas(width, height);\n    const ctx = canvas.getContext(\"2d\");\n    let imgData;\n    if (kind === ImageKind.RGBA_32BPP) {\n      imgData = new ImageData(src, width, height);\n    } else {\n      imgData = ctx.createImageData(width, height);\n      convertToRGBA({\n        kind,\n        src,\n        dest: new Uint32Array(imgData.data.buffer),\n        width,\n        height,\n        inverseDecode: this.needsDecode\n      });\n    }\n    ctx.putImageData(imgData, 0, 0);\n    const bitmap = canvas.transferToImageBitmap();\n    return {\n      data: null,\n      width,\n      height,\n      bitmap,\n      interpolate: this.interpolate\n    };\n  }\n  getImageBytes(length, {\n    drawWidth,\n    drawHeight,\n    forceRGBA = false,\n    forceRGB = false,\n    internal = false\n  }) {\n    this.image.reset();\n    this.image.drawWidth = drawWidth || this.width;\n    this.image.drawHeight = drawHeight || this.height;\n    this.image.forceRGBA = !!forceRGBA;\n    this.image.forceRGB = !!forceRGB;\n    const imageBytes = this.image.getBytes(length, this.ignoreColorSpace);\n    if (internal || this.image instanceof DecodeStream) {\n      return imageBytes;\n    }\n    assert(imageBytes instanceof Uint8Array, 'PDFImage.getImageBytes: Unsupported \"imageBytes\" type.');\n    return new Uint8Array(imageBytes);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/evaluator.js\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\n\n\nconst DefaultPartialEvaluatorOptions = Object.freeze({\n  maxImageSize: -1,\n  disableFontFace: false,\n  ignoreErrors: false,\n  isEvalSupported: true,\n  isOffscreenCanvasSupported: false,\n  canvasMaxAreaInBytes: -1,\n  fontExtraProperties: false,\n  useSystemFonts: true,\n  cMapUrl: null,\n  standardFontDataUrl: null\n});\nconst PatternType = {\n  TILING: 1,\n  SHADING: 2\n};\nconst TEXT_CHUNK_BATCH_SIZE = 10;\nconst deferred = Promise.resolve();\nfunction normalizeBlendMode(value, parsingArray = false) {\n  if (Array.isArray(value)) {\n    for (const val of value) {\n      const maybeBM = normalizeBlendMode(val, true);\n      if (maybeBM) {\n        return maybeBM;\n      }\n    }\n    warn(`Unsupported blend mode Array: ${value}`);\n    return \"source-over\";\n  }\n  if (!(value instanceof Name)) {\n    if (parsingArray) {\n      return null;\n    }\n    return \"source-over\";\n  }\n  switch (value.name) {\n    case \"Normal\":\n    case \"Compatible\":\n      return \"source-over\";\n    case \"Multiply\":\n      return \"multiply\";\n    case \"Screen\":\n      return \"screen\";\n    case \"Overlay\":\n      return \"overlay\";\n    case \"Darken\":\n      return \"darken\";\n    case \"Lighten\":\n      return \"lighten\";\n    case \"ColorDodge\":\n      return \"color-dodge\";\n    case \"ColorBurn\":\n      return \"color-burn\";\n    case \"HardLight\":\n      return \"hard-light\";\n    case \"SoftLight\":\n      return \"soft-light\";\n    case \"Difference\":\n      return \"difference\";\n    case \"Exclusion\":\n      return \"exclusion\";\n    case \"Hue\":\n      return \"hue\";\n    case \"Saturation\":\n      return \"saturation\";\n    case \"Color\":\n      return \"color\";\n    case \"Luminosity\":\n      return \"luminosity\";\n  }\n  if (parsingArray) {\n    return null;\n  }\n  warn(`Unsupported blend mode: ${value.name}`);\n  return \"source-over\";\n}\nfunction incrementCachedImageMaskCount(data) {\n  if (data.fn === OPS.paintImageMaskXObject && data.args[0]?.count > 0) {\n    data.args[0].count++;\n  }\n}\nclass TimeSlotManager {\n  static TIME_SLOT_DURATION_MS = 20;\n  static CHECK_TIME_EVERY = 100;\n  constructor() {\n    this.reset();\n  }\n  check() {\n    if (++this.checked < TimeSlotManager.CHECK_TIME_EVERY) {\n      return false;\n    }\n    this.checked = 0;\n    return this.endTime <= Date.now();\n  }\n  reset() {\n    this.endTime = Date.now() + TimeSlotManager.TIME_SLOT_DURATION_MS;\n    this.checked = 0;\n  }\n}\nclass PartialEvaluator {\n  constructor({\n    xref,\n    handler,\n    pageIndex,\n    idFactory,\n    fontCache,\n    builtInCMapCache,\n    standardFontDataCache,\n    globalImageCache,\n    systemFontCache,\n    options = null\n  }) {\n    this.xref = xref;\n    this.handler = handler;\n    this.pageIndex = pageIndex;\n    this.idFactory = idFactory;\n    this.fontCache = fontCache;\n    this.builtInCMapCache = builtInCMapCache;\n    this.standardFontDataCache = standardFontDataCache;\n    this.globalImageCache = globalImageCache;\n    this.systemFontCache = systemFontCache;\n    this.options = options || DefaultPartialEvaluatorOptions;\n    this.type3FontRefs = null;\n    this._regionalImageCache = new RegionalImageCache();\n    this._fetchBuiltInCMapBound = this.fetchBuiltInCMap.bind(this);\n    ImageResizer.setMaxArea(this.options.canvasMaxAreaInBytes);\n  }\n  get _pdfFunctionFactory() {\n    const pdfFunctionFactory = new PDFFunctionFactory({\n      xref: this.xref,\n      isEvalSupported: this.options.isEvalSupported\n    });\n    return shadow(this, \"_pdfFunctionFactory\", pdfFunctionFactory);\n  }\n  get parsingType3Font() {\n    return !!this.type3FontRefs;\n  }\n  clone(newOptions = null) {\n    const newEvaluator = Object.create(this);\n    newEvaluator.options = Object.assign(Object.create(null), this.options, newOptions);\n    return newEvaluator;\n  }\n  hasBlendModes(resources, nonBlendModesSet) {\n    if (!(resources instanceof Dict)) {\n      return false;\n    }\n    if (resources.objId && nonBlendModesSet.has(resources.objId)) {\n      return false;\n    }\n    const processed = new RefSet(nonBlendModesSet);\n    if (resources.objId) {\n      processed.put(resources.objId);\n    }\n    const nodes = [resources],\n      xref = this.xref;\n    while (nodes.length) {\n      const node = nodes.shift();\n      const graphicStates = node.get(\"ExtGState\");\n      if (graphicStates instanceof Dict) {\n        for (let graphicState of graphicStates.getRawValues()) {\n          if (graphicState instanceof Ref) {\n            if (processed.has(graphicState)) {\n              continue;\n            }\n            try {\n              graphicState = xref.fetch(graphicState);\n            } catch (ex) {\n              processed.put(graphicState);\n              info(`hasBlendModes - ignoring ExtGState: \"${ex}\".`);\n              continue;\n            }\n          }\n          if (!(graphicState instanceof Dict)) {\n            continue;\n          }\n          if (graphicState.objId) {\n            processed.put(graphicState.objId);\n          }\n          const bm = graphicState.get(\"BM\");\n          if (bm instanceof Name) {\n            if (bm.name !== \"Normal\") {\n              return true;\n            }\n            continue;\n          }\n          if (bm !== undefined && Array.isArray(bm)) {\n            for (const element of bm) {\n              if (element instanceof Name && element.name !== \"Normal\") {\n                return true;\n              }\n            }\n          }\n        }\n      }\n      const xObjects = node.get(\"XObject\");\n      if (!(xObjects instanceof Dict)) {\n        continue;\n      }\n      for (let xObject of xObjects.getRawValues()) {\n        if (xObject instanceof Ref) {\n          if (processed.has(xObject)) {\n            continue;\n          }\n          try {\n            xObject = xref.fetch(xObject);\n          } catch (ex) {\n            processed.put(xObject);\n            info(`hasBlendModes - ignoring XObject: \"${ex}\".`);\n            continue;\n          }\n        }\n        if (!(xObject instanceof BaseStream)) {\n          continue;\n        }\n        if (xObject.dict.objId) {\n          processed.put(xObject.dict.objId);\n        }\n        const xResources = xObject.dict.get(\"Resources\");\n        if (!(xResources instanceof Dict)) {\n          continue;\n        }\n        if (xResources.objId && processed.has(xResources.objId)) {\n          continue;\n        }\n        nodes.push(xResources);\n        if (xResources.objId) {\n          processed.put(xResources.objId);\n        }\n      }\n    }\n    for (const ref of processed) {\n      nonBlendModesSet.put(ref);\n    }\n    return false;\n  }\n  async fetchBuiltInCMap(name) {\n    const cachedData = this.builtInCMapCache.get(name);\n    if (cachedData) {\n      return cachedData;\n    }\n    let data;\n    if (this.options.cMapUrl !== null) {\n      const url = `${this.options.cMapUrl}${name}.bcmap`;\n      const response = await fetch(url);\n      if (!response.ok) {\n        throw new Error(`fetchBuiltInCMap: failed to fetch file \"${url}\" with \"${response.statusText}\".`);\n      }\n      data = {\n        cMapData: new Uint8Array(await response.arrayBuffer()),\n        compressionType: CMapCompressionType.BINARY\n      };\n    } else {\n      data = await this.handler.sendWithPromise(\"FetchBuiltInCMap\", {\n        name\n      });\n    }\n    if (data.compressionType !== CMapCompressionType.NONE) {\n      this.builtInCMapCache.set(name, data);\n    }\n    return data;\n  }\n  async fetchStandardFontData(name) {\n    const cachedData = this.standardFontDataCache.get(name);\n    if (cachedData) {\n      return new Stream(cachedData);\n    }\n    if (this.options.useSystemFonts && name !== \"Symbol\" && name !== \"ZapfDingbats\") {\n      return null;\n    }\n    const standardFontNameToFileName = getFontNameToFileMap(),\n      filename = standardFontNameToFileName[name];\n    let data;\n    if (this.options.standardFontDataUrl !== null) {\n      const url = `${this.options.standardFontDataUrl}${filename}`;\n      const response = await fetch(url);\n      if (!response.ok) {\n        warn(`fetchStandardFontData: failed to fetch file \"${url}\" with \"${response.statusText}\".`);\n      } else {\n        data = new Uint8Array(await response.arrayBuffer());\n      }\n    } else {\n      try {\n        data = await this.handler.sendWithPromise(\"FetchStandardFontData\", {\n          filename\n        });\n      } catch (e) {\n        warn(`fetchStandardFontData: failed to fetch file \"${filename}\" with \"${e}\".`);\n      }\n    }\n    if (!data) {\n      return null;\n    }\n    this.standardFontDataCache.set(name, data);\n    return new Stream(data);\n  }\n  async buildFormXObject(resources, xobj, smask, operatorList, task, initialState, localColorSpaceCache) {\n    const dict = xobj.dict;\n    const matrix = lookupMatrix(dict.getArray(\"Matrix\"), null);\n    const bbox = lookupNormalRect(dict.getArray(\"BBox\"), null);\n    let optionalContent, groupOptions;\n    if (dict.has(\"OC\")) {\n      optionalContent = await this.parseMarkedContentProps(dict.get(\"OC\"), resources);\n    }\n    if (optionalContent !== undefined) {\n      operatorList.addOp(OPS.beginMarkedContentProps, [\"OC\", optionalContent]);\n    }\n    const group = dict.get(\"Group\");\n    if (group) {\n      groupOptions = {\n        matrix,\n        bbox,\n        smask,\n        isolated: false,\n        knockout: false\n      };\n      const groupSubtype = group.get(\"S\");\n      let colorSpace = null;\n      if (isName(groupSubtype, \"Transparency\")) {\n        groupOptions.isolated = group.get(\"I\") || false;\n        groupOptions.knockout = group.get(\"K\") || false;\n        if (group.has(\"CS\")) {\n          const cs = group.getRaw(\"CS\");\n          const cachedColorSpace = ColorSpace.getCached(cs, this.xref, localColorSpaceCache);\n          if (cachedColorSpace) {\n            colorSpace = cachedColorSpace;\n          } else {\n            colorSpace = await this.parseColorSpace({\n              cs,\n              resources,\n              localColorSpaceCache\n            });\n          }\n        }\n      }\n      if (smask?.backdrop) {\n        colorSpace ||= ColorSpace.singletons.rgb;\n        smask.backdrop = colorSpace.getRgb(smask.backdrop, 0);\n      }\n      operatorList.addOp(OPS.beginGroup, [groupOptions]);\n    }\n    const args = group ? [matrix, null] : [matrix, bbox];\n    operatorList.addOp(OPS.paintFormXObjectBegin, args);\n    await this.getOperatorList({\n      stream: xobj,\n      task,\n      resources: dict.get(\"Resources\") || resources,\n      operatorList,\n      initialState\n    });\n    operatorList.addOp(OPS.paintFormXObjectEnd, []);\n    if (group) {\n      operatorList.addOp(OPS.endGroup, [groupOptions]);\n    }\n    if (optionalContent !== undefined) {\n      operatorList.addOp(OPS.endMarkedContent, []);\n    }\n  }\n  _sendImgData(objId, imgData, cacheGlobally = false) {\n    const transfers = imgData ? [imgData.bitmap || imgData.data.buffer] : null;\n    if (this.parsingType3Font || cacheGlobally) {\n      return this.handler.send(\"commonobj\", [objId, \"Image\", imgData], transfers);\n    }\n    return this.handler.send(\"obj\", [objId, this.pageIndex, \"Image\", imgData], transfers);\n  }\n  async buildPaintImageXObject({\n    resources,\n    image,\n    isInline = false,\n    operatorList,\n    cacheKey,\n    localImageCache,\n    localColorSpaceCache\n  }) {\n    const dict = image.dict;\n    const imageRef = dict.objId;\n    const w = dict.get(\"W\", \"Width\");\n    const h = dict.get(\"H\", \"Height\");\n    if (!(w && typeof w === \"number\") || !(h && typeof h === \"number\")) {\n      warn(\"Image dimensions are missing, or not numbers.\");\n      return;\n    }\n    const maxImageSize = this.options.maxImageSize;\n    if (maxImageSize !== -1 && w * h > maxImageSize) {\n      const msg = \"Image exceeded maximum allowed size and was removed.\";\n      if (this.options.ignoreErrors) {\n        warn(msg);\n        return;\n      }\n      throw new Error(msg);\n    }\n    let optionalContent;\n    if (dict.has(\"OC\")) {\n      optionalContent = await this.parseMarkedContentProps(dict.get(\"OC\"), resources);\n    }\n    const imageMask = dict.get(\"IM\", \"ImageMask\") || false;\n    let imgData, args;\n    if (imageMask) {\n      const interpolate = dict.get(\"I\", \"Interpolate\");\n      const bitStrideLength = w + 7 >> 3;\n      const imgArray = image.getBytes(bitStrideLength * h);\n      const decode = dict.getArray(\"D\", \"Decode\");\n      if (this.parsingType3Font) {\n        imgData = PDFImage.createRawMask({\n          imgArray,\n          width: w,\n          height: h,\n          imageIsFromDecodeStream: image instanceof DecodeStream,\n          inverseDecode: decode?.[0] > 0,\n          interpolate\n        });\n        imgData.cached = !!cacheKey;\n        args = [imgData];\n        operatorList.addImageOps(OPS.paintImageMaskXObject, args, optionalContent);\n        if (cacheKey) {\n          const cacheData = {\n            fn: OPS.paintImageMaskXObject,\n            args,\n            optionalContent\n          };\n          localImageCache.set(cacheKey, imageRef, cacheData);\n          if (imageRef) {\n            this._regionalImageCache.set(null, imageRef, cacheData);\n          }\n        }\n        return;\n      }\n      imgData = await PDFImage.createMask({\n        imgArray,\n        width: w,\n        height: h,\n        imageIsFromDecodeStream: image instanceof DecodeStream,\n        inverseDecode: decode?.[0] > 0,\n        interpolate,\n        isOffscreenCanvasSupported: this.options.isOffscreenCanvasSupported\n      });\n      if (imgData.isSingleOpaquePixel) {\n        operatorList.addImageOps(OPS.paintSolidColorImageMask, [], optionalContent);\n        if (cacheKey) {\n          const cacheData = {\n            fn: OPS.paintSolidColorImageMask,\n            args: [],\n            optionalContent\n          };\n          localImageCache.set(cacheKey, imageRef, cacheData);\n          if (imageRef) {\n            this._regionalImageCache.set(null, imageRef, cacheData);\n          }\n        }\n        return;\n      }\n      const objId = `mask_${this.idFactory.createObjId()}`;\n      operatorList.addDependency(objId);\n      imgData.dataLen = imgData.bitmap ? imgData.width * imgData.height * 4 : imgData.data.length;\n      this._sendImgData(objId, imgData);\n      args = [{\n        data: objId,\n        width: imgData.width,\n        height: imgData.height,\n        interpolate: imgData.interpolate,\n        count: 1\n      }];\n      operatorList.addImageOps(OPS.paintImageMaskXObject, args, optionalContent);\n      if (cacheKey) {\n        const cacheData = {\n          fn: OPS.paintImageMaskXObject,\n          args,\n          optionalContent\n        };\n        localImageCache.set(cacheKey, imageRef, cacheData);\n        if (imageRef) {\n          this._regionalImageCache.set(null, imageRef, cacheData);\n        }\n      }\n      return;\n    }\n    const SMALL_IMAGE_DIMENSIONS = 200;\n    if (isInline && w + h < SMALL_IMAGE_DIMENSIONS && !dict.has(\"SMask\") && !dict.has(\"Mask\")) {\n      try {\n        const imageObj = new PDFImage({\n          xref: this.xref,\n          res: resources,\n          image,\n          isInline,\n          pdfFunctionFactory: this._pdfFunctionFactory,\n          localColorSpaceCache\n        });\n        imgData = await imageObj.createImageData(true, false);\n        operatorList.isOffscreenCanvasSupported = this.options.isOffscreenCanvasSupported;\n        operatorList.addImageOps(OPS.paintInlineImageXObject, [imgData], optionalContent);\n      } catch (reason) {\n        const msg = `Unable to decode inline image: \"${reason}\".`;\n        if (!this.options.ignoreErrors) {\n          throw new Error(msg);\n        }\n        warn(msg);\n      }\n      return;\n    }\n    let objId = `img_${this.idFactory.createObjId()}`,\n      cacheGlobally = false;\n    if (this.parsingType3Font) {\n      objId = `${this.idFactory.getDocId()}_type3_${objId}`;\n    } else if (cacheKey && imageRef) {\n      cacheGlobally = this.globalImageCache.shouldCache(imageRef, this.pageIndex);\n      if (cacheGlobally) {\n        assert(!isInline, \"Cannot cache an inline image globally.\");\n        objId = `${this.idFactory.getDocId()}_${objId}`;\n      }\n    }\n    operatorList.addDependency(objId);\n    args = [objId, w, h];\n    operatorList.addImageOps(OPS.paintImageXObject, args, optionalContent);\n    if (cacheGlobally) {\n      if (this.globalImageCache.hasDecodeFailed(imageRef)) {\n        this.globalImageCache.setData(imageRef, {\n          objId,\n          fn: OPS.paintImageXObject,\n          args,\n          optionalContent,\n          byteSize: 0\n        });\n        this._sendImgData(objId, null, cacheGlobally);\n        return;\n      }\n      if (w * h > 250000 || dict.has(\"SMask\") || dict.has(\"Mask\")) {\n        const localLength = await this.handler.sendWithPromise(\"commonobj\", [objId, \"CopyLocalImage\", {\n          imageRef\n        }]);\n        if (localLength) {\n          this.globalImageCache.setData(imageRef, {\n            objId,\n            fn: OPS.paintImageXObject,\n            args,\n            optionalContent,\n            byteSize: 0\n          });\n          this.globalImageCache.addByteSize(imageRef, localLength);\n          return;\n        }\n      }\n    }\n    PDFImage.buildImage({\n      xref: this.xref,\n      res: resources,\n      image,\n      isInline,\n      pdfFunctionFactory: this._pdfFunctionFactory,\n      localColorSpaceCache\n    }).then(async imageObj => {\n      imgData = await imageObj.createImageData(false, this.options.isOffscreenCanvasSupported);\n      imgData.dataLen = imgData.bitmap ? imgData.width * imgData.height * 4 : imgData.data.length;\n      imgData.ref = imageRef;\n      if (cacheGlobally) {\n        this.globalImageCache.addByteSize(imageRef, imgData.dataLen);\n      }\n      return this._sendImgData(objId, imgData, cacheGlobally);\n    }).catch(reason => {\n      warn(`Unable to decode image \"${objId}\": \"${reason}\".`);\n      if (imageRef) {\n        this.globalImageCache.addDecodeFailed(imageRef);\n      }\n      return this._sendImgData(objId, null, cacheGlobally);\n    });\n    if (cacheKey) {\n      const cacheData = {\n        fn: OPS.paintImageXObject,\n        args,\n        optionalContent\n      };\n      localImageCache.set(cacheKey, imageRef, cacheData);\n      if (imageRef) {\n        this._regionalImageCache.set(null, imageRef, cacheData);\n        if (cacheGlobally) {\n          this.globalImageCache.setData(imageRef, {\n            objId,\n            fn: OPS.paintImageXObject,\n            args,\n            optionalContent,\n            byteSize: 0\n          });\n        }\n      }\n    }\n  }\n  handleSMask(smask, resources, operatorList, task, stateManager, localColorSpaceCache) {\n    const smaskContent = smask.get(\"G\");\n    const smaskOptions = {\n      subtype: smask.get(\"S\").name,\n      backdrop: smask.get(\"BC\")\n    };\n    const transferObj = smask.get(\"TR\");\n    if (isPDFFunction(transferObj)) {\n      const transferFn = this._pdfFunctionFactory.create(transferObj);\n      const transferMap = new Uint8Array(256);\n      const tmp = new Float32Array(1);\n      for (let i = 0; i < 256; i++) {\n        tmp[0] = i / 255;\n        transferFn(tmp, 0, tmp, 0);\n        transferMap[i] = tmp[0] * 255 | 0;\n      }\n      smaskOptions.transferMap = transferMap;\n    }\n    return this.buildFormXObject(resources, smaskContent, smaskOptions, operatorList, task, stateManager.state.clone(), localColorSpaceCache);\n  }\n  handleTransferFunction(tr) {\n    let transferArray;\n    if (Array.isArray(tr)) {\n      transferArray = tr;\n    } else if (isPDFFunction(tr)) {\n      transferArray = [tr];\n    } else {\n      return null;\n    }\n    const transferMaps = [];\n    let numFns = 0,\n      numEffectfulFns = 0;\n    for (const entry of transferArray) {\n      const transferObj = this.xref.fetchIfRef(entry);\n      numFns++;\n      if (isName(transferObj, \"Identity\")) {\n        transferMaps.push(null);\n        continue;\n      } else if (!isPDFFunction(transferObj)) {\n        return null;\n      }\n      const transferFn = this._pdfFunctionFactory.create(transferObj);\n      const transferMap = new Uint8Array(256),\n        tmp = new Float32Array(1);\n      for (let j = 0; j < 256; j++) {\n        tmp[0] = j / 255;\n        transferFn(tmp, 0, tmp, 0);\n        transferMap[j] = tmp[0] * 255 | 0;\n      }\n      transferMaps.push(transferMap);\n      numEffectfulFns++;\n    }\n    if (!(numFns === 1 || numFns === 4)) {\n      return null;\n    }\n    if (numEffectfulFns === 0) {\n      return null;\n    }\n    return transferMaps;\n  }\n  handleTilingType(fn, color, resources, pattern, patternDict, operatorList, task, localTilingPatternCache) {\n    const tilingOpList = new OperatorList();\n    const patternResources = Dict.merge({\n      xref: this.xref,\n      dictArray: [patternDict.get(\"Resources\"), resources]\n    });\n    return this.getOperatorList({\n      stream: pattern,\n      task,\n      resources: patternResources,\n      operatorList: tilingOpList\n    }).then(function () {\n      const operatorListIR = tilingOpList.getIR();\n      const tilingPatternIR = getTilingPatternIR(operatorListIR, patternDict, color);\n      operatorList.addDependencies(tilingOpList.dependencies);\n      operatorList.addOp(fn, tilingPatternIR);\n      if (patternDict.objId) {\n        localTilingPatternCache.set(null, patternDict.objId, {\n          operatorListIR,\n          dict: patternDict\n        });\n      }\n    }).catch(reason => {\n      if (reason instanceof AbortException) {\n        return;\n      }\n      if (this.options.ignoreErrors) {\n        warn(`handleTilingType - ignoring pattern: \"${reason}\".`);\n        return;\n      }\n      throw reason;\n    });\n  }\n  async handleSetFont(resources, fontArgs, fontRef, operatorList, task, state, fallbackFontDict = null, cssFontInfo = null) {\n    const fontName = fontArgs?.[0] instanceof Name ? fontArgs[0].name : null;\n    let translated = await this.loadFont(fontName, fontRef, resources, fallbackFontDict, cssFontInfo);\n    if (translated.font.isType3Font) {\n      try {\n        await translated.loadType3Data(this, resources, task);\n        operatorList.addDependencies(translated.type3Dependencies);\n      } catch (reason) {\n        translated = new TranslatedFont({\n          loadedName: \"g_font_error\",\n          font: new ErrorFont(`Type3 font load error: ${reason}`),\n          dict: translated.font,\n          evaluatorOptions: this.options\n        });\n      }\n    }\n    state.font = translated.font;\n    translated.send(this.handler);\n    return translated.loadedName;\n  }\n  handleText(chars, state) {\n    const font = state.font;\n    const glyphs = font.charsToGlyphs(chars);\n    if (font.data) {\n      const isAddToPathSet = !!(state.textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG);\n      if (isAddToPathSet || state.fillColorSpace.name === \"Pattern\" || font.disableFontFace || this.options.disableFontFace) {\n        PartialEvaluator.buildFontPaths(font, glyphs, this.handler, this.options);\n      }\n    }\n    return glyphs;\n  }\n  ensureStateFont(state) {\n    if (state.font) {\n      return;\n    }\n    const reason = new FormatError(\"Missing setFont (Tf) operator before text rendering operator.\");\n    if (this.options.ignoreErrors) {\n      warn(`ensureStateFont: \"${reason}\".`);\n      return;\n    }\n    throw reason;\n  }\n  async setGState({\n    resources,\n    gState,\n    operatorList,\n    cacheKey,\n    task,\n    stateManager,\n    localGStateCache,\n    localColorSpaceCache\n  }) {\n    const gStateRef = gState.objId;\n    let isSimpleGState = true;\n    const gStateObj = [];\n    let promise = Promise.resolve();\n    for (const key of gState.getKeys()) {\n      const value = gState.get(key);\n      switch (key) {\n        case \"Type\":\n          break;\n        case \"LW\":\n        case \"LC\":\n        case \"LJ\":\n        case \"ML\":\n        case \"D\":\n        case \"RI\":\n        case \"FL\":\n        case \"CA\":\n        case \"ca\":\n          gStateObj.push([key, value]);\n          break;\n        case \"Font\":\n          isSimpleGState = false;\n          promise = promise.then(() => this.handleSetFont(resources, null, value[0], operatorList, task, stateManager.state).then(function (loadedName) {\n            operatorList.addDependency(loadedName);\n            gStateObj.push([key, [loadedName, value[1]]]);\n          }));\n          break;\n        case \"BM\":\n          gStateObj.push([key, normalizeBlendMode(value)]);\n          break;\n        case \"SMask\":\n          if (isName(value, \"None\")) {\n            gStateObj.push([key, false]);\n            break;\n          }\n          if (value instanceof Dict) {\n            isSimpleGState = false;\n            promise = promise.then(() => this.handleSMask(value, resources, operatorList, task, stateManager, localColorSpaceCache));\n            gStateObj.push([key, true]);\n          } else {\n            warn(\"Unsupported SMask type\");\n          }\n          break;\n        case \"TR\":\n          const transferMaps = this.handleTransferFunction(value);\n          gStateObj.push([key, transferMaps]);\n          break;\n        case \"OP\":\n        case \"op\":\n        case \"OPM\":\n        case \"BG\":\n        case \"BG2\":\n        case \"UCR\":\n        case \"UCR2\":\n        case \"TR2\":\n        case \"HT\":\n        case \"SM\":\n        case \"SA\":\n        case \"AIS\":\n        case \"TK\":\n          info(\"graphic state operator \" + key);\n          break;\n        default:\n          info(\"Unknown graphic state operator \" + key);\n          break;\n      }\n    }\n    await promise;\n    if (gStateObj.length > 0) {\n      operatorList.addOp(OPS.setGState, [gStateObj]);\n    }\n    if (isSimpleGState) {\n      localGStateCache.set(cacheKey, gStateRef, gStateObj);\n    }\n  }\n  loadFont(fontName, font, resources, fallbackFontDict = null, cssFontInfo = null) {\n    const errorFont = async () => {\n      return new TranslatedFont({\n        loadedName: \"g_font_error\",\n        font: new ErrorFont(`Font \"${fontName}\" is not available.`),\n        dict: font,\n        evaluatorOptions: this.options\n      });\n    };\n    let fontRef;\n    if (font) {\n      if (font instanceof Ref) {\n        fontRef = font;\n      }\n    } else {\n      const fontRes = resources.get(\"Font\");\n      if (fontRes) {\n        fontRef = fontRes.getRaw(fontName);\n      }\n    }\n    if (fontRef) {\n      if (this.type3FontRefs?.has(fontRef)) {\n        return errorFont();\n      }\n      if (this.fontCache.has(fontRef)) {\n        return this.fontCache.get(fontRef);\n      }\n      try {\n        font = this.xref.fetchIfRef(fontRef);\n      } catch (ex) {\n        warn(`loadFont - lookup failed: \"${ex}\".`);\n      }\n    }\n    if (!(font instanceof Dict)) {\n      if (!this.options.ignoreErrors && !this.parsingType3Font) {\n        warn(`Font \"${fontName}\" is not available.`);\n        return errorFont();\n      }\n      warn(`Font \"${fontName}\" is not available -- attempting to fallback to a default font.`);\n      font = fallbackFontDict || PartialEvaluator.fallbackFontDict;\n    }\n    if (font.cacheKey && this.fontCache.has(font.cacheKey)) {\n      return this.fontCache.get(font.cacheKey);\n    }\n    const {\n      promise,\n      resolve\n    } = Promise.withResolvers();\n    let preEvaluatedFont;\n    try {\n      preEvaluatedFont = this.preEvaluateFont(font);\n      preEvaluatedFont.cssFontInfo = cssFontInfo;\n    } catch (reason) {\n      warn(`loadFont - preEvaluateFont failed: \"${reason}\".`);\n      return errorFont();\n    }\n    const {\n      descriptor,\n      hash\n    } = preEvaluatedFont;\n    const fontRefIsRef = fontRef instanceof Ref;\n    let fontID;\n    if (hash && descriptor instanceof Dict) {\n      const fontAliases = descriptor.fontAliases ||= Object.create(null);\n      if (fontAliases[hash]) {\n        const aliasFontRef = fontAliases[hash].aliasRef;\n        if (fontRefIsRef && aliasFontRef && this.fontCache.has(aliasFontRef)) {\n          this.fontCache.putAlias(fontRef, aliasFontRef);\n          return this.fontCache.get(fontRef);\n        }\n      } else {\n        fontAliases[hash] = {\n          fontID: this.idFactory.createFontId()\n        };\n      }\n      if (fontRefIsRef) {\n        fontAliases[hash].aliasRef = fontRef;\n      }\n      fontID = fontAliases[hash].fontID;\n    } else {\n      fontID = this.idFactory.createFontId();\n    }\n    assert(fontID?.startsWith(\"f\"), 'The \"fontID\" must be (correctly) defined.');\n    if (fontRefIsRef) {\n      this.fontCache.put(fontRef, promise);\n    } else {\n      font.cacheKey = `cacheKey_${fontID}`;\n      this.fontCache.put(font.cacheKey, promise);\n    }\n    font.loadedName = `${this.idFactory.getDocId()}_${fontID}`;\n    this.translateFont(preEvaluatedFont).then(translatedFont => {\n      resolve(new TranslatedFont({\n        loadedName: font.loadedName,\n        font: translatedFont,\n        dict: font,\n        evaluatorOptions: this.options\n      }));\n    }).catch(reason => {\n      warn(`loadFont - translateFont failed: \"${reason}\".`);\n      resolve(new TranslatedFont({\n        loadedName: font.loadedName,\n        font: new ErrorFont(reason instanceof Error ? reason.message : reason),\n        dict: font,\n        evaluatorOptions: this.options\n      }));\n    });\n    return promise;\n  }\n  buildPath(operatorList, fn, args, parsingText = false) {\n    const lastIndex = operatorList.length - 1;\n    if (!args) {\n      args = [];\n    }\n    if (lastIndex < 0 || operatorList.fnArray[lastIndex] !== OPS.constructPath) {\n      if (parsingText) {\n        warn(`Encountered path operator \"${fn}\" inside of a text object.`);\n        operatorList.addOp(OPS.save, null);\n      }\n      let minMax;\n      switch (fn) {\n        case OPS.rectangle:\n          const x = args[0] + args[2];\n          const y = args[1] + args[3];\n          minMax = [Math.min(args[0], x), Math.min(args[1], y), Math.max(args[0], x), Math.max(args[1], y)];\n          break;\n        case OPS.moveTo:\n        case OPS.lineTo:\n          minMax = [args[0], args[1], args[0], args[1]];\n          break;\n        default:\n          minMax = [Infinity, Infinity, -Infinity, -Infinity];\n          break;\n      }\n      operatorList.addOp(OPS.constructPath, [[fn], args, minMax]);\n      if (parsingText) {\n        operatorList.addOp(OPS.restore, null);\n      }\n    } else {\n      const opArgs = operatorList.argsArray[lastIndex];\n      opArgs[0].push(fn);\n      opArgs[1].push(...args);\n      const minMax = opArgs[2];\n      switch (fn) {\n        case OPS.rectangle:\n          const x = args[0] + args[2];\n          const y = args[1] + args[3];\n          minMax[0] = Math.min(minMax[0], args[0], x);\n          minMax[1] = Math.min(minMax[1], args[1], y);\n          minMax[2] = Math.max(minMax[2], args[0], x);\n          minMax[3] = Math.max(minMax[3], args[1], y);\n          break;\n        case OPS.moveTo:\n        case OPS.lineTo:\n          minMax[0] = Math.min(minMax[0], args[0]);\n          minMax[1] = Math.min(minMax[1], args[1]);\n          minMax[2] = Math.max(minMax[2], args[0]);\n          minMax[3] = Math.max(minMax[3], args[1]);\n          break;\n      }\n    }\n  }\n  parseColorSpace({\n    cs,\n    resources,\n    localColorSpaceCache\n  }) {\n    return ColorSpace.parseAsync({\n      cs,\n      xref: this.xref,\n      resources,\n      pdfFunctionFactory: this._pdfFunctionFactory,\n      localColorSpaceCache\n    }).catch(reason => {\n      if (reason instanceof AbortException) {\n        return null;\n      }\n      if (this.options.ignoreErrors) {\n        warn(`parseColorSpace - ignoring ColorSpace: \"${reason}\".`);\n        return null;\n      }\n      throw reason;\n    });\n  }\n  parseShading({\n    shading,\n    resources,\n    localColorSpaceCache,\n    localShadingPatternCache\n  }) {\n    let id = localShadingPatternCache.get(shading);\n    if (id) {\n      return id;\n    }\n    let patternIR;\n    try {\n      const shadingFill = Pattern.parseShading(shading, this.xref, resources, this._pdfFunctionFactory, localColorSpaceCache);\n      patternIR = shadingFill.getIR();\n    } catch (reason) {\n      if (reason instanceof AbortException) {\n        return null;\n      }\n      if (this.options.ignoreErrors) {\n        warn(`parseShading - ignoring shading: \"${reason}\".`);\n        localShadingPatternCache.set(shading, null);\n        return null;\n      }\n      throw reason;\n    }\n    id = `pattern_${this.idFactory.createObjId()}`;\n    if (this.parsingType3Font) {\n      id = `${this.idFactory.getDocId()}_type3_${id}`;\n    }\n    localShadingPatternCache.set(shading, id);\n    if (this.parsingType3Font) {\n      this.handler.send(\"commonobj\", [id, \"Pattern\", patternIR]);\n    } else {\n      this.handler.send(\"obj\", [id, this.pageIndex, \"Pattern\", patternIR]);\n    }\n    return id;\n  }\n  handleColorN(operatorList, fn, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache, localShadingPatternCache) {\n    const patternName = args.pop();\n    if (patternName instanceof Name) {\n      const rawPattern = patterns.getRaw(patternName.name);\n      const localTilingPattern = rawPattern instanceof Ref && localTilingPatternCache.getByRef(rawPattern);\n      if (localTilingPattern) {\n        try {\n          const color = cs.base ? cs.base.getRgb(args, 0) : null;\n          const tilingPatternIR = getTilingPatternIR(localTilingPattern.operatorListIR, localTilingPattern.dict, color);\n          operatorList.addOp(fn, tilingPatternIR);\n          return undefined;\n        } catch {}\n      }\n      const pattern = this.xref.fetchIfRef(rawPattern);\n      if (pattern) {\n        const dict = pattern instanceof BaseStream ? pattern.dict : pattern;\n        const typeNum = dict.get(\"PatternType\");\n        if (typeNum === PatternType.TILING) {\n          const color = cs.base ? cs.base.getRgb(args, 0) : null;\n          return this.handleTilingType(fn, color, resources, pattern, dict, operatorList, task, localTilingPatternCache);\n        } else if (typeNum === PatternType.SHADING) {\n          const shading = dict.get(\"Shading\");\n          const objId = this.parseShading({\n            shading,\n            resources,\n            localColorSpaceCache,\n            localShadingPatternCache\n          });\n          if (objId) {\n            const matrix = lookupMatrix(dict.getArray(\"Matrix\"), null);\n            operatorList.addOp(fn, [\"Shading\", objId, matrix]);\n          }\n          return undefined;\n        }\n        throw new FormatError(`Unknown PatternType: ${typeNum}`);\n      }\n    }\n    throw new FormatError(`Unknown PatternName: ${patternName}`);\n  }\n  _parseVisibilityExpression(array, nestingCounter, currentResult) {\n    const MAX_NESTING = 10;\n    if (++nestingCounter > MAX_NESTING) {\n      warn(\"Visibility expression is too deeply nested\");\n      return;\n    }\n    const length = array.length;\n    const operator = this.xref.fetchIfRef(array[0]);\n    if (length < 2 || !(operator instanceof Name)) {\n      warn(\"Invalid visibility expression\");\n      return;\n    }\n    switch (operator.name) {\n      case \"And\":\n      case \"Or\":\n      case \"Not\":\n        currentResult.push(operator.name);\n        break;\n      default:\n        warn(`Invalid operator ${operator.name} in visibility expression`);\n        return;\n    }\n    for (let i = 1; i < length; i++) {\n      const raw = array[i];\n      const object = this.xref.fetchIfRef(raw);\n      if (Array.isArray(object)) {\n        const nestedResult = [];\n        currentResult.push(nestedResult);\n        this._parseVisibilityExpression(object, nestingCounter, nestedResult);\n      } else if (raw instanceof Ref) {\n        currentResult.push(raw.toString());\n      }\n    }\n  }\n  async parseMarkedContentProps(contentProperties, resources) {\n    let optionalContent;\n    if (contentProperties instanceof Name) {\n      const properties = resources.get(\"Properties\");\n      optionalContent = properties.get(contentProperties.name);\n    } else if (contentProperties instanceof Dict) {\n      optionalContent = contentProperties;\n    } else {\n      throw new FormatError(\"Optional content properties malformed.\");\n    }\n    const optionalContentType = optionalContent.get(\"Type\")?.name;\n    if (optionalContentType === \"OCG\") {\n      return {\n        type: optionalContentType,\n        id: optionalContent.objId\n      };\n    } else if (optionalContentType === \"OCMD\") {\n      const expression = optionalContent.get(\"VE\");\n      if (Array.isArray(expression)) {\n        const result = [];\n        this._parseVisibilityExpression(expression, 0, result);\n        if (result.length > 0) {\n          return {\n            type: \"OCMD\",\n            expression: result\n          };\n        }\n      }\n      const optionalContentGroups = optionalContent.get(\"OCGs\");\n      if (Array.isArray(optionalContentGroups) || optionalContentGroups instanceof Dict) {\n        const groupIds = [];\n        if (Array.isArray(optionalContentGroups)) {\n          for (const ocg of optionalContentGroups) {\n            groupIds.push(ocg.toString());\n          }\n        } else {\n          groupIds.push(optionalContentGroups.objId);\n        }\n        return {\n          type: optionalContentType,\n          ids: groupIds,\n          policy: optionalContent.get(\"P\") instanceof Name ? optionalContent.get(\"P\").name : null,\n          expression: null\n        };\n      } else if (optionalContentGroups instanceof Ref) {\n        return {\n          type: optionalContentType,\n          id: optionalContentGroups.toString()\n        };\n      }\n    }\n    return null;\n  }\n  getOperatorList({\n    stream,\n    task,\n    resources,\n    operatorList,\n    initialState = null,\n    fallbackFontDict = null\n  }) {\n    resources ||= Dict.empty;\n    initialState ||= new EvalState();\n    if (!operatorList) {\n      throw new Error('getOperatorList: missing \"operatorList\" parameter');\n    }\n    const self = this;\n    const xref = this.xref;\n    let parsingText = false;\n    const localImageCache = new LocalImageCache();\n    const localColorSpaceCache = new LocalColorSpaceCache();\n    const localGStateCache = new LocalGStateCache();\n    const localTilingPatternCache = new LocalTilingPatternCache();\n    const localShadingPatternCache = new Map();\n    const xobjs = resources.get(\"XObject\") || Dict.empty;\n    const patterns = resources.get(\"Pattern\") || Dict.empty;\n    const stateManager = new StateManager(initialState);\n    const preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);\n    const timeSlotManager = new TimeSlotManager();\n    function closePendingRestoreOPS(argument) {\n      for (let i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) {\n        operatorList.addOp(OPS.restore, []);\n      }\n    }\n    return new Promise(function promiseBody(resolve, reject) {\n      const next = function (promise) {\n        Promise.all([promise, operatorList.ready]).then(function () {\n          try {\n            promiseBody(resolve, reject);\n          } catch (ex) {\n            reject(ex);\n          }\n        }, reject);\n      };\n      task.ensureNotTerminated();\n      timeSlotManager.reset();\n      const operation = {};\n      let stop, i, ii, cs, name, isValidName;\n      while (!(stop = timeSlotManager.check())) {\n        operation.args = null;\n        if (!preprocessor.read(operation)) {\n          break;\n        }\n        let args = operation.args;\n        let fn = operation.fn;\n        switch (fn | 0) {\n          case OPS.paintXObject:\n            isValidName = args[0] instanceof Name;\n            name = args[0].name;\n            if (isValidName) {\n              const localImage = localImageCache.getByName(name);\n              if (localImage) {\n                operatorList.addImageOps(localImage.fn, localImage.args, localImage.optionalContent);\n                incrementCachedImageMaskCount(localImage);\n                args = null;\n                continue;\n              }\n            }\n            next(new Promise(function (resolveXObject, rejectXObject) {\n              if (!isValidName) {\n                throw new FormatError(\"XObject must be referred to by name.\");\n              }\n              let xobj = xobjs.getRaw(name);\n              if (xobj instanceof Ref) {\n                const localImage = localImageCache.getByRef(xobj) || self._regionalImageCache.getByRef(xobj);\n                if (localImage) {\n                  operatorList.addImageOps(localImage.fn, localImage.args, localImage.optionalContent);\n                  incrementCachedImageMaskCount(localImage);\n                  resolveXObject();\n                  return;\n                }\n                const globalImage = self.globalImageCache.getData(xobj, self.pageIndex);\n                if (globalImage) {\n                  operatorList.addDependency(globalImage.objId);\n                  operatorList.addImageOps(globalImage.fn, globalImage.args, globalImage.optionalContent);\n                  resolveXObject();\n                  return;\n                }\n                xobj = xref.fetch(xobj);\n              }\n              if (!(xobj instanceof BaseStream)) {\n                throw new FormatError(\"XObject should be a stream\");\n              }\n              const type = xobj.dict.get(\"Subtype\");\n              if (!(type instanceof Name)) {\n                throw new FormatError(\"XObject should have a Name subtype\");\n              }\n              if (type.name === \"Form\") {\n                stateManager.save();\n                self.buildFormXObject(resources, xobj, null, operatorList, task, stateManager.state.clone(), localColorSpaceCache).then(function () {\n                  stateManager.restore();\n                  resolveXObject();\n                }, rejectXObject);\n                return;\n              } else if (type.name === \"Image\") {\n                self.buildPaintImageXObject({\n                  resources,\n                  image: xobj,\n                  operatorList,\n                  cacheKey: name,\n                  localImageCache,\n                  localColorSpaceCache\n                }).then(resolveXObject, rejectXObject);\n                return;\n              } else if (type.name === \"PS\") {\n                info(\"Ignored XObject subtype PS\");\n              } else {\n                throw new FormatError(`Unhandled XObject subtype ${type.name}`);\n              }\n              resolveXObject();\n            }).catch(function (reason) {\n              if (reason instanceof AbortException) {\n                return;\n              }\n              if (self.options.ignoreErrors) {\n                warn(`getOperatorList - ignoring XObject: \"${reason}\".`);\n                return;\n              }\n              throw reason;\n            }));\n            return;\n          case OPS.setFont:\n            var fontSize = args[1];\n            next(self.handleSetFont(resources, args, null, operatorList, task, stateManager.state, fallbackFontDict).then(function (loadedName) {\n              operatorList.addDependency(loadedName);\n              operatorList.addOp(OPS.setFont, [loadedName, fontSize]);\n            }));\n            return;\n          case OPS.beginText:\n            parsingText = true;\n            break;\n          case OPS.endText:\n            parsingText = false;\n            break;\n          case OPS.endInlineImage:\n            var cacheKey = args[0].cacheKey;\n            if (cacheKey) {\n              const localImage = localImageCache.getByName(cacheKey);\n              if (localImage) {\n                operatorList.addImageOps(localImage.fn, localImage.args, localImage.optionalContent);\n                incrementCachedImageMaskCount(localImage);\n                args = null;\n                continue;\n              }\n            }\n            next(self.buildPaintImageXObject({\n              resources,\n              image: args[0],\n              isInline: true,\n              operatorList,\n              cacheKey,\n              localImageCache,\n              localColorSpaceCache\n            }));\n            return;\n          case OPS.showText:\n            if (!stateManager.state.font) {\n              self.ensureStateFont(stateManager.state);\n              continue;\n            }\n            args[0] = self.handleText(args[0], stateManager.state);\n            break;\n          case OPS.showSpacedText:\n            if (!stateManager.state.font) {\n              self.ensureStateFont(stateManager.state);\n              continue;\n            }\n            var combinedGlyphs = [];\n            var state = stateManager.state;\n            for (const arrItem of args[0]) {\n              if (typeof arrItem === \"string\") {\n                combinedGlyphs.push(...self.handleText(arrItem, state));\n              } else if (typeof arrItem === \"number\") {\n                combinedGlyphs.push(arrItem);\n              }\n            }\n            args[0] = combinedGlyphs;\n            fn = OPS.showText;\n            break;\n          case OPS.nextLineShowText:\n            if (!stateManager.state.font) {\n              self.ensureStateFont(stateManager.state);\n              continue;\n            }\n            operatorList.addOp(OPS.nextLine);\n            args[0] = self.handleText(args[0], stateManager.state);\n            fn = OPS.showText;\n            break;\n          case OPS.nextLineSetSpacingShowText:\n            if (!stateManager.state.font) {\n              self.ensureStateFont(stateManager.state);\n              continue;\n            }\n            operatorList.addOp(OPS.nextLine);\n            operatorList.addOp(OPS.setWordSpacing, [args.shift()]);\n            operatorList.addOp(OPS.setCharSpacing, [args.shift()]);\n            args[0] = self.handleText(args[0], stateManager.state);\n            fn = OPS.showText;\n            break;\n          case OPS.setTextRenderingMode:\n            stateManager.state.textRenderingMode = args[0];\n            break;\n          case OPS.setFillColorSpace:\n            {\n              const cachedColorSpace = ColorSpace.getCached(args[0], xref, localColorSpaceCache);\n              if (cachedColorSpace) {\n                stateManager.state.fillColorSpace = cachedColorSpace;\n                continue;\n              }\n              next(self.parseColorSpace({\n                cs: args[0],\n                resources,\n                localColorSpaceCache\n              }).then(function (colorSpace) {\n                if (colorSpace) {\n                  stateManager.state.fillColorSpace = colorSpace;\n                }\n              }));\n              return;\n            }\n          case OPS.setStrokeColorSpace:\n            {\n              const cachedColorSpace = ColorSpace.getCached(args[0], xref, localColorSpaceCache);\n              if (cachedColorSpace) {\n                stateManager.state.strokeColorSpace = cachedColorSpace;\n                continue;\n              }\n              next(self.parseColorSpace({\n                cs: args[0],\n                resources,\n                localColorSpaceCache\n              }).then(function (colorSpace) {\n                if (colorSpace) {\n                  stateManager.state.strokeColorSpace = colorSpace;\n                }\n              }));\n              return;\n            }\n          case OPS.setFillColor:\n            cs = stateManager.state.fillColorSpace;\n            args = cs.getRgb(args, 0);\n            fn = OPS.setFillRGBColor;\n            break;\n          case OPS.setStrokeColor:\n            cs = stateManager.state.strokeColorSpace;\n            args = cs.getRgb(args, 0);\n            fn = OPS.setStrokeRGBColor;\n            break;\n          case OPS.setFillGray:\n            stateManager.state.fillColorSpace = ColorSpace.singletons.gray;\n            args = ColorSpace.singletons.gray.getRgb(args, 0);\n            fn = OPS.setFillRGBColor;\n            break;\n          case OPS.setStrokeGray:\n            stateManager.state.strokeColorSpace = ColorSpace.singletons.gray;\n            args = ColorSpace.singletons.gray.getRgb(args, 0);\n            fn = OPS.setStrokeRGBColor;\n            break;\n          case OPS.setFillCMYKColor:\n            stateManager.state.fillColorSpace = ColorSpace.singletons.cmyk;\n            args = ColorSpace.singletons.cmyk.getRgb(args, 0);\n            fn = OPS.setFillRGBColor;\n            break;\n          case OPS.setStrokeCMYKColor:\n            stateManager.state.strokeColorSpace = ColorSpace.singletons.cmyk;\n            args = ColorSpace.singletons.cmyk.getRgb(args, 0);\n            fn = OPS.setStrokeRGBColor;\n            break;\n          case OPS.setFillRGBColor:\n            stateManager.state.fillColorSpace = ColorSpace.singletons.rgb;\n            args = ColorSpace.singletons.rgb.getRgb(args, 0);\n            break;\n          case OPS.setStrokeRGBColor:\n            stateManager.state.strokeColorSpace = ColorSpace.singletons.rgb;\n            args = ColorSpace.singletons.rgb.getRgb(args, 0);\n            break;\n          case OPS.setFillColorN:\n            cs = stateManager.state.fillColorSpace;\n            if (cs.name === \"Pattern\") {\n              next(self.handleColorN(operatorList, OPS.setFillColorN, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache, localShadingPatternCache));\n              return;\n            }\n            args = cs.getRgb(args, 0);\n            fn = OPS.setFillRGBColor;\n            break;\n          case OPS.setStrokeColorN:\n            cs = stateManager.state.strokeColorSpace;\n            if (cs.name === \"Pattern\") {\n              next(self.handleColorN(operatorList, OPS.setStrokeColorN, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache, localShadingPatternCache));\n              return;\n            }\n            args = cs.getRgb(args, 0);\n            fn = OPS.setStrokeRGBColor;\n            break;\n          case OPS.shadingFill:\n            var shadingRes = resources.get(\"Shading\");\n            if (!shadingRes) {\n              throw new FormatError(\"No shading resource found\");\n            }\n            var shading = shadingRes.get(args[0].name);\n            if (!shading) {\n              throw new FormatError(\"No shading object found\");\n            }\n            const patternId = self.parseShading({\n              shading,\n              resources,\n              localColorSpaceCache,\n              localShadingPatternCache\n            });\n            if (!patternId) {\n              continue;\n            }\n            args = [patternId];\n            fn = OPS.shadingFill;\n            break;\n          case OPS.setGState:\n            isValidName = args[0] instanceof Name;\n            name = args[0].name;\n            if (isValidName) {\n              const localGStateObj = localGStateCache.getByName(name);\n              if (localGStateObj) {\n                if (localGStateObj.length > 0) {\n                  operatorList.addOp(OPS.setGState, [localGStateObj]);\n                }\n                args = null;\n                continue;\n              }\n            }\n            next(new Promise(function (resolveGState, rejectGState) {\n              if (!isValidName) {\n                throw new FormatError(\"GState must be referred to by name.\");\n              }\n              const extGState = resources.get(\"ExtGState\");\n              if (!(extGState instanceof Dict)) {\n                throw new FormatError(\"ExtGState should be a dictionary.\");\n              }\n              const gState = extGState.get(name);\n              if (!(gState instanceof Dict)) {\n                throw new FormatError(\"GState should be a dictionary.\");\n              }\n              self.setGState({\n                resources,\n                gState,\n                operatorList,\n                cacheKey: name,\n                task,\n                stateManager,\n                localGStateCache,\n                localColorSpaceCache\n              }).then(resolveGState, rejectGState);\n            }).catch(function (reason) {\n              if (reason instanceof AbortException) {\n                return;\n              }\n              if (self.options.ignoreErrors) {\n                warn(`getOperatorList - ignoring ExtGState: \"${reason}\".`);\n                return;\n              }\n              throw reason;\n            }));\n            return;\n          case OPS.moveTo:\n          case OPS.lineTo:\n          case OPS.curveTo:\n          case OPS.curveTo2:\n          case OPS.curveTo3:\n          case OPS.closePath:\n          case OPS.rectangle:\n            self.buildPath(operatorList, fn, args, parsingText);\n            continue;\n          case OPS.markPoint:\n          case OPS.markPointProps:\n          case OPS.beginCompat:\n          case OPS.endCompat:\n            continue;\n          case OPS.beginMarkedContentProps:\n            if (!(args[0] instanceof Name)) {\n              warn(`Expected name for beginMarkedContentProps arg0=${args[0]}`);\n              operatorList.addOp(OPS.beginMarkedContentProps, [\"OC\", null]);\n              continue;\n            }\n            if (args[0].name === \"OC\") {\n              next(self.parseMarkedContentProps(args[1], resources).then(data => {\n                operatorList.addOp(OPS.beginMarkedContentProps, [\"OC\", data]);\n              }).catch(reason => {\n                if (reason instanceof AbortException) {\n                  return;\n                }\n                if (self.options.ignoreErrors) {\n                  warn(`getOperatorList - ignoring beginMarkedContentProps: \"${reason}\".`);\n                  operatorList.addOp(OPS.beginMarkedContentProps, [\"OC\", null]);\n                  return;\n                }\n                throw reason;\n              }));\n              return;\n            }\n            args = [args[0].name, args[1] instanceof Dict ? args[1].get(\"MCID\") : null];\n            break;\n          case OPS.beginMarkedContent:\n          case OPS.endMarkedContent:\n          default:\n            if (args !== null) {\n              for (i = 0, ii = args.length; i < ii; i++) {\n                if (args[i] instanceof Dict) {\n                  break;\n                }\n              }\n              if (i < ii) {\n                warn(\"getOperatorList - ignoring operator: \" + fn);\n                continue;\n              }\n            }\n        }\n        operatorList.addOp(fn, args);\n      }\n      if (stop) {\n        next(deferred);\n        return;\n      }\n      closePendingRestoreOPS();\n      resolve();\n    }).catch(reason => {\n      if (reason instanceof AbortException) {\n        return;\n      }\n      if (this.options.ignoreErrors) {\n        warn(`getOperatorList - ignoring errors during \"${task.name}\" ` + `task: \"${reason}\".`);\n        closePendingRestoreOPS();\n        return;\n      }\n      throw reason;\n    });\n  }\n  getTextContent({\n    stream,\n    task,\n    resources,\n    stateManager = null,\n    includeMarkedContent = false,\n    sink,\n    seenStyles = new Set(),\n    viewBox,\n    lang = null,\n    markedContentData = null,\n    disableNormalization = false,\n    keepWhiteSpace = false\n  }) {\n    resources ||= Dict.empty;\n    stateManager ||= new StateManager(new TextState());\n    if (includeMarkedContent) {\n      markedContentData ||= {\n        level: 0\n      };\n    }\n    const textContent = {\n      items: [],\n      styles: Object.create(null),\n      lang\n    };\n    const textContentItem = {\n      initialized: false,\n      str: [],\n      totalWidth: 0,\n      totalHeight: 0,\n      width: 0,\n      height: 0,\n      vertical: false,\n      prevTransform: null,\n      textAdvanceScale: 0,\n      spaceInFlowMin: 0,\n      spaceInFlowMax: 0,\n      trackingSpaceMin: Infinity,\n      negativeSpaceMax: -Infinity,\n      notASpace: -Infinity,\n      transform: null,\n      fontName: null,\n      hasEOL: false\n    };\n    const twoLastChars = [\" \", \" \"];\n    let twoLastCharsPos = 0;\n    function saveLastChar(char) {\n      const nextPos = (twoLastCharsPos + 1) % 2;\n      const ret = twoLastChars[twoLastCharsPos] !== \" \" && twoLastChars[nextPos] === \" \";\n      twoLastChars[twoLastCharsPos] = char;\n      twoLastCharsPos = nextPos;\n      return !keepWhiteSpace && ret;\n    }\n    function shouldAddWhitepsace() {\n      return !keepWhiteSpace && twoLastChars[twoLastCharsPos] !== \" \" && twoLastChars[(twoLastCharsPos + 1) % 2] === \" \";\n    }\n    function resetLastChars() {\n      twoLastChars[0] = twoLastChars[1] = \" \";\n      twoLastCharsPos = 0;\n    }\n    const TRACKING_SPACE_FACTOR = 0.102;\n    const NOT_A_SPACE_FACTOR = 0.03;\n    const NEGATIVE_SPACE_FACTOR = -0.2;\n    const SPACE_IN_FLOW_MIN_FACTOR = 0.102;\n    const SPACE_IN_FLOW_MAX_FACTOR = 0.6;\n    const VERTICAL_SHIFT_RATIO = 0.25;\n    const self = this;\n    const xref = this.xref;\n    const showSpacedTextBuffer = [];\n    let xobjs = null;\n    const emptyXObjectCache = new LocalImageCache();\n    const emptyGStateCache = new LocalGStateCache();\n    const preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);\n    let textState;\n    function pushWhitespace({\n      width = 0,\n      height = 0,\n      transform = textContentItem.prevTransform,\n      fontName = textContentItem.fontName\n    }) {\n      textContent.items.push({\n        str: \" \",\n        dir: \"ltr\",\n        width,\n        height,\n        transform,\n        fontName,\n        hasEOL: false\n      });\n    }\n    function getCurrentTextTransform() {\n      const font = textState.font;\n      const tsm = [textState.fontSize * textState.textHScale, 0, 0, textState.fontSize, 0, textState.textRise];\n      if (font.isType3Font && (textState.fontSize <= 1 || font.isCharBBox) && !isArrayEqual(textState.fontMatrix, FONT_IDENTITY_MATRIX)) {\n        const glyphHeight = font.bbox[3] - font.bbox[1];\n        if (glyphHeight > 0) {\n          tsm[3] *= glyphHeight * textState.fontMatrix[3];\n        }\n      }\n      return Util.transform(textState.ctm, Util.transform(textState.textMatrix, tsm));\n    }\n    function ensureTextContentItem() {\n      if (textContentItem.initialized) {\n        return textContentItem;\n      }\n      const {\n        font,\n        loadedName\n      } = textState;\n      if (!seenStyles.has(loadedName)) {\n        seenStyles.add(loadedName);\n        textContent.styles[loadedName] = {\n          fontFamily: font.fallbackName,\n          ascent: font.ascent,\n          descent: font.descent,\n          vertical: font.vertical\n        };\n        if (self.options.fontExtraProperties && font.systemFontInfo) {\n          const style = textContent.styles[loadedName];\n          style.fontSubstitution = font.systemFontInfo.css;\n          style.fontSubstitutionLoadedName = font.systemFontInfo.loadedName;\n        }\n      }\n      textContentItem.fontName = loadedName;\n      const trm = textContentItem.transform = getCurrentTextTransform();\n      if (!font.vertical) {\n        textContentItem.width = textContentItem.totalWidth = 0;\n        textContentItem.height = textContentItem.totalHeight = Math.hypot(trm[2], trm[3]);\n        textContentItem.vertical = false;\n      } else {\n        textContentItem.width = textContentItem.totalWidth = Math.hypot(trm[0], trm[1]);\n        textContentItem.height = textContentItem.totalHeight = 0;\n        textContentItem.vertical = true;\n      }\n      const scaleLineX = Math.hypot(textState.textLineMatrix[0], textState.textLineMatrix[1]);\n      const scaleCtmX = Math.hypot(textState.ctm[0], textState.ctm[1]);\n      textContentItem.textAdvanceScale = scaleCtmX * scaleLineX;\n      const {\n        fontSize\n      } = textState;\n      textContentItem.trackingSpaceMin = fontSize * TRACKING_SPACE_FACTOR;\n      textContentItem.notASpace = fontSize * NOT_A_SPACE_FACTOR;\n      textContentItem.negativeSpaceMax = fontSize * NEGATIVE_SPACE_FACTOR;\n      textContentItem.spaceInFlowMin = fontSize * SPACE_IN_FLOW_MIN_FACTOR;\n      textContentItem.spaceInFlowMax = fontSize * SPACE_IN_FLOW_MAX_FACTOR;\n      textContentItem.hasEOL = false;\n      textContentItem.initialized = true;\n      return textContentItem;\n    }\n    function updateAdvanceScale() {\n      if (!textContentItem.initialized) {\n        return;\n      }\n      const scaleLineX = Math.hypot(textState.textLineMatrix[0], textState.textLineMatrix[1]);\n      const scaleCtmX = Math.hypot(textState.ctm[0], textState.ctm[1]);\n      const scaleFactor = scaleCtmX * scaleLineX;\n      if (scaleFactor === textContentItem.textAdvanceScale) {\n        return;\n      }\n      if (!textContentItem.vertical) {\n        textContentItem.totalWidth += textContentItem.width * textContentItem.textAdvanceScale;\n        textContentItem.width = 0;\n      } else {\n        textContentItem.totalHeight += textContentItem.height * textContentItem.textAdvanceScale;\n        textContentItem.height = 0;\n      }\n      textContentItem.textAdvanceScale = scaleFactor;\n    }\n    function runBidiTransform(textChunk) {\n      let text = textChunk.str.join(\"\");\n      if (!disableNormalization) {\n        text = normalizeUnicode(text);\n      }\n      const bidiResult = bidi(text, -1, textChunk.vertical);\n      return {\n        str: bidiResult.str,\n        dir: bidiResult.dir,\n        width: Math.abs(textChunk.totalWidth),\n        height: Math.abs(textChunk.totalHeight),\n        transform: textChunk.transform,\n        fontName: textChunk.fontName,\n        hasEOL: textChunk.hasEOL\n      };\n    }\n    async function handleSetFont(fontName, fontRef) {\n      const translated = await self.loadFont(fontName, fontRef, resources);\n      if (translated.font.isType3Font) {\n        try {\n          await translated.loadType3Data(self, resources, task);\n        } catch {}\n      }\n      textState.loadedName = translated.loadedName;\n      textState.font = translated.font;\n      textState.fontMatrix = translated.font.fontMatrix || FONT_IDENTITY_MATRIX;\n    }\n    function applyInverseRotation(x, y, matrix) {\n      const scale = Math.hypot(matrix[0], matrix[1]);\n      return [(matrix[0] * x + matrix[1] * y) / scale, (matrix[2] * x + matrix[3] * y) / scale];\n    }\n    function compareWithLastPosition(glyphWidth) {\n      const currentTransform = getCurrentTextTransform();\n      let posX = currentTransform[4];\n      let posY = currentTransform[5];\n      if (textState.font?.vertical) {\n        if (posX < viewBox[0] || posX > viewBox[2] || posY + glyphWidth < viewBox[1] || posY > viewBox[3]) {\n          return false;\n        }\n      } else if (posX + glyphWidth < viewBox[0] || posX > viewBox[2] || posY < viewBox[1] || posY > viewBox[3]) {\n        return false;\n      }\n      if (!textState.font || !textContentItem.prevTransform) {\n        return true;\n      }\n      let lastPosX = textContentItem.prevTransform[4];\n      let lastPosY = textContentItem.prevTransform[5];\n      if (lastPosX === posX && lastPosY === posY) {\n        return true;\n      }\n      let rotate = -1;\n      if (currentTransform[0] && currentTransform[1] === 0 && currentTransform[2] === 0) {\n        rotate = currentTransform[0] > 0 ? 0 : 180;\n      } else if (currentTransform[1] && currentTransform[0] === 0 && currentTransform[3] === 0) {\n        rotate = currentTransform[1] > 0 ? 90 : 270;\n      }\n      switch (rotate) {\n        case 0:\n          break;\n        case 90:\n          [posX, posY] = [posY, posX];\n          [lastPosX, lastPosY] = [lastPosY, lastPosX];\n          break;\n        case 180:\n          [posX, posY, lastPosX, lastPosY] = [-posX, -posY, -lastPosX, -lastPosY];\n          break;\n        case 270:\n          [posX, posY] = [-posY, -posX];\n          [lastPosX, lastPosY] = [-lastPosY, -lastPosX];\n          break;\n        default:\n          [posX, posY] = applyInverseRotation(posX, posY, currentTransform);\n          [lastPosX, lastPosY] = applyInverseRotation(lastPosX, lastPosY, textContentItem.prevTransform);\n      }\n      if (textState.font.vertical) {\n        const advanceY = (lastPosY - posY) / textContentItem.textAdvanceScale;\n        const advanceX = posX - lastPosX;\n        const textOrientation = Math.sign(textContentItem.height);\n        if (advanceY < textOrientation * textContentItem.negativeSpaceMax) {\n          if (Math.abs(advanceX) > 0.5 * textContentItem.width) {\n            appendEOL();\n            return true;\n          }\n          resetLastChars();\n          flushTextContentItem();\n          return true;\n        }\n        if (Math.abs(advanceX) > textContentItem.width) {\n          appendEOL();\n          return true;\n        }\n        if (advanceY <= textOrientation * textContentItem.notASpace) {\n          resetLastChars();\n        }\n        if (advanceY <= textOrientation * textContentItem.trackingSpaceMin) {\n          if (shouldAddWhitepsace()) {\n            resetLastChars();\n            flushTextContentItem();\n            pushWhitespace({\n              height: Math.abs(advanceY)\n            });\n          } else {\n            textContentItem.height += advanceY;\n          }\n        } else if (!addFakeSpaces(advanceY, textContentItem.prevTransform, textOrientation)) {\n          if (textContentItem.str.length === 0) {\n            resetLastChars();\n            pushWhitespace({\n              height: Math.abs(advanceY)\n            });\n          } else {\n            textContentItem.height += advanceY;\n          }\n        }\n        if (Math.abs(advanceX) > textContentItem.width * VERTICAL_SHIFT_RATIO) {\n          flushTextContentItem();\n        }\n        return true;\n      }\n      const advanceX = (posX - lastPosX) / textContentItem.textAdvanceScale;\n      const advanceY = posY - lastPosY;\n      const textOrientation = Math.sign(textContentItem.width);\n      if (advanceX < textOrientation * textContentItem.negativeSpaceMax) {\n        if (Math.abs(advanceY) > 0.5 * textContentItem.height) {\n          appendEOL();\n          return true;\n        }\n        resetLastChars();\n        flushTextContentItem();\n        return true;\n      }\n      if (Math.abs(advanceY) > textContentItem.height) {\n        appendEOL();\n        return true;\n      }\n      if (advanceX <= textOrientation * textContentItem.notASpace) {\n        resetLastChars();\n      }\n      if (advanceX <= textOrientation * textContentItem.trackingSpaceMin) {\n        if (shouldAddWhitepsace()) {\n          resetLastChars();\n          flushTextContentItem();\n          pushWhitespace({\n            width: Math.abs(advanceX)\n          });\n        } else {\n          textContentItem.width += advanceX;\n        }\n      } else if (!addFakeSpaces(advanceX, textContentItem.prevTransform, textOrientation)) {\n        if (textContentItem.str.length === 0) {\n          resetLastChars();\n          pushWhitespace({\n            width: Math.abs(advanceX)\n          });\n        } else {\n          textContentItem.width += advanceX;\n        }\n      }\n      if (Math.abs(advanceY) > textContentItem.height * VERTICAL_SHIFT_RATIO) {\n        flushTextContentItem();\n      }\n      return true;\n    }\n    function buildTextContentItem({\n      chars,\n      extraSpacing\n    }) {\n      const font = textState.font;\n      if (!chars) {\n        const charSpacing = textState.charSpacing + extraSpacing;\n        if (charSpacing) {\n          if (!font.vertical) {\n            textState.translateTextMatrix(charSpacing * textState.textHScale, 0);\n          } else {\n            textState.translateTextMatrix(0, -charSpacing);\n          }\n        }\n        if (keepWhiteSpace) {\n          compareWithLastPosition(0);\n        }\n        return;\n      }\n      const glyphs = font.charsToGlyphs(chars);\n      const scale = textState.fontMatrix[0] * textState.fontSize;\n      for (let i = 0, ii = glyphs.length; i < ii; i++) {\n        const glyph = glyphs[i];\n        const {\n          category\n        } = glyph;\n        if (category.isInvisibleFormatMark) {\n          continue;\n        }\n        let charSpacing = textState.charSpacing + (i + 1 === ii ? extraSpacing : 0);\n        let glyphWidth = glyph.width;\n        if (font.vertical) {\n          glyphWidth = glyph.vmetric ? glyph.vmetric[0] : -glyphWidth;\n        }\n        let scaledDim = glyphWidth * scale;\n        if (!keepWhiteSpace && category.isWhitespace) {\n          if (!font.vertical) {\n            charSpacing += scaledDim + textState.wordSpacing;\n            textState.translateTextMatrix(charSpacing * textState.textHScale, 0);\n          } else {\n            charSpacing += -scaledDim + textState.wordSpacing;\n            textState.translateTextMatrix(0, -charSpacing);\n          }\n          saveLastChar(\" \");\n          continue;\n        }\n        if (!category.isZeroWidthDiacritic && !compareWithLastPosition(scaledDim)) {\n          if (!font.vertical) {\n            textState.translateTextMatrix(scaledDim * textState.textHScale, 0);\n          } else {\n            textState.translateTextMatrix(0, scaledDim);\n          }\n          continue;\n        }\n        const textChunk = ensureTextContentItem();\n        if (category.isZeroWidthDiacritic) {\n          scaledDim = 0;\n        }\n        if (!font.vertical) {\n          scaledDim *= textState.textHScale;\n          textState.translateTextMatrix(scaledDim, 0);\n          textChunk.width += scaledDim;\n        } else {\n          textState.translateTextMatrix(0, scaledDim);\n          scaledDim = Math.abs(scaledDim);\n          textChunk.height += scaledDim;\n        }\n        if (scaledDim) {\n          textChunk.prevTransform = getCurrentTextTransform();\n        }\n        const glyphUnicode = glyph.unicode;\n        if (saveLastChar(glyphUnicode)) {\n          textChunk.str.push(\" \");\n        }\n        textChunk.str.push(glyphUnicode);\n        if (charSpacing) {\n          if (!font.vertical) {\n            textState.translateTextMatrix(charSpacing * textState.textHScale, 0);\n          } else {\n            textState.translateTextMatrix(0, -charSpacing);\n          }\n        }\n      }\n    }\n    function appendEOL() {\n      resetLastChars();\n      if (textContentItem.initialized) {\n        textContentItem.hasEOL = true;\n        flushTextContentItem();\n      } else {\n        textContent.items.push({\n          str: \"\",\n          dir: \"ltr\",\n          width: 0,\n          height: 0,\n          transform: getCurrentTextTransform(),\n          fontName: textState.loadedName,\n          hasEOL: true\n        });\n      }\n    }\n    function addFakeSpaces(width, transf, textOrientation) {\n      if (textOrientation * textContentItem.spaceInFlowMin <= width && width <= textOrientation * textContentItem.spaceInFlowMax) {\n        if (textContentItem.initialized) {\n          resetLastChars();\n          textContentItem.str.push(\" \");\n        }\n        return false;\n      }\n      const fontName = textContentItem.fontName;\n      let height = 0;\n      if (textContentItem.vertical) {\n        height = width;\n        width = 0;\n      }\n      flushTextContentItem();\n      resetLastChars();\n      pushWhitespace({\n        width: Math.abs(width),\n        height: Math.abs(height),\n        transform: transf || getCurrentTextTransform(),\n        fontName\n      });\n      return true;\n    }\n    function flushTextContentItem() {\n      if (!textContentItem.initialized || !textContentItem.str) {\n        return;\n      }\n      if (!textContentItem.vertical) {\n        textContentItem.totalWidth += textContentItem.width * textContentItem.textAdvanceScale;\n      } else {\n        textContentItem.totalHeight += textContentItem.height * textContentItem.textAdvanceScale;\n      }\n      textContent.items.push(runBidiTransform(textContentItem));\n      textContentItem.initialized = false;\n      textContentItem.str.length = 0;\n    }\n    function enqueueChunk(batch = false) {\n      const length = textContent.items.length;\n      if (length === 0) {\n        return;\n      }\n      if (batch && length < TEXT_CHUNK_BATCH_SIZE) {\n        return;\n      }\n      sink.enqueue(textContent, length);\n      textContent.items = [];\n      textContent.styles = Object.create(null);\n    }\n    const timeSlotManager = new TimeSlotManager();\n    return new Promise(function promiseBody(resolve, reject) {\n      const next = function (promise) {\n        enqueueChunk(true);\n        Promise.all([promise, sink.ready]).then(function () {\n          try {\n            promiseBody(resolve, reject);\n          } catch (ex) {\n            reject(ex);\n          }\n        }, reject);\n      };\n      task.ensureNotTerminated();\n      timeSlotManager.reset();\n      const operation = {};\n      let stop,\n        args = [];\n      while (!(stop = timeSlotManager.check())) {\n        args.length = 0;\n        operation.args = args;\n        if (!preprocessor.read(operation)) {\n          break;\n        }\n        const previousState = textState;\n        textState = stateManager.state;\n        const fn = operation.fn;\n        args = operation.args;\n        switch (fn | 0) {\n          case OPS.setFont:\n            var fontNameArg = args[0].name,\n              fontSizeArg = args[1];\n            if (textState.font && fontNameArg === textState.fontName && fontSizeArg === textState.fontSize) {\n              break;\n            }\n            flushTextContentItem();\n            textState.fontName = fontNameArg;\n            textState.fontSize = fontSizeArg;\n            next(handleSetFont(fontNameArg, null));\n            return;\n          case OPS.setTextRise:\n            textState.textRise = args[0];\n            break;\n          case OPS.setHScale:\n            textState.textHScale = args[0] / 100;\n            break;\n          case OPS.setLeading:\n            textState.leading = args[0];\n            break;\n          case OPS.moveText:\n            textState.translateTextLineMatrix(args[0], args[1]);\n            textState.textMatrix = textState.textLineMatrix.slice();\n            break;\n          case OPS.setLeadingMoveText:\n            textState.leading = -args[1];\n            textState.translateTextLineMatrix(args[0], args[1]);\n            textState.textMatrix = textState.textLineMatrix.slice();\n            break;\n          case OPS.nextLine:\n            textState.carriageReturn();\n            break;\n          case OPS.setTextMatrix:\n            textState.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);\n            textState.setTextLineMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);\n            updateAdvanceScale();\n            break;\n          case OPS.setCharSpacing:\n            textState.charSpacing = args[0];\n            break;\n          case OPS.setWordSpacing:\n            textState.wordSpacing = args[0];\n            break;\n          case OPS.beginText:\n            textState.textMatrix = IDENTITY_MATRIX.slice();\n            textState.textLineMatrix = IDENTITY_MATRIX.slice();\n            break;\n          case OPS.showSpacedText:\n            if (!stateManager.state.font) {\n              self.ensureStateFont(stateManager.state);\n              continue;\n            }\n            const spaceFactor = (textState.font.vertical ? 1 : -1) * textState.fontSize / 1000;\n            const elements = args[0];\n            for (let i = 0, ii = elements.length; i < ii; i++) {\n              const item = elements[i];\n              if (typeof item === \"string\") {\n                showSpacedTextBuffer.push(item);\n              } else if (typeof item === \"number\" && item !== 0) {\n                const str = showSpacedTextBuffer.join(\"\");\n                showSpacedTextBuffer.length = 0;\n                buildTextContentItem({\n                  chars: str,\n                  extraSpacing: item * spaceFactor\n                });\n              }\n            }\n            if (showSpacedTextBuffer.length > 0) {\n              const str = showSpacedTextBuffer.join(\"\");\n              showSpacedTextBuffer.length = 0;\n              buildTextContentItem({\n                chars: str,\n                extraSpacing: 0\n              });\n            }\n            break;\n          case OPS.showText:\n            if (!stateManager.state.font) {\n              self.ensureStateFont(stateManager.state);\n              continue;\n            }\n            buildTextContentItem({\n              chars: args[0],\n              extraSpacing: 0\n            });\n            break;\n          case OPS.nextLineShowText:\n            if (!stateManager.state.font) {\n              self.ensureStateFont(stateManager.state);\n              continue;\n            }\n            textState.carriageReturn();\n            buildTextContentItem({\n              chars: args[0],\n              extraSpacing: 0\n            });\n            break;\n          case OPS.nextLineSetSpacingShowText:\n            if (!stateManager.state.font) {\n              self.ensureStateFont(stateManager.state);\n              continue;\n            }\n            textState.wordSpacing = args[0];\n            textState.charSpacing = args[1];\n            textState.carriageReturn();\n            buildTextContentItem({\n              chars: args[2],\n              extraSpacing: 0\n            });\n            break;\n          case OPS.paintXObject:\n            flushTextContentItem();\n            if (!xobjs) {\n              xobjs = resources.get(\"XObject\") || Dict.empty;\n            }\n            var isValidName = args[0] instanceof Name;\n            var name = args[0].name;\n            if (isValidName && emptyXObjectCache.getByName(name)) {\n              break;\n            }\n            next(new Promise(function (resolveXObject, rejectXObject) {\n              if (!isValidName) {\n                throw new FormatError(\"XObject must be referred to by name.\");\n              }\n              let xobj = xobjs.getRaw(name);\n              if (xobj instanceof Ref) {\n                if (emptyXObjectCache.getByRef(xobj)) {\n                  resolveXObject();\n                  return;\n                }\n                const globalImage = self.globalImageCache.getData(xobj, self.pageIndex);\n                if (globalImage) {\n                  resolveXObject();\n                  return;\n                }\n                xobj = xref.fetch(xobj);\n              }\n              if (!(xobj instanceof BaseStream)) {\n                throw new FormatError(\"XObject should be a stream\");\n              }\n              const type = xobj.dict.get(\"Subtype\");\n              if (!(type instanceof Name)) {\n                throw new FormatError(\"XObject should have a Name subtype\");\n              }\n              if (type.name !== \"Form\") {\n                emptyXObjectCache.set(name, xobj.dict.objId, true);\n                resolveXObject();\n                return;\n              }\n              const currentState = stateManager.state.clone();\n              const xObjStateManager = new StateManager(currentState);\n              const matrix = lookupMatrix(xobj.dict.getArray(\"Matrix\"), null);\n              if (matrix) {\n                xObjStateManager.transform(matrix);\n              }\n              enqueueChunk();\n              const sinkWrapper = {\n                enqueueInvoked: false,\n                enqueue(chunk, size) {\n                  this.enqueueInvoked = true;\n                  sink.enqueue(chunk, size);\n                },\n                get desiredSize() {\n                  return sink.desiredSize;\n                },\n                get ready() {\n                  return sink.ready;\n                }\n              };\n              self.getTextContent({\n                stream: xobj,\n                task,\n                resources: xobj.dict.get(\"Resources\") || resources,\n                stateManager: xObjStateManager,\n                includeMarkedContent,\n                sink: sinkWrapper,\n                seenStyles,\n                viewBox,\n                lang,\n                markedContentData,\n                disableNormalization,\n                keepWhiteSpace\n              }).then(function () {\n                if (!sinkWrapper.enqueueInvoked) {\n                  emptyXObjectCache.set(name, xobj.dict.objId, true);\n                }\n                resolveXObject();\n              }, rejectXObject);\n            }).catch(function (reason) {\n              if (reason instanceof AbortException) {\n                return;\n              }\n              if (self.options.ignoreErrors) {\n                warn(`getTextContent - ignoring XObject: \"${reason}\".`);\n                return;\n              }\n              throw reason;\n            }));\n            return;\n          case OPS.setGState:\n            isValidName = args[0] instanceof Name;\n            name = args[0].name;\n            if (isValidName && emptyGStateCache.getByName(name)) {\n              break;\n            }\n            next(new Promise(function (resolveGState, rejectGState) {\n              if (!isValidName) {\n                throw new FormatError(\"GState must be referred to by name.\");\n              }\n              const extGState = resources.get(\"ExtGState\");\n              if (!(extGState instanceof Dict)) {\n                throw new FormatError(\"ExtGState should be a dictionary.\");\n              }\n              const gState = extGState.get(name);\n              if (!(gState instanceof Dict)) {\n                throw new FormatError(\"GState should be a dictionary.\");\n              }\n              const gStateFont = gState.get(\"Font\");\n              if (!gStateFont) {\n                emptyGStateCache.set(name, gState.objId, true);\n                resolveGState();\n                return;\n              }\n              flushTextContentItem();\n              textState.fontName = null;\n              textState.fontSize = gStateFont[1];\n              handleSetFont(null, gStateFont[0]).then(resolveGState, rejectGState);\n            }).catch(function (reason) {\n              if (reason instanceof AbortException) {\n                return;\n              }\n              if (self.options.ignoreErrors) {\n                warn(`getTextContent - ignoring ExtGState: \"${reason}\".`);\n                return;\n              }\n              throw reason;\n            }));\n            return;\n          case OPS.beginMarkedContent:\n            flushTextContentItem();\n            if (includeMarkedContent) {\n              markedContentData.level++;\n              textContent.items.push({\n                type: \"beginMarkedContent\",\n                tag: args[0] instanceof Name ? args[0].name : null\n              });\n            }\n            break;\n          case OPS.beginMarkedContentProps:\n            flushTextContentItem();\n            if (includeMarkedContent) {\n              markedContentData.level++;\n              let mcid = null;\n              if (args[1] instanceof Dict) {\n                mcid = args[1].get(\"MCID\");\n              }\n              textContent.items.push({\n                type: \"beginMarkedContentProps\",\n                id: Number.isInteger(mcid) ? `${self.idFactory.getPageObjId()}_mc${mcid}` : null,\n                tag: args[0] instanceof Name ? args[0].name : null\n              });\n            }\n            break;\n          case OPS.endMarkedContent:\n            flushTextContentItem();\n            if (includeMarkedContent) {\n              if (markedContentData.level === 0) {\n                break;\n              }\n              markedContentData.level--;\n              textContent.items.push({\n                type: \"endMarkedContent\"\n              });\n            }\n            break;\n          case OPS.restore:\n            if (previousState && (previousState.font !== textState.font || previousState.fontSize !== textState.fontSize || previousState.fontName !== textState.fontName)) {\n              flushTextContentItem();\n            }\n            break;\n        }\n        if (textContent.items.length >= sink.desiredSize) {\n          stop = true;\n          break;\n        }\n      }\n      if (stop) {\n        next(deferred);\n        return;\n      }\n      flushTextContentItem();\n      enqueueChunk();\n      resolve();\n    }).catch(reason => {\n      if (reason instanceof AbortException) {\n        return;\n      }\n      if (this.options.ignoreErrors) {\n        warn(`getTextContent - ignoring errors during \"${task.name}\" ` + `task: \"${reason}\".`);\n        flushTextContentItem();\n        enqueueChunk();\n        return;\n      }\n      throw reason;\n    });\n  }\n  async extractDataStructures(dict, properties) {\n    const xref = this.xref;\n    let cidToGidBytes;\n    const toUnicodePromise = this.readToUnicode(properties.toUnicode);\n    if (properties.composite) {\n      const cidSystemInfo = dict.get(\"CIDSystemInfo\");\n      if (cidSystemInfo instanceof Dict) {\n        properties.cidSystemInfo = {\n          registry: stringToPDFString(cidSystemInfo.get(\"Registry\")),\n          ordering: stringToPDFString(cidSystemInfo.get(\"Ordering\")),\n          supplement: cidSystemInfo.get(\"Supplement\")\n        };\n      }\n      try {\n        const cidToGidMap = dict.get(\"CIDToGIDMap\");\n        if (cidToGidMap instanceof BaseStream) {\n          cidToGidBytes = cidToGidMap.getBytes();\n        }\n      } catch (ex) {\n        if (!this.options.ignoreErrors) {\n          throw ex;\n        }\n        warn(`extractDataStructures - ignoring CIDToGIDMap data: \"${ex}\".`);\n      }\n    }\n    const differences = [];\n    let baseEncodingName = null;\n    let encoding;\n    if (dict.has(\"Encoding\")) {\n      encoding = dict.get(\"Encoding\");\n      if (encoding instanceof Dict) {\n        baseEncodingName = encoding.get(\"BaseEncoding\");\n        baseEncodingName = baseEncodingName instanceof Name ? baseEncodingName.name : null;\n        if (encoding.has(\"Differences\")) {\n          const diffEncoding = encoding.get(\"Differences\");\n          let index = 0;\n          for (const entry of diffEncoding) {\n            const data = xref.fetchIfRef(entry);\n            if (typeof data === \"number\") {\n              index = data;\n            } else if (data instanceof Name) {\n              differences[index++] = data.name;\n            } else {\n              throw new FormatError(`Invalid entry in 'Differences' array: ${data}`);\n            }\n          }\n        }\n      } else if (encoding instanceof Name) {\n        baseEncodingName = encoding.name;\n      } else {\n        const msg = \"Encoding is not a Name nor a Dict\";\n        if (!this.options.ignoreErrors) {\n          throw new FormatError(msg);\n        }\n        warn(msg);\n      }\n      if (baseEncodingName !== \"MacRomanEncoding\" && baseEncodingName !== \"MacExpertEncoding\" && baseEncodingName !== \"WinAnsiEncoding\") {\n        baseEncodingName = null;\n      }\n    }\n    const nonEmbeddedFont = !properties.file || properties.isInternalFont,\n      isSymbolsFontName = getSymbolsFonts()[properties.name];\n    if (baseEncodingName && nonEmbeddedFont && isSymbolsFontName) {\n      baseEncodingName = null;\n    }\n    if (baseEncodingName) {\n      properties.defaultEncoding = getEncoding(baseEncodingName);\n    } else {\n      const isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);\n      const isNonsymbolicFont = !!(properties.flags & FontFlags.Nonsymbolic);\n      encoding = StandardEncoding;\n      if (properties.type === \"TrueType\" && !isNonsymbolicFont) {\n        encoding = WinAnsiEncoding;\n      }\n      if (isSymbolicFont || isSymbolsFontName) {\n        encoding = MacRomanEncoding;\n        if (nonEmbeddedFont) {\n          if (/Symbol/i.test(properties.name)) {\n            encoding = SymbolSetEncoding;\n          } else if (/Dingbats/i.test(properties.name)) {\n            encoding = ZapfDingbatsEncoding;\n          } else if (/Wingdings/i.test(properties.name)) {\n            encoding = WinAnsiEncoding;\n          }\n        }\n      }\n      properties.defaultEncoding = encoding;\n    }\n    properties.differences = differences;\n    properties.baseEncodingName = baseEncodingName;\n    properties.hasEncoding = !!baseEncodingName || differences.length > 0;\n    properties.dict = dict;\n    properties.toUnicode = await toUnicodePromise;\n    const builtToUnicode = await this.buildToUnicode(properties);\n    properties.toUnicode = builtToUnicode;\n    if (cidToGidBytes) {\n      properties.cidToGidMap = this.readCidToGidMap(cidToGidBytes, builtToUnicode);\n    }\n    return properties;\n  }\n  _simpleFontToUnicode(properties, forceGlyphs = false) {\n    assert(!properties.composite, \"Must be a simple font.\");\n    const toUnicode = [];\n    const encoding = properties.defaultEncoding.slice();\n    const baseEncodingName = properties.baseEncodingName;\n    const differences = properties.differences;\n    for (const charcode in differences) {\n      const glyphName = differences[charcode];\n      if (glyphName === \".notdef\") {\n        continue;\n      }\n      encoding[charcode] = glyphName;\n    }\n    const glyphsUnicodeMap = getGlyphsUnicode();\n    for (const charcode in encoding) {\n      let glyphName = encoding[charcode];\n      if (glyphName === \"\") {\n        continue;\n      }\n      let unicode = glyphsUnicodeMap[glyphName];\n      if (unicode !== undefined) {\n        toUnicode[charcode] = String.fromCharCode(unicode);\n        continue;\n      }\n      let code = 0;\n      switch (glyphName[0]) {\n        case \"G\":\n          if (glyphName.length === 3) {\n            code = parseInt(glyphName.substring(1), 16);\n          }\n          break;\n        case \"g\":\n          if (glyphName.length === 5) {\n            code = parseInt(glyphName.substring(1), 16);\n          }\n          break;\n        case \"C\":\n        case \"c\":\n          if (glyphName.length >= 3 && glyphName.length <= 4) {\n            const codeStr = glyphName.substring(1);\n            if (forceGlyphs) {\n              code = parseInt(codeStr, 16);\n              break;\n            }\n            code = +codeStr;\n            if (Number.isNaN(code) && Number.isInteger(parseInt(codeStr, 16))) {\n              return this._simpleFontToUnicode(properties, true);\n            }\n          }\n          break;\n        case \"u\":\n          unicode = getUnicodeForGlyph(glyphName, glyphsUnicodeMap);\n          if (unicode !== -1) {\n            code = unicode;\n          }\n          break;\n        default:\n          switch (glyphName) {\n            case \"f_h\":\n            case \"f_t\":\n            case \"T_h\":\n              toUnicode[charcode] = glyphName.replaceAll(\"_\", \"\");\n              continue;\n          }\n          break;\n      }\n      if (code > 0 && code <= 0x10ffff && Number.isInteger(code)) {\n        if (baseEncodingName && code === +charcode) {\n          const baseEncoding = getEncoding(baseEncodingName);\n          if (baseEncoding && (glyphName = baseEncoding[charcode])) {\n            toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]);\n            continue;\n          }\n        }\n        toUnicode[charcode] = String.fromCodePoint(code);\n      }\n    }\n    return toUnicode;\n  }\n  async buildToUnicode(properties) {\n    properties.hasIncludedToUnicodeMap = properties.toUnicode?.length > 0;\n    if (properties.hasIncludedToUnicodeMap) {\n      if (!properties.composite && properties.hasEncoding) {\n        properties.fallbackToUnicode = this._simpleFontToUnicode(properties);\n      }\n      return properties.toUnicode;\n    }\n    if (!properties.composite) {\n      return new ToUnicodeMap(this._simpleFontToUnicode(properties));\n    }\n    if (properties.composite && (properties.cMap.builtInCMap && !(properties.cMap instanceof IdentityCMap) || properties.cidSystemInfo?.registry === \"Adobe\" && (properties.cidSystemInfo.ordering === \"GB1\" || properties.cidSystemInfo.ordering === \"CNS1\" || properties.cidSystemInfo.ordering === \"Japan1\" || properties.cidSystemInfo.ordering === \"Korea1\"))) {\n      const {\n        registry,\n        ordering\n      } = properties.cidSystemInfo;\n      const ucs2CMapName = Name.get(`${registry}-${ordering}-UCS2`);\n      const ucs2CMap = await CMapFactory.create({\n        encoding: ucs2CMapName,\n        fetchBuiltInCMap: this._fetchBuiltInCMapBound,\n        useCMap: null\n      });\n      const toUnicode = [],\n        buf = [];\n      properties.cMap.forEach(function (charcode, cid) {\n        if (cid > 0xffff) {\n          throw new FormatError(\"Max size of CID is 65,535\");\n        }\n        const ucs2 = ucs2CMap.lookup(cid);\n        if (ucs2) {\n          buf.length = 0;\n          for (let i = 0, ii = ucs2.length; i < ii; i += 2) {\n            buf.push((ucs2.charCodeAt(i) << 8) + ucs2.charCodeAt(i + 1));\n          }\n          toUnicode[charcode] = String.fromCharCode(...buf);\n        }\n      });\n      return new ToUnicodeMap(toUnicode);\n    }\n    return new IdentityToUnicodeMap(properties.firstChar, properties.lastChar);\n  }\n  async readToUnicode(cmapObj) {\n    if (!cmapObj) {\n      return null;\n    }\n    if (cmapObj instanceof Name) {\n      const cmap = await CMapFactory.create({\n        encoding: cmapObj,\n        fetchBuiltInCMap: this._fetchBuiltInCMapBound,\n        useCMap: null\n      });\n      if (cmap instanceof IdentityCMap) {\n        return new IdentityToUnicodeMap(0, 0xffff);\n      }\n      return new ToUnicodeMap(cmap.getMap());\n    }\n    if (cmapObj instanceof BaseStream) {\n      try {\n        const cmap = await CMapFactory.create({\n          encoding: cmapObj,\n          fetchBuiltInCMap: this._fetchBuiltInCMapBound,\n          useCMap: null\n        });\n        if (cmap instanceof IdentityCMap) {\n          return new IdentityToUnicodeMap(0, 0xffff);\n        }\n        const map = new Array(cmap.length);\n        cmap.forEach(function (charCode, token) {\n          if (typeof token === \"number\") {\n            map[charCode] = String.fromCodePoint(token);\n            return;\n          }\n          const str = [];\n          for (let k = 0; k < token.length; k += 2) {\n            const w1 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1);\n            if ((w1 & 0xf800) !== 0xd800) {\n              str.push(w1);\n              continue;\n            }\n            k += 2;\n            const w2 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1);\n            str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000);\n          }\n          map[charCode] = String.fromCodePoint(...str);\n        });\n        return new ToUnicodeMap(map);\n      } catch (reason) {\n        if (reason instanceof AbortException) {\n          return null;\n        }\n        if (this.options.ignoreErrors) {\n          warn(`readToUnicode - ignoring ToUnicode data: \"${reason}\".`);\n          return null;\n        }\n        throw reason;\n      }\n    }\n    return null;\n  }\n  readCidToGidMap(glyphsData, toUnicode) {\n    const result = [];\n    for (let j = 0, jj = glyphsData.length; j < jj; j++) {\n      const glyphID = glyphsData[j++] << 8 | glyphsData[j];\n      const code = j >> 1;\n      if (glyphID === 0 && !toUnicode.has(code)) {\n        continue;\n      }\n      result[code] = glyphID;\n    }\n    return result;\n  }\n  extractWidths(dict, descriptor, properties) {\n    const xref = this.xref;\n    let glyphsWidths = [];\n    let defaultWidth = 0;\n    const glyphsVMetrics = [];\n    let defaultVMetrics;\n    if (properties.composite) {\n      const dw = dict.get(\"DW\");\n      defaultWidth = Number.isInteger(dw) ? dw : 1000;\n      const widths = dict.get(\"W\");\n      if (Array.isArray(widths)) {\n        for (let i = 0, ii = widths.length; i < ii; i++) {\n          let start = xref.fetchIfRef(widths[i++]);\n          if (!Number.isInteger(start)) {\n            break;\n          }\n          const code = xref.fetchIfRef(widths[i]);\n          if (Array.isArray(code)) {\n            for (const c of code) {\n              const width = xref.fetchIfRef(c);\n              if (typeof width === \"number\") {\n                glyphsWidths[start] = width;\n              }\n              start++;\n            }\n          } else if (Number.isInteger(code)) {\n            const width = xref.fetchIfRef(widths[++i]);\n            if (typeof width !== \"number\") {\n              continue;\n            }\n            for (let j = start; j <= code; j++) {\n              glyphsWidths[j] = width;\n            }\n          } else {\n            break;\n          }\n        }\n      }\n      if (properties.vertical) {\n        const dw2 = dict.getArray(\"DW2\");\n        let vmetrics = isNumberArray(dw2, 2) ? dw2 : [880, -1000];\n        defaultVMetrics = [vmetrics[1], defaultWidth * 0.5, vmetrics[0]];\n        vmetrics = dict.get(\"W2\");\n        if (Array.isArray(vmetrics)) {\n          for (let i = 0, ii = vmetrics.length; i < ii; i++) {\n            let start = xref.fetchIfRef(vmetrics[i++]);\n            if (!Number.isInteger(start)) {\n              break;\n            }\n            const code = xref.fetchIfRef(vmetrics[i]);\n            if (Array.isArray(code)) {\n              for (let j = 0, jj = code.length; j < jj; j++) {\n                const vmetric = [xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j])];\n                if (isNumberArray(vmetric, null)) {\n                  glyphsVMetrics[start] = vmetric;\n                }\n                start++;\n              }\n            } else if (Number.isInteger(code)) {\n              const vmetric = [xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i])];\n              if (!isNumberArray(vmetric, null)) {\n                continue;\n              }\n              for (let j = start; j <= code; j++) {\n                glyphsVMetrics[j] = vmetric;\n              }\n            } else {\n              break;\n            }\n          }\n        }\n      }\n    } else {\n      const widths = dict.get(\"Widths\");\n      if (Array.isArray(widths)) {\n        let j = properties.firstChar;\n        for (const w of widths) {\n          const width = xref.fetchIfRef(w);\n          if (typeof width === \"number\") {\n            glyphsWidths[j] = width;\n          }\n          j++;\n        }\n        const missingWidth = descriptor.get(\"MissingWidth\");\n        defaultWidth = typeof missingWidth === \"number\" ? missingWidth : 0;\n      } else {\n        const baseFontName = dict.get(\"BaseFont\");\n        if (baseFontName instanceof Name) {\n          const metrics = this.getBaseFontMetrics(baseFontName.name);\n          glyphsWidths = this.buildCharCodeToWidth(metrics.widths, properties);\n          defaultWidth = metrics.defaultWidth;\n        }\n      }\n    }\n    let isMonospace = true;\n    let firstWidth = defaultWidth;\n    for (const glyph in glyphsWidths) {\n      const glyphWidth = glyphsWidths[glyph];\n      if (!glyphWidth) {\n        continue;\n      }\n      if (!firstWidth) {\n        firstWidth = glyphWidth;\n        continue;\n      }\n      if (firstWidth !== glyphWidth) {\n        isMonospace = false;\n        break;\n      }\n    }\n    if (isMonospace) {\n      properties.flags |= FontFlags.FixedPitch;\n    } else {\n      properties.flags &= ~FontFlags.FixedPitch;\n    }\n    properties.defaultWidth = defaultWidth;\n    properties.widths = glyphsWidths;\n    properties.defaultVMetrics = defaultVMetrics;\n    properties.vmetrics = glyphsVMetrics;\n  }\n  isSerifFont(baseFontName) {\n    const fontNameWoStyle = baseFontName.split(\"-\", 1)[0];\n    return fontNameWoStyle in getSerifFonts() || /serif/gi.test(fontNameWoStyle);\n  }\n  getBaseFontMetrics(name) {\n    let defaultWidth = 0;\n    let widths = Object.create(null);\n    let monospace = false;\n    const stdFontMap = getStdFontMap();\n    let lookupName = stdFontMap[name] || name;\n    const Metrics = getMetrics();\n    if (!(lookupName in Metrics)) {\n      lookupName = this.isSerifFont(name) ? \"Times-Roman\" : \"Helvetica\";\n    }\n    const glyphWidths = Metrics[lookupName];\n    if (typeof glyphWidths === \"number\") {\n      defaultWidth = glyphWidths;\n      monospace = true;\n    } else {\n      widths = glyphWidths();\n    }\n    return {\n      defaultWidth,\n      monospace,\n      widths\n    };\n  }\n  buildCharCodeToWidth(widthsByGlyphName, properties) {\n    const widths = Object.create(null);\n    const differences = properties.differences;\n    const encoding = properties.defaultEncoding;\n    for (let charCode = 0; charCode < 256; charCode++) {\n      if (charCode in differences && widthsByGlyphName[differences[charCode]]) {\n        widths[charCode] = widthsByGlyphName[differences[charCode]];\n        continue;\n      }\n      if (charCode in encoding && widthsByGlyphName[encoding[charCode]]) {\n        widths[charCode] = widthsByGlyphName[encoding[charCode]];\n        continue;\n      }\n    }\n    return widths;\n  }\n  preEvaluateFont(dict) {\n    const baseDict = dict;\n    let type = dict.get(\"Subtype\");\n    if (!(type instanceof Name)) {\n      throw new FormatError(\"invalid font Subtype\");\n    }\n    let composite = false;\n    let hash;\n    if (type.name === \"Type0\") {\n      const df = dict.get(\"DescendantFonts\");\n      if (!df) {\n        throw new FormatError(\"Descendant fonts are not specified\");\n      }\n      dict = Array.isArray(df) ? this.xref.fetchIfRef(df[0]) : df;\n      if (!(dict instanceof Dict)) {\n        throw new FormatError(\"Descendant font is not a dictionary.\");\n      }\n      type = dict.get(\"Subtype\");\n      if (!(type instanceof Name)) {\n        throw new FormatError(\"invalid font Subtype\");\n      }\n      composite = true;\n    }\n    let firstChar = dict.get(\"FirstChar\");\n    if (!Number.isInteger(firstChar)) {\n      firstChar = 0;\n    }\n    let lastChar = dict.get(\"LastChar\");\n    if (!Number.isInteger(lastChar)) {\n      lastChar = composite ? 0xffff : 0xff;\n    }\n    const descriptor = dict.get(\"FontDescriptor\");\n    const toUnicode = dict.get(\"ToUnicode\") || baseDict.get(\"ToUnicode\");\n    if (descriptor) {\n      hash = new MurmurHash3_64();\n      const encoding = baseDict.getRaw(\"Encoding\");\n      if (encoding instanceof Name) {\n        hash.update(encoding.name);\n      } else if (encoding instanceof Ref) {\n        hash.update(encoding.toString());\n      } else if (encoding instanceof Dict) {\n        for (const entry of encoding.getRawValues()) {\n          if (entry instanceof Name) {\n            hash.update(entry.name);\n          } else if (entry instanceof Ref) {\n            hash.update(entry.toString());\n          } else if (Array.isArray(entry)) {\n            const diffLength = entry.length,\n              diffBuf = new Array(diffLength);\n            for (let j = 0; j < diffLength; j++) {\n              const diffEntry = entry[j];\n              if (diffEntry instanceof Name) {\n                diffBuf[j] = diffEntry.name;\n              } else if (typeof diffEntry === \"number\" || diffEntry instanceof Ref) {\n                diffBuf[j] = diffEntry.toString();\n              }\n            }\n            hash.update(diffBuf.join());\n          }\n        }\n      }\n      hash.update(`${firstChar}-${lastChar}`);\n      if (toUnicode instanceof BaseStream) {\n        const stream = toUnicode.str || toUnicode;\n        const uint8array = stream.buffer ? new Uint8Array(stream.buffer.buffer, 0, stream.bufferLength) : new Uint8Array(stream.bytes.buffer, stream.start, stream.end - stream.start);\n        hash.update(uint8array);\n      } else if (toUnicode instanceof Name) {\n        hash.update(toUnicode.name);\n      }\n      const widths = dict.get(\"Widths\") || baseDict.get(\"Widths\");\n      if (Array.isArray(widths)) {\n        const widthsBuf = [];\n        for (const entry of widths) {\n          if (typeof entry === \"number\" || entry instanceof Ref) {\n            widthsBuf.push(entry.toString());\n          }\n        }\n        hash.update(widthsBuf.join());\n      }\n      if (composite) {\n        hash.update(\"compositeFont\");\n        const compositeWidths = dict.get(\"W\") || baseDict.get(\"W\");\n        if (Array.isArray(compositeWidths)) {\n          const widthsBuf = [];\n          for (const entry of compositeWidths) {\n            if (typeof entry === \"number\" || entry instanceof Ref) {\n              widthsBuf.push(entry.toString());\n            } else if (Array.isArray(entry)) {\n              const subWidthsBuf = [];\n              for (const element of entry) {\n                if (typeof element === \"number\" || element instanceof Ref) {\n                  subWidthsBuf.push(element.toString());\n                }\n              }\n              widthsBuf.push(`[${subWidthsBuf.join()}]`);\n            }\n          }\n          hash.update(widthsBuf.join());\n        }\n        const cidToGidMap = dict.getRaw(\"CIDToGIDMap\") || baseDict.getRaw(\"CIDToGIDMap\");\n        if (cidToGidMap instanceof Name) {\n          hash.update(cidToGidMap.name);\n        } else if (cidToGidMap instanceof Ref) {\n          hash.update(cidToGidMap.toString());\n        } else if (cidToGidMap instanceof BaseStream) {\n          hash.update(cidToGidMap.peekBytes());\n        }\n      }\n    }\n    return {\n      descriptor,\n      dict,\n      baseDict,\n      composite,\n      type: type.name,\n      firstChar,\n      lastChar,\n      toUnicode,\n      hash: hash ? hash.hexdigest() : \"\"\n    };\n  }\n  async translateFont({\n    descriptor,\n    dict,\n    baseDict,\n    composite,\n    type,\n    firstChar,\n    lastChar,\n    toUnicode,\n    cssFontInfo\n  }) {\n    const isType3Font = type === \"Type3\";\n    if (!descriptor) {\n      if (isType3Font) {\n        const bbox = lookupNormalRect(dict.getArray(\"FontBBox\"), [0, 0, 0, 0]);\n        descriptor = new Dict(null);\n        descriptor.set(\"FontName\", Name.get(type));\n        descriptor.set(\"FontBBox\", bbox);\n      } else {\n        let baseFontName = dict.get(\"BaseFont\");\n        if (!(baseFontName instanceof Name)) {\n          throw new FormatError(\"Base font is not specified\");\n        }\n        baseFontName = baseFontName.name.replaceAll(/[,_]/g, \"-\");\n        const metrics = this.getBaseFontMetrics(baseFontName);\n        const fontNameWoStyle = baseFontName.split(\"-\", 1)[0];\n        const flags = (this.isSerifFont(fontNameWoStyle) ? FontFlags.Serif : 0) | (metrics.monospace ? FontFlags.FixedPitch : 0) | (getSymbolsFonts()[fontNameWoStyle] ? FontFlags.Symbolic : FontFlags.Nonsymbolic);\n        const properties = {\n          type,\n          name: baseFontName,\n          loadedName: baseDict.loadedName,\n          systemFontInfo: null,\n          widths: metrics.widths,\n          defaultWidth: metrics.defaultWidth,\n          isSimulatedFlags: true,\n          flags,\n          firstChar,\n          lastChar,\n          toUnicode,\n          xHeight: 0,\n          capHeight: 0,\n          italicAngle: 0,\n          isType3Font\n        };\n        const widths = dict.get(\"Widths\");\n        const standardFontName = getStandardFontName(baseFontName);\n        let file = null;\n        if (standardFontName) {\n          file = await this.fetchStandardFontData(standardFontName);\n          properties.isInternalFont = !!file;\n        }\n        if (!properties.isInternalFont && this.options.useSystemFonts) {\n          properties.systemFontInfo = getFontSubstitution(this.systemFontCache, this.idFactory, this.options.standardFontDataUrl, baseFontName, standardFontName, type);\n        }\n        const newProperties = await this.extractDataStructures(dict, properties);\n        if (Array.isArray(widths)) {\n          const glyphWidths = [];\n          let j = firstChar;\n          for (const w of widths) {\n            const width = this.xref.fetchIfRef(w);\n            if (typeof width === \"number\") {\n              glyphWidths[j] = width;\n            }\n            j++;\n          }\n          newProperties.widths = glyphWidths;\n        } else {\n          newProperties.widths = this.buildCharCodeToWidth(metrics.widths, newProperties);\n        }\n        return new Font(baseFontName, file, newProperties);\n      }\n    }\n    let fontName = descriptor.get(\"FontName\");\n    let baseFont = dict.get(\"BaseFont\");\n    if (typeof fontName === \"string\") {\n      fontName = Name.get(fontName);\n    }\n    if (typeof baseFont === \"string\") {\n      baseFont = Name.get(baseFont);\n    }\n    const fontNameStr = fontName?.name;\n    const baseFontStr = baseFont?.name;\n    if (!isType3Font && fontNameStr !== baseFontStr) {\n      info(`The FontDescriptor's FontName is \"${fontNameStr}\" but ` + `should be the same as the Font's BaseFont \"${baseFontStr}\".`);\n      if (fontNameStr && baseFontStr && (baseFontStr.startsWith(fontNameStr) || !isKnownFontName(fontNameStr) && isKnownFontName(baseFontStr))) {\n        fontName = null;\n      }\n    }\n    fontName ||= baseFont;\n    if (!(fontName instanceof Name)) {\n      throw new FormatError(\"invalid font name\");\n    }\n    let fontFile, subtype, length1, length2, length3;\n    try {\n      fontFile = descriptor.get(\"FontFile\", \"FontFile2\", \"FontFile3\");\n    } catch (ex) {\n      if (!this.options.ignoreErrors) {\n        throw ex;\n      }\n      warn(`translateFont - fetching \"${fontName.name}\" font file: \"${ex}\".`);\n      fontFile = new NullStream();\n    }\n    let isInternalFont = false;\n    let glyphScaleFactors = null;\n    let systemFontInfo = null;\n    if (fontFile) {\n      if (fontFile.dict) {\n        const subtypeEntry = fontFile.dict.get(\"Subtype\");\n        if (subtypeEntry instanceof Name) {\n          subtype = subtypeEntry.name;\n        }\n        length1 = fontFile.dict.get(\"Length1\");\n        length2 = fontFile.dict.get(\"Length2\");\n        length3 = fontFile.dict.get(\"Length3\");\n      }\n    } else if (cssFontInfo) {\n      const standardFontName = getXfaFontName(fontName.name);\n      if (standardFontName) {\n        cssFontInfo.fontFamily = `${cssFontInfo.fontFamily}-PdfJS-XFA`;\n        cssFontInfo.metrics = standardFontName.metrics || null;\n        glyphScaleFactors = standardFontName.factors || null;\n        fontFile = await this.fetchStandardFontData(standardFontName.name);\n        isInternalFont = !!fontFile;\n        baseDict = dict = getXfaFontDict(fontName.name);\n        composite = true;\n      }\n    } else if (!isType3Font) {\n      const standardFontName = getStandardFontName(fontName.name);\n      if (standardFontName) {\n        fontFile = await this.fetchStandardFontData(standardFontName);\n        isInternalFont = !!fontFile;\n      }\n      if (!isInternalFont && this.options.useSystemFonts) {\n        systemFontInfo = getFontSubstitution(this.systemFontCache, this.idFactory, this.options.standardFontDataUrl, fontName.name, standardFontName, type);\n      }\n    }\n    const fontMatrix = lookupMatrix(dict.getArray(\"FontMatrix\"), FONT_IDENTITY_MATRIX);\n    const bbox = lookupNormalRect(descriptor.getArray(\"FontBBox\") || dict.getArray(\"FontBBox\"), undefined);\n    let ascent = descriptor.get(\"Ascent\");\n    if (typeof ascent !== \"number\") {\n      ascent = undefined;\n    }\n    let descent = descriptor.get(\"Descent\");\n    if (typeof descent !== \"number\") {\n      descent = undefined;\n    }\n    let xHeight = descriptor.get(\"XHeight\");\n    if (typeof xHeight !== \"number\") {\n      xHeight = 0;\n    }\n    let capHeight = descriptor.get(\"CapHeight\");\n    if (typeof capHeight !== \"number\") {\n      capHeight = 0;\n    }\n    let flags = descriptor.get(\"Flags\");\n    if (!Number.isInteger(flags)) {\n      flags = 0;\n    }\n    let italicAngle = descriptor.get(\"ItalicAngle\");\n    if (typeof italicAngle !== \"number\") {\n      italicAngle = 0;\n    }\n    const properties = {\n      type,\n      name: fontName.name,\n      subtype,\n      file: fontFile,\n      length1,\n      length2,\n      length3,\n      isInternalFont,\n      loadedName: baseDict.loadedName,\n      composite,\n      fixedPitch: false,\n      fontMatrix,\n      firstChar,\n      lastChar,\n      toUnicode,\n      bbox,\n      ascent,\n      descent,\n      xHeight,\n      capHeight,\n      flags,\n      italicAngle,\n      isType3Font,\n      cssFontInfo,\n      scaleFactors: glyphScaleFactors,\n      systemFontInfo\n    };\n    if (composite) {\n      const cidEncoding = baseDict.get(\"Encoding\");\n      if (cidEncoding instanceof Name) {\n        properties.cidEncoding = cidEncoding.name;\n      }\n      const cMap = await CMapFactory.create({\n        encoding: cidEncoding,\n        fetchBuiltInCMap: this._fetchBuiltInCMapBound,\n        useCMap: null\n      });\n      properties.cMap = cMap;\n      properties.vertical = properties.cMap.vertical;\n    }\n    const newProperties = await this.extractDataStructures(dict, properties);\n    this.extractWidths(dict, descriptor, newProperties);\n    return new Font(fontName.name, fontFile, newProperties);\n  }\n  static buildFontPaths(font, glyphs, handler, evaluatorOptions) {\n    function buildPath(fontChar) {\n      const glyphName = `${font.loadedName}_path_${fontChar}`;\n      try {\n        if (font.renderer.hasBuiltPath(fontChar)) {\n          return;\n        }\n        handler.send(\"commonobj\", [glyphName, \"FontPath\", font.renderer.getPathJs(fontChar)]);\n      } catch (reason) {\n        if (evaluatorOptions.ignoreErrors) {\n          warn(`buildFontPaths - ignoring ${glyphName} glyph: \"${reason}\".`);\n          return;\n        }\n        throw reason;\n      }\n    }\n    for (const glyph of glyphs) {\n      buildPath(glyph.fontChar);\n      const accent = glyph.accent;\n      if (accent?.fontChar) {\n        buildPath(accent.fontChar);\n      }\n    }\n  }\n  static get fallbackFontDict() {\n    const dict = new Dict();\n    dict.set(\"BaseFont\", Name.get(\"Helvetica\"));\n    dict.set(\"Type\", Name.get(\"FallbackType\"));\n    dict.set(\"Subtype\", Name.get(\"FallbackType\"));\n    dict.set(\"Encoding\", Name.get(\"WinAnsiEncoding\"));\n    return shadow(this, \"fallbackFontDict\", dict);\n  }\n}\nclass TranslatedFont {\n  constructor({\n    loadedName,\n    font,\n    dict,\n    evaluatorOptions\n  }) {\n    this.loadedName = loadedName;\n    this.font = font;\n    this.dict = dict;\n    this._evaluatorOptions = evaluatorOptions || DefaultPartialEvaluatorOptions;\n    this.type3Loaded = null;\n    this.type3Dependencies = font.isType3Font ? new Set() : null;\n    this.sent = false;\n  }\n  send(handler) {\n    if (this.sent) {\n      return;\n    }\n    this.sent = true;\n    handler.send(\"commonobj\", [this.loadedName, \"Font\", this.font.exportData(this._evaluatorOptions.fontExtraProperties)]);\n  }\n  fallback(handler) {\n    if (!this.font.data) {\n      return;\n    }\n    this.font.disableFontFace = true;\n    PartialEvaluator.buildFontPaths(this.font, this.font.glyphCacheValues, handler, this._evaluatorOptions);\n  }\n  loadType3Data(evaluator, resources, task) {\n    if (this.type3Loaded) {\n      return this.type3Loaded;\n    }\n    if (!this.font.isType3Font) {\n      throw new Error(\"Must be a Type3 font.\");\n    }\n    const type3Evaluator = evaluator.clone({\n      ignoreErrors: false\n    });\n    const type3FontRefs = new RefSet(evaluator.type3FontRefs);\n    if (this.dict.objId && !type3FontRefs.has(this.dict.objId)) {\n      type3FontRefs.put(this.dict.objId);\n    }\n    type3Evaluator.type3FontRefs = type3FontRefs;\n    const translatedFont = this.font,\n      type3Dependencies = this.type3Dependencies;\n    let loadCharProcsPromise = Promise.resolve();\n    const charProcs = this.dict.get(\"CharProcs\");\n    const fontResources = this.dict.get(\"Resources\") || resources;\n    const charProcOperatorList = Object.create(null);\n    const fontBBox = Util.normalizeRect(translatedFont.bbox || [0, 0, 0, 0]),\n      width = fontBBox[2] - fontBBox[0],\n      height = fontBBox[3] - fontBBox[1];\n    const fontBBoxSize = Math.hypot(width, height);\n    for (const key of charProcs.getKeys()) {\n      loadCharProcsPromise = loadCharProcsPromise.then(() => {\n        const glyphStream = charProcs.get(key);\n        const operatorList = new OperatorList();\n        return type3Evaluator.getOperatorList({\n          stream: glyphStream,\n          task,\n          resources: fontResources,\n          operatorList\n        }).then(() => {\n          if (operatorList.fnArray[0] === OPS.setCharWidthAndBounds) {\n            this._removeType3ColorOperators(operatorList, fontBBoxSize);\n          }\n          charProcOperatorList[key] = operatorList.getIR();\n          for (const dependency of operatorList.dependencies) {\n            type3Dependencies.add(dependency);\n          }\n        }).catch(function (reason) {\n          warn(`Type3 font resource \"${key}\" is not available.`);\n          const dummyOperatorList = new OperatorList();\n          charProcOperatorList[key] = dummyOperatorList.getIR();\n        });\n      });\n    }\n    this.type3Loaded = loadCharProcsPromise.then(() => {\n      translatedFont.charProcOperatorList = charProcOperatorList;\n      if (this._bbox) {\n        translatedFont.isCharBBox = true;\n        translatedFont.bbox = this._bbox;\n      }\n    });\n    return this.type3Loaded;\n  }\n  _removeType3ColorOperators(operatorList, fontBBoxSize = NaN) {\n    const charBBox = Util.normalizeRect(operatorList.argsArray[0].slice(2)),\n      width = charBBox[2] - charBBox[0],\n      height = charBBox[3] - charBBox[1];\n    const charBBoxSize = Math.hypot(width, height);\n    if (width === 0 || height === 0) {\n      operatorList.fnArray.splice(0, 1);\n      operatorList.argsArray.splice(0, 1);\n    } else if (fontBBoxSize === 0 || Math.round(charBBoxSize / fontBBoxSize) >= 10) {\n      if (!this._bbox) {\n        this._bbox = [Infinity, Infinity, -Infinity, -Infinity];\n      }\n      this._bbox[0] = Math.min(this._bbox[0], charBBox[0]);\n      this._bbox[1] = Math.min(this._bbox[1], charBBox[1]);\n      this._bbox[2] = Math.max(this._bbox[2], charBBox[2]);\n      this._bbox[3] = Math.max(this._bbox[3], charBBox[3]);\n    }\n    let i = 0,\n      ii = operatorList.length;\n    while (i < ii) {\n      switch (operatorList.fnArray[i]) {\n        case OPS.setCharWidthAndBounds:\n          break;\n        case OPS.setStrokeColorSpace:\n        case OPS.setFillColorSpace:\n        case OPS.setStrokeColor:\n        case OPS.setStrokeColorN:\n        case OPS.setFillColor:\n        case OPS.setFillColorN:\n        case OPS.setStrokeGray:\n        case OPS.setFillGray:\n        case OPS.setStrokeRGBColor:\n        case OPS.setFillRGBColor:\n        case OPS.setStrokeCMYKColor:\n        case OPS.setFillCMYKColor:\n        case OPS.shadingFill:\n        case OPS.setRenderingIntent:\n          operatorList.fnArray.splice(i, 1);\n          operatorList.argsArray.splice(i, 1);\n          ii--;\n          continue;\n        case OPS.setGState:\n          const [gStateObj] = operatorList.argsArray[i];\n          let j = 0,\n            jj = gStateObj.length;\n          while (j < jj) {\n            const [gStateKey] = gStateObj[j];\n            switch (gStateKey) {\n              case \"TR\":\n              case \"TR2\":\n              case \"HT\":\n              case \"BG\":\n              case \"BG2\":\n              case \"UCR\":\n              case \"UCR2\":\n                gStateObj.splice(j, 1);\n                jj--;\n                continue;\n            }\n            j++;\n          }\n          break;\n      }\n      i++;\n    }\n  }\n}\nclass StateManager {\n  constructor(initialState = new EvalState()) {\n    this.state = initialState;\n    this.stateStack = [];\n  }\n  save() {\n    const old = this.state;\n    this.stateStack.push(this.state);\n    this.state = old.clone();\n  }\n  restore() {\n    const prev = this.stateStack.pop();\n    if (prev) {\n      this.state = prev;\n    }\n  }\n  transform(args) {\n    this.state.ctm = Util.transform(this.state.ctm, args);\n  }\n}\nclass TextState {\n  constructor() {\n    this.ctm = new Float32Array(IDENTITY_MATRIX);\n    this.fontName = null;\n    this.fontSize = 0;\n    this.loadedName = null;\n    this.font = null;\n    this.fontMatrix = FONT_IDENTITY_MATRIX;\n    this.textMatrix = IDENTITY_MATRIX.slice();\n    this.textLineMatrix = IDENTITY_MATRIX.slice();\n    this.charSpacing = 0;\n    this.wordSpacing = 0;\n    this.leading = 0;\n    this.textHScale = 1;\n    this.textRise = 0;\n  }\n  setTextMatrix(a, b, c, d, e, f) {\n    const m = this.textMatrix;\n    m[0] = a;\n    m[1] = b;\n    m[2] = c;\n    m[3] = d;\n    m[4] = e;\n    m[5] = f;\n  }\n  setTextLineMatrix(a, b, c, d, e, f) {\n    const m = this.textLineMatrix;\n    m[0] = a;\n    m[1] = b;\n    m[2] = c;\n    m[3] = d;\n    m[4] = e;\n    m[5] = f;\n  }\n  translateTextMatrix(x, y) {\n    const m = this.textMatrix;\n    m[4] = m[0] * x + m[2] * y + m[4];\n    m[5] = m[1] * x + m[3] * y + m[5];\n  }\n  translateTextLineMatrix(x, y) {\n    const m = this.textLineMatrix;\n    m[4] = m[0] * x + m[2] * y + m[4];\n    m[5] = m[1] * x + m[3] * y + m[5];\n  }\n  carriageReturn() {\n    this.translateTextLineMatrix(0, -this.leading);\n    this.textMatrix = this.textLineMatrix.slice();\n  }\n  clone() {\n    const clone = Object.create(this);\n    clone.textMatrix = this.textMatrix.slice();\n    clone.textLineMatrix = this.textLineMatrix.slice();\n    clone.fontMatrix = this.fontMatrix.slice();\n    return clone;\n  }\n}\nclass EvalState {\n  constructor() {\n    this.ctm = new Float32Array(IDENTITY_MATRIX);\n    this.font = null;\n    this.textRenderingMode = TextRenderingMode.FILL;\n    this.fillColorSpace = ColorSpace.singletons.gray;\n    this.strokeColorSpace = ColorSpace.singletons.gray;\n  }\n  clone() {\n    return Object.create(this);\n  }\n}\nclass EvaluatorPreprocessor {\n  static get opMap() {\n    return shadow(this, \"opMap\", Object.assign(Object.create(null), {\n      w: {\n        id: OPS.setLineWidth,\n        numArgs: 1,\n        variableArgs: false\n      },\n      J: {\n        id: OPS.setLineCap,\n        numArgs: 1,\n        variableArgs: false\n      },\n      j: {\n        id: OPS.setLineJoin,\n        numArgs: 1,\n        variableArgs: false\n      },\n      M: {\n        id: OPS.setMiterLimit,\n        numArgs: 1,\n        variableArgs: false\n      },\n      d: {\n        id: OPS.setDash,\n        numArgs: 2,\n        variableArgs: false\n      },\n      ri: {\n        id: OPS.setRenderingIntent,\n        numArgs: 1,\n        variableArgs: false\n      },\n      i: {\n        id: OPS.setFlatness,\n        numArgs: 1,\n        variableArgs: false\n      },\n      gs: {\n        id: OPS.setGState,\n        numArgs: 1,\n        variableArgs: false\n      },\n      q: {\n        id: OPS.save,\n        numArgs: 0,\n        variableArgs: false\n      },\n      Q: {\n        id: OPS.restore,\n        numArgs: 0,\n        variableArgs: false\n      },\n      cm: {\n        id: OPS.transform,\n        numArgs: 6,\n        variableArgs: false\n      },\n      m: {\n        id: OPS.moveTo,\n        numArgs: 2,\n        variableArgs: false\n      },\n      l: {\n        id: OPS.lineTo,\n        numArgs: 2,\n        variableArgs: false\n      },\n      c: {\n        id: OPS.curveTo,\n        numArgs: 6,\n        variableArgs: false\n      },\n      v: {\n        id: OPS.curveTo2,\n        numArgs: 4,\n        variableArgs: false\n      },\n      y: {\n        id: OPS.curveTo3,\n        numArgs: 4,\n        variableArgs: false\n      },\n      h: {\n        id: OPS.closePath,\n        numArgs: 0,\n        variableArgs: false\n      },\n      re: {\n        id: OPS.rectangle,\n        numArgs: 4,\n        variableArgs: false\n      },\n      S: {\n        id: OPS.stroke,\n        numArgs: 0,\n        variableArgs: false\n      },\n      s: {\n        id: OPS.closeStroke,\n        numArgs: 0,\n        variableArgs: false\n      },\n      f: {\n        id: OPS.fill,\n        numArgs: 0,\n        variableArgs: false\n      },\n      F: {\n        id: OPS.fill,\n        numArgs: 0,\n        variableArgs: false\n      },\n      \"f*\": {\n        id: OPS.eoFill,\n        numArgs: 0,\n        variableArgs: false\n      },\n      B: {\n        id: OPS.fillStroke,\n        numArgs: 0,\n        variableArgs: false\n      },\n      \"B*\": {\n        id: OPS.eoFillStroke,\n        numArgs: 0,\n        variableArgs: false\n      },\n      b: {\n        id: OPS.closeFillStroke,\n        numArgs: 0,\n        variableArgs: false\n      },\n      \"b*\": {\n        id: OPS.closeEOFillStroke,\n        numArgs: 0,\n        variableArgs: false\n      },\n      n: {\n        id: OPS.endPath,\n        numArgs: 0,\n        variableArgs: false\n      },\n      W: {\n        id: OPS.clip,\n        numArgs: 0,\n        variableArgs: false\n      },\n      \"W*\": {\n        id: OPS.eoClip,\n        numArgs: 0,\n        variableArgs: false\n      },\n      BT: {\n        id: OPS.beginText,\n        numArgs: 0,\n        variableArgs: false\n      },\n      ET: {\n        id: OPS.endText,\n        numArgs: 0,\n        variableArgs: false\n      },\n      Tc: {\n        id: OPS.setCharSpacing,\n        numArgs: 1,\n        variableArgs: false\n      },\n      Tw: {\n        id: OPS.setWordSpacing,\n        numArgs: 1,\n        variableArgs: false\n      },\n      Tz: {\n        id: OPS.setHScale,\n        numArgs: 1,\n        variableArgs: false\n      },\n      TL: {\n        id: OPS.setLeading,\n        numArgs: 1,\n        variableArgs: false\n      },\n      Tf: {\n        id: OPS.setFont,\n        numArgs: 2,\n        variableArgs: false\n      },\n      Tr: {\n        id: OPS.setTextRenderingMode,\n        numArgs: 1,\n        variableArgs: false\n      },\n      Ts: {\n        id: OPS.setTextRise,\n        numArgs: 1,\n        variableArgs: false\n      },\n      Td: {\n        id: OPS.moveText,\n        numArgs: 2,\n        variableArgs: false\n      },\n      TD: {\n        id: OPS.setLeadingMoveText,\n        numArgs: 2,\n        variableArgs: false\n      },\n      Tm: {\n        id: OPS.setTextMatrix,\n        numArgs: 6,\n        variableArgs: false\n      },\n      \"T*\": {\n        id: OPS.nextLine,\n        numArgs: 0,\n        variableArgs: false\n      },\n      Tj: {\n        id: OPS.showText,\n        numArgs: 1,\n        variableArgs: false\n      },\n      TJ: {\n        id: OPS.showSpacedText,\n        numArgs: 1,\n        variableArgs: false\n      },\n      \"'\": {\n        id: OPS.nextLineShowText,\n        numArgs: 1,\n        variableArgs: false\n      },\n      '\"': {\n        id: OPS.nextLineSetSpacingShowText,\n        numArgs: 3,\n        variableArgs: false\n      },\n      d0: {\n        id: OPS.setCharWidth,\n        numArgs: 2,\n        variableArgs: false\n      },\n      d1: {\n        id: OPS.setCharWidthAndBounds,\n        numArgs: 6,\n        variableArgs: false\n      },\n      CS: {\n        id: OPS.setStrokeColorSpace,\n        numArgs: 1,\n        variableArgs: false\n      },\n      cs: {\n        id: OPS.setFillColorSpace,\n        numArgs: 1,\n        variableArgs: false\n      },\n      SC: {\n        id: OPS.setStrokeColor,\n        numArgs: 4,\n        variableArgs: true\n      },\n      SCN: {\n        id: OPS.setStrokeColorN,\n        numArgs: 33,\n        variableArgs: true\n      },\n      sc: {\n        id: OPS.setFillColor,\n        numArgs: 4,\n        variableArgs: true\n      },\n      scn: {\n        id: OPS.setFillColorN,\n        numArgs: 33,\n        variableArgs: true\n      },\n      G: {\n        id: OPS.setStrokeGray,\n        numArgs: 1,\n        variableArgs: false\n      },\n      g: {\n        id: OPS.setFillGray,\n        numArgs: 1,\n        variableArgs: false\n      },\n      RG: {\n        id: OPS.setStrokeRGBColor,\n        numArgs: 3,\n        variableArgs: false\n      },\n      rg: {\n        id: OPS.setFillRGBColor,\n        numArgs: 3,\n        variableArgs: false\n      },\n      K: {\n        id: OPS.setStrokeCMYKColor,\n        numArgs: 4,\n        variableArgs: false\n      },\n      k: {\n        id: OPS.setFillCMYKColor,\n        numArgs: 4,\n        variableArgs: false\n      },\n      sh: {\n        id: OPS.shadingFill,\n        numArgs: 1,\n        variableArgs: false\n      },\n      BI: {\n        id: OPS.beginInlineImage,\n        numArgs: 0,\n        variableArgs: false\n      },\n      ID: {\n        id: OPS.beginImageData,\n        numArgs: 0,\n        variableArgs: false\n      },\n      EI: {\n        id: OPS.endInlineImage,\n        numArgs: 1,\n        variableArgs: false\n      },\n      Do: {\n        id: OPS.paintXObject,\n        numArgs: 1,\n        variableArgs: false\n      },\n      MP: {\n        id: OPS.markPoint,\n        numArgs: 1,\n        variableArgs: false\n      },\n      DP: {\n        id: OPS.markPointProps,\n        numArgs: 2,\n        variableArgs: false\n      },\n      BMC: {\n        id: OPS.beginMarkedContent,\n        numArgs: 1,\n        variableArgs: false\n      },\n      BDC: {\n        id: OPS.beginMarkedContentProps,\n        numArgs: 2,\n        variableArgs: false\n      },\n      EMC: {\n        id: OPS.endMarkedContent,\n        numArgs: 0,\n        variableArgs: false\n      },\n      BX: {\n        id: OPS.beginCompat,\n        numArgs: 0,\n        variableArgs: false\n      },\n      EX: {\n        id: OPS.endCompat,\n        numArgs: 0,\n        variableArgs: false\n      },\n      BM: null,\n      BD: null,\n      true: null,\n      fa: null,\n      fal: null,\n      fals: null,\n      false: null,\n      nu: null,\n      nul: null,\n      null: null\n    }));\n  }\n  static MAX_INVALID_PATH_OPS = 10;\n  constructor(stream, xref, stateManager = new StateManager()) {\n    this.parser = new Parser({\n      lexer: new Lexer(stream, EvaluatorPreprocessor.opMap),\n      xref\n    });\n    this.stateManager = stateManager;\n    this.nonProcessedArgs = [];\n    this._isPathOp = false;\n    this._numInvalidPathOPS = 0;\n  }\n  get savedStatesDepth() {\n    return this.stateManager.stateStack.length;\n  }\n  read(operation) {\n    let args = operation.args;\n    while (true) {\n      const obj = this.parser.getObj();\n      if (obj instanceof Cmd) {\n        const cmd = obj.cmd;\n        const opSpec = EvaluatorPreprocessor.opMap[cmd];\n        if (!opSpec) {\n          warn(`Unknown command \"${cmd}\".`);\n          continue;\n        }\n        const fn = opSpec.id;\n        const numArgs = opSpec.numArgs;\n        let argsLength = args !== null ? args.length : 0;\n        if (!this._isPathOp) {\n          this._numInvalidPathOPS = 0;\n        }\n        this._isPathOp = fn >= OPS.moveTo && fn <= OPS.endPath;\n        if (!opSpec.variableArgs) {\n          if (argsLength !== numArgs) {\n            const nonProcessedArgs = this.nonProcessedArgs;\n            while (argsLength > numArgs) {\n              nonProcessedArgs.push(args.shift());\n              argsLength--;\n            }\n            while (argsLength < numArgs && nonProcessedArgs.length !== 0) {\n              if (args === null) {\n                args = [];\n              }\n              args.unshift(nonProcessedArgs.pop());\n              argsLength++;\n            }\n          }\n          if (argsLength < numArgs) {\n            const partialMsg = `command ${cmd}: expected ${numArgs} args, ` + `but received ${argsLength} args.`;\n            if (this._isPathOp && ++this._numInvalidPathOPS > EvaluatorPreprocessor.MAX_INVALID_PATH_OPS) {\n              throw new FormatError(`Invalid ${partialMsg}`);\n            }\n            warn(`Skipping ${partialMsg}`);\n            if (args !== null) {\n              args.length = 0;\n            }\n            continue;\n          }\n        } else if (argsLength > numArgs) {\n          info(`Command ${cmd}: expected [0, ${numArgs}] args, ` + `but received ${argsLength} args.`);\n        }\n        this.preprocessCommand(fn, args);\n        operation.fn = fn;\n        operation.args = args;\n        return true;\n      }\n      if (obj === EOF) {\n        return false;\n      }\n      if (obj !== null) {\n        if (args === null) {\n          args = [];\n        }\n        args.push(obj);\n        if (args.length > 33) {\n          throw new FormatError(\"Too many arguments\");\n        }\n      }\n    }\n  }\n  preprocessCommand(fn, args) {\n    switch (fn | 0) {\n      case OPS.save:\n        this.stateManager.save();\n        break;\n      case OPS.restore:\n        this.stateManager.restore();\n        break;\n      case OPS.transform:\n        this.stateManager.transform(args);\n        break;\n    }\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/default_appearance.js\n\n\n\n\n\n\n\n\nclass DefaultAppearanceEvaluator extends EvaluatorPreprocessor {\n  constructor(str) {\n    super(new StringStream(str));\n  }\n  parse() {\n    const operation = {\n      fn: 0,\n      args: []\n    };\n    const result = {\n      fontSize: 0,\n      fontName: \"\",\n      fontColor: new Uint8ClampedArray(3)\n    };\n    try {\n      while (true) {\n        operation.args.length = 0;\n        if (!this.read(operation)) {\n          break;\n        }\n        if (this.savedStatesDepth !== 0) {\n          continue;\n        }\n        const {\n          fn,\n          args\n        } = operation;\n        switch (fn | 0) {\n          case OPS.setFont:\n            const [fontName, fontSize] = args;\n            if (fontName instanceof Name) {\n              result.fontName = fontName.name;\n            }\n            if (typeof fontSize === \"number\" && fontSize > 0) {\n              result.fontSize = fontSize;\n            }\n            break;\n          case OPS.setFillRGBColor:\n            ColorSpace.singletons.rgb.getRgbItem(args, 0, result.fontColor, 0);\n            break;\n          case OPS.setFillGray:\n            ColorSpace.singletons.gray.getRgbItem(args, 0, result.fontColor, 0);\n            break;\n          case OPS.setFillCMYKColor:\n            ColorSpace.singletons.cmyk.getRgbItem(args, 0, result.fontColor, 0);\n            break;\n        }\n      }\n    } catch (reason) {\n      warn(`parseDefaultAppearance - ignoring errors: \"${reason}\".`);\n    }\n    return result;\n  }\n}\nfunction parseDefaultAppearance(str) {\n  return new DefaultAppearanceEvaluator(str).parse();\n}\nclass AppearanceStreamEvaluator extends EvaluatorPreprocessor {\n  constructor(stream, evaluatorOptions, xref) {\n    super(stream);\n    this.stream = stream;\n    this.evaluatorOptions = evaluatorOptions;\n    this.xref = xref;\n    this.resources = stream.dict?.get(\"Resources\");\n  }\n  parse() {\n    const operation = {\n      fn: 0,\n      args: []\n    };\n    let result = {\n      scaleFactor: 1,\n      fontSize: 0,\n      fontName: \"\",\n      fontColor: new Uint8ClampedArray(3),\n      fillColorSpace: ColorSpace.singletons.gray\n    };\n    let breakLoop = false;\n    const stack = [];\n    try {\n      while (true) {\n        operation.args.length = 0;\n        if (breakLoop || !this.read(operation)) {\n          break;\n        }\n        const {\n          fn,\n          args\n        } = operation;\n        switch (fn | 0) {\n          case OPS.save:\n            stack.push({\n              scaleFactor: result.scaleFactor,\n              fontSize: result.fontSize,\n              fontName: result.fontName,\n              fontColor: result.fontColor.slice(),\n              fillColorSpace: result.fillColorSpace\n            });\n            break;\n          case OPS.restore:\n            result = stack.pop() || result;\n            break;\n          case OPS.setTextMatrix:\n            result.scaleFactor *= Math.hypot(args[0], args[1]);\n            break;\n          case OPS.setFont:\n            const [fontName, fontSize] = args;\n            if (fontName instanceof Name) {\n              result.fontName = fontName.name;\n            }\n            if (typeof fontSize === \"number\" && fontSize > 0) {\n              result.fontSize = fontSize * result.scaleFactor;\n            }\n            break;\n          case OPS.setFillColorSpace:\n            result.fillColorSpace = ColorSpace.parse({\n              cs: args[0],\n              xref: this.xref,\n              resources: this.resources,\n              pdfFunctionFactory: this._pdfFunctionFactory,\n              localColorSpaceCache: this._localColorSpaceCache\n            });\n            break;\n          case OPS.setFillColor:\n            const cs = result.fillColorSpace;\n            cs.getRgbItem(args, 0, result.fontColor, 0);\n            break;\n          case OPS.setFillRGBColor:\n            ColorSpace.singletons.rgb.getRgbItem(args, 0, result.fontColor, 0);\n            break;\n          case OPS.setFillGray:\n            ColorSpace.singletons.gray.getRgbItem(args, 0, result.fontColor, 0);\n            break;\n          case OPS.setFillCMYKColor:\n            ColorSpace.singletons.cmyk.getRgbItem(args, 0, result.fontColor, 0);\n            break;\n          case OPS.showText:\n          case OPS.showSpacedText:\n          case OPS.nextLineShowText:\n          case OPS.nextLineSetSpacingShowText:\n            breakLoop = true;\n            break;\n        }\n      }\n    } catch (reason) {\n      warn(`parseAppearanceStream - ignoring errors: \"${reason}\".`);\n    }\n    this.stream.reset();\n    delete result.scaleFactor;\n    delete result.fillColorSpace;\n    return result;\n  }\n  get _localColorSpaceCache() {\n    return shadow(this, \"_localColorSpaceCache\", new LocalColorSpaceCache());\n  }\n  get _pdfFunctionFactory() {\n    const pdfFunctionFactory = new PDFFunctionFactory({\n      xref: this.xref,\n      isEvalSupported: this.evaluatorOptions.isEvalSupported\n    });\n    return shadow(this, \"_pdfFunctionFactory\", pdfFunctionFactory);\n  }\n}\nfunction parseAppearanceStream(stream, evaluatorOptions, xref) {\n  return new AppearanceStreamEvaluator(stream, evaluatorOptions, xref).parse();\n}\nfunction getPdfColor(color, isFill) {\n  if (color[0] === color[1] && color[1] === color[2]) {\n    const gray = color[0] / 255;\n    return `${numberToString(gray)} ${isFill ? \"g\" : \"G\"}`;\n  }\n  return Array.from(color, c => numberToString(c / 255)).join(\" \") + ` ${isFill ? \"rg\" : \"RG\"}`;\n}\nfunction createDefaultAppearance({\n  fontSize,\n  fontName,\n  fontColor\n}) {\n  return `/${escapePDFName(fontName)} ${fontSize} Tf ${getPdfColor(fontColor, true)}`;\n}\nclass FakeUnicodeFont {\n  constructor(xref, fontFamily) {\n    this.xref = xref;\n    this.widths = null;\n    this.firstChar = Infinity;\n    this.lastChar = -Infinity;\n    this.fontFamily = fontFamily;\n    const canvas = new OffscreenCanvas(1, 1);\n    this.ctxMeasure = canvas.getContext(\"2d\");\n    if (!FakeUnicodeFont._fontNameId) {\n      FakeUnicodeFont._fontNameId = 1;\n    }\n    this.fontName = Name.get(`InvalidPDFjsFont_${fontFamily}_${FakeUnicodeFont._fontNameId++}`);\n  }\n  get fontDescriptorRef() {\n    if (!FakeUnicodeFont._fontDescriptorRef) {\n      const fontDescriptor = new Dict(this.xref);\n      fontDescriptor.set(\"Type\", Name.get(\"FontDescriptor\"));\n      fontDescriptor.set(\"FontName\", this.fontName);\n      fontDescriptor.set(\"FontFamily\", \"MyriadPro Regular\");\n      fontDescriptor.set(\"FontBBox\", [0, 0, 0, 0]);\n      fontDescriptor.set(\"FontStretch\", Name.get(\"Normal\"));\n      fontDescriptor.set(\"FontWeight\", 400);\n      fontDescriptor.set(\"ItalicAngle\", 0);\n      FakeUnicodeFont._fontDescriptorRef = this.xref.getNewPersistentRef(fontDescriptor);\n    }\n    return FakeUnicodeFont._fontDescriptorRef;\n  }\n  get descendantFontRef() {\n    const descendantFont = new Dict(this.xref);\n    descendantFont.set(\"BaseFont\", this.fontName);\n    descendantFont.set(\"Type\", Name.get(\"Font\"));\n    descendantFont.set(\"Subtype\", Name.get(\"CIDFontType0\"));\n    descendantFont.set(\"CIDToGIDMap\", Name.get(\"Identity\"));\n    descendantFont.set(\"FirstChar\", this.firstChar);\n    descendantFont.set(\"LastChar\", this.lastChar);\n    descendantFont.set(\"FontDescriptor\", this.fontDescriptorRef);\n    descendantFont.set(\"DW\", 1000);\n    const widths = [];\n    const chars = [...this.widths.entries()].sort();\n    let currentChar = null;\n    let currentWidths = null;\n    for (const [char, width] of chars) {\n      if (!currentChar) {\n        currentChar = char;\n        currentWidths = [width];\n        continue;\n      }\n      if (char === currentChar + currentWidths.length) {\n        currentWidths.push(width);\n      } else {\n        widths.push(currentChar, currentWidths);\n        currentChar = char;\n        currentWidths = [width];\n      }\n    }\n    if (currentChar) {\n      widths.push(currentChar, currentWidths);\n    }\n    descendantFont.set(\"W\", widths);\n    const cidSystemInfo = new Dict(this.xref);\n    cidSystemInfo.set(\"Ordering\", \"Identity\");\n    cidSystemInfo.set(\"Registry\", \"Adobe\");\n    cidSystemInfo.set(\"Supplement\", 0);\n    descendantFont.set(\"CIDSystemInfo\", cidSystemInfo);\n    return this.xref.getNewPersistentRef(descendantFont);\n  }\n  get baseFontRef() {\n    const baseFont = new Dict(this.xref);\n    baseFont.set(\"BaseFont\", this.fontName);\n    baseFont.set(\"Type\", Name.get(\"Font\"));\n    baseFont.set(\"Subtype\", Name.get(\"Type0\"));\n    baseFont.set(\"Encoding\", Name.get(\"Identity-H\"));\n    baseFont.set(\"DescendantFonts\", [this.descendantFontRef]);\n    baseFont.set(\"ToUnicode\", Name.get(\"Identity-H\"));\n    return this.xref.getNewPersistentRef(baseFont);\n  }\n  get resources() {\n    const resources = new Dict(this.xref);\n    const font = new Dict(this.xref);\n    font.set(this.fontName.name, this.baseFontRef);\n    resources.set(\"Font\", font);\n    return resources;\n  }\n  _createContext() {\n    this.widths = new Map();\n    this.ctxMeasure.font = `1000px ${this.fontFamily}`;\n    return this.ctxMeasure;\n  }\n  createFontResources(text) {\n    const ctx = this._createContext();\n    for (const line of text.split(/\\r\\n?|\\n/)) {\n      for (const char of line.split(\"\")) {\n        const code = char.charCodeAt(0);\n        if (this.widths.has(code)) {\n          continue;\n        }\n        const metrics = ctx.measureText(char);\n        const width = Math.ceil(metrics.width);\n        this.widths.set(code, width);\n        this.firstChar = Math.min(code, this.firstChar);\n        this.lastChar = Math.max(code, this.lastChar);\n      }\n    }\n    return this.resources;\n  }\n  static getFirstPositionInfo(rect, rotation, fontSize) {\n    const [x1, y1, x2, y2] = rect;\n    let w = x2 - x1;\n    let h = y2 - y1;\n    if (rotation % 180 !== 0) {\n      [w, h] = [h, w];\n    }\n    const lineHeight = LINE_FACTOR * fontSize;\n    const lineDescent = LINE_DESCENT_FACTOR * fontSize;\n    return {\n      coords: [0, h + lineDescent - lineHeight],\n      bbox: [0, 0, w, h],\n      matrix: rotation !== 0 ? getRotationMatrix(rotation, h, lineHeight) : undefined\n    };\n  }\n  createAppearance(text, rect, rotation, fontSize, bgColor, strokeAlpha) {\n    const ctx = this._createContext();\n    const lines = [];\n    let maxWidth = -Infinity;\n    for (const line of text.split(/\\r\\n?|\\n/)) {\n      lines.push(line);\n      const lineWidth = ctx.measureText(line).width;\n      maxWidth = Math.max(maxWidth, lineWidth);\n      for (const code of codePointIter(line)) {\n        const char = String.fromCodePoint(code);\n        let width = this.widths.get(code);\n        if (width === undefined) {\n          const metrics = ctx.measureText(char);\n          width = Math.ceil(metrics.width);\n          this.widths.set(code, width);\n          this.firstChar = Math.min(code, this.firstChar);\n          this.lastChar = Math.max(code, this.lastChar);\n        }\n      }\n    }\n    maxWidth *= fontSize / 1000;\n    const [x1, y1, x2, y2] = rect;\n    let w = x2 - x1;\n    let h = y2 - y1;\n    if (rotation % 180 !== 0) {\n      [w, h] = [h, w];\n    }\n    let hscale = 1;\n    if (maxWidth > w) {\n      hscale = w / maxWidth;\n    }\n    let vscale = 1;\n    const lineHeight = LINE_FACTOR * fontSize;\n    const lineDescent = LINE_DESCENT_FACTOR * fontSize;\n    const maxHeight = lineHeight * lines.length;\n    if (maxHeight > h) {\n      vscale = h / maxHeight;\n    }\n    const fscale = Math.min(hscale, vscale);\n    const newFontSize = fontSize * fscale;\n    const buffer = [\"q\", `0 0 ${numberToString(w)} ${numberToString(h)} re W n`, `BT`, `1 0 0 1 0 ${numberToString(h + lineDescent)} Tm 0 Tc ${getPdfColor(bgColor, true)}`, `/${this.fontName.name} ${numberToString(newFontSize)} Tf`];\n    const {\n      resources\n    } = this;\n    strokeAlpha = typeof strokeAlpha === \"number\" && strokeAlpha >= 0 && strokeAlpha <= 1 ? strokeAlpha : 1;\n    if (strokeAlpha !== 1) {\n      buffer.push(\"/R0 gs\");\n      const extGState = new Dict(this.xref);\n      const r0 = new Dict(this.xref);\n      r0.set(\"ca\", strokeAlpha);\n      r0.set(\"CA\", strokeAlpha);\n      r0.set(\"Type\", Name.get(\"ExtGState\"));\n      extGState.set(\"R0\", r0);\n      resources.set(\"ExtGState\", extGState);\n    }\n    const vShift = numberToString(lineHeight);\n    for (const line of lines) {\n      buffer.push(`0 -${vShift} Td <${stringToUTF16HexString(line)}> Tj`);\n    }\n    buffer.push(\"ET\", \"Q\");\n    const appearance = buffer.join(\"\\n\");\n    const appearanceStreamDict = new Dict(this.xref);\n    appearanceStreamDict.set(\"Subtype\", Name.get(\"Form\"));\n    appearanceStreamDict.set(\"Type\", Name.get(\"XObject\"));\n    appearanceStreamDict.set(\"BBox\", [0, 0, w, h]);\n    appearanceStreamDict.set(\"Length\", appearance.length);\n    appearanceStreamDict.set(\"Resources\", resources);\n    if (rotation) {\n      const matrix = getRotationMatrix(rotation, w, h);\n      appearanceStreamDict.set(\"Matrix\", matrix);\n    }\n    const ap = new StringStream(appearance);\n    ap.dict = appearanceStreamDict;\n    return ap;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/name_number_tree.js\n\n\nclass NameOrNumberTree {\n  constructor(root, xref, type) {\n    if (this.constructor === NameOrNumberTree) {\n      unreachable(\"Cannot initialize NameOrNumberTree.\");\n    }\n    this.root = root;\n    this.xref = xref;\n    this._type = type;\n  }\n  getAll() {\n    const map = new Map();\n    if (!this.root) {\n      return map;\n    }\n    const xref = this.xref;\n    const processed = new RefSet();\n    processed.put(this.root);\n    const queue = [this.root];\n    while (queue.length > 0) {\n      const obj = xref.fetchIfRef(queue.shift());\n      if (!(obj instanceof Dict)) {\n        continue;\n      }\n      if (obj.has(\"Kids\")) {\n        const kids = obj.get(\"Kids\");\n        if (!Array.isArray(kids)) {\n          continue;\n        }\n        for (const kid of kids) {\n          if (processed.has(kid)) {\n            throw new FormatError(`Duplicate entry in \"${this._type}\" tree.`);\n          }\n          queue.push(kid);\n          processed.put(kid);\n        }\n        continue;\n      }\n      const entries = obj.get(this._type);\n      if (!Array.isArray(entries)) {\n        continue;\n      }\n      for (let i = 0, ii = entries.length; i < ii; i += 2) {\n        map.set(xref.fetchIfRef(entries[i]), xref.fetchIfRef(entries[i + 1]));\n      }\n    }\n    return map;\n  }\n  get(key) {\n    if (!this.root) {\n      return null;\n    }\n    const xref = this.xref;\n    let kidsOrEntries = xref.fetchIfRef(this.root);\n    let loopCount = 0;\n    const MAX_LEVELS = 10;\n    while (kidsOrEntries.has(\"Kids\")) {\n      if (++loopCount > MAX_LEVELS) {\n        warn(`Search depth limit reached for \"${this._type}\" tree.`);\n        return null;\n      }\n      const kids = kidsOrEntries.get(\"Kids\");\n      if (!Array.isArray(kids)) {\n        return null;\n      }\n      let l = 0,\n        r = kids.length - 1;\n      while (l <= r) {\n        const m = l + r >> 1;\n        const kid = xref.fetchIfRef(kids[m]);\n        const limits = kid.get(\"Limits\");\n        if (key < xref.fetchIfRef(limits[0])) {\n          r = m - 1;\n        } else if (key > xref.fetchIfRef(limits[1])) {\n          l = m + 1;\n        } else {\n          kidsOrEntries = kid;\n          break;\n        }\n      }\n      if (l > r) {\n        return null;\n      }\n    }\n    const entries = kidsOrEntries.get(this._type);\n    if (Array.isArray(entries)) {\n      let l = 0,\n        r = entries.length - 2;\n      while (l <= r) {\n        const tmp = l + r >> 1,\n          m = tmp + (tmp & 1);\n        const currentKey = xref.fetchIfRef(entries[m]);\n        if (key < currentKey) {\n          r = m - 2;\n        } else if (key > currentKey) {\n          l = m + 2;\n        } else {\n          return xref.fetchIfRef(entries[m + 1]);\n        }\n      }\n    }\n    return null;\n  }\n}\nclass NameTree extends NameOrNumberTree {\n  constructor(root, xref) {\n    super(root, xref, \"Names\");\n  }\n}\nclass NumberTree extends NameOrNumberTree {\n  constructor(root, xref) {\n    super(root, xref, \"Nums\");\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/cleanup_helper.js\n\n\n\n\nfunction clearGlobalCaches() {\n  clearPatternCaches();\n  clearPrimitiveCaches();\n  clearUnicodeCaches();\n  JpxImage.cleanup();\n}\n\n;// CONCATENATED MODULE: ./src/core/file_spec.js\n\n\n\nfunction pickPlatformItem(dict) {\n  if (!(dict instanceof Dict)) {\n    return null;\n  }\n  if (dict.has(\"UF\")) {\n    return dict.get(\"UF\");\n  } else if (dict.has(\"F\")) {\n    return dict.get(\"F\");\n  } else if (dict.has(\"Unix\")) {\n    return dict.get(\"Unix\");\n  } else if (dict.has(\"Mac\")) {\n    return dict.get(\"Mac\");\n  } else if (dict.has(\"DOS\")) {\n    return dict.get(\"DOS\");\n  }\n  return null;\n}\nfunction stripPath(str) {\n  return str.substring(str.lastIndexOf(\"/\") + 1);\n}\nclass FileSpec {\n  #contentAvailable = false;\n  constructor(root, xref, skipContent = false) {\n    if (!(root instanceof Dict)) {\n      return;\n    }\n    this.xref = xref;\n    this.root = root;\n    if (root.has(\"FS\")) {\n      this.fs = root.get(\"FS\");\n    }\n    if (root.has(\"RF\")) {\n      warn(\"Related file specifications are not supported\");\n    }\n    if (!skipContent) {\n      if (root.has(\"EF\")) {\n        this.#contentAvailable = true;\n      } else {\n        warn(\"Non-embedded file specifications are not supported\");\n      }\n    }\n  }\n  get filename() {\n    let filename = \"\";\n    const item = pickPlatformItem(this.root);\n    if (item && typeof item === \"string\") {\n      filename = stringToPDFString(item).replaceAll(\"\\\\\\\\\", \"\\\\\").replaceAll(\"\\\\/\", \"/\").replaceAll(\"\\\\\", \"/\");\n    }\n    return shadow(this, \"filename\", filename || \"unnamed\");\n  }\n  get content() {\n    if (!this.#contentAvailable) {\n      return null;\n    }\n    this._contentRef ||= pickPlatformItem(this.root?.get(\"EF\"));\n    let content = null;\n    if (this._contentRef) {\n      const fileObj = this.xref.fetchIfRef(this._contentRef);\n      if (fileObj instanceof BaseStream) {\n        content = fileObj.getBytes();\n      } else {\n        warn(\"Embedded file specification points to non-existing/invalid content\");\n      }\n    } else {\n      warn(\"Embedded file specification does not have any content\");\n    }\n    return content;\n  }\n  get description() {\n    let description = \"\";\n    const desc = this.root?.get(\"Desc\");\n    if (desc && typeof desc === \"string\") {\n      description = stringToPDFString(desc);\n    }\n    return shadow(this, \"description\", description);\n  }\n  get serializable() {\n    return {\n      rawFilename: this.filename,\n      filename: stripPath(this.filename),\n      content: this.content,\n      description: this.description\n    };\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/xml_parser.js\n\nconst XMLParserErrorCode = {\n  NoError: 0,\n  EndOfDocument: -1,\n  UnterminatedCdat: -2,\n  UnterminatedXmlDeclaration: -3,\n  UnterminatedDoctypeDeclaration: -4,\n  UnterminatedComment: -5,\n  MalformedElement: -6,\n  OutOfMemory: -7,\n  UnterminatedAttributeValue: -8,\n  UnterminatedElement: -9,\n  ElementNeverBegun: -10\n};\nfunction isWhitespace(s, index) {\n  const ch = s[index];\n  return ch === \" \" || ch === \"\\n\" || ch === \"\\r\" || ch === \"\\t\";\n}\nfunction isWhitespaceString(s) {\n  for (let i = 0, ii = s.length; i < ii; i++) {\n    if (!isWhitespace(s, i)) {\n      return false;\n    }\n  }\n  return true;\n}\nclass XMLParserBase {\n  _resolveEntities(s) {\n    return s.replaceAll(/&([^;]+);/g, (all, entity) => {\n      if (entity.substring(0, 2) === \"#x\") {\n        return String.fromCodePoint(parseInt(entity.substring(2), 16));\n      } else if (entity.substring(0, 1) === \"#\") {\n        return String.fromCodePoint(parseInt(entity.substring(1), 10));\n      }\n      switch (entity) {\n        case \"lt\":\n          return \"<\";\n        case \"gt\":\n          return \">\";\n        case \"amp\":\n          return \"&\";\n        case \"quot\":\n          return '\"';\n        case \"apos\":\n          return \"'\";\n      }\n      return this.onResolveEntity(entity);\n    });\n  }\n  _parseContent(s, start) {\n    const attributes = [];\n    let pos = start;\n    function skipWs() {\n      while (pos < s.length && isWhitespace(s, pos)) {\n        ++pos;\n      }\n    }\n    while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== \">\" && s[pos] !== \"/\") {\n      ++pos;\n    }\n    const name = s.substring(start, pos);\n    skipWs();\n    while (pos < s.length && s[pos] !== \">\" && s[pos] !== \"/\" && s[pos] !== \"?\") {\n      skipWs();\n      let attrName = \"\",\n        attrValue = \"\";\n      while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== \"=\") {\n        attrName += s[pos];\n        ++pos;\n      }\n      skipWs();\n      if (s[pos] !== \"=\") {\n        return null;\n      }\n      ++pos;\n      skipWs();\n      const attrEndChar = s[pos];\n      if (attrEndChar !== '\"' && attrEndChar !== \"'\") {\n        return null;\n      }\n      const attrEndIndex = s.indexOf(attrEndChar, ++pos);\n      if (attrEndIndex < 0) {\n        return null;\n      }\n      attrValue = s.substring(pos, attrEndIndex);\n      attributes.push({\n        name: attrName,\n        value: this._resolveEntities(attrValue)\n      });\n      pos = attrEndIndex + 1;\n      skipWs();\n    }\n    return {\n      name,\n      attributes,\n      parsed: pos - start\n    };\n  }\n  _parseProcessingInstruction(s, start) {\n    let pos = start;\n    function skipWs() {\n      while (pos < s.length && isWhitespace(s, pos)) {\n        ++pos;\n      }\n    }\n    while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== \">\" && s[pos] !== \"?\" && s[pos] !== \"/\") {\n      ++pos;\n    }\n    const name = s.substring(start, pos);\n    skipWs();\n    const attrStart = pos;\n    while (pos < s.length && (s[pos] !== \"?\" || s[pos + 1] !== \">\")) {\n      ++pos;\n    }\n    const value = s.substring(attrStart, pos);\n    return {\n      name,\n      value,\n      parsed: pos - start\n    };\n  }\n  parseXml(s) {\n    let i = 0;\n    while (i < s.length) {\n      const ch = s[i];\n      let j = i;\n      if (ch === \"<\") {\n        ++j;\n        const ch2 = s[j];\n        let q;\n        switch (ch2) {\n          case \"/\":\n            ++j;\n            q = s.indexOf(\">\", j);\n            if (q < 0) {\n              this.onError(XMLParserErrorCode.UnterminatedElement);\n              return;\n            }\n            this.onEndElement(s.substring(j, q));\n            j = q + 1;\n            break;\n          case \"?\":\n            ++j;\n            const pi = this._parseProcessingInstruction(s, j);\n            if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== \"?>\") {\n              this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration);\n              return;\n            }\n            this.onPi(pi.name, pi.value);\n            j += pi.parsed + 2;\n            break;\n          case \"!\":\n            if (s.substring(j + 1, j + 3) === \"--\") {\n              q = s.indexOf(\"-->\", j + 3);\n              if (q < 0) {\n                this.onError(XMLParserErrorCode.UnterminatedComment);\n                return;\n              }\n              this.onComment(s.substring(j + 3, q));\n              j = q + 3;\n            } else if (s.substring(j + 1, j + 8) === \"[CDATA[\") {\n              q = s.indexOf(\"]]>\", j + 8);\n              if (q < 0) {\n                this.onError(XMLParserErrorCode.UnterminatedCdat);\n                return;\n              }\n              this.onCdata(s.substring(j + 8, q));\n              j = q + 3;\n            } else if (s.substring(j + 1, j + 8) === \"DOCTYPE\") {\n              const q2 = s.indexOf(\"[\", j + 8);\n              let complexDoctype = false;\n              q = s.indexOf(\">\", j + 8);\n              if (q < 0) {\n                this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);\n                return;\n              }\n              if (q2 > 0 && q > q2) {\n                q = s.indexOf(\"]>\", j + 8);\n                if (q < 0) {\n                  this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);\n                  return;\n                }\n                complexDoctype = true;\n              }\n              const doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0));\n              this.onDoctype(doctypeContent);\n              j = q + (complexDoctype ? 2 : 1);\n            } else {\n              this.onError(XMLParserErrorCode.MalformedElement);\n              return;\n            }\n            break;\n          default:\n            const content = this._parseContent(s, j);\n            if (content === null) {\n              this.onError(XMLParserErrorCode.MalformedElement);\n              return;\n            }\n            let isClosed = false;\n            if (s.substring(j + content.parsed, j + content.parsed + 2) === \"/>\") {\n              isClosed = true;\n            } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== \">\") {\n              this.onError(XMLParserErrorCode.UnterminatedElement);\n              return;\n            }\n            this.onBeginElement(content.name, content.attributes, isClosed);\n            j += content.parsed + (isClosed ? 2 : 1);\n            break;\n        }\n      } else {\n        while (j < s.length && s[j] !== \"<\") {\n          j++;\n        }\n        const text = s.substring(i, j);\n        this.onText(this._resolveEntities(text));\n      }\n      i = j;\n    }\n  }\n  onResolveEntity(name) {\n    return `&${name};`;\n  }\n  onPi(name, value) {}\n  onComment(text) {}\n  onCdata(text) {}\n  onDoctype(doctypeContent) {}\n  onText(text) {}\n  onBeginElement(name, attributes, isEmpty) {}\n  onEndElement(name) {}\n  onError(code) {}\n}\nclass SimpleDOMNode {\n  constructor(nodeName, nodeValue) {\n    this.nodeName = nodeName;\n    this.nodeValue = nodeValue;\n    Object.defineProperty(this, \"parentNode\", {\n      value: null,\n      writable: true\n    });\n  }\n  get firstChild() {\n    return this.childNodes?.[0];\n  }\n  get nextSibling() {\n    const childNodes = this.parentNode.childNodes;\n    if (!childNodes) {\n      return undefined;\n    }\n    const index = childNodes.indexOf(this);\n    if (index === -1) {\n      return undefined;\n    }\n    return childNodes[index + 1];\n  }\n  get textContent() {\n    if (!this.childNodes) {\n      return this.nodeValue || \"\";\n    }\n    return this.childNodes.map(function (child) {\n      return child.textContent;\n    }).join(\"\");\n  }\n  get children() {\n    return this.childNodes || [];\n  }\n  hasChildNodes() {\n    return this.childNodes?.length > 0;\n  }\n  searchNode(paths, pos) {\n    if (pos >= paths.length) {\n      return this;\n    }\n    const component = paths[pos];\n    if (component.name.startsWith(\"#\") && pos < paths.length - 1) {\n      return this.searchNode(paths, pos + 1);\n    }\n    const stack = [];\n    let node = this;\n    while (true) {\n      if (component.name === node.nodeName) {\n        if (component.pos === 0) {\n          const res = node.searchNode(paths, pos + 1);\n          if (res !== null) {\n            return res;\n          }\n        } else if (stack.length === 0) {\n          return null;\n        } else {\n          const [parent] = stack.pop();\n          let siblingPos = 0;\n          for (const child of parent.childNodes) {\n            if (component.name === child.nodeName) {\n              if (siblingPos === component.pos) {\n                return child.searchNode(paths, pos + 1);\n              }\n              siblingPos++;\n            }\n          }\n          return node.searchNode(paths, pos + 1);\n        }\n      }\n      if (node.childNodes?.length > 0) {\n        stack.push([node, 0]);\n        node = node.childNodes[0];\n      } else if (stack.length === 0) {\n        return null;\n      } else {\n        while (stack.length !== 0) {\n          const [parent, currentPos] = stack.pop();\n          const newPos = currentPos + 1;\n          if (newPos < parent.childNodes.length) {\n            stack.push([parent, newPos]);\n            node = parent.childNodes[newPos];\n            break;\n          }\n        }\n        if (stack.length === 0) {\n          return null;\n        }\n      }\n    }\n  }\n  dump(buffer) {\n    if (this.nodeName === \"#text\") {\n      buffer.push(encodeToXmlString(this.nodeValue));\n      return;\n    }\n    buffer.push(`<${this.nodeName}`);\n    if (this.attributes) {\n      for (const attribute of this.attributes) {\n        buffer.push(` ${attribute.name}=\"${encodeToXmlString(attribute.value)}\"`);\n      }\n    }\n    if (this.hasChildNodes()) {\n      buffer.push(\">\");\n      for (const child of this.childNodes) {\n        child.dump(buffer);\n      }\n      buffer.push(`</${this.nodeName}>`);\n    } else if (this.nodeValue) {\n      buffer.push(`>${encodeToXmlString(this.nodeValue)}</${this.nodeName}>`);\n    } else {\n      buffer.push(\"/>\");\n    }\n  }\n}\nclass SimpleXMLParser extends XMLParserBase {\n  constructor({\n    hasAttributes = false,\n    lowerCaseName = false\n  }) {\n    super();\n    this._currentFragment = null;\n    this._stack = null;\n    this._errorCode = XMLParserErrorCode.NoError;\n    this._hasAttributes = hasAttributes;\n    this._lowerCaseName = lowerCaseName;\n  }\n  parseFromString(data) {\n    this._currentFragment = [];\n    this._stack = [];\n    this._errorCode = XMLParserErrorCode.NoError;\n    this.parseXml(data);\n    if (this._errorCode !== XMLParserErrorCode.NoError) {\n      return undefined;\n    }\n    const [documentElement] = this._currentFragment;\n    if (!documentElement) {\n      return undefined;\n    }\n    return {\n      documentElement\n    };\n  }\n  onText(text) {\n    if (isWhitespaceString(text)) {\n      return;\n    }\n    const node = new SimpleDOMNode(\"#text\", text);\n    this._currentFragment.push(node);\n  }\n  onCdata(text) {\n    const node = new SimpleDOMNode(\"#text\", text);\n    this._currentFragment.push(node);\n  }\n  onBeginElement(name, attributes, isEmpty) {\n    if (this._lowerCaseName) {\n      name = name.toLowerCase();\n    }\n    const node = new SimpleDOMNode(name);\n    node.childNodes = [];\n    if (this._hasAttributes) {\n      node.attributes = attributes;\n    }\n    this._currentFragment.push(node);\n    if (isEmpty) {\n      return;\n    }\n    this._stack.push(this._currentFragment);\n    this._currentFragment = node.childNodes;\n  }\n  onEndElement(name) {\n    this._currentFragment = this._stack.pop() || [];\n    const lastElement = this._currentFragment.at(-1);\n    if (!lastElement) {\n      return null;\n    }\n    for (const childNode of lastElement.childNodes) {\n      childNode.parentNode = lastElement;\n    }\n    return lastElement;\n  }\n  onError(code) {\n    this._errorCode = code;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/metadata_parser.js\n\nclass MetadataParser {\n  constructor(data) {\n    data = this._repair(data);\n    const parser = new SimpleXMLParser({\n      lowerCaseName: true\n    });\n    const xmlDocument = parser.parseFromString(data);\n    this._metadataMap = new Map();\n    this._data = data;\n    if (xmlDocument) {\n      this._parse(xmlDocument);\n    }\n  }\n  _repair(data) {\n    return data.replace(/^[^<]+/, \"\").replaceAll(/>\\\\376\\\\377([^<]+)/g, function (all, codes) {\n      const bytes = codes.replaceAll(/\\\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) {\n        return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1);\n      }).replaceAll(/&(amp|apos|gt|lt|quot);/g, function (str, name) {\n        switch (name) {\n          case \"amp\":\n            return \"&\";\n          case \"apos\":\n            return \"'\";\n          case \"gt\":\n            return \">\";\n          case \"lt\":\n            return \"<\";\n          case \"quot\":\n            return '\"';\n        }\n        throw new Error(`_repair: ${name} isn't defined.`);\n      });\n      const charBuf = [\">\"];\n      for (let i = 0, ii = bytes.length; i < ii; i += 2) {\n        const code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1);\n        if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) {\n          charBuf.push(String.fromCharCode(code));\n        } else {\n          charBuf.push(\"&#x\" + (0x10000 + code).toString(16).substring(1) + \";\");\n        }\n      }\n      return charBuf.join(\"\");\n    });\n  }\n  _getSequence(entry) {\n    const name = entry.nodeName;\n    if (name !== \"rdf:bag\" && name !== \"rdf:seq\" && name !== \"rdf:alt\") {\n      return null;\n    }\n    return entry.childNodes.filter(node => node.nodeName === \"rdf:li\");\n  }\n  _parseArray(entry) {\n    if (!entry.hasChildNodes()) {\n      return;\n    }\n    const [seqNode] = entry.childNodes;\n    const sequence = this._getSequence(seqNode) || [];\n    this._metadataMap.set(entry.nodeName, sequence.map(node => node.textContent.trim()));\n  }\n  _parse(xmlDocument) {\n    let rdf = xmlDocument.documentElement;\n    if (rdf.nodeName !== \"rdf:rdf\") {\n      rdf = rdf.firstChild;\n      while (rdf && rdf.nodeName !== \"rdf:rdf\") {\n        rdf = rdf.nextSibling;\n      }\n    }\n    if (!rdf || rdf.nodeName !== \"rdf:rdf\" || !rdf.hasChildNodes()) {\n      return;\n    }\n    for (const desc of rdf.childNodes) {\n      if (desc.nodeName !== \"rdf:description\") {\n        continue;\n      }\n      for (const entry of desc.childNodes) {\n        const name = entry.nodeName;\n        switch (name) {\n          case \"#text\":\n            continue;\n          case \"dc:creator\":\n          case \"dc:subject\":\n            this._parseArray(entry);\n            continue;\n        }\n        this._metadataMap.set(name, entry.textContent.trim());\n      }\n    }\n  }\n  get serializable() {\n    return {\n      parsedData: this._metadataMap,\n      rawData: this._data\n    };\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/decrypt_stream.js\n\nconst chunkSize = 512;\nclass DecryptStream extends DecodeStream {\n  constructor(str, maybeLength, decrypt) {\n    super(maybeLength);\n    this.str = str;\n    this.dict = str.dict;\n    this.decrypt = decrypt;\n    this.nextChunk = null;\n    this.initialized = false;\n  }\n  readBlock() {\n    let chunk;\n    if (this.initialized) {\n      chunk = this.nextChunk;\n    } else {\n      chunk = this.str.getBytes(chunkSize);\n      this.initialized = true;\n    }\n    if (!chunk || chunk.length === 0) {\n      this.eof = true;\n      return;\n    }\n    this.nextChunk = this.str.getBytes(chunkSize);\n    const hasMoreData = this.nextChunk?.length > 0;\n    const decrypt = this.decrypt;\n    chunk = decrypt(chunk, !hasMoreData);\n    const bufferLength = this.bufferLength,\n      newLength = bufferLength + chunk.length,\n      buffer = this.ensureBuffer(newLength);\n    buffer.set(chunk, bufferLength);\n    this.bufferLength = newLength;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/crypto.js\n\n\n\nclass ARCFourCipher {\n  constructor(key) {\n    this.a = 0;\n    this.b = 0;\n    const s = new Uint8Array(256);\n    const keyLength = key.length;\n    for (let i = 0; i < 256; ++i) {\n      s[i] = i;\n    }\n    for (let i = 0, j = 0; i < 256; ++i) {\n      const tmp = s[i];\n      j = j + tmp + key[i % keyLength] & 0xff;\n      s[i] = s[j];\n      s[j] = tmp;\n    }\n    this.s = s;\n  }\n  encryptBlock(data) {\n    let a = this.a,\n      b = this.b;\n    const s = this.s;\n    const n = data.length;\n    const output = new Uint8Array(n);\n    for (let i = 0; i < n; ++i) {\n      a = a + 1 & 0xff;\n      const tmp = s[a];\n      b = b + tmp & 0xff;\n      const tmp2 = s[b];\n      s[a] = tmp2;\n      s[b] = tmp;\n      output[i] = data[i] ^ s[tmp + tmp2 & 0xff];\n    }\n    this.a = a;\n    this.b = b;\n    return output;\n  }\n  decryptBlock(data) {\n    return this.encryptBlock(data);\n  }\n  encrypt(data) {\n    return this.encryptBlock(data);\n  }\n}\nconst calculateMD5 = function calculateMD5Closure() {\n  const r = new Uint8Array([7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]);\n  const k = new Int32Array([-680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222, -722521979, 76029189, -640364487, -421815835, 530742520, -995338651, -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606, -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649, -145523070, -1120210379, 718787259, -343485551]);\n  function hash(data, offset, length) {\n    let h0 = 1732584193,\n      h1 = -271733879,\n      h2 = -1732584194,\n      h3 = 271733878;\n    const paddedLength = length + 72 & ~63;\n    const padded = new Uint8Array(paddedLength);\n    let i, j;\n    for (i = 0; i < length; ++i) {\n      padded[i] = data[offset++];\n    }\n    padded[i++] = 0x80;\n    const n = paddedLength - 8;\n    while (i < n) {\n      padded[i++] = 0;\n    }\n    padded[i++] = length << 3 & 0xff;\n    padded[i++] = length >> 5 & 0xff;\n    padded[i++] = length >> 13 & 0xff;\n    padded[i++] = length >> 21 & 0xff;\n    padded[i++] = length >>> 29 & 0xff;\n    padded[i++] = 0;\n    padded[i++] = 0;\n    padded[i++] = 0;\n    const w = new Int32Array(16);\n    for (i = 0; i < paddedLength;) {\n      for (j = 0; j < 16; ++j, i += 4) {\n        w[j] = padded[i] | padded[i + 1] << 8 | padded[i + 2] << 16 | padded[i + 3] << 24;\n      }\n      let a = h0,\n        b = h1,\n        c = h2,\n        d = h3,\n        f,\n        g;\n      for (j = 0; j < 64; ++j) {\n        if (j < 16) {\n          f = b & c | ~b & d;\n          g = j;\n        } else if (j < 32) {\n          f = d & b | ~d & c;\n          g = 5 * j + 1 & 15;\n        } else if (j < 48) {\n          f = b ^ c ^ d;\n          g = 3 * j + 5 & 15;\n        } else {\n          f = c ^ (b | ~d);\n          g = 7 * j & 15;\n        }\n        const tmp = d,\n          rotateArg = a + f + k[j] + w[g] | 0,\n          rotate = r[j];\n        d = c;\n        c = b;\n        b = b + (rotateArg << rotate | rotateArg >>> 32 - rotate) | 0;\n        a = tmp;\n      }\n      h0 = h0 + a | 0;\n      h1 = h1 + b | 0;\n      h2 = h2 + c | 0;\n      h3 = h3 + d | 0;\n    }\n    return new Uint8Array([h0 & 0xFF, h0 >> 8 & 0xFF, h0 >> 16 & 0xFF, h0 >>> 24 & 0xFF, h1 & 0xFF, h1 >> 8 & 0xFF, h1 >> 16 & 0xFF, h1 >>> 24 & 0xFF, h2 & 0xFF, h2 >> 8 & 0xFF, h2 >> 16 & 0xFF, h2 >>> 24 & 0xFF, h3 & 0xFF, h3 >> 8 & 0xFF, h3 >> 16 & 0xFF, h3 >>> 24 & 0xFF]);\n  }\n  return hash;\n}();\nclass Word64 {\n  constructor(highInteger, lowInteger) {\n    this.high = highInteger | 0;\n    this.low = lowInteger | 0;\n  }\n  and(word) {\n    this.high &= word.high;\n    this.low &= word.low;\n  }\n  xor(word) {\n    this.high ^= word.high;\n    this.low ^= word.low;\n  }\n  or(word) {\n    this.high |= word.high;\n    this.low |= word.low;\n  }\n  shiftRight(places) {\n    if (places >= 32) {\n      this.low = this.high >>> places - 32 | 0;\n      this.high = 0;\n    } else {\n      this.low = this.low >>> places | this.high << 32 - places;\n      this.high = this.high >>> places | 0;\n    }\n  }\n  shiftLeft(places) {\n    if (places >= 32) {\n      this.high = this.low << places - 32;\n      this.low = 0;\n    } else {\n      this.high = this.high << places | this.low >>> 32 - places;\n      this.low <<= places;\n    }\n  }\n  rotateRight(places) {\n    let low, high;\n    if (places & 32) {\n      high = this.low;\n      low = this.high;\n    } else {\n      low = this.low;\n      high = this.high;\n    }\n    places &= 31;\n    this.low = low >>> places | high << 32 - places;\n    this.high = high >>> places | low << 32 - places;\n  }\n  not() {\n    this.high = ~this.high;\n    this.low = ~this.low;\n  }\n  add(word) {\n    const lowAdd = (this.low >>> 0) + (word.low >>> 0);\n    let highAdd = (this.high >>> 0) + (word.high >>> 0);\n    if (lowAdd > 0xffffffff) {\n      highAdd += 1;\n    }\n    this.low = lowAdd | 0;\n    this.high = highAdd | 0;\n  }\n  copyTo(bytes, offset) {\n    bytes[offset] = this.high >>> 24 & 0xff;\n    bytes[offset + 1] = this.high >> 16 & 0xff;\n    bytes[offset + 2] = this.high >> 8 & 0xff;\n    bytes[offset + 3] = this.high & 0xff;\n    bytes[offset + 4] = this.low >>> 24 & 0xff;\n    bytes[offset + 5] = this.low >> 16 & 0xff;\n    bytes[offset + 6] = this.low >> 8 & 0xff;\n    bytes[offset + 7] = this.low & 0xff;\n  }\n  assign(word) {\n    this.high = word.high;\n    this.low = word.low;\n  }\n}\nconst calculateSHA256 = function calculateSHA256Closure() {\n  function rotr(x, n) {\n    return x >>> n | x << 32 - n;\n  }\n  function ch(x, y, z) {\n    return x & y ^ ~x & z;\n  }\n  function maj(x, y, z) {\n    return x & y ^ x & z ^ y & z;\n  }\n  function sigma(x) {\n    return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22);\n  }\n  function sigmaPrime(x) {\n    return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25);\n  }\n  function littleSigma(x) {\n    return rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3;\n  }\n  function littleSigmaPrime(x) {\n    return rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10;\n  }\n  const k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];\n  function hash(data, offset, length) {\n    let h0 = 0x6a09e667,\n      h1 = 0xbb67ae85,\n      h2 = 0x3c6ef372,\n      h3 = 0xa54ff53a,\n      h4 = 0x510e527f,\n      h5 = 0x9b05688c,\n      h6 = 0x1f83d9ab,\n      h7 = 0x5be0cd19;\n    const paddedLength = Math.ceil((length + 9) / 64) * 64;\n    const padded = new Uint8Array(paddedLength);\n    let i, j;\n    for (i = 0; i < length; ++i) {\n      padded[i] = data[offset++];\n    }\n    padded[i++] = 0x80;\n    const n = paddedLength - 8;\n    while (i < n) {\n      padded[i++] = 0;\n    }\n    padded[i++] = 0;\n    padded[i++] = 0;\n    padded[i++] = 0;\n    padded[i++] = length >>> 29 & 0xff;\n    padded[i++] = length >> 21 & 0xff;\n    padded[i++] = length >> 13 & 0xff;\n    padded[i++] = length >> 5 & 0xff;\n    padded[i++] = length << 3 & 0xff;\n    const w = new Uint32Array(64);\n    for (i = 0; i < paddedLength;) {\n      for (j = 0; j < 16; ++j) {\n        w[j] = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3];\n        i += 4;\n      }\n      for (j = 16; j < 64; ++j) {\n        w[j] = littleSigmaPrime(w[j - 2]) + w[j - 7] + littleSigma(w[j - 15]) + w[j - 16] | 0;\n      }\n      let a = h0,\n        b = h1,\n        c = h2,\n        d = h3,\n        e = h4,\n        f = h5,\n        g = h6,\n        h = h7,\n        t1,\n        t2;\n      for (j = 0; j < 64; ++j) {\n        t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j];\n        t2 = sigma(a) + maj(a, b, c);\n        h = g;\n        g = f;\n        f = e;\n        e = d + t1 | 0;\n        d = c;\n        c = b;\n        b = a;\n        a = t1 + t2 | 0;\n      }\n      h0 = h0 + a | 0;\n      h1 = h1 + b | 0;\n      h2 = h2 + c | 0;\n      h3 = h3 + d | 0;\n      h4 = h4 + e | 0;\n      h5 = h5 + f | 0;\n      h6 = h6 + g | 0;\n      h7 = h7 + h | 0;\n    }\n    return new Uint8Array([h0 >> 24 & 0xFF, h0 >> 16 & 0xFF, h0 >> 8 & 0xFF, h0 & 0xFF, h1 >> 24 & 0xFF, h1 >> 16 & 0xFF, h1 >> 8 & 0xFF, h1 & 0xFF, h2 >> 24 & 0xFF, h2 >> 16 & 0xFF, h2 >> 8 & 0xFF, h2 & 0xFF, h3 >> 24 & 0xFF, h3 >> 16 & 0xFF, h3 >> 8 & 0xFF, h3 & 0xFF, h4 >> 24 & 0xFF, h4 >> 16 & 0xFF, h4 >> 8 & 0xFF, h4 & 0xFF, h5 >> 24 & 0xFF, h5 >> 16 & 0xFF, h5 >> 8 & 0xFF, h5 & 0xFF, h6 >> 24 & 0xFF, h6 >> 16 & 0xFF, h6 >> 8 & 0xFF, h6 & 0xFF, h7 >> 24 & 0xFF, h7 >> 16 & 0xFF, h7 >> 8 & 0xFF, h7 & 0xFF]);\n  }\n  return hash;\n}();\nconst calculateSHA512 = function calculateSHA512Closure() {\n  function ch(result, x, y, z, tmp) {\n    result.assign(x);\n    result.and(y);\n    tmp.assign(x);\n    tmp.not();\n    tmp.and(z);\n    result.xor(tmp);\n  }\n  function maj(result, x, y, z, tmp) {\n    result.assign(x);\n    result.and(y);\n    tmp.assign(x);\n    tmp.and(z);\n    result.xor(tmp);\n    tmp.assign(y);\n    tmp.and(z);\n    result.xor(tmp);\n  }\n  function sigma(result, x, tmp) {\n    result.assign(x);\n    result.rotateRight(28);\n    tmp.assign(x);\n    tmp.rotateRight(34);\n    result.xor(tmp);\n    tmp.assign(x);\n    tmp.rotateRight(39);\n    result.xor(tmp);\n  }\n  function sigmaPrime(result, x, tmp) {\n    result.assign(x);\n    result.rotateRight(14);\n    tmp.assign(x);\n    tmp.rotateRight(18);\n    result.xor(tmp);\n    tmp.assign(x);\n    tmp.rotateRight(41);\n    result.xor(tmp);\n  }\n  function littleSigma(result, x, tmp) {\n    result.assign(x);\n    result.rotateRight(1);\n    tmp.assign(x);\n    tmp.rotateRight(8);\n    result.xor(tmp);\n    tmp.assign(x);\n    tmp.shiftRight(7);\n    result.xor(tmp);\n  }\n  function littleSigmaPrime(result, x, tmp) {\n    result.assign(x);\n    result.rotateRight(19);\n    tmp.assign(x);\n    tmp.rotateRight(61);\n    result.xor(tmp);\n    tmp.assign(x);\n    tmp.shiftRight(6);\n    result.xor(tmp);\n  }\n  const k = [new Word64(0x428a2f98, 0xd728ae22), new Word64(0x71374491, 0x23ef65cd), new Word64(0xb5c0fbcf, 0xec4d3b2f), new Word64(0xe9b5dba5, 0x8189dbbc), new Word64(0x3956c25b, 0xf348b538), new Word64(0x59f111f1, 0xb605d019), new Word64(0x923f82a4, 0xaf194f9b), new Word64(0xab1c5ed5, 0xda6d8118), new Word64(0xd807aa98, 0xa3030242), new Word64(0x12835b01, 0x45706fbe), new Word64(0x243185be, 0x4ee4b28c), new Word64(0x550c7dc3, 0xd5ffb4e2), new Word64(0x72be5d74, 0xf27b896f), new Word64(0x80deb1fe, 0x3b1696b1), new Word64(0x9bdc06a7, 0x25c71235), new Word64(0xc19bf174, 0xcf692694), new Word64(0xe49b69c1, 0x9ef14ad2), new Word64(0xefbe4786, 0x384f25e3), new Word64(0x0fc19dc6, 0x8b8cd5b5), new Word64(0x240ca1cc, 0x77ac9c65), new Word64(0x2de92c6f, 0x592b0275), new Word64(0x4a7484aa, 0x6ea6e483), new Word64(0x5cb0a9dc, 0xbd41fbd4), new Word64(0x76f988da, 0x831153b5), new Word64(0x983e5152, 0xee66dfab), new Word64(0xa831c66d, 0x2db43210), new Word64(0xb00327c8, 0x98fb213f), new Word64(0xbf597fc7, 0xbeef0ee4), new Word64(0xc6e00bf3, 0x3da88fc2), new Word64(0xd5a79147, 0x930aa725), new Word64(0x06ca6351, 0xe003826f), new Word64(0x14292967, 0x0a0e6e70), new Word64(0x27b70a85, 0x46d22ffc), new Word64(0x2e1b2138, 0x5c26c926), new Word64(0x4d2c6dfc, 0x5ac42aed), new Word64(0x53380d13, 0x9d95b3df), new Word64(0x650a7354, 0x8baf63de), new Word64(0x766a0abb, 0x3c77b2a8), new Word64(0x81c2c92e, 0x47edaee6), new Word64(0x92722c85, 0x1482353b), new Word64(0xa2bfe8a1, 0x4cf10364), new Word64(0xa81a664b, 0xbc423001), new Word64(0xc24b8b70, 0xd0f89791), new Word64(0xc76c51a3, 0x0654be30), new Word64(0xd192e819, 0xd6ef5218), new Word64(0xd6990624, 0x5565a910), new Word64(0xf40e3585, 0x5771202a), new Word64(0x106aa070, 0x32bbd1b8), new Word64(0x19a4c116, 0xb8d2d0c8), new Word64(0x1e376c08, 0x5141ab53), new Word64(0x2748774c, 0xdf8eeb99), new Word64(0x34b0bcb5, 0xe19b48a8), new Word64(0x391c0cb3, 0xc5c95a63), new Word64(0x4ed8aa4a, 0xe3418acb), new Word64(0x5b9cca4f, 0x7763e373), new Word64(0x682e6ff3, 0xd6b2b8a3), new Word64(0x748f82ee, 0x5defb2fc), new Word64(0x78a5636f, 0x43172f60), new Word64(0x84c87814, 0xa1f0ab72), new Word64(0x8cc70208, 0x1a6439ec), new Word64(0x90befffa, 0x23631e28), new Word64(0xa4506ceb, 0xde82bde9), new Word64(0xbef9a3f7, 0xb2c67915), new Word64(0xc67178f2, 0xe372532b), new Word64(0xca273ece, 0xea26619c), new Word64(0xd186b8c7, 0x21c0c207), new Word64(0xeada7dd6, 0xcde0eb1e), new Word64(0xf57d4f7f, 0xee6ed178), new Word64(0x06f067aa, 0x72176fba), new Word64(0x0a637dc5, 0xa2c898a6), new Word64(0x113f9804, 0xbef90dae), new Word64(0x1b710b35, 0x131c471b), new Word64(0x28db77f5, 0x23047d84), new Word64(0x32caab7b, 0x40c72493), new Word64(0x3c9ebe0a, 0x15c9bebc), new Word64(0x431d67c4, 0x9c100d4c), new Word64(0x4cc5d4be, 0xcb3e42b6), new Word64(0x597f299c, 0xfc657e2a), new Word64(0x5fcb6fab, 0x3ad6faec), new Word64(0x6c44198c, 0x4a475817)];\n  function hash(data, offset, length, mode384 = false) {\n    let h0, h1, h2, h3, h4, h5, h6, h7;\n    if (!mode384) {\n      h0 = new Word64(0x6a09e667, 0xf3bcc908);\n      h1 = new Word64(0xbb67ae85, 0x84caa73b);\n      h2 = new Word64(0x3c6ef372, 0xfe94f82b);\n      h3 = new Word64(0xa54ff53a, 0x5f1d36f1);\n      h4 = new Word64(0x510e527f, 0xade682d1);\n      h5 = new Word64(0x9b05688c, 0x2b3e6c1f);\n      h6 = new Word64(0x1f83d9ab, 0xfb41bd6b);\n      h7 = new Word64(0x5be0cd19, 0x137e2179);\n    } else {\n      h0 = new Word64(0xcbbb9d5d, 0xc1059ed8);\n      h1 = new Word64(0x629a292a, 0x367cd507);\n      h2 = new Word64(0x9159015a, 0x3070dd17);\n      h3 = new Word64(0x152fecd8, 0xf70e5939);\n      h4 = new Word64(0x67332667, 0xffc00b31);\n      h5 = new Word64(0x8eb44a87, 0x68581511);\n      h6 = new Word64(0xdb0c2e0d, 0x64f98fa7);\n      h7 = new Word64(0x47b5481d, 0xbefa4fa4);\n    }\n    const paddedLength = Math.ceil((length + 17) / 128) * 128;\n    const padded = new Uint8Array(paddedLength);\n    let i, j;\n    for (i = 0; i < length; ++i) {\n      padded[i] = data[offset++];\n    }\n    padded[i++] = 0x80;\n    const n = paddedLength - 16;\n    while (i < n) {\n      padded[i++] = 0;\n    }\n    padded[i++] = 0;\n    padded[i++] = 0;\n    padded[i++] = 0;\n    padded[i++] = 0;\n    padded[i++] = 0;\n    padded[i++] = 0;\n    padded[i++] = 0;\n    padded[i++] = 0;\n    padded[i++] = 0;\n    padded[i++] = 0;\n    padded[i++] = 0;\n    padded[i++] = length >>> 29 & 0xff;\n    padded[i++] = length >> 21 & 0xff;\n    padded[i++] = length >> 13 & 0xff;\n    padded[i++] = length >> 5 & 0xff;\n    padded[i++] = length << 3 & 0xff;\n    const w = new Array(80);\n    for (i = 0; i < 80; i++) {\n      w[i] = new Word64(0, 0);\n    }\n    let a = new Word64(0, 0),\n      b = new Word64(0, 0),\n      c = new Word64(0, 0);\n    let d = new Word64(0, 0),\n      e = new Word64(0, 0),\n      f = new Word64(0, 0);\n    let g = new Word64(0, 0),\n      h = new Word64(0, 0);\n    const t1 = new Word64(0, 0),\n      t2 = new Word64(0, 0);\n    const tmp1 = new Word64(0, 0),\n      tmp2 = new Word64(0, 0);\n    let tmp3;\n    for (i = 0; i < paddedLength;) {\n      for (j = 0; j < 16; ++j) {\n        w[j].high = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3];\n        w[j].low = padded[i + 4] << 24 | padded[i + 5] << 16 | padded[i + 6] << 8 | padded[i + 7];\n        i += 8;\n      }\n      for (j = 16; j < 80; ++j) {\n        tmp3 = w[j];\n        littleSigmaPrime(tmp3, w[j - 2], tmp2);\n        tmp3.add(w[j - 7]);\n        littleSigma(tmp1, w[j - 15], tmp2);\n        tmp3.add(tmp1);\n        tmp3.add(w[j - 16]);\n      }\n      a.assign(h0);\n      b.assign(h1);\n      c.assign(h2);\n      d.assign(h3);\n      e.assign(h4);\n      f.assign(h5);\n      g.assign(h6);\n      h.assign(h7);\n      for (j = 0; j < 80; ++j) {\n        t1.assign(h);\n        sigmaPrime(tmp1, e, tmp2);\n        t1.add(tmp1);\n        ch(tmp1, e, f, g, tmp2);\n        t1.add(tmp1);\n        t1.add(k[j]);\n        t1.add(w[j]);\n        sigma(t2, a, tmp2);\n        maj(tmp1, a, b, c, tmp2);\n        t2.add(tmp1);\n        tmp3 = h;\n        h = g;\n        g = f;\n        f = e;\n        d.add(t1);\n        e = d;\n        d = c;\n        c = b;\n        b = a;\n        tmp3.assign(t1);\n        tmp3.add(t2);\n        a = tmp3;\n      }\n      h0.add(a);\n      h1.add(b);\n      h2.add(c);\n      h3.add(d);\n      h4.add(e);\n      h5.add(f);\n      h6.add(g);\n      h7.add(h);\n    }\n    let result;\n    if (!mode384) {\n      result = new Uint8Array(64);\n      h0.copyTo(result, 0);\n      h1.copyTo(result, 8);\n      h2.copyTo(result, 16);\n      h3.copyTo(result, 24);\n      h4.copyTo(result, 32);\n      h5.copyTo(result, 40);\n      h6.copyTo(result, 48);\n      h7.copyTo(result, 56);\n    } else {\n      result = new Uint8Array(48);\n      h0.copyTo(result, 0);\n      h1.copyTo(result, 8);\n      h2.copyTo(result, 16);\n      h3.copyTo(result, 24);\n      h4.copyTo(result, 32);\n      h5.copyTo(result, 40);\n    }\n    return result;\n  }\n  return hash;\n}();\nfunction calculateSHA384(data, offset, length) {\n  return calculateSHA512(data, offset, length, true);\n}\nclass NullCipher {\n  decryptBlock(data) {\n    return data;\n  }\n  encrypt(data) {\n    return data;\n  }\n}\nclass AESBaseCipher {\n  constructor() {\n    if (this.constructor === AESBaseCipher) {\n      unreachable(\"Cannot initialize AESBaseCipher.\");\n    }\n    this._s = new Uint8Array([0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]);\n    this._inv_s = new Uint8Array([0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]);\n    this._mix = new Uint32Array([0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]);\n    this._mixCol = new Uint8Array(256);\n    for (let i = 0; i < 256; i++) {\n      this._mixCol[i] = i < 128 ? i << 1 : i << 1 ^ 0x1b;\n    }\n    this.buffer = new Uint8Array(16);\n    this.bufferPosition = 0;\n  }\n  _expandKey(cipherKey) {\n    unreachable(\"Cannot call `_expandKey` on the base class\");\n  }\n  _decrypt(input, key) {\n    let t, u, v;\n    const state = new Uint8Array(16);\n    state.set(input);\n    for (let j = 0, k = this._keySize; j < 16; ++j, ++k) {\n      state[j] ^= key[k];\n    }\n    for (let i = this._cyclesOfRepetition - 1; i >= 1; --i) {\n      t = state[13];\n      state[13] = state[9];\n      state[9] = state[5];\n      state[5] = state[1];\n      state[1] = t;\n      t = state[14];\n      u = state[10];\n      state[14] = state[6];\n      state[10] = state[2];\n      state[6] = t;\n      state[2] = u;\n      t = state[15];\n      u = state[11];\n      v = state[7];\n      state[15] = state[3];\n      state[11] = t;\n      state[7] = u;\n      state[3] = v;\n      for (let j = 0; j < 16; ++j) {\n        state[j] = this._inv_s[state[j]];\n      }\n      for (let j = 0, k = i * 16; j < 16; ++j, ++k) {\n        state[j] ^= key[k];\n      }\n      for (let j = 0; j < 16; j += 4) {\n        const s0 = this._mix[state[j]];\n        const s1 = this._mix[state[j + 1]];\n        const s2 = this._mix[state[j + 2]];\n        const s3 = this._mix[state[j + 3]];\n        t = s0 ^ s1 >>> 8 ^ s1 << 24 ^ s2 >>> 16 ^ s2 << 16 ^ s3 >>> 24 ^ s3 << 8;\n        state[j] = t >>> 24 & 0xff;\n        state[j + 1] = t >> 16 & 0xff;\n        state[j + 2] = t >> 8 & 0xff;\n        state[j + 3] = t & 0xff;\n      }\n    }\n    t = state[13];\n    state[13] = state[9];\n    state[9] = state[5];\n    state[5] = state[1];\n    state[1] = t;\n    t = state[14];\n    u = state[10];\n    state[14] = state[6];\n    state[10] = state[2];\n    state[6] = t;\n    state[2] = u;\n    t = state[15];\n    u = state[11];\n    v = state[7];\n    state[15] = state[3];\n    state[11] = t;\n    state[7] = u;\n    state[3] = v;\n    for (let j = 0; j < 16; ++j) {\n      state[j] = this._inv_s[state[j]];\n      state[j] ^= key[j];\n    }\n    return state;\n  }\n  _encrypt(input, key) {\n    const s = this._s;\n    let t, u, v;\n    const state = new Uint8Array(16);\n    state.set(input);\n    for (let j = 0; j < 16; ++j) {\n      state[j] ^= key[j];\n    }\n    for (let i = 1; i < this._cyclesOfRepetition; i++) {\n      for (let j = 0; j < 16; ++j) {\n        state[j] = s[state[j]];\n      }\n      v = state[1];\n      state[1] = state[5];\n      state[5] = state[9];\n      state[9] = state[13];\n      state[13] = v;\n      v = state[2];\n      u = state[6];\n      state[2] = state[10];\n      state[6] = state[14];\n      state[10] = v;\n      state[14] = u;\n      v = state[3];\n      u = state[7];\n      t = state[11];\n      state[3] = state[15];\n      state[7] = v;\n      state[11] = u;\n      state[15] = t;\n      for (let j = 0; j < 16; j += 4) {\n        const s0 = state[j + 0];\n        const s1 = state[j + 1];\n        const s2 = state[j + 2];\n        const s3 = state[j + 3];\n        t = s0 ^ s1 ^ s2 ^ s3;\n        state[j + 0] ^= t ^ this._mixCol[s0 ^ s1];\n        state[j + 1] ^= t ^ this._mixCol[s1 ^ s2];\n        state[j + 2] ^= t ^ this._mixCol[s2 ^ s3];\n        state[j + 3] ^= t ^ this._mixCol[s3 ^ s0];\n      }\n      for (let j = 0, k = i * 16; j < 16; ++j, ++k) {\n        state[j] ^= key[k];\n      }\n    }\n    for (let j = 0; j < 16; ++j) {\n      state[j] = s[state[j]];\n    }\n    v = state[1];\n    state[1] = state[5];\n    state[5] = state[9];\n    state[9] = state[13];\n    state[13] = v;\n    v = state[2];\n    u = state[6];\n    state[2] = state[10];\n    state[6] = state[14];\n    state[10] = v;\n    state[14] = u;\n    v = state[3];\n    u = state[7];\n    t = state[11];\n    state[3] = state[15];\n    state[7] = v;\n    state[11] = u;\n    state[15] = t;\n    for (let j = 0, k = this._keySize; j < 16; ++j, ++k) {\n      state[j] ^= key[k];\n    }\n    return state;\n  }\n  _decryptBlock2(data, finalize) {\n    const sourceLength = data.length;\n    let buffer = this.buffer,\n      bufferLength = this.bufferPosition;\n    const result = [];\n    let iv = this.iv;\n    for (let i = 0; i < sourceLength; ++i) {\n      buffer[bufferLength] = data[i];\n      ++bufferLength;\n      if (bufferLength < 16) {\n        continue;\n      }\n      const plain = this._decrypt(buffer, this._key);\n      for (let j = 0; j < 16; ++j) {\n        plain[j] ^= iv[j];\n      }\n      iv = buffer;\n      result.push(plain);\n      buffer = new Uint8Array(16);\n      bufferLength = 0;\n    }\n    this.buffer = buffer;\n    this.bufferLength = bufferLength;\n    this.iv = iv;\n    if (result.length === 0) {\n      return new Uint8Array(0);\n    }\n    let outputLength = 16 * result.length;\n    if (finalize) {\n      const lastBlock = result.at(-1);\n      let psLen = lastBlock[15];\n      if (psLen <= 16) {\n        for (let i = 15, ii = 16 - psLen; i >= ii; --i) {\n          if (lastBlock[i] !== psLen) {\n            psLen = 0;\n            break;\n          }\n        }\n        outputLength -= psLen;\n        result[result.length - 1] = lastBlock.subarray(0, 16 - psLen);\n      }\n    }\n    const output = new Uint8Array(outputLength);\n    for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {\n      output.set(result[i], j);\n    }\n    return output;\n  }\n  decryptBlock(data, finalize, iv = null) {\n    const sourceLength = data.length;\n    const buffer = this.buffer;\n    let bufferLength = this.bufferPosition;\n    if (iv) {\n      this.iv = iv;\n    } else {\n      for (let i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) {\n        buffer[bufferLength] = data[i];\n      }\n      if (bufferLength < 16) {\n        this.bufferLength = bufferLength;\n        return new Uint8Array(0);\n      }\n      this.iv = buffer;\n      data = data.subarray(16);\n    }\n    this.buffer = new Uint8Array(16);\n    this.bufferLength = 0;\n    this.decryptBlock = this._decryptBlock2;\n    return this.decryptBlock(data, finalize);\n  }\n  encrypt(data, iv) {\n    const sourceLength = data.length;\n    let buffer = this.buffer,\n      bufferLength = this.bufferPosition;\n    const result = [];\n    if (!iv) {\n      iv = new Uint8Array(16);\n    }\n    for (let i = 0; i < sourceLength; ++i) {\n      buffer[bufferLength] = data[i];\n      ++bufferLength;\n      if (bufferLength < 16) {\n        continue;\n      }\n      for (let j = 0; j < 16; ++j) {\n        buffer[j] ^= iv[j];\n      }\n      const cipher = this._encrypt(buffer, this._key);\n      iv = cipher;\n      result.push(cipher);\n      buffer = new Uint8Array(16);\n      bufferLength = 0;\n    }\n    this.buffer = buffer;\n    this.bufferLength = bufferLength;\n    this.iv = iv;\n    if (result.length === 0) {\n      return new Uint8Array(0);\n    }\n    const outputLength = 16 * result.length;\n    const output = new Uint8Array(outputLength);\n    for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {\n      output.set(result[i], j);\n    }\n    return output;\n  }\n}\nclass AES128Cipher extends AESBaseCipher {\n  constructor(key) {\n    super();\n    this._cyclesOfRepetition = 10;\n    this._keySize = 160;\n    this._rcon = new Uint8Array([0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d]);\n    this._key = this._expandKey(key);\n  }\n  _expandKey(cipherKey) {\n    const b = 176;\n    const s = this._s;\n    const rcon = this._rcon;\n    const result = new Uint8Array(b);\n    result.set(cipherKey);\n    for (let j = 16, i = 1; j < b; ++i) {\n      let t1 = result[j - 3];\n      let t2 = result[j - 2];\n      let t3 = result[j - 1];\n      let t4 = result[j - 4];\n      t1 = s[t1];\n      t2 = s[t2];\n      t3 = s[t3];\n      t4 = s[t4];\n      t1 ^= rcon[i];\n      for (let n = 0; n < 4; ++n) {\n        result[j] = t1 ^= result[j - 16];\n        j++;\n        result[j] = t2 ^= result[j - 16];\n        j++;\n        result[j] = t3 ^= result[j - 16];\n        j++;\n        result[j] = t4 ^= result[j - 16];\n        j++;\n      }\n    }\n    return result;\n  }\n}\nclass AES256Cipher extends AESBaseCipher {\n  constructor(key) {\n    super();\n    this._cyclesOfRepetition = 14;\n    this._keySize = 224;\n    this._key = this._expandKey(key);\n  }\n  _expandKey(cipherKey) {\n    const b = 240;\n    const s = this._s;\n    const result = new Uint8Array(b);\n    result.set(cipherKey);\n    let r = 1;\n    let t1, t2, t3, t4;\n    for (let j = 32, i = 1; j < b; ++i) {\n      if (j % 32 === 16) {\n        t1 = s[t1];\n        t2 = s[t2];\n        t3 = s[t3];\n        t4 = s[t4];\n      } else if (j % 32 === 0) {\n        t1 = result[j - 3];\n        t2 = result[j - 2];\n        t3 = result[j - 1];\n        t4 = result[j - 4];\n        t1 = s[t1];\n        t2 = s[t2];\n        t3 = s[t3];\n        t4 = s[t4];\n        t1 ^= r;\n        if ((r <<= 1) >= 256) {\n          r = (r ^ 0x1b) & 0xff;\n        }\n      }\n      for (let n = 0; n < 4; ++n) {\n        result[j] = t1 ^= result[j - 32];\n        j++;\n        result[j] = t2 ^= result[j - 32];\n        j++;\n        result[j] = t3 ^= result[j - 32];\n        j++;\n        result[j] = t4 ^= result[j - 32];\n        j++;\n      }\n    }\n    return result;\n  }\n}\nclass PDF17 {\n  checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) {\n    const hashData = new Uint8Array(password.length + 56);\n    hashData.set(password, 0);\n    hashData.set(ownerValidationSalt, password.length);\n    hashData.set(userBytes, password.length + ownerValidationSalt.length);\n    const result = calculateSHA256(hashData, 0, hashData.length);\n    return isArrayEqual(result, ownerPassword);\n  }\n  checkUserPassword(password, userValidationSalt, userPassword) {\n    const hashData = new Uint8Array(password.length + 8);\n    hashData.set(password, 0);\n    hashData.set(userValidationSalt, password.length);\n    const result = calculateSHA256(hashData, 0, hashData.length);\n    return isArrayEqual(result, userPassword);\n  }\n  getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) {\n    const hashData = new Uint8Array(password.length + 56);\n    hashData.set(password, 0);\n    hashData.set(ownerKeySalt, password.length);\n    hashData.set(userBytes, password.length + ownerKeySalt.length);\n    const key = calculateSHA256(hashData, 0, hashData.length);\n    const cipher = new AES256Cipher(key);\n    return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16));\n  }\n  getUserKey(password, userKeySalt, userEncryption) {\n    const hashData = new Uint8Array(password.length + 8);\n    hashData.set(password, 0);\n    hashData.set(userKeySalt, password.length);\n    const key = calculateSHA256(hashData, 0, hashData.length);\n    const cipher = new AES256Cipher(key);\n    return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));\n  }\n}\nclass PDF20 {\n  _hash(password, input, userBytes) {\n    let k = calculateSHA256(input, 0, input.length).subarray(0, 32);\n    let e = [0];\n    let i = 0;\n    while (i < 64 || e.at(-1) > i - 32) {\n      const combinedLength = password.length + k.length + userBytes.length,\n        combinedArray = new Uint8Array(combinedLength);\n      let writeOffset = 0;\n      combinedArray.set(password, writeOffset);\n      writeOffset += password.length;\n      combinedArray.set(k, writeOffset);\n      writeOffset += k.length;\n      combinedArray.set(userBytes, writeOffset);\n      const k1 = new Uint8Array(combinedLength * 64);\n      for (let j = 0, pos = 0; j < 64; j++, pos += combinedLength) {\n        k1.set(combinedArray, pos);\n      }\n      const cipher = new AES128Cipher(k.subarray(0, 16));\n      e = cipher.encrypt(k1, k.subarray(16, 32));\n      const remainder = e.slice(0, 16).reduce((a, b) => a + b, 0) % 3;\n      if (remainder === 0) {\n        k = calculateSHA256(e, 0, e.length);\n      } else if (remainder === 1) {\n        k = calculateSHA384(e, 0, e.length);\n      } else if (remainder === 2) {\n        k = calculateSHA512(e, 0, e.length);\n      }\n      i++;\n    }\n    return k.subarray(0, 32);\n  }\n  checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) {\n    const hashData = new Uint8Array(password.length + 56);\n    hashData.set(password, 0);\n    hashData.set(ownerValidationSalt, password.length);\n    hashData.set(userBytes, password.length + ownerValidationSalt.length);\n    const result = this._hash(password, hashData, userBytes);\n    return isArrayEqual(result, ownerPassword);\n  }\n  checkUserPassword(password, userValidationSalt, userPassword) {\n    const hashData = new Uint8Array(password.length + 8);\n    hashData.set(password, 0);\n    hashData.set(userValidationSalt, password.length);\n    const result = this._hash(password, hashData, []);\n    return isArrayEqual(result, userPassword);\n  }\n  getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) {\n    const hashData = new Uint8Array(password.length + 56);\n    hashData.set(password, 0);\n    hashData.set(ownerKeySalt, password.length);\n    hashData.set(userBytes, password.length + ownerKeySalt.length);\n    const key = this._hash(password, hashData, userBytes);\n    const cipher = new AES256Cipher(key);\n    return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16));\n  }\n  getUserKey(password, userKeySalt, userEncryption) {\n    const hashData = new Uint8Array(password.length + 8);\n    hashData.set(password, 0);\n    hashData.set(userKeySalt, password.length);\n    const key = this._hash(password, hashData, []);\n    const cipher = new AES256Cipher(key);\n    return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));\n  }\n}\nclass CipherTransform {\n  constructor(stringCipherConstructor, streamCipherConstructor) {\n    this.StringCipherConstructor = stringCipherConstructor;\n    this.StreamCipherConstructor = streamCipherConstructor;\n  }\n  createStream(stream, length) {\n    const cipher = new this.StreamCipherConstructor();\n    return new DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) {\n      return cipher.decryptBlock(data, finalize);\n    });\n  }\n  decryptString(s) {\n    const cipher = new this.StringCipherConstructor();\n    let data = stringToBytes(s);\n    data = cipher.decryptBlock(data, true);\n    return bytesToString(data);\n  }\n  encryptString(s) {\n    const cipher = new this.StringCipherConstructor();\n    if (cipher instanceof AESBaseCipher) {\n      const strLen = s.length;\n      const pad = 16 - strLen % 16;\n      s += String.fromCharCode(pad).repeat(pad);\n      const iv = new Uint8Array(16);\n      if (typeof crypto !== \"undefined\") {\n        crypto.getRandomValues(iv);\n      } else {\n        for (let i = 0; i < 16; i++) {\n          iv[i] = Math.floor(256 * Math.random());\n        }\n      }\n      let data = stringToBytes(s);\n      data = cipher.encrypt(data, iv);\n      const buf = new Uint8Array(16 + data.length);\n      buf.set(iv);\n      buf.set(data, 16);\n      return bytesToString(buf);\n    }\n    let data = stringToBytes(s);\n    data = cipher.encrypt(data);\n    return bytesToString(data);\n  }\n}\nclass CipherTransformFactory {\n  static #defaultPasswordBytes = new Uint8Array([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]);\n  #createEncryptionKey20(revision, password, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms) {\n    if (password) {\n      const passwordLength = Math.min(127, password.length);\n      password = password.subarray(0, passwordLength);\n    } else {\n      password = [];\n    }\n    const pdfAlgorithm = revision === 6 ? new PDF20() : new PDF17();\n    if (pdfAlgorithm.checkUserPassword(password, userValidationSalt, userPassword)) {\n      return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption);\n    } else if (password.length && pdfAlgorithm.checkOwnerPassword(password, ownerValidationSalt, uBytes, ownerPassword)) {\n      return pdfAlgorithm.getOwnerKey(password, ownerKeySalt, uBytes, ownerEncryption);\n    }\n    return null;\n  }\n  #prepareKeyData(fileId, password, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata) {\n    const hashDataSize = 40 + ownerPassword.length + fileId.length;\n    const hashData = new Uint8Array(hashDataSize);\n    let i = 0,\n      j,\n      n;\n    if (password) {\n      n = Math.min(32, password.length);\n      for (; i < n; ++i) {\n        hashData[i] = password[i];\n      }\n    }\n    j = 0;\n    while (i < 32) {\n      hashData[i++] = CipherTransformFactory.#defaultPasswordBytes[j++];\n    }\n    for (j = 0, n = ownerPassword.length; j < n; ++j) {\n      hashData[i++] = ownerPassword[j];\n    }\n    hashData[i++] = flags & 0xff;\n    hashData[i++] = flags >> 8 & 0xff;\n    hashData[i++] = flags >> 16 & 0xff;\n    hashData[i++] = flags >>> 24 & 0xff;\n    for (j = 0, n = fileId.length; j < n; ++j) {\n      hashData[i++] = fileId[j];\n    }\n    if (revision >= 4 && !encryptMetadata) {\n      hashData[i++] = 0xff;\n      hashData[i++] = 0xff;\n      hashData[i++] = 0xff;\n      hashData[i++] = 0xff;\n    }\n    let hash = calculateMD5(hashData, 0, i);\n    const keyLengthInBytes = keyLength >> 3;\n    if (revision >= 3) {\n      for (j = 0; j < 50; ++j) {\n        hash = calculateMD5(hash, 0, keyLengthInBytes);\n      }\n    }\n    const encryptionKey = hash.subarray(0, keyLengthInBytes);\n    let cipher, checkData;\n    if (revision >= 3) {\n      for (i = 0; i < 32; ++i) {\n        hashData[i] = CipherTransformFactory.#defaultPasswordBytes[i];\n      }\n      for (j = 0, n = fileId.length; j < n; ++j) {\n        hashData[i++] = fileId[j];\n      }\n      cipher = new ARCFourCipher(encryptionKey);\n      checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i));\n      n = encryptionKey.length;\n      const derivedKey = new Uint8Array(n);\n      for (j = 1; j <= 19; ++j) {\n        for (let k = 0; k < n; ++k) {\n          derivedKey[k] = encryptionKey[k] ^ j;\n        }\n        cipher = new ARCFourCipher(derivedKey);\n        checkData = cipher.encryptBlock(checkData);\n      }\n      for (j = 0, n = checkData.length; j < n; ++j) {\n        if (userPassword[j] !== checkData[j]) {\n          return null;\n        }\n      }\n    } else {\n      cipher = new ARCFourCipher(encryptionKey);\n      checkData = cipher.encryptBlock(CipherTransformFactory.#defaultPasswordBytes);\n      for (j = 0, n = checkData.length; j < n; ++j) {\n        if (userPassword[j] !== checkData[j]) {\n          return null;\n        }\n      }\n    }\n    return encryptionKey;\n  }\n  #decodeUserPassword(password, ownerPassword, revision, keyLength) {\n    const hashData = new Uint8Array(32);\n    let i = 0;\n    const n = Math.min(32, password.length);\n    for (; i < n; ++i) {\n      hashData[i] = password[i];\n    }\n    let j = 0;\n    while (i < 32) {\n      hashData[i++] = CipherTransformFactory.#defaultPasswordBytes[j++];\n    }\n    let hash = calculateMD5(hashData, 0, i);\n    const keyLengthInBytes = keyLength >> 3;\n    if (revision >= 3) {\n      for (j = 0; j < 50; ++j) {\n        hash = calculateMD5(hash, 0, hash.length);\n      }\n    }\n    let cipher, userPassword;\n    if (revision >= 3) {\n      userPassword = ownerPassword;\n      const derivedKey = new Uint8Array(keyLengthInBytes);\n      for (j = 19; j >= 0; j--) {\n        for (let k = 0; k < keyLengthInBytes; ++k) {\n          derivedKey[k] = hash[k] ^ j;\n        }\n        cipher = new ARCFourCipher(derivedKey);\n        userPassword = cipher.encryptBlock(userPassword);\n      }\n    } else {\n      cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes));\n      userPassword = cipher.encryptBlock(ownerPassword);\n    }\n    return userPassword;\n  }\n  #buildObjectKey(num, gen, encryptionKey, isAes = false) {\n    const key = new Uint8Array(encryptionKey.length + 9);\n    const n = encryptionKey.length;\n    let i;\n    for (i = 0; i < n; ++i) {\n      key[i] = encryptionKey[i];\n    }\n    key[i++] = num & 0xff;\n    key[i++] = num >> 8 & 0xff;\n    key[i++] = num >> 16 & 0xff;\n    key[i++] = gen & 0xff;\n    key[i++] = gen >> 8 & 0xff;\n    if (isAes) {\n      key[i++] = 0x73;\n      key[i++] = 0x41;\n      key[i++] = 0x6c;\n      key[i++] = 0x54;\n    }\n    const hash = calculateMD5(key, 0, i);\n    return hash.subarray(0, Math.min(encryptionKey.length + 5, 16));\n  }\n  #buildCipherConstructor(cf, name, num, gen, key) {\n    if (!(name instanceof Name)) {\n      throw new FormatError(\"Invalid crypt filter name.\");\n    }\n    const self = this;\n    const cryptFilter = cf.get(name.name);\n    const cfm = cryptFilter?.get(\"CFM\");\n    if (!cfm || cfm.name === \"None\") {\n      return function () {\n        return new NullCipher();\n      };\n    }\n    if (cfm.name === \"V2\") {\n      return function () {\n        return new ARCFourCipher(self.#buildObjectKey(num, gen, key, false));\n      };\n    }\n    if (cfm.name === \"AESV2\") {\n      return function () {\n        return new AES128Cipher(self.#buildObjectKey(num, gen, key, true));\n      };\n    }\n    if (cfm.name === \"AESV3\") {\n      return function () {\n        return new AES256Cipher(key);\n      };\n    }\n    throw new FormatError(\"Unknown crypto method\");\n  }\n  constructor(dict, fileId, password) {\n    const filter = dict.get(\"Filter\");\n    if (!isName(filter, \"Standard\")) {\n      throw new FormatError(\"unknown encryption method\");\n    }\n    this.filterName = filter.name;\n    this.dict = dict;\n    const algorithm = dict.get(\"V\");\n    if (!Number.isInteger(algorithm) || algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm !== 5) {\n      throw new FormatError(\"unsupported encryption algorithm\");\n    }\n    this.algorithm = algorithm;\n    let keyLength = dict.get(\"Length\");\n    if (!keyLength) {\n      if (algorithm <= 3) {\n        keyLength = 40;\n      } else {\n        const cfDict = dict.get(\"CF\");\n        const streamCryptoName = dict.get(\"StmF\");\n        if (cfDict instanceof Dict && streamCryptoName instanceof Name) {\n          cfDict.suppressEncryption = true;\n          const handlerDict = cfDict.get(streamCryptoName.name);\n          keyLength = handlerDict?.get(\"Length\") || 128;\n          if (keyLength < 40) {\n            keyLength <<= 3;\n          }\n        }\n      }\n    }\n    if (!Number.isInteger(keyLength) || keyLength < 40 || keyLength % 8 !== 0) {\n      throw new FormatError(\"invalid key length\");\n    }\n    const ownerBytes = stringToBytes(dict.get(\"O\")),\n      userBytes = stringToBytes(dict.get(\"U\"));\n    const ownerPassword = ownerBytes.subarray(0, 32);\n    const userPassword = userBytes.subarray(0, 32);\n    const flags = dict.get(\"P\");\n    const revision = dict.get(\"R\");\n    const encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get(\"EncryptMetadata\") !== false;\n    this.encryptMetadata = encryptMetadata;\n    const fileIdBytes = stringToBytes(fileId);\n    let passwordBytes;\n    if (password) {\n      if (revision === 6) {\n        try {\n          password = utf8StringToString(password);\n        } catch {\n          warn(\"CipherTransformFactory: Unable to convert UTF8 encoded password.\");\n        }\n      }\n      passwordBytes = stringToBytes(password);\n    }\n    let encryptionKey;\n    if (algorithm !== 5) {\n      encryptionKey = this.#prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata);\n    } else {\n      const ownerValidationSalt = ownerBytes.subarray(32, 40);\n      const ownerKeySalt = ownerBytes.subarray(40, 48);\n      const uBytes = userBytes.subarray(0, 48);\n      const userValidationSalt = userBytes.subarray(32, 40);\n      const userKeySalt = userBytes.subarray(40, 48);\n      const ownerEncryption = stringToBytes(dict.get(\"OE\"));\n      const userEncryption = stringToBytes(dict.get(\"UE\"));\n      const perms = stringToBytes(dict.get(\"Perms\"));\n      encryptionKey = this.#createEncryptionKey20(revision, passwordBytes, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms);\n    }\n    if (!encryptionKey && !password) {\n      throw new PasswordException(\"No password given\", PasswordResponses.NEED_PASSWORD);\n    } else if (!encryptionKey && password) {\n      const decodedPassword = this.#decodeUserPassword(passwordBytes, ownerPassword, revision, keyLength);\n      encryptionKey = this.#prepareKeyData(fileIdBytes, decodedPassword, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata);\n    }\n    if (!encryptionKey) {\n      throw new PasswordException(\"Incorrect Password\", PasswordResponses.INCORRECT_PASSWORD);\n    }\n    this.encryptionKey = encryptionKey;\n    if (algorithm >= 4) {\n      const cf = dict.get(\"CF\");\n      if (cf instanceof Dict) {\n        cf.suppressEncryption = true;\n      }\n      this.cf = cf;\n      this.stmf = dict.get(\"StmF\") || Name.get(\"Identity\");\n      this.strf = dict.get(\"StrF\") || Name.get(\"Identity\");\n      this.eff = dict.get(\"EFF\") || this.stmf;\n    }\n  }\n  createCipherTransform(num, gen) {\n    if (this.algorithm === 4 || this.algorithm === 5) {\n      return new CipherTransform(this.#buildCipherConstructor(this.cf, this.strf, num, gen, this.encryptionKey), this.#buildCipherConstructor(this.cf, this.stmf, num, gen, this.encryptionKey));\n    }\n    const key = this.#buildObjectKey(num, gen, this.encryptionKey, false);\n    const cipherConstructor = function () {\n      return new ARCFourCipher(key);\n    };\n    return new CipherTransform(cipherConstructor, cipherConstructor);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/writer.js\n\n\n\n\n\n\n\nasync function writeObject(ref, obj, buffer, {\n  encrypt = null\n}) {\n  const transform = encrypt?.createCipherTransform(ref.num, ref.gen);\n  buffer.push(`${ref.num} ${ref.gen} obj\\n`);\n  if (obj instanceof Dict) {\n    await writeDict(obj, buffer, transform);\n  } else if (obj instanceof BaseStream) {\n    await writeStream(obj, buffer, transform);\n  } else if (Array.isArray(obj) || ArrayBuffer.isView(obj)) {\n    await writeArray(obj, buffer, transform);\n  }\n  buffer.push(\"\\nendobj\\n\");\n}\nasync function writeDict(dict, buffer, transform) {\n  buffer.push(\"<<\");\n  for (const key of dict.getKeys()) {\n    buffer.push(` /${escapePDFName(key)} `);\n    await writeValue(dict.getRaw(key), buffer, transform);\n  }\n  buffer.push(\">>\");\n}\nasync function writeStream(stream, buffer, transform) {\n  let bytes = stream.getBytes();\n  const {\n    dict\n  } = stream;\n  const [filter, params] = await Promise.all([dict.getAsync(\"Filter\"), dict.getAsync(\"DecodeParms\")]);\n  const filterZero = Array.isArray(filter) ? await dict.xref.fetchIfRefAsync(filter[0]) : filter;\n  const isFilterZeroFlateDecode = isName(filterZero, \"FlateDecode\");\n  const MIN_LENGTH_FOR_COMPRESSING = 256;\n  if (bytes.length >= MIN_LENGTH_FOR_COMPRESSING || isFilterZeroFlateDecode) {\n    try {\n      const cs = new CompressionStream(\"deflate\");\n      const writer = cs.writable.getWriter();\n      writer.write(bytes);\n      writer.close();\n      const buf = await new Response(cs.readable).arrayBuffer();\n      bytes = new Uint8Array(buf);\n      let newFilter, newParams;\n      if (!filter) {\n        newFilter = Name.get(\"FlateDecode\");\n      } else if (!isFilterZeroFlateDecode) {\n        newFilter = Array.isArray(filter) ? [Name.get(\"FlateDecode\"), ...filter] : [Name.get(\"FlateDecode\"), filter];\n        if (params) {\n          newParams = Array.isArray(params) ? [null, ...params] : [null, params];\n        }\n      }\n      if (newFilter) {\n        dict.set(\"Filter\", newFilter);\n      }\n      if (newParams) {\n        dict.set(\"DecodeParms\", newParams);\n      }\n    } catch (ex) {\n      info(`writeStream - cannot compress data: \"${ex}\".`);\n    }\n  }\n  let string = bytesToString(bytes);\n  if (transform) {\n    string = transform.encryptString(string);\n  }\n  dict.set(\"Length\", string.length);\n  await writeDict(dict, buffer, transform);\n  buffer.push(\" stream\\n\", string, \"\\nendstream\");\n}\nasync function writeArray(array, buffer, transform) {\n  buffer.push(\"[\");\n  let first = true;\n  for (const val of array) {\n    if (!first) {\n      buffer.push(\" \");\n    } else {\n      first = false;\n    }\n    await writeValue(val, buffer, transform);\n  }\n  buffer.push(\"]\");\n}\nasync function writeValue(value, buffer, transform) {\n  if (value instanceof Name) {\n    buffer.push(`/${escapePDFName(value.name)}`);\n  } else if (value instanceof Ref) {\n    buffer.push(`${value.num} ${value.gen} R`);\n  } else if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n    await writeArray(value, buffer, transform);\n  } else if (typeof value === \"string\") {\n    if (transform) {\n      value = transform.encryptString(value);\n    }\n    buffer.push(`(${escapeString(value)})`);\n  } else if (typeof value === \"number\") {\n    buffer.push(numberToString(value));\n  } else if (typeof value === \"boolean\") {\n    buffer.push(value.toString());\n  } else if (value instanceof Dict) {\n    await writeDict(value, buffer, transform);\n  } else if (value instanceof BaseStream) {\n    await writeStream(value, buffer, transform);\n  } else if (value === null) {\n    buffer.push(\"null\");\n  } else {\n    warn(`Unhandled value in writer: ${typeof value}, please file a bug.`);\n  }\n}\nfunction writeInt(number, size, offset, buffer) {\n  for (let i = size + offset - 1; i > offset - 1; i--) {\n    buffer[i] = number & 0xff;\n    number >>= 8;\n  }\n  return offset + size;\n}\nfunction writeString(string, offset, buffer) {\n  for (let i = 0, len = string.length; i < len; i++) {\n    buffer[offset + i] = string.charCodeAt(i) & 0xff;\n  }\n}\nfunction computeMD5(filesize, xrefInfo) {\n  const time = Math.floor(Date.now() / 1000);\n  const filename = xrefInfo.filename || \"\";\n  const md5Buffer = [time.toString(), filename, filesize.toString()];\n  let md5BufferLen = md5Buffer.reduce((a, str) => a + str.length, 0);\n  for (const value of Object.values(xrefInfo.info)) {\n    md5Buffer.push(value);\n    md5BufferLen += value.length;\n  }\n  const array = new Uint8Array(md5BufferLen);\n  let offset = 0;\n  for (const str of md5Buffer) {\n    writeString(str, offset, array);\n    offset += str.length;\n  }\n  return bytesToString(calculateMD5(array));\n}\nfunction writeXFADataForAcroform(str, newRefs) {\n  const xml = new SimpleXMLParser({\n    hasAttributes: true\n  }).parseFromString(str);\n  for (const {\n    xfa\n  } of newRefs) {\n    if (!xfa) {\n      continue;\n    }\n    const {\n      path,\n      value\n    } = xfa;\n    if (!path) {\n      continue;\n    }\n    const nodePath = parseXFAPath(path);\n    let node = xml.documentElement.searchNode(nodePath, 0);\n    if (!node && nodePath.length > 1) {\n      node = xml.documentElement.searchNode([nodePath.at(-1)], 0);\n    }\n    if (node) {\n      node.childNodes = Array.isArray(value) ? value.map(val => new SimpleDOMNode(\"value\", val)) : [new SimpleDOMNode(\"#text\", value)];\n    } else {\n      warn(`Node not found for path: ${path}`);\n    }\n  }\n  const buffer = [];\n  xml.documentElement.dump(buffer);\n  return buffer.join(\"\");\n}\nasync function updateAcroform({\n  xref,\n  acroForm,\n  acroFormRef,\n  hasXfa,\n  hasXfaDatasetsEntry,\n  xfaDatasetsRef,\n  needAppearances,\n  newRefs\n}) {\n  if (hasXfa && !hasXfaDatasetsEntry && !xfaDatasetsRef) {\n    warn(\"XFA - Cannot save it\");\n  }\n  if (!needAppearances && (!hasXfa || !xfaDatasetsRef || hasXfaDatasetsEntry)) {\n    return;\n  }\n  const dict = acroForm.clone();\n  if (hasXfa && !hasXfaDatasetsEntry) {\n    const newXfa = acroForm.get(\"XFA\").slice();\n    newXfa.splice(2, 0, \"datasets\");\n    newXfa.splice(3, 0, xfaDatasetsRef);\n    dict.set(\"XFA\", newXfa);\n  }\n  if (needAppearances) {\n    dict.set(\"NeedAppearances\", true);\n  }\n  const buffer = [];\n  await writeObject(acroFormRef, dict, buffer, xref);\n  newRefs.push({\n    ref: acroFormRef,\n    data: buffer.join(\"\")\n  });\n}\nfunction updateXFA({\n  xfaData,\n  xfaDatasetsRef,\n  newRefs,\n  xref\n}) {\n  if (xfaData === null) {\n    const datasets = xref.fetchIfRef(xfaDatasetsRef);\n    xfaData = writeXFADataForAcroform(datasets.getString(), newRefs);\n  }\n  const encrypt = xref.encrypt;\n  if (encrypt) {\n    const transform = encrypt.createCipherTransform(xfaDatasetsRef.num, xfaDatasetsRef.gen);\n    xfaData = transform.encryptString(xfaData);\n  }\n  const data = `${xfaDatasetsRef.num} ${xfaDatasetsRef.gen} obj\\n` + `<< /Type /EmbeddedFile /Length ${xfaData.length}>>\\nstream\\n` + xfaData + \"\\nendstream\\nendobj\\n\";\n  newRefs.push({\n    ref: xfaDatasetsRef,\n    data\n  });\n}\nasync function getXRefTable(xrefInfo, baseOffset, newRefs, newXref, buffer) {\n  buffer.push(\"xref\\n\");\n  const indexes = getIndexes(newRefs);\n  let indexesPosition = 0;\n  for (const {\n    ref,\n    data\n  } of newRefs) {\n    if (ref.num === indexes[indexesPosition]) {\n      buffer.push(`${indexes[indexesPosition]} ${indexes[indexesPosition + 1]}\\n`);\n      indexesPosition += 2;\n    }\n    if (data !== null) {\n      buffer.push(`${baseOffset.toString().padStart(10, \"0\")} ${Math.min(ref.gen, 0xffff).toString().padStart(5, \"0\")} n\\r\\n`);\n      baseOffset += data.length;\n    } else {\n      buffer.push(`0000000000 ${Math.min(ref.gen + 1, 0xffff).toString().padStart(5, \"0\")} f\\r\\n`);\n    }\n  }\n  computeIDs(baseOffset, xrefInfo, newXref);\n  buffer.push(\"trailer\\n\");\n  await writeDict(newXref, buffer);\n  buffer.push(\"\\nstartxref\\n\", baseOffset.toString(), \"\\n%%EOF\\n\");\n}\nfunction getIndexes(newRefs) {\n  const indexes = [];\n  for (const {\n    ref\n  } of newRefs) {\n    if (ref.num === indexes.at(-2) + indexes.at(-1)) {\n      indexes[indexes.length - 1] += 1;\n    } else {\n      indexes.push(ref.num, 1);\n    }\n  }\n  return indexes;\n}\nasync function getXRefStreamTable(xrefInfo, baseOffset, newRefs, newXref, buffer) {\n  const xrefTableData = [];\n  let maxOffset = 0;\n  let maxGen = 0;\n  for (const {\n    ref,\n    data\n  } of newRefs) {\n    let gen;\n    maxOffset = Math.max(maxOffset, baseOffset);\n    if (data !== null) {\n      gen = Math.min(ref.gen, 0xffff);\n      xrefTableData.push([1, baseOffset, gen]);\n      baseOffset += data.length;\n    } else {\n      gen = Math.min(ref.gen + 1, 0xffff);\n      xrefTableData.push([0, 0, gen]);\n    }\n    maxGen = Math.max(maxGen, gen);\n  }\n  newXref.set(\"Index\", getIndexes(newRefs));\n  const offsetSize = getSizeInBytes(maxOffset);\n  const maxGenSize = getSizeInBytes(maxGen);\n  const sizes = [1, offsetSize, maxGenSize];\n  newXref.set(\"W\", sizes);\n  computeIDs(baseOffset, xrefInfo, newXref);\n  const structSize = sizes.reduce((a, x) => a + x, 0);\n  const data = new Uint8Array(structSize * xrefTableData.length);\n  const stream = new Stream(data);\n  stream.dict = newXref;\n  let offset = 0;\n  for (const [type, objOffset, gen] of xrefTableData) {\n    offset = writeInt(type, sizes[0], offset, data);\n    offset = writeInt(objOffset, sizes[1], offset, data);\n    offset = writeInt(gen, sizes[2], offset, data);\n  }\n  await writeObject(xrefInfo.newRef, stream, buffer, {});\n  buffer.push(\"startxref\\n\", baseOffset.toString(), \"\\n%%EOF\\n\");\n}\nfunction computeIDs(baseOffset, xrefInfo, newXref) {\n  if (Array.isArray(xrefInfo.fileIds) && xrefInfo.fileIds.length > 0) {\n    const md5 = computeMD5(baseOffset, xrefInfo);\n    newXref.set(\"ID\", [xrefInfo.fileIds[0], md5]);\n  }\n}\nfunction getTrailerDict(xrefInfo, newRefs, useXrefStream) {\n  const newXref = new Dict(null);\n  newXref.set(\"Prev\", xrefInfo.startXRef);\n  const refForXrefTable = xrefInfo.newRef;\n  if (useXrefStream) {\n    newRefs.push({\n      ref: refForXrefTable,\n      data: \"\"\n    });\n    newXref.set(\"Size\", refForXrefTable.num + 1);\n    newXref.set(\"Type\", Name.get(\"XRef\"));\n  } else {\n    newXref.set(\"Size\", refForXrefTable.num);\n  }\n  if (xrefInfo.rootRef !== null) {\n    newXref.set(\"Root\", xrefInfo.rootRef);\n  }\n  if (xrefInfo.infoRef !== null) {\n    newXref.set(\"Info\", xrefInfo.infoRef);\n  }\n  if (xrefInfo.encryptRef !== null) {\n    newXref.set(\"Encrypt\", xrefInfo.encryptRef);\n  }\n  return newXref;\n}\nasync function incrementalUpdate({\n  originalData,\n  xrefInfo,\n  newRefs,\n  xref = null,\n  hasXfa = false,\n  xfaDatasetsRef = null,\n  hasXfaDatasetsEntry = false,\n  needAppearances,\n  acroFormRef = null,\n  acroForm = null,\n  xfaData = null,\n  useXrefStream = false\n}) {\n  await updateAcroform({\n    xref,\n    acroForm,\n    acroFormRef,\n    hasXfa,\n    hasXfaDatasetsEntry,\n    xfaDatasetsRef,\n    needAppearances,\n    newRefs\n  });\n  if (hasXfa) {\n    updateXFA({\n      xfaData,\n      xfaDatasetsRef,\n      newRefs,\n      xref\n    });\n  }\n  const buffer = [];\n  let baseOffset = originalData.length;\n  const lastByte = originalData.at(-1);\n  if (lastByte !== 0x0a && lastByte !== 0x0d) {\n    buffer.push(\"\\n\");\n    baseOffset += 1;\n  }\n  const newXref = getTrailerDict(xrefInfo, newRefs, useXrefStream);\n  newRefs = newRefs.sort((a, b) => a.ref.num - b.ref.num);\n  for (const {\n    data\n  } of newRefs) {\n    if (data !== null) {\n      buffer.push(data);\n    }\n  }\n  await (useXrefStream ? getXRefStreamTable(xrefInfo, baseOffset, newRefs, newXref, buffer) : getXRefTable(xrefInfo, baseOffset, newRefs, newXref, buffer));\n  const totalLength = buffer.reduce((a, str) => a + str.length, originalData.length);\n  const array = new Uint8Array(totalLength);\n  array.set(originalData);\n  let offset = originalData.length;\n  for (const str of buffer) {\n    writeString(str, offset, array);\n    offset += str.length;\n  }\n  return array;\n}\n\n;// CONCATENATED MODULE: ./src/core/struct_tree.js\n\n\n\n\nconst MAX_DEPTH = 40;\nconst StructElementType = {\n  PAGE_CONTENT: 1,\n  STREAM_CONTENT: 2,\n  OBJECT: 3,\n  ANNOTATION: 4,\n  ELEMENT: 5\n};\nclass StructTreeRoot {\n  constructor(rootDict, rootRef) {\n    this.dict = rootDict;\n    this.ref = rootRef instanceof Ref ? rootRef : null;\n    this.roleMap = new Map();\n    this.structParentIds = null;\n  }\n  init() {\n    this.readRoleMap();\n  }\n  #addIdToPage(pageRef, id, type) {\n    if (!(pageRef instanceof Ref) || id < 0) {\n      return;\n    }\n    this.structParentIds ||= new RefSetCache();\n    let ids = this.structParentIds.get(pageRef);\n    if (!ids) {\n      ids = [];\n      this.structParentIds.put(pageRef, ids);\n    }\n    ids.push([id, type]);\n  }\n  addAnnotationIdToPage(pageRef, id) {\n    this.#addIdToPage(pageRef, id, StructElementType.ANNOTATION);\n  }\n  readRoleMap() {\n    const roleMapDict = this.dict.get(\"RoleMap\");\n    if (!(roleMapDict instanceof Dict)) {\n      return;\n    }\n    roleMapDict.forEach((key, value) => {\n      if (!(value instanceof Name)) {\n        return;\n      }\n      this.roleMap.set(key, value.name);\n    });\n  }\n  static async canCreateStructureTree({\n    catalogRef,\n    pdfManager,\n    newAnnotationsByPage\n  }) {\n    if (!(catalogRef instanceof Ref)) {\n      warn(\"Cannot save the struct tree: no catalog reference.\");\n      return false;\n    }\n    let nextKey = 0;\n    let hasNothingToUpdate = true;\n    for (const [pageIndex, elements] of newAnnotationsByPage) {\n      const {\n        ref: pageRef\n      } = await pdfManager.getPage(pageIndex);\n      if (!(pageRef instanceof Ref)) {\n        warn(`Cannot save the struct tree: page ${pageIndex} has no ref.`);\n        hasNothingToUpdate = true;\n        break;\n      }\n      for (const element of elements) {\n        if (element.accessibilityData?.type) {\n          element.parentTreeId = nextKey++;\n          hasNothingToUpdate = false;\n        }\n      }\n    }\n    if (hasNothingToUpdate) {\n      for (const elements of newAnnotationsByPage.values()) {\n        for (const element of elements) {\n          delete element.parentTreeId;\n        }\n      }\n      return false;\n    }\n    return true;\n  }\n  static async createStructureTree({\n    newAnnotationsByPage,\n    xref,\n    catalogRef,\n    pdfManager,\n    newRefs\n  }) {\n    const root = pdfManager.catalog.cloneDict();\n    const cache = new RefSetCache();\n    cache.put(catalogRef, root);\n    const structTreeRootRef = xref.getNewTemporaryRef();\n    root.set(\"StructTreeRoot\", structTreeRootRef);\n    const structTreeRoot = new Dict(xref);\n    structTreeRoot.set(\"Type\", Name.get(\"StructTreeRoot\"));\n    const parentTreeRef = xref.getNewTemporaryRef();\n    structTreeRoot.set(\"ParentTree\", parentTreeRef);\n    const kids = [];\n    structTreeRoot.set(\"K\", kids);\n    cache.put(structTreeRootRef, structTreeRoot);\n    const parentTree = new Dict(xref);\n    const nums = [];\n    parentTree.set(\"Nums\", nums);\n    const nextKey = await this.#writeKids({\n      newAnnotationsByPage,\n      structTreeRootRef,\n      kids,\n      nums,\n      xref,\n      pdfManager,\n      cache\n    });\n    structTreeRoot.set(\"ParentTreeNextKey\", nextKey);\n    cache.put(parentTreeRef, parentTree);\n    const buffer = [];\n    for (const [ref, obj] of cache.items()) {\n      buffer.length = 0;\n      await writeObject(ref, obj, buffer, xref);\n      newRefs.push({\n        ref,\n        data: buffer.join(\"\")\n      });\n    }\n  }\n  async canUpdateStructTree({\n    pdfManager,\n    xref,\n    newAnnotationsByPage\n  }) {\n    if (!this.ref) {\n      warn(\"Cannot update the struct tree: no root reference.\");\n      return false;\n    }\n    let nextKey = this.dict.get(\"ParentTreeNextKey\");\n    if (!Number.isInteger(nextKey) || nextKey < 0) {\n      warn(\"Cannot update the struct tree: invalid next key.\");\n      return false;\n    }\n    const parentTree = this.dict.get(\"ParentTree\");\n    if (!(parentTree instanceof Dict)) {\n      warn(\"Cannot update the struct tree: ParentTree isn't a dict.\");\n      return false;\n    }\n    const nums = parentTree.get(\"Nums\");\n    if (!Array.isArray(nums)) {\n      warn(\"Cannot update the struct tree: nums isn't an array.\");\n      return false;\n    }\n    const numberTree = new NumberTree(parentTree, xref);\n    for (const pageIndex of newAnnotationsByPage.keys()) {\n      const {\n        pageDict\n      } = await pdfManager.getPage(pageIndex);\n      if (!pageDict.has(\"StructParents\")) {\n        continue;\n      }\n      const id = pageDict.get(\"StructParents\");\n      if (!Number.isInteger(id) || !Array.isArray(numberTree.get(id))) {\n        warn(`Cannot save the struct tree: page ${pageIndex} has a wrong id.`);\n        return false;\n      }\n    }\n    let hasNothingToUpdate = true;\n    for (const [pageIndex, elements] of newAnnotationsByPage) {\n      const {\n        pageDict\n      } = await pdfManager.getPage(pageIndex);\n      StructTreeRoot.#collectParents({\n        elements,\n        xref: this.dict.xref,\n        pageDict,\n        numberTree\n      });\n      for (const element of elements) {\n        if (element.accessibilityData?.type) {\n          element.parentTreeId = nextKey++;\n          hasNothingToUpdate = false;\n        }\n      }\n    }\n    if (hasNothingToUpdate) {\n      for (const elements of newAnnotationsByPage.values()) {\n        for (const element of elements) {\n          delete element.parentTreeId;\n          delete element.structTreeParent;\n        }\n      }\n      return false;\n    }\n    return true;\n  }\n  async updateStructureTree({\n    newAnnotationsByPage,\n    pdfManager,\n    newRefs\n  }) {\n    const xref = this.dict.xref;\n    const structTreeRoot = this.dict.clone();\n    const structTreeRootRef = this.ref;\n    const cache = new RefSetCache();\n    cache.put(structTreeRootRef, structTreeRoot);\n    let parentTreeRef = structTreeRoot.getRaw(\"ParentTree\");\n    let parentTree;\n    if (parentTreeRef instanceof Ref) {\n      parentTree = xref.fetch(parentTreeRef);\n    } else {\n      parentTree = parentTreeRef;\n      parentTreeRef = xref.getNewTemporaryRef();\n      structTreeRoot.set(\"ParentTree\", parentTreeRef);\n    }\n    parentTree = parentTree.clone();\n    cache.put(parentTreeRef, parentTree);\n    let nums = parentTree.getRaw(\"Nums\");\n    let numsRef = null;\n    if (nums instanceof Ref) {\n      numsRef = nums;\n      nums = xref.fetch(numsRef);\n    }\n    nums = nums.slice();\n    if (!numsRef) {\n      parentTree.set(\"Nums\", nums);\n    }\n    const newNextkey = await StructTreeRoot.#writeKids({\n      newAnnotationsByPage,\n      structTreeRootRef,\n      kids: null,\n      nums,\n      xref,\n      pdfManager,\n      cache\n    });\n    structTreeRoot.set(\"ParentTreeNextKey\", newNextkey);\n    if (numsRef) {\n      cache.put(numsRef, nums);\n    }\n    const buffer = [];\n    for (const [ref, obj] of cache.items()) {\n      buffer.length = 0;\n      await writeObject(ref, obj, buffer, xref);\n      newRefs.push({\n        ref,\n        data: buffer.join(\"\")\n      });\n    }\n  }\n  static async #writeKids({\n    newAnnotationsByPage,\n    structTreeRootRef,\n    kids,\n    nums,\n    xref,\n    pdfManager,\n    cache\n  }) {\n    const objr = Name.get(\"OBJR\");\n    let nextKey = -Infinity;\n    for (const [pageIndex, elements] of newAnnotationsByPage) {\n      const {\n        ref: pageRef\n      } = await pdfManager.getPage(pageIndex);\n      const isPageRef = pageRef instanceof Ref;\n      for (const {\n        accessibilityData,\n        ref,\n        parentTreeId,\n        structTreeParent\n      } of elements) {\n        if (!accessibilityData?.type) {\n          continue;\n        }\n        const {\n          type,\n          title,\n          lang,\n          alt,\n          expanded,\n          actualText\n        } = accessibilityData;\n        nextKey = Math.max(nextKey, parentTreeId);\n        const tagRef = xref.getNewTemporaryRef();\n        const tagDict = new Dict(xref);\n        tagDict.set(\"S\", Name.get(type));\n        if (title) {\n          tagDict.set(\"T\", title);\n        }\n        if (lang) {\n          tagDict.set(\"Lang\", lang);\n        }\n        if (alt) {\n          tagDict.set(\"Alt\", alt);\n        }\n        if (expanded) {\n          tagDict.set(\"E\", expanded);\n        }\n        if (actualText) {\n          tagDict.set(\"ActualText\", actualText);\n        }\n        await this.#updateParentTag({\n          structTreeParent,\n          tagDict,\n          newTagRef: tagRef,\n          structTreeRootRef,\n          fallbackKids: kids,\n          xref,\n          cache\n        });\n        const objDict = new Dict(xref);\n        tagDict.set(\"K\", objDict);\n        objDict.set(\"Type\", objr);\n        if (isPageRef) {\n          objDict.set(\"Pg\", pageRef);\n        }\n        objDict.set(\"Obj\", ref);\n        cache.put(tagRef, tagDict);\n        nums.push(parentTreeId, tagRef);\n      }\n    }\n    return nextKey + 1;\n  }\n  static #collectParents({\n    elements,\n    xref,\n    pageDict,\n    numberTree\n  }) {\n    const idToElements = new Map();\n    for (const element of elements) {\n      if (element.structTreeParentId) {\n        const id = parseInt(element.structTreeParentId.split(\"_mc\")[1], 10);\n        let elems = idToElements.get(id);\n        if (!elems) {\n          elems = [];\n          idToElements.set(id, elems);\n        }\n        elems.push(element);\n      }\n    }\n    const id = pageDict.get(\"StructParents\");\n    if (!Number.isInteger(id)) {\n      return;\n    }\n    const parentArray = numberTree.get(id);\n    const updateElement = (kid, pageKid, kidRef) => {\n      const elems = idToElements.get(kid);\n      if (elems) {\n        const parentRef = pageKid.getRaw(\"P\");\n        const parentDict = xref.fetchIfRef(parentRef);\n        if (parentRef instanceof Ref && parentDict instanceof Dict) {\n          const params = {\n            ref: kidRef,\n            dict: pageKid\n          };\n          for (const element of elems) {\n            element.structTreeParent = params;\n          }\n        }\n        return true;\n      }\n      return false;\n    };\n    for (const kidRef of parentArray) {\n      if (!(kidRef instanceof Ref)) {\n        continue;\n      }\n      const pageKid = xref.fetch(kidRef);\n      const k = pageKid.get(\"K\");\n      if (Number.isInteger(k)) {\n        updateElement(k, pageKid, kidRef);\n        continue;\n      }\n      if (!Array.isArray(k)) {\n        continue;\n      }\n      for (let kid of k) {\n        kid = xref.fetchIfRef(kid);\n        if (Number.isInteger(kid) && updateElement(kid, pageKid, kidRef)) {\n          break;\n        }\n        if (!(kid instanceof Dict)) {\n          continue;\n        }\n        if (!isName(kid.get(\"Type\"), \"MCR\")) {\n          break;\n        }\n        const mcid = kid.get(\"MCID\");\n        if (Number.isInteger(mcid) && updateElement(mcid, pageKid, kidRef)) {\n          break;\n        }\n      }\n    }\n  }\n  static async #updateParentTag({\n    structTreeParent,\n    tagDict,\n    newTagRef,\n    structTreeRootRef,\n    fallbackKids,\n    xref,\n    cache\n  }) {\n    let ref = null;\n    let parentRef;\n    if (structTreeParent) {\n      ({\n        ref\n      } = structTreeParent);\n      parentRef = structTreeParent.dict.getRaw(\"P\") || structTreeRootRef;\n    } else {\n      parentRef = structTreeRootRef;\n    }\n    tagDict.set(\"P\", parentRef);\n    const parentDict = xref.fetchIfRef(parentRef);\n    if (!parentDict) {\n      fallbackKids.push(newTagRef);\n      return;\n    }\n    let cachedParentDict = cache.get(parentRef);\n    if (!cachedParentDict) {\n      cachedParentDict = parentDict.clone();\n      cache.put(parentRef, cachedParentDict);\n    }\n    const parentKidsRaw = cachedParentDict.getRaw(\"K\");\n    let cachedParentKids = parentKidsRaw instanceof Ref ? cache.get(parentKidsRaw) : null;\n    if (!cachedParentKids) {\n      cachedParentKids = xref.fetchIfRef(parentKidsRaw);\n      cachedParentKids = Array.isArray(cachedParentKids) ? cachedParentKids.slice() : [parentKidsRaw];\n      const parentKidsRef = xref.getNewTemporaryRef();\n      cachedParentDict.set(\"K\", parentKidsRef);\n      cache.put(parentKidsRef, cachedParentKids);\n    }\n    const index = cachedParentKids.indexOf(ref);\n    cachedParentKids.splice(index >= 0 ? index + 1 : cachedParentKids.length, 0, newTagRef);\n  }\n}\nclass StructElementNode {\n  constructor(tree, dict) {\n    this.tree = tree;\n    this.dict = dict;\n    this.kids = [];\n    this.parseKids();\n  }\n  get role() {\n    const nameObj = this.dict.get(\"S\");\n    const name = nameObj instanceof Name ? nameObj.name : \"\";\n    const {\n      root\n    } = this.tree;\n    if (root.roleMap.has(name)) {\n      return root.roleMap.get(name);\n    }\n    return name;\n  }\n  parseKids() {\n    let pageObjId = null;\n    const objRef = this.dict.getRaw(\"Pg\");\n    if (objRef instanceof Ref) {\n      pageObjId = objRef.toString();\n    }\n    const kids = this.dict.get(\"K\");\n    if (Array.isArray(kids)) {\n      for (const kid of kids) {\n        const element = this.parseKid(pageObjId, kid);\n        if (element) {\n          this.kids.push(element);\n        }\n      }\n    } else {\n      const element = this.parseKid(pageObjId, kids);\n      if (element) {\n        this.kids.push(element);\n      }\n    }\n  }\n  parseKid(pageObjId, kid) {\n    if (Number.isInteger(kid)) {\n      if (this.tree.pageDict.objId !== pageObjId) {\n        return null;\n      }\n      return new StructElement({\n        type: StructElementType.PAGE_CONTENT,\n        mcid: kid,\n        pageObjId\n      });\n    }\n    let kidDict = null;\n    if (kid instanceof Ref) {\n      kidDict = this.dict.xref.fetch(kid);\n    } else if (kid instanceof Dict) {\n      kidDict = kid;\n    }\n    if (!kidDict) {\n      return null;\n    }\n    const pageRef = kidDict.getRaw(\"Pg\");\n    if (pageRef instanceof Ref) {\n      pageObjId = pageRef.toString();\n    }\n    const type = kidDict.get(\"Type\") instanceof Name ? kidDict.get(\"Type\").name : null;\n    if (type === \"MCR\") {\n      if (this.tree.pageDict.objId !== pageObjId) {\n        return null;\n      }\n      const kidRef = kidDict.getRaw(\"Stm\");\n      return new StructElement({\n        type: StructElementType.STREAM_CONTENT,\n        refObjId: kidRef instanceof Ref ? kidRef.toString() : null,\n        pageObjId,\n        mcid: kidDict.get(\"MCID\")\n      });\n    }\n    if (type === \"OBJR\") {\n      if (this.tree.pageDict.objId !== pageObjId) {\n        return null;\n      }\n      const kidRef = kidDict.getRaw(\"Obj\");\n      return new StructElement({\n        type: StructElementType.OBJECT,\n        refObjId: kidRef instanceof Ref ? kidRef.toString() : null,\n        pageObjId\n      });\n    }\n    return new StructElement({\n      type: StructElementType.ELEMENT,\n      dict: kidDict\n    });\n  }\n}\nclass StructElement {\n  constructor({\n    type,\n    dict = null,\n    mcid = null,\n    pageObjId = null,\n    refObjId = null\n  }) {\n    this.type = type;\n    this.dict = dict;\n    this.mcid = mcid;\n    this.pageObjId = pageObjId;\n    this.refObjId = refObjId;\n    this.parentNode = null;\n  }\n}\nclass StructTreePage {\n  constructor(structTreeRoot, pageDict) {\n    this.root = structTreeRoot;\n    this.rootDict = structTreeRoot ? structTreeRoot.dict : null;\n    this.pageDict = pageDict;\n    this.nodes = [];\n  }\n  parse(pageRef) {\n    if (!this.root || !this.rootDict) {\n      return;\n    }\n    const parentTree = this.rootDict.get(\"ParentTree\");\n    if (!parentTree) {\n      return;\n    }\n    const id = this.pageDict.get(\"StructParents\");\n    const ids = pageRef instanceof Ref && this.root.structParentIds?.get(pageRef);\n    if (!Number.isInteger(id) && !ids) {\n      return;\n    }\n    const map = new Map();\n    const numberTree = new NumberTree(parentTree, this.rootDict.xref);\n    if (Number.isInteger(id)) {\n      const parentArray = numberTree.get(id);\n      if (Array.isArray(parentArray)) {\n        for (const ref of parentArray) {\n          if (ref instanceof Ref) {\n            this.addNode(this.rootDict.xref.fetch(ref), map);\n          }\n        }\n      }\n    }\n    if (!ids) {\n      return;\n    }\n    for (const [elemId, type] of ids) {\n      const obj = numberTree.get(elemId);\n      if (obj) {\n        const elem = this.addNode(this.rootDict.xref.fetchIfRef(obj), map);\n        if (elem?.kids?.length === 1 && elem.kids[0].type === StructElementType.OBJECT) {\n          elem.kids[0].type = type;\n        }\n      }\n    }\n  }\n  addNode(dict, map, level = 0) {\n    if (level > MAX_DEPTH) {\n      warn(\"StructTree MAX_DEPTH reached.\");\n      return null;\n    }\n    if (map.has(dict)) {\n      return map.get(dict);\n    }\n    const element = new StructElementNode(this, dict);\n    map.set(dict, element);\n    const parent = dict.get(\"P\");\n    if (!parent || isName(parent.get(\"Type\"), \"StructTreeRoot\")) {\n      if (!this.addTopLevelNode(dict, element)) {\n        map.delete(dict);\n      }\n      return element;\n    }\n    const parentNode = this.addNode(parent, map, level + 1);\n    if (!parentNode) {\n      return element;\n    }\n    let save = false;\n    for (const kid of parentNode.kids) {\n      if (kid.type === StructElementType.ELEMENT && kid.dict === dict) {\n        kid.parentNode = element;\n        save = true;\n      }\n    }\n    if (!save) {\n      map.delete(dict);\n    }\n    return element;\n  }\n  addTopLevelNode(dict, element) {\n    const obj = this.rootDict.get(\"K\");\n    if (!obj) {\n      return false;\n    }\n    if (obj instanceof Dict) {\n      if (obj.objId !== dict.objId) {\n        return false;\n      }\n      this.nodes[0] = element;\n      return true;\n    }\n    if (!Array.isArray(obj)) {\n      return true;\n    }\n    let save = false;\n    for (let i = 0; i < obj.length; i++) {\n      const kidRef = obj[i];\n      if (kidRef?.toString() === dict.objId) {\n        this.nodes[i] = element;\n        save = true;\n      }\n    }\n    return save;\n  }\n  get serializable() {\n    function nodeToSerializable(node, parent, level = 0) {\n      if (level > MAX_DEPTH) {\n        warn(\"StructTree too deep to be fully serialized.\");\n        return;\n      }\n      const obj = Object.create(null);\n      obj.role = node.role;\n      obj.children = [];\n      parent.children.push(obj);\n      const alt = node.dict.get(\"Alt\");\n      if (typeof alt === \"string\") {\n        obj.alt = stringToPDFString(alt);\n      }\n      const lang = node.dict.get(\"Lang\");\n      if (typeof lang === \"string\") {\n        obj.lang = stringToPDFString(lang);\n      }\n      for (const kid of node.kids) {\n        const kidElement = kid.type === StructElementType.ELEMENT ? kid.parentNode : null;\n        if (kidElement) {\n          nodeToSerializable(kidElement, obj, level + 1);\n          continue;\n        } else if (kid.type === StructElementType.PAGE_CONTENT || kid.type === StructElementType.STREAM_CONTENT) {\n          obj.children.push({\n            type: \"content\",\n            id: `p${kid.pageObjId}_mc${kid.mcid}`\n          });\n        } else if (kid.type === StructElementType.OBJECT) {\n          obj.children.push({\n            type: \"object\",\n            id: kid.refObjId\n          });\n        } else if (kid.type === StructElementType.ANNOTATION) {\n          obj.children.push({\n            type: \"annotation\",\n            id: `${AnnotationPrefix}${kid.refObjId}`\n          });\n        }\n      }\n    }\n    const root = Object.create(null);\n    root.children = [];\n    root.role = \"Root\";\n    for (const child of this.nodes) {\n      if (!child) {\n        continue;\n      }\n      nodeToSerializable(child, root);\n    }\n    return root;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/catalog.js\n\n\n\n\n\n\n\n\n\n\n\nfunction isValidExplicitDest(dest) {\n  if (!Array.isArray(dest) || dest.length < 2) {\n    return false;\n  }\n  const [page, zoom, ...args] = dest;\n  if (!(page instanceof Ref) && !Number.isInteger(page)) {\n    return false;\n  }\n  if (!(zoom instanceof Name)) {\n    return false;\n  }\n  let allowNull = true;\n  switch (zoom.name) {\n    case \"XYZ\":\n      if (args.length !== 3) {\n        return false;\n      }\n      break;\n    case \"Fit\":\n    case \"FitB\":\n      return args.length === 0;\n    case \"FitH\":\n    case \"FitBH\":\n    case \"FitV\":\n    case \"FitBV\":\n      if (args.length !== 1) {\n        return false;\n      }\n      break;\n    case \"FitR\":\n      if (args.length !== 4) {\n        return false;\n      }\n      allowNull = false;\n      break;\n    default:\n      return false;\n  }\n  for (const arg of args) {\n    if (!(typeof arg === \"number\" || allowNull && arg === null)) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction fetchDest(dest) {\n  if (dest instanceof Dict) {\n    dest = dest.get(\"D\");\n  }\n  return isValidExplicitDest(dest) ? dest : null;\n}\nfunction fetchRemoteDest(action) {\n  let dest = action.get(\"D\");\n  if (dest) {\n    if (dest instanceof Name) {\n      dest = dest.name;\n    }\n    if (typeof dest === \"string\") {\n      return stringToPDFString(dest);\n    } else if (isValidExplicitDest(dest)) {\n      return JSON.stringify(dest);\n    }\n  }\n  return null;\n}\nclass Catalog {\n  constructor(pdfManager, xref) {\n    this.pdfManager = pdfManager;\n    this.xref = xref;\n    this._catDict = xref.getCatalogObj();\n    if (!(this._catDict instanceof Dict)) {\n      throw new FormatError(\"Catalog object is not a dictionary.\");\n    }\n    this.toplevelPagesDict;\n    this._actualNumPages = null;\n    this.fontCache = new RefSetCache();\n    this.builtInCMapCache = new Map();\n    this.standardFontDataCache = new Map();\n    this.globalImageCache = new GlobalImageCache();\n    this.pageKidsCountCache = new RefSetCache();\n    this.pageIndexCache = new RefSetCache();\n    this.nonBlendModesSet = new RefSet();\n    this.systemFontCache = new Map();\n  }\n  cloneDict() {\n    return this._catDict.clone();\n  }\n  get version() {\n    const version = this._catDict.get(\"Version\");\n    if (version instanceof Name) {\n      if (PDF_VERSION_REGEXP.test(version.name)) {\n        return shadow(this, \"version\", version.name);\n      }\n      warn(`Invalid PDF catalog version: ${version.name}`);\n    }\n    return shadow(this, \"version\", null);\n  }\n  get lang() {\n    const lang = this._catDict.get(\"Lang\");\n    return shadow(this, \"lang\", lang && typeof lang === \"string\" ? stringToPDFString(lang) : null);\n  }\n  get needsRendering() {\n    const needsRendering = this._catDict.get(\"NeedsRendering\");\n    return shadow(this, \"needsRendering\", typeof needsRendering === \"boolean\" ? needsRendering : false);\n  }\n  get collection() {\n    let collection = null;\n    try {\n      const obj = this._catDict.get(\"Collection\");\n      if (obj instanceof Dict && obj.size > 0) {\n        collection = obj;\n      }\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      info(\"Cannot fetch Collection entry; assuming no collection is present.\");\n    }\n    return shadow(this, \"collection\", collection);\n  }\n  get acroForm() {\n    let acroForm = null;\n    try {\n      const obj = this._catDict.get(\"AcroForm\");\n      if (obj instanceof Dict && obj.size > 0) {\n        acroForm = obj;\n      }\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      info(\"Cannot fetch AcroForm entry; assuming no forms are present.\");\n    }\n    return shadow(this, \"acroForm\", acroForm);\n  }\n  get acroFormRef() {\n    const value = this._catDict.getRaw(\"AcroForm\");\n    return shadow(this, \"acroFormRef\", value instanceof Ref ? value : null);\n  }\n  get metadata() {\n    const streamRef = this._catDict.getRaw(\"Metadata\");\n    if (!(streamRef instanceof Ref)) {\n      return shadow(this, \"metadata\", null);\n    }\n    let metadata = null;\n    try {\n      const stream = this.xref.fetch(streamRef, !this.xref.encrypt?.encryptMetadata);\n      if (stream instanceof BaseStream && stream.dict instanceof Dict) {\n        const type = stream.dict.get(\"Type\");\n        const subtype = stream.dict.get(\"Subtype\");\n        if (isName(type, \"Metadata\") && isName(subtype, \"XML\")) {\n          const data = stringToUTF8String(stream.getString());\n          if (data) {\n            metadata = new MetadataParser(data).serializable;\n          }\n        }\n      }\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      info(`Skipping invalid Metadata: \"${ex}\".`);\n    }\n    return shadow(this, \"metadata\", metadata);\n  }\n  get markInfo() {\n    let markInfo = null;\n    try {\n      markInfo = this._readMarkInfo();\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(\"Unable to read mark info.\");\n    }\n    return shadow(this, \"markInfo\", markInfo);\n  }\n  _readMarkInfo() {\n    const obj = this._catDict.get(\"MarkInfo\");\n    if (!(obj instanceof Dict)) {\n      return null;\n    }\n    const markInfo = {\n      Marked: false,\n      UserProperties: false,\n      Suspects: false\n    };\n    for (const key in markInfo) {\n      const value = obj.get(key);\n      if (typeof value === \"boolean\") {\n        markInfo[key] = value;\n      }\n    }\n    return markInfo;\n  }\n  get structTreeRoot() {\n    let structTree = null;\n    try {\n      structTree = this._readStructTreeRoot();\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(\"Unable read to structTreeRoot info.\");\n    }\n    return shadow(this, \"structTreeRoot\", structTree);\n  }\n  _readStructTreeRoot() {\n    const rawObj = this._catDict.getRaw(\"StructTreeRoot\");\n    const obj = this.xref.fetchIfRef(rawObj);\n    if (!(obj instanceof Dict)) {\n      return null;\n    }\n    const root = new StructTreeRoot(obj, rawObj);\n    root.init();\n    return root;\n  }\n  get toplevelPagesDict() {\n    const pagesObj = this._catDict.get(\"Pages\");\n    if (!(pagesObj instanceof Dict)) {\n      throw new FormatError(\"Invalid top-level pages dictionary.\");\n    }\n    return shadow(this, \"toplevelPagesDict\", pagesObj);\n  }\n  get documentOutline() {\n    let obj = null;\n    try {\n      obj = this._readDocumentOutline();\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(\"Unable to read document outline.\");\n    }\n    return shadow(this, \"documentOutline\", obj);\n  }\n  _readDocumentOutline() {\n    let obj = this._catDict.get(\"Outlines\");\n    if (!(obj instanceof Dict)) {\n      return null;\n    }\n    obj = obj.getRaw(\"First\");\n    if (!(obj instanceof Ref)) {\n      return null;\n    }\n    const root = {\n      items: []\n    };\n    const queue = [{\n      obj,\n      parent: root\n    }];\n    const processed = new RefSet();\n    processed.put(obj);\n    const xref = this.xref,\n      blackColor = new Uint8ClampedArray(3);\n    while (queue.length > 0) {\n      const i = queue.shift();\n      const outlineDict = xref.fetchIfRef(i.obj);\n      if (outlineDict === null) {\n        continue;\n      }\n      if (!outlineDict.has(\"Title\")) {\n        warn(\"Invalid outline item encountered.\");\n      }\n      const data = {\n        url: null,\n        dest: null,\n        action: null\n      };\n      Catalog.parseDestDictionary({\n        destDict: outlineDict,\n        resultObj: data,\n        docBaseUrl: this.baseUrl,\n        docAttachments: this.attachments\n      });\n      const title = outlineDict.get(\"Title\");\n      const flags = outlineDict.get(\"F\") || 0;\n      const color = outlineDict.getArray(\"C\");\n      const count = outlineDict.get(\"Count\");\n      let rgbColor = blackColor;\n      if (isNumberArray(color, 3) && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) {\n        rgbColor = ColorSpace.singletons.rgb.getRgb(color, 0);\n      }\n      const outlineItem = {\n        action: data.action,\n        attachment: data.attachment,\n        dest: data.dest,\n        url: data.url,\n        unsafeUrl: data.unsafeUrl,\n        newWindow: data.newWindow,\n        setOCGState: data.setOCGState,\n        title: typeof title === \"string\" ? stringToPDFString(title) : \"\",\n        color: rgbColor,\n        count: Number.isInteger(count) ? count : undefined,\n        bold: !!(flags & 2),\n        italic: !!(flags & 1),\n        items: []\n      };\n      i.parent.items.push(outlineItem);\n      obj = outlineDict.getRaw(\"First\");\n      if (obj instanceof Ref && !processed.has(obj)) {\n        queue.push({\n          obj,\n          parent: outlineItem\n        });\n        processed.put(obj);\n      }\n      obj = outlineDict.getRaw(\"Next\");\n      if (obj instanceof Ref && !processed.has(obj)) {\n        queue.push({\n          obj,\n          parent: i.parent\n        });\n        processed.put(obj);\n      }\n    }\n    return root.items.length > 0 ? root.items : null;\n  }\n  get permissions() {\n    let permissions = null;\n    try {\n      permissions = this._readPermissions();\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(\"Unable to read permissions.\");\n    }\n    return shadow(this, \"permissions\", permissions);\n  }\n  _readPermissions() {\n    const encrypt = this.xref.trailer.get(\"Encrypt\");\n    if (!(encrypt instanceof Dict)) {\n      return null;\n    }\n    let flags = encrypt.get(\"P\");\n    if (typeof flags !== \"number\") {\n      return null;\n    }\n    flags += 2 ** 32;\n    const permissions = [];\n    for (const key in PermissionFlag) {\n      const value = PermissionFlag[key];\n      if (flags & value) {\n        permissions.push(value);\n      }\n    }\n    return permissions;\n  }\n  get optionalContentConfig() {\n    let config = null;\n    try {\n      const properties = this._catDict.get(\"OCProperties\");\n      if (!properties) {\n        return shadow(this, \"optionalContentConfig\", null);\n      }\n      const defaultConfig = properties.get(\"D\");\n      if (!defaultConfig) {\n        return shadow(this, \"optionalContentConfig\", null);\n      }\n      const groupsData = properties.get(\"OCGs\");\n      if (!Array.isArray(groupsData)) {\n        return shadow(this, \"optionalContentConfig\", null);\n      }\n      const groups = [];\n      const groupRefs = new RefSet();\n      for (const groupRef of groupsData) {\n        if (!(groupRef instanceof Ref) || groupRefs.has(groupRef)) {\n          continue;\n        }\n        groupRefs.put(groupRef);\n        groups.push(this.#readOptionalContentGroup(groupRef));\n      }\n      config = this.#readOptionalContentConfig(defaultConfig, groupRefs);\n      config.groups = groups;\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(`Unable to read optional content config: ${ex}`);\n    }\n    return shadow(this, \"optionalContentConfig\", config);\n  }\n  #readOptionalContentGroup(groupRef) {\n    const group = this.xref.fetch(groupRef);\n    const obj = {\n      id: groupRef.toString(),\n      name: null,\n      intent: null,\n      usage: {\n        print: null,\n        view: null\n      }\n    };\n    const name = group.get(\"Name\");\n    if (typeof name === \"string\") {\n      obj.name = stringToPDFString(name);\n    }\n    let intent = group.getArray(\"Intent\");\n    if (!Array.isArray(intent)) {\n      intent = [intent];\n    }\n    if (intent.every(i => i instanceof Name)) {\n      obj.intent = intent.map(i => i.name);\n    }\n    const usage = group.get(\"Usage\");\n    if (!(usage instanceof Dict)) {\n      return obj;\n    }\n    const usageObj = obj.usage;\n    const print = usage.get(\"Print\");\n    if (print instanceof Dict) {\n      const printState = print.get(\"PrintState\");\n      if (printState instanceof Name) {\n        switch (printState.name) {\n          case \"ON\":\n          case \"OFF\":\n            usageObj.print = {\n              printState: printState.name\n            };\n        }\n      }\n    }\n    const view = usage.get(\"View\");\n    if (view instanceof Dict) {\n      const viewState = view.get(\"ViewState\");\n      if (viewState instanceof Name) {\n        switch (viewState.name) {\n          case \"ON\":\n          case \"OFF\":\n            usageObj.view = {\n              viewState: viewState.name\n            };\n        }\n      }\n    }\n    return obj;\n  }\n  #readOptionalContentConfig(config, contentGroupRefs) {\n    function parseOnOff(refs) {\n      const onParsed = [];\n      if (Array.isArray(refs)) {\n        for (const value of refs) {\n          if (!(value instanceof Ref)) {\n            continue;\n          }\n          if (contentGroupRefs.has(value)) {\n            onParsed.push(value.toString());\n          }\n        }\n      }\n      return onParsed;\n    }\n    function parseOrder(refs, nestedLevels = 0) {\n      if (!Array.isArray(refs)) {\n        return null;\n      }\n      const order = [];\n      for (const value of refs) {\n        if (value instanceof Ref && contentGroupRefs.has(value)) {\n          parsedOrderRefs.put(value);\n          order.push(value.toString());\n          continue;\n        }\n        const nestedOrder = parseNestedOrder(value, nestedLevels);\n        if (nestedOrder) {\n          order.push(nestedOrder);\n        }\n      }\n      if (nestedLevels > 0) {\n        return order;\n      }\n      const hiddenGroups = [];\n      for (const groupRef of contentGroupRefs) {\n        if (parsedOrderRefs.has(groupRef)) {\n          continue;\n        }\n        hiddenGroups.push(groupRef.toString());\n      }\n      if (hiddenGroups.length) {\n        order.push({\n          name: null,\n          order: hiddenGroups\n        });\n      }\n      return order;\n    }\n    function parseNestedOrder(ref, nestedLevels) {\n      if (++nestedLevels > MAX_NESTED_LEVELS) {\n        warn(\"parseNestedOrder - reached MAX_NESTED_LEVELS.\");\n        return null;\n      }\n      const value = xref.fetchIfRef(ref);\n      if (!Array.isArray(value)) {\n        return null;\n      }\n      const nestedName = xref.fetchIfRef(value[0]);\n      if (typeof nestedName !== \"string\") {\n        return null;\n      }\n      const nestedOrder = parseOrder(value.slice(1), nestedLevels);\n      if (!nestedOrder || !nestedOrder.length) {\n        return null;\n      }\n      return {\n        name: stringToPDFString(nestedName),\n        order: nestedOrder\n      };\n    }\n    const xref = this.xref,\n      parsedOrderRefs = new RefSet(),\n      MAX_NESTED_LEVELS = 10;\n    return {\n      name: typeof config.get(\"Name\") === \"string\" ? stringToPDFString(config.get(\"Name\")) : null,\n      creator: typeof config.get(\"Creator\") === \"string\" ? stringToPDFString(config.get(\"Creator\")) : null,\n      baseState: config.get(\"BaseState\") instanceof Name ? config.get(\"BaseState\").name : null,\n      on: parseOnOff(config.get(\"ON\")),\n      off: parseOnOff(config.get(\"OFF\")),\n      order: parseOrder(config.get(\"Order\")),\n      groups: null\n    };\n  }\n  setActualNumPages(num = null) {\n    this._actualNumPages = num;\n  }\n  get hasActualNumPages() {\n    return this._actualNumPages !== null;\n  }\n  get _pagesCount() {\n    const obj = this.toplevelPagesDict.get(\"Count\");\n    if (!Number.isInteger(obj)) {\n      throw new FormatError(\"Page count in top-level pages dictionary is not an integer.\");\n    }\n    return shadow(this, \"_pagesCount\", obj);\n  }\n  get numPages() {\n    return this.hasActualNumPages ? this._actualNumPages : this._pagesCount;\n  }\n  get destinations() {\n    const obj = this._readDests(),\n      dests = Object.create(null);\n    if (obj instanceof NameTree) {\n      for (const [key, value] of obj.getAll()) {\n        const dest = fetchDest(value);\n        if (dest) {\n          dests[stringToPDFString(key)] = dest;\n        }\n      }\n    } else if (obj instanceof Dict) {\n      obj.forEach(function (key, value) {\n        const dest = fetchDest(value);\n        if (dest) {\n          dests[key] = dest;\n        }\n      });\n    }\n    return shadow(this, \"destinations\", dests);\n  }\n  getDestination(id) {\n    const obj = this._readDests();\n    if (obj instanceof NameTree) {\n      const dest = fetchDest(obj.get(id));\n      if (dest) {\n        return dest;\n      }\n      const allDest = this.destinations[id];\n      if (allDest) {\n        warn(`Found \"${id}\" at an incorrect position in the NameTree.`);\n        return allDest;\n      }\n    } else if (obj instanceof Dict) {\n      const dest = fetchDest(obj.get(id));\n      if (dest) {\n        return dest;\n      }\n    }\n    return null;\n  }\n  _readDests() {\n    const obj = this._catDict.get(\"Names\");\n    if (obj?.has(\"Dests\")) {\n      return new NameTree(obj.getRaw(\"Dests\"), this.xref);\n    } else if (this._catDict.has(\"Dests\")) {\n      return this._catDict.get(\"Dests\");\n    }\n    return undefined;\n  }\n  get pageLabels() {\n    let obj = null;\n    try {\n      obj = this._readPageLabels();\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(\"Unable to read page labels.\");\n    }\n    return shadow(this, \"pageLabels\", obj);\n  }\n  _readPageLabels() {\n    const obj = this._catDict.getRaw(\"PageLabels\");\n    if (!obj) {\n      return null;\n    }\n    const pageLabels = new Array(this.numPages);\n    let style = null,\n      prefix = \"\";\n    const numberTree = new NumberTree(obj, this.xref);\n    const nums = numberTree.getAll();\n    let currentLabel = \"\",\n      currentIndex = 1;\n    for (let i = 0, ii = this.numPages; i < ii; i++) {\n      const labelDict = nums.get(i);\n      if (labelDict !== undefined) {\n        if (!(labelDict instanceof Dict)) {\n          throw new FormatError(\"PageLabel is not a dictionary.\");\n        }\n        if (labelDict.has(\"Type\") && !isName(labelDict.get(\"Type\"), \"PageLabel\")) {\n          throw new FormatError(\"Invalid type in PageLabel dictionary.\");\n        }\n        if (labelDict.has(\"S\")) {\n          const s = labelDict.get(\"S\");\n          if (!(s instanceof Name)) {\n            throw new FormatError(\"Invalid style in PageLabel dictionary.\");\n          }\n          style = s.name;\n        } else {\n          style = null;\n        }\n        if (labelDict.has(\"P\")) {\n          const p = labelDict.get(\"P\");\n          if (typeof p !== \"string\") {\n            throw new FormatError(\"Invalid prefix in PageLabel dictionary.\");\n          }\n          prefix = stringToPDFString(p);\n        } else {\n          prefix = \"\";\n        }\n        if (labelDict.has(\"St\")) {\n          const st = labelDict.get(\"St\");\n          if (!(Number.isInteger(st) && st >= 1)) {\n            throw new FormatError(\"Invalid start in PageLabel dictionary.\");\n          }\n          currentIndex = st;\n        } else {\n          currentIndex = 1;\n        }\n      }\n      switch (style) {\n        case \"D\":\n          currentLabel = currentIndex;\n          break;\n        case \"R\":\n        case \"r\":\n          currentLabel = toRomanNumerals(currentIndex, style === \"r\");\n          break;\n        case \"A\":\n        case \"a\":\n          const LIMIT = 26;\n          const A_UPPER_CASE = 0x41,\n            A_LOWER_CASE = 0x61;\n          const baseCharCode = style === \"a\" ? A_LOWER_CASE : A_UPPER_CASE;\n          const letterIndex = currentIndex - 1;\n          const character = String.fromCharCode(baseCharCode + letterIndex % LIMIT);\n          currentLabel = character.repeat(Math.floor(letterIndex / LIMIT) + 1);\n          break;\n        default:\n          if (style) {\n            throw new FormatError(`Invalid style \"${style}\" in PageLabel dictionary.`);\n          }\n          currentLabel = \"\";\n      }\n      pageLabels[i] = prefix + currentLabel;\n      currentIndex++;\n    }\n    return pageLabels;\n  }\n  get pageLayout() {\n    const obj = this._catDict.get(\"PageLayout\");\n    let pageLayout = \"\";\n    if (obj instanceof Name) {\n      switch (obj.name) {\n        case \"SinglePage\":\n        case \"OneColumn\":\n        case \"TwoColumnLeft\":\n        case \"TwoColumnRight\":\n        case \"TwoPageLeft\":\n        case \"TwoPageRight\":\n          pageLayout = obj.name;\n      }\n    }\n    return shadow(this, \"pageLayout\", pageLayout);\n  }\n  get pageMode() {\n    const obj = this._catDict.get(\"PageMode\");\n    let pageMode = \"UseNone\";\n    if (obj instanceof Name) {\n      switch (obj.name) {\n        case \"UseNone\":\n        case \"UseOutlines\":\n        case \"UseThumbs\":\n        case \"FullScreen\":\n        case \"UseOC\":\n        case \"UseAttachments\":\n          pageMode = obj.name;\n      }\n    }\n    return shadow(this, \"pageMode\", pageMode);\n  }\n  get viewerPreferences() {\n    const obj = this._catDict.get(\"ViewerPreferences\");\n    if (!(obj instanceof Dict)) {\n      return shadow(this, \"viewerPreferences\", null);\n    }\n    let prefs = null;\n    for (const key of obj.getKeys()) {\n      const value = obj.get(key);\n      let prefValue;\n      switch (key) {\n        case \"HideToolbar\":\n        case \"HideMenubar\":\n        case \"HideWindowUI\":\n        case \"FitWindow\":\n        case \"CenterWindow\":\n        case \"DisplayDocTitle\":\n        case \"PickTrayByPDFSize\":\n          if (typeof value === \"boolean\") {\n            prefValue = value;\n          }\n          break;\n        case \"NonFullScreenPageMode\":\n          if (value instanceof Name) {\n            switch (value.name) {\n              case \"UseNone\":\n              case \"UseOutlines\":\n              case \"UseThumbs\":\n              case \"UseOC\":\n                prefValue = value.name;\n                break;\n              default:\n                prefValue = \"UseNone\";\n            }\n          }\n          break;\n        case \"Direction\":\n          if (value instanceof Name) {\n            switch (value.name) {\n              case \"L2R\":\n              case \"R2L\":\n                prefValue = value.name;\n                break;\n              default:\n                prefValue = \"L2R\";\n            }\n          }\n          break;\n        case \"ViewArea\":\n        case \"ViewClip\":\n        case \"PrintArea\":\n        case \"PrintClip\":\n          if (value instanceof Name) {\n            switch (value.name) {\n              case \"MediaBox\":\n              case \"CropBox\":\n              case \"BleedBox\":\n              case \"TrimBox\":\n              case \"ArtBox\":\n                prefValue = value.name;\n                break;\n              default:\n                prefValue = \"CropBox\";\n            }\n          }\n          break;\n        case \"PrintScaling\":\n          if (value instanceof Name) {\n            switch (value.name) {\n              case \"None\":\n              case \"AppDefault\":\n                prefValue = value.name;\n                break;\n              default:\n                prefValue = \"AppDefault\";\n            }\n          }\n          break;\n        case \"Duplex\":\n          if (value instanceof Name) {\n            switch (value.name) {\n              case \"Simplex\":\n              case \"DuplexFlipShortEdge\":\n              case \"DuplexFlipLongEdge\":\n                prefValue = value.name;\n                break;\n              default:\n                prefValue = \"None\";\n            }\n          }\n          break;\n        case \"PrintPageRange\":\n          if (Array.isArray(value) && value.length % 2 === 0) {\n            const isValid = value.every((page, i, arr) => Number.isInteger(page) && page > 0 && (i === 0 || page >= arr[i - 1]) && page <= this.numPages);\n            if (isValid) {\n              prefValue = value;\n            }\n          }\n          break;\n        case \"NumCopies\":\n          if (Number.isInteger(value) && value > 0) {\n            prefValue = value;\n          }\n          break;\n        default:\n          warn(`Ignoring non-standard key in ViewerPreferences: ${key}.`);\n          continue;\n      }\n      if (prefValue === undefined) {\n        warn(`Bad value, for key \"${key}\", in ViewerPreferences: ${value}.`);\n        continue;\n      }\n      if (!prefs) {\n        prefs = Object.create(null);\n      }\n      prefs[key] = prefValue;\n    }\n    return shadow(this, \"viewerPreferences\", prefs);\n  }\n  get openAction() {\n    const obj = this._catDict.get(\"OpenAction\");\n    const openAction = Object.create(null);\n    if (obj instanceof Dict) {\n      const destDict = new Dict(this.xref);\n      destDict.set(\"A\", obj);\n      const resultObj = {\n        url: null,\n        dest: null,\n        action: null\n      };\n      Catalog.parseDestDictionary({\n        destDict,\n        resultObj\n      });\n      if (Array.isArray(resultObj.dest)) {\n        openAction.dest = resultObj.dest;\n      } else if (resultObj.action) {\n        openAction.action = resultObj.action;\n      }\n    } else if (Array.isArray(obj)) {\n      openAction.dest = obj;\n    }\n    return shadow(this, \"openAction\", objectSize(openAction) > 0 ? openAction : null);\n  }\n  get attachments() {\n    const obj = this._catDict.get(\"Names\");\n    let attachments = null;\n    if (obj instanceof Dict && obj.has(\"EmbeddedFiles\")) {\n      const nameTree = new NameTree(obj.getRaw(\"EmbeddedFiles\"), this.xref);\n      for (const [key, value] of nameTree.getAll()) {\n        const fs = new FileSpec(value, this.xref);\n        if (!attachments) {\n          attachments = Object.create(null);\n        }\n        attachments[stringToPDFString(key)] = fs.serializable;\n      }\n    }\n    return shadow(this, \"attachments\", attachments);\n  }\n  get xfaImages() {\n    const obj = this._catDict.get(\"Names\");\n    let xfaImages = null;\n    if (obj instanceof Dict && obj.has(\"XFAImages\")) {\n      const nameTree = new NameTree(obj.getRaw(\"XFAImages\"), this.xref);\n      for (const [key, value] of nameTree.getAll()) {\n        if (!xfaImages) {\n          xfaImages = new Dict(this.xref);\n        }\n        xfaImages.set(stringToPDFString(key), value);\n      }\n    }\n    return shadow(this, \"xfaImages\", xfaImages);\n  }\n  _collectJavaScript() {\n    const obj = this._catDict.get(\"Names\");\n    let javaScript = null;\n    function appendIfJavaScriptDict(name, jsDict) {\n      if (!(jsDict instanceof Dict)) {\n        return;\n      }\n      if (!isName(jsDict.get(\"S\"), \"JavaScript\")) {\n        return;\n      }\n      let js = jsDict.get(\"JS\");\n      if (js instanceof BaseStream) {\n        js = js.getString();\n      } else if (typeof js !== \"string\") {\n        return;\n      }\n      js = stringToPDFString(js).replaceAll(\"\\x00\", \"\");\n      if (js) {\n        (javaScript ||= new Map()).set(name, js);\n      }\n    }\n    if (obj instanceof Dict && obj.has(\"JavaScript\")) {\n      const nameTree = new NameTree(obj.getRaw(\"JavaScript\"), this.xref);\n      for (const [key, value] of nameTree.getAll()) {\n        appendIfJavaScriptDict(stringToPDFString(key), value);\n      }\n    }\n    const openAction = this._catDict.get(\"OpenAction\");\n    if (openAction) {\n      appendIfJavaScriptDict(\"OpenAction\", openAction);\n    }\n    return javaScript;\n  }\n  get jsActions() {\n    const javaScript = this._collectJavaScript();\n    let actions = collectActions(this.xref, this._catDict, DocumentActionEventType);\n    if (javaScript) {\n      actions ||= Object.create(null);\n      for (const [key, val] of javaScript) {\n        if (key in actions) {\n          actions[key].push(val);\n        } else {\n          actions[key] = [val];\n        }\n      }\n    }\n    return shadow(this, \"jsActions\", actions);\n  }\n  async fontFallback(id, handler) {\n    const translatedFonts = await Promise.all(this.fontCache);\n    for (const translatedFont of translatedFonts) {\n      if (translatedFont.loadedName === id) {\n        translatedFont.fallback(handler);\n        return;\n      }\n    }\n  }\n  async cleanup(manuallyTriggered = false) {\n    clearGlobalCaches();\n    this.globalImageCache.clear(manuallyTriggered);\n    this.pageKidsCountCache.clear();\n    this.pageIndexCache.clear();\n    this.nonBlendModesSet.clear();\n    const translatedFonts = await Promise.all(this.fontCache);\n    for (const {\n      dict\n    } of translatedFonts) {\n      delete dict.cacheKey;\n    }\n    this.fontCache.clear();\n    this.builtInCMapCache.clear();\n    this.standardFontDataCache.clear();\n    this.systemFontCache.clear();\n  }\n  async getPageDict(pageIndex) {\n    const nodesToVisit = [this.toplevelPagesDict];\n    const visitedNodes = new RefSet();\n    const pagesRef = this._catDict.getRaw(\"Pages\");\n    if (pagesRef instanceof Ref) {\n      visitedNodes.put(pagesRef);\n    }\n    const xref = this.xref,\n      pageKidsCountCache = this.pageKidsCountCache,\n      pageIndexCache = this.pageIndexCache;\n    let currentPageIndex = 0;\n    while (nodesToVisit.length) {\n      const currentNode = nodesToVisit.pop();\n      if (currentNode instanceof Ref) {\n        const count = pageKidsCountCache.get(currentNode);\n        if (count >= 0 && currentPageIndex + count <= pageIndex) {\n          currentPageIndex += count;\n          continue;\n        }\n        if (visitedNodes.has(currentNode)) {\n          throw new FormatError(\"Pages tree contains circular reference.\");\n        }\n        visitedNodes.put(currentNode);\n        const obj = await xref.fetchAsync(currentNode);\n        if (obj instanceof Dict) {\n          let type = obj.getRaw(\"Type\");\n          if (type instanceof Ref) {\n            type = await xref.fetchAsync(type);\n          }\n          if (isName(type, \"Page\") || !obj.has(\"Kids\")) {\n            if (!pageKidsCountCache.has(currentNode)) {\n              pageKidsCountCache.put(currentNode, 1);\n            }\n            if (!pageIndexCache.has(currentNode)) {\n              pageIndexCache.put(currentNode, currentPageIndex);\n            }\n            if (currentPageIndex === pageIndex) {\n              return [obj, currentNode];\n            }\n            currentPageIndex++;\n            continue;\n          }\n        }\n        nodesToVisit.push(obj);\n        continue;\n      }\n      if (!(currentNode instanceof Dict)) {\n        throw new FormatError(\"Page dictionary kid reference points to wrong type of object.\");\n      }\n      const {\n        objId\n      } = currentNode;\n      let count = currentNode.getRaw(\"Count\");\n      if (count instanceof Ref) {\n        count = await xref.fetchAsync(count);\n      }\n      if (Number.isInteger(count) && count >= 0) {\n        if (objId && !pageKidsCountCache.has(objId)) {\n          pageKidsCountCache.put(objId, count);\n        }\n        if (currentPageIndex + count <= pageIndex) {\n          currentPageIndex += count;\n          continue;\n        }\n      }\n      let kids = currentNode.getRaw(\"Kids\");\n      if (kids instanceof Ref) {\n        kids = await xref.fetchAsync(kids);\n      }\n      if (!Array.isArray(kids)) {\n        let type = currentNode.getRaw(\"Type\");\n        if (type instanceof Ref) {\n          type = await xref.fetchAsync(type);\n        }\n        if (isName(type, \"Page\") || !currentNode.has(\"Kids\")) {\n          if (currentPageIndex === pageIndex) {\n            return [currentNode, null];\n          }\n          currentPageIndex++;\n          continue;\n        }\n        throw new FormatError(\"Page dictionary kids object is not an array.\");\n      }\n      for (let last = kids.length - 1; last >= 0; last--) {\n        nodesToVisit.push(kids[last]);\n      }\n    }\n    throw new Error(`Page index ${pageIndex} not found.`);\n  }\n  async getAllPageDicts(recoveryMode = false) {\n    const {\n      ignoreErrors\n    } = this.pdfManager.evaluatorOptions;\n    const queue = [{\n      currentNode: this.toplevelPagesDict,\n      posInKids: 0\n    }];\n    const visitedNodes = new RefSet();\n    const pagesRef = this._catDict.getRaw(\"Pages\");\n    if (pagesRef instanceof Ref) {\n      visitedNodes.put(pagesRef);\n    }\n    const map = new Map(),\n      xref = this.xref,\n      pageIndexCache = this.pageIndexCache;\n    let pageIndex = 0;\n    function addPageDict(pageDict, pageRef) {\n      if (pageRef && !pageIndexCache.has(pageRef)) {\n        pageIndexCache.put(pageRef, pageIndex);\n      }\n      map.set(pageIndex++, [pageDict, pageRef]);\n    }\n    function addPageError(error) {\n      if (error instanceof XRefEntryException && !recoveryMode) {\n        throw error;\n      }\n      if (recoveryMode && ignoreErrors && pageIndex === 0) {\n        warn(`getAllPageDicts - Skipping invalid first page: \"${error}\".`);\n        error = Dict.empty;\n      }\n      map.set(pageIndex++, [error, null]);\n    }\n    while (queue.length > 0) {\n      const queueItem = queue.at(-1);\n      const {\n        currentNode,\n        posInKids\n      } = queueItem;\n      let kids = currentNode.getRaw(\"Kids\");\n      if (kids instanceof Ref) {\n        try {\n          kids = await xref.fetchAsync(kids);\n        } catch (ex) {\n          addPageError(ex);\n          break;\n        }\n      }\n      if (!Array.isArray(kids)) {\n        addPageError(new FormatError(\"Page dictionary kids object is not an array.\"));\n        break;\n      }\n      if (posInKids >= kids.length) {\n        queue.pop();\n        continue;\n      }\n      const kidObj = kids[posInKids];\n      let obj;\n      if (kidObj instanceof Ref) {\n        if (visitedNodes.has(kidObj)) {\n          addPageError(new FormatError(\"Pages tree contains circular reference.\"));\n          break;\n        }\n        visitedNodes.put(kidObj);\n        try {\n          obj = await xref.fetchAsync(kidObj);\n        } catch (ex) {\n          addPageError(ex);\n          break;\n        }\n      } else {\n        obj = kidObj;\n      }\n      if (!(obj instanceof Dict)) {\n        addPageError(new FormatError(\"Page dictionary kid reference points to wrong type of object.\"));\n        break;\n      }\n      let type = obj.getRaw(\"Type\");\n      if (type instanceof Ref) {\n        try {\n          type = await xref.fetchAsync(type);\n        } catch (ex) {\n          addPageError(ex);\n          break;\n        }\n      }\n      if (isName(type, \"Page\") || !obj.has(\"Kids\")) {\n        addPageDict(obj, kidObj instanceof Ref ? kidObj : null);\n      } else {\n        queue.push({\n          currentNode: obj,\n          posInKids: 0\n        });\n      }\n      queueItem.posInKids++;\n    }\n    return map;\n  }\n  getPageIndex(pageRef) {\n    const cachedPageIndex = this.pageIndexCache.get(pageRef);\n    if (cachedPageIndex !== undefined) {\n      return Promise.resolve(cachedPageIndex);\n    }\n    const xref = this.xref;\n    function pagesBeforeRef(kidRef) {\n      let total = 0,\n        parentRef;\n      return xref.fetchAsync(kidRef).then(function (node) {\n        if (isRefsEqual(kidRef, pageRef) && !isDict(node, \"Page\") && !(node instanceof Dict && !node.has(\"Type\") && node.has(\"Contents\"))) {\n          throw new FormatError(\"The reference does not point to a /Page dictionary.\");\n        }\n        if (!node) {\n          return null;\n        }\n        if (!(node instanceof Dict)) {\n          throw new FormatError(\"Node must be a dictionary.\");\n        }\n        parentRef = node.getRaw(\"Parent\");\n        return node.getAsync(\"Parent\");\n      }).then(function (parent) {\n        if (!parent) {\n          return null;\n        }\n        if (!(parent instanceof Dict)) {\n          throw new FormatError(\"Parent must be a dictionary.\");\n        }\n        return parent.getAsync(\"Kids\");\n      }).then(function (kids) {\n        if (!kids) {\n          return null;\n        }\n        const kidPromises = [];\n        let found = false;\n        for (const kid of kids) {\n          if (!(kid instanceof Ref)) {\n            throw new FormatError(\"Kid must be a reference.\");\n          }\n          if (isRefsEqual(kid, kidRef)) {\n            found = true;\n            break;\n          }\n          kidPromises.push(xref.fetchAsync(kid).then(function (obj) {\n            if (!(obj instanceof Dict)) {\n              throw new FormatError(\"Kid node must be a dictionary.\");\n            }\n            if (obj.has(\"Count\")) {\n              total += obj.get(\"Count\");\n            } else {\n              total++;\n            }\n          }));\n        }\n        if (!found) {\n          throw new FormatError(\"Kid reference not found in parent's kids.\");\n        }\n        return Promise.all(kidPromises).then(function () {\n          return [total, parentRef];\n        });\n      });\n    }\n    let total = 0;\n    const next = ref => pagesBeforeRef(ref).then(args => {\n      if (!args) {\n        this.pageIndexCache.put(pageRef, total);\n        return total;\n      }\n      const [count, parentRef] = args;\n      total += count;\n      return next(parentRef);\n    });\n    return next(pageRef);\n  }\n  get baseUrl() {\n    const uri = this._catDict.get(\"URI\");\n    if (uri instanceof Dict) {\n      const base = uri.get(\"Base\");\n      if (typeof base === \"string\") {\n        const absoluteUrl = createValidAbsoluteUrl(base, null, {\n          tryConvertEncoding: true\n        });\n        if (absoluteUrl) {\n          return shadow(this, \"baseUrl\", absoluteUrl.href);\n        }\n      }\n    }\n    return shadow(this, \"baseUrl\", this.pdfManager.docBaseUrl);\n  }\n  static parseDestDictionary({\n    destDict,\n    resultObj,\n    docBaseUrl = null,\n    docAttachments = null\n  }) {\n    if (!(destDict instanceof Dict)) {\n      warn(\"parseDestDictionary: `destDict` must be a dictionary.\");\n      return;\n    }\n    let action = destDict.get(\"A\"),\n      url,\n      dest;\n    if (!(action instanceof Dict)) {\n      if (destDict.has(\"Dest\")) {\n        action = destDict.get(\"Dest\");\n      } else {\n        action = destDict.get(\"AA\");\n        if (action instanceof Dict) {\n          if (action.has(\"D\")) {\n            action = action.get(\"D\");\n          } else if (action.has(\"U\")) {\n            action = action.get(\"U\");\n          }\n        }\n      }\n    }\n    if (action instanceof Dict) {\n      const actionType = action.get(\"S\");\n      if (!(actionType instanceof Name)) {\n        warn(\"parseDestDictionary: Invalid type in Action dictionary.\");\n        return;\n      }\n      const actionName = actionType.name;\n      switch (actionName) {\n        case \"ResetForm\":\n          const flags = action.get(\"Flags\");\n          const include = ((typeof flags === \"number\" ? flags : 0) & 1) === 0;\n          const fields = [];\n          const refs = [];\n          for (const obj of action.get(\"Fields\") || []) {\n            if (obj instanceof Ref) {\n              refs.push(obj.toString());\n            } else if (typeof obj === \"string\") {\n              fields.push(stringToPDFString(obj));\n            }\n          }\n          resultObj.resetForm = {\n            fields,\n            refs,\n            include\n          };\n          break;\n        case \"URI\":\n          url = action.get(\"URI\");\n          if (url instanceof Name) {\n            url = \"/\" + url.name;\n          }\n          break;\n        case \"GoTo\":\n          dest = action.get(\"D\");\n          break;\n        case \"Launch\":\n        case \"GoToR\":\n          const urlDict = action.get(\"F\");\n          if (urlDict instanceof Dict) {\n            const fs = new FileSpec(urlDict, null, true);\n            const {\n              rawFilename\n            } = fs.serializable;\n            url = rawFilename;\n          } else if (typeof urlDict === \"string\") {\n            url = urlDict;\n          }\n          const remoteDest = fetchRemoteDest(action);\n          if (remoteDest && typeof url === \"string\") {\n            url = url.split(\"#\", 1)[0] + \"#\" + remoteDest;\n          }\n          const newWindow = action.get(\"NewWindow\");\n          if (typeof newWindow === \"boolean\") {\n            resultObj.newWindow = newWindow;\n          }\n          break;\n        case \"GoToE\":\n          const target = action.get(\"T\");\n          let attachment;\n          if (docAttachments && target instanceof Dict) {\n            const relationship = target.get(\"R\");\n            const name = target.get(\"N\");\n            if (isName(relationship, \"C\") && typeof name === \"string\") {\n              attachment = docAttachments[stringToPDFString(name)];\n            }\n          }\n          if (attachment) {\n            resultObj.attachment = attachment;\n            const attachmentDest = fetchRemoteDest(action);\n            if (attachmentDest) {\n              resultObj.attachmentDest = attachmentDest;\n            }\n          } else {\n            warn(`parseDestDictionary - unimplemented \"GoToE\" action.`);\n          }\n          break;\n        case \"Named\":\n          const namedAction = action.get(\"N\");\n          if (namedAction instanceof Name) {\n            resultObj.action = namedAction.name;\n          }\n          break;\n        case \"SetOCGState\":\n          const state = action.get(\"State\");\n          const preserveRB = action.get(\"PreserveRB\");\n          if (!Array.isArray(state) || state.length === 0) {\n            break;\n          }\n          const stateArr = [];\n          for (const elem of state) {\n            if (elem instanceof Name) {\n              switch (elem.name) {\n                case \"ON\":\n                case \"OFF\":\n                case \"Toggle\":\n                  stateArr.push(elem.name);\n                  break;\n              }\n            } else if (elem instanceof Ref) {\n              stateArr.push(elem.toString());\n            }\n          }\n          if (stateArr.length !== state.length) {\n            break;\n          }\n          resultObj.setOCGState = {\n            state: stateArr,\n            preserveRB: typeof preserveRB === \"boolean\" ? preserveRB : true\n          };\n          break;\n        case \"JavaScript\":\n          const jsAction = action.get(\"JS\");\n          let js;\n          if (jsAction instanceof BaseStream) {\n            js = jsAction.getString();\n          } else if (typeof jsAction === \"string\") {\n            js = jsAction;\n          }\n          const jsURL = js && recoverJsURL(stringToPDFString(js));\n          if (jsURL) {\n            url = jsURL.url;\n            resultObj.newWindow = jsURL.newWindow;\n            break;\n          }\n        default:\n          if (actionName === \"JavaScript\" || actionName === \"SubmitForm\") {\n            break;\n          }\n          warn(`parseDestDictionary - unsupported action: \"${actionName}\".`);\n          break;\n      }\n    } else if (destDict.has(\"Dest\")) {\n      dest = destDict.get(\"Dest\");\n    }\n    if (typeof url === \"string\") {\n      const absoluteUrl = createValidAbsoluteUrl(url, docBaseUrl, {\n        addDefaultProtocol: true,\n        tryConvertEncoding: true\n      });\n      if (absoluteUrl) {\n        resultObj.url = absoluteUrl.href;\n      }\n      resultObj.unsafeUrl = url;\n    }\n    if (dest) {\n      if (dest instanceof Name) {\n        dest = dest.name;\n      }\n      if (typeof dest === \"string\") {\n        resultObj.dest = stringToPDFString(dest);\n      } else if (isValidExplicitDest(dest)) {\n        resultObj.dest = dest;\n      }\n    }\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/object_loader.js\n\n\n\n\nfunction mayHaveChildren(value) {\n  return value instanceof Ref || value instanceof Dict || value instanceof BaseStream || Array.isArray(value);\n}\nfunction addChildren(node, nodesToVisit) {\n  if (node instanceof Dict) {\n    node = node.getRawValues();\n  } else if (node instanceof BaseStream) {\n    node = node.dict.getRawValues();\n  } else if (!Array.isArray(node)) {\n    return;\n  }\n  for (const rawValue of node) {\n    if (mayHaveChildren(rawValue)) {\n      nodesToVisit.push(rawValue);\n    }\n  }\n}\nclass ObjectLoader {\n  constructor(dict, keys, xref) {\n    this.dict = dict;\n    this.keys = keys;\n    this.xref = xref;\n    this.refSet = null;\n  }\n  async load() {\n    if (this.xref.stream.isDataLoaded) {\n      return undefined;\n    }\n    const {\n      keys,\n      dict\n    } = this;\n    this.refSet = new RefSet();\n    const nodesToVisit = [];\n    for (const key of keys) {\n      const rawValue = dict.getRaw(key);\n      if (rawValue !== undefined) {\n        nodesToVisit.push(rawValue);\n      }\n    }\n    return this._walk(nodesToVisit);\n  }\n  async _walk(nodesToVisit) {\n    const nodesToRevisit = [];\n    const pendingRequests = [];\n    while (nodesToVisit.length) {\n      let currentNode = nodesToVisit.pop();\n      if (currentNode instanceof Ref) {\n        if (this.refSet.has(currentNode)) {\n          continue;\n        }\n        try {\n          this.refSet.put(currentNode);\n          currentNode = this.xref.fetch(currentNode);\n        } catch (ex) {\n          if (!(ex instanceof MissingDataException)) {\n            warn(`ObjectLoader._walk - requesting all data: \"${ex}\".`);\n            this.refSet = null;\n            const {\n              manager\n            } = this.xref.stream;\n            return manager.requestAllChunks();\n          }\n          nodesToRevisit.push(currentNode);\n          pendingRequests.push({\n            begin: ex.begin,\n            end: ex.end\n          });\n        }\n      }\n      if (currentNode instanceof BaseStream) {\n        const baseStreams = currentNode.getBaseStreams();\n        if (baseStreams) {\n          let foundMissingData = false;\n          for (const stream of baseStreams) {\n            if (stream.isDataLoaded) {\n              continue;\n            }\n            foundMissingData = true;\n            pendingRequests.push({\n              begin: stream.start,\n              end: stream.end\n            });\n          }\n          if (foundMissingData) {\n            nodesToRevisit.push(currentNode);\n          }\n        }\n      }\n      addChildren(currentNode, nodesToVisit);\n    }\n    if (pendingRequests.length) {\n      await this.xref.stream.manager.requestRanges(pendingRequests);\n      for (const node of nodesToRevisit) {\n        if (node instanceof Ref) {\n          this.refSet.remove(node);\n        }\n      }\n      return this._walk(nodesToRevisit);\n    }\n    this.refSet = null;\n    return undefined;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/symbol_utils.js\nconst $acceptWhitespace = Symbol();\nconst $addHTML = Symbol();\nconst $appendChild = Symbol();\nconst $childrenToHTML = Symbol();\nconst $clean = Symbol();\nconst $cleanPage = Symbol();\nconst $cleanup = Symbol();\nconst $clone = Symbol();\nconst $consumed = Symbol();\nconst $content = Symbol(\"content\");\nconst $data = Symbol(\"data\");\nconst $dump = Symbol();\nconst $extra = Symbol(\"extra\");\nconst $finalize = Symbol();\nconst $flushHTML = Symbol();\nconst $getAttributeIt = Symbol();\nconst $getAttributes = Symbol();\nconst $getAvailableSpace = Symbol();\nconst $getChildrenByClass = Symbol();\nconst $getChildrenByName = Symbol();\nconst $getChildrenByNameIt = Symbol();\nconst $getDataValue = Symbol();\nconst $getExtra = Symbol();\nconst $getRealChildrenByNameIt = Symbol();\nconst $getChildren = Symbol();\nconst $getContainedChildren = Symbol();\nconst $getNextPage = Symbol();\nconst $getSubformParent = Symbol();\nconst $getParent = Symbol();\nconst $getTemplateRoot = Symbol();\nconst $globalData = Symbol();\nconst $hasSettableValue = Symbol();\nconst $ids = Symbol();\nconst $indexOf = Symbol();\nconst $insertAt = Symbol();\nconst $isCDATAXml = Symbol();\nconst $isBindable = Symbol();\nconst $isDataValue = Symbol();\nconst $isDescendent = Symbol();\nconst $isNsAgnostic = Symbol();\nconst $isSplittable = Symbol();\nconst $isThereMoreWidth = Symbol();\nconst $isTransparent = Symbol();\nconst $isUsable = Symbol();\nconst $lastAttribute = Symbol();\nconst $namespaceId = Symbol(\"namespaceId\");\nconst $nodeName = Symbol(\"nodeName\");\nconst $nsAttributes = Symbol();\nconst $onChild = Symbol();\nconst $onChildCheck = Symbol();\nconst $onText = Symbol();\nconst $pushGlyphs = Symbol();\nconst $popPara = Symbol();\nconst $pushPara = Symbol();\nconst $removeChild = Symbol();\nconst $root = Symbol(\"root\");\nconst $resolvePrototypes = Symbol();\nconst $searchNode = Symbol();\nconst $setId = Symbol();\nconst $setSetAttributes = Symbol();\nconst $setValue = Symbol();\nconst $tabIndex = Symbol();\nconst $text = Symbol();\nconst $toPages = Symbol();\nconst $toHTML = Symbol();\nconst $toString = Symbol();\nconst $toStyle = Symbol();\nconst $uid = Symbol(\"uid\");\n\n;// CONCATENATED MODULE: ./src/core/xfa/namespaces.js\nconst $buildXFAObject = Symbol();\nconst NamespaceIds = {\n  config: {\n    id: 0,\n    check: ns => ns.startsWith(\"http://www.xfa.org/schema/xci/\")\n  },\n  connectionSet: {\n    id: 1,\n    check: ns => ns.startsWith(\"http://www.xfa.org/schema/xfa-connection-set/\")\n  },\n  datasets: {\n    id: 2,\n    check: ns => ns.startsWith(\"http://www.xfa.org/schema/xfa-data/\")\n  },\n  form: {\n    id: 3,\n    check: ns => ns.startsWith(\"http://www.xfa.org/schema/xfa-form/\")\n  },\n  localeSet: {\n    id: 4,\n    check: ns => ns.startsWith(\"http://www.xfa.org/schema/xfa-locale-set/\")\n  },\n  pdf: {\n    id: 5,\n    check: ns => ns === \"http://ns.adobe.com/xdp/pdf/\"\n  },\n  signature: {\n    id: 6,\n    check: ns => ns === \"http://www.w3.org/2000/09/xmldsig#\"\n  },\n  sourceSet: {\n    id: 7,\n    check: ns => ns.startsWith(\"http://www.xfa.org/schema/xfa-source-set/\")\n  },\n  stylesheet: {\n    id: 8,\n    check: ns => ns === \"http://www.w3.org/1999/XSL/Transform\"\n  },\n  template: {\n    id: 9,\n    check: ns => ns.startsWith(\"http://www.xfa.org/schema/xfa-template/\")\n  },\n  xdc: {\n    id: 10,\n    check: ns => ns.startsWith(\"http://www.xfa.org/schema/xdc/\")\n  },\n  xdp: {\n    id: 11,\n    check: ns => ns === \"http://ns.adobe.com/xdp/\"\n  },\n  xfdf: {\n    id: 12,\n    check: ns => ns === \"http://ns.adobe.com/xfdf/\"\n  },\n  xhtml: {\n    id: 13,\n    check: ns => ns === \"http://www.w3.org/1999/xhtml\"\n  },\n  xmpmeta: {\n    id: 14,\n    check: ns => ns === \"http://ns.adobe.com/xmpmeta/\"\n  }\n};\n\n;// CONCATENATED MODULE: ./src/core/xfa/utils.js\n\nconst dimConverters = {\n  pt: x => x,\n  cm: x => x / 2.54 * 72,\n  mm: x => x / (10 * 2.54) * 72,\n  in: x => x * 72,\n  px: x => x\n};\nconst measurementPattern = /([+-]?\\d+\\.?\\d*)(.*)/;\nfunction stripQuotes(str) {\n  if (str.startsWith(\"'\") || str.startsWith('\"')) {\n    return str.slice(1, -1);\n  }\n  return str;\n}\nfunction getInteger({\n  data,\n  defaultValue,\n  validate\n}) {\n  if (!data) {\n    return defaultValue;\n  }\n  data = data.trim();\n  const n = parseInt(data, 10);\n  if (!isNaN(n) && validate(n)) {\n    return n;\n  }\n  return defaultValue;\n}\nfunction getFloat({\n  data,\n  defaultValue,\n  validate\n}) {\n  if (!data) {\n    return defaultValue;\n  }\n  data = data.trim();\n  const n = parseFloat(data);\n  if (!isNaN(n) && validate(n)) {\n    return n;\n  }\n  return defaultValue;\n}\nfunction getKeyword({\n  data,\n  defaultValue,\n  validate\n}) {\n  if (!data) {\n    return defaultValue;\n  }\n  data = data.trim();\n  if (validate(data)) {\n    return data;\n  }\n  return defaultValue;\n}\nfunction getStringOption(data, options) {\n  return getKeyword({\n    data,\n    defaultValue: options[0],\n    validate: k => options.includes(k)\n  });\n}\nfunction getMeasurement(str, def = \"0\") {\n  def ||= \"0\";\n  if (!str) {\n    return getMeasurement(def);\n  }\n  const match = str.trim().match(measurementPattern);\n  if (!match) {\n    return getMeasurement(def);\n  }\n  const [, valueStr, unit] = match;\n  const value = parseFloat(valueStr);\n  if (isNaN(value)) {\n    return getMeasurement(def);\n  }\n  if (value === 0) {\n    return 0;\n  }\n  const conv = dimConverters[unit];\n  if (conv) {\n    return conv(value);\n  }\n  return value;\n}\nfunction getRatio(data) {\n  if (!data) {\n    return {\n      num: 1,\n      den: 1\n    };\n  }\n  const ratio = data.trim().split(/\\s*:\\s*/).map(x => parseFloat(x)).filter(x => !isNaN(x));\n  if (ratio.length === 1) {\n    ratio.push(1);\n  }\n  if (ratio.length === 0) {\n    return {\n      num: 1,\n      den: 1\n    };\n  }\n  const [num, den] = ratio;\n  return {\n    num,\n    den\n  };\n}\nfunction getRelevant(data) {\n  if (!data) {\n    return [];\n  }\n  return data.trim().split(/\\s+/).map(e => ({\n    excluded: e[0] === \"-\",\n    viewname: e.substring(1)\n  }));\n}\nfunction getColor(data, def = [0, 0, 0]) {\n  let [r, g, b] = def;\n  if (!data) {\n    return {\n      r,\n      g,\n      b\n    };\n  }\n  const color = data.trim().split(/\\s*,\\s*/).map(c => Math.min(Math.max(0, parseInt(c.trim(), 10)), 255)).map(c => isNaN(c) ? 0 : c);\n  if (color.length < 3) {\n    return {\n      r,\n      g,\n      b\n    };\n  }\n  [r, g, b] = color;\n  return {\n    r,\n    g,\n    b\n  };\n}\nfunction getBBox(data) {\n  const def = -1;\n  if (!data) {\n    return {\n      x: def,\n      y: def,\n      width: def,\n      height: def\n    };\n  }\n  const bbox = data.trim().split(/\\s*,\\s*/).map(m => getMeasurement(m, \"-1\"));\n  if (bbox.length < 4 || bbox[2] < 0 || bbox[3] < 0) {\n    return {\n      x: def,\n      y: def,\n      width: def,\n      height: def\n    };\n  }\n  const [x, y, width, height] = bbox;\n  return {\n    x,\n    y,\n    width,\n    height\n  };\n}\nclass HTMLResult {\n  static get FAILURE() {\n    return shadow(this, \"FAILURE\", new HTMLResult(false, null, null, null));\n  }\n  static get EMPTY() {\n    return shadow(this, \"EMPTY\", new HTMLResult(true, null, null, null));\n  }\n  constructor(success, html, bbox, breakNode) {\n    this.success = success;\n    this.html = html;\n    this.bbox = bbox;\n    this.breakNode = breakNode;\n  }\n  isBreak() {\n    return !!this.breakNode;\n  }\n  static breakNode(node) {\n    return new HTMLResult(false, null, null, node);\n  }\n  static success(html, bbox = null) {\n    return new HTMLResult(true, html, bbox, null);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/fonts.js\n\n\n\nclass FontFinder {\n  constructor(pdfFonts) {\n    this.fonts = new Map();\n    this.cache = new Map();\n    this.warned = new Set();\n    this.defaultFont = null;\n    this.add(pdfFonts);\n  }\n  add(pdfFonts, reallyMissingFonts = null) {\n    for (const pdfFont of pdfFonts) {\n      this.addPdfFont(pdfFont);\n    }\n    for (const pdfFont of this.fonts.values()) {\n      if (!pdfFont.regular) {\n        pdfFont.regular = pdfFont.italic || pdfFont.bold || pdfFont.bolditalic;\n      }\n    }\n    if (!reallyMissingFonts || reallyMissingFonts.size === 0) {\n      return;\n    }\n    const myriad = this.fonts.get(\"PdfJS-Fallback-PdfJS-XFA\");\n    for (const missing of reallyMissingFonts) {\n      this.fonts.set(missing, myriad);\n    }\n  }\n  addPdfFont(pdfFont) {\n    const cssFontInfo = pdfFont.cssFontInfo;\n    const name = cssFontInfo.fontFamily;\n    let font = this.fonts.get(name);\n    if (!font) {\n      font = Object.create(null);\n      this.fonts.set(name, font);\n      if (!this.defaultFont) {\n        this.defaultFont = font;\n      }\n    }\n    let property = \"\";\n    const fontWeight = parseFloat(cssFontInfo.fontWeight);\n    if (parseFloat(cssFontInfo.italicAngle) !== 0) {\n      property = fontWeight >= 700 ? \"bolditalic\" : \"italic\";\n    } else if (fontWeight >= 700) {\n      property = \"bold\";\n    }\n    if (!property) {\n      if (pdfFont.name.includes(\"Bold\") || pdfFont.psName?.includes(\"Bold\")) {\n        property = \"bold\";\n      }\n      if (pdfFont.name.includes(\"Italic\") || pdfFont.name.endsWith(\"It\") || pdfFont.psName?.includes(\"Italic\") || pdfFont.psName?.endsWith(\"It\")) {\n        property += \"italic\";\n      }\n    }\n    if (!property) {\n      property = \"regular\";\n    }\n    font[property] = pdfFont;\n  }\n  getDefault() {\n    return this.defaultFont;\n  }\n  find(fontName, mustWarn = true) {\n    let font = this.fonts.get(fontName) || this.cache.get(fontName);\n    if (font) {\n      return font;\n    }\n    const pattern = /,|-|_| |bolditalic|bold|italic|regular|it/gi;\n    let name = fontName.replaceAll(pattern, \"\");\n    font = this.fonts.get(name);\n    if (font) {\n      this.cache.set(fontName, font);\n      return font;\n    }\n    name = name.toLowerCase();\n    const maybe = [];\n    for (const [family, pdfFont] of this.fonts.entries()) {\n      if (family.replaceAll(pattern, \"\").toLowerCase().startsWith(name)) {\n        maybe.push(pdfFont);\n      }\n    }\n    if (maybe.length === 0) {\n      for (const [, pdfFont] of this.fonts.entries()) {\n        if (pdfFont.regular.name?.replaceAll(pattern, \"\").toLowerCase().startsWith(name)) {\n          maybe.push(pdfFont);\n        }\n      }\n    }\n    if (maybe.length === 0) {\n      name = name.replaceAll(/psmt|mt/gi, \"\");\n      for (const [family, pdfFont] of this.fonts.entries()) {\n        if (family.replaceAll(pattern, \"\").toLowerCase().startsWith(name)) {\n          maybe.push(pdfFont);\n        }\n      }\n    }\n    if (maybe.length === 0) {\n      for (const pdfFont of this.fonts.values()) {\n        if (pdfFont.regular.name?.replaceAll(pattern, \"\").toLowerCase().startsWith(name)) {\n          maybe.push(pdfFont);\n        }\n      }\n    }\n    if (maybe.length >= 1) {\n      if (maybe.length !== 1 && mustWarn) {\n        warn(`XFA - Too many choices to guess the correct font: ${fontName}`);\n      }\n      this.cache.set(fontName, maybe[0]);\n      return maybe[0];\n    }\n    if (mustWarn && !this.warned.has(fontName)) {\n      this.warned.add(fontName);\n      warn(`XFA - Cannot find the font: ${fontName}`);\n    }\n    return null;\n  }\n}\nfunction selectFont(xfaFont, typeface) {\n  if (xfaFont.posture === \"italic\") {\n    if (xfaFont.weight === \"bold\") {\n      return typeface.bolditalic;\n    }\n    return typeface.italic;\n  } else if (xfaFont.weight === \"bold\") {\n    return typeface.bold;\n  }\n  return typeface.regular;\n}\nfunction fonts_getMetrics(xfaFont, real = false) {\n  let pdfFont = null;\n  if (xfaFont) {\n    const name = stripQuotes(xfaFont.typeface);\n    const typeface = xfaFont[$globalData].fontFinder.find(name);\n    pdfFont = selectFont(xfaFont, typeface);\n  }\n  if (!pdfFont) {\n    return {\n      lineHeight: 12,\n      lineGap: 2,\n      lineNoGap: 10\n    };\n  }\n  const size = xfaFont.size || 10;\n  const lineHeight = pdfFont.lineHeight ? Math.max(real ? 0 : 1.2, pdfFont.lineHeight) : 1.2;\n  const lineGap = pdfFont.lineGap === undefined ? 0.2 : pdfFont.lineGap;\n  return {\n    lineHeight: lineHeight * size,\n    lineGap: lineGap * size,\n    lineNoGap: Math.max(1, lineHeight - lineGap) * size\n  };\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/text.js\n\nconst WIDTH_FACTOR = 1.02;\nclass FontInfo {\n  constructor(xfaFont, margin, lineHeight, fontFinder) {\n    this.lineHeight = lineHeight;\n    this.paraMargin = margin || {\n      top: 0,\n      bottom: 0,\n      left: 0,\n      right: 0\n    };\n    if (!xfaFont) {\n      [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder);\n      return;\n    }\n    this.xfaFont = {\n      typeface: xfaFont.typeface,\n      posture: xfaFont.posture,\n      weight: xfaFont.weight,\n      size: xfaFont.size,\n      letterSpacing: xfaFont.letterSpacing\n    };\n    const typeface = fontFinder.find(xfaFont.typeface);\n    if (!typeface) {\n      [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder);\n      return;\n    }\n    this.pdfFont = selectFont(xfaFont, typeface);\n    if (!this.pdfFont) {\n      [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder);\n    }\n  }\n  defaultFont(fontFinder) {\n    const font = fontFinder.find(\"Helvetica\", false) || fontFinder.find(\"Myriad Pro\", false) || fontFinder.find(\"Arial\", false) || fontFinder.getDefault();\n    if (font?.regular) {\n      const pdfFont = font.regular;\n      const info = pdfFont.cssFontInfo;\n      const xfaFont = {\n        typeface: info.fontFamily,\n        posture: \"normal\",\n        weight: \"normal\",\n        size: 10,\n        letterSpacing: 0\n      };\n      return [pdfFont, xfaFont];\n    }\n    const xfaFont = {\n      typeface: \"Courier\",\n      posture: \"normal\",\n      weight: \"normal\",\n      size: 10,\n      letterSpacing: 0\n    };\n    return [null, xfaFont];\n  }\n}\nclass FontSelector {\n  constructor(defaultXfaFont, defaultParaMargin, defaultLineHeight, fontFinder) {\n    this.fontFinder = fontFinder;\n    this.stack = [new FontInfo(defaultXfaFont, defaultParaMargin, defaultLineHeight, fontFinder)];\n  }\n  pushData(xfaFont, margin, lineHeight) {\n    const lastFont = this.stack.at(-1);\n    for (const name of [\"typeface\", \"posture\", \"weight\", \"size\", \"letterSpacing\"]) {\n      if (!xfaFont[name]) {\n        xfaFont[name] = lastFont.xfaFont[name];\n      }\n    }\n    for (const name of [\"top\", \"bottom\", \"left\", \"right\"]) {\n      if (isNaN(margin[name])) {\n        margin[name] = lastFont.paraMargin[name];\n      }\n    }\n    const fontInfo = new FontInfo(xfaFont, margin, lineHeight || lastFont.lineHeight, this.fontFinder);\n    if (!fontInfo.pdfFont) {\n      fontInfo.pdfFont = lastFont.pdfFont;\n    }\n    this.stack.push(fontInfo);\n  }\n  popFont() {\n    this.stack.pop();\n  }\n  topFont() {\n    return this.stack.at(-1);\n  }\n}\nclass TextMeasure {\n  constructor(defaultXfaFont, defaultParaMargin, defaultLineHeight, fonts) {\n    this.glyphs = [];\n    this.fontSelector = new FontSelector(defaultXfaFont, defaultParaMargin, defaultLineHeight, fonts);\n    this.extraHeight = 0;\n  }\n  pushData(xfaFont, margin, lineHeight) {\n    this.fontSelector.pushData(xfaFont, margin, lineHeight);\n  }\n  popFont(xfaFont) {\n    return this.fontSelector.popFont();\n  }\n  addPara() {\n    const lastFont = this.fontSelector.topFont();\n    this.extraHeight += lastFont.paraMargin.top + lastFont.paraMargin.bottom;\n  }\n  addString(str) {\n    if (!str) {\n      return;\n    }\n    const lastFont = this.fontSelector.topFont();\n    const fontSize = lastFont.xfaFont.size;\n    if (lastFont.pdfFont) {\n      const letterSpacing = lastFont.xfaFont.letterSpacing;\n      const pdfFont = lastFont.pdfFont;\n      const fontLineHeight = pdfFont.lineHeight || 1.2;\n      const lineHeight = lastFont.lineHeight || Math.max(1.2, fontLineHeight) * fontSize;\n      const lineGap = pdfFont.lineGap === undefined ? 0.2 : pdfFont.lineGap;\n      const noGap = fontLineHeight - lineGap;\n      const firstLineHeight = Math.max(1, noGap) * fontSize;\n      const scale = fontSize / 1000;\n      const fallbackWidth = pdfFont.defaultWidth || pdfFont.charsToGlyphs(\" \")[0].width;\n      for (const line of str.split(/[\\u2029\\n]/)) {\n        const encodedLine = pdfFont.encodeString(line).join(\"\");\n        const glyphs = pdfFont.charsToGlyphs(encodedLine);\n        for (const glyph of glyphs) {\n          const width = glyph.width || fallbackWidth;\n          this.glyphs.push([width * scale + letterSpacing, lineHeight, firstLineHeight, glyph.unicode, false]);\n        }\n        this.glyphs.push([0, 0, 0, \"\\n\", true]);\n      }\n      this.glyphs.pop();\n      return;\n    }\n    for (const line of str.split(/[\\u2029\\n]/)) {\n      for (const char of line.split(\"\")) {\n        this.glyphs.push([fontSize, 1.2 * fontSize, fontSize, char, false]);\n      }\n      this.glyphs.push([0, 0, 0, \"\\n\", true]);\n    }\n    this.glyphs.pop();\n  }\n  compute(maxWidth) {\n    let lastSpacePos = -1,\n      lastSpaceWidth = 0,\n      width = 0,\n      height = 0,\n      currentLineWidth = 0,\n      currentLineHeight = 0;\n    let isBroken = false;\n    let isFirstLine = true;\n    for (let i = 0, ii = this.glyphs.length; i < ii; i++) {\n      const [glyphWidth, lineHeight, firstLineHeight, char, isEOL] = this.glyphs[i];\n      const isSpace = char === \" \";\n      const glyphHeight = isFirstLine ? firstLineHeight : lineHeight;\n      if (isEOL) {\n        width = Math.max(width, currentLineWidth);\n        currentLineWidth = 0;\n        height += currentLineHeight;\n        currentLineHeight = glyphHeight;\n        lastSpacePos = -1;\n        lastSpaceWidth = 0;\n        isFirstLine = false;\n        continue;\n      }\n      if (isSpace) {\n        if (currentLineWidth + glyphWidth > maxWidth) {\n          width = Math.max(width, currentLineWidth);\n          currentLineWidth = 0;\n          height += currentLineHeight;\n          currentLineHeight = glyphHeight;\n          lastSpacePos = -1;\n          lastSpaceWidth = 0;\n          isBroken = true;\n          isFirstLine = false;\n        } else {\n          currentLineHeight = Math.max(glyphHeight, currentLineHeight);\n          lastSpaceWidth = currentLineWidth;\n          currentLineWidth += glyphWidth;\n          lastSpacePos = i;\n        }\n        continue;\n      }\n      if (currentLineWidth + glyphWidth > maxWidth) {\n        height += currentLineHeight;\n        currentLineHeight = glyphHeight;\n        if (lastSpacePos !== -1) {\n          i = lastSpacePos;\n          width = Math.max(width, lastSpaceWidth);\n          currentLineWidth = 0;\n          lastSpacePos = -1;\n          lastSpaceWidth = 0;\n        } else {\n          width = Math.max(width, currentLineWidth);\n          currentLineWidth = glyphWidth;\n        }\n        isBroken = true;\n        isFirstLine = false;\n        continue;\n      }\n      currentLineWidth += glyphWidth;\n      currentLineHeight = Math.max(glyphHeight, currentLineHeight);\n    }\n    width = Math.max(width, currentLineWidth);\n    height += currentLineHeight + this.extraHeight;\n    return {\n      width: WIDTH_FACTOR * width,\n      height,\n      isBroken\n    };\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/som.js\n\n\nconst namePattern = /^[^.[]+/;\nconst indexPattern = /^[^\\]]+/;\nconst operators = {\n  dot: 0,\n  dotDot: 1,\n  dotHash: 2,\n  dotBracket: 3,\n  dotParen: 4\n};\nconst shortcuts = new Map([[\"$data\", (root, current) => root.datasets ? root.datasets.data : root], [\"$record\", (root, current) => (root.datasets ? root.datasets.data : root)[$getChildren]()[0]], [\"$template\", (root, current) => root.template], [\"$connectionSet\", (root, current) => root.connectionSet], [\"$form\", (root, current) => root.form], [\"$layout\", (root, current) => root.layout], [\"$host\", (root, current) => root.host], [\"$dataWindow\", (root, current) => root.dataWindow], [\"$event\", (root, current) => root.event], [\"!\", (root, current) => root.datasets], [\"$xfa\", (root, current) => root], [\"xfa\", (root, current) => root], [\"$\", (root, current) => current]]);\nconst somCache = new WeakMap();\nfunction parseIndex(index) {\n  index = index.trim();\n  if (index === \"*\") {\n    return Infinity;\n  }\n  return parseInt(index, 10) || 0;\n}\nfunction parseExpression(expr, dotDotAllowed, noExpr = true) {\n  let match = expr.match(namePattern);\n  if (!match) {\n    return null;\n  }\n  let [name] = match;\n  const parsed = [{\n    name,\n    cacheName: \".\" + name,\n    index: 0,\n    js: null,\n    formCalc: null,\n    operator: operators.dot\n  }];\n  let pos = name.length;\n  while (pos < expr.length) {\n    const spos = pos;\n    const char = expr.charAt(pos++);\n    if (char === \"[\") {\n      match = expr.slice(pos).match(indexPattern);\n      if (!match) {\n        warn(\"XFA - Invalid index in SOM expression\");\n        return null;\n      }\n      parsed.at(-1).index = parseIndex(match[0]);\n      pos += match[0].length + 1;\n      continue;\n    }\n    let operator;\n    switch (expr.charAt(pos)) {\n      case \".\":\n        if (!dotDotAllowed) {\n          return null;\n        }\n        pos++;\n        operator = operators.dotDot;\n        break;\n      case \"#\":\n        pos++;\n        operator = operators.dotHash;\n        break;\n      case \"[\":\n        if (noExpr) {\n          warn(\"XFA - SOM expression contains a FormCalc subexpression which is not supported for now.\");\n          return null;\n        }\n        operator = operators.dotBracket;\n        break;\n      case \"(\":\n        if (noExpr) {\n          warn(\"XFA - SOM expression contains a JavaScript subexpression which is not supported for now.\");\n          return null;\n        }\n        operator = operators.dotParen;\n        break;\n      default:\n        operator = operators.dot;\n        break;\n    }\n    match = expr.slice(pos).match(namePattern);\n    if (!match) {\n      break;\n    }\n    [name] = match;\n    pos += name.length;\n    parsed.push({\n      name,\n      cacheName: expr.slice(spos, pos),\n      operator,\n      index: 0,\n      js: null,\n      formCalc: null\n    });\n  }\n  return parsed;\n}\nfunction searchNode(root, container, expr, dotDotAllowed = true, useCache = true) {\n  const parsed = parseExpression(expr, dotDotAllowed);\n  if (!parsed) {\n    return null;\n  }\n  const fn = shortcuts.get(parsed[0].name);\n  let i = 0;\n  let isQualified;\n  if (fn) {\n    isQualified = true;\n    root = [fn(root, container)];\n    i = 1;\n  } else {\n    isQualified = container === null;\n    root = [container || root];\n  }\n  for (let ii = parsed.length; i < ii; i++) {\n    const {\n      name,\n      cacheName,\n      operator,\n      index\n    } = parsed[i];\n    const nodes = [];\n    for (const node of root) {\n      if (!node.isXFAObject) {\n        continue;\n      }\n      let children, cached;\n      if (useCache) {\n        cached = somCache.get(node);\n        if (!cached) {\n          cached = new Map();\n          somCache.set(node, cached);\n        }\n        children = cached.get(cacheName);\n      }\n      if (!children) {\n        switch (operator) {\n          case operators.dot:\n            children = node[$getChildrenByName](name, false);\n            break;\n          case operators.dotDot:\n            children = node[$getChildrenByName](name, true);\n            break;\n          case operators.dotHash:\n            children = node[$getChildrenByClass](name);\n            children = children.isXFAObjectArray ? children.children : [children];\n            break;\n          default:\n            break;\n        }\n        if (useCache) {\n          cached.set(cacheName, children);\n        }\n      }\n      if (children.length > 0) {\n        nodes.push(children);\n      }\n    }\n    if (nodes.length === 0 && !isQualified && i === 0) {\n      const parent = container[$getParent]();\n      container = parent;\n      if (!container) {\n        return null;\n      }\n      i = -1;\n      root = [container];\n      continue;\n    }\n    root = isFinite(index) ? nodes.filter(node => index < node.length).map(node => node[index]) : nodes.flat();\n  }\n  if (root.length === 0) {\n    return null;\n  }\n  return root;\n}\nfunction createDataNode(root, container, expr) {\n  const parsed = parseExpression(expr);\n  if (!parsed) {\n    return null;\n  }\n  if (parsed.some(x => x.operator === operators.dotDot)) {\n    return null;\n  }\n  const fn = shortcuts.get(parsed[0].name);\n  let i = 0;\n  if (fn) {\n    root = fn(root, container);\n    i = 1;\n  } else {\n    root = container || root;\n  }\n  for (let ii = parsed.length; i < ii; i++) {\n    const {\n      name,\n      operator,\n      index\n    } = parsed[i];\n    if (!isFinite(index)) {\n      parsed[i].index = 0;\n      return root.createNodes(parsed.slice(i));\n    }\n    let children;\n    switch (operator) {\n      case operators.dot:\n        children = root[$getChildrenByName](name, false);\n        break;\n      case operators.dotDot:\n        children = root[$getChildrenByName](name, true);\n        break;\n      case operators.dotHash:\n        children = root[$getChildrenByClass](name);\n        children = children.isXFAObjectArray ? children.children : [children];\n        break;\n      default:\n        break;\n    }\n    if (children.length === 0) {\n      return root.createNodes(parsed.slice(i));\n    }\n    if (index < children.length) {\n      const child = children[index];\n      if (!child.isXFAObject) {\n        warn(`XFA - Cannot create a node.`);\n        return null;\n      }\n      root = child;\n    } else {\n      parsed[i].index = index - children.length;\n      return root.createNodes(parsed.slice(i));\n    }\n  }\n  return null;\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/xfa_object.js\n\n\n\n\n\n\nconst _applyPrototype = Symbol();\nconst _attributes = Symbol();\nconst _attributeNames = Symbol();\nconst _children = Symbol(\"_children\");\nconst _cloneAttribute = Symbol();\nconst _dataValue = Symbol();\nconst _defaultValue = Symbol();\nconst _filteredChildrenGenerator = Symbol();\nconst _getPrototype = Symbol();\nconst _getUnsetAttributes = Symbol();\nconst _hasChildren = Symbol();\nconst _max = Symbol();\nconst _options = Symbol();\nconst _parent = Symbol(\"parent\");\nconst _resolvePrototypesHelper = Symbol();\nconst _setAttributes = Symbol();\nconst _validator = Symbol();\nlet uid = 0;\nconst NS_DATASETS = NamespaceIds.datasets.id;\nclass XFAObject {\n  constructor(nsId, name, hasChildren = false) {\n    this[$namespaceId] = nsId;\n    this[$nodeName] = name;\n    this[_hasChildren] = hasChildren;\n    this[_parent] = null;\n    this[_children] = [];\n    this[$uid] = `${name}${uid++}`;\n    this[$globalData] = null;\n  }\n  get isXFAObject() {\n    return true;\n  }\n  get isXFAObjectArray() {\n    return false;\n  }\n  createNodes(path) {\n    let root = this,\n      node = null;\n    for (const {\n      name,\n      index\n    } of path) {\n      for (let i = 0, ii = isFinite(index) ? index : 0; i <= ii; i++) {\n        const nsId = root[$namespaceId] === NS_DATASETS ? -1 : root[$namespaceId];\n        node = new XmlObject(nsId, name);\n        root[$appendChild](node);\n      }\n      root = node;\n    }\n    return node;\n  }\n  [$onChild](child) {\n    if (!this[_hasChildren] || !this[$onChildCheck](child)) {\n      return false;\n    }\n    const name = child[$nodeName];\n    const node = this[name];\n    if (node instanceof XFAObjectArray) {\n      if (node.push(child)) {\n        this[$appendChild](child);\n        return true;\n      }\n    } else {\n      if (node !== null) {\n        this[$removeChild](node);\n      }\n      this[name] = child;\n      this[$appendChild](child);\n      return true;\n    }\n    let id = \"\";\n    if (this.id) {\n      id = ` (id: ${this.id})`;\n    } else if (this.name) {\n      id = ` (name: ${this.name} ${this.h.value})`;\n    }\n    warn(`XFA - node \"${this[$nodeName]}\"${id} has already enough \"${name}\"!`);\n    return false;\n  }\n  [$onChildCheck](child) {\n    return this.hasOwnProperty(child[$nodeName]) && child[$namespaceId] === this[$namespaceId];\n  }\n  [$isNsAgnostic]() {\n    return false;\n  }\n  [$acceptWhitespace]() {\n    return false;\n  }\n  [$isCDATAXml]() {\n    return false;\n  }\n  [$isBindable]() {\n    return false;\n  }\n  [$popPara]() {\n    if (this.para) {\n      this[$getTemplateRoot]()[$extra].paraStack.pop();\n    }\n  }\n  [$pushPara]() {\n    this[$getTemplateRoot]()[$extra].paraStack.push(this.para);\n  }\n  [$setId](ids) {\n    if (this.id && this[$namespaceId] === NamespaceIds.template.id) {\n      ids.set(this.id, this);\n    }\n  }\n  [$getTemplateRoot]() {\n    return this[$globalData].template;\n  }\n  [$isSplittable]() {\n    return false;\n  }\n  [$isThereMoreWidth]() {\n    return false;\n  }\n  [$appendChild](child) {\n    child[_parent] = this;\n    this[_children].push(child);\n    if (!child[$globalData] && this[$globalData]) {\n      child[$globalData] = this[$globalData];\n    }\n  }\n  [$removeChild](child) {\n    const i = this[_children].indexOf(child);\n    this[_children].splice(i, 1);\n  }\n  [$hasSettableValue]() {\n    return this.hasOwnProperty(\"value\");\n  }\n  [$setValue](_) {}\n  [$onText](_) {}\n  [$finalize]() {}\n  [$clean](builder) {\n    delete this[_hasChildren];\n    if (this[$cleanup]) {\n      builder.clean(this[$cleanup]);\n      delete this[$cleanup];\n    }\n  }\n  [$indexOf](child) {\n    return this[_children].indexOf(child);\n  }\n  [$insertAt](i, child) {\n    child[_parent] = this;\n    this[_children].splice(i, 0, child);\n    if (!child[$globalData] && this[$globalData]) {\n      child[$globalData] = this[$globalData];\n    }\n  }\n  [$isTransparent]() {\n    return !this.name;\n  }\n  [$lastAttribute]() {\n    return \"\";\n  }\n  [$text]() {\n    if (this[_children].length === 0) {\n      return this[$content];\n    }\n    return this[_children].map(c => c[$text]()).join(\"\");\n  }\n  get [_attributeNames]() {\n    const proto = Object.getPrototypeOf(this);\n    if (!proto._attributes) {\n      const attributes = proto._attributes = new Set();\n      for (const name of Object.getOwnPropertyNames(this)) {\n        if (this[name] === null || this[name] instanceof XFAObject || this[name] instanceof XFAObjectArray) {\n          break;\n        }\n        attributes.add(name);\n      }\n    }\n    return shadow(this, _attributeNames, proto._attributes);\n  }\n  [$isDescendent](parent) {\n    let node = this;\n    while (node) {\n      if (node === parent) {\n        return true;\n      }\n      node = node[$getParent]();\n    }\n    return false;\n  }\n  [$getParent]() {\n    return this[_parent];\n  }\n  [$getSubformParent]() {\n    return this[$getParent]();\n  }\n  [$getChildren](name = null) {\n    if (!name) {\n      return this[_children];\n    }\n    return this[name];\n  }\n  [$dump]() {\n    const dumped = Object.create(null);\n    if (this[$content]) {\n      dumped.$content = this[$content];\n    }\n    for (const name of Object.getOwnPropertyNames(this)) {\n      const value = this[name];\n      if (value === null) {\n        continue;\n      }\n      if (value instanceof XFAObject) {\n        dumped[name] = value[$dump]();\n      } else if (value instanceof XFAObjectArray) {\n        if (!value.isEmpty()) {\n          dumped[name] = value.dump();\n        }\n      } else {\n        dumped[name] = value;\n      }\n    }\n    return dumped;\n  }\n  [$toStyle]() {\n    return null;\n  }\n  [$toHTML]() {\n    return HTMLResult.EMPTY;\n  }\n  *[$getContainedChildren]() {\n    for (const node of this[$getChildren]()) {\n      yield node;\n    }\n  }\n  *[_filteredChildrenGenerator](filter, include) {\n    for (const node of this[$getContainedChildren]()) {\n      if (!filter || include === filter.has(node[$nodeName])) {\n        const availableSpace = this[$getAvailableSpace]();\n        const res = node[$toHTML](availableSpace);\n        if (!res.success) {\n          this[$extra].failingNode = node;\n        }\n        yield res;\n      }\n    }\n  }\n  [$flushHTML]() {\n    return null;\n  }\n  [$addHTML](html, bbox) {\n    this[$extra].children.push(html);\n  }\n  [$getAvailableSpace]() {}\n  [$childrenToHTML]({\n    filter = null,\n    include = true\n  }) {\n    if (!this[$extra].generator) {\n      this[$extra].generator = this[_filteredChildrenGenerator](filter, include);\n    } else {\n      const availableSpace = this[$getAvailableSpace]();\n      const res = this[$extra].failingNode[$toHTML](availableSpace);\n      if (!res.success) {\n        return res;\n      }\n      if (res.html) {\n        this[$addHTML](res.html, res.bbox);\n      }\n      delete this[$extra].failingNode;\n    }\n    while (true) {\n      const gen = this[$extra].generator.next();\n      if (gen.done) {\n        break;\n      }\n      const res = gen.value;\n      if (!res.success) {\n        return res;\n      }\n      if (res.html) {\n        this[$addHTML](res.html, res.bbox);\n      }\n    }\n    this[$extra].generator = null;\n    return HTMLResult.EMPTY;\n  }\n  [$setSetAttributes](attributes) {\n    this[_setAttributes] = new Set(Object.keys(attributes));\n  }\n  [_getUnsetAttributes](protoAttributes) {\n    const allAttr = this[_attributeNames];\n    const setAttr = this[_setAttributes];\n    return [...protoAttributes].filter(x => allAttr.has(x) && !setAttr.has(x));\n  }\n  [$resolvePrototypes](ids, ancestors = new Set()) {\n    for (const child of this[_children]) {\n      child[_resolvePrototypesHelper](ids, ancestors);\n    }\n  }\n  [_resolvePrototypesHelper](ids, ancestors) {\n    const proto = this[_getPrototype](ids, ancestors);\n    if (proto) {\n      this[_applyPrototype](proto, ids, ancestors);\n    } else {\n      this[$resolvePrototypes](ids, ancestors);\n    }\n  }\n  [_getPrototype](ids, ancestors) {\n    const {\n      use,\n      usehref\n    } = this;\n    if (!use && !usehref) {\n      return null;\n    }\n    let proto = null;\n    let somExpression = null;\n    let id = null;\n    let ref = use;\n    if (usehref) {\n      ref = usehref;\n      if (usehref.startsWith(\"#som(\") && usehref.endsWith(\")\")) {\n        somExpression = usehref.slice(\"#som(\".length, -1);\n      } else if (usehref.startsWith(\".#som(\") && usehref.endsWith(\")\")) {\n        somExpression = usehref.slice(\".#som(\".length, -1);\n      } else if (usehref.startsWith(\"#\")) {\n        id = usehref.slice(1);\n      } else if (usehref.startsWith(\".#\")) {\n        id = usehref.slice(2);\n      }\n    } else if (use.startsWith(\"#\")) {\n      id = use.slice(1);\n    } else {\n      somExpression = use;\n    }\n    this.use = this.usehref = \"\";\n    if (id) {\n      proto = ids.get(id);\n    } else {\n      proto = searchNode(ids.get($root), this, somExpression, true, false);\n      if (proto) {\n        proto = proto[0];\n      }\n    }\n    if (!proto) {\n      warn(`XFA - Invalid prototype reference: ${ref}.`);\n      return null;\n    }\n    if (proto[$nodeName] !== this[$nodeName]) {\n      warn(`XFA - Incompatible prototype: ${proto[$nodeName]} !== ${this[$nodeName]}.`);\n      return null;\n    }\n    if (ancestors.has(proto)) {\n      warn(`XFA - Cycle detected in prototypes use.`);\n      return null;\n    }\n    ancestors.add(proto);\n    const protoProto = proto[_getPrototype](ids, ancestors);\n    if (protoProto) {\n      proto[_applyPrototype](protoProto, ids, ancestors);\n    }\n    proto[$resolvePrototypes](ids, ancestors);\n    ancestors.delete(proto);\n    return proto;\n  }\n  [_applyPrototype](proto, ids, ancestors) {\n    if (ancestors.has(proto)) {\n      warn(`XFA - Cycle detected in prototypes use.`);\n      return;\n    }\n    if (!this[$content] && proto[$content]) {\n      this[$content] = proto[$content];\n    }\n    const newAncestors = new Set(ancestors);\n    newAncestors.add(proto);\n    for (const unsetAttrName of this[_getUnsetAttributes](proto[_setAttributes])) {\n      this[unsetAttrName] = proto[unsetAttrName];\n      if (this[_setAttributes]) {\n        this[_setAttributes].add(unsetAttrName);\n      }\n    }\n    for (const name of Object.getOwnPropertyNames(this)) {\n      if (this[_attributeNames].has(name)) {\n        continue;\n      }\n      const value = this[name];\n      const protoValue = proto[name];\n      if (value instanceof XFAObjectArray) {\n        for (const child of value[_children]) {\n          child[_resolvePrototypesHelper](ids, ancestors);\n        }\n        for (let i = value[_children].length, ii = protoValue[_children].length; i < ii; i++) {\n          const child = proto[_children][i][$clone]();\n          if (value.push(child)) {\n            child[_parent] = this;\n            this[_children].push(child);\n            child[_resolvePrototypesHelper](ids, ancestors);\n          } else {\n            break;\n          }\n        }\n        continue;\n      }\n      if (value !== null) {\n        value[$resolvePrototypes](ids, ancestors);\n        if (protoValue) {\n          value[_applyPrototype](protoValue, ids, ancestors);\n        }\n        continue;\n      }\n      if (protoValue !== null) {\n        const child = protoValue[$clone]();\n        child[_parent] = this;\n        this[name] = child;\n        this[_children].push(child);\n        child[_resolvePrototypesHelper](ids, ancestors);\n      }\n    }\n  }\n  static [_cloneAttribute](obj) {\n    if (Array.isArray(obj)) {\n      return obj.map(x => XFAObject[_cloneAttribute](x));\n    }\n    if (typeof obj === \"object\" && obj !== null) {\n      return Object.assign({}, obj);\n    }\n    return obj;\n  }\n  [$clone]() {\n    const clone = Object.create(Object.getPrototypeOf(this));\n    for (const $symbol of Object.getOwnPropertySymbols(this)) {\n      try {\n        clone[$symbol] = this[$symbol];\n      } catch {\n        shadow(clone, $symbol, this[$symbol]);\n      }\n    }\n    clone[$uid] = `${clone[$nodeName]}${uid++}`;\n    clone[_children] = [];\n    for (const name of Object.getOwnPropertyNames(this)) {\n      if (this[_attributeNames].has(name)) {\n        clone[name] = XFAObject[_cloneAttribute](this[name]);\n        continue;\n      }\n      const value = this[name];\n      clone[name] = value instanceof XFAObjectArray ? new XFAObjectArray(value[_max]) : null;\n    }\n    for (const child of this[_children]) {\n      const name = child[$nodeName];\n      const clonedChild = child[$clone]();\n      clone[_children].push(clonedChild);\n      clonedChild[_parent] = clone;\n      if (clone[name] === null) {\n        clone[name] = clonedChild;\n      } else {\n        clone[name][_children].push(clonedChild);\n      }\n    }\n    return clone;\n  }\n  [$getChildren](name = null) {\n    if (!name) {\n      return this[_children];\n    }\n    return this[_children].filter(c => c[$nodeName] === name);\n  }\n  [$getChildrenByClass](name) {\n    return this[name];\n  }\n  [$getChildrenByName](name, allTransparent, first = true) {\n    return Array.from(this[$getChildrenByNameIt](name, allTransparent, first));\n  }\n  *[$getChildrenByNameIt](name, allTransparent, first = true) {\n    if (name === \"parent\") {\n      yield this[_parent];\n      return;\n    }\n    for (const child of this[_children]) {\n      if (child[$nodeName] === name) {\n        yield child;\n      }\n      if (child.name === name) {\n        yield child;\n      }\n      if (allTransparent || child[$isTransparent]()) {\n        yield* child[$getChildrenByNameIt](name, allTransparent, false);\n      }\n    }\n    if (first && this[_attributeNames].has(name)) {\n      yield new XFAAttribute(this, name, this[name]);\n    }\n  }\n}\nclass XFAObjectArray {\n  constructor(max = Infinity) {\n    this[_max] = max;\n    this[_children] = [];\n  }\n  get isXFAObject() {\n    return false;\n  }\n  get isXFAObjectArray() {\n    return true;\n  }\n  push(child) {\n    const len = this[_children].length;\n    if (len <= this[_max]) {\n      this[_children].push(child);\n      return true;\n    }\n    warn(`XFA - node \"${child[$nodeName]}\" accepts no more than ${this[_max]} children`);\n    return false;\n  }\n  isEmpty() {\n    return this[_children].length === 0;\n  }\n  dump() {\n    return this[_children].length === 1 ? this[_children][0][$dump]() : this[_children].map(x => x[$dump]());\n  }\n  [$clone]() {\n    const clone = new XFAObjectArray(this[_max]);\n    clone[_children] = this[_children].map(c => c[$clone]());\n    return clone;\n  }\n  get children() {\n    return this[_children];\n  }\n  clear() {\n    this[_children].length = 0;\n  }\n}\nclass XFAAttribute {\n  constructor(node, name, value) {\n    this[_parent] = node;\n    this[$nodeName] = name;\n    this[$content] = value;\n    this[$consumed] = false;\n    this[$uid] = `attribute${uid++}`;\n  }\n  [$getParent]() {\n    return this[_parent];\n  }\n  [$isDataValue]() {\n    return true;\n  }\n  [$getDataValue]() {\n    return this[$content].trim();\n  }\n  [$setValue](value) {\n    value = value.value || \"\";\n    this[$content] = value.toString();\n  }\n  [$text]() {\n    return this[$content];\n  }\n  [$isDescendent](parent) {\n    return this[_parent] === parent || this[_parent][$isDescendent](parent);\n  }\n}\nclass XmlObject extends XFAObject {\n  constructor(nsId, name, attributes = {}) {\n    super(nsId, name);\n    this[$content] = \"\";\n    this[_dataValue] = null;\n    if (name !== \"#text\") {\n      const map = new Map();\n      this[_attributes] = map;\n      for (const [attrName, value] of Object.entries(attributes)) {\n        map.set(attrName, new XFAAttribute(this, attrName, value));\n      }\n      if (attributes.hasOwnProperty($nsAttributes)) {\n        const dataNode = attributes[$nsAttributes].xfa.dataNode;\n        if (dataNode !== undefined) {\n          if (dataNode === \"dataGroup\") {\n            this[_dataValue] = false;\n          } else if (dataNode === \"dataValue\") {\n            this[_dataValue] = true;\n          }\n        }\n      }\n    }\n    this[$consumed] = false;\n  }\n  [$toString](buf) {\n    const tagName = this[$nodeName];\n    if (tagName === \"#text\") {\n      buf.push(encodeToXmlString(this[$content]));\n      return;\n    }\n    const utf8TagName = utf8StringToString(tagName);\n    const prefix = this[$namespaceId] === NS_DATASETS ? \"xfa:\" : \"\";\n    buf.push(`<${prefix}${utf8TagName}`);\n    for (const [name, value] of this[_attributes].entries()) {\n      const utf8Name = utf8StringToString(name);\n      buf.push(` ${utf8Name}=\"${encodeToXmlString(value[$content])}\"`);\n    }\n    if (this[_dataValue] !== null) {\n      if (this[_dataValue]) {\n        buf.push(` xfa:dataNode=\"dataValue\"`);\n      } else {\n        buf.push(` xfa:dataNode=\"dataGroup\"`);\n      }\n    }\n    if (!this[$content] && this[_children].length === 0) {\n      buf.push(\"/>\");\n      return;\n    }\n    buf.push(\">\");\n    if (this[$content]) {\n      if (typeof this[$content] === \"string\") {\n        buf.push(encodeToXmlString(this[$content]));\n      } else {\n        this[$content][$toString](buf);\n      }\n    } else {\n      for (const child of this[_children]) {\n        child[$toString](buf);\n      }\n    }\n    buf.push(`</${prefix}${utf8TagName}>`);\n  }\n  [$onChild](child) {\n    if (this[$content]) {\n      const node = new XmlObject(this[$namespaceId], \"#text\");\n      this[$appendChild](node);\n      node[$content] = this[$content];\n      this[$content] = \"\";\n    }\n    this[$appendChild](child);\n    return true;\n  }\n  [$onText](str) {\n    this[$content] += str;\n  }\n  [$finalize]() {\n    if (this[$content] && this[_children].length > 0) {\n      const node = new XmlObject(this[$namespaceId], \"#text\");\n      this[$appendChild](node);\n      node[$content] = this[$content];\n      delete this[$content];\n    }\n  }\n  [$toHTML]() {\n    if (this[$nodeName] === \"#text\") {\n      return HTMLResult.success({\n        name: \"#text\",\n        value: this[$content]\n      });\n    }\n    return HTMLResult.EMPTY;\n  }\n  [$getChildren](name = null) {\n    if (!name) {\n      return this[_children];\n    }\n    return this[_children].filter(c => c[$nodeName] === name);\n  }\n  [$getAttributes]() {\n    return this[_attributes];\n  }\n  [$getChildrenByClass](name) {\n    const value = this[_attributes].get(name);\n    if (value !== undefined) {\n      return value;\n    }\n    return this[$getChildren](name);\n  }\n  *[$getChildrenByNameIt](name, allTransparent) {\n    const value = this[_attributes].get(name);\n    if (value) {\n      yield value;\n    }\n    for (const child of this[_children]) {\n      if (child[$nodeName] === name) {\n        yield child;\n      }\n      if (allTransparent) {\n        yield* child[$getChildrenByNameIt](name, allTransparent);\n      }\n    }\n  }\n  *[$getAttributeIt](name, skipConsumed) {\n    const value = this[_attributes].get(name);\n    if (value && (!skipConsumed || !value[$consumed])) {\n      yield value;\n    }\n    for (const child of this[_children]) {\n      yield* child[$getAttributeIt](name, skipConsumed);\n    }\n  }\n  *[$getRealChildrenByNameIt](name, allTransparent, skipConsumed) {\n    for (const child of this[_children]) {\n      if (child[$nodeName] === name && (!skipConsumed || !child[$consumed])) {\n        yield child;\n      }\n      if (allTransparent) {\n        yield* child[$getRealChildrenByNameIt](name, allTransparent, skipConsumed);\n      }\n    }\n  }\n  [$isDataValue]() {\n    if (this[_dataValue] === null) {\n      return this[_children].length === 0 || this[_children][0][$namespaceId] === NamespaceIds.xhtml.id;\n    }\n    return this[_dataValue];\n  }\n  [$getDataValue]() {\n    if (this[_dataValue] === null) {\n      if (this[_children].length === 0) {\n        return this[$content].trim();\n      }\n      if (this[_children][0][$namespaceId] === NamespaceIds.xhtml.id) {\n        return this[_children][0][$text]().trim();\n      }\n      return null;\n    }\n    return this[$content].trim();\n  }\n  [$setValue](value) {\n    value = value.value || \"\";\n    this[$content] = value.toString();\n  }\n  [$dump](hasNS = false) {\n    const dumped = Object.create(null);\n    if (hasNS) {\n      dumped.$ns = this[$namespaceId];\n    }\n    if (this[$content]) {\n      dumped.$content = this[$content];\n    }\n    dumped.$name = this[$nodeName];\n    dumped.children = [];\n    for (const child of this[_children]) {\n      dumped.children.push(child[$dump](hasNS));\n    }\n    dumped.attributes = Object.create(null);\n    for (const [name, value] of this[_attributes]) {\n      dumped.attributes[name] = value[$content];\n    }\n    return dumped;\n  }\n}\nclass ContentObject extends XFAObject {\n  constructor(nsId, name) {\n    super(nsId, name);\n    this[$content] = \"\";\n  }\n  [$onText](text) {\n    this[$content] += text;\n  }\n  [$finalize]() {}\n}\nclass OptionObject extends ContentObject {\n  constructor(nsId, name, options) {\n    super(nsId, name);\n    this[_options] = options;\n  }\n  [$finalize]() {\n    this[$content] = getKeyword({\n      data: this[$content],\n      defaultValue: this[_options][0],\n      validate: k => this[_options].includes(k)\n    });\n  }\n  [$clean](builder) {\n    super[$clean](builder);\n    delete this[_options];\n  }\n}\nclass StringObject extends ContentObject {\n  [$finalize]() {\n    this[$content] = this[$content].trim();\n  }\n}\nclass IntegerObject extends ContentObject {\n  constructor(nsId, name, defaultValue, validator) {\n    super(nsId, name);\n    this[_defaultValue] = defaultValue;\n    this[_validator] = validator;\n  }\n  [$finalize]() {\n    this[$content] = getInteger({\n      data: this[$content],\n      defaultValue: this[_defaultValue],\n      validate: this[_validator]\n    });\n  }\n  [$clean](builder) {\n    super[$clean](builder);\n    delete this[_defaultValue];\n    delete this[_validator];\n  }\n}\nclass Option01 extends IntegerObject {\n  constructor(nsId, name) {\n    super(nsId, name, 0, n => n === 1);\n  }\n}\nclass Option10 extends IntegerObject {\n  constructor(nsId, name) {\n    super(nsId, name, 1, n => n === 0);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/html_utils.js\n\n\n\n\n\n\nfunction measureToString(m) {\n  if (typeof m === \"string\") {\n    return \"0px\";\n  }\n  return Number.isInteger(m) ? `${m}px` : `${m.toFixed(2)}px`;\n}\nconst converters = {\n  anchorType(node, style) {\n    const parent = node[$getSubformParent]();\n    if (!parent || parent.layout && parent.layout !== \"position\") {\n      return;\n    }\n    if (!(\"transform\" in style)) {\n      style.transform = \"\";\n    }\n    switch (node.anchorType) {\n      case \"bottomCenter\":\n        style.transform += \"translate(-50%, -100%)\";\n        break;\n      case \"bottomLeft\":\n        style.transform += \"translate(0,-100%)\";\n        break;\n      case \"bottomRight\":\n        style.transform += \"translate(-100%,-100%)\";\n        break;\n      case \"middleCenter\":\n        style.transform += \"translate(-50%,-50%)\";\n        break;\n      case \"middleLeft\":\n        style.transform += \"translate(0,-50%)\";\n        break;\n      case \"middleRight\":\n        style.transform += \"translate(-100%,-50%)\";\n        break;\n      case \"topCenter\":\n        style.transform += \"translate(-50%,0)\";\n        break;\n      case \"topRight\":\n        style.transform += \"translate(-100%,0)\";\n        break;\n    }\n  },\n  dimensions(node, style) {\n    const parent = node[$getSubformParent]();\n    let width = node.w;\n    const height = node.h;\n    if (parent.layout?.includes(\"row\")) {\n      const extra = parent[$extra];\n      const colSpan = node.colSpan;\n      let w;\n      if (colSpan === -1) {\n        w = extra.columnWidths.slice(extra.currentColumn).reduce((a, x) => a + x, 0);\n        extra.currentColumn = 0;\n      } else {\n        w = extra.columnWidths.slice(extra.currentColumn, extra.currentColumn + colSpan).reduce((a, x) => a + x, 0);\n        extra.currentColumn = (extra.currentColumn + node.colSpan) % extra.columnWidths.length;\n      }\n      if (!isNaN(w)) {\n        width = node.w = w;\n      }\n    }\n    style.width = width !== \"\" ? measureToString(width) : \"auto\";\n    style.height = height !== \"\" ? measureToString(height) : \"auto\";\n  },\n  position(node, style) {\n    const parent = node[$getSubformParent]();\n    if (parent?.layout && parent.layout !== \"position\") {\n      return;\n    }\n    style.position = \"absolute\";\n    style.left = measureToString(node.x);\n    style.top = measureToString(node.y);\n  },\n  rotate(node, style) {\n    if (node.rotate) {\n      if (!(\"transform\" in style)) {\n        style.transform = \"\";\n      }\n      style.transform += `rotate(-${node.rotate}deg)`;\n      style.transformOrigin = \"top left\";\n    }\n  },\n  presence(node, style) {\n    switch (node.presence) {\n      case \"invisible\":\n        style.visibility = \"hidden\";\n        break;\n      case \"hidden\":\n      case \"inactive\":\n        style.display = \"none\";\n        break;\n    }\n  },\n  hAlign(node, style) {\n    if (node[$nodeName] === \"para\") {\n      switch (node.hAlign) {\n        case \"justifyAll\":\n          style.textAlign = \"justify-all\";\n          break;\n        case \"radix\":\n          style.textAlign = \"left\";\n          break;\n        default:\n          style.textAlign = node.hAlign;\n      }\n    } else {\n      switch (node.hAlign) {\n        case \"left\":\n          style.alignSelf = \"start\";\n          break;\n        case \"center\":\n          style.alignSelf = \"center\";\n          break;\n        case \"right\":\n          style.alignSelf = \"end\";\n          break;\n      }\n    }\n  },\n  margin(node, style) {\n    if (node.margin) {\n      style.margin = node.margin[$toStyle]().margin;\n    }\n  }\n};\nfunction setMinMaxDimensions(node, style) {\n  const parent = node[$getSubformParent]();\n  if (parent.layout === \"position\") {\n    if (node.minW > 0) {\n      style.minWidth = measureToString(node.minW);\n    }\n    if (node.maxW > 0) {\n      style.maxWidth = measureToString(node.maxW);\n    }\n    if (node.minH > 0) {\n      style.minHeight = measureToString(node.minH);\n    }\n    if (node.maxH > 0) {\n      style.maxHeight = measureToString(node.maxH);\n    }\n  }\n}\nfunction layoutText(text, xfaFont, margin, lineHeight, fontFinder, width) {\n  const measure = new TextMeasure(xfaFont, margin, lineHeight, fontFinder);\n  if (typeof text === \"string\") {\n    measure.addString(text);\n  } else {\n    text[$pushGlyphs](measure);\n  }\n  return measure.compute(width);\n}\nfunction layoutNode(node, availableSpace) {\n  let height = null;\n  let width = null;\n  let isBroken = false;\n  if ((!node.w || !node.h) && node.value) {\n    let marginH = 0;\n    let marginV = 0;\n    if (node.margin) {\n      marginH = node.margin.leftInset + node.margin.rightInset;\n      marginV = node.margin.topInset + node.margin.bottomInset;\n    }\n    let lineHeight = null;\n    let margin = null;\n    if (node.para) {\n      margin = Object.create(null);\n      lineHeight = node.para.lineHeight === \"\" ? null : node.para.lineHeight;\n      margin.top = node.para.spaceAbove === \"\" ? 0 : node.para.spaceAbove;\n      margin.bottom = node.para.spaceBelow === \"\" ? 0 : node.para.spaceBelow;\n      margin.left = node.para.marginLeft === \"\" ? 0 : node.para.marginLeft;\n      margin.right = node.para.marginRight === \"\" ? 0 : node.para.marginRight;\n    }\n    let font = node.font;\n    if (!font) {\n      const root = node[$getTemplateRoot]();\n      let parent = node[$getParent]();\n      while (parent && parent !== root) {\n        if (parent.font) {\n          font = parent.font;\n          break;\n        }\n        parent = parent[$getParent]();\n      }\n    }\n    const maxWidth = (node.w || availableSpace.width) - marginH;\n    const fontFinder = node[$globalData].fontFinder;\n    if (node.value.exData && node.value.exData[$content] && node.value.exData.contentType === \"text/html\") {\n      const res = layoutText(node.value.exData[$content], font, margin, lineHeight, fontFinder, maxWidth);\n      width = res.width;\n      height = res.height;\n      isBroken = res.isBroken;\n    } else {\n      const text = node.value[$text]();\n      if (text) {\n        const res = layoutText(text, font, margin, lineHeight, fontFinder, maxWidth);\n        width = res.width;\n        height = res.height;\n        isBroken = res.isBroken;\n      }\n    }\n    if (width !== null && !node.w) {\n      width += marginH;\n    }\n    if (height !== null && !node.h) {\n      height += marginV;\n    }\n  }\n  return {\n    w: width,\n    h: height,\n    isBroken\n  };\n}\nfunction computeBbox(node, html, availableSpace) {\n  let bbox;\n  if (node.w !== \"\" && node.h !== \"\") {\n    bbox = [node.x, node.y, node.w, node.h];\n  } else {\n    if (!availableSpace) {\n      return null;\n    }\n    let width = node.w;\n    if (width === \"\") {\n      if (node.maxW === 0) {\n        const parent = node[$getSubformParent]();\n        width = parent.layout === \"position\" && parent.w !== \"\" ? 0 : node.minW;\n      } else {\n        width = Math.min(node.maxW, availableSpace.width);\n      }\n      html.attributes.style.width = measureToString(width);\n    }\n    let height = node.h;\n    if (height === \"\") {\n      if (node.maxH === 0) {\n        const parent = node[$getSubformParent]();\n        height = parent.layout === \"position\" && parent.h !== \"\" ? 0 : node.minH;\n      } else {\n        height = Math.min(node.maxH, availableSpace.height);\n      }\n      html.attributes.style.height = measureToString(height);\n    }\n    bbox = [node.x, node.y, width, height];\n  }\n  return bbox;\n}\nfunction fixDimensions(node) {\n  const parent = node[$getSubformParent]();\n  if (parent.layout?.includes(\"row\")) {\n    const extra = parent[$extra];\n    const colSpan = node.colSpan;\n    let width;\n    if (colSpan === -1) {\n      width = extra.columnWidths.slice(extra.currentColumn).reduce((a, w) => a + w, 0);\n    } else {\n      width = extra.columnWidths.slice(extra.currentColumn, extra.currentColumn + colSpan).reduce((a, w) => a + w, 0);\n    }\n    if (!isNaN(width)) {\n      node.w = width;\n    }\n  }\n  if (parent.layout && parent.layout !== \"position\") {\n    node.x = node.y = 0;\n  }\n  if (node.layout === \"table\") {\n    if (node.w === \"\" && Array.isArray(node.columnWidths)) {\n      node.w = node.columnWidths.reduce((a, x) => a + x, 0);\n    }\n  }\n}\nfunction layoutClass(node) {\n  switch (node.layout) {\n    case \"position\":\n      return \"xfaPosition\";\n    case \"lr-tb\":\n      return \"xfaLrTb\";\n    case \"rl-row\":\n      return \"xfaRlRow\";\n    case \"rl-tb\":\n      return \"xfaRlTb\";\n    case \"row\":\n      return \"xfaRow\";\n    case \"table\":\n      return \"xfaTable\";\n    case \"tb\":\n      return \"xfaTb\";\n    default:\n      return \"xfaPosition\";\n  }\n}\nfunction toStyle(node, ...names) {\n  const style = Object.create(null);\n  for (const name of names) {\n    const value = node[name];\n    if (value === null) {\n      continue;\n    }\n    if (converters.hasOwnProperty(name)) {\n      converters[name](node, style);\n      continue;\n    }\n    if (value instanceof XFAObject) {\n      const newStyle = value[$toStyle]();\n      if (newStyle) {\n        Object.assign(style, newStyle);\n      } else {\n        warn(`(DEBUG) - XFA - style for ${name} not implemented yet`);\n      }\n    }\n  }\n  return style;\n}\nfunction createWrapper(node, html) {\n  const {\n    attributes\n  } = html;\n  const {\n    style\n  } = attributes;\n  const wrapper = {\n    name: \"div\",\n    attributes: {\n      class: [\"xfaWrapper\"],\n      style: Object.create(null)\n    },\n    children: []\n  };\n  attributes.class.push(\"xfaWrapped\");\n  if (node.border) {\n    const {\n      widths,\n      insets\n    } = node.border[$extra];\n    let width, height;\n    let top = insets[0];\n    let left = insets[3];\n    const insetsH = insets[0] + insets[2];\n    const insetsW = insets[1] + insets[3];\n    switch (node.border.hand) {\n      case \"even\":\n        top -= widths[0] / 2;\n        left -= widths[3] / 2;\n        width = `calc(100% + ${(widths[1] + widths[3]) / 2 - insetsW}px)`;\n        height = `calc(100% + ${(widths[0] + widths[2]) / 2 - insetsH}px)`;\n        break;\n      case \"left\":\n        top -= widths[0];\n        left -= widths[3];\n        width = `calc(100% + ${widths[1] + widths[3] - insetsW}px)`;\n        height = `calc(100% + ${widths[0] + widths[2] - insetsH}px)`;\n        break;\n      case \"right\":\n        width = insetsW ? `calc(100% - ${insetsW}px)` : \"100%\";\n        height = insetsH ? `calc(100% - ${insetsH}px)` : \"100%\";\n        break;\n    }\n    const classNames = [\"xfaBorder\"];\n    if (isPrintOnly(node.border)) {\n      classNames.push(\"xfaPrintOnly\");\n    }\n    const border = {\n      name: \"div\",\n      attributes: {\n        class: classNames,\n        style: {\n          top: `${top}px`,\n          left: `${left}px`,\n          width,\n          height\n        }\n      },\n      children: []\n    };\n    for (const key of [\"border\", \"borderWidth\", \"borderColor\", \"borderRadius\", \"borderStyle\"]) {\n      if (style[key] !== undefined) {\n        border.attributes.style[key] = style[key];\n        delete style[key];\n      }\n    }\n    wrapper.children.push(border, html);\n  } else {\n    wrapper.children.push(html);\n  }\n  for (const key of [\"background\", \"backgroundClip\", \"top\", \"left\", \"width\", \"height\", \"minWidth\", \"minHeight\", \"maxWidth\", \"maxHeight\", \"transform\", \"transformOrigin\", \"visibility\"]) {\n    if (style[key] !== undefined) {\n      wrapper.attributes.style[key] = style[key];\n      delete style[key];\n    }\n  }\n  wrapper.attributes.style.position = style.position === \"absolute\" ? \"absolute\" : \"relative\";\n  delete style.position;\n  if (style.alignSelf) {\n    wrapper.attributes.style.alignSelf = style.alignSelf;\n    delete style.alignSelf;\n  }\n  return wrapper;\n}\nfunction fixTextIndent(styles) {\n  const indent = getMeasurement(styles.textIndent, \"0px\");\n  if (indent >= 0) {\n    return;\n  }\n  const align = styles.textAlign === \"right\" ? \"right\" : \"left\";\n  const name = \"padding\" + (align === \"left\" ? \"Left\" : \"Right\");\n  const padding = getMeasurement(styles[name], \"0px\");\n  styles[name] = `${padding - indent}px`;\n}\nfunction setAccess(node, classNames) {\n  switch (node.access) {\n    case \"nonInteractive\":\n      classNames.push(\"xfaNonInteractive\");\n      break;\n    case \"readOnly\":\n      classNames.push(\"xfaReadOnly\");\n      break;\n    case \"protected\":\n      classNames.push(\"xfaDisabled\");\n      break;\n  }\n}\nfunction isPrintOnly(node) {\n  return node.relevant.length > 0 && !node.relevant[0].excluded && node.relevant[0].viewname === \"print\";\n}\nfunction getCurrentPara(node) {\n  const stack = node[$getTemplateRoot]()[$extra].paraStack;\n  return stack.length ? stack.at(-1) : null;\n}\nfunction setPara(node, nodeStyle, value) {\n  if (value.attributes.class?.includes(\"xfaRich\")) {\n    if (nodeStyle) {\n      if (node.h === \"\") {\n        nodeStyle.height = \"auto\";\n      }\n      if (node.w === \"\") {\n        nodeStyle.width = \"auto\";\n      }\n    }\n    const para = getCurrentPara(node);\n    if (para) {\n      const valueStyle = value.attributes.style;\n      valueStyle.display = \"flex\";\n      valueStyle.flexDirection = \"column\";\n      switch (para.vAlign) {\n        case \"top\":\n          valueStyle.justifyContent = \"start\";\n          break;\n        case \"bottom\":\n          valueStyle.justifyContent = \"end\";\n          break;\n        case \"middle\":\n          valueStyle.justifyContent = \"center\";\n          break;\n      }\n      const paraStyle = para[$toStyle]();\n      for (const [key, val] of Object.entries(paraStyle)) {\n        if (!(key in valueStyle)) {\n          valueStyle[key] = val;\n        }\n      }\n    }\n  }\n}\nfunction setFontFamily(xfaFont, node, fontFinder, style) {\n  if (!fontFinder) {\n    delete style.fontFamily;\n    return;\n  }\n  const name = stripQuotes(xfaFont.typeface);\n  style.fontFamily = `\"${name}\"`;\n  const typeface = fontFinder.find(name);\n  if (typeface) {\n    const {\n      fontFamily\n    } = typeface.regular.cssFontInfo;\n    if (fontFamily !== name) {\n      style.fontFamily = `\"${fontFamily}\"`;\n    }\n    const para = getCurrentPara(node);\n    if (para && para.lineHeight !== \"\") {\n      return;\n    }\n    if (style.lineHeight) {\n      return;\n    }\n    const pdfFont = selectFont(xfaFont, typeface);\n    if (pdfFont) {\n      style.lineHeight = Math.max(1.2, pdfFont.lineHeight);\n    }\n  }\n}\nfunction fixURL(str) {\n  const absoluteUrl = createValidAbsoluteUrl(str, null, {\n    addDefaultProtocol: true,\n    tryConvertEncoding: true\n  });\n  return absoluteUrl ? absoluteUrl.href : null;\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/layout.js\n\n\nfunction createLine(node, children) {\n  return {\n    name: \"div\",\n    attributes: {\n      class: [node.layout === \"lr-tb\" ? \"xfaLr\" : \"xfaRl\"]\n    },\n    children\n  };\n}\nfunction flushHTML(node) {\n  if (!node[$extra]) {\n    return null;\n  }\n  const attributes = node[$extra].attributes;\n  const html = {\n    name: \"div\",\n    attributes,\n    children: node[$extra].children\n  };\n  if (node[$extra].failingNode) {\n    const htmlFromFailing = node[$extra].failingNode[$flushHTML]();\n    if (htmlFromFailing) {\n      if (node.layout.endsWith(\"-tb\")) {\n        html.children.push(createLine(node, [htmlFromFailing]));\n      } else {\n        html.children.push(htmlFromFailing);\n      }\n    }\n  }\n  if (html.children.length === 0) {\n    return null;\n  }\n  return html;\n}\nfunction addHTML(node, html, bbox) {\n  const extra = node[$extra];\n  const availableSpace = extra.availableSpace;\n  const [x, y, w, h] = bbox;\n  switch (node.layout) {\n    case \"position\":\n      {\n        extra.width = Math.max(extra.width, x + w);\n        extra.height = Math.max(extra.height, y + h);\n        extra.children.push(html);\n        break;\n      }\n    case \"lr-tb\":\n    case \"rl-tb\":\n      if (!extra.line || extra.attempt === 1) {\n        extra.line = createLine(node, []);\n        extra.children.push(extra.line);\n        extra.numberInLine = 0;\n      }\n      extra.numberInLine += 1;\n      extra.line.children.push(html);\n      if (extra.attempt === 0) {\n        extra.currentWidth += w;\n        extra.height = Math.max(extra.height, extra.prevHeight + h);\n      } else {\n        extra.currentWidth = w;\n        extra.prevHeight = extra.height;\n        extra.height += h;\n        extra.attempt = 0;\n      }\n      extra.width = Math.max(extra.width, extra.currentWidth);\n      break;\n    case \"rl-row\":\n    case \"row\":\n      {\n        extra.children.push(html);\n        extra.width += w;\n        extra.height = Math.max(extra.height, h);\n        const height = measureToString(extra.height);\n        for (const child of extra.children) {\n          child.attributes.style.height = height;\n        }\n        break;\n      }\n    case \"table\":\n      {\n        extra.width = Math.min(availableSpace.width, Math.max(extra.width, w));\n        extra.height += h;\n        extra.children.push(html);\n        break;\n      }\n    case \"tb\":\n      {\n        extra.width = Math.min(availableSpace.width, Math.max(extra.width, w));\n        extra.height += h;\n        extra.children.push(html);\n        break;\n      }\n  }\n}\nfunction getAvailableSpace(node) {\n  const availableSpace = node[$extra].availableSpace;\n  const marginV = node.margin ? node.margin.topInset + node.margin.bottomInset : 0;\n  const marginH = node.margin ? node.margin.leftInset + node.margin.rightInset : 0;\n  switch (node.layout) {\n    case \"lr-tb\":\n    case \"rl-tb\":\n      if (node[$extra].attempt === 0) {\n        return {\n          width: availableSpace.width - marginH - node[$extra].currentWidth,\n          height: availableSpace.height - marginV - node[$extra].prevHeight\n        };\n      }\n      return {\n        width: availableSpace.width - marginH,\n        height: availableSpace.height - marginV - node[$extra].height\n      };\n    case \"rl-row\":\n    case \"row\":\n      const width = node[$extra].columnWidths.slice(node[$extra].currentColumn).reduce((a, x) => a + x);\n      return {\n        width,\n        height: availableSpace.height - marginH\n      };\n    case \"table\":\n    case \"tb\":\n      return {\n        width: availableSpace.width - marginH,\n        height: availableSpace.height - marginV - node[$extra].height\n      };\n    case \"position\":\n    default:\n      return availableSpace;\n  }\n}\nfunction getTransformedBBox(node) {\n  let w = node.w === \"\" ? NaN : node.w;\n  let h = node.h === \"\" ? NaN : node.h;\n  let [centerX, centerY] = [0, 0];\n  switch (node.anchorType || \"\") {\n    case \"bottomCenter\":\n      [centerX, centerY] = [w / 2, h];\n      break;\n    case \"bottomLeft\":\n      [centerX, centerY] = [0, h];\n      break;\n    case \"bottomRight\":\n      [centerX, centerY] = [w, h];\n      break;\n    case \"middleCenter\":\n      [centerX, centerY] = [w / 2, h / 2];\n      break;\n    case \"middleLeft\":\n      [centerX, centerY] = [0, h / 2];\n      break;\n    case \"middleRight\":\n      [centerX, centerY] = [w, h / 2];\n      break;\n    case \"topCenter\":\n      [centerX, centerY] = [w / 2, 0];\n      break;\n    case \"topRight\":\n      [centerX, centerY] = [w, 0];\n      break;\n  }\n  let x, y;\n  switch (node.rotate || 0) {\n    case 0:\n      [x, y] = [-centerX, -centerY];\n      break;\n    case 90:\n      [x, y] = [-centerY, centerX];\n      [w, h] = [h, -w];\n      break;\n    case 180:\n      [x, y] = [centerX, centerY];\n      [w, h] = [-w, -h];\n      break;\n    case 270:\n      [x, y] = [centerY, -centerX];\n      [w, h] = [-h, w];\n      break;\n  }\n  return [node.x + x + Math.min(0, w), node.y + y + Math.min(0, h), Math.abs(w), Math.abs(h)];\n}\nfunction checkDimensions(node, space) {\n  if (node[$getTemplateRoot]()[$extra].firstUnsplittable === null) {\n    return true;\n  }\n  if (node.w === 0 || node.h === 0) {\n    return true;\n  }\n  const ERROR = 2;\n  const parent = node[$getSubformParent]();\n  const attempt = parent[$extra]?.attempt || 0;\n  const [, y, w, h] = getTransformedBBox(node);\n  switch (parent.layout) {\n    case \"lr-tb\":\n    case \"rl-tb\":\n      if (attempt === 0) {\n        if (!node[$getTemplateRoot]()[$extra].noLayoutFailure) {\n          if (node.h !== \"\" && Math.round(h - space.height) > ERROR) {\n            return false;\n          }\n          if (node.w !== \"\") {\n            if (Math.round(w - space.width) <= ERROR) {\n              return true;\n            }\n            if (parent[$extra].numberInLine === 0) {\n              return space.height > ERROR;\n            }\n            return false;\n          }\n          return space.width > ERROR;\n        }\n        if (node.w !== \"\") {\n          return Math.round(w - space.width) <= ERROR;\n        }\n        return space.width > ERROR;\n      }\n      if (node[$getTemplateRoot]()[$extra].noLayoutFailure) {\n        return true;\n      }\n      if (node.h !== \"\" && Math.round(h - space.height) > ERROR) {\n        return false;\n      }\n      if (node.w === \"\" || Math.round(w - space.width) <= ERROR) {\n        return space.height > ERROR;\n      }\n      if (parent[$isThereMoreWidth]()) {\n        return false;\n      }\n      return space.height > ERROR;\n    case \"table\":\n    case \"tb\":\n      if (node[$getTemplateRoot]()[$extra].noLayoutFailure) {\n        return true;\n      }\n      if (node.h !== \"\" && !node[$isSplittable]()) {\n        return Math.round(h - space.height) <= ERROR;\n      }\n      if (node.w === \"\" || Math.round(w - space.width) <= ERROR) {\n        return space.height > ERROR;\n      }\n      if (parent[$isThereMoreWidth]()) {\n        return false;\n      }\n      return space.height > ERROR;\n    case \"position\":\n      if (node[$getTemplateRoot]()[$extra].noLayoutFailure) {\n        return true;\n      }\n      if (node.h === \"\" || Math.round(h + y - space.height) <= ERROR) {\n        return true;\n      }\n      const area = node[$getTemplateRoot]()[$extra].currentContentArea;\n      return h + y > area.h;\n    case \"rl-row\":\n    case \"row\":\n      if (node[$getTemplateRoot]()[$extra].noLayoutFailure) {\n        return true;\n      }\n      if (node.h !== \"\") {\n        return Math.round(h - space.height) <= ERROR;\n      }\n      return true;\n    default:\n      return true;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/template.js\n\n\n\n\n\n\n\n\n\n\nconst TEMPLATE_NS_ID = NamespaceIds.template.id;\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\nconst MAX_ATTEMPTS_FOR_LRTB_LAYOUT = 2;\nconst MAX_EMPTY_PAGES = 3;\nconst DEFAULT_TAB_INDEX = 5000;\nconst HEADING_PATTERN = /^H(\\d+)$/;\nconst MIMES = new Set([\"image/gif\", \"image/jpeg\", \"image/jpg\", \"image/pjpeg\", \"image/png\", \"image/apng\", \"image/x-png\", \"image/bmp\", \"image/x-ms-bmp\", \"image/tiff\", \"image/tif\", \"application/octet-stream\"]);\nconst IMAGES_HEADERS = [[[0x42, 0x4d], \"image/bmp\"], [[0xff, 0xd8, 0xff], \"image/jpeg\"], [[0x49, 0x49, 0x2a, 0x00], \"image/tiff\"], [[0x4d, 0x4d, 0x00, 0x2a], \"image/tiff\"], [[0x47, 0x49, 0x46, 0x38, 0x39, 0x61], \"image/gif\"], [[0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a], \"image/png\"]];\nfunction getBorderDims(node) {\n  if (!node || !node.border) {\n    return {\n      w: 0,\n      h: 0\n    };\n  }\n  const borderExtra = node.border[$getExtra]();\n  if (!borderExtra) {\n    return {\n      w: 0,\n      h: 0\n    };\n  }\n  return {\n    w: borderExtra.widths[0] + borderExtra.widths[2] + borderExtra.insets[0] + borderExtra.insets[2],\n    h: borderExtra.widths[1] + borderExtra.widths[3] + borderExtra.insets[1] + borderExtra.insets[3]\n  };\n}\nfunction hasMargin(node) {\n  return node.margin && (node.margin.topInset || node.margin.rightInset || node.margin.bottomInset || node.margin.leftInset);\n}\nfunction _setValue(templateNode, value) {\n  if (!templateNode.value) {\n    const nodeValue = new Value({});\n    templateNode[$appendChild](nodeValue);\n    templateNode.value = nodeValue;\n  }\n  templateNode.value[$setValue](value);\n}\nfunction* getContainedChildren(node) {\n  for (const child of node[$getChildren]()) {\n    if (child instanceof SubformSet) {\n      yield* child[$getContainedChildren]();\n      continue;\n    }\n    yield child;\n  }\n}\nfunction isRequired(node) {\n  return node.validate?.nullTest === \"error\";\n}\nfunction setTabIndex(node) {\n  while (node) {\n    if (!node.traversal) {\n      node[$tabIndex] = node[$getParent]()[$tabIndex];\n      return;\n    }\n    if (node[$tabIndex]) {\n      return;\n    }\n    let next = null;\n    for (const child of node.traversal[$getChildren]()) {\n      if (child.operation === \"next\") {\n        next = child;\n        break;\n      }\n    }\n    if (!next || !next.ref) {\n      node[$tabIndex] = node[$getParent]()[$tabIndex];\n      return;\n    }\n    const root = node[$getTemplateRoot]();\n    node[$tabIndex] = ++root[$tabIndex];\n    const ref = root[$searchNode](next.ref, node);\n    if (!ref) {\n      return;\n    }\n    node = ref[0];\n  }\n}\nfunction applyAssist(obj, attributes) {\n  const assist = obj.assist;\n  if (assist) {\n    const assistTitle = assist[$toHTML]();\n    if (assistTitle) {\n      attributes.title = assistTitle;\n    }\n    const role = assist.role;\n    const match = role.match(HEADING_PATTERN);\n    if (match) {\n      const ariaRole = \"heading\";\n      const ariaLevel = match[1];\n      attributes.role = ariaRole;\n      attributes[\"aria-level\"] = ariaLevel;\n    }\n  }\n  if (obj.layout === \"table\") {\n    attributes.role = \"table\";\n  } else if (obj.layout === \"row\") {\n    attributes.role = \"row\";\n  } else {\n    const parent = obj[$getParent]();\n    if (parent.layout === \"row\") {\n      attributes.role = parent.assist?.role === \"TH\" ? \"columnheader\" : \"cell\";\n    }\n  }\n}\nfunction ariaLabel(obj) {\n  if (!obj.assist) {\n    return null;\n  }\n  const assist = obj.assist;\n  if (assist.speak && assist.speak[$content] !== \"\") {\n    return assist.speak[$content];\n  }\n  if (assist.toolTip) {\n    return assist.toolTip[$content];\n  }\n  return null;\n}\nfunction valueToHtml(value) {\n  return HTMLResult.success({\n    name: \"div\",\n    attributes: {\n      class: [\"xfaRich\"],\n      style: Object.create(null)\n    },\n    children: [{\n      name: \"span\",\n      attributes: {\n        style: Object.create(null)\n      },\n      value\n    }]\n  });\n}\nfunction setFirstUnsplittable(node) {\n  const root = node[$getTemplateRoot]();\n  if (root[$extra].firstUnsplittable === null) {\n    root[$extra].firstUnsplittable = node;\n    root[$extra].noLayoutFailure = true;\n  }\n}\nfunction unsetFirstUnsplittable(node) {\n  const root = node[$getTemplateRoot]();\n  if (root[$extra].firstUnsplittable === node) {\n    root[$extra].noLayoutFailure = false;\n  }\n}\nfunction handleBreak(node) {\n  if (node[$extra]) {\n    return false;\n  }\n  node[$extra] = Object.create(null);\n  if (node.targetType === \"auto\") {\n    return false;\n  }\n  const root = node[$getTemplateRoot]();\n  let target = null;\n  if (node.target) {\n    target = root[$searchNode](node.target, node[$getParent]());\n    if (!target) {\n      return false;\n    }\n    target = target[0];\n  }\n  const {\n    currentPageArea,\n    currentContentArea\n  } = root[$extra];\n  if (node.targetType === \"pageArea\") {\n    if (!(target instanceof PageArea)) {\n      target = null;\n    }\n    if (node.startNew) {\n      node[$extra].target = target || currentPageArea;\n      return true;\n    } else if (target && target !== currentPageArea) {\n      node[$extra].target = target;\n      return true;\n    }\n    return false;\n  }\n  if (!(target instanceof ContentArea)) {\n    target = null;\n  }\n  const pageArea = target && target[$getParent]();\n  let index;\n  let nextPageArea = pageArea;\n  if (node.startNew) {\n    if (target) {\n      const contentAreas = pageArea.contentArea.children;\n      const indexForCurrent = contentAreas.indexOf(currentContentArea);\n      const indexForTarget = contentAreas.indexOf(target);\n      if (indexForCurrent !== -1 && indexForCurrent < indexForTarget) {\n        nextPageArea = null;\n      }\n      index = indexForTarget - 1;\n    } else {\n      index = currentPageArea.contentArea.children.indexOf(currentContentArea);\n    }\n  } else if (target && target !== currentContentArea) {\n    const contentAreas = pageArea.contentArea.children;\n    index = contentAreas.indexOf(target) - 1;\n    nextPageArea = pageArea === currentPageArea ? null : pageArea;\n  } else {\n    return false;\n  }\n  node[$extra].target = nextPageArea;\n  node[$extra].index = index;\n  return true;\n}\nfunction handleOverflow(node, extraNode, space) {\n  const root = node[$getTemplateRoot]();\n  const saved = root[$extra].noLayoutFailure;\n  const savedMethod = extraNode[$getSubformParent];\n  extraNode[$getSubformParent] = () => node;\n  root[$extra].noLayoutFailure = true;\n  const res = extraNode[$toHTML](space);\n  node[$addHTML](res.html, res.bbox);\n  root[$extra].noLayoutFailure = saved;\n  extraNode[$getSubformParent] = savedMethod;\n}\nclass AppearanceFilter extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"appearanceFilter\");\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass Arc extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"arc\", true);\n    this.circular = getInteger({\n      data: attributes.circular,\n      defaultValue: 0,\n      validate: x => x === 1\n    });\n    this.hand = getStringOption(attributes.hand, [\"even\", \"left\", \"right\"]);\n    this.id = attributes.id || \"\";\n    this.startAngle = getFloat({\n      data: attributes.startAngle,\n      defaultValue: 0,\n      validate: x => true\n    });\n    this.sweepAngle = getFloat({\n      data: attributes.sweepAngle,\n      defaultValue: 360,\n      validate: x => true\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.edge = null;\n    this.fill = null;\n  }\n  [$toHTML]() {\n    const edge = this.edge || new Edge({});\n    const edgeStyle = edge[$toStyle]();\n    const style = Object.create(null);\n    if (this.fill?.presence === \"visible\") {\n      Object.assign(style, this.fill[$toStyle]());\n    } else {\n      style.fill = \"transparent\";\n    }\n    style.strokeWidth = measureToString(edge.presence === \"visible\" ? edge.thickness : 0);\n    style.stroke = edgeStyle.color;\n    let arc;\n    const attributes = {\n      xmlns: SVG_NS,\n      style: {\n        width: \"100%\",\n        height: \"100%\",\n        overflow: \"visible\"\n      }\n    };\n    if (this.sweepAngle === 360) {\n      arc = {\n        name: \"ellipse\",\n        attributes: {\n          xmlns: SVG_NS,\n          cx: \"50%\",\n          cy: \"50%\",\n          rx: \"50%\",\n          ry: \"50%\",\n          style\n        }\n      };\n    } else {\n      const startAngle = this.startAngle * Math.PI / 180;\n      const sweepAngle = this.sweepAngle * Math.PI / 180;\n      const largeArc = this.sweepAngle > 180 ? 1 : 0;\n      const [x1, y1, x2, y2] = [50 * (1 + Math.cos(startAngle)), 50 * (1 - Math.sin(startAngle)), 50 * (1 + Math.cos(startAngle + sweepAngle)), 50 * (1 - Math.sin(startAngle + sweepAngle))];\n      arc = {\n        name: \"path\",\n        attributes: {\n          xmlns: SVG_NS,\n          d: `M ${x1} ${y1} A 50 50 0 ${largeArc} 0 ${x2} ${y2}`,\n          vectorEffect: \"non-scaling-stroke\",\n          style\n        }\n      };\n      Object.assign(attributes, {\n        viewBox: \"0 0 100 100\",\n        preserveAspectRatio: \"none\"\n      });\n    }\n    const svg = {\n      name: \"svg\",\n      children: [arc],\n      attributes\n    };\n    const parent = this[$getParent]()[$getParent]();\n    if (hasMargin(parent)) {\n      return HTMLResult.success({\n        name: \"div\",\n        attributes: {\n          style: {\n            display: \"inline\",\n            width: \"100%\",\n            height: \"100%\"\n          }\n        },\n        children: [svg]\n      });\n    }\n    svg.attributes.style.position = \"absolute\";\n    return HTMLResult.success(svg);\n  }\n}\nclass Area extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"area\", true);\n    this.colSpan = getInteger({\n      data: attributes.colSpan,\n      defaultValue: 1,\n      validate: n => n >= 1 || n === -1\n    });\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.relevant = getRelevant(attributes.relevant);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.x = getMeasurement(attributes.x, \"0pt\");\n    this.y = getMeasurement(attributes.y, \"0pt\");\n    this.desc = null;\n    this.extras = null;\n    this.area = new XFAObjectArray();\n    this.draw = new XFAObjectArray();\n    this.exObject = new XFAObjectArray();\n    this.exclGroup = new XFAObjectArray();\n    this.field = new XFAObjectArray();\n    this.subform = new XFAObjectArray();\n    this.subformSet = new XFAObjectArray();\n  }\n  *[$getContainedChildren]() {\n    yield* getContainedChildren(this);\n  }\n  [$isTransparent]() {\n    return true;\n  }\n  [$isBindable]() {\n    return true;\n  }\n  [$addHTML](html, bbox) {\n    const [x, y, w, h] = bbox;\n    this[$extra].width = Math.max(this[$extra].width, x + w);\n    this[$extra].height = Math.max(this[$extra].height, y + h);\n    this[$extra].children.push(html);\n  }\n  [$getAvailableSpace]() {\n    return this[$extra].availableSpace;\n  }\n  [$toHTML](availableSpace) {\n    const style = toStyle(this, \"position\");\n    const attributes = {\n      style,\n      id: this[$uid],\n      class: [\"xfaArea\"]\n    };\n    if (isPrintOnly(this)) {\n      attributes.class.push(\"xfaPrintOnly\");\n    }\n    if (this.name) {\n      attributes.xfaName = this.name;\n    }\n    const children = [];\n    this[$extra] = {\n      children,\n      width: 0,\n      height: 0,\n      availableSpace\n    };\n    const result = this[$childrenToHTML]({\n      filter: new Set([\"area\", \"draw\", \"field\", \"exclGroup\", \"subform\", \"subformSet\"]),\n      include: true\n    });\n    if (!result.success) {\n      if (result.isBreak()) {\n        return result;\n      }\n      delete this[$extra];\n      return HTMLResult.FAILURE;\n    }\n    style.width = measureToString(this[$extra].width);\n    style.height = measureToString(this[$extra].height);\n    const html = {\n      name: \"div\",\n      attributes,\n      children\n    };\n    const bbox = [this.x, this.y, this[$extra].width, this[$extra].height];\n    delete this[$extra];\n    return HTMLResult.success(html, bbox);\n  }\n}\nclass Assist extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"assist\", true);\n    this.id = attributes.id || \"\";\n    this.role = attributes.role || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.speak = null;\n    this.toolTip = null;\n  }\n  [$toHTML]() {\n    return this.toolTip?.[$content] || null;\n  }\n}\nclass Barcode extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"barcode\", true);\n    this.charEncoding = getKeyword({\n      data: attributes.charEncoding ? attributes.charEncoding.toLowerCase() : \"\",\n      defaultValue: \"\",\n      validate: k => [\"utf-8\", \"big-five\", \"fontspecific\", \"gbk\", \"gb-18030\", \"gb-2312\", \"ksc-5601\", \"none\", \"shift-jis\", \"ucs-2\", \"utf-16\"].includes(k) || k.match(/iso-8859-\\d{2}/)\n    });\n    this.checksum = getStringOption(attributes.checksum, [\"none\", \"1mod10\", \"1mod10_1mod11\", \"2mod10\", \"auto\"]);\n    this.dataColumnCount = getInteger({\n      data: attributes.dataColumnCount,\n      defaultValue: -1,\n      validate: x => x >= 0\n    });\n    this.dataLength = getInteger({\n      data: attributes.dataLength,\n      defaultValue: -1,\n      validate: x => x >= 0\n    });\n    this.dataPrep = getStringOption(attributes.dataPrep, [\"none\", \"flateCompress\"]);\n    this.dataRowCount = getInteger({\n      data: attributes.dataRowCount,\n      defaultValue: -1,\n      validate: x => x >= 0\n    });\n    this.endChar = attributes.endChar || \"\";\n    this.errorCorrectionLevel = getInteger({\n      data: attributes.errorCorrectionLevel,\n      defaultValue: -1,\n      validate: x => x >= 0 && x <= 8\n    });\n    this.id = attributes.id || \"\";\n    this.moduleHeight = getMeasurement(attributes.moduleHeight, \"5mm\");\n    this.moduleWidth = getMeasurement(attributes.moduleWidth, \"0.25mm\");\n    this.printCheckDigit = getInteger({\n      data: attributes.printCheckDigit,\n      defaultValue: 0,\n      validate: x => x === 1\n    });\n    this.rowColumnRatio = getRatio(attributes.rowColumnRatio);\n    this.startChar = attributes.startChar || \"\";\n    this.textLocation = getStringOption(attributes.textLocation, [\"below\", \"above\", \"aboveEmbedded\", \"belowEmbedded\", \"none\"]);\n    this.truncate = getInteger({\n      data: attributes.truncate,\n      defaultValue: 0,\n      validate: x => x === 1\n    });\n    this.type = getStringOption(attributes.type ? attributes.type.toLowerCase() : \"\", [\"aztec\", \"codabar\", \"code2of5industrial\", \"code2of5interleaved\", \"code2of5matrix\", \"code2of5standard\", \"code3of9\", \"code3of9extended\", \"code11\", \"code49\", \"code93\", \"code128\", \"code128a\", \"code128b\", \"code128c\", \"code128sscc\", \"datamatrix\", \"ean8\", \"ean8add2\", \"ean8add5\", \"ean13\", \"ean13add2\", \"ean13add5\", \"ean13pwcd\", \"fim\", \"logmars\", \"maxicode\", \"msi\", \"pdf417\", \"pdf417macro\", \"plessey\", \"postauscust2\", \"postauscust3\", \"postausreplypaid\", \"postausstandard\", \"postukrm4scc\", \"postusdpbc\", \"postusimb\", \"postusstandard\", \"postus5zip\", \"qrcode\", \"rfid\", \"rss14\", \"rss14expanded\", \"rss14limited\", \"rss14stacked\", \"rss14stackedomni\", \"rss14truncated\", \"telepen\", \"ucc128\", \"ucc128random\", \"ucc128sscc\", \"upca\", \"upcaadd2\", \"upcaadd5\", \"upcapwcd\", \"upce\", \"upceadd2\", \"upceadd5\", \"upcean2\", \"upcean5\", \"upsmaxicode\"]);\n    this.upsMode = getStringOption(attributes.upsMode, [\"usCarrier\", \"internationalCarrier\", \"secureSymbol\", \"standardSymbol\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.wideNarrowRatio = getRatio(attributes.wideNarrowRatio);\n    this.encrypt = null;\n    this.extras = null;\n  }\n}\nclass Bind extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"bind\", true);\n    this.match = getStringOption(attributes.match, [\"once\", \"dataRef\", \"global\", \"none\"]);\n    this.ref = attributes.ref || \"\";\n    this.picture = null;\n  }\n}\nclass BindItems extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"bindItems\");\n    this.connection = attributes.connection || \"\";\n    this.labelRef = attributes.labelRef || \"\";\n    this.ref = attributes.ref || \"\";\n    this.valueRef = attributes.valueRef || \"\";\n  }\n}\nclass Bookend extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"bookend\");\n    this.id = attributes.id || \"\";\n    this.leader = attributes.leader || \"\";\n    this.trailer = attributes.trailer || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass BooleanElement extends Option01 {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"boolean\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n  [$toHTML](availableSpace) {\n    return valueToHtml(this[$content] === 1 ? \"1\" : \"0\");\n  }\n}\nclass Border extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"border\", true);\n    this.break = getStringOption(attributes.break, [\"close\", \"open\"]);\n    this.hand = getStringOption(attributes.hand, [\"even\", \"left\", \"right\"]);\n    this.id = attributes.id || \"\";\n    this.presence = getStringOption(attributes.presence, [\"visible\", \"hidden\", \"inactive\", \"invisible\"]);\n    this.relevant = getRelevant(attributes.relevant);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.corner = new XFAObjectArray(4);\n    this.edge = new XFAObjectArray(4);\n    this.extras = null;\n    this.fill = null;\n    this.margin = null;\n  }\n  [$getExtra]() {\n    if (!this[$extra]) {\n      const edges = this.edge.children.slice();\n      if (edges.length < 4) {\n        const defaultEdge = edges.at(-1) || new Edge({});\n        for (let i = edges.length; i < 4; i++) {\n          edges.push(defaultEdge);\n        }\n      }\n      const widths = edges.map(edge => edge.thickness);\n      const insets = [0, 0, 0, 0];\n      if (this.margin) {\n        insets[0] = this.margin.topInset;\n        insets[1] = this.margin.rightInset;\n        insets[2] = this.margin.bottomInset;\n        insets[3] = this.margin.leftInset;\n      }\n      this[$extra] = {\n        widths,\n        insets,\n        edges\n      };\n    }\n    return this[$extra];\n  }\n  [$toStyle]() {\n    const {\n      edges\n    } = this[$getExtra]();\n    const edgeStyles = edges.map(node => {\n      const style = node[$toStyle]();\n      style.color ||= \"#000000\";\n      return style;\n    });\n    const style = Object.create(null);\n    if (this.margin) {\n      Object.assign(style, this.margin[$toStyle]());\n    }\n    if (this.fill?.presence === \"visible\") {\n      Object.assign(style, this.fill[$toStyle]());\n    }\n    if (this.corner.children.some(node => node.radius !== 0)) {\n      const cornerStyles = this.corner.children.map(node => node[$toStyle]());\n      if (cornerStyles.length === 2 || cornerStyles.length === 3) {\n        const last = cornerStyles.at(-1);\n        for (let i = cornerStyles.length; i < 4; i++) {\n          cornerStyles.push(last);\n        }\n      }\n      style.borderRadius = cornerStyles.map(s => s.radius).join(\" \");\n    }\n    switch (this.presence) {\n      case \"invisible\":\n      case \"hidden\":\n        style.borderStyle = \"\";\n        break;\n      case \"inactive\":\n        style.borderStyle = \"none\";\n        break;\n      default:\n        style.borderStyle = edgeStyles.map(s => s.style).join(\" \");\n        break;\n    }\n    style.borderWidth = edgeStyles.map(s => s.width).join(\" \");\n    style.borderColor = edgeStyles.map(s => s.color).join(\" \");\n    return style;\n  }\n}\nclass Break extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"break\", true);\n    this.after = getStringOption(attributes.after, [\"auto\", \"contentArea\", \"pageArea\", \"pageEven\", \"pageOdd\"]);\n    this.afterTarget = attributes.afterTarget || \"\";\n    this.before = getStringOption(attributes.before, [\"auto\", \"contentArea\", \"pageArea\", \"pageEven\", \"pageOdd\"]);\n    this.beforeTarget = attributes.beforeTarget || \"\";\n    this.bookendLeader = attributes.bookendLeader || \"\";\n    this.bookendTrailer = attributes.bookendTrailer || \"\";\n    this.id = attributes.id || \"\";\n    this.overflowLeader = attributes.overflowLeader || \"\";\n    this.overflowTarget = attributes.overflowTarget || \"\";\n    this.overflowTrailer = attributes.overflowTrailer || \"\";\n    this.startNew = getInteger({\n      data: attributes.startNew,\n      defaultValue: 0,\n      validate: x => x === 1\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n  }\n}\nclass BreakAfter extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"breakAfter\", true);\n    this.id = attributes.id || \"\";\n    this.leader = attributes.leader || \"\";\n    this.startNew = getInteger({\n      data: attributes.startNew,\n      defaultValue: 0,\n      validate: x => x === 1\n    });\n    this.target = attributes.target || \"\";\n    this.targetType = getStringOption(attributes.targetType, [\"auto\", \"contentArea\", \"pageArea\"]);\n    this.trailer = attributes.trailer || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.script = null;\n  }\n}\nclass BreakBefore extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"breakBefore\", true);\n    this.id = attributes.id || \"\";\n    this.leader = attributes.leader || \"\";\n    this.startNew = getInteger({\n      data: attributes.startNew,\n      defaultValue: 0,\n      validate: x => x === 1\n    });\n    this.target = attributes.target || \"\";\n    this.targetType = getStringOption(attributes.targetType, [\"auto\", \"contentArea\", \"pageArea\"]);\n    this.trailer = attributes.trailer || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.script = null;\n  }\n  [$toHTML](availableSpace) {\n    this[$extra] = {};\n    return HTMLResult.FAILURE;\n  }\n}\nclass Button extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"button\", true);\n    this.highlight = getStringOption(attributes.highlight, [\"inverted\", \"none\", \"outline\", \"push\"]);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n  }\n  [$toHTML](availableSpace) {\n    const parent = this[$getParent]();\n    const grandpa = parent[$getParent]();\n    const htmlButton = {\n      name: \"button\",\n      attributes: {\n        id: this[$uid],\n        class: [\"xfaButton\"],\n        style: {}\n      },\n      children: []\n    };\n    for (const event of grandpa.event.children) {\n      if (event.activity !== \"click\" || !event.script) {\n        continue;\n      }\n      const jsURL = recoverJsURL(event.script[$content]);\n      if (!jsURL) {\n        continue;\n      }\n      const href = fixURL(jsURL.url);\n      if (!href) {\n        continue;\n      }\n      htmlButton.children.push({\n        name: \"a\",\n        attributes: {\n          id: \"link\" + this[$uid],\n          href,\n          newWindow: jsURL.newWindow,\n          class: [\"xfaLink\"],\n          style: {}\n        },\n        children: []\n      });\n    }\n    return HTMLResult.success(htmlButton);\n  }\n}\nclass Calculate extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"calculate\", true);\n    this.id = attributes.id || \"\";\n    this.override = getStringOption(attributes.override, [\"disabled\", \"error\", \"ignore\", \"warning\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n    this.message = null;\n    this.script = null;\n  }\n}\nclass Caption extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"caption\", true);\n    this.id = attributes.id || \"\";\n    this.placement = getStringOption(attributes.placement, [\"left\", \"bottom\", \"inline\", \"right\", \"top\"]);\n    this.presence = getStringOption(attributes.presence, [\"visible\", \"hidden\", \"inactive\", \"invisible\"]);\n    this.reserve = Math.ceil(getMeasurement(attributes.reserve));\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n    this.font = null;\n    this.margin = null;\n    this.para = null;\n    this.value = null;\n  }\n  [$setValue](value) {\n    _setValue(this, value);\n  }\n  [$getExtra](availableSpace) {\n    if (!this[$extra]) {\n      let {\n        width,\n        height\n      } = availableSpace;\n      switch (this.placement) {\n        case \"left\":\n        case \"right\":\n        case \"inline\":\n          width = this.reserve <= 0 ? width : this.reserve;\n          break;\n        case \"top\":\n        case \"bottom\":\n          height = this.reserve <= 0 ? height : this.reserve;\n          break;\n      }\n      this[$extra] = layoutNode(this, {\n        width,\n        height\n      });\n    }\n    return this[$extra];\n  }\n  [$toHTML](availableSpace) {\n    if (!this.value) {\n      return HTMLResult.EMPTY;\n    }\n    this[$pushPara]();\n    const value = this.value[$toHTML](availableSpace).html;\n    if (!value) {\n      this[$popPara]();\n      return HTMLResult.EMPTY;\n    }\n    const savedReserve = this.reserve;\n    if (this.reserve <= 0) {\n      const {\n        w,\n        h\n      } = this[$getExtra](availableSpace);\n      switch (this.placement) {\n        case \"left\":\n        case \"right\":\n        case \"inline\":\n          this.reserve = w;\n          break;\n        case \"top\":\n        case \"bottom\":\n          this.reserve = h;\n          break;\n      }\n    }\n    const children = [];\n    if (typeof value === \"string\") {\n      children.push({\n        name: \"#text\",\n        value\n      });\n    } else {\n      children.push(value);\n    }\n    const style = toStyle(this, \"font\", \"margin\", \"visibility\");\n    switch (this.placement) {\n      case \"left\":\n      case \"right\":\n        if (this.reserve > 0) {\n          style.width = measureToString(this.reserve);\n        }\n        break;\n      case \"top\":\n      case \"bottom\":\n        if (this.reserve > 0) {\n          style.height = measureToString(this.reserve);\n        }\n        break;\n    }\n    setPara(this, null, value);\n    this[$popPara]();\n    this.reserve = savedReserve;\n    return HTMLResult.success({\n      name: \"div\",\n      attributes: {\n        style,\n        class: [\"xfaCaption\"]\n      },\n      children\n    });\n  }\n}\nclass Certificate extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"certificate\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass Certificates extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"certificates\", true);\n    this.credentialServerPolicy = getStringOption(attributes.credentialServerPolicy, [\"optional\", \"required\"]);\n    this.id = attributes.id || \"\";\n    this.url = attributes.url || \"\";\n    this.urlPolicy = attributes.urlPolicy || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.encryption = null;\n    this.issuers = null;\n    this.keyUsage = null;\n    this.oids = null;\n    this.signing = null;\n    this.subjectDNs = null;\n  }\n}\nclass CheckButton extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"checkButton\", true);\n    this.id = attributes.id || \"\";\n    this.mark = getStringOption(attributes.mark, [\"default\", \"check\", \"circle\", \"cross\", \"diamond\", \"square\", \"star\"]);\n    this.shape = getStringOption(attributes.shape, [\"square\", \"round\"]);\n    this.size = getMeasurement(attributes.size, \"10pt\");\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.border = null;\n    this.extras = null;\n    this.margin = null;\n  }\n  [$toHTML](availableSpace) {\n    const style = toStyle(\"margin\");\n    const size = measureToString(this.size);\n    style.width = style.height = size;\n    let type;\n    let className;\n    let groupId;\n    const field = this[$getParent]()[$getParent]();\n    const items = field.items.children.length && field.items.children[0][$toHTML]().html || [];\n    const exportedValue = {\n      on: (items[0] !== undefined ? items[0] : \"on\").toString(),\n      off: (items[1] !== undefined ? items[1] : \"off\").toString()\n    };\n    const value = field.value?.[$text]() || \"off\";\n    const checked = value === exportedValue.on || undefined;\n    const container = field[$getSubformParent]();\n    const fieldId = field[$uid];\n    let dataId;\n    if (container instanceof ExclGroup) {\n      groupId = container[$uid];\n      type = \"radio\";\n      className = \"xfaRadio\";\n      dataId = container[$data]?.[$uid] || container[$uid];\n    } else {\n      type = \"checkbox\";\n      className = \"xfaCheckbox\";\n      dataId = field[$data]?.[$uid] || field[$uid];\n    }\n    const input = {\n      name: \"input\",\n      attributes: {\n        class: [className],\n        style,\n        fieldId,\n        dataId,\n        type,\n        checked,\n        xfaOn: exportedValue.on,\n        xfaOff: exportedValue.off,\n        \"aria-label\": ariaLabel(field),\n        \"aria-required\": false\n      }\n    };\n    if (groupId) {\n      input.attributes.name = groupId;\n    }\n    if (isRequired(field)) {\n      input.attributes[\"aria-required\"] = true;\n      input.attributes.required = true;\n    }\n    return HTMLResult.success({\n      name: \"label\",\n      attributes: {\n        class: [\"xfaLabel\"]\n      },\n      children: [input]\n    });\n  }\n}\nclass ChoiceList extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"choiceList\", true);\n    this.commitOn = getStringOption(attributes.commitOn, [\"select\", \"exit\"]);\n    this.id = attributes.id || \"\";\n    this.open = getStringOption(attributes.open, [\"userControl\", \"always\", \"multiSelect\", \"onEntry\"]);\n    this.textEntry = getInteger({\n      data: attributes.textEntry,\n      defaultValue: 0,\n      validate: x => x === 1\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.border = null;\n    this.extras = null;\n    this.margin = null;\n  }\n  [$toHTML](availableSpace) {\n    const style = toStyle(this, \"border\", \"margin\");\n    const ui = this[$getParent]();\n    const field = ui[$getParent]();\n    const fontSize = field.font?.size || 10;\n    const optionStyle = {\n      fontSize: `calc(${fontSize}px * var(--scale-factor))`\n    };\n    const children = [];\n    if (field.items.children.length > 0) {\n      const items = field.items;\n      let displayedIndex = 0;\n      let saveIndex = 0;\n      if (items.children.length === 2) {\n        displayedIndex = items.children[0].save;\n        saveIndex = 1 - displayedIndex;\n      }\n      const displayed = items.children[displayedIndex][$toHTML]().html;\n      const values = items.children[saveIndex][$toHTML]().html;\n      let selected = false;\n      const value = field.value?.[$text]() || \"\";\n      for (let i = 0, ii = displayed.length; i < ii; i++) {\n        const option = {\n          name: \"option\",\n          attributes: {\n            value: values[i] || displayed[i],\n            style: optionStyle\n          },\n          value: displayed[i]\n        };\n        if (values[i] === value) {\n          option.attributes.selected = selected = true;\n        }\n        children.push(option);\n      }\n      if (!selected) {\n        children.splice(0, 0, {\n          name: \"option\",\n          attributes: {\n            hidden: true,\n            selected: true\n          },\n          value: \" \"\n        });\n      }\n    }\n    const selectAttributes = {\n      class: [\"xfaSelect\"],\n      fieldId: field[$uid],\n      dataId: field[$data]?.[$uid] || field[$uid],\n      style,\n      \"aria-label\": ariaLabel(field),\n      \"aria-required\": false\n    };\n    if (isRequired(field)) {\n      selectAttributes[\"aria-required\"] = true;\n      selectAttributes.required = true;\n    }\n    if (this.open === \"multiSelect\") {\n      selectAttributes.multiple = true;\n    }\n    return HTMLResult.success({\n      name: \"label\",\n      attributes: {\n        class: [\"xfaLabel\"]\n      },\n      children: [{\n        name: \"select\",\n        children,\n        attributes: selectAttributes\n      }]\n    });\n  }\n}\nclass Color extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"color\", true);\n    this.cSpace = getStringOption(attributes.cSpace, [\"SRGB\"]);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.value = attributes.value ? getColor(attributes.value) : \"\";\n    this.extras = null;\n  }\n  [$hasSettableValue]() {\n    return false;\n  }\n  [$toStyle]() {\n    return this.value ? Util.makeHexColor(this.value.r, this.value.g, this.value.b) : null;\n  }\n}\nclass Comb extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"comb\");\n    this.id = attributes.id || \"\";\n    this.numberOfCells = getInteger({\n      data: attributes.numberOfCells,\n      defaultValue: 0,\n      validate: x => x >= 0\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass Connect extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"connect\", true);\n    this.connection = attributes.connection || \"\";\n    this.id = attributes.id || \"\";\n    this.ref = attributes.ref || \"\";\n    this.usage = getStringOption(attributes.usage, [\"exportAndImport\", \"exportOnly\", \"importOnly\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.picture = null;\n  }\n}\nclass ContentArea extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"contentArea\", true);\n    this.h = getMeasurement(attributes.h);\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.relevant = getRelevant(attributes.relevant);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.w = getMeasurement(attributes.w);\n    this.x = getMeasurement(attributes.x, \"0pt\");\n    this.y = getMeasurement(attributes.y, \"0pt\");\n    this.desc = null;\n    this.extras = null;\n  }\n  [$toHTML](availableSpace) {\n    const left = measureToString(this.x);\n    const top = measureToString(this.y);\n    const style = {\n      left,\n      top,\n      width: measureToString(this.w),\n      height: measureToString(this.h)\n    };\n    const classNames = [\"xfaContentarea\"];\n    if (isPrintOnly(this)) {\n      classNames.push(\"xfaPrintOnly\");\n    }\n    return HTMLResult.success({\n      name: \"div\",\n      children: [],\n      attributes: {\n        style,\n        class: classNames,\n        id: this[$uid]\n      }\n    });\n  }\n}\nclass Corner extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"corner\", true);\n    this.id = attributes.id || \"\";\n    this.inverted = getInteger({\n      data: attributes.inverted,\n      defaultValue: 0,\n      validate: x => x === 1\n    });\n    this.join = getStringOption(attributes.join, [\"square\", \"round\"]);\n    this.presence = getStringOption(attributes.presence, [\"visible\", \"hidden\", \"inactive\", \"invisible\"]);\n    this.radius = getMeasurement(attributes.radius);\n    this.stroke = getStringOption(attributes.stroke, [\"solid\", \"dashDot\", \"dashDotDot\", \"dashed\", \"dotted\", \"embossed\", \"etched\", \"lowered\", \"raised\"]);\n    this.thickness = getMeasurement(attributes.thickness, \"0.5pt\");\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.color = null;\n    this.extras = null;\n  }\n  [$toStyle]() {\n    const style = toStyle(this, \"visibility\");\n    style.radius = measureToString(this.join === \"square\" ? 0 : this.radius);\n    return style;\n  }\n}\nclass DateElement extends ContentObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"date\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n  [$finalize]() {\n    const date = this[$content].trim();\n    this[$content] = date ? new Date(date) : null;\n  }\n  [$toHTML](availableSpace) {\n    return valueToHtml(this[$content] ? this[$content].toString() : \"\");\n  }\n}\nclass DateTime extends ContentObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"dateTime\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n  [$finalize]() {\n    const date = this[$content].trim();\n    this[$content] = date ? new Date(date) : null;\n  }\n  [$toHTML](availableSpace) {\n    return valueToHtml(this[$content] ? this[$content].toString() : \"\");\n  }\n}\nclass DateTimeEdit extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"dateTimeEdit\", true);\n    this.hScrollPolicy = getStringOption(attributes.hScrollPolicy, [\"auto\", \"off\", \"on\"]);\n    this.id = attributes.id || \"\";\n    this.picker = getStringOption(attributes.picker, [\"host\", \"none\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.border = null;\n    this.comb = null;\n    this.extras = null;\n    this.margin = null;\n  }\n  [$toHTML](availableSpace) {\n    const style = toStyle(this, \"border\", \"font\", \"margin\");\n    const field = this[$getParent]()[$getParent]();\n    const html = {\n      name: \"input\",\n      attributes: {\n        type: \"text\",\n        fieldId: field[$uid],\n        dataId: field[$data]?.[$uid] || field[$uid],\n        class: [\"xfaTextfield\"],\n        style,\n        \"aria-label\": ariaLabel(field),\n        \"aria-required\": false\n      }\n    };\n    if (isRequired(field)) {\n      html.attributes[\"aria-required\"] = true;\n      html.attributes.required = true;\n    }\n    return HTMLResult.success({\n      name: \"label\",\n      attributes: {\n        class: [\"xfaLabel\"]\n      },\n      children: [html]\n    });\n  }\n}\nclass Decimal extends ContentObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"decimal\");\n    this.fracDigits = getInteger({\n      data: attributes.fracDigits,\n      defaultValue: 2,\n      validate: x => true\n    });\n    this.id = attributes.id || \"\";\n    this.leadDigits = getInteger({\n      data: attributes.leadDigits,\n      defaultValue: -1,\n      validate: x => true\n    });\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n  [$finalize]() {\n    const number = parseFloat(this[$content].trim());\n    this[$content] = isNaN(number) ? null : number;\n  }\n  [$toHTML](availableSpace) {\n    return valueToHtml(this[$content] !== null ? this[$content].toString() : \"\");\n  }\n}\nclass DefaultUi extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"defaultUi\", true);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n  }\n}\nclass Desc extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"desc\", true);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.boolean = new XFAObjectArray();\n    this.date = new XFAObjectArray();\n    this.dateTime = new XFAObjectArray();\n    this.decimal = new XFAObjectArray();\n    this.exData = new XFAObjectArray();\n    this.float = new XFAObjectArray();\n    this.image = new XFAObjectArray();\n    this.integer = new XFAObjectArray();\n    this.text = new XFAObjectArray();\n    this.time = new XFAObjectArray();\n  }\n}\nclass DigestMethod extends OptionObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"digestMethod\", [\"\", \"SHA1\", \"SHA256\", \"SHA512\", \"RIPEMD160\"]);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass DigestMethods extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"digestMethods\", true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.digestMethod = new XFAObjectArray();\n  }\n}\nclass Draw extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"draw\", true);\n    this.anchorType = getStringOption(attributes.anchorType, [\"topLeft\", \"bottomCenter\", \"bottomLeft\", \"bottomRight\", \"middleCenter\", \"middleLeft\", \"middleRight\", \"topCenter\", \"topRight\"]);\n    this.colSpan = getInteger({\n      data: attributes.colSpan,\n      defaultValue: 1,\n      validate: n => n >= 1 || n === -1\n    });\n    this.h = attributes.h ? getMeasurement(attributes.h) : \"\";\n    this.hAlign = getStringOption(attributes.hAlign, [\"left\", \"center\", \"justify\", \"justifyAll\", \"radix\", \"right\"]);\n    this.id = attributes.id || \"\";\n    this.locale = attributes.locale || \"\";\n    this.maxH = getMeasurement(attributes.maxH, \"0pt\");\n    this.maxW = getMeasurement(attributes.maxW, \"0pt\");\n    this.minH = getMeasurement(attributes.minH, \"0pt\");\n    this.minW = getMeasurement(attributes.minW, \"0pt\");\n    this.name = attributes.name || \"\";\n    this.presence = getStringOption(attributes.presence, [\"visible\", \"hidden\", \"inactive\", \"invisible\"]);\n    this.relevant = getRelevant(attributes.relevant);\n    this.rotate = getInteger({\n      data: attributes.rotate,\n      defaultValue: 0,\n      validate: x => x % 90 === 0\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.w = attributes.w ? getMeasurement(attributes.w) : \"\";\n    this.x = getMeasurement(attributes.x, \"0pt\");\n    this.y = getMeasurement(attributes.y, \"0pt\");\n    this.assist = null;\n    this.border = null;\n    this.caption = null;\n    this.desc = null;\n    this.extras = null;\n    this.font = null;\n    this.keep = null;\n    this.margin = null;\n    this.para = null;\n    this.traversal = null;\n    this.ui = null;\n    this.value = null;\n    this.setProperty = new XFAObjectArray();\n  }\n  [$setValue](value) {\n    _setValue(this, value);\n  }\n  [$toHTML](availableSpace) {\n    setTabIndex(this);\n    if (this.presence === \"hidden\" || this.presence === \"inactive\") {\n      return HTMLResult.EMPTY;\n    }\n    fixDimensions(this);\n    this[$pushPara]();\n    const savedW = this.w;\n    const savedH = this.h;\n    const {\n      w,\n      h,\n      isBroken\n    } = layoutNode(this, availableSpace);\n    if (w && this.w === \"\") {\n      if (isBroken && this[$getSubformParent]()[$isThereMoreWidth]()) {\n        this[$popPara]();\n        return HTMLResult.FAILURE;\n      }\n      this.w = w;\n    }\n    if (h && this.h === \"\") {\n      this.h = h;\n    }\n    setFirstUnsplittable(this);\n    if (!checkDimensions(this, availableSpace)) {\n      this.w = savedW;\n      this.h = savedH;\n      this[$popPara]();\n      return HTMLResult.FAILURE;\n    }\n    unsetFirstUnsplittable(this);\n    const style = toStyle(this, \"font\", \"hAlign\", \"dimensions\", \"position\", \"presence\", \"rotate\", \"anchorType\", \"border\", \"margin\");\n    setMinMaxDimensions(this, style);\n    if (style.margin) {\n      style.padding = style.margin;\n      delete style.margin;\n    }\n    const classNames = [\"xfaDraw\"];\n    if (this.font) {\n      classNames.push(\"xfaFont\");\n    }\n    if (isPrintOnly(this)) {\n      classNames.push(\"xfaPrintOnly\");\n    }\n    const attributes = {\n      style,\n      id: this[$uid],\n      class: classNames\n    };\n    if (this.name) {\n      attributes.xfaName = this.name;\n    }\n    const html = {\n      name: \"div\",\n      attributes,\n      children: []\n    };\n    applyAssist(this, attributes);\n    const bbox = computeBbox(this, html, availableSpace);\n    const value = this.value ? this.value[$toHTML](availableSpace).html : null;\n    if (value === null) {\n      this.w = savedW;\n      this.h = savedH;\n      this[$popPara]();\n      return HTMLResult.success(createWrapper(this, html), bbox);\n    }\n    html.children.push(value);\n    setPara(this, style, value);\n    this.w = savedW;\n    this.h = savedH;\n    this[$popPara]();\n    return HTMLResult.success(createWrapper(this, html), bbox);\n  }\n}\nclass Edge extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"edge\", true);\n    this.cap = getStringOption(attributes.cap, [\"square\", \"butt\", \"round\"]);\n    this.id = attributes.id || \"\";\n    this.presence = getStringOption(attributes.presence, [\"visible\", \"hidden\", \"inactive\", \"invisible\"]);\n    this.stroke = getStringOption(attributes.stroke, [\"solid\", \"dashDot\", \"dashDotDot\", \"dashed\", \"dotted\", \"embossed\", \"etched\", \"lowered\", \"raised\"]);\n    this.thickness = getMeasurement(attributes.thickness, \"0.5pt\");\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.color = null;\n    this.extras = null;\n  }\n  [$toStyle]() {\n    const style = toStyle(this, \"visibility\");\n    Object.assign(style, {\n      linecap: this.cap,\n      width: measureToString(this.thickness),\n      color: this.color ? this.color[$toStyle]() : \"#000000\",\n      style: \"\"\n    });\n    if (this.presence !== \"visible\") {\n      style.style = \"none\";\n    } else {\n      switch (this.stroke) {\n        case \"solid\":\n          style.style = \"solid\";\n          break;\n        case \"dashDot\":\n          style.style = \"dashed\";\n          break;\n        case \"dashDotDot\":\n          style.style = \"dashed\";\n          break;\n        case \"dashed\":\n          style.style = \"dashed\";\n          break;\n        case \"dotted\":\n          style.style = \"dotted\";\n          break;\n        case \"embossed\":\n          style.style = \"ridge\";\n          break;\n        case \"etched\":\n          style.style = \"groove\";\n          break;\n        case \"lowered\":\n          style.style = \"inset\";\n          break;\n        case \"raised\":\n          style.style = \"outset\";\n          break;\n      }\n    }\n    return style;\n  }\n}\nclass Encoding extends OptionObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"encoding\", [\"adbe.x509.rsa_sha1\", \"adbe.pkcs7.detached\", \"adbe.pkcs7.sha1\"]);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass Encodings extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"encodings\", true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.encoding = new XFAObjectArray();\n  }\n}\nclass Encrypt extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"encrypt\", true);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.certificate = null;\n  }\n}\nclass EncryptData extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"encryptData\", true);\n    this.id = attributes.id || \"\";\n    this.operation = getStringOption(attributes.operation, [\"encrypt\", \"decrypt\"]);\n    this.target = attributes.target || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.filter = null;\n    this.manifest = null;\n  }\n}\nclass Encryption extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"encryption\", true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.certificate = new XFAObjectArray();\n  }\n}\nclass EncryptionMethod extends OptionObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"encryptionMethod\", [\"\", \"AES256-CBC\", \"TRIPLEDES-CBC\", \"AES128-CBC\", \"AES192-CBC\"]);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass EncryptionMethods extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"encryptionMethods\", true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.encryptionMethod = new XFAObjectArray();\n  }\n}\nclass Event extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"event\", true);\n    this.activity = getStringOption(attributes.activity, [\"click\", \"change\", \"docClose\", \"docReady\", \"enter\", \"exit\", \"full\", \"indexChange\", \"initialize\", \"mouseDown\", \"mouseEnter\", \"mouseExit\", \"mouseUp\", \"postExecute\", \"postOpen\", \"postPrint\", \"postSave\", \"postSign\", \"postSubmit\", \"preExecute\", \"preOpen\", \"prePrint\", \"preSave\", \"preSign\", \"preSubmit\", \"ready\", \"validationState\"]);\n    this.id = attributes.id || \"\";\n    this.listen = getStringOption(attributes.listen, [\"refOnly\", \"refAndDescendents\"]);\n    this.name = attributes.name || \"\";\n    this.ref = attributes.ref || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n    this.encryptData = null;\n    this.execute = null;\n    this.script = null;\n    this.signData = null;\n    this.submit = null;\n  }\n}\nclass ExData extends ContentObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"exData\");\n    this.contentType = attributes.contentType || \"\";\n    this.href = attributes.href || \"\";\n    this.id = attributes.id || \"\";\n    this.maxLength = getInteger({\n      data: attributes.maxLength,\n      defaultValue: -1,\n      validate: x => x >= -1\n    });\n    this.name = attributes.name || \"\";\n    this.rid = attributes.rid || \"\";\n    this.transferEncoding = getStringOption(attributes.transferEncoding, [\"none\", \"base64\", \"package\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n  [$isCDATAXml]() {\n    return this.contentType === \"text/html\";\n  }\n  [$onChild](child) {\n    if (this.contentType === \"text/html\" && child[$namespaceId] === NamespaceIds.xhtml.id) {\n      this[$content] = child;\n      return true;\n    }\n    if (this.contentType === \"text/xml\") {\n      this[$content] = child;\n      return true;\n    }\n    return false;\n  }\n  [$toHTML](availableSpace) {\n    if (this.contentType !== \"text/html\" || !this[$content]) {\n      return HTMLResult.EMPTY;\n    }\n    return this[$content][$toHTML](availableSpace);\n  }\n}\nclass ExObject extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"exObject\", true);\n    this.archive = attributes.archive || \"\";\n    this.classId = attributes.classId || \"\";\n    this.codeBase = attributes.codeBase || \"\";\n    this.codeType = attributes.codeType || \"\";\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n    this.boolean = new XFAObjectArray();\n    this.date = new XFAObjectArray();\n    this.dateTime = new XFAObjectArray();\n    this.decimal = new XFAObjectArray();\n    this.exData = new XFAObjectArray();\n    this.exObject = new XFAObjectArray();\n    this.float = new XFAObjectArray();\n    this.image = new XFAObjectArray();\n    this.integer = new XFAObjectArray();\n    this.text = new XFAObjectArray();\n    this.time = new XFAObjectArray();\n  }\n}\nclass ExclGroup extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"exclGroup\", true);\n    this.access = getStringOption(attributes.access, [\"open\", \"nonInteractive\", \"protected\", \"readOnly\"]);\n    this.accessKey = attributes.accessKey || \"\";\n    this.anchorType = getStringOption(attributes.anchorType, [\"topLeft\", \"bottomCenter\", \"bottomLeft\", \"bottomRight\", \"middleCenter\", \"middleLeft\", \"middleRight\", \"topCenter\", \"topRight\"]);\n    this.colSpan = getInteger({\n      data: attributes.colSpan,\n      defaultValue: 1,\n      validate: n => n >= 1 || n === -1\n    });\n    this.h = attributes.h ? getMeasurement(attributes.h) : \"\";\n    this.hAlign = getStringOption(attributes.hAlign, [\"left\", \"center\", \"justify\", \"justifyAll\", \"radix\", \"right\"]);\n    this.id = attributes.id || \"\";\n    this.layout = getStringOption(attributes.layout, [\"position\", \"lr-tb\", \"rl-row\", \"rl-tb\", \"row\", \"table\", \"tb\"]);\n    this.maxH = getMeasurement(attributes.maxH, \"0pt\");\n    this.maxW = getMeasurement(attributes.maxW, \"0pt\");\n    this.minH = getMeasurement(attributes.minH, \"0pt\");\n    this.minW = getMeasurement(attributes.minW, \"0pt\");\n    this.name = attributes.name || \"\";\n    this.presence = getStringOption(attributes.presence, [\"visible\", \"hidden\", \"inactive\", \"invisible\"]);\n    this.relevant = getRelevant(attributes.relevant);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.w = attributes.w ? getMeasurement(attributes.w) : \"\";\n    this.x = getMeasurement(attributes.x, \"0pt\");\n    this.y = getMeasurement(attributes.y, \"0pt\");\n    this.assist = null;\n    this.bind = null;\n    this.border = null;\n    this.calculate = null;\n    this.caption = null;\n    this.desc = null;\n    this.extras = null;\n    this.margin = null;\n    this.para = null;\n    this.traversal = null;\n    this.validate = null;\n    this.connect = new XFAObjectArray();\n    this.event = new XFAObjectArray();\n    this.field = new XFAObjectArray();\n    this.setProperty = new XFAObjectArray();\n  }\n  [$isBindable]() {\n    return true;\n  }\n  [$hasSettableValue]() {\n    return true;\n  }\n  [$setValue](value) {\n    for (const field of this.field.children) {\n      if (!field.value) {\n        const nodeValue = new Value({});\n        field[$appendChild](nodeValue);\n        field.value = nodeValue;\n      }\n      field.value[$setValue](value);\n    }\n  }\n  [$isThereMoreWidth]() {\n    return this.layout.endsWith(\"-tb\") && this[$extra].attempt === 0 && this[$extra].numberInLine > 0 || this[$getParent]()[$isThereMoreWidth]();\n  }\n  [$isSplittable]() {\n    const parent = this[$getSubformParent]();\n    if (!parent[$isSplittable]()) {\n      return false;\n    }\n    if (this[$extra]._isSplittable !== undefined) {\n      return this[$extra]._isSplittable;\n    }\n    if (this.layout === \"position\" || this.layout.includes(\"row\")) {\n      this[$extra]._isSplittable = false;\n      return false;\n    }\n    if (parent.layout?.endsWith(\"-tb\") && parent[$extra].numberInLine !== 0) {\n      return false;\n    }\n    this[$extra]._isSplittable = true;\n    return true;\n  }\n  [$flushHTML]() {\n    return flushHTML(this);\n  }\n  [$addHTML](html, bbox) {\n    addHTML(this, html, bbox);\n  }\n  [$getAvailableSpace]() {\n    return getAvailableSpace(this);\n  }\n  [$toHTML](availableSpace) {\n    setTabIndex(this);\n    if (this.presence === \"hidden\" || this.presence === \"inactive\" || this.h === 0 || this.w === 0) {\n      return HTMLResult.EMPTY;\n    }\n    fixDimensions(this);\n    const children = [];\n    const attributes = {\n      id: this[$uid],\n      class: []\n    };\n    setAccess(this, attributes.class);\n    if (!this[$extra]) {\n      this[$extra] = Object.create(null);\n    }\n    Object.assign(this[$extra], {\n      children,\n      attributes,\n      attempt: 0,\n      line: null,\n      numberInLine: 0,\n      availableSpace: {\n        width: Math.min(this.w || Infinity, availableSpace.width),\n        height: Math.min(this.h || Infinity, availableSpace.height)\n      },\n      width: 0,\n      height: 0,\n      prevHeight: 0,\n      currentWidth: 0\n    });\n    const isSplittable = this[$isSplittable]();\n    if (!isSplittable) {\n      setFirstUnsplittable(this);\n    }\n    if (!checkDimensions(this, availableSpace)) {\n      return HTMLResult.FAILURE;\n    }\n    const filter = new Set([\"field\"]);\n    if (this.layout.includes(\"row\")) {\n      const columnWidths = this[$getSubformParent]().columnWidths;\n      if (Array.isArray(columnWidths) && columnWidths.length > 0) {\n        this[$extra].columnWidths = columnWidths;\n        this[$extra].currentColumn = 0;\n      }\n    }\n    const style = toStyle(this, \"anchorType\", \"dimensions\", \"position\", \"presence\", \"border\", \"margin\", \"hAlign\");\n    const classNames = [\"xfaExclgroup\"];\n    const cl = layoutClass(this);\n    if (cl) {\n      classNames.push(cl);\n    }\n    if (isPrintOnly(this)) {\n      classNames.push(\"xfaPrintOnly\");\n    }\n    attributes.style = style;\n    attributes.class = classNames;\n    if (this.name) {\n      attributes.xfaName = this.name;\n    }\n    this[$pushPara]();\n    const isLrTb = this.layout === \"lr-tb\" || this.layout === \"rl-tb\";\n    const maxRun = isLrTb ? MAX_ATTEMPTS_FOR_LRTB_LAYOUT : 1;\n    for (; this[$extra].attempt < maxRun; this[$extra].attempt++) {\n      if (isLrTb && this[$extra].attempt === MAX_ATTEMPTS_FOR_LRTB_LAYOUT - 1) {\n        this[$extra].numberInLine = 0;\n      }\n      const result = this[$childrenToHTML]({\n        filter,\n        include: true\n      });\n      if (result.success) {\n        break;\n      }\n      if (result.isBreak()) {\n        this[$popPara]();\n        return result;\n      }\n      if (isLrTb && this[$extra].attempt === 0 && this[$extra].numberInLine === 0 && !this[$getTemplateRoot]()[$extra].noLayoutFailure) {\n        this[$extra].attempt = maxRun;\n        break;\n      }\n    }\n    this[$popPara]();\n    if (!isSplittable) {\n      unsetFirstUnsplittable(this);\n    }\n    if (this[$extra].attempt === maxRun) {\n      if (!isSplittable) {\n        delete this[$extra];\n      }\n      return HTMLResult.FAILURE;\n    }\n    let marginH = 0;\n    let marginV = 0;\n    if (this.margin) {\n      marginH = this.margin.leftInset + this.margin.rightInset;\n      marginV = this.margin.topInset + this.margin.bottomInset;\n    }\n    const width = Math.max(this[$extra].width + marginH, this.w || 0);\n    const height = Math.max(this[$extra].height + marginV, this.h || 0);\n    const bbox = [this.x, this.y, width, height];\n    if (this.w === \"\") {\n      style.width = measureToString(width);\n    }\n    if (this.h === \"\") {\n      style.height = measureToString(height);\n    }\n    const html = {\n      name: \"div\",\n      attributes,\n      children\n    };\n    applyAssist(this, attributes);\n    delete this[$extra];\n    return HTMLResult.success(createWrapper(this, html), bbox);\n  }\n}\nclass Execute extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"execute\");\n    this.connection = attributes.connection || \"\";\n    this.executeType = getStringOption(attributes.executeType, [\"import\", \"remerge\"]);\n    this.id = attributes.id || \"\";\n    this.runAt = getStringOption(attributes.runAt, [\"client\", \"both\", \"server\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass Extras extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"extras\", true);\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.boolean = new XFAObjectArray();\n    this.date = new XFAObjectArray();\n    this.dateTime = new XFAObjectArray();\n    this.decimal = new XFAObjectArray();\n    this.exData = new XFAObjectArray();\n    this.extras = new XFAObjectArray();\n    this.float = new XFAObjectArray();\n    this.image = new XFAObjectArray();\n    this.integer = new XFAObjectArray();\n    this.text = new XFAObjectArray();\n    this.time = new XFAObjectArray();\n  }\n}\nclass Field extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"field\", true);\n    this.access = getStringOption(attributes.access, [\"open\", \"nonInteractive\", \"protected\", \"readOnly\"]);\n    this.accessKey = attributes.accessKey || \"\";\n    this.anchorType = getStringOption(attributes.anchorType, [\"topLeft\", \"bottomCenter\", \"bottomLeft\", \"bottomRight\", \"middleCenter\", \"middleLeft\", \"middleRight\", \"topCenter\", \"topRight\"]);\n    this.colSpan = getInteger({\n      data: attributes.colSpan,\n      defaultValue: 1,\n      validate: n => n >= 1 || n === -1\n    });\n    this.h = attributes.h ? getMeasurement(attributes.h) : \"\";\n    this.hAlign = getStringOption(attributes.hAlign, [\"left\", \"center\", \"justify\", \"justifyAll\", \"radix\", \"right\"]);\n    this.id = attributes.id || \"\";\n    this.locale = attributes.locale || \"\";\n    this.maxH = getMeasurement(attributes.maxH, \"0pt\");\n    this.maxW = getMeasurement(attributes.maxW, \"0pt\");\n    this.minH = getMeasurement(attributes.minH, \"0pt\");\n    this.minW = getMeasurement(attributes.minW, \"0pt\");\n    this.name = attributes.name || \"\";\n    this.presence = getStringOption(attributes.presence, [\"visible\", \"hidden\", \"inactive\", \"invisible\"]);\n    this.relevant = getRelevant(attributes.relevant);\n    this.rotate = getInteger({\n      data: attributes.rotate,\n      defaultValue: 0,\n      validate: x => x % 90 === 0\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.w = attributes.w ? getMeasurement(attributes.w) : \"\";\n    this.x = getMeasurement(attributes.x, \"0pt\");\n    this.y = getMeasurement(attributes.y, \"0pt\");\n    this.assist = null;\n    this.bind = null;\n    this.border = null;\n    this.calculate = null;\n    this.caption = null;\n    this.desc = null;\n    this.extras = null;\n    this.font = null;\n    this.format = null;\n    this.items = new XFAObjectArray(2);\n    this.keep = null;\n    this.margin = null;\n    this.para = null;\n    this.traversal = null;\n    this.ui = null;\n    this.validate = null;\n    this.value = null;\n    this.bindItems = new XFAObjectArray();\n    this.connect = new XFAObjectArray();\n    this.event = new XFAObjectArray();\n    this.setProperty = new XFAObjectArray();\n  }\n  [$isBindable]() {\n    return true;\n  }\n  [$setValue](value) {\n    _setValue(this, value);\n  }\n  [$toHTML](availableSpace) {\n    setTabIndex(this);\n    if (!this.ui) {\n      this.ui = new Ui({});\n      this.ui[$globalData] = this[$globalData];\n      this[$appendChild](this.ui);\n      let node;\n      switch (this.items.children.length) {\n        case 0:\n          node = new TextEdit({});\n          this.ui.textEdit = node;\n          break;\n        case 1:\n          node = new CheckButton({});\n          this.ui.checkButton = node;\n          break;\n        case 2:\n          node = new ChoiceList({});\n          this.ui.choiceList = node;\n          break;\n      }\n      this.ui[$appendChild](node);\n    }\n    if (!this.ui || this.presence === \"hidden\" || this.presence === \"inactive\" || this.h === 0 || this.w === 0) {\n      return HTMLResult.EMPTY;\n    }\n    if (this.caption) {\n      delete this.caption[$extra];\n    }\n    this[$pushPara]();\n    const caption = this.caption ? this.caption[$toHTML](availableSpace).html : null;\n    const savedW = this.w;\n    const savedH = this.h;\n    let marginH = 0;\n    let marginV = 0;\n    if (this.margin) {\n      marginH = this.margin.leftInset + this.margin.rightInset;\n      marginV = this.margin.topInset + this.margin.bottomInset;\n    }\n    let borderDims = null;\n    if (this.w === \"\" || this.h === \"\") {\n      let width = null;\n      let height = null;\n      let uiW = 0;\n      let uiH = 0;\n      if (this.ui.checkButton) {\n        uiW = uiH = this.ui.checkButton.size;\n      } else {\n        const {\n          w,\n          h\n        } = layoutNode(this, availableSpace);\n        if (w !== null) {\n          uiW = w;\n          uiH = h;\n        } else {\n          uiH = fonts_getMetrics(this.font, true).lineNoGap;\n        }\n      }\n      borderDims = getBorderDims(this.ui[$getExtra]());\n      uiW += borderDims.w;\n      uiH += borderDims.h;\n      if (this.caption) {\n        const {\n          w,\n          h,\n          isBroken\n        } = this.caption[$getExtra](availableSpace);\n        if (isBroken && this[$getSubformParent]()[$isThereMoreWidth]()) {\n          this[$popPara]();\n          return HTMLResult.FAILURE;\n        }\n        width = w;\n        height = h;\n        switch (this.caption.placement) {\n          case \"left\":\n          case \"right\":\n          case \"inline\":\n            width += uiW;\n            break;\n          case \"top\":\n          case \"bottom\":\n            height += uiH;\n            break;\n        }\n      } else {\n        width = uiW;\n        height = uiH;\n      }\n      if (width && this.w === \"\") {\n        width += marginH;\n        this.w = Math.min(this.maxW <= 0 ? Infinity : this.maxW, this.minW + 1 < width ? width : this.minW);\n      }\n      if (height && this.h === \"\") {\n        height += marginV;\n        this.h = Math.min(this.maxH <= 0 ? Infinity : this.maxH, this.minH + 1 < height ? height : this.minH);\n      }\n    }\n    this[$popPara]();\n    fixDimensions(this);\n    setFirstUnsplittable(this);\n    if (!checkDimensions(this, availableSpace)) {\n      this.w = savedW;\n      this.h = savedH;\n      this[$popPara]();\n      return HTMLResult.FAILURE;\n    }\n    unsetFirstUnsplittable(this);\n    const style = toStyle(this, \"font\", \"dimensions\", \"position\", \"rotate\", \"anchorType\", \"presence\", \"margin\", \"hAlign\");\n    setMinMaxDimensions(this, style);\n    const classNames = [\"xfaField\"];\n    if (this.font) {\n      classNames.push(\"xfaFont\");\n    }\n    if (isPrintOnly(this)) {\n      classNames.push(\"xfaPrintOnly\");\n    }\n    const attributes = {\n      style,\n      id: this[$uid],\n      class: classNames\n    };\n    if (style.margin) {\n      style.padding = style.margin;\n      delete style.margin;\n    }\n    setAccess(this, classNames);\n    if (this.name) {\n      attributes.xfaName = this.name;\n    }\n    const children = [];\n    const html = {\n      name: \"div\",\n      attributes,\n      children\n    };\n    applyAssist(this, attributes);\n    const borderStyle = this.border ? this.border[$toStyle]() : null;\n    const bbox = computeBbox(this, html, availableSpace);\n    const ui = this.ui[$toHTML]().html;\n    if (!ui) {\n      Object.assign(style, borderStyle);\n      return HTMLResult.success(createWrapper(this, html), bbox);\n    }\n    if (this[$tabIndex]) {\n      if (ui.children?.[0]) {\n        ui.children[0].attributes.tabindex = this[$tabIndex];\n      } else {\n        ui.attributes.tabindex = this[$tabIndex];\n      }\n    }\n    if (!ui.attributes.style) {\n      ui.attributes.style = Object.create(null);\n    }\n    let aElement = null;\n    if (this.ui.button) {\n      if (ui.children.length === 1) {\n        [aElement] = ui.children.splice(0, 1);\n      }\n      Object.assign(ui.attributes.style, borderStyle);\n    } else {\n      Object.assign(style, borderStyle);\n    }\n    children.push(ui);\n    if (this.value) {\n      if (this.ui.imageEdit) {\n        ui.children.push(this.value[$toHTML]().html);\n      } else if (!this.ui.button) {\n        let value = \"\";\n        if (this.value.exData) {\n          value = this.value.exData[$text]();\n        } else if (this.value.text) {\n          value = this.value.text[$getExtra]();\n        } else {\n          const htmlValue = this.value[$toHTML]().html;\n          if (htmlValue !== null) {\n            value = htmlValue.children[0].value;\n          }\n        }\n        if (this.ui.textEdit && this.value.text?.maxChars) {\n          ui.children[0].attributes.maxLength = this.value.text.maxChars;\n        }\n        if (value) {\n          if (this.ui.numericEdit) {\n            value = parseFloat(value);\n            value = isNaN(value) ? \"\" : value.toString();\n          }\n          if (ui.children[0].name === \"textarea\") {\n            ui.children[0].attributes.textContent = value;\n          } else {\n            ui.children[0].attributes.value = value;\n          }\n        }\n      }\n    }\n    if (!this.ui.imageEdit && ui.children?.[0] && this.h) {\n      borderDims = borderDims || getBorderDims(this.ui[$getExtra]());\n      let captionHeight = 0;\n      if (this.caption && [\"top\", \"bottom\"].includes(this.caption.placement)) {\n        captionHeight = this.caption.reserve;\n        if (captionHeight <= 0) {\n          captionHeight = this.caption[$getExtra](availableSpace).h;\n        }\n        const inputHeight = this.h - captionHeight - marginV - borderDims.h;\n        ui.children[0].attributes.style.height = measureToString(inputHeight);\n      } else {\n        ui.children[0].attributes.style.height = \"100%\";\n      }\n    }\n    if (aElement) {\n      ui.children.push(aElement);\n    }\n    if (!caption) {\n      if (ui.attributes.class) {\n        ui.attributes.class.push(\"xfaLeft\");\n      }\n      this.w = savedW;\n      this.h = savedH;\n      return HTMLResult.success(createWrapper(this, html), bbox);\n    }\n    if (this.ui.button) {\n      if (style.padding) {\n        delete style.padding;\n      }\n      if (caption.name === \"div\") {\n        caption.name = \"span\";\n      }\n      ui.children.push(caption);\n      return HTMLResult.success(html, bbox);\n    } else if (this.ui.checkButton) {\n      caption.attributes.class[0] = \"xfaCaptionForCheckButton\";\n    }\n    if (!ui.attributes.class) {\n      ui.attributes.class = [];\n    }\n    ui.children.splice(0, 0, caption);\n    switch (this.caption.placement) {\n      case \"left\":\n        ui.attributes.class.push(\"xfaLeft\");\n        break;\n      case \"right\":\n        ui.attributes.class.push(\"xfaRight\");\n        break;\n      case \"top\":\n        ui.attributes.class.push(\"xfaTop\");\n        break;\n      case \"bottom\":\n        ui.attributes.class.push(\"xfaBottom\");\n        break;\n      case \"inline\":\n        ui.attributes.class.push(\"xfaLeft\");\n        break;\n    }\n    this.w = savedW;\n    this.h = savedH;\n    return HTMLResult.success(createWrapper(this, html), bbox);\n  }\n}\nclass Fill extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"fill\", true);\n    this.id = attributes.id || \"\";\n    this.presence = getStringOption(attributes.presence, [\"visible\", \"hidden\", \"inactive\", \"invisible\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.color = null;\n    this.extras = null;\n    this.linear = null;\n    this.pattern = null;\n    this.radial = null;\n    this.solid = null;\n    this.stipple = null;\n  }\n  [$toStyle]() {\n    const parent = this[$getParent]();\n    const grandpa = parent[$getParent]();\n    const ggrandpa = grandpa[$getParent]();\n    const style = Object.create(null);\n    let propName = \"color\";\n    let altPropName = propName;\n    if (parent instanceof Border) {\n      propName = \"background-color\";\n      altPropName = \"background\";\n      if (ggrandpa instanceof Ui) {\n        style.backgroundColor = \"white\";\n      }\n    }\n    if (parent instanceof Rectangle || parent instanceof Arc) {\n      propName = altPropName = \"fill\";\n      style.fill = \"white\";\n    }\n    for (const name of Object.getOwnPropertyNames(this)) {\n      if (name === \"extras\" || name === \"color\") {\n        continue;\n      }\n      const obj = this[name];\n      if (!(obj instanceof XFAObject)) {\n        continue;\n      }\n      const color = obj[$toStyle](this.color);\n      if (color) {\n        style[color.startsWith(\"#\") ? propName : altPropName] = color;\n      }\n      return style;\n    }\n    if (this.color?.value) {\n      const color = this.color[$toStyle]();\n      style[color.startsWith(\"#\") ? propName : altPropName] = color;\n    }\n    return style;\n  }\n}\nclass Filter extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"filter\", true);\n    this.addRevocationInfo = getStringOption(attributes.addRevocationInfo, [\"\", \"required\", \"optional\", \"none\"]);\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.version = getInteger({\n      data: this.version,\n      defaultValue: 5,\n      validate: x => x >= 1 && x <= 5\n    });\n    this.appearanceFilter = null;\n    this.certificates = null;\n    this.digestMethods = null;\n    this.encodings = null;\n    this.encryptionMethods = null;\n    this.handler = null;\n    this.lockDocument = null;\n    this.mdp = null;\n    this.reasons = null;\n    this.timeStamp = null;\n  }\n}\nclass Float extends ContentObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"float\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n  [$finalize]() {\n    const number = parseFloat(this[$content].trim());\n    this[$content] = isNaN(number) ? null : number;\n  }\n  [$toHTML](availableSpace) {\n    return valueToHtml(this[$content] !== null ? this[$content].toString() : \"\");\n  }\n}\nclass template_Font extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"font\", true);\n    this.baselineShift = getMeasurement(attributes.baselineShift);\n    this.fontHorizontalScale = getFloat({\n      data: attributes.fontHorizontalScale,\n      defaultValue: 100,\n      validate: x => x >= 0\n    });\n    this.fontVerticalScale = getFloat({\n      data: attributes.fontVerticalScale,\n      defaultValue: 100,\n      validate: x => x >= 0\n    });\n    this.id = attributes.id || \"\";\n    this.kerningMode = getStringOption(attributes.kerningMode, [\"none\", \"pair\"]);\n    this.letterSpacing = getMeasurement(attributes.letterSpacing, \"0\");\n    this.lineThrough = getInteger({\n      data: attributes.lineThrough,\n      defaultValue: 0,\n      validate: x => x === 1 || x === 2\n    });\n    this.lineThroughPeriod = getStringOption(attributes.lineThroughPeriod, [\"all\", \"word\"]);\n    this.overline = getInteger({\n      data: attributes.overline,\n      defaultValue: 0,\n      validate: x => x === 1 || x === 2\n    });\n    this.overlinePeriod = getStringOption(attributes.overlinePeriod, [\"all\", \"word\"]);\n    this.posture = getStringOption(attributes.posture, [\"normal\", \"italic\"]);\n    this.size = getMeasurement(attributes.size, \"10pt\");\n    this.typeface = attributes.typeface || \"Courier\";\n    this.underline = getInteger({\n      data: attributes.underline,\n      defaultValue: 0,\n      validate: x => x === 1 || x === 2\n    });\n    this.underlinePeriod = getStringOption(attributes.underlinePeriod, [\"all\", \"word\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.weight = getStringOption(attributes.weight, [\"normal\", \"bold\"]);\n    this.extras = null;\n    this.fill = null;\n  }\n  [$clean](builder) {\n    super[$clean](builder);\n    this[$globalData].usedTypefaces.add(this.typeface);\n  }\n  [$toStyle]() {\n    const style = toStyle(this, \"fill\");\n    const color = style.color;\n    if (color) {\n      if (color === \"#000000\") {\n        delete style.color;\n      } else if (!color.startsWith(\"#\")) {\n        style.background = color;\n        style.backgroundClip = \"text\";\n        style.color = \"transparent\";\n      }\n    }\n    if (this.baselineShift) {\n      style.verticalAlign = measureToString(this.baselineShift);\n    }\n    style.fontKerning = this.kerningMode === \"none\" ? \"none\" : \"normal\";\n    style.letterSpacing = measureToString(this.letterSpacing);\n    if (this.lineThrough !== 0) {\n      style.textDecoration = \"line-through\";\n      if (this.lineThrough === 2) {\n        style.textDecorationStyle = \"double\";\n      }\n    }\n    if (this.overline !== 0) {\n      style.textDecoration = \"overline\";\n      if (this.overline === 2) {\n        style.textDecorationStyle = \"double\";\n      }\n    }\n    style.fontStyle = this.posture;\n    style.fontSize = measureToString(0.99 * this.size);\n    setFontFamily(this, this, this[$globalData].fontFinder, style);\n    if (this.underline !== 0) {\n      style.textDecoration = \"underline\";\n      if (this.underline === 2) {\n        style.textDecorationStyle = \"double\";\n      }\n    }\n    style.fontWeight = this.weight;\n    return style;\n  }\n}\nclass Format extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"format\", true);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n    this.picture = null;\n  }\n}\nclass Handler extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"handler\");\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass Hyphenation extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"hyphenation\");\n    this.excludeAllCaps = getInteger({\n      data: attributes.excludeAllCaps,\n      defaultValue: 0,\n      validate: x => x === 1\n    });\n    this.excludeInitialCap = getInteger({\n      data: attributes.excludeInitialCap,\n      defaultValue: 0,\n      validate: x => x === 1\n    });\n    this.hyphenate = getInteger({\n      data: attributes.hyphenate,\n      defaultValue: 0,\n      validate: x => x === 1\n    });\n    this.id = attributes.id || \"\";\n    this.pushCharacterCount = getInteger({\n      data: attributes.pushCharacterCount,\n      defaultValue: 3,\n      validate: x => x >= 0\n    });\n    this.remainCharacterCount = getInteger({\n      data: attributes.remainCharacterCount,\n      defaultValue: 3,\n      validate: x => x >= 0\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.wordCharacterCount = getInteger({\n      data: attributes.wordCharacterCount,\n      defaultValue: 7,\n      validate: x => x >= 0\n    });\n  }\n}\nclass Image extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"image\");\n    this.aspect = getStringOption(attributes.aspect, [\"fit\", \"actual\", \"height\", \"none\", \"width\"]);\n    this.contentType = attributes.contentType || \"\";\n    this.href = attributes.href || \"\";\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.transferEncoding = getStringOption(attributes.transferEncoding, [\"base64\", \"none\", \"package\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n  [$toHTML]() {\n    if (this.contentType && !MIMES.has(this.contentType.toLowerCase())) {\n      return HTMLResult.EMPTY;\n    }\n    let buffer = this[$globalData].images && this[$globalData].images.get(this.href);\n    if (!buffer && (this.href || !this[$content])) {\n      return HTMLResult.EMPTY;\n    }\n    if (!buffer && this.transferEncoding === \"base64\") {\n      buffer = stringToBytes(atob(this[$content]));\n    }\n    if (!buffer) {\n      return HTMLResult.EMPTY;\n    }\n    if (!this.contentType) {\n      for (const [header, type] of IMAGES_HEADERS) {\n        if (buffer.length > header.length && header.every((x, i) => x === buffer[i])) {\n          this.contentType = type;\n          break;\n        }\n      }\n      if (!this.contentType) {\n        return HTMLResult.EMPTY;\n      }\n    }\n    const blob = new Blob([buffer], {\n      type: this.contentType\n    });\n    let style;\n    switch (this.aspect) {\n      case \"fit\":\n      case \"actual\":\n        break;\n      case \"height\":\n        style = {\n          height: \"100%\",\n          objectFit: \"fill\"\n        };\n        break;\n      case \"none\":\n        style = {\n          width: \"100%\",\n          height: \"100%\",\n          objectFit: \"fill\"\n        };\n        break;\n      case \"width\":\n        style = {\n          width: \"100%\",\n          objectFit: \"fill\"\n        };\n        break;\n    }\n    const parent = this[$getParent]();\n    return HTMLResult.success({\n      name: \"img\",\n      attributes: {\n        class: [\"xfaImage\"],\n        style,\n        src: URL.createObjectURL(blob),\n        alt: parent ? ariaLabel(parent[$getParent]()) : null\n      }\n    });\n  }\n}\nclass ImageEdit extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"imageEdit\", true);\n    this.data = getStringOption(attributes.data, [\"link\", \"embed\"]);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.border = null;\n    this.extras = null;\n    this.margin = null;\n  }\n  [$toHTML](availableSpace) {\n    if (this.data === \"embed\") {\n      return HTMLResult.success({\n        name: \"div\",\n        children: [],\n        attributes: {}\n      });\n    }\n    return HTMLResult.EMPTY;\n  }\n}\nclass Integer extends ContentObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"integer\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n  [$finalize]() {\n    const number = parseInt(this[$content].trim(), 10);\n    this[$content] = isNaN(number) ? null : number;\n  }\n  [$toHTML](availableSpace) {\n    return valueToHtml(this[$content] !== null ? this[$content].toString() : \"\");\n  }\n}\nclass Issuers extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"issuers\", true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.certificate = new XFAObjectArray();\n  }\n}\nclass Items extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"items\", true);\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.presence = getStringOption(attributes.presence, [\"visible\", \"hidden\", \"inactive\", \"invisible\"]);\n    this.ref = attributes.ref || \"\";\n    this.save = getInteger({\n      data: attributes.save,\n      defaultValue: 0,\n      validate: x => x === 1\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.boolean = new XFAObjectArray();\n    this.date = new XFAObjectArray();\n    this.dateTime = new XFAObjectArray();\n    this.decimal = new XFAObjectArray();\n    this.exData = new XFAObjectArray();\n    this.float = new XFAObjectArray();\n    this.image = new XFAObjectArray();\n    this.integer = new XFAObjectArray();\n    this.text = new XFAObjectArray();\n    this.time = new XFAObjectArray();\n  }\n  [$toHTML]() {\n    const output = [];\n    for (const child of this[$getChildren]()) {\n      output.push(child[$text]());\n    }\n    return HTMLResult.success(output);\n  }\n}\nclass Keep extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"keep\", true);\n    this.id = attributes.id || \"\";\n    const options = [\"none\", \"contentArea\", \"pageArea\"];\n    this.intact = getStringOption(attributes.intact, options);\n    this.next = getStringOption(attributes.next, options);\n    this.previous = getStringOption(attributes.previous, options);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n  }\n}\nclass KeyUsage extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"keyUsage\");\n    const options = [\"\", \"yes\", \"no\"];\n    this.crlSign = getStringOption(attributes.crlSign, options);\n    this.dataEncipherment = getStringOption(attributes.dataEncipherment, options);\n    this.decipherOnly = getStringOption(attributes.decipherOnly, options);\n    this.digitalSignature = getStringOption(attributes.digitalSignature, options);\n    this.encipherOnly = getStringOption(attributes.encipherOnly, options);\n    this.id = attributes.id || \"\";\n    this.keyAgreement = getStringOption(attributes.keyAgreement, options);\n    this.keyCertSign = getStringOption(attributes.keyCertSign, options);\n    this.keyEncipherment = getStringOption(attributes.keyEncipherment, options);\n    this.nonRepudiation = getStringOption(attributes.nonRepudiation, options);\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass Line extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"line\", true);\n    this.hand = getStringOption(attributes.hand, [\"even\", \"left\", \"right\"]);\n    this.id = attributes.id || \"\";\n    this.slope = getStringOption(attributes.slope, [\"\\\\\", \"/\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.edge = null;\n  }\n  [$toHTML]() {\n    const parent = this[$getParent]()[$getParent]();\n    const edge = this.edge || new Edge({});\n    const edgeStyle = edge[$toStyle]();\n    const style = Object.create(null);\n    const thickness = edge.presence === \"visible\" ? edge.thickness : 0;\n    style.strokeWidth = measureToString(thickness);\n    style.stroke = edgeStyle.color;\n    let x1, y1, x2, y2;\n    let width = \"100%\";\n    let height = \"100%\";\n    if (parent.w <= thickness) {\n      [x1, y1, x2, y2] = [\"50%\", 0, \"50%\", \"100%\"];\n      width = style.strokeWidth;\n    } else if (parent.h <= thickness) {\n      [x1, y1, x2, y2] = [0, \"50%\", \"100%\", \"50%\"];\n      height = style.strokeWidth;\n    } else if (this.slope === \"\\\\\") {\n      [x1, y1, x2, y2] = [0, 0, \"100%\", \"100%\"];\n    } else {\n      [x1, y1, x2, y2] = [0, \"100%\", \"100%\", 0];\n    }\n    const line = {\n      name: \"line\",\n      attributes: {\n        xmlns: SVG_NS,\n        x1,\n        y1,\n        x2,\n        y2,\n        style\n      }\n    };\n    const svg = {\n      name: \"svg\",\n      children: [line],\n      attributes: {\n        xmlns: SVG_NS,\n        width,\n        height,\n        style: {\n          overflow: \"visible\"\n        }\n      }\n    };\n    if (hasMargin(parent)) {\n      return HTMLResult.success({\n        name: \"div\",\n        attributes: {\n          style: {\n            display: \"inline\",\n            width: \"100%\",\n            height: \"100%\"\n          }\n        },\n        children: [svg]\n      });\n    }\n    svg.attributes.style.position = \"absolute\";\n    return HTMLResult.success(svg);\n  }\n}\nclass Linear extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"linear\", true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"toRight\", \"toBottom\", \"toLeft\", \"toTop\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.color = null;\n    this.extras = null;\n  }\n  [$toStyle](startColor) {\n    startColor = startColor ? startColor[$toStyle]() : \"#FFFFFF\";\n    const transf = this.type.replace(/([RBLT])/, \" $1\").toLowerCase();\n    const endColor = this.color ? this.color[$toStyle]() : \"#000000\";\n    return `linear-gradient(${transf}, ${startColor}, ${endColor})`;\n  }\n}\nclass LockDocument extends ContentObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"lockDocument\");\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n  [$finalize]() {\n    this[$content] = getStringOption(this[$content], [\"auto\", \"0\", \"1\"]);\n  }\n}\nclass Manifest extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"manifest\", true);\n    this.action = getStringOption(attributes.action, [\"include\", \"all\", \"exclude\"]);\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n    this.ref = new XFAObjectArray();\n  }\n}\nclass Margin extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"margin\", true);\n    this.bottomInset = getMeasurement(attributes.bottomInset, \"0\");\n    this.id = attributes.id || \"\";\n    this.leftInset = getMeasurement(attributes.leftInset, \"0\");\n    this.rightInset = getMeasurement(attributes.rightInset, \"0\");\n    this.topInset = getMeasurement(attributes.topInset, \"0\");\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n  }\n  [$toStyle]() {\n    return {\n      margin: measureToString(this.topInset) + \" \" + measureToString(this.rightInset) + \" \" + measureToString(this.bottomInset) + \" \" + measureToString(this.leftInset)\n    };\n  }\n}\nclass Mdp extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"mdp\");\n    this.id = attributes.id || \"\";\n    this.permissions = getInteger({\n      data: attributes.permissions,\n      defaultValue: 2,\n      validate: x => x === 1 || x === 3\n    });\n    this.signatureType = getStringOption(attributes.signatureType, [\"filler\", \"author\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass Medium extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"medium\");\n    this.id = attributes.id || \"\";\n    this.imagingBBox = getBBox(attributes.imagingBBox);\n    this.long = getMeasurement(attributes.long);\n    this.orientation = getStringOption(attributes.orientation, [\"portrait\", \"landscape\"]);\n    this.short = getMeasurement(attributes.short);\n    this.stock = attributes.stock || \"\";\n    this.trayIn = getStringOption(attributes.trayIn, [\"auto\", \"delegate\", \"pageFront\"]);\n    this.trayOut = getStringOption(attributes.trayOut, [\"auto\", \"delegate\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass Message extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"message\", true);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.text = new XFAObjectArray();\n  }\n}\nclass NumericEdit extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"numericEdit\", true);\n    this.hScrollPolicy = getStringOption(attributes.hScrollPolicy, [\"auto\", \"off\", \"on\"]);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.border = null;\n    this.comb = null;\n    this.extras = null;\n    this.margin = null;\n  }\n  [$toHTML](availableSpace) {\n    const style = toStyle(this, \"border\", \"font\", \"margin\");\n    const field = this[$getParent]()[$getParent]();\n    const html = {\n      name: \"input\",\n      attributes: {\n        type: \"text\",\n        fieldId: field[$uid],\n        dataId: field[$data]?.[$uid] || field[$uid],\n        class: [\"xfaTextfield\"],\n        style,\n        \"aria-label\": ariaLabel(field),\n        \"aria-required\": false\n      }\n    };\n    if (isRequired(field)) {\n      html.attributes[\"aria-required\"] = true;\n      html.attributes.required = true;\n    }\n    return HTMLResult.success({\n      name: \"label\",\n      attributes: {\n        class: [\"xfaLabel\"]\n      },\n      children: [html]\n    });\n  }\n}\nclass Occur extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"occur\", true);\n    this.id = attributes.id || \"\";\n    this.initial = attributes.initial !== \"\" ? getInteger({\n      data: attributes.initial,\n      defaultValue: \"\",\n      validate: x => true\n    }) : \"\";\n    this.max = attributes.max !== \"\" ? getInteger({\n      data: attributes.max,\n      defaultValue: 1,\n      validate: x => true\n    }) : \"\";\n    this.min = attributes.min !== \"\" ? getInteger({\n      data: attributes.min,\n      defaultValue: 1,\n      validate: x => true\n    }) : \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n  }\n  [$clean]() {\n    const parent = this[$getParent]();\n    const originalMin = this.min;\n    if (this.min === \"\") {\n      this.min = parent instanceof PageArea || parent instanceof PageSet ? 0 : 1;\n    }\n    if (this.max === \"\") {\n      if (originalMin === \"\") {\n        this.max = parent instanceof PageArea || parent instanceof PageSet ? -1 : 1;\n      } else {\n        this.max = this.min;\n      }\n    }\n    if (this.max !== -1 && this.max < this.min) {\n      this.max = this.min;\n    }\n    if (this.initial === \"\") {\n      this.initial = parent instanceof Template ? 1 : this.min;\n    }\n  }\n}\nclass Oid extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"oid\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass Oids extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"oids\", true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.oid = new XFAObjectArray();\n  }\n}\nclass Overflow extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"overflow\");\n    this.id = attributes.id || \"\";\n    this.leader = attributes.leader || \"\";\n    this.target = attributes.target || \"\";\n    this.trailer = attributes.trailer || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n  [$getExtra]() {\n    if (!this[$extra]) {\n      const parent = this[$getParent]();\n      const root = this[$getTemplateRoot]();\n      const target = root[$searchNode](this.target, parent);\n      const leader = root[$searchNode](this.leader, parent);\n      const trailer = root[$searchNode](this.trailer, parent);\n      this[$extra] = {\n        target: target?.[0] || null,\n        leader: leader?.[0] || null,\n        trailer: trailer?.[0] || null,\n        addLeader: false,\n        addTrailer: false\n      };\n    }\n    return this[$extra];\n  }\n}\nclass PageArea extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"pageArea\", true);\n    this.blankOrNotBlank = getStringOption(attributes.blankOrNotBlank, [\"any\", \"blank\", \"notBlank\"]);\n    this.id = attributes.id || \"\";\n    this.initialNumber = getInteger({\n      data: attributes.initialNumber,\n      defaultValue: 1,\n      validate: x => true\n    });\n    this.name = attributes.name || \"\";\n    this.numbered = getInteger({\n      data: attributes.numbered,\n      defaultValue: 1,\n      validate: x => true\n    });\n    this.oddOrEven = getStringOption(attributes.oddOrEven, [\"any\", \"even\", \"odd\"]);\n    this.pagePosition = getStringOption(attributes.pagePosition, [\"any\", \"first\", \"last\", \"only\", \"rest\"]);\n    this.relevant = getRelevant(attributes.relevant);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.desc = null;\n    this.extras = null;\n    this.medium = null;\n    this.occur = null;\n    this.area = new XFAObjectArray();\n    this.contentArea = new XFAObjectArray();\n    this.draw = new XFAObjectArray();\n    this.exclGroup = new XFAObjectArray();\n    this.field = new XFAObjectArray();\n    this.subform = new XFAObjectArray();\n  }\n  [$isUsable]() {\n    if (!this[$extra]) {\n      this[$extra] = {\n        numberOfUse: 0\n      };\n      return true;\n    }\n    return !this.occur || this.occur.max === -1 || this[$extra].numberOfUse < this.occur.max;\n  }\n  [$cleanPage]() {\n    delete this[$extra];\n  }\n  [$getNextPage]() {\n    if (!this[$extra]) {\n      this[$extra] = {\n        numberOfUse: 0\n      };\n    }\n    const parent = this[$getParent]();\n    if (parent.relation === \"orderedOccurrence\") {\n      if (this[$isUsable]()) {\n        this[$extra].numberOfUse += 1;\n        return this;\n      }\n    }\n    return parent[$getNextPage]();\n  }\n  [$getAvailableSpace]() {\n    return this[$extra].space || {\n      width: 0,\n      height: 0\n    };\n  }\n  [$toHTML]() {\n    if (!this[$extra]) {\n      this[$extra] = {\n        numberOfUse: 1\n      };\n    }\n    const children = [];\n    this[$extra].children = children;\n    const style = Object.create(null);\n    if (this.medium && this.medium.short && this.medium.long) {\n      style.width = measureToString(this.medium.short);\n      style.height = measureToString(this.medium.long);\n      this[$extra].space = {\n        width: this.medium.short,\n        height: this.medium.long\n      };\n      if (this.medium.orientation === \"landscape\") {\n        const x = style.width;\n        style.width = style.height;\n        style.height = x;\n        this[$extra].space = {\n          width: this.medium.long,\n          height: this.medium.short\n        };\n      }\n    } else {\n      warn(\"XFA - No medium specified in pageArea: please file a bug.\");\n    }\n    this[$childrenToHTML]({\n      filter: new Set([\"area\", \"draw\", \"field\", \"subform\"]),\n      include: true\n    });\n    this[$childrenToHTML]({\n      filter: new Set([\"contentArea\"]),\n      include: true\n    });\n    return HTMLResult.success({\n      name: \"div\",\n      children,\n      attributes: {\n        class: [\"xfaPage\"],\n        id: this[$uid],\n        style,\n        xfaName: this.name\n      }\n    });\n  }\n}\nclass PageSet extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"pageSet\", true);\n    this.duplexImposition = getStringOption(attributes.duplexImposition, [\"longEdge\", \"shortEdge\"]);\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.relation = getStringOption(attributes.relation, [\"orderedOccurrence\", \"duplexPaginated\", \"simplexPaginated\"]);\n    this.relevant = getRelevant(attributes.relevant);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n    this.occur = null;\n    this.pageArea = new XFAObjectArray();\n    this.pageSet = new XFAObjectArray();\n  }\n  [$cleanPage]() {\n    for (const page of this.pageArea.children) {\n      page[$cleanPage]();\n    }\n    for (const page of this.pageSet.children) {\n      page[$cleanPage]();\n    }\n  }\n  [$isUsable]() {\n    return !this.occur || this.occur.max === -1 || this[$extra].numberOfUse < this.occur.max;\n  }\n  [$getNextPage]() {\n    if (!this[$extra]) {\n      this[$extra] = {\n        numberOfUse: 1,\n        pageIndex: -1,\n        pageSetIndex: -1\n      };\n    }\n    if (this.relation === \"orderedOccurrence\") {\n      if (this[$extra].pageIndex + 1 < this.pageArea.children.length) {\n        this[$extra].pageIndex += 1;\n        const pageArea = this.pageArea.children[this[$extra].pageIndex];\n        return pageArea[$getNextPage]();\n      }\n      if (this[$extra].pageSetIndex + 1 < this.pageSet.children.length) {\n        this[$extra].pageSetIndex += 1;\n        return this.pageSet.children[this[$extra].pageSetIndex][$getNextPage]();\n      }\n      if (this[$isUsable]()) {\n        this[$extra].numberOfUse += 1;\n        this[$extra].pageIndex = -1;\n        this[$extra].pageSetIndex = -1;\n        return this[$getNextPage]();\n      }\n      const parent = this[$getParent]();\n      if (parent instanceof PageSet) {\n        return parent[$getNextPage]();\n      }\n      this[$cleanPage]();\n      return this[$getNextPage]();\n    }\n    const pageNumber = this[$getTemplateRoot]()[$extra].pageNumber;\n    const parity = pageNumber % 2 === 0 ? \"even\" : \"odd\";\n    const position = pageNumber === 0 ? \"first\" : \"rest\";\n    let page = this.pageArea.children.find(p => p.oddOrEven === parity && p.pagePosition === position);\n    if (page) {\n      return page;\n    }\n    page = this.pageArea.children.find(p => p.oddOrEven === \"any\" && p.pagePosition === position);\n    if (page) {\n      return page;\n    }\n    page = this.pageArea.children.find(p => p.oddOrEven === \"any\" && p.pagePosition === \"any\");\n    if (page) {\n      return page;\n    }\n    return this.pageArea.children[0];\n  }\n}\nclass Para extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"para\", true);\n    this.hAlign = getStringOption(attributes.hAlign, [\"left\", \"center\", \"justify\", \"justifyAll\", \"radix\", \"right\"]);\n    this.id = attributes.id || \"\";\n    this.lineHeight = attributes.lineHeight ? getMeasurement(attributes.lineHeight, \"0pt\") : \"\";\n    this.marginLeft = attributes.marginLeft ? getMeasurement(attributes.marginLeft, \"0pt\") : \"\";\n    this.marginRight = attributes.marginRight ? getMeasurement(attributes.marginRight, \"0pt\") : \"\";\n    this.orphans = getInteger({\n      data: attributes.orphans,\n      defaultValue: 0,\n      validate: x => x >= 0\n    });\n    this.preserve = attributes.preserve || \"\";\n    this.radixOffset = attributes.radixOffset ? getMeasurement(attributes.radixOffset, \"0pt\") : \"\";\n    this.spaceAbove = attributes.spaceAbove ? getMeasurement(attributes.spaceAbove, \"0pt\") : \"\";\n    this.spaceBelow = attributes.spaceBelow ? getMeasurement(attributes.spaceBelow, \"0pt\") : \"\";\n    this.tabDefault = attributes.tabDefault ? getMeasurement(this.tabDefault) : \"\";\n    this.tabStops = (attributes.tabStops || \"\").trim().split(/\\s+/).map((x, i) => i % 2 === 1 ? getMeasurement(x) : x);\n    this.textIndent = attributes.textIndent ? getMeasurement(attributes.textIndent, \"0pt\") : \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.vAlign = getStringOption(attributes.vAlign, [\"top\", \"bottom\", \"middle\"]);\n    this.widows = getInteger({\n      data: attributes.widows,\n      defaultValue: 0,\n      validate: x => x >= 0\n    });\n    this.hyphenation = null;\n  }\n  [$toStyle]() {\n    const style = toStyle(this, \"hAlign\");\n    if (this.marginLeft !== \"\") {\n      style.paddingLeft = measureToString(this.marginLeft);\n    }\n    if (this.marginRight !== \"\") {\n      style.paddingight = measureToString(this.marginRight);\n    }\n    if (this.spaceAbove !== \"\") {\n      style.paddingTop = measureToString(this.spaceAbove);\n    }\n    if (this.spaceBelow !== \"\") {\n      style.paddingBottom = measureToString(this.spaceBelow);\n    }\n    if (this.textIndent !== \"\") {\n      style.textIndent = measureToString(this.textIndent);\n      fixTextIndent(style);\n    }\n    if (this.lineHeight > 0) {\n      style.lineHeight = measureToString(this.lineHeight);\n    }\n    if (this.tabDefault !== \"\") {\n      style.tabSize = measureToString(this.tabDefault);\n    }\n    if (this.tabStops.length > 0) {}\n    if (this.hyphenatation) {\n      Object.assign(style, this.hyphenatation[$toStyle]());\n    }\n    return style;\n  }\n}\nclass PasswordEdit extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"passwordEdit\", true);\n    this.hScrollPolicy = getStringOption(attributes.hScrollPolicy, [\"auto\", \"off\", \"on\"]);\n    this.id = attributes.id || \"\";\n    this.passwordChar = attributes.passwordChar || \"*\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.border = null;\n    this.extras = null;\n    this.margin = null;\n  }\n}\nclass template_Pattern extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"pattern\", true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"crossHatch\", \"crossDiagonal\", \"diagonalLeft\", \"diagonalRight\", \"horizontal\", \"vertical\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.color = null;\n    this.extras = null;\n  }\n  [$toStyle](startColor) {\n    startColor = startColor ? startColor[$toStyle]() : \"#FFFFFF\";\n    const endColor = this.color ? this.color[$toStyle]() : \"#000000\";\n    const width = 5;\n    const cmd = \"repeating-linear-gradient\";\n    const colors = `${startColor},${startColor} ${width}px,${endColor} ${width}px,${endColor} ${2 * width}px`;\n    switch (this.type) {\n      case \"crossHatch\":\n        return `${cmd}(to top,${colors}) ${cmd}(to right,${colors})`;\n      case \"crossDiagonal\":\n        return `${cmd}(45deg,${colors}) ${cmd}(-45deg,${colors})`;\n      case \"diagonalLeft\":\n        return `${cmd}(45deg,${colors})`;\n      case \"diagonalRight\":\n        return `${cmd}(-45deg,${colors})`;\n      case \"horizontal\":\n        return `${cmd}(to top,${colors})`;\n      case \"vertical\":\n        return `${cmd}(to right,${colors})`;\n    }\n    return \"\";\n  }\n}\nclass Picture extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"picture\");\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass Proto extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"proto\", true);\n    this.appearanceFilter = new XFAObjectArray();\n    this.arc = new XFAObjectArray();\n    this.area = new XFAObjectArray();\n    this.assist = new XFAObjectArray();\n    this.barcode = new XFAObjectArray();\n    this.bindItems = new XFAObjectArray();\n    this.bookend = new XFAObjectArray();\n    this.boolean = new XFAObjectArray();\n    this.border = new XFAObjectArray();\n    this.break = new XFAObjectArray();\n    this.breakAfter = new XFAObjectArray();\n    this.breakBefore = new XFAObjectArray();\n    this.button = new XFAObjectArray();\n    this.calculate = new XFAObjectArray();\n    this.caption = new XFAObjectArray();\n    this.certificate = new XFAObjectArray();\n    this.certificates = new XFAObjectArray();\n    this.checkButton = new XFAObjectArray();\n    this.choiceList = new XFAObjectArray();\n    this.color = new XFAObjectArray();\n    this.comb = new XFAObjectArray();\n    this.connect = new XFAObjectArray();\n    this.contentArea = new XFAObjectArray();\n    this.corner = new XFAObjectArray();\n    this.date = new XFAObjectArray();\n    this.dateTime = new XFAObjectArray();\n    this.dateTimeEdit = new XFAObjectArray();\n    this.decimal = new XFAObjectArray();\n    this.defaultUi = new XFAObjectArray();\n    this.desc = new XFAObjectArray();\n    this.digestMethod = new XFAObjectArray();\n    this.digestMethods = new XFAObjectArray();\n    this.draw = new XFAObjectArray();\n    this.edge = new XFAObjectArray();\n    this.encoding = new XFAObjectArray();\n    this.encodings = new XFAObjectArray();\n    this.encrypt = new XFAObjectArray();\n    this.encryptData = new XFAObjectArray();\n    this.encryption = new XFAObjectArray();\n    this.encryptionMethod = new XFAObjectArray();\n    this.encryptionMethods = new XFAObjectArray();\n    this.event = new XFAObjectArray();\n    this.exData = new XFAObjectArray();\n    this.exObject = new XFAObjectArray();\n    this.exclGroup = new XFAObjectArray();\n    this.execute = new XFAObjectArray();\n    this.extras = new XFAObjectArray();\n    this.field = new XFAObjectArray();\n    this.fill = new XFAObjectArray();\n    this.filter = new XFAObjectArray();\n    this.float = new XFAObjectArray();\n    this.font = new XFAObjectArray();\n    this.format = new XFAObjectArray();\n    this.handler = new XFAObjectArray();\n    this.hyphenation = new XFAObjectArray();\n    this.image = new XFAObjectArray();\n    this.imageEdit = new XFAObjectArray();\n    this.integer = new XFAObjectArray();\n    this.issuers = new XFAObjectArray();\n    this.items = new XFAObjectArray();\n    this.keep = new XFAObjectArray();\n    this.keyUsage = new XFAObjectArray();\n    this.line = new XFAObjectArray();\n    this.linear = new XFAObjectArray();\n    this.lockDocument = new XFAObjectArray();\n    this.manifest = new XFAObjectArray();\n    this.margin = new XFAObjectArray();\n    this.mdp = new XFAObjectArray();\n    this.medium = new XFAObjectArray();\n    this.message = new XFAObjectArray();\n    this.numericEdit = new XFAObjectArray();\n    this.occur = new XFAObjectArray();\n    this.oid = new XFAObjectArray();\n    this.oids = new XFAObjectArray();\n    this.overflow = new XFAObjectArray();\n    this.pageArea = new XFAObjectArray();\n    this.pageSet = new XFAObjectArray();\n    this.para = new XFAObjectArray();\n    this.passwordEdit = new XFAObjectArray();\n    this.pattern = new XFAObjectArray();\n    this.picture = new XFAObjectArray();\n    this.radial = new XFAObjectArray();\n    this.reason = new XFAObjectArray();\n    this.reasons = new XFAObjectArray();\n    this.rectangle = new XFAObjectArray();\n    this.ref = new XFAObjectArray();\n    this.script = new XFAObjectArray();\n    this.setProperty = new XFAObjectArray();\n    this.signData = new XFAObjectArray();\n    this.signature = new XFAObjectArray();\n    this.signing = new XFAObjectArray();\n    this.solid = new XFAObjectArray();\n    this.speak = new XFAObjectArray();\n    this.stipple = new XFAObjectArray();\n    this.subform = new XFAObjectArray();\n    this.subformSet = new XFAObjectArray();\n    this.subjectDN = new XFAObjectArray();\n    this.subjectDNs = new XFAObjectArray();\n    this.submit = new XFAObjectArray();\n    this.text = new XFAObjectArray();\n    this.textEdit = new XFAObjectArray();\n    this.time = new XFAObjectArray();\n    this.timeStamp = new XFAObjectArray();\n    this.toolTip = new XFAObjectArray();\n    this.traversal = new XFAObjectArray();\n    this.traverse = new XFAObjectArray();\n    this.ui = new XFAObjectArray();\n    this.validate = new XFAObjectArray();\n    this.value = new XFAObjectArray();\n    this.variables = new XFAObjectArray();\n  }\n}\nclass Radial extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"radial\", true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"toEdge\", \"toCenter\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.color = null;\n    this.extras = null;\n  }\n  [$toStyle](startColor) {\n    startColor = startColor ? startColor[$toStyle]() : \"#FFFFFF\";\n    const endColor = this.color ? this.color[$toStyle]() : \"#000000\";\n    const colors = this.type === \"toEdge\" ? `${startColor},${endColor}` : `${endColor},${startColor}`;\n    return `radial-gradient(circle at center, ${colors})`;\n  }\n}\nclass Reason extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"reason\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass Reasons extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"reasons\", true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.reason = new XFAObjectArray();\n  }\n}\nclass Rectangle extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"rectangle\", true);\n    this.hand = getStringOption(attributes.hand, [\"even\", \"left\", \"right\"]);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.corner = new XFAObjectArray(4);\n    this.edge = new XFAObjectArray(4);\n    this.fill = null;\n  }\n  [$toHTML]() {\n    const edge = this.edge.children.length ? this.edge.children[0] : new Edge({});\n    const edgeStyle = edge[$toStyle]();\n    const style = Object.create(null);\n    if (this.fill?.presence === \"visible\") {\n      Object.assign(style, this.fill[$toStyle]());\n    } else {\n      style.fill = \"transparent\";\n    }\n    style.strokeWidth = measureToString(edge.presence === \"visible\" ? edge.thickness : 0);\n    style.stroke = edgeStyle.color;\n    const corner = this.corner.children.length ? this.corner.children[0] : new Corner({});\n    const cornerStyle = corner[$toStyle]();\n    const rect = {\n      name: \"rect\",\n      attributes: {\n        xmlns: SVG_NS,\n        width: \"100%\",\n        height: \"100%\",\n        x: 0,\n        y: 0,\n        rx: cornerStyle.radius,\n        ry: cornerStyle.radius,\n        style\n      }\n    };\n    const svg = {\n      name: \"svg\",\n      children: [rect],\n      attributes: {\n        xmlns: SVG_NS,\n        style: {\n          overflow: \"visible\"\n        },\n        width: \"100%\",\n        height: \"100%\"\n      }\n    };\n    const parent = this[$getParent]()[$getParent]();\n    if (hasMargin(parent)) {\n      return HTMLResult.success({\n        name: \"div\",\n        attributes: {\n          style: {\n            display: \"inline\",\n            width: \"100%\",\n            height: \"100%\"\n          }\n        },\n        children: [svg]\n      });\n    }\n    svg.attributes.style.position = \"absolute\";\n    return HTMLResult.success(svg);\n  }\n}\nclass RefElement extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"ref\");\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass Script extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"script\");\n    this.binding = attributes.binding || \"\";\n    this.contentType = attributes.contentType || \"\";\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.runAt = getStringOption(attributes.runAt, [\"client\", \"both\", \"server\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass SetProperty extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"setProperty\");\n    this.connection = attributes.connection || \"\";\n    this.ref = attributes.ref || \"\";\n    this.target = attributes.target || \"\";\n  }\n}\nclass SignData extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"signData\", true);\n    this.id = attributes.id || \"\";\n    this.operation = getStringOption(attributes.operation, [\"sign\", \"clear\", \"verify\"]);\n    this.ref = attributes.ref || \"\";\n    this.target = attributes.target || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.filter = null;\n    this.manifest = null;\n  }\n}\nclass Signature extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"signature\", true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"PDF1.3\", \"PDF1.6\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.border = null;\n    this.extras = null;\n    this.filter = null;\n    this.manifest = null;\n    this.margin = null;\n  }\n}\nclass Signing extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"signing\", true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.certificate = new XFAObjectArray();\n  }\n}\nclass Solid extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"solid\", true);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n  }\n  [$toStyle](startColor) {\n    return startColor ? startColor[$toStyle]() : \"#FFFFFF\";\n  }\n}\nclass Speak extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"speak\");\n    this.disable = getInteger({\n      data: attributes.disable,\n      defaultValue: 0,\n      validate: x => x === 1\n    });\n    this.id = attributes.id || \"\";\n    this.priority = getStringOption(attributes.priority, [\"custom\", \"caption\", \"name\", \"toolTip\"]);\n    this.rid = attributes.rid || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass Stipple extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"stipple\", true);\n    this.id = attributes.id || \"\";\n    this.rate = getInteger({\n      data: attributes.rate,\n      defaultValue: 50,\n      validate: x => x >= 0 && x <= 100\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.color = null;\n    this.extras = null;\n  }\n  [$toStyle](bgColor) {\n    const alpha = this.rate / 100;\n    return Util.makeHexColor(Math.round(bgColor.value.r * (1 - alpha) + this.value.r * alpha), Math.round(bgColor.value.g * (1 - alpha) + this.value.g * alpha), Math.round(bgColor.value.b * (1 - alpha) + this.value.b * alpha));\n  }\n}\nclass Subform extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"subform\", true);\n    this.access = getStringOption(attributes.access, [\"open\", \"nonInteractive\", \"protected\", \"readOnly\"]);\n    this.allowMacro = getInteger({\n      data: attributes.allowMacro,\n      defaultValue: 0,\n      validate: x => x === 1\n    });\n    this.anchorType = getStringOption(attributes.anchorType, [\"topLeft\", \"bottomCenter\", \"bottomLeft\", \"bottomRight\", \"middleCenter\", \"middleLeft\", \"middleRight\", \"topCenter\", \"topRight\"]);\n    this.colSpan = getInteger({\n      data: attributes.colSpan,\n      defaultValue: 1,\n      validate: n => n >= 1 || n === -1\n    });\n    this.columnWidths = (attributes.columnWidths || \"\").trim().split(/\\s+/).map(x => x === \"-1\" ? -1 : getMeasurement(x));\n    this.h = attributes.h ? getMeasurement(attributes.h) : \"\";\n    this.hAlign = getStringOption(attributes.hAlign, [\"left\", \"center\", \"justify\", \"justifyAll\", \"radix\", \"right\"]);\n    this.id = attributes.id || \"\";\n    this.layout = getStringOption(attributes.layout, [\"position\", \"lr-tb\", \"rl-row\", \"rl-tb\", \"row\", \"table\", \"tb\"]);\n    this.locale = attributes.locale || \"\";\n    this.maxH = getMeasurement(attributes.maxH, \"0pt\");\n    this.maxW = getMeasurement(attributes.maxW, \"0pt\");\n    this.mergeMode = getStringOption(attributes.mergeMode, [\"consumeData\", \"matchTemplate\"]);\n    this.minH = getMeasurement(attributes.minH, \"0pt\");\n    this.minW = getMeasurement(attributes.minW, \"0pt\");\n    this.name = attributes.name || \"\";\n    this.presence = getStringOption(attributes.presence, [\"visible\", \"hidden\", \"inactive\", \"invisible\"]);\n    this.relevant = getRelevant(attributes.relevant);\n    this.restoreState = getStringOption(attributes.restoreState, [\"manual\", \"auto\"]);\n    this.scope = getStringOption(attributes.scope, [\"name\", \"none\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.w = attributes.w ? getMeasurement(attributes.w) : \"\";\n    this.x = getMeasurement(attributes.x, \"0pt\");\n    this.y = getMeasurement(attributes.y, \"0pt\");\n    this.assist = null;\n    this.bind = null;\n    this.bookend = null;\n    this.border = null;\n    this.break = null;\n    this.calculate = null;\n    this.desc = null;\n    this.extras = null;\n    this.keep = null;\n    this.margin = null;\n    this.occur = null;\n    this.overflow = null;\n    this.pageSet = null;\n    this.para = null;\n    this.traversal = null;\n    this.validate = null;\n    this.variables = null;\n    this.area = new XFAObjectArray();\n    this.breakAfter = new XFAObjectArray();\n    this.breakBefore = new XFAObjectArray();\n    this.connect = new XFAObjectArray();\n    this.draw = new XFAObjectArray();\n    this.event = new XFAObjectArray();\n    this.exObject = new XFAObjectArray();\n    this.exclGroup = new XFAObjectArray();\n    this.field = new XFAObjectArray();\n    this.proto = new XFAObjectArray();\n    this.setProperty = new XFAObjectArray();\n    this.subform = new XFAObjectArray();\n    this.subformSet = new XFAObjectArray();\n  }\n  [$getSubformParent]() {\n    const parent = this[$getParent]();\n    if (parent instanceof SubformSet) {\n      return parent[$getSubformParent]();\n    }\n    return parent;\n  }\n  [$isBindable]() {\n    return true;\n  }\n  [$isThereMoreWidth]() {\n    return this.layout.endsWith(\"-tb\") && this[$extra].attempt === 0 && this[$extra].numberInLine > 0 || this[$getParent]()[$isThereMoreWidth]();\n  }\n  *[$getContainedChildren]() {\n    yield* getContainedChildren(this);\n  }\n  [$flushHTML]() {\n    return flushHTML(this);\n  }\n  [$addHTML](html, bbox) {\n    addHTML(this, html, bbox);\n  }\n  [$getAvailableSpace]() {\n    return getAvailableSpace(this);\n  }\n  [$isSplittable]() {\n    const parent = this[$getSubformParent]();\n    if (!parent[$isSplittable]()) {\n      return false;\n    }\n    if (this[$extra]._isSplittable !== undefined) {\n      return this[$extra]._isSplittable;\n    }\n    if (this.layout === \"position\" || this.layout.includes(\"row\")) {\n      this[$extra]._isSplittable = false;\n      return false;\n    }\n    if (this.keep && this.keep.intact !== \"none\") {\n      this[$extra]._isSplittable = false;\n      return false;\n    }\n    if (parent.layout?.endsWith(\"-tb\") && parent[$extra].numberInLine !== 0) {\n      return false;\n    }\n    this[$extra]._isSplittable = true;\n    return true;\n  }\n  [$toHTML](availableSpace) {\n    setTabIndex(this);\n    if (this.break) {\n      if (this.break.after !== \"auto\" || this.break.afterTarget !== \"\") {\n        const node = new BreakAfter({\n          targetType: this.break.after,\n          target: this.break.afterTarget,\n          startNew: this.break.startNew.toString()\n        });\n        node[$globalData] = this[$globalData];\n        this[$appendChild](node);\n        this.breakAfter.push(node);\n      }\n      if (this.break.before !== \"auto\" || this.break.beforeTarget !== \"\") {\n        const node = new BreakBefore({\n          targetType: this.break.before,\n          target: this.break.beforeTarget,\n          startNew: this.break.startNew.toString()\n        });\n        node[$globalData] = this[$globalData];\n        this[$appendChild](node);\n        this.breakBefore.push(node);\n      }\n      if (this.break.overflowTarget !== \"\") {\n        const node = new Overflow({\n          target: this.break.overflowTarget,\n          leader: this.break.overflowLeader,\n          trailer: this.break.overflowTrailer\n        });\n        node[$globalData] = this[$globalData];\n        this[$appendChild](node);\n        this.overflow.push(node);\n      }\n      this[$removeChild](this.break);\n      this.break = null;\n    }\n    if (this.presence === \"hidden\" || this.presence === \"inactive\") {\n      return HTMLResult.EMPTY;\n    }\n    if (this.breakBefore.children.length > 1 || this.breakAfter.children.length > 1) {\n      warn(\"XFA - Several breakBefore or breakAfter in subforms: please file a bug.\");\n    }\n    if (this.breakBefore.children.length >= 1) {\n      const breakBefore = this.breakBefore.children[0];\n      if (handleBreak(breakBefore)) {\n        return HTMLResult.breakNode(breakBefore);\n      }\n    }\n    if (this[$extra]?.afterBreakAfter) {\n      return HTMLResult.EMPTY;\n    }\n    fixDimensions(this);\n    const children = [];\n    const attributes = {\n      id: this[$uid],\n      class: []\n    };\n    setAccess(this, attributes.class);\n    if (!this[$extra]) {\n      this[$extra] = Object.create(null);\n    }\n    Object.assign(this[$extra], {\n      children,\n      line: null,\n      attributes,\n      attempt: 0,\n      numberInLine: 0,\n      availableSpace: {\n        width: Math.min(this.w || Infinity, availableSpace.width),\n        height: Math.min(this.h || Infinity, availableSpace.height)\n      },\n      width: 0,\n      height: 0,\n      prevHeight: 0,\n      currentWidth: 0\n    });\n    const root = this[$getTemplateRoot]();\n    const savedNoLayoutFailure = root[$extra].noLayoutFailure;\n    const isSplittable = this[$isSplittable]();\n    if (!isSplittable) {\n      setFirstUnsplittable(this);\n    }\n    if (!checkDimensions(this, availableSpace)) {\n      return HTMLResult.FAILURE;\n    }\n    const filter = new Set([\"area\", \"draw\", \"exclGroup\", \"field\", \"subform\", \"subformSet\"]);\n    if (this.layout.includes(\"row\")) {\n      const columnWidths = this[$getSubformParent]().columnWidths;\n      if (Array.isArray(columnWidths) && columnWidths.length > 0) {\n        this[$extra].columnWidths = columnWidths;\n        this[$extra].currentColumn = 0;\n      }\n    }\n    const style = toStyle(this, \"anchorType\", \"dimensions\", \"position\", \"presence\", \"border\", \"margin\", \"hAlign\");\n    const classNames = [\"xfaSubform\"];\n    const cl = layoutClass(this);\n    if (cl) {\n      classNames.push(cl);\n    }\n    attributes.style = style;\n    attributes.class = classNames;\n    if (this.name) {\n      attributes.xfaName = this.name;\n    }\n    if (this.overflow) {\n      const overflowExtra = this.overflow[$getExtra]();\n      if (overflowExtra.addLeader) {\n        overflowExtra.addLeader = false;\n        handleOverflow(this, overflowExtra.leader, availableSpace);\n      }\n    }\n    this[$pushPara]();\n    const isLrTb = this.layout === \"lr-tb\" || this.layout === \"rl-tb\";\n    const maxRun = isLrTb ? MAX_ATTEMPTS_FOR_LRTB_LAYOUT : 1;\n    for (; this[$extra].attempt < maxRun; this[$extra].attempt++) {\n      if (isLrTb && this[$extra].attempt === MAX_ATTEMPTS_FOR_LRTB_LAYOUT - 1) {\n        this[$extra].numberInLine = 0;\n      }\n      const result = this[$childrenToHTML]({\n        filter,\n        include: true\n      });\n      if (result.success) {\n        break;\n      }\n      if (result.isBreak()) {\n        this[$popPara]();\n        return result;\n      }\n      if (isLrTb && this[$extra].attempt === 0 && this[$extra].numberInLine === 0 && !root[$extra].noLayoutFailure) {\n        this[$extra].attempt = maxRun;\n        break;\n      }\n    }\n    this[$popPara]();\n    if (!isSplittable) {\n      unsetFirstUnsplittable(this);\n    }\n    root[$extra].noLayoutFailure = savedNoLayoutFailure;\n    if (this[$extra].attempt === maxRun) {\n      if (this.overflow) {\n        this[$getTemplateRoot]()[$extra].overflowNode = this.overflow;\n      }\n      if (!isSplittable) {\n        delete this[$extra];\n      }\n      return HTMLResult.FAILURE;\n    }\n    if (this.overflow) {\n      const overflowExtra = this.overflow[$getExtra]();\n      if (overflowExtra.addTrailer) {\n        overflowExtra.addTrailer = false;\n        handleOverflow(this, overflowExtra.trailer, availableSpace);\n      }\n    }\n    let marginH = 0;\n    let marginV = 0;\n    if (this.margin) {\n      marginH = this.margin.leftInset + this.margin.rightInset;\n      marginV = this.margin.topInset + this.margin.bottomInset;\n    }\n    const width = Math.max(this[$extra].width + marginH, this.w || 0);\n    const height = Math.max(this[$extra].height + marginV, this.h || 0);\n    const bbox = [this.x, this.y, width, height];\n    if (this.w === \"\") {\n      style.width = measureToString(width);\n    }\n    if (this.h === \"\") {\n      style.height = measureToString(height);\n    }\n    if ((style.width === \"0px\" || style.height === \"0px\") && children.length === 0) {\n      return HTMLResult.EMPTY;\n    }\n    const html = {\n      name: \"div\",\n      attributes,\n      children\n    };\n    applyAssist(this, attributes);\n    const result = HTMLResult.success(createWrapper(this, html), bbox);\n    if (this.breakAfter.children.length >= 1) {\n      const breakAfter = this.breakAfter.children[0];\n      if (handleBreak(breakAfter)) {\n        this[$extra].afterBreakAfter = result;\n        return HTMLResult.breakNode(breakAfter);\n      }\n    }\n    delete this[$extra];\n    return result;\n  }\n}\nclass SubformSet extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"subformSet\", true);\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.relation = getStringOption(attributes.relation, [\"ordered\", \"choice\", \"unordered\"]);\n    this.relevant = getRelevant(attributes.relevant);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.bookend = null;\n    this.break = null;\n    this.desc = null;\n    this.extras = null;\n    this.occur = null;\n    this.overflow = null;\n    this.breakAfter = new XFAObjectArray();\n    this.breakBefore = new XFAObjectArray();\n    this.subform = new XFAObjectArray();\n    this.subformSet = new XFAObjectArray();\n  }\n  *[$getContainedChildren]() {\n    yield* getContainedChildren(this);\n  }\n  [$getSubformParent]() {\n    let parent = this[$getParent]();\n    while (!(parent instanceof Subform)) {\n      parent = parent[$getParent]();\n    }\n    return parent;\n  }\n  [$isBindable]() {\n    return true;\n  }\n}\nclass SubjectDN extends ContentObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"subjectDN\");\n    this.delimiter = attributes.delimiter || \",\";\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n  [$finalize]() {\n    this[$content] = new Map(this[$content].split(this.delimiter).map(kv => {\n      kv = kv.split(\"=\", 2);\n      kv[0] = kv[0].trim();\n      return kv;\n    }));\n  }\n}\nclass SubjectDNs extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"subjectDNs\", true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.subjectDN = new XFAObjectArray();\n  }\n}\nclass Submit extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"submit\", true);\n    this.embedPDF = getInteger({\n      data: attributes.embedPDF,\n      defaultValue: 0,\n      validate: x => x === 1\n    });\n    this.format = getStringOption(attributes.format, [\"xdp\", \"formdata\", \"pdf\", \"urlencoded\", \"xfd\", \"xml\"]);\n    this.id = attributes.id || \"\";\n    this.target = attributes.target || \"\";\n    this.textEncoding = getKeyword({\n      data: attributes.textEncoding ? attributes.textEncoding.toLowerCase() : \"\",\n      defaultValue: \"\",\n      validate: k => [\"utf-8\", \"big-five\", \"fontspecific\", \"gbk\", \"gb-18030\", \"gb-2312\", \"ksc-5601\", \"none\", \"shift-jis\", \"ucs-2\", \"utf-16\"].includes(k) || k.match(/iso-8859-\\d{2}/)\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.xdpContent = attributes.xdpContent || \"\";\n    this.encrypt = null;\n    this.encryptData = new XFAObjectArray();\n    this.signData = new XFAObjectArray();\n  }\n}\nclass Template extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"template\", true);\n    this.baseProfile = getStringOption(attributes.baseProfile, [\"full\", \"interactiveForms\"]);\n    this.extras = null;\n    this.subform = new XFAObjectArray();\n  }\n  [$finalize]() {\n    if (this.subform.children.length === 0) {\n      warn(\"XFA - No subforms in template node.\");\n    }\n    if (this.subform.children.length >= 2) {\n      warn(\"XFA - Several subforms in template node: please file a bug.\");\n    }\n    this[$tabIndex] = DEFAULT_TAB_INDEX;\n  }\n  [$isSplittable]() {\n    return true;\n  }\n  [$searchNode](expr, container) {\n    if (expr.startsWith(\"#\")) {\n      return [this[$ids].get(expr.slice(1))];\n    }\n    return searchNode(this, container, expr, true, true);\n  }\n  *[$toPages]() {\n    if (!this.subform.children.length) {\n      return HTMLResult.success({\n        name: \"div\",\n        children: []\n      });\n    }\n    this[$extra] = {\n      overflowNode: null,\n      firstUnsplittable: null,\n      currentContentArea: null,\n      currentPageArea: null,\n      noLayoutFailure: false,\n      pageNumber: 1,\n      pagePosition: \"first\",\n      oddOrEven: \"odd\",\n      blankOrNotBlank: \"nonBlank\",\n      paraStack: []\n    };\n    const root = this.subform.children[0];\n    root.pageSet[$cleanPage]();\n    const pageAreas = root.pageSet.pageArea.children;\n    const mainHtml = {\n      name: \"div\",\n      children: []\n    };\n    let pageArea = null;\n    let breakBefore = null;\n    let breakBeforeTarget = null;\n    if (root.breakBefore.children.length >= 1) {\n      breakBefore = root.breakBefore.children[0];\n      breakBeforeTarget = breakBefore.target;\n    } else if (root.subform.children.length >= 1 && root.subform.children[0].breakBefore.children.length >= 1) {\n      breakBefore = root.subform.children[0].breakBefore.children[0];\n      breakBeforeTarget = breakBefore.target;\n    } else if (root.break?.beforeTarget) {\n      breakBefore = root.break;\n      breakBeforeTarget = breakBefore.beforeTarget;\n    } else if (root.subform.children.length >= 1 && root.subform.children[0].break?.beforeTarget) {\n      breakBefore = root.subform.children[0].break;\n      breakBeforeTarget = breakBefore.beforeTarget;\n    }\n    if (breakBefore) {\n      const target = this[$searchNode](breakBeforeTarget, breakBefore[$getParent]());\n      if (target instanceof PageArea) {\n        pageArea = target;\n        breakBefore[$extra] = {};\n      }\n    }\n    if (!pageArea) {\n      pageArea = pageAreas[0];\n    }\n    pageArea[$extra] = {\n      numberOfUse: 1\n    };\n    const pageAreaParent = pageArea[$getParent]();\n    pageAreaParent[$extra] = {\n      numberOfUse: 1,\n      pageIndex: pageAreaParent.pageArea.children.indexOf(pageArea),\n      pageSetIndex: 0\n    };\n    let targetPageArea;\n    let leader = null;\n    let trailer = null;\n    let hasSomething = true;\n    let hasSomethingCounter = 0;\n    let startIndex = 0;\n    while (true) {\n      if (!hasSomething) {\n        mainHtml.children.pop();\n        if (++hasSomethingCounter === MAX_EMPTY_PAGES) {\n          warn(\"XFA - Something goes wrong: please file a bug.\");\n          return mainHtml;\n        }\n      } else {\n        hasSomethingCounter = 0;\n      }\n      targetPageArea = null;\n      this[$extra].currentPageArea = pageArea;\n      const page = pageArea[$toHTML]().html;\n      mainHtml.children.push(page);\n      if (leader) {\n        this[$extra].noLayoutFailure = true;\n        page.children.push(leader[$toHTML](pageArea[$extra].space).html);\n        leader = null;\n      }\n      if (trailer) {\n        this[$extra].noLayoutFailure = true;\n        page.children.push(trailer[$toHTML](pageArea[$extra].space).html);\n        trailer = null;\n      }\n      const contentAreas = pageArea.contentArea.children;\n      const htmlContentAreas = page.children.filter(node => node.attributes.class.includes(\"xfaContentarea\"));\n      hasSomething = false;\n      this[$extra].firstUnsplittable = null;\n      this[$extra].noLayoutFailure = false;\n      const flush = index => {\n        const html = root[$flushHTML]();\n        if (html) {\n          hasSomething ||= html.children?.length > 0;\n          htmlContentAreas[index].children.push(html);\n        }\n      };\n      for (let i = startIndex, ii = contentAreas.length; i < ii; i++) {\n        const contentArea = this[$extra].currentContentArea = contentAreas[i];\n        const space = {\n          width: contentArea.w,\n          height: contentArea.h\n        };\n        startIndex = 0;\n        if (leader) {\n          htmlContentAreas[i].children.push(leader[$toHTML](space).html);\n          leader = null;\n        }\n        if (trailer) {\n          htmlContentAreas[i].children.push(trailer[$toHTML](space).html);\n          trailer = null;\n        }\n        const html = root[$toHTML](space);\n        if (html.success) {\n          if (html.html) {\n            hasSomething ||= html.html.children?.length > 0;\n            htmlContentAreas[i].children.push(html.html);\n          } else if (!hasSomething && mainHtml.children.length > 1) {\n            mainHtml.children.pop();\n          }\n          return mainHtml;\n        }\n        if (html.isBreak()) {\n          const node = html.breakNode;\n          flush(i);\n          if (node.targetType === \"auto\") {\n            continue;\n          }\n          if (node.leader) {\n            leader = this[$searchNode](node.leader, node[$getParent]());\n            leader = leader ? leader[0] : null;\n          }\n          if (node.trailer) {\n            trailer = this[$searchNode](node.trailer, node[$getParent]());\n            trailer = trailer ? trailer[0] : null;\n          }\n          if (node.targetType === \"pageArea\") {\n            targetPageArea = node[$extra].target;\n            i = Infinity;\n          } else if (!node[$extra].target) {\n            i = node[$extra].index;\n          } else {\n            targetPageArea = node[$extra].target;\n            startIndex = node[$extra].index + 1;\n            i = Infinity;\n          }\n          continue;\n        }\n        if (this[$extra].overflowNode) {\n          const node = this[$extra].overflowNode;\n          this[$extra].overflowNode = null;\n          const overflowExtra = node[$getExtra]();\n          const target = overflowExtra.target;\n          overflowExtra.addLeader = overflowExtra.leader !== null;\n          overflowExtra.addTrailer = overflowExtra.trailer !== null;\n          flush(i);\n          const currentIndex = i;\n          i = Infinity;\n          if (target instanceof PageArea) {\n            targetPageArea = target;\n          } else if (target instanceof ContentArea) {\n            const index = contentAreas.indexOf(target);\n            if (index !== -1) {\n              if (index > currentIndex) {\n                i = index - 1;\n              } else {\n                startIndex = index;\n              }\n            } else {\n              targetPageArea = target[$getParent]();\n              startIndex = targetPageArea.contentArea.children.indexOf(target);\n            }\n          }\n          continue;\n        }\n        flush(i);\n      }\n      this[$extra].pageNumber += 1;\n      if (targetPageArea) {\n        if (targetPageArea[$isUsable]()) {\n          targetPageArea[$extra].numberOfUse += 1;\n        } else {\n          targetPageArea = null;\n        }\n      }\n      pageArea = targetPageArea || pageArea[$getNextPage]();\n      yield null;\n    }\n  }\n}\nclass Text extends ContentObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"text\");\n    this.id = attributes.id || \"\";\n    this.maxChars = getInteger({\n      data: attributes.maxChars,\n      defaultValue: 0,\n      validate: x => x >= 0\n    });\n    this.name = attributes.name || \"\";\n    this.rid = attributes.rid || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n  [$acceptWhitespace]() {\n    return true;\n  }\n  [$onChild](child) {\n    if (child[$namespaceId] === NamespaceIds.xhtml.id) {\n      this[$content] = child;\n      return true;\n    }\n    warn(`XFA - Invalid content in Text: ${child[$nodeName]}.`);\n    return false;\n  }\n  [$onText](str) {\n    if (this[$content] instanceof XFAObject) {\n      return;\n    }\n    super[$onText](str);\n  }\n  [$finalize]() {\n    if (typeof this[$content] === \"string\") {\n      this[$content] = this[$content].replaceAll(\"\\r\\n\", \"\\n\");\n    }\n  }\n  [$getExtra]() {\n    if (typeof this[$content] === \"string\") {\n      return this[$content].split(/[\\u2029\\u2028\\n]/).reduce((acc, line) => {\n        if (line) {\n          acc.push(line);\n        }\n        return acc;\n      }, []).join(\"\\n\");\n    }\n    return this[$content][$text]();\n  }\n  [$toHTML](availableSpace) {\n    if (typeof this[$content] === \"string\") {\n      const html = valueToHtml(this[$content]).html;\n      if (this[$content].includes(\"\\u2029\")) {\n        html.name = \"div\";\n        html.children = [];\n        this[$content].split(\"\\u2029\").map(para => para.split(/[\\u2028\\n]/).reduce((acc, line) => {\n          acc.push({\n            name: \"span\",\n            value: line\n          }, {\n            name: \"br\"\n          });\n          return acc;\n        }, [])).forEach(lines => {\n          html.children.push({\n            name: \"p\",\n            children: lines\n          });\n        });\n      } else if (/[\\u2028\\n]/.test(this[$content])) {\n        html.name = \"div\";\n        html.children = [];\n        this[$content].split(/[\\u2028\\n]/).forEach(line => {\n          html.children.push({\n            name: \"span\",\n            value: line\n          }, {\n            name: \"br\"\n          });\n        });\n      }\n      return HTMLResult.success(html);\n    }\n    return this[$content][$toHTML](availableSpace);\n  }\n}\nclass TextEdit extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"textEdit\", true);\n    this.allowRichText = getInteger({\n      data: attributes.allowRichText,\n      defaultValue: 0,\n      validate: x => x === 1\n    });\n    this.hScrollPolicy = getStringOption(attributes.hScrollPolicy, [\"auto\", \"off\", \"on\"]);\n    this.id = attributes.id || \"\";\n    this.multiLine = getInteger({\n      data: attributes.multiLine,\n      defaultValue: \"\",\n      validate: x => x === 0 || x === 1\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.vScrollPolicy = getStringOption(attributes.vScrollPolicy, [\"auto\", \"off\", \"on\"]);\n    this.border = null;\n    this.comb = null;\n    this.extras = null;\n    this.margin = null;\n  }\n  [$toHTML](availableSpace) {\n    const style = toStyle(this, \"border\", \"font\", \"margin\");\n    let html;\n    const field = this[$getParent]()[$getParent]();\n    if (this.multiLine === \"\") {\n      this.multiLine = field instanceof Draw ? 1 : 0;\n    }\n    if (this.multiLine === 1) {\n      html = {\n        name: \"textarea\",\n        attributes: {\n          dataId: field[$data]?.[$uid] || field[$uid],\n          fieldId: field[$uid],\n          class: [\"xfaTextfield\"],\n          style,\n          \"aria-label\": ariaLabel(field),\n          \"aria-required\": false\n        }\n      };\n    } else {\n      html = {\n        name: \"input\",\n        attributes: {\n          type: \"text\",\n          dataId: field[$data]?.[$uid] || field[$uid],\n          fieldId: field[$uid],\n          class: [\"xfaTextfield\"],\n          style,\n          \"aria-label\": ariaLabel(field),\n          \"aria-required\": false\n        }\n      };\n    }\n    if (isRequired(field)) {\n      html.attributes[\"aria-required\"] = true;\n      html.attributes.required = true;\n    }\n    return HTMLResult.success({\n      name: \"label\",\n      attributes: {\n        class: [\"xfaLabel\"]\n      },\n      children: [html]\n    });\n  }\n}\nclass Time extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"time\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n  [$finalize]() {\n    const date = this[$content].trim();\n    this[$content] = date ? new Date(date) : null;\n  }\n  [$toHTML](availableSpace) {\n    return valueToHtml(this[$content] ? this[$content].toString() : \"\");\n  }\n}\nclass TimeStamp extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"timeStamp\");\n    this.id = attributes.id || \"\";\n    this.server = attributes.server || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass ToolTip extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"toolTip\");\n    this.id = attributes.id || \"\";\n    this.rid = attributes.rid || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass Traversal extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"traversal\", true);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n    this.traverse = new XFAObjectArray();\n  }\n}\nclass Traverse extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"traverse\", true);\n    this.id = attributes.id || \"\";\n    this.operation = getStringOption(attributes.operation, [\"next\", \"back\", \"down\", \"first\", \"left\", \"right\", \"up\"]);\n    this.ref = attributes.ref || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n    this.script = null;\n  }\n  get name() {\n    return this.operation;\n  }\n  [$isTransparent]() {\n    return false;\n  }\n}\nclass Ui extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"ui\", true);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n    this.picture = null;\n    this.barcode = null;\n    this.button = null;\n    this.checkButton = null;\n    this.choiceList = null;\n    this.dateTimeEdit = null;\n    this.defaultUi = null;\n    this.imageEdit = null;\n    this.numericEdit = null;\n    this.passwordEdit = null;\n    this.signature = null;\n    this.textEdit = null;\n  }\n  [$getExtra]() {\n    if (this[$extra] === undefined) {\n      for (const name of Object.getOwnPropertyNames(this)) {\n        if (name === \"extras\" || name === \"picture\") {\n          continue;\n        }\n        const obj = this[name];\n        if (!(obj instanceof XFAObject)) {\n          continue;\n        }\n        this[$extra] = obj;\n        return obj;\n      }\n      this[$extra] = null;\n    }\n    return this[$extra];\n  }\n  [$toHTML](availableSpace) {\n    const obj = this[$getExtra]();\n    if (obj) {\n      return obj[$toHTML](availableSpace);\n    }\n    return HTMLResult.EMPTY;\n  }\n}\nclass Validate extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"validate\", true);\n    this.formatTest = getStringOption(attributes.formatTest, [\"warning\", \"disabled\", \"error\"]);\n    this.id = attributes.id || \"\";\n    this.nullTest = getStringOption(attributes.nullTest, [\"disabled\", \"error\", \"warning\"]);\n    this.scriptTest = getStringOption(attributes.scriptTest, [\"error\", \"disabled\", \"warning\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n    this.message = null;\n    this.picture = null;\n    this.script = null;\n  }\n}\nclass Value extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"value\", true);\n    this.id = attributes.id || \"\";\n    this.override = getInteger({\n      data: attributes.override,\n      defaultValue: 0,\n      validate: x => x === 1\n    });\n    this.relevant = getRelevant(attributes.relevant);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.arc = null;\n    this.boolean = null;\n    this.date = null;\n    this.dateTime = null;\n    this.decimal = null;\n    this.exData = null;\n    this.float = null;\n    this.image = null;\n    this.integer = null;\n    this.line = null;\n    this.rectangle = null;\n    this.text = null;\n    this.time = null;\n  }\n  [$setValue](value) {\n    const parent = this[$getParent]();\n    if (parent instanceof Field) {\n      if (parent.ui?.imageEdit) {\n        if (!this.image) {\n          this.image = new Image({});\n          this[$appendChild](this.image);\n        }\n        this.image[$content] = value[$content];\n        return;\n      }\n    }\n    const valueName = value[$nodeName];\n    if (this[valueName] !== null) {\n      this[valueName][$content] = value[$content];\n      return;\n    }\n    for (const name of Object.getOwnPropertyNames(this)) {\n      const obj = this[name];\n      if (obj instanceof XFAObject) {\n        this[name] = null;\n        this[$removeChild](obj);\n      }\n    }\n    this[value[$nodeName]] = value;\n    this[$appendChild](value);\n  }\n  [$text]() {\n    if (this.exData) {\n      if (typeof this.exData[$content] === \"string\") {\n        return this.exData[$content].trim();\n      }\n      return this.exData[$content][$text]().trim();\n    }\n    for (const name of Object.getOwnPropertyNames(this)) {\n      if (name === \"image\") {\n        continue;\n      }\n      const obj = this[name];\n      if (obj instanceof XFAObject) {\n        return (obj[$content] || \"\").toString().trim();\n      }\n    }\n    return null;\n  }\n  [$toHTML](availableSpace) {\n    for (const name of Object.getOwnPropertyNames(this)) {\n      const obj = this[name];\n      if (!(obj instanceof XFAObject)) {\n        continue;\n      }\n      return obj[$toHTML](availableSpace);\n    }\n    return HTMLResult.EMPTY;\n  }\n}\nclass Variables extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"variables\", true);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.boolean = new XFAObjectArray();\n    this.date = new XFAObjectArray();\n    this.dateTime = new XFAObjectArray();\n    this.decimal = new XFAObjectArray();\n    this.exData = new XFAObjectArray();\n    this.float = new XFAObjectArray();\n    this.image = new XFAObjectArray();\n    this.integer = new XFAObjectArray();\n    this.manifest = new XFAObjectArray();\n    this.script = new XFAObjectArray();\n    this.text = new XFAObjectArray();\n    this.time = new XFAObjectArray();\n  }\n  [$isTransparent]() {\n    return true;\n  }\n}\nclass TemplateNamespace {\n  static [$buildXFAObject](name, attributes) {\n    if (TemplateNamespace.hasOwnProperty(name)) {\n      const node = TemplateNamespace[name](attributes);\n      node[$setSetAttributes](attributes);\n      return node;\n    }\n    return undefined;\n  }\n  static appearanceFilter(attrs) {\n    return new AppearanceFilter(attrs);\n  }\n  static arc(attrs) {\n    return new Arc(attrs);\n  }\n  static area(attrs) {\n    return new Area(attrs);\n  }\n  static assist(attrs) {\n    return new Assist(attrs);\n  }\n  static barcode(attrs) {\n    return new Barcode(attrs);\n  }\n  static bind(attrs) {\n    return new Bind(attrs);\n  }\n  static bindItems(attrs) {\n    return new BindItems(attrs);\n  }\n  static bookend(attrs) {\n    return new Bookend(attrs);\n  }\n  static boolean(attrs) {\n    return new BooleanElement(attrs);\n  }\n  static border(attrs) {\n    return new Border(attrs);\n  }\n  static break(attrs) {\n    return new Break(attrs);\n  }\n  static breakAfter(attrs) {\n    return new BreakAfter(attrs);\n  }\n  static breakBefore(attrs) {\n    return new BreakBefore(attrs);\n  }\n  static button(attrs) {\n    return new Button(attrs);\n  }\n  static calculate(attrs) {\n    return new Calculate(attrs);\n  }\n  static caption(attrs) {\n    return new Caption(attrs);\n  }\n  static certificate(attrs) {\n    return new Certificate(attrs);\n  }\n  static certificates(attrs) {\n    return new Certificates(attrs);\n  }\n  static checkButton(attrs) {\n    return new CheckButton(attrs);\n  }\n  static choiceList(attrs) {\n    return new ChoiceList(attrs);\n  }\n  static color(attrs) {\n    return new Color(attrs);\n  }\n  static comb(attrs) {\n    return new Comb(attrs);\n  }\n  static connect(attrs) {\n    return new Connect(attrs);\n  }\n  static contentArea(attrs) {\n    return new ContentArea(attrs);\n  }\n  static corner(attrs) {\n    return new Corner(attrs);\n  }\n  static date(attrs) {\n    return new DateElement(attrs);\n  }\n  static dateTime(attrs) {\n    return new DateTime(attrs);\n  }\n  static dateTimeEdit(attrs) {\n    return new DateTimeEdit(attrs);\n  }\n  static decimal(attrs) {\n    return new Decimal(attrs);\n  }\n  static defaultUi(attrs) {\n    return new DefaultUi(attrs);\n  }\n  static desc(attrs) {\n    return new Desc(attrs);\n  }\n  static digestMethod(attrs) {\n    return new DigestMethod(attrs);\n  }\n  static digestMethods(attrs) {\n    return new DigestMethods(attrs);\n  }\n  static draw(attrs) {\n    return new Draw(attrs);\n  }\n  static edge(attrs) {\n    return new Edge(attrs);\n  }\n  static encoding(attrs) {\n    return new Encoding(attrs);\n  }\n  static encodings(attrs) {\n    return new Encodings(attrs);\n  }\n  static encrypt(attrs) {\n    return new Encrypt(attrs);\n  }\n  static encryptData(attrs) {\n    return new EncryptData(attrs);\n  }\n  static encryption(attrs) {\n    return new Encryption(attrs);\n  }\n  static encryptionMethod(attrs) {\n    return new EncryptionMethod(attrs);\n  }\n  static encryptionMethods(attrs) {\n    return new EncryptionMethods(attrs);\n  }\n  static event(attrs) {\n    return new Event(attrs);\n  }\n  static exData(attrs) {\n    return new ExData(attrs);\n  }\n  static exObject(attrs) {\n    return new ExObject(attrs);\n  }\n  static exclGroup(attrs) {\n    return new ExclGroup(attrs);\n  }\n  static execute(attrs) {\n    return new Execute(attrs);\n  }\n  static extras(attrs) {\n    return new Extras(attrs);\n  }\n  static field(attrs) {\n    return new Field(attrs);\n  }\n  static fill(attrs) {\n    return new Fill(attrs);\n  }\n  static filter(attrs) {\n    return new Filter(attrs);\n  }\n  static float(attrs) {\n    return new Float(attrs);\n  }\n  static font(attrs) {\n    return new template_Font(attrs);\n  }\n  static format(attrs) {\n    return new Format(attrs);\n  }\n  static handler(attrs) {\n    return new Handler(attrs);\n  }\n  static hyphenation(attrs) {\n    return new Hyphenation(attrs);\n  }\n  static image(attrs) {\n    return new Image(attrs);\n  }\n  static imageEdit(attrs) {\n    return new ImageEdit(attrs);\n  }\n  static integer(attrs) {\n    return new Integer(attrs);\n  }\n  static issuers(attrs) {\n    return new Issuers(attrs);\n  }\n  static items(attrs) {\n    return new Items(attrs);\n  }\n  static keep(attrs) {\n    return new Keep(attrs);\n  }\n  static keyUsage(attrs) {\n    return new KeyUsage(attrs);\n  }\n  static line(attrs) {\n    return new Line(attrs);\n  }\n  static linear(attrs) {\n    return new Linear(attrs);\n  }\n  static lockDocument(attrs) {\n    return new LockDocument(attrs);\n  }\n  static manifest(attrs) {\n    return new Manifest(attrs);\n  }\n  static margin(attrs) {\n    return new Margin(attrs);\n  }\n  static mdp(attrs) {\n    return new Mdp(attrs);\n  }\n  static medium(attrs) {\n    return new Medium(attrs);\n  }\n  static message(attrs) {\n    return new Message(attrs);\n  }\n  static numericEdit(attrs) {\n    return new NumericEdit(attrs);\n  }\n  static occur(attrs) {\n    return new Occur(attrs);\n  }\n  static oid(attrs) {\n    return new Oid(attrs);\n  }\n  static oids(attrs) {\n    return new Oids(attrs);\n  }\n  static overflow(attrs) {\n    return new Overflow(attrs);\n  }\n  static pageArea(attrs) {\n    return new PageArea(attrs);\n  }\n  static pageSet(attrs) {\n    return new PageSet(attrs);\n  }\n  static para(attrs) {\n    return new Para(attrs);\n  }\n  static passwordEdit(attrs) {\n    return new PasswordEdit(attrs);\n  }\n  static pattern(attrs) {\n    return new template_Pattern(attrs);\n  }\n  static picture(attrs) {\n    return new Picture(attrs);\n  }\n  static proto(attrs) {\n    return new Proto(attrs);\n  }\n  static radial(attrs) {\n    return new Radial(attrs);\n  }\n  static reason(attrs) {\n    return new Reason(attrs);\n  }\n  static reasons(attrs) {\n    return new Reasons(attrs);\n  }\n  static rectangle(attrs) {\n    return new Rectangle(attrs);\n  }\n  static ref(attrs) {\n    return new RefElement(attrs);\n  }\n  static script(attrs) {\n    return new Script(attrs);\n  }\n  static setProperty(attrs) {\n    return new SetProperty(attrs);\n  }\n  static signData(attrs) {\n    return new SignData(attrs);\n  }\n  static signature(attrs) {\n    return new Signature(attrs);\n  }\n  static signing(attrs) {\n    return new Signing(attrs);\n  }\n  static solid(attrs) {\n    return new Solid(attrs);\n  }\n  static speak(attrs) {\n    return new Speak(attrs);\n  }\n  static stipple(attrs) {\n    return new Stipple(attrs);\n  }\n  static subform(attrs) {\n    return new Subform(attrs);\n  }\n  static subformSet(attrs) {\n    return new SubformSet(attrs);\n  }\n  static subjectDN(attrs) {\n    return new SubjectDN(attrs);\n  }\n  static subjectDNs(attrs) {\n    return new SubjectDNs(attrs);\n  }\n  static submit(attrs) {\n    return new Submit(attrs);\n  }\n  static template(attrs) {\n    return new Template(attrs);\n  }\n  static text(attrs) {\n    return new Text(attrs);\n  }\n  static textEdit(attrs) {\n    return new TextEdit(attrs);\n  }\n  static time(attrs) {\n    return new Time(attrs);\n  }\n  static timeStamp(attrs) {\n    return new TimeStamp(attrs);\n  }\n  static toolTip(attrs) {\n    return new ToolTip(attrs);\n  }\n  static traversal(attrs) {\n    return new Traversal(attrs);\n  }\n  static traverse(attrs) {\n    return new Traverse(attrs);\n  }\n  static ui(attrs) {\n    return new Ui(attrs);\n  }\n  static validate(attrs) {\n    return new Validate(attrs);\n  }\n  static value(attrs) {\n    return new Value(attrs);\n  }\n  static variables(attrs) {\n    return new Variables(attrs);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/bind.js\n\n\n\n\n\n\nconst bind_NS_DATASETS = NamespaceIds.datasets.id;\nfunction createText(content) {\n  const node = new Text({});\n  node[$content] = content;\n  return node;\n}\nclass Binder {\n  constructor(root) {\n    this.root = root;\n    this.datasets = root.datasets;\n    this.data = root.datasets?.data || new XmlObject(NamespaceIds.datasets.id, \"data\");\n    this.emptyMerge = this.data[$getChildren]().length === 0;\n    this.root.form = this.form = root.template[$clone]();\n  }\n  _isConsumeData() {\n    return !this.emptyMerge && this._mergeMode;\n  }\n  _isMatchTemplate() {\n    return !this._isConsumeData();\n  }\n  bind() {\n    this._bindElement(this.form, this.data);\n    return this.form;\n  }\n  getData() {\n    return this.data;\n  }\n  _bindValue(formNode, data, picture) {\n    formNode[$data] = data;\n    if (formNode[$hasSettableValue]()) {\n      if (data[$isDataValue]()) {\n        const value = data[$getDataValue]();\n        formNode[$setValue](createText(value));\n      } else if (formNode instanceof Field && formNode.ui?.choiceList?.open === \"multiSelect\") {\n        const value = data[$getChildren]().map(child => child[$content].trim()).join(\"\\n\");\n        formNode[$setValue](createText(value));\n      } else if (this._isConsumeData()) {\n        warn(`XFA - Nodes haven't the same type.`);\n      }\n    } else if (!data[$isDataValue]() || this._isMatchTemplate()) {\n      this._bindElement(formNode, data);\n    } else {\n      warn(`XFA - Nodes haven't the same type.`);\n    }\n  }\n  _findDataByNameToConsume(name, isValue, dataNode, global) {\n    if (!name) {\n      return null;\n    }\n    let generator, match;\n    for (let i = 0; i < 3; i++) {\n      generator = dataNode[$getRealChildrenByNameIt](name, false, true);\n      while (true) {\n        match = generator.next().value;\n        if (!match) {\n          break;\n        }\n        if (isValue === match[$isDataValue]()) {\n          return match;\n        }\n      }\n      if (dataNode[$namespaceId] === NamespaceIds.datasets.id && dataNode[$nodeName] === \"data\") {\n        break;\n      }\n      dataNode = dataNode[$getParent]();\n    }\n    if (!global) {\n      return null;\n    }\n    generator = this.data[$getRealChildrenByNameIt](name, true, false);\n    match = generator.next().value;\n    if (match) {\n      return match;\n    }\n    generator = this.data[$getAttributeIt](name, true);\n    match = generator.next().value;\n    if (match?.[$isDataValue]()) {\n      return match;\n    }\n    return null;\n  }\n  _setProperties(formNode, dataNode) {\n    if (!formNode.hasOwnProperty(\"setProperty\")) {\n      return;\n    }\n    for (const {\n      ref,\n      target,\n      connection\n    } of formNode.setProperty.children) {\n      if (connection) {\n        continue;\n      }\n      if (!ref) {\n        continue;\n      }\n      const nodes = searchNode(this.root, dataNode, ref, false, false);\n      if (!nodes) {\n        warn(`XFA - Invalid reference: ${ref}.`);\n        continue;\n      }\n      const [node] = nodes;\n      if (!node[$isDescendent](this.data)) {\n        warn(`XFA - Invalid node: must be a data node.`);\n        continue;\n      }\n      const targetNodes = searchNode(this.root, formNode, target, false, false);\n      if (!targetNodes) {\n        warn(`XFA - Invalid target: ${target}.`);\n        continue;\n      }\n      const [targetNode] = targetNodes;\n      if (!targetNode[$isDescendent](formNode)) {\n        warn(`XFA - Invalid target: must be a property or subproperty.`);\n        continue;\n      }\n      const targetParent = targetNode[$getParent]();\n      if (targetNode instanceof SetProperty || targetParent instanceof SetProperty) {\n        warn(`XFA - Invalid target: cannot be a setProperty or one of its properties.`);\n        continue;\n      }\n      if (targetNode instanceof BindItems || targetParent instanceof BindItems) {\n        warn(`XFA - Invalid target: cannot be a bindItems or one of its properties.`);\n        continue;\n      }\n      const content = node[$text]();\n      const name = targetNode[$nodeName];\n      if (targetNode instanceof XFAAttribute) {\n        const attrs = Object.create(null);\n        attrs[name] = content;\n        const obj = Reflect.construct(Object.getPrototypeOf(targetParent).constructor, [attrs]);\n        targetParent[name] = obj[name];\n        continue;\n      }\n      if (!targetNode.hasOwnProperty($content)) {\n        warn(`XFA - Invalid node to use in setProperty`);\n        continue;\n      }\n      targetNode[$data] = node;\n      targetNode[$content] = content;\n      targetNode[$finalize]();\n    }\n  }\n  _bindItems(formNode, dataNode) {\n    if (!formNode.hasOwnProperty(\"items\") || !formNode.hasOwnProperty(\"bindItems\") || formNode.bindItems.isEmpty()) {\n      return;\n    }\n    for (const item of formNode.items.children) {\n      formNode[$removeChild](item);\n    }\n    formNode.items.clear();\n    const labels = new Items({});\n    const values = new Items({});\n    formNode[$appendChild](labels);\n    formNode.items.push(labels);\n    formNode[$appendChild](values);\n    formNode.items.push(values);\n    for (const {\n      ref,\n      labelRef,\n      valueRef,\n      connection\n    } of formNode.bindItems.children) {\n      if (connection) {\n        continue;\n      }\n      if (!ref) {\n        continue;\n      }\n      const nodes = searchNode(this.root, dataNode, ref, false, false);\n      if (!nodes) {\n        warn(`XFA - Invalid reference: ${ref}.`);\n        continue;\n      }\n      for (const node of nodes) {\n        if (!node[$isDescendent](this.datasets)) {\n          warn(`XFA - Invalid ref (${ref}): must be a datasets child.`);\n          continue;\n        }\n        const labelNodes = searchNode(this.root, node, labelRef, true, false);\n        if (!labelNodes) {\n          warn(`XFA - Invalid label: ${labelRef}.`);\n          continue;\n        }\n        const [labelNode] = labelNodes;\n        if (!labelNode[$isDescendent](this.datasets)) {\n          warn(`XFA - Invalid label: must be a datasets child.`);\n          continue;\n        }\n        const valueNodes = searchNode(this.root, node, valueRef, true, false);\n        if (!valueNodes) {\n          warn(`XFA - Invalid value: ${valueRef}.`);\n          continue;\n        }\n        const [valueNode] = valueNodes;\n        if (!valueNode[$isDescendent](this.datasets)) {\n          warn(`XFA - Invalid value: must be a datasets child.`);\n          continue;\n        }\n        const label = createText(labelNode[$text]());\n        const value = createText(valueNode[$text]());\n        labels[$appendChild](label);\n        labels.text.push(label);\n        values[$appendChild](value);\n        values.text.push(value);\n      }\n    }\n  }\n  _bindOccurrences(formNode, matches, picture) {\n    let baseClone;\n    if (matches.length > 1) {\n      baseClone = formNode[$clone]();\n      baseClone[$removeChild](baseClone.occur);\n      baseClone.occur = null;\n    }\n    this._bindValue(formNode, matches[0], picture);\n    this._setProperties(formNode, matches[0]);\n    this._bindItems(formNode, matches[0]);\n    if (matches.length === 1) {\n      return;\n    }\n    const parent = formNode[$getParent]();\n    const name = formNode[$nodeName];\n    const pos = parent[$indexOf](formNode);\n    for (let i = 1, ii = matches.length; i < ii; i++) {\n      const match = matches[i];\n      const clone = baseClone[$clone]();\n      parent[name].push(clone);\n      parent[$insertAt](pos + i, clone);\n      this._bindValue(clone, match, picture);\n      this._setProperties(clone, match);\n      this._bindItems(clone, match);\n    }\n  }\n  _createOccurrences(formNode) {\n    if (!this.emptyMerge) {\n      return;\n    }\n    const {\n      occur\n    } = formNode;\n    if (!occur || occur.initial <= 1) {\n      return;\n    }\n    const parent = formNode[$getParent]();\n    const name = formNode[$nodeName];\n    if (!(parent[name] instanceof XFAObjectArray)) {\n      return;\n    }\n    let currentNumber;\n    if (formNode.name) {\n      currentNumber = parent[name].children.filter(e => e.name === formNode.name).length;\n    } else {\n      currentNumber = parent[name].children.length;\n    }\n    const pos = parent[$indexOf](formNode) + 1;\n    const ii = occur.initial - currentNumber;\n    if (ii) {\n      const nodeClone = formNode[$clone]();\n      nodeClone[$removeChild](nodeClone.occur);\n      nodeClone.occur = null;\n      parent[name].push(nodeClone);\n      parent[$insertAt](pos, nodeClone);\n      for (let i = 1; i < ii; i++) {\n        const clone = nodeClone[$clone]();\n        parent[name].push(clone);\n        parent[$insertAt](pos + i, clone);\n      }\n    }\n  }\n  _getOccurInfo(formNode) {\n    const {\n      name,\n      occur\n    } = formNode;\n    if (!occur || !name) {\n      return [1, 1];\n    }\n    const max = occur.max === -1 ? Infinity : occur.max;\n    return [occur.min, max];\n  }\n  _setAndBind(formNode, dataNode) {\n    this._setProperties(formNode, dataNode);\n    this._bindItems(formNode, dataNode);\n    this._bindElement(formNode, dataNode);\n  }\n  _bindElement(formNode, dataNode) {\n    const uselessNodes = [];\n    this._createOccurrences(formNode);\n    for (const child of formNode[$getChildren]()) {\n      if (child[$data]) {\n        continue;\n      }\n      if (this._mergeMode === undefined && child[$nodeName] === \"subform\") {\n        this._mergeMode = child.mergeMode === \"consumeData\";\n        const dataChildren = dataNode[$getChildren]();\n        if (dataChildren.length > 0) {\n          this._bindOccurrences(child, [dataChildren[0]], null);\n        } else if (this.emptyMerge) {\n          const nsId = dataNode[$namespaceId] === bind_NS_DATASETS ? -1 : dataNode[$namespaceId];\n          const dataChild = child[$data] = new XmlObject(nsId, child.name || \"root\");\n          dataNode[$appendChild](dataChild);\n          this._bindElement(child, dataChild);\n        }\n        continue;\n      }\n      if (!child[$isBindable]()) {\n        continue;\n      }\n      let global = false;\n      let picture = null;\n      let ref = null;\n      let match = null;\n      if (child.bind) {\n        switch (child.bind.match) {\n          case \"none\":\n            this._setAndBind(child, dataNode);\n            continue;\n          case \"global\":\n            global = true;\n            break;\n          case \"dataRef\":\n            if (!child.bind.ref) {\n              warn(`XFA - ref is empty in node ${child[$nodeName]}.`);\n              this._setAndBind(child, dataNode);\n              continue;\n            }\n            ref = child.bind.ref;\n            break;\n          default:\n            break;\n        }\n        if (child.bind.picture) {\n          picture = child.bind.picture[$content];\n        }\n      }\n      const [min, max] = this._getOccurInfo(child);\n      if (ref) {\n        match = searchNode(this.root, dataNode, ref, true, false);\n        if (match === null) {\n          match = createDataNode(this.data, dataNode, ref);\n          if (!match) {\n            continue;\n          }\n          if (this._isConsumeData()) {\n            match[$consumed] = true;\n          }\n          this._setAndBind(child, match);\n          continue;\n        } else {\n          if (this._isConsumeData()) {\n            match = match.filter(node => !node[$consumed]);\n          }\n          if (match.length > max) {\n            match = match.slice(0, max);\n          } else if (match.length === 0) {\n            match = null;\n          }\n          if (match && this._isConsumeData()) {\n            match.forEach(node => {\n              node[$consumed] = true;\n            });\n          }\n        }\n      } else {\n        if (!child.name) {\n          this._setAndBind(child, dataNode);\n          continue;\n        }\n        if (this._isConsumeData()) {\n          const matches = [];\n          while (matches.length < max) {\n            const found = this._findDataByNameToConsume(child.name, child[$hasSettableValue](), dataNode, global);\n            if (!found) {\n              break;\n            }\n            found[$consumed] = true;\n            matches.push(found);\n          }\n          match = matches.length > 0 ? matches : null;\n        } else {\n          match = dataNode[$getRealChildrenByNameIt](child.name, false, this.emptyMerge).next().value;\n          if (!match) {\n            if (min === 0) {\n              uselessNodes.push(child);\n              continue;\n            }\n            const nsId = dataNode[$namespaceId] === bind_NS_DATASETS ? -1 : dataNode[$namespaceId];\n            match = child[$data] = new XmlObject(nsId, child.name);\n            if (this.emptyMerge) {\n              match[$consumed] = true;\n            }\n            dataNode[$appendChild](match);\n            this._setAndBind(child, match);\n            continue;\n          }\n          if (this.emptyMerge) {\n            match[$consumed] = true;\n          }\n          match = [match];\n        }\n      }\n      if (match) {\n        this._bindOccurrences(child, match, picture);\n      } else if (min > 0) {\n        this._setAndBind(child, dataNode);\n      } else {\n        uselessNodes.push(child);\n      }\n    }\n    uselessNodes.forEach(node => node[$getParent]()[$removeChild](node));\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/data.js\n\nclass DataHandler {\n  constructor(root, data) {\n    this.data = data;\n    this.dataset = root.datasets || null;\n  }\n  serialize(storage) {\n    const stack = [[-1, this.data[$getChildren]()]];\n    while (stack.length > 0) {\n      const last = stack.at(-1);\n      const [i, children] = last;\n      if (i + 1 === children.length) {\n        stack.pop();\n        continue;\n      }\n      const child = children[++last[0]];\n      const storageEntry = storage.get(child[$uid]);\n      if (storageEntry) {\n        child[$setValue](storageEntry);\n      } else {\n        const attributes = child[$getAttributes]();\n        for (const value of attributes.values()) {\n          const entry = storage.get(value[$uid]);\n          if (entry) {\n            value[$setValue](entry);\n            break;\n          }\n        }\n      }\n      const nodes = child[$getChildren]();\n      if (nodes.length > 0) {\n        stack.push([-1, nodes]);\n      }\n    }\n    const buf = [`<xfa:datasets xmlns:xfa=\"http://www.xfa.org/schema/xfa-data/1.0/\">`];\n    if (this.dataset) {\n      for (const child of this.dataset[$getChildren]()) {\n        if (child[$nodeName] !== \"data\") {\n          child[$toString](buf);\n        }\n      }\n    }\n    this.data[$toString](buf);\n    buf.push(\"</xfa:datasets>\");\n    return buf.join(\"\");\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/config.js\n\n\n\n\n\nconst CONFIG_NS_ID = NamespaceIds.config.id;\nclass Acrobat extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"acrobat\", true);\n    this.acrobat7 = null;\n    this.autoSave = null;\n    this.common = null;\n    this.validate = null;\n    this.validateApprovalSignatures = null;\n    this.submitUrl = new XFAObjectArray();\n  }\n}\nclass Acrobat7 extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"acrobat7\", true);\n    this.dynamicRender = null;\n  }\n}\nclass ADBE_JSConsole extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"ADBE_JSConsole\", [\"delegate\", \"Enable\", \"Disable\"]);\n  }\n}\nclass ADBE_JSDebugger extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"ADBE_JSDebugger\", [\"delegate\", \"Enable\", \"Disable\"]);\n  }\n}\nclass AddSilentPrint extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"addSilentPrint\");\n  }\n}\nclass AddViewerPreferences extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"addViewerPreferences\");\n  }\n}\nclass AdjustData extends Option10 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"adjustData\");\n  }\n}\nclass AdobeExtensionLevel extends IntegerObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"adobeExtensionLevel\", 0, n => n >= 1 && n <= 8);\n  }\n}\nclass Agent extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"agent\", true);\n    this.name = attributes.name ? attributes.name.trim() : \"\";\n    this.common = new XFAObjectArray();\n  }\n}\nclass AlwaysEmbed extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"alwaysEmbed\");\n  }\n}\nclass Amd extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"amd\");\n  }\n}\nclass config_Area extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"area\");\n    this.level = getInteger({\n      data: attributes.level,\n      defaultValue: 0,\n      validate: n => n >= 1 && n <= 3\n    });\n    this.name = getStringOption(attributes.name, [\"\", \"barcode\", \"coreinit\", \"deviceDriver\", \"font\", \"general\", \"layout\", \"merge\", \"script\", \"signature\", \"sourceSet\", \"templateCache\"]);\n  }\n}\nclass Attributes extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"attributes\", [\"preserve\", \"delegate\", \"ignore\"]);\n  }\n}\nclass AutoSave extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"autoSave\", [\"disabled\", \"enabled\"]);\n  }\n}\nclass Base extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"base\");\n  }\n}\nclass BatchOutput extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"batchOutput\");\n    this.format = getStringOption(attributes.format, [\"none\", \"concat\", \"zip\", \"zipCompress\"]);\n  }\n}\nclass BehaviorOverride extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"behaviorOverride\");\n  }\n  [$finalize]() {\n    this[$content] = new Map(this[$content].trim().split(/\\s+/).filter(x => x.includes(\":\")).map(x => x.split(\":\", 2)));\n  }\n}\nclass Cache extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"cache\", true);\n    this.templateCache = null;\n  }\n}\nclass Change extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"change\");\n  }\n}\nclass Common extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"common\", true);\n    this.data = null;\n    this.locale = null;\n    this.localeSet = null;\n    this.messaging = null;\n    this.suppressBanner = null;\n    this.template = null;\n    this.validationMessaging = null;\n    this.versionControl = null;\n    this.log = new XFAObjectArray();\n  }\n}\nclass Compress extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"compress\");\n    this.scope = getStringOption(attributes.scope, [\"imageOnly\", \"document\"]);\n  }\n}\nclass CompressLogicalStructure extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"compressLogicalStructure\");\n  }\n}\nclass CompressObjectStream extends Option10 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"compressObjectStream\");\n  }\n}\nclass Compression extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"compression\", true);\n    this.compressLogicalStructure = null;\n    this.compressObjectStream = null;\n    this.level = null;\n    this.type = null;\n  }\n}\nclass Config extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"config\", true);\n    this.acrobat = null;\n    this.present = null;\n    this.trace = null;\n    this.agent = new XFAObjectArray();\n  }\n}\nclass Conformance extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"conformance\", [\"A\", \"B\"]);\n  }\n}\nclass ContentCopy extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"contentCopy\");\n  }\n}\nclass Copies extends IntegerObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"copies\", 1, n => n >= 1);\n  }\n}\nclass Creator extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"creator\");\n  }\n}\nclass CurrentPage extends IntegerObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"currentPage\", 0, n => n >= 0);\n  }\n}\nclass Data extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"data\", true);\n    this.adjustData = null;\n    this.attributes = null;\n    this.incrementalLoad = null;\n    this.outputXSL = null;\n    this.range = null;\n    this.record = null;\n    this.startNode = null;\n    this.uri = null;\n    this.window = null;\n    this.xsl = null;\n    this.excludeNS = new XFAObjectArray();\n    this.transform = new XFAObjectArray();\n  }\n}\nclass Debug extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"debug\", true);\n    this.uri = null;\n  }\n}\nclass DefaultTypeface extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"defaultTypeface\");\n    this.writingScript = getStringOption(attributes.writingScript, [\"*\", \"Arabic\", \"Cyrillic\", \"EastEuropeanRoman\", \"Greek\", \"Hebrew\", \"Japanese\", \"Korean\", \"Roman\", \"SimplifiedChinese\", \"Thai\", \"TraditionalChinese\", \"Vietnamese\"]);\n  }\n}\nclass Destination extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"destination\", [\"pdf\", \"pcl\", \"ps\", \"webClient\", \"zpl\"]);\n  }\n}\nclass DocumentAssembly extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"documentAssembly\");\n  }\n}\nclass Driver extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"driver\", true);\n    this.name = attributes.name ? attributes.name.trim() : \"\";\n    this.fontInfo = null;\n    this.xdc = null;\n  }\n}\nclass DuplexOption extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"duplexOption\", [\"simplex\", \"duplexFlipLongEdge\", \"duplexFlipShortEdge\"]);\n  }\n}\nclass DynamicRender extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"dynamicRender\", [\"forbidden\", \"required\"]);\n  }\n}\nclass Embed extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"embed\");\n  }\n}\nclass config_Encrypt extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"encrypt\");\n  }\n}\nclass config_Encryption extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"encryption\", true);\n    this.encrypt = null;\n    this.encryptionLevel = null;\n    this.permissions = null;\n  }\n}\nclass EncryptionLevel extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"encryptionLevel\", [\"40bit\", \"128bit\"]);\n  }\n}\nclass Enforce extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"enforce\");\n  }\n}\nclass Equate extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"equate\");\n    this.force = getInteger({\n      data: attributes.force,\n      defaultValue: 1,\n      validate: n => n === 0\n    });\n    this.from = attributes.from || \"\";\n    this.to = attributes.to || \"\";\n  }\n}\nclass EquateRange extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"equateRange\");\n    this.from = attributes.from || \"\";\n    this.to = attributes.to || \"\";\n    this._unicodeRange = attributes.unicodeRange || \"\";\n  }\n  get unicodeRange() {\n    const ranges = [];\n    const unicodeRegex = /U\\+([0-9a-fA-F]+)/;\n    const unicodeRange = this._unicodeRange;\n    for (let range of unicodeRange.split(\",\").map(x => x.trim()).filter(x => !!x)) {\n      range = range.split(\"-\", 2).map(x => {\n        const found = x.match(unicodeRegex);\n        if (!found) {\n          return 0;\n        }\n        return parseInt(found[1], 16);\n      });\n      if (range.length === 1) {\n        range.push(range[0]);\n      }\n      ranges.push(range);\n    }\n    return shadow(this, \"unicodeRange\", ranges);\n  }\n}\nclass Exclude extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"exclude\");\n  }\n  [$finalize]() {\n    this[$content] = this[$content].trim().split(/\\s+/).filter(x => x && [\"calculate\", \"close\", \"enter\", \"exit\", \"initialize\", \"ready\", \"validate\"].includes(x));\n  }\n}\nclass ExcludeNS extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"excludeNS\");\n  }\n}\nclass FlipLabel extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"flipLabel\", [\"usePrinterSetting\", \"on\", \"off\"]);\n  }\n}\nclass config_FontInfo extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"fontInfo\", true);\n    this.embed = null;\n    this.map = null;\n    this.subsetBelow = null;\n    this.alwaysEmbed = new XFAObjectArray();\n    this.defaultTypeface = new XFAObjectArray();\n    this.neverEmbed = new XFAObjectArray();\n  }\n}\nclass FormFieldFilling extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"formFieldFilling\");\n  }\n}\nclass GroupParent extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"groupParent\");\n  }\n}\nclass IfEmpty extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"ifEmpty\", [\"dataValue\", \"dataGroup\", \"ignore\", \"remove\"]);\n  }\n}\nclass IncludeXDPContent extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"includeXDPContent\");\n  }\n}\nclass IncrementalLoad extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"incrementalLoad\", [\"none\", \"forwardOnly\"]);\n  }\n}\nclass IncrementalMerge extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"incrementalMerge\");\n  }\n}\nclass Interactive extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"interactive\");\n  }\n}\nclass Jog extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"jog\", [\"usePrinterSetting\", \"none\", \"pageSet\"]);\n  }\n}\nclass LabelPrinter extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"labelPrinter\", true);\n    this.name = getStringOption(attributes.name, [\"zpl\", \"dpl\", \"ipl\", \"tcpl\"]);\n    this.batchOutput = null;\n    this.flipLabel = null;\n    this.fontInfo = null;\n    this.xdc = null;\n  }\n}\nclass Layout extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"layout\", [\"paginate\", \"panel\"]);\n  }\n}\nclass Level extends IntegerObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"level\", 0, n => n > 0);\n  }\n}\nclass Linearized extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"linearized\");\n  }\n}\nclass Locale extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"locale\");\n  }\n}\nclass LocaleSet extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"localeSet\");\n  }\n}\nclass Log extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"log\", true);\n    this.mode = null;\n    this.threshold = null;\n    this.to = null;\n    this.uri = null;\n  }\n}\nclass MapElement extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"map\", true);\n    this.equate = new XFAObjectArray();\n    this.equateRange = new XFAObjectArray();\n  }\n}\nclass MediumInfo extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"mediumInfo\", true);\n    this.map = null;\n  }\n}\nclass config_Message extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"message\", true);\n    this.msgId = null;\n    this.severity = null;\n  }\n}\nclass Messaging extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"messaging\", true);\n    this.message = new XFAObjectArray();\n  }\n}\nclass Mode extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"mode\", [\"append\", \"overwrite\"]);\n  }\n}\nclass ModifyAnnots extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"modifyAnnots\");\n  }\n}\nclass MsgId extends IntegerObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"msgId\", 1, n => n >= 1);\n  }\n}\nclass NameAttr extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"nameAttr\");\n  }\n}\nclass NeverEmbed extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"neverEmbed\");\n  }\n}\nclass NumberOfCopies extends IntegerObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"numberOfCopies\", null, n => n >= 2 && n <= 5);\n  }\n}\nclass OpenAction extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"openAction\", true);\n    this.destination = null;\n  }\n}\nclass Output extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"output\", true);\n    this.to = null;\n    this.type = null;\n    this.uri = null;\n  }\n}\nclass OutputBin extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"outputBin\");\n  }\n}\nclass OutputXSL extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"outputXSL\", true);\n    this.uri = null;\n  }\n}\nclass Overprint extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"overprint\", [\"none\", \"both\", \"draw\", \"field\"]);\n  }\n}\nclass Packets extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"packets\");\n  }\n  [$finalize]() {\n    if (this[$content] === \"*\") {\n      return;\n    }\n    this[$content] = this[$content].trim().split(/\\s+/).filter(x => [\"config\", \"datasets\", \"template\", \"xfdf\", \"xslt\"].includes(x));\n  }\n}\nclass PageOffset extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"pageOffset\");\n    this.x = getInteger({\n      data: attributes.x,\n      defaultValue: \"useXDCSetting\",\n      validate: n => true\n    });\n    this.y = getInteger({\n      data: attributes.y,\n      defaultValue: \"useXDCSetting\",\n      validate: n => true\n    });\n  }\n}\nclass PageRange extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"pageRange\");\n  }\n  [$finalize]() {\n    const numbers = this[$content].trim().split(/\\s+/).map(x => parseInt(x, 10));\n    const ranges = [];\n    for (let i = 0, ii = numbers.length; i < ii; i += 2) {\n      ranges.push(numbers.slice(i, i + 2));\n    }\n    this[$content] = ranges;\n  }\n}\nclass Pagination extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"pagination\", [\"simplex\", \"duplexShortEdge\", \"duplexLongEdge\"]);\n  }\n}\nclass PaginationOverride extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"paginationOverride\", [\"none\", \"forceDuplex\", \"forceDuplexLongEdge\", \"forceDuplexShortEdge\", \"forceSimplex\"]);\n  }\n}\nclass Part extends IntegerObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"part\", 1, n => false);\n  }\n}\nclass Pcl extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"pcl\", true);\n    this.name = attributes.name || \"\";\n    this.batchOutput = null;\n    this.fontInfo = null;\n    this.jog = null;\n    this.mediumInfo = null;\n    this.outputBin = null;\n    this.pageOffset = null;\n    this.staple = null;\n    this.xdc = null;\n  }\n}\nclass Pdf extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"pdf\", true);\n    this.name = attributes.name || \"\";\n    this.adobeExtensionLevel = null;\n    this.batchOutput = null;\n    this.compression = null;\n    this.creator = null;\n    this.encryption = null;\n    this.fontInfo = null;\n    this.interactive = null;\n    this.linearized = null;\n    this.openAction = null;\n    this.pdfa = null;\n    this.producer = null;\n    this.renderPolicy = null;\n    this.scriptModel = null;\n    this.silentPrint = null;\n    this.submitFormat = null;\n    this.tagged = null;\n    this.version = null;\n    this.viewerPreferences = null;\n    this.xdc = null;\n  }\n}\nclass Pdfa extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"pdfa\", true);\n    this.amd = null;\n    this.conformance = null;\n    this.includeXDPContent = null;\n    this.part = null;\n  }\n}\nclass Permissions extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"permissions\", true);\n    this.accessibleContent = null;\n    this.change = null;\n    this.contentCopy = null;\n    this.documentAssembly = null;\n    this.formFieldFilling = null;\n    this.modifyAnnots = null;\n    this.plaintextMetadata = null;\n    this.print = null;\n    this.printHighQuality = null;\n  }\n}\nclass PickTrayByPDFSize extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"pickTrayByPDFSize\");\n  }\n}\nclass config_Picture extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"picture\");\n  }\n}\nclass PlaintextMetadata extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"plaintextMetadata\");\n  }\n}\nclass Presence extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"presence\", [\"preserve\", \"dissolve\", \"dissolveStructure\", \"ignore\", \"remove\"]);\n  }\n}\nclass Present extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"present\", true);\n    this.behaviorOverride = null;\n    this.cache = null;\n    this.common = null;\n    this.copies = null;\n    this.destination = null;\n    this.incrementalMerge = null;\n    this.layout = null;\n    this.output = null;\n    this.overprint = null;\n    this.pagination = null;\n    this.paginationOverride = null;\n    this.script = null;\n    this.validate = null;\n    this.xdp = null;\n    this.driver = new XFAObjectArray();\n    this.labelPrinter = new XFAObjectArray();\n    this.pcl = new XFAObjectArray();\n    this.pdf = new XFAObjectArray();\n    this.ps = new XFAObjectArray();\n    this.submitUrl = new XFAObjectArray();\n    this.webClient = new XFAObjectArray();\n    this.zpl = new XFAObjectArray();\n  }\n}\nclass Print extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"print\");\n  }\n}\nclass PrintHighQuality extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"printHighQuality\");\n  }\n}\nclass PrintScaling extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"printScaling\", [\"appdefault\", \"noScaling\"]);\n  }\n}\nclass PrinterName extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"printerName\");\n  }\n}\nclass Producer extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"producer\");\n  }\n}\nclass Ps extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"ps\", true);\n    this.name = attributes.name || \"\";\n    this.batchOutput = null;\n    this.fontInfo = null;\n    this.jog = null;\n    this.mediumInfo = null;\n    this.outputBin = null;\n    this.staple = null;\n    this.xdc = null;\n  }\n}\nclass Range extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"range\");\n  }\n  [$finalize]() {\n    this[$content] = this[$content].trim().split(/\\s*,\\s*/, 2).map(range => range.split(\"-\").map(x => parseInt(x.trim(), 10))).filter(range => range.every(x => !isNaN(x))).map(range => {\n      if (range.length === 1) {\n        range.push(range[0]);\n      }\n      return range;\n    });\n  }\n}\nclass Record extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"record\");\n  }\n  [$finalize]() {\n    this[$content] = this[$content].trim();\n    const n = parseInt(this[$content], 10);\n    if (!isNaN(n) && n >= 0) {\n      this[$content] = n;\n    }\n  }\n}\nclass Relevant extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"relevant\");\n  }\n  [$finalize]() {\n    this[$content] = this[$content].trim().split(/\\s+/);\n  }\n}\nclass Rename extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"rename\");\n  }\n  [$finalize]() {\n    this[$content] = this[$content].trim();\n    if (this[$content].toLowerCase().startsWith(\"xml\") || new RegExp(\"[\\\\p{L}_][\\\\p{L}\\\\d._\\\\p{M}-]*\", \"u\").test(this[$content])) {\n      warn(\"XFA - Rename: invalid XFA name\");\n    }\n  }\n}\nclass RenderPolicy extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"renderPolicy\", [\"server\", \"client\"]);\n  }\n}\nclass RunScripts extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"runScripts\", [\"both\", \"client\", \"none\", \"server\"]);\n  }\n}\nclass config_Script extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"script\", true);\n    this.currentPage = null;\n    this.exclude = null;\n    this.runScripts = null;\n  }\n}\nclass ScriptModel extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"scriptModel\", [\"XFA\", \"none\"]);\n  }\n}\nclass Severity extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"severity\", [\"ignore\", \"error\", \"information\", \"trace\", \"warning\"]);\n  }\n}\nclass SilentPrint extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"silentPrint\", true);\n    this.addSilentPrint = null;\n    this.printerName = null;\n  }\n}\nclass Staple extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"staple\");\n    this.mode = getStringOption(attributes.mode, [\"usePrinterSetting\", \"on\", \"off\"]);\n  }\n}\nclass StartNode extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"startNode\");\n  }\n}\nclass StartPage extends IntegerObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"startPage\", 0, n => true);\n  }\n}\nclass SubmitFormat extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"submitFormat\", [\"html\", \"delegate\", \"fdf\", \"xml\", \"pdf\"]);\n  }\n}\nclass SubmitUrl extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"submitUrl\");\n  }\n}\nclass SubsetBelow extends IntegerObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"subsetBelow\", 100, n => n >= 0 && n <= 100);\n  }\n}\nclass SuppressBanner extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"suppressBanner\");\n  }\n}\nclass Tagged extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"tagged\");\n  }\n}\nclass config_Template extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"template\", true);\n    this.base = null;\n    this.relevant = null;\n    this.startPage = null;\n    this.uri = null;\n    this.xsl = null;\n  }\n}\nclass Threshold extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"threshold\", [\"trace\", \"error\", \"information\", \"warning\"]);\n  }\n}\nclass To extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"to\", [\"null\", \"memory\", \"stderr\", \"stdout\", \"system\", \"uri\"]);\n  }\n}\nclass TemplateCache extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"templateCache\");\n    this.maxEntries = getInteger({\n      data: attributes.maxEntries,\n      defaultValue: 5,\n      validate: n => n >= 0\n    });\n  }\n}\nclass Trace extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"trace\", true);\n    this.area = new XFAObjectArray();\n  }\n}\nclass Transform extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"transform\", true);\n    this.groupParent = null;\n    this.ifEmpty = null;\n    this.nameAttr = null;\n    this.picture = null;\n    this.presence = null;\n    this.rename = null;\n    this.whitespace = null;\n  }\n}\nclass Type extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"type\", [\"none\", \"ascii85\", \"asciiHex\", \"ccittfax\", \"flate\", \"lzw\", \"runLength\", \"native\", \"xdp\", \"mergedXDP\"]);\n  }\n}\nclass Uri extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"uri\");\n  }\n}\nclass config_Validate extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"validate\", [\"preSubmit\", \"prePrint\", \"preExecute\", \"preSave\"]);\n  }\n}\nclass ValidateApprovalSignatures extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"validateApprovalSignatures\");\n  }\n  [$finalize]() {\n    this[$content] = this[$content].trim().split(/\\s+/).filter(x => [\"docReady\", \"postSign\"].includes(x));\n  }\n}\nclass ValidationMessaging extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"validationMessaging\", [\"allMessagesIndividually\", \"allMessagesTogether\", \"firstMessageOnly\", \"noMessages\"]);\n  }\n}\nclass Version extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"version\", [\"1.7\", \"1.6\", \"1.5\", \"1.4\", \"1.3\", \"1.2\"]);\n  }\n}\nclass VersionControl extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"VersionControl\");\n    this.outputBelow = getStringOption(attributes.outputBelow, [\"warn\", \"error\", \"update\"]);\n    this.sourceAbove = getStringOption(attributes.sourceAbove, [\"warn\", \"error\"]);\n    this.sourceBelow = getStringOption(attributes.sourceBelow, [\"update\", \"maintain\"]);\n  }\n}\nclass ViewerPreferences extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"viewerPreferences\", true);\n    this.ADBE_JSConsole = null;\n    this.ADBE_JSDebugger = null;\n    this.addViewerPreferences = null;\n    this.duplexOption = null;\n    this.enforce = null;\n    this.numberOfCopies = null;\n    this.pageRange = null;\n    this.pickTrayByPDFSize = null;\n    this.printScaling = null;\n  }\n}\nclass WebClient extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"webClient\", true);\n    this.name = attributes.name ? attributes.name.trim() : \"\";\n    this.fontInfo = null;\n    this.xdc = null;\n  }\n}\nclass Whitespace extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"whitespace\", [\"preserve\", \"ltrim\", \"normalize\", \"rtrim\", \"trim\"]);\n  }\n}\nclass Window extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"window\");\n  }\n  [$finalize]() {\n    const pair = this[$content].trim().split(/\\s*,\\s*/, 2).map(x => parseInt(x, 10));\n    if (pair.some(x => isNaN(x))) {\n      this[$content] = [0, 0];\n      return;\n    }\n    if (pair.length === 1) {\n      pair.push(pair[0]);\n    }\n    this[$content] = pair;\n  }\n}\nclass Xdc extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"xdc\", true);\n    this.uri = new XFAObjectArray();\n    this.xsl = new XFAObjectArray();\n  }\n}\nclass Xdp extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"xdp\", true);\n    this.packets = null;\n  }\n}\nclass Xsl extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"xsl\", true);\n    this.debug = null;\n    this.uri = null;\n  }\n}\nclass Zpl extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"zpl\", true);\n    this.name = attributes.name ? attributes.name.trim() : \"\";\n    this.batchOutput = null;\n    this.flipLabel = null;\n    this.fontInfo = null;\n    this.xdc = null;\n  }\n}\nclass ConfigNamespace {\n  static [$buildXFAObject](name, attributes) {\n    if (ConfigNamespace.hasOwnProperty(name)) {\n      return ConfigNamespace[name](attributes);\n    }\n    return undefined;\n  }\n  static acrobat(attrs) {\n    return new Acrobat(attrs);\n  }\n  static acrobat7(attrs) {\n    return new Acrobat7(attrs);\n  }\n  static ADBE_JSConsole(attrs) {\n    return new ADBE_JSConsole(attrs);\n  }\n  static ADBE_JSDebugger(attrs) {\n    return new ADBE_JSDebugger(attrs);\n  }\n  static addSilentPrint(attrs) {\n    return new AddSilentPrint(attrs);\n  }\n  static addViewerPreferences(attrs) {\n    return new AddViewerPreferences(attrs);\n  }\n  static adjustData(attrs) {\n    return new AdjustData(attrs);\n  }\n  static adobeExtensionLevel(attrs) {\n    return new AdobeExtensionLevel(attrs);\n  }\n  static agent(attrs) {\n    return new Agent(attrs);\n  }\n  static alwaysEmbed(attrs) {\n    return new AlwaysEmbed(attrs);\n  }\n  static amd(attrs) {\n    return new Amd(attrs);\n  }\n  static area(attrs) {\n    return new config_Area(attrs);\n  }\n  static attributes(attrs) {\n    return new Attributes(attrs);\n  }\n  static autoSave(attrs) {\n    return new AutoSave(attrs);\n  }\n  static base(attrs) {\n    return new Base(attrs);\n  }\n  static batchOutput(attrs) {\n    return new BatchOutput(attrs);\n  }\n  static behaviorOverride(attrs) {\n    return new BehaviorOverride(attrs);\n  }\n  static cache(attrs) {\n    return new Cache(attrs);\n  }\n  static change(attrs) {\n    return new Change(attrs);\n  }\n  static common(attrs) {\n    return new Common(attrs);\n  }\n  static compress(attrs) {\n    return new Compress(attrs);\n  }\n  static compressLogicalStructure(attrs) {\n    return new CompressLogicalStructure(attrs);\n  }\n  static compressObjectStream(attrs) {\n    return new CompressObjectStream(attrs);\n  }\n  static compression(attrs) {\n    return new Compression(attrs);\n  }\n  static config(attrs) {\n    return new Config(attrs);\n  }\n  static conformance(attrs) {\n    return new Conformance(attrs);\n  }\n  static contentCopy(attrs) {\n    return new ContentCopy(attrs);\n  }\n  static copies(attrs) {\n    return new Copies(attrs);\n  }\n  static creator(attrs) {\n    return new Creator(attrs);\n  }\n  static currentPage(attrs) {\n    return new CurrentPage(attrs);\n  }\n  static data(attrs) {\n    return new Data(attrs);\n  }\n  static debug(attrs) {\n    return new Debug(attrs);\n  }\n  static defaultTypeface(attrs) {\n    return new DefaultTypeface(attrs);\n  }\n  static destination(attrs) {\n    return new Destination(attrs);\n  }\n  static documentAssembly(attrs) {\n    return new DocumentAssembly(attrs);\n  }\n  static driver(attrs) {\n    return new Driver(attrs);\n  }\n  static duplexOption(attrs) {\n    return new DuplexOption(attrs);\n  }\n  static dynamicRender(attrs) {\n    return new DynamicRender(attrs);\n  }\n  static embed(attrs) {\n    return new Embed(attrs);\n  }\n  static encrypt(attrs) {\n    return new config_Encrypt(attrs);\n  }\n  static encryption(attrs) {\n    return new config_Encryption(attrs);\n  }\n  static encryptionLevel(attrs) {\n    return new EncryptionLevel(attrs);\n  }\n  static enforce(attrs) {\n    return new Enforce(attrs);\n  }\n  static equate(attrs) {\n    return new Equate(attrs);\n  }\n  static equateRange(attrs) {\n    return new EquateRange(attrs);\n  }\n  static exclude(attrs) {\n    return new Exclude(attrs);\n  }\n  static excludeNS(attrs) {\n    return new ExcludeNS(attrs);\n  }\n  static flipLabel(attrs) {\n    return new FlipLabel(attrs);\n  }\n  static fontInfo(attrs) {\n    return new config_FontInfo(attrs);\n  }\n  static formFieldFilling(attrs) {\n    return new FormFieldFilling(attrs);\n  }\n  static groupParent(attrs) {\n    return new GroupParent(attrs);\n  }\n  static ifEmpty(attrs) {\n    return new IfEmpty(attrs);\n  }\n  static includeXDPContent(attrs) {\n    return new IncludeXDPContent(attrs);\n  }\n  static incrementalLoad(attrs) {\n    return new IncrementalLoad(attrs);\n  }\n  static incrementalMerge(attrs) {\n    return new IncrementalMerge(attrs);\n  }\n  static interactive(attrs) {\n    return new Interactive(attrs);\n  }\n  static jog(attrs) {\n    return new Jog(attrs);\n  }\n  static labelPrinter(attrs) {\n    return new LabelPrinter(attrs);\n  }\n  static layout(attrs) {\n    return new Layout(attrs);\n  }\n  static level(attrs) {\n    return new Level(attrs);\n  }\n  static linearized(attrs) {\n    return new Linearized(attrs);\n  }\n  static locale(attrs) {\n    return new Locale(attrs);\n  }\n  static localeSet(attrs) {\n    return new LocaleSet(attrs);\n  }\n  static log(attrs) {\n    return new Log(attrs);\n  }\n  static map(attrs) {\n    return new MapElement(attrs);\n  }\n  static mediumInfo(attrs) {\n    return new MediumInfo(attrs);\n  }\n  static message(attrs) {\n    return new config_Message(attrs);\n  }\n  static messaging(attrs) {\n    return new Messaging(attrs);\n  }\n  static mode(attrs) {\n    return new Mode(attrs);\n  }\n  static modifyAnnots(attrs) {\n    return new ModifyAnnots(attrs);\n  }\n  static msgId(attrs) {\n    return new MsgId(attrs);\n  }\n  static nameAttr(attrs) {\n    return new NameAttr(attrs);\n  }\n  static neverEmbed(attrs) {\n    return new NeverEmbed(attrs);\n  }\n  static numberOfCopies(attrs) {\n    return new NumberOfCopies(attrs);\n  }\n  static openAction(attrs) {\n    return new OpenAction(attrs);\n  }\n  static output(attrs) {\n    return new Output(attrs);\n  }\n  static outputBin(attrs) {\n    return new OutputBin(attrs);\n  }\n  static outputXSL(attrs) {\n    return new OutputXSL(attrs);\n  }\n  static overprint(attrs) {\n    return new Overprint(attrs);\n  }\n  static packets(attrs) {\n    return new Packets(attrs);\n  }\n  static pageOffset(attrs) {\n    return new PageOffset(attrs);\n  }\n  static pageRange(attrs) {\n    return new PageRange(attrs);\n  }\n  static pagination(attrs) {\n    return new Pagination(attrs);\n  }\n  static paginationOverride(attrs) {\n    return new PaginationOverride(attrs);\n  }\n  static part(attrs) {\n    return new Part(attrs);\n  }\n  static pcl(attrs) {\n    return new Pcl(attrs);\n  }\n  static pdf(attrs) {\n    return new Pdf(attrs);\n  }\n  static pdfa(attrs) {\n    return new Pdfa(attrs);\n  }\n  static permissions(attrs) {\n    return new Permissions(attrs);\n  }\n  static pickTrayByPDFSize(attrs) {\n    return new PickTrayByPDFSize(attrs);\n  }\n  static picture(attrs) {\n    return new config_Picture(attrs);\n  }\n  static plaintextMetadata(attrs) {\n    return new PlaintextMetadata(attrs);\n  }\n  static presence(attrs) {\n    return new Presence(attrs);\n  }\n  static present(attrs) {\n    return new Present(attrs);\n  }\n  static print(attrs) {\n    return new Print(attrs);\n  }\n  static printHighQuality(attrs) {\n    return new PrintHighQuality(attrs);\n  }\n  static printScaling(attrs) {\n    return new PrintScaling(attrs);\n  }\n  static printerName(attrs) {\n    return new PrinterName(attrs);\n  }\n  static producer(attrs) {\n    return new Producer(attrs);\n  }\n  static ps(attrs) {\n    return new Ps(attrs);\n  }\n  static range(attrs) {\n    return new Range(attrs);\n  }\n  static record(attrs) {\n    return new Record(attrs);\n  }\n  static relevant(attrs) {\n    return new Relevant(attrs);\n  }\n  static rename(attrs) {\n    return new Rename(attrs);\n  }\n  static renderPolicy(attrs) {\n    return new RenderPolicy(attrs);\n  }\n  static runScripts(attrs) {\n    return new RunScripts(attrs);\n  }\n  static script(attrs) {\n    return new config_Script(attrs);\n  }\n  static scriptModel(attrs) {\n    return new ScriptModel(attrs);\n  }\n  static severity(attrs) {\n    return new Severity(attrs);\n  }\n  static silentPrint(attrs) {\n    return new SilentPrint(attrs);\n  }\n  static staple(attrs) {\n    return new Staple(attrs);\n  }\n  static startNode(attrs) {\n    return new StartNode(attrs);\n  }\n  static startPage(attrs) {\n    return new StartPage(attrs);\n  }\n  static submitFormat(attrs) {\n    return new SubmitFormat(attrs);\n  }\n  static submitUrl(attrs) {\n    return new SubmitUrl(attrs);\n  }\n  static subsetBelow(attrs) {\n    return new SubsetBelow(attrs);\n  }\n  static suppressBanner(attrs) {\n    return new SuppressBanner(attrs);\n  }\n  static tagged(attrs) {\n    return new Tagged(attrs);\n  }\n  static template(attrs) {\n    return new config_Template(attrs);\n  }\n  static templateCache(attrs) {\n    return new TemplateCache(attrs);\n  }\n  static threshold(attrs) {\n    return new Threshold(attrs);\n  }\n  static to(attrs) {\n    return new To(attrs);\n  }\n  static trace(attrs) {\n    return new Trace(attrs);\n  }\n  static transform(attrs) {\n    return new Transform(attrs);\n  }\n  static type(attrs) {\n    return new Type(attrs);\n  }\n  static uri(attrs) {\n    return new Uri(attrs);\n  }\n  static validate(attrs) {\n    return new config_Validate(attrs);\n  }\n  static validateApprovalSignatures(attrs) {\n    return new ValidateApprovalSignatures(attrs);\n  }\n  static validationMessaging(attrs) {\n    return new ValidationMessaging(attrs);\n  }\n  static version(attrs) {\n    return new Version(attrs);\n  }\n  static versionControl(attrs) {\n    return new VersionControl(attrs);\n  }\n  static viewerPreferences(attrs) {\n    return new ViewerPreferences(attrs);\n  }\n  static webClient(attrs) {\n    return new WebClient(attrs);\n  }\n  static whitespace(attrs) {\n    return new Whitespace(attrs);\n  }\n  static window(attrs) {\n    return new Window(attrs);\n  }\n  static xdc(attrs) {\n    return new Xdc(attrs);\n  }\n  static xdp(attrs) {\n    return new Xdp(attrs);\n  }\n  static xsl(attrs) {\n    return new Xsl(attrs);\n  }\n  static zpl(attrs) {\n    return new Zpl(attrs);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/connection_set.js\n\n\nconst CONNECTION_SET_NS_ID = NamespaceIds.connectionSet.id;\nclass ConnectionSet extends XFAObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"connectionSet\", true);\n    this.wsdlConnection = new XFAObjectArray();\n    this.xmlConnection = new XFAObjectArray();\n    this.xsdConnection = new XFAObjectArray();\n  }\n}\nclass EffectiveInputPolicy extends XFAObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"effectiveInputPolicy\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass EffectiveOutputPolicy extends XFAObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"effectiveOutputPolicy\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass Operation extends StringObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"operation\");\n    this.id = attributes.id || \"\";\n    this.input = attributes.input || \"\";\n    this.name = attributes.name || \"\";\n    this.output = attributes.output || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass RootElement extends StringObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"rootElement\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass SoapAction extends StringObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"soapAction\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass SoapAddress extends StringObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"soapAddress\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass connection_set_Uri extends StringObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"uri\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass WsdlAddress extends StringObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"wsdlAddress\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\nclass WsdlConnection extends XFAObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"wsdlConnection\", true);\n    this.dataDescription = attributes.dataDescription || \"\";\n    this.name = attributes.name || \"\";\n    this.effectiveInputPolicy = null;\n    this.effectiveOutputPolicy = null;\n    this.operation = null;\n    this.soapAction = null;\n    this.soapAddress = null;\n    this.wsdlAddress = null;\n  }\n}\nclass XmlConnection extends XFAObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"xmlConnection\", true);\n    this.dataDescription = attributes.dataDescription || \"\";\n    this.name = attributes.name || \"\";\n    this.uri = null;\n  }\n}\nclass XsdConnection extends XFAObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"xsdConnection\", true);\n    this.dataDescription = attributes.dataDescription || \"\";\n    this.name = attributes.name || \"\";\n    this.rootElement = null;\n    this.uri = null;\n  }\n}\nclass ConnectionSetNamespace {\n  static [$buildXFAObject](name, attributes) {\n    if (ConnectionSetNamespace.hasOwnProperty(name)) {\n      return ConnectionSetNamespace[name](attributes);\n    }\n    return undefined;\n  }\n  static connectionSet(attrs) {\n    return new ConnectionSet(attrs);\n  }\n  static effectiveInputPolicy(attrs) {\n    return new EffectiveInputPolicy(attrs);\n  }\n  static effectiveOutputPolicy(attrs) {\n    return new EffectiveOutputPolicy(attrs);\n  }\n  static operation(attrs) {\n    return new Operation(attrs);\n  }\n  static rootElement(attrs) {\n    return new RootElement(attrs);\n  }\n  static soapAction(attrs) {\n    return new SoapAction(attrs);\n  }\n  static soapAddress(attrs) {\n    return new SoapAddress(attrs);\n  }\n  static uri(attrs) {\n    return new connection_set_Uri(attrs);\n  }\n  static wsdlAddress(attrs) {\n    return new WsdlAddress(attrs);\n  }\n  static wsdlConnection(attrs) {\n    return new WsdlConnection(attrs);\n  }\n  static xmlConnection(attrs) {\n    return new XmlConnection(attrs);\n  }\n  static xsdConnection(attrs) {\n    return new XsdConnection(attrs);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/datasets.js\n\n\n\nconst DATASETS_NS_ID = NamespaceIds.datasets.id;\nclass datasets_Data extends XmlObject {\n  constructor(attributes) {\n    super(DATASETS_NS_ID, \"data\", attributes);\n  }\n  [$isNsAgnostic]() {\n    return true;\n  }\n}\nclass Datasets extends XFAObject {\n  constructor(attributes) {\n    super(DATASETS_NS_ID, \"datasets\", true);\n    this.data = null;\n    this.Signature = null;\n  }\n  [$onChild](child) {\n    const name = child[$nodeName];\n    if (name === \"data\" && child[$namespaceId] === DATASETS_NS_ID || name === \"Signature\" && child[$namespaceId] === NamespaceIds.signature.id) {\n      this[name] = child;\n    }\n    this[$appendChild](child);\n  }\n}\nclass DatasetsNamespace {\n  static [$buildXFAObject](name, attributes) {\n    if (DatasetsNamespace.hasOwnProperty(name)) {\n      return DatasetsNamespace[name](attributes);\n    }\n    return undefined;\n  }\n  static datasets(attributes) {\n    return new Datasets(attributes);\n  }\n  static data(attributes) {\n    return new datasets_Data(attributes);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/locale_set.js\n\n\n\nconst LOCALE_SET_NS_ID = NamespaceIds.localeSet.id;\nclass CalendarSymbols extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"calendarSymbols\", true);\n    this.name = \"gregorian\";\n    this.dayNames = new XFAObjectArray(2);\n    this.eraNames = null;\n    this.meridiemNames = null;\n    this.monthNames = new XFAObjectArray(2);\n  }\n}\nclass CurrencySymbol extends StringObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"currencySymbol\");\n    this.name = getStringOption(attributes.name, [\"symbol\", \"isoname\", \"decimal\"]);\n  }\n}\nclass CurrencySymbols extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"currencySymbols\", true);\n    this.currencySymbol = new XFAObjectArray(3);\n  }\n}\nclass DatePattern extends StringObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"datePattern\");\n    this.name = getStringOption(attributes.name, [\"full\", \"long\", \"med\", \"short\"]);\n  }\n}\nclass DatePatterns extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"datePatterns\", true);\n    this.datePattern = new XFAObjectArray(4);\n  }\n}\nclass DateTimeSymbols extends ContentObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"dateTimeSymbols\");\n  }\n}\nclass Day extends StringObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"day\");\n  }\n}\nclass DayNames extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"dayNames\", true);\n    this.abbr = getInteger({\n      data: attributes.abbr,\n      defaultValue: 0,\n      validate: x => x === 1\n    });\n    this.day = new XFAObjectArray(7);\n  }\n}\nclass Era extends StringObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"era\");\n  }\n}\nclass EraNames extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"eraNames\", true);\n    this.era = new XFAObjectArray(2);\n  }\n}\nclass locale_set_Locale extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"locale\", true);\n    this.desc = attributes.desc || \"\";\n    this.name = \"isoname\";\n    this.calendarSymbols = null;\n    this.currencySymbols = null;\n    this.datePatterns = null;\n    this.dateTimeSymbols = null;\n    this.numberPatterns = null;\n    this.numberSymbols = null;\n    this.timePatterns = null;\n    this.typeFaces = null;\n  }\n}\nclass locale_set_LocaleSet extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"localeSet\", true);\n    this.locale = new XFAObjectArray();\n  }\n}\nclass Meridiem extends StringObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"meridiem\");\n  }\n}\nclass MeridiemNames extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"meridiemNames\", true);\n    this.meridiem = new XFAObjectArray(2);\n  }\n}\nclass Month extends StringObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"month\");\n  }\n}\nclass MonthNames extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"monthNames\", true);\n    this.abbr = getInteger({\n      data: attributes.abbr,\n      defaultValue: 0,\n      validate: x => x === 1\n    });\n    this.month = new XFAObjectArray(12);\n  }\n}\nclass NumberPattern extends StringObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"numberPattern\");\n    this.name = getStringOption(attributes.name, [\"full\", \"long\", \"med\", \"short\"]);\n  }\n}\nclass NumberPatterns extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"numberPatterns\", true);\n    this.numberPattern = new XFAObjectArray(4);\n  }\n}\nclass NumberSymbol extends StringObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"numberSymbol\");\n    this.name = getStringOption(attributes.name, [\"decimal\", \"grouping\", \"percent\", \"minus\", \"zero\"]);\n  }\n}\nclass NumberSymbols extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"numberSymbols\", true);\n    this.numberSymbol = new XFAObjectArray(5);\n  }\n}\nclass TimePattern extends StringObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"timePattern\");\n    this.name = getStringOption(attributes.name, [\"full\", \"long\", \"med\", \"short\"]);\n  }\n}\nclass TimePatterns extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"timePatterns\", true);\n    this.timePattern = new XFAObjectArray(4);\n  }\n}\nclass TypeFace extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"typeFace\", true);\n    this.name = attributes.name | \"\";\n  }\n}\nclass TypeFaces extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"typeFaces\", true);\n    this.typeFace = new XFAObjectArray();\n  }\n}\nclass LocaleSetNamespace {\n  static [$buildXFAObject](name, attributes) {\n    if (LocaleSetNamespace.hasOwnProperty(name)) {\n      return LocaleSetNamespace[name](attributes);\n    }\n    return undefined;\n  }\n  static calendarSymbols(attrs) {\n    return new CalendarSymbols(attrs);\n  }\n  static currencySymbol(attrs) {\n    return new CurrencySymbol(attrs);\n  }\n  static currencySymbols(attrs) {\n    return new CurrencySymbols(attrs);\n  }\n  static datePattern(attrs) {\n    return new DatePattern(attrs);\n  }\n  static datePatterns(attrs) {\n    return new DatePatterns(attrs);\n  }\n  static dateTimeSymbols(attrs) {\n    return new DateTimeSymbols(attrs);\n  }\n  static day(attrs) {\n    return new Day(attrs);\n  }\n  static dayNames(attrs) {\n    return new DayNames(attrs);\n  }\n  static era(attrs) {\n    return new Era(attrs);\n  }\n  static eraNames(attrs) {\n    return new EraNames(attrs);\n  }\n  static locale(attrs) {\n    return new locale_set_Locale(attrs);\n  }\n  static localeSet(attrs) {\n    return new locale_set_LocaleSet(attrs);\n  }\n  static meridiem(attrs) {\n    return new Meridiem(attrs);\n  }\n  static meridiemNames(attrs) {\n    return new MeridiemNames(attrs);\n  }\n  static month(attrs) {\n    return new Month(attrs);\n  }\n  static monthNames(attrs) {\n    return new MonthNames(attrs);\n  }\n  static numberPattern(attrs) {\n    return new NumberPattern(attrs);\n  }\n  static numberPatterns(attrs) {\n    return new NumberPatterns(attrs);\n  }\n  static numberSymbol(attrs) {\n    return new NumberSymbol(attrs);\n  }\n  static numberSymbols(attrs) {\n    return new NumberSymbols(attrs);\n  }\n  static timePattern(attrs) {\n    return new TimePattern(attrs);\n  }\n  static timePatterns(attrs) {\n    return new TimePatterns(attrs);\n  }\n  static typeFace(attrs) {\n    return new TypeFace(attrs);\n  }\n  static typeFaces(attrs) {\n    return new TypeFaces(attrs);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/signature.js\n\n\nconst SIGNATURE_NS_ID = NamespaceIds.signature.id;\nclass signature_Signature extends XFAObject {\n  constructor(attributes) {\n    super(SIGNATURE_NS_ID, \"signature\", true);\n  }\n}\nclass SignatureNamespace {\n  static [$buildXFAObject](name, attributes) {\n    if (SignatureNamespace.hasOwnProperty(name)) {\n      return SignatureNamespace[name](attributes);\n    }\n    return undefined;\n  }\n  static signature(attributes) {\n    return new signature_Signature(attributes);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/stylesheet.js\n\n\nconst STYLESHEET_NS_ID = NamespaceIds.stylesheet.id;\nclass Stylesheet extends XFAObject {\n  constructor(attributes) {\n    super(STYLESHEET_NS_ID, \"stylesheet\", true);\n  }\n}\nclass StylesheetNamespace {\n  static [$buildXFAObject](name, attributes) {\n    if (StylesheetNamespace.hasOwnProperty(name)) {\n      return StylesheetNamespace[name](attributes);\n    }\n    return undefined;\n  }\n  static stylesheet(attributes) {\n    return new Stylesheet(attributes);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/xdp.js\n\n\n\nconst XDP_NS_ID = NamespaceIds.xdp.id;\nclass xdp_Xdp extends XFAObject {\n  constructor(attributes) {\n    super(XDP_NS_ID, \"xdp\", true);\n    this.uuid = attributes.uuid || \"\";\n    this.timeStamp = attributes.timeStamp || \"\";\n    this.config = null;\n    this.connectionSet = null;\n    this.datasets = null;\n    this.localeSet = null;\n    this.stylesheet = new XFAObjectArray();\n    this.template = null;\n  }\n  [$onChildCheck](child) {\n    const ns = NamespaceIds[child[$nodeName]];\n    return ns && child[$namespaceId] === ns.id;\n  }\n}\nclass XdpNamespace {\n  static [$buildXFAObject](name, attributes) {\n    if (XdpNamespace.hasOwnProperty(name)) {\n      return XdpNamespace[name](attributes);\n    }\n    return undefined;\n  }\n  static xdp(attributes) {\n    return new xdp_Xdp(attributes);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/xhtml.js\n\n\n\n\n\nconst XHTML_NS_ID = NamespaceIds.xhtml.id;\nconst $richText = Symbol();\nconst VALID_STYLES = new Set([\"color\", \"font\", \"font-family\", \"font-size\", \"font-stretch\", \"font-style\", \"font-weight\", \"margin\", \"margin-bottom\", \"margin-left\", \"margin-right\", \"margin-top\", \"letter-spacing\", \"line-height\", \"orphans\", \"page-break-after\", \"page-break-before\", \"page-break-inside\", \"tab-interval\", \"tab-stop\", \"text-align\", \"text-decoration\", \"text-indent\", \"vertical-align\", \"widows\", \"kerning-mode\", \"xfa-font-horizontal-scale\", \"xfa-font-vertical-scale\", \"xfa-spacerun\", \"xfa-tab-stops\"]);\nconst StyleMapping = new Map([[\"page-break-after\", \"breakAfter\"], [\"page-break-before\", \"breakBefore\"], [\"page-break-inside\", \"breakInside\"], [\"kerning-mode\", value => value === \"none\" ? \"none\" : \"normal\"], [\"xfa-font-horizontal-scale\", value => `scaleX(${Math.max(0, Math.min(parseInt(value) / 100)).toFixed(2)})`], [\"xfa-font-vertical-scale\", value => `scaleY(${Math.max(0, Math.min(parseInt(value) / 100)).toFixed(2)})`], [\"xfa-spacerun\", \"\"], [\"xfa-tab-stops\", \"\"], [\"font-size\", (value, original) => {\n  value = original.fontSize = getMeasurement(value);\n  return measureToString(0.99 * value);\n}], [\"letter-spacing\", value => measureToString(getMeasurement(value))], [\"line-height\", value => measureToString(getMeasurement(value))], [\"margin\", value => measureToString(getMeasurement(value))], [\"margin-bottom\", value => measureToString(getMeasurement(value))], [\"margin-left\", value => measureToString(getMeasurement(value))], [\"margin-right\", value => measureToString(getMeasurement(value))], [\"margin-top\", value => measureToString(getMeasurement(value))], [\"text-indent\", value => measureToString(getMeasurement(value))], [\"font-family\", value => value], [\"vertical-align\", value => measureToString(getMeasurement(value))]]);\nconst spacesRegExp = /\\s+/g;\nconst crlfRegExp = /[\\r\\n]+/g;\nconst crlfForRichTextRegExp = /\\r\\n?/g;\nfunction mapStyle(styleStr, node, richText) {\n  const style = Object.create(null);\n  if (!styleStr) {\n    return style;\n  }\n  const original = Object.create(null);\n  for (const [key, value] of styleStr.split(\";\").map(s => s.split(\":\", 2))) {\n    const mapping = StyleMapping.get(key);\n    if (mapping === \"\") {\n      continue;\n    }\n    let newValue = value;\n    if (mapping) {\n      newValue = typeof mapping === \"string\" ? mapping : mapping(value, original);\n    }\n    if (key.endsWith(\"scale\")) {\n      style.transform = style.transform ? `${style[key]} ${newValue}` : newValue;\n    } else {\n      style[key.replaceAll(/-([a-zA-Z])/g, (_, x) => x.toUpperCase())] = newValue;\n    }\n  }\n  if (style.fontFamily) {\n    setFontFamily({\n      typeface: style.fontFamily,\n      weight: style.fontWeight || \"normal\",\n      posture: style.fontStyle || \"normal\",\n      size: original.fontSize || 0\n    }, node, node[$globalData].fontFinder, style);\n  }\n  if (richText && style.verticalAlign && style.verticalAlign !== \"0px\" && style.fontSize) {\n    const SUB_SUPER_SCRIPT_FACTOR = 0.583;\n    const VERTICAL_FACTOR = 0.333;\n    const fontSize = getMeasurement(style.fontSize);\n    style.fontSize = measureToString(fontSize * SUB_SUPER_SCRIPT_FACTOR);\n    style.verticalAlign = measureToString(Math.sign(getMeasurement(style.verticalAlign)) * fontSize * VERTICAL_FACTOR);\n  }\n  if (richText && style.fontSize) {\n    style.fontSize = `calc(${style.fontSize} * var(--scale-factor))`;\n  }\n  fixTextIndent(style);\n  return style;\n}\nfunction checkStyle(node) {\n  if (!node.style) {\n    return \"\";\n  }\n  return node.style.trim().split(/\\s*;\\s*/).filter(s => !!s).map(s => s.split(/\\s*:\\s*/, 2)).filter(([key, value]) => {\n    if (key === \"font-family\") {\n      node[$globalData].usedTypefaces.add(value);\n    }\n    return VALID_STYLES.has(key);\n  }).map(kv => kv.join(\":\")).join(\";\");\n}\nconst NoWhites = new Set([\"body\", \"html\"]);\nclass XhtmlObject extends XmlObject {\n  constructor(attributes, name) {\n    super(XHTML_NS_ID, name);\n    this[$richText] = false;\n    this.style = attributes.style || \"\";\n  }\n  [$clean](builder) {\n    super[$clean](builder);\n    this.style = checkStyle(this);\n  }\n  [$acceptWhitespace]() {\n    return !NoWhites.has(this[$nodeName]);\n  }\n  [$onText](str, richText = false) {\n    if (!richText) {\n      str = str.replaceAll(crlfRegExp, \"\");\n      if (!this.style.includes(\"xfa-spacerun:yes\")) {\n        str = str.replaceAll(spacesRegExp, \" \");\n      }\n    } else {\n      this[$richText] = true;\n    }\n    if (str) {\n      this[$content] += str;\n    }\n  }\n  [$pushGlyphs](measure, mustPop = true) {\n    const xfaFont = Object.create(null);\n    const margin = {\n      top: NaN,\n      bottom: NaN,\n      left: NaN,\n      right: NaN\n    };\n    let lineHeight = null;\n    for (const [key, value] of this.style.split(\";\").map(s => s.split(\":\", 2))) {\n      switch (key) {\n        case \"font-family\":\n          xfaFont.typeface = stripQuotes(value);\n          break;\n        case \"font-size\":\n          xfaFont.size = getMeasurement(value);\n          break;\n        case \"font-weight\":\n          xfaFont.weight = value;\n          break;\n        case \"font-style\":\n          xfaFont.posture = value;\n          break;\n        case \"letter-spacing\":\n          xfaFont.letterSpacing = getMeasurement(value);\n          break;\n        case \"margin\":\n          const values = value.split(/ \\t/).map(x => getMeasurement(x));\n          switch (values.length) {\n            case 1:\n              margin.top = margin.bottom = margin.left = margin.right = values[0];\n              break;\n            case 2:\n              margin.top = margin.bottom = values[0];\n              margin.left = margin.right = values[1];\n              break;\n            case 3:\n              margin.top = values[0];\n              margin.bottom = values[2];\n              margin.left = margin.right = values[1];\n              break;\n            case 4:\n              margin.top = values[0];\n              margin.left = values[1];\n              margin.bottom = values[2];\n              margin.right = values[3];\n              break;\n          }\n          break;\n        case \"margin-top\":\n          margin.top = getMeasurement(value);\n          break;\n        case \"margin-bottom\":\n          margin.bottom = getMeasurement(value);\n          break;\n        case \"margin-left\":\n          margin.left = getMeasurement(value);\n          break;\n        case \"margin-right\":\n          margin.right = getMeasurement(value);\n          break;\n        case \"line-height\":\n          lineHeight = getMeasurement(value);\n          break;\n      }\n    }\n    measure.pushData(xfaFont, margin, lineHeight);\n    if (this[$content]) {\n      measure.addString(this[$content]);\n    } else {\n      for (const child of this[$getChildren]()) {\n        if (child[$nodeName] === \"#text\") {\n          measure.addString(child[$content]);\n          continue;\n        }\n        child[$pushGlyphs](measure);\n      }\n    }\n    if (mustPop) {\n      measure.popFont();\n    }\n  }\n  [$toHTML](availableSpace) {\n    const children = [];\n    this[$extra] = {\n      children\n    };\n    this[$childrenToHTML]({});\n    if (children.length === 0 && !this[$content]) {\n      return HTMLResult.EMPTY;\n    }\n    let value;\n    if (this[$richText]) {\n      value = this[$content] ? this[$content].replaceAll(crlfForRichTextRegExp, \"\\n\") : undefined;\n    } else {\n      value = this[$content] || undefined;\n    }\n    return HTMLResult.success({\n      name: this[$nodeName],\n      attributes: {\n        href: this.href,\n        style: mapStyle(this.style, this, this[$richText])\n      },\n      children,\n      value\n    });\n  }\n}\nclass A extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"a\");\n    this.href = fixURL(attributes.href) || \"\";\n  }\n}\nclass B extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"b\");\n  }\n  [$pushGlyphs](measure) {\n    measure.pushFont({\n      weight: \"bold\"\n    });\n    super[$pushGlyphs](measure);\n    measure.popFont();\n  }\n}\nclass Body extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"body\");\n  }\n  [$toHTML](availableSpace) {\n    const res = super[$toHTML](availableSpace);\n    const {\n      html\n    } = res;\n    if (!html) {\n      return HTMLResult.EMPTY;\n    }\n    html.name = \"div\";\n    html.attributes.class = [\"xfaRich\"];\n    return res;\n  }\n}\nclass Br extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"br\");\n  }\n  [$text]() {\n    return \"\\n\";\n  }\n  [$pushGlyphs](measure) {\n    measure.addString(\"\\n\");\n  }\n  [$toHTML](availableSpace) {\n    return HTMLResult.success({\n      name: \"br\"\n    });\n  }\n}\nclass Html extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"html\");\n  }\n  [$toHTML](availableSpace) {\n    const children = [];\n    this[$extra] = {\n      children\n    };\n    this[$childrenToHTML]({});\n    if (children.length === 0) {\n      return HTMLResult.success({\n        name: \"div\",\n        attributes: {\n          class: [\"xfaRich\"],\n          style: {}\n        },\n        value: this[$content] || \"\"\n      });\n    }\n    if (children.length === 1) {\n      const child = children[0];\n      if (child.attributes?.class.includes(\"xfaRich\")) {\n        return HTMLResult.success(child);\n      }\n    }\n    return HTMLResult.success({\n      name: \"div\",\n      attributes: {\n        class: [\"xfaRich\"],\n        style: {}\n      },\n      children\n    });\n  }\n}\nclass I extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"i\");\n  }\n  [$pushGlyphs](measure) {\n    measure.pushFont({\n      posture: \"italic\"\n    });\n    super[$pushGlyphs](measure);\n    measure.popFont();\n  }\n}\nclass Li extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"li\");\n  }\n}\nclass Ol extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"ol\");\n  }\n}\nclass P extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"p\");\n  }\n  [$pushGlyphs](measure) {\n    super[$pushGlyphs](measure, false);\n    measure.addString(\"\\n\");\n    measure.addPara();\n    measure.popFont();\n  }\n  [$text]() {\n    const siblings = this[$getParent]()[$getChildren]();\n    if (siblings.at(-1) === this) {\n      return super[$text]();\n    }\n    return super[$text]() + \"\\n\";\n  }\n}\nclass Span extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"span\");\n  }\n}\nclass Sub extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"sub\");\n  }\n}\nclass Sup extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"sup\");\n  }\n}\nclass Ul extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"ul\");\n  }\n}\nclass XhtmlNamespace {\n  static [$buildXFAObject](name, attributes) {\n    if (XhtmlNamespace.hasOwnProperty(name)) {\n      return XhtmlNamespace[name](attributes);\n    }\n    return undefined;\n  }\n  static a(attributes) {\n    return new A(attributes);\n  }\n  static b(attributes) {\n    return new B(attributes);\n  }\n  static body(attributes) {\n    return new Body(attributes);\n  }\n  static br(attributes) {\n    return new Br(attributes);\n  }\n  static html(attributes) {\n    return new Html(attributes);\n  }\n  static i(attributes) {\n    return new I(attributes);\n  }\n  static li(attributes) {\n    return new Li(attributes);\n  }\n  static ol(attributes) {\n    return new Ol(attributes);\n  }\n  static p(attributes) {\n    return new P(attributes);\n  }\n  static span(attributes) {\n    return new Span(attributes);\n  }\n  static sub(attributes) {\n    return new Sub(attributes);\n  }\n  static sup(attributes) {\n    return new Sup(attributes);\n  }\n  static ul(attributes) {\n    return new Ul(attributes);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/setup.js\n\n\n\n\n\n\n\n\n\nconst NamespaceSetUp = {\n  config: ConfigNamespace,\n  connection: ConnectionSetNamespace,\n  datasets: DatasetsNamespace,\n  localeSet: LocaleSetNamespace,\n  signature: SignatureNamespace,\n  stylesheet: StylesheetNamespace,\n  template: TemplateNamespace,\n  xdp: XdpNamespace,\n  xhtml: XhtmlNamespace\n};\n\n;// CONCATENATED MODULE: ./src/core/xfa/unknown.js\n\n\nclass UnknownNamespace {\n  constructor(nsId) {\n    this.namespaceId = nsId;\n  }\n  [$buildXFAObject](name, attributes) {\n    return new XmlObject(this.namespaceId, name, attributes);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/builder.js\n\n\n\n\n\n\n\nclass Root extends XFAObject {\n  constructor(ids) {\n    super(-1, \"root\", Object.create(null));\n    this.element = null;\n    this[$ids] = ids;\n  }\n  [$onChild](child) {\n    this.element = child;\n    return true;\n  }\n  [$finalize]() {\n    super[$finalize]();\n    if (this.element.template instanceof Template) {\n      this[$ids].set($root, this.element);\n      this.element.template[$resolvePrototypes](this[$ids]);\n      this.element.template[$ids] = this[$ids];\n    }\n  }\n}\nclass Empty extends XFAObject {\n  constructor() {\n    super(-1, \"\", Object.create(null));\n  }\n  [$onChild](_) {\n    return false;\n  }\n}\nclass Builder {\n  constructor(rootNameSpace = null) {\n    this._namespaceStack = [];\n    this._nsAgnosticLevel = 0;\n    this._namespacePrefixes = new Map();\n    this._namespaces = new Map();\n    this._nextNsId = Math.max(...Object.values(NamespaceIds).map(({\n      id\n    }) => id));\n    this._currentNamespace = rootNameSpace || new UnknownNamespace(++this._nextNsId);\n  }\n  buildRoot(ids) {\n    return new Root(ids);\n  }\n  build({\n    nsPrefix,\n    name,\n    attributes,\n    namespace,\n    prefixes\n  }) {\n    const hasNamespaceDef = namespace !== null;\n    if (hasNamespaceDef) {\n      this._namespaceStack.push(this._currentNamespace);\n      this._currentNamespace = this._searchNamespace(namespace);\n    }\n    if (prefixes) {\n      this._addNamespacePrefix(prefixes);\n    }\n    if (attributes.hasOwnProperty($nsAttributes)) {\n      const dataTemplate = NamespaceSetUp.datasets;\n      const nsAttrs = attributes[$nsAttributes];\n      let xfaAttrs = null;\n      for (const [ns, attrs] of Object.entries(nsAttrs)) {\n        const nsToUse = this._getNamespaceToUse(ns);\n        if (nsToUse === dataTemplate) {\n          xfaAttrs = {\n            xfa: attrs\n          };\n          break;\n        }\n      }\n      if (xfaAttrs) {\n        attributes[$nsAttributes] = xfaAttrs;\n      } else {\n        delete attributes[$nsAttributes];\n      }\n    }\n    const namespaceToUse = this._getNamespaceToUse(nsPrefix);\n    const node = namespaceToUse?.[$buildXFAObject](name, attributes) || new Empty();\n    if (node[$isNsAgnostic]()) {\n      this._nsAgnosticLevel++;\n    }\n    if (hasNamespaceDef || prefixes || node[$isNsAgnostic]()) {\n      node[$cleanup] = {\n        hasNamespace: hasNamespaceDef,\n        prefixes,\n        nsAgnostic: node[$isNsAgnostic]()\n      };\n    }\n    return node;\n  }\n  isNsAgnostic() {\n    return this._nsAgnosticLevel > 0;\n  }\n  _searchNamespace(nsName) {\n    let ns = this._namespaces.get(nsName);\n    if (ns) {\n      return ns;\n    }\n    for (const [name, {\n      check\n    }] of Object.entries(NamespaceIds)) {\n      if (check(nsName)) {\n        ns = NamespaceSetUp[name];\n        if (ns) {\n          this._namespaces.set(nsName, ns);\n          return ns;\n        }\n        break;\n      }\n    }\n    ns = new UnknownNamespace(++this._nextNsId);\n    this._namespaces.set(nsName, ns);\n    return ns;\n  }\n  _addNamespacePrefix(prefixes) {\n    for (const {\n      prefix,\n      value\n    } of prefixes) {\n      const namespace = this._searchNamespace(value);\n      let prefixStack = this._namespacePrefixes.get(prefix);\n      if (!prefixStack) {\n        prefixStack = [];\n        this._namespacePrefixes.set(prefix, prefixStack);\n      }\n      prefixStack.push(namespace);\n    }\n  }\n  _getNamespaceToUse(prefix) {\n    if (!prefix) {\n      return this._currentNamespace;\n    }\n    const prefixStack = this._namespacePrefixes.get(prefix);\n    if (prefixStack?.length > 0) {\n      return prefixStack.at(-1);\n    }\n    warn(`Unknown namespace prefix: ${prefix}.`);\n    return null;\n  }\n  clean(data) {\n    const {\n      hasNamespace,\n      prefixes,\n      nsAgnostic\n    } = data;\n    if (hasNamespace) {\n      this._currentNamespace = this._namespaceStack.pop();\n    }\n    if (prefixes) {\n      prefixes.forEach(({\n        prefix\n      }) => {\n        this._namespacePrefixes.get(prefix).pop();\n      });\n    }\n    if (nsAgnostic) {\n      this._nsAgnosticLevel--;\n    }\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/parser.js\n\n\n\n\nclass XFAParser extends XMLParserBase {\n  constructor(rootNameSpace = null, richText = false) {\n    super();\n    this._builder = new Builder(rootNameSpace);\n    this._stack = [];\n    this._globalData = {\n      usedTypefaces: new Set()\n    };\n    this._ids = new Map();\n    this._current = this._builder.buildRoot(this._ids);\n    this._errorCode = XMLParserErrorCode.NoError;\n    this._whiteRegex = /^\\s+$/;\n    this._nbsps = /\\xa0+/g;\n    this._richText = richText;\n  }\n  parse(data) {\n    this.parseXml(data);\n    if (this._errorCode !== XMLParserErrorCode.NoError) {\n      return undefined;\n    }\n    this._current[$finalize]();\n    return this._current.element;\n  }\n  onText(text) {\n    text = text.replace(this._nbsps, match => match.slice(1) + \" \");\n    if (this._richText || this._current[$acceptWhitespace]()) {\n      this._current[$onText](text, this._richText);\n      return;\n    }\n    if (this._whiteRegex.test(text)) {\n      return;\n    }\n    this._current[$onText](text.trim());\n  }\n  onCdata(text) {\n    this._current[$onText](text);\n  }\n  _mkAttributes(attributes, tagName) {\n    let namespace = null;\n    let prefixes = null;\n    const attributeObj = Object.create({});\n    for (const {\n      name,\n      value\n    } of attributes) {\n      if (name === \"xmlns\") {\n        if (!namespace) {\n          namespace = value;\n        } else {\n          warn(`XFA - multiple namespace definition in <${tagName}>`);\n        }\n      } else if (name.startsWith(\"xmlns:\")) {\n        const prefix = name.substring(\"xmlns:\".length);\n        if (!prefixes) {\n          prefixes = [];\n        }\n        prefixes.push({\n          prefix,\n          value\n        });\n      } else {\n        const i = name.indexOf(\":\");\n        if (i === -1) {\n          attributeObj[name] = value;\n        } else {\n          let nsAttrs = attributeObj[$nsAttributes];\n          if (!nsAttrs) {\n            nsAttrs = attributeObj[$nsAttributes] = Object.create(null);\n          }\n          const [ns, attrName] = [name.slice(0, i), name.slice(i + 1)];\n          const attrs = nsAttrs[ns] ||= Object.create(null);\n          attrs[attrName] = value;\n        }\n      }\n    }\n    return [namespace, prefixes, attributeObj];\n  }\n  _getNameAndPrefix(name, nsAgnostic) {\n    const i = name.indexOf(\":\");\n    if (i === -1) {\n      return [name, null];\n    }\n    return [name.substring(i + 1), nsAgnostic ? \"\" : name.substring(0, i)];\n  }\n  onBeginElement(tagName, attributes, isEmpty) {\n    const [namespace, prefixes, attributesObj] = this._mkAttributes(attributes, tagName);\n    const [name, nsPrefix] = this._getNameAndPrefix(tagName, this._builder.isNsAgnostic());\n    const node = this._builder.build({\n      nsPrefix,\n      name,\n      attributes: attributesObj,\n      namespace,\n      prefixes\n    });\n    node[$globalData] = this._globalData;\n    if (isEmpty) {\n      node[$finalize]();\n      if (this._current[$onChild](node)) {\n        node[$setId](this._ids);\n      }\n      node[$clean](this._builder);\n      return;\n    }\n    this._stack.push(this._current);\n    this._current = node;\n  }\n  onEndElement(name) {\n    const node = this._current;\n    if (node[$isCDATAXml]() && typeof node[$content] === \"string\") {\n      const parser = new XFAParser();\n      parser._globalData = this._globalData;\n      const root = parser.parse(node[$content]);\n      node[$content] = null;\n      node[$onChild](root);\n    }\n    node[$finalize]();\n    this._current = this._stack.pop();\n    if (this._current[$onChild](node)) {\n      node[$setId](this._ids);\n    }\n    node[$clean](this._builder);\n  }\n  onError(code) {\n    this._errorCode = code;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/xfa/factory.js\n\n\n\n\n\n\n\n\nclass XFAFactory {\n  constructor(data) {\n    try {\n      this.root = new XFAParser().parse(XFAFactory._createDocument(data));\n      const binder = new Binder(this.root);\n      this.form = binder.bind();\n      this.dataHandler = new DataHandler(this.root, binder.getData());\n      this.form[$globalData].template = this.form;\n    } catch (e) {\n      warn(`XFA - an error occurred during parsing and binding: ${e}`);\n    }\n  }\n  isValid() {\n    return this.root && this.form;\n  }\n  _createPagesHelper() {\n    const iterator = this.form[$toPages]();\n    return new Promise((resolve, reject) => {\n      const nextIteration = () => {\n        try {\n          const value = iterator.next();\n          if (value.done) {\n            resolve(value.value);\n          } else {\n            setTimeout(nextIteration, 0);\n          }\n        } catch (e) {\n          reject(e);\n        }\n      };\n      setTimeout(nextIteration, 0);\n    });\n  }\n  async _createPages() {\n    try {\n      this.pages = await this._createPagesHelper();\n      this.dims = this.pages.children.map(c => {\n        const {\n          width,\n          height\n        } = c.attributes.style;\n        return [0, 0, parseInt(width), parseInt(height)];\n      });\n    } catch (e) {\n      warn(`XFA - an error occurred during layout: ${e}`);\n    }\n  }\n  getBoundingBox(pageIndex) {\n    return this.dims[pageIndex];\n  }\n  async getNumPages() {\n    if (!this.pages) {\n      await this._createPages();\n    }\n    return this.dims.length;\n  }\n  setImages(images) {\n    this.form[$globalData].images = images;\n  }\n  setFonts(fonts) {\n    this.form[$globalData].fontFinder = new FontFinder(fonts);\n    const missingFonts = [];\n    for (let typeface of this.form[$globalData].usedTypefaces) {\n      typeface = stripQuotes(typeface);\n      const font = this.form[$globalData].fontFinder.find(typeface);\n      if (!font) {\n        missingFonts.push(typeface);\n      }\n    }\n    if (missingFonts.length > 0) {\n      return missingFonts;\n    }\n    return null;\n  }\n  appendFonts(fonts, reallyMissingFonts) {\n    this.form[$globalData].fontFinder.add(fonts, reallyMissingFonts);\n  }\n  async getPages() {\n    if (!this.pages) {\n      await this._createPages();\n    }\n    const pages = this.pages;\n    this.pages = null;\n    return pages;\n  }\n  serializeData(storage) {\n    return this.dataHandler.serialize(storage);\n  }\n  static _createDocument(data) {\n    if (!data[\"/xdp:xdp\"]) {\n      return data[\"xdp:xdp\"];\n    }\n    return Object.values(data).join(\"\");\n  }\n  static getRichTextAsHtml(rc) {\n    if (!rc || typeof rc !== \"string\") {\n      return null;\n    }\n    try {\n      let root = new XFAParser(XhtmlNamespace, true).parse(rc);\n      if (![\"body\", \"xhtml\"].includes(root[$nodeName])) {\n        const newRoot = XhtmlNamespace.body({});\n        newRoot[$appendChild](root);\n        root = newRoot;\n      }\n      const result = root[$toHTML]();\n      if (!result.success) {\n        return null;\n      }\n      const {\n        html\n      } = result;\n      const {\n        attributes\n      } = html;\n      if (attributes) {\n        if (attributes.class) {\n          attributes.class = attributes.class.filter(attr => !attr.startsWith(\"xfa\"));\n        }\n        attributes.dir = \"auto\";\n      }\n      return {\n        html,\n        str: root[$text]()\n      };\n    } catch (e) {\n      warn(`XFA - an error occurred during parsing of rich text: ${e}`);\n    }\n    return null;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/annotation.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass AnnotationFactory {\n  static createGlobals(pdfManager) {\n    return Promise.all([pdfManager.ensureCatalog(\"acroForm\"), pdfManager.ensureDoc(\"xfaDatasets\"), pdfManager.ensureCatalog(\"structTreeRoot\"), pdfManager.ensureCatalog(\"baseUrl\"), pdfManager.ensureCatalog(\"attachments\")]).then(([acroForm, xfaDatasets, structTreeRoot, baseUrl, attachments]) => {\n      return {\n        pdfManager,\n        acroForm: acroForm instanceof Dict ? acroForm : Dict.empty,\n        xfaDatasets,\n        structTreeRoot,\n        baseUrl,\n        attachments\n      };\n    }, reason => {\n      warn(`createGlobals: \"${reason}\".`);\n      return null;\n    });\n  }\n  static async create(xref, ref, annotationGlobals, idFactory, collectFields, pageRef) {\n    const pageIndex = collectFields ? await this._getPageIndex(xref, ref, annotationGlobals.pdfManager) : null;\n    return annotationGlobals.pdfManager.ensure(this, \"_create\", [xref, ref, annotationGlobals, idFactory, collectFields, pageIndex, pageRef]);\n  }\n  static _create(xref, ref, annotationGlobals, idFactory, collectFields = false, pageIndex = null, pageRef = null) {\n    const dict = xref.fetchIfRef(ref);\n    if (!(dict instanceof Dict)) {\n      return undefined;\n    }\n    const {\n      acroForm,\n      pdfManager\n    } = annotationGlobals;\n    const id = ref instanceof Ref ? ref.toString() : `annot_${idFactory.createObjId()}`;\n    let subtype = dict.get(\"Subtype\");\n    subtype = subtype instanceof Name ? subtype.name : null;\n    const parameters = {\n      xref,\n      ref,\n      dict,\n      subtype,\n      id,\n      annotationGlobals,\n      collectFields,\n      needAppearances: !collectFields && acroForm.get(\"NeedAppearances\") === true,\n      pageIndex,\n      evaluatorOptions: pdfManager.evaluatorOptions,\n      pageRef\n    };\n    switch (subtype) {\n      case \"Link\":\n        return new LinkAnnotation(parameters);\n      case \"Text\":\n        return new TextAnnotation(parameters);\n      case \"Widget\":\n        let fieldType = getInheritableProperty({\n          dict,\n          key: \"FT\"\n        });\n        fieldType = fieldType instanceof Name ? fieldType.name : null;\n        switch (fieldType) {\n          case \"Tx\":\n            return new TextWidgetAnnotation(parameters);\n          case \"Btn\":\n            return new ButtonWidgetAnnotation(parameters);\n          case \"Ch\":\n            return new ChoiceWidgetAnnotation(parameters);\n          case \"Sig\":\n            return new SignatureWidgetAnnotation(parameters);\n        }\n        warn(`Unimplemented widget field type \"${fieldType}\", ` + \"falling back to base field type.\");\n        return new WidgetAnnotation(parameters);\n      case \"Popup\":\n        return new PopupAnnotation(parameters);\n      case \"FreeText\":\n        return new FreeTextAnnotation(parameters);\n      case \"Line\":\n        return new LineAnnotation(parameters);\n      case \"Square\":\n        return new SquareAnnotation(parameters);\n      case \"Circle\":\n        return new CircleAnnotation(parameters);\n      case \"PolyLine\":\n        return new PolylineAnnotation(parameters);\n      case \"Polygon\":\n        return new PolygonAnnotation(parameters);\n      case \"Caret\":\n        return new CaretAnnotation(parameters);\n      case \"Ink\":\n        return new InkAnnotation(parameters);\n      case \"Highlight\":\n        return new HighlightAnnotation(parameters);\n      case \"Underline\":\n        return new UnderlineAnnotation(parameters);\n      case \"Squiggly\":\n        return new SquigglyAnnotation(parameters);\n      case \"StrikeOut\":\n        return new StrikeOutAnnotation(parameters);\n      case \"Stamp\":\n        return new StampAnnotation(parameters);\n      case \"FileAttachment\":\n        return new FileAttachmentAnnotation(parameters);\n      default:\n        if (!collectFields) {\n          if (!subtype) {\n            warn(\"Annotation is missing the required /Subtype.\");\n          } else {\n            warn(`Unimplemented annotation type \"${subtype}\", ` + \"falling back to base annotation.\");\n          }\n        }\n        return new Annotation(parameters);\n    }\n  }\n  static async _getPageIndex(xref, ref, pdfManager) {\n    try {\n      const annotDict = await xref.fetchIfRefAsync(ref);\n      if (!(annotDict instanceof Dict)) {\n        return -1;\n      }\n      const pageRef = annotDict.getRaw(\"P\");\n      if (pageRef instanceof Ref) {\n        try {\n          const pageIndex = await pdfManager.ensureCatalog(\"getPageIndex\", [pageRef]);\n          return pageIndex;\n        } catch (ex) {\n          info(`_getPageIndex -- not a valid page reference: \"${ex}\".`);\n        }\n      }\n      if (annotDict.has(\"Kids\")) {\n        return -1;\n      }\n      const numPages = await pdfManager.ensureDoc(\"numPages\");\n      for (let pageIndex = 0; pageIndex < numPages; pageIndex++) {\n        const page = await pdfManager.getPage(pageIndex);\n        const annotations = await pdfManager.ensure(page, \"annotations\");\n        for (const annotRef of annotations) {\n          if (annotRef instanceof Ref && isRefsEqual(annotRef, ref)) {\n            return pageIndex;\n          }\n        }\n      }\n    } catch (ex) {\n      warn(`_getPageIndex: \"${ex}\".`);\n    }\n    return -1;\n  }\n  static generateImages(annotations, xref, isOffscreenCanvasSupported) {\n    if (!isOffscreenCanvasSupported) {\n      warn(\"generateImages: OffscreenCanvas is not supported, cannot save or print some annotations with images.\");\n      return null;\n    }\n    let imagePromises;\n    for (const {\n      bitmapId,\n      bitmap\n    } of annotations) {\n      if (!bitmap) {\n        continue;\n      }\n      imagePromises ||= new Map();\n      imagePromises.set(bitmapId, StampAnnotation.createImage(bitmap, xref));\n    }\n    return imagePromises;\n  }\n  static async saveNewAnnotations(evaluator, task, annotations, imagePromises) {\n    const xref = evaluator.xref;\n    let baseFontRef;\n    const dependencies = [];\n    const promises = [];\n    const {\n      isOffscreenCanvasSupported\n    } = evaluator.options;\n    for (const annotation of annotations) {\n      if (annotation.deleted) {\n        continue;\n      }\n      switch (annotation.annotationType) {\n        case AnnotationEditorType.FREETEXT:\n          if (!baseFontRef) {\n            const baseFont = new Dict(xref);\n            baseFont.set(\"BaseFont\", Name.get(\"Helvetica\"));\n            baseFont.set(\"Type\", Name.get(\"Font\"));\n            baseFont.set(\"Subtype\", Name.get(\"Type1\"));\n            baseFont.set(\"Encoding\", Name.get(\"WinAnsiEncoding\"));\n            const buffer = [];\n            baseFontRef = xref.getNewTemporaryRef();\n            await writeObject(baseFontRef, baseFont, buffer, xref);\n            dependencies.push({\n              ref: baseFontRef,\n              data: buffer.join(\"\")\n            });\n          }\n          promises.push(FreeTextAnnotation.createNewAnnotation(xref, annotation, dependencies, {\n            evaluator,\n            task,\n            baseFontRef\n          }));\n          break;\n        case AnnotationEditorType.HIGHLIGHT:\n          if (annotation.quadPoints) {\n            promises.push(HighlightAnnotation.createNewAnnotation(xref, annotation, dependencies));\n          } else {\n            promises.push(InkAnnotation.createNewAnnotation(xref, annotation, dependencies));\n          }\n          break;\n        case AnnotationEditorType.INK:\n          promises.push(InkAnnotation.createNewAnnotation(xref, annotation, dependencies));\n          break;\n        case AnnotationEditorType.STAMP:\n          if (!isOffscreenCanvasSupported) {\n            break;\n          }\n          const image = await imagePromises.get(annotation.bitmapId);\n          if (image.imageStream) {\n            const {\n              imageStream,\n              smaskStream\n            } = image;\n            const buffer = [];\n            if (smaskStream) {\n              const smaskRef = xref.getNewTemporaryRef();\n              await writeObject(smaskRef, smaskStream, buffer, xref);\n              dependencies.push({\n                ref: smaskRef,\n                data: buffer.join(\"\")\n              });\n              imageStream.dict.set(\"SMask\", smaskRef);\n              buffer.length = 0;\n            }\n            const imageRef = image.imageRef = xref.getNewTemporaryRef();\n            await writeObject(imageRef, imageStream, buffer, xref);\n            dependencies.push({\n              ref: imageRef,\n              data: buffer.join(\"\")\n            });\n            image.imageStream = image.smaskStream = null;\n          }\n          promises.push(StampAnnotation.createNewAnnotation(xref, annotation, dependencies, {\n            image\n          }));\n          break;\n      }\n    }\n    return {\n      annotations: await Promise.all(promises),\n      dependencies\n    };\n  }\n  static async printNewAnnotations(annotationGlobals, evaluator, task, annotations, imagePromises) {\n    if (!annotations) {\n      return null;\n    }\n    const {\n      options,\n      xref\n    } = evaluator;\n    const promises = [];\n    for (const annotation of annotations) {\n      if (annotation.deleted) {\n        continue;\n      }\n      switch (annotation.annotationType) {\n        case AnnotationEditorType.FREETEXT:\n          promises.push(FreeTextAnnotation.createNewPrintAnnotation(annotationGlobals, xref, annotation, {\n            evaluator,\n            task,\n            evaluatorOptions: options\n          }));\n          break;\n        case AnnotationEditorType.HIGHLIGHT:\n          if (annotation.quadPoints) {\n            promises.push(HighlightAnnotation.createNewPrintAnnotation(annotationGlobals, xref, annotation, {\n              evaluatorOptions: options\n            }));\n          } else {\n            promises.push(InkAnnotation.createNewPrintAnnotation(annotationGlobals, xref, annotation, {\n              evaluatorOptions: options\n            }));\n          }\n          break;\n        case AnnotationEditorType.INK:\n          promises.push(InkAnnotation.createNewPrintAnnotation(annotationGlobals, xref, annotation, {\n            evaluatorOptions: options\n          }));\n          break;\n        case AnnotationEditorType.STAMP:\n          if (!options.isOffscreenCanvasSupported) {\n            break;\n          }\n          const image = await imagePromises.get(annotation.bitmapId);\n          if (image.imageStream) {\n            const {\n              imageStream,\n              smaskStream\n            } = image;\n            if (smaskStream) {\n              imageStream.dict.set(\"SMask\", smaskStream);\n            }\n            image.imageRef = new JpegStream(imageStream, imageStream.length);\n            image.imageStream = image.smaskStream = null;\n          }\n          promises.push(StampAnnotation.createNewPrintAnnotation(annotationGlobals, xref, annotation, {\n            image,\n            evaluatorOptions: options\n          }));\n          break;\n      }\n    }\n    return Promise.all(promises);\n  }\n}\nfunction getRgbColor(color, defaultColor = new Uint8ClampedArray(3)) {\n  if (!Array.isArray(color)) {\n    return defaultColor;\n  }\n  const rgbColor = defaultColor || new Uint8ClampedArray(3);\n  switch (color.length) {\n    case 0:\n      return null;\n    case 1:\n      ColorSpace.singletons.gray.getRgbItem(color, 0, rgbColor, 0);\n      return rgbColor;\n    case 3:\n      ColorSpace.singletons.rgb.getRgbItem(color, 0, rgbColor, 0);\n      return rgbColor;\n    case 4:\n      ColorSpace.singletons.cmyk.getRgbItem(color, 0, rgbColor, 0);\n      return rgbColor;\n    default:\n      return defaultColor;\n  }\n}\nfunction getPdfColorArray(color) {\n  return Array.from(color, c => c / 255);\n}\nfunction getQuadPoints(dict, rect) {\n  const quadPoints = dict.getArray(\"QuadPoints\");\n  if (!isNumberArray(quadPoints, null) || quadPoints.length === 0 || quadPoints.length % 8 > 0) {\n    return null;\n  }\n  const quadPointsLists = [];\n  for (let i = 0, ii = quadPoints.length / 8; i < ii; i++) {\n    let minX = Infinity,\n      maxX = -Infinity,\n      minY = Infinity,\n      maxY = -Infinity;\n    for (let j = i * 8, jj = i * 8 + 8; j < jj; j += 2) {\n      const x = quadPoints[j];\n      const y = quadPoints[j + 1];\n      minX = Math.min(x, minX);\n      maxX = Math.max(x, maxX);\n      minY = Math.min(y, minY);\n      maxY = Math.max(y, maxY);\n    }\n    if (rect !== null && (minX < rect[0] || maxX > rect[2] || minY < rect[1] || maxY > rect[3])) {\n      return null;\n    }\n    quadPointsLists.push([{\n      x: minX,\n      y: maxY\n    }, {\n      x: maxX,\n      y: maxY\n    }, {\n      x: minX,\n      y: minY\n    }, {\n      x: maxX,\n      y: minY\n    }]);\n  }\n  return quadPointsLists;\n}\nfunction getTransformMatrix(rect, bbox, matrix) {\n  const [minX, minY, maxX, maxY] = Util.getAxialAlignedBoundingBox(bbox, matrix);\n  if (minX === maxX || minY === maxY) {\n    return [1, 0, 0, 1, rect[0], rect[1]];\n  }\n  const xRatio = (rect[2] - rect[0]) / (maxX - minX);\n  const yRatio = (rect[3] - rect[1]) / (maxY - minY);\n  return [xRatio, 0, 0, yRatio, rect[0] - minX * xRatio, rect[1] - minY * yRatio];\n}\nclass Annotation {\n  constructor(params) {\n    const {\n      dict,\n      xref,\n      annotationGlobals\n    } = params;\n    this.setTitle(dict.get(\"T\"));\n    this.setContents(dict.get(\"Contents\"));\n    this.setModificationDate(dict.get(\"M\"));\n    this.setFlags(dict.get(\"F\"));\n    this.setRectangle(dict.getArray(\"Rect\"));\n    this.setColor(dict.getArray(\"C\"));\n    this.setBorderStyle(dict);\n    this.setAppearance(dict);\n    this.setOptionalContent(dict);\n    const MK = dict.get(\"MK\");\n    this.setBorderAndBackgroundColors(MK);\n    this.setRotation(MK, dict);\n    this.ref = params.ref instanceof Ref ? params.ref : null;\n    this._streams = [];\n    if (this.appearance) {\n      this._streams.push(this.appearance);\n    }\n    const isLocked = !!(this.flags & AnnotationFlag.LOCKED);\n    const isContentLocked = !!(this.flags & AnnotationFlag.LOCKEDCONTENTS);\n    if (annotationGlobals.structTreeRoot) {\n      let structParent = dict.get(\"StructParent\");\n      structParent = Number.isInteger(structParent) && structParent >= 0 ? structParent : -1;\n      annotationGlobals.structTreeRoot.addAnnotationIdToPage(params.pageRef, structParent);\n    }\n    this.data = {\n      annotationFlags: this.flags,\n      borderStyle: this.borderStyle,\n      color: this.color,\n      backgroundColor: this.backgroundColor,\n      borderColor: this.borderColor,\n      rotation: this.rotation,\n      contentsObj: this._contents,\n      hasAppearance: !!this.appearance,\n      id: params.id,\n      modificationDate: this.modificationDate,\n      rect: this.rectangle,\n      subtype: params.subtype,\n      hasOwnCanvas: false,\n      noRotate: !!(this.flags & AnnotationFlag.NOROTATE),\n      noHTML: isLocked && isContentLocked\n    };\n    if (params.collectFields) {\n      const kids = dict.get(\"Kids\");\n      if (Array.isArray(kids)) {\n        const kidIds = [];\n        for (const kid of kids) {\n          if (kid instanceof Ref) {\n            kidIds.push(kid.toString());\n          }\n        }\n        if (kidIds.length !== 0) {\n          this.data.kidIds = kidIds;\n        }\n      }\n      this.data.actions = collectActions(xref, dict, AnnotationActionEventType);\n      this.data.fieldName = this._constructFieldName(dict);\n      this.data.pageIndex = params.pageIndex;\n    }\n    this._isOffscreenCanvasSupported = params.evaluatorOptions.isOffscreenCanvasSupported;\n    this._fallbackFontDict = null;\n    this._needAppearances = false;\n  }\n  _hasFlag(flags, flag) {\n    return !!(flags & flag);\n  }\n  _isViewable(flags) {\n    return !this._hasFlag(flags, AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, AnnotationFlag.NOVIEW);\n  }\n  _isPrintable(flags) {\n    return this._hasFlag(flags, AnnotationFlag.PRINT) && !this._hasFlag(flags, AnnotationFlag.HIDDEN) && !this._hasFlag(flags, AnnotationFlag.INVISIBLE);\n  }\n  mustBeViewed(annotationStorage, _renderForms) {\n    const noView = annotationStorage?.get(this.data.id)?.noView;\n    if (noView !== undefined) {\n      return !noView;\n    }\n    return this.viewable && !this._hasFlag(this.flags, AnnotationFlag.HIDDEN);\n  }\n  mustBePrinted(annotationStorage) {\n    const noPrint = annotationStorage?.get(this.data.id)?.noPrint;\n    if (noPrint !== undefined) {\n      return !noPrint;\n    }\n    return this.printable;\n  }\n  get viewable() {\n    if (this.data.quadPoints === null) {\n      return false;\n    }\n    if (this.flags === 0) {\n      return true;\n    }\n    return this._isViewable(this.flags);\n  }\n  get printable() {\n    if (this.data.quadPoints === null) {\n      return false;\n    }\n    if (this.flags === 0) {\n      return false;\n    }\n    return this._isPrintable(this.flags);\n  }\n  _parseStringHelper(data) {\n    const str = typeof data === \"string\" ? stringToPDFString(data) : \"\";\n    const dir = str && bidi(str).dir === \"rtl\" ? \"rtl\" : \"ltr\";\n    return {\n      str,\n      dir\n    };\n  }\n  setDefaultAppearance(params) {\n    const {\n      dict,\n      annotationGlobals\n    } = params;\n    const defaultAppearance = getInheritableProperty({\n      dict,\n      key: \"DA\"\n    }) || annotationGlobals.acroForm.get(\"DA\");\n    this._defaultAppearance = typeof defaultAppearance === \"string\" ? defaultAppearance : \"\";\n    this.data.defaultAppearanceData = parseDefaultAppearance(this._defaultAppearance);\n  }\n  setTitle(title) {\n    this._title = this._parseStringHelper(title);\n  }\n  setContents(contents) {\n    this._contents = this._parseStringHelper(contents);\n  }\n  setModificationDate(modificationDate) {\n    this.modificationDate = typeof modificationDate === \"string\" ? modificationDate : null;\n  }\n  setFlags(flags) {\n    this.flags = Number.isInteger(flags) && flags > 0 ? flags : 0;\n    if (this.flags & AnnotationFlag.INVISIBLE && this.constructor.name !== \"Annotation\") {\n      this.flags ^= AnnotationFlag.INVISIBLE;\n    }\n  }\n  hasFlag(flag) {\n    return this._hasFlag(this.flags, flag);\n  }\n  setRectangle(rectangle) {\n    this.rectangle = lookupNormalRect(rectangle, [0, 0, 0, 0]);\n  }\n  setColor(color) {\n    this.color = getRgbColor(color);\n  }\n  setLineEndings(lineEndings) {\n    this.lineEndings = [\"None\", \"None\"];\n    if (Array.isArray(lineEndings) && lineEndings.length === 2) {\n      for (let i = 0; i < 2; i++) {\n        const obj = lineEndings[i];\n        if (obj instanceof Name) {\n          switch (obj.name) {\n            case \"None\":\n              continue;\n            case \"Square\":\n            case \"Circle\":\n            case \"Diamond\":\n            case \"OpenArrow\":\n            case \"ClosedArrow\":\n            case \"Butt\":\n            case \"ROpenArrow\":\n            case \"RClosedArrow\":\n            case \"Slash\":\n              this.lineEndings[i] = obj.name;\n              continue;\n          }\n        }\n        warn(`Ignoring invalid lineEnding: ${obj}`);\n      }\n    }\n  }\n  setRotation(mk, dict) {\n    this.rotation = 0;\n    let angle = mk instanceof Dict ? mk.get(\"R\") || 0 : dict.get(\"Rotate\") || 0;\n    if (Number.isInteger(angle) && angle !== 0) {\n      angle %= 360;\n      if (angle < 0) {\n        angle += 360;\n      }\n      if (angle % 90 === 0) {\n        this.rotation = angle;\n      }\n    }\n  }\n  setBorderAndBackgroundColors(mk) {\n    if (mk instanceof Dict) {\n      this.borderColor = getRgbColor(mk.getArray(\"BC\"), null);\n      this.backgroundColor = getRgbColor(mk.getArray(\"BG\"), null);\n    } else {\n      this.borderColor = this.backgroundColor = null;\n    }\n  }\n  setBorderStyle(borderStyle) {\n    this.borderStyle = new AnnotationBorderStyle();\n    if (!(borderStyle instanceof Dict)) {\n      return;\n    }\n    if (borderStyle.has(\"BS\")) {\n      const dict = borderStyle.get(\"BS\");\n      if (dict instanceof Dict) {\n        const dictType = dict.get(\"Type\");\n        if (!dictType || isName(dictType, \"Border\")) {\n          this.borderStyle.setWidth(dict.get(\"W\"), this.rectangle);\n          this.borderStyle.setStyle(dict.get(\"S\"));\n          this.borderStyle.setDashArray(dict.getArray(\"D\"));\n        }\n      }\n    } else if (borderStyle.has(\"Border\")) {\n      const array = borderStyle.getArray(\"Border\");\n      if (Array.isArray(array) && array.length >= 3) {\n        this.borderStyle.setHorizontalCornerRadius(array[0]);\n        this.borderStyle.setVerticalCornerRadius(array[1]);\n        this.borderStyle.setWidth(array[2], this.rectangle);\n        if (array.length === 4) {\n          this.borderStyle.setDashArray(array[3], true);\n        }\n      }\n    } else {\n      this.borderStyle.setWidth(0);\n    }\n  }\n  setAppearance(dict) {\n    this.appearance = null;\n    const appearanceStates = dict.get(\"AP\");\n    if (!(appearanceStates instanceof Dict)) {\n      return;\n    }\n    const normalAppearanceState = appearanceStates.get(\"N\");\n    if (normalAppearanceState instanceof BaseStream) {\n      this.appearance = normalAppearanceState;\n      return;\n    }\n    if (!(normalAppearanceState instanceof Dict)) {\n      return;\n    }\n    const as = dict.get(\"AS\");\n    if (!(as instanceof Name) || !normalAppearanceState.has(as.name)) {\n      return;\n    }\n    const appearance = normalAppearanceState.get(as.name);\n    if (appearance instanceof BaseStream) {\n      this.appearance = appearance;\n    }\n  }\n  setOptionalContent(dict) {\n    this.oc = null;\n    const oc = dict.get(\"OC\");\n    if (oc instanceof Name) {\n      warn(\"setOptionalContent: Support for /Name-entry is not implemented.\");\n    } else if (oc instanceof Dict) {\n      this.oc = oc;\n    }\n  }\n  loadResources(keys, appearance) {\n    return appearance.dict.getAsync(\"Resources\").then(resources => {\n      if (!resources) {\n        return undefined;\n      }\n      const objectLoader = new ObjectLoader(resources, keys, resources.xref);\n      return objectLoader.load().then(function () {\n        return resources;\n      });\n    });\n  }\n  async getOperatorList(evaluator, task, intent, renderForms, annotationStorage) {\n    const {\n      hasOwnCanvas,\n      id,\n      rect\n    } = this.data;\n    let appearance = this.appearance;\n    const isUsingOwnCanvas = !!(hasOwnCanvas && intent & RenderingIntentFlag.DISPLAY);\n    if (isUsingOwnCanvas && (rect[0] === rect[2] || rect[1] === rect[3])) {\n      this.data.hasOwnCanvas = false;\n      return {\n        opList: new OperatorList(),\n        separateForm: false,\n        separateCanvas: false\n      };\n    }\n    if (!appearance) {\n      if (!isUsingOwnCanvas) {\n        return {\n          opList: new OperatorList(),\n          separateForm: false,\n          separateCanvas: false\n        };\n      }\n      appearance = new StringStream(\"\");\n      appearance.dict = new Dict();\n    }\n    const appearanceDict = appearance.dict;\n    const resources = await this.loadResources([\"ExtGState\", \"ColorSpace\", \"Pattern\", \"Shading\", \"XObject\", \"Font\"], appearance);\n    const bbox = lookupRect(appearanceDict.getArray(\"BBox\"), [0, 0, 1, 1]);\n    const matrix = lookupMatrix(appearanceDict.getArray(\"Matrix\"), IDENTITY_MATRIX);\n    const transform = getTransformMatrix(rect, bbox, matrix);\n    const opList = new OperatorList();\n    let optionalContent;\n    if (this.oc) {\n      optionalContent = await evaluator.parseMarkedContentProps(this.oc, null);\n    }\n    if (optionalContent !== undefined) {\n      opList.addOp(OPS.beginMarkedContentProps, [\"OC\", optionalContent]);\n    }\n    opList.addOp(OPS.beginAnnotation, [id, rect, transform, matrix, isUsingOwnCanvas]);\n    await evaluator.getOperatorList({\n      stream: appearance,\n      task,\n      resources,\n      operatorList: opList,\n      fallbackFontDict: this._fallbackFontDict\n    });\n    opList.addOp(OPS.endAnnotation, []);\n    if (optionalContent !== undefined) {\n      opList.addOp(OPS.endMarkedContent, []);\n    }\n    this.reset();\n    return {\n      opList,\n      separateForm: false,\n      separateCanvas: isUsingOwnCanvas\n    };\n  }\n  async save(evaluator, task, annotationStorage) {\n    return null;\n  }\n  get hasTextContent() {\n    return false;\n  }\n  async extractTextContent(evaluator, task, viewBox) {\n    if (!this.appearance) {\n      return;\n    }\n    const resources = await this.loadResources([\"ExtGState\", \"Font\", \"Properties\", \"XObject\"], this.appearance);\n    const text = [];\n    const buffer = [];\n    let firstPosition = null;\n    const sink = {\n      desiredSize: Math.Infinity,\n      ready: true,\n      enqueue(chunk, size) {\n        for (const item of chunk.items) {\n          if (item.str === undefined) {\n            continue;\n          }\n          firstPosition ||= item.transform.slice(-2);\n          buffer.push(item.str);\n          if (item.hasEOL) {\n            text.push(buffer.join(\"\").trimEnd());\n            buffer.length = 0;\n          }\n        }\n      }\n    };\n    await evaluator.getTextContent({\n      stream: this.appearance,\n      task,\n      resources,\n      includeMarkedContent: true,\n      keepWhiteSpace: true,\n      sink,\n      viewBox\n    });\n    this.reset();\n    if (buffer.length) {\n      text.push(buffer.join(\"\").trimEnd());\n    }\n    if (text.length > 1 || text[0]) {\n      const appearanceDict = this.appearance.dict;\n      const bbox = lookupRect(appearanceDict.getArray(\"BBox\"), null);\n      const matrix = lookupMatrix(appearanceDict.getArray(\"Matrix\"), null);\n      this.data.textPosition = this._transformPoint(firstPosition, bbox, matrix);\n      this.data.textContent = text;\n    }\n  }\n  _transformPoint(coords, bbox, matrix) {\n    const {\n      rect\n    } = this.data;\n    bbox ||= [0, 0, 1, 1];\n    matrix ||= [1, 0, 0, 1, 0, 0];\n    const transform = getTransformMatrix(rect, bbox, matrix);\n    transform[4] -= rect[0];\n    transform[5] -= rect[1];\n    coords = Util.applyTransform(coords, transform);\n    return Util.applyTransform(coords, matrix);\n  }\n  getFieldObject() {\n    if (this.data.kidIds) {\n      return {\n        id: this.data.id,\n        actions: this.data.actions,\n        name: this.data.fieldName,\n        strokeColor: this.data.borderColor,\n        fillColor: this.data.backgroundColor,\n        type: \"\",\n        kidIds: this.data.kidIds,\n        page: this.data.pageIndex,\n        rotation: this.rotation\n      };\n    }\n    return null;\n  }\n  reset() {\n    for (const stream of this._streams) {\n      stream.reset();\n    }\n  }\n  _constructFieldName(dict) {\n    if (!dict.has(\"T\") && !dict.has(\"Parent\")) {\n      warn(\"Unknown field name, falling back to empty field name.\");\n      return \"\";\n    }\n    if (!dict.has(\"Parent\")) {\n      return stringToPDFString(dict.get(\"T\"));\n    }\n    const fieldName = [];\n    if (dict.has(\"T\")) {\n      fieldName.unshift(stringToPDFString(dict.get(\"T\")));\n    }\n    let loopDict = dict;\n    const visited = new RefSet();\n    if (dict.objId) {\n      visited.put(dict.objId);\n    }\n    while (loopDict.has(\"Parent\")) {\n      loopDict = loopDict.get(\"Parent\");\n      if (!(loopDict instanceof Dict) || loopDict.objId && visited.has(loopDict.objId)) {\n        break;\n      }\n      if (loopDict.objId) {\n        visited.put(loopDict.objId);\n      }\n      if (loopDict.has(\"T\")) {\n        fieldName.unshift(stringToPDFString(loopDict.get(\"T\")));\n      }\n    }\n    return fieldName.join(\".\");\n  }\n}\nclass AnnotationBorderStyle {\n  constructor() {\n    this.width = 1;\n    this.style = AnnotationBorderStyleType.SOLID;\n    this.dashArray = [3];\n    this.horizontalCornerRadius = 0;\n    this.verticalCornerRadius = 0;\n  }\n  setWidth(width, rect = [0, 0, 0, 0]) {\n    if (width instanceof Name) {\n      this.width = 0;\n      return;\n    }\n    if (typeof width === \"number\") {\n      if (width > 0) {\n        const maxWidth = (rect[2] - rect[0]) / 2;\n        const maxHeight = (rect[3] - rect[1]) / 2;\n        if (maxWidth > 0 && maxHeight > 0 && (width > maxWidth || width > maxHeight)) {\n          warn(`AnnotationBorderStyle.setWidth - ignoring width: ${width}`);\n          width = 1;\n        }\n      }\n      this.width = width;\n    }\n  }\n  setStyle(style) {\n    if (!(style instanceof Name)) {\n      return;\n    }\n    switch (style.name) {\n      case \"S\":\n        this.style = AnnotationBorderStyleType.SOLID;\n        break;\n      case \"D\":\n        this.style = AnnotationBorderStyleType.DASHED;\n        break;\n      case \"B\":\n        this.style = AnnotationBorderStyleType.BEVELED;\n        break;\n      case \"I\":\n        this.style = AnnotationBorderStyleType.INSET;\n        break;\n      case \"U\":\n        this.style = AnnotationBorderStyleType.UNDERLINE;\n        break;\n      default:\n        break;\n    }\n  }\n  setDashArray(dashArray, forceStyle = false) {\n    if (Array.isArray(dashArray)) {\n      let isValid = true;\n      let allZeros = true;\n      for (const element of dashArray) {\n        const validNumber = +element >= 0;\n        if (!validNumber) {\n          isValid = false;\n          break;\n        } else if (element > 0) {\n          allZeros = false;\n        }\n      }\n      if (dashArray.length === 0 || isValid && !allZeros) {\n        this.dashArray = dashArray;\n        if (forceStyle) {\n          this.setStyle(Name.get(\"D\"));\n        }\n      } else {\n        this.width = 0;\n      }\n    } else if (dashArray) {\n      this.width = 0;\n    }\n  }\n  setHorizontalCornerRadius(radius) {\n    if (Number.isInteger(radius)) {\n      this.horizontalCornerRadius = radius;\n    }\n  }\n  setVerticalCornerRadius(radius) {\n    if (Number.isInteger(radius)) {\n      this.verticalCornerRadius = radius;\n    }\n  }\n}\nclass MarkupAnnotation extends Annotation {\n  constructor(params) {\n    super(params);\n    const {\n      dict\n    } = params;\n    if (dict.has(\"IRT\")) {\n      const rawIRT = dict.getRaw(\"IRT\");\n      this.data.inReplyTo = rawIRT instanceof Ref ? rawIRT.toString() : null;\n      const rt = dict.get(\"RT\");\n      this.data.replyType = rt instanceof Name ? rt.name : AnnotationReplyType.REPLY;\n    }\n    let popupRef = null;\n    if (this.data.replyType === AnnotationReplyType.GROUP) {\n      const parent = dict.get(\"IRT\");\n      this.setTitle(parent.get(\"T\"));\n      this.data.titleObj = this._title;\n      this.setContents(parent.get(\"Contents\"));\n      this.data.contentsObj = this._contents;\n      if (!parent.has(\"CreationDate\")) {\n        this.data.creationDate = null;\n      } else {\n        this.setCreationDate(parent.get(\"CreationDate\"));\n        this.data.creationDate = this.creationDate;\n      }\n      if (!parent.has(\"M\")) {\n        this.data.modificationDate = null;\n      } else {\n        this.setModificationDate(parent.get(\"M\"));\n        this.data.modificationDate = this.modificationDate;\n      }\n      popupRef = parent.getRaw(\"Popup\");\n      if (!parent.has(\"C\")) {\n        this.data.color = null;\n      } else {\n        this.setColor(parent.getArray(\"C\"));\n        this.data.color = this.color;\n      }\n    } else {\n      this.data.titleObj = this._title;\n      this.setCreationDate(dict.get(\"CreationDate\"));\n      this.data.creationDate = this.creationDate;\n      popupRef = dict.getRaw(\"Popup\");\n      if (!dict.has(\"C\")) {\n        this.data.color = null;\n      }\n    }\n    this.data.popupRef = popupRef instanceof Ref ? popupRef.toString() : null;\n    if (dict.has(\"RC\")) {\n      this.data.richText = XFAFactory.getRichTextAsHtml(dict.get(\"RC\"));\n    }\n  }\n  setCreationDate(creationDate) {\n    this.creationDate = typeof creationDate === \"string\" ? creationDate : null;\n  }\n  _setDefaultAppearance({\n    xref,\n    extra,\n    strokeColor,\n    fillColor,\n    blendMode,\n    strokeAlpha,\n    fillAlpha,\n    pointsCallback\n  }) {\n    let minX = Number.MAX_VALUE;\n    let minY = Number.MAX_VALUE;\n    let maxX = Number.MIN_VALUE;\n    let maxY = Number.MIN_VALUE;\n    const buffer = [\"q\"];\n    if (extra) {\n      buffer.push(extra);\n    }\n    if (strokeColor) {\n      buffer.push(`${strokeColor[0]} ${strokeColor[1]} ${strokeColor[2]} RG`);\n    }\n    if (fillColor) {\n      buffer.push(`${fillColor[0]} ${fillColor[1]} ${fillColor[2]} rg`);\n    }\n    let pointsArray = this.data.quadPoints;\n    if (!pointsArray) {\n      pointsArray = [[{\n        x: this.rectangle[0],\n        y: this.rectangle[3]\n      }, {\n        x: this.rectangle[2],\n        y: this.rectangle[3]\n      }, {\n        x: this.rectangle[0],\n        y: this.rectangle[1]\n      }, {\n        x: this.rectangle[2],\n        y: this.rectangle[1]\n      }]];\n    }\n    for (const points of pointsArray) {\n      const [mX, MX, mY, MY] = pointsCallback(buffer, points);\n      minX = Math.min(minX, mX);\n      maxX = Math.max(maxX, MX);\n      minY = Math.min(minY, mY);\n      maxY = Math.max(maxY, MY);\n    }\n    buffer.push(\"Q\");\n    const formDict = new Dict(xref);\n    const appearanceStreamDict = new Dict(xref);\n    appearanceStreamDict.set(\"Subtype\", Name.get(\"Form\"));\n    const appearanceStream = new StringStream(buffer.join(\" \"));\n    appearanceStream.dict = appearanceStreamDict;\n    formDict.set(\"Fm0\", appearanceStream);\n    const gsDict = new Dict(xref);\n    if (blendMode) {\n      gsDict.set(\"BM\", Name.get(blendMode));\n    }\n    if (typeof strokeAlpha === \"number\") {\n      gsDict.set(\"CA\", strokeAlpha);\n    }\n    if (typeof fillAlpha === \"number\") {\n      gsDict.set(\"ca\", fillAlpha);\n    }\n    const stateDict = new Dict(xref);\n    stateDict.set(\"GS0\", gsDict);\n    const resources = new Dict(xref);\n    resources.set(\"ExtGState\", stateDict);\n    resources.set(\"XObject\", formDict);\n    const appearanceDict = new Dict(xref);\n    appearanceDict.set(\"Resources\", resources);\n    const bbox = this.data.rect = [minX, minY, maxX, maxY];\n    appearanceDict.set(\"BBox\", bbox);\n    this.appearance = new StringStream(\"/GS0 gs /Fm0 Do\");\n    this.appearance.dict = appearanceDict;\n    this._streams.push(this.appearance, appearanceStream);\n  }\n  static async createNewAnnotation(xref, annotation, dependencies, params) {\n    const annotationRef = annotation.ref ||= xref.getNewTemporaryRef();\n    const ap = await this.createNewAppearanceStream(annotation, xref, params);\n    const buffer = [];\n    let annotationDict;\n    if (ap) {\n      const apRef = xref.getNewTemporaryRef();\n      annotationDict = this.createNewDict(annotation, xref, {\n        apRef\n      });\n      await writeObject(apRef, ap, buffer, xref);\n      dependencies.push({\n        ref: apRef,\n        data: buffer.join(\"\")\n      });\n    } else {\n      annotationDict = this.createNewDict(annotation, xref, {});\n    }\n    if (Number.isInteger(annotation.parentTreeId)) {\n      annotationDict.set(\"StructParent\", annotation.parentTreeId);\n    }\n    buffer.length = 0;\n    await writeObject(annotationRef, annotationDict, buffer, xref);\n    return {\n      ref: annotationRef,\n      data: buffer.join(\"\")\n    };\n  }\n  static async createNewPrintAnnotation(annotationGlobals, xref, annotation, params) {\n    const ap = await this.createNewAppearanceStream(annotation, xref, params);\n    const annotationDict = this.createNewDict(annotation, xref, {\n      ap\n    });\n    const newAnnotation = new this.prototype.constructor({\n      dict: annotationDict,\n      xref,\n      annotationGlobals,\n      evaluatorOptions: params.evaluatorOptions\n    });\n    if (annotation.ref) {\n      newAnnotation.ref = newAnnotation.refToReplace = annotation.ref;\n    }\n    return newAnnotation;\n  }\n}\nclass WidgetAnnotation extends Annotation {\n  constructor(params) {\n    super(params);\n    const {\n      dict,\n      xref,\n      annotationGlobals\n    } = params;\n    const data = this.data;\n    this._needAppearances = params.needAppearances;\n    data.annotationType = AnnotationType.WIDGET;\n    if (data.fieldName === undefined) {\n      data.fieldName = this._constructFieldName(dict);\n    }\n    if (data.actions === undefined) {\n      data.actions = collectActions(xref, dict, AnnotationActionEventType);\n    }\n    let fieldValue = getInheritableProperty({\n      dict,\n      key: \"V\",\n      getArray: true\n    });\n    data.fieldValue = this._decodeFormValue(fieldValue);\n    const defaultFieldValue = getInheritableProperty({\n      dict,\n      key: \"DV\",\n      getArray: true\n    });\n    data.defaultFieldValue = this._decodeFormValue(defaultFieldValue);\n    if (fieldValue === undefined && annotationGlobals.xfaDatasets) {\n      const path = this._title.str;\n      if (path) {\n        this._hasValueFromXFA = true;\n        data.fieldValue = fieldValue = annotationGlobals.xfaDatasets.getValue(path);\n      }\n    }\n    if (fieldValue === undefined && data.defaultFieldValue !== null) {\n      data.fieldValue = data.defaultFieldValue;\n    }\n    data.alternativeText = stringToPDFString(dict.get(\"TU\") || \"\");\n    this.setDefaultAppearance(params);\n    data.hasAppearance ||= this._needAppearances && data.fieldValue !== undefined && data.fieldValue !== null;\n    const fieldType = getInheritableProperty({\n      dict,\n      key: \"FT\"\n    });\n    data.fieldType = fieldType instanceof Name ? fieldType.name : null;\n    const localResources = getInheritableProperty({\n      dict,\n      key: \"DR\"\n    });\n    const acroFormResources = annotationGlobals.acroForm.get(\"DR\");\n    const appearanceResources = this.appearance?.dict.get(\"Resources\");\n    this._fieldResources = {\n      localResources,\n      acroFormResources,\n      appearanceResources,\n      mergedResources: Dict.merge({\n        xref,\n        dictArray: [localResources, appearanceResources, acroFormResources],\n        mergeSubDicts: true\n      })\n    };\n    data.fieldFlags = getInheritableProperty({\n      dict,\n      key: \"Ff\"\n    });\n    if (!Number.isInteger(data.fieldFlags) || data.fieldFlags < 0) {\n      data.fieldFlags = 0;\n    }\n    data.readOnly = this.hasFieldFlag(AnnotationFieldFlag.READONLY);\n    data.required = this.hasFieldFlag(AnnotationFieldFlag.REQUIRED);\n    data.hidden = this._hasFlag(data.annotationFlags, AnnotationFlag.HIDDEN) || this._hasFlag(data.annotationFlags, AnnotationFlag.NOVIEW);\n  }\n  _decodeFormValue(formValue) {\n    if (Array.isArray(formValue)) {\n      return formValue.filter(item => typeof item === \"string\").map(item => stringToPDFString(item));\n    } else if (formValue instanceof Name) {\n      return stringToPDFString(formValue.name);\n    } else if (typeof formValue === \"string\") {\n      return stringToPDFString(formValue);\n    }\n    return null;\n  }\n  hasFieldFlag(flag) {\n    return !!(this.data.fieldFlags & flag);\n  }\n  _isViewable(flags) {\n    return true;\n  }\n  mustBeViewed(annotationStorage, renderForms) {\n    if (renderForms) {\n      return this.viewable;\n    }\n    return super.mustBeViewed(annotationStorage, renderForms) && !this._hasFlag(this.flags, AnnotationFlag.NOVIEW);\n  }\n  getRotationMatrix(annotationStorage) {\n    let rotation = annotationStorage?.get(this.data.id)?.rotation;\n    if (rotation === undefined) {\n      rotation = this.rotation;\n    }\n    if (rotation === 0) {\n      return IDENTITY_MATRIX;\n    }\n    const width = this.data.rect[2] - this.data.rect[0];\n    const height = this.data.rect[3] - this.data.rect[1];\n    return getRotationMatrix(rotation, width, height);\n  }\n  getBorderAndBackgroundAppearances(annotationStorage) {\n    let rotation = annotationStorage?.get(this.data.id)?.rotation;\n    if (rotation === undefined) {\n      rotation = this.rotation;\n    }\n    if (!this.backgroundColor && !this.borderColor) {\n      return \"\";\n    }\n    const width = this.data.rect[2] - this.data.rect[0];\n    const height = this.data.rect[3] - this.data.rect[1];\n    const rect = rotation === 0 || rotation === 180 ? `0 0 ${width} ${height} re` : `0 0 ${height} ${width} re`;\n    let str = \"\";\n    if (this.backgroundColor) {\n      str = `${getPdfColor(this.backgroundColor, true)} ${rect} f `;\n    }\n    if (this.borderColor) {\n      const borderWidth = this.borderStyle.width || 1;\n      str += `${borderWidth} w ${getPdfColor(this.borderColor, false)} ${rect} S `;\n    }\n    return str;\n  }\n  async getOperatorList(evaluator, task, intent, renderForms, annotationStorage) {\n    if (renderForms && !(this instanceof SignatureWidgetAnnotation) && !this.data.noHTML && !this.data.hasOwnCanvas) {\n      return {\n        opList: new OperatorList(),\n        separateForm: true,\n        separateCanvas: false\n      };\n    }\n    if (!this._hasText) {\n      return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage);\n    }\n    const content = await this._getAppearance(evaluator, task, intent, annotationStorage);\n    if (this.appearance && content === null) {\n      return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage);\n    }\n    const opList = new OperatorList();\n    if (!this._defaultAppearance || content === null) {\n      return {\n        opList,\n        separateForm: false,\n        separateCanvas: false\n      };\n    }\n    const isUsingOwnCanvas = !!(this.data.hasOwnCanvas && intent & RenderingIntentFlag.DISPLAY);\n    const matrix = [1, 0, 0, 1, 0, 0];\n    const bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]];\n    const transform = getTransformMatrix(this.data.rect, bbox, matrix);\n    let optionalContent;\n    if (this.oc) {\n      optionalContent = await evaluator.parseMarkedContentProps(this.oc, null);\n    }\n    if (optionalContent !== undefined) {\n      opList.addOp(OPS.beginMarkedContentProps, [\"OC\", optionalContent]);\n    }\n    opList.addOp(OPS.beginAnnotation, [this.data.id, this.data.rect, transform, this.getRotationMatrix(annotationStorage), isUsingOwnCanvas]);\n    const stream = new StringStream(content);\n    await evaluator.getOperatorList({\n      stream,\n      task,\n      resources: this._fieldResources.mergedResources,\n      operatorList: opList\n    });\n    opList.addOp(OPS.endAnnotation, []);\n    if (optionalContent !== undefined) {\n      opList.addOp(OPS.endMarkedContent, []);\n    }\n    return {\n      opList,\n      separateForm: false,\n      separateCanvas: isUsingOwnCanvas\n    };\n  }\n  _getMKDict(rotation) {\n    const mk = new Dict(null);\n    if (rotation) {\n      mk.set(\"R\", rotation);\n    }\n    if (this.borderColor) {\n      mk.set(\"BC\", getPdfColorArray(this.borderColor));\n    }\n    if (this.backgroundColor) {\n      mk.set(\"BG\", getPdfColorArray(this.backgroundColor));\n    }\n    return mk.size > 0 ? mk : null;\n  }\n  amendSavedDict(annotationStorage, dict) {}\n  async save(evaluator, task, annotationStorage) {\n    const storageEntry = annotationStorage?.get(this.data.id);\n    let value = storageEntry?.value,\n      rotation = storageEntry?.rotation;\n    if (value === this.data.fieldValue || value === undefined) {\n      if (!this._hasValueFromXFA && rotation === undefined) {\n        return null;\n      }\n      value ||= this.data.fieldValue;\n    }\n    if (rotation === undefined && !this._hasValueFromXFA && Array.isArray(value) && Array.isArray(this.data.fieldValue) && value.length === this.data.fieldValue.length && value.every((x, i) => x === this.data.fieldValue[i])) {\n      return null;\n    }\n    if (rotation === undefined) {\n      rotation = this.rotation;\n    }\n    let appearance = null;\n    if (!this._needAppearances) {\n      appearance = await this._getAppearance(evaluator, task, RenderingIntentFlag.SAVE, annotationStorage);\n      if (appearance === null) {\n        return null;\n      }\n    } else {}\n    let needAppearances = false;\n    if (appearance?.needAppearances) {\n      needAppearances = true;\n      appearance = null;\n    }\n    const {\n      xref\n    } = evaluator;\n    const originalDict = xref.fetchIfRef(this.ref);\n    if (!(originalDict instanceof Dict)) {\n      return null;\n    }\n    const dict = new Dict(xref);\n    for (const key of originalDict.getKeys()) {\n      if (key !== \"AP\") {\n        dict.set(key, originalDict.getRaw(key));\n      }\n    }\n    const xfa = {\n      path: this.data.fieldName,\n      value\n    };\n    const encoder = val => isAscii(val) ? val : stringToUTF16String(val, true);\n    dict.set(\"V\", Array.isArray(value) ? value.map(encoder) : encoder(value));\n    this.amendSavedDict(annotationStorage, dict);\n    const maybeMK = this._getMKDict(rotation);\n    if (maybeMK) {\n      dict.set(\"MK\", maybeMK);\n    }\n    const buffer = [];\n    const changes = [{\n      ref: this.ref,\n      data: \"\",\n      xfa,\n      needAppearances\n    }];\n    if (appearance !== null) {\n      const newRef = xref.getNewTemporaryRef();\n      const AP = new Dict(xref);\n      dict.set(\"AP\", AP);\n      AP.set(\"N\", newRef);\n      const resources = this._getSaveFieldResources(xref);\n      const appearanceStream = new StringStream(appearance);\n      const appearanceDict = appearanceStream.dict = new Dict(xref);\n      appearanceDict.set(\"Subtype\", Name.get(\"Form\"));\n      appearanceDict.set(\"Resources\", resources);\n      appearanceDict.set(\"BBox\", [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]]);\n      const rotationMatrix = this.getRotationMatrix(annotationStorage);\n      if (rotationMatrix !== IDENTITY_MATRIX) {\n        appearanceDict.set(\"Matrix\", rotationMatrix);\n      }\n      await writeObject(newRef, appearanceStream, buffer, xref);\n      changes.push({\n        ref: newRef,\n        data: buffer.join(\"\"),\n        xfa: null,\n        needAppearances: false\n      });\n      buffer.length = 0;\n    }\n    dict.set(\"M\", `D:${getModificationDate()}`);\n    await writeObject(this.ref, dict, buffer, xref);\n    changes[0].data = buffer.join(\"\");\n    return changes;\n  }\n  async _getAppearance(evaluator, task, intent, annotationStorage) {\n    const isPassword = this.hasFieldFlag(AnnotationFieldFlag.PASSWORD);\n    if (isPassword) {\n      return null;\n    }\n    const storageEntry = annotationStorage?.get(this.data.id);\n    let value, rotation;\n    if (storageEntry) {\n      value = storageEntry.formattedValue || storageEntry.value;\n      rotation = storageEntry.rotation;\n    }\n    if (rotation === undefined && value === undefined && !this._needAppearances) {\n      if (!this._hasValueFromXFA || this.appearance) {\n        return null;\n      }\n    }\n    const colors = this.getBorderAndBackgroundAppearances(annotationStorage);\n    if (value === undefined) {\n      value = this.data.fieldValue;\n      if (!value) {\n        return `/Tx BMC q ${colors}Q EMC`;\n      }\n    }\n    if (Array.isArray(value) && value.length === 1) {\n      value = value[0];\n    }\n    assert(typeof value === \"string\", \"Expected `value` to be a string.\");\n    value = value.trim();\n    if (this.data.combo) {\n      const option = this.data.options.find(({\n        exportValue\n      }) => value === exportValue);\n      value = option?.displayValue || value;\n    }\n    if (value === \"\") {\n      return `/Tx BMC q ${colors}Q EMC`;\n    }\n    if (rotation === undefined) {\n      rotation = this.rotation;\n    }\n    let lineCount = -1;\n    let lines;\n    if (this.data.multiLine) {\n      lines = value.split(/\\r\\n?|\\n/).map(line => line.normalize(\"NFC\"));\n      lineCount = lines.length;\n    } else {\n      lines = [value.replace(/\\r\\n?|\\n/, \"\").normalize(\"NFC\")];\n    }\n    const defaultPadding = 1;\n    const defaultHPadding = 2;\n    let totalHeight = this.data.rect[3] - this.data.rect[1];\n    let totalWidth = this.data.rect[2] - this.data.rect[0];\n    if (rotation === 90 || rotation === 270) {\n      [totalWidth, totalHeight] = [totalHeight, totalWidth];\n    }\n    if (!this._defaultAppearance) {\n      this.data.defaultAppearanceData = parseDefaultAppearance(this._defaultAppearance = \"/Helvetica 0 Tf 0 g\");\n    }\n    let font = await WidgetAnnotation._getFontData(evaluator, task, this.data.defaultAppearanceData, this._fieldResources.mergedResources);\n    let defaultAppearance, fontSize, lineHeight;\n    const encodedLines = [];\n    let encodingError = false;\n    for (const line of lines) {\n      const encodedString = font.encodeString(line);\n      if (encodedString.length > 1) {\n        encodingError = true;\n      }\n      encodedLines.push(encodedString.join(\"\"));\n    }\n    if (encodingError && intent & RenderingIntentFlag.SAVE) {\n      return {\n        needAppearances: true\n      };\n    }\n    if (encodingError && this._isOffscreenCanvasSupported) {\n      const fontFamily = this.data.comb ? \"monospace\" : \"sans-serif\";\n      const fakeUnicodeFont = new FakeUnicodeFont(evaluator.xref, fontFamily);\n      const resources = fakeUnicodeFont.createFontResources(lines.join(\"\"));\n      const newFont = resources.getRaw(\"Font\");\n      if (this._fieldResources.mergedResources.has(\"Font\")) {\n        const oldFont = this._fieldResources.mergedResources.get(\"Font\");\n        for (const key of newFont.getKeys()) {\n          oldFont.set(key, newFont.getRaw(key));\n        }\n      } else {\n        this._fieldResources.mergedResources.set(\"Font\", newFont);\n      }\n      const fontName = fakeUnicodeFont.fontName.name;\n      font = await WidgetAnnotation._getFontData(evaluator, task, {\n        fontName,\n        fontSize: 0\n      }, resources);\n      for (let i = 0, ii = encodedLines.length; i < ii; i++) {\n        encodedLines[i] = stringToUTF16String(lines[i]);\n      }\n      const savedDefaultAppearance = Object.assign(Object.create(null), this.data.defaultAppearanceData);\n      this.data.defaultAppearanceData.fontSize = 0;\n      this.data.defaultAppearanceData.fontName = fontName;\n      [defaultAppearance, fontSize, lineHeight] = this._computeFontSize(totalHeight - 2 * defaultPadding, totalWidth - 2 * defaultHPadding, value, font, lineCount);\n      this.data.defaultAppearanceData = savedDefaultAppearance;\n    } else {\n      if (!this._isOffscreenCanvasSupported) {\n        warn(\"_getAppearance: OffscreenCanvas is not supported, annotation may not render correctly.\");\n      }\n      [defaultAppearance, fontSize, lineHeight] = this._computeFontSize(totalHeight - 2 * defaultPadding, totalWidth - 2 * defaultHPadding, value, font, lineCount);\n    }\n    let descent = font.descent;\n    if (isNaN(descent)) {\n      descent = BASELINE_FACTOR * lineHeight;\n    } else {\n      descent = Math.max(BASELINE_FACTOR * lineHeight, Math.abs(descent) * fontSize);\n    }\n    const defaultVPadding = Math.min(Math.floor((totalHeight - fontSize) / 2), defaultPadding);\n    const alignment = this.data.textAlignment;\n    if (this.data.multiLine) {\n      return this._getMultilineAppearance(defaultAppearance, encodedLines, font, fontSize, totalWidth, totalHeight, alignment, defaultHPadding, defaultVPadding, descent, lineHeight, annotationStorage);\n    }\n    if (this.data.comb) {\n      return this._getCombAppearance(defaultAppearance, font, encodedLines[0], fontSize, totalWidth, totalHeight, defaultHPadding, defaultVPadding, descent, lineHeight, annotationStorage);\n    }\n    const bottomPadding = defaultVPadding + descent;\n    if (alignment === 0 || alignment > 2) {\n      return `/Tx BMC q ${colors}BT ` + defaultAppearance + ` 1 0 0 1 ${numberToString(defaultHPadding)} ${numberToString(bottomPadding)} Tm (${escapeString(encodedLines[0])}) Tj` + \" ET Q EMC\";\n    }\n    const prevInfo = {\n      shift: 0\n    };\n    const renderedText = this._renderText(encodedLines[0], font, fontSize, totalWidth, alignment, prevInfo, defaultHPadding, bottomPadding);\n    return `/Tx BMC q ${colors}BT ` + defaultAppearance + ` 1 0 0 1 0 0 Tm ${renderedText}` + \" ET Q EMC\";\n  }\n  static async _getFontData(evaluator, task, appearanceData, resources) {\n    const operatorList = new OperatorList();\n    const initialState = {\n      font: null,\n      clone() {\n        return this;\n      }\n    };\n    const {\n      fontName,\n      fontSize\n    } = appearanceData;\n    await evaluator.handleSetFont(resources, [fontName && Name.get(fontName), fontSize], null, operatorList, task, initialState, null);\n    return initialState.font;\n  }\n  _getTextWidth(text, font) {\n    return font.charsToGlyphs(text).reduce((width, glyph) => width + glyph.width, 0) / 1000;\n  }\n  _computeFontSize(height, width, text, font, lineCount) {\n    let {\n      fontSize\n    } = this.data.defaultAppearanceData;\n    let lineHeight = (fontSize || 12) * LINE_FACTOR,\n      numberOfLines = Math.round(height / lineHeight);\n    if (!fontSize) {\n      const roundWithTwoDigits = x => Math.floor(x * 100) / 100;\n      if (lineCount === -1) {\n        const textWidth = this._getTextWidth(text, font);\n        fontSize = roundWithTwoDigits(Math.min(height / LINE_FACTOR, textWidth > width ? width / textWidth : Infinity));\n        numberOfLines = 1;\n      } else {\n        const lines = text.split(/\\r\\n?|\\n/);\n        const cachedLines = [];\n        for (const line of lines) {\n          const encoded = font.encodeString(line).join(\"\");\n          const glyphs = font.charsToGlyphs(encoded);\n          const positions = font.getCharPositions(encoded);\n          cachedLines.push({\n            line: encoded,\n            glyphs,\n            positions\n          });\n        }\n        const isTooBig = fsize => {\n          let totalHeight = 0;\n          for (const cache of cachedLines) {\n            const chunks = this._splitLine(null, font, fsize, width, cache);\n            totalHeight += chunks.length * fsize;\n            if (totalHeight > height) {\n              return true;\n            }\n          }\n          return false;\n        };\n        numberOfLines = Math.max(numberOfLines, lineCount);\n        while (true) {\n          lineHeight = height / numberOfLines;\n          fontSize = roundWithTwoDigits(lineHeight / LINE_FACTOR);\n          if (isTooBig(fontSize)) {\n            numberOfLines++;\n            continue;\n          }\n          break;\n        }\n      }\n      const {\n        fontName,\n        fontColor\n      } = this.data.defaultAppearanceData;\n      this._defaultAppearance = createDefaultAppearance({\n        fontSize,\n        fontName,\n        fontColor\n      });\n    }\n    return [this._defaultAppearance, fontSize, height / numberOfLines];\n  }\n  _renderText(text, font, fontSize, totalWidth, alignment, prevInfo, hPadding, vPadding) {\n    let shift;\n    if (alignment === 1) {\n      const width = this._getTextWidth(text, font) * fontSize;\n      shift = (totalWidth - width) / 2;\n    } else if (alignment === 2) {\n      const width = this._getTextWidth(text, font) * fontSize;\n      shift = totalWidth - width - hPadding;\n    } else {\n      shift = hPadding;\n    }\n    const shiftStr = numberToString(shift - prevInfo.shift);\n    prevInfo.shift = shift;\n    vPadding = numberToString(vPadding);\n    return `${shiftStr} ${vPadding} Td (${escapeString(text)}) Tj`;\n  }\n  _getSaveFieldResources(xref) {\n    const {\n      localResources,\n      appearanceResources,\n      acroFormResources\n    } = this._fieldResources;\n    const fontName = this.data.defaultAppearanceData?.fontName;\n    if (!fontName) {\n      return localResources || Dict.empty;\n    }\n    for (const resources of [localResources, appearanceResources]) {\n      if (resources instanceof Dict) {\n        const localFont = resources.get(\"Font\");\n        if (localFont instanceof Dict && localFont.has(fontName)) {\n          return resources;\n        }\n      }\n    }\n    if (acroFormResources instanceof Dict) {\n      const acroFormFont = acroFormResources.get(\"Font\");\n      if (acroFormFont instanceof Dict && acroFormFont.has(fontName)) {\n        const subFontDict = new Dict(xref);\n        subFontDict.set(fontName, acroFormFont.getRaw(fontName));\n        const subResourcesDict = new Dict(xref);\n        subResourcesDict.set(\"Font\", subFontDict);\n        return Dict.merge({\n          xref,\n          dictArray: [subResourcesDict, localResources],\n          mergeSubDicts: true\n        });\n      }\n    }\n    return localResources || Dict.empty;\n  }\n  getFieldObject() {\n    return null;\n  }\n}\nclass TextWidgetAnnotation extends WidgetAnnotation {\n  constructor(params) {\n    super(params);\n    this.data.hasOwnCanvas = this.data.readOnly && !this.data.noHTML;\n    this._hasText = true;\n    const dict = params.dict;\n    if (typeof this.data.fieldValue !== \"string\") {\n      this.data.fieldValue = \"\";\n    }\n    let alignment = getInheritableProperty({\n      dict,\n      key: \"Q\"\n    });\n    if (!Number.isInteger(alignment) || alignment < 0 || alignment > 2) {\n      alignment = null;\n    }\n    this.data.textAlignment = alignment;\n    let maximumLength = getInheritableProperty({\n      dict,\n      key: \"MaxLen\"\n    });\n    if (!Number.isInteger(maximumLength) || maximumLength < 0) {\n      maximumLength = 0;\n    }\n    this.data.maxLen = maximumLength;\n    this.data.multiLine = this.hasFieldFlag(AnnotationFieldFlag.MULTILINE);\n    this.data.comb = this.hasFieldFlag(AnnotationFieldFlag.COMB) && !this.hasFieldFlag(AnnotationFieldFlag.MULTILINE) && !this.hasFieldFlag(AnnotationFieldFlag.PASSWORD) && !this.hasFieldFlag(AnnotationFieldFlag.FILESELECT) && this.data.maxLen !== 0;\n    this.data.doNotScroll = this.hasFieldFlag(AnnotationFieldFlag.DONOTSCROLL);\n  }\n  get hasTextContent() {\n    return !!this.appearance && !this._needAppearances;\n  }\n  _getCombAppearance(defaultAppearance, font, text, fontSize, width, height, hPadding, vPadding, descent, lineHeight, annotationStorage) {\n    const combWidth = width / this.data.maxLen;\n    const colors = this.getBorderAndBackgroundAppearances(annotationStorage);\n    const buf = [];\n    const positions = font.getCharPositions(text);\n    for (const [start, end] of positions) {\n      buf.push(`(${escapeString(text.substring(start, end))}) Tj`);\n    }\n    const renderedComb = buf.join(` ${numberToString(combWidth)} 0 Td `);\n    return `/Tx BMC q ${colors}BT ` + defaultAppearance + ` 1 0 0 1 ${numberToString(hPadding)} ${numberToString(vPadding + descent)} Tm ${renderedComb}` + \" ET Q EMC\";\n  }\n  _getMultilineAppearance(defaultAppearance, lines, font, fontSize, width, height, alignment, hPadding, vPadding, descent, lineHeight, annotationStorage) {\n    const buf = [];\n    const totalWidth = width - 2 * hPadding;\n    const prevInfo = {\n      shift: 0\n    };\n    for (let i = 0, ii = lines.length; i < ii; i++) {\n      const line = lines[i];\n      const chunks = this._splitLine(line, font, fontSize, totalWidth);\n      for (let j = 0, jj = chunks.length; j < jj; j++) {\n        const chunk = chunks[j];\n        const vShift = i === 0 && j === 0 ? -vPadding - (lineHeight - descent) : -lineHeight;\n        buf.push(this._renderText(chunk, font, fontSize, width, alignment, prevInfo, hPadding, vShift));\n      }\n    }\n    const colors = this.getBorderAndBackgroundAppearances(annotationStorage);\n    const renderedText = buf.join(\"\\n\");\n    return `/Tx BMC q ${colors}BT ` + defaultAppearance + ` 1 0 0 1 0 ${numberToString(height)} Tm ${renderedText}` + \" ET Q EMC\";\n  }\n  _splitLine(line, font, fontSize, width, cache = {}) {\n    line = cache.line || line;\n    const glyphs = cache.glyphs || font.charsToGlyphs(line);\n    if (glyphs.length <= 1) {\n      return [line];\n    }\n    const positions = cache.positions || font.getCharPositions(line);\n    const scale = fontSize / 1000;\n    const chunks = [];\n    let lastSpacePosInStringStart = -1,\n      lastSpacePosInStringEnd = -1,\n      lastSpacePos = -1,\n      startChunk = 0,\n      currentWidth = 0;\n    for (let i = 0, ii = glyphs.length; i < ii; i++) {\n      const [start, end] = positions[i];\n      const glyph = glyphs[i];\n      const glyphWidth = glyph.width * scale;\n      if (glyph.unicode === \" \") {\n        if (currentWidth + glyphWidth > width) {\n          chunks.push(line.substring(startChunk, start));\n          startChunk = start;\n          currentWidth = glyphWidth;\n          lastSpacePosInStringStart = -1;\n          lastSpacePos = -1;\n        } else {\n          currentWidth += glyphWidth;\n          lastSpacePosInStringStart = start;\n          lastSpacePosInStringEnd = end;\n          lastSpacePos = i;\n        }\n      } else if (currentWidth + glyphWidth > width) {\n        if (lastSpacePosInStringStart !== -1) {\n          chunks.push(line.substring(startChunk, lastSpacePosInStringEnd));\n          startChunk = lastSpacePosInStringEnd;\n          i = lastSpacePos + 1;\n          lastSpacePosInStringStart = -1;\n          currentWidth = 0;\n        } else {\n          chunks.push(line.substring(startChunk, start));\n          startChunk = start;\n          currentWidth = glyphWidth;\n        }\n      } else {\n        currentWidth += glyphWidth;\n      }\n    }\n    if (startChunk < line.length) {\n      chunks.push(line.substring(startChunk, line.length));\n    }\n    return chunks;\n  }\n  getFieldObject() {\n    return {\n      id: this.data.id,\n      value: this.data.fieldValue,\n      defaultValue: this.data.defaultFieldValue || \"\",\n      multiline: this.data.multiLine,\n      password: this.hasFieldFlag(AnnotationFieldFlag.PASSWORD),\n      charLimit: this.data.maxLen,\n      comb: this.data.comb,\n      editable: !this.data.readOnly,\n      hidden: this.data.hidden,\n      name: this.data.fieldName,\n      rect: this.data.rect,\n      actions: this.data.actions,\n      page: this.data.pageIndex,\n      strokeColor: this.data.borderColor,\n      fillColor: this.data.backgroundColor,\n      rotation: this.rotation,\n      type: \"text\"\n    };\n  }\n}\nclass ButtonWidgetAnnotation extends WidgetAnnotation {\n  constructor(params) {\n    super(params);\n    this.checkedAppearance = null;\n    this.uncheckedAppearance = null;\n    this.data.checkBox = !this.hasFieldFlag(AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(AnnotationFieldFlag.PUSHBUTTON);\n    this.data.radioButton = this.hasFieldFlag(AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(AnnotationFieldFlag.PUSHBUTTON);\n    this.data.pushButton = this.hasFieldFlag(AnnotationFieldFlag.PUSHBUTTON);\n    this.data.isTooltipOnly = false;\n    if (this.data.checkBox) {\n      this._processCheckBox(params);\n    } else if (this.data.radioButton) {\n      this._processRadioButton(params);\n    } else if (this.data.pushButton) {\n      this.data.hasOwnCanvas = true;\n      this.data.noHTML = false;\n      this._processPushButton(params);\n    } else {\n      warn(\"Invalid field flags for button widget annotation\");\n    }\n  }\n  async getOperatorList(evaluator, task, intent, renderForms, annotationStorage) {\n    if (this.data.pushButton) {\n      return super.getOperatorList(evaluator, task, intent, false, annotationStorage);\n    }\n    let value = null;\n    let rotation = null;\n    if (annotationStorage) {\n      const storageEntry = annotationStorage.get(this.data.id);\n      value = storageEntry ? storageEntry.value : null;\n      rotation = storageEntry ? storageEntry.rotation : null;\n    }\n    if (value === null && this.appearance) {\n      return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage);\n    }\n    if (value === null || value === undefined) {\n      value = this.data.checkBox ? this.data.fieldValue === this.data.exportValue : this.data.fieldValue === this.data.buttonValue;\n    }\n    const appearance = value ? this.checkedAppearance : this.uncheckedAppearance;\n    if (appearance) {\n      const savedAppearance = this.appearance;\n      const savedMatrix = lookupMatrix(appearance.dict.getArray(\"Matrix\"), IDENTITY_MATRIX);\n      if (rotation) {\n        appearance.dict.set(\"Matrix\", this.getRotationMatrix(annotationStorage));\n      }\n      this.appearance = appearance;\n      const operatorList = super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage);\n      this.appearance = savedAppearance;\n      appearance.dict.set(\"Matrix\", savedMatrix);\n      return operatorList;\n    }\n    return {\n      opList: new OperatorList(),\n      separateForm: false,\n      separateCanvas: false\n    };\n  }\n  async save(evaluator, task, annotationStorage) {\n    if (this.data.checkBox) {\n      return this._saveCheckbox(evaluator, task, annotationStorage);\n    }\n    if (this.data.radioButton) {\n      return this._saveRadioButton(evaluator, task, annotationStorage);\n    }\n    return null;\n  }\n  async _saveCheckbox(evaluator, task, annotationStorage) {\n    if (!annotationStorage) {\n      return null;\n    }\n    const storageEntry = annotationStorage.get(this.data.id);\n    let rotation = storageEntry?.rotation,\n      value = storageEntry?.value;\n    if (rotation === undefined) {\n      if (value === undefined) {\n        return null;\n      }\n      const defaultValue = this.data.fieldValue === this.data.exportValue;\n      if (defaultValue === value) {\n        return null;\n      }\n    }\n    const dict = evaluator.xref.fetchIfRef(this.ref);\n    if (!(dict instanceof Dict)) {\n      return null;\n    }\n    if (rotation === undefined) {\n      rotation = this.rotation;\n    }\n    if (value === undefined) {\n      value = this.data.fieldValue === this.data.exportValue;\n    }\n    const xfa = {\n      path: this.data.fieldName,\n      value: value ? this.data.exportValue : \"\"\n    };\n    const name = Name.get(value ? this.data.exportValue : \"Off\");\n    dict.set(\"V\", name);\n    dict.set(\"AS\", name);\n    dict.set(\"M\", `D:${getModificationDate()}`);\n    const maybeMK = this._getMKDict(rotation);\n    if (maybeMK) {\n      dict.set(\"MK\", maybeMK);\n    }\n    const buffer = [];\n    await writeObject(this.ref, dict, buffer, evaluator.xref);\n    return [{\n      ref: this.ref,\n      data: buffer.join(\"\"),\n      xfa\n    }];\n  }\n  async _saveRadioButton(evaluator, task, annotationStorage) {\n    if (!annotationStorage) {\n      return null;\n    }\n    const storageEntry = annotationStorage.get(this.data.id);\n    let rotation = storageEntry?.rotation,\n      value = storageEntry?.value;\n    if (rotation === undefined) {\n      if (value === undefined) {\n        return null;\n      }\n      const defaultValue = this.data.fieldValue === this.data.buttonValue;\n      if (defaultValue === value) {\n        return null;\n      }\n    }\n    const dict = evaluator.xref.fetchIfRef(this.ref);\n    if (!(dict instanceof Dict)) {\n      return null;\n    }\n    if (value === undefined) {\n      value = this.data.fieldValue === this.data.buttonValue;\n    }\n    if (rotation === undefined) {\n      rotation = this.rotation;\n    }\n    const xfa = {\n      path: this.data.fieldName,\n      value: value ? this.data.buttonValue : \"\"\n    };\n    const name = Name.get(value ? this.data.buttonValue : \"Off\");\n    const buffer = [];\n    let parentData = null;\n    if (value) {\n      if (this.parent instanceof Ref) {\n        const parent = evaluator.xref.fetch(this.parent);\n        parent.set(\"V\", name);\n        await writeObject(this.parent, parent, buffer, evaluator.xref);\n        parentData = buffer.join(\"\");\n        buffer.length = 0;\n      } else if (this.parent instanceof Dict) {\n        this.parent.set(\"V\", name);\n      }\n    }\n    dict.set(\"AS\", name);\n    dict.set(\"M\", `D:${getModificationDate()}`);\n    const maybeMK = this._getMKDict(rotation);\n    if (maybeMK) {\n      dict.set(\"MK\", maybeMK);\n    }\n    await writeObject(this.ref, dict, buffer, evaluator.xref);\n    const newRefs = [{\n      ref: this.ref,\n      data: buffer.join(\"\"),\n      xfa\n    }];\n    if (parentData) {\n      newRefs.push({\n        ref: this.parent,\n        data: parentData,\n        xfa: null\n      });\n    }\n    return newRefs;\n  }\n  _getDefaultCheckedAppearance(params, type) {\n    const width = this.data.rect[2] - this.data.rect[0];\n    const height = this.data.rect[3] - this.data.rect[1];\n    const bbox = [0, 0, width, height];\n    const FONT_RATIO = 0.8;\n    const fontSize = Math.min(width, height) * FONT_RATIO;\n    let metrics, char;\n    if (type === \"check\") {\n      metrics = {\n        width: 0.755 * fontSize,\n        height: 0.705 * fontSize\n      };\n      char = \"\\x33\";\n    } else if (type === \"disc\") {\n      metrics = {\n        width: 0.791 * fontSize,\n        height: 0.705 * fontSize\n      };\n      char = \"\\x6C\";\n    } else {\n      unreachable(`_getDefaultCheckedAppearance - unsupported type: ${type}`);\n    }\n    const xShift = numberToString((width - metrics.width) / 2);\n    const yShift = numberToString((height - metrics.height) / 2);\n    const appearance = `q BT /PdfJsZaDb ${fontSize} Tf 0 g ${xShift} ${yShift} Td (${char}) Tj ET Q`;\n    const appearanceStreamDict = new Dict(params.xref);\n    appearanceStreamDict.set(\"FormType\", 1);\n    appearanceStreamDict.set(\"Subtype\", Name.get(\"Form\"));\n    appearanceStreamDict.set(\"Type\", Name.get(\"XObject\"));\n    appearanceStreamDict.set(\"BBox\", bbox);\n    appearanceStreamDict.set(\"Matrix\", [1, 0, 0, 1, 0, 0]);\n    appearanceStreamDict.set(\"Length\", appearance.length);\n    const resources = new Dict(params.xref);\n    const font = new Dict(params.xref);\n    font.set(\"PdfJsZaDb\", this.fallbackFontDict);\n    resources.set(\"Font\", font);\n    appearanceStreamDict.set(\"Resources\", resources);\n    this.checkedAppearance = new StringStream(appearance);\n    this.checkedAppearance.dict = appearanceStreamDict;\n    this._streams.push(this.checkedAppearance);\n  }\n  _processCheckBox(params) {\n    const customAppearance = params.dict.get(\"AP\");\n    if (!(customAppearance instanceof Dict)) {\n      return;\n    }\n    const normalAppearance = customAppearance.get(\"N\");\n    if (!(normalAppearance instanceof Dict)) {\n      return;\n    }\n    const asValue = this._decodeFormValue(params.dict.get(\"AS\"));\n    if (typeof asValue === \"string\") {\n      this.data.fieldValue = asValue;\n    }\n    const yes = this.data.fieldValue !== null && this.data.fieldValue !== \"Off\" ? this.data.fieldValue : \"Yes\";\n    const exportValues = normalAppearance.getKeys();\n    if (exportValues.length === 0) {\n      exportValues.push(\"Off\", yes);\n    } else if (exportValues.length === 1) {\n      if (exportValues[0] === \"Off\") {\n        exportValues.push(yes);\n      } else {\n        exportValues.unshift(\"Off\");\n      }\n    } else if (exportValues.includes(yes)) {\n      exportValues.length = 0;\n      exportValues.push(\"Off\", yes);\n    } else {\n      const otherYes = exportValues.find(v => v !== \"Off\");\n      exportValues.length = 0;\n      exportValues.push(\"Off\", otherYes);\n    }\n    if (!exportValues.includes(this.data.fieldValue)) {\n      this.data.fieldValue = \"Off\";\n    }\n    this.data.exportValue = exportValues[1];\n    const checkedAppearance = normalAppearance.get(this.data.exportValue);\n    this.checkedAppearance = checkedAppearance instanceof BaseStream ? checkedAppearance : null;\n    const uncheckedAppearance = normalAppearance.get(\"Off\");\n    this.uncheckedAppearance = uncheckedAppearance instanceof BaseStream ? uncheckedAppearance : null;\n    if (this.checkedAppearance) {\n      this._streams.push(this.checkedAppearance);\n    } else {\n      this._getDefaultCheckedAppearance(params, \"check\");\n    }\n    if (this.uncheckedAppearance) {\n      this._streams.push(this.uncheckedAppearance);\n    }\n    this._fallbackFontDict = this.fallbackFontDict;\n    if (this.data.defaultFieldValue === null) {\n      this.data.defaultFieldValue = \"Off\";\n    }\n  }\n  _processRadioButton(params) {\n    this.data.buttonValue = null;\n    const fieldParent = params.dict.get(\"Parent\");\n    if (fieldParent instanceof Dict) {\n      this.parent = params.dict.getRaw(\"Parent\");\n      const fieldParentValue = fieldParent.get(\"V\");\n      if (fieldParentValue instanceof Name) {\n        this.data.fieldValue = this._decodeFormValue(fieldParentValue);\n      }\n    }\n    const appearanceStates = params.dict.get(\"AP\");\n    if (!(appearanceStates instanceof Dict)) {\n      return;\n    }\n    const normalAppearance = appearanceStates.get(\"N\");\n    if (!(normalAppearance instanceof Dict)) {\n      return;\n    }\n    for (const key of normalAppearance.getKeys()) {\n      if (key !== \"Off\") {\n        this.data.buttonValue = this._decodeFormValue(key);\n        break;\n      }\n    }\n    const checkedAppearance = normalAppearance.get(this.data.buttonValue);\n    this.checkedAppearance = checkedAppearance instanceof BaseStream ? checkedAppearance : null;\n    const uncheckedAppearance = normalAppearance.get(\"Off\");\n    this.uncheckedAppearance = uncheckedAppearance instanceof BaseStream ? uncheckedAppearance : null;\n    if (this.checkedAppearance) {\n      this._streams.push(this.checkedAppearance);\n    } else {\n      this._getDefaultCheckedAppearance(params, \"disc\");\n    }\n    if (this.uncheckedAppearance) {\n      this._streams.push(this.uncheckedAppearance);\n    }\n    this._fallbackFontDict = this.fallbackFontDict;\n    if (this.data.defaultFieldValue === null) {\n      this.data.defaultFieldValue = \"Off\";\n    }\n  }\n  _processPushButton(params) {\n    const {\n      dict,\n      annotationGlobals\n    } = params;\n    if (!dict.has(\"A\") && !dict.has(\"AA\") && !this.data.alternativeText) {\n      warn(\"Push buttons without action dictionaries are not supported\");\n      return;\n    }\n    this.data.isTooltipOnly = !dict.has(\"A\") && !dict.has(\"AA\");\n    Catalog.parseDestDictionary({\n      destDict: dict,\n      resultObj: this.data,\n      docBaseUrl: annotationGlobals.baseUrl,\n      docAttachments: annotationGlobals.attachments\n    });\n  }\n  getFieldObject() {\n    let type = \"button\";\n    let exportValues;\n    if (this.data.checkBox) {\n      type = \"checkbox\";\n      exportValues = this.data.exportValue;\n    } else if (this.data.radioButton) {\n      type = \"radiobutton\";\n      exportValues = this.data.buttonValue;\n    }\n    return {\n      id: this.data.id,\n      value: this.data.fieldValue || \"Off\",\n      defaultValue: this.data.defaultFieldValue,\n      exportValues,\n      editable: !this.data.readOnly,\n      name: this.data.fieldName,\n      rect: this.data.rect,\n      hidden: this.data.hidden,\n      actions: this.data.actions,\n      page: this.data.pageIndex,\n      strokeColor: this.data.borderColor,\n      fillColor: this.data.backgroundColor,\n      rotation: this.rotation,\n      type\n    };\n  }\n  get fallbackFontDict() {\n    const dict = new Dict();\n    dict.set(\"BaseFont\", Name.get(\"ZapfDingbats\"));\n    dict.set(\"Type\", Name.get(\"FallbackType\"));\n    dict.set(\"Subtype\", Name.get(\"FallbackType\"));\n    dict.set(\"Encoding\", Name.get(\"ZapfDingbatsEncoding\"));\n    return shadow(this, \"fallbackFontDict\", dict);\n  }\n}\nclass ChoiceWidgetAnnotation extends WidgetAnnotation {\n  constructor(params) {\n    super(params);\n    const {\n      dict,\n      xref\n    } = params;\n    this.indices = dict.getArray(\"I\");\n    this.hasIndices = Array.isArray(this.indices) && this.indices.length > 0;\n    this.data.options = [];\n    const options = getInheritableProperty({\n      dict,\n      key: \"Opt\"\n    });\n    if (Array.isArray(options)) {\n      for (let i = 0, ii = options.length; i < ii; i++) {\n        const option = xref.fetchIfRef(options[i]);\n        const isOptionArray = Array.isArray(option);\n        this.data.options[i] = {\n          exportValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[0]) : option),\n          displayValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[1]) : option)\n        };\n      }\n    }\n    if (!this.hasIndices) {\n      if (typeof this.data.fieldValue === \"string\") {\n        this.data.fieldValue = [this.data.fieldValue];\n      } else if (!this.data.fieldValue) {\n        this.data.fieldValue = [];\n      }\n    } else {\n      this.data.fieldValue = [];\n      const ii = this.data.options.length;\n      for (const i of this.indices) {\n        if (Number.isInteger(i) && i >= 0 && i < ii) {\n          this.data.fieldValue.push(this.data.options[i].exportValue);\n        }\n      }\n    }\n    this.data.combo = this.hasFieldFlag(AnnotationFieldFlag.COMBO);\n    this.data.multiSelect = this.hasFieldFlag(AnnotationFieldFlag.MULTISELECT);\n    this._hasText = true;\n  }\n  getFieldObject() {\n    const type = this.data.combo ? \"combobox\" : \"listbox\";\n    const value = this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : null;\n    return {\n      id: this.data.id,\n      value,\n      defaultValue: this.data.defaultFieldValue,\n      editable: !this.data.readOnly,\n      name: this.data.fieldName,\n      rect: this.data.rect,\n      numItems: this.data.fieldValue.length,\n      multipleSelection: this.data.multiSelect,\n      hidden: this.data.hidden,\n      actions: this.data.actions,\n      items: this.data.options,\n      page: this.data.pageIndex,\n      strokeColor: this.data.borderColor,\n      fillColor: this.data.backgroundColor,\n      rotation: this.rotation,\n      type\n    };\n  }\n  amendSavedDict(annotationStorage, dict) {\n    if (!this.hasIndices) {\n      return;\n    }\n    let values = annotationStorage?.get(this.data.id)?.value;\n    if (!Array.isArray(values)) {\n      values = [values];\n    }\n    const indices = [];\n    const {\n      options\n    } = this.data;\n    for (let i = 0, j = 0, ii = options.length; i < ii; i++) {\n      if (options[i].exportValue === values[j]) {\n        indices.push(i);\n        j += 1;\n      }\n    }\n    dict.set(\"I\", indices);\n  }\n  async _getAppearance(evaluator, task, intent, annotationStorage) {\n    if (this.data.combo) {\n      return super._getAppearance(evaluator, task, intent, annotationStorage);\n    }\n    let exportedValue, rotation;\n    const storageEntry = annotationStorage?.get(this.data.id);\n    if (storageEntry) {\n      rotation = storageEntry.rotation;\n      exportedValue = storageEntry.value;\n    }\n    if (rotation === undefined && exportedValue === undefined && !this._needAppearances) {\n      return null;\n    }\n    if (exportedValue === undefined) {\n      exportedValue = this.data.fieldValue;\n    } else if (!Array.isArray(exportedValue)) {\n      exportedValue = [exportedValue];\n    }\n    const defaultPadding = 1;\n    const defaultHPadding = 2;\n    let totalHeight = this.data.rect[3] - this.data.rect[1];\n    let totalWidth = this.data.rect[2] - this.data.rect[0];\n    if (rotation === 90 || rotation === 270) {\n      [totalWidth, totalHeight] = [totalHeight, totalWidth];\n    }\n    const lineCount = this.data.options.length;\n    const valueIndices = [];\n    for (let i = 0; i < lineCount; i++) {\n      const {\n        exportValue\n      } = this.data.options[i];\n      if (exportedValue.includes(exportValue)) {\n        valueIndices.push(i);\n      }\n    }\n    if (!this._defaultAppearance) {\n      this.data.defaultAppearanceData = parseDefaultAppearance(this._defaultAppearance = \"/Helvetica 0 Tf 0 g\");\n    }\n    const font = await WidgetAnnotation._getFontData(evaluator, task, this.data.defaultAppearanceData, this._fieldResources.mergedResources);\n    let defaultAppearance;\n    let {\n      fontSize\n    } = this.data.defaultAppearanceData;\n    if (!fontSize) {\n      const lineHeight = (totalHeight - defaultPadding) / lineCount;\n      let lineWidth = -1;\n      let value;\n      for (const {\n        displayValue\n      } of this.data.options) {\n        const width = this._getTextWidth(displayValue, font);\n        if (width > lineWidth) {\n          lineWidth = width;\n          value = displayValue;\n        }\n      }\n      [defaultAppearance, fontSize] = this._computeFontSize(lineHeight, totalWidth - 2 * defaultHPadding, value, font, -1);\n    } else {\n      defaultAppearance = this._defaultAppearance;\n    }\n    const lineHeight = fontSize * LINE_FACTOR;\n    const vPadding = (lineHeight - fontSize) / 2;\n    const numberOfVisibleLines = Math.floor(totalHeight / lineHeight);\n    let firstIndex = 0;\n    if (valueIndices.length > 0) {\n      const minIndex = Math.min(...valueIndices);\n      const maxIndex = Math.max(...valueIndices);\n      firstIndex = Math.max(0, maxIndex - numberOfVisibleLines + 1);\n      if (firstIndex > minIndex) {\n        firstIndex = minIndex;\n      }\n    }\n    const end = Math.min(firstIndex + numberOfVisibleLines + 1, lineCount);\n    const buf = [\"/Tx BMC q\", `1 1 ${totalWidth} ${totalHeight} re W n`];\n    if (valueIndices.length) {\n      buf.push(\"0.600006 0.756866 0.854904 rg\");\n      for (const index of valueIndices) {\n        if (firstIndex <= index && index < end) {\n          buf.push(`1 ${totalHeight - (index - firstIndex + 1) * lineHeight} ${totalWidth} ${lineHeight} re f`);\n        }\n      }\n    }\n    buf.push(\"BT\", defaultAppearance, `1 0 0 1 0 ${totalHeight} Tm`);\n    const prevInfo = {\n      shift: 0\n    };\n    for (let i = firstIndex; i < end; i++) {\n      const {\n        displayValue\n      } = this.data.options[i];\n      const vpadding = i === firstIndex ? vPadding : 0;\n      buf.push(this._renderText(displayValue, font, fontSize, totalWidth, 0, prevInfo, defaultHPadding, -lineHeight + vpadding));\n    }\n    buf.push(\"ET Q EMC\");\n    return buf.join(\"\\n\");\n  }\n}\nclass SignatureWidgetAnnotation extends WidgetAnnotation {\n  constructor(params) {\n    super(params);\n    this.data.fieldValue = null;\n    this.data.hasOwnCanvas = this.data.noRotate;\n    this.data.noHTML = !this.data.hasOwnCanvas;\n  }\n  getFieldObject() {\n    return {\n      id: this.data.id,\n      value: null,\n      page: this.data.pageIndex,\n      type: \"signature\"\n    };\n  }\n}\nclass TextAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    const DEFAULT_ICON_SIZE = 22;\n    super(params);\n    this.data.noRotate = true;\n    this.data.hasOwnCanvas = this.data.noRotate;\n    this.data.noHTML = false;\n    const {\n      dict\n    } = params;\n    this.data.annotationType = AnnotationType.TEXT;\n    if (this.data.hasAppearance) {\n      this.data.name = \"NoIcon\";\n    } else {\n      this.data.rect[1] = this.data.rect[3] - DEFAULT_ICON_SIZE;\n      this.data.rect[2] = this.data.rect[0] + DEFAULT_ICON_SIZE;\n      this.data.name = dict.has(\"Name\") ? dict.get(\"Name\").name : \"Note\";\n    }\n    if (dict.has(\"State\")) {\n      this.data.state = dict.get(\"State\") || null;\n      this.data.stateModel = dict.get(\"StateModel\") || null;\n    } else {\n      this.data.state = null;\n      this.data.stateModel = null;\n    }\n  }\n}\nclass LinkAnnotation extends Annotation {\n  constructor(params) {\n    super(params);\n    const {\n      dict,\n      annotationGlobals\n    } = params;\n    this.data.annotationType = AnnotationType.LINK;\n    this.data.noHTML = false;\n    const quadPoints = getQuadPoints(dict, this.rectangle);\n    if (quadPoints) {\n      this.data.quadPoints = quadPoints;\n    }\n    this.data.borderColor ||= this.data.color;\n    Catalog.parseDestDictionary({\n      destDict: dict,\n      resultObj: this.data,\n      docBaseUrl: annotationGlobals.baseUrl,\n      docAttachments: annotationGlobals.attachments\n    });\n  }\n}\nclass PopupAnnotation extends Annotation {\n  constructor(params) {\n    super(params);\n    const {\n      dict\n    } = params;\n    this.data.annotationType = AnnotationType.POPUP;\n    this.data.noHTML = false;\n    if (this.data.rect[0] === this.data.rect[2] || this.data.rect[1] === this.data.rect[3]) {\n      this.data.rect = null;\n    }\n    let parentItem = dict.get(\"Parent\");\n    if (!parentItem) {\n      warn(\"Popup annotation has a missing or invalid parent annotation.\");\n      return;\n    }\n    this.data.parentRect = lookupNormalRect(parentItem.getArray(\"Rect\"), null);\n    const rt = parentItem.get(\"RT\");\n    if (isName(rt, AnnotationReplyType.GROUP)) {\n      parentItem = parentItem.get(\"IRT\");\n    }\n    if (!parentItem.has(\"M\")) {\n      this.data.modificationDate = null;\n    } else {\n      this.setModificationDate(parentItem.get(\"M\"));\n      this.data.modificationDate = this.modificationDate;\n    }\n    if (!parentItem.has(\"C\")) {\n      this.data.color = null;\n    } else {\n      this.setColor(parentItem.getArray(\"C\"));\n      this.data.color = this.color;\n    }\n    if (!this.viewable) {\n      const parentFlags = parentItem.get(\"F\");\n      if (this._isViewable(parentFlags)) {\n        this.setFlags(parentFlags);\n      }\n    }\n    this.setTitle(parentItem.get(\"T\"));\n    this.data.titleObj = this._title;\n    this.setContents(parentItem.get(\"Contents\"));\n    this.data.contentsObj = this._contents;\n    if (parentItem.has(\"RC\")) {\n      this.data.richText = XFAFactory.getRichTextAsHtml(parentItem.get(\"RC\"));\n    }\n    this.data.open = !!dict.get(\"Open\");\n  }\n}\nclass FreeTextAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n    this.data.hasOwnCanvas = !this.data.noHTML;\n    this.data.noHTML = false;\n    const {\n      evaluatorOptions,\n      xref\n    } = params;\n    this.data.annotationType = AnnotationType.FREETEXT;\n    this.setDefaultAppearance(params);\n    this._hasAppearance = !!this.appearance;\n    if (this._hasAppearance) {\n      const {\n        fontColor,\n        fontSize\n      } = parseAppearanceStream(this.appearance, evaluatorOptions, xref);\n      this.data.defaultAppearanceData.fontColor = fontColor;\n      this.data.defaultAppearanceData.fontSize = fontSize || 10;\n    } else {\n      this.data.defaultAppearanceData.fontSize ||= 10;\n      const {\n        fontColor,\n        fontSize\n      } = this.data.defaultAppearanceData;\n      if (this._contents.str) {\n        this.data.textContent = this._contents.str.split(/\\r\\n?|\\n/).map(line => line.trimEnd());\n        const {\n          coords,\n          bbox,\n          matrix\n        } = FakeUnicodeFont.getFirstPositionInfo(this.rectangle, this.rotation, fontSize);\n        this.data.textPosition = this._transformPoint(coords, bbox, matrix);\n      }\n      if (this._isOffscreenCanvasSupported) {\n        const strokeAlpha = params.dict.get(\"CA\");\n        const fakeUnicodeFont = new FakeUnicodeFont(xref, \"sans-serif\");\n        this.appearance = fakeUnicodeFont.createAppearance(this._contents.str, this.rectangle, this.rotation, fontSize, fontColor, strokeAlpha);\n        this._streams.push(this.appearance);\n      } else {\n        warn(\"FreeTextAnnotation: OffscreenCanvas is not supported, annotation may not render correctly.\");\n      }\n    }\n  }\n  get hasTextContent() {\n    return this._hasAppearance;\n  }\n  static createNewDict(annotation, xref, {\n    apRef,\n    ap\n  }) {\n    const {\n      color,\n      fontSize,\n      rect,\n      rotation,\n      user,\n      value\n    } = annotation;\n    const freetext = new Dict(xref);\n    freetext.set(\"Type\", Name.get(\"Annot\"));\n    freetext.set(\"Subtype\", Name.get(\"FreeText\"));\n    freetext.set(\"CreationDate\", `D:${getModificationDate()}`);\n    freetext.set(\"Rect\", rect);\n    const da = `/Helv ${fontSize} Tf ${getPdfColor(color, true)}`;\n    freetext.set(\"DA\", da);\n    freetext.set(\"Contents\", isAscii(value) ? value : stringToUTF16String(value, true));\n    freetext.set(\"F\", 4);\n    freetext.set(\"Border\", [0, 0, 0]);\n    freetext.set(\"Rotate\", rotation);\n    if (user) {\n      freetext.set(\"T\", isAscii(user) ? user : stringToUTF16String(user, true));\n    }\n    if (apRef || ap) {\n      const n = new Dict(xref);\n      freetext.set(\"AP\", n);\n      if (apRef) {\n        n.set(\"N\", apRef);\n      } else {\n        n.set(\"N\", ap);\n      }\n    }\n    return freetext;\n  }\n  static async createNewAppearanceStream(annotation, xref, params) {\n    const {\n      baseFontRef,\n      evaluator,\n      task\n    } = params;\n    const {\n      color,\n      fontSize,\n      rect,\n      rotation,\n      value\n    } = annotation;\n    const resources = new Dict(xref);\n    const font = new Dict(xref);\n    if (baseFontRef) {\n      font.set(\"Helv\", baseFontRef);\n    } else {\n      const baseFont = new Dict(xref);\n      baseFont.set(\"BaseFont\", Name.get(\"Helvetica\"));\n      baseFont.set(\"Type\", Name.get(\"Font\"));\n      baseFont.set(\"Subtype\", Name.get(\"Type1\"));\n      baseFont.set(\"Encoding\", Name.get(\"WinAnsiEncoding\"));\n      font.set(\"Helv\", baseFont);\n    }\n    resources.set(\"Font\", font);\n    const helv = await WidgetAnnotation._getFontData(evaluator, task, {\n      fontName: \"Helv\",\n      fontSize\n    }, resources);\n    const [x1, y1, x2, y2] = rect;\n    let w = x2 - x1;\n    let h = y2 - y1;\n    if (rotation % 180 !== 0) {\n      [w, h] = [h, w];\n    }\n    const lines = value.split(\"\\n\");\n    const scale = fontSize / 1000;\n    let totalWidth = -Infinity;\n    const encodedLines = [];\n    for (let line of lines) {\n      const encoded = helv.encodeString(line);\n      if (encoded.length > 1) {\n        return null;\n      }\n      line = encoded.join(\"\");\n      encodedLines.push(line);\n      let lineWidth = 0;\n      const glyphs = helv.charsToGlyphs(line);\n      for (const glyph of glyphs) {\n        lineWidth += glyph.width * scale;\n      }\n      totalWidth = Math.max(totalWidth, lineWidth);\n    }\n    let hscale = 1;\n    if (totalWidth > w) {\n      hscale = w / totalWidth;\n    }\n    let vscale = 1;\n    const lineHeight = LINE_FACTOR * fontSize;\n    const lineAscent = (LINE_FACTOR - LINE_DESCENT_FACTOR) * fontSize;\n    const totalHeight = lineHeight * lines.length;\n    if (totalHeight > h) {\n      vscale = h / totalHeight;\n    }\n    const fscale = Math.min(hscale, vscale);\n    const newFontSize = fontSize * fscale;\n    let firstPoint, clipBox, matrix;\n    switch (rotation) {\n      case 0:\n        matrix = [1, 0, 0, 1];\n        clipBox = [rect[0], rect[1], w, h];\n        firstPoint = [rect[0], rect[3] - lineAscent];\n        break;\n      case 90:\n        matrix = [0, 1, -1, 0];\n        clipBox = [rect[1], -rect[2], w, h];\n        firstPoint = [rect[1], -rect[0] - lineAscent];\n        break;\n      case 180:\n        matrix = [-1, 0, 0, -1];\n        clipBox = [-rect[2], -rect[3], w, h];\n        firstPoint = [-rect[2], -rect[1] - lineAscent];\n        break;\n      case 270:\n        matrix = [0, -1, 1, 0];\n        clipBox = [-rect[3], rect[0], w, h];\n        firstPoint = [-rect[3], rect[2] - lineAscent];\n        break;\n    }\n    const buffer = [\"q\", `${matrix.join(\" \")} 0 0 cm`, `${clipBox.join(\" \")} re W n`, `BT`, `${getPdfColor(color, true)}`, `0 Tc /Helv ${numberToString(newFontSize)} Tf`];\n    buffer.push(`${firstPoint.join(\" \")} Td (${escapeString(encodedLines[0])}) Tj`);\n    const vShift = numberToString(lineHeight);\n    for (let i = 1, ii = encodedLines.length; i < ii; i++) {\n      const line = encodedLines[i];\n      buffer.push(`0 -${vShift} Td (${escapeString(line)}) Tj`);\n    }\n    buffer.push(\"ET\", \"Q\");\n    const appearance = buffer.join(\"\\n\");\n    const appearanceStreamDict = new Dict(xref);\n    appearanceStreamDict.set(\"FormType\", 1);\n    appearanceStreamDict.set(\"Subtype\", Name.get(\"Form\"));\n    appearanceStreamDict.set(\"Type\", Name.get(\"XObject\"));\n    appearanceStreamDict.set(\"BBox\", rect);\n    appearanceStreamDict.set(\"Resources\", resources);\n    appearanceStreamDict.set(\"Matrix\", [1, 0, 0, 1, -rect[0], -rect[1]]);\n    const ap = new StringStream(appearance);\n    ap.dict = appearanceStreamDict;\n    return ap;\n  }\n}\nclass LineAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n    const {\n      dict,\n      xref\n    } = params;\n    this.data.annotationType = AnnotationType.LINE;\n    this.data.hasOwnCanvas = this.data.noRotate;\n    this.data.noHTML = false;\n    const lineCoordinates = lookupRect(dict.getArray(\"L\"), [0, 0, 0, 0]);\n    this.data.lineCoordinates = Util.normalizeRect(lineCoordinates);\n    this.setLineEndings(dict.getArray(\"LE\"));\n    this.data.lineEndings = this.lineEndings;\n    if (!this.appearance) {\n      const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0];\n      const strokeAlpha = dict.get(\"CA\");\n      const interiorColor = getRgbColor(dict.getArray(\"IC\"), null);\n      const fillColor = interiorColor ? getPdfColorArray(interiorColor) : null;\n      const fillAlpha = fillColor ? strokeAlpha : null;\n      const borderWidth = this.borderStyle.width || 1,\n        borderAdjust = 2 * borderWidth;\n      const bbox = [this.data.lineCoordinates[0] - borderAdjust, this.data.lineCoordinates[1] - borderAdjust, this.data.lineCoordinates[2] + borderAdjust, this.data.lineCoordinates[3] + borderAdjust];\n      if (!Util.intersect(this.rectangle, bbox)) {\n        this.rectangle = bbox;\n      }\n      this._setDefaultAppearance({\n        xref,\n        extra: `${borderWidth} w`,\n        strokeColor,\n        fillColor,\n        strokeAlpha,\n        fillAlpha,\n        pointsCallback: (buffer, points) => {\n          buffer.push(`${lineCoordinates[0]} ${lineCoordinates[1]} m`, `${lineCoordinates[2]} ${lineCoordinates[3]} l`, \"S\");\n          return [points[0].x - borderWidth, points[1].x + borderWidth, points[3].y - borderWidth, points[1].y + borderWidth];\n        }\n      });\n    }\n  }\n}\nclass SquareAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n    const {\n      dict,\n      xref\n    } = params;\n    this.data.annotationType = AnnotationType.SQUARE;\n    this.data.hasOwnCanvas = this.data.noRotate;\n    this.data.noHTML = false;\n    if (!this.appearance) {\n      const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0];\n      const strokeAlpha = dict.get(\"CA\");\n      const interiorColor = getRgbColor(dict.getArray(\"IC\"), null);\n      const fillColor = interiorColor ? getPdfColorArray(interiorColor) : null;\n      const fillAlpha = fillColor ? strokeAlpha : null;\n      if (this.borderStyle.width === 0 && !fillColor) {\n        return;\n      }\n      this._setDefaultAppearance({\n        xref,\n        extra: `${this.borderStyle.width} w`,\n        strokeColor,\n        fillColor,\n        strokeAlpha,\n        fillAlpha,\n        pointsCallback: (buffer, points) => {\n          const x = points[2].x + this.borderStyle.width / 2;\n          const y = points[2].y + this.borderStyle.width / 2;\n          const width = points[3].x - points[2].x - this.borderStyle.width;\n          const height = points[1].y - points[3].y - this.borderStyle.width;\n          buffer.push(`${x} ${y} ${width} ${height} re`);\n          if (fillColor) {\n            buffer.push(\"B\");\n          } else {\n            buffer.push(\"S\");\n          }\n          return [points[0].x, points[1].x, points[3].y, points[1].y];\n        }\n      });\n    }\n  }\n}\nclass CircleAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n    const {\n      dict,\n      xref\n    } = params;\n    this.data.annotationType = AnnotationType.CIRCLE;\n    if (!this.appearance) {\n      const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0];\n      const strokeAlpha = dict.get(\"CA\");\n      const interiorColor = getRgbColor(dict.getArray(\"IC\"), null);\n      const fillColor = interiorColor ? getPdfColorArray(interiorColor) : null;\n      const fillAlpha = fillColor ? strokeAlpha : null;\n      if (this.borderStyle.width === 0 && !fillColor) {\n        return;\n      }\n      const controlPointsDistance = 4 / 3 * Math.tan(Math.PI / (2 * 4));\n      this._setDefaultAppearance({\n        xref,\n        extra: `${this.borderStyle.width} w`,\n        strokeColor,\n        fillColor,\n        strokeAlpha,\n        fillAlpha,\n        pointsCallback: (buffer, points) => {\n          const x0 = points[0].x + this.borderStyle.width / 2;\n          const y0 = points[0].y - this.borderStyle.width / 2;\n          const x1 = points[3].x - this.borderStyle.width / 2;\n          const y1 = points[3].y + this.borderStyle.width / 2;\n          const xMid = x0 + (x1 - x0) / 2;\n          const yMid = y0 + (y1 - y0) / 2;\n          const xOffset = (x1 - x0) / 2 * controlPointsDistance;\n          const yOffset = (y1 - y0) / 2 * controlPointsDistance;\n          buffer.push(`${xMid} ${y1} m`, `${xMid + xOffset} ${y1} ${x1} ${yMid + yOffset} ${x1} ${yMid} c`, `${x1} ${yMid - yOffset} ${xMid + xOffset} ${y0} ${xMid} ${y0} c`, `${xMid - xOffset} ${y0} ${x0} ${yMid - yOffset} ${x0} ${yMid} c`, `${x0} ${yMid + yOffset} ${xMid - xOffset} ${y1} ${xMid} ${y1} c`, \"h\");\n          if (fillColor) {\n            buffer.push(\"B\");\n          } else {\n            buffer.push(\"S\");\n          }\n          return [points[0].x, points[1].x, points[3].y, points[1].y];\n        }\n      });\n    }\n  }\n}\nclass PolylineAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n    const {\n      dict,\n      xref\n    } = params;\n    this.data.annotationType = AnnotationType.POLYLINE;\n    this.data.hasOwnCanvas = this.data.noRotate;\n    this.data.noHTML = false;\n    this.data.vertices = [];\n    if (!(this instanceof PolygonAnnotation)) {\n      this.setLineEndings(dict.getArray(\"LE\"));\n      this.data.lineEndings = this.lineEndings;\n    }\n    const rawVertices = dict.getArray(\"Vertices\");\n    if (!isNumberArray(rawVertices, null)) {\n      return;\n    }\n    for (let i = 0, ii = rawVertices.length; i < ii; i += 2) {\n      this.data.vertices.push({\n        x: rawVertices[i],\n        y: rawVertices[i + 1]\n      });\n    }\n    if (!this.appearance) {\n      const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0];\n      const strokeAlpha = dict.get(\"CA\");\n      const borderWidth = this.borderStyle.width || 1,\n        borderAdjust = 2 * borderWidth;\n      const bbox = [Infinity, Infinity, -Infinity, -Infinity];\n      for (const vertex of this.data.vertices) {\n        bbox[0] = Math.min(bbox[0], vertex.x - borderAdjust);\n        bbox[1] = Math.min(bbox[1], vertex.y - borderAdjust);\n        bbox[2] = Math.max(bbox[2], vertex.x + borderAdjust);\n        bbox[3] = Math.max(bbox[3], vertex.y + borderAdjust);\n      }\n      if (!Util.intersect(this.rectangle, bbox)) {\n        this.rectangle = bbox;\n      }\n      this._setDefaultAppearance({\n        xref,\n        extra: `${borderWidth} w`,\n        strokeColor,\n        strokeAlpha,\n        pointsCallback: (buffer, points) => {\n          const vertices = this.data.vertices;\n          for (let i = 0, ii = vertices.length; i < ii; i++) {\n            buffer.push(`${vertices[i].x} ${vertices[i].y} ${i === 0 ? \"m\" : \"l\"}`);\n          }\n          buffer.push(\"S\");\n          return [points[0].x, points[1].x, points[3].y, points[1].y];\n        }\n      });\n    }\n  }\n}\nclass PolygonAnnotation extends PolylineAnnotation {\n  constructor(params) {\n    super(params);\n    this.data.annotationType = AnnotationType.POLYGON;\n  }\n}\nclass CaretAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n    this.data.annotationType = AnnotationType.CARET;\n  }\n}\nclass InkAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n    this.data.hasOwnCanvas = this.data.noRotate;\n    this.data.noHTML = false;\n    const {\n      dict,\n      xref\n    } = params;\n    this.data.annotationType = AnnotationType.INK;\n    this.data.inkLists = [];\n    const rawInkLists = dict.getArray(\"InkList\");\n    if (!Array.isArray(rawInkLists)) {\n      return;\n    }\n    for (let i = 0, ii = rawInkLists.length; i < ii; ++i) {\n      this.data.inkLists.push([]);\n      if (!Array.isArray(rawInkLists[i])) {\n        continue;\n      }\n      for (let j = 0, jj = rawInkLists[i].length; j < jj; j += 2) {\n        const x = xref.fetchIfRef(rawInkLists[i][j]),\n          y = xref.fetchIfRef(rawInkLists[i][j + 1]);\n        if (typeof x === \"number\" && typeof y === \"number\") {\n          this.data.inkLists[i].push({\n            x,\n            y\n          });\n        }\n      }\n    }\n    if (!this.appearance) {\n      const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0];\n      const strokeAlpha = dict.get(\"CA\");\n      const borderWidth = this.borderStyle.width || 1,\n        borderAdjust = 2 * borderWidth;\n      const bbox = [Infinity, Infinity, -Infinity, -Infinity];\n      for (const inkLists of this.data.inkLists) {\n        for (const vertex of inkLists) {\n          bbox[0] = Math.min(bbox[0], vertex.x - borderAdjust);\n          bbox[1] = Math.min(bbox[1], vertex.y - borderAdjust);\n          bbox[2] = Math.max(bbox[2], vertex.x + borderAdjust);\n          bbox[3] = Math.max(bbox[3], vertex.y + borderAdjust);\n        }\n      }\n      if (!Util.intersect(this.rectangle, bbox)) {\n        this.rectangle = bbox;\n      }\n      this._setDefaultAppearance({\n        xref,\n        extra: `${borderWidth} w`,\n        strokeColor,\n        strokeAlpha,\n        pointsCallback: (buffer, points) => {\n          for (const inkList of this.data.inkLists) {\n            for (let i = 0, ii = inkList.length; i < ii; i++) {\n              buffer.push(`${inkList[i].x} ${inkList[i].y} ${i === 0 ? \"m\" : \"l\"}`);\n            }\n            buffer.push(\"S\");\n          }\n          return [points[0].x, points[1].x, points[3].y, points[1].y];\n        }\n      });\n    }\n  }\n  static createNewDict(annotation, xref, {\n    apRef,\n    ap\n  }) {\n    const {\n      color,\n      opacity,\n      paths,\n      outlines,\n      rect,\n      rotation,\n      thickness\n    } = annotation;\n    const ink = new Dict(xref);\n    ink.set(\"Type\", Name.get(\"Annot\"));\n    ink.set(\"Subtype\", Name.get(\"Ink\"));\n    ink.set(\"CreationDate\", `D:${getModificationDate()}`);\n    ink.set(\"Rect\", rect);\n    ink.set(\"InkList\", outlines?.points || paths.map(p => p.points));\n    ink.set(\"F\", 4);\n    ink.set(\"Rotate\", rotation);\n    if (outlines) {\n      ink.set(\"IT\", Name.get(\"InkHighlight\"));\n    }\n    const bs = new Dict(xref);\n    ink.set(\"BS\", bs);\n    bs.set(\"W\", thickness);\n    ink.set(\"C\", Array.from(color, c => c / 255));\n    ink.set(\"CA\", opacity);\n    const n = new Dict(xref);\n    ink.set(\"AP\", n);\n    if (apRef) {\n      n.set(\"N\", apRef);\n    } else {\n      n.set(\"N\", ap);\n    }\n    return ink;\n  }\n  static async createNewAppearanceStream(annotation, xref, params) {\n    if (annotation.outlines) {\n      return this.createNewAppearanceStreamForHighlight(annotation, xref, params);\n    }\n    const {\n      color,\n      rect,\n      paths,\n      thickness,\n      opacity\n    } = annotation;\n    const appearanceBuffer = [`${thickness} w 1 J 1 j`, `${getPdfColor(color, false)}`];\n    if (opacity !== 1) {\n      appearanceBuffer.push(\"/R0 gs\");\n    }\n    const buffer = [];\n    for (const {\n      bezier\n    } of paths) {\n      buffer.length = 0;\n      buffer.push(`${numberToString(bezier[0])} ${numberToString(bezier[1])} m`);\n      if (bezier.length === 2) {\n        buffer.push(`${numberToString(bezier[0])} ${numberToString(bezier[1])} l S`);\n      } else {\n        for (let i = 2, ii = bezier.length; i < ii; i += 6) {\n          const curve = bezier.slice(i, i + 6).map(numberToString).join(\" \");\n          buffer.push(`${curve} c`);\n        }\n        buffer.push(\"S\");\n      }\n      appearanceBuffer.push(buffer.join(\"\\n\"));\n    }\n    const appearance = appearanceBuffer.join(\"\\n\");\n    const appearanceStreamDict = new Dict(xref);\n    appearanceStreamDict.set(\"FormType\", 1);\n    appearanceStreamDict.set(\"Subtype\", Name.get(\"Form\"));\n    appearanceStreamDict.set(\"Type\", Name.get(\"XObject\"));\n    appearanceStreamDict.set(\"BBox\", rect);\n    appearanceStreamDict.set(\"Length\", appearance.length);\n    if (opacity !== 1) {\n      const resources = new Dict(xref);\n      const extGState = new Dict(xref);\n      const r0 = new Dict(xref);\n      r0.set(\"CA\", opacity);\n      r0.set(\"Type\", Name.get(\"ExtGState\"));\n      extGState.set(\"R0\", r0);\n      resources.set(\"ExtGState\", extGState);\n      appearanceStreamDict.set(\"Resources\", resources);\n    }\n    const ap = new StringStream(appearance);\n    ap.dict = appearanceStreamDict;\n    return ap;\n  }\n  static async createNewAppearanceStreamForHighlight(annotation, xref, params) {\n    const {\n      color,\n      rect,\n      outlines: {\n        outline\n      },\n      opacity\n    } = annotation;\n    const appearanceBuffer = [`${getPdfColor(color, true)}`, \"/R0 gs\"];\n    appearanceBuffer.push(`${numberToString(outline[4])} ${numberToString(outline[5])} m`);\n    for (let i = 6, ii = outline.length; i < ii; i += 6) {\n      if (isNaN(outline[i]) || outline[i] === null) {\n        appearanceBuffer.push(`${numberToString(outline[i + 4])} ${numberToString(outline[i + 5])} l`);\n      } else {\n        const curve = outline.slice(i, i + 6).map(numberToString).join(\" \");\n        appearanceBuffer.push(`${curve} c`);\n      }\n    }\n    appearanceBuffer.push(\"h f\");\n    const appearance = appearanceBuffer.join(\"\\n\");\n    const appearanceStreamDict = new Dict(xref);\n    appearanceStreamDict.set(\"FormType\", 1);\n    appearanceStreamDict.set(\"Subtype\", Name.get(\"Form\"));\n    appearanceStreamDict.set(\"Type\", Name.get(\"XObject\"));\n    appearanceStreamDict.set(\"BBox\", rect);\n    appearanceStreamDict.set(\"Length\", appearance.length);\n    const resources = new Dict(xref);\n    const extGState = new Dict(xref);\n    resources.set(\"ExtGState\", extGState);\n    appearanceStreamDict.set(\"Resources\", resources);\n    const r0 = new Dict(xref);\n    extGState.set(\"R0\", r0);\n    r0.set(\"BM\", Name.get(\"Multiply\"));\n    if (opacity !== 1) {\n      r0.set(\"ca\", opacity);\n      r0.set(\"Type\", Name.get(\"ExtGState\"));\n    }\n    const ap = new StringStream(appearance);\n    ap.dict = appearanceStreamDict;\n    return ap;\n  }\n}\nclass HighlightAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n    const {\n      dict,\n      xref\n    } = params;\n    this.data.annotationType = AnnotationType.HIGHLIGHT;\n    const quadPoints = this.data.quadPoints = getQuadPoints(dict, null);\n    if (quadPoints) {\n      const resources = this.appearance?.dict.get(\"Resources\");\n      if (!this.appearance || !resources?.has(\"ExtGState\")) {\n        if (this.appearance) {\n          warn(\"HighlightAnnotation - ignoring built-in appearance stream.\");\n        }\n        const fillColor = this.color ? getPdfColorArray(this.color) : [1, 1, 0];\n        const fillAlpha = dict.get(\"CA\");\n        this._setDefaultAppearance({\n          xref,\n          fillColor,\n          blendMode: \"Multiply\",\n          fillAlpha,\n          pointsCallback: (buffer, points) => {\n            buffer.push(`${points[0].x} ${points[0].y} m`, `${points[1].x} ${points[1].y} l`, `${points[3].x} ${points[3].y} l`, `${points[2].x} ${points[2].y} l`, \"f\");\n            return [points[0].x, points[1].x, points[3].y, points[1].y];\n          }\n        });\n      }\n    } else {\n      this.data.popupRef = null;\n    }\n  }\n  static createNewDict(annotation, xref, {\n    apRef,\n    ap\n  }) {\n    const {\n      color,\n      opacity,\n      rect,\n      rotation,\n      user,\n      quadPoints\n    } = annotation;\n    const highlight = new Dict(xref);\n    highlight.set(\"Type\", Name.get(\"Annot\"));\n    highlight.set(\"Subtype\", Name.get(\"Highlight\"));\n    highlight.set(\"CreationDate\", `D:${getModificationDate()}`);\n    highlight.set(\"Rect\", rect);\n    highlight.set(\"F\", 4);\n    highlight.set(\"Border\", [0, 0, 0]);\n    highlight.set(\"Rotate\", rotation);\n    highlight.set(\"QuadPoints\", quadPoints);\n    highlight.set(\"C\", Array.from(color, c => c / 255));\n    highlight.set(\"CA\", opacity);\n    if (user) {\n      highlight.set(\"T\", isAscii(user) ? user : stringToUTF16String(user, true));\n    }\n    if (apRef || ap) {\n      const n = new Dict(xref);\n      highlight.set(\"AP\", n);\n      n.set(\"N\", apRef || ap);\n    }\n    return highlight;\n  }\n  static async createNewAppearanceStream(annotation, xref, params) {\n    const {\n      color,\n      rect,\n      outlines,\n      opacity\n    } = annotation;\n    const appearanceBuffer = [`${getPdfColor(color, true)}`, \"/R0 gs\"];\n    const buffer = [];\n    for (const outline of outlines) {\n      buffer.length = 0;\n      buffer.push(`${numberToString(outline[0])} ${numberToString(outline[1])} m`);\n      for (let i = 2, ii = outline.length; i < ii; i += 2) {\n        buffer.push(`${numberToString(outline[i])} ${numberToString(outline[i + 1])} l`);\n      }\n      buffer.push(\"h\");\n      appearanceBuffer.push(buffer.join(\"\\n\"));\n    }\n    appearanceBuffer.push(\"f*\");\n    const appearance = appearanceBuffer.join(\"\\n\");\n    const appearanceStreamDict = new Dict(xref);\n    appearanceStreamDict.set(\"FormType\", 1);\n    appearanceStreamDict.set(\"Subtype\", Name.get(\"Form\"));\n    appearanceStreamDict.set(\"Type\", Name.get(\"XObject\"));\n    appearanceStreamDict.set(\"BBox\", rect);\n    appearanceStreamDict.set(\"Length\", appearance.length);\n    const resources = new Dict(xref);\n    const extGState = new Dict(xref);\n    resources.set(\"ExtGState\", extGState);\n    appearanceStreamDict.set(\"Resources\", resources);\n    const r0 = new Dict(xref);\n    extGState.set(\"R0\", r0);\n    r0.set(\"BM\", Name.get(\"Multiply\"));\n    if (opacity !== 1) {\n      r0.set(\"ca\", opacity);\n      r0.set(\"Type\", Name.get(\"ExtGState\"));\n    }\n    const ap = new StringStream(appearance);\n    ap.dict = appearanceStreamDict;\n    return ap;\n  }\n}\nclass UnderlineAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n    const {\n      dict,\n      xref\n    } = params;\n    this.data.annotationType = AnnotationType.UNDERLINE;\n    const quadPoints = this.data.quadPoints = getQuadPoints(dict, null);\n    if (quadPoints) {\n      if (!this.appearance) {\n        const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0];\n        const strokeAlpha = dict.get(\"CA\");\n        this._setDefaultAppearance({\n          xref,\n          extra: \"[] 0 d 0.571 w\",\n          strokeColor,\n          strokeAlpha,\n          pointsCallback: (buffer, points) => {\n            buffer.push(`${points[2].x} ${points[2].y + 1.3} m`, `${points[3].x} ${points[3].y + 1.3} l`, \"S\");\n            return [points[0].x, points[1].x, points[3].y, points[1].y];\n          }\n        });\n      }\n    } else {\n      this.data.popupRef = null;\n    }\n  }\n}\nclass SquigglyAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n    const {\n      dict,\n      xref\n    } = params;\n    this.data.annotationType = AnnotationType.SQUIGGLY;\n    const quadPoints = this.data.quadPoints = getQuadPoints(dict, null);\n    if (quadPoints) {\n      if (!this.appearance) {\n        const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0];\n        const strokeAlpha = dict.get(\"CA\");\n        this._setDefaultAppearance({\n          xref,\n          extra: \"[] 0 d 1 w\",\n          strokeColor,\n          strokeAlpha,\n          pointsCallback: (buffer, points) => {\n            const dy = (points[0].y - points[2].y) / 6;\n            let shift = dy;\n            let x = points[2].x;\n            const y = points[2].y;\n            const xEnd = points[3].x;\n            buffer.push(`${x} ${y + shift} m`);\n            do {\n              x += 2;\n              shift = shift === 0 ? dy : 0;\n              buffer.push(`${x} ${y + shift} l`);\n            } while (x < xEnd);\n            buffer.push(\"S\");\n            return [points[2].x, xEnd, y - 2 * dy, y + 2 * dy];\n          }\n        });\n      }\n    } else {\n      this.data.popupRef = null;\n    }\n  }\n}\nclass StrikeOutAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n    const {\n      dict,\n      xref\n    } = params;\n    this.data.annotationType = AnnotationType.STRIKEOUT;\n    const quadPoints = this.data.quadPoints = getQuadPoints(dict, null);\n    if (quadPoints) {\n      if (!this.appearance) {\n        const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0];\n        const strokeAlpha = dict.get(\"CA\");\n        this._setDefaultAppearance({\n          xref,\n          extra: \"[] 0 d 1 w\",\n          strokeColor,\n          strokeAlpha,\n          pointsCallback: (buffer, points) => {\n            buffer.push(`${(points[0].x + points[2].x) / 2} ` + `${(points[0].y + points[2].y) / 2} m`, `${(points[1].x + points[3].x) / 2} ` + `${(points[1].y + points[3].y) / 2} l`, \"S\");\n            return [points[0].x, points[1].x, points[3].y, points[1].y];\n          }\n        });\n      }\n    } else {\n      this.data.popupRef = null;\n    }\n  }\n}\nclass StampAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n    this.data.annotationType = AnnotationType.STAMP;\n    this.data.hasOwnCanvas = this.data.noRotate;\n    this.data.noHTML = false;\n  }\n  static async createImage(bitmap, xref) {\n    const {\n      width,\n      height\n    } = bitmap;\n    const canvas = new OffscreenCanvas(width, height);\n    const ctx = canvas.getContext(\"2d\", {\n      alpha: true\n    });\n    ctx.drawImage(bitmap, 0, 0);\n    const data = ctx.getImageData(0, 0, width, height).data;\n    const buf32 = new Uint32Array(data.buffer);\n    const hasAlpha = buf32.some(FeatureTest.isLittleEndian ? x => x >>> 24 !== 0xff : x => (x & 0xff) !== 0xff);\n    if (hasAlpha) {\n      ctx.fillStyle = \"white\";\n      ctx.fillRect(0, 0, width, height);\n      ctx.drawImage(bitmap, 0, 0);\n    }\n    const jpegBufferPromise = canvas.convertToBlob({\n      type: \"image/jpeg\",\n      quality: 1\n    }).then(blob => blob.arrayBuffer());\n    const xobjectName = Name.get(\"XObject\");\n    const imageName = Name.get(\"Image\");\n    const image = new Dict(xref);\n    image.set(\"Type\", xobjectName);\n    image.set(\"Subtype\", imageName);\n    image.set(\"BitsPerComponent\", 8);\n    image.set(\"ColorSpace\", Name.get(\"DeviceRGB\"));\n    image.set(\"Filter\", Name.get(\"DCTDecode\"));\n    image.set(\"BBox\", [0, 0, width, height]);\n    image.set(\"Width\", width);\n    image.set(\"Height\", height);\n    let smaskStream = null;\n    if (hasAlpha) {\n      const alphaBuffer = new Uint8Array(buf32.length);\n      if (FeatureTest.isLittleEndian) {\n        for (let i = 0, ii = buf32.length; i < ii; i++) {\n          alphaBuffer[i] = buf32[i] >>> 24;\n        }\n      } else {\n        for (let i = 0, ii = buf32.length; i < ii; i++) {\n          alphaBuffer[i] = buf32[i] & 0xff;\n        }\n      }\n      const smask = new Dict(xref);\n      smask.set(\"Type\", xobjectName);\n      smask.set(\"Subtype\", imageName);\n      smask.set(\"BitsPerComponent\", 8);\n      smask.set(\"ColorSpace\", Name.get(\"DeviceGray\"));\n      smask.set(\"Width\", width);\n      smask.set(\"Height\", height);\n      smaskStream = new Stream(alphaBuffer, 0, 0, smask);\n    }\n    const imageStream = new Stream(await jpegBufferPromise, 0, 0, image);\n    return {\n      imageStream,\n      smaskStream,\n      width,\n      height\n    };\n  }\n  static createNewDict(annotation, xref, {\n    apRef,\n    ap\n  }) {\n    const {\n      rect,\n      rotation,\n      user\n    } = annotation;\n    const stamp = new Dict(xref);\n    stamp.set(\"Type\", Name.get(\"Annot\"));\n    stamp.set(\"Subtype\", Name.get(\"Stamp\"));\n    stamp.set(\"CreationDate\", `D:${getModificationDate()}`);\n    stamp.set(\"Rect\", rect);\n    stamp.set(\"F\", 4);\n    stamp.set(\"Border\", [0, 0, 0]);\n    stamp.set(\"Rotate\", rotation);\n    if (user) {\n      stamp.set(\"T\", isAscii(user) ? user : stringToUTF16String(user, true));\n    }\n    if (apRef || ap) {\n      const n = new Dict(xref);\n      stamp.set(\"AP\", n);\n      if (apRef) {\n        n.set(\"N\", apRef);\n      } else {\n        n.set(\"N\", ap);\n      }\n    }\n    return stamp;\n  }\n  static async createNewAppearanceStream(annotation, xref, params) {\n    const {\n      rotation\n    } = annotation;\n    const {\n      imageRef,\n      width,\n      height\n    } = params.image;\n    const resources = new Dict(xref);\n    const xobject = new Dict(xref);\n    resources.set(\"XObject\", xobject);\n    xobject.set(\"Im0\", imageRef);\n    const appearance = `q ${width} 0 0 ${height} 0 0 cm /Im0 Do Q`;\n    const appearanceStreamDict = new Dict(xref);\n    appearanceStreamDict.set(\"FormType\", 1);\n    appearanceStreamDict.set(\"Subtype\", Name.get(\"Form\"));\n    appearanceStreamDict.set(\"Type\", Name.get(\"XObject\"));\n    appearanceStreamDict.set(\"BBox\", [0, 0, width, height]);\n    appearanceStreamDict.set(\"Resources\", resources);\n    if (rotation) {\n      const matrix = getRotationMatrix(rotation, width, height);\n      appearanceStreamDict.set(\"Matrix\", matrix);\n    }\n    const ap = new StringStream(appearance);\n    ap.dict = appearanceStreamDict;\n    return ap;\n  }\n}\nclass FileAttachmentAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n    const {\n      dict,\n      xref\n    } = params;\n    const file = new FileSpec(dict.get(\"FS\"), xref);\n    this.data.annotationType = AnnotationType.FILEATTACHMENT;\n    this.data.hasOwnCanvas = this.data.noRotate;\n    this.data.noHTML = false;\n    this.data.file = file.serializable;\n    const name = dict.get(\"Name\");\n    this.data.name = name instanceof Name ? stringToPDFString(name.name) : \"PushPin\";\n    const fillAlpha = dict.get(\"ca\");\n    this.data.fillAlpha = typeof fillAlpha === \"number\" && fillAlpha >= 0 && fillAlpha <= 1 ? fillAlpha : null;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/dataset_reader.js\n\n\n\nfunction decodeString(str) {\n  try {\n    return stringToUTF8String(str);\n  } catch (ex) {\n    warn(`UTF-8 decoding failed: \"${ex}\".`);\n    return str;\n  }\n}\nclass DatasetXMLParser extends SimpleXMLParser {\n  constructor(options) {\n    super(options);\n    this.node = null;\n  }\n  onEndElement(name) {\n    const node = super.onEndElement(name);\n    if (node && name === \"xfa:datasets\") {\n      this.node = node;\n      throw new Error(\"Aborting DatasetXMLParser.\");\n    }\n  }\n}\nclass DatasetReader {\n  constructor(data) {\n    if (data.datasets) {\n      this.node = new SimpleXMLParser({\n        hasAttributes: true\n      }).parseFromString(data.datasets).documentElement;\n    } else {\n      const parser = new DatasetXMLParser({\n        hasAttributes: true\n      });\n      try {\n        parser.parseFromString(data[\"xdp:xdp\"]);\n      } catch {}\n      this.node = parser.node;\n    }\n  }\n  getValue(path) {\n    if (!this.node || !path) {\n      return \"\";\n    }\n    const node = this.node.searchNode(parseXFAPath(path), 0);\n    if (!node) {\n      return \"\";\n    }\n    const first = node.firstChild;\n    if (first?.nodeName === \"value\") {\n      return node.children.map(child => decodeString(child.textContent));\n    }\n    return decodeString(node.textContent);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/xref.js\n\n\n\n\n\n\nclass XRef {\n  #firstXRefStmPos = null;\n  constructor(stream, pdfManager) {\n    this.stream = stream;\n    this.pdfManager = pdfManager;\n    this.entries = [];\n    this._xrefStms = new Set();\n    this._cacheMap = new Map();\n    this._pendingRefs = new RefSet();\n    this._newPersistentRefNum = null;\n    this._newTemporaryRefNum = null;\n    this._persistentRefsCache = null;\n  }\n  getNewPersistentRef(obj) {\n    if (this._newPersistentRefNum === null) {\n      this._newPersistentRefNum = this.entries.length || 1;\n    }\n    const num = this._newPersistentRefNum++;\n    this._cacheMap.set(num, obj);\n    return Ref.get(num, 0);\n  }\n  getNewTemporaryRef() {\n    if (this._newTemporaryRefNum === null) {\n      this._newTemporaryRefNum = this.entries.length || 1;\n      if (this._newPersistentRefNum) {\n        this._persistentRefsCache = new Map();\n        for (let i = this._newTemporaryRefNum; i < this._newPersistentRefNum; i++) {\n          this._persistentRefsCache.set(i, this._cacheMap.get(i));\n          this._cacheMap.delete(i);\n        }\n      }\n    }\n    return Ref.get(this._newTemporaryRefNum++, 0);\n  }\n  resetNewTemporaryRef() {\n    this._newTemporaryRefNum = null;\n    if (this._persistentRefsCache) {\n      for (const [num, obj] of this._persistentRefsCache) {\n        this._cacheMap.set(num, obj);\n      }\n    }\n    this._persistentRefsCache = null;\n  }\n  setStartXRef(startXRef) {\n    this.startXRefQueue = [startXRef];\n  }\n  parse(recoveryMode = false) {\n    let trailerDict;\n    if (!recoveryMode) {\n      trailerDict = this.readXRef();\n    } else {\n      warn(\"Indexing all PDF objects\");\n      trailerDict = this.indexObjects();\n    }\n    trailerDict.assignXref(this);\n    this.trailer = trailerDict;\n    let encrypt;\n    try {\n      encrypt = trailerDict.get(\"Encrypt\");\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(`XRef.parse - Invalid \"Encrypt\" reference: \"${ex}\".`);\n    }\n    if (encrypt instanceof Dict) {\n      const ids = trailerDict.get(\"ID\");\n      const fileId = ids?.length ? ids[0] : \"\";\n      encrypt.suppressEncryption = true;\n      this.encrypt = new CipherTransformFactory(encrypt, fileId, this.pdfManager.password);\n    }\n    let root;\n    try {\n      root = trailerDict.get(\"Root\");\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(`XRef.parse - Invalid \"Root\" reference: \"${ex}\".`);\n    }\n    if (root instanceof Dict) {\n      try {\n        const pages = root.get(\"Pages\");\n        if (pages instanceof Dict) {\n          this.root = root;\n          return;\n        }\n      } catch (ex) {\n        if (ex instanceof MissingDataException) {\n          throw ex;\n        }\n        warn(`XRef.parse - Invalid \"Pages\" reference: \"${ex}\".`);\n      }\n    }\n    if (!recoveryMode) {\n      throw new XRefParseException();\n    }\n    throw new InvalidPDFException(\"Invalid Root reference.\");\n  }\n  processXRefTable(parser) {\n    if (!(\"tableState\" in this)) {\n      this.tableState = {\n        entryNum: 0,\n        streamPos: parser.lexer.stream.pos,\n        parserBuf1: parser.buf1,\n        parserBuf2: parser.buf2\n      };\n    }\n    const obj = this.readXRefTable(parser);\n    if (!isCmd(obj, \"trailer\")) {\n      throw new FormatError(\"Invalid XRef table: could not find trailer dictionary\");\n    }\n    let dict = parser.getObj();\n    if (!(dict instanceof Dict) && dict.dict) {\n      dict = dict.dict;\n    }\n    if (!(dict instanceof Dict)) {\n      throw new FormatError(\"Invalid XRef table: could not parse trailer dictionary\");\n    }\n    delete this.tableState;\n    return dict;\n  }\n  readXRefTable(parser) {\n    const stream = parser.lexer.stream;\n    const tableState = this.tableState;\n    stream.pos = tableState.streamPos;\n    parser.buf1 = tableState.parserBuf1;\n    parser.buf2 = tableState.parserBuf2;\n    let obj;\n    while (true) {\n      if (!(\"firstEntryNum\" in tableState) || !(\"entryCount\" in tableState)) {\n        if (isCmd(obj = parser.getObj(), \"trailer\")) {\n          break;\n        }\n        tableState.firstEntryNum = obj;\n        tableState.entryCount = parser.getObj();\n      }\n      let first = tableState.firstEntryNum;\n      const count = tableState.entryCount;\n      if (!Number.isInteger(first) || !Number.isInteger(count)) {\n        throw new FormatError(\"Invalid XRef table: wrong types in subsection header\");\n      }\n      for (let i = tableState.entryNum; i < count; i++) {\n        tableState.streamPos = stream.pos;\n        tableState.entryNum = i;\n        tableState.parserBuf1 = parser.buf1;\n        tableState.parserBuf2 = parser.buf2;\n        const entry = {};\n        entry.offset = parser.getObj();\n        entry.gen = parser.getObj();\n        const type = parser.getObj();\n        if (type instanceof Cmd) {\n          switch (type.cmd) {\n            case \"f\":\n              entry.free = true;\n              break;\n            case \"n\":\n              entry.uncompressed = true;\n              break;\n          }\n        }\n        if (!Number.isInteger(entry.offset) || !Number.isInteger(entry.gen) || !(entry.free || entry.uncompressed)) {\n          throw new FormatError(`Invalid entry in XRef subsection: ${first}, ${count}`);\n        }\n        if (i === 0 && entry.free && first === 1) {\n          first = 0;\n        }\n        if (!this.entries[i + first]) {\n          this.entries[i + first] = entry;\n        }\n      }\n      tableState.entryNum = 0;\n      tableState.streamPos = stream.pos;\n      tableState.parserBuf1 = parser.buf1;\n      tableState.parserBuf2 = parser.buf2;\n      delete tableState.firstEntryNum;\n      delete tableState.entryCount;\n    }\n    if (this.entries[0] && !this.entries[0].free) {\n      throw new FormatError(\"Invalid XRef table: unexpected first object\");\n    }\n    return obj;\n  }\n  processXRefStream(stream) {\n    if (!(\"streamState\" in this)) {\n      const streamParameters = stream.dict;\n      const byteWidths = streamParameters.get(\"W\");\n      let range = streamParameters.get(\"Index\");\n      if (!range) {\n        range = [0, streamParameters.get(\"Size\")];\n      }\n      this.streamState = {\n        entryRanges: range,\n        byteWidths,\n        entryNum: 0,\n        streamPos: stream.pos\n      };\n    }\n    this.readXRefStream(stream);\n    delete this.streamState;\n    return stream.dict;\n  }\n  readXRefStream(stream) {\n    const streamState = this.streamState;\n    stream.pos = streamState.streamPos;\n    const [typeFieldWidth, offsetFieldWidth, generationFieldWidth] = streamState.byteWidths;\n    const entryRanges = streamState.entryRanges;\n    while (entryRanges.length > 0) {\n      const [first, n] = entryRanges;\n      if (!Number.isInteger(first) || !Number.isInteger(n)) {\n        throw new FormatError(`Invalid XRef range fields: ${first}, ${n}`);\n      }\n      if (!Number.isInteger(typeFieldWidth) || !Number.isInteger(offsetFieldWidth) || !Number.isInteger(generationFieldWidth)) {\n        throw new FormatError(`Invalid XRef entry fields length: ${first}, ${n}`);\n      }\n      for (let i = streamState.entryNum; i < n; ++i) {\n        streamState.entryNum = i;\n        streamState.streamPos = stream.pos;\n        let type = 0,\n          offset = 0,\n          generation = 0;\n        for (let j = 0; j < typeFieldWidth; ++j) {\n          const typeByte = stream.getByte();\n          if (typeByte === -1) {\n            throw new FormatError(\"Invalid XRef byteWidths 'type'.\");\n          }\n          type = type << 8 | typeByte;\n        }\n        if (typeFieldWidth === 0) {\n          type = 1;\n        }\n        for (let j = 0; j < offsetFieldWidth; ++j) {\n          const offsetByte = stream.getByte();\n          if (offsetByte === -1) {\n            throw new FormatError(\"Invalid XRef byteWidths 'offset'.\");\n          }\n          offset = offset << 8 | offsetByte;\n        }\n        for (let j = 0; j < generationFieldWidth; ++j) {\n          const generationByte = stream.getByte();\n          if (generationByte === -1) {\n            throw new FormatError(\"Invalid XRef byteWidths 'generation'.\");\n          }\n          generation = generation << 8 | generationByte;\n        }\n        const entry = {};\n        entry.offset = offset;\n        entry.gen = generation;\n        switch (type) {\n          case 0:\n            entry.free = true;\n            break;\n          case 1:\n            entry.uncompressed = true;\n            break;\n          case 2:\n            break;\n          default:\n            throw new FormatError(`Invalid XRef entry type: ${type}`);\n        }\n        if (!this.entries[first + i]) {\n          this.entries[first + i] = entry;\n        }\n      }\n      streamState.entryNum = 0;\n      streamState.streamPos = stream.pos;\n      entryRanges.splice(0, 2);\n    }\n  }\n  indexObjects() {\n    const TAB = 0x9,\n      LF = 0xa,\n      CR = 0xd,\n      SPACE = 0x20;\n    const PERCENT = 0x25,\n      LT = 0x3c;\n    function readToken(data, offset) {\n      let token = \"\",\n        ch = data[offset];\n      while (ch !== LF && ch !== CR && ch !== LT) {\n        if (++offset >= data.length) {\n          break;\n        }\n        token += String.fromCharCode(ch);\n        ch = data[offset];\n      }\n      return token;\n    }\n    function skipUntil(data, offset, what) {\n      const length = what.length,\n        dataLength = data.length;\n      let skipped = 0;\n      while (offset < dataLength) {\n        let i = 0;\n        while (i < length && data[offset + i] === what[i]) {\n          ++i;\n        }\n        if (i >= length) {\n          break;\n        }\n        offset++;\n        skipped++;\n      }\n      return skipped;\n    }\n    const gEndobjRegExp = /\\b(endobj|\\d+\\s+\\d+\\s+obj|xref|trailer\\s*<<)\\b/g;\n    const gStartxrefRegExp = /\\b(startxref|\\d+\\s+\\d+\\s+obj)\\b/g;\n    const objRegExp = /^(\\d+)\\s+(\\d+)\\s+obj\\b/;\n    const trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]);\n    const startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]);\n    const xrefBytes = new Uint8Array([47, 88, 82, 101, 102]);\n    this.entries.length = 0;\n    this._cacheMap.clear();\n    const stream = this.stream;\n    stream.pos = 0;\n    const buffer = stream.getBytes(),\n      bufferStr = bytesToString(buffer),\n      length = buffer.length;\n    let position = stream.start;\n    const trailers = [],\n      xrefStms = [];\n    while (position < length) {\n      let ch = buffer[position];\n      if (ch === TAB || ch === LF || ch === CR || ch === SPACE) {\n        ++position;\n        continue;\n      }\n      if (ch === PERCENT) {\n        do {\n          ++position;\n          if (position >= length) {\n            break;\n          }\n          ch = buffer[position];\n        } while (ch !== LF && ch !== CR);\n        continue;\n      }\n      const token = readToken(buffer, position);\n      let m;\n      if (token.startsWith(\"xref\") && (token.length === 4 || /\\s/.test(token[4]))) {\n        position += skipUntil(buffer, position, trailerBytes);\n        trailers.push(position);\n        position += skipUntil(buffer, position, startxrefBytes);\n      } else if (m = objRegExp.exec(token)) {\n        const num = m[1] | 0,\n          gen = m[2] | 0;\n        const startPos = position + token.length;\n        let contentLength,\n          updateEntries = false;\n        if (!this.entries[num]) {\n          updateEntries = true;\n        } else if (this.entries[num].gen === gen) {\n          try {\n            const parser = new Parser({\n              lexer: new Lexer(stream.makeSubStream(startPos))\n            });\n            parser.getObj();\n            updateEntries = true;\n          } catch (ex) {\n            if (ex instanceof ParserEOFException) {\n              warn(`indexObjects -- checking object (${token}): \"${ex}\".`);\n            } else {\n              updateEntries = true;\n            }\n          }\n        }\n        if (updateEntries) {\n          this.entries[num] = {\n            offset: position - stream.start,\n            gen,\n            uncompressed: true\n          };\n        }\n        gEndobjRegExp.lastIndex = startPos;\n        const match = gEndobjRegExp.exec(bufferStr);\n        if (match) {\n          const endPos = gEndobjRegExp.lastIndex + 1;\n          contentLength = endPos - position;\n          if (match[1] !== \"endobj\") {\n            warn(`indexObjects: Found \"${match[1]}\" inside of another \"obj\", ` + 'caused by missing \"endobj\" -- trying to recover.');\n            contentLength -= match[1].length + 1;\n          }\n        } else {\n          contentLength = length - position;\n        }\n        const content = buffer.subarray(position, position + contentLength);\n        const xrefTagOffset = skipUntil(content, 0, xrefBytes);\n        if (xrefTagOffset < contentLength && content[xrefTagOffset + 5] < 64) {\n          xrefStms.push(position - stream.start);\n          this._xrefStms.add(position - stream.start);\n        }\n        position += contentLength;\n      } else if (token.startsWith(\"trailer\") && (token.length === 7 || /\\s/.test(token[7]))) {\n        trailers.push(position);\n        const startPos = position + token.length;\n        let contentLength;\n        gStartxrefRegExp.lastIndex = startPos;\n        const match = gStartxrefRegExp.exec(bufferStr);\n        if (match) {\n          const endPos = gStartxrefRegExp.lastIndex + 1;\n          contentLength = endPos - position;\n          if (match[1] !== \"startxref\") {\n            warn(`indexObjects: Found \"${match[1]}\" after \"trailer\", ` + 'caused by missing \"startxref\" -- trying to recover.');\n            contentLength -= match[1].length + 1;\n          }\n        } else {\n          contentLength = length - position;\n        }\n        position += contentLength;\n      } else {\n        position += token.length + 1;\n      }\n    }\n    for (const xrefStm of xrefStms) {\n      this.startXRefQueue.push(xrefStm);\n      this.readXRef(true);\n    }\n    const trailerDicts = [];\n    let isEncrypted = false;\n    for (const trailer of trailers) {\n      stream.pos = trailer;\n      const parser = new Parser({\n        lexer: new Lexer(stream),\n        xref: this,\n        allowStreams: true,\n        recoveryMode: true\n      });\n      const obj = parser.getObj();\n      if (!isCmd(obj, \"trailer\")) {\n        continue;\n      }\n      const dict = parser.getObj();\n      if (!(dict instanceof Dict)) {\n        continue;\n      }\n      trailerDicts.push(dict);\n      if (dict.has(\"Encrypt\")) {\n        isEncrypted = true;\n      }\n    }\n    let trailerDict, trailerError;\n    for (const dict of [...trailerDicts, \"genFallback\", ...trailerDicts]) {\n      if (dict === \"genFallback\") {\n        if (!trailerError) {\n          break;\n        }\n        this._generationFallback = true;\n        continue;\n      }\n      let validPagesDict = false;\n      try {\n        const rootDict = dict.get(\"Root\");\n        if (!(rootDict instanceof Dict)) {\n          continue;\n        }\n        const pagesDict = rootDict.get(\"Pages\");\n        if (!(pagesDict instanceof Dict)) {\n          continue;\n        }\n        const pagesCount = pagesDict.get(\"Count\");\n        if (Number.isInteger(pagesCount)) {\n          validPagesDict = true;\n        }\n      } catch (ex) {\n        trailerError = ex;\n        continue;\n      }\n      if (validPagesDict && (!isEncrypted || dict.has(\"Encrypt\")) && dict.has(\"ID\")) {\n        return dict;\n      }\n      trailerDict = dict;\n    }\n    if (trailerDict) {\n      return trailerDict;\n    }\n    if (this.topDict) {\n      return this.topDict;\n    }\n    throw new InvalidPDFException(\"Invalid PDF structure.\");\n  }\n  readXRef(recoveryMode = false) {\n    const stream = this.stream;\n    const startXRefParsedCache = new Set();\n    while (this.startXRefQueue.length) {\n      try {\n        const startXRef = this.startXRefQueue[0];\n        if (startXRefParsedCache.has(startXRef)) {\n          warn(\"readXRef - skipping XRef table since it was already parsed.\");\n          this.startXRefQueue.shift();\n          continue;\n        }\n        startXRefParsedCache.add(startXRef);\n        stream.pos = startXRef + stream.start;\n        const parser = new Parser({\n          lexer: new Lexer(stream),\n          xref: this,\n          allowStreams: true\n        });\n        let obj = parser.getObj();\n        let dict;\n        if (isCmd(obj, \"xref\")) {\n          dict = this.processXRefTable(parser);\n          if (!this.topDict) {\n            this.topDict = dict;\n          }\n          obj = dict.get(\"XRefStm\");\n          if (Number.isInteger(obj) && !this._xrefStms.has(obj)) {\n            this._xrefStms.add(obj);\n            this.startXRefQueue.push(obj);\n            this.#firstXRefStmPos ??= obj;\n          }\n        } else if (Number.isInteger(obj)) {\n          if (!Number.isInteger(parser.getObj()) || !isCmd(parser.getObj(), \"obj\") || !((obj = parser.getObj()) instanceof BaseStream)) {\n            throw new FormatError(\"Invalid XRef stream\");\n          }\n          dict = this.processXRefStream(obj);\n          if (!this.topDict) {\n            this.topDict = dict;\n          }\n          if (!dict) {\n            throw new FormatError(\"Failed to read XRef stream\");\n          }\n        } else {\n          throw new FormatError(\"Invalid XRef stream header\");\n        }\n        obj = dict.get(\"Prev\");\n        if (Number.isInteger(obj)) {\n          this.startXRefQueue.push(obj);\n        } else if (obj instanceof Ref) {\n          this.startXRefQueue.push(obj.num);\n        }\n      } catch (e) {\n        if (e instanceof MissingDataException) {\n          throw e;\n        }\n        info(\"(while reading XRef): \" + e);\n      }\n      this.startXRefQueue.shift();\n    }\n    if (this.topDict) {\n      return this.topDict;\n    }\n    if (recoveryMode) {\n      return undefined;\n    }\n    throw new XRefParseException();\n  }\n  get lastXRefStreamPos() {\n    return this.#firstXRefStmPos ?? (this._xrefStms.size > 0 ? Math.max(...this._xrefStms) : null);\n  }\n  getEntry(i) {\n    const xrefEntry = this.entries[i];\n    if (xrefEntry && !xrefEntry.free && xrefEntry.offset) {\n      return xrefEntry;\n    }\n    return null;\n  }\n  fetchIfRef(obj, suppressEncryption = false) {\n    if (obj instanceof Ref) {\n      return this.fetch(obj, suppressEncryption);\n    }\n    return obj;\n  }\n  fetch(ref, suppressEncryption = false) {\n    if (!(ref instanceof Ref)) {\n      throw new Error(\"ref object is not a reference\");\n    }\n    const num = ref.num;\n    const cacheEntry = this._cacheMap.get(num);\n    if (cacheEntry !== undefined) {\n      if (cacheEntry instanceof Dict && !cacheEntry.objId) {\n        cacheEntry.objId = ref.toString();\n      }\n      return cacheEntry;\n    }\n    let xrefEntry = this.getEntry(num);\n    if (xrefEntry === null) {\n      this._cacheMap.set(num, xrefEntry);\n      return xrefEntry;\n    }\n    if (this._pendingRefs.has(ref)) {\n      this._pendingRefs.remove(ref);\n      warn(`Ignoring circular reference: ${ref}.`);\n      return CIRCULAR_REF;\n    }\n    this._pendingRefs.put(ref);\n    try {\n      xrefEntry = xrefEntry.uncompressed ? this.fetchUncompressed(ref, xrefEntry, suppressEncryption) : this.fetchCompressed(ref, xrefEntry, suppressEncryption);\n      this._pendingRefs.remove(ref);\n    } catch (ex) {\n      this._pendingRefs.remove(ref);\n      throw ex;\n    }\n    if (xrefEntry instanceof Dict) {\n      xrefEntry.objId = ref.toString();\n    } else if (xrefEntry instanceof BaseStream) {\n      xrefEntry.dict.objId = ref.toString();\n    }\n    return xrefEntry;\n  }\n  fetchUncompressed(ref, xrefEntry, suppressEncryption = false) {\n    const gen = ref.gen;\n    let num = ref.num;\n    if (xrefEntry.gen !== gen) {\n      const msg = `Inconsistent generation in XRef: ${ref}`;\n      if (this._generationFallback && xrefEntry.gen < gen) {\n        warn(msg);\n        return this.fetchUncompressed(Ref.get(num, xrefEntry.gen), xrefEntry, suppressEncryption);\n      }\n      throw new XRefEntryException(msg);\n    }\n    const stream = this.stream.makeSubStream(xrefEntry.offset + this.stream.start);\n    const parser = new Parser({\n      lexer: new Lexer(stream),\n      xref: this,\n      allowStreams: true\n    });\n    const obj1 = parser.getObj();\n    const obj2 = parser.getObj();\n    const obj3 = parser.getObj();\n    if (obj1 !== num || obj2 !== gen || !(obj3 instanceof Cmd)) {\n      throw new XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`);\n    }\n    if (obj3.cmd !== \"obj\") {\n      if (obj3.cmd.startsWith(\"obj\")) {\n        num = parseInt(obj3.cmd.substring(3), 10);\n        if (!Number.isNaN(num)) {\n          return num;\n        }\n      }\n      throw new XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`);\n    }\n    xrefEntry = this.encrypt && !suppressEncryption ? parser.getObj(this.encrypt.createCipherTransform(num, gen)) : parser.getObj();\n    if (!(xrefEntry instanceof BaseStream)) {\n      this._cacheMap.set(num, xrefEntry);\n    }\n    return xrefEntry;\n  }\n  fetchCompressed(ref, xrefEntry, suppressEncryption = false) {\n    const tableOffset = xrefEntry.offset;\n    const stream = this.fetch(Ref.get(tableOffset, 0));\n    if (!(stream instanceof BaseStream)) {\n      throw new FormatError(\"bad ObjStm stream\");\n    }\n    const first = stream.dict.get(\"First\");\n    const n = stream.dict.get(\"N\");\n    if (!Number.isInteger(first) || !Number.isInteger(n)) {\n      throw new FormatError(\"invalid first and n parameters for ObjStm stream\");\n    }\n    let parser = new Parser({\n      lexer: new Lexer(stream),\n      xref: this,\n      allowStreams: true\n    });\n    const nums = new Array(n);\n    const offsets = new Array(n);\n    for (let i = 0; i < n; ++i) {\n      const num = parser.getObj();\n      if (!Number.isInteger(num)) {\n        throw new FormatError(`invalid object number in the ObjStm stream: ${num}`);\n      }\n      const offset = parser.getObj();\n      if (!Number.isInteger(offset)) {\n        throw new FormatError(`invalid object offset in the ObjStm stream: ${offset}`);\n      }\n      nums[i] = num;\n      offsets[i] = offset;\n    }\n    const start = (stream.start || 0) + first;\n    const entries = new Array(n);\n    for (let i = 0; i < n; ++i) {\n      const length = i < n - 1 ? offsets[i + 1] - offsets[i] : undefined;\n      if (length < 0) {\n        throw new FormatError(\"Invalid offset in the ObjStm stream.\");\n      }\n      parser = new Parser({\n        lexer: new Lexer(stream.makeSubStream(start + offsets[i], length, stream.dict)),\n        xref: this,\n        allowStreams: true\n      });\n      const obj = parser.getObj();\n      entries[i] = obj;\n      if (obj instanceof BaseStream) {\n        continue;\n      }\n      const num = nums[i],\n        entry = this.entries[num];\n      if (entry && entry.offset === tableOffset && entry.gen === i) {\n        this._cacheMap.set(num, obj);\n      }\n    }\n    xrefEntry = entries[xrefEntry.gen];\n    if (xrefEntry === undefined) {\n      throw new XRefEntryException(`Bad (compressed) XRef entry: ${ref}`);\n    }\n    return xrefEntry;\n  }\n  async fetchIfRefAsync(obj, suppressEncryption) {\n    if (obj instanceof Ref) {\n      return this.fetchAsync(obj, suppressEncryption);\n    }\n    return obj;\n  }\n  async fetchAsync(ref, suppressEncryption) {\n    try {\n      return this.fetch(ref, suppressEncryption);\n    } catch (ex) {\n      if (!(ex instanceof MissingDataException)) {\n        throw ex;\n      }\n      await this.pdfManager.requestRange(ex.begin, ex.end);\n      return this.fetchAsync(ref, suppressEncryption);\n    }\n  }\n  getCatalogObj() {\n    return this.root;\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/document.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst DEFAULT_USER_UNIT = 1.0;\nconst LETTER_SIZE_MEDIABOX = [0, 0, 612, 792];\nclass Page {\n  constructor({\n    pdfManager,\n    xref,\n    pageIndex,\n    pageDict,\n    ref,\n    globalIdFactory,\n    fontCache,\n    builtInCMapCache,\n    standardFontDataCache,\n    globalImageCache,\n    systemFontCache,\n    nonBlendModesSet,\n    xfaFactory\n  }) {\n    this.pdfManager = pdfManager;\n    this.pageIndex = pageIndex;\n    this.pageDict = pageDict;\n    this.xref = xref;\n    this.ref = ref;\n    this.fontCache = fontCache;\n    this.builtInCMapCache = builtInCMapCache;\n    this.standardFontDataCache = standardFontDataCache;\n    this.globalImageCache = globalImageCache;\n    this.systemFontCache = systemFontCache;\n    this.nonBlendModesSet = nonBlendModesSet;\n    this.evaluatorOptions = pdfManager.evaluatorOptions;\n    this.resourcesPromise = null;\n    this.xfaFactory = xfaFactory;\n    const idCounters = {\n      obj: 0\n    };\n    this._localIdFactory = class extends globalIdFactory {\n      static createObjId() {\n        return `p${pageIndex}_${++idCounters.obj}`;\n      }\n      static getPageObjId() {\n        return `p${ref.toString()}`;\n      }\n    };\n  }\n  _getInheritableProperty(key, getArray = false) {\n    const value = getInheritableProperty({\n      dict: this.pageDict,\n      key,\n      getArray,\n      stopWhenFound: false\n    });\n    if (!Array.isArray(value)) {\n      return value;\n    }\n    if (value.length === 1 || !(value[0] instanceof Dict)) {\n      return value[0];\n    }\n    return Dict.merge({\n      xref: this.xref,\n      dictArray: value\n    });\n  }\n  get content() {\n    return this.pageDict.getArray(\"Contents\");\n  }\n  get resources() {\n    const resources = this._getInheritableProperty(\"Resources\");\n    return shadow(this, \"resources\", resources instanceof Dict ? resources : Dict.empty);\n  }\n  _getBoundingBox(name) {\n    if (this.xfaData) {\n      return this.xfaData.bbox;\n    }\n    const box = lookupNormalRect(this._getInheritableProperty(name, true), null);\n    if (box) {\n      if (box[2] - box[0] > 0 && box[3] - box[1] > 0) {\n        return box;\n      }\n      warn(`Empty, or invalid, /${name} entry.`);\n    }\n    return null;\n  }\n  get mediaBox() {\n    return shadow(this, \"mediaBox\", this._getBoundingBox(\"MediaBox\") || LETTER_SIZE_MEDIABOX);\n  }\n  get cropBox() {\n    return shadow(this, \"cropBox\", this._getBoundingBox(\"CropBox\") || this.mediaBox);\n  }\n  get userUnit() {\n    let obj = this.pageDict.get(\"UserUnit\");\n    if (typeof obj !== \"number\" || obj <= 0) {\n      obj = DEFAULT_USER_UNIT;\n    }\n    return shadow(this, \"userUnit\", obj);\n  }\n  get view() {\n    const {\n      cropBox,\n      mediaBox\n    } = this;\n    if (cropBox !== mediaBox && !isArrayEqual(cropBox, mediaBox)) {\n      const box = Util.intersect(cropBox, mediaBox);\n      if (box && box[2] - box[0] > 0 && box[3] - box[1] > 0) {\n        return shadow(this, \"view\", box);\n      }\n      warn(\"Empty /CropBox and /MediaBox intersection.\");\n    }\n    return shadow(this, \"view\", mediaBox);\n  }\n  get rotate() {\n    let rotate = this._getInheritableProperty(\"Rotate\") || 0;\n    if (rotate % 90 !== 0) {\n      rotate = 0;\n    } else if (rotate >= 360) {\n      rotate %= 360;\n    } else if (rotate < 0) {\n      rotate = (rotate % 360 + 360) % 360;\n    }\n    return shadow(this, \"rotate\", rotate);\n  }\n  _onSubStreamError(reason, objId) {\n    if (this.evaluatorOptions.ignoreErrors) {\n      warn(`getContentStream - ignoring sub-stream (${objId}): \"${reason}\".`);\n      return;\n    }\n    throw reason;\n  }\n  getContentStream() {\n    return this.pdfManager.ensure(this, \"content\").then(content => {\n      if (content instanceof BaseStream) {\n        return content;\n      }\n      if (Array.isArray(content)) {\n        return new StreamsSequenceStream(content, this._onSubStreamError.bind(this));\n      }\n      return new NullStream();\n    });\n  }\n  get xfaData() {\n    return shadow(this, \"xfaData\", this.xfaFactory ? {\n      bbox: this.xfaFactory.getBoundingBox(this.pageIndex)\n    } : null);\n  }\n  #replaceIdByRef(annotations, deletedAnnotations, existingAnnotations) {\n    for (const annotation of annotations) {\n      if (annotation.id) {\n        const ref = Ref.fromString(annotation.id);\n        if (!ref) {\n          warn(`A non-linked annotation cannot be modified: ${annotation.id}`);\n          continue;\n        }\n        if (annotation.deleted) {\n          deletedAnnotations.put(ref, ref);\n          continue;\n        }\n        existingAnnotations?.put(ref);\n        annotation.ref = ref;\n        delete annotation.id;\n      }\n    }\n  }\n  async saveNewAnnotations(handler, task, annotations, imagePromises) {\n    if (this.xfaFactory) {\n      throw new Error(\"XFA: Cannot save new annotations.\");\n    }\n    const partialEvaluator = new PartialEvaluator({\n      xref: this.xref,\n      handler,\n      pageIndex: this.pageIndex,\n      idFactory: this._localIdFactory,\n      fontCache: this.fontCache,\n      builtInCMapCache: this.builtInCMapCache,\n      standardFontDataCache: this.standardFontDataCache,\n      globalImageCache: this.globalImageCache,\n      systemFontCache: this.systemFontCache,\n      options: this.evaluatorOptions\n    });\n    const deletedAnnotations = new RefSetCache();\n    const existingAnnotations = new RefSet();\n    this.#replaceIdByRef(annotations, deletedAnnotations, existingAnnotations);\n    const pageDict = this.pageDict;\n    const annotationsArray = this.annotations.filter(a => !(a instanceof Ref && deletedAnnotations.has(a)));\n    const newData = await AnnotationFactory.saveNewAnnotations(partialEvaluator, task, annotations, imagePromises);\n    for (const {\n      ref\n    } of newData.annotations) {\n      if (ref instanceof Ref && !existingAnnotations.has(ref)) {\n        annotationsArray.push(ref);\n      }\n    }\n    const savedDict = pageDict.get(\"Annots\");\n    pageDict.set(\"Annots\", annotationsArray);\n    const buffer = [];\n    await writeObject(this.ref, pageDict, buffer, this.xref);\n    if (savedDict) {\n      pageDict.set(\"Annots\", savedDict);\n    }\n    const objects = newData.dependencies;\n    objects.push({\n      ref: this.ref,\n      data: buffer.join(\"\")\n    }, ...newData.annotations);\n    for (const deletedRef of deletedAnnotations) {\n      objects.push({\n        ref: deletedRef,\n        data: null\n      });\n    }\n    return objects;\n  }\n  save(handler, task, annotationStorage) {\n    const partialEvaluator = new PartialEvaluator({\n      xref: this.xref,\n      handler,\n      pageIndex: this.pageIndex,\n      idFactory: this._localIdFactory,\n      fontCache: this.fontCache,\n      builtInCMapCache: this.builtInCMapCache,\n      standardFontDataCache: this.standardFontDataCache,\n      globalImageCache: this.globalImageCache,\n      systemFontCache: this.systemFontCache,\n      options: this.evaluatorOptions\n    });\n    return this._parsedAnnotations.then(function (annotations) {\n      const newRefsPromises = [];\n      for (const annotation of annotations) {\n        if (!annotation.mustBePrinted(annotationStorage)) {\n          continue;\n        }\n        newRefsPromises.push(annotation.save(partialEvaluator, task, annotationStorage).catch(function (reason) {\n          warn(\"save - ignoring annotation data during \" + `\"${task.name}\" task: \"${reason}\".`);\n          return null;\n        }));\n      }\n      return Promise.all(newRefsPromises).then(function (newRefs) {\n        return newRefs.filter(newRef => !!newRef);\n      });\n    });\n  }\n  loadResources(keys) {\n    this.resourcesPromise ||= this.pdfManager.ensure(this, \"resources\");\n    return this.resourcesPromise.then(() => {\n      const objectLoader = new ObjectLoader(this.resources, keys, this.xref);\n      return objectLoader.load();\n    });\n  }\n  getOperatorList({\n    handler,\n    sink,\n    task,\n    intent,\n    cacheKey,\n    annotationStorage = null\n  }) {\n    const contentStreamPromise = this.getContentStream();\n    const resourcesPromise = this.loadResources([\"ColorSpace\", \"ExtGState\", \"Font\", \"Pattern\", \"Properties\", \"Shading\", \"XObject\"]);\n    const partialEvaluator = new PartialEvaluator({\n      xref: this.xref,\n      handler,\n      pageIndex: this.pageIndex,\n      idFactory: this._localIdFactory,\n      fontCache: this.fontCache,\n      builtInCMapCache: this.builtInCMapCache,\n      standardFontDataCache: this.standardFontDataCache,\n      globalImageCache: this.globalImageCache,\n      systemFontCache: this.systemFontCache,\n      options: this.evaluatorOptions\n    });\n    const newAnnotsByPage = !this.xfaFactory ? getNewAnnotationsMap(annotationStorage) : null;\n    const newAnnots = newAnnotsByPage?.get(this.pageIndex);\n    let newAnnotationsPromise = Promise.resolve(null);\n    let deletedAnnotations = null;\n    if (newAnnots) {\n      const annotationGlobalsPromise = this.pdfManager.ensureDoc(\"annotationGlobals\");\n      let imagePromises;\n      const missingBitmaps = new Set();\n      for (const {\n        bitmapId,\n        bitmap\n      } of newAnnots) {\n        if (bitmapId && !bitmap && !missingBitmaps.has(bitmapId)) {\n          missingBitmaps.add(bitmapId);\n        }\n      }\n      const {\n        isOffscreenCanvasSupported\n      } = this.evaluatorOptions;\n      if (missingBitmaps.size > 0) {\n        const annotationWithBitmaps = newAnnots.slice();\n        for (const [key, annotation] of annotationStorage) {\n          if (!key.startsWith(AnnotationEditorPrefix)) {\n            continue;\n          }\n          if (annotation.bitmap && missingBitmaps.has(annotation.bitmapId)) {\n            annotationWithBitmaps.push(annotation);\n          }\n        }\n        imagePromises = AnnotationFactory.generateImages(annotationWithBitmaps, this.xref, isOffscreenCanvasSupported);\n      } else {\n        imagePromises = AnnotationFactory.generateImages(newAnnots, this.xref, isOffscreenCanvasSupported);\n      }\n      deletedAnnotations = new RefSet();\n      this.#replaceIdByRef(newAnnots, deletedAnnotations, null);\n      newAnnotationsPromise = annotationGlobalsPromise.then(annotationGlobals => {\n        if (!annotationGlobals) {\n          return null;\n        }\n        return AnnotationFactory.printNewAnnotations(annotationGlobals, partialEvaluator, task, newAnnots, imagePromises);\n      });\n    }\n    const pageListPromise = Promise.all([contentStreamPromise, resourcesPromise]).then(([contentStream]) => {\n      const opList = new OperatorList(intent, sink);\n      handler.send(\"StartRenderPage\", {\n        transparency: partialEvaluator.hasBlendModes(this.resources, this.nonBlendModesSet),\n        pageIndex: this.pageIndex,\n        cacheKey\n      });\n      return partialEvaluator.getOperatorList({\n        stream: contentStream,\n        task,\n        resources: this.resources,\n        operatorList: opList\n      }).then(function () {\n        return opList;\n      });\n    });\n    return Promise.all([pageListPromise, this._parsedAnnotations, newAnnotationsPromise]).then(function ([pageOpList, annotations, newAnnotations]) {\n      if (newAnnotations) {\n        annotations = annotations.filter(a => !(a.ref && deletedAnnotations.has(a.ref)));\n        for (let i = 0, ii = newAnnotations.length; i < ii; i++) {\n          const newAnnotation = newAnnotations[i];\n          if (newAnnotation.refToReplace) {\n            const j = annotations.findIndex(a => a.ref && isRefsEqual(a.ref, newAnnotation.refToReplace));\n            if (j >= 0) {\n              annotations.splice(j, 1, newAnnotation);\n              newAnnotations.splice(i--, 1);\n              ii--;\n            }\n          }\n        }\n        annotations = annotations.concat(newAnnotations);\n      }\n      if (annotations.length === 0 || intent & RenderingIntentFlag.ANNOTATIONS_DISABLE) {\n        pageOpList.flush(true);\n        return {\n          length: pageOpList.totalLength\n        };\n      }\n      const renderForms = !!(intent & RenderingIntentFlag.ANNOTATIONS_FORMS),\n        intentAny = !!(intent & RenderingIntentFlag.ANY),\n        intentDisplay = !!(intent & RenderingIntentFlag.DISPLAY),\n        intentPrint = !!(intent & RenderingIntentFlag.PRINT);\n      const opListPromises = [];\n      for (const annotation of annotations) {\n        if (intentAny || intentDisplay && annotation.mustBeViewed(annotationStorage, renderForms) || intentPrint && annotation.mustBePrinted(annotationStorage)) {\n          opListPromises.push(annotation.getOperatorList(partialEvaluator, task, intent, renderForms, annotationStorage).catch(function (reason) {\n            warn(\"getOperatorList - ignoring annotation data during \" + `\"${task.name}\" task: \"${reason}\".`);\n            return {\n              opList: null,\n              separateForm: false,\n              separateCanvas: false\n            };\n          }));\n        }\n      }\n      return Promise.all(opListPromises).then(function (opLists) {\n        let form = false,\n          canvas = false;\n        for (const {\n          opList,\n          separateForm,\n          separateCanvas\n        } of opLists) {\n          pageOpList.addOpList(opList);\n          form ||= separateForm;\n          canvas ||= separateCanvas;\n        }\n        pageOpList.flush(true, {\n          form,\n          canvas\n        });\n        return {\n          length: pageOpList.totalLength\n        };\n      });\n    });\n  }\n  async extractTextContent({\n    handler,\n    task,\n    includeMarkedContent,\n    disableNormalization,\n    sink\n  }) {\n    const contentStreamPromise = this.getContentStream();\n    const resourcesPromise = this.loadResources([\"ExtGState\", \"Font\", \"Properties\", \"XObject\"]);\n    const langPromise = this.pdfManager.ensureCatalog(\"lang\");\n    const [contentStream,, lang] = await Promise.all([contentStreamPromise, resourcesPromise, langPromise]);\n    const partialEvaluator = new PartialEvaluator({\n      xref: this.xref,\n      handler,\n      pageIndex: this.pageIndex,\n      idFactory: this._localIdFactory,\n      fontCache: this.fontCache,\n      builtInCMapCache: this.builtInCMapCache,\n      standardFontDataCache: this.standardFontDataCache,\n      globalImageCache: this.globalImageCache,\n      systemFontCache: this.systemFontCache,\n      options: this.evaluatorOptions\n    });\n    return partialEvaluator.getTextContent({\n      stream: contentStream,\n      task,\n      resources: this.resources,\n      includeMarkedContent,\n      disableNormalization,\n      sink,\n      viewBox: this.view,\n      lang\n    });\n  }\n  async getStructTree() {\n    const structTreeRoot = await this.pdfManager.ensureCatalog(\"structTreeRoot\");\n    if (!structTreeRoot) {\n      return null;\n    }\n    await this._parsedAnnotations;\n    const structTree = await this.pdfManager.ensure(this, \"_parseStructTree\", [structTreeRoot]);\n    return structTree.serializable;\n  }\n  _parseStructTree(structTreeRoot) {\n    const tree = new StructTreePage(structTreeRoot, this.pageDict);\n    tree.parse(this.ref);\n    return tree;\n  }\n  async getAnnotationsData(handler, task, intent) {\n    const annotations = await this._parsedAnnotations;\n    if (annotations.length === 0) {\n      return annotations;\n    }\n    const annotationsData = [],\n      textContentPromises = [];\n    let partialEvaluator;\n    const intentAny = !!(intent & RenderingIntentFlag.ANY),\n      intentDisplay = !!(intent & RenderingIntentFlag.DISPLAY),\n      intentPrint = !!(intent & RenderingIntentFlag.PRINT);\n    for (const annotation of annotations) {\n      const isVisible = intentAny || intentDisplay && annotation.viewable;\n      if (isVisible || intentPrint && annotation.printable) {\n        annotationsData.push(annotation.data);\n      }\n      if (annotation.hasTextContent && isVisible) {\n        partialEvaluator ||= new PartialEvaluator({\n          xref: this.xref,\n          handler,\n          pageIndex: this.pageIndex,\n          idFactory: this._localIdFactory,\n          fontCache: this.fontCache,\n          builtInCMapCache: this.builtInCMapCache,\n          standardFontDataCache: this.standardFontDataCache,\n          globalImageCache: this.globalImageCache,\n          systemFontCache: this.systemFontCache,\n          options: this.evaluatorOptions\n        });\n        textContentPromises.push(annotation.extractTextContent(partialEvaluator, task, [-Infinity, -Infinity, Infinity, Infinity]).catch(function (reason) {\n          warn(`getAnnotationsData - ignoring textContent during \"${task.name}\" task: \"${reason}\".`);\n        }));\n      }\n    }\n    await Promise.all(textContentPromises);\n    return annotationsData;\n  }\n  get annotations() {\n    const annots = this._getInheritableProperty(\"Annots\");\n    return shadow(this, \"annotations\", Array.isArray(annots) ? annots : []);\n  }\n  get _parsedAnnotations() {\n    const promise = this.pdfManager.ensure(this, \"annotations\").then(async annots => {\n      if (annots.length === 0) {\n        return annots;\n      }\n      const annotationGlobals = await this.pdfManager.ensureDoc(\"annotationGlobals\");\n      if (!annotationGlobals) {\n        return [];\n      }\n      const annotationPromises = [];\n      for (const annotationRef of annots) {\n        annotationPromises.push(AnnotationFactory.create(this.xref, annotationRef, annotationGlobals, this._localIdFactory, false, this.ref).catch(function (reason) {\n          warn(`_parsedAnnotations: \"${reason}\".`);\n          return null;\n        }));\n      }\n      const sortedAnnotations = [];\n      let popupAnnotations, widgetAnnotations;\n      for (const annotation of await Promise.all(annotationPromises)) {\n        if (!annotation) {\n          continue;\n        }\n        if (annotation instanceof WidgetAnnotation) {\n          (widgetAnnotations ||= []).push(annotation);\n          continue;\n        }\n        if (annotation instanceof PopupAnnotation) {\n          (popupAnnotations ||= []).push(annotation);\n          continue;\n        }\n        sortedAnnotations.push(annotation);\n      }\n      if (widgetAnnotations) {\n        sortedAnnotations.push(...widgetAnnotations);\n      }\n      if (popupAnnotations) {\n        sortedAnnotations.push(...popupAnnotations);\n      }\n      return sortedAnnotations;\n    });\n    return shadow(this, \"_parsedAnnotations\", promise);\n  }\n  get jsActions() {\n    const actions = collectActions(this.xref, this.pageDict, PageActionEventType);\n    return shadow(this, \"jsActions\", actions);\n  }\n}\nconst PDF_HEADER_SIGNATURE = new Uint8Array([0x25, 0x50, 0x44, 0x46, 0x2d]);\nconst STARTXREF_SIGNATURE = new Uint8Array([0x73, 0x74, 0x61, 0x72, 0x74, 0x78, 0x72, 0x65, 0x66]);\nconst ENDOBJ_SIGNATURE = new Uint8Array([0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a]);\nconst FINGERPRINT_FIRST_BYTES = 1024;\nconst EMPTY_FINGERPRINT = \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nfunction find(stream, signature, limit = 1024, backwards = false) {\n  const signatureLength = signature.length;\n  const scanBytes = stream.peekBytes(limit);\n  const scanLength = scanBytes.length - signatureLength;\n  if (scanLength <= 0) {\n    return false;\n  }\n  if (backwards) {\n    const signatureEnd = signatureLength - 1;\n    let pos = scanBytes.length - 1;\n    while (pos >= signatureEnd) {\n      let j = 0;\n      while (j < signatureLength && scanBytes[pos - j] === signature[signatureEnd - j]) {\n        j++;\n      }\n      if (j >= signatureLength) {\n        stream.pos += pos - signatureEnd;\n        return true;\n      }\n      pos--;\n    }\n  } else {\n    let pos = 0;\n    while (pos <= scanLength) {\n      let j = 0;\n      while (j < signatureLength && scanBytes[pos + j] === signature[j]) {\n        j++;\n      }\n      if (j >= signatureLength) {\n        stream.pos += pos;\n        return true;\n      }\n      pos++;\n    }\n  }\n  return false;\n}\nclass PDFDocument {\n  constructor(pdfManager, stream) {\n    if (stream.length <= 0) {\n      throw new InvalidPDFException(\"The PDF file is empty, i.e. its size is zero bytes.\");\n    }\n    this.pdfManager = pdfManager;\n    this.stream = stream;\n    this.xref = new XRef(stream, pdfManager);\n    this._pagePromises = new Map();\n    this._version = null;\n    const idCounters = {\n      font: 0\n    };\n    this._globalIdFactory = class {\n      static getDocId() {\n        return `g_${pdfManager.docId}`;\n      }\n      static createFontId() {\n        return `f${++idCounters.font}`;\n      }\n      static createObjId() {\n        unreachable(\"Abstract method `createObjId` called.\");\n      }\n      static getPageObjId() {\n        unreachable(\"Abstract method `getPageObjId` called.\");\n      }\n    };\n  }\n  parse(recoveryMode) {\n    this.xref.parse(recoveryMode);\n    this.catalog = new Catalog(this.pdfManager, this.xref);\n  }\n  get linearization() {\n    let linearization = null;\n    try {\n      linearization = Linearization.create(this.stream);\n    } catch (err) {\n      if (err instanceof MissingDataException) {\n        throw err;\n      }\n      info(err);\n    }\n    return shadow(this, \"linearization\", linearization);\n  }\n  get startXRef() {\n    const stream = this.stream;\n    let startXRef = 0;\n    if (this.linearization) {\n      stream.reset();\n      if (find(stream, ENDOBJ_SIGNATURE)) {\n        stream.skip(6);\n        let ch = stream.peekByte();\n        while (isWhiteSpace(ch)) {\n          stream.pos++;\n          ch = stream.peekByte();\n        }\n        startXRef = stream.pos - stream.start;\n      }\n    } else {\n      const step = 1024;\n      const startXRefLength = STARTXREF_SIGNATURE.length;\n      let found = false,\n        pos = stream.end;\n      while (!found && pos > 0) {\n        pos -= step - startXRefLength;\n        if (pos < 0) {\n          pos = 0;\n        }\n        stream.pos = pos;\n        found = find(stream, STARTXREF_SIGNATURE, step, true);\n      }\n      if (found) {\n        stream.skip(9);\n        let ch;\n        do {\n          ch = stream.getByte();\n        } while (isWhiteSpace(ch));\n        let str = \"\";\n        while (ch >= 0x20 && ch <= 0x39) {\n          str += String.fromCharCode(ch);\n          ch = stream.getByte();\n        }\n        startXRef = parseInt(str, 10);\n        if (isNaN(startXRef)) {\n          startXRef = 0;\n        }\n      }\n    }\n    return shadow(this, \"startXRef\", startXRef);\n  }\n  checkHeader() {\n    const stream = this.stream;\n    stream.reset();\n    if (!find(stream, PDF_HEADER_SIGNATURE)) {\n      return;\n    }\n    stream.moveStart();\n    stream.skip(PDF_HEADER_SIGNATURE.length);\n    let version = \"\",\n      ch;\n    while ((ch = stream.getByte()) > 0x20 && version.length < 7) {\n      version += String.fromCharCode(ch);\n    }\n    if (PDF_VERSION_REGEXP.test(version)) {\n      this._version = version;\n    } else {\n      warn(`Invalid PDF header version: ${version}`);\n    }\n  }\n  parseStartXRef() {\n    this.xref.setStartXRef(this.startXRef);\n  }\n  get numPages() {\n    let num = 0;\n    if (this.catalog.hasActualNumPages) {\n      num = this.catalog.numPages;\n    } else if (this.xfaFactory) {\n      num = this.xfaFactory.getNumPages();\n    } else if (this.linearization) {\n      num = this.linearization.numPages;\n    } else {\n      num = this.catalog.numPages;\n    }\n    return shadow(this, \"numPages\", num);\n  }\n  _hasOnlyDocumentSignatures(fields, recursionDepth = 0) {\n    const RECURSION_LIMIT = 10;\n    if (!Array.isArray(fields)) {\n      return false;\n    }\n    return fields.every(field => {\n      field = this.xref.fetchIfRef(field);\n      if (!(field instanceof Dict)) {\n        return false;\n      }\n      if (field.has(\"Kids\")) {\n        if (++recursionDepth > RECURSION_LIMIT) {\n          warn(\"_hasOnlyDocumentSignatures: maximum recursion depth reached\");\n          return false;\n        }\n        return this._hasOnlyDocumentSignatures(field.get(\"Kids\"), recursionDepth);\n      }\n      const isSignature = isName(field.get(\"FT\"), \"Sig\");\n      const rectangle = field.get(\"Rect\");\n      const isInvisible = Array.isArray(rectangle) && rectangle.every(value => value === 0);\n      return isSignature && isInvisible;\n    });\n  }\n  get _xfaStreams() {\n    const acroForm = this.catalog.acroForm;\n    if (!acroForm) {\n      return null;\n    }\n    const xfa = acroForm.get(\"XFA\");\n    const entries = {\n      \"xdp:xdp\": \"\",\n      template: \"\",\n      datasets: \"\",\n      config: \"\",\n      connectionSet: \"\",\n      localeSet: \"\",\n      stylesheet: \"\",\n      \"/xdp:xdp\": \"\"\n    };\n    if (xfa instanceof BaseStream && !xfa.isEmpty) {\n      entries[\"xdp:xdp\"] = xfa;\n      return entries;\n    }\n    if (!Array.isArray(xfa) || xfa.length === 0) {\n      return null;\n    }\n    for (let i = 0, ii = xfa.length; i < ii; i += 2) {\n      let name;\n      if (i === 0) {\n        name = \"xdp:xdp\";\n      } else if (i === ii - 2) {\n        name = \"/xdp:xdp\";\n      } else {\n        name = xfa[i];\n      }\n      if (!entries.hasOwnProperty(name)) {\n        continue;\n      }\n      const data = this.xref.fetchIfRef(xfa[i + 1]);\n      if (!(data instanceof BaseStream) || data.isEmpty) {\n        continue;\n      }\n      entries[name] = data;\n    }\n    return entries;\n  }\n  get xfaDatasets() {\n    const streams = this._xfaStreams;\n    if (!streams) {\n      return shadow(this, \"xfaDatasets\", null);\n    }\n    for (const key of [\"datasets\", \"xdp:xdp\"]) {\n      const stream = streams[key];\n      if (!stream) {\n        continue;\n      }\n      try {\n        const str = stringToUTF8String(stream.getString());\n        const data = {\n          [key]: str\n        };\n        return shadow(this, \"xfaDatasets\", new DatasetReader(data));\n      } catch {\n        warn(\"XFA - Invalid utf-8 string.\");\n        break;\n      }\n    }\n    return shadow(this, \"xfaDatasets\", null);\n  }\n  get xfaData() {\n    const streams = this._xfaStreams;\n    if (!streams) {\n      return null;\n    }\n    const data = Object.create(null);\n    for (const [key, stream] of Object.entries(streams)) {\n      if (!stream) {\n        continue;\n      }\n      try {\n        data[key] = stringToUTF8String(stream.getString());\n      } catch {\n        warn(\"XFA - Invalid utf-8 string.\");\n        return null;\n      }\n    }\n    return data;\n  }\n  get xfaFactory() {\n    let data;\n    if (this.pdfManager.enableXfa && this.catalog.needsRendering && this.formInfo.hasXfa && !this.formInfo.hasAcroForm) {\n      data = this.xfaData;\n    }\n    return shadow(this, \"xfaFactory\", data ? new XFAFactory(data) : null);\n  }\n  get isPureXfa() {\n    return this.xfaFactory ? this.xfaFactory.isValid() : false;\n  }\n  get htmlForXfa() {\n    return this.xfaFactory ? this.xfaFactory.getPages() : null;\n  }\n  async loadXfaImages() {\n    const xfaImagesDict = await this.pdfManager.ensureCatalog(\"xfaImages\");\n    if (!xfaImagesDict) {\n      return;\n    }\n    const keys = xfaImagesDict.getKeys();\n    const objectLoader = new ObjectLoader(xfaImagesDict, keys, this.xref);\n    await objectLoader.load();\n    const xfaImages = new Map();\n    for (const key of keys) {\n      const stream = xfaImagesDict.get(key);\n      if (stream instanceof BaseStream) {\n        xfaImages.set(key, stream.getBytes());\n      }\n    }\n    this.xfaFactory.setImages(xfaImages);\n  }\n  async loadXfaFonts(handler, task) {\n    const acroForm = await this.pdfManager.ensureCatalog(\"acroForm\");\n    if (!acroForm) {\n      return;\n    }\n    const resources = await acroForm.getAsync(\"DR\");\n    if (!(resources instanceof Dict)) {\n      return;\n    }\n    const objectLoader = new ObjectLoader(resources, [\"Font\"], this.xref);\n    await objectLoader.load();\n    const fontRes = resources.get(\"Font\");\n    if (!(fontRes instanceof Dict)) {\n      return;\n    }\n    const options = Object.assign(Object.create(null), this.pdfManager.evaluatorOptions);\n    options.useSystemFonts = false;\n    const partialEvaluator = new PartialEvaluator({\n      xref: this.xref,\n      handler,\n      pageIndex: -1,\n      idFactory: this._globalIdFactory,\n      fontCache: this.catalog.fontCache,\n      builtInCMapCache: this.catalog.builtInCMapCache,\n      standardFontDataCache: this.catalog.standardFontDataCache,\n      options\n    });\n    const operatorList = new OperatorList();\n    const pdfFonts = [];\n    const initialState = {\n      get font() {\n        return pdfFonts.at(-1);\n      },\n      set font(font) {\n        pdfFonts.push(font);\n      },\n      clone() {\n        return this;\n      }\n    };\n    const fonts = new Map();\n    fontRes.forEach((fontName, font) => {\n      fonts.set(fontName, font);\n    });\n    const promises = [];\n    for (const [fontName, font] of fonts) {\n      const descriptor = font.get(\"FontDescriptor\");\n      if (!(descriptor instanceof Dict)) {\n        continue;\n      }\n      let fontFamily = descriptor.get(\"FontFamily\");\n      fontFamily = fontFamily.replaceAll(/[ ]+(\\d)/g, \"$1\");\n      const fontWeight = descriptor.get(\"FontWeight\");\n      const italicAngle = -descriptor.get(\"ItalicAngle\");\n      const cssFontInfo = {\n        fontFamily,\n        fontWeight,\n        italicAngle\n      };\n      if (!validateCSSFont(cssFontInfo)) {\n        continue;\n      }\n      promises.push(partialEvaluator.handleSetFont(resources, [Name.get(fontName), 1], null, operatorList, task, initialState, null, cssFontInfo).catch(function (reason) {\n        warn(`loadXfaFonts: \"${reason}\".`);\n        return null;\n      }));\n    }\n    await Promise.all(promises);\n    const missingFonts = this.xfaFactory.setFonts(pdfFonts);\n    if (!missingFonts) {\n      return;\n    }\n    options.ignoreErrors = true;\n    promises.length = 0;\n    pdfFonts.length = 0;\n    const reallyMissingFonts = new Set();\n    for (const missing of missingFonts) {\n      if (!getXfaFontName(`${missing}-Regular`)) {\n        reallyMissingFonts.add(missing);\n      }\n    }\n    if (reallyMissingFonts.size) {\n      missingFonts.push(\"PdfJS-Fallback\");\n    }\n    for (const missing of missingFonts) {\n      if (reallyMissingFonts.has(missing)) {\n        continue;\n      }\n      for (const fontInfo of [{\n        name: \"Regular\",\n        fontWeight: 400,\n        italicAngle: 0\n      }, {\n        name: \"Bold\",\n        fontWeight: 700,\n        italicAngle: 0\n      }, {\n        name: \"Italic\",\n        fontWeight: 400,\n        italicAngle: 12\n      }, {\n        name: \"BoldItalic\",\n        fontWeight: 700,\n        italicAngle: 12\n      }]) {\n        const name = `${missing}-${fontInfo.name}`;\n        const dict = getXfaFontDict(name);\n        promises.push(partialEvaluator.handleSetFont(resources, [Name.get(name), 1], null, operatorList, task, initialState, dict, {\n          fontFamily: missing,\n          fontWeight: fontInfo.fontWeight,\n          italicAngle: fontInfo.italicAngle\n        }).catch(function (reason) {\n          warn(`loadXfaFonts: \"${reason}\".`);\n          return null;\n        }));\n      }\n    }\n    await Promise.all(promises);\n    this.xfaFactory.appendFonts(pdfFonts, reallyMissingFonts);\n  }\n  async serializeXfaData(annotationStorage) {\n    return this.xfaFactory ? this.xfaFactory.serializeData(annotationStorage) : null;\n  }\n  get version() {\n    return this.catalog.version || this._version;\n  }\n  get formInfo() {\n    const formInfo = {\n      hasFields: false,\n      hasAcroForm: false,\n      hasXfa: false,\n      hasSignatures: false\n    };\n    const acroForm = this.catalog.acroForm;\n    if (!acroForm) {\n      return shadow(this, \"formInfo\", formInfo);\n    }\n    try {\n      const fields = acroForm.get(\"Fields\");\n      const hasFields = Array.isArray(fields) && fields.length > 0;\n      formInfo.hasFields = hasFields;\n      const xfa = acroForm.get(\"XFA\");\n      formInfo.hasXfa = Array.isArray(xfa) && xfa.length > 0 || xfa instanceof BaseStream && !xfa.isEmpty;\n      const sigFlags = acroForm.get(\"SigFlags\");\n      const hasSignatures = !!(sigFlags & 0x1);\n      const hasOnlyDocumentSignatures = hasSignatures && this._hasOnlyDocumentSignatures(fields);\n      formInfo.hasAcroForm = hasFields && !hasOnlyDocumentSignatures;\n      formInfo.hasSignatures = hasSignatures;\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(`Cannot fetch form information: \"${ex}\".`);\n    }\n    return shadow(this, \"formInfo\", formInfo);\n  }\n  get documentInfo() {\n    const docInfo = {\n      PDFFormatVersion: this.version,\n      Language: this.catalog.lang,\n      EncryptFilterName: this.xref.encrypt ? this.xref.encrypt.filterName : null,\n      IsLinearized: !!this.linearization,\n      IsAcroFormPresent: this.formInfo.hasAcroForm,\n      IsXFAPresent: this.formInfo.hasXfa,\n      IsCollectionPresent: !!this.catalog.collection,\n      IsSignaturesPresent: this.formInfo.hasSignatures\n    };\n    let infoDict;\n    try {\n      infoDict = this.xref.trailer.get(\"Info\");\n    } catch (err) {\n      if (err instanceof MissingDataException) {\n        throw err;\n      }\n      info(\"The document information dictionary is invalid.\");\n    }\n    if (!(infoDict instanceof Dict)) {\n      return shadow(this, \"documentInfo\", docInfo);\n    }\n    for (const key of infoDict.getKeys()) {\n      const value = infoDict.get(key);\n      switch (key) {\n        case \"Title\":\n        case \"Author\":\n        case \"Subject\":\n        case \"Keywords\":\n        case \"Creator\":\n        case \"Producer\":\n        case \"CreationDate\":\n        case \"ModDate\":\n          if (typeof value === \"string\") {\n            docInfo[key] = stringToPDFString(value);\n            continue;\n          }\n          break;\n        case \"Trapped\":\n          if (value instanceof Name) {\n            docInfo[key] = value;\n            continue;\n          }\n          break;\n        default:\n          let customValue;\n          switch (typeof value) {\n            case \"string\":\n              customValue = stringToPDFString(value);\n              break;\n            case \"number\":\n            case \"boolean\":\n              customValue = value;\n              break;\n            default:\n              if (value instanceof Name) {\n                customValue = value;\n              }\n              break;\n          }\n          if (customValue === undefined) {\n            warn(`Bad value, for custom key \"${key}\", in Info: ${value}.`);\n            continue;\n          }\n          if (!docInfo.Custom) {\n            docInfo.Custom = Object.create(null);\n          }\n          docInfo.Custom[key] = customValue;\n          continue;\n      }\n      warn(`Bad value, for key \"${key}\", in Info: ${value}.`);\n    }\n    return shadow(this, \"documentInfo\", docInfo);\n  }\n  get fingerprints() {\n    function validate(data) {\n      return typeof data === \"string\" && data.length > 0 && data !== EMPTY_FINGERPRINT;\n    }\n    function hexString(hash) {\n      const buf = [];\n      for (const num of hash) {\n        const hex = num.toString(16);\n        buf.push(hex.padStart(2, \"0\"));\n      }\n      return buf.join(\"\");\n    }\n    const idArray = this.xref.trailer.get(\"ID\");\n    let hashOriginal, hashModified;\n    if (Array.isArray(idArray) && validate(idArray[0])) {\n      hashOriginal = stringToBytes(idArray[0]);\n      if (idArray[1] !== idArray[0] && validate(idArray[1])) {\n        hashModified = stringToBytes(idArray[1]);\n      }\n    } else {\n      hashOriginal = calculateMD5(this.stream.getByteRange(0, FINGERPRINT_FIRST_BYTES), 0, FINGERPRINT_FIRST_BYTES);\n    }\n    return shadow(this, \"fingerprints\", [hexString(hashOriginal), hashModified ? hexString(hashModified) : null]);\n  }\n  async _getLinearizationPage(pageIndex) {\n    const {\n      catalog,\n      linearization,\n      xref\n    } = this;\n    const ref = Ref.get(linearization.objectNumberFirst, 0);\n    try {\n      const obj = await xref.fetchAsync(ref);\n      if (obj instanceof Dict) {\n        let type = obj.getRaw(\"Type\");\n        if (type instanceof Ref) {\n          type = await xref.fetchAsync(type);\n        }\n        if (isName(type, \"Page\") || !obj.has(\"Type\") && !obj.has(\"Kids\") && obj.has(\"Contents\")) {\n          if (!catalog.pageKidsCountCache.has(ref)) {\n            catalog.pageKidsCountCache.put(ref, 1);\n          }\n          if (!catalog.pageIndexCache.has(ref)) {\n            catalog.pageIndexCache.put(ref, 0);\n          }\n          return [obj, ref];\n        }\n      }\n      throw new FormatError(\"The Linearization dictionary doesn't point to a valid Page dictionary.\");\n    } catch (reason) {\n      warn(`_getLinearizationPage: \"${reason.message}\".`);\n      return catalog.getPageDict(pageIndex);\n    }\n  }\n  getPage(pageIndex) {\n    const cachedPromise = this._pagePromises.get(pageIndex);\n    if (cachedPromise) {\n      return cachedPromise;\n    }\n    const {\n      catalog,\n      linearization,\n      xfaFactory\n    } = this;\n    let promise;\n    if (xfaFactory) {\n      promise = Promise.resolve([Dict.empty, null]);\n    } else if (linearization?.pageFirst === pageIndex) {\n      promise = this._getLinearizationPage(pageIndex);\n    } else {\n      promise = catalog.getPageDict(pageIndex);\n    }\n    promise = promise.then(([pageDict, ref]) => {\n      return new Page({\n        pdfManager: this.pdfManager,\n        xref: this.xref,\n        pageIndex,\n        pageDict,\n        ref,\n        globalIdFactory: this._globalIdFactory,\n        fontCache: catalog.fontCache,\n        builtInCMapCache: catalog.builtInCMapCache,\n        standardFontDataCache: catalog.standardFontDataCache,\n        globalImageCache: catalog.globalImageCache,\n        systemFontCache: catalog.systemFontCache,\n        nonBlendModesSet: catalog.nonBlendModesSet,\n        xfaFactory\n      });\n    });\n    this._pagePromises.set(pageIndex, promise);\n    return promise;\n  }\n  async checkFirstPage(recoveryMode = false) {\n    if (recoveryMode) {\n      return;\n    }\n    try {\n      await this.getPage(0);\n    } catch (reason) {\n      if (reason instanceof XRefEntryException) {\n        this._pagePromises.delete(0);\n        await this.cleanup();\n        throw new XRefParseException();\n      }\n    }\n  }\n  async checkLastPage(recoveryMode = false) {\n    const {\n      catalog,\n      pdfManager\n    } = this;\n    catalog.setActualNumPages();\n    let numPages;\n    try {\n      await Promise.all([pdfManager.ensureDoc(\"xfaFactory\"), pdfManager.ensureDoc(\"linearization\"), pdfManager.ensureCatalog(\"numPages\")]);\n      if (this.xfaFactory) {\n        return;\n      } else if (this.linearization) {\n        numPages = this.linearization.numPages;\n      } else {\n        numPages = catalog.numPages;\n      }\n      if (!Number.isInteger(numPages)) {\n        throw new FormatError(\"Page count is not an integer.\");\n      } else if (numPages <= 1) {\n        return;\n      }\n      await this.getPage(numPages - 1);\n    } catch (reason) {\n      this._pagePromises.delete(numPages - 1);\n      await this.cleanup();\n      if (reason instanceof XRefEntryException && !recoveryMode) {\n        throw new XRefParseException();\n      }\n      warn(`checkLastPage - invalid /Pages tree /Count: ${numPages}.`);\n      let pagesTree;\n      try {\n        pagesTree = await catalog.getAllPageDicts(recoveryMode);\n      } catch (reasonAll) {\n        if (reasonAll instanceof XRefEntryException && !recoveryMode) {\n          throw new XRefParseException();\n        }\n        catalog.setActualNumPages(1);\n        return;\n      }\n      for (const [pageIndex, [pageDict, ref]] of pagesTree) {\n        let promise;\n        if (pageDict instanceof Error) {\n          promise = Promise.reject(pageDict);\n          promise.catch(() => {});\n        } else {\n          promise = Promise.resolve(new Page({\n            pdfManager,\n            xref: this.xref,\n            pageIndex,\n            pageDict,\n            ref,\n            globalIdFactory: this._globalIdFactory,\n            fontCache: catalog.fontCache,\n            builtInCMapCache: catalog.builtInCMapCache,\n            standardFontDataCache: catalog.standardFontDataCache,\n            globalImageCache: catalog.globalImageCache,\n            systemFontCache: catalog.systemFontCache,\n            nonBlendModesSet: catalog.nonBlendModesSet,\n            xfaFactory: null\n          }));\n        }\n        this._pagePromises.set(pageIndex, promise);\n      }\n      catalog.setActualNumPages(pagesTree.size);\n    }\n  }\n  fontFallback(id, handler) {\n    return this.catalog.fontFallback(id, handler);\n  }\n  async cleanup(manuallyTriggered = false) {\n    return this.catalog ? this.catalog.cleanup(manuallyTriggered) : clearGlobalCaches();\n  }\n  async #collectFieldObjects(name, fieldRef, promises, annotationGlobals, visitedRefs) {\n    const {\n      xref\n    } = this;\n    if (!(fieldRef instanceof Ref) || visitedRefs.has(fieldRef)) {\n      return;\n    }\n    visitedRefs.put(fieldRef);\n    const field = await xref.fetchAsync(fieldRef);\n    if (!(field instanceof Dict)) {\n      return;\n    }\n    if (field.has(\"T\")) {\n      const partName = stringToPDFString(await field.getAsync(\"T\"));\n      name = name === \"\" ? partName : `${name}.${partName}`;\n    } else {\n      let obj = field;\n      while (true) {\n        obj = obj.getRaw(\"Parent\");\n        if (obj instanceof Ref) {\n          if (visitedRefs.has(obj)) {\n            break;\n          }\n          obj = await xref.fetchAsync(obj);\n        }\n        if (!(obj instanceof Dict)) {\n          break;\n        }\n        if (obj.has(\"T\")) {\n          const partName = stringToPDFString(await obj.getAsync(\"T\"));\n          name = name === \"\" ? partName : `${name}.${partName}`;\n          break;\n        }\n      }\n    }\n    if (!promises.has(name)) {\n      promises.set(name, []);\n    }\n    promises.get(name).push(AnnotationFactory.create(xref, fieldRef, annotationGlobals, null, true, null).then(annotation => annotation?.getFieldObject()).catch(function (reason) {\n      warn(`#collectFieldObjects: \"${reason}\".`);\n      return null;\n    }));\n    if (!field.has(\"Kids\")) {\n      return;\n    }\n    const kids = await field.getAsync(\"Kids\");\n    if (Array.isArray(kids)) {\n      for (const kid of kids) {\n        await this.#collectFieldObjects(name, kid, promises, annotationGlobals, visitedRefs);\n      }\n    }\n  }\n  get fieldObjects() {\n    if (!this.formInfo.hasFields) {\n      return shadow(this, \"fieldObjects\", Promise.resolve(null));\n    }\n    const promise = Promise.all([this.pdfManager.ensureDoc(\"annotationGlobals\"), this.pdfManager.ensureCatalog(\"acroForm\")]).then(async ([annotationGlobals, acroForm]) => {\n      if (!annotationGlobals) {\n        return null;\n      }\n      const visitedRefs = new RefSet();\n      const allFields = Object.create(null);\n      const fieldPromises = new Map();\n      for (const fieldRef of await acroForm.getAsync(\"Fields\")) {\n        await this.#collectFieldObjects(\"\", fieldRef, fieldPromises, annotationGlobals, visitedRefs);\n      }\n      const allPromises = [];\n      for (const [name, promises] of fieldPromises) {\n        allPromises.push(Promise.all(promises).then(fields => {\n          fields = fields.filter(field => !!field);\n          if (fields.length > 0) {\n            allFields[name] = fields;\n          }\n        }));\n      }\n      await Promise.all(allPromises);\n      return allFields;\n    });\n    return shadow(this, \"fieldObjects\", promise);\n  }\n  get hasJSActions() {\n    const promise = this.pdfManager.ensureDoc(\"_parseHasJSActions\");\n    return shadow(this, \"hasJSActions\", promise);\n  }\n  async _parseHasJSActions() {\n    const [catalogJsActions, fieldObjects] = await Promise.all([this.pdfManager.ensureCatalog(\"jsActions\"), this.pdfManager.ensureDoc(\"fieldObjects\")]);\n    if (catalogJsActions) {\n      return true;\n    }\n    if (fieldObjects) {\n      return Object.values(fieldObjects).some(fieldObject => fieldObject.some(object => object.actions !== null));\n    }\n    return false;\n  }\n  get calculationOrderIds() {\n    const acroForm = this.catalog.acroForm;\n    if (!acroForm?.has(\"CO\")) {\n      return shadow(this, \"calculationOrderIds\", null);\n    }\n    const calculationOrder = acroForm.get(\"CO\");\n    if (!Array.isArray(calculationOrder) || calculationOrder.length === 0) {\n      return shadow(this, \"calculationOrderIds\", null);\n    }\n    const ids = [];\n    for (const id of calculationOrder) {\n      if (id instanceof Ref) {\n        ids.push(id.toString());\n      }\n    }\n    if (ids.length === 0) {\n      return shadow(this, \"calculationOrderIds\", null);\n    }\n    return shadow(this, \"calculationOrderIds\", ids);\n  }\n  get annotationGlobals() {\n    return shadow(this, \"annotationGlobals\", AnnotationFactory.createGlobals(this.pdfManager));\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/pdf_manager.js\n\n\n\n\n\nfunction parseDocBaseUrl(url) {\n  if (url) {\n    const absoluteUrl = createValidAbsoluteUrl(url);\n    if (absoluteUrl) {\n      return absoluteUrl.href;\n    }\n    warn(`Invalid absolute docBaseUrl: \"${url}\".`);\n  }\n  return null;\n}\nclass BasePdfManager {\n  constructor(args) {\n    if (this.constructor === BasePdfManager) {\n      unreachable(\"Cannot initialize BasePdfManager.\");\n    }\n    this._docBaseUrl = parseDocBaseUrl(args.docBaseUrl);\n    this._docId = args.docId;\n    this._password = args.password;\n    this.enableXfa = args.enableXfa;\n    args.evaluatorOptions.isOffscreenCanvasSupported &&= FeatureTest.isOffscreenCanvasSupported;\n    this.evaluatorOptions = Object.freeze(args.evaluatorOptions);\n  }\n  get docId() {\n    return this._docId;\n  }\n  get password() {\n    return this._password;\n  }\n  get docBaseUrl() {\n    return this._docBaseUrl;\n  }\n  get catalog() {\n    return this.pdfDocument.catalog;\n  }\n  ensureDoc(prop, args) {\n    return this.ensure(this.pdfDocument, prop, args);\n  }\n  ensureXRef(prop, args) {\n    return this.ensure(this.pdfDocument.xref, prop, args);\n  }\n  ensureCatalog(prop, args) {\n    return this.ensure(this.pdfDocument.catalog, prop, args);\n  }\n  getPage(pageIndex) {\n    return this.pdfDocument.getPage(pageIndex);\n  }\n  fontFallback(id, handler) {\n    return this.pdfDocument.fontFallback(id, handler);\n  }\n  loadXfaFonts(handler, task) {\n    return this.pdfDocument.loadXfaFonts(handler, task);\n  }\n  loadXfaImages() {\n    return this.pdfDocument.loadXfaImages();\n  }\n  serializeXfaData(annotationStorage) {\n    return this.pdfDocument.serializeXfaData(annotationStorage);\n  }\n  cleanup(manuallyTriggered = false) {\n    return this.pdfDocument.cleanup(manuallyTriggered);\n  }\n  async ensure(obj, prop, args) {\n    unreachable(\"Abstract method `ensure` called\");\n  }\n  requestRange(begin, end) {\n    unreachable(\"Abstract method `requestRange` called\");\n  }\n  requestLoadedStream(noFetch = false) {\n    unreachable(\"Abstract method `requestLoadedStream` called\");\n  }\n  sendProgressiveData(chunk) {\n    unreachable(\"Abstract method `sendProgressiveData` called\");\n  }\n  updatePassword(password) {\n    this._password = password;\n  }\n  terminate(reason) {\n    unreachable(\"Abstract method `terminate` called\");\n  }\n}\nclass LocalPdfManager extends BasePdfManager {\n  constructor(args) {\n    super(args);\n    const stream = new Stream(args.source);\n    this.pdfDocument = new PDFDocument(this, stream);\n    this._loadedStreamPromise = Promise.resolve(stream);\n  }\n  async ensure(obj, prop, args) {\n    const value = obj[prop];\n    if (typeof value === \"function\") {\n      return value.apply(obj, args);\n    }\n    return value;\n  }\n  requestRange(begin, end) {\n    return Promise.resolve();\n  }\n  requestLoadedStream(noFetch = false) {\n    return this._loadedStreamPromise;\n  }\n  terminate(reason) {}\n}\nclass NetworkPdfManager extends BasePdfManager {\n  constructor(args) {\n    super(args);\n    this.streamManager = new ChunkedStreamManager(args.source, {\n      msgHandler: args.handler,\n      length: args.length,\n      disableAutoFetch: args.disableAutoFetch,\n      rangeChunkSize: args.rangeChunkSize\n    });\n    this.pdfDocument = new PDFDocument(this, this.streamManager.getStream());\n  }\n  async ensure(obj, prop, args) {\n    try {\n      const value = obj[prop];\n      if (typeof value === \"function\") {\n        return value.apply(obj, args);\n      }\n      return value;\n    } catch (ex) {\n      if (!(ex instanceof MissingDataException)) {\n        throw ex;\n      }\n      await this.requestRange(ex.begin, ex.end);\n      return this.ensure(obj, prop, args);\n    }\n  }\n  requestRange(begin, end) {\n    return this.streamManager.requestRange(begin, end);\n  }\n  requestLoadedStream(noFetch = false) {\n    return this.streamManager.requestAllChunks(noFetch);\n  }\n  sendProgressiveData(chunk) {\n    this.streamManager.onReceiveData({\n      chunk\n    });\n  }\n  terminate(reason) {\n    this.streamManager.abort(reason);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/shared/message_handler.js\n\nconst CallbackKind = {\n  UNKNOWN: 0,\n  DATA: 1,\n  ERROR: 2\n};\nconst StreamKind = {\n  UNKNOWN: 0,\n  CANCEL: 1,\n  CANCEL_COMPLETE: 2,\n  CLOSE: 3,\n  ENQUEUE: 4,\n  ERROR: 5,\n  PULL: 6,\n  PULL_COMPLETE: 7,\n  START_COMPLETE: 8\n};\nfunction wrapReason(reason) {\n  if (!(reason instanceof Error || typeof reason === \"object\" && reason !== null)) {\n    unreachable('wrapReason: Expected \"reason\" to be a (possibly cloned) Error.');\n  }\n  switch (reason.name) {\n    case \"AbortException\":\n      return new AbortException(reason.message);\n    case \"MissingPDFException\":\n      return new MissingPDFException(reason.message);\n    case \"PasswordException\":\n      return new PasswordException(reason.message, reason.code);\n    case \"UnexpectedResponseException\":\n      return new UnexpectedResponseException(reason.message, reason.status);\n    case \"UnknownErrorException\":\n      return new UnknownErrorException(reason.message, reason.details);\n    default:\n      return new UnknownErrorException(reason.message, reason.toString());\n  }\n}\nclass MessageHandler {\n  constructor(sourceName, targetName, comObj) {\n    this.sourceName = sourceName;\n    this.targetName = targetName;\n    this.comObj = comObj;\n    this.callbackId = 1;\n    this.streamId = 1;\n    this.streamSinks = Object.create(null);\n    this.streamControllers = Object.create(null);\n    this.callbackCapabilities = Object.create(null);\n    this.actionHandler = Object.create(null);\n    this._onComObjOnMessage = event => {\n      const data = event.data;\n      if (data.targetName !== this.sourceName) {\n        return;\n      }\n      if (data.stream) {\n        this.#processStreamMessage(data);\n        return;\n      }\n      if (data.callback) {\n        const callbackId = data.callbackId;\n        const capability = this.callbackCapabilities[callbackId];\n        if (!capability) {\n          throw new Error(`Cannot resolve callback ${callbackId}`);\n        }\n        delete this.callbackCapabilities[callbackId];\n        if (data.callback === CallbackKind.DATA) {\n          capability.resolve(data.data);\n        } else if (data.callback === CallbackKind.ERROR) {\n          capability.reject(wrapReason(data.reason));\n        } else {\n          throw new Error(\"Unexpected callback case\");\n        }\n        return;\n      }\n      const action = this.actionHandler[data.action];\n      if (!action) {\n        throw new Error(`Unknown action from worker: ${data.action}`);\n      }\n      if (data.callbackId) {\n        const cbSourceName = this.sourceName;\n        const cbTargetName = data.sourceName;\n        new Promise(function (resolve) {\n          resolve(action(data.data));\n        }).then(function (result) {\n          comObj.postMessage({\n            sourceName: cbSourceName,\n            targetName: cbTargetName,\n            callback: CallbackKind.DATA,\n            callbackId: data.callbackId,\n            data: result\n          });\n        }, function (reason) {\n          comObj.postMessage({\n            sourceName: cbSourceName,\n            targetName: cbTargetName,\n            callback: CallbackKind.ERROR,\n            callbackId: data.callbackId,\n            reason: wrapReason(reason)\n          });\n        });\n        return;\n      }\n      if (data.streamId) {\n        this.#createStreamSink(data);\n        return;\n      }\n      action(data.data);\n    };\n    comObj.addEventListener(\"message\", this._onComObjOnMessage);\n  }\n  on(actionName, handler) {\n    const ah = this.actionHandler;\n    if (ah[actionName]) {\n      throw new Error(`There is already an actionName called \"${actionName}\"`);\n    }\n    ah[actionName] = handler;\n  }\n  send(actionName, data, transfers) {\n    this.comObj.postMessage({\n      sourceName: this.sourceName,\n      targetName: this.targetName,\n      action: actionName,\n      data\n    }, transfers);\n  }\n  sendWithPromise(actionName, data, transfers) {\n    const callbackId = this.callbackId++;\n    const capability = Promise.withResolvers();\n    this.callbackCapabilities[callbackId] = capability;\n    try {\n      this.comObj.postMessage({\n        sourceName: this.sourceName,\n        targetName: this.targetName,\n        action: actionName,\n        callbackId,\n        data\n      }, transfers);\n    } catch (ex) {\n      capability.reject(ex);\n    }\n    return capability.promise;\n  }\n  sendWithStream(actionName, data, queueingStrategy, transfers) {\n    const streamId = this.streamId++,\n      sourceName = this.sourceName,\n      targetName = this.targetName,\n      comObj = this.comObj;\n    return new ReadableStream({\n      start: controller => {\n        const startCapability = Promise.withResolvers();\n        this.streamControllers[streamId] = {\n          controller,\n          startCall: startCapability,\n          pullCall: null,\n          cancelCall: null,\n          isClosed: false\n        };\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          action: actionName,\n          streamId,\n          data,\n          desiredSize: controller.desiredSize\n        }, transfers);\n        return startCapability.promise;\n      },\n      pull: controller => {\n        const pullCapability = Promise.withResolvers();\n        this.streamControllers[streamId].pullCall = pullCapability;\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.PULL,\n          streamId,\n          desiredSize: controller.desiredSize\n        });\n        return pullCapability.promise;\n      },\n      cancel: reason => {\n        assert(reason instanceof Error, \"cancel must have a valid reason\");\n        const cancelCapability = Promise.withResolvers();\n        this.streamControllers[streamId].cancelCall = cancelCapability;\n        this.streamControllers[streamId].isClosed = true;\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.CANCEL,\n          streamId,\n          reason: wrapReason(reason)\n        });\n        return cancelCapability.promise;\n      }\n    }, queueingStrategy);\n  }\n  #createStreamSink(data) {\n    const streamId = data.streamId,\n      sourceName = this.sourceName,\n      targetName = data.sourceName,\n      comObj = this.comObj;\n    const self = this,\n      action = this.actionHandler[data.action];\n    const streamSink = {\n      enqueue(chunk, size = 1, transfers) {\n        if (this.isCancelled) {\n          return;\n        }\n        const lastDesiredSize = this.desiredSize;\n        this.desiredSize -= size;\n        if (lastDesiredSize > 0 && this.desiredSize <= 0) {\n          this.sinkCapability = Promise.withResolvers();\n          this.ready = this.sinkCapability.promise;\n        }\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.ENQUEUE,\n          streamId,\n          chunk\n        }, transfers);\n      },\n      close() {\n        if (this.isCancelled) {\n          return;\n        }\n        this.isCancelled = true;\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.CLOSE,\n          streamId\n        });\n        delete self.streamSinks[streamId];\n      },\n      error(reason) {\n        assert(reason instanceof Error, \"error must have a valid reason\");\n        if (this.isCancelled) {\n          return;\n        }\n        this.isCancelled = true;\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.ERROR,\n          streamId,\n          reason: wrapReason(reason)\n        });\n      },\n      sinkCapability: Promise.withResolvers(),\n      onPull: null,\n      onCancel: null,\n      isCancelled: false,\n      desiredSize: data.desiredSize,\n      ready: null\n    };\n    streamSink.sinkCapability.resolve();\n    streamSink.ready = streamSink.sinkCapability.promise;\n    this.streamSinks[streamId] = streamSink;\n    new Promise(function (resolve) {\n      resolve(action(data.data, streamSink));\n    }).then(function () {\n      comObj.postMessage({\n        sourceName,\n        targetName,\n        stream: StreamKind.START_COMPLETE,\n        streamId,\n        success: true\n      });\n    }, function (reason) {\n      comObj.postMessage({\n        sourceName,\n        targetName,\n        stream: StreamKind.START_COMPLETE,\n        streamId,\n        reason: wrapReason(reason)\n      });\n    });\n  }\n  #processStreamMessage(data) {\n    const streamId = data.streamId,\n      sourceName = this.sourceName,\n      targetName = data.sourceName,\n      comObj = this.comObj;\n    const streamController = this.streamControllers[streamId],\n      streamSink = this.streamSinks[streamId];\n    switch (data.stream) {\n      case StreamKind.START_COMPLETE:\n        if (data.success) {\n          streamController.startCall.resolve();\n        } else {\n          streamController.startCall.reject(wrapReason(data.reason));\n        }\n        break;\n      case StreamKind.PULL_COMPLETE:\n        if (data.success) {\n          streamController.pullCall.resolve();\n        } else {\n          streamController.pullCall.reject(wrapReason(data.reason));\n        }\n        break;\n      case StreamKind.PULL:\n        if (!streamSink) {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.PULL_COMPLETE,\n            streamId,\n            success: true\n          });\n          break;\n        }\n        if (streamSink.desiredSize <= 0 && data.desiredSize > 0) {\n          streamSink.sinkCapability.resolve();\n        }\n        streamSink.desiredSize = data.desiredSize;\n        new Promise(function (resolve) {\n          resolve(streamSink.onPull?.());\n        }).then(function () {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.PULL_COMPLETE,\n            streamId,\n            success: true\n          });\n        }, function (reason) {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.PULL_COMPLETE,\n            streamId,\n            reason: wrapReason(reason)\n          });\n        });\n        break;\n      case StreamKind.ENQUEUE:\n        assert(streamController, \"enqueue should have stream controller\");\n        if (streamController.isClosed) {\n          break;\n        }\n        streamController.controller.enqueue(data.chunk);\n        break;\n      case StreamKind.CLOSE:\n        assert(streamController, \"close should have stream controller\");\n        if (streamController.isClosed) {\n          break;\n        }\n        streamController.isClosed = true;\n        streamController.controller.close();\n        this.#deleteStreamController(streamController, streamId);\n        break;\n      case StreamKind.ERROR:\n        assert(streamController, \"error should have stream controller\");\n        streamController.controller.error(wrapReason(data.reason));\n        this.#deleteStreamController(streamController, streamId);\n        break;\n      case StreamKind.CANCEL_COMPLETE:\n        if (data.success) {\n          streamController.cancelCall.resolve();\n        } else {\n          streamController.cancelCall.reject(wrapReason(data.reason));\n        }\n        this.#deleteStreamController(streamController, streamId);\n        break;\n      case StreamKind.CANCEL:\n        if (!streamSink) {\n          break;\n        }\n        new Promise(function (resolve) {\n          resolve(streamSink.onCancel?.(wrapReason(data.reason)));\n        }).then(function () {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.CANCEL_COMPLETE,\n            streamId,\n            success: true\n          });\n        }, function (reason) {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.CANCEL_COMPLETE,\n            streamId,\n            reason: wrapReason(reason)\n          });\n        });\n        streamSink.sinkCapability.reject(wrapReason(data.reason));\n        streamSink.isCancelled = true;\n        delete this.streamSinks[streamId];\n        break;\n      default:\n        throw new Error(\"Unexpected stream case\");\n    }\n  }\n  async #deleteStreamController(streamController, streamId) {\n    await Promise.allSettled([streamController.startCall?.promise, streamController.pullCall?.promise, streamController.cancelCall?.promise]);\n    delete this.streamControllers[streamId];\n  }\n  destroy() {\n    this.comObj.removeEventListener(\"message\", this._onComObjOnMessage);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/worker_stream.js\n\nclass PDFWorkerStream {\n  constructor(msgHandler) {\n    this._msgHandler = msgHandler;\n    this._contentLength = null;\n    this._fullRequestReader = null;\n    this._rangeRequestReaders = [];\n  }\n  getFullReader() {\n    assert(!this._fullRequestReader, \"PDFWorkerStream.getFullReader can only be called once.\");\n    this._fullRequestReader = new PDFWorkerStreamReader(this._msgHandler);\n    return this._fullRequestReader;\n  }\n  getRangeReader(begin, end) {\n    const reader = new PDFWorkerStreamRangeReader(begin, end, this._msgHandler);\n    this._rangeRequestReaders.push(reader);\n    return reader;\n  }\n  cancelAllRequests(reason) {\n    this._fullRequestReader?.cancel(reason);\n    for (const reader of this._rangeRequestReaders.slice(0)) {\n      reader.cancel(reason);\n    }\n  }\n}\nclass PDFWorkerStreamReader {\n  constructor(msgHandler) {\n    this._msgHandler = msgHandler;\n    this.onProgress = null;\n    this._contentLength = null;\n    this._isRangeSupported = false;\n    this._isStreamingSupported = false;\n    const readableStream = this._msgHandler.sendWithStream(\"GetReader\");\n    this._reader = readableStream.getReader();\n    this._headersReady = this._msgHandler.sendWithPromise(\"ReaderHeadersReady\").then(data => {\n      this._isStreamingSupported = data.isStreamingSupported;\n      this._isRangeSupported = data.isRangeSupported;\n      this._contentLength = data.contentLength;\n    });\n  }\n  get headersReady() {\n    return this._headersReady;\n  }\n  get contentLength() {\n    return this._contentLength;\n  }\n  get isStreamingSupported() {\n    return this._isStreamingSupported;\n  }\n  get isRangeSupported() {\n    return this._isRangeSupported;\n  }\n  async read() {\n    const {\n      value,\n      done\n    } = await this._reader.read();\n    if (done) {\n      return {\n        value: undefined,\n        done: true\n      };\n    }\n    return {\n      value: value.buffer,\n      done: false\n    };\n  }\n  cancel(reason) {\n    this._reader.cancel(reason);\n  }\n}\nclass PDFWorkerStreamRangeReader {\n  constructor(begin, end, msgHandler) {\n    this._msgHandler = msgHandler;\n    this.onProgress = null;\n    const readableStream = this._msgHandler.sendWithStream(\"GetRangeReader\", {\n      begin,\n      end\n    });\n    this._reader = readableStream.getReader();\n  }\n  get isStreamingSupported() {\n    return false;\n  }\n  async read() {\n    const {\n      value,\n      done\n    } = await this._reader.read();\n    if (done) {\n      return {\n        value: undefined,\n        done: true\n      };\n    }\n    return {\n      value: value.buffer,\n      done: false\n    };\n  }\n  cancel(reason) {\n    this._reader.cancel(reason);\n  }\n}\n\n;// CONCATENATED MODULE: ./src/core/worker.js\n\n\n\n\n\n\n\n\n\n\nclass WorkerTask {\n  constructor(name) {\n    this.name = name;\n    this.terminated = false;\n    this._capability = Promise.withResolvers();\n  }\n  get finished() {\n    return this._capability.promise;\n  }\n  finish() {\n    this._capability.resolve();\n  }\n  terminate() {\n    this.terminated = true;\n  }\n  ensureNotTerminated() {\n    if (this.terminated) {\n      throw new Error(\"Worker task was terminated\");\n    }\n  }\n}\nclass WorkerMessageHandler {\n  static setup(handler, port) {\n    let testMessageProcessed = false;\n    handler.on(\"test\", function (data) {\n      if (testMessageProcessed) {\n        return;\n      }\n      testMessageProcessed = true;\n      handler.send(\"test\", data instanceof Uint8Array);\n    });\n    handler.on(\"configure\", function (data) {\n      setVerbosityLevel(data.verbosity);\n    });\n    handler.on(\"GetDocRequest\", function (data) {\n      return WorkerMessageHandler.createDocumentHandler(data, port);\n    });\n  }\n  static createDocumentHandler(docParams, port) {\n    let pdfManager;\n    let terminated = false;\n    let cancelXHRs = null;\n    const WorkerTasks = new Set();\n    const verbosity = getVerbosityLevel();\n    const {\n      docId,\n      apiVersion\n    } = docParams;\n    const workerVersion = \"4.3.136\";\n    if (apiVersion !== workerVersion) {\n      throw new Error(`The API version \"${apiVersion}\" does not match ` + `the Worker version \"${workerVersion}\".`);\n    }\n    const enumerableProperties = [];\n    for (const property in []) {\n      enumerableProperties.push(property);\n    }\n    if (enumerableProperties.length) {\n      throw new Error(\"The `Array.prototype` contains unexpected enumerable properties: \" + enumerableProperties.join(\", \") + \"; thus breaking e.g. `for...in` iteration of `Array`s.\");\n    }\n    const workerHandlerName = docId + \"_worker\";\n    let handler = new MessageHandler(workerHandlerName, docId, port);\n    function ensureNotTerminated() {\n      if (terminated) {\n        throw new Error(\"Worker was terminated\");\n      }\n    }\n    function startWorkerTask(task) {\n      WorkerTasks.add(task);\n    }\n    function finishWorkerTask(task) {\n      task.finish();\n      WorkerTasks.delete(task);\n    }\n    async function loadDocument(recoveryMode) {\n      await pdfManager.ensureDoc(\"checkHeader\");\n      await pdfManager.ensureDoc(\"parseStartXRef\");\n      await pdfManager.ensureDoc(\"parse\", [recoveryMode]);\n      await pdfManager.ensureDoc(\"checkFirstPage\", [recoveryMode]);\n      await pdfManager.ensureDoc(\"checkLastPage\", [recoveryMode]);\n      const isPureXfa = await pdfManager.ensureDoc(\"isPureXfa\");\n      if (isPureXfa) {\n        const task = new WorkerTask(\"loadXfaFonts\");\n        startWorkerTask(task);\n        await Promise.all([pdfManager.loadXfaFonts(handler, task).catch(reason => {}).then(() => finishWorkerTask(task)), pdfManager.loadXfaImages()]);\n      }\n      const [numPages, fingerprints] = await Promise.all([pdfManager.ensureDoc(\"numPages\"), pdfManager.ensureDoc(\"fingerprints\")]);\n      const htmlForXfa = isPureXfa ? await pdfManager.ensureDoc(\"htmlForXfa\") : null;\n      return {\n        numPages,\n        fingerprints,\n        htmlForXfa\n      };\n    }\n    function getPdfManager({\n      data,\n      password,\n      disableAutoFetch,\n      rangeChunkSize,\n      length,\n      docBaseUrl,\n      enableXfa,\n      evaluatorOptions\n    }) {\n      const pdfManagerArgs = {\n        source: null,\n        disableAutoFetch,\n        docBaseUrl,\n        docId,\n        enableXfa,\n        evaluatorOptions,\n        handler,\n        length,\n        password,\n        rangeChunkSize\n      };\n      const pdfManagerCapability = Promise.withResolvers();\n      let newPdfManager;\n      if (data) {\n        try {\n          pdfManagerArgs.source = data;\n          newPdfManager = new LocalPdfManager(pdfManagerArgs);\n          pdfManagerCapability.resolve(newPdfManager);\n        } catch (ex) {\n          pdfManagerCapability.reject(ex);\n        }\n        return pdfManagerCapability.promise;\n      }\n      let pdfStream,\n        cachedChunks = [];\n      try {\n        pdfStream = new PDFWorkerStream(handler);\n      } catch (ex) {\n        pdfManagerCapability.reject(ex);\n        return pdfManagerCapability.promise;\n      }\n      const fullRequest = pdfStream.getFullReader();\n      fullRequest.headersReady.then(function () {\n        if (!fullRequest.isRangeSupported) {\n          return;\n        }\n        pdfManagerArgs.source = pdfStream;\n        pdfManagerArgs.length = fullRequest.contentLength;\n        pdfManagerArgs.disableAutoFetch ||= fullRequest.isStreamingSupported;\n        newPdfManager = new NetworkPdfManager(pdfManagerArgs);\n        for (const chunk of cachedChunks) {\n          newPdfManager.sendProgressiveData(chunk);\n        }\n        cachedChunks = [];\n        pdfManagerCapability.resolve(newPdfManager);\n        cancelXHRs = null;\n      }).catch(function (reason) {\n        pdfManagerCapability.reject(reason);\n        cancelXHRs = null;\n      });\n      let loaded = 0;\n      const flushChunks = function () {\n        const pdfFile = arrayBuffersToBytes(cachedChunks);\n        if (length && pdfFile.length !== length) {\n          warn(\"reported HTTP length is different from actual\");\n        }\n        try {\n          pdfManagerArgs.source = pdfFile;\n          newPdfManager = new LocalPdfManager(pdfManagerArgs);\n          pdfManagerCapability.resolve(newPdfManager);\n        } catch (ex) {\n          pdfManagerCapability.reject(ex);\n        }\n        cachedChunks = [];\n      };\n      new Promise(function (resolve, reject) {\n        const readChunk = function ({\n          value,\n          done\n        }) {\n          try {\n            ensureNotTerminated();\n            if (done) {\n              if (!newPdfManager) {\n                flushChunks();\n              }\n              cancelXHRs = null;\n              return;\n            }\n            loaded += value.byteLength;\n            if (!fullRequest.isStreamingSupported) {\n              handler.send(\"DocProgress\", {\n                loaded,\n                total: Math.max(loaded, fullRequest.contentLength || 0)\n              });\n            }\n            if (newPdfManager) {\n              newPdfManager.sendProgressiveData(value);\n            } else {\n              cachedChunks.push(value);\n            }\n            fullRequest.read().then(readChunk, reject);\n          } catch (e) {\n            reject(e);\n          }\n        };\n        fullRequest.read().then(readChunk, reject);\n      }).catch(function (e) {\n        pdfManagerCapability.reject(e);\n        cancelXHRs = null;\n      });\n      cancelXHRs = function (reason) {\n        pdfStream.cancelAllRequests(reason);\n      };\n      return pdfManagerCapability.promise;\n    }\n    function setupDoc(data) {\n      function onSuccess(doc) {\n        ensureNotTerminated();\n        handler.send(\"GetDoc\", {\n          pdfInfo: doc\n        });\n      }\n      function onFailure(ex) {\n        ensureNotTerminated();\n        if (ex instanceof PasswordException) {\n          const task = new WorkerTask(`PasswordException: response ${ex.code}`);\n          startWorkerTask(task);\n          handler.sendWithPromise(\"PasswordRequest\", ex).then(function ({\n            password\n          }) {\n            finishWorkerTask(task);\n            pdfManager.updatePassword(password);\n            pdfManagerReady();\n          }).catch(function () {\n            finishWorkerTask(task);\n            handler.send(\"DocException\", ex);\n          });\n        } else if (ex instanceof InvalidPDFException || ex instanceof MissingPDFException || ex instanceof UnexpectedResponseException || ex instanceof UnknownErrorException) {\n          handler.send(\"DocException\", ex);\n        } else {\n          handler.send(\"DocException\", new UnknownErrorException(ex.message, ex.toString()));\n        }\n      }\n      function pdfManagerReady() {\n        ensureNotTerminated();\n        loadDocument(false).then(onSuccess, function (reason) {\n          ensureNotTerminated();\n          if (!(reason instanceof XRefParseException)) {\n            onFailure(reason);\n            return;\n          }\n          pdfManager.requestLoadedStream().then(function () {\n            ensureNotTerminated();\n            loadDocument(true).then(onSuccess, onFailure);\n          });\n        });\n      }\n      ensureNotTerminated();\n      getPdfManager(data).then(function (newPdfManager) {\n        if (terminated) {\n          newPdfManager.terminate(new AbortException(\"Worker was terminated.\"));\n          throw new Error(\"Worker was terminated\");\n        }\n        pdfManager = newPdfManager;\n        pdfManager.requestLoadedStream(true).then(stream => {\n          handler.send(\"DataLoaded\", {\n            length: stream.bytes.byteLength\n          });\n        });\n      }).then(pdfManagerReady, onFailure);\n    }\n    handler.on(\"GetPage\", function (data) {\n      return pdfManager.getPage(data.pageIndex).then(function (page) {\n        return Promise.all([pdfManager.ensure(page, \"rotate\"), pdfManager.ensure(page, \"ref\"), pdfManager.ensure(page, \"userUnit\"), pdfManager.ensure(page, \"view\")]).then(function ([rotate, ref, userUnit, view]) {\n          return {\n            rotate,\n            ref,\n            refStr: ref?.toString() ?? null,\n            userUnit,\n            view\n          };\n        });\n      });\n    });\n    handler.on(\"GetPageIndex\", function (data) {\n      const pageRef = Ref.get(data.num, data.gen);\n      return pdfManager.ensureCatalog(\"getPageIndex\", [pageRef]);\n    });\n    handler.on(\"GetDestinations\", function (data) {\n      return pdfManager.ensureCatalog(\"destinations\");\n    });\n    handler.on(\"GetDestination\", function (data) {\n      return pdfManager.ensureCatalog(\"getDestination\", [data.id]);\n    });\n    handler.on(\"GetPageLabels\", function (data) {\n      return pdfManager.ensureCatalog(\"pageLabels\");\n    });\n    handler.on(\"GetPageLayout\", function (data) {\n      return pdfManager.ensureCatalog(\"pageLayout\");\n    });\n    handler.on(\"GetPageMode\", function (data) {\n      return pdfManager.ensureCatalog(\"pageMode\");\n    });\n    handler.on(\"GetViewerPreferences\", function (data) {\n      return pdfManager.ensureCatalog(\"viewerPreferences\");\n    });\n    handler.on(\"GetOpenAction\", function (data) {\n      return pdfManager.ensureCatalog(\"openAction\");\n    });\n    handler.on(\"GetAttachments\", function (data) {\n      return pdfManager.ensureCatalog(\"attachments\");\n    });\n    handler.on(\"GetDocJSActions\", function (data) {\n      return pdfManager.ensureCatalog(\"jsActions\");\n    });\n    handler.on(\"GetPageJSActions\", function ({\n      pageIndex\n    }) {\n      return pdfManager.getPage(pageIndex).then(function (page) {\n        return pdfManager.ensure(page, \"jsActions\");\n      });\n    });\n    handler.on(\"GetOutline\", function (data) {\n      return pdfManager.ensureCatalog(\"documentOutline\");\n    });\n    handler.on(\"GetOptionalContentConfig\", function (data) {\n      return pdfManager.ensureCatalog(\"optionalContentConfig\");\n    });\n    handler.on(\"GetPermissions\", function (data) {\n      return pdfManager.ensureCatalog(\"permissions\");\n    });\n    handler.on(\"GetMetadata\", function (data) {\n      return Promise.all([pdfManager.ensureDoc(\"documentInfo\"), pdfManager.ensureCatalog(\"metadata\")]);\n    });\n    handler.on(\"GetMarkInfo\", function (data) {\n      return pdfManager.ensureCatalog(\"markInfo\");\n    });\n    handler.on(\"GetData\", function (data) {\n      return pdfManager.requestLoadedStream().then(function (stream) {\n        return stream.bytes;\n      });\n    });\n    handler.on(\"GetAnnotations\", function ({\n      pageIndex,\n      intent\n    }) {\n      return pdfManager.getPage(pageIndex).then(function (page) {\n        const task = new WorkerTask(`GetAnnotations: page ${pageIndex}`);\n        startWorkerTask(task);\n        return page.getAnnotationsData(handler, task, intent).then(data => {\n          finishWorkerTask(task);\n          return data;\n        }, reason => {\n          finishWorkerTask(task);\n          throw reason;\n        });\n      });\n    });\n    handler.on(\"GetFieldObjects\", function (data) {\n      return pdfManager.ensureDoc(\"fieldObjects\");\n    });\n    handler.on(\"HasJSActions\", function (data) {\n      return pdfManager.ensureDoc(\"hasJSActions\");\n    });\n    handler.on(\"GetCalculationOrderIds\", function (data) {\n      return pdfManager.ensureDoc(\"calculationOrderIds\");\n    });\n    handler.on(\"SaveDocument\", async function ({\n      isPureXfa,\n      numPages,\n      annotationStorage,\n      filename\n    }) {\n      const globalPromises = [pdfManager.requestLoadedStream(), pdfManager.ensureCatalog(\"acroForm\"), pdfManager.ensureCatalog(\"acroFormRef\"), pdfManager.ensureDoc(\"startXRef\"), pdfManager.ensureDoc(\"xref\"), pdfManager.ensureDoc(\"linearization\"), pdfManager.ensureCatalog(\"structTreeRoot\")];\n      const promises = [];\n      const newAnnotationsByPage = !isPureXfa ? getNewAnnotationsMap(annotationStorage) : null;\n      const [stream, acroForm, acroFormRef, startXRef, xref, linearization, _structTreeRoot] = await Promise.all(globalPromises);\n      const catalogRef = xref.trailer.getRaw(\"Root\") || null;\n      let structTreeRoot;\n      if (newAnnotationsByPage) {\n        if (!_structTreeRoot) {\n          if (await StructTreeRoot.canCreateStructureTree({\n            catalogRef,\n            pdfManager,\n            newAnnotationsByPage\n          })) {\n            structTreeRoot = null;\n          }\n        } else if (await _structTreeRoot.canUpdateStructTree({\n          pdfManager,\n          xref,\n          newAnnotationsByPage\n        })) {\n          structTreeRoot = _structTreeRoot;\n        }\n        const imagePromises = AnnotationFactory.generateImages(annotationStorage.values(), xref, pdfManager.evaluatorOptions.isOffscreenCanvasSupported);\n        const newAnnotationPromises = structTreeRoot === undefined ? promises : [];\n        for (const [pageIndex, annotations] of newAnnotationsByPage) {\n          newAnnotationPromises.push(pdfManager.getPage(pageIndex).then(page => {\n            const task = new WorkerTask(`Save (editor): page ${pageIndex}`);\n            return page.saveNewAnnotations(handler, task, annotations, imagePromises).finally(function () {\n              finishWorkerTask(task);\n            });\n          }));\n        }\n        if (structTreeRoot === null) {\n          promises.push(Promise.all(newAnnotationPromises).then(async newRefs => {\n            await StructTreeRoot.createStructureTree({\n              newAnnotationsByPage,\n              xref,\n              catalogRef,\n              pdfManager,\n              newRefs\n            });\n            return newRefs;\n          }));\n        } else if (structTreeRoot) {\n          promises.push(Promise.all(newAnnotationPromises).then(async newRefs => {\n            await structTreeRoot.updateStructureTree({\n              newAnnotationsByPage,\n              pdfManager,\n              newRefs\n            });\n            return newRefs;\n          }));\n        }\n      }\n      if (isPureXfa) {\n        promises.push(pdfManager.serializeXfaData(annotationStorage));\n      } else {\n        for (let pageIndex = 0; pageIndex < numPages; pageIndex++) {\n          promises.push(pdfManager.getPage(pageIndex).then(function (page) {\n            const task = new WorkerTask(`Save: page ${pageIndex}`);\n            return page.save(handler, task, annotationStorage).finally(function () {\n              finishWorkerTask(task);\n            });\n          }));\n        }\n      }\n      const refs = await Promise.all(promises);\n      let newRefs = [];\n      let xfaData = null;\n      if (isPureXfa) {\n        xfaData = refs[0];\n        if (!xfaData) {\n          return stream.bytes;\n        }\n      } else {\n        newRefs = refs.flat(2);\n        if (newRefs.length === 0) {\n          return stream.bytes;\n        }\n      }\n      const needAppearances = acroFormRef && acroForm instanceof Dict && newRefs.some(ref => ref.needAppearances);\n      const xfa = acroForm instanceof Dict && acroForm.get(\"XFA\") || null;\n      let xfaDatasetsRef = null;\n      let hasXfaDatasetsEntry = false;\n      if (Array.isArray(xfa)) {\n        for (let i = 0, ii = xfa.length; i < ii; i += 2) {\n          if (xfa[i] === \"datasets\") {\n            xfaDatasetsRef = xfa[i + 1];\n            hasXfaDatasetsEntry = true;\n          }\n        }\n        if (xfaDatasetsRef === null) {\n          xfaDatasetsRef = xref.getNewTemporaryRef();\n        }\n      } else if (xfa) {\n        warn(\"Unsupported XFA type.\");\n      }\n      let newXrefInfo = Object.create(null);\n      if (xref.trailer) {\n        const infoObj = Object.create(null);\n        const xrefInfo = xref.trailer.get(\"Info\") || null;\n        if (xrefInfo instanceof Dict) {\n          xrefInfo.forEach((key, value) => {\n            if (typeof value === \"string\") {\n              infoObj[key] = stringToPDFString(value);\n            }\n          });\n        }\n        newXrefInfo = {\n          rootRef: catalogRef,\n          encryptRef: xref.trailer.getRaw(\"Encrypt\") || null,\n          newRef: xref.getNewTemporaryRef(),\n          infoRef: xref.trailer.getRaw(\"Info\") || null,\n          info: infoObj,\n          fileIds: xref.trailer.get(\"ID\") || null,\n          startXRef: linearization ? startXRef : xref.lastXRefStreamPos ?? startXRef,\n          filename\n        };\n      }\n      return incrementalUpdate({\n        originalData: stream.bytes,\n        xrefInfo: newXrefInfo,\n        newRefs,\n        xref,\n        hasXfa: !!xfa,\n        xfaDatasetsRef,\n        hasXfaDatasetsEntry,\n        needAppearances,\n        acroFormRef,\n        acroForm,\n        xfaData,\n        useXrefStream: isDict(xref.topDict, \"XRef\")\n      }).finally(() => {\n        xref.resetNewTemporaryRef();\n      });\n    });\n    handler.on(\"GetOperatorList\", function (data, sink) {\n      const pageIndex = data.pageIndex;\n      pdfManager.getPage(pageIndex).then(function (page) {\n        const task = new WorkerTask(`GetOperatorList: page ${pageIndex}`);\n        startWorkerTask(task);\n        const start = verbosity >= VerbosityLevel.INFOS ? Date.now() : 0;\n        page.getOperatorList({\n          handler,\n          sink,\n          task,\n          intent: data.intent,\n          cacheKey: data.cacheKey,\n          annotationStorage: data.annotationStorage\n        }).then(function (operatorListInfo) {\n          finishWorkerTask(task);\n          if (start) {\n            info(`page=${pageIndex + 1} - getOperatorList: time=` + `${Date.now() - start}ms, len=${operatorListInfo.length}`);\n          }\n          sink.close();\n        }, function (reason) {\n          finishWorkerTask(task);\n          if (task.terminated) {\n            return;\n          }\n          sink.error(reason);\n        });\n      });\n    });\n    handler.on(\"GetTextContent\", function (data, sink) {\n      const {\n        pageIndex,\n        includeMarkedContent,\n        disableNormalization\n      } = data;\n      pdfManager.getPage(pageIndex).then(function (page) {\n        const task = new WorkerTask(\"GetTextContent: page \" + pageIndex);\n        startWorkerTask(task);\n        const start = verbosity >= VerbosityLevel.INFOS ? Date.now() : 0;\n        page.extractTextContent({\n          handler,\n          task,\n          sink,\n          includeMarkedContent,\n          disableNormalization\n        }).then(function () {\n          finishWorkerTask(task);\n          if (start) {\n            info(`page=${pageIndex + 1} - getTextContent: time=` + `${Date.now() - start}ms`);\n          }\n          sink.close();\n        }, function (reason) {\n          finishWorkerTask(task);\n          if (task.terminated) {\n            return;\n          }\n          sink.error(reason);\n        });\n      });\n    });\n    handler.on(\"GetStructTree\", function (data) {\n      return pdfManager.getPage(data.pageIndex).then(function (page) {\n        return pdfManager.ensure(page, \"getStructTree\");\n      });\n    });\n    handler.on(\"FontFallback\", function (data) {\n      return pdfManager.fontFallback(data.id, handler);\n    });\n    handler.on(\"Cleanup\", function (data) {\n      return pdfManager.cleanup(true);\n    });\n    handler.on(\"Terminate\", function (data) {\n      terminated = true;\n      const waitOn = [];\n      if (pdfManager) {\n        pdfManager.terminate(new AbortException(\"Worker was terminated.\"));\n        const cleanupPromise = pdfManager.cleanup();\n        waitOn.push(cleanupPromise);\n        pdfManager = null;\n      } else {\n        clearGlobalCaches();\n      }\n      if (cancelXHRs) {\n        cancelXHRs(new AbortException(\"Worker was terminated.\"));\n      }\n      for (const task of WorkerTasks) {\n        waitOn.push(task.finished);\n        task.terminate();\n      }\n      return Promise.all(waitOn).then(function () {\n        handler.destroy();\n        handler = null;\n      });\n    });\n    handler.on(\"Ready\", function (data) {\n      setupDoc(docParams);\n      docParams = null;\n    });\n    return workerHandlerName;\n  }\n  static initializeFromPort(port) {\n    const handler = new MessageHandler(\"worker\", \"main\", port);\n    WorkerMessageHandler.setup(handler, port);\n    handler.send(\"ready\", null);\n  }\n}\nfunction isMessagePort(maybePort) {\n  return typeof maybePort.postMessage === \"function\" && \"onmessage\" in maybePort;\n}\nif (typeof window === \"undefined\" && !isNodeJS && typeof self !== \"undefined\" && isMessagePort(self)) {\n  WorkerMessageHandler.initializeFromPort(self);\n}\n\n;// CONCATENATED MODULE: ./src/pdf.worker.js\n\nconst pdfjsVersion = \"4.3.136\";\nconst pdfjsBuild = \"0cec64437\";\n\nvar __webpack_exports__WorkerMessageHandler = __webpack_exports__.WorkerMessageHandler;\nexport { __webpack_exports__WorkerMessageHandler as WorkerMessageHandler };\n\n//# sourceMappingURL=pdf.worker.mjs.map"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/pdfjs-annotation-extension-testdata.json",
    "content": "[\n    {\n        \"id\": \"iPDnx-jvqNFookcstk8i7\",\n        \"pageNumber\": 1,\n        \"konvaString\": \"{\\\"attrs\\\":{\\\"name\\\":\\\"PdfjsAnnotationExtension_shape_group\\\",\\\"id\\\":\\\"iPDnx-jvqNFookcstk8i7\\\"},\\\"className\\\":\\\"Group\\\",\\\"children\\\":[{\\\"attrs\\\":{\\\"x\\\":90.48336181640626,\\\"y\\\":73.49062500000001,\\\"width\\\":208.22937011718753,\\\"height\\\":25.200000000000003,\\\"opacity\\\":0.5,\\\"fill\\\":\\\"#ffff00\\\"},\\\"className\\\":\\\"Rect\\\"}]}\",\n        \"konvaClientRect\": {\n            \"x\": 90.48336181640626,\n            \"y\": 73.49062500000001,\n            \"width\": 208.2293701171875,\n            \"height\": 25.200000000000003\n        },\n        \"title\": \"老麦\",\n        \"type\": 1,\n        \"pdfjsType\": 9,\n        \"pdfjsEditorType\": 9,\n        \"subtype\": \"Highlight\",\n        \"color\": \"#ffff00\",\n        \"date\": \"D:20250622143820+08'00'\",\n        \"contentsObj\": {\n            \"text\": \"race-based Just-in-Time T\"\n        },\n        \"comments\": [],\n        \"resizable\": false,\n        \"draggable\": false\n    },\n    {\n        \"id\": \"eRT_dqO2zuyu42LvRzqN5\",\n        \"pageNumber\": 1,\n        \"konvaString\": \"{\\\"attrs\\\":{\\\"name\\\":\\\"PdfjsAnnotationExtension_shape_group\\\",\\\"id\\\":\\\"eRT_dqO2zuyu42LvRzqN5\\\"},\\\"className\\\":\\\"Group\\\",\\\"children\\\":[{\\\"attrs\\\":{\\\"x\\\":111.81756591796876,\\\"y\\\":365.04375000000005,\\\"width\\\":181.42694091796878,\\\"stroke\\\":\\\"#ff0000\\\",\\\"strokeWidth\\\":1,\\\"hitStrokeWidth\\\":10,\\\"height\\\":1},\\\"className\\\":\\\"Rect\\\"},{\\\"attrs\\\":{\\\"x\\\":53.971875000000004,\\\"y\\\":375.02812500000005,\\\"width\\\":239.26977539062503,\\\"stroke\\\":\\\"#ff0000\\\",\\\"strokeWidth\\\":1,\\\"hitStrokeWidth\\\":10,\\\"height\\\":1},\\\"className\\\":\\\"Rect\\\"},{\\\"attrs\\\":{\\\"x\\\":53.971875000000004,\\\"y\\\":385.00312500000007,\\\"width\\\":239.27263183593752,\\\"stroke\\\":\\\"#ff0000\\\",\\\"strokeWidth\\\":1,\\\"hitStrokeWidth\\\":10,\\\"height\\\":1},\\\"className\\\":\\\"Rect\\\"},{\\\"attrs\\\":{\\\"x\\\":53.971875000000004,\\\"y\\\":394.98750000000007,\\\"width\\\":239.2713134765625,\\\"stroke\\\":\\\"#ff0000\\\",\\\"strokeWidth\\\":1,\\\"hitStrokeWidth\\\":10,\\\"height\\\":1},\\\"className\\\":\\\"Rect\\\"},{\\\"attrs\\\":{\\\"x\\\":53.971875000000004,\\\"y\\\":404.96250000000003,\\\"width\\\":239.27519531250002,\\\"stroke\\\":\\\"#ff0000\\\",\\\"strokeWidth\\\":1,\\\"hitStrokeWidth\\\":10,\\\"height\\\":1},\\\"className\\\":\\\"Rect\\\"},{\\\"attrs\\\":{\\\"x\\\":53.971875000000004,\\\"y\\\":414.86250000000007,\\\"width\\\":239.26922607421878,\\\"stroke\\\":\\\"#ff0000\\\",\\\"strokeWidth\\\":1,\\\"hitStrokeWidth\\\":10,\\\"height\\\":1},\\\"className\\\":\\\"Rect\\\"},{\\\"attrs\\\":{\\\"x\\\":53.971875000000004,\\\"y\\\":424.84687500000007,\\\"width\\\":160.1025146484375,\\\"stroke\\\":\\\"#ff0000\\\",\\\"strokeWidth\\\":1,\\\"hitStrokeWidth\\\":10,\\\"height\\\":1},\\\"className\\\":\\\"Rect\\\"}]}\",\n        \"konvaClientRect\": {\n            \"x\": 53.471875000000004,\n            \"y\": 364.54375000000005,\n            \"width\": 240.2751953125,\n            \"height\": 61.80312500000002\n        },\n        \"title\": \"不具名用户\",\n        \"type\": 2,\n        \"pdfjsType\": 12,\n        \"pdfjsEditorType\": 9,\n        \"subtype\": \"StrikeOut\",\n        \"color\": \"#ff0000\",\n        \"date\": \"D:20250622143823+08'00'\",\n        \"contentsObj\": {\n            \"text\": \"lly typed ones. Since no concrete type informationis available, traditional compilers need to emit generic code that canhandle all possible type combinations at runtime. We present an al-ternative compilation technique for dynamically-typed languagesthat identiﬁes frequently executed loop traces at run-time and thengenerates machine code on the ﬂy that is specialized for the ac-tual dynamic types occurring on each path \"\n        },\n        \"comments\": [],\n        \"resizable\": false,\n        \"draggable\": false\n    },\n    {\n        \"id\": \"7bZ9kZilDjdrnsdsPHamI\",\n        \"pageNumber\": 1,\n        \"konvaString\": \"{\\\"attrs\\\":{\\\"name\\\":\\\"PdfjsAnnotationExtension_shape_group\\\",\\\"id\\\":\\\"7bZ9kZilDjdrnsdsPHamI\\\"},\\\"className\\\":\\\"Group\\\",\\\"children\\\":[{\\\"attrs\\\":{\\\"x\\\":372.32878417968755,\\\"y\\\":455.04062500000003,\\\"width\\\":183.96401367187502,\\\"stroke\\\":\\\"#1677ff\\\",\\\"strokeWidth\\\":1,\\\"hitStrokeWidth\\\":10,\\\"height\\\":1},\\\"className\\\":\\\"Rect\\\"},{\\\"attrs\\\":{\\\"x\\\":317.015625,\\\"y\\\":465.0250000000001,\\\"width\\\":239.275341796875,\\\"stroke\\\":\\\"#1677ff\\\",\\\"strokeWidth\\\":1,\\\"hitStrokeWidth\\\":10,\\\"height\\\":1},\\\"className\\\":\\\"Rect\\\"},{\\\"attrs\\\":{\\\"x\\\":317.015625,\\\"y\\\":475.00000000000006,\\\"width\\\":239.27475585937503,\\\"stroke\\\":\\\"#1677ff\\\",\\\"strokeWidth\\\":1,\\\"hitStrokeWidth\\\":10,\\\"height\\\":1},\\\"className\\\":\\\"Rect\\\"},{\\\"attrs\\\":{\\\"x\\\":317.015625,\\\"y\\\":484.9750000000001,\\\"width\\\":239.27373046875002,\\\"stroke\\\":\\\"#1677ff\\\",\\\"strokeWidth\\\":1,\\\"hitStrokeWidth\\\":10,\\\"height\\\":1},\\\"className\\\":\\\"Rect\\\"},{\\\"attrs\\\":{\\\"x\\\":317.015625,\\\"y\\\":494.87500000000006,\\\"width\\\":161.2676513671875,\\\"stroke\\\":\\\"#1677ff\\\",\\\"strokeWidth\\\":1,\\\"hitStrokeWidth\\\":10,\\\"height\\\":1},\\\"className\\\":\\\"Rect\\\"}]}\",\n        \"konvaClientRect\": {\n            \"x\": 316.515625,\n            \"y\": 454.54062500000003,\n            \"width\": 240.27717285156257,\n            \"height\": 41.83437500000002\n        },\n        \"title\": \"不具名用户\",\n        \"type\": 3,\n        \"pdfjsType\": 10,\n        \"pdfjsEditorType\": 9,\n        \"subtype\": \"Underline\",\n        \"color\": \"#1677ff\",\n        \"date\": \"D:20250622143825+08'00'\",\n        \"contentsObj\": {\n            \"text\": \"er generalized machine code that can deal with allpotential type combinations. While compile-time static type infer-ence might be able to gather type information to generate opti-mized machine code, traditional static analysis is very expensiveand hence not well suited for the highly inter\"\n        },\n        \"comments\": [],\n        \"resizable\": false,\n        \"draggable\": false\n    },\n    {\n        \"id\": \"QpRXx_3UrRhLp8COmuZu3\",\n        \"pageNumber\": 1,\n        \"konvaString\": \"{\\\"attrs\\\":{\\\"name\\\":\\\"PdfjsAnnotationExtension_shape_group\\\",\\\"id\\\":\\\"QpRXx_3UrRhLp8COmuZu3\\\"},\\\"className\\\":\\\"Group\\\",\\\"children\\\":[{\\\"attrs\\\":{\\\"x\\\":114.00000000000001,\\\"y\\\":143.40000000000003,\\\"width\\\":220.20000000000005,\\\"height\\\":42,\\\"strokeScaleEnabled\\\":false,\\\"stroke\\\":\\\"#ff0000\\\"},\\\"className\\\":\\\"Rect\\\"}]}\",\n        \"konvaClientRect\": {\n            \"x\": 113.00000000000001,\n            \"y\": 142.40000000000003,\n            \"width\": 222.20000000000005,\n            \"height\": 44\n        },\n        \"title\": \"不具名用户\",\n        \"type\": 5,\n        \"pdfjsType\": 5,\n        \"pdfjsEditorType\": 15,\n        \"subtype\": \"Square\",\n        \"color\": \"#ff0000\",\n        \"date\": \"D:20250622143828+08'00'\",\n        \"contentsObj\": {\n            \"text\": \"\"\n        },\n        \"comments\": [],\n        \"resizable\": true,\n        \"draggable\": true\n    },\n    {\n        \"id\": \"haDJTxXE3SzQZnYyNHeBs\",\n        \"pageNumber\": 1,\n        \"konvaString\": \"{\\\"attrs\\\":{\\\"draggable\\\":true,\\\"name\\\":\\\"PdfjsAnnotationExtension_shape_group\\\",\\\"id\\\":\\\"haDJTxXE3SzQZnYyNHeBs\\\"},\\\"className\\\":\\\"Group\\\",\\\"children\\\":[{\\\"attrs\\\":{\\\"data\\\":\\\"M 391.20000000000005 237.60000000000002 Q 392.6087987926405 223.8979824127301 403.6 232.20000000000002 Q 405.00879879264056 218.49798241273007 416.00000000000006 226.8 Q 417.40879879264054 213.0979824127301 428.4000000000001 221.40000000000003 Q 429.8087987926406 207.6979824127301 440.80000000000007 216.00000000000003 Q 442.20879879264055 202.29798241273008 453.20000000000005 210.60000000000002 Q 454.6087987926406 196.8979824127301 465.6000000000001 205.20000000000002 Q 467.00879879264056 191.49798241273007 478.0000000000001 199.8 Q 479.4087987926406 186.0979824127301 490.4000000000001 194.40000000000003 Q 491.8087987926406 180.69798241273008 502.80000000000007 189 Q 504.20879879264055 175.29798241273008 515.2 183.60000000000002 Q 516.6087987926406 169.8979824127301 527.6000000000001 178.20000000000002 Q 529.0087987926407 164.49798241273007 540.0000000000001 172.8 Q 553.4931387400671 175.38219033793058 544.2000000000002 185.5 Q 557.6931387400672 188.0821903379306 548.4000000000001 198.20000000000002 Q 561.8931387400671 200.7821903379306 552.6000000000001 210.90000000000003 Q 566.093138740067 213.4821903379306 556.8000000000001 223.60000000000002 Q 570.2931387400671 226.1821903379306 561.0000000000001 236.3 Q 574.4931387400671 238.8821903379306 565.2 249.00000000000003 Q 578.6931387400671 251.5821903379306 569.4000000000001 261.70000000000005 Q 582.8931387400671 264.2821903379307 573.6000000000001 274.40000000000003 Q 587.093138740067 276.9821903379306 577.8000000000001 287.1 Q 591.2931387400671 289.68219033793065 582.0000000000001 299.80000000000007 Q 595.4931387400671 302.38219033793064 586.2 312.5 Q 599.6931387400671 315.0821903379306 590.4000000000001 325.20000000000005 Q 587.634252148756 338.8289678194403 577.1000000000001 329.75000000000006 Q 574.3342521487559 343.3789678194404 563.8000000000001 334.30000000000007 Q 561.034252148756 347.92896781944035 550.5000000000001 338.85 Q 547.734252148756 352.4789678194403 537.2 343.40000000000003 Q 534.434252148756 357.02896781944037 523.9000000000001 347.95000000000005 Q 521.134252148756 361.5789678194403 510.6000000000001 352.50000000000006 Q 507.8342521487559 366.1289678194404 497.30000000000007 357.05000000000007 Q 494.53425214875597 370.67896781944035 484.0000000000001 361.6000000000001 Q 481.23425214875596 375.2289678194404 470.70000000000005 366.1500000000001 Q 467.93425214875595 379.77896781944037 457.4000000000001 370.70000000000005 Q 454.634252148756 384.3289678194403 444.1000000000001 375.25000000000006 Q 441.3342521487559 388.8789678194404 430.80000000000007 379.80000000000007 Q 417.6356788005848 374.7341243266127 428.05714285714294 365.2285714285715 Q 414.89282165772767 360.1626957551841 425.3142857142858 350.6571428571429 Q 412.14996451487053 345.5912671837555 422.57142857142867 336.08571428571435 Q 409.40710737201334 331.01983861232696 419.8285714285715 321.5142857142858 Q 406.6642502291562 316.4484100408984 417.08571428571435 306.9428571428572 Q 403.9213930862991 301.8769814694698 414.3428571428572 292.3714285714286 Q 401.17853594344194 287.30555289804124 411.6000000000001 277.80000000000007 Q 397.4990071071501 276.5303546023418 404.80000000000007 264.40000000000003 Q 390.6990071071501 263.1303546023418 398.00000000000006 251.00000000000003 Q 383.89900710715006 249.73035460234178 391.20000000000005 237.60000000000002 Q 391.20000000000005 225.60000000000002 391.20000000000005 237.60000000000002 Q 391.20000000000005 225.60000000000002 391.20000000000005 237.60000000000002 \\\",\\\"stroke\\\":\\\"#83d33c\\\",\\\"fillEnabled\\\":false,\\\"lineJoin\\\":\\\"round\\\",\\\"lineCap\\\":\\\"round\\\",\\\"hitStrokeWidth\\\":20},\\\"className\\\":\\\"Path\\\"}]}\",\n        \"konvaClientRect\": {\n            \"x\": 382.89900710715006,\n            \"y\": 163.49798241273007,\n            \"width\": 217.79413163291701,\n            \"height\": 226.38098540671032\n        },\n        \"title\": \"不具名用户\",\n        \"type\": 13,\n        \"pdfjsType\": 8,\n        \"pdfjsEditorType\": 15,\n        \"subtype\": \"PolyLine\",\n        \"color\": \"#83d33c\",\n        \"date\": \"D:20250622143837+08'00'\",\n        \"contentsObj\": {\n            \"text\": \"\"\n        },\n        \"comments\": [],\n        \"resizable\": true,\n        \"draggable\": true\n    },\n    {\n        \"id\": \"DLCK62zxdu1ge6Iuo7vtk\",\n        \"pageNumber\": 1,\n        \"konvaString\": \"{\\\"attrs\\\":{\\\"name\\\":\\\"PdfjsAnnotationExtension_shape_group\\\",\\\"id\\\":\\\"DLCK62zxdu1ge6Iuo7vtk\\\"},\\\"className\\\":\\\"Group\\\",\\\"children\\\":[{\\\"attrs\\\":{\\\"x\\\":89.00000000000001,\\\"y\\\":280.6,\\\"base64\\\":\\\"data:image/png;base64,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\\\"},\\\"className\\\":\\\"Image\\\"}]}\",\n        \"konvaClientRect\": {\n            \"x\": null,\n            \"y\": null,\n            \"width\": null,\n            \"height\": null\n        },\n        \"title\": \"laomai\",\n        \"type\": 9,\n        \"pdfjsType\": 13,\n        \"pdfjsEditorType\": 13,\n        \"subtype\": \"Caret\",\n        \"date\": \"D:20250622143847+08'00'\",\n        \"contentsObj\": {\n            \"text\": \"\",\n            \"image\": \"data:image/png;base64,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\"\n        },\n        \"comments\": [],\n        \"resizable\": true,\n        \"draggable\": true\n    },\n    {\n        \"id\": \"1_-tBdUhEvYCgdrAkCMD1\",\n        \"pageNumber\": 1,\n        \"konvaString\": \"{\\\"attrs\\\":{\\\"name\\\":\\\"PdfjsAnnotationExtension_shape_group\\\",\\\"id\\\":\\\"1_-tBdUhEvYCgdrAkCMD1\\\"},\\\"className\\\":\\\"Group\\\",\\\"children\\\":[{\\\"attrs\\\":{\\\"x\\\":157.80000000000004,\\\"y\\\":537.3619489559165,\\\"width\\\":120,\\\"height\\\":71.27610208816705,\\\"base64\\\":\\\"data:image/png;base64,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\\\"},\\\"className\\\":\\\"Image\\\"}]}\",\n        \"konvaClientRect\": {\n            \"x\": 157.80000000000004,\n            \"y\": 537.3619489559165,\n            \"width\": 120.00000000000003,\n            \"height\": 71.27610208816702\n        },\n        \"title\": \"不具名用户\",\n        \"type\": 10,\n        \"pdfjsType\": 13,\n        \"pdfjsEditorType\": 13,\n        \"subtype\": \"Stamp\",\n        \"date\": \"D:20250622143856+08'00'\",\n        \"contentsObj\": {\n            \"text\": \"\",\n            \"image\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAa8AAAEACAYAAAAEIfk6AAAAAXNSR0IArs4c6QAAIABJREFUeF7tnUma3DazRTO9MUlzN9qRpR3Jlud/eWPO98jKqsqGzQUQAQTAUyPpSxLNiSAuEAGC5xN/EIAABCAAgc4InDtrL82FAAQgAAEInBAvnAACEIAABLojgHh1ZzIaDAEIQAACiBc+AAEIQAAC3RFAvLozGQ2GAAQgAAHECx+AAAQgAIHuCCBe3ZmMBkMAAhCAAOKFD0AAAhCAQHcEEK/uTEaDIQABCEAA8cIHIAABCHRE4PLr189vzT3/8+Olo6abNhXxMsVJYRCAAATsCLwL1fny57XUd+G6qeXldD7/e/77xze7muOXhHjFtxEthAAEDkRgFqxtsVqncT5/P4qIIV4HeijoKgQgEI/ALFa/nD6fLpdPp9NpaWWV2uiX0+X8ffSQIuKV6hZcDwEIQKCAwEMo0EKslltzOX8ZWcAQrwIn5FYIQAACCoGiUKBSwfI1L+eff33Jvz32nYhXbPvQOghAoEMCjmL1sbvwfP73dHnfyLFMaeAcGOLV4YNBkyEAgVgEnEOBcw5r6vFSGPDy+9dvmyI2aPgQ8Yr1DNAaCECgAwLuYjWtqv47vag5q00BQ7w68CiaCAEIQMCJgHsosHCH4IaADZn7YuXl5OgUCwEI9E3AYQv7LZDNUGAuuctvf1wW7x1w9YV45XoJ90EAAkMRcA8FbuStrEBefvvjf4vviiFeVogpBwIQgEBbAu5ilZi3sqBxDW1OAvb4N1zokJWXhcdQBgQg0AWB6HmrUoiIVylB7ocABCAQgECPeatSbEcJHbLyKvUU7ocABMIQcA8FVshblcJEvEoJcj8EIACBCgRGDwWmIjxK6JCVV6pncD0EINCUAGK1j39ty/z551/DjPnDdGTfnFwBAQj0SOCIeatSOx0hdIh4lXoJ90MAAqYE3PNWDbawmwISClsVr4EO6kW8BEfgEghAwJcAoUBbvkfIeyFetj5DaRCAgECghlhNzVAPthWa3N0lo+e9EK/uXJIGQ6A/Au6hwA62sNe22uh5L8SrtkdRHwQOQMBdrA6Qtyp1k9FDh4hXqYdwPwQgMBOoEQo8chgw1c0Qr1RiXA8BCByCAFvY45t55E+ksPKK73+0EAIhCLiHAslbmdt55LwX4mXuLhQIgTEIPIjV1KnPhj17eY01nr8TCjSk+lDUyKFDxMvPbygZAt0RIG/Vnck2G7whXqfej4pCvMbyVXoDgSQC5K2ScHV58aihQ8SrS3ek0RDII+Cet2ILe55hHO9CvBzhUjQEIOBHgFCgH9seSh4178XKqwfvo40QSCCAWCXAOsilIx4VhXgdxHnp5rgE3EOBbGHv3nlGDB0iXt27JR04GgF3sSJvNZxLrYrX6fRy/vnXlx47jHj1aDXafDgChAIPZ3LTDo+Y90K8TF2EwiBgQ6CGWE0t5QVhG3v1UMpoeS/Eqwevo43DE3APBZK3Gt6H9jo4Wt4L8dqzOL9DwIGAu1iRt3KwWt9FjhY6RLz69kda3xGBGqFAwoAdOUTlpiJelYFTHQR6JcDRS71abtx2j/SJFFZe4/opPatMwD0USN6qskXHq26kvBfiNZ5/0qNKBPhkSCXQVGNGYKTQIeJl5hYUdAQC5K2OYOVx+zjSJ1IQr3H9lJ4ZECBvZQCRIkIRGCV0iHiFcisa05qAe96KLeytTXz4+lfF63z+fv77x7deACFevViKdroRIBTohpaCAxIYJe+FeAV0LprkSwCx8uVL6fEJjHBUFOIV389oYSEB91AgW9gLLcTttQmMkPdCvGp7DfW5E3AXK/JW7jakAl8Cl9+/fjtdLn8u1NLNJ1IQL18fofRKBAgFVgJNNUMQGCHvhXgN4YrH6wRb2I9nc3psS6D3vBfiZesPlOZEwD0USN7KyXIUG5VA73kvxCuqZx28Xe5iRd7q4B720f1bXzv//OvLUcD0HjpEvI7iqR30k7xVB0YapImrvnY5fznKZ2UQr0GcmW7UJ0Deqj7zSDXeCoj3iidhYtTNbjsLW/YcOmTlZeEBlCERcA8FkreS7ND6ohsh+XzTFlPRKPA103a0Zr1XP+K1R4jfD0sgYcabyuhlvuFy/n6UME8qoGjXr4jWRzMLztYrEKtnTIQOJybhRZyVV7QnvPP2IFadG9C4+Teh4aUXYp9rSxAwN19DvGa7nH/+FVofQjfO+DmiOAcC5K0coA5U5Nb3o1a7uSIezr5225zwqw5LF+k1dIh4WXrBAcoyDc8883o5sYV9OC/KELBZPJx9bZNz9FWHpZP0+okUxMvSCwYtyy08czqRtxrUZx67lSFgLcm8HCmX2uuWecSr5SMStO4aYjXH1P/58Spe/B2CQHABmwXrqH7Z41FRiNchho3tTjqHZw49KOBe9wQ2TjOvjYoQ9Q3xHvNeiFftRyZAfe5iRd4qgJVjNMHZ11I6SYh6g1aPn0hBvFLcv+Nra4QCCQN27CCGTXf0tZRWIlYJtHrMeyFeCQbu6VLnbcWEAntyBue2BhGrqZf4ZYGt1/Jep6DvvSFeBcaOdKtzeIZBIZKxG7fFeWKU0jvyVim0dq7tLe+FeBkav2ZRD2I1VX17TlxpUwi5lBIc6H7niVEKqV2/fM/dnK87B//+8S2lgiNf21voEPHqyFsdwzO7g0JHmGiqAQFHX0ttXdKqfzH0lXDkVGrjRrp+61WGiC9tI16Bvc85PJM0KATGRNMMCPQqVrdd392Gz2ps11N6Ch0iXrvmrHeBc3gGsapnyvA1OftaSv9N8la7wnXbIkRs1T6IV4rrHvxaxxkvocCD+9Za9xufdJHsl1N7917DSBKvNzCI2JOL9JT3YuVVeYBDrCoDp7pFAqvbon147a7631eCv5w+ny6XT9dmfGxC2shbZQnXTT8j5nN8zKCV2stRUYiXZs/sq8hbZaPjRkcCq+Ehmzp3xeouV/Xr18+n8+V/O1WvfqakSIjZzPG8+vrtj8kWz7uXg73vhXjZPKzvpTjnEkzyA8ZdprgOCRiHDpNDgZbiNZU1r77mf1y0j15eG8Cq69l5e/lECuJlMPAQCjSASBFVCRSKV5FYPXZUbIv8gUg5jMiqazmkvL4Slm1Qw5kRrwzKNcRqatZekjqj6dwCgY8owW9/XBJwJIUCE8o9WYvXW917Isaqa91KPeS9EC/hKXMPBR74O0ICfi5xIiDmvdxn26J4nXLFZlHEhFXX+yT1fP73fLCTOnrYMo94LQwM7mLFJ0OchuPyYh9W1UsFTols9wG9vCf7JYiikdTX92dnqv5+5+AkPl/WWqVsusgVr6eV2IpwbWyuSmKwTz7+FT1smUe8rn5UIxRIGLCDh1YJpQmzdu+eKu8+7bVBFK+Tcqr4XohuT/BriNdirm2Oz8+bPLbPBg22027PtqW/I16lBB3vZwu7I9yOi1YG0VMD8VqMBhgMqFLoUKhHKGdz9aJwL115TW6ZPUkVGHTs9otNj/6JlMOsvNxDgeStun925ZVIBfGS/NVgQBVEZ7LrbthMKKeJeGWL1bM37zLo/gF46ED0vNew4vXw8E9m4ZMhoz1dxv2RxctANJaanjHQFg+oap/3Vj0G4rX8YuwtKIG7JPqZfrPHILPYsLdFDx0OJV4ZD7/qOKbvtaiVcl1dAkLe5rVBwiCqtNwidG0xoCohu70+74rXzmp19/4V7p5i9WRDI7srvhHhmq2JjYXflfaxa/GyePg3ALq911JqNO6/J3AdfF9PH5n+/ju95GyOUcUr98F1GWgNBlRJOErFp/T+G/FynKRuP1oVwsXRnu3IocOuxMvl4f/wFo5eivbkCO0Rwl6yXa3Fyzl0/UrHYEAV+72Xs9oO+1mI1+k0RUAsw/+Ch811Tqvt7zkTIqWCyNcgXgXWcZxlHdopC0wS6lZBvORBXlqBTHrx86/VSZ+jv65xD5H32mVnI141fI9x4YZy5LxXuJWX48OPU9Z49CvXIa4apDzV7gB87duteDmHriWauWHM28JL816792+EN28YJh2qK8HRLiJFsMEp6lFRzcXLPRTIFnbt8e30KlW8lAF+dwB+ZfQ60CkvtvoznSdkWydXqE0QhTv/syQP4uU4SVW6LIeSlcJGvyZq6LC6eLmLFUcvjf4s3fWvgXi15PsePZhF658fr/83+BPDr/nidf1q8fVDk+StDGxWq4iNZ6w4ZF3Shyri5TjLIhRYYv0B7hVXDLuHuoqDdwtiVUJaav/XVrDiqrUWP8YFQ9JR814u4uWYB3CbeRramqIqEhDFa3eGqK7gKnStWUhLEqCV3JV0ry+8KiLv24W4pUfMe5mJ183qyjokgFPG9enmLZMGTWE7eUPxCrNKKJkISHaw9RZzkX98tcEil2jb5XalRcx7FYmXk2CZO2U7k1OzNwFp0FTE67c/9o8nsutMyAmZGDpcXMVKdijnN3NzyPW97XK8n3gbvABe3uUYJUQMHWaLl+FMNczMM4ab0IoUAtKgqYlXyleFU5o4XRtSrB47IYrX4msHkh1SqT1cr+wY3asiKf+OeL3jHEa8DISri4d570Hg97YEZD8UBiGXwVeoty3B59ql0OHytvdp5er6lyNehbubd3Olrh0OVni0T6Qkr7zkAeMePGIVzBFHaI7qi3uDnrziSIS2V29icVUul8Tr4RMpBfzeUwSn82VX/BSehWL1xFips4phAlQSLe+VJF4JTkooMICzjd4EcaDd3yb/+9dvp8v8NV3bvx5XXr9+/SwIyd2KxGJcEFa+6++YvbZ5OW9VatEObVja5bX7o4UO08Rr7yEXcgteYCnXl8DTjDaArYUBTzq4Vl3BTYfgTifWz6SFlcLeZ0R8LZZfusL16YisdR67URdR/N7Fy/FVnGdoAfw835K2d27ZqcUKVRavnQec2LCtnzQvTQi/NLW5OOBp4iXuNLwbsH/7Q9ng0ZRRrhNJK9qbFcmDLXbF6rFd4uTh7TQR61dxtjEhXnd8IoUOLcSrywc098Ee+b6knVg7p6t7cxIHPPVA3mQhkgb4Cowmm1luHZ/sJvXtZlB/m+jktkO2pbdTLZWPeGni1YCTLl5rs9MGjW7hwyPWWRx+aZgPUAe8vXCGWs7jd7PklZ8xo8UJhk8dexsozCatsg3sH8L974MZs7XvQt0SI+W9UsRrcXa6NzjURUttWwSEUGAqQLMBLLViaXXwsCtuqQ554MzdHl44uRNtZmoHUZjN6hRtmeoia9e/hzVPv5w+723UYXx7xhjlqKhS8TJzYCvPpJwPAuLAV4Ksmf2VTQXKV4alclbCf+Kgm8Qo02ZJdSgGV7hYDexKXUqbV65ZzcEJ9ZpzLehHmFuj5L0QrzAuYdOQ1LxVca0Nwiryamnv673atvAJ0dqRSNKRUnuDvInNjO0gCbNRnYKIpLipdLyc5EOFq+aURvd0bZRPpJSK1+47ND0Zpce2FuetSjttNIClNEMaeITNEmo5ays4Mbz2tGnERKwegRnbQRIvg8FdZrjuIFnvlCqCuTfpSPHZka6NkvdKEa/lWabxQzOSkT36khlW8mjKW5nVQyvKwDM3bsc3ZfHa+oS9uGW+wteXTe0gikpxnbIN7j04eTv+7e1incV983zoWpcdIe9VLl4Gs6/Whohev8tM3a7TVR9yceB57d2eeGnCsxldkFYodqw3S7JcKYjiVRx5SbLnR++LTpeXbMa4tulrEfJeunit5weqDl6VxoGm1QQSq/2txIJIWMJMHOzWjxTaOy3mZqDc+q5TYnssUTyXZRwFkQb5wjrlVfQSuQyBUe1lORHwNXqb0iOEDmXxmseolZkqhi5zoOZ5q9sZ7fn873QE0vTCqTr73lvhlNG5vzt1sFv9bL0qXnabPiwxPJZVFEZba5i3eMn+tU1OXoWpwqXsUvU0Zg9l9yhe5L0MPCtQ3mo32S2KRZXVd9ZgV/rZemF2LzIy8Jz3IlzE6rGB0mBfsPKSylepGdqJybgGvXXoMG3ltT5brTJ4aUhjXhUqFHg5f58oKcf5SLNvYWefhVWyBruFQS2lHGUgUxkVMNidZBSUvXqrNFkQRKNoZZfasenw5Mkf//7x7fZW2eYF/Ultau/X9yVe5L1kf+tVrJ5m3+q7UAUzcBVq5grnaWIli404kEmDvNrJ1+uaiFWm7bMnrpI9JzG6XD79P5P0A3mv9kO40pxPvbp16DBp5TV1KtrXNFXQ3teFCgXe5K1K+y0PzOJAn9seeQBaqCDh8x33d4t9khltd75KKDCFv9ivLPFS7flmO/X6lP49XqusskvKH+3eLf+owTJHvMh7TSI+rUjm+MT8Ebz0WaGdJ7vP0sWVStYgpmIoGrxuP9+hbtRIDIWKjG67K50EofLxuk5ZHeUMVJI9HyYP0j25IMSJSm7xo97XMnSYLl6EDl+FS/kYoZ/HVp2lqwNzziCmIlIG0Y2yPj5kKL7blbrjTGVUc2emynbrOqVfOXaX7LmUr/z4arLlhPF1IjH9XXfaWrA7Qhmr/lFhMmApXsUvLPZkbOnhs+tQVbF6bLYs1k55L4MZ9yxeSeUk9qU1IztXuy9JEa9UQVbtsCWKahmFXD5E7Spsc7Dlnx9vH8YsLL7/21vmvZLFa8LdcqkYxdzSQ53fWPdQYGrTRLF2CR2KdW92KTF3ktwPWbyEz7Sk2sbzesnPU4VeC91KNqgkYnuI78Rs66X2vYJ6/L3V+7+IV6a3GD804cTqafW19jHS+wulAScFuRnnlLxXZshDGuh7Ey9FaFLFSwndJtrAzE9SnHPp2sR2l1YX4f5Wi5k88SLvZZH3ahoKTHV6eXBIHMj22mGx6rrWcSesN68yPOVOcnI4mxGJh07mlr/HyuN3aUWZMGB7+ZFcrgek2zITWHg3pVb5G+zNJ7N3qHM72GqpmNtej/sSB9YudpetcZIGsXkEP3+xygkYD0jL3+R6XFkUDD4tGHn49W2ZYp/kQUp6ZhJtYOwnZUgN/b+sIfXubpX3ylp5bc4yD2S8nTBR+FBgqntLA49hWEwMw03dKDpA+G7wSxw4F8KrF4GrPNgLZc2XLLy6YVKHpXjJIpNggwQfUVEWXdfTqrqoow83t3j/1168DAcvS7geZT082MOJ1cLAbPLlYNUWklhOJzD8d3qRXl3Y+0TK71+/PR4rpLb17TpxMLUUluk9w+nPLPzptfKS7Cm+X7cV9l212duJG1Pa45fT5+yTO9YqSBDdVL+Kfn2LvFe+eJH3+pjtHmT7rDgLNwsdSjP1twFJ2QRQYWIltXleKqWHV5OPHMuo42nCor3TuCvGMhdBAOSybjuzUe7MdRKz2S6ZR1FN9wptjy5Cue1rETrMFq/ZznwiJdfWXd5XW7yuPra+2rsZLMQVj/u7iJaM3gfV3AHVYDAV+2MmXnthtyzhyhTxO1FThC2zni4Hg8ew4cYkZ8+muf0vFS+Oisol3+l9YuhndzBTu785eN6Kl7ZCyFrxqG29CR1m5b0cjhwrtoOFeMmCs7c6yjmKzVFQ3u11XbWVhpxT/Sza9bVDh2XiRegwmv+4t6fFCmdx8Hs8904VL4PVyB7kFEbJocC9yh9+t5j1ChOWTZEU7n9t9YptZPG773uxcCeiPvzliNfhXSA2AHEmbr7CeXwwlgZlUTTcBzWZUQ1TG6w8BPFZZZogPM+frsk/x9DdxjVM11sdtfNeRSuvrbxXTkK6N2Pltvct3GD1PlRuO9T7ssJZxiucuwdjbYaunQISJ++lGqDsuuKBPFe8kkTc6gR5Y78rQ3+8u1d8pdgHl0haiBd5rx0fXUm8uxjU6nExCGeZ9+9tFr8WCpMHS4PVyB5ncRW4V0zp7/MpLqWTpGzxUo6WeggXZm2Bf6OEcJX6S/H9NTfxlYsXea8ng6srFYt8RLG3XQso3tm20BCP/k0CtpUYFwbaqaXmwvrY/Ubi5XKKi8D0OeSnCtccvvl4bUCegNwDNxFpq2fpyOWMIl7u4ZmoTiI/gBVWAGuMVIEtYtygf6Jo+IuXuoGkCPB8ssg0+Bevrjb9ZP/bdc/ipb13t7hJQ35+HlZtZSi524JAV+I1PztruYYGg5eFASzKEGarVV9qfBCrqYuWH/NbQ+YuEtkrngq+KflAmrO9i9U8blf4rpQoJPeHHiesulZDwEoZFWyYZp5jX137gN7isOGmeB04Bh1hBWCQtyp9GuuLl7riqTDwiT6wx7jp1wfE3YJ54rUzPtQeDPcMwe/bBFYna046YCNe5L2erCrOWE1Dqx55q8wH1iX3orZFXPG4C2umeDVl97SSVVZAC4OTIHoS/6dynAZC1be4bpnAlq975L7nyIOVMWrGOq3a7FmOKl4lrxRUyVtpkNxzL1ozXq9SRcProXprq+wD06n4jnmrFHZZYdicl4sTVr5XAfsUlVEJ357vvZksvx0O/dwdx8mGpXixZf7BdOIgKs1AHwbE1ZPEKz0M1XMvKf2SRSNhAE2p//baKKvAgvbvf0lg61inpZWb44CW20/u0wikpiI8J4h24rUeXkganDWEfVxlIV6pzuJIpmnuJaVfwcRrf/CvsHU/hV+y+AqfmjldLq8TLoQr1xRN7itKRTjb2k68yHs9OVfOIBoqFHg+/zt9K6vGrjbrJzPKiifHB6xZlJQn5K6kvO3eC+YlbeReOwJm44+zcM3zILtu84mUJZbSIDp9UDH3sxd2BgyVtyrtlrjqlQbekrb0Ll7v4eqNjRtqaGhi0eNEqMT+PdxrHt2pIFwe4kXe68Fb1UG0kZN3EwpM5RNJNKQJTODQ4V0YcUHEVPFKtSHX+xAwF6uPZlZNEdmuvAgdPocOxcNifdz0qdRhxeqxp7J4VZglqhOYnkTgJpxYdcCq9JwMVY1ZKHCZSrOdsoiXs5vKg6hPO4YKBaYiEkXDffCVfaDC7sdUhnvXEwrcI1T/d3exCpILNxWvyUwcFfXsrGLYyMLLDy1WT6svcdXrveKRxavCKtDCySgjHgHPUODc24DvISJeFfxQXAHktqSrUODbrLBG4l4WjQorHtEH3FeBuU7GfbEIFG1h3+9KF2OKvXiR93rOe6nn7e071XRFqOODtCa/XiWKiekALq56TetcYiKKl/vuxxR7cW0cAu6hwMv5+9TbGpNKK6o1xeuwD6Y4aK/ZdKhQoCQmhishUTT8xUudwBj23WqQoJz6BNzFKkjeqoSsuXjNM2w+kfK8+lK/bzStrILGmEsc7e1eSUwMB3DlJdsr7y/es05JuDvZMm/hC5RxT+CIeasSH6grXgdOSEuD9gEGLomDoZ/Iq15DwVx7IKW+H8AHSgaske4lb1VmTR/xIu/1vPISw0beO9/K3KX8bnElZBrGi7LiEfs+7exyXwWWW5ISUgm4hwI7zFulMry93kW8rqHDy1LDRh+cV2fdoniNPnCJKyFr8VIOx3XPyYp9R7xKRrRA9z6I1dQyy6+XD51eUMzoKV4cFfVgAcJGjXYcBpo4RFkFKoMD16QTIG+Vziz3Dj/x4hMpz6FD7aVZ01VHrmN43qcM4JYr9EgrHnEC474K9LTvkcomb9XO2n7iRd4rO+81fOhQEXHjvI8oGu4Th0hC2m7Y6bdm97zVAFvYa1nXTby28l6jD85bxlNWHaPzkYSkjXi5r3hE8XIX0VoDzAj1EAqMaUVv8SLvRd4rL3xqLV6x816HT75HGh4Rq0jWWG+Lr3gROnweuDc+6nd7sWXOJ5orSlvGW4lXhfesrivP+bDTyTbeL0dHs3+09riHArGzi8kRLxes64WKYaOht0tL4mX4ovKbNaRwZQXxquxyVPcY/Zgm1fOs4fKn8fb1qdRuzx7tzVFcxeua9yJ0+Bw6XHwH7u4yh8E7inMGFy/3vFcUOxypHYQCx7M24tXApkdfAUj9dxBvVr0NnL1RlWxhbwS+YrX+4kXe6znvJW4eGDHvJQuIg3hdIwH7q15ChxWHIJuqyFvZcOypFHfx2howRhycFePLA7jxpgWlbZ7XyP2e8xHn7+e/f3yzbo+06kO8rLGbl+cuVrxvZW4z6wJriRd5r+e8l3Le3hDv+9zkG/Sz3bzES9ztOfq7dtYDSY3yyFvVoNxPHW3Fy2mA6gH/6CuA4oHGyTd2Vn+8bxXo4SFvFcgYAZtSR7zIew2f9yoWqwdCniHlh1NOXnjfKsbI5B4K5H2rGIY2akUV8SLv9WwtOf8TNO/lOtA4rbrerDBv1f/v9MLLwUajSEEx1pOem6awii6wSw+31hQv8l4d571cxeqeyxB5vh4e/hZtRKxaUB+zznriRejwOXSonK7ecOeb40Cz9jQhXIONM+StBjNooO4gXg2NES106DzQ7JFGuPYIdfC78wqdo5c68IFaTawmXlt5ryNvS275iRTngUb14XnDBPknFVe86xxX6OSt4pk7TItqixd5r4Z5rwexmlqiv3dl67IMSrY8q5ZWQ6ymDjGhqWrW7iqrK17kvZ7zXs4vzToONKnOzpb0VGJBrndeoeMXQezcWzOiiNdhT/KW817i9vHGeatb/yc/0dtocG2vu1hx9FKnnhGr2VXF65r3InT4HDpUDotdPO/PeaBJ8VZCgSm0gl3ruELHL4LZepTmIF4BLCkeFXW/qvn4X/O8FfmJAE6U2ATnFTqhwER7cHk6gfriRd7rOe8lfiIl3bzmdzAomSOtU6DzCh2/qGNGarkhUF28rqHDxTCZ53l20a0ubZmv3wnyVvWZm9TovLOUUKCJlSikhEAr8SLv9Zz3Uj6RUmJr5V4GJYVS0GvIWwU1DM1yIdBGvNa3hx/2lAV516G9GxDysWdapUTyVlUwU0lQAm3Ei7zXojvMp51fLn86+wpi5QzYq3jyVl5kKbdHAk3Ei7zXuqtk7Dzc8ztCgXuEAv9OKDCwcWhaUwItxYu814Lpbwar3C3wiFXTR6qscsSqjB93H4dAO/EidLjpZYkhREKBnT6zhAI7NRzNbk4A8Wpugu0GzCI2x1kvn+6u5JPmwS233Dx3seLopS79gkYg+WmCAAAE3klEQVSnE2gmXlt5ryN/IiXdhNwRnQChwOgWon09EmgtXuS9evQa2rwd8n0Nib/tGs3NXS7V8Z7PnH7kkyE44pEJtBUv8l5H9r1h+u4eCiREPIyv0BE7AlHF67CfSLEzLSV5EXAXK/JWXqaj3IEINBWva96L0OFADjVqV8hbjWpZ+tUrgbjiJX58sVfwtDs2AY5eim0fWgeB9uJF3gsvDEDAPRRI3iqAlWnCSASai9c1dMgnUkbyqg76widDOjASTYTABoEo4kXeCzd1J0Deyh0xFUCgGoEY4sUnUqoZ/EgVkbc6krXp69EIxBAv8l5H8zuX/rrnrdjC7mI3CoVADoEQ4kXeK8d03DP7TYXTLDjJAl+DQDwCkcSLvFc8/wjXIsQqnEloEASaEIgjXoQOmzhA9ErdQ4FsYY/uArQPAosEEC8cIxQBd7EibxXK3jQGArkEwojXNe9F6DDXkh3fRyiwY+PRdAg0IoB4NQJ/5GrZwn5k69N3CNgQiCVe5L1srBqsFPdQIHmrYBanORDwJ9CLePGJFH9fMKvBXazIW5nZioIg0CuBUOJF3qtXN+J9q34tR8sh0CeBfsSLT6SE8jDyVqHMQWMgcDgC8cSLvFdIJ3QPBZK3Cml3GgWBqATCidc1dMgnUgJ4DFvYAxiBJkAAAosEoooX73s1cFjEqgF0qoQABLIIxBQvPpGSZczUm8hbpRLjeghAIAqBmOJF3svFP9zzVmxhd7EbhUIAAs8EQorXVt7rdDl/4RMVuisTCtRZcSUEINAPgcjiRd4rw49qiNXULCYQGcbhFghAwIxAXPEidCgZ2T0UyBZ2yQ5cBAEI1CXQo3gd+qgod7Eib1X3CaQ2CEAgi0BY8brmvQgd8qn7LMfmJghAYGwCiFdA+7KFPaBRaBIEIBCKQGzxOkjeyz0USN4q1ENHYyAAgXICocXrGjoc7qgod7GawZ2/syOw/AGhBAhAICaBHsRriLxXjS3siFXMh4xWQQAC9gT6Fa/gn0ghb2XvrJQIAQhA4I1AfPHqJO/lHgokb8VTCwEIQOCdQHjxipz3IhTIkwQBCECgDYFexCtE3guxauOk1AoBCEDgkUAf4tUodEjeigcGAhCAQEwCvYuX6VFR7nkrjl6K+RTQKghAoDsCXYjXVt6r9BMphAK781kaDAEIQODUk3gt571mZdO/8VVDrKYm8c4VTxcEIAABPwL9iNd63uuVzsp7X+6hQLaw+3knJUMAAhBYIdCNeF1Dh+urr7cOns/fT5fLp+t/Pxtb/uVE3soYKcVBAAIQSCfQlXht5r7S+67c8TJfxDmBCiuugQAEIFCNQH/itRc+LEf3MonVHIn858erePEHAQhAAAKhCHQnXvNCyFbAEKtQLkljIAABCOwT6FK83rp1+f3rt9Pl8ud+N++uIBSYCIzLIQABCEQj0LV4iSKGWEXzOtoDAQhAoJDAEOJ1y+B9azw5q0LX4HYIQAACcQkMJ15xUdMyCEAAAhCwIoB4WZGkHAhAAAIQqEYA8aqGmoogAAEIQMCKAOJlRZJyIAABCECgGgHEqxpqKoIABCAAASsCiJcVScqBAAQgAIFqBBCvaqipCAIQgAAErAggXlYkKQcCEIAABKoRQLyqoaYiCEAAAhCwIoB4WZGkHAhAAAIQqEbg/wAl8QiWQZIKRQAAAABJRU5ErkJggg==\"\n        },\n        \"comments\": [],\n        \"resizable\": true,\n        \"draggable\": true\n    },\n    {\n        \"id\": \"2DVI8wT4istGVODnpnT1q\",\n        \"pageNumber\": 1,\n        \"konvaString\": \"{\\\"attrs\\\":{\\\"name\\\":\\\"PdfjsAnnotationExtension_shape_group\\\",\\\"id\\\":\\\"2DVI8wT4istGVODnpnT1q\\\"},\\\"className\\\":\\\"Group\\\",\\\"children\\\":[{\\\"attrs\\\":{\\\"x\\\":511.2000000000001,\\\"y\\\":57.60000000000001,\\\"width\\\":16,\\\"height\\\":16,\\\"fillLinearGradientEndPointY\\\":16,\\\"fillLinearGradientColorStops\\\":[0,\\\"rgb(255, 222, 33)\\\",1,\\\"#fff\\\"],\\\"stroke\\\":\\\"#000\\\",\\\"cornerRadius\\\":[0,3,0,0],\\\"strokeWidth\\\":1,\\\"shadowColor\\\":\\\"rgba(0,0,0,0.2)\\\",\\\"shadowBlur\\\":2,\\\"shadowOffsetX\\\":1,\\\"shadowOffsetY\\\":1,\\\"shadowOpacity\\\":0.3},\\\"className\\\":\\\"Rect\\\"},{\\\"attrs\\\":{\\\"points\\\":[514.2,63.20000000000001,521.2,63.20000000000001],\\\"stroke\\\":\\\"#555\\\",\\\"strokeWidth\\\":0.6,\\\"lineCap\\\":\\\"round\\\"},\\\"className\\\":\\\"Line\\\"},{\\\"attrs\\\":{\\\"points\\\":[514.2,64.80000000000001,524.2,64.80000000000001],\\\"stroke\\\":\\\"#555\\\",\\\"strokeWidth\\\":0.6,\\\"lineCap\\\":\\\"round\\\"},\\\"className\\\":\\\"Line\\\"},{\\\"attrs\\\":{\\\"points\\\":[514.2,66.4,524.2,66.4],\\\"stroke\\\":\\\"#555\\\",\\\"strokeWidth\\\":0.6,\\\"lineCap\\\":\\\"round\\\"},\\\"className\\\":\\\"Line\\\"},{\\\"attrs\\\":{\\\"points\\\":[514.2,68.00000000000001,524.2,68.00000000000001],\\\"stroke\\\":\\\"#555\\\",\\\"strokeWidth\\\":0.6,\\\"lineCap\\\":\\\"round\\\"},\\\"className\\\":\\\"Line\\\"}]}\",\n        \"konvaClientRect\": {\n            \"x\": 508.7000000000001,\n            \"y\": 55.10000000000001,\n            \"width\": 21.999999999999943,\n            \"height\": 22\n        },\n        \"title\": \"不具名用户\",\n        \"type\": 11,\n        \"pdfjsType\": 1,\n        \"pdfjsEditorType\": 15,\n        \"subtype\": \"Text\",\n        \"color\": \"rgb(255, 222, 33)\",\n        \"date\": \"D:20250622143901+08'00'\",\n        \"contentsObj\": {\n            \"text\": \"\"\n        },\n        \"comments\": [],\n        \"resizable\": false,\n        \"draggable\": true\n    },\n    {\n        \"id\": \"Z9PaV2G4yohUue9Jh6vZy\",\n        \"pageNumber\": 1,\n        \"konvaString\": \"{\\\"attrs\\\":{\\\"name\\\":\\\"PdfjsAnnotationExtension_shape_group\\\",\\\"id\\\":\\\"Z9PaV2G4yohUue9Jh6vZy\\\"},\\\"className\\\":\\\"Group\\\",\\\"children\\\":[{\\\"attrs\\\":{\\\"points\\\":[375.00000000000006,44.400000000000006,497.4000000000001,117.00000000000001],\\\"stroke\\\":\\\"#ff0000\\\",\\\"fill\\\":\\\"#ff0000\\\",\\\"hitStrokeWidth\\\":20,\\\"lineCap\\\":\\\"round\\\",\\\"lineJoin\\\":\\\"round\\\",\\\"strokeScaleEnabled\\\":false},\\\"className\\\":\\\"Arrow\\\"}]}\",\n        \"konvaClientRect\": {\n            \"x\": 374.00000000000006,\n            \"y\": 38.400000000000006,\n            \"width\": 124.40000000000003,\n            \"height\": 84.60000000000001\n        },\n        \"title\": \"不具名用户\",\n        \"type\": 12,\n        \"pdfjsType\": 4,\n        \"pdfjsEditorType\": 15,\n        \"subtype\": \"Arrow\",\n        \"color\": \"#ff0000\",\n        \"date\": \"D:20250622143915+08'00'\",\n        \"contentsObj\": {\n            \"text\": \"这里需要改进\"\n        },\n        \"comments\": [\n            {\n                \"id\": \"QjyUH39ZaIc7YpeQU6ll5\",\n                \"title\": \"不具名用户\",\n                \"date\": \"D:20250622143915+08'00'\",\n                \"content\": \"将状态设置为 “拒绝”\",\n                \"status\": \"Rejected\"\n            }\n        ],\n        \"resizable\": true,\n        \"draggable\": true\n    }\n]"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/cmaps/CNS2-V.bcmap",
    "content": "\u0003RCopyright 1990-2009 Adobe Systems Incorporated.\nAll rights reserved.\nSee ./LICENSE\u0006CNS2-H"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/cmaps/ETenms-B5-H.bcmap",
    "content": "\u0002RCopyright 1990-2009 Adobe Systems Incorporated.\nAll rights reserved.\nSee ./LICENSE\tETen-B5-H`\u0001 ^\u0001"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/cmaps/GB-H.bcmap",
    "content": "\u0002RCopyright 1990-2009 Adobe Systems Incorporated.\nAll rights reserved.\nSee ./LICENSE\u0001\u0001!!]aX!!]`21>\u0002\tp\u0002\u000bz$]\u0006\"Rd-U7*\u0017\r\b4%+ Z\u000f {/\u001f\u001c\u0004%<9Kb1].\"\u001f\f`],\"]\n\"]h\"]F\"]$\"]\u0002\"]`\"]>\"]\u001c\"]z\"]X\"]6\"]\u0014\"]r\"]P\"].\"]\f\"]j\"]H\"]&\"]\u0004\"]b\"]@\"]\u001e\"]|\"]Z\"]8\"]\u0016\"]t\"]R\"]0\"]\u000e\"]l\"]J\"](\"]\u0006\"]d\"]B\"] \"X~']W\"]5\"]\u0013\"]q\"]O\"]-\"]\u000b\"]i\"]G\"]%\"]\u0003\"]a\"]?\"]\u001d\"]{\"]Y\"]7\"]\u0015\"]s\"]Q\"]/\"]\r\"]k\"]I\"]'\"]\u0005\"]c\"]A\"]\u001f\"]}\"][\"]9"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/cmaps/LICENSE",
    "content": "%%Copyright: -----------------------------------------------------------\n%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated.\n%%Copyright: All rights reserved.\n%%Copyright:\n%%Copyright: Redistribution and use in source and binary forms, with or\n%%Copyright: without modification, are permitted provided that the\n%%Copyright: following conditions are met:\n%%Copyright:\n%%Copyright: Redistributions of source code must retain the above\n%%Copyright: copyright notice, this list of conditions and the following\n%%Copyright: disclaimer.\n%%Copyright:\n%%Copyright: Redistributions in binary form must reproduce the above\n%%Copyright: copyright notice, this list of conditions and the following\n%%Copyright: disclaimer in the documentation and/or other materials\n%%Copyright: provided with the distribution. \n%%Copyright:\n%%Copyright: Neither the name of Adobe Systems Incorporated nor the names\n%%Copyright: of its contributors may be used to endorse or promote\n%%Copyright: products derived from this software without specific prior\n%%Copyright: written permission. \n%%Copyright:\n%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND\n%%Copyright: CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\n%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR\n%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n%%Copyright: -----------------------------------------------------------\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/debugger.css",
    "content": "/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n:root {\n  --panel-width: 300px;\n}\n\n#PDFBug,\n#PDFBug :is(input, button, select) {\n  font: message-box;\n}\n#PDFBug {\n  background-color: rgb(255 255 255);\n  border: 1px solid rgb(102 102 102);\n  position: fixed;\n  top: 32px;\n  right: 0;\n  bottom: 0;\n  font-size: 10px;\n  padding: 0;\n  width: var(--panel-width);\n}\n#PDFBug .controls {\n  background: rgb(238 238 238);\n  border-bottom: 1px solid rgb(102 102 102);\n  padding: 3px;\n}\n#PDFBug .panels {\n  inset: 27px 0 0;\n  overflow: auto;\n  position: absolute;\n}\n#PDFBug .panels > div {\n  padding: 5px;\n}\n#PDFBug button.active {\n  font-weight: bold;\n}\n.debuggerShowText,\n.debuggerHideText:hover {\n  background-color: rgb(255 255 0 / 0.25);\n}\n#PDFBug .stats {\n  font-family: courier;\n  font-size: 10px;\n  white-space: pre;\n}\n#PDFBug .stats .title {\n  font-weight: bold;\n}\n#PDFBug table {\n  font-size: 10px;\n  white-space: pre;\n}\n#PDFBug table.showText {\n  border-collapse: collapse;\n  text-align: center;\n}\n#PDFBug table.showText,\n#PDFBug table.showText :is(tr, td) {\n  border: 1px solid black;\n  padding: 1px;\n}\n#PDFBug table.showText td.advance {\n  color: grey;\n}\n\n#viewer.textLayer-visible .textLayer {\n  opacity: 1;\n}\n\n#viewer.textLayer-visible .canvasWrapper {\n  background-color: rgb(128 255 128);\n}\n\n#viewer.textLayer-visible .canvasWrapper canvas {\n  mix-blend-mode: screen;\n}\n\n#viewer.textLayer-visible .textLayer span {\n  background-color: rgb(255 255 0 / 0.1);\n  color: rgb(0 0 0);\n  border: solid 1px rgb(255 0 0 / 0.5);\n  box-sizing: border-box;\n}\n\n#viewer.textLayer-visible .textLayer span[aria-owns] {\n  background-color: rgb(255 0 0 / 0.3);\n}\n\n#viewer.textLayer-hover .textLayer span:hover {\n  background-color: rgb(255 255 255);\n  color: rgb(0 0 0);\n}\n\n#viewer.textLayer-shadow .textLayer span {\n  background-color: rgb(255 255 255 / 0.6);\n  color: rgb(0 0 0);\n}\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/debugger.mjs",
    "content": "/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst { OPS } = globalThis.pdfjsLib || (await import(\"pdfjs-lib\"));\n\nconst opMap = Object.create(null);\nfor (const key in OPS) {\n  opMap[OPS[key]] = key;\n}\n\nconst FontInspector = (function FontInspectorClosure() {\n  let fonts;\n  let active = false;\n  const fontAttribute = \"data-font-name\";\n  function removeSelection() {\n    const divs = document.querySelectorAll(`span[${fontAttribute}]`);\n    for (const div of divs) {\n      div.className = \"\";\n    }\n  }\n  function resetSelection() {\n    const divs = document.querySelectorAll(`span[${fontAttribute}]`);\n    for (const div of divs) {\n      div.className = \"debuggerHideText\";\n    }\n  }\n  function selectFont(fontName, show) {\n    const divs = document.querySelectorAll(\n      `span[${fontAttribute}=${fontName}]`\n    );\n    for (const div of divs) {\n      div.className = show ? \"debuggerShowText\" : \"debuggerHideText\";\n    }\n  }\n  function textLayerClick(e) {\n    if (\n      !e.target.dataset.fontName ||\n      e.target.tagName.toUpperCase() !== \"SPAN\"\n    ) {\n      return;\n    }\n    const fontName = e.target.dataset.fontName;\n    const selects = document.getElementsByTagName(\"input\");\n    for (const select of selects) {\n      if (select.dataset.fontName !== fontName) {\n        continue;\n      }\n      select.checked = !select.checked;\n      selectFont(fontName, select.checked);\n      select.scrollIntoView();\n    }\n  }\n  return {\n    // Properties/functions needed by PDFBug.\n    id: \"FontInspector\",\n    name: \"Font Inspector\",\n    panel: null,\n    manager: null,\n    init() {\n      const panel = this.panel;\n      const tmp = document.createElement(\"button\");\n      tmp.addEventListener(\"click\", resetSelection);\n      tmp.textContent = \"Refresh\";\n      panel.append(tmp);\n\n      fonts = document.createElement(\"div\");\n      panel.append(fonts);\n    },\n    cleanup() {\n      fonts.textContent = \"\";\n    },\n    enabled: false,\n    get active() {\n      return active;\n    },\n    set active(value) {\n      active = value;\n      if (active) {\n        document.body.addEventListener(\"click\", textLayerClick, true);\n        resetSelection();\n      } else {\n        document.body.removeEventListener(\"click\", textLayerClick, true);\n        removeSelection();\n      }\n    },\n    // FontInspector specific functions.\n    fontAdded(fontObj, url) {\n      function properties(obj, list) {\n        const moreInfo = document.createElement(\"table\");\n        for (const entry of list) {\n          const tr = document.createElement(\"tr\");\n          const td1 = document.createElement(\"td\");\n          td1.textContent = entry;\n          tr.append(td1);\n          const td2 = document.createElement(\"td\");\n          td2.textContent = obj[entry].toString();\n          tr.append(td2);\n          moreInfo.append(tr);\n        }\n        return moreInfo;\n      }\n\n      const moreInfo = fontObj.css\n        ? properties(fontObj, [\"baseFontName\"])\n        : properties(fontObj, [\"name\", \"type\"]);\n\n      const fontName = fontObj.loadedName;\n      const font = document.createElement(\"div\");\n      const name = document.createElement(\"span\");\n      name.textContent = fontName;\n      let download;\n      if (!fontObj.css) {\n        download = document.createElement(\"a\");\n        if (url) {\n          url = /url\\(['\"]?([^)\"']+)/.exec(url);\n          download.href = url[1];\n        } else if (fontObj.data) {\n          download.href = URL.createObjectURL(\n            new Blob([fontObj.data], { type: fontObj.mimetype })\n          );\n        }\n        download.textContent = \"Download\";\n      }\n\n      const logIt = document.createElement(\"a\");\n      logIt.href = \"\";\n      logIt.textContent = \"Log\";\n      logIt.addEventListener(\"click\", function (event) {\n        event.preventDefault();\n        console.log(fontObj);\n      });\n      const select = document.createElement(\"input\");\n      select.setAttribute(\"type\", \"checkbox\");\n      select.dataset.fontName = fontName;\n      select.addEventListener(\"click\", function () {\n        selectFont(fontName, select.checked);\n      });\n      if (download) {\n        font.append(select, name, \" \", download, \" \", logIt, moreInfo);\n      } else {\n        font.append(select, name, \" \", logIt, moreInfo);\n      }\n      fonts.append(font);\n      // Somewhat of a hack, should probably add a hook for when the text layer\n      // is done rendering.\n      setTimeout(() => {\n        if (this.active) {\n          resetSelection();\n        }\n      }, 2000);\n    },\n  };\n})();\n\n// Manages all the page steppers.\nconst StepperManager = (function StepperManagerClosure() {\n  let steppers = [];\n  let stepperDiv = null;\n  let stepperControls = null;\n  let stepperChooser = null;\n  let breakPoints = Object.create(null);\n  return {\n    // Properties/functions needed by PDFBug.\n    id: \"Stepper\",\n    name: \"Stepper\",\n    panel: null,\n    manager: null,\n    init() {\n      const self = this;\n      stepperControls = document.createElement(\"div\");\n      stepperChooser = document.createElement(\"select\");\n      stepperChooser.addEventListener(\"change\", function (event) {\n        self.selectStepper(this.value);\n      });\n      stepperControls.append(stepperChooser);\n      stepperDiv = document.createElement(\"div\");\n      this.panel.append(stepperControls, stepperDiv);\n      if (sessionStorage.getItem(\"pdfjsBreakPoints\")) {\n        breakPoints = JSON.parse(sessionStorage.getItem(\"pdfjsBreakPoints\"));\n      }\n    },\n    cleanup() {\n      stepperChooser.textContent = \"\";\n      stepperDiv.textContent = \"\";\n      steppers = [];\n    },\n    enabled: false,\n    active: false,\n    // Stepper specific functions.\n    create(pageIndex) {\n      const debug = document.createElement(\"div\");\n      debug.id = \"stepper\" + pageIndex;\n      debug.hidden = true;\n      debug.className = \"stepper\";\n      stepperDiv.append(debug);\n      const b = document.createElement(\"option\");\n      b.textContent = \"Page \" + (pageIndex + 1);\n      b.value = pageIndex;\n      stepperChooser.append(b);\n      const initBreakPoints = breakPoints[pageIndex] || [];\n      const stepper = new Stepper(debug, pageIndex, initBreakPoints);\n      steppers.push(stepper);\n      if (steppers.length === 1) {\n        this.selectStepper(pageIndex, false);\n      }\n      return stepper;\n    },\n    selectStepper(pageIndex, selectPanel) {\n      pageIndex |= 0;\n      if (selectPanel) {\n        this.manager.selectPanel(this);\n      }\n      for (const stepper of steppers) {\n        stepper.panel.hidden = stepper.pageIndex !== pageIndex;\n      }\n      for (const option of stepperChooser.options) {\n        option.selected = (option.value | 0) === pageIndex;\n      }\n    },\n    saveBreakPoints(pageIndex, bps) {\n      breakPoints[pageIndex] = bps;\n      sessionStorage.setItem(\"pdfjsBreakPoints\", JSON.stringify(breakPoints));\n    },\n  };\n})();\n\n// The stepper for each page's operatorList.\nclass Stepper {\n  // Shorter way to create element and optionally set textContent.\n  #c(tag, textContent) {\n    const d = document.createElement(tag);\n    if (textContent) {\n      d.textContent = textContent;\n    }\n    return d;\n  }\n\n  #simplifyArgs(args) {\n    if (typeof args === \"string\") {\n      const MAX_STRING_LENGTH = 75;\n      return args.length <= MAX_STRING_LENGTH\n        ? args\n        : args.substring(0, MAX_STRING_LENGTH) + \"...\";\n    }\n    if (typeof args !== \"object\" || args === null) {\n      return args;\n    }\n    if (\"length\" in args) {\n      // array\n      const MAX_ITEMS = 10,\n        simpleArgs = [];\n      let i, ii;\n      for (i = 0, ii = Math.min(MAX_ITEMS, args.length); i < ii; i++) {\n        simpleArgs.push(this.#simplifyArgs(args[i]));\n      }\n      if (i < args.length) {\n        simpleArgs.push(\"...\");\n      }\n      return simpleArgs;\n    }\n    const simpleObj = {};\n    for (const key in args) {\n      simpleObj[key] = this.#simplifyArgs(args[key]);\n    }\n    return simpleObj;\n  }\n\n  constructor(panel, pageIndex, initialBreakPoints) {\n    this.panel = panel;\n    this.breakPoint = 0;\n    this.nextBreakPoint = null;\n    this.pageIndex = pageIndex;\n    this.breakPoints = initialBreakPoints;\n    this.currentIdx = -1;\n    this.operatorListIdx = 0;\n    this.indentLevel = 0;\n  }\n\n  init(operatorList) {\n    const panel = this.panel;\n    const content = this.#c(\"div\", \"c=continue, s=step\");\n    const table = this.#c(\"table\");\n    content.append(table);\n    table.cellSpacing = 0;\n    const headerRow = this.#c(\"tr\");\n    table.append(headerRow);\n    headerRow.append(\n      this.#c(\"th\", \"Break\"),\n      this.#c(\"th\", \"Idx\"),\n      this.#c(\"th\", \"fn\"),\n      this.#c(\"th\", \"args\")\n    );\n    panel.append(content);\n    this.table = table;\n    this.updateOperatorList(operatorList);\n  }\n\n  updateOperatorList(operatorList) {\n    const self = this;\n\n    function cboxOnClick() {\n      const x = +this.dataset.idx;\n      if (this.checked) {\n        self.breakPoints.push(x);\n      } else {\n        self.breakPoints.splice(self.breakPoints.indexOf(x), 1);\n      }\n      StepperManager.saveBreakPoints(self.pageIndex, self.breakPoints);\n    }\n\n    const MAX_OPERATORS_COUNT = 15000;\n    if (this.operatorListIdx > MAX_OPERATORS_COUNT) {\n      return;\n    }\n\n    const chunk = document.createDocumentFragment();\n    const operatorsToDisplay = Math.min(\n      MAX_OPERATORS_COUNT,\n      operatorList.fnArray.length\n    );\n    for (let i = this.operatorListIdx; i < operatorsToDisplay; i++) {\n      const line = this.#c(\"tr\");\n      line.className = \"line\";\n      line.dataset.idx = i;\n      chunk.append(line);\n      const checked = this.breakPoints.includes(i);\n      const args = operatorList.argsArray[i] || [];\n\n      const breakCell = this.#c(\"td\");\n      const cbox = this.#c(\"input\");\n      cbox.type = \"checkbox\";\n      cbox.className = \"points\";\n      cbox.checked = checked;\n      cbox.dataset.idx = i;\n      cbox.onclick = cboxOnClick;\n\n      breakCell.append(cbox);\n      line.append(breakCell, this.#c(\"td\", i.toString()));\n      const fn = opMap[operatorList.fnArray[i]];\n      let decArgs = args;\n      if (fn === \"showText\") {\n        const glyphs = args[0];\n        const charCodeRow = this.#c(\"tr\");\n        const fontCharRow = this.#c(\"tr\");\n        const unicodeRow = this.#c(\"tr\");\n        for (const glyph of glyphs) {\n          if (typeof glyph === \"object\" && glyph !== null) {\n            charCodeRow.append(this.#c(\"td\", glyph.originalCharCode));\n            fontCharRow.append(this.#c(\"td\", glyph.fontChar));\n            unicodeRow.append(this.#c(\"td\", glyph.unicode));\n          } else {\n            // null or number\n            const advanceEl = this.#c(\"td\", glyph);\n            advanceEl.classList.add(\"advance\");\n            charCodeRow.append(advanceEl);\n            fontCharRow.append(this.#c(\"td\"));\n            unicodeRow.append(this.#c(\"td\"));\n          }\n        }\n        decArgs = this.#c(\"td\");\n        const table = this.#c(\"table\");\n        table.classList.add(\"showText\");\n        decArgs.append(table);\n        table.append(charCodeRow, fontCharRow, unicodeRow);\n      } else if (fn === \"restore\" && this.indentLevel > 0) {\n        this.indentLevel--;\n      }\n      line.append(this.#c(\"td\", \" \".repeat(this.indentLevel * 2) + fn));\n      if (fn === \"save\") {\n        this.indentLevel++;\n      }\n\n      if (decArgs instanceof HTMLElement) {\n        line.append(decArgs);\n      } else {\n        line.append(this.#c(\"td\", JSON.stringify(this.#simplifyArgs(decArgs))));\n      }\n    }\n    if (operatorsToDisplay < operatorList.fnArray.length) {\n      const lastCell = this.#c(\"td\", \"...\");\n      lastCell.colspan = 4;\n      chunk.append(lastCell);\n    }\n    this.operatorListIdx = operatorList.fnArray.length;\n    this.table.append(chunk);\n  }\n\n  getNextBreakPoint() {\n    this.breakPoints.sort(function (a, b) {\n      return a - b;\n    });\n    for (const breakPoint of this.breakPoints) {\n      if (breakPoint > this.currentIdx) {\n        return breakPoint;\n      }\n    }\n    return null;\n  }\n\n  breakIt(idx, callback) {\n    StepperManager.selectStepper(this.pageIndex, true);\n    this.currentIdx = idx;\n\n    const listener = evt => {\n      switch (evt.keyCode) {\n        case 83: // step\n          document.removeEventListener(\"keydown\", listener);\n          this.nextBreakPoint = this.currentIdx + 1;\n          this.goTo(-1);\n          callback();\n          break;\n        case 67: // continue\n          document.removeEventListener(\"keydown\", listener);\n          this.nextBreakPoint = this.getNextBreakPoint();\n          this.goTo(-1);\n          callback();\n          break;\n      }\n    };\n    document.addEventListener(\"keydown\", listener);\n    this.goTo(idx);\n  }\n\n  goTo(idx) {\n    const allRows = this.panel.getElementsByClassName(\"line\");\n    for (const row of allRows) {\n      if ((row.dataset.idx | 0) === idx) {\n        row.style.backgroundColor = \"rgb(251,250,207)\";\n        row.scrollIntoView();\n      } else {\n        row.style.backgroundColor = null;\n      }\n    }\n  }\n}\n\nconst Stats = (function Stats() {\n  let stats = [];\n  function clear(node) {\n    node.textContent = \"\"; // Remove any `node` contents from the DOM.\n  }\n  function getStatIndex(pageNumber) {\n    for (const [i, stat] of stats.entries()) {\n      if (stat.pageNumber === pageNumber) {\n        return i;\n      }\n    }\n    return false;\n  }\n  return {\n    // Properties/functions needed by PDFBug.\n    id: \"Stats\",\n    name: \"Stats\",\n    panel: null,\n    manager: null,\n    init() {},\n    enabled: false,\n    active: false,\n    // Stats specific functions.\n    add(pageNumber, stat) {\n      if (!stat) {\n        return;\n      }\n      const statsIndex = getStatIndex(pageNumber);\n      if (statsIndex !== false) {\n        stats[statsIndex].div.remove();\n        stats.splice(statsIndex, 1);\n      }\n      const wrapper = document.createElement(\"div\");\n      wrapper.className = \"stats\";\n      const title = document.createElement(\"div\");\n      title.className = \"title\";\n      title.textContent = \"Page: \" + pageNumber;\n      const statsDiv = document.createElement(\"div\");\n      statsDiv.textContent = stat.toString();\n      wrapper.append(title, statsDiv);\n      stats.push({ pageNumber, div: wrapper });\n      stats.sort(function (a, b) {\n        return a.pageNumber - b.pageNumber;\n      });\n      clear(this.panel);\n      for (const entry of stats) {\n        this.panel.append(entry.div);\n      }\n    },\n    cleanup() {\n      stats = [];\n      clear(this.panel);\n    },\n  };\n})();\n\n// Manages all the debugging tools.\nclass PDFBug {\n  static #buttons = [];\n\n  static #activePanel = null;\n\n  static tools = [FontInspector, StepperManager, Stats];\n\n  static enable(ids) {\n    const all = ids.length === 1 && ids[0] === \"all\";\n    const tools = this.tools;\n    for (const tool of tools) {\n      if (all || ids.includes(tool.id)) {\n        tool.enabled = true;\n      }\n    }\n    if (!all) {\n      // Sort the tools by the order they are enabled.\n      tools.sort(function (a, b) {\n        let indexA = ids.indexOf(a.id);\n        indexA = indexA < 0 ? tools.length : indexA;\n        let indexB = ids.indexOf(b.id);\n        indexB = indexB < 0 ? tools.length : indexB;\n        return indexA - indexB;\n      });\n    }\n  }\n\n  static init(container, ids) {\n    this.loadCSS();\n    this.enable(ids);\n    /*\n     * Basic Layout:\n     * PDFBug\n     *  Controls\n     *  Panels\n     *    Panel\n     *    Panel\n     *    ...\n     */\n    const ui = document.createElement(\"div\");\n    ui.id = \"PDFBug\";\n\n    const controls = document.createElement(\"div\");\n    controls.setAttribute(\"class\", \"controls\");\n    ui.append(controls);\n\n    const panels = document.createElement(\"div\");\n    panels.setAttribute(\"class\", \"panels\");\n    ui.append(panels);\n\n    container.append(ui);\n    container.style.right = \"var(--panel-width)\";\n\n    // Initialize all the debugging tools.\n    for (const tool of this.tools) {\n      const panel = document.createElement(\"div\");\n      const panelButton = document.createElement(\"button\");\n      panelButton.textContent = tool.name;\n      panelButton.addEventListener(\"click\", event => {\n        event.preventDefault();\n        this.selectPanel(tool);\n      });\n      controls.append(panelButton);\n      panels.append(panel);\n      tool.panel = panel;\n      tool.manager = this;\n      if (tool.enabled) {\n        tool.init();\n      } else {\n        panel.textContent =\n          `${tool.name} is disabled. To enable add \"${tool.id}\" to ` +\n          \"the pdfBug parameter and refresh (separate multiple by commas).\";\n      }\n      this.#buttons.push(panelButton);\n    }\n    this.selectPanel(0);\n  }\n\n  static loadCSS() {\n    const { url } = import.meta;\n\n    const link = document.createElement(\"link\");\n    link.rel = \"stylesheet\";\n    link.href = url.replace(/\\.mjs$/, \".css\");\n\n    document.head.append(link);\n  }\n\n  static cleanup() {\n    for (const tool of this.tools) {\n      if (tool.enabled) {\n        tool.cleanup();\n      }\n    }\n  }\n\n  static selectPanel(index) {\n    if (typeof index !== \"number\") {\n      index = this.tools.indexOf(index);\n    }\n    if (index === this.#activePanel) {\n      return;\n    }\n    this.#activePanel = index;\n    for (const [j, tool] of this.tools.entries()) {\n      const isActive = j === index;\n      this.#buttons[j].classList.toggle(\"active\", isActive);\n      tool.active = isActive;\n      tool.panel.hidden = !isActive;\n    }\n  }\n}\n\nglobalThis.FontInspector = FontInspector;\nglobalThis.StepperManager = StepperManager;\nglobalThis.Stats = Stats;\n\nexport { PDFBug };\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/ach/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Pot buk mukato\npdfjs-previous-button-label = Mukato\npdfjs-next-button =\n    .title = Pot buk malubo\npdfjs-next-button-label = Malubo\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Pot buk\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = pi { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } me { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Jwik Matidi\npdfjs-zoom-out-button-label = Jwik Matidi\npdfjs-zoom-in-button =\n    .title = Kwot Madit\npdfjs-zoom-in-button-label = Kwot Madit\npdfjs-zoom-select =\n    .title = Kwoti\npdfjs-presentation-mode-button =\n    .title = Lokke i kit me tyer\npdfjs-presentation-mode-button-label = Kit me tyer\npdfjs-open-file-button =\n    .title = Yab Pwail\npdfjs-open-file-button-label = Yab\npdfjs-print-button =\n    .title = Go\npdfjs-print-button-label = Go\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Gintic\npdfjs-tools-button-label = Gintic\npdfjs-first-page-button =\n    .title = Cit i pot buk mukwongo\npdfjs-first-page-button-label = Cit i pot buk mukwongo\npdfjs-last-page-button =\n    .title = Cit i pot buk magiko\npdfjs-last-page-button-label = Cit i pot buk magiko\npdfjs-page-rotate-cw-button =\n    .title = Wire i tung lacuc\npdfjs-page-rotate-cw-button-label = Wire i tung lacuc\npdfjs-page-rotate-ccw-button =\n    .title = Wire i tung lacam\npdfjs-page-rotate-ccw-button-label = Wire i tung lacam\npdfjs-cursor-text-select-tool-button =\n    .title = Cak gitic me yero coc\npdfjs-cursor-text-select-tool-button-label = Gitic me yero coc\npdfjs-cursor-hand-tool-button =\n    .title = Cak gitic me cing\npdfjs-cursor-hand-tool-button-label = Gitic cing\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Jami me gin acoya…\npdfjs-document-properties-button-label = Jami me gin acoya…\npdfjs-document-properties-file-name = Nying pwail:\npdfjs-document-properties-file-size = Dit pa pwail:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Wiye:\npdfjs-document-properties-author = Ngat mucoyo:\npdfjs-document-properties-subject = Subjek:\npdfjs-document-properties-keywords = Lok mapire tek:\npdfjs-document-properties-creation-date = Nino dwe me cwec:\npdfjs-document-properties-modification-date = Nino dwe me yub:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Lacwec:\npdfjs-document-properties-producer = Layub PDF:\npdfjs-document-properties-version = Kit PDF:\npdfjs-document-properties-page-count = Kwan me pot buk:\npdfjs-document-properties-page-size = Dit pa potbuk:\npdfjs-document-properties-page-size-unit-inches = i\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = atir\npdfjs-document-properties-page-size-orientation-landscape = arii\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Waraga\npdfjs-document-properties-page-size-name-legal = Cik\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\npdfjs-document-properties-linearized-yes = Eyo\npdfjs-document-properties-linearized-no = Pe\npdfjs-document-properties-close-button = Lor\n\n## Print\n\npdfjs-print-progress-message = Yubo coc me agoya…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Juki\npdfjs-printing-not-supported = Ciko: Layeny ma pe teno goyo liweng.\npdfjs-printing-not-ready = Ciko: PDF pe ocane weng me agoya.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Lok gintic ma inget\npdfjs-toggle-sidebar-button-label = Lok gintic ma inget\npdfjs-document-outline-button =\n    .title = Nyut Wiyewiye me Gin acoya (dii-kiryo me yaro/kano jami weng)\npdfjs-document-outline-button-label = Pek pa gin acoya\npdfjs-attachments-button =\n    .title = Nyut twec\npdfjs-attachments-button-label = Twec\npdfjs-thumbs-button =\n    .title = Nyut cal\npdfjs-thumbs-button-label = Cal\npdfjs-findbar-button =\n    .title = Nong iye gin acoya\npdfjs-findbar-button-label = Nong\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Pot buk { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Cal me pot buk { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Nong\n    .placeholder = Nong i dokumen…\npdfjs-find-previous-button =\n    .title = Nong timme pa lok mukato\npdfjs-find-previous-button-label = Mukato\npdfjs-find-next-button =\n    .title = Nong timme pa lok malubo\npdfjs-find-next-button-label = Malubo\npdfjs-find-highlight-checkbox = Ket Lanyut I Weng\npdfjs-find-match-case-checkbox-label = Lok marwate\npdfjs-find-reached-top = Oo iwi gin acoya, omede ki i tere\npdfjs-find-reached-bottom = Oo i agiki me gin acoya, omede ki iwiye\npdfjs-find-not-found = Lok pe ononge\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Lac me iye pot buk\npdfjs-page-scale-fit = Porre me pot buk\npdfjs-page-scale-auto = Kwot pire kene\npdfjs-page-scale-actual = Dite kikome\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = Bal otime kun cano PDF.\npdfjs-invalid-file-error = Pwail me PDF ma pe atir onyo obale woko.\npdfjs-missing-file-error = Pwail me PDF tye ka rem.\npdfjs-unexpected-response-error = Lagam mape kigeno pa lapok tic.\npdfjs-rendering-error = Bal otime i kare me nyuto pot buk.\n\n## Annotations\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Lok angea manok]\n\n## Password\n\npdfjs-password-label = Ket mung me donyo me yabo pwail me PDF man.\npdfjs-password-invalid = Mung me donyo pe atir. Tim ber i tem doki.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Juki\npdfjs-web-fonts-disabled = Kijuko dit pa coc me kakube woko: pe romo tic ki dit pa coc me PDF ma kiketo i kine.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/af/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Vorige bladsy\npdfjs-previous-button-label = Vorige\npdfjs-next-button =\n    .title = Volgende bladsy\npdfjs-next-button-label = Volgende\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Bladsy\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = van { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } van { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Zoem uit\npdfjs-zoom-out-button-label = Zoem uit\npdfjs-zoom-in-button =\n    .title = Zoem in\npdfjs-zoom-in-button-label = Zoem in\npdfjs-zoom-select =\n    .title = Zoem\npdfjs-presentation-mode-button =\n    .title = Wissel na voorleggingsmodus\npdfjs-presentation-mode-button-label = Voorleggingsmodus\npdfjs-open-file-button =\n    .title = Open lêer\npdfjs-open-file-button-label = Open\npdfjs-print-button =\n    .title = Druk\npdfjs-print-button-label = Druk\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Nutsgoed\npdfjs-tools-button-label = Nutsgoed\npdfjs-first-page-button =\n    .title = Gaan na eerste bladsy\npdfjs-first-page-button-label = Gaan na eerste bladsy\npdfjs-last-page-button =\n    .title = Gaan na laaste bladsy\npdfjs-last-page-button-label = Gaan na laaste bladsy\npdfjs-page-rotate-cw-button =\n    .title = Roteer kloksgewys\npdfjs-page-rotate-cw-button-label = Roteer kloksgewys\npdfjs-page-rotate-ccw-button =\n    .title = Roteer anti-kloksgewys\npdfjs-page-rotate-ccw-button-label = Roteer anti-kloksgewys\npdfjs-cursor-text-select-tool-button =\n    .title = Aktiveer gereedskap om teks te merk\npdfjs-cursor-text-select-tool-button-label = Teksmerkgereedskap\npdfjs-cursor-hand-tool-button =\n    .title = Aktiveer handjie\npdfjs-cursor-hand-tool-button-label = Handjie\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Dokumenteienskappe…\npdfjs-document-properties-button-label = Dokumenteienskappe…\npdfjs-document-properties-file-name = Lêernaam:\npdfjs-document-properties-file-size = Lêergrootte:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } kG ({ $size_b } grepe)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MG ({ $size_b } grepe)\npdfjs-document-properties-title = Titel:\npdfjs-document-properties-author = Outeur:\npdfjs-document-properties-subject = Onderwerp:\npdfjs-document-properties-keywords = Sleutelwoorde:\npdfjs-document-properties-creation-date = Skeppingsdatum:\npdfjs-document-properties-modification-date = Wysigingsdatum:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Skepper:\npdfjs-document-properties-producer = PDF-vervaardiger:\npdfjs-document-properties-version = PDF-weergawe:\npdfjs-document-properties-page-count = Aantal bladsye:\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\n\n##\n\npdfjs-document-properties-close-button = Sluit\n\n## Print\n\npdfjs-print-progress-message = Berei tans dokument voor om te druk…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Kanselleer\npdfjs-printing-not-supported = Waarskuwing: Dié blaaier ondersteun nie drukwerk ten volle nie.\npdfjs-printing-not-ready = Waarskuwing: Die PDF is nog nie volledig gelaai vir drukwerk nie.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Sypaneel aan/af\npdfjs-toggle-sidebar-button-label = Sypaneel aan/af\npdfjs-document-outline-button =\n    .title = Wys dokumentskema (dubbelklik om alle items oop/toe te vou)\npdfjs-document-outline-button-label = Dokumentoorsig\npdfjs-attachments-button =\n    .title = Wys aanhegsels\npdfjs-attachments-button-label = Aanhegsels\npdfjs-thumbs-button =\n    .title = Wys duimnaels\npdfjs-thumbs-button-label = Duimnaels\npdfjs-findbar-button =\n    .title = Soek in dokument\npdfjs-findbar-button-label = Vind\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Bladsy { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Duimnael van bladsy { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Vind\n    .placeholder = Soek in dokument…\npdfjs-find-previous-button =\n    .title = Vind die vorige voorkoms van die frase\npdfjs-find-previous-button-label = Vorige\npdfjs-find-next-button =\n    .title = Vind die volgende voorkoms van die frase\npdfjs-find-next-button-label = Volgende\npdfjs-find-highlight-checkbox = Verlig almal\npdfjs-find-match-case-checkbox-label = Kassensitief\npdfjs-find-reached-top = Bokant van dokument is bereik; gaan voort van onder af\npdfjs-find-reached-bottom = Einde van dokument is bereik; gaan voort van bo af\npdfjs-find-not-found = Frase nie gevind nie\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Bladsywydte\npdfjs-page-scale-fit = Pas bladsy\npdfjs-page-scale-auto = Outomatiese zoem\npdfjs-page-scale-actual = Werklike grootte\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = 'n Fout het voorgekom met die laai van die PDF.\npdfjs-invalid-file-error = Ongeldige of korrupte PDF-lêer.\npdfjs-missing-file-error = PDF-lêer is weg.\npdfjs-unexpected-response-error = Onverwagse antwoord van bediener.\npdfjs-rendering-error = 'n Fout het voorgekom toe die bladsy weergegee is.\n\n## Annotations\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type }-annotasie]\n\n## Password\n\npdfjs-password-label = Gee die wagwoord om dié PDF-lêer mee te open.\npdfjs-password-invalid = Ongeldige wagwoord. Probeer gerus weer.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Kanselleer\npdfjs-web-fonts-disabled = Webfonte is gedeaktiveer: kan nie PDF-fonte wat ingebed is, gebruik nie.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/an/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Pachina anterior\npdfjs-previous-button-label = Anterior\npdfjs-next-button =\n    .title = Pachina siguient\npdfjs-next-button-label = Siguient\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Pachina\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = de { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Achiquir\npdfjs-zoom-out-button-label = Achiquir\npdfjs-zoom-in-button =\n    .title = Agrandir\npdfjs-zoom-in-button-label = Agrandir\npdfjs-zoom-select =\n    .title = Grandaria\npdfjs-presentation-mode-button =\n    .title = Cambear t'o modo de presentación\npdfjs-presentation-mode-button-label = Modo de presentación\npdfjs-open-file-button =\n    .title = Ubrir o fichero\npdfjs-open-file-button-label = Ubrir\npdfjs-print-button =\n    .title = Imprentar\npdfjs-print-button-label = Imprentar\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Ferramientas\npdfjs-tools-button-label = Ferramientas\npdfjs-first-page-button =\n    .title = Ir ta la primer pachina\npdfjs-first-page-button-label = Ir ta la primer pachina\npdfjs-last-page-button =\n    .title = Ir ta la zaguer pachina\npdfjs-last-page-button-label = Ir ta la zaguer pachina\npdfjs-page-rotate-cw-button =\n    .title = Chirar enta la dreita\npdfjs-page-rotate-cw-button-label = Chira enta la dreita\npdfjs-page-rotate-ccw-button =\n    .title = Chirar enta la zurda\npdfjs-page-rotate-ccw-button-label = Chirar enta la zurda\npdfjs-cursor-text-select-tool-button =\n    .title = Activar la ferramienta de selección de texto\npdfjs-cursor-text-select-tool-button-label = Ferramienta de selección de texto\npdfjs-cursor-hand-tool-button =\n    .title = Activar la ferramienta man\npdfjs-cursor-hand-tool-button-label = Ferramienta man\npdfjs-scroll-vertical-button =\n    .title = Usar lo desplazamiento vertical\npdfjs-scroll-vertical-button-label = Desplazamiento vertical\npdfjs-scroll-horizontal-button =\n    .title = Usar lo desplazamiento horizontal\npdfjs-scroll-horizontal-button-label = Desplazamiento horizontal\npdfjs-scroll-wrapped-button =\n    .title = Activaar lo desplazamiento contino\npdfjs-scroll-wrapped-button-label = Desplazamiento contino\npdfjs-spread-none-button =\n    .title = No unir vistas de pachinas\npdfjs-spread-none-button-label = Una pachina nomás\npdfjs-spread-odd-button =\n    .title = Mostrar vista de pachinas, con as impars a la zurda\npdfjs-spread-odd-button-label = Doble pachina, impar a la zurda\npdfjs-spread-even-button =\n    .title = Amostrar vista de pachinas, con as pars a la zurda\npdfjs-spread-even-button-label = Doble pachina, para a la zurda\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Propiedatz d'o documento...\npdfjs-document-properties-button-label = Propiedatz d'o documento...\npdfjs-document-properties-file-name = Nombre de fichero:\npdfjs-document-properties-file-size = Grandaria d'o fichero:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Titol:\npdfjs-document-properties-author = Autor:\npdfjs-document-properties-subject = Afer:\npdfjs-document-properties-keywords = Parolas clau:\npdfjs-document-properties-creation-date = Calendata de creyación:\npdfjs-document-properties-modification-date = Calendata de modificación:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Creyador:\npdfjs-document-properties-producer = Creyador de PDF:\npdfjs-document-properties-version = Versión de PDF:\npdfjs-document-properties-page-count = Numero de pachinas:\npdfjs-document-properties-page-size = Mida de pachina:\npdfjs-document-properties-page-size-unit-inches = pulgadas\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = vertical\npdfjs-document-properties-page-size-orientation-landscape = horizontal\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Carta\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } x { $height } { $unit } { $orientation }\npdfjs-document-properties-page-size-dimension-name-string = { $width } x { $height } { $unit } { $name }, { $orientation }\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Vista web rapida:\npdfjs-document-properties-linearized-yes = Sí\npdfjs-document-properties-linearized-no = No\npdfjs-document-properties-close-button = Zarrar\n\n## Print\n\npdfjs-print-progress-message = Se ye preparando la documentación pa imprentar…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Cancelar\npdfjs-printing-not-supported = Pare cuenta: Iste navegador no maneya totalment as impresions.\npdfjs-printing-not-ready = Aviso: Encara no se ha cargau completament o PDF ta imprentar-lo.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Amostrar u amagar a barra lateral\npdfjs-toggle-sidebar-notification-button =\n    .title = Cambiar barra lateral (lo documento contiene esquema/adchuntos/capas)\npdfjs-toggle-sidebar-button-label = Amostrar a barra lateral\npdfjs-document-outline-button =\n    .title = Amostrar esquema d'o documento (fer doble clic pa expandir/compactar totz los items)\npdfjs-document-outline-button-label = Esquema d'o documento\npdfjs-attachments-button =\n    .title = Amostrar os adchuntos\npdfjs-attachments-button-label = Adchuntos\npdfjs-layers-button =\n    .title = Amostrar capas (doble clic para reiniciar totas las capas a lo estau per defecto)\npdfjs-layers-button-label = Capas\npdfjs-thumbs-button =\n    .title = Amostrar as miniaturas\npdfjs-thumbs-button-label = Miniaturas\npdfjs-findbar-button =\n    .title = Trobar en o documento\npdfjs-findbar-button-label = Trobar\npdfjs-additional-layers = Capas adicionals\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Pachina { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatura d'a pachina { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Trobar\n    .placeholder = Trobar en o documento…\npdfjs-find-previous-button =\n    .title = Trobar l'anterior coincidencia d'a frase\npdfjs-find-previous-button-label = Anterior\npdfjs-find-next-button =\n    .title = Trobar a siguient coincidencia d'a frase\npdfjs-find-next-button-label = Siguient\npdfjs-find-highlight-checkbox = Resaltar-lo tot\npdfjs-find-match-case-checkbox-label = Coincidencia de mayusclas/minusclas\npdfjs-find-entire-word-checkbox-label = Parolas completas\npdfjs-find-reached-top = S'ha plegau a l'inicio d'o documento, se contina dende baixo\npdfjs-find-reached-bottom = S'ha plegau a la fin d'o documento, se contina dende alto\npdfjs-find-not-found = No s'ha trobau a frase\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Amplaria d'a pachina\npdfjs-page-scale-fit = Achuste d'a pachina\npdfjs-page-scale-auto = Grandaria automatica\npdfjs-page-scale-actual = Grandaria actual\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = S'ha produciu una error en cargar o PDF.\npdfjs-invalid-file-error = O PDF no ye valido u ye estorbau.\npdfjs-missing-file-error = No i ha fichero PDF.\npdfjs-unexpected-response-error = Respuesta a lo servicio inasperada.\npdfjs-rendering-error = Ha ocurriu una error en renderizar a pachina.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Anotación { $type }]\n\n## Password\n\npdfjs-password-label = Introduzca a clau ta ubrir iste fichero PDF.\npdfjs-password-invalid = Clau invalida. Torna a intentar-lo.\npdfjs-password-ok-button = Acceptar\npdfjs-password-cancel-button = Cancelar\npdfjs-web-fonts-disabled = As fuents web son desactivadas: no se puet incrustar fichers PDF.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/ar/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = الصفحة السابقة\npdfjs-previous-button-label = السابقة\npdfjs-next-button =\n    .title = الصفحة التالية\npdfjs-next-button-label = التالية\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = صفحة\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = من { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } من { $pagesCount })\npdfjs-zoom-out-button =\n    .title = بعّد\npdfjs-zoom-out-button-label = بعّد\npdfjs-zoom-in-button =\n    .title = قرّب\npdfjs-zoom-in-button-label = قرّب\npdfjs-zoom-select =\n    .title = التقريب\npdfjs-presentation-mode-button =\n    .title = انتقل لوضع العرض التقديمي\npdfjs-presentation-mode-button-label = وضع العرض التقديمي\npdfjs-open-file-button =\n    .title = افتح ملفًا\npdfjs-open-file-button-label = افتح\npdfjs-print-button =\n    .title = اطبع\npdfjs-print-button-label = اطبع\npdfjs-save-button =\n    .title = احفظ\npdfjs-save-button-label = احفظ\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = نزّل\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = نزّل\npdfjs-bookmark-button =\n    .title = الصفحة الحالية (عرض URL من الصفحة الحالية)\npdfjs-bookmark-button-label = الصفحة الحالية\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = الأدوات\npdfjs-tools-button-label = الأدوات\npdfjs-first-page-button =\n    .title = انتقل إلى الصفحة الأولى\npdfjs-first-page-button-label = انتقل إلى الصفحة الأولى\npdfjs-last-page-button =\n    .title = انتقل إلى الصفحة الأخيرة\npdfjs-last-page-button-label = انتقل إلى الصفحة الأخيرة\npdfjs-page-rotate-cw-button =\n    .title = أدر باتجاه عقارب الساعة\npdfjs-page-rotate-cw-button-label = أدر باتجاه عقارب الساعة\npdfjs-page-rotate-ccw-button =\n    .title = أدر بعكس اتجاه عقارب الساعة\npdfjs-page-rotate-ccw-button-label = أدر بعكس اتجاه عقارب الساعة\npdfjs-cursor-text-select-tool-button =\n    .title = فعّل أداة اختيار النص\npdfjs-cursor-text-select-tool-button-label = أداة اختيار النص\npdfjs-cursor-hand-tool-button =\n    .title = فعّل أداة اليد\npdfjs-cursor-hand-tool-button-label = أداة اليد\npdfjs-scroll-page-button =\n    .title = استخدم تمرير الصفحة\npdfjs-scroll-page-button-label = تمرير الصفحة\npdfjs-scroll-vertical-button =\n    .title = استخدم التمرير الرأسي\npdfjs-scroll-vertical-button-label = التمرير الرأسي\npdfjs-scroll-horizontal-button =\n    .title = استخدم التمرير الأفقي\npdfjs-scroll-horizontal-button-label = التمرير الأفقي\npdfjs-scroll-wrapped-button =\n    .title = استخدم التمرير الملتف\npdfjs-scroll-wrapped-button-label = التمرير الملتف\npdfjs-spread-none-button =\n    .title = لا تدمج هوامش الصفحات مع بعضها البعض\npdfjs-spread-none-button-label = بلا هوامش\npdfjs-spread-odd-button =\n    .title = ادمج هوامش الصفحات الفردية\npdfjs-spread-odd-button-label = هوامش الصفحات الفردية\npdfjs-spread-even-button =\n    .title = ادمج هوامش الصفحات الزوجية\npdfjs-spread-even-button-label = هوامش الصفحات الزوجية\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = خصائص المستند…\npdfjs-document-properties-button-label = خصائص المستند…\npdfjs-document-properties-file-name = اسم الملف:\npdfjs-document-properties-file-size = حجم الملف:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } ك.بايت ({ $size_b } بايت)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } م.بايت ({ $size_b } بايت)\npdfjs-document-properties-title = العنوان:\npdfjs-document-properties-author = المؤلف:\npdfjs-document-properties-subject = الموضوع:\npdfjs-document-properties-keywords = الكلمات الأساسية:\npdfjs-document-properties-creation-date = تاريخ الإنشاء:\npdfjs-document-properties-modification-date = تاريخ التعديل:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }، { $time }\npdfjs-document-properties-creator = المنشئ:\npdfjs-document-properties-producer = منتج PDF:\npdfjs-document-properties-version = إصدارة PDF:\npdfjs-document-properties-page-count = عدد الصفحات:\npdfjs-document-properties-page-size = مقاس الورقة:\npdfjs-document-properties-page-size-unit-inches = بوصة\npdfjs-document-properties-page-size-unit-millimeters = ملم\npdfjs-document-properties-page-size-orientation-portrait = طوليّ\npdfjs-document-properties-page-size-orientation-landscape = عرضيّ\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = خطاب\npdfjs-document-properties-page-size-name-legal = قانونيّ\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = ‏{ $width } × ‏{ $height } ‏{ $unit } (‏{ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = ‏{ $width } × ‏{ $height } ‏{ $unit } (‏{ $name }، { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = العرض السريع عبر الوِب:\npdfjs-document-properties-linearized-yes = نعم\npdfjs-document-properties-linearized-no = لا\npdfjs-document-properties-close-button = أغلق\n\n## Print\n\npdfjs-print-progress-message = يُحضّر المستند للطباعة…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }٪\npdfjs-print-progress-close-button = ألغِ\npdfjs-printing-not-supported = تحذير: لا يدعم هذا المتصفح الطباعة بشكل كامل.\npdfjs-printing-not-ready = تحذير: ملف PDF لم يُحمّل كاملًا للطباعة.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = بدّل ظهور الشريط الجانبي\npdfjs-toggle-sidebar-notification-button =\n    .title = بدّل ظهور الشريط الجانبي (يحتوي المستند على مخطط أو مرفقات أو طبقات)\npdfjs-toggle-sidebar-button-label = بدّل ظهور الشريط الجانبي\npdfjs-document-outline-button =\n    .title = اعرض فهرس المستند (نقر مزدوج لتمديد أو تقليص كل العناصر)\npdfjs-document-outline-button-label = مخطط المستند\npdfjs-attachments-button =\n    .title = اعرض المرفقات\npdfjs-attachments-button-label = المُرفقات\npdfjs-layers-button =\n    .title = اعرض الطبقات (انقر مرتين لتصفير كل الطبقات إلى الحالة المبدئية)\npdfjs-layers-button-label = ‏‏الطبقات\npdfjs-thumbs-button =\n    .title = اعرض مُصغرات\npdfjs-thumbs-button-label = مُصغّرات\npdfjs-current-outline-item-button =\n    .title = ابحث عن عنصر المخطّط التفصيلي الحالي\npdfjs-current-outline-item-button-label = عنصر المخطّط التفصيلي الحالي\npdfjs-findbar-button =\n    .title = ابحث في المستند\npdfjs-findbar-button-label = ابحث\npdfjs-additional-layers = الطبقات الإضافية\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = صفحة { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = مصغّرة صفحة { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = ابحث\n    .placeholder = ابحث في المستند…\npdfjs-find-previous-button =\n    .title = ابحث عن التّواجد السّابق للعبارة\npdfjs-find-previous-button-label = السابق\npdfjs-find-next-button =\n    .title = ابحث عن التّواجد التّالي للعبارة\npdfjs-find-next-button-label = التالي\npdfjs-find-highlight-checkbox = أبرِز الكل\npdfjs-find-match-case-checkbox-label = طابق حالة الأحرف\npdfjs-find-match-diacritics-checkbox-label = طابِق الحركات\npdfjs-find-entire-word-checkbox-label = كلمات كاملة\npdfjs-find-reached-top = تابعت من الأسفل بعدما وصلت إلى بداية المستند\npdfjs-find-reached-bottom = تابعت من الأعلى بعدما وصلت إلى نهاية المستند\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [zero] لا  مطابقة\n        [one] { $current } من أصل { $total } مطابقة\n        [two] { $current } من أصل { $total } مطابقة\n        [few] { $current } من أصل { $total } مطابقة\n        [many] { $current } من أصل { $total } مطابقة\n       *[other] { $current } من أصل { $total } مطابقة\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [zero] { $limit } مطابقة\n        [one] أكثر من { $limit } مطابقة\n        [two] أكثر من { $limit } مطابقة\n        [few] أكثر من { $limit } مطابقة\n        [many] أكثر من { $limit } مطابقة\n       *[other] أكثر من { $limit } مطابقات\n    }\npdfjs-find-not-found = لا وجود للعبارة\n\n## Predefined zoom values\n\npdfjs-page-scale-width = عرض الصفحة\npdfjs-page-scale-fit = ملائمة الصفحة\npdfjs-page-scale-auto = تقريب تلقائي\npdfjs-page-scale-actual = الحجم الفعلي\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }٪\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = صفحة { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = حدث عطل أثناء تحميل ملف PDF.\npdfjs-invalid-file-error = ملف PDF تالف أو غير صحيح.\npdfjs-missing-file-error = ملف PDF غير موجود.\npdfjs-unexpected-response-error = استجابة خادوم غير متوقعة.\npdfjs-rendering-error = حدث خطأ أثناء عرض الصفحة.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }، { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [تعليق { $type }]\n\n## Password\n\npdfjs-password-label = أدخل لكلمة السر لفتح هذا الملف.\npdfjs-password-invalid = كلمة سر خطأ. من فضلك أعد المحاولة.\npdfjs-password-ok-button = حسنا\npdfjs-password-cancel-button = ألغِ\npdfjs-web-fonts-disabled = خطوط الوب مُعطّلة: تعذّر استخدام خطوط PDF المُضمّنة.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = نص\npdfjs-editor-free-text-button-label = نص\npdfjs-editor-ink-button =\n    .title = ارسم\npdfjs-editor-ink-button-label = ارسم\npdfjs-editor-stamp-button =\n    .title = أضِف أو حرّر الصور\npdfjs-editor-stamp-button-label = أضِف أو حرّر الصور\npdfjs-editor-highlight-button =\n    .title = أبرِز\npdfjs-editor-highlight-button-label = أبرِز\npdfjs-highlight-floating-button =\n    .title = أبرِز\npdfjs-highlight-floating-button1 =\n    .title = أبرِز\n    .aria-label = أبرِز\npdfjs-highlight-floating-button-label = أبرِز\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = أزِل الرسم\npdfjs-editor-remove-freetext-button =\n    .title = أزِل النص\npdfjs-editor-remove-stamp-button =\n    .title = أزِل الصورة\npdfjs-editor-remove-highlight-button =\n    .title = أزِل الإبراز\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = اللون\npdfjs-editor-free-text-size-input = الحجم\npdfjs-editor-ink-color-input = اللون\npdfjs-editor-ink-thickness-input = السماكة\npdfjs-editor-ink-opacity-input = العتامة\npdfjs-editor-stamp-add-image-button =\n    .title = أضِف صورة\npdfjs-editor-stamp-add-image-button-label = أضِف صورة\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = السماكة\npdfjs-editor-free-highlight-thickness-title =\n    .title = غيّر السُمك عند إبراز عناصر أُخرى غير النص\npdfjs-free-text =\n    .aria-label = محرِّر النص\npdfjs-free-text-default-content = ابدأ الكتابة…\npdfjs-ink =\n    .aria-label = محرِّر الرسم\npdfjs-ink-canvas =\n    .aria-label = صورة أنشأها المستخدم\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = نص بديل\npdfjs-editor-alt-text-edit-button-label = تحرير النص البديل\npdfjs-editor-alt-text-dialog-label = اختر خيار\npdfjs-editor-alt-text-dialog-description = يساعد النص البديل عندما لا يتمكن الأشخاص من رؤية الصورة أو عندما لا يتم تحميلها.\npdfjs-editor-alt-text-add-description-label = أضِف وصف\npdfjs-editor-alt-text-add-description-description = استهدف جملتين تصفان الموضوع أو الإعداد أو الإجراءات.\npdfjs-editor-alt-text-mark-decorative-label = علّمها على أنها زخرفية\npdfjs-editor-alt-text-mark-decorative-description = يُستخدم هذا في الصور المزخرفة، مثل الحدود أو العلامات المائية.\npdfjs-editor-alt-text-cancel-button = ألغِ\npdfjs-editor-alt-text-save-button = احفظ\npdfjs-editor-alt-text-decorative-tooltip = عُلّمت على أنها زخرفية\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = على سبيل المثال، \"يجلس شاب على الطاولة لتناول وجبة\"\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = الزاوية اليُسرى العُليا — غيّر الحجم\npdfjs-editor-resizer-label-top-middle = أعلى الوسط - غيّر الحجم\npdfjs-editor-resizer-label-top-right = الزاوية اليُمنى العُليا - غيّر الحجم\npdfjs-editor-resizer-label-middle-right = اليمين الأوسط - غيّر الحجم\npdfjs-editor-resizer-label-bottom-right = الزاوية اليُمنى السُفلى - غيّر الحجم\npdfjs-editor-resizer-label-bottom-middle = أسفل الوسط - غيّر الحجم\npdfjs-editor-resizer-label-bottom-left = الزاوية اليُسرى السُفلية - غيّر الحجم\npdfjs-editor-resizer-label-middle-left = مُنتصف اليسار - غيّر الحجم\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = أبرِز اللون\npdfjs-editor-colorpicker-button =\n    .title = غيّر اللون\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = اختيارات الألوان\npdfjs-editor-colorpicker-yellow =\n    .title = أصفر\npdfjs-editor-colorpicker-green =\n    .title = أخضر\npdfjs-editor-colorpicker-blue =\n    .title = أزرق\npdfjs-editor-colorpicker-pink =\n    .title = وردي\npdfjs-editor-colorpicker-red =\n    .title = أحمر\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = أظهِر الكل\npdfjs-editor-highlight-show-all-button =\n    .title = أظهِر الكل\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/ast/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Páxina anterior\npdfjs-previous-button-label = Anterior\npdfjs-next-button =\n    .title = Páxina siguiente\npdfjs-next-button-label = Siguiente\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Páxina\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = de { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Alloñar\npdfjs-zoom-out-button-label = Alloña\npdfjs-zoom-in-button =\n    .title = Averar\npdfjs-zoom-in-button-label = Avera\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Cambiar al mou de presentación\npdfjs-presentation-mode-button-label = Mou de presentación\npdfjs-open-file-button-label = Abrir\npdfjs-print-button =\n    .title = Imprentar\npdfjs-print-button-label = Imprentar\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Ferramientes\npdfjs-tools-button-label = Ferramientes\npdfjs-first-page-button-label = Dir a la primer páxina\npdfjs-last-page-button-label = Dir a la última páxina\npdfjs-page-rotate-cw-button =\n    .title = Voltia a la derecha\npdfjs-page-rotate-cw-button-label = Voltiar a la derecha\npdfjs-page-rotate-ccw-button =\n    .title = Voltia a la esquierda\npdfjs-page-rotate-ccw-button-label = Voltiar a la esquierda\npdfjs-cursor-text-select-tool-button =\n    .title = Activa la ferramienta d'esbilla de testu\npdfjs-cursor-text-select-tool-button-label = Ferramienta d'esbilla de testu\npdfjs-cursor-hand-tool-button =\n    .title = Activa la ferramienta de mano\npdfjs-cursor-hand-tool-button-label = Ferramienta de mano\npdfjs-scroll-vertical-button =\n    .title = Usa'l desplazamientu vertical\npdfjs-scroll-vertical-button-label = Desplazamientu vertical\npdfjs-scroll-horizontal-button =\n    .title = Usa'l desplazamientu horizontal\npdfjs-scroll-horizontal-button-label = Desplazamientu horizontal\npdfjs-scroll-wrapped-button =\n    .title = Usa'l desplazamientu continuu\npdfjs-scroll-wrapped-button-label = Desplazamientu continuu\npdfjs-spread-none-button-label = Fueyes individuales\npdfjs-spread-odd-button-label = Fueyes pares\npdfjs-spread-even-button-label = Fueyes impares\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Propiedaes del documentu…\npdfjs-document-properties-button-label = Propiedaes del documentu…\npdfjs-document-properties-file-name = Nome del ficheru:\npdfjs-document-properties-file-size = Tamañu del ficheru:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Títulu:\npdfjs-document-properties-keywords = Pallabres clave:\npdfjs-document-properties-creation-date = Data de creación:\npdfjs-document-properties-modification-date = Data de modificación:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-producer = Productor del PDF:\npdfjs-document-properties-version = Versión del PDF:\npdfjs-document-properties-page-count = Númberu de páxines:\npdfjs-document-properties-page-size = Tamañu de páxina:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = vertical\npdfjs-document-properties-page-size-orientation-landscape = horizontal\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Vista web rápida:\npdfjs-document-properties-linearized-yes = Sí\npdfjs-document-properties-linearized-no = Non\npdfjs-document-properties-close-button = Zarrar\n\n## Print\n\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Encaboxar\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Alternar la barra llateral\npdfjs-attachments-button =\n    .title = Amosar los axuntos\npdfjs-attachments-button-label = Axuntos\npdfjs-layers-button-label = Capes\npdfjs-thumbs-button =\n    .title = Amosar les miniatures\npdfjs-thumbs-button-label = Miniatures\npdfjs-findbar-button-label = Atopar\npdfjs-additional-layers = Capes adicionales\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Páxina { $page }\n\n## Find panel button title and messages\n\npdfjs-find-previous-button-label = Anterior\npdfjs-find-next-button-label = Siguiente\npdfjs-find-entire-word-checkbox-label = Pallabres completes\npdfjs-find-reached-top = Algamóse'l comienzu de la páxina, síguese dende abaxo\npdfjs-find-reached-bottom = Algamóse la fin del documentu, síguese dende arriba\n\n## Predefined zoom values\n\npdfjs-page-scale-auto = Zoom automáticu\npdfjs-page-scale-actual = Tamañu real\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Páxina { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Asocedió un fallu mentanto se cargaba'l PDF.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n\n## Password\n\npdfjs-password-ok-button = Aceptar\npdfjs-password-cancel-button = Encaboxar\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/az/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Əvvəlki səhifə\npdfjs-previous-button-label = Əvvəlkini tap\npdfjs-next-button =\n    .title = Növbəti səhifə\npdfjs-next-button-label = İrəli\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Səhifə\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = / { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } / { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Uzaqlaş\npdfjs-zoom-out-button-label = Uzaqlaş\npdfjs-zoom-in-button =\n    .title = Yaxınlaş\npdfjs-zoom-in-button-label = Yaxınlaş\npdfjs-zoom-select =\n    .title = Yaxınlaşdırma\npdfjs-presentation-mode-button =\n    .title = Təqdimat Rejiminə Keç\npdfjs-presentation-mode-button-label = Təqdimat Rejimi\npdfjs-open-file-button =\n    .title = Fayl Aç\npdfjs-open-file-button-label = Aç\npdfjs-print-button =\n    .title = Yazdır\npdfjs-print-button-label = Yazdır\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Alətlər\npdfjs-tools-button-label = Alətlər\npdfjs-first-page-button =\n    .title = İlk Səhifəyə get\npdfjs-first-page-button-label = İlk Səhifəyə get\npdfjs-last-page-button =\n    .title = Son Səhifəyə get\npdfjs-last-page-button-label = Son Səhifəyə get\npdfjs-page-rotate-cw-button =\n    .title = Saat İstiqamətində Fırlat\npdfjs-page-rotate-cw-button-label = Saat İstiqamətində Fırlat\npdfjs-page-rotate-ccw-button =\n    .title = Saat İstiqamətinin Əksinə Fırlat\npdfjs-page-rotate-ccw-button-label = Saat İstiqamətinin Əksinə Fırlat\npdfjs-cursor-text-select-tool-button =\n    .title = Yazı seçmə alətini aktivləşdir\npdfjs-cursor-text-select-tool-button-label = Yazı seçmə aləti\npdfjs-cursor-hand-tool-button =\n    .title = Əl alətini aktivləşdir\npdfjs-cursor-hand-tool-button-label = Əl aləti\npdfjs-scroll-vertical-button =\n    .title = Şaquli sürüşdürmə işlət\npdfjs-scroll-vertical-button-label = Şaquli sürüşdürmə\npdfjs-scroll-horizontal-button =\n    .title = Üfüqi sürüşdürmə işlət\npdfjs-scroll-horizontal-button-label = Üfüqi sürüşdürmə\npdfjs-scroll-wrapped-button =\n    .title = Bükülü sürüşdürmə işlət\npdfjs-scroll-wrapped-button-label = Bükülü sürüşdürmə\npdfjs-spread-none-button =\n    .title = Yan-yana birləşdirilmiş səhifələri işlətmə\npdfjs-spread-none-button-label = Birləşdirmə\npdfjs-spread-odd-button =\n    .title = Yan-yana birləşdirilmiş səhifələri tək nömrəli səhifələrdən başlat\npdfjs-spread-odd-button-label = Tək nömrəli\npdfjs-spread-even-button =\n    .title = Yan-yana birləşdirilmiş səhifələri cüt nömrəli səhifələrdən başlat\npdfjs-spread-even-button-label = Cüt nömrəli\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Sənəd xüsusiyyətləri…\npdfjs-document-properties-button-label = Sənəd xüsusiyyətləri…\npdfjs-document-properties-file-name = Fayl adı:\npdfjs-document-properties-file-size = Fayl ölçüsü:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bayt)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bayt)\npdfjs-document-properties-title = Başlık:\npdfjs-document-properties-author = Müəllif:\npdfjs-document-properties-subject = Mövzu:\npdfjs-document-properties-keywords = Açar sözlər:\npdfjs-document-properties-creation-date = Yaradılış Tarixi :\npdfjs-document-properties-modification-date = Dəyişdirilmə Tarixi :\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Yaradan:\npdfjs-document-properties-producer = PDF yaradıcısı:\npdfjs-document-properties-version = PDF versiyası:\npdfjs-document-properties-page-count = Səhifə sayı:\npdfjs-document-properties-page-size = Səhifə Ölçüsü:\npdfjs-document-properties-page-size-unit-inches = inç\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = portret\npdfjs-document-properties-page-size-orientation-landscape = albom\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Məktub\npdfjs-document-properties-page-size-name-legal = Hüquqi\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Fast Web View:\npdfjs-document-properties-linearized-yes = Bəli\npdfjs-document-properties-linearized-no = Xeyr\npdfjs-document-properties-close-button = Qapat\n\n## Print\n\npdfjs-print-progress-message = Sənəd çap üçün hazırlanır…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Ləğv et\npdfjs-printing-not-supported = Xəbərdarlıq: Çap bu səyyah tərəfindən tam olaraq dəstəklənmir.\npdfjs-printing-not-ready = Xəbərdarlıq: PDF çap üçün tam yüklənməyib.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Yan Paneli Aç/Bağla\npdfjs-toggle-sidebar-notification-button =\n    .title = Yan paneli çevir (sənəddə icmal/bağlamalar/laylar mövcuddur)\npdfjs-toggle-sidebar-button-label = Yan Paneli Aç/Bağla\npdfjs-document-outline-button =\n    .title = Sənədin eskizini göstər (bütün bəndləri açmaq/yığmaq üçün iki dəfə klikləyin)\npdfjs-document-outline-button-label = Sənəd strukturu\npdfjs-attachments-button =\n    .title = Bağlamaları göstər\npdfjs-attachments-button-label = Bağlamalar\npdfjs-layers-button =\n    .title = Layları göstər (bütün layları ilkin halına sıfırlamaq üçün iki dəfə klikləyin)\npdfjs-layers-button-label = Laylar\npdfjs-thumbs-button =\n    .title = Kiçik şəkilləri göstər\npdfjs-thumbs-button-label = Kiçik şəkillər\npdfjs-findbar-button =\n    .title = Sənəddə Tap\npdfjs-findbar-button-label = Tap\npdfjs-additional-layers = Əlavə laylar\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Səhifə{ $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = { $page } səhifəsinin kiçik vəziyyəti\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Tap\n    .placeholder = Sənəddə tap…\npdfjs-find-previous-button =\n    .title = Bir öncəki uyğun gələn sözü tapır\npdfjs-find-previous-button-label = Geri\npdfjs-find-next-button =\n    .title = Bir sonrakı uyğun gələn sözü tapır\npdfjs-find-next-button-label = İrəli\npdfjs-find-highlight-checkbox = İşarələ\npdfjs-find-match-case-checkbox-label = Böyük/kiçik hərfə həssaslıq\npdfjs-find-entire-word-checkbox-label = Tam sözlər\npdfjs-find-reached-top = Sənədin yuxarısına çatdı, aşağıdan davam edir\npdfjs-find-reached-bottom = Sənədin sonuna çatdı, yuxarıdan davam edir\npdfjs-find-not-found = Uyğunlaşma tapılmadı\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Səhifə genişliyi\npdfjs-page-scale-fit = Səhifəni sığdır\npdfjs-page-scale-auto = Avtomatik yaxınlaşdır\npdfjs-page-scale-actual = Hazırkı Həcm\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = PDF yüklenərkən bir səhv yarandı.\npdfjs-invalid-file-error = Səhv və ya zədələnmiş olmuş PDF fayl.\npdfjs-missing-file-error = PDF fayl yoxdur.\npdfjs-unexpected-response-error = Gözlənilməz server cavabı.\npdfjs-rendering-error = Səhifə göstərilərkən səhv yarandı.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Annotasiyası]\n\n## Password\n\npdfjs-password-label = Bu PDF faylı açmaq üçün parolu daxil edin.\npdfjs-password-invalid = Parol səhvdir. Bir daha yoxlayın.\npdfjs-password-ok-button = Tamam\npdfjs-password-cancel-button = Ləğv et\npdfjs-web-fonts-disabled = Web Şriftlər söndürülüb: yerləşdirilmiş PDF şriftlərini istifadə etmək mümkün deyil.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/be/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Папярэдняя старонка\npdfjs-previous-button-label = Папярэдняя\npdfjs-next-button =\n    .title = Наступная старонка\npdfjs-next-button-label = Наступная\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Старонка\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = з { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } з { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Паменшыць\npdfjs-zoom-out-button-label = Паменшыць\npdfjs-zoom-in-button =\n    .title = Павялічыць\npdfjs-zoom-in-button-label = Павялічыць\npdfjs-zoom-select =\n    .title = Павялічэнне тэксту\npdfjs-presentation-mode-button =\n    .title = Пераключыцца ў рэжым паказу\npdfjs-presentation-mode-button-label = Рэжым паказу\npdfjs-open-file-button =\n    .title = Адкрыць файл\npdfjs-open-file-button-label = Адкрыць\npdfjs-print-button =\n    .title = Друкаваць\npdfjs-print-button-label = Друкаваць\npdfjs-save-button =\n    .title = Захаваць\npdfjs-save-button-label = Захаваць\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Сцягнуць\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Сцягнуць\npdfjs-bookmark-button =\n    .title = Дзейная старонка (паглядзець URL-адрас з дзейнай старонкі)\npdfjs-bookmark-button-label = Цяперашняя старонка\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Адкрыць у праграме\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Адкрыць у праграме\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Прылады\npdfjs-tools-button-label = Прылады\npdfjs-first-page-button =\n    .title = Перайсці на першую старонку\npdfjs-first-page-button-label = Перайсці на першую старонку\npdfjs-last-page-button =\n    .title = Перайсці на апошнюю старонку\npdfjs-last-page-button-label = Перайсці на апошнюю старонку\npdfjs-page-rotate-cw-button =\n    .title = Павярнуць па сонцу\npdfjs-page-rotate-cw-button-label = Павярнуць па сонцу\npdfjs-page-rotate-ccw-button =\n    .title = Павярнуць супраць сонца\npdfjs-page-rotate-ccw-button-label = Павярнуць супраць сонца\npdfjs-cursor-text-select-tool-button =\n    .title = Уключыць прыладу выбару тэксту\npdfjs-cursor-text-select-tool-button-label = Прылада выбару тэксту\npdfjs-cursor-hand-tool-button =\n    .title = Уключыць ручную прыладу\npdfjs-cursor-hand-tool-button-label = Ручная прылада\npdfjs-scroll-page-button =\n    .title = Выкарыстоўваць пракрутку старонкi\npdfjs-scroll-page-button-label = Пракрутка старонкi\npdfjs-scroll-vertical-button =\n    .title = Ужываць вертыкальную пракрутку\npdfjs-scroll-vertical-button-label = Вертыкальная пракрутка\npdfjs-scroll-horizontal-button =\n    .title = Ужываць гарызантальную пракрутку\npdfjs-scroll-horizontal-button-label = Гарызантальная пракрутка\npdfjs-scroll-wrapped-button =\n    .title = Ужываць маштабавальную пракрутку\npdfjs-scroll-wrapped-button-label = Маштабавальная пракрутка\npdfjs-spread-none-button =\n    .title = Не выкарыстоўваць разгорнутыя старонкі\npdfjs-spread-none-button-label = Без разгорнутых старонак\npdfjs-spread-odd-button =\n    .title = Разгорнутыя старонкі пачынаючы з няцотных нумароў\npdfjs-spread-odd-button-label = Няцотныя старонкі злева\npdfjs-spread-even-button =\n    .title = Разгорнутыя старонкі пачынаючы з цотных нумароў\npdfjs-spread-even-button-label = Цотныя старонкі злева\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Уласцівасці дакумента…\npdfjs-document-properties-button-label = Уласцівасці дакумента…\npdfjs-document-properties-file-name = Назва файла:\npdfjs-document-properties-file-size = Памер файла:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } КБ ({ $size_b } байт)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } МБ ({ $size_b } байт)\npdfjs-document-properties-title = Загаловак:\npdfjs-document-properties-author = Аўтар:\npdfjs-document-properties-subject = Тэма:\npdfjs-document-properties-keywords = Ключавыя словы:\npdfjs-document-properties-creation-date = Дата стварэння:\npdfjs-document-properties-modification-date = Дата змянення:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Стваральнік:\npdfjs-document-properties-producer = Вырабнік PDF:\npdfjs-document-properties-version = Версія PDF:\npdfjs-document-properties-page-count = Колькасць старонак:\npdfjs-document-properties-page-size = Памер старонкі:\npdfjs-document-properties-page-size-unit-inches = цаляў\npdfjs-document-properties-page-size-unit-millimeters = мм\npdfjs-document-properties-page-size-orientation-portrait = кніжная\npdfjs-document-properties-page-size-orientation-landscape = альбомная\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Хуткі прагляд у Інтэрнэце:\npdfjs-document-properties-linearized-yes = Так\npdfjs-document-properties-linearized-no = Не\npdfjs-document-properties-close-button = Закрыць\n\n## Print\n\npdfjs-print-progress-message = Падрыхтоўка дакумента да друку…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Скасаваць\npdfjs-printing-not-supported = Папярэджанне: друк не падтрымліваецца цалкам гэтым браўзерам.\npdfjs-printing-not-ready = Увага: PDF не сцягнуты цалкам для друкавання.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Паказаць/схаваць бакавую панэль\npdfjs-toggle-sidebar-notification-button =\n    .title = Паказаць/схаваць бакавую панэль (дакумент мае змест/укладанні/пласты)\npdfjs-toggle-sidebar-button-label = Паказаць/схаваць бакавую панэль\npdfjs-document-outline-button =\n    .title = Паказаць структуру дакумента (двайная пстрычка, каб разгарнуць /згарнуць усе элементы)\npdfjs-document-outline-button-label = Структура дакумента\npdfjs-attachments-button =\n    .title = Паказаць далучэнні\npdfjs-attachments-button-label = Далучэнні\npdfjs-layers-button =\n    .title = Паказаць пласты (націсніце двойчы, каб скінуць усе пласты да прадвызначанага стану)\npdfjs-layers-button-label = Пласты\npdfjs-thumbs-button =\n    .title = Паказ мініяцюр\npdfjs-thumbs-button-label = Мініяцюры\npdfjs-current-outline-item-button =\n    .title = Знайсці бягучы элемент структуры\npdfjs-current-outline-item-button-label = Бягучы элемент структуры\npdfjs-findbar-button =\n    .title = Пошук у дакуменце\npdfjs-findbar-button-label = Знайсці\npdfjs-additional-layers = Дадатковыя пласты\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Старонка { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Мініяцюра старонкі { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Шукаць\n    .placeholder = Шукаць у дакуменце…\npdfjs-find-previous-button =\n    .title = Знайсці папярэдні выпадак выразу\npdfjs-find-previous-button-label = Папярэдні\npdfjs-find-next-button =\n    .title = Знайсці наступны выпадак выразу\npdfjs-find-next-button-label = Наступны\npdfjs-find-highlight-checkbox = Падфарбаваць усе\npdfjs-find-match-case-checkbox-label = Адрозніваць вялікія/малыя літары\npdfjs-find-match-diacritics-checkbox-label = З улікам дыякрытык\npdfjs-find-entire-word-checkbox-label = Словы цалкам\npdfjs-find-reached-top = Дасягнуты пачатак дакумента, працяг з канца\npdfjs-find-reached-bottom = Дасягнуты канец дакумента, працяг з пачатку\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } з { $total } супадзенняў\n        [few] { $current } з { $total } супадзенняў\n       *[many] { $current } з { $total } супадзенняў\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Больш за { $limit } супадзенне\n        [few] Больш за { $limit } супадзенні\n       *[many] Больш за { $limit } супадзенняў\n    }\npdfjs-find-not-found = Выраз не знойдзены\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Шырыня старонкі\npdfjs-page-scale-fit = Уцісненне старонкі\npdfjs-page-scale-auto = Аўтаматычнае павелічэнне\npdfjs-page-scale-actual = Сапраўдны памер\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Старонка { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Здарылася памылка ў часе загрузкі PDF.\npdfjs-invalid-file-error = Няспраўны або пашкоджаны файл PDF.\npdfjs-missing-file-error = Адсутны файл PDF.\npdfjs-unexpected-response-error = Нечаканы адказ сервера.\npdfjs-rendering-error = Здарылася памылка падчас адлюстравання старонкі.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Annotation]\n\n## Password\n\npdfjs-password-label = Увядзіце пароль, каб адкрыць гэты файл PDF.\npdfjs-password-invalid = Нядзейсны пароль. Паспрабуйце зноў.\npdfjs-password-ok-button = Добра\npdfjs-password-cancel-button = Скасаваць\npdfjs-web-fonts-disabled = Шрыфты Сеціва забаронены: немагчыма ўжываць укладзеныя шрыфты PDF.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Тэкст\npdfjs-editor-free-text-button-label = Тэкст\npdfjs-editor-ink-button =\n    .title = Маляваць\npdfjs-editor-ink-button-label = Маляваць\npdfjs-editor-stamp-button =\n    .title = Дадаць або змяніць выявы\npdfjs-editor-stamp-button-label = Дадаць або змяніць выявы\npdfjs-editor-highlight-button =\n    .title = Вылучэнне\npdfjs-editor-highlight-button-label = Вылучэнне\npdfjs-highlight-floating-button =\n    .title = Вылучэнне\npdfjs-highlight-floating-button1 =\n    .title = Падфарбаваць\n    .aria-label = Падфарбаваць\npdfjs-highlight-floating-button-label = Падфарбаваць\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Выдаліць малюнак\npdfjs-editor-remove-freetext-button =\n    .title = Выдаліць тэкст\npdfjs-editor-remove-stamp-button =\n    .title = Выдаліць выяву\npdfjs-editor-remove-highlight-button =\n    .title = Выдаліць падфарбоўку\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Колер\npdfjs-editor-free-text-size-input = Памер\npdfjs-editor-ink-color-input = Колер\npdfjs-editor-ink-thickness-input = Таўшчыня\npdfjs-editor-ink-opacity-input = Непразрыстасць\npdfjs-editor-stamp-add-image-button =\n    .title = Дадаць выяву\npdfjs-editor-stamp-add-image-button-label = Дадаць выяву\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Таўшчыня\npdfjs-editor-free-highlight-thickness-title =\n    .title = Змяняць таўшчыню пры вылучэнні іншых элементаў, акрамя тэксту\npdfjs-free-text =\n    .aria-label = Тэкставы рэдактар\npdfjs-free-text-default-content = Пачніце набор тэксту…\npdfjs-ink =\n    .aria-label = Графічны рэдактар\npdfjs-ink-canvas =\n    .aria-label = Выява, створаная карыстальнікам\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Альтэрнатыўны тэкст\npdfjs-editor-alt-text-edit-button-label = Змяніць альтэрнатыўны тэкст\npdfjs-editor-alt-text-dialog-label = Выберыце варыянт\npdfjs-editor-alt-text-dialog-description = Альтэрнатыўны тэкст дапамагае, калі людзі не бачаць выяву або калі яна не загружаецца.\npdfjs-editor-alt-text-add-description-label = Дадаць апісанне\npdfjs-editor-alt-text-add-description-description = Старайцеся скласці 1-2 сказы, якія апісваюць прадмет, абстаноўку або дзеянні.\npdfjs-editor-alt-text-mark-decorative-label = Пазначыць як дэкаратыўны\npdfjs-editor-alt-text-mark-decorative-description = Выкарыстоўваецца для дэкаратыўных выяваў, такіх як рамкі або вадзяныя знакі.\npdfjs-editor-alt-text-cancel-button = Скасаваць\npdfjs-editor-alt-text-save-button = Захаваць\npdfjs-editor-alt-text-decorative-tooltip = Пазначаны як дэкаратыўны\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Напрыклад, «Малады чалавек садзіцца за стол есці»\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Верхні левы кут — змяніць памер\npdfjs-editor-resizer-label-top-middle = Уверсе пасярэдзіне — змяніць памер\npdfjs-editor-resizer-label-top-right = Верхні правы кут — змяніць памер\npdfjs-editor-resizer-label-middle-right = Пасярэдзіне справа — змяніць памер\npdfjs-editor-resizer-label-bottom-right = Правы ніжні кут — змяніць памер\npdfjs-editor-resizer-label-bottom-middle = Пасярэдзіне ўнізе — змяніць памер\npdfjs-editor-resizer-label-bottom-left = Левы ніжні кут — змяніць памер\npdfjs-editor-resizer-label-middle-left = Пасярэдзіне злева — змяніць памер\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Колер падфарбоўкі\npdfjs-editor-colorpicker-button =\n    .title = Змяніць колер\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Выбар колеру\npdfjs-editor-colorpicker-yellow =\n    .title = Жоўты\npdfjs-editor-colorpicker-green =\n    .title = Зялёны\npdfjs-editor-colorpicker-blue =\n    .title = Блакітны\npdfjs-editor-colorpicker-pink =\n    .title = Ружовы\npdfjs-editor-colorpicker-red =\n    .title = Чырвоны\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Паказаць усе\npdfjs-editor-highlight-show-all-button =\n    .title = Паказаць усе\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/bg/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Предишна страница\npdfjs-previous-button-label = Предишна\npdfjs-next-button =\n    .title = Следваща страница\npdfjs-next-button-label = Следваща\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Страница\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = от { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } от { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Намаляване\npdfjs-zoom-out-button-label = Намаляване\npdfjs-zoom-in-button =\n    .title = Увеличаване\npdfjs-zoom-in-button-label = Увеличаване\npdfjs-zoom-select =\n    .title = Мащабиране\npdfjs-presentation-mode-button =\n    .title = Превключване към режим на представяне\npdfjs-presentation-mode-button-label = Режим на представяне\npdfjs-open-file-button =\n    .title = Отваряне на файл\npdfjs-open-file-button-label = Отваряне\npdfjs-print-button =\n    .title = Отпечатване\npdfjs-print-button-label = Отпечатване\npdfjs-save-button =\n    .title = Запазване\npdfjs-save-button-label = Запазване\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Изтегляне\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Изтегляне\npdfjs-bookmark-button =\n    .title = Текуща страница (преглед на адреса на страницата)\npdfjs-bookmark-button-label = Текуща страница\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Отваряне в приложение\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Отваряне в приложение\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Инструменти\npdfjs-tools-button-label = Инструменти\npdfjs-first-page-button =\n    .title = Към първата страница\npdfjs-first-page-button-label = Към първата страница\npdfjs-last-page-button =\n    .title = Към последната страница\npdfjs-last-page-button-label = Към последната страница\npdfjs-page-rotate-cw-button =\n    .title = Завъртане по час. стрелка\npdfjs-page-rotate-cw-button-label = Завъртане по часовниковата стрелка\npdfjs-page-rotate-ccw-button =\n    .title = Завъртане обратно на час. стрелка\npdfjs-page-rotate-ccw-button-label = Завъртане обратно на часовниковата стрелка\npdfjs-cursor-text-select-tool-button =\n    .title = Включване на инструмента за избор на текст\npdfjs-cursor-text-select-tool-button-label = Инструмент за избор на текст\npdfjs-cursor-hand-tool-button =\n    .title = Включване на инструмента ръка\npdfjs-cursor-hand-tool-button-label = Инструмент ръка\npdfjs-scroll-page-button =\n    .title = Използване на плъзгане на страници\npdfjs-scroll-page-button-label = Плъзгане на страници\npdfjs-scroll-vertical-button =\n    .title = Използване на вертикално плъзгане\npdfjs-scroll-vertical-button-label = Вертикално плъзгане\npdfjs-scroll-horizontal-button =\n    .title = Използване на хоризонтално\npdfjs-scroll-horizontal-button-label = Хоризонтално плъзгане\npdfjs-scroll-wrapped-button =\n    .title = Използване на мащабируемо плъзгане\npdfjs-scroll-wrapped-button-label = Мащабируемо плъзгане\npdfjs-spread-none-button =\n    .title = Режимът на сдвояване е изключен\npdfjs-spread-none-button-label = Без сдвояване\npdfjs-spread-odd-button =\n    .title = Сдвояване, започвайки от нечетните страници\npdfjs-spread-odd-button-label = Нечетните отляво\npdfjs-spread-even-button =\n    .title = Сдвояване, започвайки от четните страници\npdfjs-spread-even-button-label = Четните отляво\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Свойства на документа…\npdfjs-document-properties-button-label = Свойства на документа…\npdfjs-document-properties-file-name = Име на файл:\npdfjs-document-properties-file-size = Големина на файл:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } КБ ({ $size_b } байта)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } МБ ({ $size_b } байта)\npdfjs-document-properties-title = Заглавие:\npdfjs-document-properties-author = Автор:\npdfjs-document-properties-subject = Тема:\npdfjs-document-properties-keywords = Ключови думи:\npdfjs-document-properties-creation-date = Дата на създаване:\npdfjs-document-properties-modification-date = Дата на промяна:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Създател:\npdfjs-document-properties-producer = PDF произведен от:\npdfjs-document-properties-version = Издание на PDF:\npdfjs-document-properties-page-count = Брой страници:\npdfjs-document-properties-page-size = Размер на страницата:\npdfjs-document-properties-page-size-unit-inches = инч\npdfjs-document-properties-page-size-unit-millimeters = мм\npdfjs-document-properties-page-size-orientation-portrait = портрет\npdfjs-document-properties-page-size-orientation-landscape = пейзаж\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Правни въпроси\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Бърз преглед:\npdfjs-document-properties-linearized-yes = Да\npdfjs-document-properties-linearized-no = Не\npdfjs-document-properties-close-button = Затваряне\n\n## Print\n\npdfjs-print-progress-message = Подготвяне на документа за отпечатване…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Отказ\npdfjs-printing-not-supported = Внимание: Този четец няма пълна поддръжка на отпечатване.\npdfjs-printing-not-ready = Внимание: Този PDF файл не е напълно зареден за печат.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Превключване на страничната лента\npdfjs-toggle-sidebar-notification-button =\n    .title = Превключване на страничната лента (документът има структура/прикачени файлове/слоеве)\npdfjs-toggle-sidebar-button-label = Превключване на страничната лента\npdfjs-document-outline-button =\n    .title = Показване на структурата на документа (двукратно щракване за свиване/разгъване на всичко)\npdfjs-document-outline-button-label = Структура на документа\npdfjs-attachments-button =\n    .title = Показване на притурките\npdfjs-attachments-button-label = Притурки\npdfjs-layers-button =\n    .title = Показване на слоевете (двукратно щракване за възстановяване на всички слоеве към състоянието по подразбиране)\npdfjs-layers-button-label = Слоеве\npdfjs-thumbs-button =\n    .title = Показване на миниатюрите\npdfjs-thumbs-button-label = Миниатюри\npdfjs-current-outline-item-button =\n    .title = Намиране на текущия елемент от структурата\npdfjs-current-outline-item-button-label = Текущ елемент от структурата\npdfjs-findbar-button =\n    .title = Намиране в документа\npdfjs-findbar-button-label = Търсене\npdfjs-additional-layers = Допълнителни слоеве\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Страница { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Миниатюра на страница { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Търсене\n    .placeholder = Търсене в документа…\npdfjs-find-previous-button =\n    .title = Намиране на предишно съвпадение на фразата\npdfjs-find-previous-button-label = Предишна\npdfjs-find-next-button =\n    .title = Намиране на следващо съвпадение на фразата\npdfjs-find-next-button-label = Следваща\npdfjs-find-highlight-checkbox = Открояване на всички\npdfjs-find-match-case-checkbox-label = Съвпадение на регистъра\npdfjs-find-match-diacritics-checkbox-label = Без производни букви\npdfjs-find-entire-word-checkbox-label = Цели думи\npdfjs-find-reached-top = Достигнато е началото на документа, продължаване от края\npdfjs-find-reached-bottom = Достигнат е краят на документа, продължаване от началото\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } от { $total } съвпадение\n       *[other] { $current } от { $total } съвпадения\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Повече от { $limit } съвпадение\n       *[other] Повече от { $limit } съвпадения\n    }\npdfjs-find-not-found = Фразата не е намерена\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Ширина на страницата\npdfjs-page-scale-fit = Вместване в страницата\npdfjs-page-scale-auto = Автоматично мащабиране\npdfjs-page-scale-actual = Действителен размер\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Страница { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Получи се грешка при зареждане на PDF-а.\npdfjs-invalid-file-error = Невалиден или повреден PDF файл.\npdfjs-missing-file-error = Липсващ PDF файл.\npdfjs-unexpected-response-error = Неочакван отговор от сървъра.\npdfjs-rendering-error = Грешка при изчертаване на страницата.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Анотация { $type }]\n\n## Password\n\npdfjs-password-label = Въведете парола за отваряне на този PDF файл.\npdfjs-password-invalid = Невалидна парола. Моля, опитайте отново.\npdfjs-password-ok-button = Добре\npdfjs-password-cancel-button = Отказ\npdfjs-web-fonts-disabled = Уеб-шрифтовете са забранени: разрешаване на използването на вградените PDF шрифтове.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Текст\npdfjs-editor-free-text-button-label = Текст\npdfjs-editor-ink-button =\n    .title = Рисуване\npdfjs-editor-ink-button-label = Рисуване\npdfjs-editor-stamp-button =\n    .title = Добавяне или променяне на изображения\npdfjs-editor-stamp-button-label = Добавяне или променяне на изображения\npdfjs-editor-remove-button =\n    .title = Премахване\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Премахване на рисунката\npdfjs-editor-remove-freetext-button =\n    .title = Премахване на текста\npdfjs-editor-remove-stamp-button =\n    .title = Пермахване на изображението\npdfjs-editor-remove-highlight-button =\n    .title = Премахване на открояването\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Цвят\npdfjs-editor-free-text-size-input = Размер\npdfjs-editor-ink-color-input = Цвят\npdfjs-editor-ink-thickness-input = Дебелина\npdfjs-editor-ink-opacity-input = Прозрачност\npdfjs-editor-stamp-add-image-button =\n    .title = Добавяне на изображение\npdfjs-editor-stamp-add-image-button-label = Добавяне на изображение\npdfjs-free-text =\n    .aria-label = Текстов редактор\npdfjs-free-text-default-content = Започнете да пишете…\npdfjs-ink =\n    .aria-label = Промяна на рисунка\npdfjs-ink-canvas =\n    .aria-label = Изображение, създадено от потребител\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Алтернативен текст\npdfjs-editor-alt-text-edit-button-label = Промяна на алтернативния текст\npdfjs-editor-alt-text-dialog-label = Изберете от възможностите\npdfjs-editor-alt-text-dialog-description = Алтернативният текст помага на потребителите, когато не могат да видят изображението или то не се зарежда.\npdfjs-editor-alt-text-add-description-label = Добавяне на описание\npdfjs-editor-alt-text-add-description-description = Стремете се към 1-2 изречения, описващи предмета, настройката или действията.\npdfjs-editor-alt-text-mark-decorative-label = Отбелязване като декоративно\npdfjs-editor-alt-text-mark-decorative-description = Използва се за орнаменти или декоративни изображения, като контури и водни знаци.\npdfjs-editor-alt-text-cancel-button = Отказ\npdfjs-editor-alt-text-save-button = Запазване\npdfjs-editor-alt-text-decorative-tooltip = Отбелязване като декоративно\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Например, „Млад мъж седи на маса и се храни“\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Горен ляв ъгъл — преоразмеряване\npdfjs-editor-resizer-label-top-middle = Горе в средата — преоразмеряване\npdfjs-editor-resizer-label-top-right = Горен десен ъгъл — преоразмеряване\npdfjs-editor-resizer-label-middle-right = Дясно в средата — преоразмеряване\npdfjs-editor-resizer-label-bottom-right = Долен десен ъгъл — преоразмеряване\npdfjs-editor-resizer-label-bottom-middle = Долу в средата — преоразмеряване\npdfjs-editor-resizer-label-bottom-left = Долен ляв ъгъл — преоразмеряване\npdfjs-editor-resizer-label-middle-left = Ляво в средата — преоразмеряване\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Цвят на открояване\npdfjs-editor-colorpicker-button =\n    .title = Промяна на цвят\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Избор на цвят\npdfjs-editor-colorpicker-yellow =\n    .title = Жълто\npdfjs-editor-colorpicker-green =\n    .title = Зелено\npdfjs-editor-colorpicker-blue =\n    .title = Синьо\npdfjs-editor-colorpicker-pink =\n    .title = Розово\npdfjs-editor-colorpicker-red =\n    .title = Червено\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/bn/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = পূর্ববর্তী পাতা\npdfjs-previous-button-label = পূর্ববর্তী\npdfjs-next-button =\n    .title = পরবর্তী পাতা\npdfjs-next-button-label = পরবর্তী\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = পাতা\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = { $pagesCount } এর\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pagesCount } এর { $pageNumber })\npdfjs-zoom-out-button =\n    .title = ছোট আকারে প্রদর্শন\npdfjs-zoom-out-button-label = ছোট আকারে প্রদর্শন\npdfjs-zoom-in-button =\n    .title = বড় আকারে প্রদর্শন\npdfjs-zoom-in-button-label = বড় আকারে প্রদর্শন\npdfjs-zoom-select =\n    .title = বড় আকারে প্রদর্শন\npdfjs-presentation-mode-button =\n    .title = উপস্থাপনা মোডে স্যুইচ করুন\npdfjs-presentation-mode-button-label = উপস্থাপনা মোড\npdfjs-open-file-button =\n    .title = ফাইল খুলুন\npdfjs-open-file-button-label = খুলুন\npdfjs-print-button =\n    .title = মুদ্রণ\npdfjs-print-button-label = মুদ্রণ\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = টুল\npdfjs-tools-button-label = টুল\npdfjs-first-page-button =\n    .title = প্রথম পাতায় যাও\npdfjs-first-page-button-label = প্রথম পাতায় যাও\npdfjs-last-page-button =\n    .title = শেষ পাতায় যাও\npdfjs-last-page-button-label = শেষ পাতায় যাও\npdfjs-page-rotate-cw-button =\n    .title = ঘড়ির কাঁটার দিকে ঘোরাও\npdfjs-page-rotate-cw-button-label = ঘড়ির কাঁটার দিকে ঘোরাও\npdfjs-page-rotate-ccw-button =\n    .title = ঘড়ির কাঁটার বিপরীতে ঘোরাও\npdfjs-page-rotate-ccw-button-label = ঘড়ির কাঁটার বিপরীতে ঘোরাও\npdfjs-cursor-text-select-tool-button =\n    .title = লেখা নির্বাচক টুল সক্রিয় করুন\npdfjs-cursor-text-select-tool-button-label = লেখা নির্বাচক টুল\npdfjs-cursor-hand-tool-button =\n    .title = হ্যান্ড টুল সক্রিয় করুন\npdfjs-cursor-hand-tool-button-label = হ্যান্ড টুল\npdfjs-scroll-vertical-button =\n    .title = উলম্ব স্ক্রলিং ব্যবহার করুন\npdfjs-scroll-vertical-button-label = উলম্ব স্ক্রলিং\npdfjs-scroll-horizontal-button =\n    .title = অনুভূমিক স্ক্রলিং ব্যবহার করুন\npdfjs-scroll-horizontal-button-label = অনুভূমিক স্ক্রলিং\npdfjs-scroll-wrapped-button =\n    .title = Wrapped স্ক্রোলিং ব্যবহার করুন\npdfjs-scroll-wrapped-button-label = Wrapped স্ক্রোলিং\npdfjs-spread-none-button =\n    .title = পেজ স্প্রেডগুলোতে যোগদান করবেন না\npdfjs-spread-none-button-label = Spreads নেই\npdfjs-spread-odd-button-label = বিজোড় Spreads\npdfjs-spread-even-button-label = জোড় Spreads\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = নথি বৈশিষ্ট্য…\npdfjs-document-properties-button-label = নথি বৈশিষ্ট্য…\npdfjs-document-properties-file-name = ফাইলের নাম:\npdfjs-document-properties-file-size = ফাইলের আকার:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } কেবি ({ $size_b } বাইট)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } এমবি ({ $size_b } বাইট)\npdfjs-document-properties-title = শিরোনাম:\npdfjs-document-properties-author = লেখক:\npdfjs-document-properties-subject = বিষয়:\npdfjs-document-properties-keywords = কীওয়ার্ড:\npdfjs-document-properties-creation-date = তৈরির তারিখ:\npdfjs-document-properties-modification-date = পরিবর্তনের তারিখ:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = প্রস্তুতকারক:\npdfjs-document-properties-producer = পিডিএফ প্রস্তুতকারক:\npdfjs-document-properties-version = পিডিএফ সংষ্করণ:\npdfjs-document-properties-page-count = মোট পাতা:\npdfjs-document-properties-page-size = পাতার সাইজ:\npdfjs-document-properties-page-size-unit-inches = এর মধ্যে\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = উলম্ব\npdfjs-document-properties-page-size-orientation-landscape = অনুভূমিক\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = লেটার\npdfjs-document-properties-page-size-name-legal = লীগাল\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Fast Web View:\npdfjs-document-properties-linearized-yes = হ্যাঁ\npdfjs-document-properties-linearized-no = না\npdfjs-document-properties-close-button = বন্ধ\n\n## Print\n\npdfjs-print-progress-message = মুদ্রণের জন্য নথি প্রস্তুত করা হচ্ছে…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = বাতিল\npdfjs-printing-not-supported = সতর্কতা: এই ব্রাউজারে মুদ্রণ সম্পূর্ণভাবে সমর্থিত নয়।\npdfjs-printing-not-ready = সতর্কীকরণ: পিডিএফটি মুদ্রণের জন্য সম্পূর্ণ লোড হয়নি।\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = সাইডবার টগল করুন\npdfjs-toggle-sidebar-button-label = সাইডবার টগল করুন\npdfjs-document-outline-button =\n    .title = নথির আউটলাইন দেখাও (সব আইটেম প্রসারিত/সঙ্কুচিত করতে ডবল ক্লিক করুন)\npdfjs-document-outline-button-label = নথির রূপরেখা\npdfjs-attachments-button =\n    .title = সংযুক্তি দেখাও\npdfjs-attachments-button-label = সংযুক্তি\npdfjs-thumbs-button =\n    .title = থাম্বনেইল সমূহ প্রদর্শন করুন\npdfjs-thumbs-button-label = থাম্বনেইল সমূহ\npdfjs-findbar-button =\n    .title = নথির মধ্যে খুঁজুন\npdfjs-findbar-button-label = খুঁজুন\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = পাতা { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = { $page } পাতার থাম্বনেইল\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = খুঁজুন\n    .placeholder = নথির মধ্যে খুঁজুন…\npdfjs-find-previous-button =\n    .title = বাক্যাংশের পূর্ববর্তী উপস্থিতি অনুসন্ধান\npdfjs-find-previous-button-label = পূর্ববর্তী\npdfjs-find-next-button =\n    .title = বাক্যাংশের পরবর্তী উপস্থিতি অনুসন্ধান\npdfjs-find-next-button-label = পরবর্তী\npdfjs-find-highlight-checkbox = সব হাইলাইট করুন\npdfjs-find-match-case-checkbox-label = অক্ষরের ছাঁদ মেলানো\npdfjs-find-entire-word-checkbox-label = সম্পূর্ণ শব্দ\npdfjs-find-reached-top = পাতার শুরুতে পৌছে গেছে, নীচ থেকে আরম্ভ করা হয়েছে\npdfjs-find-reached-bottom = পাতার শেষে পৌছে গেছে, উপর থেকে আরম্ভ করা হয়েছে\npdfjs-find-not-found = বাক্যাংশ পাওয়া যায়নি\n\n## Predefined zoom values\n\npdfjs-page-scale-width = পাতার প্রস্থ\npdfjs-page-scale-fit = পাতা ফিট করুন\npdfjs-page-scale-auto = স্বয়ংক্রিয় জুম\npdfjs-page-scale-actual = প্রকৃত আকার\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = পিডিএফ লোড করার সময় ত্রুটি দেখা দিয়েছে।\npdfjs-invalid-file-error = অকার্যকর অথবা ক্ষতিগ্রস্ত পিডিএফ ফাইল।\npdfjs-missing-file-error = নিখোঁজ PDF ফাইল।\npdfjs-unexpected-response-error = অপ্রত্যাশীত সার্ভার প্রতিক্রিয়া।\npdfjs-rendering-error = পাতা উপস্থাপনার সময় ত্রুটি দেখা দিয়েছে।\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } টীকা]\n\n## Password\n\npdfjs-password-label = পিডিএফ ফাইলটি ওপেন করতে পাসওয়ার্ড দিন।\npdfjs-password-invalid = ভুল পাসওয়ার্ড। অনুগ্রহ করে আবার চেষ্টা করুন।\npdfjs-password-ok-button = ঠিক আছে\npdfjs-password-cancel-button = বাতিল\npdfjs-web-fonts-disabled = ওয়েব ফন্ট নিষ্ক্রিয়: সংযুক্ত পিডিএফ ফন্ট ব্যবহার করা যাচ্ছে না।\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/bo/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = དྲ་ངོས་སྔོན་མ\npdfjs-previous-button-label = སྔོན་མ\npdfjs-next-button =\n    .title = དྲ་ངོས་རྗེས་མ\npdfjs-next-button-label = རྗེས་མ\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = ཤོག་ངོས\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = of { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Zoom Out\npdfjs-zoom-out-button-label = Zoom Out\npdfjs-zoom-in-button =\n    .title = Zoom In\npdfjs-zoom-in-button-label = Zoom In\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Switch to Presentation Mode\npdfjs-presentation-mode-button-label = Presentation Mode\npdfjs-open-file-button =\n    .title = Open File\npdfjs-open-file-button-label = Open\npdfjs-print-button =\n    .title = Print\npdfjs-print-button-label = Print\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Tools\npdfjs-tools-button-label = Tools\npdfjs-first-page-button =\n    .title = Go to First Page\npdfjs-first-page-button-label = Go to First Page\npdfjs-last-page-button =\n    .title = Go to Last Page\npdfjs-last-page-button-label = Go to Last Page\npdfjs-page-rotate-cw-button =\n    .title = Rotate Clockwise\npdfjs-page-rotate-cw-button-label = Rotate Clockwise\npdfjs-page-rotate-ccw-button =\n    .title = Rotate Counterclockwise\npdfjs-page-rotate-ccw-button-label = Rotate Counterclockwise\npdfjs-cursor-text-select-tool-button =\n    .title = Enable Text Selection Tool\npdfjs-cursor-text-select-tool-button-label = Text Selection Tool\npdfjs-cursor-hand-tool-button =\n    .title = Enable Hand Tool\npdfjs-cursor-hand-tool-button-label = Hand Tool\npdfjs-scroll-vertical-button =\n    .title = Use Vertical Scrolling\npdfjs-scroll-vertical-button-label = Vertical Scrolling\npdfjs-scroll-horizontal-button =\n    .title = Use Horizontal Scrolling\npdfjs-scroll-horizontal-button-label = Horizontal Scrolling\npdfjs-scroll-wrapped-button =\n    .title = Use Wrapped Scrolling\npdfjs-scroll-wrapped-button-label = Wrapped Scrolling\npdfjs-spread-none-button =\n    .title = Do not join page spreads\npdfjs-spread-none-button-label = No Spreads\npdfjs-spread-odd-button =\n    .title = Join page spreads starting with odd-numbered pages\npdfjs-spread-odd-button-label = Odd Spreads\npdfjs-spread-even-button =\n    .title = Join page spreads starting with even-numbered pages\npdfjs-spread-even-button-label = Even Spreads\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Document Properties…\npdfjs-document-properties-button-label = Document Properties…\npdfjs-document-properties-file-name = File name:\npdfjs-document-properties-file-size = File size:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Title:\npdfjs-document-properties-author = Author:\npdfjs-document-properties-subject = Subject:\npdfjs-document-properties-keywords = Keywords:\npdfjs-document-properties-creation-date = Creation Date:\npdfjs-document-properties-modification-date = Modification Date:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Creator:\npdfjs-document-properties-producer = PDF Producer:\npdfjs-document-properties-version = PDF Version:\npdfjs-document-properties-page-count = Page Count:\npdfjs-document-properties-page-size = Page Size:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = portrait\npdfjs-document-properties-page-size-orientation-landscape = landscape\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Fast Web View:\npdfjs-document-properties-linearized-yes = Yes\npdfjs-document-properties-linearized-no = No\npdfjs-document-properties-close-button = Close\n\n## Print\n\npdfjs-print-progress-message = Preparing document for printing…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Cancel\npdfjs-printing-not-supported = Warning: Printing is not fully supported by this browser.\npdfjs-printing-not-ready = Warning: The PDF is not fully loaded for printing.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Toggle Sidebar\npdfjs-toggle-sidebar-button-label = Toggle Sidebar\npdfjs-document-outline-button =\n    .title = Show Document Outline (double-click to expand/collapse all items)\npdfjs-document-outline-button-label = Document Outline\npdfjs-attachments-button =\n    .title = Show Attachments\npdfjs-attachments-button-label = Attachments\npdfjs-thumbs-button =\n    .title = Show Thumbnails\npdfjs-thumbs-button-label = Thumbnails\npdfjs-findbar-button =\n    .title = Find in Document\npdfjs-findbar-button-label = Find\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Page { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Thumbnail of Page { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Find\n    .placeholder = Find in document…\npdfjs-find-previous-button =\n    .title = Find the previous occurrence of the phrase\npdfjs-find-previous-button-label = Previous\npdfjs-find-next-button =\n    .title = Find the next occurrence of the phrase\npdfjs-find-next-button-label = Next\npdfjs-find-highlight-checkbox = Highlight all\npdfjs-find-match-case-checkbox-label = Match case\npdfjs-find-entire-word-checkbox-label = Whole words\npdfjs-find-reached-top = Reached top of document, continued from bottom\npdfjs-find-reached-bottom = Reached end of document, continued from top\npdfjs-find-not-found = Phrase not found\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Page Width\npdfjs-page-scale-fit = Page Fit\npdfjs-page-scale-auto = Automatic Zoom\npdfjs-page-scale-actual = Actual Size\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = An error occurred while loading the PDF.\npdfjs-invalid-file-error = Invalid or corrupted PDF file.\npdfjs-missing-file-error = Missing PDF file.\npdfjs-unexpected-response-error = Unexpected server response.\npdfjs-rendering-error = An error occurred while rendering the page.\n\n## Annotations\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Annotation]\n\n## Password\n\npdfjs-password-label = Enter the password to open this PDF file.\npdfjs-password-invalid = Invalid password. Please try again.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Cancel\npdfjs-web-fonts-disabled = Web fonts are disabled: unable to use embedded PDF fonts.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/br/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Pajenn a-raok\npdfjs-previous-button-label = A-raok\npdfjs-next-button =\n    .title = Pajenn war-lerc'h\npdfjs-next-button-label = War-lerc'h\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Pajenn\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = eus { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } war { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Zoum bihanaat\npdfjs-zoom-out-button-label = Zoum bihanaat\npdfjs-zoom-in-button =\n    .title = Zoum brasaat\npdfjs-zoom-in-button-label = Zoum brasaat\npdfjs-zoom-select =\n    .title = Zoum\npdfjs-presentation-mode-button =\n    .title = Trec'haoliñ etrezek ar mod kinnigadenn\npdfjs-presentation-mode-button-label = Mod kinnigadenn\npdfjs-open-file-button =\n    .title = Digeriñ ur restr\npdfjs-open-file-button-label = Digeriñ ur restr\npdfjs-print-button =\n    .title = Moullañ\npdfjs-print-button-label = Moullañ\npdfjs-save-button =\n    .title = Enrollañ\npdfjs-save-button-label = Enrollañ\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Pellgargañ\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Pellgargañ\npdfjs-bookmark-button-label = Pajenn a-vremañ\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Digeriñ en arload\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Digeriñ en arload\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Ostilhoù\npdfjs-tools-button-label = Ostilhoù\npdfjs-first-page-button =\n    .title = Mont d'ar bajenn gentañ\npdfjs-first-page-button-label = Mont d'ar bajenn gentañ\npdfjs-last-page-button =\n    .title = Mont d'ar bajenn diwezhañ\npdfjs-last-page-button-label = Mont d'ar bajenn diwezhañ\npdfjs-page-rotate-cw-button =\n    .title = C'hwelañ gant roud ar bizied\npdfjs-page-rotate-cw-button-label = C'hwelañ gant roud ar bizied\npdfjs-page-rotate-ccw-button =\n    .title = C'hwelañ gant roud gin ar bizied\npdfjs-page-rotate-ccw-button-label = C'hwelañ gant roud gin ar bizied\npdfjs-cursor-text-select-tool-button =\n    .title = Gweredekaat an ostilh diuzañ testenn\npdfjs-cursor-text-select-tool-button-label = Ostilh diuzañ testenn\npdfjs-cursor-hand-tool-button =\n    .title = Gweredekaat an ostilh dorn\npdfjs-cursor-hand-tool-button-label = Ostilh dorn\npdfjs-scroll-vertical-button =\n    .title = Arverañ an dibunañ a-blom\npdfjs-scroll-vertical-button-label = Dibunañ a-serzh\npdfjs-scroll-horizontal-button =\n    .title = Arverañ an dibunañ a-blaen\npdfjs-scroll-horizontal-button-label = Dibunañ a-blaen\npdfjs-scroll-wrapped-button =\n    .title = Arverañ an dibunañ paket\npdfjs-scroll-wrapped-button-label = Dibunañ paket\npdfjs-spread-none-button =\n    .title = Chom hep stagañ ar skignadurioù\npdfjs-spread-none-button-label = Skignadenn ebet\npdfjs-spread-odd-button =\n    .title = Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù ampar\npdfjs-spread-odd-button-label = Pajennoù ampar\npdfjs-spread-even-button =\n    .title = Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù par\npdfjs-spread-even-button-label = Pajennoù par\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Perzhioù an teul…\npdfjs-document-properties-button-label = Perzhioù an teul…\npdfjs-document-properties-file-name = Anv restr:\npdfjs-document-properties-file-size = Ment ar restr:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } Ke ({ $size_b } eizhbit)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } Me ({ $size_b } eizhbit)\npdfjs-document-properties-title = Titl:\npdfjs-document-properties-author = Aozer:\npdfjs-document-properties-subject = Danvez:\npdfjs-document-properties-keywords = Gerioù-alc'hwez:\npdfjs-document-properties-creation-date = Deiziad krouiñ:\npdfjs-document-properties-modification-date = Deiziad kemmañ:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Krouer:\npdfjs-document-properties-producer = Kenderc'her PDF:\npdfjs-document-properties-version = Handelv PDF:\npdfjs-document-properties-page-count = Niver a bajennoù:\npdfjs-document-properties-page-size = Ment ar bajenn:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = poltred\npdfjs-document-properties-page-size-orientation-landscape = gweledva\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Lizher\npdfjs-document-properties-page-size-name-legal = Lezennel\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Gwel Web Herrek:\npdfjs-document-properties-linearized-yes = Ya\npdfjs-document-properties-linearized-no = Ket\npdfjs-document-properties-close-button = Serriñ\n\n## Print\n\npdfjs-print-progress-message = O prientiñ an teul evit moullañ...\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Nullañ\npdfjs-printing-not-supported = Kemenn: N'eo ket skoret penn-da-benn ar moullañ gant ar merdeer-mañ.\npdfjs-printing-not-ready = Kemenn: N'hall ket bezañ moullet ar restr PDF rak n'eo ket karget penn-da-benn.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Diskouez/kuzhat ar varrenn gostez\npdfjs-toggle-sidebar-notification-button =\n    .title = Trec'haoliñ ar varrenn-gostez (ur steuñv pe stagadennoù a zo en teul)\npdfjs-toggle-sidebar-button-label = Diskouez/kuzhat ar varrenn gostez\npdfjs-document-outline-button =\n    .title = Diskouez steuñv an teul (daouglikit evit brasaat/bihanaat an holl elfennoù)\npdfjs-document-outline-button-label = Sinedoù an teuliad\npdfjs-attachments-button =\n    .title = Diskouez ar c'henstagadurioù\npdfjs-attachments-button-label = Kenstagadurioù\npdfjs-layers-button =\n    .title = Diskouez ar gwiskadoù (daou-glikañ evit adderaouekaat an holl gwiskadoù d'o stad dre ziouer)\npdfjs-layers-button-label = Gwiskadoù\npdfjs-thumbs-button =\n    .title = Diskouez ar melvennoù\npdfjs-thumbs-button-label = Melvennoù\npdfjs-findbar-button =\n    .title = Klask e-barzh an teuliad\npdfjs-findbar-button-label = Klask\npdfjs-additional-layers = Gwiskadoù ouzhpenn\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Pajenn { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Melvenn ar bajenn { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Klask\n    .placeholder = Klask e-barzh an teuliad\npdfjs-find-previous-button =\n    .title = Kavout an tamm frazenn kent o klotañ ganti\npdfjs-find-previous-button-label = Kent\npdfjs-find-next-button =\n    .title = Kavout an tamm frazenn war-lerc'h o klotañ ganti\npdfjs-find-next-button-label = War-lerc'h\npdfjs-find-highlight-checkbox = Usskediñ pep tra\npdfjs-find-match-case-checkbox-label = Teurel evezh ouzh ar pennlizherennoù\npdfjs-find-entire-word-checkbox-label = Gerioù a-bezh\npdfjs-find-reached-top = Tizhet eo bet derou ar bajenn, kenderc'hel diouzh an diaz\npdfjs-find-reached-bottom = Tizhet eo bet dibenn ar bajenn, kenderc'hel diouzh ar c'hrec'h\npdfjs-find-not-found = N'haller ket kavout ar frazenn\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Led ar bajenn\npdfjs-page-scale-fit = Pajenn a-bezh\npdfjs-page-scale-auto = Zoum emgefreek\npdfjs-page-scale-actual = Ment wir\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Pajenn { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Degouezhet ez eus bet ur fazi e-pad kargañ ar PDF.\npdfjs-invalid-file-error = Restr PDF didalvoudek pe kontronet.\npdfjs-missing-file-error = Restr PDF o vankout.\npdfjs-unexpected-response-error = Respont dic'hortoz a-berzh an dafariad\npdfjs-rendering-error = Degouezhet ez eus bet ur fazi e-pad skrammañ ar bajennad.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Notennañ]\n\n## Password\n\npdfjs-password-label = Enankit ar ger-tremen evit digeriñ ar restr PDF-mañ.\npdfjs-password-invalid = Ger-tremen didalvoudek. Klaskit en-dro mar plij.\npdfjs-password-ok-button = Mat eo\npdfjs-password-cancel-button = Nullañ\npdfjs-web-fonts-disabled = Diweredekaet eo an nodrezhoù web: n'haller ket arverañ an nodrezhoù PDF enframmet.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Testenn\npdfjs-editor-free-text-button-label = Testenn\npdfjs-editor-ink-button =\n    .title = Tresañ\npdfjs-editor-ink-button-label = Tresañ\npdfjs-editor-stamp-button =\n    .title = Ouzhpennañ pe aozañ skeudennoù\npdfjs-editor-stamp-button-label = Ouzhpennañ pe aozañ skeudennoù\n\n## Remove button for the various kind of editor.\n\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Liv\npdfjs-editor-free-text-size-input = Ment\npdfjs-editor-ink-color-input = Liv\npdfjs-editor-ink-thickness-input = Tevder\npdfjs-editor-ink-opacity-input = Boullder\npdfjs-editor-stamp-add-image-button =\n    .title = Ouzhpennañ ur skeudenn\npdfjs-editor-stamp-add-image-button-label = Ouzhpennañ ur skeudenn\npdfjs-free-text =\n    .aria-label = Aozer testennoù\npdfjs-ink =\n    .aria-label = Aozer tresoù\npdfjs-ink-canvas =\n    .aria-label = Skeudenn bet krouet gant an implijer·ez\n\n## Alt-text dialog\n\npdfjs-editor-alt-text-add-description-label = Ouzhpennañ un deskrivadur\npdfjs-editor-alt-text-cancel-button = Nullañ\npdfjs-editor-alt-text-save-button = Enrollañ\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n\n## Color picker\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/brx/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = आगोलनि बिलाइ\npdfjs-previous-button-label = आगोलनि\npdfjs-next-button =\n    .title = उननि बिलाइ\npdfjs-next-button-label = उननि\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = बिलाइ\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = { $pagesCount } नि\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pagesCount } नि { $pageNumber })\npdfjs-zoom-out-button =\n    .title = फिसायै जुम खालाम\npdfjs-zoom-out-button-label = फिसायै जुम खालाम\npdfjs-zoom-in-button =\n    .title = गेदेरै जुम खालाम\npdfjs-zoom-in-button-label = गेदेरै जुम खालाम\npdfjs-zoom-select =\n    .title = जुम खालाम\npdfjs-presentation-mode-button =\n    .title = दिन्थिफुंनाय म'डआव थां\npdfjs-presentation-mode-button-label = दिन्थिफुंनाय म'ड\npdfjs-open-file-button =\n    .title = फाइलखौ खेव\npdfjs-open-file-button-label = खेव\npdfjs-print-button =\n    .title = साफाय\npdfjs-print-button-label = साफाय\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = टुल\npdfjs-tools-button-label = टुल\npdfjs-first-page-button =\n    .title = गिबि बिलाइआव थां\npdfjs-first-page-button-label = गिबि बिलाइआव थां\npdfjs-last-page-button =\n    .title = जोबथा बिलाइआव थां\npdfjs-last-page-button-label = जोबथा बिलाइआव थां\npdfjs-page-rotate-cw-button =\n    .title = घरि गिदिंनाय फार्से फिदिं\npdfjs-page-rotate-cw-button-label = घरि गिदिंनाय फार्से फिदिं\npdfjs-page-rotate-ccw-button =\n    .title = घरि गिदिंनाय उल्था फार्से फिदिं\npdfjs-page-rotate-ccw-button-label = घरि गिदिंनाय उल्था फार्से फिदिं\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = फोरमान बिलाइनि आखुथाय...\npdfjs-document-properties-button-label = फोरमान बिलाइनि आखुथाय...\npdfjs-document-properties-file-name = फाइलनि मुं:\npdfjs-document-properties-file-size = फाइलनि महर:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } बाइट)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } बाइट)\npdfjs-document-properties-title = बिमुं:\npdfjs-document-properties-author = लिरगिरि:\npdfjs-document-properties-subject = आयदा:\npdfjs-document-properties-keywords = गाहाय सोदोब:\npdfjs-document-properties-creation-date = सोरजिनाय अक्ट':\npdfjs-document-properties-modification-date = सुद्रायनाय अक्ट':\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = सोरजिग्रा:\npdfjs-document-properties-producer = PDF दिहुनग्रा:\npdfjs-document-properties-version = PDF बिसान:\npdfjs-document-properties-page-count = बिलाइनि हिसाब:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = प'र्ट्रेट\npdfjs-document-properties-page-size-orientation-landscape = लेण्डस्केप\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = लायजाम\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\npdfjs-document-properties-linearized-yes = नंगौ\npdfjs-document-properties-linearized-no = नङा\npdfjs-document-properties-close-button = बन्द खालाम\n\n## Print\n\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = नेवसि\npdfjs-printing-not-supported = सांग्रांथि: साफायनाया बे ब्राउजारजों आबुङै हेफाजाब होजाया।\npdfjs-printing-not-ready = सांग्रांथि: PDF खौ साफायनायनि थाखाय फुरायै ल'ड खालामाखै।\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = टग्गल साइडबार\npdfjs-toggle-sidebar-button-label = टग्गल साइडबार\npdfjs-document-outline-button-label = फोरमान बिलाइ सिमा हांखो\npdfjs-attachments-button =\n    .title = नांजाब होनायखौ दिन्थि\npdfjs-attachments-button-label = नांजाब होनाय\npdfjs-thumbs-button =\n    .title = थामनेइलखौ दिन्थि\npdfjs-thumbs-button-label = थामनेइल\npdfjs-findbar-button =\n    .title = फोरमान बिलाइआव नागिरना दिहुन\npdfjs-findbar-button-label = नायगिरना दिहुन\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = बिलाइ { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = बिलाइ { $page } नि थामनेइल\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = नायगिरना दिहुन\n    .placeholder = फोरमान बिलाइआव नागिरना दिहुन...\npdfjs-find-previous-button =\n    .title = बाथ्रा खोन्दोबनि सिगांनि नुजाथिनायखौ नागिर\npdfjs-find-previous-button-label = आगोलनि\npdfjs-find-next-button =\n    .title = बाथ्रा खोन्दोबनि उननि नुजाथिनायखौ नागिर\npdfjs-find-next-button-label = उननि\npdfjs-find-highlight-checkbox = गासैखौबो हाइलाइट खालाम\npdfjs-find-match-case-checkbox-label = गोरोबनाय केस\npdfjs-find-reached-top = थालो निफ्राय जागायनानै फोरमान बिलाइनि बिजौआव सौहैबाय\npdfjs-find-reached-bottom = बिजौ निफ्राय जागायनानै फोरमान बिलाइनि बिजौआव सौहैबाय\npdfjs-find-not-found = बाथ्रा खोन्दोब मोनाखै\n\n## Predefined zoom values\n\npdfjs-page-scale-width = बिलाइनि गुवार\npdfjs-page-scale-fit = बिलाइ गोरोबनाय\npdfjs-page-scale-auto = गावनोगाव जुम\npdfjs-page-scale-actual = थार महर\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = PDF ल'ड खालामनाय समाव मोनसे गोरोन्थि जाबाय।\npdfjs-invalid-file-error = बाहायजायै एबा गाज्रि जानाय PDF फाइल\npdfjs-missing-file-error = गोमानाय PDF फाइल\npdfjs-unexpected-response-error = मिजिंथियै सार्भार फिननाय।\npdfjs-rendering-error = बिलाइखौ राव सोलायनाय समाव मोनसे गोरोन्थि जादों।\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } सोदोब बेखेवनाय]\n\n## Password\n\npdfjs-password-label = बे PDF फाइलखौ खेवनो पासवार्ड हाबहो।\npdfjs-password-invalid = बाहायजायै पासवार्ड। अननानै फिन नाजा।\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = नेवसि\npdfjs-web-fonts-disabled = वेब फन्टखौ लोरबां खालामबाय: अरजाबहोनाय PDF फन्टखौ बाहायनो हायाखै।\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/bs/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Prethodna strana\npdfjs-previous-button-label = Prethodna\npdfjs-next-button =\n    .title = Sljedeća strna\npdfjs-next-button-label = Sljedeća\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Strana\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = od { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } od { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Umanji\npdfjs-zoom-out-button-label = Umanji\npdfjs-zoom-in-button =\n    .title = Uvećaj\npdfjs-zoom-in-button-label = Uvećaj\npdfjs-zoom-select =\n    .title = Uvećanje\npdfjs-presentation-mode-button =\n    .title = Prebaci se u prezentacijski režim\npdfjs-presentation-mode-button-label = Prezentacijski režim\npdfjs-open-file-button =\n    .title = Otvori fajl\npdfjs-open-file-button-label = Otvori\npdfjs-print-button =\n    .title = Štampaj\npdfjs-print-button-label = Štampaj\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Alati\npdfjs-tools-button-label = Alati\npdfjs-first-page-button =\n    .title = Idi na prvu stranu\npdfjs-first-page-button-label = Idi na prvu stranu\npdfjs-last-page-button =\n    .title = Idi na zadnju stranu\npdfjs-last-page-button-label = Idi na zadnju stranu\npdfjs-page-rotate-cw-button =\n    .title = Rotiraj u smjeru kazaljke na satu\npdfjs-page-rotate-cw-button-label = Rotiraj u smjeru kazaljke na satu\npdfjs-page-rotate-ccw-button =\n    .title = Rotiraj suprotno smjeru kazaljke na satu\npdfjs-page-rotate-ccw-button-label = Rotiraj suprotno smjeru kazaljke na satu\npdfjs-cursor-text-select-tool-button =\n    .title = Omogući alat za označavanje teksta\npdfjs-cursor-text-select-tool-button-label = Alat za označavanje teksta\npdfjs-cursor-hand-tool-button =\n    .title = Omogući ručni alat\npdfjs-cursor-hand-tool-button-label = Ručni alat\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Svojstva dokumenta...\npdfjs-document-properties-button-label = Svojstva dokumenta...\npdfjs-document-properties-file-name = Naziv fajla:\npdfjs-document-properties-file-size = Veličina fajla:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bajta)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bajta)\npdfjs-document-properties-title = Naslov:\npdfjs-document-properties-author = Autor:\npdfjs-document-properties-subject = Predmet:\npdfjs-document-properties-keywords = Ključne riječi:\npdfjs-document-properties-creation-date = Datum kreiranja:\npdfjs-document-properties-modification-date = Datum promjene:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Kreator:\npdfjs-document-properties-producer = PDF stvaratelj:\npdfjs-document-properties-version = PDF verzija:\npdfjs-document-properties-page-count = Broj stranica:\npdfjs-document-properties-page-size = Veličina stranice:\npdfjs-document-properties-page-size-unit-inches = u\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = uspravno\npdfjs-document-properties-page-size-orientation-landscape = vodoravno\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Pismo\npdfjs-document-properties-page-size-name-legal = Pravni\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\npdfjs-document-properties-close-button = Zatvori\n\n## Print\n\npdfjs-print-progress-message = Pripremam dokument za štampu…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Otkaži\npdfjs-printing-not-supported = Upozorenje: Štampanje nije u potpunosti podržano u ovom browseru.\npdfjs-printing-not-ready = Upozorenje: PDF nije u potpunosti učitan za štampanje.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Uključi/isključi bočnu traku\npdfjs-toggle-sidebar-button-label = Uključi/isključi bočnu traku\npdfjs-document-outline-button =\n    .title = Prikaži outline dokumenta (dvoklik za skupljanje/širenje svih stavki)\npdfjs-document-outline-button-label = Konture dokumenta\npdfjs-attachments-button =\n    .title = Prikaži priloge\npdfjs-attachments-button-label = Prilozi\npdfjs-thumbs-button =\n    .title = Prikaži thumbnailove\npdfjs-thumbs-button-label = Thumbnailovi\npdfjs-findbar-button =\n    .title = Pronađi u dokumentu\npdfjs-findbar-button-label = Pronađi\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Strana { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Thumbnail strane { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Pronađi\n    .placeholder = Pronađi u dokumentu…\npdfjs-find-previous-button =\n    .title = Pronađi prethodno pojavljivanje fraze\npdfjs-find-previous-button-label = Prethodno\npdfjs-find-next-button =\n    .title = Pronađi sljedeće pojavljivanje fraze\npdfjs-find-next-button-label = Sljedeće\npdfjs-find-highlight-checkbox = Označi sve\npdfjs-find-match-case-checkbox-label = Osjetljivost na karaktere\npdfjs-find-reached-top = Dostigao sam vrh dokumenta, nastavljam sa dna\npdfjs-find-reached-bottom = Dostigao sam kraj dokumenta, nastavljam sa vrha\npdfjs-find-not-found = Fraza nije pronađena\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Širina strane\npdfjs-page-scale-fit = Uklopi stranu\npdfjs-page-scale-auto = Automatsko uvećanje\npdfjs-page-scale-actual = Stvarna veličina\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = Došlo je do greške prilikom učitavanja PDF-a.\npdfjs-invalid-file-error = Neispravan ili oštećen PDF fajl.\npdfjs-missing-file-error = Nedostaje PDF fajl.\npdfjs-unexpected-response-error = Neočekivani odgovor servera.\npdfjs-rendering-error = Došlo je do greške prilikom renderiranja strane.\n\n## Annotations\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } pribilješka]\n\n## Password\n\npdfjs-password-label = Upišite lozinku da biste otvorili ovaj PDF fajl.\npdfjs-password-invalid = Pogrešna lozinka. Pokušajte ponovo.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Otkaži\npdfjs-web-fonts-disabled = Web fontovi su onemogućeni: nemoguće koristiti ubačene PDF fontove.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/ca/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Pàgina anterior\npdfjs-previous-button-label = Anterior\npdfjs-next-button =\n    .title = Pàgina següent\npdfjs-next-button-label = Següent\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Pàgina\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = de { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Redueix\npdfjs-zoom-out-button-label = Redueix\npdfjs-zoom-in-button =\n    .title = Amplia\npdfjs-zoom-in-button-label = Amplia\npdfjs-zoom-select =\n    .title = Escala\npdfjs-presentation-mode-button =\n    .title = Canvia al mode de presentació\npdfjs-presentation-mode-button-label = Mode de presentació\npdfjs-open-file-button =\n    .title = Obre el fitxer\npdfjs-open-file-button-label = Obre\npdfjs-print-button =\n    .title = Imprimeix\npdfjs-print-button-label = Imprimeix\npdfjs-save-button =\n    .title = Desa\npdfjs-save-button-label = Desa\npdfjs-bookmark-button =\n    .title = Pàgina actual (mostra l'URL de la pàgina actual)\npdfjs-bookmark-button-label = Pàgina actual\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Obre en una aplicació\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Obre en una aplicació\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Eines\npdfjs-tools-button-label = Eines\npdfjs-first-page-button =\n    .title = Vés a la primera pàgina\npdfjs-first-page-button-label = Vés a la primera pàgina\npdfjs-last-page-button =\n    .title = Vés a l'última pàgina\npdfjs-last-page-button-label = Vés a l'última pàgina\npdfjs-page-rotate-cw-button =\n    .title = Gira cap a la dreta\npdfjs-page-rotate-cw-button-label = Gira cap a la dreta\npdfjs-page-rotate-ccw-button =\n    .title = Gira cap a l'esquerra\npdfjs-page-rotate-ccw-button-label = Gira cap a l'esquerra\npdfjs-cursor-text-select-tool-button =\n    .title = Habilita l'eina de selecció de text\npdfjs-cursor-text-select-tool-button-label = Eina de selecció de text\npdfjs-cursor-hand-tool-button =\n    .title = Habilita l'eina de mà\npdfjs-cursor-hand-tool-button-label = Eina de mà\npdfjs-scroll-page-button =\n    .title = Usa el desplaçament de pàgina\npdfjs-scroll-page-button-label = Desplaçament de pàgina\npdfjs-scroll-vertical-button =\n    .title = Utilitza el desplaçament vertical\npdfjs-scroll-vertical-button-label = Desplaçament vertical\npdfjs-scroll-horizontal-button =\n    .title = Utilitza el desplaçament horitzontal\npdfjs-scroll-horizontal-button-label = Desplaçament horitzontal\npdfjs-scroll-wrapped-button =\n    .title = Activa el desplaçament continu\npdfjs-scroll-wrapped-button-label = Desplaçament continu\npdfjs-spread-none-button =\n    .title = No agrupis les pàgines de dues en dues\npdfjs-spread-none-button-label = Una sola pàgina\npdfjs-spread-odd-button =\n    .title = Mostra dues pàgines començant per les pàgines de numeració senar\npdfjs-spread-odd-button-label = Doble pàgina (senar)\npdfjs-spread-even-button =\n    .title = Mostra dues pàgines començant per les pàgines de numeració parell\npdfjs-spread-even-button-label = Doble pàgina (parell)\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Propietats del document…\npdfjs-document-properties-button-label = Propietats del document…\npdfjs-document-properties-file-name = Nom del fitxer:\npdfjs-document-properties-file-size = Mida del fitxer:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Títol:\npdfjs-document-properties-author = Autor:\npdfjs-document-properties-subject = Assumpte:\npdfjs-document-properties-keywords = Paraules clau:\npdfjs-document-properties-creation-date = Data de creació:\npdfjs-document-properties-modification-date = Data de modificació:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Creador:\npdfjs-document-properties-producer = Generador de PDF:\npdfjs-document-properties-version = Versió de PDF:\npdfjs-document-properties-page-count = Nombre de pàgines:\npdfjs-document-properties-page-size = Mida de la pàgina:\npdfjs-document-properties-page-size-unit-inches = polzades\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = vertical\npdfjs-document-properties-page-size-orientation-landscape = apaïsat\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Carta\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Vista web ràpida:\npdfjs-document-properties-linearized-yes = Sí\npdfjs-document-properties-linearized-no = No\npdfjs-document-properties-close-button = Tanca\n\n## Print\n\npdfjs-print-progress-message = S'està preparant la impressió del document…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Cancel·la\npdfjs-printing-not-supported = Avís: la impressió no és plenament funcional en aquest navegador.\npdfjs-printing-not-ready = Atenció: el PDF no s'ha acabat de carregar per imprimir-lo.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Mostra/amaga la barra lateral\npdfjs-toggle-sidebar-notification-button =\n    .title = Mostra/amaga la barra lateral (el document conté un esquema, adjuncions o capes)\npdfjs-toggle-sidebar-button-label = Mostra/amaga la barra lateral\npdfjs-document-outline-button =\n    .title = Mostra l'esquema del document (doble clic per ampliar/reduir tots els elements)\npdfjs-document-outline-button-label = Esquema del document\npdfjs-attachments-button =\n    .title = Mostra les adjuncions\npdfjs-attachments-button-label = Adjuncions\npdfjs-layers-button =\n    .title = Mostra les capes (doble clic per restablir totes les capes al seu estat per defecte)\npdfjs-layers-button-label = Capes\npdfjs-thumbs-button =\n    .title = Mostra les miniatures\npdfjs-thumbs-button-label = Miniatures\npdfjs-current-outline-item-button =\n    .title = Cerca l'element d'esquema actual\npdfjs-current-outline-item-button-label = Element d'esquema actual\npdfjs-findbar-button =\n    .title = Cerca al document\npdfjs-findbar-button-label = Cerca\npdfjs-additional-layers = Capes addicionals\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Pàgina { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatura de la pàgina { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Cerca\n    .placeholder = Cerca al document…\npdfjs-find-previous-button =\n    .title = Cerca l'anterior coincidència de l'expressió\npdfjs-find-previous-button-label = Anterior\npdfjs-find-next-button =\n    .title = Cerca la següent coincidència de l'expressió\npdfjs-find-next-button-label = Següent\npdfjs-find-highlight-checkbox = Ressalta-ho tot\npdfjs-find-match-case-checkbox-label = Distingeix entre majúscules i minúscules\npdfjs-find-match-diacritics-checkbox-label = Respecta els diacrítics\npdfjs-find-entire-word-checkbox-label = Paraules senceres\npdfjs-find-reached-top = S'ha arribat al principi del document, es continua pel final\npdfjs-find-reached-bottom = S'ha arribat al final del document, es continua pel principi\npdfjs-find-not-found = No s'ha trobat l'expressió\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Amplada de la pàgina\npdfjs-page-scale-fit = Ajusta la pàgina\npdfjs-page-scale-auto = Zoom automàtic\npdfjs-page-scale-actual = Mida real\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Pàgina { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = S'ha produït un error en carregar el PDF.\npdfjs-invalid-file-error = El fitxer PDF no és vàlid o està malmès.\npdfjs-missing-file-error = Falta el fitxer PDF.\npdfjs-unexpected-response-error = Resposta inesperada del servidor.\npdfjs-rendering-error = S'ha produït un error mentre es renderitzava la pàgina.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Anotació { $type }]\n\n## Password\n\npdfjs-password-label = Introduïu la contrasenya per obrir aquest fitxer PDF.\npdfjs-password-invalid = La contrasenya no és vàlida. Torneu-ho a provar.\npdfjs-password-ok-button = D'acord\npdfjs-password-cancel-button = Cancel·la\npdfjs-web-fonts-disabled = Els tipus de lletra web estan desactivats: no es poden utilitzar els tipus de lletra incrustats al PDF.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Text\npdfjs-editor-free-text-button-label = Text\npdfjs-editor-ink-button =\n    .title = Dibuixa\npdfjs-editor-ink-button-label = Dibuixa\n# Editor Parameters\npdfjs-editor-free-text-color-input = Color\npdfjs-editor-free-text-size-input = Mida\npdfjs-editor-ink-color-input = Color\npdfjs-editor-ink-thickness-input = Gruix\npdfjs-editor-ink-opacity-input = Opacitat\npdfjs-free-text =\n    .aria-label = Editor de text\npdfjs-free-text-default-content = Escriviu…\npdfjs-ink =\n    .aria-label = Editor de dibuix\npdfjs-ink-canvas =\n    .aria-label = Imatge creada per l'usuari\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/cak/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Jun kan ruxaq\npdfjs-previous-button-label = Jun kan\npdfjs-next-button =\n    .title = Jun chik ruxaq\npdfjs-next-button-label = Jun chik\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Ruxaq\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = richin { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } richin { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Tich'utinirisäx\npdfjs-zoom-out-button-label = Tich'utinirisäx\npdfjs-zoom-in-button =\n    .title = Tinimirisäx\npdfjs-zoom-in-button-label = Tinimirisäx\npdfjs-zoom-select =\n    .title = Sum\npdfjs-presentation-mode-button =\n    .title = Tijal ri rub'anikil niwachin\npdfjs-presentation-mode-button-label = Pa rub'eyal niwachin\npdfjs-open-file-button =\n    .title = Tijaq Yakb'äl\npdfjs-open-file-button-label = Tijaq\npdfjs-print-button =\n    .title = Titz'ajb'äx\npdfjs-print-button-label = Titz'ajb'äx\npdfjs-save-button =\n    .title = Tiyak\npdfjs-save-button-label = Tiyak\npdfjs-bookmark-button-label = Ruxaq k'o wakami\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Samajib'äl\npdfjs-tools-button-label = Samajib'äl\npdfjs-first-page-button =\n    .title = Tib'e pa nab'ey ruxaq\npdfjs-first-page-button-label = Tib'e pa nab'ey ruxaq\npdfjs-last-page-button =\n    .title = Tib'e pa ruk'isib'äl ruxaq\npdfjs-last-page-button-label = Tib'e pa ruk'isib'äl ruxaq\npdfjs-page-rotate-cw-button =\n    .title = Tisutïx pan ajkiq'a'\npdfjs-page-rotate-cw-button-label = Tisutïx pan ajkiq'a'\npdfjs-page-rotate-ccw-button =\n    .title = Tisutïx pan ajxokon\npdfjs-page-rotate-ccw-button-label = Tisutïx pan ajxokon\npdfjs-cursor-text-select-tool-button =\n    .title = Titzij ri rusamajib'al Rucha'ik Rucholajem Tzij\npdfjs-cursor-text-select-tool-button-label = Rusamajib'al Rucha'ik Rucholajem Tzij\npdfjs-cursor-hand-tool-button =\n    .title = Titzij ri q'ab'aj samajib'äl\npdfjs-cursor-hand-tool-button-label = Q'ab'aj Samajib'äl\npdfjs-scroll-page-button =\n    .title = Tokisäx Ruxaq Q'axanem\npdfjs-scroll-page-button-label = Ruxaq Q'axanem\npdfjs-scroll-vertical-button =\n    .title = Tokisäx Pa'äl Q'axanem\npdfjs-scroll-vertical-button-label = Pa'äl Q'axanem\npdfjs-scroll-horizontal-button =\n    .title = Tokisäx Kotz'öl Q'axanem\npdfjs-scroll-horizontal-button-label = Kotz'öl Q'axanem\npdfjs-scroll-wrapped-button =\n    .title = Tokisäx Tzub'aj Q'axanem\npdfjs-scroll-wrapped-button-label = Tzub'aj Q'axanem\npdfjs-spread-none-button =\n    .title = Man ketun taq ruxaq pa rub'eyal wuj\npdfjs-spread-none-button-label = Majun Rub'eyal\npdfjs-spread-odd-button =\n    .title = Ke'atunu' ri taq ruxaq rik'in natikirisaj rik'in jun man k'ulaj ta rajilab'al\npdfjs-spread-odd-button-label = Man K'ulaj Ta Rub'eyal\npdfjs-spread-even-button =\n    .title = Ke'atunu' ri taq ruxaq rik'in natikirisaj rik'in jun k'ulaj rajilab'al\npdfjs-spread-even-button-label = K'ulaj Rub'eyal\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Taq richinil wuj…\npdfjs-document-properties-button-label = Taq richinil wuj…\npdfjs-document-properties-file-name = Rub'i' yakb'äl:\npdfjs-document-properties-file-size = Runimilem yakb'äl:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = B'i'aj:\npdfjs-document-properties-author = B'anel:\npdfjs-document-properties-subject = Taqikil:\npdfjs-document-properties-keywords = Kixe'el taq tzij:\npdfjs-document-properties-creation-date = Ruq'ijul xtz'uk:\npdfjs-document-properties-modification-date = Ruq'ijul xjalwachïx:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Q'inonel:\npdfjs-document-properties-producer = PDF b'anöy:\npdfjs-document-properties-version = PDF ruwäch:\npdfjs-document-properties-page-count = Jarupe' ruxaq:\npdfjs-document-properties-page-size = Runimilem ri Ruxaq:\npdfjs-document-properties-page-size-unit-inches = pa\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = rupalem\npdfjs-document-properties-page-size-orientation-landscape = rukotz'olem\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Loman wuj\npdfjs-document-properties-page-size-name-legal = Taqanel tzijol\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Anin Rutz'etik Ajk'amaya'l:\npdfjs-document-properties-linearized-yes = Ja'\npdfjs-document-properties-linearized-no = Mani\npdfjs-document-properties-close-button = Titz'apïx\n\n## Print\n\npdfjs-print-progress-message = Ruchojmirisaxik wuj richin nitz'ajb'äx…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Tiq'at\npdfjs-printing-not-supported = Rutzijol k'ayewal: Ri rutz'ajb'axik man koch'el ta ronojel pa re okik'amaya'l re'.\npdfjs-printing-not-ready = Rutzijol k'ayewal: Ri PDF man xusamajij ta ronojel richin nitz'ajb'äx.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Tijal ri ajxikin kajtz'ik\npdfjs-toggle-sidebar-notification-button =\n    .title = Tik'ex ri ajxikin yuqkajtz'ik (ri wuj eruk'wan taq ruchi'/taqo/kuchuj)\npdfjs-toggle-sidebar-button-label = Tijal ri ajxikin kajtz'ik\npdfjs-document-outline-button =\n    .title = Tik'ut pe ruch'akulal wuj (kamul-pitz'oj richin nirik'/nich'utinirisäx ronojel ruch'akulal)\npdfjs-document-outline-button-label = Ruch'akulal wuj\npdfjs-attachments-button =\n    .title = Kek'ut pe ri taq taqoj\npdfjs-attachments-button-label = Taq taqoj\npdfjs-layers-button =\n    .title = Kek'ut taq Kuchuj (ka'i'-pitz' richin yetzolïx ronojel ri taq kuchuj e k'o wi)\npdfjs-layers-button-label = Taq kuchuj\npdfjs-thumbs-button =\n    .title = Kek'ut pe taq ch'utiq\npdfjs-thumbs-button-label = Koköj\npdfjs-current-outline-item-button =\n    .title = Kekanöx  Taq Ch'akulal Kik'wan Chib'äl\npdfjs-current-outline-item-button-label = Taq Ch'akulal Kik'wan Chib'äl\npdfjs-findbar-button =\n    .title = Tikanöx chupam ri wuj\npdfjs-findbar-button-label = Tikanöx\npdfjs-additional-layers = Tz'aqat ta Kuchuj\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Ruxaq { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Ruch'utinirisaxik ruxaq { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Tikanöx\n    .placeholder = Tikanöx pa wuj…\npdfjs-find-previous-button =\n    .title = Tib'an b'enam pa ri jun kan q'aptzij xilitäj\npdfjs-find-previous-button-label = Jun kan\npdfjs-find-next-button =\n    .title = Tib'e pa ri jun chik pajtzij xilitäj\npdfjs-find-next-button-label = Jun chik\npdfjs-find-highlight-checkbox = Tiya' retal ronojel\npdfjs-find-match-case-checkbox-label = Tuk'äm ri' kik'in taq nimatz'ib' chuqa' taq ch'utitz'ib'\npdfjs-find-match-diacritics-checkbox-label = Tiya' Kikojol Tz'aqat taq Tz'ib'\npdfjs-find-entire-word-checkbox-label = Tz'aqät taq tzij\npdfjs-find-reached-top = Xb'eq'i' ri rutikirib'al wuj, xtikanöx k'a pa ruk'isib'äl\npdfjs-find-reached-bottom = Xb'eq'i' ri ruk'isib'äl wuj, xtikanöx pa rutikirib'al\npdfjs-find-not-found = Man xilitäj ta ri pajtzij\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Ruwa ruxaq\npdfjs-page-scale-fit = Tinuk' ruxaq\npdfjs-page-scale-auto = Yonil chi nimilem\npdfjs-page-scale-actual = Runimilem Wakami\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Ruxaq { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Xk'ulwachitäj jun sach'oj toq xnuk'ux ri PDF .\npdfjs-invalid-file-error = Man oke ta o yujtajinäq ri PDF yakb'äl.\npdfjs-missing-file-error = Man xilitäj ta ri PDF yakb'äl.\npdfjs-unexpected-response-error = Man oyob'en ta tz'olin rutzij ruk'u'x samaj.\npdfjs-rendering-error = Xk'ulwachitäj jun sachoj toq ninuk'wachij ri ruxaq.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Tz'ib'anïk]\n\n## Password\n\npdfjs-password-label = Tatz'ib'aj ri ewan tzij richin najäq re yakb'äl re' pa PDF.\npdfjs-password-invalid = Man okel ta ri ewan tzij: Tatojtob'ej chik.\npdfjs-password-ok-button = Ütz\npdfjs-password-cancel-button = Tiq'at\npdfjs-web-fonts-disabled = E chupül ri taq ajk'amaya'l tz'ib': man tikirel ta nokisäx ri taq tz'ib' PDF pa ch'ikenïk\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Rucholajem tz'ib'\npdfjs-editor-free-text-button-label = Rucholajem tz'ib'\npdfjs-editor-ink-button =\n    .title = Tiwachib'ëx\npdfjs-editor-ink-button-label = Tiwachib'ëx\n# Editor Parameters\npdfjs-editor-free-text-color-input = B'onil\npdfjs-editor-free-text-size-input = Nimilem\npdfjs-editor-ink-color-input = B'onil\npdfjs-editor-ink-thickness-input = Rupimil\npdfjs-editor-ink-opacity-input = Q'equmal\npdfjs-free-text =\n    .aria-label = Nuk'unel tz'ib'atzij\npdfjs-free-text-default-content = Titikitisäx rutz'ib'axik…\npdfjs-ink =\n    .aria-label = Nuk'unel wachib'äl\npdfjs-ink-canvas =\n    .aria-label = Wachib'äl nuk'un ruma okisaxel\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/ckb/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = پەڕەی پێشوو\npdfjs-previous-button-label = پێشوو\npdfjs-next-button =\n    .title = پەڕەی دوواتر\npdfjs-next-button-label = دوواتر\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = پەرە\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = لە { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } لە { $pagesCount })\npdfjs-zoom-out-button =\n    .title = ڕۆچوونی\npdfjs-zoom-out-button-label = ڕۆچوونی\npdfjs-zoom-in-button =\n    .title = هێنانەپێش\npdfjs-zoom-in-button-label = هێنانەپێش\npdfjs-zoom-select =\n    .title = زووم\npdfjs-presentation-mode-button =\n    .title = گۆڕین بۆ دۆخی پێشکەشکردن\npdfjs-presentation-mode-button-label = دۆخی پێشکەشکردن\npdfjs-open-file-button =\n    .title = پەڕگە بکەرەوە\npdfjs-open-file-button-label = کردنەوە\npdfjs-print-button =\n    .title = چاپکردن\npdfjs-print-button-label = چاپکردن\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = ئامرازەکان\npdfjs-tools-button-label = ئامرازەکان\npdfjs-first-page-button =\n    .title = برۆ بۆ یەکەم پەڕە\npdfjs-first-page-button-label = بڕۆ بۆ یەکەم پەڕە\npdfjs-last-page-button =\n    .title = بڕۆ بۆ کۆتا پەڕە\npdfjs-last-page-button-label = بڕۆ بۆ کۆتا پەڕە\npdfjs-page-rotate-cw-button =\n    .title = ئاڕاستەی میلی کاتژمێر\npdfjs-page-rotate-cw-button-label = ئاڕاستەی میلی کاتژمێر\npdfjs-page-rotate-ccw-button =\n    .title = پێچەوانەی میلی کاتژمێر\npdfjs-page-rotate-ccw-button-label = پێچەوانەی میلی کاتژمێر\npdfjs-cursor-text-select-tool-button =\n    .title = توڵامرازی نیشانکەری دەق چالاک بکە\npdfjs-cursor-text-select-tool-button-label = توڵامرازی نیشانکەری دەق\npdfjs-cursor-hand-tool-button =\n    .title = توڵامرازی دەستی چالاک بکە\npdfjs-cursor-hand-tool-button-label = توڵامرازی دەستی\npdfjs-scroll-vertical-button =\n    .title = ناردنی ئەستوونی بەکاربێنە\npdfjs-scroll-vertical-button-label = ناردنی ئەستوونی\npdfjs-scroll-horizontal-button =\n    .title = ناردنی ئاسۆیی بەکاربێنە\npdfjs-scroll-horizontal-button-label = ناردنی ئاسۆیی\npdfjs-scroll-wrapped-button =\n    .title = ناردنی لوولکراو بەکاربێنە\npdfjs-scroll-wrapped-button-label = ناردنی لوولکراو\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = تایبەتمەندییەکانی بەڵگەنامە...\npdfjs-document-properties-button-label = تایبەتمەندییەکانی بەڵگەنامە...\npdfjs-document-properties-file-name = ناوی پەڕگە:\npdfjs-document-properties-file-size = قەبارەی پەڕگە:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } کب ({ $size_b } بایت)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } مب ({ $size_b } بایت)\npdfjs-document-properties-title = سەردێڕ:\npdfjs-document-properties-author = نووسەر\npdfjs-document-properties-subject = بابەت:\npdfjs-document-properties-keywords = کلیلەوشە:\npdfjs-document-properties-creation-date = بەرواری درووستکردن:\npdfjs-document-properties-modification-date = بەرواری دەستکاریکردن:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = درووستکەر:\npdfjs-document-properties-producer = بەرهەمهێنەری PDF:\npdfjs-document-properties-version = وەشانی PDF:\npdfjs-document-properties-page-count = ژمارەی پەرەکان:\npdfjs-document-properties-page-size = قەبارەی پەڕە:\npdfjs-document-properties-page-size-unit-inches = ئینچ\npdfjs-document-properties-page-size-unit-millimeters = ملم\npdfjs-document-properties-page-size-orientation-portrait = پۆرترەیت(درێژ)\npdfjs-document-properties-page-size-orientation-landscape = پانیی\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = نامە\npdfjs-document-properties-page-size-name-legal = یاسایی\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = پیشاندانی وێبی خێرا:\npdfjs-document-properties-linearized-yes = بەڵێ\npdfjs-document-properties-linearized-no = نەخێر\npdfjs-document-properties-close-button = داخستن\n\n## Print\n\npdfjs-print-progress-message = بەڵگەنامە ئامادەدەکرێت بۆ چاپکردن...\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = پاشگەزبوونەوە\npdfjs-printing-not-supported = ئاگاداربە: چاپکردن بە تەواوی پشتگیر ناکرێت لەم وێبگەڕە.\npdfjs-printing-not-ready = ئاگاداربە: PDF بە تەواوی بارنەبووە بۆ چاپکردن.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = لاتەنیشت پیشاندان/شاردنەوە\npdfjs-toggle-sidebar-button-label = لاتەنیشت پیشاندان/شاردنەوە\npdfjs-document-outline-button-label = سنووری چوارچێوە\npdfjs-attachments-button =\n    .title = پاشکۆکان پیشان بدە\npdfjs-attachments-button-label = پاشکۆکان\npdfjs-layers-button-label = چینەکان\npdfjs-thumbs-button =\n    .title = وێنۆچکە پیشان بدە\npdfjs-thumbs-button-label = وێنۆچکە\npdfjs-findbar-button =\n    .title = لە بەڵگەنامە بگەرێ\npdfjs-findbar-button-label = دۆزینەوە\npdfjs-additional-layers = چینی زیاتر\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = پەڕەی { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = وێنۆچکەی پەڕەی { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = دۆزینەوە\n    .placeholder = لە بەڵگەنامە بگەرێ...\npdfjs-find-previous-button =\n    .title = هەبوونی پێشوو بدۆزرەوە لە ڕستەکەدا\npdfjs-find-previous-button-label = پێشوو\npdfjs-find-next-button =\n    .title = هەبوونی داهاتوو بدۆزەرەوە لە ڕستەکەدا\npdfjs-find-next-button-label = دوواتر\npdfjs-find-highlight-checkbox = هەمووی نیشانە بکە\npdfjs-find-match-case-checkbox-label = دۆخی لەیەکچوون\npdfjs-find-entire-word-checkbox-label = هەموو وشەکان\npdfjs-find-reached-top = گەشتیتە سەرەوەی بەڵگەنامە، لە خوارەوە دەستت پێکرد\npdfjs-find-reached-bottom = گەشتیتە کۆتایی بەڵگەنامە. لەسەرەوە دەستت پێکرد\npdfjs-find-not-found = نووسین نەدۆزرایەوە\n\n## Predefined zoom values\n\npdfjs-page-scale-width = پانی پەڕە\npdfjs-page-scale-fit = پڕبوونی پەڕە\npdfjs-page-scale-auto = زوومی خۆکار\npdfjs-page-scale-actual = قەبارەی ڕاستی\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = هەڵەیەک ڕوویدا لە کاتی بارکردنی  PDF.\npdfjs-invalid-file-error = پەڕگەی pdf تێکچووە یان نەگونجاوە.\npdfjs-missing-file-error = پەڕگەی pdf بوونی نیە.\npdfjs-unexpected-response-error = وەڵامی ڕاژەخوازی نەخوازراو.\npdfjs-rendering-error = هەڵەیەک ڕوویدا لە کاتی پوختەکردنی (ڕێندەر) پەڕە.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } سەرنج]\n\n## Password\n\npdfjs-password-label = وشەی تێپەڕ بنووسە بۆ کردنەوەی پەڕگەی pdf.\npdfjs-password-invalid = وشەی تێپەڕ هەڵەیە. تکایە دووبارە هەوڵ بدەرەوە.\npdfjs-password-ok-button = باشە\npdfjs-password-cancel-button = پاشگەزبوونەوە\npdfjs-web-fonts-disabled = جۆرەپیتی وێب ناچالاکە: نەتوانی جۆرەپیتی تێخراوی ناو pdfـەکە بەکاربێت.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/cs/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Přejde na předchozí stránku\npdfjs-previous-button-label = Předchozí\npdfjs-next-button =\n    .title = Přejde na následující stránku\npdfjs-next-button-label = Další\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Stránka\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = z { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } z { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Zmenší velikost\npdfjs-zoom-out-button-label = Zmenšit\npdfjs-zoom-in-button =\n    .title = Zvětší velikost\npdfjs-zoom-in-button-label = Zvětšit\npdfjs-zoom-select =\n    .title = Nastaví velikost\npdfjs-presentation-mode-button =\n    .title = Přepne do režimu prezentace\npdfjs-presentation-mode-button-label = Režim prezentace\npdfjs-open-file-button =\n    .title = Otevře soubor\npdfjs-open-file-button-label = Otevřít\npdfjs-print-button =\n    .title = Vytiskne dokument\npdfjs-print-button-label = Vytisknout\npdfjs-save-button =\n    .title = Uložit\npdfjs-save-button-label = Uložit\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Stáhnout\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Stáhnout\npdfjs-bookmark-button =\n    .title = Aktuální stránka (zobrazit URL od aktuální stránky)\npdfjs-bookmark-button-label = Aktuální stránka\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Otevřít v aplikaci\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Otevřít v aplikaci\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Nástroje\npdfjs-tools-button-label = Nástroje\npdfjs-first-page-button =\n    .title = Přejde na první stránku\npdfjs-first-page-button-label = Přejít na první stránku\npdfjs-last-page-button =\n    .title = Přejde na poslední stránku\npdfjs-last-page-button-label = Přejít na poslední stránku\npdfjs-page-rotate-cw-button =\n    .title = Otočí po směru hodin\npdfjs-page-rotate-cw-button-label = Otočit po směru hodin\npdfjs-page-rotate-ccw-button =\n    .title = Otočí proti směru hodin\npdfjs-page-rotate-ccw-button-label = Otočit proti směru hodin\npdfjs-cursor-text-select-tool-button =\n    .title = Povolí výběr textu\npdfjs-cursor-text-select-tool-button-label = Výběr textu\npdfjs-cursor-hand-tool-button =\n    .title = Povolí nástroj ručička\npdfjs-cursor-hand-tool-button-label = Nástroj ručička\npdfjs-scroll-page-button =\n    .title = Posouvat po stránkách\npdfjs-scroll-page-button-label = Posouvání po stránkách\npdfjs-scroll-vertical-button =\n    .title = Použít svislé posouvání\npdfjs-scroll-vertical-button-label = Svislé posouvání\npdfjs-scroll-horizontal-button =\n    .title = Použít vodorovné posouvání\npdfjs-scroll-horizontal-button-label = Vodorovné posouvání\npdfjs-scroll-wrapped-button =\n    .title = Použít postupné posouvání\npdfjs-scroll-wrapped-button-label = Postupné posouvání\npdfjs-spread-none-button =\n    .title = Nesdružovat stránky\npdfjs-spread-none-button-label = Žádné sdružení\npdfjs-spread-odd-button =\n    .title = Sdruží stránky s umístěním lichých vlevo\npdfjs-spread-odd-button-label = Sdružení stránek (liché vlevo)\npdfjs-spread-even-button =\n    .title = Sdruží stránky s umístěním sudých vlevo\npdfjs-spread-even-button-label = Sdružení stránek (sudé vlevo)\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Vlastnosti dokumentu…\npdfjs-document-properties-button-label = Vlastnosti dokumentu…\npdfjs-document-properties-file-name = Název souboru:\npdfjs-document-properties-file-size = Velikost souboru:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bajtů)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bajtů)\npdfjs-document-properties-title = Název stránky:\npdfjs-document-properties-author = Autor:\npdfjs-document-properties-subject = Předmět:\npdfjs-document-properties-keywords = Klíčová slova:\npdfjs-document-properties-creation-date = Datum vytvoření:\npdfjs-document-properties-modification-date = Datum úpravy:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Vytvořil:\npdfjs-document-properties-producer = Tvůrce PDF:\npdfjs-document-properties-version = Verze PDF:\npdfjs-document-properties-page-count = Počet stránek:\npdfjs-document-properties-page-size = Velikost stránky:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = na výšku\npdfjs-document-properties-page-size-orientation-landscape = na šířku\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Dopis\npdfjs-document-properties-page-size-name-legal = Právní dokument\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Rychlé zobrazování z webu:\npdfjs-document-properties-linearized-yes = Ano\npdfjs-document-properties-linearized-no = Ne\npdfjs-document-properties-close-button = Zavřít\n\n## Print\n\npdfjs-print-progress-message = Příprava dokumentu pro tisk…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress } %\npdfjs-print-progress-close-button = Zrušit\npdfjs-printing-not-supported = Upozornění: Tisk není v tomto prohlížeči plně podporován.\npdfjs-printing-not-ready = Upozornění: Dokument PDF není kompletně načten.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Postranní lišta\npdfjs-toggle-sidebar-notification-button =\n    .title = Přepnout postranní lištu (dokument obsahuje osnovu/přílohy/vrstvy)\npdfjs-toggle-sidebar-button-label = Postranní lišta\npdfjs-document-outline-button =\n    .title = Zobrazí osnovu dokumentu (poklepání přepne zobrazení všech položek)\npdfjs-document-outline-button-label = Osnova dokumentu\npdfjs-attachments-button =\n    .title = Zobrazí přílohy\npdfjs-attachments-button-label = Přílohy\npdfjs-layers-button =\n    .title = Zobrazit vrstvy (poklepáním obnovíte všechny vrstvy do výchozího stavu)\npdfjs-layers-button-label = Vrstvy\npdfjs-thumbs-button =\n    .title = Zobrazí náhledy\npdfjs-thumbs-button-label = Náhledy\npdfjs-current-outline-item-button =\n    .title = Najít aktuální položku v osnově\npdfjs-current-outline-item-button-label = Aktuální položka v osnově\npdfjs-findbar-button =\n    .title = Najde v dokumentu\npdfjs-findbar-button-label = Najít\npdfjs-additional-layers = Další vrstvy\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Strana { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Náhled strany { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Najít\n    .placeholder = Najít v dokumentu…\npdfjs-find-previous-button =\n    .title = Najde předchozí výskyt hledaného textu\npdfjs-find-previous-button-label = Předchozí\npdfjs-find-next-button =\n    .title = Najde další výskyt hledaného textu\npdfjs-find-next-button-label = Další\npdfjs-find-highlight-checkbox = Zvýraznit\npdfjs-find-match-case-checkbox-label = Rozlišovat velikost\npdfjs-find-match-diacritics-checkbox-label = Rozlišovat diakritiku\npdfjs-find-entire-word-checkbox-label = Celá slova\npdfjs-find-reached-top = Dosažen začátek dokumentu, pokračuje se od konce\npdfjs-find-reached-bottom = Dosažen konec dokumentu, pokračuje se od začátku\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current }. z { $total } výskytu\n        [few] { $current }. z { $total } výskytů\n        [many] { $current }. z { $total } výskytů\n       *[other] { $current }. z { $total } výskytů\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Více než { $limit } výskyt\n        [few] Více než { $limit } výskyty\n        [many] Více než { $limit } výskytů\n       *[other] Více než { $limit } výskytů\n    }\npdfjs-find-not-found = Hledaný text nenalezen\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Podle šířky\npdfjs-page-scale-fit = Podle výšky\npdfjs-page-scale-auto = Automatická velikost\npdfjs-page-scale-actual = Skutečná velikost\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale } %\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Strana { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Při nahrávání PDF nastala chyba.\npdfjs-invalid-file-error = Neplatný nebo chybný soubor PDF.\npdfjs-missing-file-error = Chybí soubor PDF.\npdfjs-unexpected-response-error = Neočekávaná odpověď serveru.\npdfjs-rendering-error = Při vykreslování stránky nastala chyba.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Anotace typu { $type }]\n\n## Password\n\npdfjs-password-label = Pro otevření PDF souboru vložte heslo.\npdfjs-password-invalid = Neplatné heslo. Zkuste to znovu.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Zrušit\npdfjs-web-fonts-disabled = Webová písma jsou zakázána, proto není možné použít vložená písma PDF.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Text\npdfjs-editor-free-text-button-label = Text\npdfjs-editor-ink-button =\n    .title = Kreslení\npdfjs-editor-ink-button-label = Kreslení\npdfjs-editor-stamp-button =\n    .title = Přidání či úprava obrázků\npdfjs-editor-stamp-button-label = Přidání či úprava obrázků\npdfjs-editor-highlight-button =\n    .title = Zvýraznění\npdfjs-editor-highlight-button-label = Zvýraznění\npdfjs-highlight-floating-button =\n    .title = Zvýraznit\npdfjs-highlight-floating-button1 =\n    .title = Zvýraznit\n    .aria-label = Zvýraznit\npdfjs-highlight-floating-button-label = Zvýraznit\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Odebrat kresbu\npdfjs-editor-remove-freetext-button =\n    .title = Odebrat text\npdfjs-editor-remove-stamp-button =\n    .title = Odebrat obrázek\npdfjs-editor-remove-highlight-button =\n    .title = Odebrat zvýraznění\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Barva\npdfjs-editor-free-text-size-input = Velikost\npdfjs-editor-ink-color-input = Barva\npdfjs-editor-ink-thickness-input = Tloušťka\npdfjs-editor-ink-opacity-input = Průhlednost\npdfjs-editor-stamp-add-image-button =\n    .title = Přidat obrázek\npdfjs-editor-stamp-add-image-button-label = Přidat obrázek\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Tloušťka\npdfjs-editor-free-highlight-thickness-title =\n    .title = Změna tloušťky při zvýrazňování jiných položek než textu\npdfjs-free-text =\n    .aria-label = Textový editor\npdfjs-free-text-default-content = Začněte psát…\npdfjs-ink =\n    .aria-label = Editor kreslení\npdfjs-ink-canvas =\n    .aria-label = Uživatelem vytvořený obrázek\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Náhradní popis\npdfjs-editor-alt-text-edit-button-label = Upravit náhradní popis\npdfjs-editor-alt-text-dialog-label = Vyberte možnost\npdfjs-editor-alt-text-dialog-description = Náhradní popis pomáhá, když lidé obrázek nevidí nebo když se nenačítá.\npdfjs-editor-alt-text-add-description-label = Přidat popis\npdfjs-editor-alt-text-add-description-description = Snažte se o 1-2 věty, které popisují předmět, prostředí nebo činnosti.\npdfjs-editor-alt-text-mark-decorative-label = Označit jako dekorativní\npdfjs-editor-alt-text-mark-decorative-description = Používá se pro okrasné obrázky, jako jsou rámečky nebo vodoznaky.\npdfjs-editor-alt-text-cancel-button = Zrušit\npdfjs-editor-alt-text-save-button = Uložit\npdfjs-editor-alt-text-decorative-tooltip = Označen jako dekorativní\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Například: “Mladý muž si sedá ke stolu, aby se najedl.”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Levý horní roh — změna velikosti\npdfjs-editor-resizer-label-top-middle = Horní střed — změna velikosti\npdfjs-editor-resizer-label-top-right = Pravý horní roh — změna velikosti\npdfjs-editor-resizer-label-middle-right = Vpravo uprostřed — změna velikosti\npdfjs-editor-resizer-label-bottom-right = Pravý dolní roh — změna velikosti\npdfjs-editor-resizer-label-bottom-middle = Střed dole — změna velikosti\npdfjs-editor-resizer-label-bottom-left = Levý dolní roh — změna velikosti\npdfjs-editor-resizer-label-middle-left = Vlevo uprostřed — změna velikosti\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Barva zvýraznění\npdfjs-editor-colorpicker-button =\n    .title = Změna barvy\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Výběr barev\npdfjs-editor-colorpicker-yellow =\n    .title = Žlutá\npdfjs-editor-colorpicker-green =\n    .title = Zelená\npdfjs-editor-colorpicker-blue =\n    .title = Modrá\npdfjs-editor-colorpicker-pink =\n    .title = Růžová\npdfjs-editor-colorpicker-red =\n    .title = Červená\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Zobrazit vše\npdfjs-editor-highlight-show-all-button =\n    .title = Zobrazit vše\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/cy/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Tudalen Flaenorol\npdfjs-previous-button-label = Blaenorol\npdfjs-next-button =\n    .title = Tudalen Nesaf\npdfjs-next-button-label = Nesaf\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Tudalen\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = o { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } o { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Lleihau\npdfjs-zoom-out-button-label = Lleihau\npdfjs-zoom-in-button =\n    .title = Cynyddu\npdfjs-zoom-in-button-label = Cynyddu\npdfjs-zoom-select =\n    .title = Chwyddo\npdfjs-presentation-mode-button =\n    .title = Newid i'r Modd Cyflwyno\npdfjs-presentation-mode-button-label = Modd Cyflwyno\npdfjs-open-file-button =\n    .title = Agor Ffeil\npdfjs-open-file-button-label = Agor\npdfjs-print-button =\n    .title = Argraffu\npdfjs-print-button-label = Argraffu\npdfjs-save-button =\n    .title = Cadw\npdfjs-save-button-label = Cadw\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Llwytho i lawr\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Llwytho i lawr\npdfjs-bookmark-button =\n    .title = Tudalen Gyfredol (Gweld URL o'r Dudalen Gyfredol)\npdfjs-bookmark-button-label = Tudalen Gyfredol\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Agor yn yr ap\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Agor yn yr ap\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Offer\npdfjs-tools-button-label = Offer\npdfjs-first-page-button =\n    .title = Mynd i'r Dudalen Gyntaf\npdfjs-first-page-button-label = Mynd i'r Dudalen Gyntaf\npdfjs-last-page-button =\n    .title = Mynd i'r Dudalen Olaf\npdfjs-last-page-button-label = Mynd i'r Dudalen Olaf\npdfjs-page-rotate-cw-button =\n    .title = Cylchdroi Clocwedd\npdfjs-page-rotate-cw-button-label = Cylchdroi Clocwedd\npdfjs-page-rotate-ccw-button =\n    .title = Cylchdroi Gwrthglocwedd\npdfjs-page-rotate-ccw-button-label = Cylchdroi Gwrthglocwedd\npdfjs-cursor-text-select-tool-button =\n    .title = Galluogi Dewis Offeryn Testun\npdfjs-cursor-text-select-tool-button-label = Offeryn Dewis Testun\npdfjs-cursor-hand-tool-button =\n    .title = Galluogi Offeryn Llaw\npdfjs-cursor-hand-tool-button-label = Offeryn Llaw\npdfjs-scroll-page-button =\n    .title = Defnyddio Sgrolio Tudalen\npdfjs-scroll-page-button-label = Sgrolio Tudalen\npdfjs-scroll-vertical-button =\n    .title = Defnyddio Sgrolio Fertigol\npdfjs-scroll-vertical-button-label = Sgrolio Fertigol\npdfjs-scroll-horizontal-button =\n    .title = Defnyddio Sgrolio Llorweddol\npdfjs-scroll-horizontal-button-label = Sgrolio Llorweddol\npdfjs-scroll-wrapped-button =\n    .title = Defnyddio Sgrolio Amlapio\npdfjs-scroll-wrapped-button-label = Sgrolio Amlapio\npdfjs-spread-none-button =\n    .title = Peidio uno trawsdaleniadau\npdfjs-spread-none-button-label = Dim Trawsdaleniadau\npdfjs-spread-odd-button =\n    .title = Uno trawsdaleniadau gan gychwyn gyda thudalennau odrif\npdfjs-spread-odd-button-label = Trawsdaleniadau Odrif\npdfjs-spread-even-button =\n    .title = Uno trawsdaleniadau gan gychwyn gyda thudalennau eilrif\npdfjs-spread-even-button-label = Trawsdaleniadau Eilrif\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Priodweddau Dogfen…\npdfjs-document-properties-button-label = Priodweddau Dogfen…\npdfjs-document-properties-file-name = Enw ffeil:\npdfjs-document-properties-file-size = Maint ffeil:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } beit)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } beit)\npdfjs-document-properties-title = Teitl:\npdfjs-document-properties-author = Awdur:\npdfjs-document-properties-subject = Pwnc:\npdfjs-document-properties-keywords = Allweddair:\npdfjs-document-properties-creation-date = Dyddiad Creu:\npdfjs-document-properties-modification-date = Dyddiad Addasu:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Crewr:\npdfjs-document-properties-producer = Cynhyrchydd PDF:\npdfjs-document-properties-version = Fersiwn PDF:\npdfjs-document-properties-page-count = Cyfrif Tudalen:\npdfjs-document-properties-page-size = Maint Tudalen:\npdfjs-document-properties-page-size-unit-inches = o fewn\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = portread\npdfjs-document-properties-page-size-orientation-landscape = tirlun\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Llythyr\npdfjs-document-properties-page-size-name-legal = Cyfreithiol\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Golwg Gwe Cyflym:\npdfjs-document-properties-linearized-yes = Iawn\npdfjs-document-properties-linearized-no = Na\npdfjs-document-properties-close-button = Cau\n\n## Print\n\npdfjs-print-progress-message = Paratoi dogfen ar gyfer ei hargraffu…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Diddymu\npdfjs-printing-not-supported = Rhybudd: Nid yw argraffu yn cael ei gynnal yn llawn gan y porwr.\npdfjs-printing-not-ready = Rhybudd: Nid yw'r PDF wedi ei lwytho'n llawn ar gyfer argraffu.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Toglo'r Bar Ochr\npdfjs-toggle-sidebar-notification-button =\n    .title = Toglo'r Bar Ochr (mae'r ddogfen yn cynnwys amlinelliadau/atodiadau/haenau)\npdfjs-toggle-sidebar-button-label = Toglo'r Bar Ochr\npdfjs-document-outline-button =\n    .title = Dangos Amlinell Dogfen (clic dwbl i ymestyn/cau pob eitem)\npdfjs-document-outline-button-label = Amlinelliad Dogfen\npdfjs-attachments-button =\n    .title = Dangos Atodiadau\npdfjs-attachments-button-label = Atodiadau\npdfjs-layers-button =\n    .title = Dangos Haenau (cliciwch ddwywaith i ailosod yr holl haenau i'r cyflwr rhagosodedig)\npdfjs-layers-button-label = Haenau\npdfjs-thumbs-button =\n    .title = Dangos Lluniau Bach\npdfjs-thumbs-button-label = Lluniau Bach\npdfjs-current-outline-item-button =\n    .title = Canfod yr Eitem Amlinellol Gyfredol\npdfjs-current-outline-item-button-label = Yr Eitem Amlinellol Gyfredol\npdfjs-findbar-button =\n    .title = Canfod yn y Ddogfen\npdfjs-findbar-button-label = Canfod\npdfjs-additional-layers = Haenau Ychwanegol\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Tudalen { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Llun Bach Tudalen { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Canfod\n    .placeholder = Canfod yn y ddogfen…\npdfjs-find-previous-button =\n    .title = Canfod enghraifft flaenorol o'r ymadrodd\npdfjs-find-previous-button-label = Blaenorol\npdfjs-find-next-button =\n    .title = Canfod enghraifft nesaf yr ymadrodd\npdfjs-find-next-button-label = Nesaf\npdfjs-find-highlight-checkbox = Amlygu Popeth\npdfjs-find-match-case-checkbox-label = Cydweddu Maint\npdfjs-find-match-diacritics-checkbox-label = Diacritigau Cyfatebol\npdfjs-find-entire-word-checkbox-label = Geiriau Cyfan\npdfjs-find-reached-top = Wedi cyrraedd brig y dudalen, parhau o'r gwaelod\npdfjs-find-reached-bottom = Wedi cyrraedd diwedd y dudalen, parhau o'r brig\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [zero] { $current } o { $total } cydweddiadau\n        [one] { $current } o { $total } cydweddiad\n        [two] { $current } o { $total } gydweddiad\n        [few] { $current } o { $total } cydweddiad\n        [many] { $current } o { $total } chydweddiad\n       *[other] { $current } o { $total } cydweddiad\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [zero] Mwy nag { $limit } cydweddiadau\n        [one] Mwy nag { $limit } cydweddiad\n        [two] Mwy nag { $limit } gydweddiad\n        [few] Mwy nag { $limit } cydweddiad\n        [many] Mwy nag { $limit } chydweddiad\n       *[other] Mwy nag { $limit } cydweddiad\n    }\npdfjs-find-not-found = Heb ganfod ymadrodd\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Lled Tudalen\npdfjs-page-scale-fit = Ffit Tudalen\npdfjs-page-scale-auto = Chwyddo Awtomatig\npdfjs-page-scale-actual = Maint Gwirioneddol\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Tudalen { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Digwyddodd gwall wrth lwytho'r PDF.\npdfjs-invalid-file-error = Ffeil PDF annilys neu llwgr.\npdfjs-missing-file-error = Ffeil PDF coll.\npdfjs-unexpected-response-error = Ymateb annisgwyl gan y gweinydd.\npdfjs-rendering-error = Digwyddodd gwall wrth adeiladu'r dudalen.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Anodiad { $type } ]\n\n## Password\n\npdfjs-password-label = Rhowch gyfrinair i agor y PDF.\npdfjs-password-invalid = Cyfrinair annilys. Ceisiwch eto.\npdfjs-password-ok-button = Iawn\npdfjs-password-cancel-button = Diddymu\npdfjs-web-fonts-disabled = Ffontiau gwe wedi eu hanalluogi: methu defnyddio ffontiau PDF mewnblanedig.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Testun\npdfjs-editor-free-text-button-label = Testun\npdfjs-editor-ink-button =\n    .title = Lluniadu\npdfjs-editor-ink-button-label = Lluniadu\npdfjs-editor-stamp-button =\n    .title = Ychwanegu neu olygu delweddau\npdfjs-editor-stamp-button-label = Ychwanegu neu olygu delweddau\npdfjs-editor-highlight-button =\n    .title = Amlygu\npdfjs-editor-highlight-button-label = Amlygu\npdfjs-highlight-floating-button =\n    .title = Amlygu\npdfjs-highlight-floating-button1 =\n    .title = Amlygu\n    .aria-label = Amlygu\npdfjs-highlight-floating-button-label = Amlygu\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Dileu lluniad\npdfjs-editor-remove-freetext-button =\n    .title = Dileu testun\npdfjs-editor-remove-stamp-button =\n    .title = Dileu delwedd\npdfjs-editor-remove-highlight-button =\n    .title = Tynnu amlygiad\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Lliw\npdfjs-editor-free-text-size-input = Maint\npdfjs-editor-ink-color-input = Lliw\npdfjs-editor-ink-thickness-input = Trwch\npdfjs-editor-ink-opacity-input = Didreiddedd\npdfjs-editor-stamp-add-image-button =\n    .title = Ychwanegu delwedd\npdfjs-editor-stamp-add-image-button-label = Ychwanegu delwedd\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Trwch\npdfjs-editor-free-highlight-thickness-title =\n    .title = Newid trwch wrth amlygu eitemau heblaw testun\npdfjs-free-text =\n    .aria-label = Golygydd Testun\npdfjs-free-text-default-content = Cychwyn teipio…\npdfjs-ink =\n    .aria-label = Golygydd Lluniadu\npdfjs-ink-canvas =\n    .aria-label = Delwedd wedi'i chreu gan ddefnyddwyr\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Testun amgen (alt)\npdfjs-editor-alt-text-edit-button-label = Golygu testun amgen\npdfjs-editor-alt-text-dialog-label = Dewisiadau\npdfjs-editor-alt-text-dialog-description = Mae testun amgen (testun alt) yn helpu pan na all pobl weld y ddelwedd neu pan nad yw'n llwytho.\npdfjs-editor-alt-text-add-description-label = Ychwanegu disgrifiad\npdfjs-editor-alt-text-add-description-description = Anelwch at 1-2 frawddeg sy'n disgrifio'r pwnc, y cefndir neu'r gweithredoedd.\npdfjs-editor-alt-text-mark-decorative-label = Marcio fel addurniadol\npdfjs-editor-alt-text-mark-decorative-description = Mae'n cael ei ddefnyddio ar gyfer delweddau addurniadol, fel borderi neu farciau dŵr.\npdfjs-editor-alt-text-cancel-button = Diddymu\npdfjs-editor-alt-text-save-button = Cadw\npdfjs-editor-alt-text-decorative-tooltip = Marcio fel addurniadol\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Er enghraifft, “Mae dyn ifanc yn eistedd wrth fwrdd i fwyta pryd bwyd”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Y gornel chwith uchaf — newid maint\npdfjs-editor-resizer-label-top-middle = Canol uchaf - newid maint\npdfjs-editor-resizer-label-top-right = Y gornel dde uchaf - newid maint\npdfjs-editor-resizer-label-middle-right = De canol - newid maint\npdfjs-editor-resizer-label-bottom-right = Y gornel dde isaf — newid maint\npdfjs-editor-resizer-label-bottom-middle = Canol gwaelod — newid maint\npdfjs-editor-resizer-label-bottom-left = Y gornel chwith isaf — newid maint\npdfjs-editor-resizer-label-middle-left = Chwith canol — newid maint\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Lliw amlygu\npdfjs-editor-colorpicker-button =\n    .title = Newid lliw\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Dewisiadau lliw\npdfjs-editor-colorpicker-yellow =\n    .title = Melyn\npdfjs-editor-colorpicker-green =\n    .title = Gwyrdd\npdfjs-editor-colorpicker-blue =\n    .title = Glas\npdfjs-editor-colorpicker-pink =\n    .title = Pinc\npdfjs-editor-colorpicker-red =\n    .title = Coch\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Dangos y cyfan\npdfjs-editor-highlight-show-all-button =\n    .title = Dangos y cyfan\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/da/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Forrige side\npdfjs-previous-button-label = Forrige\npdfjs-next-button =\n    .title = Næste side\npdfjs-next-button-label = Næste\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Side\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = af { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } af { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Zoom ud\npdfjs-zoom-out-button-label = Zoom ud\npdfjs-zoom-in-button =\n    .title = Zoom ind\npdfjs-zoom-in-button-label = Zoom ind\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Skift til fuldskærmsvisning\npdfjs-presentation-mode-button-label = Fuldskærmsvisning\npdfjs-open-file-button =\n    .title = Åbn fil\npdfjs-open-file-button-label = Åbn\npdfjs-print-button =\n    .title = Udskriv\npdfjs-print-button-label = Udskriv\npdfjs-save-button =\n    .title = Gem\npdfjs-save-button-label = Gem\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Hent\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Hent\npdfjs-bookmark-button =\n    .title = Aktuel side (vis URL fra den aktuelle side)\npdfjs-bookmark-button-label = Aktuel side\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Åbn i app\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Åbn i app\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Funktioner\npdfjs-tools-button-label = Funktioner\npdfjs-first-page-button =\n    .title = Gå til første side\npdfjs-first-page-button-label = Gå til første side\npdfjs-last-page-button =\n    .title = Gå til sidste side\npdfjs-last-page-button-label = Gå til sidste side\npdfjs-page-rotate-cw-button =\n    .title = Roter med uret\npdfjs-page-rotate-cw-button-label = Roter med uret\npdfjs-page-rotate-ccw-button =\n    .title = Roter mod uret\npdfjs-page-rotate-ccw-button-label = Roter mod uret\npdfjs-cursor-text-select-tool-button =\n    .title = Aktiver markeringsværktøj\npdfjs-cursor-text-select-tool-button-label = Markeringsværktøj\npdfjs-cursor-hand-tool-button =\n    .title = Aktiver håndværktøj\npdfjs-cursor-hand-tool-button-label = Håndværktøj\npdfjs-scroll-page-button =\n    .title = Brug sidescrolling\npdfjs-scroll-page-button-label = Sidescrolling\npdfjs-scroll-vertical-button =\n    .title = Brug vertikal scrolling\npdfjs-scroll-vertical-button-label = Vertikal scrolling\npdfjs-scroll-horizontal-button =\n    .title = Brug horisontal scrolling\npdfjs-scroll-horizontal-button-label = Horisontal scrolling\npdfjs-scroll-wrapped-button =\n    .title = Brug ombrudt scrolling\npdfjs-scroll-wrapped-button-label = Ombrudt scrolling\npdfjs-spread-none-button =\n    .title = Vis enkeltsider\npdfjs-spread-none-button-label = Enkeltsider\npdfjs-spread-odd-button =\n    .title = Vis opslag med ulige sidenumre til venstre\npdfjs-spread-odd-button-label = Opslag med forside\npdfjs-spread-even-button =\n    .title = Vis opslag med lige sidenumre til venstre\npdfjs-spread-even-button-label = Opslag uden forside\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Dokumentegenskaber…\npdfjs-document-properties-button-label = Dokumentegenskaber…\npdfjs-document-properties-file-name = Filnavn:\npdfjs-document-properties-file-size = Filstørrelse:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Titel:\npdfjs-document-properties-author = Forfatter:\npdfjs-document-properties-subject = Emne:\npdfjs-document-properties-keywords = Nøgleord:\npdfjs-document-properties-creation-date = Oprettet:\npdfjs-document-properties-modification-date = Redigeret:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Program:\npdfjs-document-properties-producer = PDF-producent:\npdfjs-document-properties-version = PDF-version:\npdfjs-document-properties-page-count = Antal sider:\npdfjs-document-properties-page-size = Sidestørrelse:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = stående\npdfjs-document-properties-page-size-orientation-landscape = liggende\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Hurtig web-visning:\npdfjs-document-properties-linearized-yes = Ja\npdfjs-document-properties-linearized-no = Nej\npdfjs-document-properties-close-button = Luk\n\n## Print\n\npdfjs-print-progress-message = Forbereder dokument til udskrivning…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Annuller\npdfjs-printing-not-supported = Advarsel: Udskrivning er ikke fuldt understøttet af browseren.\npdfjs-printing-not-ready = Advarsel: PDF-filen er ikke fuldt indlæst til udskrivning.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Slå sidepanel til eller fra\npdfjs-toggle-sidebar-notification-button =\n    .title = Slå sidepanel til eller fra (dokumentet indeholder disposition/vedhæftede filer/lag)\npdfjs-toggle-sidebar-button-label = Slå sidepanel til eller fra\npdfjs-document-outline-button =\n    .title = Vis dokumentets disposition (dobbeltklik for at vise/skjule alle elementer)\npdfjs-document-outline-button-label = Dokument-disposition\npdfjs-attachments-button =\n    .title = Vis vedhæftede filer\npdfjs-attachments-button-label = Vedhæftede filer\npdfjs-layers-button =\n    .title = Vis lag (dobbeltklik for at nulstille alle lag til standard-tilstanden)\npdfjs-layers-button-label = Lag\npdfjs-thumbs-button =\n    .title = Vis miniaturer\npdfjs-thumbs-button-label = Miniaturer\npdfjs-current-outline-item-button =\n    .title = Find det aktuelle dispositions-element\npdfjs-current-outline-item-button-label = Aktuelt dispositions-element\npdfjs-findbar-button =\n    .title = Find i dokument\npdfjs-findbar-button-label = Find\npdfjs-additional-layers = Yderligere lag\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Side { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniature af side { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Find\n    .placeholder = Find i dokument…\npdfjs-find-previous-button =\n    .title = Find den forrige forekomst\npdfjs-find-previous-button-label = Forrige\npdfjs-find-next-button =\n    .title = Find den næste forekomst\npdfjs-find-next-button-label = Næste\npdfjs-find-highlight-checkbox = Fremhæv alle\npdfjs-find-match-case-checkbox-label = Forskel på store og små bogstaver\npdfjs-find-match-diacritics-checkbox-label = Diakritiske tegn\npdfjs-find-entire-word-checkbox-label = Hele ord\npdfjs-find-reached-top = Toppen af siden blev nået, fortsatte fra bunden\npdfjs-find-reached-bottom = Bunden af siden blev nået, fortsatte fra toppen\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } af { $total } forekomst\n       *[other] { $current } af { $total } forekomster\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Mere end { $limit } forekomst\n       *[other] Mere end { $limit } forekomster\n    }\npdfjs-find-not-found = Der blev ikke fundet noget\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Sidebredde\npdfjs-page-scale-fit = Tilpas til side\npdfjs-page-scale-auto = Automatisk zoom\npdfjs-page-scale-actual = Faktisk størrelse\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Side { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Der opstod en fejl ved indlæsning af PDF-filen.\npdfjs-invalid-file-error = PDF-filen er ugyldig eller ødelagt.\npdfjs-missing-file-error = Manglende PDF-fil.\npdfjs-unexpected-response-error = Uventet svar fra serveren.\npdfjs-rendering-error = Der opstod en fejl ved generering af siden.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type }kommentar]\n\n## Password\n\npdfjs-password-label = Angiv adgangskode til at åbne denne PDF-fil.\npdfjs-password-invalid = Ugyldig adgangskode. Prøv igen.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Fortryd\npdfjs-web-fonts-disabled = Webskrifttyper er deaktiverede. De indlejrede skrifttyper i PDF-filen kan ikke anvendes.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Tekst\npdfjs-editor-free-text-button-label = Tekst\npdfjs-editor-ink-button =\n    .title = Tegn\npdfjs-editor-ink-button-label = Tegn\npdfjs-editor-stamp-button =\n    .title = Tilføj eller rediger billeder\npdfjs-editor-stamp-button-label = Tilføj eller rediger billeder\npdfjs-editor-highlight-button =\n    .title = Fremhæv\npdfjs-editor-highlight-button-label = Fremhæv\npdfjs-highlight-floating-button =\n    .title = Fremhæv\npdfjs-highlight-floating-button1 =\n    .title = Fremhæv\n    .aria-label = Fremhæv\npdfjs-highlight-floating-button-label = Fremhæv\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Fjern tegning\npdfjs-editor-remove-freetext-button =\n    .title = Fjern tekst\npdfjs-editor-remove-stamp-button =\n    .title = Fjern billede\npdfjs-editor-remove-highlight-button =\n    .title = Fjern fremhævning\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Farve\npdfjs-editor-free-text-size-input = Størrelse\npdfjs-editor-ink-color-input = Farve\npdfjs-editor-ink-thickness-input = Tykkelse\npdfjs-editor-ink-opacity-input = Uigennemsigtighed\npdfjs-editor-stamp-add-image-button =\n    .title = Tilføj billede\npdfjs-editor-stamp-add-image-button-label = Tilføj billede\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Tykkelse\npdfjs-editor-free-highlight-thickness-title =\n    .title = Ændr tykkelse, når andre elementer end tekst fremhæves\npdfjs-free-text =\n    .aria-label = Teksteditor\npdfjs-free-text-default-content = Begynd at skrive…\npdfjs-ink =\n    .aria-label = Tegnings-editor\npdfjs-ink-canvas =\n    .aria-label = Brugeroprettet billede\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Alternativ tekst\npdfjs-editor-alt-text-edit-button-label = Rediger alternativ tekst\npdfjs-editor-alt-text-dialog-label = Vælg en indstilling\npdfjs-editor-alt-text-dialog-description = Alternativ tekst hjælper folk, som ikke kan se billedet eller når det ikke indlæses.\npdfjs-editor-alt-text-add-description-label = Tilføj en beskrivelse\npdfjs-editor-alt-text-add-description-description = Sigt efter en eller to sætninger, der beskriver emnet, omgivelserne eller handlinger.\npdfjs-editor-alt-text-mark-decorative-label = Marker som dekorativ\npdfjs-editor-alt-text-mark-decorative-description = Dette bruges for dekorative billeder som rammer eller vandmærker.\npdfjs-editor-alt-text-cancel-button = Annuller\npdfjs-editor-alt-text-save-button = Gem\npdfjs-editor-alt-text-decorative-tooltip = Markeret som dekorativ\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = For eksempel: \"En ung mand sætter sig ved et bord for at spise et måltid mad\"\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Øverste venstre hjørne — tilpas størrelse\npdfjs-editor-resizer-label-top-middle = Øverste i midten — tilpas størrelse\npdfjs-editor-resizer-label-top-right = Øverste højre hjørne — tilpas størrelse\npdfjs-editor-resizer-label-middle-right = Midten til højre — tilpas størrelse\npdfjs-editor-resizer-label-bottom-right = Nederste højre hjørne - tilpas størrelse\npdfjs-editor-resizer-label-bottom-middle = Nederst i midten - tilpas størrelse\npdfjs-editor-resizer-label-bottom-left = Nederste venstre hjørne - tilpas størrelse\npdfjs-editor-resizer-label-middle-left = Midten til venstre — tilpas størrelse\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Fremhævningsfarve\npdfjs-editor-colorpicker-button =\n    .title = Skift farve\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Farvevalg\npdfjs-editor-colorpicker-yellow =\n    .title = Gul\npdfjs-editor-colorpicker-green =\n    .title = Grøn\npdfjs-editor-colorpicker-blue =\n    .title = Blå\npdfjs-editor-colorpicker-pink =\n    .title = Lyserød\npdfjs-editor-colorpicker-red =\n    .title = Rød\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Vis alle\npdfjs-editor-highlight-show-all-button =\n    .title = Vis alle\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/de/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Eine Seite zurück\npdfjs-previous-button-label = Zurück\npdfjs-next-button =\n    .title = Eine Seite vor\npdfjs-next-button-label = Vor\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Seite\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = von { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } von { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Verkleinern\npdfjs-zoom-out-button-label = Verkleinern\npdfjs-zoom-in-button =\n    .title = Vergrößern\npdfjs-zoom-in-button-label = Vergrößern\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = In Präsentationsmodus wechseln\npdfjs-presentation-mode-button-label = Präsentationsmodus\npdfjs-open-file-button =\n    .title = Datei öffnen\npdfjs-open-file-button-label = Öffnen\npdfjs-print-button =\n    .title = Drucken\npdfjs-print-button-label = Drucken\npdfjs-save-button =\n    .title = Speichern\npdfjs-save-button-label = Speichern\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Herunterladen\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Herunterladen\npdfjs-bookmark-button =\n    .title = Aktuelle Seite (URL von aktueller Seite anzeigen)\npdfjs-bookmark-button-label = Aktuelle Seite\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Mit App öffnen\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Mit App öffnen\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Werkzeuge\npdfjs-tools-button-label = Werkzeuge\npdfjs-first-page-button =\n    .title = Erste Seite anzeigen\npdfjs-first-page-button-label = Erste Seite anzeigen\npdfjs-last-page-button =\n    .title = Letzte Seite anzeigen\npdfjs-last-page-button-label = Letzte Seite anzeigen\npdfjs-page-rotate-cw-button =\n    .title = Im Uhrzeigersinn drehen\npdfjs-page-rotate-cw-button-label = Im Uhrzeigersinn drehen\npdfjs-page-rotate-ccw-button =\n    .title = Gegen Uhrzeigersinn drehen\npdfjs-page-rotate-ccw-button-label = Gegen Uhrzeigersinn drehen\npdfjs-cursor-text-select-tool-button =\n    .title = Textauswahl-Werkzeug aktivieren\npdfjs-cursor-text-select-tool-button-label = Textauswahl-Werkzeug\npdfjs-cursor-hand-tool-button =\n    .title = Hand-Werkzeug aktivieren\npdfjs-cursor-hand-tool-button-label = Hand-Werkzeug\npdfjs-scroll-page-button =\n    .title = Seiten einzeln anordnen\npdfjs-scroll-page-button-label = Einzelseitenanordnung\npdfjs-scroll-vertical-button =\n    .title = Seiten übereinander anordnen\npdfjs-scroll-vertical-button-label = Vertikale Seitenanordnung\npdfjs-scroll-horizontal-button =\n    .title = Seiten nebeneinander anordnen\npdfjs-scroll-horizontal-button-label = Horizontale Seitenanordnung\npdfjs-scroll-wrapped-button =\n    .title = Seiten neben- und übereinander anordnen, abhängig vom Platz\npdfjs-scroll-wrapped-button-label = Kombinierte Seitenanordnung\npdfjs-spread-none-button =\n    .title = Seiten nicht nebeneinander anzeigen\npdfjs-spread-none-button-label = Einzelne Seiten\npdfjs-spread-odd-button =\n    .title = Jeweils eine ungerade und eine gerade Seite nebeneinander anzeigen\npdfjs-spread-odd-button-label = Ungerade + gerade Seite\npdfjs-spread-even-button =\n    .title = Jeweils eine gerade und eine ungerade Seite nebeneinander anzeigen\npdfjs-spread-even-button-label = Gerade + ungerade Seite\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Dokumenteigenschaften\npdfjs-document-properties-button-label = Dokumenteigenschaften…\npdfjs-document-properties-file-name = Dateiname:\npdfjs-document-properties-file-size = Dateigröße:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } Bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } Bytes)\npdfjs-document-properties-title = Titel:\npdfjs-document-properties-author = Autor:\npdfjs-document-properties-subject = Thema:\npdfjs-document-properties-keywords = Stichwörter:\npdfjs-document-properties-creation-date = Erstelldatum:\npdfjs-document-properties-modification-date = Bearbeitungsdatum:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date } { $time }\npdfjs-document-properties-creator = Anwendung:\npdfjs-document-properties-producer = PDF erstellt mit:\npdfjs-document-properties-version = PDF-Version:\npdfjs-document-properties-page-count = Seitenzahl:\npdfjs-document-properties-page-size = Seitengröße:\npdfjs-document-properties-page-size-unit-inches = Zoll\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = Hochformat\npdfjs-document-properties-page-size-orientation-landscape = Querformat\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Schnelle Webanzeige:\npdfjs-document-properties-linearized-yes = Ja\npdfjs-document-properties-linearized-no = Nein\npdfjs-document-properties-close-button = Schließen\n\n## Print\n\npdfjs-print-progress-message = Dokument wird für Drucken vorbereitet…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress } %\npdfjs-print-progress-close-button = Abbrechen\npdfjs-printing-not-supported = Warnung: Die Drucken-Funktion wird durch diesen Browser nicht vollständig unterstützt.\npdfjs-printing-not-ready = Warnung: Die PDF-Datei ist nicht vollständig geladen, dies ist für das Drucken aber empfohlen.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Sidebar umschalten\npdfjs-toggle-sidebar-notification-button =\n    .title = Sidebar umschalten (Dokument enthält Dokumentstruktur/Anhänge/Ebenen)\npdfjs-toggle-sidebar-button-label = Sidebar umschalten\npdfjs-document-outline-button =\n    .title = Dokumentstruktur anzeigen (Doppelklicken, um alle Einträge aus- bzw. einzuklappen)\npdfjs-document-outline-button-label = Dokumentstruktur\npdfjs-attachments-button =\n    .title = Anhänge anzeigen\npdfjs-attachments-button-label = Anhänge\npdfjs-layers-button =\n    .title = Ebenen anzeigen (Doppelklicken, um alle Ebenen auf den Standardzustand zurückzusetzen)\npdfjs-layers-button-label = Ebenen\npdfjs-thumbs-button =\n    .title = Miniaturansichten anzeigen\npdfjs-thumbs-button-label = Miniaturansichten\npdfjs-current-outline-item-button =\n    .title = Aktuelles Struktur-Element finden\npdfjs-current-outline-item-button-label = Aktuelles Struktur-Element\npdfjs-findbar-button =\n    .title = Dokument durchsuchen\npdfjs-findbar-button-label = Suchen\npdfjs-additional-layers = Zusätzliche Ebenen\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Seite { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniaturansicht von Seite { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Suchen\n    .placeholder = Dokument durchsuchen…\npdfjs-find-previous-button =\n    .title = Vorheriges Vorkommen des Suchbegriffs finden\npdfjs-find-previous-button-label = Zurück\npdfjs-find-next-button =\n    .title = Nächstes Vorkommen des Suchbegriffs finden\npdfjs-find-next-button-label = Weiter\npdfjs-find-highlight-checkbox = Alle hervorheben\npdfjs-find-match-case-checkbox-label = Groß-/Kleinschreibung beachten\npdfjs-find-match-diacritics-checkbox-label = Akzente\npdfjs-find-entire-word-checkbox-label = Ganze Wörter\npdfjs-find-reached-top = Anfang des Dokuments erreicht, fahre am Ende fort\npdfjs-find-reached-bottom = Ende des Dokuments erreicht, fahre am Anfang fort\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } von { $total } Übereinstimmung\n       *[other] { $current } von { $total } Übereinstimmungen\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Mehr als { $limit } Übereinstimmung\n       *[other] Mehr als { $limit } Übereinstimmungen\n    }\npdfjs-find-not-found = Suchbegriff nicht gefunden\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Seitenbreite\npdfjs-page-scale-fit = Seitengröße\npdfjs-page-scale-auto = Automatischer Zoom\npdfjs-page-scale-actual = Originalgröße\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale } %\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Seite { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Beim Laden der PDF-Datei trat ein Fehler auf.\npdfjs-invalid-file-error = Ungültige oder beschädigte PDF-Datei\npdfjs-missing-file-error = Fehlende PDF-Datei\npdfjs-unexpected-response-error = Unerwartete Antwort des Servers\npdfjs-rendering-error = Beim Darstellen der Seite trat ein Fehler auf.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Anlage: { $type }]\n\n## Password\n\npdfjs-password-label = Geben Sie zum Öffnen der PDF-Datei deren Passwort ein.\npdfjs-password-invalid = Falsches Passwort. Bitte versuchen Sie es erneut.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Abbrechen\npdfjs-web-fonts-disabled = Web-Schriftarten sind deaktiviert: Eingebettete PDF-Schriftarten konnten nicht geladen werden.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Text\npdfjs-editor-free-text-button-label = Text\npdfjs-editor-ink-button =\n    .title = Zeichnen\npdfjs-editor-ink-button-label = Zeichnen\npdfjs-editor-stamp-button =\n    .title = Grafiken hinzufügen oder bearbeiten\npdfjs-editor-stamp-button-label = Grafiken hinzufügen oder bearbeiten\npdfjs-editor-highlight-button =\n    .title = Hervorheben\npdfjs-editor-highlight-button-label = Hervorheben\npdfjs-highlight-floating-button =\n    .title = Hervorheben\npdfjs-highlight-floating-button1 =\n    .title = Hervorheben\n    .aria-label = Hervorheben\npdfjs-highlight-floating-button-label = Hervorheben\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Zeichnung entfernen\npdfjs-editor-remove-freetext-button =\n    .title = Text entfernen\npdfjs-editor-remove-stamp-button =\n    .title = Grafik entfernen\npdfjs-editor-remove-highlight-button =\n    .title = Hervorhebung entfernen\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Farbe\npdfjs-editor-free-text-size-input = Größe\npdfjs-editor-ink-color-input = Farbe\npdfjs-editor-ink-thickness-input = Linienstärke\npdfjs-editor-ink-opacity-input = Deckkraft\npdfjs-editor-stamp-add-image-button =\n    .title = Grafik hinzufügen\npdfjs-editor-stamp-add-image-button-label = Grafik hinzufügen\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Linienstärke\npdfjs-editor-free-highlight-thickness-title =\n    .title = Linienstärke beim Hervorheben anderer Elemente als Text ändern\npdfjs-free-text =\n    .aria-label = Texteditor\npdfjs-free-text-default-content = Schreiben beginnen…\npdfjs-ink =\n    .aria-label = Zeichnungseditor\npdfjs-ink-canvas =\n    .aria-label = Vom Benutzer erstelltes Bild\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Alternativ-Text\npdfjs-editor-alt-text-edit-button-label = Alternativ-Text bearbeiten\npdfjs-editor-alt-text-dialog-label = Option wählen\npdfjs-editor-alt-text-dialog-description = Alt-Text (Alternativtext) hilft, wenn Personen die Grafik nicht sehen können oder wenn sie nicht geladen wird.\npdfjs-editor-alt-text-add-description-label = Beschreibung hinzufügen\npdfjs-editor-alt-text-add-description-description = Ziel sind 1-2 Sätze, die das Thema, das Szenario oder Aktionen beschreiben.\npdfjs-editor-alt-text-mark-decorative-label = Als dekorativ markieren\npdfjs-editor-alt-text-mark-decorative-description = Dies wird für Ziergrafiken wie Ränder oder Wasserzeichen verwendet.\npdfjs-editor-alt-text-cancel-button = Abbrechen\npdfjs-editor-alt-text-save-button = Speichern\npdfjs-editor-alt-text-decorative-tooltip = Als dekorativ markiert\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Zum Beispiel: \"Ein junger Mann setzt sich an einen Tisch, um zu essen.\"\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Linke obere Ecke - Größe ändern\npdfjs-editor-resizer-label-top-middle = Oben mittig - Größe ändern\npdfjs-editor-resizer-label-top-right = Rechts oben - Größe ändern\npdfjs-editor-resizer-label-middle-right = Mitte rechts - Größe ändern\npdfjs-editor-resizer-label-bottom-right = Rechte untere Ecke - Größe ändern\npdfjs-editor-resizer-label-bottom-middle = Unten mittig - Größe ändern\npdfjs-editor-resizer-label-bottom-left = Linke untere Ecke - Größe ändern\npdfjs-editor-resizer-label-middle-left = Mitte links - Größe ändern\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Hervorhebungsfarbe\npdfjs-editor-colorpicker-button =\n    .title = Farbe ändern\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Farbauswahl\npdfjs-editor-colorpicker-yellow =\n    .title = Gelb\npdfjs-editor-colorpicker-green =\n    .title = Grün\npdfjs-editor-colorpicker-blue =\n    .title = Blau\npdfjs-editor-colorpicker-pink =\n    .title = Pink\npdfjs-editor-colorpicker-red =\n    .title = Rot\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Alle anzeigen\npdfjs-editor-highlight-show-all-button =\n    .title = Alle anzeigen\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/dsb/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Pjerwjejšny bok\npdfjs-previous-button-label = Slědk\npdfjs-next-button =\n    .title = Pśiducy bok\npdfjs-next-button-label = Dalej\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Bok\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = z { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } z { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Pómjeńšyś\npdfjs-zoom-out-button-label = Pómjeńšyś\npdfjs-zoom-in-button =\n    .title = Pówětšyś\npdfjs-zoom-in-button-label = Pówětšyś\npdfjs-zoom-select =\n    .title = Skalěrowanje\npdfjs-presentation-mode-button =\n    .title = Do prezentaciskego modusa pśejś\npdfjs-presentation-mode-button-label = Prezentaciski modus\npdfjs-open-file-button =\n    .title = Dataju wócyniś\npdfjs-open-file-button-label = Wócyniś\npdfjs-print-button =\n    .title = Śišćaś\npdfjs-print-button-label = Śišćaś\npdfjs-save-button =\n    .title = Składowaś\npdfjs-save-button-label = Składowaś\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Ześěgnuś\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Ześěgnuś\npdfjs-bookmark-button =\n    .title = Aktualny bok (URL z aktualnego boka pokazaś)\npdfjs-bookmark-button-label = Aktualny bok\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = W nałoženju wócyniś\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = W nałoženju wócyniś\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Rědy\npdfjs-tools-button-label = Rědy\npdfjs-first-page-button =\n    .title = K prědnemu bokoju\npdfjs-first-page-button-label = K prědnemu bokoju\npdfjs-last-page-button =\n    .title = K slědnemu bokoju\npdfjs-last-page-button-label = K slědnemu bokoju\npdfjs-page-rotate-cw-button =\n    .title = Wobwjertnuś ako špěra źo\npdfjs-page-rotate-cw-button-label = Wobwjertnuś ako špěra źo\npdfjs-page-rotate-ccw-button =\n    .title = Wobwjertnuś nawopaki ako špěra źo\npdfjs-page-rotate-ccw-button-label = Wobwjertnuś nawopaki ako špěra źo\npdfjs-cursor-text-select-tool-button =\n    .title = Rěd za wuběranje teksta zmóžniś\npdfjs-cursor-text-select-tool-button-label = Rěd za wuběranje teksta\npdfjs-cursor-hand-tool-button =\n    .title = Rucny rěd zmóžniś\npdfjs-cursor-hand-tool-button-label = Rucny rěd\npdfjs-scroll-page-button =\n    .title = Kulanje boka wužywaś\npdfjs-scroll-page-button-label = Kulanje boka\npdfjs-scroll-vertical-button =\n    .title = Wertikalne suwanje wužywaś\npdfjs-scroll-vertical-button-label = Wertikalne suwanje\npdfjs-scroll-horizontal-button =\n    .title = Horicontalne suwanje wužywaś\npdfjs-scroll-horizontal-button-label = Horicontalne suwanje\npdfjs-scroll-wrapped-button =\n    .title = Pózlažke suwanje wužywaś\npdfjs-scroll-wrapped-button-label = Pózlažke suwanje\npdfjs-spread-none-button =\n    .title = Boki njezwězaś\npdfjs-spread-none-button-label = Žeden dwójny bok\npdfjs-spread-odd-button =\n    .title = Boki zachopinajucy z njerownymi bokami zwězaś\npdfjs-spread-odd-button-label = Njerowne boki\npdfjs-spread-even-button =\n    .title = Boki zachopinajucy z rownymi bokami zwězaś\npdfjs-spread-even-button-label = Rowne boki\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Dokumentowe kakosći…\npdfjs-document-properties-button-label = Dokumentowe kakosći…\npdfjs-document-properties-file-name = Mě dataje:\npdfjs-document-properties-file-size = Wjelikosć dataje:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bajtow)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bajtow)\npdfjs-document-properties-title = Titel:\npdfjs-document-properties-author = Awtor:\npdfjs-document-properties-subject = Tema:\npdfjs-document-properties-keywords = Klucowe słowa:\npdfjs-document-properties-creation-date = Datum napóranja:\npdfjs-document-properties-modification-date = Datum změny:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Awtor:\npdfjs-document-properties-producer = PDF-gótowaŕ:\npdfjs-document-properties-version = PDF-wersija:\npdfjs-document-properties-page-count = Licba bokow:\npdfjs-document-properties-page-size = Wjelikosć boka:\npdfjs-document-properties-page-size-unit-inches = col\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = wusoki format\npdfjs-document-properties-page-size-orientation-landscape = prěcny format\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Fast Web View:\npdfjs-document-properties-linearized-yes = Jo\npdfjs-document-properties-linearized-no = Ně\npdfjs-document-properties-close-button = Zacyniś\n\n## Print\n\npdfjs-print-progress-message = Dokument pśigótujo se za śišćanje…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Pśetergnuś\npdfjs-printing-not-supported = Warnowanje: Śišćanje njepódpěra se połnje pśez toś ten wobglědowak.\npdfjs-printing-not-ready = Warnowanje: PDF njejo se za śišćanje dopołnje zacytał.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Bócnicu pokazaś/schowaś\npdfjs-toggle-sidebar-notification-button =\n    .title = Bocnicu pśešaltowaś (dokument rozrědowanje/pśipiski/warstwy wopśimujo)\npdfjs-toggle-sidebar-button-label = Bócnicu pokazaś/schowaś\npdfjs-document-outline-button =\n    .title = Dokumentowe naraźenje pokazaś (dwójne kliknjenje, aby se wšykne zapiski pokazali/schowali)\npdfjs-document-outline-button-label = Dokumentowa struktura\npdfjs-attachments-button =\n    .title = Pśidanki pokazaś\npdfjs-attachments-button-label = Pśidanki\npdfjs-layers-button =\n    .title = Warstwy pokazaś (klikniśo dwójcy, aby wšykne warstwy na standardny staw slědk stajił)\npdfjs-layers-button-label = Warstwy\npdfjs-thumbs-button =\n    .title = Miniatury pokazaś\npdfjs-thumbs-button-label = Miniatury\npdfjs-current-outline-item-button =\n    .title = Aktualny rozrědowański zapisk pytaś\npdfjs-current-outline-item-button-label = Aktualny rozrědowański zapisk\npdfjs-findbar-button =\n    .title = W dokumenśe pytaś\npdfjs-findbar-button-label = Pytaś\npdfjs-additional-layers = Dalšne warstwy\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Bok { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatura boka { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Pytaś\n    .placeholder = W dokumenśe pytaś…\npdfjs-find-previous-button =\n    .title = Pjerwjejšne wustupowanje pytańskego wuraza pytaś\npdfjs-find-previous-button-label = Slědk\npdfjs-find-next-button =\n    .title = Pśidujuce wustupowanje pytańskego wuraza pytaś\npdfjs-find-next-button-label = Dalej\npdfjs-find-highlight-checkbox = Wšykne wuzwignuś\npdfjs-find-match-case-checkbox-label = Na wjelikopisanje źiwaś\npdfjs-find-match-diacritics-checkbox-label = Diakritiske znamuška wužywaś\npdfjs-find-entire-word-checkbox-label = Cełe słowa\npdfjs-find-reached-top = Zachopjeńk dokumenta dostany, pókšacujo se z kóńcom\npdfjs-find-reached-bottom = Kóńc dokumenta dostany, pókšacujo se ze zachopjeńkom\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } z { $total } wótpowědnika\n        [two] { $current } z { $total } wótpowědnikowu\n        [few] { $current } z { $total } wótpowědnikow\n       *[other] { $current } z { $total } wótpowědnikow\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Wušej { $limit } wótpowědnik\n        [two] Wušej { $limit } wótpowědnika\n        [few] Wušej { $limit } wótpowědniki\n       *[other] Wušej { $limit } wótpowědniki\n    }\npdfjs-find-not-found = Pytański wuraz njejo se namakał\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Šyrokosć boka\npdfjs-page-scale-fit = Wjelikosć boka\npdfjs-page-scale-auto = Awtomatiske skalěrowanje\npdfjs-page-scale-actual = Aktualna wjelikosć\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Bok { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Pśi zacytowanju PDF jo zmólka nastała.\npdfjs-invalid-file-error = Njepłaśiwa abo wobškóźona PDF-dataja.\npdfjs-missing-file-error = Felujuca PDF-dataja.\npdfjs-unexpected-response-error = Njewócakane serwerowe wótegrono.\npdfjs-rendering-error = Pśi zwobraznjanju boka jo zmólka nastała.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Typ pśipiskow: { $type }]\n\n## Password\n\npdfjs-password-label = Zapódajśo gronidło, aby PDF-dataju wócynił.\npdfjs-password-invalid = Njepłaśiwe gronidło. Pšosym wopytajśo hyšći raz.\npdfjs-password-ok-button = W pórěźe\npdfjs-password-cancel-button = Pśetergnuś\npdfjs-web-fonts-disabled = Webpisma su znjemóžnjone: njejo móžno, zasajźone PDF-pisma wužywaś.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Tekst\npdfjs-editor-free-text-button-label = Tekst\npdfjs-editor-ink-button =\n    .title = Kresliś\npdfjs-editor-ink-button-label = Kresliś\npdfjs-editor-stamp-button =\n    .title = Wobraze pśidaś abo wobźěłaś\npdfjs-editor-stamp-button-label = Wobraze pśidaś abo wobźěłaś\npdfjs-editor-highlight-button =\n    .title = Wuzwignuś\npdfjs-editor-highlight-button-label = Wuzwignuś\npdfjs-highlight-floating-button =\n    .title = Wuzwignjenje\npdfjs-highlight-floating-button1 =\n    .title = Wuzwignuś\n    .aria-label = Wuzwignuś\npdfjs-highlight-floating-button-label = Wuzwignuś\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Kreslanku wótwónoźeś\npdfjs-editor-remove-freetext-button =\n    .title = Tekst wótwónoźeś\npdfjs-editor-remove-stamp-button =\n    .title = Wobraz wótwónoźeś\npdfjs-editor-remove-highlight-button =\n    .title = Wuzwignjenje wótpóraś\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Barwa\npdfjs-editor-free-text-size-input = Wjelikosć\npdfjs-editor-ink-color-input = Barwa\npdfjs-editor-ink-thickness-input = Tłustosć\npdfjs-editor-ink-opacity-input = Opacita\npdfjs-editor-stamp-add-image-button =\n    .title = Wobraz pśidaś\npdfjs-editor-stamp-add-image-button-label = Wobraz pśidaś\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Tłustosć\npdfjs-editor-free-highlight-thickness-title =\n    .title = Tłustosć změniś, gaž se zapiski wuzwiguju, kótarež tekst njejsu\npdfjs-free-text =\n    .aria-label = Tekstowy editor\npdfjs-free-text-default-content = Zachopśo pisaś…\npdfjs-ink =\n    .aria-label = Kresleński editor\npdfjs-ink-canvas =\n    .aria-label = Wobraz napórany wót wužywarja\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Alternatiwny tekst\npdfjs-editor-alt-text-edit-button-label = Alternatiwny tekst wobźěłaś\npdfjs-editor-alt-text-dialog-label = Nastajenje wubraś\npdfjs-editor-alt-text-dialog-description = Alternatiwny tekst pomaga, gaž luźe njamógu wobraz wiźeś abo gaž se wobraz njezacytajo.\npdfjs-editor-alt-text-add-description-label = Wopisanje pśidaś\npdfjs-editor-alt-text-add-description-description = Pišćo 1 sadu abo 2 saźe, kótarejž temu, nastajenje abo akcije wopisujotej.\npdfjs-editor-alt-text-mark-decorative-label = Ako dekoratiwny markěrowaś\npdfjs-editor-alt-text-mark-decorative-description = To se za pyšnjece wobraze wužywa, na pśikład ramiki abo wódowe znamjenja.\npdfjs-editor-alt-text-cancel-button = Pśetergnuś\npdfjs-editor-alt-text-save-button = Składowaś\npdfjs-editor-alt-text-decorative-tooltip = Ako dekoratiwny markěrowany\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Na pśikład, „Młody muski za blidom sejźi, aby jěź jědł“\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Górjejce nalěwo – wjelikosć změniś\npdfjs-editor-resizer-label-top-middle = Górjejce wesrjejź – wjelikosć změniś\npdfjs-editor-resizer-label-top-right = Górjejce napšawo – wjelikosć změniś\npdfjs-editor-resizer-label-middle-right = Wesrjejź napšawo – wjelikosć změniś\npdfjs-editor-resizer-label-bottom-right = Dołojce napšawo – wjelikosć změniś\npdfjs-editor-resizer-label-bottom-middle = Dołojce wesrjejź – wjelikosć změniś\npdfjs-editor-resizer-label-bottom-left = Dołojce nalěwo – wjelikosć změniś\npdfjs-editor-resizer-label-middle-left = Wesrjejź nalěwo – wjelikosć změniś\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Barwa wuzwignjenja\npdfjs-editor-colorpicker-button =\n    .title = Barwu změniś\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Wuběrk barwow\npdfjs-editor-colorpicker-yellow =\n    .title = Žołty\npdfjs-editor-colorpicker-green =\n    .title = Zeleny\npdfjs-editor-colorpicker-blue =\n    .title = Módry\npdfjs-editor-colorpicker-pink =\n    .title = Pink\npdfjs-editor-colorpicker-red =\n    .title = Cerwjeny\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Wšykne pokazaś\npdfjs-editor-highlight-show-all-button =\n    .title = Wšykne pokazaś\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/el/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Προηγούμενη σελίδα\npdfjs-previous-button-label = Προηγούμενη\npdfjs-next-button =\n    .title = Επόμενη σελίδα\npdfjs-next-button-label = Επόμενη\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Σελίδα\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = από { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } από { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Σμίκρυνση\npdfjs-zoom-out-button-label = Σμίκρυνση\npdfjs-zoom-in-button =\n    .title = Μεγέθυνση\npdfjs-zoom-in-button-label = Μεγέθυνση\npdfjs-zoom-select =\n    .title = Ζουμ\npdfjs-presentation-mode-button =\n    .title = Εναλλαγή σε λειτουργία παρουσίασης\npdfjs-presentation-mode-button-label = Λειτουργία παρουσίασης\npdfjs-open-file-button =\n    .title = Άνοιγμα αρχείου\npdfjs-open-file-button-label = Άνοιγμα\npdfjs-print-button =\n    .title = Εκτύπωση\npdfjs-print-button-label = Εκτύπωση\npdfjs-save-button =\n    .title = Αποθήκευση\npdfjs-save-button-label = Αποθήκευση\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Λήψη\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Λήψη\npdfjs-bookmark-button =\n    .title = Τρέχουσα σελίδα (Προβολή URL από τρέχουσα σελίδα)\npdfjs-bookmark-button-label = Τρέχουσα σελίδα\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Άνοιγμα σε εφαρμογή\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Άνοιγμα σε εφαρμογή\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Εργαλεία\npdfjs-tools-button-label = Εργαλεία\npdfjs-first-page-button =\n    .title = Μετάβαση στην πρώτη σελίδα\npdfjs-first-page-button-label = Μετάβαση στην πρώτη σελίδα\npdfjs-last-page-button =\n    .title = Μετάβαση στην τελευταία σελίδα\npdfjs-last-page-button-label = Μετάβαση στην τελευταία σελίδα\npdfjs-page-rotate-cw-button =\n    .title = Δεξιόστροφη περιστροφή\npdfjs-page-rotate-cw-button-label = Δεξιόστροφη περιστροφή\npdfjs-page-rotate-ccw-button =\n    .title = Αριστερόστροφη περιστροφή\npdfjs-page-rotate-ccw-button-label = Αριστερόστροφη περιστροφή\npdfjs-cursor-text-select-tool-button =\n    .title = Ενεργοποίηση εργαλείου επιλογής κειμένου\npdfjs-cursor-text-select-tool-button-label = Εργαλείο επιλογής κειμένου\npdfjs-cursor-hand-tool-button =\n    .title = Ενεργοποίηση εργαλείου χεριού\npdfjs-cursor-hand-tool-button-label = Εργαλείο χεριού\npdfjs-scroll-page-button =\n    .title = Χρήση κύλισης σελίδας\npdfjs-scroll-page-button-label = Κύλιση σελίδας\npdfjs-scroll-vertical-button =\n    .title = Χρήση κάθετης κύλισης\npdfjs-scroll-vertical-button-label = Κάθετη κύλιση\npdfjs-scroll-horizontal-button =\n    .title = Χρήση οριζόντιας κύλισης\npdfjs-scroll-horizontal-button-label = Οριζόντια κύλιση\npdfjs-scroll-wrapped-button =\n    .title = Χρήση κυκλικής κύλισης\npdfjs-scroll-wrapped-button-label = Κυκλική κύλιση\npdfjs-spread-none-button =\n    .title = Να μη γίνει σύνδεση επεκτάσεων σελίδων\npdfjs-spread-none-button-label = Χωρίς επεκτάσεις\npdfjs-spread-odd-button =\n    .title = Σύνδεση επεκτάσεων σελίδων ξεκινώντας από τις μονές σελίδες\npdfjs-spread-odd-button-label = Μονές επεκτάσεις\npdfjs-spread-even-button =\n    .title = Σύνδεση επεκτάσεων σελίδων ξεκινώντας από τις ζυγές σελίδες\npdfjs-spread-even-button-label = Ζυγές επεκτάσεις\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Ιδιότητες εγγράφου…\npdfjs-document-properties-button-label = Ιδιότητες εγγράφου…\npdfjs-document-properties-file-name = Όνομα αρχείου:\npdfjs-document-properties-file-size = Μέγεθος αρχείου:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Τίτλος:\npdfjs-document-properties-author = Συγγραφέας:\npdfjs-document-properties-subject = Θέμα:\npdfjs-document-properties-keywords = Λέξεις-κλειδιά:\npdfjs-document-properties-creation-date = Ημερομηνία δημιουργίας:\npdfjs-document-properties-modification-date = Ημερομηνία τροποποίησης:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Δημιουργός:\npdfjs-document-properties-producer = Παραγωγός PDF:\npdfjs-document-properties-version = Έκδοση PDF:\npdfjs-document-properties-page-count = Αριθμός σελίδων:\npdfjs-document-properties-page-size = Μέγεθος σελίδας:\npdfjs-document-properties-page-size-unit-inches = ίντσες\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = κατακόρυφα\npdfjs-document-properties-page-size-orientation-landscape = οριζόντια\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Επιστολή\npdfjs-document-properties-page-size-name-legal = Τύπου Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Ταχεία προβολή ιστού:\npdfjs-document-properties-linearized-yes = Ναι\npdfjs-document-properties-linearized-no = Όχι\npdfjs-document-properties-close-button = Κλείσιμο\n\n## Print\n\npdfjs-print-progress-message = Προετοιμασία του εγγράφου για εκτύπωση…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Ακύρωση\npdfjs-printing-not-supported = Προειδοποίηση: Η εκτύπωση δεν υποστηρίζεται πλήρως από το πρόγραμμα περιήγησης.\npdfjs-printing-not-ready = Προειδοποίηση: Το PDF δεν φορτώθηκε πλήρως για εκτύπωση.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = (Απ)ενεργοποίηση πλαϊνής γραμμής\npdfjs-toggle-sidebar-notification-button =\n    .title = (Απ)ενεργοποίηση πλαϊνής γραμμής (το έγγραφο περιέχει περίγραμμα/συνημμένα/επίπεδα)\npdfjs-toggle-sidebar-button-label = (Απ)ενεργοποίηση πλαϊνής γραμμής\npdfjs-document-outline-button =\n    .title = Εμφάνιση διάρθρωσης εγγράφου (διπλό κλικ για ανάπτυξη/σύμπτυξη όλων των στοιχείων)\npdfjs-document-outline-button-label = Διάρθρωση εγγράφου\npdfjs-attachments-button =\n    .title = Εμφάνιση συνημμένων\npdfjs-attachments-button-label = Συνημμένα\npdfjs-layers-button =\n    .title = Εμφάνιση επιπέδων (διπλό κλικ για επαναφορά όλων των επιπέδων στην προεπιλεγμένη κατάσταση)\npdfjs-layers-button-label = Επίπεδα\npdfjs-thumbs-button =\n    .title = Εμφάνιση μικρογραφιών\npdfjs-thumbs-button-label = Μικρογραφίες\npdfjs-current-outline-item-button =\n    .title = Εύρεση τρέχοντος στοιχείου διάρθρωσης\npdfjs-current-outline-item-button-label = Τρέχον στοιχείο διάρθρωσης\npdfjs-findbar-button =\n    .title = Εύρεση στο έγγραφο\npdfjs-findbar-button-label = Εύρεση\npdfjs-additional-layers = Επιπρόσθετα επίπεδα\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Σελίδα { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Μικρογραφία σελίδας { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Εύρεση\n    .placeholder = Εύρεση στο έγγραφο…\npdfjs-find-previous-button =\n    .title = Εύρεση της προηγούμενης εμφάνισης της φράσης\npdfjs-find-previous-button-label = Προηγούμενο\npdfjs-find-next-button =\n    .title = Εύρεση της επόμενης εμφάνισης της φράσης\npdfjs-find-next-button-label = Επόμενο\npdfjs-find-highlight-checkbox = Επισήμανση όλων\npdfjs-find-match-case-checkbox-label = Συμφωνία πεζών/κεφαλαίων\npdfjs-find-match-diacritics-checkbox-label = Αντιστοίχιση διακριτικών\npdfjs-find-entire-word-checkbox-label = Ολόκληρες λέξεις\npdfjs-find-reached-top = Φτάσατε στην αρχή του εγγράφου, συνέχεια από το τέλος\npdfjs-find-reached-bottom = Φτάσατε στο τέλος του εγγράφου, συνέχεια από την αρχή\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } από { $total } αντιστοιχία\n       *[other] { $current } από { $total } αντιστοιχίες\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Περισσότερες από { $limit } αντιστοιχία\n       *[other] Περισσότερες από { $limit } αντιστοιχίες\n    }\npdfjs-find-not-found = Η φράση δεν βρέθηκε\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Πλάτος σελίδας\npdfjs-page-scale-fit = Μέγεθος σελίδας\npdfjs-page-scale-auto = Αυτόματο ζουμ\npdfjs-page-scale-actual = Πραγματικό μέγεθος\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Σελίδα { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Προέκυψε σφάλμα κατά τη φόρτωση του PDF.\npdfjs-invalid-file-error = Μη έγκυρο ή κατεστραμμένο αρχείο PDF.\npdfjs-missing-file-error = Λείπει αρχείο PDF.\npdfjs-unexpected-response-error = Μη αναμενόμενη απόκριση από το διακομιστή.\npdfjs-rendering-error = Προέκυψε σφάλμα κατά την εμφάνιση της σελίδας.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Σχόλιο «{ $type }»]\n\n## Password\n\npdfjs-password-label = Εισαγάγετε τον κωδικό πρόσβασης για να ανοίξετε αυτό το αρχείο PDF.\npdfjs-password-invalid = Μη έγκυρος κωδικός πρόσβασης. Παρακαλώ δοκιμάστε ξανά.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Ακύρωση\npdfjs-web-fonts-disabled = Οι γραμματοσειρές ιστού είναι ανενεργές: δεν είναι δυνατή η χρήση των ενσωματωμένων γραμματοσειρών PDF.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Κείμενο\npdfjs-editor-free-text-button-label = Κείμενο\npdfjs-editor-ink-button =\n    .title = Σχέδιο\npdfjs-editor-ink-button-label = Σχέδιο\npdfjs-editor-stamp-button =\n    .title = Προσθήκη ή επεξεργασία εικόνων\npdfjs-editor-stamp-button-label = Προσθήκη ή επεξεργασία εικόνων\npdfjs-editor-highlight-button =\n    .title = Επισήμανση\npdfjs-editor-highlight-button-label = Επισήμανση\npdfjs-highlight-floating-button =\n    .title = Επισήμανση\npdfjs-highlight-floating-button1 =\n    .title = Επισήμανση\n    .aria-label = Επισήμανση\npdfjs-highlight-floating-button-label = Επισήμανση\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Αφαίρεση σχεδίου\npdfjs-editor-remove-freetext-button =\n    .title = Αφαίρεση κειμένου\npdfjs-editor-remove-stamp-button =\n    .title = Αφαίρεση εικόνας\npdfjs-editor-remove-highlight-button =\n    .title = Αφαίρεση επισήμανσης\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Χρώμα\npdfjs-editor-free-text-size-input = Μέγεθος\npdfjs-editor-ink-color-input = Χρώμα\npdfjs-editor-ink-thickness-input = Πάχος\npdfjs-editor-ink-opacity-input = Αδιαφάνεια\npdfjs-editor-stamp-add-image-button =\n    .title = Προσθήκη εικόνας\npdfjs-editor-stamp-add-image-button-label = Προσθήκη εικόνας\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Πάχος\npdfjs-editor-free-highlight-thickness-title =\n    .title = Αλλαγή πάχους κατά την επισήμανση στοιχείων εκτός κειμένου\npdfjs-free-text =\n    .aria-label = Επεξεργασία κειμένου\npdfjs-free-text-default-content = Ξεκινήστε να πληκτρολογείτε…\npdfjs-ink =\n    .aria-label = Επεξεργασία σχεδίων\npdfjs-ink-canvas =\n    .aria-label = Εικόνα από τον χρήστη\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Εναλλακτικό κείμενο\npdfjs-editor-alt-text-edit-button-label = Επεξεργασία εναλλακτικού κειμένου\npdfjs-editor-alt-text-dialog-label = Διαλέξτε μια επιλογή\npdfjs-editor-alt-text-dialog-description = Το εναλλακτικό κείμενο είναι χρήσιμο όταν οι άνθρωποι δεν μπορούν να δουν την εικόνα ή όταν αυτή δεν φορτώνεται.\npdfjs-editor-alt-text-add-description-label = Προσθήκη περιγραφής\npdfjs-editor-alt-text-add-description-description = Στοχεύστε σε μία ή δύο προτάσεις που περιγράφουν το θέμα, τη ρύθμιση ή τις ενέργειες.\npdfjs-editor-alt-text-mark-decorative-label = Επισήμανση ως διακοσμητικό\npdfjs-editor-alt-text-mark-decorative-description = Χρησιμοποιείται για διακοσμητικές εικόνες, όπως περιγράμματα ή υδατογραφήματα.\npdfjs-editor-alt-text-cancel-button = Ακύρωση\npdfjs-editor-alt-text-save-button = Αποθήκευση\npdfjs-editor-alt-text-decorative-tooltip = Επισημασμένο ως διακοσμητικό\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Για παράδειγμα, «Ένας νεαρός άνδρας κάθεται σε ένα τραπέζι για να φάει ένα γεύμα»\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Επάνω αριστερή γωνία — αλλαγή μεγέθους\npdfjs-editor-resizer-label-top-middle = Μέσο επάνω πλευράς — αλλαγή μεγέθους\npdfjs-editor-resizer-label-top-right = Επάνω δεξιά γωνία — αλλαγή μεγέθους\npdfjs-editor-resizer-label-middle-right = Μέσο δεξιάς πλευράς — αλλαγή μεγέθους\npdfjs-editor-resizer-label-bottom-right = Κάτω δεξιά γωνία — αλλαγή μεγέθους\npdfjs-editor-resizer-label-bottom-middle = Μέσο κάτω πλευράς — αλλαγή μεγέθους\npdfjs-editor-resizer-label-bottom-left = Κάτω αριστερή γωνία — αλλαγή μεγέθους\npdfjs-editor-resizer-label-middle-left = Μέσο αριστερής πλευράς — αλλαγή μεγέθους\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Χρώμα επισήμανσης\npdfjs-editor-colorpicker-button =\n    .title = Αλλαγή χρώματος\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Επιλογές χρωμάτων\npdfjs-editor-colorpicker-yellow =\n    .title = Κίτρινο\npdfjs-editor-colorpicker-green =\n    .title = Πράσινο\npdfjs-editor-colorpicker-blue =\n    .title = Μπλε\npdfjs-editor-colorpicker-pink =\n    .title = Ροζ\npdfjs-editor-colorpicker-red =\n    .title = Κόκκινο\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Εμφάνιση όλων\npdfjs-editor-highlight-show-all-button =\n    .title = Εμφάνιση όλων\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/en-CA/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Previous Page\npdfjs-previous-button-label = Previous\npdfjs-next-button =\n    .title = Next Page\npdfjs-next-button-label = Next\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Page\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = of { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Zoom Out\npdfjs-zoom-out-button-label = Zoom Out\npdfjs-zoom-in-button =\n    .title = Zoom In\npdfjs-zoom-in-button-label = Zoom In\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Switch to Presentation Mode\npdfjs-presentation-mode-button-label = Presentation Mode\npdfjs-open-file-button =\n    .title = Open File\npdfjs-open-file-button-label = Open\npdfjs-print-button =\n    .title = Print\npdfjs-print-button-label = Print\npdfjs-save-button =\n    .title = Save\npdfjs-save-button-label = Save\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Download\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Download\npdfjs-bookmark-button =\n    .title = Current Page (View URL from Current Page)\npdfjs-bookmark-button-label = Current Page\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Open in app\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Open in app\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Tools\npdfjs-tools-button-label = Tools\npdfjs-first-page-button =\n    .title = Go to First Page\npdfjs-first-page-button-label = Go to First Page\npdfjs-last-page-button =\n    .title = Go to Last Page\npdfjs-last-page-button-label = Go to Last Page\npdfjs-page-rotate-cw-button =\n    .title = Rotate Clockwise\npdfjs-page-rotate-cw-button-label = Rotate Clockwise\npdfjs-page-rotate-ccw-button =\n    .title = Rotate Counterclockwise\npdfjs-page-rotate-ccw-button-label = Rotate Counterclockwise\npdfjs-cursor-text-select-tool-button =\n    .title = Enable Text Selection Tool\npdfjs-cursor-text-select-tool-button-label = Text Selection Tool\npdfjs-cursor-hand-tool-button =\n    .title = Enable Hand Tool\npdfjs-cursor-hand-tool-button-label = Hand Tool\npdfjs-scroll-page-button =\n    .title = Use Page Scrolling\npdfjs-scroll-page-button-label = Page Scrolling\npdfjs-scroll-vertical-button =\n    .title = Use Vertical Scrolling\npdfjs-scroll-vertical-button-label = Vertical Scrolling\npdfjs-scroll-horizontal-button =\n    .title = Use Horizontal Scrolling\npdfjs-scroll-horizontal-button-label = Horizontal Scrolling\npdfjs-scroll-wrapped-button =\n    .title = Use Wrapped Scrolling\npdfjs-scroll-wrapped-button-label = Wrapped Scrolling\npdfjs-spread-none-button =\n    .title = Do not join page spreads\npdfjs-spread-none-button-label = No Spreads\npdfjs-spread-odd-button =\n    .title = Join page spreads starting with odd-numbered pages\npdfjs-spread-odd-button-label = Odd Spreads\npdfjs-spread-even-button =\n    .title = Join page spreads starting with even-numbered pages\npdfjs-spread-even-button-label = Even Spreads\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Document Properties…\npdfjs-document-properties-button-label = Document Properties…\npdfjs-document-properties-file-name = File name:\npdfjs-document-properties-file-size = File size:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } kB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Title:\npdfjs-document-properties-author = Author:\npdfjs-document-properties-subject = Subject:\npdfjs-document-properties-keywords = Keywords:\npdfjs-document-properties-creation-date = Creation Date:\npdfjs-document-properties-modification-date = Modification Date:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Creator:\npdfjs-document-properties-producer = PDF Producer:\npdfjs-document-properties-version = PDF Version:\npdfjs-document-properties-page-count = Page Count:\npdfjs-document-properties-page-size = Page Size:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = portrait\npdfjs-document-properties-page-size-orientation-landscape = landscape\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Fast Web View:\npdfjs-document-properties-linearized-yes = Yes\npdfjs-document-properties-linearized-no = No\npdfjs-document-properties-close-button = Close\n\n## Print\n\npdfjs-print-progress-message = Preparing document for printing…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Cancel\npdfjs-printing-not-supported = Warning: Printing is not fully supported by this browser.\npdfjs-printing-not-ready = Warning: The PDF is not fully loaded for printing.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Toggle Sidebar\npdfjs-toggle-sidebar-notification-button =\n    .title = Toggle Sidebar (document contains outline/attachments/layers)\npdfjs-toggle-sidebar-button-label = Toggle Sidebar\npdfjs-document-outline-button =\n    .title = Show Document Outline (double-click to expand/collapse all items)\npdfjs-document-outline-button-label = Document Outline\npdfjs-attachments-button =\n    .title = Show Attachments\npdfjs-attachments-button-label = Attachments\npdfjs-layers-button =\n    .title = Show Layers (double-click to reset all layers to the default state)\npdfjs-layers-button-label = Layers\npdfjs-thumbs-button =\n    .title = Show Thumbnails\npdfjs-thumbs-button-label = Thumbnails\npdfjs-current-outline-item-button =\n    .title = Find Current Outline Item\npdfjs-current-outline-item-button-label = Current Outline Item\npdfjs-findbar-button =\n    .title = Find in Document\npdfjs-findbar-button-label = Find\npdfjs-additional-layers = Additional Layers\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Page { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Thumbnail of Page { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Find\n    .placeholder = Find in document…\npdfjs-find-previous-button =\n    .title = Find the previous occurrence of the phrase\npdfjs-find-previous-button-label = Previous\npdfjs-find-next-button =\n    .title = Find the next occurrence of the phrase\npdfjs-find-next-button-label = Next\npdfjs-find-highlight-checkbox = Highlight All\npdfjs-find-match-case-checkbox-label = Match Case\npdfjs-find-match-diacritics-checkbox-label = Match Diacritics\npdfjs-find-entire-word-checkbox-label = Whole Words\npdfjs-find-reached-top = Reached top of document, continued from bottom\npdfjs-find-reached-bottom = Reached end of document, continued from top\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } of { $total } match\n       *[other] { $current } of { $total } matches\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] More than { $limit } match\n       *[other] More than { $limit } matches\n    }\npdfjs-find-not-found = Phrase not found\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Page Width\npdfjs-page-scale-fit = Page Fit\npdfjs-page-scale-auto = Automatic Zoom\npdfjs-page-scale-actual = Actual Size\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Page { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = An error occurred while loading the PDF.\npdfjs-invalid-file-error = Invalid or corrupted PDF file.\npdfjs-missing-file-error = Missing PDF file.\npdfjs-unexpected-response-error = Unexpected server response.\npdfjs-rendering-error = An error occurred while rendering the page.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Annotation]\n\n## Password\n\npdfjs-password-label = Enter the password to open this PDF file.\npdfjs-password-invalid = Invalid password. Please try again.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Cancel\npdfjs-web-fonts-disabled = Web fonts are disabled: unable to use embedded PDF fonts.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Text\npdfjs-editor-free-text-button-label = Text\npdfjs-editor-ink-button =\n    .title = Draw\npdfjs-editor-ink-button-label = Draw\npdfjs-editor-stamp-button =\n    .title = Add or edit images\npdfjs-editor-stamp-button-label = Add or edit images\npdfjs-editor-highlight-button =\n    .title = Highlight\npdfjs-editor-highlight-button-label = Highlight\npdfjs-highlight-floating-button =\n    .title = Highlight\npdfjs-highlight-floating-button1 =\n    .title = Highlight\n    .aria-label = Highlight\npdfjs-highlight-floating-button-label = Highlight\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Remove drawing\npdfjs-editor-remove-freetext-button =\n    .title = Remove text\npdfjs-editor-remove-stamp-button =\n    .title = Remove image\npdfjs-editor-remove-highlight-button =\n    .title = Remove highlight\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Colour\npdfjs-editor-free-text-size-input = Size\npdfjs-editor-ink-color-input = Colour\npdfjs-editor-ink-thickness-input = Thickness\npdfjs-editor-ink-opacity-input = Opacity\npdfjs-editor-stamp-add-image-button =\n    .title = Add image\npdfjs-editor-stamp-add-image-button-label = Add image\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Thickness\npdfjs-editor-free-highlight-thickness-title =\n    .title = Change thickness when highlighting items other than text\npdfjs-free-text =\n    .aria-label = Text Editor\npdfjs-free-text-default-content = Start typing…\npdfjs-ink =\n    .aria-label = Draw Editor\npdfjs-ink-canvas =\n    .aria-label = User-created image\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Alt text\npdfjs-editor-alt-text-edit-button-label = Edit alt text\npdfjs-editor-alt-text-dialog-label = Choose an option\npdfjs-editor-alt-text-dialog-description = Alt text (alternative text) helps when people can’t see the image or when it doesn’t load.\npdfjs-editor-alt-text-add-description-label = Add a description\npdfjs-editor-alt-text-add-description-description = Aim for 1-2 sentences that describe the subject, setting, or actions.\npdfjs-editor-alt-text-mark-decorative-label = Mark as decorative\npdfjs-editor-alt-text-mark-decorative-description = This is used for ornamental images, like borders or watermarks.\npdfjs-editor-alt-text-cancel-button = Cancel\npdfjs-editor-alt-text-save-button = Save\npdfjs-editor-alt-text-decorative-tooltip = Marked as decorative\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = For example, “A young man sits down at a table to eat a meal”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Top left corner — resize\npdfjs-editor-resizer-label-top-middle = Top middle — resize\npdfjs-editor-resizer-label-top-right = Top right corner — resize\npdfjs-editor-resizer-label-middle-right = Middle right — resize\npdfjs-editor-resizer-label-bottom-right = Bottom right corner — resize\npdfjs-editor-resizer-label-bottom-middle = Bottom middle — resize\npdfjs-editor-resizer-label-bottom-left = Bottom left corner — resize\npdfjs-editor-resizer-label-middle-left = Middle left — resize\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Highlight colour\npdfjs-editor-colorpicker-button =\n    .title = Change colour\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Colour choices\npdfjs-editor-colorpicker-yellow =\n    .title = Yellow\npdfjs-editor-colorpicker-green =\n    .title = Green\npdfjs-editor-colorpicker-blue =\n    .title = Blue\npdfjs-editor-colorpicker-pink =\n    .title = Pink\npdfjs-editor-colorpicker-red =\n    .title = Red\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Show all\npdfjs-editor-highlight-show-all-button =\n    .title = Show all\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/en-GB/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Previous Page\npdfjs-previous-button-label = Previous\npdfjs-next-button =\n    .title = Next Page\npdfjs-next-button-label = Next\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Page\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = of { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Zoom Out\npdfjs-zoom-out-button-label = Zoom Out\npdfjs-zoom-in-button =\n    .title = Zoom In\npdfjs-zoom-in-button-label = Zoom In\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Switch to Presentation Mode\npdfjs-presentation-mode-button-label = Presentation Mode\npdfjs-open-file-button =\n    .title = Open File\npdfjs-open-file-button-label = Open\npdfjs-print-button =\n    .title = Print\npdfjs-print-button-label = Print\npdfjs-save-button =\n    .title = Save\npdfjs-save-button-label = Save\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Download\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Download\npdfjs-bookmark-button =\n    .title = Current Page (View URL from Current Page)\npdfjs-bookmark-button-label = Current Page\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Open in app\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Open in app\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Tools\npdfjs-tools-button-label = Tools\npdfjs-first-page-button =\n    .title = Go to First Page\npdfjs-first-page-button-label = Go to First Page\npdfjs-last-page-button =\n    .title = Go to Last Page\npdfjs-last-page-button-label = Go to Last Page\npdfjs-page-rotate-cw-button =\n    .title = Rotate Clockwise\npdfjs-page-rotate-cw-button-label = Rotate Clockwise\npdfjs-page-rotate-ccw-button =\n    .title = Rotate Anti-Clockwise\npdfjs-page-rotate-ccw-button-label = Rotate Anti-Clockwise\npdfjs-cursor-text-select-tool-button =\n    .title = Enable Text Selection Tool\npdfjs-cursor-text-select-tool-button-label = Text Selection Tool\npdfjs-cursor-hand-tool-button =\n    .title = Enable Hand Tool\npdfjs-cursor-hand-tool-button-label = Hand Tool\npdfjs-scroll-page-button =\n    .title = Use Page Scrolling\npdfjs-scroll-page-button-label = Page Scrolling\npdfjs-scroll-vertical-button =\n    .title = Use Vertical Scrolling\npdfjs-scroll-vertical-button-label = Vertical Scrolling\npdfjs-scroll-horizontal-button =\n    .title = Use Horizontal Scrolling\npdfjs-scroll-horizontal-button-label = Horizontal Scrolling\npdfjs-scroll-wrapped-button =\n    .title = Use Wrapped Scrolling\npdfjs-scroll-wrapped-button-label = Wrapped Scrolling\npdfjs-spread-none-button =\n    .title = Do not join page spreads\npdfjs-spread-none-button-label = No Spreads\npdfjs-spread-odd-button =\n    .title = Join page spreads starting with odd-numbered pages\npdfjs-spread-odd-button-label = Odd Spreads\npdfjs-spread-even-button =\n    .title = Join page spreads starting with even-numbered pages\npdfjs-spread-even-button-label = Even Spreads\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Document Properties…\npdfjs-document-properties-button-label = Document Properties…\npdfjs-document-properties-file-name = File name:\npdfjs-document-properties-file-size = File size:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } kB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Title:\npdfjs-document-properties-author = Author:\npdfjs-document-properties-subject = Subject:\npdfjs-document-properties-keywords = Keywords:\npdfjs-document-properties-creation-date = Creation Date:\npdfjs-document-properties-modification-date = Modification Date:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Creator:\npdfjs-document-properties-producer = PDF Producer:\npdfjs-document-properties-version = PDF Version:\npdfjs-document-properties-page-count = Page Count:\npdfjs-document-properties-page-size = Page Size:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = portrait\npdfjs-document-properties-page-size-orientation-landscape = landscape\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Fast Web View:\npdfjs-document-properties-linearized-yes = Yes\npdfjs-document-properties-linearized-no = No\npdfjs-document-properties-close-button = Close\n\n## Print\n\npdfjs-print-progress-message = Preparing document for printing…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Cancel\npdfjs-printing-not-supported = Warning: Printing is not fully supported by this browser.\npdfjs-printing-not-ready = Warning: The PDF is not fully loaded for printing.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Toggle Sidebar\npdfjs-toggle-sidebar-notification-button =\n    .title = Toggle Sidebar (document contains outline/attachments/layers)\npdfjs-toggle-sidebar-button-label = Toggle Sidebar\npdfjs-document-outline-button =\n    .title = Show Document Outline (double-click to expand/collapse all items)\npdfjs-document-outline-button-label = Document Outline\npdfjs-attachments-button =\n    .title = Show Attachments\npdfjs-attachments-button-label = Attachments\npdfjs-layers-button =\n    .title = Show Layers (double-click to reset all layers to the default state)\npdfjs-layers-button-label = Layers\npdfjs-thumbs-button =\n    .title = Show Thumbnails\npdfjs-thumbs-button-label = Thumbnails\npdfjs-current-outline-item-button =\n    .title = Find Current Outline Item\npdfjs-current-outline-item-button-label = Current Outline Item\npdfjs-findbar-button =\n    .title = Find in Document\npdfjs-findbar-button-label = Find\npdfjs-additional-layers = Additional Layers\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Page { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Thumbnail of Page { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Find\n    .placeholder = Find in document…\npdfjs-find-previous-button =\n    .title = Find the previous occurrence of the phrase\npdfjs-find-previous-button-label = Previous\npdfjs-find-next-button =\n    .title = Find the next occurrence of the phrase\npdfjs-find-next-button-label = Next\npdfjs-find-highlight-checkbox = Highlight All\npdfjs-find-match-case-checkbox-label = Match Case\npdfjs-find-match-diacritics-checkbox-label = Match Diacritics\npdfjs-find-entire-word-checkbox-label = Whole Words\npdfjs-find-reached-top = Reached top of document, continued from bottom\npdfjs-find-reached-bottom = Reached end of document, continued from top\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } of { $total } match\n       *[other] { $current } of { $total } matches\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] More than { $limit } match\n       *[other] More than { $limit } matches\n    }\npdfjs-find-not-found = Phrase not found\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Page Width\npdfjs-page-scale-fit = Page Fit\npdfjs-page-scale-auto = Automatic Zoom\npdfjs-page-scale-actual = Actual Size\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Page { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = An error occurred while loading the PDF.\npdfjs-invalid-file-error = Invalid or corrupted PDF file.\npdfjs-missing-file-error = Missing PDF file.\npdfjs-unexpected-response-error = Unexpected server response.\npdfjs-rendering-error = An error occurred while rendering the page.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Annotation]\n\n## Password\n\npdfjs-password-label = Enter the password to open this PDF file.\npdfjs-password-invalid = Invalid password. Please try again.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Cancel\npdfjs-web-fonts-disabled = Web fonts are disabled: unable to use embedded PDF fonts.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Text\npdfjs-editor-free-text-button-label = Text\npdfjs-editor-ink-button =\n    .title = Draw\npdfjs-editor-ink-button-label = Draw\npdfjs-editor-stamp-button =\n    .title = Add or edit images\npdfjs-editor-stamp-button-label = Add or edit images\npdfjs-editor-highlight-button =\n    .title = Highlight\npdfjs-editor-highlight-button-label = Highlight\npdfjs-highlight-floating-button =\n    .title = Highlight\npdfjs-highlight-floating-button1 =\n    .title = Highlight\n    .aria-label = Highlight\npdfjs-highlight-floating-button-label = Highlight\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Remove drawing\npdfjs-editor-remove-freetext-button =\n    .title = Remove text\npdfjs-editor-remove-stamp-button =\n    .title = Remove image\npdfjs-editor-remove-highlight-button =\n    .title = Remove highlight\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Colour\npdfjs-editor-free-text-size-input = Size\npdfjs-editor-ink-color-input = Colour\npdfjs-editor-ink-thickness-input = Thickness\npdfjs-editor-ink-opacity-input = Opacity\npdfjs-editor-stamp-add-image-button =\n    .title = Add image\npdfjs-editor-stamp-add-image-button-label = Add image\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Thickness\npdfjs-editor-free-highlight-thickness-title =\n    .title = Change thickness when highlighting items other than text\npdfjs-free-text =\n    .aria-label = Text Editor\npdfjs-free-text-default-content = Start typing…\npdfjs-ink =\n    .aria-label = Draw Editor\npdfjs-ink-canvas =\n    .aria-label = User-created image\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Alt text\npdfjs-editor-alt-text-edit-button-label = Edit alt text\npdfjs-editor-alt-text-dialog-label = Choose an option\npdfjs-editor-alt-text-dialog-description = Alt text (alternative text) helps when people can’t see the image or when it doesn’t load.\npdfjs-editor-alt-text-add-description-label = Add a description\npdfjs-editor-alt-text-add-description-description = Aim for 1-2 sentences that describe the subject, setting, or actions.\npdfjs-editor-alt-text-mark-decorative-label = Mark as decorative\npdfjs-editor-alt-text-mark-decorative-description = This is used for ornamental images, like borders or watermarks.\npdfjs-editor-alt-text-cancel-button = Cancel\npdfjs-editor-alt-text-save-button = Save\npdfjs-editor-alt-text-decorative-tooltip = Marked as decorative\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = For example, “A young man sits down at a table to eat a meal”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Top left corner — resize\npdfjs-editor-resizer-label-top-middle = Top middle — resize\npdfjs-editor-resizer-label-top-right = Top right corner — resize\npdfjs-editor-resizer-label-middle-right = Middle right — resize\npdfjs-editor-resizer-label-bottom-right = Bottom right corner — resize\npdfjs-editor-resizer-label-bottom-middle = Bottom middle — resize\npdfjs-editor-resizer-label-bottom-left = Bottom left corner — resize\npdfjs-editor-resizer-label-middle-left = Middle left — resize\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Highlight colour\npdfjs-editor-colorpicker-button =\n    .title = Change colour\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Colour choices\npdfjs-editor-colorpicker-yellow =\n    .title = Yellow\npdfjs-editor-colorpicker-green =\n    .title = Green\npdfjs-editor-colorpicker-blue =\n    .title = Blue\npdfjs-editor-colorpicker-pink =\n    .title = Pink\npdfjs-editor-colorpicker-red =\n    .title = Red\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Show all\npdfjs-editor-highlight-show-all-button =\n    .title = Show all\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/en-US/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Previous Page\npdfjs-previous-button-label = Previous\npdfjs-next-button =\n    .title = Next Page\npdfjs-next-button-label = Next\n\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Page\n\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = of { $pagesCount }\n\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount })\n\npdfjs-zoom-out-button =\n    .title = Zoom Out\npdfjs-zoom-out-button-label = Zoom Out\npdfjs-zoom-in-button =\n    .title = Zoom In\npdfjs-zoom-in-button-label = Zoom In\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Switch to Presentation Mode\npdfjs-presentation-mode-button-label = Presentation Mode\npdfjs-open-file-button =\n    .title = Open File\npdfjs-open-file-button-label = Open\npdfjs-print-button =\n    .title = Print\npdfjs-print-button-label = Print\npdfjs-save-button =\n    .title = Save\npdfjs-save-button-label = Save\n\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Download\n\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Download\n\npdfjs-bookmark-button =\n    .title = Current Page (View URL from Current Page)\npdfjs-bookmark-button-label = Current Page\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Tools\n\npdfjs-tools-button-label = Tools\npdfjs-first-page-button =\n    .title = Go to First Page\npdfjs-first-page-button-label = Go to First Page\npdfjs-last-page-button =\n    .title = Go to Last Page\npdfjs-last-page-button-label = Go to Last Page\npdfjs-page-rotate-cw-button =\n    .title = Rotate Clockwise\npdfjs-page-rotate-cw-button-label = Rotate Clockwise\npdfjs-page-rotate-ccw-button =\n    .title = Rotate Counterclockwise\npdfjs-page-rotate-ccw-button-label = Rotate Counterclockwise\npdfjs-cursor-text-select-tool-button =\n    .title = Enable Text Selection Tool\npdfjs-cursor-text-select-tool-button-label = Text Selection Tool\npdfjs-cursor-hand-tool-button =\n    .title = Enable Hand Tool\npdfjs-cursor-hand-tool-button-label = Hand Tool\npdfjs-scroll-page-button =\n    .title = Use Page Scrolling\npdfjs-scroll-page-button-label = Page Scrolling\npdfjs-scroll-vertical-button =\n    .title = Use Vertical Scrolling\npdfjs-scroll-vertical-button-label = Vertical Scrolling\npdfjs-scroll-horizontal-button =\n    .title = Use Horizontal Scrolling\npdfjs-scroll-horizontal-button-label = Horizontal Scrolling\npdfjs-scroll-wrapped-button =\n    .title = Use Wrapped Scrolling\npdfjs-scroll-wrapped-button-label = Wrapped Scrolling\npdfjs-spread-none-button =\n    .title = Do not join page spreads\npdfjs-spread-none-button-label = No Spreads\npdfjs-spread-odd-button =\n    .title = Join page spreads starting with odd-numbered pages\npdfjs-spread-odd-button-label = Odd Spreads\npdfjs-spread-even-button =\n    .title = Join page spreads starting with even-numbered pages\npdfjs-spread-even-button-label = Even Spreads\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Document Properties…\npdfjs-document-properties-button-label = Document Properties…\npdfjs-document-properties-file-name = File name:\npdfjs-document-properties-file-size = File size:\n\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\n\npdfjs-document-properties-title = Title:\npdfjs-document-properties-author = Author:\npdfjs-document-properties-subject = Subject:\npdfjs-document-properties-keywords = Keywords:\npdfjs-document-properties-creation-date = Creation Date:\npdfjs-document-properties-modification-date = Modification Date:\n\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\n\npdfjs-document-properties-creator = Creator:\npdfjs-document-properties-producer = PDF Producer:\npdfjs-document-properties-version = PDF Version:\npdfjs-document-properties-page-count = Page Count:\npdfjs-document-properties-page-size = Page Size:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = portrait\npdfjs-document-properties-page-size-orientation-landscape = landscape\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Fast Web View:\npdfjs-document-properties-linearized-yes = Yes\npdfjs-document-properties-linearized-no = No\npdfjs-document-properties-close-button = Close\n\n## Print\n\npdfjs-print-progress-message = Preparing document for printing…\n\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\n\npdfjs-print-progress-close-button = Cancel\npdfjs-printing-not-supported = Warning: Printing is not fully supported by this browser.\npdfjs-printing-not-ready = Warning: The PDF is not fully loaded for printing.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Toggle Sidebar\npdfjs-toggle-sidebar-notification-button =\n    .title = Toggle Sidebar (document contains outline/attachments/layers)\npdfjs-toggle-sidebar-button-label = Toggle Sidebar\npdfjs-document-outline-button =\n    .title = Show Document Outline (double-click to expand/collapse all items)\npdfjs-document-outline-button-label = Document Outline\npdfjs-attachments-button =\n    .title = Show Attachments\npdfjs-attachments-button-label = Attachments\npdfjs-layers-button =\n    .title = Show Layers (double-click to reset all layers to the default state)\npdfjs-layers-button-label = Layers\npdfjs-thumbs-button =\n    .title = Show Thumbnails\npdfjs-thumbs-button-label = Thumbnails\npdfjs-current-outline-item-button =\n    .title = Find Current Outline Item\npdfjs-current-outline-item-button-label = Current Outline Item\npdfjs-findbar-button =\n    .title = Find in Document\npdfjs-findbar-button-label = Find\npdfjs-additional-layers = Additional Layers\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Page { $page }\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Thumbnail of Page { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Find\n    .placeholder = Find in document…\npdfjs-find-previous-button =\n    .title = Find the previous occurrence of the phrase\npdfjs-find-previous-button-label = Previous\npdfjs-find-next-button =\n    .title = Find the next occurrence of the phrase\npdfjs-find-next-button-label = Next\npdfjs-find-highlight-checkbox = Highlight All\npdfjs-find-match-case-checkbox-label = Match Case\npdfjs-find-match-diacritics-checkbox-label = Match Diacritics\npdfjs-find-entire-word-checkbox-label = Whole Words\npdfjs-find-reached-top = Reached top of document, continued from bottom\npdfjs-find-reached-bottom = Reached end of document, continued from top\n\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } of { $total } match\n       *[other] { $current } of { $total } matches\n    }\n\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] More than { $limit } match\n       *[other] More than { $limit } matches\n    }\n\npdfjs-find-not-found = Phrase not found\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Page Width\npdfjs-page-scale-fit = Page Fit\npdfjs-page-scale-auto = Automatic Zoom\npdfjs-page-scale-actual = Actual Size\n\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Page { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = An error occurred while loading the PDF.\npdfjs-invalid-file-error = Invalid or corrupted PDF file.\npdfjs-missing-file-error = Missing PDF file.\npdfjs-unexpected-response-error = Unexpected server response.\npdfjs-rendering-error = An error occurred while rendering the page.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Annotation]\n\n## Password\n\npdfjs-password-label = Enter the password to open this PDF file.\npdfjs-password-invalid = Invalid password. Please try again.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Cancel\npdfjs-web-fonts-disabled = Web fonts are disabled: unable to use embedded PDF fonts.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Text\npdfjs-editor-free-text-button-label = Text\npdfjs-editor-ink-button =\n    .title = Draw\npdfjs-editor-ink-button-label = Draw\npdfjs-editor-stamp-button =\n    .title = Add or edit images\npdfjs-editor-stamp-button-label = Add or edit images\npdfjs-editor-highlight-button =\n    .title = Highlight\npdfjs-editor-highlight-button-label = Highlight\npdfjs-highlight-floating-button1 =\n    .title = Highlight\n    .aria-label = Highlight\npdfjs-highlight-floating-button-label = Highlight\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Remove drawing\npdfjs-editor-remove-freetext-button =\n    .title = Remove text\npdfjs-editor-remove-stamp-button =\n    .title = Remove image\npdfjs-editor-remove-highlight-button =\n    .title = Remove highlight\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Color\npdfjs-editor-free-text-size-input = Size\npdfjs-editor-ink-color-input = Color\npdfjs-editor-ink-thickness-input = Thickness\npdfjs-editor-ink-opacity-input = Opacity\npdfjs-editor-stamp-add-image-button =\n    .title = Add image\npdfjs-editor-stamp-add-image-button-label = Add image\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Thickness\npdfjs-editor-free-highlight-thickness-title =\n    .title = Change thickness when highlighting items other than text\n\npdfjs-free-text =\n    .aria-label = Text Editor\npdfjs-free-text-default-content = Start typing…\npdfjs-ink =\n    .aria-label = Draw Editor\npdfjs-ink-canvas =\n    .aria-label = User-created image\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Alt text\n\npdfjs-editor-alt-text-edit-button-label = Edit alt text\npdfjs-editor-alt-text-dialog-label = Choose an option\npdfjs-editor-alt-text-dialog-description = Alt text (alternative text) helps when people can’t see the image or when it doesn’t load.\npdfjs-editor-alt-text-add-description-label = Add a description\npdfjs-editor-alt-text-add-description-description = Aim for 1-2 sentences that describe the subject, setting, or actions.\npdfjs-editor-alt-text-mark-decorative-label = Mark as decorative\npdfjs-editor-alt-text-mark-decorative-description = This is used for ornamental images, like borders or watermarks.\npdfjs-editor-alt-text-cancel-button = Cancel\npdfjs-editor-alt-text-save-button = Save\npdfjs-editor-alt-text-decorative-tooltip = Marked as decorative\n\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = For example, “A young man sits down at a table to eat a meal”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Top left corner — resize\npdfjs-editor-resizer-label-top-middle = Top middle — resize\npdfjs-editor-resizer-label-top-right = Top right corner — resize\npdfjs-editor-resizer-label-middle-right = Middle right — resize\npdfjs-editor-resizer-label-bottom-right = Bottom right corner — resize\npdfjs-editor-resizer-label-bottom-middle = Bottom middle — resize\npdfjs-editor-resizer-label-bottom-left = Bottom left corner — resize\npdfjs-editor-resizer-label-middle-left = Middle left — resize\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Highlight color\n\npdfjs-editor-colorpicker-button =\n    .title = Change color\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Color choices\npdfjs-editor-colorpicker-yellow =\n    .title = Yellow\npdfjs-editor-colorpicker-green =\n    .title = Green\npdfjs-editor-colorpicker-blue =\n    .title = Blue\npdfjs-editor-colorpicker-pink =\n    .title = Pink\npdfjs-editor-colorpicker-red =\n    .title = Red\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Show all\npdfjs-editor-highlight-show-all-button =\n    .title = Show all\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/eo/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Antaŭa paĝo\npdfjs-previous-button-label = Malantaŭen\npdfjs-next-button =\n    .title = Venonta paĝo\npdfjs-next-button-label = Antaŭen\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Paĝo\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = el { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } el { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Malpligrandigi\npdfjs-zoom-out-button-label = Malpligrandigi\npdfjs-zoom-in-button =\n    .title = Pligrandigi\npdfjs-zoom-in-button-label = Pligrandigi\npdfjs-zoom-select =\n    .title = Pligrandigilo\npdfjs-presentation-mode-button =\n    .title = Iri al prezenta reĝimo\npdfjs-presentation-mode-button-label = Prezenta reĝimo\npdfjs-open-file-button =\n    .title = Malfermi dosieron\npdfjs-open-file-button-label = Malfermi\npdfjs-print-button =\n    .title = Presi\npdfjs-print-button-label = Presi\npdfjs-save-button =\n    .title = Konservi\npdfjs-save-button-label = Konservi\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Elŝuti\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Elŝuti\npdfjs-bookmark-button =\n    .title = Nuna paĝo (Montri adreson de la nuna paĝo)\npdfjs-bookmark-button-label = Nuna paĝo\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Iloj\npdfjs-tools-button-label = Iloj\npdfjs-first-page-button =\n    .title = Iri al la unua paĝo\npdfjs-first-page-button-label = Iri al la unua paĝo\npdfjs-last-page-button =\n    .title = Iri al la lasta paĝo\npdfjs-last-page-button-label = Iri al la lasta paĝo\npdfjs-page-rotate-cw-button =\n    .title = Rotaciigi dekstrume\npdfjs-page-rotate-cw-button-label = Rotaciigi dekstrume\npdfjs-page-rotate-ccw-button =\n    .title = Rotaciigi maldekstrume\npdfjs-page-rotate-ccw-button-label = Rotaciigi maldekstrume\npdfjs-cursor-text-select-tool-button =\n    .title = Aktivigi tekstan elektilon\npdfjs-cursor-text-select-tool-button-label = Teksta elektilo\npdfjs-cursor-hand-tool-button =\n    .title = Aktivigi ilon de mano\npdfjs-cursor-hand-tool-button-label = Ilo de mano\npdfjs-scroll-page-button =\n    .title = Uzi rulumon de paĝo\npdfjs-scroll-page-button-label = Rulumo de paĝo\npdfjs-scroll-vertical-button =\n    .title = Uzi vertikalan rulumon\npdfjs-scroll-vertical-button-label = Vertikala rulumo\npdfjs-scroll-horizontal-button =\n    .title = Uzi horizontalan rulumon\npdfjs-scroll-horizontal-button-label = Horizontala rulumo\npdfjs-scroll-wrapped-button =\n    .title = Uzi ambaŭdirektan rulumon\npdfjs-scroll-wrapped-button-label = Ambaŭdirekta rulumo\npdfjs-spread-none-button =\n    .title = Ne montri paĝojn po du\npdfjs-spread-none-button-label = Unupaĝa vido\npdfjs-spread-odd-button =\n    .title = Kunigi paĝojn komencante per nepara paĝo\npdfjs-spread-odd-button-label = Po du paĝoj, neparaj maldekstre\npdfjs-spread-even-button =\n    .title = Kunigi paĝojn komencante per para paĝo\npdfjs-spread-even-button-label = Po du paĝoj, paraj maldekstre\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Atributoj de dokumento…\npdfjs-document-properties-button-label = Atributoj de dokumento…\npdfjs-document-properties-file-name = Nomo de dosiero:\npdfjs-document-properties-file-size = Grando de dosiero:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KO ({ $size_b } oktetoj)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MO ({ $size_b } oktetoj)\npdfjs-document-properties-title = Titolo:\npdfjs-document-properties-author = Aŭtoro:\npdfjs-document-properties-subject = Temo:\npdfjs-document-properties-keywords = Ŝlosilvorto:\npdfjs-document-properties-creation-date = Dato de kreado:\npdfjs-document-properties-modification-date = Dato de modifo:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Kreinto:\npdfjs-document-properties-producer = Produktinto de PDF:\npdfjs-document-properties-version = Versio de PDF:\npdfjs-document-properties-page-count = Nombro de paĝoj:\npdfjs-document-properties-page-size = Grando de paĝo:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = vertikala\npdfjs-document-properties-page-size-orientation-landscape = horizontala\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letera\npdfjs-document-properties-page-size-name-legal = Jura\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Rapida tekstaĵa vido:\npdfjs-document-properties-linearized-yes = Jes\npdfjs-document-properties-linearized-no = Ne\npdfjs-document-properties-close-button = Fermi\n\n## Print\n\npdfjs-print-progress-message = Preparo de dokumento por presi ĝin …\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Nuligi\npdfjs-printing-not-supported = Averto: tiu ĉi retumilo ne plene subtenas presadon.\npdfjs-printing-not-ready = Averto: la PDF dosiero ne estas plene ŝargita por presado.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Montri/kaŝi flankan strion\npdfjs-toggle-sidebar-notification-button =\n    .title = Montri/kaŝi flankan strion (la dokumento enhavas konturon/kunsendaĵojn/tavolojn)\npdfjs-toggle-sidebar-button-label = Montri/kaŝi flankan strion\npdfjs-document-outline-button =\n    .title = Montri la konturon de dokumento (alklaku duoble por faldi/malfaldi ĉiujn elementojn)\npdfjs-document-outline-button-label = Konturo de dokumento\npdfjs-attachments-button =\n    .title = Montri kunsendaĵojn\npdfjs-attachments-button-label = Kunsendaĵojn\npdfjs-layers-button =\n    .title = Montri tavolojn (duoble alklaku por remeti ĉiujn tavolojn en la norman staton)\npdfjs-layers-button-label = Tavoloj\npdfjs-thumbs-button =\n    .title = Montri miniaturojn\npdfjs-thumbs-button-label = Miniaturoj\npdfjs-current-outline-item-button =\n    .title = Trovi nunan konturan elementon\npdfjs-current-outline-item-button-label = Nuna kontura elemento\npdfjs-findbar-button =\n    .title = Serĉi en dokumento\npdfjs-findbar-button-label = Serĉi\npdfjs-additional-layers = Aldonaj tavoloj\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Paĝo { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniaturo de paĝo { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Serĉi\n    .placeholder = Serĉi en dokumento…\npdfjs-find-previous-button =\n    .title = Serĉi la antaŭan aperon de la frazo\npdfjs-find-previous-button-label = Malantaŭen\npdfjs-find-next-button =\n    .title = Serĉi la venontan aperon de la frazo\npdfjs-find-next-button-label = Antaŭen\npdfjs-find-highlight-checkbox = Elstarigi ĉiujn\npdfjs-find-match-case-checkbox-label = Distingi inter majuskloj kaj minuskloj\npdfjs-find-match-diacritics-checkbox-label = Respekti supersignojn\npdfjs-find-entire-word-checkbox-label = Tutaj vortoj\npdfjs-find-reached-top = Komenco de la dokumento atingita, daŭrigado ekde la fino\npdfjs-find-reached-bottom = Fino de la dokumento atingita, daŭrigado ekde la komenco\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } el { $total } kongruo\n       *[other] { $current } el { $total } kongruoj\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Pli ol { $limit } kongruo\n       *[other] Pli ol { $limit } kongruoj\n    }\npdfjs-find-not-found = Frazo ne trovita\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Larĝo de paĝo\npdfjs-page-scale-fit = Adapti paĝon\npdfjs-page-scale-auto = Aŭtomata skalo\npdfjs-page-scale-actual = Reala grando\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Paĝo { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Okazis eraro dum la ŝargado de la PDF dosiero.\npdfjs-invalid-file-error = Nevalida aŭ difektita PDF dosiero.\npdfjs-missing-file-error = Mankas dosiero PDF.\npdfjs-unexpected-response-error = Neatendita respondo de servilo.\npdfjs-rendering-error = Okazis eraro dum la montro de la paĝo.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Prinoto: { $type }]\n\n## Password\n\npdfjs-password-label = Tajpu pasvorton por malfermi tiun ĉi dosieron PDF.\npdfjs-password-invalid = Nevalida pasvorto. Bonvolu provi denove.\npdfjs-password-ok-button = Akcepti\npdfjs-password-cancel-button = Nuligi\npdfjs-web-fonts-disabled = Neaktivaj teksaĵaj tiparoj: ne elbas uzi enmetitajn tiparojn de PDF.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Teksto\npdfjs-editor-free-text-button-label = Teksto\npdfjs-editor-ink-button =\n    .title = Desegni\npdfjs-editor-ink-button-label = Desegni\npdfjs-editor-stamp-button =\n    .title = Aldoni aŭ modifi bildojn\npdfjs-editor-stamp-button-label = Aldoni aŭ modifi bildojn\npdfjs-editor-highlight-button =\n    .title = Elstarigi\npdfjs-editor-highlight-button-label = Elstarigi\npdfjs-highlight-floating-button =\n    .title = Elstarigi\npdfjs-highlight-floating-button1 =\n    .title = Elstarigi\n    .aria-label = Elstarigi\npdfjs-highlight-floating-button-label = Elstarigi\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Forigi desegnon\npdfjs-editor-remove-freetext-button =\n    .title = Forigi tekston\npdfjs-editor-remove-stamp-button =\n    .title = Forigi bildon\npdfjs-editor-remove-highlight-button =\n    .title = Forigi elstaraĵon\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Koloro\npdfjs-editor-free-text-size-input = Grando\npdfjs-editor-ink-color-input = Koloro\npdfjs-editor-ink-thickness-input = Dikeco\npdfjs-editor-ink-opacity-input = Maldiafaneco\npdfjs-editor-stamp-add-image-button =\n    .title = Aldoni bildon\npdfjs-editor-stamp-add-image-button-label = Aldoni bildon\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Dikeco\npdfjs-editor-free-highlight-thickness-title =\n    .title = Ŝanĝi dikecon dum elstarigo de netekstaj elementoj\npdfjs-free-text =\n    .aria-label = Tekstan redaktilon\npdfjs-free-text-default-content = Ektajpi…\npdfjs-ink =\n    .aria-label = Desegnan redaktilon\npdfjs-ink-canvas =\n    .aria-label = Bildo kreita de uzanto\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Alternativa teksto\npdfjs-editor-alt-text-edit-button-label = Redakti alternativan tekston\npdfjs-editor-alt-text-dialog-label = Elektu eblon\npdfjs-editor-alt-text-dialog-description = Alternativa teksto helpas personojn, en la okazoj kiam ili ne povas vidi aŭ ŝargi la bildon.\npdfjs-editor-alt-text-add-description-label = Aldoni priskribon\npdfjs-editor-alt-text-add-description-description = La celo estas unu aŭ du frazoj, kiuj priskribas la temon, etoson aŭ agojn.\npdfjs-editor-alt-text-mark-decorative-label = Marki kiel ornaman\npdfjs-editor-alt-text-mark-decorative-description = Tio ĉi estas uzita por ornamaj bildoj, kiel randoj aŭ fonaj bildoj.\npdfjs-editor-alt-text-cancel-button = Nuligi\npdfjs-editor-alt-text-save-button = Konservi\npdfjs-editor-alt-text-decorative-tooltip = Markita kiel ornama\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Ekzemple: “Juna persono sidiĝas ĉetable por ekmanĝi”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Supra maldekstra angulo — ŝangi grandon\npdfjs-editor-resizer-label-top-middle = Supra mezo — ŝanĝi grandon\npdfjs-editor-resizer-label-top-right = Supran dekstran angulon — ŝanĝi grandon\npdfjs-editor-resizer-label-middle-right = Dekstra mezo — ŝanĝi grandon\npdfjs-editor-resizer-label-bottom-right = Malsupra deksta angulo — ŝanĝi grandon\npdfjs-editor-resizer-label-bottom-middle = Malsupra mezo — ŝanĝi grandon\npdfjs-editor-resizer-label-bottom-left = Malsupra maldekstra angulo — ŝanĝi grandon\npdfjs-editor-resizer-label-middle-left = Maldekstra mezo — ŝanĝi grandon\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Elstarigi koloron\npdfjs-editor-colorpicker-button =\n    .title = Ŝanĝi koloron\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Elekto de koloroj\npdfjs-editor-colorpicker-yellow =\n    .title = Flava\npdfjs-editor-colorpicker-green =\n    .title = Verda\npdfjs-editor-colorpicker-blue =\n    .title = Blua\npdfjs-editor-colorpicker-pink =\n    .title = Roza\npdfjs-editor-colorpicker-red =\n    .title = Ruĝa\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Montri ĉiujn\npdfjs-editor-highlight-show-all-button =\n    .title = Montri ĉiujn\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/es-AR/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Página anterior\npdfjs-previous-button-label = Anterior\npdfjs-next-button =\n    .title = Página siguiente\npdfjs-next-button-label = Siguiente\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Página\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = de { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ( { $pageNumber } de { $pagesCount } )\npdfjs-zoom-out-button =\n    .title = Alejar\npdfjs-zoom-out-button-label = Alejar\npdfjs-zoom-in-button =\n    .title = Acercar\npdfjs-zoom-in-button-label = Acercar\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Cambiar a modo presentación\npdfjs-presentation-mode-button-label = Modo presentación\npdfjs-open-file-button =\n    .title = Abrir archivo\npdfjs-open-file-button-label = Abrir\npdfjs-print-button =\n    .title = Imprimir\npdfjs-print-button-label = Imprimir\npdfjs-save-button =\n    .title = Guardar\npdfjs-save-button-label = Guardar\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Descargar\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Descargar\npdfjs-bookmark-button =\n    .title = Página actual (Ver URL de la página actual)\npdfjs-bookmark-button-label = Página actual\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Abrir en la aplicación\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Abrir en la aplicación\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Herramientas\npdfjs-tools-button-label = Herramientas\npdfjs-first-page-button =\n    .title = Ir a primera página\npdfjs-first-page-button-label = Ir a primera página\npdfjs-last-page-button =\n    .title = Ir a última página\npdfjs-last-page-button-label = Ir a última página\npdfjs-page-rotate-cw-button =\n    .title = Rotar horario\npdfjs-page-rotate-cw-button-label = Rotar horario\npdfjs-page-rotate-ccw-button =\n    .title = Rotar antihorario\npdfjs-page-rotate-ccw-button-label = Rotar antihorario\npdfjs-cursor-text-select-tool-button =\n    .title = Habilitar herramienta de selección de texto\npdfjs-cursor-text-select-tool-button-label = Herramienta de selección de texto\npdfjs-cursor-hand-tool-button =\n    .title = Habilitar herramienta mano\npdfjs-cursor-hand-tool-button-label = Herramienta mano\npdfjs-scroll-page-button =\n    .title = Usar desplazamiento de página\npdfjs-scroll-page-button-label = Desplazamiento de página\npdfjs-scroll-vertical-button =\n    .title = Usar desplazamiento vertical\npdfjs-scroll-vertical-button-label = Desplazamiento vertical\npdfjs-scroll-horizontal-button =\n    .title = Usar desplazamiento vertical\npdfjs-scroll-horizontal-button-label = Desplazamiento horizontal\npdfjs-scroll-wrapped-button =\n    .title = Usar desplazamiento encapsulado\npdfjs-scroll-wrapped-button-label = Desplazamiento encapsulado\npdfjs-spread-none-button =\n    .title = No unir páginas dobles\npdfjs-spread-none-button-label = Sin dobles\npdfjs-spread-odd-button =\n    .title = Unir páginas dobles comenzando con las impares\npdfjs-spread-odd-button-label = Dobles impares\npdfjs-spread-even-button =\n    .title = Unir páginas dobles comenzando con las pares\npdfjs-spread-even-button-label = Dobles pares\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Propiedades del documento…\npdfjs-document-properties-button-label = Propiedades del documento…\npdfjs-document-properties-file-name = Nombre de archivo:\npdfjs-document-properties-file-size = Tamaño de archovo:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Título:\npdfjs-document-properties-author = Autor:\npdfjs-document-properties-subject = Asunto:\npdfjs-document-properties-keywords = Palabras clave:\npdfjs-document-properties-creation-date = Fecha de creación:\npdfjs-document-properties-modification-date = Fecha de modificación:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Creador:\npdfjs-document-properties-producer = PDF Productor:\npdfjs-document-properties-version = Versión de PDF:\npdfjs-document-properties-page-count = Cantidad de páginas:\npdfjs-document-properties-page-size = Tamaño de página:\npdfjs-document-properties-page-size-unit-inches = en\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = normal\npdfjs-document-properties-page-size-orientation-landscape = apaisado\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Carta\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Vista rápida de la Web:\npdfjs-document-properties-linearized-yes = Sí\npdfjs-document-properties-linearized-no = No\npdfjs-document-properties-close-button = Cerrar\n\n## Print\n\npdfjs-print-progress-message = Preparando documento para imprimir…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Cancelar\npdfjs-printing-not-supported = Advertencia: La impresión no está totalmente soportada por este navegador.\npdfjs-printing-not-ready = Advertencia: El PDF no está completamente cargado para impresión.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Alternar barra lateral\npdfjs-toggle-sidebar-notification-button =\n    .title = Alternar barra lateral (el documento contiene esquemas/adjuntos/capas)\npdfjs-toggle-sidebar-button-label = Alternar barra lateral\npdfjs-document-outline-button =\n    .title = Mostrar esquema del documento (doble clic para expandir/colapsar todos los ítems)\npdfjs-document-outline-button-label = Esquema del documento\npdfjs-attachments-button =\n    .title = Mostrar adjuntos\npdfjs-attachments-button-label = Adjuntos\npdfjs-layers-button =\n    .title = Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado)\npdfjs-layers-button-label = Capas\npdfjs-thumbs-button =\n    .title = Mostrar miniaturas\npdfjs-thumbs-button-label = Miniaturas\npdfjs-current-outline-item-button =\n    .title = Buscar elemento de esquema actual\npdfjs-current-outline-item-button-label = Elemento de esquema actual\npdfjs-findbar-button =\n    .title = Buscar en documento\npdfjs-findbar-button-label = Buscar\npdfjs-additional-layers = Capas adicionales\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Página { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatura de página { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Buscar\n    .placeholder = Buscar en documento…\npdfjs-find-previous-button =\n    .title = Buscar la aparición anterior de la frase\npdfjs-find-previous-button-label = Anterior\npdfjs-find-next-button =\n    .title = Buscar la siguiente aparición de la frase\npdfjs-find-next-button-label = Siguiente\npdfjs-find-highlight-checkbox = Resaltar todo\npdfjs-find-match-case-checkbox-label = Coincidir mayúsculas\npdfjs-find-match-diacritics-checkbox-label = Coincidir diacríticos\npdfjs-find-entire-word-checkbox-label = Palabras completas\npdfjs-find-reached-top = Inicio de documento alcanzado, continuando desde abajo\npdfjs-find-reached-bottom = Fin de documento alcanzando, continuando desde arriba\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } de { $total } coincidencia\n       *[other] { $current } de { $total } coincidencias\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Más de { $limit } coincidencia\n       *[other] Más de { $limit } coincidencias\n    }\npdfjs-find-not-found = Frase no encontrada\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Ancho de página\npdfjs-page-scale-fit = Ajustar página\npdfjs-page-scale-auto = Zoom automático\npdfjs-page-scale-actual = Tamaño real\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Página { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Ocurrió un error al cargar el PDF.\npdfjs-invalid-file-error = Archivo PDF no válido o cocrrupto.\npdfjs-missing-file-error = Archivo PDF faltante.\npdfjs-unexpected-response-error = Respuesta del servidor inesperada.\npdfjs-rendering-error = Ocurrió un error al dibujar la página.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Anotación]\n\n## Password\n\npdfjs-password-label = Ingrese la contraseña para abrir este archivo PDF\npdfjs-password-invalid = Contraseña inválida. Intente nuevamente.\npdfjs-password-ok-button = Aceptar\npdfjs-password-cancel-button = Cancelar\npdfjs-web-fonts-disabled = Tipografía web deshabilitada: no se pueden usar tipos incrustados en PDF.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Texto\npdfjs-editor-free-text-button-label = Texto\npdfjs-editor-ink-button =\n    .title = Dibujar\npdfjs-editor-ink-button-label = Dibujar\npdfjs-editor-stamp-button =\n    .title = Agregar o editar imágenes\npdfjs-editor-stamp-button-label = Agregar o editar imágenes\npdfjs-editor-highlight-button =\n    .title = Resaltar\npdfjs-editor-highlight-button-label = Resaltar\npdfjs-highlight-floating-button =\n    .title = Resaltar\npdfjs-highlight-floating-button1 =\n    .title = Resaltar\n    .aria-label = Resaltar\npdfjs-highlight-floating-button-label = Resaltar\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Eliminar dibujo\npdfjs-editor-remove-freetext-button =\n    .title = Eliminar texto\npdfjs-editor-remove-stamp-button =\n    .title = Eliminar imagen\npdfjs-editor-remove-highlight-button =\n    .title = Eliminar resaltado\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Color\npdfjs-editor-free-text-size-input = Tamaño\npdfjs-editor-ink-color-input = Color\npdfjs-editor-ink-thickness-input = Espesor\npdfjs-editor-ink-opacity-input = Opacidad\npdfjs-editor-stamp-add-image-button =\n    .title = Agregar una imagen\npdfjs-editor-stamp-add-image-button-label = Agregar una imagen\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Grosor\npdfjs-editor-free-highlight-thickness-title =\n    .title = Cambiar el grosor al resaltar elementos que no sean texto\npdfjs-free-text =\n    .aria-label = Editor de texto\npdfjs-free-text-default-content = Empezar a tipear…\npdfjs-ink =\n    .aria-label = Editor de dibujos\npdfjs-ink-canvas =\n    .aria-label = Imagen creada por el usuario\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Texto alternativo\npdfjs-editor-alt-text-edit-button-label = Editar el texto alternativo\npdfjs-editor-alt-text-dialog-label = Eligir una opción\npdfjs-editor-alt-text-dialog-description = El texto alternativo (texto alternativo) ayuda cuando las personas no pueden ver la imagen o cuando no se carga.\npdfjs-editor-alt-text-add-description-label = Agregar una descripción\npdfjs-editor-alt-text-add-description-description = Intente escribir 1 o 2 oraciones que describan el tema, el entorno o las acciones.\npdfjs-editor-alt-text-mark-decorative-label = Marcar como decorativo\npdfjs-editor-alt-text-mark-decorative-description = Esto se usa para imágenes ornamentales, como bordes o marcas de agua.\npdfjs-editor-alt-text-cancel-button = Cancelar\npdfjs-editor-alt-text-save-button = Guardar\npdfjs-editor-alt-text-decorative-tooltip = Marcado como decorativo\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Por ejemplo: “Un joven se sienta a la mesa a comer”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Esquina superior izquierda — cambiar el tamaño\npdfjs-editor-resizer-label-top-middle = Arriba en el medio — cambiar el tamaño\npdfjs-editor-resizer-label-top-right = Esquina superior derecha — cambiar el tamaño\npdfjs-editor-resizer-label-middle-right = Al centro a la derecha — cambiar el tamaño\npdfjs-editor-resizer-label-bottom-right = Esquina inferior derecha — cambiar el tamaño\npdfjs-editor-resizer-label-bottom-middle = Abajo en el medio — cambiar el tamaño\npdfjs-editor-resizer-label-bottom-left = Esquina inferior izquierda — cambiar el tamaño\npdfjs-editor-resizer-label-middle-left = Al centro a la izquierda — cambiar el tamaño\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Color de resaltado\npdfjs-editor-colorpicker-button =\n    .title = Cambiar el color\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Opciones de color\npdfjs-editor-colorpicker-yellow =\n    .title = Amarillo\npdfjs-editor-colorpicker-green =\n    .title = Verde\npdfjs-editor-colorpicker-blue =\n    .title = Azul\npdfjs-editor-colorpicker-pink =\n    .title = Rosado\npdfjs-editor-colorpicker-red =\n    .title = Rojo\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Mostrar todo\npdfjs-editor-highlight-show-all-button =\n    .title = Mostrar todo\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/es-CL/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Página anterior\npdfjs-previous-button-label = Anterior\npdfjs-next-button =\n    .title = Página siguiente\npdfjs-next-button-label = Siguiente\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Página\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = de { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Alejar\npdfjs-zoom-out-button-label = Alejar\npdfjs-zoom-in-button =\n    .title = Acercar\npdfjs-zoom-in-button-label = Acercar\npdfjs-zoom-select =\n    .title = Ampliación\npdfjs-presentation-mode-button =\n    .title = Cambiar al modo de presentación\npdfjs-presentation-mode-button-label = Modo de presentación\npdfjs-open-file-button =\n    .title = Abrir archivo\npdfjs-open-file-button-label = Abrir\npdfjs-print-button =\n    .title = Imprimir\npdfjs-print-button-label = Imprimir\npdfjs-save-button =\n    .title = Guardar\npdfjs-save-button-label = Guardar\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Descargar\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Descargar\npdfjs-bookmark-button =\n    .title = Página actual (Ver URL de la página actual)\npdfjs-bookmark-button-label = Página actual\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Abrir en una aplicación\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Abrir en una aplicación\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Herramientas\npdfjs-tools-button-label = Herramientas\npdfjs-first-page-button =\n    .title = Ir a la primera página\npdfjs-first-page-button-label = Ir a la primera página\npdfjs-last-page-button =\n    .title = Ir a la última página\npdfjs-last-page-button-label = Ir a la última página\npdfjs-page-rotate-cw-button =\n    .title = Girar a la derecha\npdfjs-page-rotate-cw-button-label = Girar a la derecha\npdfjs-page-rotate-ccw-button =\n    .title = Girar a la izquierda\npdfjs-page-rotate-ccw-button-label = Girar a la izquierda\npdfjs-cursor-text-select-tool-button =\n    .title = Activar la herramienta de selección de texto\npdfjs-cursor-text-select-tool-button-label = Herramienta de selección de texto\npdfjs-cursor-hand-tool-button =\n    .title = Activar la herramienta de mano\npdfjs-cursor-hand-tool-button-label = Herramienta de mano\npdfjs-scroll-page-button =\n    .title = Usar desplazamiento de página\npdfjs-scroll-page-button-label = Desplazamiento de página\npdfjs-scroll-vertical-button =\n    .title = Usar desplazamiento vertical\npdfjs-scroll-vertical-button-label = Desplazamiento vertical\npdfjs-scroll-horizontal-button =\n    .title = Usar desplazamiento horizontal\npdfjs-scroll-horizontal-button-label = Desplazamiento horizontal\npdfjs-scroll-wrapped-button =\n    .title = Usar desplazamiento en bloque\npdfjs-scroll-wrapped-button-label = Desplazamiento en bloque\npdfjs-spread-none-button =\n    .title = No juntar páginas a modo de libro\npdfjs-spread-none-button-label = Vista de una página\npdfjs-spread-odd-button =\n    .title = Junta las páginas partiendo con una de número impar\npdfjs-spread-odd-button-label = Vista de libro impar\npdfjs-spread-even-button =\n    .title = Junta las páginas partiendo con una de número par\npdfjs-spread-even-button-label = Vista de libro par\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Propiedades del documento…\npdfjs-document-properties-button-label = Propiedades del documento…\npdfjs-document-properties-file-name = Nombre de archivo:\npdfjs-document-properties-file-size = Tamaño del archivo:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Título:\npdfjs-document-properties-author = Autor:\npdfjs-document-properties-subject = Asunto:\npdfjs-document-properties-keywords = Palabras clave:\npdfjs-document-properties-creation-date = Fecha de creación:\npdfjs-document-properties-modification-date = Fecha de modificación:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Creador:\npdfjs-document-properties-producer = Productor del PDF:\npdfjs-document-properties-version = Versión de PDF:\npdfjs-document-properties-page-count = Cantidad de páginas:\npdfjs-document-properties-page-size = Tamaño de la página:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = vertical\npdfjs-document-properties-page-size-orientation-landscape = horizontal\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Carta\npdfjs-document-properties-page-size-name-legal = Oficio\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Vista rápida en Web:\npdfjs-document-properties-linearized-yes = Sí\npdfjs-document-properties-linearized-no = No\npdfjs-document-properties-close-button = Cerrar\n\n## Print\n\npdfjs-print-progress-message = Preparando documento para impresión…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Cancelar\npdfjs-printing-not-supported = Advertencia: Imprimir no está soportado completamente por este navegador.\npdfjs-printing-not-ready = Advertencia: El PDF no está completamente cargado para ser impreso.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Barra lateral\npdfjs-toggle-sidebar-notification-button =\n    .title = Cambiar barra lateral (índice de contenidos del documento/adjuntos/capas)\npdfjs-toggle-sidebar-button-label = Mostrar u ocultar la barra lateral\npdfjs-document-outline-button =\n    .title = Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos)\npdfjs-document-outline-button-label = Esquema del documento\npdfjs-attachments-button =\n    .title = Mostrar adjuntos\npdfjs-attachments-button-label = Adjuntos\npdfjs-layers-button =\n    .title = Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado)\npdfjs-layers-button-label = Capas\npdfjs-thumbs-button =\n    .title = Mostrar miniaturas\npdfjs-thumbs-button-label = Miniaturas\npdfjs-current-outline-item-button =\n    .title = Buscar elemento de esquema actual\npdfjs-current-outline-item-button-label = Elemento de esquema actual\npdfjs-findbar-button =\n    .title = Buscar en el documento\npdfjs-findbar-button-label = Buscar\npdfjs-additional-layers = Capas adicionales\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Página { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatura de la página { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Encontrar\n    .placeholder = Encontrar en el documento…\npdfjs-find-previous-button =\n    .title = Buscar la aparición anterior de la frase\npdfjs-find-previous-button-label = Previo\npdfjs-find-next-button =\n    .title = Buscar la siguiente aparición de la frase\npdfjs-find-next-button-label = Siguiente\npdfjs-find-highlight-checkbox = Destacar todos\npdfjs-find-match-case-checkbox-label = Coincidir mayús./minús.\npdfjs-find-match-diacritics-checkbox-label = Coincidir diacríticos\npdfjs-find-entire-word-checkbox-label = Palabras completas\npdfjs-find-reached-top = Se alcanzó el inicio del documento, continuando desde el final\npdfjs-find-reached-bottom = Se alcanzó el final del documento, continuando desde el inicio\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] Coincidencia { $current } de { $total }\n       *[other] Coincidencia { $current } de { $total }\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Más de { $limit } coincidencia\n       *[other] Más de { $limit } coincidencias\n    }\npdfjs-find-not-found = Frase no encontrada\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Ancho de página\npdfjs-page-scale-fit = Ajuste de página\npdfjs-page-scale-auto = Aumento automático\npdfjs-page-scale-actual = Tamaño actual\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Página { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Ocurrió un error al cargar el PDF.\npdfjs-invalid-file-error = Archivo PDF inválido o corrupto.\npdfjs-missing-file-error = Falta el archivo PDF.\npdfjs-unexpected-response-error = Respuesta del servidor inesperada.\npdfjs-rendering-error = Ocurrió un error al renderizar la página.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Anotación]\n\n## Password\n\npdfjs-password-label = Ingrese la contraseña para abrir este archivo PDF.\npdfjs-password-invalid = Contraseña inválida. Por favor, vuelve a intentarlo.\npdfjs-password-ok-button = Aceptar\npdfjs-password-cancel-button = Cancelar\npdfjs-web-fonts-disabled = Las tipografías web están desactivadas: imposible usar las fuentes PDF embebidas.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Texto\npdfjs-editor-free-text-button-label = Texto\npdfjs-editor-ink-button =\n    .title = Dibujar\npdfjs-editor-ink-button-label = Dibujar\npdfjs-editor-stamp-button =\n    .title = Añadir o editar imágenes\npdfjs-editor-stamp-button-label = Añadir o editar imágenes\npdfjs-editor-highlight-button =\n    .title = Destacar\npdfjs-editor-highlight-button-label = Destacar\npdfjs-highlight-floating-button =\n    .title = Destacar\npdfjs-highlight-floating-button1 =\n    .title = Destacar\n    .aria-label = Destacar\npdfjs-highlight-floating-button-label = Destacar\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Eliminar dibujo\npdfjs-editor-remove-freetext-button =\n    .title = Eliminar texto\npdfjs-editor-remove-stamp-button =\n    .title = Eliminar imagen\npdfjs-editor-remove-highlight-button =\n    .title = Quitar resaltado\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Color\npdfjs-editor-free-text-size-input = Tamaño\npdfjs-editor-ink-color-input = Color\npdfjs-editor-ink-thickness-input = Grosor\npdfjs-editor-ink-opacity-input = Opacidad\npdfjs-editor-stamp-add-image-button =\n    .title = Añadir imagen\npdfjs-editor-stamp-add-image-button-label = Añadir imagen\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Grosor\npdfjs-editor-free-highlight-thickness-title =\n    .title = Cambia el grosor al resaltar elementos que no sean texto\npdfjs-free-text =\n    .aria-label = Editor de texto\npdfjs-free-text-default-content = Empieza a escribir…\npdfjs-ink =\n    .aria-label = Editor de dibujos\npdfjs-ink-canvas =\n    .aria-label = Imagen creada por el usuario\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Texto alternativo\npdfjs-editor-alt-text-edit-button-label = Editar texto alternativo\npdfjs-editor-alt-text-dialog-label = Elige una opción\npdfjs-editor-alt-text-dialog-description = El texto alternativo (alt text) ayuda cuando las personas no pueden ver la imagen o cuando no se carga.\npdfjs-editor-alt-text-add-description-label = Añade una descripción\npdfjs-editor-alt-text-add-description-description = Intenta escribir 1 o 2 oraciones que describan el tema, el ambiente o las acciones.\npdfjs-editor-alt-text-mark-decorative-label = Marcar como decorativa\npdfjs-editor-alt-text-mark-decorative-description = Se utiliza para imágenes ornamentales, como bordes o marcas de agua.\npdfjs-editor-alt-text-cancel-button = Cancelar\npdfjs-editor-alt-text-save-button = Guardar\npdfjs-editor-alt-text-decorative-tooltip = Marcada como decorativa\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Por ejemplo: “Un joven se sienta a la mesa a comer”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Esquina superior izquierda — cambiar el tamaño\npdfjs-editor-resizer-label-top-middle = Borde superior en el medio — cambiar el tamaño\npdfjs-editor-resizer-label-top-right = Esquina superior derecha — cambiar el tamaño\npdfjs-editor-resizer-label-middle-right = Borde derecho en el medio — cambiar el tamaño\npdfjs-editor-resizer-label-bottom-right = Esquina inferior derecha — cambiar el tamaño\npdfjs-editor-resizer-label-bottom-middle = Borde inferior en el medio — cambiar el tamaño\npdfjs-editor-resizer-label-bottom-left = Esquina inferior izquierda — cambiar el tamaño\npdfjs-editor-resizer-label-middle-left = Borde izquierdo en el medio — cambiar el tamaño\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Color de resaltado\npdfjs-editor-colorpicker-button =\n    .title = Cambiar color\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Opciones de color\npdfjs-editor-colorpicker-yellow =\n    .title = Amarillo\npdfjs-editor-colorpicker-green =\n    .title = Verde\npdfjs-editor-colorpicker-blue =\n    .title = Azul\npdfjs-editor-colorpicker-pink =\n    .title = Rosa\npdfjs-editor-colorpicker-red =\n    .title = Rojo\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Mostrar todo\npdfjs-editor-highlight-show-all-button =\n    .title = Mostrar todo\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/es-ES/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Página anterior\npdfjs-previous-button-label = Anterior\npdfjs-next-button =\n    .title = Página siguiente\npdfjs-next-button-label = Siguiente\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Página\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = de { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Reducir\npdfjs-zoom-out-button-label = Reducir\npdfjs-zoom-in-button =\n    .title = Aumentar\npdfjs-zoom-in-button-label = Aumentar\npdfjs-zoom-select =\n    .title = Tamaño\npdfjs-presentation-mode-button =\n    .title = Cambiar al modo presentación\npdfjs-presentation-mode-button-label = Modo presentación\npdfjs-open-file-button =\n    .title = Abrir archivo\npdfjs-open-file-button-label = Abrir\npdfjs-print-button =\n    .title = Imprimir\npdfjs-print-button-label = Imprimir\npdfjs-save-button =\n    .title = Guardar\npdfjs-save-button-label = Guardar\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Descargar\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Descargar\npdfjs-bookmark-button =\n    .title = Página actual (Ver URL de la página actual)\npdfjs-bookmark-button-label = Página actual\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Abrir en aplicación\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Abrir en aplicación\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Herramientas\npdfjs-tools-button-label = Herramientas\npdfjs-first-page-button =\n    .title = Ir a la primera página\npdfjs-first-page-button-label = Ir a la primera página\npdfjs-last-page-button =\n    .title = Ir a la última página\npdfjs-last-page-button-label = Ir a la última página\npdfjs-page-rotate-cw-button =\n    .title = Rotar en sentido horario\npdfjs-page-rotate-cw-button-label = Rotar en sentido horario\npdfjs-page-rotate-ccw-button =\n    .title = Rotar en sentido antihorario\npdfjs-page-rotate-ccw-button-label = Rotar en sentido antihorario\npdfjs-cursor-text-select-tool-button =\n    .title = Activar herramienta de selección de texto\npdfjs-cursor-text-select-tool-button-label = Herramienta de selección de texto\npdfjs-cursor-hand-tool-button =\n    .title = Activar herramienta de mano\npdfjs-cursor-hand-tool-button-label = Herramienta de mano\npdfjs-scroll-page-button =\n    .title = Usar desplazamiento de página\npdfjs-scroll-page-button-label = Desplazamiento de página\npdfjs-scroll-vertical-button =\n    .title = Usar desplazamiento vertical\npdfjs-scroll-vertical-button-label = Desplazamiento vertical\npdfjs-scroll-horizontal-button =\n    .title = Usar desplazamiento horizontal\npdfjs-scroll-horizontal-button-label = Desplazamiento horizontal\npdfjs-scroll-wrapped-button =\n    .title = Usar desplazamiento en bloque\npdfjs-scroll-wrapped-button-label = Desplazamiento en bloque\npdfjs-spread-none-button =\n    .title = No juntar páginas en vista de libro\npdfjs-spread-none-button-label = Vista de libro\npdfjs-spread-odd-button =\n    .title = Juntar las páginas partiendo de una con número impar\npdfjs-spread-odd-button-label = Vista de libro impar\npdfjs-spread-even-button =\n    .title = Juntar las páginas partiendo de una con número par\npdfjs-spread-even-button-label = Vista de libro par\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Propiedades del documento…\npdfjs-document-properties-button-label = Propiedades del documento…\npdfjs-document-properties-file-name = Nombre de archivo:\npdfjs-document-properties-file-size = Tamaño de archivo:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Título:\npdfjs-document-properties-author = Autor:\npdfjs-document-properties-subject = Asunto:\npdfjs-document-properties-keywords = Palabras clave:\npdfjs-document-properties-creation-date = Fecha de creación:\npdfjs-document-properties-modification-date = Fecha de modificación:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Creador:\npdfjs-document-properties-producer = Productor PDF:\npdfjs-document-properties-version = Versión PDF:\npdfjs-document-properties-page-count = Número de páginas:\npdfjs-document-properties-page-size = Tamaño de la página:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = vertical\npdfjs-document-properties-page-size-orientation-landscape = horizontal\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Carta\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Vista rápida de la web:\npdfjs-document-properties-linearized-yes = Sí\npdfjs-document-properties-linearized-no = No\npdfjs-document-properties-close-button = Cerrar\n\n## Print\n\npdfjs-print-progress-message = Preparando documento para impresión…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Cancelar\npdfjs-printing-not-supported = Advertencia: Imprimir no está totalmente soportado por este navegador.\npdfjs-printing-not-ready = Advertencia: Este PDF no se ha cargado completamente para poder imprimirse.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Cambiar barra lateral\npdfjs-toggle-sidebar-notification-button =\n    .title = Alternar barra lateral (el documento contiene esquemas/adjuntos/capas)\npdfjs-toggle-sidebar-button-label = Cambiar barra lateral\npdfjs-document-outline-button =\n    .title = Mostrar resumen del documento (doble clic para expandir/contraer todos los elementos)\npdfjs-document-outline-button-label = Resumen de documento\npdfjs-attachments-button =\n    .title = Mostrar adjuntos\npdfjs-attachments-button-label = Adjuntos\npdfjs-layers-button =\n    .title = Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado)\npdfjs-layers-button-label = Capas\npdfjs-thumbs-button =\n    .title = Mostrar miniaturas\npdfjs-thumbs-button-label = Miniaturas\npdfjs-current-outline-item-button =\n    .title = Encontrar elemento de esquema actual\npdfjs-current-outline-item-button-label = Elemento de esquema actual\npdfjs-findbar-button =\n    .title = Buscar en el documento\npdfjs-findbar-button-label = Buscar\npdfjs-additional-layers = Capas adicionales\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Página { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatura de la página { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Buscar\n    .placeholder = Buscar en el documento…\npdfjs-find-previous-button =\n    .title = Encontrar la anterior aparición de la frase\npdfjs-find-previous-button-label = Anterior\npdfjs-find-next-button =\n    .title = Encontrar la siguiente aparición de esta frase\npdfjs-find-next-button-label = Siguiente\npdfjs-find-highlight-checkbox = Resaltar todos\npdfjs-find-match-case-checkbox-label = Coincidencia de mayús./minús.\npdfjs-find-match-diacritics-checkbox-label = Coincidir diacríticos\npdfjs-find-entire-word-checkbox-label = Palabras completas\npdfjs-find-reached-top = Se alcanzó el inicio del documento, se continúa desde el final\npdfjs-find-reached-bottom = Se alcanzó el final del documento, se continúa desde el inicio\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } de { $total } coincidencia\n       *[other] { $current } de { $total } coincidencias\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Más de { $limit } coincidencia\n       *[other] Más de { $limit } coincidencias\n    }\npdfjs-find-not-found = Frase no encontrada\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Anchura de la página\npdfjs-page-scale-fit = Ajuste de la página\npdfjs-page-scale-auto = Tamaño automático\npdfjs-page-scale-actual = Tamaño real\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Página { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Ocurrió un error al cargar el PDF.\npdfjs-invalid-file-error = Fichero PDF no válido o corrupto.\npdfjs-missing-file-error = No hay fichero PDF.\npdfjs-unexpected-response-error = Respuesta inesperada del servidor.\npdfjs-rendering-error = Ocurrió un error al renderizar la página.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Anotación { $type }]\n\n## Password\n\npdfjs-password-label = Introduzca la contraseña para abrir este archivo PDF.\npdfjs-password-invalid = Contraseña no válida. Vuelva a intentarlo.\npdfjs-password-ok-button = Aceptar\npdfjs-password-cancel-button = Cancelar\npdfjs-web-fonts-disabled = Las tipografías web están desactivadas: es imposible usar las tipografías PDF embebidas.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Texto\npdfjs-editor-free-text-button-label = Texto\npdfjs-editor-ink-button =\n    .title = Dibujar\npdfjs-editor-ink-button-label = Dibujar\npdfjs-editor-stamp-button =\n    .title = Añadir o editar imágenes\npdfjs-editor-stamp-button-label = Añadir o editar imágenes\npdfjs-editor-highlight-button =\n    .title = Resaltar\npdfjs-editor-highlight-button-label = Resaltar\npdfjs-highlight-floating-button =\n    .title = Resaltar\npdfjs-highlight-floating-button1 =\n    .title = Resaltar\n    .aria-label = Resaltar\npdfjs-highlight-floating-button-label = Resaltar\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Eliminar dibujo\npdfjs-editor-remove-freetext-button =\n    .title = Eliminar texto\npdfjs-editor-remove-stamp-button =\n    .title = Eliminar imagen\npdfjs-editor-remove-highlight-button =\n    .title = Quitar resaltado\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Color\npdfjs-editor-free-text-size-input = Tamaño\npdfjs-editor-ink-color-input = Color\npdfjs-editor-ink-thickness-input = Grosor\npdfjs-editor-ink-opacity-input = Opacidad\npdfjs-editor-stamp-add-image-button =\n    .title = Añadir imagen\npdfjs-editor-stamp-add-image-button-label = Añadir imagen\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Grosor\npdfjs-editor-free-highlight-thickness-title =\n    .title = Cambiar el grosor al resaltar elementos que no sean texto\npdfjs-free-text =\n    .aria-label = Editor de texto\npdfjs-free-text-default-content = Empezar a escribir…\npdfjs-ink =\n    .aria-label = Editor de dibujos\npdfjs-ink-canvas =\n    .aria-label = Imagen creada por el usuario\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Texto alternativo\npdfjs-editor-alt-text-edit-button-label = Editar el texto alternativo\npdfjs-editor-alt-text-dialog-label = Eligir una opción\npdfjs-editor-alt-text-dialog-description = El texto alternativo (texto alternativo) ayuda cuando las personas no pueden ver la imagen o cuando no se carga.\npdfjs-editor-alt-text-add-description-label = Añadir una descripción\npdfjs-editor-alt-text-add-description-description = Intente escribir 1 o 2 frases que describan el tema, el entorno o las acciones.\npdfjs-editor-alt-text-mark-decorative-label = Marcar como decorativa\npdfjs-editor-alt-text-mark-decorative-description = Se utiliza para imágenes ornamentales, como bordes o marcas de agua.\npdfjs-editor-alt-text-cancel-button = Cancelar\npdfjs-editor-alt-text-save-button = Guardar\npdfjs-editor-alt-text-decorative-tooltip = Marcada como decorativa\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Por ejemplo: “Un joven se sienta a la mesa a comer”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Esquina superior izquierda — redimensionar\npdfjs-editor-resizer-label-top-middle = Borde superior en el medio — redimensionar\npdfjs-editor-resizer-label-top-right = Esquina superior derecha — redimensionar\npdfjs-editor-resizer-label-middle-right = Borde derecho en el medio — redimensionar\npdfjs-editor-resizer-label-bottom-right = Esquina inferior derecha — redimensionar\npdfjs-editor-resizer-label-bottom-middle = Borde inferior en el medio — redimensionar\npdfjs-editor-resizer-label-bottom-left = Esquina inferior izquierda — redimensionar\npdfjs-editor-resizer-label-middle-left = Borde izquierdo en el medio — redimensionar\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Color de resaltado\npdfjs-editor-colorpicker-button =\n    .title = Cambiar color\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Opciones de color\npdfjs-editor-colorpicker-yellow =\n    .title = Amarillo\npdfjs-editor-colorpicker-green =\n    .title = Verde\npdfjs-editor-colorpicker-blue =\n    .title = Azul\npdfjs-editor-colorpicker-pink =\n    .title = Rosa\npdfjs-editor-colorpicker-red =\n    .title = Rojo\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Mostrar todo\npdfjs-editor-highlight-show-all-button =\n    .title = Mostrar todo\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/es-MX/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Página anterior\npdfjs-previous-button-label = Anterior\npdfjs-next-button =\n    .title = Página siguiente\npdfjs-next-button-label = Siguiente\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Página\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = de { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Reducir\npdfjs-zoom-out-button-label = Reducir\npdfjs-zoom-in-button =\n    .title = Aumentar\npdfjs-zoom-in-button-label = Aumentar\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Cambiar al modo presentación\npdfjs-presentation-mode-button-label = Modo presentación\npdfjs-open-file-button =\n    .title = Abrir archivo\npdfjs-open-file-button-label = Abrir\npdfjs-print-button =\n    .title = Imprimir\npdfjs-print-button-label = Imprimir\npdfjs-save-button =\n    .title = Guardar\npdfjs-save-button-label = Guardar\npdfjs-bookmark-button =\n    .title = Página actual (Ver URL de la página actual)\npdfjs-bookmark-button-label = Página actual\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Abrir en la aplicación\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Abrir en la aplicación\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Herramientas\npdfjs-tools-button-label = Herramientas\npdfjs-first-page-button =\n    .title = Ir a la primera página\npdfjs-first-page-button-label = Ir a la primera página\npdfjs-last-page-button =\n    .title = Ir a la última página\npdfjs-last-page-button-label = Ir a la última página\npdfjs-page-rotate-cw-button =\n    .title = Girar a la derecha\npdfjs-page-rotate-cw-button-label = Girar a la derecha\npdfjs-page-rotate-ccw-button =\n    .title = Girar a la izquierda\npdfjs-page-rotate-ccw-button-label = Girar a la izquierda\npdfjs-cursor-text-select-tool-button =\n    .title = Activar la herramienta de selección de texto\npdfjs-cursor-text-select-tool-button-label = Herramienta de selección de texto\npdfjs-cursor-hand-tool-button =\n    .title = Activar la herramienta de mano\npdfjs-cursor-hand-tool-button-label = Herramienta de mano\npdfjs-scroll-page-button =\n    .title = Usar desplazamiento de página\npdfjs-scroll-page-button-label = Desplazamiento de página\npdfjs-scroll-vertical-button =\n    .title = Usar desplazamiento vertical\npdfjs-scroll-vertical-button-label = Desplazamiento vertical\npdfjs-scroll-horizontal-button =\n    .title = Usar desplazamiento horizontal\npdfjs-scroll-horizontal-button-label = Desplazamiento horizontal\npdfjs-scroll-wrapped-button =\n    .title = Usar desplazamiento encapsulado\npdfjs-scroll-wrapped-button-label = Desplazamiento encapsulado\npdfjs-spread-none-button =\n    .title = No unir páginas separadas\npdfjs-spread-none-button-label = Vista de una página\npdfjs-spread-odd-button =\n    .title = Unir las páginas partiendo con una de número impar\npdfjs-spread-odd-button-label = Vista de libro impar\npdfjs-spread-even-button =\n    .title = Juntar las páginas partiendo con una de número par\npdfjs-spread-even-button-label = Vista de libro par\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Propiedades del documento…\npdfjs-document-properties-button-label = Propiedades del documento…\npdfjs-document-properties-file-name = Nombre del archivo:\npdfjs-document-properties-file-size = Tamaño del archivo:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Título:\npdfjs-document-properties-author = Autor:\npdfjs-document-properties-subject = Asunto:\npdfjs-document-properties-keywords = Palabras claves:\npdfjs-document-properties-creation-date = Fecha de creación:\npdfjs-document-properties-modification-date = Fecha de modificación:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Creador:\npdfjs-document-properties-producer = Productor PDF:\npdfjs-document-properties-version = Versión PDF:\npdfjs-document-properties-page-count = Número de páginas:\npdfjs-document-properties-page-size = Tamaño de la página:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = vertical\npdfjs-document-properties-page-size-orientation-landscape = horizontal\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Carta\npdfjs-document-properties-page-size-name-legal = Oficio\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Vista rápida de la web:\npdfjs-document-properties-linearized-yes = Sí\npdfjs-document-properties-linearized-no = No\npdfjs-document-properties-close-button = Cerrar\n\n## Print\n\npdfjs-print-progress-message = Preparando documento para impresión…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Cancelar\npdfjs-printing-not-supported = Advertencia: La impresión no esta completamente soportada por este navegador.\npdfjs-printing-not-ready = Advertencia: El PDF no cargo completamente para impresión.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Cambiar barra lateral\npdfjs-toggle-sidebar-notification-button =\n    .title = Alternar barra lateral (el documento contiene esquemas/adjuntos/capas)\npdfjs-toggle-sidebar-button-label = Cambiar barra lateral\npdfjs-document-outline-button =\n    .title = Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos)\npdfjs-document-outline-button-label = Esquema del documento\npdfjs-attachments-button =\n    .title = Mostrar adjuntos\npdfjs-attachments-button-label = Adjuntos\npdfjs-layers-button =\n    .title = Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado)\npdfjs-layers-button-label = Capas\npdfjs-thumbs-button =\n    .title = Mostrar miniaturas\npdfjs-thumbs-button-label = Miniaturas\npdfjs-current-outline-item-button =\n    .title = Buscar elemento de esquema actual\npdfjs-current-outline-item-button-label = Elemento de esquema actual\npdfjs-findbar-button =\n    .title = Buscar en el documento\npdfjs-findbar-button-label = Buscar\npdfjs-additional-layers = Capas adicionales\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Página { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatura de la página { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Buscar\n    .placeholder = Buscar en el documento…\npdfjs-find-previous-button =\n    .title = Ir a la anterior frase encontrada\npdfjs-find-previous-button-label = Anterior\npdfjs-find-next-button =\n    .title = Ir a la siguiente frase encontrada\npdfjs-find-next-button-label = Siguiente\npdfjs-find-highlight-checkbox = Resaltar todo\npdfjs-find-match-case-checkbox-label = Coincidir con mayúsculas y minúsculas\npdfjs-find-match-diacritics-checkbox-label = Coincidir diacríticos\npdfjs-find-entire-word-checkbox-label = Palabras completas\npdfjs-find-reached-top = Se alcanzó el inicio del documento, se buscará al final\npdfjs-find-reached-bottom = Se alcanzó el final del documento, se buscará al inicio\npdfjs-find-not-found = No se encontró la frase\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Ancho de página\npdfjs-page-scale-fit = Ajustar página\npdfjs-page-scale-auto = Zoom automático\npdfjs-page-scale-actual = Tamaño real\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Página { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Un error ocurrió al cargar el PDF.\npdfjs-invalid-file-error = Archivo PDF invalido o dañado.\npdfjs-missing-file-error = Archivo PDF no encontrado.\npdfjs-unexpected-response-error = Respuesta inesperada del servidor.\npdfjs-rendering-error = Un error ocurrió al renderizar la página.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } anotación]\n\n## Password\n\npdfjs-password-label = Ingresa la contraseña para abrir este archivo PDF.\npdfjs-password-invalid = Contraseña inválida. Por favor intenta de nuevo.\npdfjs-password-ok-button = Aceptar\npdfjs-password-cancel-button = Cancelar\npdfjs-web-fonts-disabled = Las fuentes web están desactivadas: es imposible usar las fuentes PDF embebidas.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Texto\npdfjs-editor-free-text-button-label = Texto\npdfjs-editor-ink-button =\n    .title = Dibujar\npdfjs-editor-ink-button-label = Dibujar\n# Editor Parameters\npdfjs-editor-free-text-color-input = Color\npdfjs-editor-free-text-size-input = Tamaño\npdfjs-editor-ink-color-input = Color\npdfjs-editor-ink-thickness-input = Grossor\npdfjs-editor-ink-opacity-input = Opacidad\npdfjs-free-text =\n    .aria-label = Editor de texto\npdfjs-free-text-default-content = Empieza a escribir…\npdfjs-ink =\n    .aria-label = Editor de dibujo\npdfjs-ink-canvas =\n    .aria-label = Imagen creada por el usuario\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/et/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Eelmine lehekülg\npdfjs-previous-button-label = Eelmine\npdfjs-next-button =\n    .title = Järgmine lehekülg\npdfjs-next-button-label = Järgmine\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Leht\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = / { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber }/{ $pagesCount })\npdfjs-zoom-out-button =\n    .title = Vähenda\npdfjs-zoom-out-button-label = Vähenda\npdfjs-zoom-in-button =\n    .title = Suurenda\npdfjs-zoom-in-button-label = Suurenda\npdfjs-zoom-select =\n    .title = Suurendamine\npdfjs-presentation-mode-button =\n    .title = Lülitu esitlusrežiimi\npdfjs-presentation-mode-button-label = Esitlusrežiim\npdfjs-open-file-button =\n    .title = Ava fail\npdfjs-open-file-button-label = Ava\npdfjs-print-button =\n    .title = Prindi\npdfjs-print-button-label = Prindi\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Tööriistad\npdfjs-tools-button-label = Tööriistad\npdfjs-first-page-button =\n    .title = Mine esimesele leheküljele\npdfjs-first-page-button-label = Mine esimesele leheküljele\npdfjs-last-page-button =\n    .title = Mine viimasele leheküljele\npdfjs-last-page-button-label = Mine viimasele leheküljele\npdfjs-page-rotate-cw-button =\n    .title = Pööra päripäeva\npdfjs-page-rotate-cw-button-label = Pööra päripäeva\npdfjs-page-rotate-ccw-button =\n    .title = Pööra vastupäeva\npdfjs-page-rotate-ccw-button-label = Pööra vastupäeva\npdfjs-cursor-text-select-tool-button =\n    .title = Luba teksti valimise tööriist\npdfjs-cursor-text-select-tool-button-label = Teksti valimise tööriist\npdfjs-cursor-hand-tool-button =\n    .title = Luba sirvimistööriist\npdfjs-cursor-hand-tool-button-label = Sirvimistööriist\npdfjs-scroll-page-button =\n    .title = Kasutatakse lehe kaupa kerimist\npdfjs-scroll-page-button-label = Lehe kaupa kerimine\npdfjs-scroll-vertical-button =\n    .title = Kasuta vertikaalset kerimist\npdfjs-scroll-vertical-button-label = Vertikaalne kerimine\npdfjs-scroll-horizontal-button =\n    .title = Kasuta horisontaalset kerimist\npdfjs-scroll-horizontal-button-label = Horisontaalne kerimine\npdfjs-scroll-wrapped-button =\n    .title = Kasuta rohkem mahutavat kerimist\npdfjs-scroll-wrapped-button-label = Rohkem mahutav kerimine\npdfjs-spread-none-button =\n    .title = Ära kõrvuta lehekülgi\npdfjs-spread-none-button-label = Lehtede kõrvutamine puudub\npdfjs-spread-odd-button =\n    .title = Kõrvuta leheküljed, alustades paaritute numbritega lehekülgedega\npdfjs-spread-odd-button-label = Kõrvutamine paaritute numbritega alustades\npdfjs-spread-even-button =\n    .title = Kõrvuta leheküljed, alustades paarisnumbritega lehekülgedega\npdfjs-spread-even-button-label = Kõrvutamine paarisnumbritega alustades\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Dokumendi omadused…\npdfjs-document-properties-button-label = Dokumendi omadused…\npdfjs-document-properties-file-name = Faili nimi:\npdfjs-document-properties-file-size = Faili suurus:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KiB ({ $size_b } baiti)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MiB ({ $size_b } baiti)\npdfjs-document-properties-title = Pealkiri:\npdfjs-document-properties-author = Autor:\npdfjs-document-properties-subject = Teema:\npdfjs-document-properties-keywords = Märksõnad:\npdfjs-document-properties-creation-date = Loodud:\npdfjs-document-properties-modification-date = Muudetud:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date } { $time }\npdfjs-document-properties-creator = Looja:\npdfjs-document-properties-producer = Generaator:\npdfjs-document-properties-version = Generaatori versioon:\npdfjs-document-properties-page-count = Lehekülgi:\npdfjs-document-properties-page-size = Lehe suurus:\npdfjs-document-properties-page-size-unit-inches = tolli\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = vertikaalpaigutus\npdfjs-document-properties-page-size-orientation-landscape = rõhtpaigutus\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = \"Fast Web View\" tugi:\npdfjs-document-properties-linearized-yes = Jah\npdfjs-document-properties-linearized-no = Ei\npdfjs-document-properties-close-button = Sulge\n\n## Print\n\npdfjs-print-progress-message = Dokumendi ettevalmistamine printimiseks…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Loobu\npdfjs-printing-not-supported = Hoiatus: printimine pole selle brauseri poolt täielikult toetatud.\npdfjs-printing-not-ready = Hoiatus: PDF pole printimiseks täielikult laaditud.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Näita külgriba\npdfjs-toggle-sidebar-notification-button =\n    .title = Näita külgriba (dokument sisaldab sisukorda/manuseid/kihte)\npdfjs-toggle-sidebar-button-label = Näita külgriba\npdfjs-document-outline-button =\n    .title = Näita sisukorda (kõigi punktide laiendamiseks/ahendamiseks topeltklõpsa)\npdfjs-document-outline-button-label = Näita sisukorda\npdfjs-attachments-button =\n    .title = Näita manuseid\npdfjs-attachments-button-label = Manused\npdfjs-layers-button =\n    .title = Näita kihte (kõikide kihtide vaikeolekusse lähtestamiseks topeltklõpsa)\npdfjs-layers-button-label = Kihid\npdfjs-thumbs-button =\n    .title = Näita pisipilte\npdfjs-thumbs-button-label = Pisipildid\npdfjs-current-outline-item-button =\n    .title = Otsi üles praegune kontuuriüksus\npdfjs-current-outline-item-button-label = Praegune kontuuriüksus\npdfjs-findbar-button =\n    .title = Otsi dokumendist\npdfjs-findbar-button-label = Otsi\npdfjs-additional-layers = Täiendavad kihid\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = { $page }. lehekülg\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = { $page }. lehekülje pisipilt\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Otsi\n    .placeholder = Otsi dokumendist…\npdfjs-find-previous-button =\n    .title = Otsi fraasi eelmine esinemiskoht\npdfjs-find-previous-button-label = Eelmine\npdfjs-find-next-button =\n    .title = Otsi fraasi järgmine esinemiskoht\npdfjs-find-next-button-label = Järgmine\npdfjs-find-highlight-checkbox = Too kõik esile\npdfjs-find-match-case-checkbox-label = Tõstutundlik\npdfjs-find-match-diacritics-checkbox-label = Otsitakse diakriitiliselt\npdfjs-find-entire-word-checkbox-label = Täissõnad\npdfjs-find-reached-top = Jõuti dokumendi algusesse, jätkati lõpust\npdfjs-find-reached-bottom = Jõuti dokumendi lõppu, jätkati algusest\npdfjs-find-not-found = Fraasi ei leitud\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Mahuta laiusele\npdfjs-page-scale-fit = Mahuta leheküljele\npdfjs-page-scale-auto = Automaatne suurendamine\npdfjs-page-scale-actual = Tegelik suurus\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Lehekülg { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = PDFi laadimisel esines viga.\npdfjs-invalid-file-error = Vigane või rikutud PDF-fail.\npdfjs-missing-file-error = PDF-fail puudub.\npdfjs-unexpected-response-error = Ootamatu vastus serverilt.\npdfjs-rendering-error = Lehe renderdamisel esines viga.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date } { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Annotation]\n\n## Password\n\npdfjs-password-label = PDF-faili avamiseks sisesta parool.\npdfjs-password-invalid = Vigane parool. Palun proovi uuesti.\npdfjs-password-ok-button = Sobib\npdfjs-password-cancel-button = Loobu\npdfjs-web-fonts-disabled = Veebifondid on keelatud: PDFiga kaasatud fonte pole võimalik kasutada.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/eu/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Aurreko orria\npdfjs-previous-button-label = Aurrekoa\npdfjs-next-button =\n    .title = Hurrengo orria\npdfjs-next-button-label = Hurrengoa\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Orria\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = / { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = { $pagesCount }/{ $pageNumber }\npdfjs-zoom-out-button =\n    .title = Urrundu zooma\npdfjs-zoom-out-button-label = Urrundu zooma\npdfjs-zoom-in-button =\n    .title = Gerturatu zooma\npdfjs-zoom-in-button-label = Gerturatu zooma\npdfjs-zoom-select =\n    .title = Zooma\npdfjs-presentation-mode-button =\n    .title = Aldatu aurkezpen modura\npdfjs-presentation-mode-button-label = Arkezpen modua\npdfjs-open-file-button =\n    .title = Ireki fitxategia\npdfjs-open-file-button-label = Ireki\npdfjs-print-button =\n    .title = Inprimatu\npdfjs-print-button-label = Inprimatu\npdfjs-save-button =\n    .title = Gorde\npdfjs-save-button-label = Gorde\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Deskargatu\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Deskargatu\npdfjs-bookmark-button =\n    .title = Uneko orria (ikusi uneko orriaren URLa)\npdfjs-bookmark-button-label = Uneko orria\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Ireki aplikazioan\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Ireki aplikazioan\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Tresnak\npdfjs-tools-button-label = Tresnak\npdfjs-first-page-button =\n    .title = Joan lehen orrira\npdfjs-first-page-button-label = Joan lehen orrira\npdfjs-last-page-button =\n    .title = Joan azken orrira\npdfjs-last-page-button-label = Joan azken orrira\npdfjs-page-rotate-cw-button =\n    .title = Biratu erlojuaren norantzan\npdfjs-page-rotate-cw-button-label = Biratu erlojuaren norantzan\npdfjs-page-rotate-ccw-button =\n    .title = Biratu erlojuaren aurkako norantzan\npdfjs-page-rotate-ccw-button-label = Biratu erlojuaren aurkako norantzan\npdfjs-cursor-text-select-tool-button =\n    .title = Gaitu testuaren hautapen tresna\npdfjs-cursor-text-select-tool-button-label = Testuaren hautapen tresna\npdfjs-cursor-hand-tool-button =\n    .title = Gaitu eskuaren tresna\npdfjs-cursor-hand-tool-button-label = Eskuaren tresna\npdfjs-scroll-page-button =\n    .title = Erabili orriaren korritzea\npdfjs-scroll-page-button-label = Orriaren korritzea\npdfjs-scroll-vertical-button =\n    .title = Erabili korritze bertikala\npdfjs-scroll-vertical-button-label = Korritze bertikala\npdfjs-scroll-horizontal-button =\n    .title = Erabili korritze horizontala\npdfjs-scroll-horizontal-button-label = Korritze horizontala\npdfjs-scroll-wrapped-button =\n    .title = Erabili korritze egokitua\npdfjs-scroll-wrapped-button-label = Korritze egokitua\npdfjs-spread-none-button =\n    .title = Ez elkartu barreiatutako orriak\npdfjs-spread-none-button-label = Barreiatzerik ez\npdfjs-spread-odd-button =\n    .title = Elkartu barreiatutako orriak bakoiti zenbakidunekin hasita\npdfjs-spread-odd-button-label = Barreiatze bakoitia\npdfjs-spread-even-button =\n    .title = Elkartu barreiatutako orriak bikoiti zenbakidunekin hasita\npdfjs-spread-even-button-label = Barreiatze bikoitia\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Dokumentuaren propietateak…\npdfjs-document-properties-button-label = Dokumentuaren propietateak…\npdfjs-document-properties-file-name = Fitxategi-izena:\npdfjs-document-properties-file-size = Fitxategiaren tamaina:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } byte)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } byte)\npdfjs-document-properties-title = Izenburua:\npdfjs-document-properties-author = Egilea:\npdfjs-document-properties-subject = Gaia:\npdfjs-document-properties-keywords = Gako-hitzak:\npdfjs-document-properties-creation-date = Sortze-data:\npdfjs-document-properties-modification-date = Aldatze-data:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Sortzailea:\npdfjs-document-properties-producer = PDFaren ekoizlea:\npdfjs-document-properties-version = PDF bertsioa:\npdfjs-document-properties-page-count = Orrialde kopurua:\npdfjs-document-properties-page-size = Orriaren tamaina:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = bertikala\npdfjs-document-properties-page-size-orientation-landscape = horizontala\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Gutuna\npdfjs-document-properties-page-size-name-legal = Legala\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Webeko ikuspegi bizkorra:\npdfjs-document-properties-linearized-yes = Bai\npdfjs-document-properties-linearized-no = Ez\npdfjs-document-properties-close-button = Itxi\n\n## Print\n\npdfjs-print-progress-message = Dokumentua inprimatzeko prestatzen…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = %{ $progress }\npdfjs-print-progress-close-button = Utzi\npdfjs-printing-not-supported = Abisua: inprimatzeko euskarria ez da erabatekoa nabigatzaile honetan.\npdfjs-printing-not-ready = Abisua: PDFa ez dago erabat kargatuta inprimatzeko.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Txandakatu alboko barra\npdfjs-toggle-sidebar-notification-button =\n    .title = Txandakatu alboko barra (dokumentuak eskema/eranskinak/geruzak ditu)\npdfjs-toggle-sidebar-button-label = Txandakatu alboko barra\npdfjs-document-outline-button =\n    .title = Erakutsi dokumentuaren eskema (klik bikoitza elementu guztiak zabaltzeko/tolesteko)\npdfjs-document-outline-button-label = Dokumentuaren eskema\npdfjs-attachments-button =\n    .title = Erakutsi eranskinak\npdfjs-attachments-button-label = Eranskinak\npdfjs-layers-button =\n    .title = Erakutsi geruzak (klik bikoitza geruza guztiak egoera lehenetsira berrezartzeko)\npdfjs-layers-button-label = Geruzak\npdfjs-thumbs-button =\n    .title = Erakutsi koadro txikiak\npdfjs-thumbs-button-label = Koadro txikiak\npdfjs-current-outline-item-button =\n    .title = Bilatu uneko eskemaren elementua\npdfjs-current-outline-item-button-label = Uneko eskemaren elementua\npdfjs-findbar-button =\n    .title = Bilatu dokumentuan\npdfjs-findbar-button-label = Bilatu\npdfjs-additional-layers = Geruza gehigarriak\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = { $page }. orria\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = { $page }. orriaren koadro txikia\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Bilatu\n    .placeholder = Bilatu dokumentuan…\npdfjs-find-previous-button =\n    .title = Bilatu esaldiaren aurreko parekatzea\npdfjs-find-previous-button-label = Aurrekoa\npdfjs-find-next-button =\n    .title = Bilatu esaldiaren hurrengo parekatzea\npdfjs-find-next-button-label = Hurrengoa\npdfjs-find-highlight-checkbox = Nabarmendu guztia\npdfjs-find-match-case-checkbox-label = Bat etorri maiuskulekin/minuskulekin\npdfjs-find-match-diacritics-checkbox-label = Bereizi diakritikoak\npdfjs-find-entire-word-checkbox-label = Hitz osoak\npdfjs-find-reached-top = Dokumentuaren hasierara heldu da, bukaeratik jarraitzen\npdfjs-find-reached-bottom = Dokumentuaren bukaerara heldu da, hasieratik jarraitzen\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $total }/{ $current }. bat-etortzea\n       *[other] { $total }/{ $current }. bat-etortzea\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Bat datorren { $limit } baino gehiago\n       *[other] Bat datozen { $limit } baino gehiago\n    }\npdfjs-find-not-found = Esaldia ez da aurkitu\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Orriaren zabalera\npdfjs-page-scale-fit = Doitu orrira\npdfjs-page-scale-auto = Zoom automatikoa\npdfjs-page-scale-actual = Benetako tamaina\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = %{ $scale }\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = { $page }. orria\n\n## Loading indicator messages\n\npdfjs-loading-error = Errorea gertatu da PDFa kargatzean.\npdfjs-invalid-file-error = PDF fitxategi baliogabe edo hondatua.\npdfjs-missing-file-error = PDF fitxategia falta da.\npdfjs-unexpected-response-error = Espero gabeko zerbitzariaren erantzuna.\npdfjs-rendering-error = Errorea gertatu da orria errendatzean.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } ohartarazpena]\n\n## Password\n\npdfjs-password-label = Idatzi PDF fitxategi hau irekitzeko pasahitza.\npdfjs-password-invalid = Pasahitz baliogabea. Saiatu berriro mesedez.\npdfjs-password-ok-button = Ados\npdfjs-password-cancel-button = Utzi\npdfjs-web-fonts-disabled = Webeko letra-tipoak desgaituta daude: ezin dira kapsulatutako PDF letra-tipoak erabili.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Testua\npdfjs-editor-free-text-button-label = Testua\npdfjs-editor-ink-button =\n    .title = Marrazkia\npdfjs-editor-ink-button-label = Marrazkia\npdfjs-editor-stamp-button =\n    .title = Gehitu edo editatu irudiak\npdfjs-editor-stamp-button-label = Gehitu edo editatu irudiak\npdfjs-editor-highlight-button =\n    .title = Nabarmendu\npdfjs-editor-highlight-button-label = Nabarmendu\npdfjs-highlight-floating-button =\n    .title = Nabarmendu\npdfjs-highlight-floating-button1 =\n    .title = Nabarmendu\n    .aria-label = Nabarmendu\npdfjs-highlight-floating-button-label = Nabarmendu\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Kendu marrazkia\npdfjs-editor-remove-freetext-button =\n    .title = Kendu testua\npdfjs-editor-remove-stamp-button =\n    .title = Kendu irudia\npdfjs-editor-remove-highlight-button =\n    .title = Kendu nabarmentzea\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Kolorea\npdfjs-editor-free-text-size-input = Tamaina\npdfjs-editor-ink-color-input = Kolorea\npdfjs-editor-ink-thickness-input = Loditasuna\npdfjs-editor-ink-opacity-input = Opakutasuna\npdfjs-editor-stamp-add-image-button =\n    .title = Gehitu irudia\npdfjs-editor-stamp-add-image-button-label = Gehitu irudia\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Loditasuna\npdfjs-editor-free-highlight-thickness-title =\n    .title = Aldatu loditasuna testua ez beste elementuak nabarmentzean\npdfjs-free-text =\n    .aria-label = Testu-editorea\npdfjs-free-text-default-content = Hasi idazten…\npdfjs-ink =\n    .aria-label = Marrazki-editorea\npdfjs-ink-canvas =\n    .aria-label = Erabiltzaileak sortutako irudia\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Testu alternatiboa\npdfjs-editor-alt-text-edit-button-label = Editatu testu alternatiboa\npdfjs-editor-alt-text-dialog-label = Aukeratu aukera\npdfjs-editor-alt-text-dialog-description = Testu alternatiboak laguntzen du jendeak ezin duenean irudia ikusi edo ez denean kargatzen.\npdfjs-editor-alt-text-add-description-label = Gehitu azalpena\npdfjs-editor-alt-text-add-description-description = Saiatu idazten gaia, ezarpena edo ekintzak deskribatzen dituen esaldi 1 edo 2.\npdfjs-editor-alt-text-mark-decorative-label = Markatu apaingarri gisa\npdfjs-editor-alt-text-mark-decorative-description = Irudiak apaingarrientzat erabiltzen da, adibidez ertz edo ur-marketarako.\npdfjs-editor-alt-text-cancel-button = Utzi\npdfjs-editor-alt-text-save-button = Gorde\npdfjs-editor-alt-text-decorative-tooltip = Apaingarri gisa markatuta\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Adibidez, \"gizon gaztea mahaian eserita dago bazkaltzeko\"\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Goiko ezkerreko izkina — aldatu tamaina\npdfjs-editor-resizer-label-top-middle = Goian erdian — aldatu tamaina\npdfjs-editor-resizer-label-top-right = Goiko eskuineko izkina — aldatu tamaina\npdfjs-editor-resizer-label-middle-right = Erdian eskuinean — aldatu tamaina\npdfjs-editor-resizer-label-bottom-right = Beheko eskuineko izkina — aldatu tamaina\npdfjs-editor-resizer-label-bottom-middle = Behean erdian — aldatu tamaina\npdfjs-editor-resizer-label-bottom-left = Beheko ezkerreko izkina — aldatu tamaina\npdfjs-editor-resizer-label-middle-left = Erdian ezkerrean —  aldatu tamaina\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Nabarmentze kolorea\npdfjs-editor-colorpicker-button =\n    .title = Aldatu kolorea\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Kolore-aukerak\npdfjs-editor-colorpicker-yellow =\n    .title = Horia\npdfjs-editor-colorpicker-green =\n    .title = Berdea\npdfjs-editor-colorpicker-blue =\n    .title = Urdina\npdfjs-editor-colorpicker-pink =\n    .title = Arrosa\npdfjs-editor-colorpicker-red =\n    .title = Gorria\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Erakutsi denak\npdfjs-editor-highlight-show-all-button =\n    .title = Erakutsi denak\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/fa/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = صفحهٔ قبلی\npdfjs-previous-button-label = قبلی\npdfjs-next-button =\n    .title = صفحهٔ بعدی\npdfjs-next-button-label = بعدی\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = صفحه\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = از { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber }از { $pagesCount })\npdfjs-zoom-out-button =\n    .title = کوچک‌نمایی\npdfjs-zoom-out-button-label = کوچک‌نمایی\npdfjs-zoom-in-button =\n    .title = بزرگ‌نمایی\npdfjs-zoom-in-button-label = بزرگ‌نمایی\npdfjs-zoom-select =\n    .title = زوم\npdfjs-presentation-mode-button =\n    .title = تغییر به حالت ارائه\npdfjs-presentation-mode-button-label = حالت ارائه\npdfjs-open-file-button =\n    .title = باز کردن پرونده\npdfjs-open-file-button-label = باز کردن\npdfjs-print-button =\n    .title = چاپ\npdfjs-print-button-label = چاپ\npdfjs-save-button-label = ذخیره\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = ابزارها\npdfjs-tools-button-label = ابزارها\npdfjs-first-page-button =\n    .title = برو به اولین صفحه\npdfjs-first-page-button-label = برو به اولین صفحه\npdfjs-last-page-button =\n    .title = برو به آخرین صفحه\npdfjs-last-page-button-label = برو به آخرین صفحه\npdfjs-page-rotate-cw-button =\n    .title = چرخش ساعتگرد\npdfjs-page-rotate-cw-button-label = چرخش ساعتگرد\npdfjs-page-rotate-ccw-button =\n    .title = چرخش پاد ساعتگرد\npdfjs-page-rotate-ccw-button-label = چرخش پاد ساعتگرد\npdfjs-cursor-text-select-tool-button =\n    .title = فعال کردن ابزارِ انتخابِ متن\npdfjs-cursor-text-select-tool-button-label = ابزارِ انتخابِ متن\npdfjs-cursor-hand-tool-button =\n    .title = فعال کردن ابزارِ دست\npdfjs-cursor-hand-tool-button-label = ابزار دست\npdfjs-scroll-vertical-button =\n    .title = استفاده از پیمایش عمودی\npdfjs-scroll-vertical-button-label = پیمایش عمودی\npdfjs-scroll-horizontal-button =\n    .title = استفاده از پیمایش افقی\npdfjs-scroll-horizontal-button-label = پیمایش افقی\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = خصوصیات سند...\npdfjs-document-properties-button-label = خصوصیات سند...\npdfjs-document-properties-file-name = نام فایل:\npdfjs-document-properties-file-size = حجم پرونده:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } کیلوبایت ({ $size_b } بایت)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } مگابایت ({ $size_b } بایت)\npdfjs-document-properties-title = عنوان:\npdfjs-document-properties-author = نویسنده:\npdfjs-document-properties-subject = موضوع:\npdfjs-document-properties-keywords = کلیدواژه‌ها:\npdfjs-document-properties-creation-date = تاریخ ایجاد:\npdfjs-document-properties-modification-date = تاریخ ویرایش:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }، { $time }\npdfjs-document-properties-creator = ایجاد کننده:\npdfjs-document-properties-producer = ایجاد کننده PDF:\npdfjs-document-properties-version = نسخه PDF:\npdfjs-document-properties-page-count = تعداد صفحات:\npdfjs-document-properties-page-size = اندازه صفحه:\npdfjs-document-properties-page-size-unit-inches = اینچ\npdfjs-document-properties-page-size-unit-millimeters = میلی‌متر\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = نامه\npdfjs-document-properties-page-size-name-legal = حقوقی\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\npdfjs-document-properties-linearized-yes = بله\npdfjs-document-properties-linearized-no = خیر\npdfjs-document-properties-close-button = بستن\n\n## Print\n\npdfjs-print-progress-message = آماده سازی مدارک برای چاپ کردن…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = لغو\npdfjs-printing-not-supported = هشدار: قابلیت چاپ به‌طور کامل در این مرورگر پشتیبانی نمی‌شود.\npdfjs-printing-not-ready = اخطار: پرونده PDF بطور کامل بارگیری نشده و امکان چاپ وجود ندارد.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = باز و بسته کردن نوار کناری\npdfjs-toggle-sidebar-button-label = تغییرحالت نوارکناری\npdfjs-document-outline-button =\n    .title = نمایش رئوس مطالب مدارک(برای بازشدن/جمع شدن همه موارد دوبار کلیک کنید)\npdfjs-document-outline-button-label = طرح نوشتار\npdfjs-attachments-button =\n    .title = نمایش پیوست‌ها\npdfjs-attachments-button-label = پیوست‌ها\npdfjs-layers-button-label = لایه‌ها\npdfjs-thumbs-button =\n    .title = نمایش تصاویر بندانگشتی\npdfjs-thumbs-button-label = تصاویر بندانگشتی\npdfjs-findbar-button =\n    .title = جستجو در سند\npdfjs-findbar-button-label = پیدا کردن\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = صفحه { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = تصویر بند‌ انگشتی صفحه { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = پیدا کردن\n    .placeholder = پیدا کردن در سند…\npdfjs-find-previous-button =\n    .title = پیدا کردن رخداد قبلی عبارت\npdfjs-find-previous-button-label = قبلی\npdfjs-find-next-button =\n    .title = پیدا کردن رخداد بعدی عبارت\npdfjs-find-next-button-label = بعدی\npdfjs-find-highlight-checkbox = برجسته و هایلایت کردن همه موارد\npdfjs-find-match-case-checkbox-label = تطبیق کوچکی و بزرگی حروف\npdfjs-find-entire-word-checkbox-label = تمام کلمه‌ها\npdfjs-find-reached-top = به بالای صفحه رسیدیم، از پایین ادامه می‌دهیم\npdfjs-find-reached-bottom = به آخر صفحه رسیدیم، از بالا ادامه می‌دهیم\npdfjs-find-not-found = عبارت پیدا نشد\n\n## Predefined zoom values\n\npdfjs-page-scale-width = عرض صفحه\npdfjs-page-scale-fit = اندازه کردن صفحه\npdfjs-page-scale-auto = بزرگنمایی خودکار\npdfjs-page-scale-actual = اندازه واقعی‌\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = صفحهٔ { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = هنگام بارگیری پرونده PDF خطایی رخ داد.\npdfjs-invalid-file-error = پرونده PDF نامعتبر یامعیوب می‌باشد.\npdfjs-missing-file-error = پرونده PDF یافت نشد.\npdfjs-unexpected-response-error = پاسخ پیش بینی نشده سرور\npdfjs-rendering-error = هنگام بارگیری صفحه خطایی رخ داد.\n\n## Annotations\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Annotation]\n\n## Password\n\npdfjs-password-label = جهت باز کردن پرونده PDF گذرواژه را وارد نمائید.\npdfjs-password-invalid = گذرواژه نامعتبر. لطفا مجددا تلاش کنید.\npdfjs-password-ok-button = تأیید\npdfjs-password-cancel-button = لغو\npdfjs-web-fonts-disabled = فونت های تحت وب غیر فعال شده اند: امکان استفاده از نمایش دهنده داخلی PDF وجود ندارد.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = متن\npdfjs-editor-free-text-button-label = متن\npdfjs-editor-ink-button =\n    .title = کشیدن\npdfjs-editor-ink-button-label = کشیدن\n# Editor Parameters\npdfjs-editor-free-text-color-input = رنگ\npdfjs-editor-free-text-size-input = اندازه\npdfjs-editor-ink-color-input = رنگ\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/ff/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Hello Ɓennungo\npdfjs-previous-button-label = Ɓennuɗo\npdfjs-next-button =\n    .title = Hello faango\npdfjs-next-button-label = Yeeso\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Hello\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = e nder { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Lonngo Woɗɗa\npdfjs-zoom-out-button-label = Lonngo Woɗɗa\npdfjs-zoom-in-button =\n    .title = Lonngo Ara\npdfjs-zoom-in-button-label = Lonngo Ara\npdfjs-zoom-select =\n    .title = Lonngo\npdfjs-presentation-mode-button =\n    .title = Faytu to  Presentation Mode\npdfjs-presentation-mode-button-label = Presentation Mode\npdfjs-open-file-button =\n    .title = Uddit Fiilde\npdfjs-open-file-button-label = Uddit\npdfjs-print-button =\n    .title = Winndito\npdfjs-print-button-label = Winndito\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Kuutorɗe\npdfjs-tools-button-label = Kuutorɗe\npdfjs-first-page-button =\n    .title = Yah to hello adanngo\npdfjs-first-page-button-label = Yah to hello adanngo\npdfjs-last-page-button =\n    .title = Yah to hello wattindiingo\npdfjs-last-page-button-label = Yah to hello wattindiingo\npdfjs-page-rotate-cw-button =\n    .title = Yiiltu Faya Ñaamo\npdfjs-page-rotate-cw-button-label = Yiiltu Faya Ñaamo\npdfjs-page-rotate-ccw-button =\n    .title = Yiiltu Faya Nano\npdfjs-page-rotate-ccw-button-label = Yiiltu Faya Nano\npdfjs-cursor-text-select-tool-button =\n    .title = Gollin kaɓirgel cuɓirgel binndi\npdfjs-cursor-text-select-tool-button-label = Kaɓirgel cuɓirgel binndi\npdfjs-cursor-hand-tool-button =\n    .title = Hurmin kuutorgal junngo\npdfjs-cursor-hand-tool-button-label = Kaɓirgel junngo\npdfjs-scroll-vertical-button =\n    .title = Huutoro gorwitol daringol\npdfjs-scroll-vertical-button-label = Gorwitol daringol\npdfjs-scroll-horizontal-button =\n    .title = Huutoro gorwitol lelingol\npdfjs-scroll-horizontal-button-label = Gorwitol daringol\npdfjs-scroll-wrapped-button =\n    .title = Huutoro gorwitol coomingol\npdfjs-scroll-wrapped-button-label = Gorwitol coomingol\npdfjs-spread-none-button =\n    .title = Hoto tawtu kelle kelle\npdfjs-spread-none-button-label = Alaa Spreads\npdfjs-spread-odd-button =\n    .title = Tawtu kelle puɗɗortooɗe kelle teelɗe\npdfjs-spread-odd-button-label = Kelle teelɗe\npdfjs-spread-even-button =\n    .title = Tawtu ɗereeji kelle puɗɗoriiɗi kelle teeltuɗe\npdfjs-spread-even-button-label = Kelle teeltuɗe\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Keeroraaɗi Winndannde…\npdfjs-document-properties-button-label = Keeroraaɗi Winndannde…\npdfjs-document-properties-file-name = Innde fiilde:\npdfjs-document-properties-file-size = Ɓetol fiilde:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bite)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bite)\npdfjs-document-properties-title = Tiitoonde:\npdfjs-document-properties-author = Binnduɗo:\npdfjs-document-properties-subject = Toɓɓere:\npdfjs-document-properties-keywords = Kelmekele jiytirɗe:\npdfjs-document-properties-creation-date = Ñalnde Sosaa:\npdfjs-document-properties-modification-date = Ñalnde Waylaa:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Cosɗo:\npdfjs-document-properties-producer = Paggiiɗo PDF:\npdfjs-document-properties-version = Yamre PDF:\npdfjs-document-properties-page-count = Limoore Kelle:\npdfjs-document-properties-page-size = Ɓeto Hello:\npdfjs-document-properties-page-size-unit-inches = nder\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = dariingo\npdfjs-document-properties-page-size-orientation-landscape = wertiingo\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Ɓataake\npdfjs-document-properties-page-size-name-legal = Laawol\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Ɗisngo geese yaawngo:\npdfjs-document-properties-linearized-yes = Eey\npdfjs-document-properties-linearized-no = Alaa\npdfjs-document-properties-close-button = Uddu\n\n## Print\n\npdfjs-print-progress-message = Nana heboo winnditaade fiilannde…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Haaytu\npdfjs-printing-not-supported = Reentino: Winnditagol tammbitaaka no feewi e ndee wanngorde.\npdfjs-printing-not-ready = Reentino: PDF oo loowaaki haa timmi ngam winnditagol.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Toggilo Palal Sawndo\npdfjs-toggle-sidebar-button-label = Toggilo Palal Sawndo\npdfjs-document-outline-button =\n    .title = Hollu Ƴiyal Fiilannde (dobdobo ngam wertude/taggude teme fof)\npdfjs-document-outline-button-label = Toɓɓe Fiilannde\npdfjs-attachments-button =\n    .title = Hollu Ɗisanɗe\npdfjs-attachments-button-label = Ɗisanɗe\npdfjs-thumbs-button =\n    .title = Hollu Dooɓe\npdfjs-thumbs-button-label = Dooɓe\npdfjs-findbar-button =\n    .title = Yiylo e fiilannde\npdfjs-findbar-button-label = Yiytu\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Hello { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Dooɓre Hello { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Yiytu\n    .placeholder = Yiylo nder dokimaa\npdfjs-find-previous-button =\n    .title = Yiylo cilol ɓennugol konngol ngol\npdfjs-find-previous-button-label = Ɓennuɗo\npdfjs-find-next-button =\n    .title = Yiylo cilol garowol konngol ngol\npdfjs-find-next-button-label = Yeeso\npdfjs-find-highlight-checkbox = Jalbin fof\npdfjs-find-match-case-checkbox-label = Jaaɓnu darnde\npdfjs-find-entire-word-checkbox-label = Kelme timmuɗe tan\npdfjs-find-reached-top = Heɓii fuɗɗorde fiilannde, jokku faya les\npdfjs-find-reached-bottom = Heɓii hoore fiilannde, jokku faya les\npdfjs-find-not-found = Konngi njiyataa\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Njaajeendi Hello\npdfjs-page-scale-fit = Keƴeendi Hello\npdfjs-page-scale-auto = Loongorde Jaajol\npdfjs-page-scale-actual = Ɓetol Jaati\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = Juumre waɗii tuma nde loowata PDF oo.\npdfjs-invalid-file-error = Fiilde PDF moƴƴaani walla jiibii.\npdfjs-missing-file-error = Fiilde PDF ena ŋakki.\npdfjs-unexpected-response-error = Jaabtol sarworde tijjinooka.\npdfjs-rendering-error = Juumre waɗii tuma nde yoŋkittoo hello.\n\n## Annotations\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Siiftannde]\n\n## Password\n\npdfjs-password-label = Naatu finnde ngam uddite ndee fiilde PDF.\npdfjs-password-invalid = Finnde moƴƴaani. Tiiɗno eto kadi.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Haaytu\npdfjs-web-fonts-disabled = Ponte geese ko daaƴaaɗe: horiima huutoraade ponte PDF coomtoraaɗe.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/fi/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Edellinen sivu\npdfjs-previous-button-label = Edellinen\npdfjs-next-button =\n    .title = Seuraava sivu\npdfjs-next-button-label = Seuraava\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Sivu\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = / { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } / { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Loitonna\npdfjs-zoom-out-button-label = Loitonna\npdfjs-zoom-in-button =\n    .title = Lähennä\npdfjs-zoom-in-button-label = Lähennä\npdfjs-zoom-select =\n    .title = Suurennus\npdfjs-presentation-mode-button =\n    .title = Siirry esitystilaan\npdfjs-presentation-mode-button-label = Esitystila\npdfjs-open-file-button =\n    .title = Avaa tiedosto\npdfjs-open-file-button-label = Avaa\npdfjs-print-button =\n    .title = Tulosta\npdfjs-print-button-label = Tulosta\npdfjs-save-button =\n    .title = Tallenna\npdfjs-save-button-label = Tallenna\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Lataa\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Lataa\npdfjs-bookmark-button =\n    .title = Nykyinen sivu (Näytä URL-osoite nykyiseltä sivulta)\npdfjs-bookmark-button-label = Nykyinen sivu\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Avaa sovelluksessa\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Avaa sovelluksessa\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Tools\npdfjs-tools-button-label = Tools\npdfjs-first-page-button =\n    .title = Siirry ensimmäiselle sivulle\npdfjs-first-page-button-label = Siirry ensimmäiselle sivulle\npdfjs-last-page-button =\n    .title = Siirry viimeiselle sivulle\npdfjs-last-page-button-label = Siirry viimeiselle sivulle\npdfjs-page-rotate-cw-button =\n    .title = Kierrä oikealle\npdfjs-page-rotate-cw-button-label = Kierrä oikealle\npdfjs-page-rotate-ccw-button =\n    .title = Kierrä vasemmalle\npdfjs-page-rotate-ccw-button-label = Kierrä vasemmalle\npdfjs-cursor-text-select-tool-button =\n    .title = Käytä tekstinvalintatyökalua\npdfjs-cursor-text-select-tool-button-label = Tekstinvalintatyökalu\npdfjs-cursor-hand-tool-button =\n    .title = Käytä käsityökalua\npdfjs-cursor-hand-tool-button-label = Käsityökalu\npdfjs-scroll-page-button =\n    .title = Käytä sivun vieritystä\npdfjs-scroll-page-button-label = Sivun vieritys\npdfjs-scroll-vertical-button =\n    .title = Käytä pystysuuntaista vieritystä\npdfjs-scroll-vertical-button-label = Pystysuuntainen vieritys\npdfjs-scroll-horizontal-button =\n    .title = Käytä vaakasuuntaista vieritystä\npdfjs-scroll-horizontal-button-label = Vaakasuuntainen vieritys\npdfjs-scroll-wrapped-button =\n    .title = Käytä rivittyvää vieritystä\npdfjs-scroll-wrapped-button-label = Rivittyvä vieritys\npdfjs-spread-none-button =\n    .title = Älä yhdistä sivuja aukeamiksi\npdfjs-spread-none-button-label = Ei aukeamia\npdfjs-spread-odd-button =\n    .title = Yhdistä sivut aukeamiksi alkaen parittomalta sivulta\npdfjs-spread-odd-button-label = Parittomalta alkavat aukeamat\npdfjs-spread-even-button =\n    .title = Yhdistä sivut aukeamiksi alkaen parilliselta sivulta\npdfjs-spread-even-button-label = Parilliselta alkavat aukeamat\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Dokumentin ominaisuudet…\npdfjs-document-properties-button-label = Dokumentin ominaisuudet…\npdfjs-document-properties-file-name = Tiedoston nimi:\npdfjs-document-properties-file-size = Tiedoston koko:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } kt ({ $size_b } tavua)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } Mt ({ $size_b } tavua)\npdfjs-document-properties-title = Otsikko:\npdfjs-document-properties-author = Tekijä:\npdfjs-document-properties-subject = Aihe:\npdfjs-document-properties-keywords = Avainsanat:\npdfjs-document-properties-creation-date = Luomispäivämäärä:\npdfjs-document-properties-modification-date = Muokkauspäivämäärä:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Luoja:\npdfjs-document-properties-producer = PDF-tuottaja:\npdfjs-document-properties-version = PDF-versio:\npdfjs-document-properties-page-count = Sivujen määrä:\npdfjs-document-properties-page-size = Sivun koko:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = pysty\npdfjs-document-properties-page-size-orientation-landscape = vaaka\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Nopea web-katselu:\npdfjs-document-properties-linearized-yes = Kyllä\npdfjs-document-properties-linearized-no = Ei\npdfjs-document-properties-close-button = Sulje\n\n## Print\n\npdfjs-print-progress-message = Valmistellaan dokumenttia tulostamista varten…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress } %\npdfjs-print-progress-close-button = Peruuta\npdfjs-printing-not-supported = Varoitus: Selain ei tue kaikkia tulostustapoja.\npdfjs-printing-not-ready = Varoitus: PDF-tiedosto ei ole vielä latautunut kokonaan, eikä sitä voi vielä tulostaa.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Näytä/piilota sivupaneeli\npdfjs-toggle-sidebar-notification-button =\n    .title = Näytä/piilota sivupaneeli (dokumentissa on sisällys/liitteitä/tasoja)\npdfjs-toggle-sidebar-button-label = Näytä/piilota sivupaneeli\npdfjs-document-outline-button =\n    .title = Näytä dokumentin sisällys (laajenna tai kutista kohdat kaksoisnapsauttamalla)\npdfjs-document-outline-button-label = Dokumentin sisällys\npdfjs-attachments-button =\n    .title = Näytä liitteet\npdfjs-attachments-button-label = Liitteet\npdfjs-layers-button =\n    .title = Näytä tasot (kaksoisnapsauta palauttaaksesi kaikki tasot oletustilaan)\npdfjs-layers-button-label = Tasot\npdfjs-thumbs-button =\n    .title = Näytä pienoiskuvat\npdfjs-thumbs-button-label = Pienoiskuvat\npdfjs-current-outline-item-button =\n    .title = Etsi nykyinen sisällyksen kohta\npdfjs-current-outline-item-button-label = Nykyinen sisällyksen kohta\npdfjs-findbar-button =\n    .title = Etsi dokumentista\npdfjs-findbar-button-label = Etsi\npdfjs-additional-layers = Lisätasot\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Sivu { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Pienoiskuva sivusta { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Etsi\n    .placeholder = Etsi dokumentista…\npdfjs-find-previous-button =\n    .title = Etsi hakusanan edellinen osuma\npdfjs-find-previous-button-label = Edellinen\npdfjs-find-next-button =\n    .title = Etsi hakusanan seuraava osuma\npdfjs-find-next-button-label = Seuraava\npdfjs-find-highlight-checkbox = Korosta kaikki\npdfjs-find-match-case-checkbox-label = Huomioi kirjainkoko\npdfjs-find-match-diacritics-checkbox-label = Erota tarkkeet\npdfjs-find-entire-word-checkbox-label = Kokonaiset sanat\npdfjs-find-reached-top = Päästiin dokumentin alkuun, jatketaan lopusta\npdfjs-find-reached-bottom = Päästiin dokumentin loppuun, jatketaan alusta\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } / { $total } osuma\n       *[other] { $current } / { $total } osumaa\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Yli { $limit } osuma\n       *[other] Yli { $limit } osumaa\n    }\npdfjs-find-not-found = Hakusanaa ei löytynyt\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Sivun leveys\npdfjs-page-scale-fit = Koko sivu\npdfjs-page-scale-auto = Automaattinen suurennus\npdfjs-page-scale-actual = Todellinen koko\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale } %\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Sivu { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Tapahtui virhe ladattaessa PDF-tiedostoa.\npdfjs-invalid-file-error = Virheellinen tai vioittunut PDF-tiedosto.\npdfjs-missing-file-error = Puuttuva PDF-tiedosto.\npdfjs-unexpected-response-error = Odottamaton vastaus palvelimelta.\npdfjs-rendering-error = Tapahtui virhe piirrettäessä sivua.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type }-merkintä]\n\n## Password\n\npdfjs-password-label = Kirjoita PDF-tiedoston salasana.\npdfjs-password-invalid = Virheellinen salasana. Yritä uudestaan.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Peruuta\npdfjs-web-fonts-disabled = Verkkosivujen omat kirjasinlajit on estetty: ei voida käyttää upotettuja PDF-kirjasinlajeja.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Teksti\npdfjs-editor-free-text-button-label = Teksti\npdfjs-editor-ink-button =\n    .title = Piirros\npdfjs-editor-ink-button-label = Piirros\npdfjs-editor-stamp-button =\n    .title = Lisää tai muokkaa kuvia\npdfjs-editor-stamp-button-label = Lisää tai muokkaa kuvia\npdfjs-editor-highlight-button =\n    .title = Korostus\npdfjs-editor-highlight-button-label = Korostus\npdfjs-highlight-floating-button =\n    .title = Korostus\npdfjs-highlight-floating-button1 =\n    .title = Korostus\n    .aria-label = Korostus\npdfjs-highlight-floating-button-label = Korostus\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Poista piirros\npdfjs-editor-remove-freetext-button =\n    .title = Poista teksti\npdfjs-editor-remove-stamp-button =\n    .title = Poista kuva\npdfjs-editor-remove-highlight-button =\n    .title = Poista korostus\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Väri\npdfjs-editor-free-text-size-input = Koko\npdfjs-editor-ink-color-input = Väri\npdfjs-editor-ink-thickness-input = Paksuus\npdfjs-editor-ink-opacity-input = Peittävyys\npdfjs-editor-stamp-add-image-button =\n    .title = Lisää kuva\npdfjs-editor-stamp-add-image-button-label = Lisää kuva\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Paksuus\npdfjs-editor-free-highlight-thickness-title =\n    .title = Muuta paksuutta korostaessasi muita kohteita kuin tekstiä\npdfjs-free-text =\n    .aria-label = Tekstimuokkain\npdfjs-free-text-default-content = Aloita kirjoittaminen…\npdfjs-ink =\n    .aria-label = Piirrustusmuokkain\npdfjs-ink-canvas =\n    .aria-label = Käyttäjän luoma kuva\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Vaihtoehtoinen teksti\npdfjs-editor-alt-text-edit-button-label = Muokkaa vaihtoehtoista tekstiä\npdfjs-editor-alt-text-dialog-label = Valitse vaihtoehto\npdfjs-editor-alt-text-dialog-description = Vaihtoehtoinen teksti (\"alt-teksti\") auttaa ihmisiä, jotka eivät näe kuvaa tai kun kuva ei lataudu.\npdfjs-editor-alt-text-add-description-label = Lisää kuvaus\npdfjs-editor-alt-text-add-description-description = Pyri 1-2 lauseeseen, jotka kuvaavat aihetta, ympäristöä tai toimintaa.\npdfjs-editor-alt-text-mark-decorative-label = Merkitse koristeelliseksi\npdfjs-editor-alt-text-mark-decorative-description = Tätä käytetään koristekuville, kuten reunuksille tai vesileimoille.\npdfjs-editor-alt-text-cancel-button = Peruuta\npdfjs-editor-alt-text-save-button = Tallenna\npdfjs-editor-alt-text-decorative-tooltip = Merkitty koristeelliseksi\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Esimerkiksi \"Nuori mies istuu pöytään syömään aterian\"\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Vasen yläkulma - muuta kokoa\npdfjs-editor-resizer-label-top-middle = Ylhäällä keskellä - muuta kokoa\npdfjs-editor-resizer-label-top-right = Oikea yläkulma - muuta kokoa\npdfjs-editor-resizer-label-middle-right = Keskellä oikealla - muuta kokoa\npdfjs-editor-resizer-label-bottom-right = Oikea alakulma - muuta kokoa\npdfjs-editor-resizer-label-bottom-middle = Alhaalla keskellä - muuta kokoa\npdfjs-editor-resizer-label-bottom-left = Vasen alakulma - muuta kokoa\npdfjs-editor-resizer-label-middle-left = Keskellä vasemmalla - muuta kokoa\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Korostusväri\npdfjs-editor-colorpicker-button =\n    .title = Vaihda väri\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Värivalinnat\npdfjs-editor-colorpicker-yellow =\n    .title = Keltainen\npdfjs-editor-colorpicker-green =\n    .title = Vihreä\npdfjs-editor-colorpicker-blue =\n    .title = Sininen\npdfjs-editor-colorpicker-pink =\n    .title = Pinkki\npdfjs-editor-colorpicker-red =\n    .title = Punainen\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Näytä kaikki\npdfjs-editor-highlight-show-all-button =\n    .title = Näytä kaikki\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/fr/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Page précédente\npdfjs-previous-button-label = Précédent\npdfjs-next-button =\n    .title = Page suivante\npdfjs-next-button-label = Suivant\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Page\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = sur { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } sur { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Zoom arrière\npdfjs-zoom-out-button-label = Zoom arrière\npdfjs-zoom-in-button =\n    .title = Zoom avant\npdfjs-zoom-in-button-label = Zoom avant\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Basculer en mode présentation\npdfjs-presentation-mode-button-label = Mode présentation\npdfjs-open-file-button =\n    .title = Ouvrir le fichier\npdfjs-open-file-button-label = Ouvrir le fichier\npdfjs-print-button =\n    .title = Imprimer\npdfjs-print-button-label = Imprimer\npdfjs-save-button =\n    .title = Enregistrer\npdfjs-save-button-label = Enregistrer\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Télécharger\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Télécharger\npdfjs-bookmark-button =\n    .title = Page courante (montrer l’adresse de la page courante)\npdfjs-bookmark-button-label = Page courante\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Ouvrir dans une application\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Ouvrir dans une application\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Outils\npdfjs-tools-button-label = Outils\npdfjs-first-page-button =\n    .title = Aller à la première page\npdfjs-first-page-button-label = Aller à la première page\npdfjs-last-page-button =\n    .title = Aller à la dernière page\npdfjs-last-page-button-label = Aller à la dernière page\npdfjs-page-rotate-cw-button =\n    .title = Rotation horaire\npdfjs-page-rotate-cw-button-label = Rotation horaire\npdfjs-page-rotate-ccw-button =\n    .title = Rotation antihoraire\npdfjs-page-rotate-ccw-button-label = Rotation antihoraire\npdfjs-cursor-text-select-tool-button =\n    .title = Activer l’outil de sélection de texte\npdfjs-cursor-text-select-tool-button-label = Outil de sélection de texte\npdfjs-cursor-hand-tool-button =\n    .title = Activer l’outil main\npdfjs-cursor-hand-tool-button-label = Outil main\npdfjs-scroll-page-button =\n    .title = Utiliser le défilement par page\npdfjs-scroll-page-button-label = Défilement par page\npdfjs-scroll-vertical-button =\n    .title = Utiliser le défilement vertical\npdfjs-scroll-vertical-button-label = Défilement vertical\npdfjs-scroll-horizontal-button =\n    .title = Utiliser le défilement horizontal\npdfjs-scroll-horizontal-button-label = Défilement horizontal\npdfjs-scroll-wrapped-button =\n    .title = Utiliser le défilement par bloc\npdfjs-scroll-wrapped-button-label = Défilement par bloc\npdfjs-spread-none-button =\n    .title = Ne pas afficher les pages deux à deux\npdfjs-spread-none-button-label = Pas de double affichage\npdfjs-spread-odd-button =\n    .title = Afficher les pages par deux, impaires à gauche\npdfjs-spread-odd-button-label = Doubles pages, impaires à gauche\npdfjs-spread-even-button =\n    .title = Afficher les pages par deux, paires à gauche\npdfjs-spread-even-button-label = Doubles pages, paires à gauche\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Propriétés du document…\npdfjs-document-properties-button-label = Propriétés du document…\npdfjs-document-properties-file-name = Nom du fichier :\npdfjs-document-properties-file-size = Taille du fichier :\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } Ko ({ $size_b } octets)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } Mo ({ $size_b } octets)\npdfjs-document-properties-title = Titre :\npdfjs-document-properties-author = Auteur :\npdfjs-document-properties-subject = Sujet :\npdfjs-document-properties-keywords = Mots-clés :\npdfjs-document-properties-creation-date = Date de création :\npdfjs-document-properties-modification-date = Modifié le :\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date } à { $time }\npdfjs-document-properties-creator = Créé par :\npdfjs-document-properties-producer = Outil de conversion PDF :\npdfjs-document-properties-version = Version PDF :\npdfjs-document-properties-page-count = Nombre de pages :\npdfjs-document-properties-page-size = Taille de la page :\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = portrait\npdfjs-document-properties-page-size-orientation-landscape = paysage\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = lettre\npdfjs-document-properties-page-size-name-legal = document juridique\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Affichage rapide des pages web :\npdfjs-document-properties-linearized-yes = Oui\npdfjs-document-properties-linearized-no = Non\npdfjs-document-properties-close-button = Fermer\n\n## Print\n\npdfjs-print-progress-message = Préparation du document pour l’impression…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress } %\npdfjs-print-progress-close-button = Annuler\npdfjs-printing-not-supported = Attention : l’impression n’est pas totalement prise en charge par ce navigateur.\npdfjs-printing-not-ready = Attention : le PDF n’est pas entièrement chargé pour pouvoir l’imprimer.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Afficher/Masquer le panneau latéral\npdfjs-toggle-sidebar-notification-button =\n    .title = Afficher/Masquer le panneau latéral (le document contient des signets/pièces jointes/calques)\npdfjs-toggle-sidebar-button-label = Afficher/Masquer le panneau latéral\npdfjs-document-outline-button =\n    .title = Afficher les signets du document (double-cliquer pour développer/réduire tous les éléments)\npdfjs-document-outline-button-label = Signets du document\npdfjs-attachments-button =\n    .title = Afficher les pièces jointes\npdfjs-attachments-button-label = Pièces jointes\npdfjs-layers-button =\n    .title = Afficher les calques (double-cliquer pour réinitialiser tous les calques à l’état par défaut)\npdfjs-layers-button-label = Calques\npdfjs-thumbs-button =\n    .title = Afficher les vignettes\npdfjs-thumbs-button-label = Vignettes\npdfjs-current-outline-item-button =\n    .title = Trouver l’élément de plan actuel\npdfjs-current-outline-item-button-label = Élément de plan actuel\npdfjs-findbar-button =\n    .title = Rechercher dans le document\npdfjs-findbar-button-label = Rechercher\npdfjs-additional-layers = Calques additionnels\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Page { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Vignette de la page { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Rechercher\n    .placeholder = Rechercher dans le document…\npdfjs-find-previous-button =\n    .title = Trouver l’occurrence précédente de l’expression\npdfjs-find-previous-button-label = Précédent\npdfjs-find-next-button =\n    .title = Trouver la prochaine occurrence de l’expression\npdfjs-find-next-button-label = Suivant\npdfjs-find-highlight-checkbox = Tout surligner\npdfjs-find-match-case-checkbox-label = Respecter la casse\npdfjs-find-match-diacritics-checkbox-label = Respecter les accents et diacritiques\npdfjs-find-entire-word-checkbox-label = Mots entiers\npdfjs-find-reached-top = Haut de la page atteint, poursuite depuis la fin\npdfjs-find-reached-bottom = Bas de la page atteint, poursuite au début\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count = Occurrence { $current } sur { $total }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Plus d’{ $limit } occurrence\n       *[other] Plus de { $limit } occurrences\n    }\npdfjs-find-not-found = Expression non trouvée\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Pleine largeur\npdfjs-page-scale-fit = Page entière\npdfjs-page-scale-auto = Zoom automatique\npdfjs-page-scale-actual = Taille réelle\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale } %\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Page { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Une erreur s’est produite lors du chargement du fichier PDF.\npdfjs-invalid-file-error = Fichier PDF invalide ou corrompu.\npdfjs-missing-file-error = Fichier PDF manquant.\npdfjs-unexpected-response-error = Réponse inattendue du serveur.\npdfjs-rendering-error = Une erreur s’est produite lors de l’affichage de la page.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date } à { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Annotation { $type }]\n\n## Password\n\npdfjs-password-label = Veuillez saisir le mot de passe pour ouvrir ce fichier PDF.\npdfjs-password-invalid = Mot de passe incorrect. Veuillez réessayer.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Annuler\npdfjs-web-fonts-disabled = Les polices web sont désactivées : impossible d’utiliser les polices intégrées au PDF.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Texte\npdfjs-editor-free-text-button-label = Texte\npdfjs-editor-ink-button =\n    .title = Dessiner\npdfjs-editor-ink-button-label = Dessiner\npdfjs-editor-stamp-button =\n    .title = Ajouter ou modifier des images\npdfjs-editor-stamp-button-label = Ajouter ou modifier des images\npdfjs-editor-highlight-button =\n    .title = Surligner\npdfjs-editor-highlight-button-label = Surligner\npdfjs-highlight-floating-button =\n    .title = Surligner\npdfjs-highlight-floating-button1 =\n    .title = Surligner\n    .aria-label = Surligner\npdfjs-highlight-floating-button-label = Surligner\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Supprimer le dessin\npdfjs-editor-remove-freetext-button =\n    .title = Supprimer le texte\npdfjs-editor-remove-stamp-button =\n    .title = Supprimer l’image\npdfjs-editor-remove-highlight-button =\n    .title = Supprimer le surlignage\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Couleur\npdfjs-editor-free-text-size-input = Taille\npdfjs-editor-ink-color-input = Couleur\npdfjs-editor-ink-thickness-input = Épaisseur\npdfjs-editor-ink-opacity-input = Opacité\npdfjs-editor-stamp-add-image-button =\n    .title = Ajouter une image\npdfjs-editor-stamp-add-image-button-label = Ajouter une image\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Épaisseur\npdfjs-editor-free-highlight-thickness-title =\n    .title = Modifier l’épaisseur pour le surlignage d’éléments non textuels\npdfjs-free-text =\n    .aria-label = Éditeur de texte\npdfjs-free-text-default-content = Commencer à écrire…\npdfjs-ink =\n    .aria-label = Éditeur de dessin\npdfjs-ink-canvas =\n    .aria-label = Image créée par l’utilisateur·trice\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Texte alternatif\npdfjs-editor-alt-text-edit-button-label = Modifier le texte alternatif\npdfjs-editor-alt-text-dialog-label = Sélectionnez une option\npdfjs-editor-alt-text-dialog-description = Le texte alternatif est utile lorsque des personnes ne peuvent pas voir l’image ou que l’image ne se charge pas.\npdfjs-editor-alt-text-add-description-label = Ajouter une description\npdfjs-editor-alt-text-add-description-description = Il est conseillé de rédiger une ou deux phrases décrivant le sujet, le cadre ou les actions.\npdfjs-editor-alt-text-mark-decorative-label = Marquer comme décorative\npdfjs-editor-alt-text-mark-decorative-description = Cette option est utilisée pour les images décoratives, comme les bordures ou les filigranes.\npdfjs-editor-alt-text-cancel-button = Annuler\npdfjs-editor-alt-text-save-button = Enregistrer\npdfjs-editor-alt-text-decorative-tooltip = Marquée comme décorative\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Par exemple, « Un jeune homme est assis à une table pour prendre un repas »\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Coin supérieur gauche — redimensionner\npdfjs-editor-resizer-label-top-middle = Milieu haut — redimensionner\npdfjs-editor-resizer-label-top-right = Coin supérieur droit — redimensionner\npdfjs-editor-resizer-label-middle-right = Milieu droit — redimensionner\npdfjs-editor-resizer-label-bottom-right = Coin inférieur droit — redimensionner\npdfjs-editor-resizer-label-bottom-middle = Centre bas — redimensionner\npdfjs-editor-resizer-label-bottom-left = Coin inférieur gauche — redimensionner\npdfjs-editor-resizer-label-middle-left = Milieu gauche — redimensionner\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Couleur de surlignage\npdfjs-editor-colorpicker-button =\n    .title = Changer de couleur\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Choix de couleurs\npdfjs-editor-colorpicker-yellow =\n    .title = Jaune\npdfjs-editor-colorpicker-green =\n    .title = Vert\npdfjs-editor-colorpicker-blue =\n    .title = Bleu\npdfjs-editor-colorpicker-pink =\n    .title = Rose\npdfjs-editor-colorpicker-red =\n    .title = Rouge\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Tout afficher\npdfjs-editor-highlight-show-all-button =\n    .title = Tout afficher\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/fur/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Pagjine precedente\npdfjs-previous-button-label = Indaûr\npdfjs-next-button =\n    .title = Prossime pagjine\npdfjs-next-button-label = Indevant\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Pagjine\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = di { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } di { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Impiçulìs\npdfjs-zoom-out-button-label = Impiçulìs\npdfjs-zoom-in-button =\n    .title = Ingrandìs\npdfjs-zoom-in-button-label = Ingrandìs\npdfjs-zoom-select =\n    .title = Ingrandiment\npdfjs-presentation-mode-button =\n    .title = Passe ae modalitât presentazion\npdfjs-presentation-mode-button-label = Modalitât presentazion\npdfjs-open-file-button =\n    .title = Vierç un file\npdfjs-open-file-button-label = Vierç\npdfjs-print-button =\n    .title = Stampe\npdfjs-print-button-label = Stampe\npdfjs-save-button =\n    .title = Salve\npdfjs-save-button-label = Salve\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Discjame\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Discjame\npdfjs-bookmark-button =\n    .title = Pagjine corinte (mostre URL de pagjine atuâl)\npdfjs-bookmark-button-label = Pagjine corinte\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Vierç te aplicazion\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Vierç te aplicazion\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Struments\npdfjs-tools-button-label = Struments\npdfjs-first-page-button =\n    .title = Va ae prime pagjine\npdfjs-first-page-button-label = Va ae prime pagjine\npdfjs-last-page-button =\n    .title = Va ae ultime pagjine\npdfjs-last-page-button-label = Va ae ultime pagjine\npdfjs-page-rotate-cw-button =\n    .title = Zire in sens orari\npdfjs-page-rotate-cw-button-label = Zire in sens orari\npdfjs-page-rotate-ccw-button =\n    .title = Zire in sens antiorari\npdfjs-page-rotate-ccw-button-label = Zire in sens antiorari\npdfjs-cursor-text-select-tool-button =\n    .title = Ative il strument di selezion dal test\npdfjs-cursor-text-select-tool-button-label = Strument di selezion dal test\npdfjs-cursor-hand-tool-button =\n    .title = Ative il strument manute\npdfjs-cursor-hand-tool-button-label = Strument manute\npdfjs-scroll-page-button =\n    .title = Dopre il scoriment des pagjinis\npdfjs-scroll-page-button-label = Scoriment pagjinis\npdfjs-scroll-vertical-button =\n    .title = Dopre scoriment verticâl\npdfjs-scroll-vertical-button-label = Scoriment verticâl\npdfjs-scroll-horizontal-button =\n    .title = Dopre scoriment orizontâl\npdfjs-scroll-horizontal-button-label = Scoriment orizontâl\npdfjs-scroll-wrapped-button =\n    .title = Dopre scoriment par blocs\npdfjs-scroll-wrapped-button-label = Scoriment par blocs\npdfjs-spread-none-button =\n    .title = No sta meti dongje pagjinis in cubie\npdfjs-spread-none-button-label = No cubiis di pagjinis\npdfjs-spread-odd-button =\n    .title = Met dongje cubiis di pagjinis scomençant des pagjinis dispar\npdfjs-spread-odd-button-label = Cubiis di pagjinis, dispar a çampe\npdfjs-spread-even-button =\n    .title = Met dongje cubiis di pagjinis scomençant des pagjinis pâr\npdfjs-spread-even-button-label = Cubiis di pagjinis, pâr a çampe\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Proprietâts dal document…\npdfjs-document-properties-button-label = Proprietâts dal document…\npdfjs-document-properties-file-name = Non dal file:\npdfjs-document-properties-file-size = Dimension dal file:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Titul:\npdfjs-document-properties-author = Autôr:\npdfjs-document-properties-subject = Ogjet:\npdfjs-document-properties-keywords = Peraulis clâf:\npdfjs-document-properties-creation-date = Date di creazion:\npdfjs-document-properties-modification-date = Date di modifiche:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Creatôr\npdfjs-document-properties-producer = Gjeneradôr PDF:\npdfjs-document-properties-version = Version PDF:\npdfjs-document-properties-page-count = Numar di pagjinis:\npdfjs-document-properties-page-size = Dimension de pagjine:\npdfjs-document-properties-page-size-unit-inches = oncis\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = verticâl\npdfjs-document-properties-page-size-orientation-landscape = orizontâl\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letare\npdfjs-document-properties-page-size-name-legal = Legâl\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Visualizazion web svelte:\npdfjs-document-properties-linearized-yes = Sì\npdfjs-document-properties-linearized-no = No\npdfjs-document-properties-close-button = Siere\n\n## Print\n\npdfjs-print-progress-message = Daûr a prontâ il document pe stampe…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Anule\npdfjs-printing-not-supported = Atenzion: la stampe no je supuartade ad implen di chest navigadôr.\npdfjs-printing-not-ready = Atenzion: il PDF nol è stât cjamât dal dut pe stampe.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Ative/Disative sbare laterâl\npdfjs-toggle-sidebar-notification-button =\n    .title = Ative/Disative sbare laterâl (il document al conten struture/zontis/strâts)\npdfjs-toggle-sidebar-button-label = Ative/Disative sbare laterâl\npdfjs-document-outline-button =\n    .title = Mostre la struture dal document (dopli clic par slargjâ/strenzi ducj i elements)\npdfjs-document-outline-button-label = Struture dal document\npdfjs-attachments-button =\n    .title = Mostre lis zontis\npdfjs-attachments-button-label = Zontis\npdfjs-layers-button =\n    .title = Mostre i strâts (dopli clic par ristabilî ducj i strâts al stât predefinît)\npdfjs-layers-button-label = Strâts\npdfjs-thumbs-button =\n    .title = Mostre miniaturis\npdfjs-thumbs-button-label = Miniaturis\npdfjs-current-outline-item-button =\n    .title = Cjate l'element de struture atuâl\npdfjs-current-outline-item-button-label = Element de struture atuâl\npdfjs-findbar-button =\n    .title = Cjate tal document\npdfjs-findbar-button-label = Cjate\npdfjs-additional-layers = Strâts adizionâi\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Pagjine { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniature de pagjine { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Cjate\n    .placeholder = Cjate tal document…\npdfjs-find-previous-button =\n    .title = Cjate il câs precedent dal test\npdfjs-find-previous-button-label = Precedent\npdfjs-find-next-button =\n    .title = Cjate il câs sucessîf dal test\npdfjs-find-next-button-label = Sucessîf\npdfjs-find-highlight-checkbox = Evidenzie dut\npdfjs-find-match-case-checkbox-label = Fâs distinzion tra maiusculis e minusculis\npdfjs-find-match-diacritics-checkbox-label = Corispondence diacritiche\npdfjs-find-entire-word-checkbox-label = Peraulis interiis\npdfjs-find-reached-top = Si è rivâts al inizi dal document e si à continuât de fin\npdfjs-find-reached-bottom = Si è rivât ae fin dal document e si à continuât dal inizi\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } di { $total } corispondence\n       *[other] { $current } di { $total } corispondencis\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Plui di { $limit } corispondence\n       *[other] Plui di { $limit } corispondencis\n    }\npdfjs-find-not-found = Test no cjatât\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Largjece de pagjine\npdfjs-page-scale-fit = Pagjine interie\npdfjs-page-scale-auto = Ingrandiment automatic\npdfjs-page-scale-actual = Dimension reâl\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Pagjine { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Al è vignût fûr un erôr intant che si cjariave il PDF.\npdfjs-invalid-file-error = File PDF no valit o ruvinât.\npdfjs-missing-file-error = Al mancje il file PDF.\npdfjs-unexpected-response-error = Rispueste dal servidôr inspietade.\npdfjs-rendering-error = Al è vignût fûr un erôr tal realizâ la visualizazion de pagjine.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Anotazion { $type }]\n\n## Password\n\npdfjs-password-label = Inserìs la password par vierzi chest file PDF.\npdfjs-password-invalid = Password no valide. Par plasê torne prove.\npdfjs-password-ok-button = Va ben\npdfjs-password-cancel-button = Anule\npdfjs-web-fonts-disabled = I caratars dal Web a son disativâts: Impussibil doprâ i caratars PDF incorporâts.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Test\npdfjs-editor-free-text-button-label = Test\npdfjs-editor-ink-button =\n    .title = Dissen\npdfjs-editor-ink-button-label = Dissen\npdfjs-editor-stamp-button =\n    .title = Zonte o modifiche imagjins\npdfjs-editor-stamp-button-label = Zonte o modifiche imagjins\npdfjs-editor-highlight-button =\n    .title = Evidenzie\npdfjs-editor-highlight-button-label = Evidenzie\npdfjs-highlight-floating-button =\n    .title = Evidenzie\npdfjs-highlight-floating-button1 =\n    .title = Evidenzie\n    .aria-label = Evidenzie\npdfjs-highlight-floating-button-label = Evidenzie\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Gjave dissen\npdfjs-editor-remove-freetext-button =\n    .title = Gjave test\npdfjs-editor-remove-stamp-button =\n    .title = Gjave imagjin\npdfjs-editor-remove-highlight-button =\n    .title = Gjave evidenziazion\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Colôr\npdfjs-editor-free-text-size-input = Dimension\npdfjs-editor-ink-color-input = Colôr\npdfjs-editor-ink-thickness-input = Spessôr\npdfjs-editor-ink-opacity-input = Opacitât\npdfjs-editor-stamp-add-image-button =\n    .title = Zonte imagjin\npdfjs-editor-stamp-add-image-button-label = Zonte imagjin\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Spessôr\npdfjs-editor-free-highlight-thickness-title =\n    .title = Modifiche il spessôr de selezion pai elements che no son testuâi\npdfjs-free-text =\n    .aria-label = Editôr di test\npdfjs-free-text-default-content = Scomence a scrivi…\npdfjs-ink =\n    .aria-label = Editôr dissens\npdfjs-ink-canvas =\n    .aria-label = Imagjin creade dal utent\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Test alternatîf\npdfjs-editor-alt-text-edit-button-label = Modifiche test alternatîf\npdfjs-editor-alt-text-dialog-label = Sielç une opzion\npdfjs-editor-alt-text-dialog-description = Il test alternatîf (“alt text”) al jude cuant che lis personis no puedin viodi la imagjin o cuant che la imagjine no ven cjariade.\npdfjs-editor-alt-text-add-description-label = Zonte une descrizion\npdfjs-editor-alt-text-add-description-description = Ponte a une o dôs frasis che a descrivin l’argoment, la ambientazion o lis azions.\npdfjs-editor-alt-text-mark-decorative-label = Segne come decorative\npdfjs-editor-alt-text-mark-decorative-description = Chest al ven doprât pes imagjins ornamentâls, come i ôrs o lis filigranis.\npdfjs-editor-alt-text-cancel-button = Anule\npdfjs-editor-alt-text-save-button = Salve\npdfjs-editor-alt-text-decorative-tooltip = Segnade come decorative\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Par esempli, “Un zovin si sente a taule par mangjâ”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Cjanton in alt a çampe — ridimensione\npdfjs-editor-resizer-label-top-middle = Bande superiôr tal mieç — ridimensione\npdfjs-editor-resizer-label-top-right = Cjanton in alt a diestre — ridimensione\npdfjs-editor-resizer-label-middle-right = Bande diestre tal mieç — ridimensione\npdfjs-editor-resizer-label-bottom-right = Cjanton in bas a diestre — ridimensione\npdfjs-editor-resizer-label-bottom-middle = Bande inferiôr tal mieç — ridimensione\npdfjs-editor-resizer-label-bottom-left = Cjanton in bas a çampe — ridimensione\npdfjs-editor-resizer-label-middle-left = Bande di çampe tal mieç — ridimensione\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Colôr par evidenziâ\npdfjs-editor-colorpicker-button =\n    .title = Cambie colôr\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Sieltis di colôr\npdfjs-editor-colorpicker-yellow =\n    .title = Zâl\npdfjs-editor-colorpicker-green =\n    .title = Vert\npdfjs-editor-colorpicker-blue =\n    .title = Blu\npdfjs-editor-colorpicker-pink =\n    .title = Rose\npdfjs-editor-colorpicker-red =\n    .title = Ros\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Mostre dut\npdfjs-editor-highlight-show-all-button =\n    .title = Mostre dut\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/fy-NL/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Foarige side\npdfjs-previous-button-label = Foarige\npdfjs-next-button =\n    .title = Folgjende side\npdfjs-next-button-label = Folgjende\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Side\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = fan { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } fan { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Utzoome\npdfjs-zoom-out-button-label = Utzoome\npdfjs-zoom-in-button =\n    .title = Ynzoome\npdfjs-zoom-in-button-label = Ynzoome\npdfjs-zoom-select =\n    .title = Zoome\npdfjs-presentation-mode-button =\n    .title = Wikselje nei presintaasjemodus\npdfjs-presentation-mode-button-label = Presintaasjemodus\npdfjs-open-file-button =\n    .title = Bestân iepenje\npdfjs-open-file-button-label = Iepenje\npdfjs-print-button =\n    .title = Ofdrukke\npdfjs-print-button-label = Ofdrukke\npdfjs-save-button =\n    .title = Bewarje\npdfjs-save-button-label = Bewarje\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Downloade\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Downloade\npdfjs-bookmark-button =\n    .title = Aktuele side (URL fan aktuele side besjen)\npdfjs-bookmark-button-label = Aktuele side\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Iepenje yn app\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Iepenje yn app\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Ark\npdfjs-tools-button-label = Ark\npdfjs-first-page-button =\n    .title = Gean nei earste side\npdfjs-first-page-button-label = Gean nei earste side\npdfjs-last-page-button =\n    .title = Gean nei lêste side\npdfjs-last-page-button-label = Gean nei lêste side\npdfjs-page-rotate-cw-button =\n    .title = Rjochtsom draaie\npdfjs-page-rotate-cw-button-label = Rjochtsom draaie\npdfjs-page-rotate-ccw-button =\n    .title = Linksom draaie\npdfjs-page-rotate-ccw-button-label = Linksom draaie\npdfjs-cursor-text-select-tool-button =\n    .title = Tekstseleksjehelpmiddel ynskeakelje\npdfjs-cursor-text-select-tool-button-label = Tekstseleksjehelpmiddel\npdfjs-cursor-hand-tool-button =\n    .title = Hânhelpmiddel ynskeakelje\npdfjs-cursor-hand-tool-button-label = Hânhelpmiddel\npdfjs-scroll-page-button =\n    .title = Sideskowen brûke\npdfjs-scroll-page-button-label = Sideskowen\npdfjs-scroll-vertical-button =\n    .title = Fertikaal skowe brûke\npdfjs-scroll-vertical-button-label = Fertikaal skowe\npdfjs-scroll-horizontal-button =\n    .title = Horizontaal skowe brûke\npdfjs-scroll-horizontal-button-label = Horizontaal skowe\npdfjs-scroll-wrapped-button =\n    .title = Skowe mei oersjoch brûke\npdfjs-scroll-wrapped-button-label = Skowe mei oersjoch\npdfjs-spread-none-button =\n    .title = Sidesprieding net gearfetsje\npdfjs-spread-none-button-label = Gjin sprieding\npdfjs-spread-odd-button =\n    .title = Sidesprieding gearfetsje te starten mei ûneven nûmers\npdfjs-spread-odd-button-label = Uneven sprieding\npdfjs-spread-even-button =\n    .title = Sidesprieding gearfetsje te starten mei even nûmers\npdfjs-spread-even-button-label = Even sprieding\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Dokuminteigenskippen…\npdfjs-document-properties-button-label = Dokuminteigenskippen…\npdfjs-document-properties-file-name = Bestânsnamme:\npdfjs-document-properties-file-size = Bestânsgrutte:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Titel:\npdfjs-document-properties-author = Auteur:\npdfjs-document-properties-subject = Underwerp:\npdfjs-document-properties-keywords = Kaaiwurden:\npdfjs-document-properties-creation-date = Oanmaakdatum:\npdfjs-document-properties-modification-date = Bewurkingsdatum:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Makker:\npdfjs-document-properties-producer = PDF-makker:\npdfjs-document-properties-version = PDF-ferzje:\npdfjs-document-properties-page-count = Siden:\npdfjs-document-properties-page-size = Sideformaat:\npdfjs-document-properties-page-size-unit-inches = yn\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = steand\npdfjs-document-properties-page-size-orientation-landscape = lizzend\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Juridysk\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Flugge webwerjefte:\npdfjs-document-properties-linearized-yes = Ja\npdfjs-document-properties-linearized-no = Nee\npdfjs-document-properties-close-button = Slute\n\n## Print\n\npdfjs-print-progress-message = Dokumint tariede oar ôfdrukken…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Annulearje\npdfjs-printing-not-supported = Warning: Printen is net folslein stipe troch dizze browser.\npdfjs-printing-not-ready = Warning: PDF is net folslein laden om ôf te drukken.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Sidebalke yn-/útskeakelje\npdfjs-toggle-sidebar-notification-button =\n    .title = Sidebalke yn-/útskeakelje (dokumint befettet oersjoch/bylagen/lagen)\npdfjs-toggle-sidebar-button-label = Sidebalke yn-/útskeakelje\npdfjs-document-outline-button =\n    .title = Dokumintoersjoch toane (dûbelklik om alle items út/yn te klappen)\npdfjs-document-outline-button-label = Dokumintoersjoch\npdfjs-attachments-button =\n    .title = Bylagen toane\npdfjs-attachments-button-label = Bylagen\npdfjs-layers-button =\n    .title = Lagen toane (dûbelklik om alle lagen nei de standertsteat werom te setten)\npdfjs-layers-button-label = Lagen\npdfjs-thumbs-button =\n    .title = Foarbylden toane\npdfjs-thumbs-button-label = Foarbylden\npdfjs-current-outline-item-button =\n    .title = Aktueel item yn ynhâldsopjefte sykje\npdfjs-current-outline-item-button-label = Aktueel item yn ynhâldsopjefte\npdfjs-findbar-button =\n    .title = Sykje yn dokumint\npdfjs-findbar-button-label = Sykje\npdfjs-additional-layers = Oanfoljende lagen\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Side { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Foarbyld fan side { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Sykje\n    .placeholder = Sykje yn dokumint…\npdfjs-find-previous-button =\n    .title = It foarige foarkommen fan de tekst sykje\npdfjs-find-previous-button-label = Foarige\npdfjs-find-next-button =\n    .title = It folgjende foarkommen fan de tekst sykje\npdfjs-find-next-button-label = Folgjende\npdfjs-find-highlight-checkbox = Alles markearje\npdfjs-find-match-case-checkbox-label = Haadlettergefoelich\npdfjs-find-match-diacritics-checkbox-label = Diakrityske tekens brûke\npdfjs-find-entire-word-checkbox-label = Hiele wurden\npdfjs-find-reached-top = Boppekant fan dokumint berikt, trochgien fan ûnder ôf\npdfjs-find-reached-bottom = Ein fan dokumint berikt, trochgien fan boppe ôf\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } fan { $total } oerienkomst\n       *[other] { $current } fan { $total } oerienkomsten\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Mear as { $limit } oerienkomst\n       *[other] Mear as { $limit } oerienkomsten\n    }\npdfjs-find-not-found = Tekst net fûn\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Sidebreedte\npdfjs-page-scale-fit = Hiele side\npdfjs-page-scale-auto = Automatysk zoome\npdfjs-page-scale-actual = Werklike grutte\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Side { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Der is in flater bard by it laden fan de PDF.\npdfjs-invalid-file-error = Ynfalide of korruptearre PDF-bestân.\npdfjs-missing-file-error = PDF-bestân ûntbrekt.\npdfjs-unexpected-response-error = Unferwacht serverantwurd.\npdfjs-rendering-error = Der is in flater bard by it renderjen fan de side.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type }-annotaasje]\n\n## Password\n\npdfjs-password-label = Jou it wachtwurd om dit PDF-bestân te iepenjen.\npdfjs-password-invalid = Ferkeard wachtwurd. Probearje opnij.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Annulearje\npdfjs-web-fonts-disabled = Weblettertypen binne útskeakele: gebrûk fan ynsluten PDF-lettertypen is net mooglik.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Tekst\npdfjs-editor-free-text-button-label = Tekst\npdfjs-editor-ink-button =\n    .title = Tekenje\npdfjs-editor-ink-button-label = Tekenje\npdfjs-editor-stamp-button =\n    .title = Ofbyldingen tafoegje of bewurkje\npdfjs-editor-stamp-button-label = Ofbyldingen tafoegje of bewurkje\npdfjs-editor-highlight-button =\n    .title = Markearje\npdfjs-editor-highlight-button-label = Markearje\npdfjs-highlight-floating-button =\n    .title = Markearje\npdfjs-highlight-floating-button1 =\n    .title = Markearje\n    .aria-label = Markearje\npdfjs-highlight-floating-button-label = Markearje\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Tekening fuortsmite\npdfjs-editor-remove-freetext-button =\n    .title = Tekst fuortsmite\npdfjs-editor-remove-stamp-button =\n    .title = Ofbylding fuortsmite\npdfjs-editor-remove-highlight-button =\n    .title = Markearring fuortsmite\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Kleur\npdfjs-editor-free-text-size-input = Grutte\npdfjs-editor-ink-color-input = Kleur\npdfjs-editor-ink-thickness-input = Tsjokte\npdfjs-editor-ink-opacity-input = Transparânsje\npdfjs-editor-stamp-add-image-button =\n    .title = Ofbylding tafoegje\npdfjs-editor-stamp-add-image-button-label = Ofbylding tafoegje\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Tsjokte\npdfjs-editor-free-highlight-thickness-title =\n    .title = Tsjokte wizigje by aksintuearring fan oare items as tekst\npdfjs-free-text =\n    .aria-label = Tekstbewurker\npdfjs-free-text-default-content = Begjin mei typen…\npdfjs-ink =\n    .aria-label = Tekeningbewurker\npdfjs-ink-canvas =\n    .aria-label = Troch brûker makke ôfbylding\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Alternative tekst\npdfjs-editor-alt-text-edit-button-label = Alternative tekst bewurkje\npdfjs-editor-alt-text-dialog-label = Kies in opsje\npdfjs-editor-alt-text-dialog-description = Alternative tekst helpt wannear’t minsken de ôfbylding net sjen kinne of wannear’t dizze net laden wurdt.\npdfjs-editor-alt-text-add-description-label = Foegje in beskriuwing ta\npdfjs-editor-alt-text-add-description-description = Stribje nei 1-2 sinnen dy’t it ûnderwerp, de omjouwing of de aksjes beskriuwe.\npdfjs-editor-alt-text-mark-decorative-label = As dekoratyf markearje\npdfjs-editor-alt-text-mark-decorative-description = Dit wurdt brûkt foar sierlike ôfbyldingen, lykas rânen of wettermerken.\npdfjs-editor-alt-text-cancel-button = Annulearje\npdfjs-editor-alt-text-save-button = Bewarje\npdfjs-editor-alt-text-decorative-tooltip = As dekoratyf markearre\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Bygelyks, ‘In jonge man sit oan in tafel om te iten’\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Linkerboppehoek – formaat wizigje\npdfjs-editor-resizer-label-top-middle = Midden boppe – formaat wizigje\npdfjs-editor-resizer-label-top-right = Rjochterboppehoek – formaat wizigje\npdfjs-editor-resizer-label-middle-right = Midden rjochts – formaat wizigje\npdfjs-editor-resizer-label-bottom-right = Rjochterûnderhoek – formaat wizigje\npdfjs-editor-resizer-label-bottom-middle = Midden ûnder – formaat wizigje\npdfjs-editor-resizer-label-bottom-left = Linkerûnderhoek – formaat wizigje\npdfjs-editor-resizer-label-middle-left = Links midden – formaat wizigje\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Markearringskleur\npdfjs-editor-colorpicker-button =\n    .title = Kleur wizigje\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Kleurkarren\npdfjs-editor-colorpicker-yellow =\n    .title = Giel\npdfjs-editor-colorpicker-green =\n    .title = Grien\npdfjs-editor-colorpicker-blue =\n    .title = Blau\npdfjs-editor-colorpicker-pink =\n    .title = Roze\npdfjs-editor-colorpicker-red =\n    .title = Read\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Alles toane\npdfjs-editor-highlight-show-all-button =\n    .title = Alles toane\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/ga-IE/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = An Leathanach Roimhe Seo\npdfjs-previous-button-label = Roimhe Seo\npdfjs-next-button =\n    .title = An Chéad Leathanach Eile\npdfjs-next-button-label = Ar Aghaidh\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Leathanach\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = as { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } as { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Súmáil Amach\npdfjs-zoom-out-button-label = Súmáil Amach\npdfjs-zoom-in-button =\n    .title = Súmáil Isteach\npdfjs-zoom-in-button-label = Súmáil Isteach\npdfjs-zoom-select =\n    .title = Súmáil\npdfjs-presentation-mode-button =\n    .title = Úsáid an Mód Láithreoireachta\npdfjs-presentation-mode-button-label = Mód Láithreoireachta\npdfjs-open-file-button =\n    .title = Oscail Comhad\npdfjs-open-file-button-label = Oscail\npdfjs-print-button =\n    .title = Priontáil\npdfjs-print-button-label = Priontáil\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Uirlisí\npdfjs-tools-button-label = Uirlisí\npdfjs-first-page-button =\n    .title = Go dtí an chéad leathanach\npdfjs-first-page-button-label = Go dtí an chéad leathanach\npdfjs-last-page-button =\n    .title = Go dtí an leathanach deiridh\npdfjs-last-page-button-label = Go dtí an leathanach deiridh\npdfjs-page-rotate-cw-button =\n    .title = Rothlaigh ar deiseal\npdfjs-page-rotate-cw-button-label = Rothlaigh ar deiseal\npdfjs-page-rotate-ccw-button =\n    .title = Rothlaigh ar tuathal\npdfjs-page-rotate-ccw-button-label = Rothlaigh ar tuathal\npdfjs-cursor-text-select-tool-button =\n    .title = Cumasaigh an Uirlis Roghnaithe Téacs\npdfjs-cursor-text-select-tool-button-label = Uirlis Roghnaithe Téacs\npdfjs-cursor-hand-tool-button =\n    .title = Cumasaigh an Uirlis Láimhe\npdfjs-cursor-hand-tool-button-label = Uirlis Láimhe\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Airíonna na Cáipéise…\npdfjs-document-properties-button-label = Airíonna na Cáipéise…\npdfjs-document-properties-file-name = Ainm an chomhaid:\npdfjs-document-properties-file-size = Méid an chomhaid:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } kB ({ $size_b } beart)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } beart)\npdfjs-document-properties-title = Teideal:\npdfjs-document-properties-author = Údar:\npdfjs-document-properties-subject = Ábhar:\npdfjs-document-properties-keywords = Eochairfhocail:\npdfjs-document-properties-creation-date = Dáta Cruthaithe:\npdfjs-document-properties-modification-date = Dáta Athraithe:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Cruthaitheoir:\npdfjs-document-properties-producer = Cruthaitheoir an PDF:\npdfjs-document-properties-version = Leagan PDF:\npdfjs-document-properties-page-count = Líon Leathanach:\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\n\n##\n\npdfjs-document-properties-close-button = Dún\n\n## Print\n\npdfjs-print-progress-message = Cáipéis á hullmhú le priontáil…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Cealaigh\npdfjs-printing-not-supported = Rabhadh: Ní thacaíonn an brabhsálaí le priontáil go hiomlán.\npdfjs-printing-not-ready = Rabhadh: Ní féidir an PDF a phriontáil go dtí go mbeidh an cháipéis iomlán lódáilte.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Scoránaigh an Barra Taoibh\npdfjs-toggle-sidebar-button-label = Scoránaigh an Barra Taoibh\npdfjs-document-outline-button =\n    .title = Taispeáin Imlíne na Cáipéise (déchliceáil chun chuile rud a leathnú nó a laghdú)\npdfjs-document-outline-button-label = Creatlach na Cáipéise\npdfjs-attachments-button =\n    .title = Taispeáin Iatáin\npdfjs-attachments-button-label = Iatáin\npdfjs-thumbs-button =\n    .title = Taispeáin Mionsamhlacha\npdfjs-thumbs-button-label = Mionsamhlacha\npdfjs-findbar-button =\n    .title = Aimsigh sa Cháipéis\npdfjs-findbar-button-label = Aimsigh\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Leathanach { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Mionsamhail Leathanaigh { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Aimsigh\n    .placeholder = Aimsigh sa cháipéis…\npdfjs-find-previous-button =\n    .title = Aimsigh an sampla roimhe seo den nath seo\npdfjs-find-previous-button-label = Roimhe seo\npdfjs-find-next-button =\n    .title = Aimsigh an chéad sampla eile den nath sin\npdfjs-find-next-button-label = Ar aghaidh\npdfjs-find-highlight-checkbox = Aibhsigh uile\npdfjs-find-match-case-checkbox-label = Cásíogair\npdfjs-find-entire-word-checkbox-label = Focail iomlána\npdfjs-find-reached-top = Ag barr na cáipéise, ag leanúint ón mbun\npdfjs-find-reached-bottom = Ag bun na cáipéise, ag leanúint ón mbarr\npdfjs-find-not-found = Frása gan aimsiú\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Leithead Leathanaigh\npdfjs-page-scale-fit = Laghdaigh go dtí an Leathanach\npdfjs-page-scale-auto = Súmáil Uathoibríoch\npdfjs-page-scale-actual = Fíormhéid\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = Tharla earráid agus an cháipéis PDF á lódáil.\npdfjs-invalid-file-error = Comhad neamhbhailí nó truaillithe PDF.\npdfjs-missing-file-error = Comhad PDF ar iarraidh.\npdfjs-unexpected-response-error = Freagra ón bhfreastalaí nach rabhthas ag súil leis.\npdfjs-rendering-error = Tharla earráid agus an leathanach á leagan amach.\n\n## Annotations\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Anótáil { $type }]\n\n## Password\n\npdfjs-password-label = Cuir an focal faire isteach chun an comhad PDF seo a oscailt.\npdfjs-password-invalid = Focal faire mícheart. Déan iarracht eile.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Cealaigh\npdfjs-web-fonts-disabled = Tá clófhoirne Gréasáin díchumasaithe: ní féidir clófhoirne leabaithe PDF a úsáid.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/gd/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = An duilleag roimhe\npdfjs-previous-button-label = Air ais\npdfjs-next-button =\n    .title = An ath-dhuilleag\npdfjs-next-button-label = Air adhart\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Duilleag\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = à { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } à { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Sùm a-mach\npdfjs-zoom-out-button-label = Sùm a-mach\npdfjs-zoom-in-button =\n    .title = Sùm a-steach\npdfjs-zoom-in-button-label = Sùm a-steach\npdfjs-zoom-select =\n    .title = Sùm\npdfjs-presentation-mode-button =\n    .title = Gearr leum dhan mhodh taisbeanaidh\npdfjs-presentation-mode-button-label = Am modh taisbeanaidh\npdfjs-open-file-button =\n    .title = Fosgail faidhle\npdfjs-open-file-button-label = Fosgail\npdfjs-print-button =\n    .title = Clò-bhuail\npdfjs-print-button-label = Clò-bhuail\npdfjs-save-button =\n    .title = Sàbhail\npdfjs-save-button-label = Sàbhail\npdfjs-bookmark-button =\n    .title = An duilleag làithreach (Seall an URL on duilleag làithreach)\npdfjs-bookmark-button-label = An duilleag làithreach\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Fosgail san aplacaid\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Fosgail san aplacaid\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Innealan\npdfjs-tools-button-label = Innealan\npdfjs-first-page-button =\n    .title = Rach gun chiad duilleag\npdfjs-first-page-button-label = Rach gun chiad duilleag\npdfjs-last-page-button =\n    .title = Rach gun duilleag mu dheireadh\npdfjs-last-page-button-label = Rach gun duilleag mu dheireadh\npdfjs-page-rotate-cw-button =\n    .title = Cuairtich gu deiseil\npdfjs-page-rotate-cw-button-label = Cuairtich gu deiseil\npdfjs-page-rotate-ccw-button =\n    .title = Cuairtich gu tuathail\npdfjs-page-rotate-ccw-button-label = Cuairtich gu tuathail\npdfjs-cursor-text-select-tool-button =\n    .title = Cuir an comas inneal taghadh an teacsa\npdfjs-cursor-text-select-tool-button-label = Inneal taghadh an teacsa\npdfjs-cursor-hand-tool-button =\n    .title = Cuir inneal na làimhe an comas\npdfjs-cursor-hand-tool-button-label = Inneal na làimhe\npdfjs-scroll-page-button =\n    .title = Cleachd sgroladh duilleige\npdfjs-scroll-page-button-label = Sgroladh duilleige\npdfjs-scroll-vertical-button =\n    .title = Cleachd sgroladh inghearach\npdfjs-scroll-vertical-button-label = Sgroladh inghearach\npdfjs-scroll-horizontal-button =\n    .title = Cleachd sgroladh còmhnard\npdfjs-scroll-horizontal-button-label = Sgroladh còmhnard\npdfjs-scroll-wrapped-button =\n    .title = Cleachd sgroladh paisgte\npdfjs-scroll-wrapped-button-label = Sgroladh paisgte\npdfjs-spread-none-button =\n    .title = Na cuir còmhla sgoileadh dhuilleagan\npdfjs-spread-none-button-label = Gun sgaoileadh dhuilleagan\npdfjs-spread-odd-button =\n    .title = Cuir còmhla duilleagan sgaoilte a thòisicheas le duilleagan aig a bheil àireamh chorr\npdfjs-spread-odd-button-label = Sgaoileadh dhuilleagan corra\npdfjs-spread-even-button =\n    .title = Cuir còmhla duilleagan sgaoilte a thòisicheas le duilleagan aig a bheil àireamh chothrom\npdfjs-spread-even-button-label = Sgaoileadh dhuilleagan cothrom\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Roghainnean na sgrìobhainne…\npdfjs-document-properties-button-label = Roghainnean na sgrìobhainne…\npdfjs-document-properties-file-name = Ainm an fhaidhle:\npdfjs-document-properties-file-size = Meud an fhaidhle:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Tiotal:\npdfjs-document-properties-author = Ùghdar:\npdfjs-document-properties-subject = Cuspair:\npdfjs-document-properties-keywords = Faclan-luirg:\npdfjs-document-properties-creation-date = Latha a chruthachaidh:\npdfjs-document-properties-modification-date = Latha atharrachaidh:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Cruthadair:\npdfjs-document-properties-producer = Saothraiche a' PDF:\npdfjs-document-properties-version = Tionndadh a' PDF:\npdfjs-document-properties-page-count = Àireamh de dhuilleagan:\npdfjs-document-properties-page-size = Meud na duilleige:\npdfjs-document-properties-page-size-unit-inches = ann an\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = portraid\npdfjs-document-properties-page-size-orientation-landscape = dreach-tìre\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Litir\npdfjs-document-properties-page-size-name-legal = Laghail\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Grad shealladh-lìn:\npdfjs-document-properties-linearized-yes = Tha\npdfjs-document-properties-linearized-no = Chan eil\npdfjs-document-properties-close-button = Dùin\n\n## Print\n\npdfjs-print-progress-message = Ag ullachadh na sgrìobhainn airson clò-bhualadh…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Sguir dheth\npdfjs-printing-not-supported = Rabhadh: Chan eil am brabhsair seo a' cur làn-taic ri clò-bhualadh.\npdfjs-printing-not-ready = Rabhadh: Cha deach am PDF a luchdadh gu tur airson clò-bhualadh.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Toglaich am bàr-taoibh\npdfjs-toggle-sidebar-notification-button =\n    .title = Toglaich am bàr-taoibh (tha oir-loidhne/ceanglachain/breathan aig an sgrìobhainn)\npdfjs-toggle-sidebar-button-label = Toglaich am bàr-taoibh\npdfjs-document-outline-button =\n    .title = Seall oir-loidhne na sgrìobhainn (dèan briogadh dùbailte airson a h-uile nì a leudachadh/a cho-theannadh)\npdfjs-document-outline-button-label = Oir-loidhne na sgrìobhainne\npdfjs-attachments-button =\n    .title = Seall na ceanglachain\npdfjs-attachments-button-label = Ceanglachain\npdfjs-layers-button =\n    .title = Seall na breathan (dèan briogadh dùbailte airson a h-uile breath ath-shuidheachadh dhan staid bhunaiteach)\npdfjs-layers-button-label = Breathan\npdfjs-thumbs-button =\n    .title = Seall na dealbhagan\npdfjs-thumbs-button-label = Dealbhagan\npdfjs-current-outline-item-button =\n    .title = Lorg nì làithreach na h-oir-loidhne\npdfjs-current-outline-item-button-label = Nì làithreach na h-oir-loidhne\npdfjs-findbar-button =\n    .title = Lorg san sgrìobhainn\npdfjs-findbar-button-label = Lorg\npdfjs-additional-layers = Barrachd breathan\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Duilleag a { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Dealbhag duilleag a { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Lorg\n    .placeholder = Lorg san sgrìobhainn...\npdfjs-find-previous-button =\n    .title = Lorg làthair roimhe na h-abairt seo\npdfjs-find-previous-button-label = Air ais\npdfjs-find-next-button =\n    .title = Lorg ath-làthair na h-abairt seo\npdfjs-find-next-button-label = Air adhart\npdfjs-find-highlight-checkbox = Soillsich a h-uile\npdfjs-find-match-case-checkbox-label = Aire do litrichean mòra is beaga\npdfjs-find-match-diacritics-checkbox-label = Aire do stràcan\npdfjs-find-entire-word-checkbox-label = Faclan-slàna\npdfjs-find-reached-top = Ràinig sinn barr na duilleige, a' leantainn air adhart o bhonn na duilleige\npdfjs-find-reached-bottom = Ràinig sinn bonn na duilleige, a' leantainn air adhart o bharr na duilleige\npdfjs-find-not-found = Cha deach an abairt a lorg\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Leud na duilleige\npdfjs-page-scale-fit = Freagair ri meud na duilleige\npdfjs-page-scale-auto = Sùm fèin-obrachail\npdfjs-page-scale-actual = Am fìor-mheud\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Duilleag { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Thachair mearachd rè luchdadh a' PDF.\npdfjs-invalid-file-error = Faidhle PDF a tha mì-dhligheach no coirbte.\npdfjs-missing-file-error = Faidhle PDF a tha a dhìth.\npdfjs-unexpected-response-error = Freagairt on fhrithealaiche ris nach robh dùil.\npdfjs-rendering-error = Thachair mearachd rè reandaradh na duilleige.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Nòtachadh { $type }]\n\n## Password\n\npdfjs-password-label = Cuir a-steach am facal-faire gus am faidhle PDF seo fhosgladh.\npdfjs-password-invalid = Tha am facal-faire cearr. Nach fheuch thu ris a-rithist?\npdfjs-password-ok-button = Ceart ma-thà\npdfjs-password-cancel-button = Sguir dheth\npdfjs-web-fonts-disabled = Tha cruthan-clò lìn à comas: Chan urrainn dhuinn cruthan-clò PDF leabaichte a chleachdadh.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Teacsa\npdfjs-editor-free-text-button-label = Teacsa\npdfjs-editor-ink-button =\n    .title = Tarraing\npdfjs-editor-ink-button-label = Tarraing\n# Editor Parameters\npdfjs-editor-free-text-color-input = Dath\npdfjs-editor-free-text-size-input = Meud\npdfjs-editor-ink-color-input = Dath\npdfjs-editor-ink-thickness-input = Tighead\npdfjs-editor-ink-opacity-input = Trìd-dhoilleireachd\npdfjs-free-text =\n    .aria-label = An deasaiche teacsa\npdfjs-free-text-default-content = Tòisich air sgrìobhadh…\npdfjs-ink =\n    .aria-label = An deasaiche tharraingean\npdfjs-ink-canvas =\n    .aria-label = Dealbh a chruthaich cleachdaiche\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/gl/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Páxina anterior\npdfjs-previous-button-label = Anterior\npdfjs-next-button =\n    .title = Seguinte páxina\npdfjs-next-button-label = Seguinte\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Páxina\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = de { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Reducir\npdfjs-zoom-out-button-label = Reducir\npdfjs-zoom-in-button =\n    .title = Ampliar\npdfjs-zoom-in-button-label = Ampliar\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Cambiar ao modo presentación\npdfjs-presentation-mode-button-label = Modo presentación\npdfjs-open-file-button =\n    .title = Abrir ficheiro\npdfjs-open-file-button-label = Abrir\npdfjs-print-button =\n    .title = Imprimir\npdfjs-print-button-label = Imprimir\npdfjs-save-button =\n    .title = Gardar\npdfjs-save-button-label = Gardar\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Descargar\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Descargar\npdfjs-bookmark-button =\n    .title = Páxina actual (ver o URL da páxina actual)\npdfjs-bookmark-button-label = Páxina actual\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Abrir cunha aplicación\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Abrir cunha aplicación\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Ferramentas\npdfjs-tools-button-label = Ferramentas\npdfjs-first-page-button =\n    .title = Ir á primeira páxina\npdfjs-first-page-button-label = Ir á primeira páxina\npdfjs-last-page-button =\n    .title = Ir á última páxina\npdfjs-last-page-button-label = Ir á última páxina\npdfjs-page-rotate-cw-button =\n    .title = Rotar no sentido das agullas do reloxo\npdfjs-page-rotate-cw-button-label = Rotar no sentido das agullas do reloxo\npdfjs-page-rotate-ccw-button =\n    .title = Rotar no sentido contrario ás agullas do reloxo\npdfjs-page-rotate-ccw-button-label = Rotar no sentido contrario ás agullas do reloxo\npdfjs-cursor-text-select-tool-button =\n    .title = Activar a ferramenta de selección de texto\npdfjs-cursor-text-select-tool-button-label = Ferramenta de selección de texto\npdfjs-cursor-hand-tool-button =\n    .title = Activar a ferramenta de man\npdfjs-cursor-hand-tool-button-label = Ferramenta de man\npdfjs-scroll-page-button =\n    .title = Usar o desprazamento da páxina\npdfjs-scroll-page-button-label = Desprazamento da páxina\npdfjs-scroll-vertical-button =\n    .title = Usar o desprazamento vertical\npdfjs-scroll-vertical-button-label = Desprazamento vertical\npdfjs-scroll-horizontal-button =\n    .title = Usar o desprazamento horizontal\npdfjs-scroll-horizontal-button-label = Desprazamento horizontal\npdfjs-scroll-wrapped-button =\n    .title = Usar o desprazamento en bloque\npdfjs-scroll-wrapped-button-label = Desprazamento por bloque\npdfjs-spread-none-button =\n    .title = Non agrupar páxinas\npdfjs-spread-none-button-label = Ningún agrupamento\npdfjs-spread-odd-button =\n    .title = Crea grupo de páxinas que comezan con números de páxina impares\npdfjs-spread-odd-button-label = Agrupamento impar\npdfjs-spread-even-button =\n    .title = Crea grupo de páxinas que comezan con números de páxina pares\npdfjs-spread-even-button-label = Agrupamento par\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Propiedades do documento…\npdfjs-document-properties-button-label = Propiedades do documento…\npdfjs-document-properties-file-name = Nome do ficheiro:\npdfjs-document-properties-file-size = Tamaño do ficheiro:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Título:\npdfjs-document-properties-author = Autor:\npdfjs-document-properties-subject = Asunto:\npdfjs-document-properties-keywords = Palabras clave:\npdfjs-document-properties-creation-date = Data de creación:\npdfjs-document-properties-modification-date = Data de modificación:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Creado por:\npdfjs-document-properties-producer = Xenerador do PDF:\npdfjs-document-properties-version = Versión de PDF:\npdfjs-document-properties-page-count = Número de páxinas:\npdfjs-document-properties-page-size = Tamaño da páxina:\npdfjs-document-properties-page-size-unit-inches = pol\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = vertical\npdfjs-document-properties-page-size-orientation-landscape = horizontal\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Carta\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Visualización rápida das páxinas web:\npdfjs-document-properties-linearized-yes = Si\npdfjs-document-properties-linearized-no = Non\npdfjs-document-properties-close-button = Pechar\n\n## Print\n\npdfjs-print-progress-message = Preparando o documento para imprimir…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Cancelar\npdfjs-printing-not-supported = Aviso: A impresión non é compatíbel de todo con este navegador.\npdfjs-printing-not-ready = Aviso: O PDF non se cargou completamente para imprimirse.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Amosar/agochar a barra lateral\npdfjs-toggle-sidebar-notification-button =\n    .title = Alternar barra lateral (o documento contén esquema/anexos/capas)\npdfjs-toggle-sidebar-button-label = Amosar/agochar a barra lateral\npdfjs-document-outline-button =\n    .title = Amosar a estrutura do documento (dobre clic para expandir/contraer todos os elementos)\npdfjs-document-outline-button-label = Estrutura do documento\npdfjs-attachments-button =\n    .title = Amosar anexos\npdfjs-attachments-button-label = Anexos\npdfjs-layers-button =\n    .title = Mostrar capas (prema dúas veces para restaurar todas as capas o estado predeterminado)\npdfjs-layers-button-label = Capas\npdfjs-thumbs-button =\n    .title = Amosar miniaturas\npdfjs-thumbs-button-label = Miniaturas\npdfjs-current-outline-item-button =\n    .title = Atopar o elemento delimitado actualmente\npdfjs-current-outline-item-button-label = Elemento delimitado actualmente\npdfjs-findbar-button =\n    .title = Atopar no documento\npdfjs-findbar-button-label = Atopar\npdfjs-additional-layers = Capas adicionais\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Páxina { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatura da páxina { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Atopar\n    .placeholder = Atopar no documento…\npdfjs-find-previous-button =\n    .title = Atopar a anterior aparición da frase\npdfjs-find-previous-button-label = Anterior\npdfjs-find-next-button =\n    .title = Atopar a seguinte aparición da frase\npdfjs-find-next-button-label = Seguinte\npdfjs-find-highlight-checkbox = Realzar todo\npdfjs-find-match-case-checkbox-label = Diferenciar maiúsculas de minúsculas\npdfjs-find-match-diacritics-checkbox-label = Distinguir os diacríticos\npdfjs-find-entire-word-checkbox-label = Palabras completas\npdfjs-find-reached-top = Chegouse ao inicio do documento, continuar desde o final\npdfjs-find-reached-bottom = Chegouse ao final do documento, continuar desde o inicio\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] Coincidencia { $current } de { $total }\n       *[other] Coincidencia { $current } de { $total }\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Máis de { $limit } coincidencia\n       *[other] Máis de { $limit } coincidencias\n    }\npdfjs-find-not-found = Non se atopou a frase\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Largura da páxina\npdfjs-page-scale-fit = Axuste de páxina\npdfjs-page-scale-auto = Zoom automático\npdfjs-page-scale-actual = Tamaño actual\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Páxina { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Produciuse un erro ao cargar o PDF.\npdfjs-invalid-file-error = Ficheiro PDF danado ou non válido.\npdfjs-missing-file-error = Falta o ficheiro PDF.\npdfjs-unexpected-response-error = Resposta inesperada do servidor.\npdfjs-rendering-error = Produciuse un erro ao representar a páxina.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Anotación { $type }]\n\n## Password\n\npdfjs-password-label = Escriba o contrasinal para abrir este ficheiro PDF.\npdfjs-password-invalid = Contrasinal incorrecto. Tente de novo.\npdfjs-password-ok-button = Aceptar\npdfjs-password-cancel-button = Cancelar\npdfjs-web-fonts-disabled = Desactiváronse as fontes web:  foi imposíbel usar as fontes incrustadas no PDF.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Texto\npdfjs-editor-free-text-button-label = Texto\npdfjs-editor-ink-button =\n    .title = Debuxo\npdfjs-editor-ink-button-label = Debuxo\npdfjs-editor-stamp-button =\n    .title = Engadir ou editar imaxes\npdfjs-editor-stamp-button-label = Engadir ou editar imaxes\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-freetext-button =\n    .title = Eliminar o texto\npdfjs-editor-remove-stamp-button =\n    .title = Eliminar a imaxe\npdfjs-editor-remove-highlight-button =\n    .title = Eliminar o resaltado\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Cor\npdfjs-editor-free-text-size-input = Tamaño\npdfjs-editor-ink-color-input = Cor\npdfjs-editor-ink-thickness-input = Grosor\npdfjs-editor-ink-opacity-input = Opacidade\npdfjs-editor-stamp-add-image-button =\n    .title = Engadir imaxe\npdfjs-editor-stamp-add-image-button-label = Engadir imaxe\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Grosor\npdfjs-free-text =\n    .aria-label = Editor de texto\npdfjs-free-text-default-content = Comezar a teclear…\npdfjs-ink =\n    .aria-label = Editor de debuxos\npdfjs-ink-canvas =\n    .aria-label = Imaxe creada por unha usuaria\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Texto alternativo\npdfjs-editor-alt-text-edit-button-label = Editar o texto alternativo\npdfjs-editor-alt-text-dialog-label = Escoller unha opción\npdfjs-editor-alt-text-add-description-label = Engadir unha descrición\npdfjs-editor-alt-text-mark-decorative-label = Marcar como decorativo\npdfjs-editor-alt-text-mark-decorative-description = Utilízase para imaxes ornamentais, como bordos ou marcas de auga.\npdfjs-editor-alt-text-cancel-button = Cancelar\npdfjs-editor-alt-text-save-button = Gardar\npdfjs-editor-alt-text-decorative-tooltip = Marcado como decorativo\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Por exemplo, «Un mozo séntase á mesa para comer»\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Esquina superior esquerda: cambia o tamaño\npdfjs-editor-resizer-label-top-middle = Medio superior: cambia o tamaño\npdfjs-editor-resizer-label-top-right = Esquina superior dereita: cambia o tamaño\npdfjs-editor-resizer-label-middle-right = Medio dereito: cambia o tamaño\npdfjs-editor-resizer-label-bottom-right = Esquina inferior dereita: cambia o tamaño\npdfjs-editor-resizer-label-bottom-middle = Abaixo medio: cambia o tamaño\npdfjs-editor-resizer-label-bottom-left = Esquina inferior esquerda: cambia o tamaño\npdfjs-editor-resizer-label-middle-left = Medio esquerdo: cambia o tamaño\n\n## Color picker\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/gn/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Kuatiarogue mboyvegua\npdfjs-previous-button-label = Mboyvegua\npdfjs-next-button =\n    .title = Kuatiarogue upeigua\npdfjs-next-button-label = Upeigua\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Kuatiarogue\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = { $pagesCount } gui\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Momichĩ\npdfjs-zoom-out-button-label = Momichĩ\npdfjs-zoom-in-button =\n    .title = Mbotuicha\npdfjs-zoom-in-button-label = Mbotuicha\npdfjs-zoom-select =\n    .title = Tuichakue\npdfjs-presentation-mode-button =\n    .title = Jehechauka reko moambue\npdfjs-presentation-mode-button-label = Jehechauka reko\npdfjs-open-file-button =\n    .title = Marandurendápe jeike\npdfjs-open-file-button-label = Jeike\npdfjs-print-button =\n    .title = Monguatia\npdfjs-print-button-label = Monguatia\npdfjs-save-button =\n    .title = Ñongatu\npdfjs-save-button-label = Ñongatu\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Mboguejy\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Mboguejy\npdfjs-bookmark-button =\n    .title = Kuatiarogue ag̃agua (Ehecha URL kuatiarogue ag̃agua)\npdfjs-bookmark-button-label = Kuatiarogue Ag̃agua\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Embojuruja tembiporu’ípe\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Embojuruja tembiporu’ípe\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Tembiporu\npdfjs-tools-button-label = Tembiporu\npdfjs-first-page-button =\n    .title = Kuatiarogue ñepyrũme jeho\npdfjs-first-page-button-label = Kuatiarogue ñepyrũme jeho\npdfjs-last-page-button =\n    .title = Kuatiarogue pahápe jeho\npdfjs-last-page-button-label = Kuatiarogue pahápe jeho\npdfjs-page-rotate-cw-button =\n    .title = Aravóicha mbojere\npdfjs-page-rotate-cw-button-label = Aravóicha mbojere\npdfjs-page-rotate-ccw-button =\n    .title = Aravo rapykue gotyo mbojere\npdfjs-page-rotate-ccw-button-label = Aravo rapykue gotyo mbojere\npdfjs-cursor-text-select-tool-button =\n    .title = Emyandy moñe’ẽrã jeporavo rembiporu\npdfjs-cursor-text-select-tool-button-label = Moñe’ẽrã jeporavo rembiporu\npdfjs-cursor-hand-tool-button =\n    .title = Tembiporu po pegua myandy\npdfjs-cursor-hand-tool-button-label = Tembiporu po pegua\npdfjs-scroll-page-button =\n    .title = Eiporu kuatiarogue jeku’e\npdfjs-scroll-page-button-label = Kuatiarogue jeku’e\npdfjs-scroll-vertical-button =\n    .title = Eiporu jeku’e ykeguáva\npdfjs-scroll-vertical-button-label = Jeku’e ykeguáva\npdfjs-scroll-horizontal-button =\n    .title = Eiporu jeku’e yvate gotyo\npdfjs-scroll-horizontal-button-label = Jeku’e yvate gotyo\npdfjs-scroll-wrapped-button =\n    .title = Eiporu jeku’e mbohyrupyre\npdfjs-scroll-wrapped-button-label = Jeku’e mbohyrupyre\npdfjs-spread-none-button =\n    .title = Ani ejuaju spreads kuatiarogue ndive\npdfjs-spread-none-button-label = Spreads ỹre\npdfjs-spread-odd-button =\n    .title = Embojuaju kuatiarogue jepysokue eñepyrũvo kuatiarogue impar-vagui\npdfjs-spread-odd-button-label = Spreads impar\npdfjs-spread-even-button =\n    .title = Embojuaju kuatiarogue jepysokue eñepyrũvo kuatiarogue par-vagui\npdfjs-spread-even-button-label = Ipukuve uvei\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Kuatia mba’etee…\npdfjs-document-properties-button-label = Kuatia mba’etee…\npdfjs-document-properties-file-name = Marandurenda réra:\npdfjs-document-properties-file-size = Marandurenda tuichakue:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Teratee:\npdfjs-document-properties-author = Apohára:\npdfjs-document-properties-subject = Mba’egua:\npdfjs-document-properties-keywords = Jehero:\npdfjs-document-properties-creation-date = Teñoihague arange:\npdfjs-document-properties-modification-date = Iñambue hague arange:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Apo’ypyha:\npdfjs-document-properties-producer = PDF mbosako’iha:\npdfjs-document-properties-version = PDF mbojuehegua:\npdfjs-document-properties-page-count = Kuatiarogue papapy:\npdfjs-document-properties-page-size = Kuatiarogue tuichakue:\npdfjs-document-properties-page-size-unit-inches = Amo\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = Oĩháicha\npdfjs-document-properties-page-size-orientation-landscape = apaisado\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Kuatiañe’ẽ\npdfjs-document-properties-page-size-name-legal = Tee\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Ñanduti jahecha pya’e:\npdfjs-document-properties-linearized-yes = Añete\npdfjs-document-properties-linearized-no = Ahániri\npdfjs-document-properties-close-button = Mboty\n\n## Print\n\npdfjs-print-progress-message = Embosako’i kuatia emonguatia hag̃ua…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Heja\npdfjs-printing-not-supported = Kyhyjerã: Ñembokuatia ndojokupytypái ko kundahára ndive.\npdfjs-printing-not-ready = Kyhyjerã: Ko PDF nahenyhẽmbái oñembokuatia hag̃uáicha.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Tenda yke moambue\npdfjs-toggle-sidebar-notification-button =\n    .title = Embojopyru tenda ykegua (kuatia oguereko kuaakaha/moirũha/ñuãha)\npdfjs-toggle-sidebar-button-label = Tenda yke moambue\npdfjs-document-outline-button =\n    .title = Ehechauka kuatia rape (eikutu mokõi jey embotuicha/emomichĩ hag̃ua opavavete mba’eporu)\npdfjs-document-outline-button-label = Kuatia apopyre\npdfjs-attachments-button =\n    .title = Moirũha jehechauka\npdfjs-attachments-button-label = Moirũha\npdfjs-layers-button =\n    .title = Ehechauka ñuãha (eikutu jo’a emomba’apo hag̃ua opaite ñuãha tekoypýpe)\npdfjs-layers-button-label = Ñuãha\npdfjs-thumbs-button =\n    .title = Mba’emirĩ jehechauka\npdfjs-thumbs-button-label = Mba’emirĩ\npdfjs-current-outline-item-button =\n    .title = Eheka mba’eporu ag̃aguaitéva\npdfjs-current-outline-item-button-label = Mba’eporu ag̃aguaitéva\npdfjs-findbar-button =\n    .title = Kuatiápe jeheka\npdfjs-findbar-button-label = Juhu\npdfjs-additional-layers = Ñuãha moirũguáva\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Kuatiarogue { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Kuatiarogue mba’emirĩ { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Juhu\n    .placeholder = Kuatiápe jejuhu…\npdfjs-find-previous-button =\n    .title = Ejuhu ñe’ẽrysýi osẽ’ypy hague\npdfjs-find-previous-button-label = Mboyvegua\npdfjs-find-next-button =\n    .title = Eho ñe’ẽ juhupyre upeiguávape\npdfjs-find-next-button-label = Upeigua\npdfjs-find-highlight-checkbox = Embojekuaavepa\npdfjs-find-match-case-checkbox-label = Ejesareko taiguasu/taimichĩre\npdfjs-find-match-diacritics-checkbox-label = Diacrítico moñondive\npdfjs-find-entire-word-checkbox-label = Ñe’ẽ oĩmbáva\npdfjs-find-reached-top = Ojehupyty kuatia ñepyrũ, oku’ejeýta kuatia paha guive\npdfjs-find-reached-bottom = Ojehupyty kuatia paha, oku’ejeýta kuatia ñepyrũ guive\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } ha { $total } ojueheguáva\n       *[other] { $current } ha { $total } ojueheguáva\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Hetave { $limit } ojueheguáva\n       *[other] Hetave { $limit } ojueheguáva\n    }\npdfjs-find-not-found = Ñe’ẽrysýi ojejuhu’ỹva\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Kuatiarogue pekue\npdfjs-page-scale-fit = Kuatiarogue ñemoĩporã\npdfjs-page-scale-auto = Tuichakue ijeheguíva\npdfjs-page-scale-actual = Tuichakue ag̃agua\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Kuatiarogue { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Oiko jejavy PDF oñemyeñyhẽnguévo.\npdfjs-invalid-file-error = PDF marandurenda ndoikóiva térã ivaipyréva.\npdfjs-missing-file-error = Ndaipóri PDF marandurenda\npdfjs-unexpected-response-error = Mohendahavusu mbohovái eha’ãrõ’ỹva.\npdfjs-rendering-error = Oiko jejavy ehechaukasévo kuatiarogue.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Jehaipy { $type }]\n\n## Password\n\npdfjs-password-label = Emoinge ñe’ẽñemi eipe’a hag̃ua ko marandurenda PDF.\npdfjs-password-invalid = Ñe’ẽñemi ndoikóiva. Eha’ã jey.\npdfjs-password-ok-button = MONEĨ\npdfjs-password-cancel-button = Heja\npdfjs-web-fonts-disabled = Ñanduti taity oñemongéma: ndaikatumo’ãi eiporu PDF jehai’íva taity.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Moñe’ẽrã\npdfjs-editor-free-text-button-label = Moñe’ẽrã\npdfjs-editor-ink-button =\n    .title = Moha’ãnga\npdfjs-editor-ink-button-label = Moha’ãnga\npdfjs-editor-stamp-button =\n    .title = Embojuaju térã embosako’i ta’ãnga\npdfjs-editor-stamp-button-label = Embojuaju térã embosako’i ta’ãnga\npdfjs-editor-highlight-button =\n    .title = Mbosa’y\npdfjs-editor-highlight-button-label = Mbosa’y\npdfjs-highlight-floating-button =\n    .title = Mbosa’y\npdfjs-highlight-floating-button1 =\n    .title = Mbosa’y\n    .aria-label = Mbosa’y\npdfjs-highlight-floating-button-label = Mbosa’y\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Emboguete ta’ãnga\npdfjs-editor-remove-freetext-button =\n    .title = Emboguete moñe’ẽrã\npdfjs-editor-remove-stamp-button =\n    .title = Emboguete ta’ãnga\npdfjs-editor-remove-highlight-button =\n    .title = Eipe’a jehechaveha\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Sa’y\npdfjs-editor-free-text-size-input = Tuichakue\npdfjs-editor-ink-color-input = Sa’y\npdfjs-editor-ink-thickness-input = Anambusu\npdfjs-editor-ink-opacity-input = Pytũngy\npdfjs-editor-stamp-add-image-button =\n    .title = Embojuaju ta’ãnga\npdfjs-editor-stamp-add-image-button-label = Embojuaju ta’ãnga\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Anambusu\npdfjs-editor-free-highlight-thickness-title =\n    .title = Emoambue anambusukue embosa’ývo mba’eporu ha’e’ỹva moñe’ẽrã\npdfjs-free-text =\n    .aria-label = Moñe’ẽrã moheñoiha\npdfjs-free-text-default-content = Ehai ñepyrũ…\npdfjs-ink =\n    .aria-label = Ta’ãnga moheñoiha\npdfjs-ink-canvas =\n    .aria-label = Ta’ãnga omoheñóiva poruhára\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Moñe’ẽrã mokõiháva\npdfjs-editor-alt-text-edit-button-label = Embojuruja moñe’ẽrã mokõiháva\npdfjs-editor-alt-text-dialog-label = Eiporavo poravorã\npdfjs-editor-alt-text-dialog-description = Moñe’ẽrã ykepegua (moñe’ẽrã ykepegua) nepytyvõ nderehecháiramo ta’ãnga térã nahenyhẽiramo.\npdfjs-editor-alt-text-add-description-label = Embojuaju ñemoha’ãnga\npdfjs-editor-alt-text-add-description-description = Ehaimi 1 térã 2 ñe’ẽjuaju oñe’ẽva pe téma rehe, ijere térã mba’eapóre.\npdfjs-editor-alt-text-mark-decorative-label = Emongurusu jeguakárõ\npdfjs-editor-alt-text-mark-decorative-description = Ojeporu ta’ãnga jeguakarã, tembe’y térã ta’ãnga ruguarãramo.\npdfjs-editor-alt-text-cancel-button = Heja\npdfjs-editor-alt-text-save-button = Ñongatu\npdfjs-editor-alt-text-decorative-tooltip = Jeguakárõ mongurusupyre\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Techapyrã: “Peteĩ mitãrusu oguapy mesápe okaru hag̃ua”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Yvate asu gotyo — emoambue tuichakue\npdfjs-editor-resizer-label-top-middle = Yvate mbytépe — emoambue tuichakue\npdfjs-editor-resizer-label-top-right = Yvate akatúape — emoambue tuichakue\npdfjs-editor-resizer-label-middle-right = Mbyte akatúape — emoambue tuichakue\npdfjs-editor-resizer-label-bottom-right = Yvy gotyo akatúape — emoambue tuichakue\npdfjs-editor-resizer-label-bottom-middle = Yvy gotyo mbytépe — emoambue tuichakue\npdfjs-editor-resizer-label-bottom-left = Iguýpe asu gotyo — emoambue tuichakue\npdfjs-editor-resizer-label-middle-left = Mbyte asu gotyo — emoambue tuichakue\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Jehechaveha sa’y\npdfjs-editor-colorpicker-button =\n    .title = Emoambue sa’y\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Sa’y poravopyrã\npdfjs-editor-colorpicker-yellow =\n    .title = Sa’yju\npdfjs-editor-colorpicker-green =\n    .title = Hovyũ\npdfjs-editor-colorpicker-blue =\n    .title = Hovy\npdfjs-editor-colorpicker-pink =\n    .title = Pytãngy\npdfjs-editor-colorpicker-red =\n    .title = Pyha\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Techaukapa\npdfjs-editor-highlight-show-all-button =\n    .title = Techaukapa\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/gu-IN/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = પહેલાનુ પાનું\npdfjs-previous-button-label = પહેલાનુ\npdfjs-next-button =\n    .title = આગળનુ પાનું\npdfjs-next-button-label = આગળનું\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = પાનું\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = નો { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } નો { $pagesCount })\npdfjs-zoom-out-button =\n    .title = મોટુ કરો\npdfjs-zoom-out-button-label = મોટુ કરો\npdfjs-zoom-in-button =\n    .title = નાનું કરો\npdfjs-zoom-in-button-label = નાનું કરો\npdfjs-zoom-select =\n    .title = નાનું મોટુ કરો\npdfjs-presentation-mode-button =\n    .title = રજૂઆત સ્થિતિમાં જાવ\npdfjs-presentation-mode-button-label = રજૂઆત સ્થિતિ\npdfjs-open-file-button =\n    .title = ફાઇલ ખોલો\npdfjs-open-file-button-label = ખોલો\npdfjs-print-button =\n    .title = છાપો\npdfjs-print-button-label = છારો\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = સાધનો\npdfjs-tools-button-label = સાધનો\npdfjs-first-page-button =\n    .title = પહેલાં પાનામાં જાવ\npdfjs-first-page-button-label = પ્રથમ પાનાં પર જાવ\npdfjs-last-page-button =\n    .title = છેલ્લા પાનાં પર જાવ\npdfjs-last-page-button-label = છેલ્લા પાનાં પર જાવ\npdfjs-page-rotate-cw-button =\n    .title = ઘડિયાળનાં કાંટા તરફ ફેરવો\npdfjs-page-rotate-cw-button-label = ઘડિયાળનાં કાંટા તરફ ફેરવો\npdfjs-page-rotate-ccw-button =\n    .title = ઘડિયાળનાં કાંટાની ઉલટી દિશામાં ફેરવો\npdfjs-page-rotate-ccw-button-label = ઘડિયાળનાં કાંટાની વિરુદ્દ ફેરવો\npdfjs-cursor-text-select-tool-button =\n    .title = ટેક્સ્ટ પસંદગી ટૂલ સક્ષમ કરો\npdfjs-cursor-text-select-tool-button-label = ટેક્સ્ટ પસંદગી ટૂલ\npdfjs-cursor-hand-tool-button =\n    .title = હાથનાં સાધનને સક્રિય કરો\npdfjs-cursor-hand-tool-button-label = હેન્ડ ટૂલ\npdfjs-scroll-vertical-button =\n    .title = ઊભી સ્ક્રોલિંગનો ઉપયોગ કરો\npdfjs-scroll-vertical-button-label = ઊભી સ્ક્રોલિંગ\npdfjs-scroll-horizontal-button =\n    .title = આડી સ્ક્રોલિંગનો ઉપયોગ કરો\npdfjs-scroll-horizontal-button-label = આડી સ્ક્રોલિંગ\npdfjs-scroll-wrapped-button =\n    .title = આવરિત સ્ક્રોલિંગનો ઉપયોગ કરો\npdfjs-scroll-wrapped-button-label = આવરિત સ્ક્રોલિંગ\npdfjs-spread-none-button =\n    .title = પૃષ્ઠ સ્પ્રેડમાં જોડાવશો નહીં\npdfjs-spread-none-button-label = કોઈ સ્પ્રેડ નથી\npdfjs-spread-odd-button =\n    .title = એકી-ક્રમાંકિત પૃષ્ઠો સાથે પ્રારંભ થતાં પૃષ્ઠ સ્પ્રેડમાં જોડાઓ\npdfjs-spread-odd-button-label = એકી સ્પ્રેડ્સ\npdfjs-spread-even-button =\n    .title = નંબર-ક્રમાંકિત પૃષ્ઠોથી શરૂ થતાં પૃષ્ઠ સ્પ્રેડમાં જોડાઓ\npdfjs-spread-even-button-label = સરખું ફેલાવવું\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = દસ્તાવેજ ગુણધર્મો…\npdfjs-document-properties-button-label = દસ્તાવેજ ગુણધર્મો…\npdfjs-document-properties-file-name = ફાઇલ નામ:\npdfjs-document-properties-file-size = ફાઇલ માપ:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } બાઇટ)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } બાઇટ)\npdfjs-document-properties-title = શીર્ષક:\npdfjs-document-properties-author = લેખક:\npdfjs-document-properties-subject = વિષય:\npdfjs-document-properties-keywords = કિવર્ડ:\npdfjs-document-properties-creation-date = નિર્માણ તારીખ:\npdfjs-document-properties-modification-date = ફેરફાર તારીખ:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = નિર્માતા:\npdfjs-document-properties-producer = PDF નિર્માતા:\npdfjs-document-properties-version = PDF આવૃત્તિ:\npdfjs-document-properties-page-count = પાનાં ગણતરી:\npdfjs-document-properties-page-size = પૃષ્ઠનું કદ:\npdfjs-document-properties-page-size-unit-inches = ઇંચ\npdfjs-document-properties-page-size-unit-millimeters = મીમી\npdfjs-document-properties-page-size-orientation-portrait = ઉભું\npdfjs-document-properties-page-size-orientation-landscape = આડુ\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = પત્ર\npdfjs-document-properties-page-size-name-legal = કાયદાકીય\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = ઝડપી વૅબ દૃશ્ય:\npdfjs-document-properties-linearized-yes = હા\npdfjs-document-properties-linearized-no = ના\npdfjs-document-properties-close-button = બંધ કરો\n\n## Print\n\npdfjs-print-progress-message = છાપકામ માટે દસ્તાવેજ તૈયાર કરી રહ્યા છે…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = રદ કરો\npdfjs-printing-not-supported = ચેતવણી: છાપવાનું આ બ્રાઉઝર દ્દારા સંપૂર્ણપણે આધારભૂત નથી.\npdfjs-printing-not-ready = Warning: PDF એ છાપવા માટે સંપૂર્ણપણે લાવેલ છે.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = ટૉગલ બાજુપટ્ટી\npdfjs-toggle-sidebar-button-label = ટૉગલ બાજુપટ્ટી\npdfjs-document-outline-button =\n    .title = દસ્તાવેજની રૂપરેખા બતાવો(બધી આઇટમ્સને વિસ્તૃત/સંકુચિત કરવા માટે ડબલ-ક્લિક કરો)\npdfjs-document-outline-button-label = દસ્તાવેજ રૂપરેખા\npdfjs-attachments-button =\n    .title = જોડાણોને બતાવો\npdfjs-attachments-button-label = જોડાણો\npdfjs-thumbs-button =\n    .title = થંબનેલ્સ બતાવો\npdfjs-thumbs-button-label = થંબનેલ્સ\npdfjs-findbar-button =\n    .title = દસ્તાવેજમાં શોધો\npdfjs-findbar-button-label = શોધો\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = પાનું { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = પાનાં { $page } નું થંબનેલ્સ\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = શોધો\n    .placeholder = દસ્તાવેજમાં શોધો…\npdfjs-find-previous-button =\n    .title = શબ્દસમૂહની પાછલી ઘટનાને શોધો\npdfjs-find-previous-button-label = પહેલાંનુ\npdfjs-find-next-button =\n    .title = શબ્દસમૂહની આગળની ઘટનાને શોધો\npdfjs-find-next-button-label = આગળનું\npdfjs-find-highlight-checkbox = બધુ પ્રકાશિત કરો\npdfjs-find-match-case-checkbox-label = કેસ બંધબેસાડો\npdfjs-find-entire-word-checkbox-label = સંપૂર્ણ શબ્દો\npdfjs-find-reached-top = દસ્તાવેજનાં ટોચે પહોંચી ગયા, તળિયેથી ચાલુ કરેલ હતુ\npdfjs-find-reached-bottom = દસ્તાવેજનાં અંતે પહોંચી ગયા, ઉપરથી ચાલુ કરેલ હતુ\npdfjs-find-not-found = શબ્દસમૂહ મળ્યુ નથી\n\n## Predefined zoom values\n\npdfjs-page-scale-width = પાનાની પહોળાઇ\npdfjs-page-scale-fit = પાનું બંધબેસતુ\npdfjs-page-scale-auto = આપમેળે નાનુંમોટુ કરો\npdfjs-page-scale-actual = ચોક્કસ માપ\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = ભૂલ ઉદ્ભવી જ્યારે PDF ને લાવી રહ્યા હોય.\npdfjs-invalid-file-error = અયોગ્ય અથવા ભાંગેલ PDF ફાઇલ.\npdfjs-missing-file-error = ગુમ થયેલ PDF ફાઇલ.\npdfjs-unexpected-response-error = અનપેક્ષિત સર્વર પ્રતિસાદ.\npdfjs-rendering-error = ભૂલ ઉદ્ભવી જ્યારે પાનાંનુ રેન્ડ કરી રહ્યા હોય.\n\n## Annotations\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Annotation]\n\n## Password\n\npdfjs-password-label = આ PDF ફાઇલને ખોલવા પાસવર્ડને દાખલ કરો.\npdfjs-password-invalid = અયોગ્ય પાસવર્ડ. મહેરબાની કરીને ફરી પ્રયત્ન કરો.\npdfjs-password-ok-button = બરાબર\npdfjs-password-cancel-button = રદ કરો\npdfjs-web-fonts-disabled = વેબ ફોન્ટ નિષ્ક્રિય થયેલ છે: ઍમ્બેડ થયેલ PDF ફોન્ટને વાપરવાનું અસમર્થ.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/he/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = דף קודם\npdfjs-previous-button-label = קודם\npdfjs-next-button =\n    .title = דף הבא\npdfjs-next-button-label = הבא\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = דף\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = מתוך { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } מתוך { $pagesCount })\npdfjs-zoom-out-button =\n    .title = התרחקות\npdfjs-zoom-out-button-label = התרחקות\npdfjs-zoom-in-button =\n    .title = התקרבות\npdfjs-zoom-in-button-label = התקרבות\npdfjs-zoom-select =\n    .title = מרחק מתצוגה\npdfjs-presentation-mode-button =\n    .title = מעבר למצב מצגת\npdfjs-presentation-mode-button-label = מצב מצגת\npdfjs-open-file-button =\n    .title = פתיחת קובץ\npdfjs-open-file-button-label = פתיחה\npdfjs-print-button =\n    .title = הדפסה\npdfjs-print-button-label = הדפסה\npdfjs-save-button =\n    .title = שמירה\npdfjs-save-button-label = שמירה\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = הורדה\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = הורדה\npdfjs-bookmark-button =\n    .title = עמוד נוכחי (הצגת כתובת האתר מהעמוד הנוכחי)\npdfjs-bookmark-button-label = עמוד נוכחי\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = פתיחה ביישום\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = פתיחה ביישום\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = כלים\npdfjs-tools-button-label = כלים\npdfjs-first-page-button =\n    .title = מעבר לעמוד הראשון\npdfjs-first-page-button-label = מעבר לעמוד הראשון\npdfjs-last-page-button =\n    .title = מעבר לעמוד האחרון\npdfjs-last-page-button-label = מעבר לעמוד האחרון\npdfjs-page-rotate-cw-button =\n    .title = הטיה עם כיוון השעון\npdfjs-page-rotate-cw-button-label = הטיה עם כיוון השעון\npdfjs-page-rotate-ccw-button =\n    .title = הטיה כנגד כיוון השעון\npdfjs-page-rotate-ccw-button-label = הטיה כנגד כיוון השעון\npdfjs-cursor-text-select-tool-button =\n    .title = הפעלת כלי בחירת טקסט\npdfjs-cursor-text-select-tool-button-label = כלי בחירת טקסט\npdfjs-cursor-hand-tool-button =\n    .title = הפעלת כלי היד\npdfjs-cursor-hand-tool-button-label = כלי יד\npdfjs-scroll-page-button =\n    .title = שימוש בגלילת עמוד\npdfjs-scroll-page-button-label = גלילת עמוד\npdfjs-scroll-vertical-button =\n    .title = שימוש בגלילה אנכית\npdfjs-scroll-vertical-button-label = גלילה אנכית\npdfjs-scroll-horizontal-button =\n    .title = שימוש בגלילה אופקית\npdfjs-scroll-horizontal-button-label = גלילה אופקית\npdfjs-scroll-wrapped-button =\n    .title = שימוש בגלילה רציפה\npdfjs-scroll-wrapped-button-label = גלילה רציפה\npdfjs-spread-none-button =\n    .title = לא לצרף מפתחי עמודים\npdfjs-spread-none-button-label = ללא מפתחים\npdfjs-spread-odd-button =\n    .title = צירוף מפתחי עמודים שמתחילים בדפים עם מספרים אי־זוגיים\npdfjs-spread-odd-button-label = מפתחים אי־זוגיים\npdfjs-spread-even-button =\n    .title = צירוף מפתחי עמודים שמתחילים בדפים עם מספרים זוגיים\npdfjs-spread-even-button-label = מפתחים זוגיים\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = מאפייני מסמך…\npdfjs-document-properties-button-label = מאפייני מסמך…\npdfjs-document-properties-file-name = שם קובץ:\npdfjs-document-properties-file-size = גודל הקובץ:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } ק״ב ({ $size_b } בתים)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } מ״ב ({ $size_b } בתים)\npdfjs-document-properties-title = כותרת:\npdfjs-document-properties-author = מחבר:\npdfjs-document-properties-subject = נושא:\npdfjs-document-properties-keywords = מילות מפתח:\npdfjs-document-properties-creation-date = תאריך יצירה:\npdfjs-document-properties-modification-date = תאריך שינוי:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = יוצר:\npdfjs-document-properties-producer = יצרן PDF:\npdfjs-document-properties-version = גרסת PDF:\npdfjs-document-properties-page-count = מספר דפים:\npdfjs-document-properties-page-size = גודל העמוד:\npdfjs-document-properties-page-size-unit-inches = אינ׳\npdfjs-document-properties-page-size-unit-millimeters = מ״מ\npdfjs-document-properties-page-size-orientation-portrait = לאורך\npdfjs-document-properties-page-size-orientation-landscape = לרוחב\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = מכתב\npdfjs-document-properties-page-size-name-legal = דף משפטי\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = תצוגת דף מהירה:\npdfjs-document-properties-linearized-yes = כן\npdfjs-document-properties-linearized-no = לא\npdfjs-document-properties-close-button = סגירה\n\n## Print\n\npdfjs-print-progress-message = מסמך בהכנה להדפסה…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = ביטול\npdfjs-printing-not-supported = אזהרה: הדפסה אינה נתמכת במלואה בדפדפן זה.\npdfjs-printing-not-ready = אזהרה: מסמך ה־PDF לא נטען לחלוטין עד מצב שמאפשר הדפסה.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = הצגה/הסתרה של סרגל הצד\npdfjs-toggle-sidebar-notification-button =\n    .title = החלפת תצוגת סרגל צד (מסמך שמכיל תוכן עניינים/קבצים מצורפים/שכבות)\npdfjs-toggle-sidebar-button-label = הצגה/הסתרה של סרגל הצד\npdfjs-document-outline-button =\n    .title = הצגת תוכן העניינים של המסמך (לחיצה כפולה כדי להרחיב או לצמצם את כל הפריטים)\npdfjs-document-outline-button-label = תוכן העניינים של המסמך\npdfjs-attachments-button =\n    .title = הצגת צרופות\npdfjs-attachments-button-label = צרופות\npdfjs-layers-button =\n    .title = הצגת שכבות (יש ללחוץ לחיצה כפולה כדי לאפס את כל השכבות למצב ברירת המחדל)\npdfjs-layers-button-label = שכבות\npdfjs-thumbs-button =\n    .title = הצגת תצוגה מקדימה\npdfjs-thumbs-button-label = תצוגה מקדימה\npdfjs-current-outline-item-button =\n    .title = מציאת פריט תוכן העניינים הנוכחי\npdfjs-current-outline-item-button-label = פריט תוכן העניינים הנוכחי\npdfjs-findbar-button =\n    .title = חיפוש במסמך\npdfjs-findbar-button-label = חיפוש\npdfjs-additional-layers = שכבות נוספות\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = עמוד { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = תצוגה מקדימה של עמוד { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = חיפוש\n    .placeholder = חיפוש במסמך…\npdfjs-find-previous-button =\n    .title = מציאת המופע הקודם של הביטוי\npdfjs-find-previous-button-label = קודם\npdfjs-find-next-button =\n    .title = מציאת המופע הבא של הביטוי\npdfjs-find-next-button-label = הבא\npdfjs-find-highlight-checkbox = הדגשת הכול\npdfjs-find-match-case-checkbox-label = התאמת אותיות\npdfjs-find-match-diacritics-checkbox-label = התאמה דיאקריטית\npdfjs-find-entire-word-checkbox-label = מילים שלמות\npdfjs-find-reached-top = הגיע לראש הדף, ממשיך מלמטה\npdfjs-find-reached-bottom = הגיע לסוף הדף, ממשיך מלמעלה\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } מתוך { $total } תוצאות\n       *[other] { $current } מתוך { $total } תוצאות\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] יותר מתוצאה אחת\n       *[other] יותר מ־{ $limit } תוצאות\n    }\npdfjs-find-not-found = הביטוי לא נמצא\n\n## Predefined zoom values\n\npdfjs-page-scale-width = רוחב העמוד\npdfjs-page-scale-fit = התאמה לעמוד\npdfjs-page-scale-auto = מרחק מתצוגה אוטומטי\npdfjs-page-scale-actual = גודל אמיתי\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = עמוד { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = אירעה שגיאה בעת טעינת ה־PDF.\npdfjs-invalid-file-error = קובץ PDF פגום או לא תקין.\npdfjs-missing-file-error = קובץ PDF חסר.\npdfjs-unexpected-response-error = תגובת שרת לא צפויה.\npdfjs-rendering-error = אירעה שגיאה בעת עיבוד הדף.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [הערת { $type }]\n\n## Password\n\npdfjs-password-label = נא להכניס את הססמה לפתיחת קובץ PDF זה.\npdfjs-password-invalid = ססמה שגויה. נא לנסות שנית.\npdfjs-password-ok-button = אישור\npdfjs-password-cancel-button = ביטול\npdfjs-web-fonts-disabled = גופני רשת מנוטרלים: לא ניתן להשתמש בגופני PDF מוטבעים.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = טקסט\npdfjs-editor-free-text-button-label = טקסט\npdfjs-editor-ink-button =\n    .title = ציור\npdfjs-editor-ink-button-label = ציור\npdfjs-editor-stamp-button =\n    .title = הוספה או עריכת תמונות\npdfjs-editor-stamp-button-label = הוספה או עריכת תמונות\npdfjs-editor-highlight-button =\n    .title = סימון\npdfjs-editor-highlight-button-label = סימון\npdfjs-highlight-floating-button =\n    .title = סימון\npdfjs-highlight-floating-button1 =\n    .title = סימון\n    .aria-label = סימון\npdfjs-highlight-floating-button-label = סימון\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = הסרת ציור\npdfjs-editor-remove-freetext-button =\n    .title = הסרת טקסט\npdfjs-editor-remove-stamp-button =\n    .title = הסרת תמונה\npdfjs-editor-remove-highlight-button =\n    .title = הסרת הדגשה\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = צבע\npdfjs-editor-free-text-size-input = גודל\npdfjs-editor-ink-color-input = צבע\npdfjs-editor-ink-thickness-input = עובי\npdfjs-editor-ink-opacity-input = אטימות\npdfjs-editor-stamp-add-image-button =\n    .title = הוספת תמונה\npdfjs-editor-stamp-add-image-button-label = הוספת תמונה\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = עובי\npdfjs-editor-free-highlight-thickness-title =\n    .title = שינוי עובי בעת הדגשת פריטים שאינם טקסט\npdfjs-free-text =\n    .aria-label = עורך טקסט\npdfjs-free-text-default-content = להתחיל להקליד…\npdfjs-ink =\n    .aria-label = עורך ציור\npdfjs-ink-canvas =\n    .aria-label = תמונה שנוצרה על־ידי משתמש\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = טקסט חלופי\npdfjs-editor-alt-text-edit-button-label = עריכת טקסט חלופי\npdfjs-editor-alt-text-dialog-label = בחירת אפשרות\npdfjs-editor-alt-text-dialog-description = טקסט חלופי עוזר כשאנשים לא יכולים לראות את התמונה או כשהיא לא נטענת.\npdfjs-editor-alt-text-add-description-label = הוספת תיאור\npdfjs-editor-alt-text-add-description-description = כדאי לתאר במשפט אחד או שניים את הנושא, התפאורה או הפעולות.\npdfjs-editor-alt-text-mark-decorative-label = סימון כדקורטיבי\npdfjs-editor-alt-text-mark-decorative-description = זה משמש לתמונות נוי, כמו גבולות או סימני מים.\npdfjs-editor-alt-text-cancel-button = ביטול\npdfjs-editor-alt-text-save-button = שמירה\npdfjs-editor-alt-text-decorative-tooltip = מסומן כדקורטיבי\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = לדוגמה, ״גבר צעיר מתיישב ליד שולחן לאכול ארוחה״\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = פינה שמאלית עליונה - שינוי גודל\npdfjs-editor-resizer-label-top-middle = למעלה באמצע - שינוי גודל\npdfjs-editor-resizer-label-top-right = פינה ימנית עליונה - שינוי גודל\npdfjs-editor-resizer-label-middle-right = ימינה באמצע - שינוי גודל\npdfjs-editor-resizer-label-bottom-right = פינה ימנית תחתונה - שינוי גודל\npdfjs-editor-resizer-label-bottom-middle = למטה באמצע - שינוי גודל\npdfjs-editor-resizer-label-bottom-left = פינה שמאלית תחתונה - שינוי גודל\npdfjs-editor-resizer-label-middle-left = שמאלה באמצע - שינוי גודל\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = צבע הדגשה\npdfjs-editor-colorpicker-button =\n    .title = שינוי צבע\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = בחירת צבע\npdfjs-editor-colorpicker-yellow =\n    .title = צהוב\npdfjs-editor-colorpicker-green =\n    .title = ירוק\npdfjs-editor-colorpicker-blue =\n    .title = כחול\npdfjs-editor-colorpicker-pink =\n    .title = ורוד\npdfjs-editor-colorpicker-red =\n    .title = אדום\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = הצגת הכול\npdfjs-editor-highlight-show-all-button =\n    .title = הצגת הכול\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/hi-IN/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = पिछला पृष्ठ\npdfjs-previous-button-label = पिछला\npdfjs-next-button =\n    .title = अगला पृष्ठ\npdfjs-next-button-label = आगे\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = पृष्ठ:\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = { $pagesCount } का\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount })\npdfjs-zoom-out-button =\n    .title = छोटा करें\npdfjs-zoom-out-button-label = छोटा करें\npdfjs-zoom-in-button =\n    .title = बड़ा करें\npdfjs-zoom-in-button-label = बड़ा करें\npdfjs-zoom-select =\n    .title = बड़ा-छोटा करें\npdfjs-presentation-mode-button =\n    .title = प्रस्तुति अवस्था में जाएँ\npdfjs-presentation-mode-button-label = प्रस्तुति अवस्था\npdfjs-open-file-button =\n    .title = फ़ाइल खोलें\npdfjs-open-file-button-label = खोलें\npdfjs-print-button =\n    .title = छापें\npdfjs-print-button-label = छापें\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = ऐप में खोलें\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = ऐप में खोलें\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = औज़ार\npdfjs-tools-button-label = औज़ार\npdfjs-first-page-button =\n    .title = प्रथम पृष्ठ पर जाएँ\npdfjs-first-page-button-label = प्रथम पृष्ठ पर जाएँ\npdfjs-last-page-button =\n    .title = अंतिम पृष्ठ पर जाएँ\npdfjs-last-page-button-label = अंतिम पृष्ठ पर जाएँ\npdfjs-page-rotate-cw-button =\n    .title = घड़ी की दिशा में घुमाएँ\npdfjs-page-rotate-cw-button-label = घड़ी की दिशा में घुमाएँ\npdfjs-page-rotate-ccw-button =\n    .title = घड़ी की दिशा से उल्टा घुमाएँ\npdfjs-page-rotate-ccw-button-label = घड़ी की दिशा से उल्टा घुमाएँ\npdfjs-cursor-text-select-tool-button =\n    .title = पाठ चयन उपकरण सक्षम करें\npdfjs-cursor-text-select-tool-button-label = पाठ चयन उपकरण\npdfjs-cursor-hand-tool-button =\n    .title = हस्त उपकरण सक्षम करें\npdfjs-cursor-hand-tool-button-label = हस्त उपकरण\npdfjs-scroll-vertical-button =\n    .title = लंबवत स्क्रॉलिंग का उपयोग करें\npdfjs-scroll-vertical-button-label = लंबवत स्क्रॉलिंग\npdfjs-scroll-horizontal-button =\n    .title = क्षितिजिय स्क्रॉलिंग का उपयोग करें\npdfjs-scroll-horizontal-button-label = क्षितिजिय स्क्रॉलिंग\npdfjs-scroll-wrapped-button =\n    .title = व्राप्पेड स्क्रॉलिंग का उपयोग करें\npdfjs-spread-none-button-label = कोई स्प्रेड उपलब्ध नहीं\npdfjs-spread-odd-button =\n    .title = विषम-क्रमांकित पृष्ठों से प्रारंभ होने वाले पृष्ठ स्प्रेड में शामिल हों\npdfjs-spread-odd-button-label = विषम फैलाव\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = दस्तावेज़ विशेषता...\npdfjs-document-properties-button-label = दस्तावेज़ विशेषता...\npdfjs-document-properties-file-name = फ़ाइल नाम:\npdfjs-document-properties-file-size = फाइल आकारः\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = शीर्षक:\npdfjs-document-properties-author = लेखकः\npdfjs-document-properties-subject = विषय:\npdfjs-document-properties-keywords = कुंजी-शब्द:\npdfjs-document-properties-creation-date = निर्माण दिनांक:\npdfjs-document-properties-modification-date = संशोधन दिनांक:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = निर्माता:\npdfjs-document-properties-producer = PDF उत्पादक:\npdfjs-document-properties-version = PDF संस्करण:\npdfjs-document-properties-page-count = पृष्ठ गिनती:\npdfjs-document-properties-page-size = पृष्ठ आकार:\npdfjs-document-properties-page-size-unit-inches = इंच\npdfjs-document-properties-page-size-unit-millimeters = मिमी\npdfjs-document-properties-page-size-orientation-portrait = पोर्ट्रेट\npdfjs-document-properties-page-size-orientation-landscape = लैंडस्केप\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = पत्र\npdfjs-document-properties-page-size-name-legal = क़ानूनी\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = तीव्र वेब व्यू:\npdfjs-document-properties-linearized-yes = हाँ\npdfjs-document-properties-linearized-no = नहीं\npdfjs-document-properties-close-button = बंद करें\n\n## Print\n\npdfjs-print-progress-message = छपाई के लिए दस्तावेज़ को तैयार किया जा रहा है...\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = रद्द करें\npdfjs-printing-not-supported = चेतावनी: इस ब्राउज़र पर छपाई पूरी तरह से समर्थित नहीं है.\npdfjs-printing-not-ready = चेतावनी: PDF छपाई के लिए पूरी तरह से लोड नहीं है.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = स्लाइडर टॉगल करें\npdfjs-toggle-sidebar-button-label = स्लाइडर टॉगल करें\npdfjs-document-outline-button =\n    .title = दस्तावेज़ की रूपरेखा दिखाइए (सारी वस्तुओं को फलने अथवा समेटने के लिए दो बार क्लिक करें)\npdfjs-document-outline-button-label = दस्तावेज़ आउटलाइन\npdfjs-attachments-button =\n    .title = संलग्नक दिखायें\npdfjs-attachments-button-label = संलग्नक\npdfjs-thumbs-button =\n    .title = लघुछवियाँ दिखाएँ\npdfjs-thumbs-button-label = लघु छवि\npdfjs-findbar-button =\n    .title = दस्तावेज़ में ढूँढ़ें\npdfjs-findbar-button-label = ढूँढें\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = पृष्ठ { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = पृष्ठ { $page } की लघु-छवि\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = ढूँढें\n    .placeholder = दस्तावेज़ में खोजें...\npdfjs-find-previous-button =\n    .title = वाक्यांश की पिछली उपस्थिति ढूँढ़ें\npdfjs-find-previous-button-label = पिछला\npdfjs-find-next-button =\n    .title = वाक्यांश की अगली उपस्थिति ढूँढ़ें\npdfjs-find-next-button-label = अगला\npdfjs-find-highlight-checkbox = सभी आलोकित करें\npdfjs-find-match-case-checkbox-label = मिलान स्थिति\npdfjs-find-entire-word-checkbox-label = संपूर्ण शब्द\npdfjs-find-reached-top = पृष्ठ के ऊपर पहुंच गया, नीचे से जारी रखें\npdfjs-find-reached-bottom = पृष्ठ के नीचे में जा पहुँचा, ऊपर से जारी\npdfjs-find-not-found = वाक्यांश नहीं मिला\n\n## Predefined zoom values\n\npdfjs-page-scale-width = पृष्ठ चौड़ाई\npdfjs-page-scale-fit = पृष्ठ फिट\npdfjs-page-scale-auto = स्वचालित जूम\npdfjs-page-scale-actual = वास्तविक आकार\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = PDF लोड करते समय एक त्रुटि हुई.\npdfjs-invalid-file-error = अमान्य या भ्रष्ट PDF फ़ाइल.\npdfjs-missing-file-error = अनुपस्थित PDF फ़ाइल.\npdfjs-unexpected-response-error = अप्रत्याशित सर्वर प्रतिक्रिया.\npdfjs-rendering-error = पृष्ठ रेंडरिंग के दौरान त्रुटि आई.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Annotation]\n\n## Password\n\npdfjs-password-label = इस PDF फ़ाइल को खोलने के लिए कृपया कूटशब्द भरें.\npdfjs-password-invalid = अवैध कूटशब्द, कृपया फिर कोशिश करें.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = रद्द करें\npdfjs-web-fonts-disabled = वेब फॉन्ट्स निष्क्रिय हैं: अंतःस्थापित PDF फॉन्टस के उपयोग में असमर्थ.\n\n## Editing\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = रंग\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/hr/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Prethodna stranica\npdfjs-previous-button-label = Prethodna\npdfjs-next-button =\n    .title = Sljedeća stranica\npdfjs-next-button-label = Sljedeća\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Stranica\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = od { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } od { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Umanji\npdfjs-zoom-out-button-label = Umanji\npdfjs-zoom-in-button =\n    .title = Uvećaj\npdfjs-zoom-in-button-label = Uvećaj\npdfjs-zoom-select =\n    .title = Zumiranje\npdfjs-presentation-mode-button =\n    .title = Prebaci u prezentacijski način rada\npdfjs-presentation-mode-button-label = Prezentacijski način rada\npdfjs-open-file-button =\n    .title = Otvori datoteku\npdfjs-open-file-button-label = Otvori\npdfjs-print-button =\n    .title = Ispiši\npdfjs-print-button-label = Ispiši\npdfjs-save-button =\n    .title = Spremi\npdfjs-save-button-label = Spremi\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Alati\npdfjs-tools-button-label = Alati\npdfjs-first-page-button =\n    .title = Idi na prvu stranicu\npdfjs-first-page-button-label = Idi na prvu stranicu\npdfjs-last-page-button =\n    .title = Idi na posljednju stranicu\npdfjs-last-page-button-label = Idi na posljednju stranicu\npdfjs-page-rotate-cw-button =\n    .title = Rotiraj u smjeru kazaljke na satu\npdfjs-page-rotate-cw-button-label = Rotiraj u smjeru kazaljke na satu\npdfjs-page-rotate-ccw-button =\n    .title = Rotiraj obrnutno od smjera kazaljke na satu\npdfjs-page-rotate-ccw-button-label = Rotiraj obrnutno od smjera kazaljke na satu\npdfjs-cursor-text-select-tool-button =\n    .title = Omogući alat za označavanje teksta\npdfjs-cursor-text-select-tool-button-label = Alat za označavanje teksta\npdfjs-cursor-hand-tool-button =\n    .title = Omogući ručni alat\npdfjs-cursor-hand-tool-button-label = Ručni alat\npdfjs-scroll-vertical-button =\n    .title = Koristi okomito pomicanje\npdfjs-scroll-vertical-button-label = Okomito pomicanje\npdfjs-scroll-horizontal-button =\n    .title = Koristi vodoravno pomicanje\npdfjs-scroll-horizontal-button-label = Vodoravno pomicanje\npdfjs-scroll-wrapped-button =\n    .title = Koristi kontinuirani raspored stranica\npdfjs-scroll-wrapped-button-label = Kontinuirani raspored stranica\npdfjs-spread-none-button =\n    .title = Ne izrađuj duplerice\npdfjs-spread-none-button-label = Pojedinačne stranice\npdfjs-spread-odd-button =\n    .title = Izradi duplerice koje počinju s neparnim stranicama\npdfjs-spread-odd-button-label = Neparne duplerice\npdfjs-spread-even-button =\n    .title = Izradi duplerice koje počinju s parnim stranicama\npdfjs-spread-even-button-label = Parne duplerice\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Svojstva dokumenta …\npdfjs-document-properties-button-label = Svojstva dokumenta …\npdfjs-document-properties-file-name = Naziv datoteke:\npdfjs-document-properties-file-size = Veličina datoteke:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bajtova)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bajtova)\npdfjs-document-properties-title = Naslov:\npdfjs-document-properties-author = Autor:\npdfjs-document-properties-subject = Predmet:\npdfjs-document-properties-keywords = Ključne riječi:\npdfjs-document-properties-creation-date = Datum stvaranja:\npdfjs-document-properties-modification-date = Datum promjene:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Stvaratelj:\npdfjs-document-properties-producer = PDF stvaratelj:\npdfjs-document-properties-version = PDF verzija:\npdfjs-document-properties-page-count = Broj stranica:\npdfjs-document-properties-page-size = Dimenzije stranice:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = uspravno\npdfjs-document-properties-page-size-orientation-landscape = položeno\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Brzi web pregled:\npdfjs-document-properties-linearized-yes = Da\npdfjs-document-properties-linearized-no = Ne\npdfjs-document-properties-close-button = Zatvori\n\n## Print\n\npdfjs-print-progress-message = Pripremanje dokumenta za ispis…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Odustani\npdfjs-printing-not-supported = Upozorenje: Ovaj preglednik ne podržava u potpunosti ispisivanje.\npdfjs-printing-not-ready = Upozorenje: PDF nije u potpunosti učitan za ispis.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Prikaži/sakrij bočnu traku\npdfjs-toggle-sidebar-notification-button =\n    .title = Prikazivanje i sklanjanje bočne trake (dokument sadrži strukturu/privitke/slojeve)\npdfjs-toggle-sidebar-button-label = Prikaži/sakrij bočnu traku\npdfjs-document-outline-button =\n    .title = Prikaži strukturu dokumenta (dvostruki klik za rasklapanje/sklapanje svih stavki)\npdfjs-document-outline-button-label = Struktura dokumenta\npdfjs-attachments-button =\n    .title = Prikaži privitke\npdfjs-attachments-button-label = Privitci\npdfjs-layers-button =\n    .title = Prikaži slojeve (dvoklik za vraćanje svih slojeva u zadano stanje)\npdfjs-layers-button-label = Slojevi\npdfjs-thumbs-button =\n    .title = Prikaži minijature\npdfjs-thumbs-button-label = Minijature\npdfjs-current-outline-item-button =\n    .title = Pronađi trenutačni element strukture\npdfjs-current-outline-item-button-label = Trenutačni element strukture\npdfjs-findbar-button =\n    .title = Pronađi u dokumentu\npdfjs-findbar-button-label = Pronađi\npdfjs-additional-layers = Dodatni slojevi\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Stranica { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Minijatura stranice { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Pronađi\n    .placeholder = Pronađi u dokumentu …\npdfjs-find-previous-button =\n    .title = Pronađi prethodno pojavljivanje ovog izraza\npdfjs-find-previous-button-label = Prethodno\npdfjs-find-next-button =\n    .title = Pronađi sljedeće pojavljivanje ovog izraza\npdfjs-find-next-button-label = Sljedeće\npdfjs-find-highlight-checkbox = Istankni sve\npdfjs-find-match-case-checkbox-label = Razlikovanje velikih i malih slova\npdfjs-find-entire-word-checkbox-label = Cijele riječi\npdfjs-find-reached-top = Dosegnut početak dokumenta, nastavak s kraja\npdfjs-find-reached-bottom = Dosegnut kraj dokumenta, nastavak s početka\npdfjs-find-not-found = Izraz nije pronađen\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Prilagodi širini prozora\npdfjs-page-scale-fit = Prilagodi veličini prozora\npdfjs-page-scale-auto = Automatsko zumiranje\npdfjs-page-scale-actual = Stvarna veličina\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale } %\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Stranica { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Došlo je do greške pri učitavanju PDF-a.\npdfjs-invalid-file-error = Neispravna ili oštećena PDF datoteka.\npdfjs-missing-file-error = Nedostaje PDF datoteka.\npdfjs-unexpected-response-error = Neočekivani odgovor poslužitelja.\npdfjs-rendering-error = Došlo je do greške prilikom iscrtavanja stranice.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Bilješka]\n\n## Password\n\npdfjs-password-label = Za otvoranje ove PDF datoteku upiši lozinku.\npdfjs-password-invalid = Neispravna lozinka. Pokušaj ponovo.\npdfjs-password-ok-button = U redu\npdfjs-password-cancel-button = Odustani\npdfjs-web-fonts-disabled = Web fontovi su deaktivirani: nije moguće koristiti ugrađene PDF fontove.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Tekst\npdfjs-editor-free-text-button-label = Tekst\n# Editor Parameters\npdfjs-editor-free-text-color-input = Boja\npdfjs-editor-free-text-size-input = Veličina\npdfjs-editor-ink-color-input = Boja\npdfjs-editor-ink-thickness-input = Debljina\npdfjs-editor-ink-opacity-input = Neprozirnost\npdfjs-free-text =\n    .aria-label = Uređivač teksta\npdfjs-free-text-default-content = Počni tipkati …\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/hsb/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Předchadna strona\npdfjs-previous-button-label = Wróćo\npdfjs-next-button =\n    .title = Přichodna strona\npdfjs-next-button-label = Dale\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Strona\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = z { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } z { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Pomjeńšić\npdfjs-zoom-out-button-label = Pomjeńšić\npdfjs-zoom-in-button =\n    .title = Powjetšić\npdfjs-zoom-in-button-label = Powjetšić\npdfjs-zoom-select =\n    .title = Skalowanje\npdfjs-presentation-mode-button =\n    .title = Do prezentaciskeho modusa přeńć\npdfjs-presentation-mode-button-label = Prezentaciski modus\npdfjs-open-file-button =\n    .title = Dataju wočinić\npdfjs-open-file-button-label = Wočinić\npdfjs-print-button =\n    .title = Ćišćeć\npdfjs-print-button-label = Ćišćeć\npdfjs-save-button =\n    .title = Składować\npdfjs-save-button-label = Składować\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Sćahnyć\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Sćahnyć\npdfjs-bookmark-button =\n    .title = Aktualna strona (URL z aktualneje strony pokazać)\npdfjs-bookmark-button-label = Aktualna strona\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = W nałoženju wočinić\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = W nałoženju wočinić\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Nastroje\npdfjs-tools-button-label = Nastroje\npdfjs-first-page-button =\n    .title = K prěnjej stronje\npdfjs-first-page-button-label = K prěnjej stronje\npdfjs-last-page-button =\n    .title = K poslednjej stronje\npdfjs-last-page-button-label = K poslednjej stronje\npdfjs-page-rotate-cw-button =\n    .title = K směrej časnika wjerćeć\npdfjs-page-rotate-cw-button-label = K směrej časnika wjerćeć\npdfjs-page-rotate-ccw-button =\n    .title = Přećiwo směrej časnika wjerćeć\npdfjs-page-rotate-ccw-button-label = Přećiwo směrej časnika wjerćeć\npdfjs-cursor-text-select-tool-button =\n    .title = Nastroj za wuběranje teksta zmóžnić\npdfjs-cursor-text-select-tool-button-label = Nastroj za wuběranje teksta\npdfjs-cursor-hand-tool-button =\n    .title = Ručny nastroj zmóžnić\npdfjs-cursor-hand-tool-button-label = Ručny nastroj\npdfjs-scroll-page-button =\n    .title = Kulenje strony wužiwać\npdfjs-scroll-page-button-label = Kulenje strony\npdfjs-scroll-vertical-button =\n    .title = Wertikalne suwanje wužiwać\npdfjs-scroll-vertical-button-label = Wertikalne suwanje\npdfjs-scroll-horizontal-button =\n    .title = Horicontalne suwanje wužiwać\npdfjs-scroll-horizontal-button-label = Horicontalne suwanje\npdfjs-scroll-wrapped-button =\n    .title = Postupne suwanje wužiwać\npdfjs-scroll-wrapped-button-label = Postupne suwanje\npdfjs-spread-none-button =\n    .title = Strony njezwjazać\npdfjs-spread-none-button-label = Žana dwójna strona\npdfjs-spread-odd-button =\n    .title = Strony započinajo z njerunymi stronami zwjazać\npdfjs-spread-odd-button-label = Njerune strony\npdfjs-spread-even-button =\n    .title = Strony započinajo z runymi stronami zwjazać\npdfjs-spread-even-button-label = Rune strony\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Dokumentowe kajkosće…\npdfjs-document-properties-button-label = Dokumentowe kajkosće…\npdfjs-document-properties-file-name = Mjeno dataje:\npdfjs-document-properties-file-size = Wulkosć dataje:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bajtow)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bajtow)\npdfjs-document-properties-title = Titul:\npdfjs-document-properties-author = Awtor:\npdfjs-document-properties-subject = Předmjet:\npdfjs-document-properties-keywords = Klučowe słowa:\npdfjs-document-properties-creation-date = Datum wutworjenja:\npdfjs-document-properties-modification-date = Datum změny:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Awtor:\npdfjs-document-properties-producer = PDF-zhotowjer:\npdfjs-document-properties-version = PDF-wersija:\npdfjs-document-properties-page-count = Ličba stronow:\npdfjs-document-properties-page-size = Wulkosć strony:\npdfjs-document-properties-page-size-unit-inches = cól\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = wysoki format\npdfjs-document-properties-page-size-orientation-landscape = prěčny format\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Fast Web View:\npdfjs-document-properties-linearized-yes = Haj\npdfjs-document-properties-linearized-no = Ně\npdfjs-document-properties-close-button = Začinić\n\n## Print\n\npdfjs-print-progress-message = Dokument so za ćišćenje přihotuje…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Přetorhnyć\npdfjs-printing-not-supported = Warnowanje: Ćišćenje so přez tutón wobhladowak połnje njepodpěruje.\npdfjs-printing-not-ready = Warnowanje: PDF njeje so za ćišćenje dospołnje začitał.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Bóčnicu pokazać/schować\npdfjs-toggle-sidebar-notification-button =\n    .title = Bóčnicu přepinać (dokument rozrjad/přiwěški/woršty wobsahuje)\npdfjs-toggle-sidebar-button-label = Bóčnicu pokazać/schować\npdfjs-document-outline-button =\n    .title = Dokumentowy naćisk pokazać (dwójne kliknjenje, zo bychu so wšě zapiski pokazali/schowali)\npdfjs-document-outline-button-label = Dokumentowa struktura\npdfjs-attachments-button =\n    .title = Přiwěški pokazać\npdfjs-attachments-button-label = Přiwěški\npdfjs-layers-button =\n    .title = Woršty pokazać (klikńće dwójce, zo byšće wšě woršty na standardny staw wróćo stajił)\npdfjs-layers-button-label = Woršty\npdfjs-thumbs-button =\n    .title = Miniatury pokazać\npdfjs-thumbs-button-label = Miniatury\npdfjs-current-outline-item-button =\n    .title = Aktualny rozrjadowy zapisk pytać\npdfjs-current-outline-item-button-label = Aktualny rozrjadowy zapisk\npdfjs-findbar-button =\n    .title = W dokumenće pytać\npdfjs-findbar-button-label = Pytać\npdfjs-additional-layers = Dalše woršty\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Strona { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatura strony { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Pytać\n    .placeholder = W dokumenće pytać…\npdfjs-find-previous-button =\n    .title = Předchadne wustupowanje pytanskeho wuraza pytać\npdfjs-find-previous-button-label = Wróćo\npdfjs-find-next-button =\n    .title = Přichodne wustupowanje pytanskeho wuraza pytać\npdfjs-find-next-button-label = Dale\npdfjs-find-highlight-checkbox = Wšě wuzběhnyć\npdfjs-find-match-case-checkbox-label = Wulkopisanje wobkedźbować\npdfjs-find-match-diacritics-checkbox-label = Diakritiske znamješka wužiwać\npdfjs-find-entire-word-checkbox-label = Cyłe słowa\npdfjs-find-reached-top = Spočatk dokumenta docpěty, pokročuje so z kóncom\npdfjs-find-reached-bottom = Kónc dokument docpěty, pokročuje so ze spočatkom\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } z { $total } wotpowědnika\n        [two] { $current } z { $total } wotpowědnikow\n        [few] { $current } z { $total } wotpowědnikow\n       *[other] { $current } z { $total } wotpowědnikow\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Wyše { $limit } wotpowědnik\n        [two] Wyše { $limit } wotpowědnikaj\n        [few] Wyše { $limit } wotpowědniki\n       *[other] Wyše { $limit } wotpowědnikow\n    }\npdfjs-find-not-found = Pytanski wuraz njeje so namakał\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Šěrokosć strony\npdfjs-page-scale-fit = Wulkosć strony\npdfjs-page-scale-auto = Awtomatiske skalowanje\npdfjs-page-scale-actual = Aktualna wulkosć\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Strona { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Při začitowanju PDF je zmylk wustupił.\npdfjs-invalid-file-error = Njepłaćiwa abo wobškodźena PDF-dataja.\npdfjs-missing-file-error = Falowaca PDF-dataja.\npdfjs-unexpected-response-error = Njewočakowana serwerowa wotmołwa.\npdfjs-rendering-error = Při zwobraznjenju strony je zmylk wustupił.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Typ přispomnjenki: { $type }]\n\n## Password\n\npdfjs-password-label = Zapodajće hesło, zo byšće PDF-dataju wočinił.\npdfjs-password-invalid = Njepłaćiwe hesło. Prošu spytajće hišće raz.\npdfjs-password-ok-button = W porjadku\npdfjs-password-cancel-button = Přetorhnyć\npdfjs-web-fonts-disabled = Webpisma su znjemóžnjene: njeje móžno, zasadźene PDF-pisma wužiwać.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Tekst\npdfjs-editor-free-text-button-label = Tekst\npdfjs-editor-ink-button =\n    .title = Rysować\npdfjs-editor-ink-button-label = Rysować\npdfjs-editor-stamp-button =\n    .title = Wobrazy přidać abo wobdźěłać\npdfjs-editor-stamp-button-label = Wobrazy přidać abo wobdźěłać\npdfjs-editor-highlight-button =\n    .title = Wuzběhnyć\npdfjs-editor-highlight-button-label = Wuzběhnyć\npdfjs-highlight-floating-button =\n    .title = Wuzběhnyć\npdfjs-highlight-floating-button1 =\n    .title = Wuzběhnjenje\n    .aria-label = Wuzběhnjenje\npdfjs-highlight-floating-button-label = Wuzběhnjenje\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Rysowanku wotstronić\npdfjs-editor-remove-freetext-button =\n    .title = Tekst wotstronić\npdfjs-editor-remove-stamp-button =\n    .title = Wobraz wotstronić\npdfjs-editor-remove-highlight-button =\n    .title = Wuzběhnjenje wotstronić\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Barba\npdfjs-editor-free-text-size-input = Wulkosć\npdfjs-editor-ink-color-input = Barba\npdfjs-editor-ink-thickness-input = Tołstosć\npdfjs-editor-ink-opacity-input = Opacita\npdfjs-editor-stamp-add-image-button =\n    .title = Wobraz přidać\npdfjs-editor-stamp-add-image-button-label = Wobraz přidać\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Tołstosć\npdfjs-editor-free-highlight-thickness-title =\n    .title = Tołstosć změnić, hdyž so zapiski wuzběhuja, kotrež tekst njejsu\npdfjs-free-text =\n    .aria-label = Tekstowy editor\npdfjs-free-text-default-content = Započńće pisać…\npdfjs-ink =\n    .aria-label = Rysowanski editor\npdfjs-ink-canvas =\n    .aria-label = Wobraz wutworjeny wot wužiwarja\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Alternatiwny tekst\npdfjs-editor-alt-text-edit-button-label = Alternatiwny tekst wobdźěłać\npdfjs-editor-alt-text-dialog-label = Nastajenje wubrać\npdfjs-editor-alt-text-dialog-description = Alternatiwny tekst pomha, hdyž ludźo njemóža wobraz widźeć abo hdyž so wobraz njezačita.\npdfjs-editor-alt-text-add-description-label = Wopisanje přidać\npdfjs-editor-alt-text-add-description-description = Pisajće 1 sadu abo 2 sadźe, kotrejž temu, nastajenje abo akcije wopisujetej.\npdfjs-editor-alt-text-mark-decorative-label = Jako dekoratiwny markěrować\npdfjs-editor-alt-text-mark-decorative-description = To so za pyšace wobrazy wužiwa, na přikład ramiki abo wodowe znamjenja.\npdfjs-editor-alt-text-cancel-button = Přetorhnyć\npdfjs-editor-alt-text-save-button = Składować\npdfjs-editor-alt-text-decorative-tooltip = Jako dekoratiwny markěrowany\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Na přikład, „Młody muž za blidom sedźi, zo by jědź jědł“\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Horjeka nalěwo – wulkosć změnić\npdfjs-editor-resizer-label-top-middle = Horjeka wosrjedź – wulkosć změnić\npdfjs-editor-resizer-label-top-right = Horjeka naprawo – wulkosć změnić\npdfjs-editor-resizer-label-middle-right = Wosrjedź naprawo – wulkosć změnić\npdfjs-editor-resizer-label-bottom-right = Deleka naprawo – wulkosć změnić\npdfjs-editor-resizer-label-bottom-middle = Deleka wosrjedź – wulkosć změnić\npdfjs-editor-resizer-label-bottom-left = Deleka nalěwo – wulkosć změnić\npdfjs-editor-resizer-label-middle-left = Wosrjedź nalěwo – wulkosć změnić\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Barba wuzběhnjenja\npdfjs-editor-colorpicker-button =\n    .title = Barbu změnić\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Wuběr barbow\npdfjs-editor-colorpicker-yellow =\n    .title = Žołty\npdfjs-editor-colorpicker-green =\n    .title = Zeleny\npdfjs-editor-colorpicker-blue =\n    .title = Módry\npdfjs-editor-colorpicker-pink =\n    .title = Pink\npdfjs-editor-colorpicker-red =\n    .title = Čerwjeny\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Wšě pokazać\npdfjs-editor-highlight-show-all-button =\n    .title = Wšě pokazać\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/hu/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Előző oldal\npdfjs-previous-button-label = Előző\npdfjs-next-button =\n    .title = Következő oldal\npdfjs-next-button-label = Tovább\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Oldal\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = összesen: { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } / { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Kicsinyítés\npdfjs-zoom-out-button-label = Kicsinyítés\npdfjs-zoom-in-button =\n    .title = Nagyítás\npdfjs-zoom-in-button-label = Nagyítás\npdfjs-zoom-select =\n    .title = Nagyítás\npdfjs-presentation-mode-button =\n    .title = Váltás bemutató módba\npdfjs-presentation-mode-button-label = Bemutató mód\npdfjs-open-file-button =\n    .title = Fájl megnyitása\npdfjs-open-file-button-label = Megnyitás\npdfjs-print-button =\n    .title = Nyomtatás\npdfjs-print-button-label = Nyomtatás\npdfjs-save-button =\n    .title = Mentés\npdfjs-save-button-label = Mentés\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Letöltés\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Letöltés\npdfjs-bookmark-button =\n    .title = Jelenlegi oldal (webcím megtekintése a jelenlegi oldalról)\npdfjs-bookmark-button-label = Jelenlegi oldal\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Eszközök\npdfjs-tools-button-label = Eszközök\npdfjs-first-page-button =\n    .title = Ugrás az első oldalra\npdfjs-first-page-button-label = Ugrás az első oldalra\npdfjs-last-page-button =\n    .title = Ugrás az utolsó oldalra\npdfjs-last-page-button-label = Ugrás az utolsó oldalra\npdfjs-page-rotate-cw-button =\n    .title = Forgatás az óramutató járásával egyezően\npdfjs-page-rotate-cw-button-label = Forgatás az óramutató járásával egyezően\npdfjs-page-rotate-ccw-button =\n    .title = Forgatás az óramutató járásával ellentétesen\npdfjs-page-rotate-ccw-button-label = Forgatás az óramutató járásával ellentétesen\npdfjs-cursor-text-select-tool-button =\n    .title = Szövegkijelölő eszköz bekapcsolása\npdfjs-cursor-text-select-tool-button-label = Szövegkijelölő eszköz\npdfjs-cursor-hand-tool-button =\n    .title = Kéz eszköz bekapcsolása\npdfjs-cursor-hand-tool-button-label = Kéz eszköz\npdfjs-scroll-page-button =\n    .title = Oldalgörgetés használata\npdfjs-scroll-page-button-label = Oldalgörgetés\npdfjs-scroll-vertical-button =\n    .title = Függőleges görgetés használata\npdfjs-scroll-vertical-button-label = Függőleges görgetés\npdfjs-scroll-horizontal-button =\n    .title = Vízszintes görgetés használata\npdfjs-scroll-horizontal-button-label = Vízszintes görgetés\npdfjs-scroll-wrapped-button =\n    .title = Rácsos elrendezés használata\npdfjs-scroll-wrapped-button-label = Rácsos elrendezés\npdfjs-spread-none-button =\n    .title = Ne tapassza össze az oldalakat\npdfjs-spread-none-button-label = Nincs összetapasztás\npdfjs-spread-odd-button =\n    .title = Lapok összetapasztása, a páratlan számú oldalakkal kezdve\npdfjs-spread-odd-button-label = Összetapasztás: páratlan\npdfjs-spread-even-button =\n    .title = Lapok összetapasztása, a páros számú oldalakkal kezdve\npdfjs-spread-even-button-label = Összetapasztás: páros\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Dokumentum tulajdonságai…\npdfjs-document-properties-button-label = Dokumentum tulajdonságai…\npdfjs-document-properties-file-name = Fájlnév:\npdfjs-document-properties-file-size = Fájlméret:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bájt)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bájt)\npdfjs-document-properties-title = Cím:\npdfjs-document-properties-author = Szerző:\npdfjs-document-properties-subject = Tárgy:\npdfjs-document-properties-keywords = Kulcsszavak:\npdfjs-document-properties-creation-date = Létrehozás dátuma:\npdfjs-document-properties-modification-date = Módosítás dátuma:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Létrehozta:\npdfjs-document-properties-producer = PDF előállító:\npdfjs-document-properties-version = PDF verzió:\npdfjs-document-properties-page-count = Oldalszám:\npdfjs-document-properties-page-size = Lapméret:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = álló\npdfjs-document-properties-page-size-orientation-landscape = fekvő\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Jogi információk\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Gyors webes nézet:\npdfjs-document-properties-linearized-yes = Igen\npdfjs-document-properties-linearized-no = Nem\npdfjs-document-properties-close-button = Bezárás\n\n## Print\n\npdfjs-print-progress-message = Dokumentum előkészítése nyomtatáshoz…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Mégse\npdfjs-printing-not-supported = Figyelmeztetés: Ez a böngésző nem teljesen támogatja a nyomtatást.\npdfjs-printing-not-ready = Figyelmeztetés: A PDF nincs teljesen betöltve a nyomtatáshoz.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Oldalsáv be/ki\npdfjs-toggle-sidebar-notification-button =\n    .title = Oldalsáv be/ki (a dokumentum vázlatot/mellékleteket/rétegeket tartalmaz)\npdfjs-toggle-sidebar-button-label = Oldalsáv be/ki\npdfjs-document-outline-button =\n    .title = Dokumentum megjelenítése online (dupla kattintás minden elem kinyitásához/összecsukásához)\npdfjs-document-outline-button-label = Dokumentumvázlat\npdfjs-attachments-button =\n    .title = Mellékletek megjelenítése\npdfjs-attachments-button-label = Van melléklet\npdfjs-layers-button =\n    .title = Rétegek megjelenítése (dupla kattintás az összes réteg alapértelmezett állapotra visszaállításához)\npdfjs-layers-button-label = Rétegek\npdfjs-thumbs-button =\n    .title = Bélyegképek megjelenítése\npdfjs-thumbs-button-label = Bélyegképek\npdfjs-current-outline-item-button =\n    .title = Jelenlegi vázlatelem megkeresése\npdfjs-current-outline-item-button-label = Jelenlegi vázlatelem\npdfjs-findbar-button =\n    .title = Keresés a dokumentumban\npdfjs-findbar-button-label = Keresés\npdfjs-additional-layers = További rétegek\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = { $page }. oldal\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = { $page }. oldal bélyegképe\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Keresés\n    .placeholder = Keresés a dokumentumban…\npdfjs-find-previous-button =\n    .title = A kifejezés előző előfordulásának keresése\npdfjs-find-previous-button-label = Előző\npdfjs-find-next-button =\n    .title = A kifejezés következő előfordulásának keresése\npdfjs-find-next-button-label = Tovább\npdfjs-find-highlight-checkbox = Összes kiemelése\npdfjs-find-match-case-checkbox-label = Kis- és nagybetűk megkülönböztetése\npdfjs-find-match-diacritics-checkbox-label = Diakritikus jelek\npdfjs-find-entire-word-checkbox-label = Teljes szavak\npdfjs-find-reached-top = A dokumentum eleje elérve, folytatás a végétől\npdfjs-find-reached-bottom = A dokumentum vége elérve, folytatás az elejétől\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } / { $total } találat\n       *[other] { $current } / { $total } találat\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Több mint { $limit } találat\n       *[other] Több mint { $limit } találat\n    }\npdfjs-find-not-found = A kifejezés nem található\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Oldalszélesség\npdfjs-page-scale-fit = Teljes oldal\npdfjs-page-scale-auto = Automatikus nagyítás\npdfjs-page-scale-actual = Valódi méret\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = { $page }. oldal\n\n## Loading indicator messages\n\npdfjs-loading-error = Hiba történt a PDF betöltésekor.\npdfjs-invalid-file-error = Érvénytelen vagy sérült PDF fájl.\npdfjs-missing-file-error = Hiányzó PDF fájl.\npdfjs-unexpected-response-error = Váratlan kiszolgálóválasz.\npdfjs-rendering-error = Hiba történt az oldal feldolgozása közben.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } megjegyzés]\n\n## Password\n\npdfjs-password-label = Adja meg a jelszót a PDF fájl megnyitásához.\npdfjs-password-invalid = Helytelen jelszó. Próbálja újra.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Mégse\npdfjs-web-fonts-disabled = Webes betűkészletek letiltva: nem használhatók a beágyazott PDF betűkészletek.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Szöveg\npdfjs-editor-free-text-button-label = Szöveg\npdfjs-editor-ink-button =\n    .title = Rajzolás\npdfjs-editor-ink-button-label = Rajzolás\npdfjs-editor-stamp-button =\n    .title = Képek hozzáadása vagy szerkesztése\npdfjs-editor-stamp-button-label = Képek hozzáadása vagy szerkesztése\npdfjs-editor-highlight-button =\n    .title = Kiemelés\npdfjs-editor-highlight-button-label = Kiemelés\npdfjs-highlight-floating-button =\n    .title = Kiemelés\npdfjs-highlight-floating-button1 =\n    .title = Kiemelés\n    .aria-label = Kiemelés\npdfjs-highlight-floating-button-label = Kiemelés\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Rajz eltávolítása\npdfjs-editor-remove-freetext-button =\n    .title = Szöveg eltávolítása\npdfjs-editor-remove-stamp-button =\n    .title = Kép eltávolítása\npdfjs-editor-remove-highlight-button =\n    .title = Kiemelés eltávolítása\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Szín\npdfjs-editor-free-text-size-input = Méret\npdfjs-editor-ink-color-input = Szín\npdfjs-editor-ink-thickness-input = Vastagság\npdfjs-editor-ink-opacity-input = Átlátszatlanság\npdfjs-editor-stamp-add-image-button =\n    .title = Kép hozzáadása\npdfjs-editor-stamp-add-image-button-label = Kép hozzáadása\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Vastagság\npdfjs-editor-free-highlight-thickness-title =\n    .title = Vastagság módosítása, ha nem szöveges elemeket emel ki\npdfjs-free-text =\n    .aria-label = Szövegszerkesztő\npdfjs-free-text-default-content = Kezdjen el gépelni…\npdfjs-ink =\n    .aria-label = Rajzszerkesztő\npdfjs-ink-canvas =\n    .aria-label = Felhasználó által készített kép\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Alternatív szöveg\npdfjs-editor-alt-text-edit-button-label = Alternatív szöveg szerkesztése\npdfjs-editor-alt-text-dialog-label = Válasszon egy lehetőséget\npdfjs-editor-alt-text-dialog-description = Az alternatív szöveg segít, ha az emberek nem látják a képet, vagy ha az nem töltődik be.\npdfjs-editor-alt-text-add-description-label = Leírás hozzáadása\npdfjs-editor-alt-text-add-description-description = Törekedjen 1-2 mondatra, amely jellemzi a témát, környezetet vagy cselekvést.\npdfjs-editor-alt-text-mark-decorative-label = Megjelölés dekoratívként\npdfjs-editor-alt-text-mark-decorative-description = Ez a díszítőképeknél használatos, mint a szegélyek vagy a vízjelek.\npdfjs-editor-alt-text-cancel-button = Mégse\npdfjs-editor-alt-text-save-button = Mentés\npdfjs-editor-alt-text-decorative-tooltip = Megjelölve dekoratívként\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Például: „Egy fiatal férfi leül enni egy asztalhoz”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Bal felső sarok – átméretezés\npdfjs-editor-resizer-label-top-middle = Felül középen – átméretezés\npdfjs-editor-resizer-label-top-right = Jobb felső sarok – átméretezés\npdfjs-editor-resizer-label-middle-right = Jobbra középen – átméretezés\npdfjs-editor-resizer-label-bottom-right = Jobb alsó sarok – átméretezés\npdfjs-editor-resizer-label-bottom-middle = Alul középen – átméretezés\npdfjs-editor-resizer-label-bottom-left = Bal alsó sarok – átméretezés\npdfjs-editor-resizer-label-middle-left = Balra középen – átméretezés\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Kiemelés színe\npdfjs-editor-colorpicker-button =\n    .title = Szín módosítása\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Színválasztások\npdfjs-editor-colorpicker-yellow =\n    .title = Sárga\npdfjs-editor-colorpicker-green =\n    .title = Zöld\npdfjs-editor-colorpicker-blue =\n    .title = Kék\npdfjs-editor-colorpicker-pink =\n    .title = Rózsaszín\npdfjs-editor-colorpicker-red =\n    .title = Vörös\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Összes megjelenítése\npdfjs-editor-highlight-show-all-button =\n    .title = Összes megjelenítése\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/hy-AM/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Նախորդ էջը\npdfjs-previous-button-label = Նախորդը\npdfjs-next-button =\n    .title = Հաջորդ էջը\npdfjs-next-button-label = Հաջորդը\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Էջ.\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = -ը՝ { $pagesCount }-ից\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber }-ը { $pagesCount })-ից\npdfjs-zoom-out-button =\n    .title = Փոքրացնել\npdfjs-zoom-out-button-label = Փոքրացնել\npdfjs-zoom-in-button =\n    .title = Խոշորացնել\npdfjs-zoom-in-button-label = Խոշորացնել\npdfjs-zoom-select =\n    .title = Դիտափոխում\npdfjs-presentation-mode-button =\n    .title = Անցնել Ներկայացման եղանակին\npdfjs-presentation-mode-button-label = Ներկայացման եղանակ\npdfjs-open-file-button =\n    .title = Բացել նիշք\npdfjs-open-file-button-label = Բացել\npdfjs-print-button =\n    .title = Տպել\npdfjs-print-button-label = Տպել\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Ներբեռնել\npdfjs-bookmark-button-label = Ընթացիկ էջ\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Գործիքներ\npdfjs-tools-button-label = Գործիքներ\npdfjs-first-page-button =\n    .title = Անցնել առաջին էջին\npdfjs-first-page-button-label = Անցնել առաջին էջին\npdfjs-last-page-button =\n    .title = Անցնել վերջին էջին\npdfjs-last-page-button-label = Անցնել վերջին էջին\npdfjs-page-rotate-cw-button =\n    .title = Պտտել ըստ ժամացույցի սլաքի\npdfjs-page-rotate-cw-button-label = Պտտել ըստ ժամացույցի սլաքի\npdfjs-page-rotate-ccw-button =\n    .title = Պտտել հակառակ ժամացույցի սլաքի\npdfjs-page-rotate-ccw-button-label = Պտտել հակառակ ժամացույցի սլաքի\npdfjs-cursor-text-select-tool-button =\n    .title = Միացնել գրույթ ընտրելու գործիքը\npdfjs-cursor-text-select-tool-button-label = Գրույթը ընտրելու գործիք\npdfjs-cursor-hand-tool-button =\n    .title = Միացնել Ձեռքի գործիքը\npdfjs-cursor-hand-tool-button-label = Ձեռքի գործիք\npdfjs-scroll-vertical-button =\n    .title = Օգտագործել ուղղահայաց ոլորում\npdfjs-scroll-vertical-button-label = Ուղղահայաց ոլորում\npdfjs-scroll-horizontal-button =\n    .title = Օգտագործել հորիզոնական ոլորում\npdfjs-scroll-horizontal-button-label = Հորիզոնական ոլորում\npdfjs-scroll-wrapped-button =\n    .title = Օգտագործել փաթաթված ոլորում\npdfjs-scroll-wrapped-button-label = Փաթաթված ոլորում\npdfjs-spread-none-button =\n    .title = Մի միացեք էջի վերածածկերին\npdfjs-spread-none-button-label = Չկա վերածածկեր\npdfjs-spread-odd-button =\n    .title = Միացեք էջի վերածածկերին սկսելով՝ կենտ համարակալված էջերով\npdfjs-spread-odd-button-label = Կենտ վերածածկեր\npdfjs-spread-even-button =\n    .title = Միացեք էջի վերածածկերին սկսելով՝ զույգ համարակալված էջերով\npdfjs-spread-even-button-label = Զույգ վերածածկեր\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Փաստաթղթի հատկությունները…\npdfjs-document-properties-button-label = Փաստաթղթի հատկությունները…\npdfjs-document-properties-file-name = Նիշքի անունը.\npdfjs-document-properties-file-size = Նիշք չափը.\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } ԿԲ ({ $size_b } բայթ)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } ՄԲ ({ $size_b } բայթ)\npdfjs-document-properties-title = Վերնագիր.\npdfjs-document-properties-author = Հեղինակ․\npdfjs-document-properties-subject = Վերնագիր.\npdfjs-document-properties-keywords = Հիմնաբառ.\npdfjs-document-properties-creation-date = Ստեղծելու ամսաթիվը.\npdfjs-document-properties-modification-date = Փոփոխելու ամսաթիվը.\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Ստեղծող.\npdfjs-document-properties-producer = PDF-ի հեղինակը.\npdfjs-document-properties-version = PDF-ի տարբերակը.\npdfjs-document-properties-page-count = Էջերի քանակը.\npdfjs-document-properties-page-size = Էջի չափը.\npdfjs-document-properties-page-size-unit-inches = ում\npdfjs-document-properties-page-size-unit-millimeters = մմ\npdfjs-document-properties-page-size-orientation-portrait = ուղղաձիգ\npdfjs-document-properties-page-size-orientation-landscape = հորիզոնական\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Նամակ\npdfjs-document-properties-page-size-name-legal = Օրինական\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Արագ վեբ դիտում․\npdfjs-document-properties-linearized-yes = Այո\npdfjs-document-properties-linearized-no = Ոչ\npdfjs-document-properties-close-button = Փակել\n\n## Print\n\npdfjs-print-progress-message = Նախապատրաստում է փաստաթուղթը տպելուն...\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Չեղարկել\npdfjs-printing-not-supported = Զգուշացում. Տպելը ամբողջությամբ չի աջակցվում դիտարկիչի կողմից։\npdfjs-printing-not-ready = Զգուշացում. PDF-ը ամբողջությամբ չի բեռնավորվել տպելու համար:\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Բացել/Փակել Կողային վահանակը\npdfjs-toggle-sidebar-button-label = Բացել/Փակել Կողային վահանակը\npdfjs-document-outline-button =\n    .title = Ցուցադրել փաստաթղթի ուրվագիծը (կրկնակի սեղմեք՝ միավորները ընդարձակելու/կոծկելու համար)\npdfjs-document-outline-button-label = Փաստաթղթի բովանդակությունը\npdfjs-attachments-button =\n    .title = Ցուցադրել կցորդները\npdfjs-attachments-button-label = Կցորդներ\npdfjs-thumbs-button =\n    .title = Ցուցադրել Մանրապատկերը\npdfjs-thumbs-button-label = Մանրապատկերը\npdfjs-findbar-button =\n    .title = Գտնել փաստաթղթում\npdfjs-findbar-button-label = Որոնում\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Էջը { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Էջի մանրապատկերը { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Որոնում\n    .placeholder = Գտնել փաստաթղթում...\npdfjs-find-previous-button =\n    .title = Գտնել անրահայտության նախորդ հանդիպումը\npdfjs-find-previous-button-label = Նախորդը\npdfjs-find-next-button =\n    .title = Գտիր արտահայտության հաջորդ հանդիպումը\npdfjs-find-next-button-label = Հաջորդը\npdfjs-find-highlight-checkbox = Գունանշել բոլորը\npdfjs-find-match-case-checkbox-label = Մեծ(փոքր)ատառ հաշվի առնել\npdfjs-find-entire-word-checkbox-label = Ամբողջ բառերը\npdfjs-find-reached-top = Հասել եք փաստաթղթի վերևին, կշարունակվի ներքևից\npdfjs-find-reached-bottom = Հասել եք փաստաթղթի վերջին, կշարունակվի վերևից\npdfjs-find-not-found = Արտահայտությունը չգտնվեց\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Էջի լայնքը\npdfjs-page-scale-fit = Ձգել էջը\npdfjs-page-scale-auto = Ինքնաշխատ\npdfjs-page-scale-actual = Իրական չափը\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = Սխալ՝ PDF ֆայլը բացելիս։\npdfjs-invalid-file-error = Սխալ կամ վնասված PDF ֆայլ:\npdfjs-missing-file-error = PDF ֆայլը բացակայում է:\npdfjs-unexpected-response-error = Սպասարկիչի անսպասելի պատասխան:\npdfjs-rendering-error = Սխալ՝ էջը ստեղծելիս:\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Ծանոթություն]\n\n## Password\n\npdfjs-password-label = Մուտքագրեք PDF-ի գաղտնաբառը:\npdfjs-password-invalid = Գաղտնաբառը սխալ է: Կրկին փորձեք:\npdfjs-password-ok-button = Լավ\npdfjs-password-cancel-button = Չեղարկել\npdfjs-web-fonts-disabled = Վեբ-տառատեսակները անջատված են. հնարավոր չէ օգտագործել ներկառուցված PDF տառատեսակները:\n\n## Editing\n\n\n## Remove button for the various kind of editor.\n\n\n##\n\npdfjs-free-text-default-content = Սկսել մուտքագրումը…\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n\n## Color picker\n\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Ցուցադրել բոլորը\npdfjs-editor-highlight-show-all-button =\n    .title = Ցուցադրել բոլորը\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/hye/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Նախորդ էջ\npdfjs-previous-button-label = Նախորդը\npdfjs-next-button =\n    .title = Յաջորդ էջ\npdfjs-next-button-label = Յաջորդը\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = էջ\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = { $pagesCount }-ից\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber }-ը { $pagesCount })-ից\npdfjs-zoom-out-button =\n    .title = Փոքրացնել\npdfjs-zoom-out-button-label = Փոքրացնել\npdfjs-zoom-in-button =\n    .title = Խոշորացնել\npdfjs-zoom-in-button-label = Խոշորացնել\npdfjs-zoom-select =\n    .title = Խոշորացում\npdfjs-presentation-mode-button =\n    .title = Անցնել ներկայացման եղանակին\npdfjs-presentation-mode-button-label = Ներկայացման եղանակ\npdfjs-open-file-button =\n    .title = Բացել նիշքը\npdfjs-open-file-button-label = Բացել\npdfjs-print-button =\n    .title = Տպել\npdfjs-print-button-label = Տպել\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Գործիքներ\npdfjs-tools-button-label = Գործիքներ\npdfjs-first-page-button =\n    .title = Գնալ դէպի առաջին էջ\npdfjs-first-page-button-label = Գնալ դէպի առաջին էջ\npdfjs-last-page-button =\n    .title = Գնալ դէպի վերջին էջ\npdfjs-last-page-button-label = Գնալ դէպի վերջին էջ\npdfjs-page-rotate-cw-button =\n    .title = Պտտել ժամացոյցի սլաքի ուղղութեամբ\npdfjs-page-rotate-cw-button-label = Պտտել ժամացոյցի սլաքի ուղղութեամբ\npdfjs-page-rotate-ccw-button =\n    .title = Պտտել ժամացոյցի սլաքի հակառակ ուղղութեամբ\npdfjs-page-rotate-ccw-button-label = Պտտել ժամացոյցի սլաքի հակառակ ուղղութեամբ\npdfjs-cursor-text-select-tool-button =\n    .title = Միացնել գրոյթ ընտրելու գործիքը\npdfjs-cursor-text-select-tool-button-label = Գրուածք ընտրելու գործիք\npdfjs-cursor-hand-tool-button =\n    .title = Միացնել ձեռքի գործիքը\npdfjs-cursor-hand-tool-button-label = Ձեռքի գործիք\npdfjs-scroll-page-button =\n    .title = Աւգտագործել էջի ոլորում\npdfjs-scroll-page-button-label = Էջի ոլորում\npdfjs-scroll-vertical-button =\n    .title = Աւգտագործել ուղղահայեաց ոլորում\npdfjs-scroll-vertical-button-label = Ուղղահայեաց ոլորում\npdfjs-scroll-horizontal-button =\n    .title = Աւգտագործել հորիզոնական ոլորում\npdfjs-scroll-horizontal-button-label = Հորիզոնական ոլորում\npdfjs-scroll-wrapped-button =\n    .title = Աւգտագործել փաթաթուած ոլորում\npdfjs-scroll-wrapped-button-label = Փաթաթուած ոլորում\npdfjs-spread-none-button =\n    .title = Մի միացէք էջի կոնտեքստում\npdfjs-spread-none-button-label = Չկայ կոնտեքստ\npdfjs-spread-odd-button =\n    .title = Միացէք էջի կոնտեքստին սկսելով՝ կենտ համարակալուած էջերով\npdfjs-spread-odd-button-label = Տարաւրինակ կոնտեքստ\npdfjs-spread-even-button =\n    .title = Միացէք էջի կոնտեքստին սկսելով՝ զոյգ համարակալուած էջերով\npdfjs-spread-even-button-label = Հաւասար վերածածկեր\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Փաստաթղթի հատկութիւնները…\npdfjs-document-properties-button-label = Փաստաթղթի յատկութիւնները…\npdfjs-document-properties-file-name = Նիշքի անունը․\npdfjs-document-properties-file-size = Նիշք չափը.\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } ԿԲ ({ $size_b } բայթ)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } ՄԲ ({ $size_b } բայթ)\npdfjs-document-properties-title = Վերնագիր\npdfjs-document-properties-author = Հեղինակ․\npdfjs-document-properties-subject = առարկայ\npdfjs-document-properties-keywords = Հիմնաբառեր\npdfjs-document-properties-creation-date = Ստեղծման ամսաթիւ\npdfjs-document-properties-modification-date = Փոփոխութեան ամսաթիւ.\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Ստեղծող\npdfjs-document-properties-producer = PDF-ի Արտադրողը.\npdfjs-document-properties-version = PDF-ի տարբերակը.\npdfjs-document-properties-page-count = Էջերի քանակը.\npdfjs-document-properties-page-size = Էջի չափը.\npdfjs-document-properties-page-size-unit-inches = ում\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = ուղղաձիգ\npdfjs-document-properties-page-size-orientation-landscape = հորիզոնական\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Նամակ\npdfjs-document-properties-page-size-name-legal = Աւրինական\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Արագ վեբ դիտում․\npdfjs-document-properties-linearized-yes = Այո\npdfjs-document-properties-linearized-no = Ոչ\npdfjs-document-properties-close-button = Փակել\n\n## Print\n\npdfjs-print-progress-message = Նախապատրաստում է փաստաթուղթը տպելուն…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Չեղարկել\npdfjs-printing-not-supported = Զգուշացում. Տպելը ամբողջութեամբ չի աջակցուում զննարկիչի կողմից։\npdfjs-printing-not-ready = Զգուշացում. PDF֊ը ամբողջութեամբ չի բեռնաւորուել տպելու համար։\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Փոխարկել կողային վահանակը\npdfjs-toggle-sidebar-notification-button =\n    .title = Փոխանջատել կողմնասիւնը (փաստաթուղթը պարունակում է ուրուագիծ/կցորդներ/շերտեր)\npdfjs-toggle-sidebar-button-label = Փոխարկել կողային վահանակը\npdfjs-document-outline-button =\n    .title = Ցուցադրել փաստաթղթի ուրուագիծը (կրկնակի սեղմէք՝ միաւորները ընդարձակելու/կոծկելու համար)\npdfjs-document-outline-button-label = Փաստաթղթի ուրուագիծ\npdfjs-attachments-button =\n    .title = Ցուցադրել կցորդները\npdfjs-attachments-button-label = Կցորդներ\npdfjs-layers-button =\n    .title = Ցուցադրել շերտերը (կրկնահպել վերակայելու բոլոր շերտերը սկզբնադիր վիճակի)\npdfjs-layers-button-label = Շերտեր\npdfjs-thumbs-button =\n    .title = Ցուցադրել մանրապատկերը\npdfjs-thumbs-button-label = Մանրապատկեր\npdfjs-current-outline-item-button =\n    .title = Գտէք ընթացիկ գծագրման տարրը\npdfjs-current-outline-item-button-label = Ընթացիկ գծագրման տարր\npdfjs-findbar-button =\n    .title = Գտնել փաստաթղթում\npdfjs-findbar-button-label = Որոնում\npdfjs-additional-layers = Լրացուցիչ շերտեր\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Էջը { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Էջի մանրապատկերը { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Որոնում\n    .placeholder = Գտնել փաստաթղթում…\npdfjs-find-previous-button =\n    .title = Գտնել արտայայտութեան նախորդ արտայայտութիւնը\npdfjs-find-previous-button-label = Նախորդը\npdfjs-find-next-button =\n    .title = Գտիր արտայայտութեան յաջորդ արտայայտութիւնը\npdfjs-find-next-button-label = Հաջորդը\npdfjs-find-highlight-checkbox = Գունանշել բոլորը\npdfjs-find-match-case-checkbox-label = Հաշուի առնել հանգամանքը\npdfjs-find-match-diacritics-checkbox-label = Հնչիւնատարբերիչ նշանների համապատասխանեցում\npdfjs-find-entire-word-checkbox-label = Ամբողջ բառերը\npdfjs-find-reached-top = Հասել եք փաստաթղթի վերեւին,շարունակել ներքեւից\npdfjs-find-reached-bottom = Հասել էք փաստաթղթի վերջին, շարունակել վերեւից\npdfjs-find-not-found = Արտայայտութիւնը չգտնուեց\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Էջի լայնութիւն\npdfjs-page-scale-fit = Հարմարեցնել էջը\npdfjs-page-scale-auto = Ինքնաշխատ խոշորացում\npdfjs-page-scale-actual = Իրական չափը\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Էջ { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = PDF նիշքը բացելիս սխալ է տեղի ունեցել։\npdfjs-invalid-file-error = Սխալ կամ վնասուած PDF նիշք։\npdfjs-missing-file-error = PDF նիշքը բացակաիւմ է։\npdfjs-unexpected-response-error = Սպասարկիչի անսպասելի պատասխան։\npdfjs-rendering-error = Սխալ է տեղի ունեցել էջի մեկնաբանման ժամանակ\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Ծանոթութիւն]\n\n## Password\n\npdfjs-password-label = Մուտքագրէք  գաղտնաբառը այս PDF նիշքը բացելու համար\npdfjs-password-invalid = Գաղտնաբառը սխալ է: Կրկին փորձէք:\npdfjs-password-ok-button = Լաւ\npdfjs-password-cancel-button = Չեղարկել\npdfjs-web-fonts-disabled = Վեբ-տառատեսակները անջատուած են. հնարաւոր չէ աւգտագործել ներկառուցուած PDF տառատեսակները։\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/ia/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Pagina previe\npdfjs-previous-button-label = Previe\npdfjs-next-button =\n    .title = Pagina sequente\npdfjs-next-button-label = Sequente\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Pagina\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = de { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Distantiar\npdfjs-zoom-out-button-label = Distantiar\npdfjs-zoom-in-button =\n    .title = Approximar\npdfjs-zoom-in-button-label = Approximar\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Excambiar a modo presentation\npdfjs-presentation-mode-button-label = Modo presentation\npdfjs-open-file-button =\n    .title = Aperir le file\npdfjs-open-file-button-label = Aperir\npdfjs-print-button =\n    .title = Imprimer\npdfjs-print-button-label = Imprimer\npdfjs-save-button =\n    .title = Salvar\npdfjs-save-button-label = Salvar\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Discargar\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Discargar\npdfjs-bookmark-button =\n    .title = Pagina actual (vide le URL del pagina actual)\npdfjs-bookmark-button-label = Pagina actual\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Instrumentos\npdfjs-tools-button-label = Instrumentos\npdfjs-first-page-button =\n    .title = Ir al prime pagina\npdfjs-first-page-button-label = Ir al prime pagina\npdfjs-last-page-button =\n    .title = Ir al ultime pagina\npdfjs-last-page-button-label = Ir al ultime pagina\npdfjs-page-rotate-cw-button =\n    .title = Rotar in senso horari\npdfjs-page-rotate-cw-button-label = Rotar in senso horari\npdfjs-page-rotate-ccw-button =\n    .title = Rotar in senso antihorari\npdfjs-page-rotate-ccw-button-label = Rotar in senso antihorari\npdfjs-cursor-text-select-tool-button =\n    .title = Activar le instrumento de selection de texto\npdfjs-cursor-text-select-tool-button-label = Instrumento de selection de texto\npdfjs-cursor-hand-tool-button =\n    .title = Activar le instrumento mano\npdfjs-cursor-hand-tool-button-label = Instrumento mano\npdfjs-scroll-page-button =\n    .title = Usar rolamento de pagina\npdfjs-scroll-page-button-label = Rolamento de pagina\npdfjs-scroll-vertical-button =\n    .title = Usar rolamento vertical\npdfjs-scroll-vertical-button-label = Rolamento vertical\npdfjs-scroll-horizontal-button =\n    .title = Usar rolamento horizontal\npdfjs-scroll-horizontal-button-label = Rolamento horizontal\npdfjs-scroll-wrapped-button =\n    .title = Usar rolamento incapsulate\npdfjs-scroll-wrapped-button-label = Rolamento incapsulate\npdfjs-spread-none-button =\n    .title = Non junger paginas dual\npdfjs-spread-none-button-label = Sin paginas dual\npdfjs-spread-odd-button =\n    .title = Junger paginas dual a partir de paginas con numeros impar\npdfjs-spread-odd-button-label = Paginas dual impar\npdfjs-spread-even-button =\n    .title = Junger paginas dual a partir de paginas con numeros par\npdfjs-spread-even-button-label = Paginas dual par\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Proprietates del documento…\npdfjs-document-properties-button-label = Proprietates del documento…\npdfjs-document-properties-file-name = Nomine del file:\npdfjs-document-properties-file-size = Dimension de file:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Titulo:\npdfjs-document-properties-author = Autor:\npdfjs-document-properties-subject = Subjecto:\npdfjs-document-properties-keywords = Parolas clave:\npdfjs-document-properties-creation-date = Data de creation:\npdfjs-document-properties-modification-date = Data de modification:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Creator:\npdfjs-document-properties-producer = Productor PDF:\npdfjs-document-properties-version = Version PDF:\npdfjs-document-properties-page-count = Numero de paginas:\npdfjs-document-properties-page-size = Dimension del pagina:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = vertical\npdfjs-document-properties-page-size-orientation-landscape = horizontal\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Littera\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Vista web rapide:\npdfjs-document-properties-linearized-yes = Si\npdfjs-document-properties-linearized-no = No\npdfjs-document-properties-close-button = Clauder\n\n## Print\n\npdfjs-print-progress-message = Preparation del documento pro le impression…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Cancellar\npdfjs-printing-not-supported = Attention : le impression non es totalmente supportate per ce navigator.\npdfjs-printing-not-ready = Attention: le file PDF non es integremente cargate pro lo poter imprimer.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Monstrar/celar le barra lateral\npdfjs-toggle-sidebar-notification-button =\n    .title = Monstrar/celar le barra lateral (le documento contine structura/attachamentos/stratos)\npdfjs-toggle-sidebar-button-label = Monstrar/celar le barra lateral\npdfjs-document-outline-button =\n    .title = Monstrar le schema del documento (clic duple pro expander/contraher tote le elementos)\npdfjs-document-outline-button-label = Schema del documento\npdfjs-attachments-button =\n    .title = Monstrar le annexos\npdfjs-attachments-button-label = Annexos\npdfjs-layers-button =\n    .title = Monstrar stratos (clicca duple pro remontar tote le stratos al stato predefinite)\npdfjs-layers-button-label = Stratos\npdfjs-thumbs-button =\n    .title = Monstrar le vignettes\npdfjs-thumbs-button-label = Vignettes\npdfjs-current-outline-item-button =\n    .title = Trovar le elemento de structura actual\npdfjs-current-outline-item-button-label = Elemento de structura actual\npdfjs-findbar-button =\n    .title = Cercar in le documento\npdfjs-findbar-button-label = Cercar\npdfjs-additional-layers = Altere stratos\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Pagina { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Vignette del pagina { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Cercar\n    .placeholder = Cercar in le documento…\npdfjs-find-previous-button =\n    .title = Trovar le previe occurrentia del phrase\npdfjs-find-previous-button-label = Previe\npdfjs-find-next-button =\n    .title = Trovar le successive occurrentia del phrase\npdfjs-find-next-button-label = Sequente\npdfjs-find-highlight-checkbox = Evidentiar toto\npdfjs-find-match-case-checkbox-label = Distinguer majusculas/minusculas\npdfjs-find-match-diacritics-checkbox-label = Differentiar diacriticos\npdfjs-find-entire-word-checkbox-label = Parolas integre\npdfjs-find-reached-top = Initio del documento attingite, continuation ab fin\npdfjs-find-reached-bottom = Fin del documento attingite, continuation ab initio\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } de { $total } correspondentia\n       *[other] { $current } de { $total } correspondentias\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Plus de { $limit } correspondentia\n       *[other] Plus de { $limit } correspondentias\n    }\npdfjs-find-not-found = Phrase non trovate\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Plen largor del pagina\npdfjs-page-scale-fit = Pagina integre\npdfjs-page-scale-auto = Zoom automatic\npdfjs-page-scale-actual = Dimension real\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Pagina { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Un error occurreva durante que on cargava le file PDF.\npdfjs-invalid-file-error = File PDF corrumpite o non valide.\npdfjs-missing-file-error = File PDF mancante.\npdfjs-unexpected-response-error = Responsa del servitor inexpectate.\npdfjs-rendering-error = Un error occurreva durante que on processava le pagina.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Annotation]\n\n## Password\n\npdfjs-password-label = Insere le contrasigno pro aperir iste file PDF.\npdfjs-password-invalid = Contrasigno invalide. Per favor retenta.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Cancellar\npdfjs-web-fonts-disabled = Le typos de litteras web es disactivate: impossibile usar le typos de litteras PDF incorporate.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Texto\npdfjs-editor-free-text-button-label = Texto\npdfjs-editor-ink-button =\n    .title = Designar\npdfjs-editor-ink-button-label = Designar\npdfjs-editor-stamp-button =\n    .title = Adder o rediger imagines\npdfjs-editor-stamp-button-label = Adder o rediger imagines\npdfjs-editor-highlight-button =\n    .title = Evidentia\npdfjs-editor-highlight-button-label = Evidentia\npdfjs-highlight-floating-button1 =\n    .title = Evidentiar\n    .aria-label = Evidentiar\npdfjs-highlight-floating-button-label = Evidentiar\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Remover le designo\npdfjs-editor-remove-freetext-button =\n    .title = Remover texto\npdfjs-editor-remove-stamp-button =\n    .title = Remover imagine\npdfjs-editor-remove-highlight-button =\n    .title = Remover evidentia\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Color\npdfjs-editor-free-text-size-input = Dimension\npdfjs-editor-ink-color-input = Color\npdfjs-editor-ink-thickness-input = Spissor\npdfjs-editor-ink-opacity-input = Opacitate\npdfjs-editor-stamp-add-image-button =\n    .title = Adder imagine\npdfjs-editor-stamp-add-image-button-label = Adder imagine\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Spissor\npdfjs-editor-free-highlight-thickness-title =\n    .title = Cambiar spissor evidentiante elementos differente de texto\npdfjs-free-text =\n    .aria-label = Editor de texto\npdfjs-free-text-default-content = Comenciar a scriber…\npdfjs-ink =\n    .aria-label = Editor de designos\npdfjs-ink-canvas =\n    .aria-label = Imagine create per le usator\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Texto alternative\npdfjs-editor-alt-text-edit-button-label = Rediger texto alternative\npdfjs-editor-alt-text-dialog-label = Elige un option\npdfjs-editor-alt-text-dialog-description = Le texto alternative (alt text) adjuta quando le personas non pote vider le imagine o quando illo non carga.\npdfjs-editor-alt-text-add-description-label = Adder un description\npdfjs-editor-alt-text-add-description-description = Mira a 1-2 phrases que describe le subjecto, parametro, o actiones.\npdfjs-editor-alt-text-mark-decorative-label = Marcar como decorative\npdfjs-editor-alt-text-mark-decorative-description = Isto es usate pro imagines ornamental, como bordaturas o filigranas.\npdfjs-editor-alt-text-cancel-button = Cancellar\npdfjs-editor-alt-text-save-button = Salvar\npdfjs-editor-alt-text-decorative-tooltip = Marcate como decorative\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Per exemplo, “Un juvene sede a un tabula pro mangiar un repasto”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Angulo superior sinistre — redimensionar\npdfjs-editor-resizer-label-top-middle = Medio superior — redimensionar\npdfjs-editor-resizer-label-top-right = Angulo superior dextre — redimensionar\npdfjs-editor-resizer-label-middle-right = Medio dextre — redimensionar\npdfjs-editor-resizer-label-bottom-right = Angulo inferior dextre — redimensionar\npdfjs-editor-resizer-label-bottom-middle = Medio inferior — redimensionar\npdfjs-editor-resizer-label-bottom-left = Angulo inferior sinistre — redimensionar\npdfjs-editor-resizer-label-middle-left = Medio sinistre — redimensionar\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Color pro evidentiar\npdfjs-editor-colorpicker-button =\n    .title = Cambiar color\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Electiones del color\npdfjs-editor-colorpicker-yellow =\n    .title = Jalne\npdfjs-editor-colorpicker-green =\n    .title = Verde\npdfjs-editor-colorpicker-blue =\n    .title = Blau\npdfjs-editor-colorpicker-pink =\n    .title = Rosate\npdfjs-editor-colorpicker-red =\n    .title = Rubie\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Monstrar toto\npdfjs-editor-highlight-show-all-button =\n    .title = Monstrar toto\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/id/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Laman Sebelumnya\npdfjs-previous-button-label = Sebelumnya\npdfjs-next-button =\n    .title = Laman Selanjutnya\npdfjs-next-button-label = Selanjutnya\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Halaman\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = dari { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } dari { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Perkecil\npdfjs-zoom-out-button-label = Perkecil\npdfjs-zoom-in-button =\n    .title = Perbesar\npdfjs-zoom-in-button-label = Perbesar\npdfjs-zoom-select =\n    .title = Perbesaran\npdfjs-presentation-mode-button =\n    .title = Ganti ke Mode Presentasi\npdfjs-presentation-mode-button-label = Mode Presentasi\npdfjs-open-file-button =\n    .title = Buka Berkas\npdfjs-open-file-button-label = Buka\npdfjs-print-button =\n    .title = Cetak\npdfjs-print-button-label = Cetak\npdfjs-save-button =\n    .title = Simpan\npdfjs-save-button-label = Simpan\npdfjs-bookmark-button =\n    .title = Laman Saat Ini (Lihat URL dari Laman Sekarang)\npdfjs-bookmark-button-label = Laman Saat Ini\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Alat\npdfjs-tools-button-label = Alat\npdfjs-first-page-button =\n    .title = Buka Halaman Pertama\npdfjs-first-page-button-label = Buka Halaman Pertama\npdfjs-last-page-button =\n    .title = Buka Halaman Terakhir\npdfjs-last-page-button-label = Buka Halaman Terakhir\npdfjs-page-rotate-cw-button =\n    .title = Putar Searah Jarum Jam\npdfjs-page-rotate-cw-button-label = Putar Searah Jarum Jam\npdfjs-page-rotate-ccw-button =\n    .title = Putar Berlawanan Arah Jarum Jam\npdfjs-page-rotate-ccw-button-label = Putar Berlawanan Arah Jarum Jam\npdfjs-cursor-text-select-tool-button =\n    .title = Aktifkan Alat Seleksi Teks\npdfjs-cursor-text-select-tool-button-label = Alat Seleksi Teks\npdfjs-cursor-hand-tool-button =\n    .title = Aktifkan Alat Tangan\npdfjs-cursor-hand-tool-button-label = Alat Tangan\npdfjs-scroll-page-button =\n    .title = Gunakan Pengguliran Laman\npdfjs-scroll-page-button-label = Pengguliran Laman\npdfjs-scroll-vertical-button =\n    .title = Gunakan Penggeseran Vertikal\npdfjs-scroll-vertical-button-label = Penggeseran Vertikal\npdfjs-scroll-horizontal-button =\n    .title = Gunakan Penggeseran Horizontal\npdfjs-scroll-horizontal-button-label = Penggeseran Horizontal\npdfjs-scroll-wrapped-button =\n    .title = Gunakan Penggeseran Terapit\npdfjs-scroll-wrapped-button-label = Penggeseran Terapit\npdfjs-spread-none-button =\n    .title = Jangan gabungkan lembar halaman\npdfjs-spread-none-button-label = Tidak Ada Lembaran\npdfjs-spread-odd-button =\n    .title = Gabungkan lembar lamanan mulai dengan halaman ganjil\npdfjs-spread-odd-button-label = Lembaran Ganjil\npdfjs-spread-even-button =\n    .title = Gabungkan lembar halaman dimulai dengan halaman genap\npdfjs-spread-even-button-label = Lembaran Genap\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Properti Dokumen…\npdfjs-document-properties-button-label = Properti Dokumen…\npdfjs-document-properties-file-name = Nama berkas:\npdfjs-document-properties-file-size = Ukuran berkas:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } byte)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } byte)\npdfjs-document-properties-title = Judul:\npdfjs-document-properties-author = Penyusun:\npdfjs-document-properties-subject = Subjek:\npdfjs-document-properties-keywords = Kata Kunci:\npdfjs-document-properties-creation-date = Tanggal Dibuat:\npdfjs-document-properties-modification-date = Tanggal Dimodifikasi:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Pembuat:\npdfjs-document-properties-producer = Pemroduksi PDF:\npdfjs-document-properties-version = Versi PDF:\npdfjs-document-properties-page-count = Jumlah Halaman:\npdfjs-document-properties-page-size = Ukuran Laman:\npdfjs-document-properties-page-size-unit-inches = inci\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = tegak\npdfjs-document-properties-page-size-orientation-landscape = mendatar\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Tampilan Web Kilat:\npdfjs-document-properties-linearized-yes = Ya\npdfjs-document-properties-linearized-no = Tidak\npdfjs-document-properties-close-button = Tutup\n\n## Print\n\npdfjs-print-progress-message = Menyiapkan dokumen untuk pencetakan…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Batalkan\npdfjs-printing-not-supported = Peringatan: Pencetakan tidak didukung secara lengkap pada peramban ini.\npdfjs-printing-not-ready = Peringatan: Berkas PDF masih belum dimuat secara lengkap untuk dapat dicetak.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Aktif/Nonaktifkan Bilah Samping\npdfjs-toggle-sidebar-notification-button =\n    .title = Aktif/Nonaktifkan Bilah Samping (dokumen berisi kerangka/lampiran/lapisan)\npdfjs-toggle-sidebar-button-label = Aktif/Nonaktifkan Bilah Samping\npdfjs-document-outline-button =\n    .title = Tampilkan Kerangka Dokumen (klik ganda untuk membentangkan/menciutkan semua item)\npdfjs-document-outline-button-label = Kerangka Dokumen\npdfjs-attachments-button =\n    .title = Tampilkan Lampiran\npdfjs-attachments-button-label = Lampiran\npdfjs-layers-button =\n    .title = Tampilkan Lapisan (klik ganda untuk mengatur ulang semua lapisan ke keadaan baku)\npdfjs-layers-button-label = Lapisan\npdfjs-thumbs-button =\n    .title = Tampilkan Miniatur\npdfjs-thumbs-button-label = Miniatur\npdfjs-current-outline-item-button =\n    .title = Cari Butir Ikhtisar Saat Ini\npdfjs-current-outline-item-button-label = Butir Ikhtisar Saat Ini\npdfjs-findbar-button =\n    .title = Temukan di Dokumen\npdfjs-findbar-button-label = Temukan\npdfjs-additional-layers = Lapisan Tambahan\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Laman { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatur Laman { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Temukan\n    .placeholder = Temukan di dokumen…\npdfjs-find-previous-button =\n    .title = Temukan kata sebelumnya\npdfjs-find-previous-button-label = Sebelumnya\npdfjs-find-next-button =\n    .title = Temukan lebih lanjut\npdfjs-find-next-button-label = Selanjutnya\npdfjs-find-highlight-checkbox = Sorot semuanya\npdfjs-find-match-case-checkbox-label = Cocokkan BESAR/kecil\npdfjs-find-match-diacritics-checkbox-label = Pencocokan Diakritik\npdfjs-find-entire-word-checkbox-label = Seluruh teks\npdfjs-find-reached-top = Sampai di awal dokumen, dilanjutkan dari bawah\npdfjs-find-reached-bottom = Sampai di akhir dokumen, dilanjutkan dari atas\npdfjs-find-not-found = Frasa tidak ditemukan\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Lebar Laman\npdfjs-page-scale-fit = Muat Laman\npdfjs-page-scale-auto = Perbesaran Otomatis\npdfjs-page-scale-actual = Ukuran Asli\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Halaman { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Galat terjadi saat memuat PDF.\npdfjs-invalid-file-error = Berkas PDF tidak valid atau rusak.\npdfjs-missing-file-error = Berkas PDF tidak ada.\npdfjs-unexpected-response-error = Balasan server yang tidak diharapkan.\npdfjs-rendering-error = Galat terjadi saat merender laman.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Anotasi { $type }]\n\n## Password\n\npdfjs-password-label = Masukkan sandi untuk membuka berkas PDF ini.\npdfjs-password-invalid = Sandi tidak valid. Silakan coba lagi.\npdfjs-password-ok-button = Oke\npdfjs-password-cancel-button = Batal\npdfjs-web-fonts-disabled = Font web dinonaktifkan: tidak dapat menggunakan font PDF yang tersemat.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Teks\npdfjs-editor-free-text-button-label = Teks\npdfjs-editor-ink-button =\n    .title = Gambar\npdfjs-editor-ink-button-label = Gambar\n# Editor Parameters\npdfjs-editor-free-text-color-input = Warna\npdfjs-editor-free-text-size-input = Ukuran\npdfjs-editor-ink-color-input = Warna\npdfjs-editor-ink-thickness-input = Ketebalan\npdfjs-editor-ink-opacity-input = Opasitas\npdfjs-free-text =\n    .aria-label = Editor Teks\npdfjs-free-text-default-content = Mulai mengetik…\npdfjs-ink =\n    .aria-label = Editor Gambar\npdfjs-ink-canvas =\n    .aria-label = Gambar yang dibuat pengguna\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/is/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Fyrri síða\npdfjs-previous-button-label = Fyrri\npdfjs-next-button =\n    .title = Næsta síða\npdfjs-next-button-label = Næsti\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Síða\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = af { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } af { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Minnka aðdrátt\npdfjs-zoom-out-button-label = Minnka aðdrátt\npdfjs-zoom-in-button =\n    .title = Auka aðdrátt\npdfjs-zoom-in-button-label = Auka aðdrátt\npdfjs-zoom-select =\n    .title = Aðdráttur\npdfjs-presentation-mode-button =\n    .title = Skipta yfir á kynningarham\npdfjs-presentation-mode-button-label = Kynningarhamur\npdfjs-open-file-button =\n    .title = Opna skrá\npdfjs-open-file-button-label = Opna\npdfjs-print-button =\n    .title = Prenta\npdfjs-print-button-label = Prenta\npdfjs-save-button =\n    .title = Vista\npdfjs-save-button-label = Vista\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Sækja\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Sækja\npdfjs-bookmark-button =\n    .title = Núverandi síða (Skoða vefslóð frá núverandi síðu)\npdfjs-bookmark-button-label = Núverandi síða\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Opna í smáforriti\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Opna í smáforriti\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Verkfæri\npdfjs-tools-button-label = Verkfæri\npdfjs-first-page-button =\n    .title = Fara á fyrstu síðu\npdfjs-first-page-button-label = Fara á fyrstu síðu\npdfjs-last-page-button =\n    .title = Fara á síðustu síðu\npdfjs-last-page-button-label = Fara á síðustu síðu\npdfjs-page-rotate-cw-button =\n    .title = Snúa réttsælis\npdfjs-page-rotate-cw-button-label = Snúa réttsælis\npdfjs-page-rotate-ccw-button =\n    .title = Snúa rangsælis\npdfjs-page-rotate-ccw-button-label = Snúa rangsælis\npdfjs-cursor-text-select-tool-button =\n    .title = Virkja textavalsáhald\npdfjs-cursor-text-select-tool-button-label = Textavalsáhald\npdfjs-cursor-hand-tool-button =\n    .title = Virkja handarverkfæri\npdfjs-cursor-hand-tool-button-label = Handarverkfæri\npdfjs-scroll-page-button =\n    .title = Nota síðuskrun\npdfjs-scroll-page-button-label = Síðuskrun\npdfjs-scroll-vertical-button =\n    .title = Nota lóðrétt skrun\npdfjs-scroll-vertical-button-label = Lóðrétt skrun\npdfjs-scroll-horizontal-button =\n    .title = Nota lárétt skrun\npdfjs-scroll-horizontal-button-label = Lárétt skrun\npdfjs-scroll-wrapped-button =\n    .title = Nota línuskipt síðuskrun\npdfjs-scroll-wrapped-button-label = Línuskipt síðuskrun\npdfjs-spread-none-button =\n    .title = Ekki taka þátt í dreifingu síðna\npdfjs-spread-none-button-label = Engin dreifing\npdfjs-spread-odd-button =\n    .title = Taka þátt í dreifingu síðna með oddatölum\npdfjs-spread-odd-button-label = Oddatöludreifing\npdfjs-spread-even-button =\n    .title = Taktu þátt í dreifingu síðna með jöfnuntölum\npdfjs-spread-even-button-label = Jafnatöludreifing\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Eiginleikar skjals…\npdfjs-document-properties-button-label = Eiginleikar skjals…\npdfjs-document-properties-file-name = Skráarnafn:\npdfjs-document-properties-file-size = Skrárstærð:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Titill:\npdfjs-document-properties-author = Hönnuður:\npdfjs-document-properties-subject = Efni:\npdfjs-document-properties-keywords = Stikkorð:\npdfjs-document-properties-creation-date = Búið til:\npdfjs-document-properties-modification-date = Dags breytingar:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Höfundur:\npdfjs-document-properties-producer = PDF framleiðandi:\npdfjs-document-properties-version = PDF útgáfa:\npdfjs-document-properties-page-count = Blaðsíðufjöldi:\npdfjs-document-properties-page-size = Stærð síðu:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = skammsnið\npdfjs-document-properties-page-size-orientation-landscape = langsnið\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Fljótleg vefskoðun:\npdfjs-document-properties-linearized-yes = Já\npdfjs-document-properties-linearized-no = Nei\npdfjs-document-properties-close-button = Loka\n\n## Print\n\npdfjs-print-progress-message = Undirbý skjal fyrir prentun…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Hætta við\npdfjs-printing-not-supported = Aðvörun: Prentun er ekki með fyllilegan stuðning á þessum vafra.\npdfjs-printing-not-ready = Aðvörun: Ekki er búið að hlaða inn allri PDF skránni fyrir prentun.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Víxla hliðarspjaldi af/á\npdfjs-toggle-sidebar-notification-button =\n    .title = Víxla hliðarslá (skjal inniheldur yfirlit/viðhengi/lög)\npdfjs-toggle-sidebar-button-label = Víxla hliðarspjaldi af/á\npdfjs-document-outline-button =\n    .title = Sýna yfirlit skjals (tvísmelltu til að opna/loka öllum hlutum)\npdfjs-document-outline-button-label = Efnisskipan skjals\npdfjs-attachments-button =\n    .title = Sýna viðhengi\npdfjs-attachments-button-label = Viðhengi\npdfjs-layers-button =\n    .title = Birta lög (tvísmelltu til að endurstilla öll lög í sjálfgefna stöðu)\npdfjs-layers-button-label = Lög\npdfjs-thumbs-button =\n    .title = Sýna smámyndir\npdfjs-thumbs-button-label = Smámyndir\npdfjs-current-outline-item-button =\n    .title = Finna núverandi atriði efnisskipunar\npdfjs-current-outline-item-button-label = Núverandi atriði efnisskipunar\npdfjs-findbar-button =\n    .title = Leita í skjali\npdfjs-findbar-button-label = Leita\npdfjs-additional-layers = Viðbótarlög\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Síða { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Smámynd af síðu { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Leita\n    .placeholder = Leita í skjali…\npdfjs-find-previous-button =\n    .title = Leita að fyrra tilfelli þessara orða\npdfjs-find-previous-button-label = Fyrri\npdfjs-find-next-button =\n    .title = Leita að næsta tilfelli þessara orða\npdfjs-find-next-button-label = Næsti\npdfjs-find-highlight-checkbox = Lita allt\npdfjs-find-match-case-checkbox-label = Passa við stafstöðu\npdfjs-find-match-diacritics-checkbox-label = Passa við broddstafi\npdfjs-find-entire-word-checkbox-label = Heil orð\npdfjs-find-reached-top = Náði efst í skjal, held áfram neðst\npdfjs-find-reached-bottom = Náði enda skjals, held áfram efst\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } af { $total } passar við\n       *[other] { $current } af { $total } passa við\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Fleiri en { $limit } passar við\n       *[other] Fleiri en { $limit } passa við\n    }\npdfjs-find-not-found = Fann ekki orðið\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Síðubreidd\npdfjs-page-scale-fit = Passa á síðu\npdfjs-page-scale-auto = Sjálfvirkur aðdráttur\npdfjs-page-scale-actual = Raunstærð\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Síða { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Villa kom upp við að hlaða inn PDF.\npdfjs-invalid-file-error = Ógild eða skemmd PDF skrá.\npdfjs-missing-file-error = Vantar PDF skrá.\npdfjs-unexpected-response-error = Óvænt svar frá netþjóni.\npdfjs-rendering-error = Upp kom villa við að birta síðuna.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Skýring]\n\n## Password\n\npdfjs-password-label = Sláðu inn lykilorð til að opna þessa PDF skrá.\npdfjs-password-invalid = Ógilt lykilorð. Reyndu aftur.\npdfjs-password-ok-button = Í lagi\npdfjs-password-cancel-button = Hætta við\npdfjs-web-fonts-disabled = Vef leturgerðir eru óvirkar: get ekki notað innbyggðar PDF leturgerðir.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Texti\npdfjs-editor-free-text-button-label = Texti\npdfjs-editor-ink-button =\n    .title = Teikna\npdfjs-editor-ink-button-label = Teikna\npdfjs-editor-stamp-button =\n    .title = Bæta við eða breyta myndum\npdfjs-editor-stamp-button-label = Bæta við eða breyta myndum\npdfjs-editor-highlight-button =\n    .title = Áherslulita\npdfjs-editor-highlight-button-label = Áherslulita\npdfjs-highlight-floating-button =\n    .title = Áherslulita\npdfjs-highlight-floating-button1 =\n    .title = Áherslulita\n    .aria-label = Áherslulita\npdfjs-highlight-floating-button-label = Áherslulita\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Fjarlægja teikningu\npdfjs-editor-remove-freetext-button =\n    .title = Fjarlægja texta\npdfjs-editor-remove-stamp-button =\n    .title = Fjarlægja mynd\npdfjs-editor-remove-highlight-button =\n    .title = Fjarlægja áherslulit\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Litur\npdfjs-editor-free-text-size-input = Stærð\npdfjs-editor-ink-color-input = Litur\npdfjs-editor-ink-thickness-input = Þykkt\npdfjs-editor-ink-opacity-input = Ógegnsæi\npdfjs-editor-stamp-add-image-button =\n    .title = Bæta við mynd\npdfjs-editor-stamp-add-image-button-label = Bæta við mynd\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Þykkt\npdfjs-editor-free-highlight-thickness-title =\n    .title = Breyta þykkt við áherslulitun annarra atriða en texta\npdfjs-free-text =\n    .aria-label = Textaritill\npdfjs-free-text-default-content = Byrjaðu að skrifa…\npdfjs-ink =\n    .aria-label = Teikniritill\npdfjs-ink-canvas =\n    .aria-label = Mynd gerð af notanda\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Alt-varatexti\npdfjs-editor-alt-text-edit-button-label = Breyta alt-varatexta\npdfjs-editor-alt-text-dialog-label = Veldu valkost\npdfjs-editor-alt-text-dialog-description = Alt-varatexti (auka-myndatexti) hjálpar þegar fólk getur ekki séð myndina eða þegar hún hleðst ekki inn.\npdfjs-editor-alt-text-add-description-label = Bættu við lýsingu\npdfjs-editor-alt-text-add-description-description = Reyndu að takmarka þetta við 1-2 setningar sem lýsa efninu, umhverfi eða aðgerðum.\npdfjs-editor-alt-text-mark-decorative-label = Merkja sem skraut\npdfjs-editor-alt-text-mark-decorative-description = Þetta er notað fyrir skrautmyndir, eins og borða eða vatnsmerki.\npdfjs-editor-alt-text-cancel-button = Hætta við\npdfjs-editor-alt-text-save-button = Vista\npdfjs-editor-alt-text-decorative-tooltip = Merkt sem skraut\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Til dæmis: „Ungur maður sest við borð til að snæða máltíð“\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Efst í vinstra horni - breyta stærð\npdfjs-editor-resizer-label-top-middle = Efst á miðju - breyta stærð\npdfjs-editor-resizer-label-top-right = Efst í hægra horni - breyta stærð\npdfjs-editor-resizer-label-middle-right = Miðja til hægri - breyta stærð\npdfjs-editor-resizer-label-bottom-right = Neðst í hægra horni - breyta stærð\npdfjs-editor-resizer-label-bottom-middle = Neðst á miðju - breyta stærð\npdfjs-editor-resizer-label-bottom-left = Neðst í vinstra horni - breyta stærð\npdfjs-editor-resizer-label-middle-left = Miðja til vinstri - breyta stærð\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Áherslulitur\npdfjs-editor-colorpicker-button =\n    .title = Skipta um lit\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Val lita\npdfjs-editor-colorpicker-yellow =\n    .title = Gult\npdfjs-editor-colorpicker-green =\n    .title = Grænt\npdfjs-editor-colorpicker-blue =\n    .title = Blátt\npdfjs-editor-colorpicker-pink =\n    .title = Bleikt\npdfjs-editor-colorpicker-red =\n    .title = Rautt\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Birta allt\npdfjs-editor-highlight-show-all-button =\n    .title = Birta allt\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/it/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Pagina precedente\npdfjs-previous-button-label = Precedente\npdfjs-next-button =\n    .title = Pagina successiva\npdfjs-next-button-label = Successiva\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Pagina\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = di { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } di { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Riduci zoom\npdfjs-zoom-out-button-label = Riduci zoom\npdfjs-zoom-in-button =\n    .title = Aumenta zoom\npdfjs-zoom-in-button-label = Aumenta zoom\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Passa alla modalità presentazione\npdfjs-presentation-mode-button-label = Modalità presentazione\npdfjs-open-file-button =\n    .title = Apri file\npdfjs-open-file-button-label = Apri\npdfjs-print-button =\n    .title = Stampa\npdfjs-print-button-label = Stampa\npdfjs-save-button =\n    .title = Salva\npdfjs-save-button-label = Salva\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Scarica\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Scarica\npdfjs-bookmark-button =\n    .title = Pagina corrente (mostra URL della pagina corrente)\npdfjs-bookmark-button-label = Pagina corrente\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Strumenti\npdfjs-tools-button-label = Strumenti\npdfjs-first-page-button =\n    .title = Vai alla prima pagina\npdfjs-first-page-button-label = Vai alla prima pagina\npdfjs-last-page-button =\n    .title = Vai all’ultima pagina\npdfjs-last-page-button-label = Vai all’ultima pagina\npdfjs-page-rotate-cw-button =\n    .title = Ruota in senso orario\npdfjs-page-rotate-cw-button-label = Ruota in senso orario\npdfjs-page-rotate-ccw-button =\n    .title = Ruota in senso antiorario\npdfjs-page-rotate-ccw-button-label = Ruota in senso antiorario\npdfjs-cursor-text-select-tool-button =\n    .title = Attiva strumento di selezione testo\npdfjs-cursor-text-select-tool-button-label = Strumento di selezione testo\npdfjs-cursor-hand-tool-button =\n    .title = Attiva strumento mano\npdfjs-cursor-hand-tool-button-label = Strumento mano\npdfjs-scroll-page-button =\n    .title = Utilizza scorrimento pagine\npdfjs-scroll-page-button-label = Scorrimento pagine\npdfjs-scroll-vertical-button =\n    .title = Scorri le pagine in verticale\npdfjs-scroll-vertical-button-label = Scorrimento verticale\npdfjs-scroll-horizontal-button =\n    .title = Scorri le pagine in orizzontale\npdfjs-scroll-horizontal-button-label = Scorrimento orizzontale\npdfjs-scroll-wrapped-button =\n    .title = Scorri le pagine in verticale, disponendole da sinistra a destra e andando a capo automaticamente\npdfjs-scroll-wrapped-button-label = Scorrimento con a capo automatico\npdfjs-spread-none-button =\n    .title = Non raggruppare pagine\npdfjs-spread-none-button-label = Nessun raggruppamento\npdfjs-spread-odd-button =\n    .title = Crea gruppi di pagine che iniziano con numeri di pagina dispari\npdfjs-spread-odd-button-label = Raggruppamento dispari\npdfjs-spread-even-button =\n    .title = Crea gruppi di pagine che iniziano con numeri di pagina pari\npdfjs-spread-even-button-label = Raggruppamento pari\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Proprietà del documento…\npdfjs-document-properties-button-label = Proprietà del documento…\npdfjs-document-properties-file-name = Nome file:\npdfjs-document-properties-file-size = Dimensione file:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } kB ({ $size_b } byte)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } byte)\npdfjs-document-properties-title = Titolo:\npdfjs-document-properties-author = Autore:\npdfjs-document-properties-subject = Oggetto:\npdfjs-document-properties-keywords = Parole chiave:\npdfjs-document-properties-creation-date = Data creazione:\npdfjs-document-properties-modification-date = Data modifica:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Autore originale:\npdfjs-document-properties-producer = Produttore PDF:\npdfjs-document-properties-version = Versione PDF:\npdfjs-document-properties-page-count = Conteggio pagine:\npdfjs-document-properties-page-size = Dimensioni pagina:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = verticale\npdfjs-document-properties-page-size-orientation-landscape = orizzontale\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Lettera\npdfjs-document-properties-page-size-name-legal = Legale\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Visualizzazione web veloce:\npdfjs-document-properties-linearized-yes = Sì\npdfjs-document-properties-linearized-no = No\npdfjs-document-properties-close-button = Chiudi\n\n## Print\n\npdfjs-print-progress-message = Preparazione documento per la stampa…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Annulla\npdfjs-printing-not-supported = Attenzione: la stampa non è completamente supportata da questo browser.\npdfjs-printing-not-ready = Attenzione: il PDF non è ancora stato caricato completamente per la stampa.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Attiva/disattiva barra laterale\npdfjs-toggle-sidebar-notification-button =\n    .title = Attiva/disattiva barra laterale (il documento contiene struttura/allegati/livelli)\npdfjs-toggle-sidebar-button-label = Attiva/disattiva barra laterale\npdfjs-document-outline-button =\n    .title = Visualizza la struttura del documento (doppio clic per visualizzare/comprimere tutti gli elementi)\npdfjs-document-outline-button-label = Struttura documento\npdfjs-attachments-button =\n    .title = Visualizza allegati\npdfjs-attachments-button-label = Allegati\npdfjs-layers-button =\n    .title = Visualizza livelli (doppio clic per ripristinare tutti i livelli allo stato predefinito)\npdfjs-layers-button-label = Livelli\npdfjs-thumbs-button =\n    .title = Mostra le miniature\npdfjs-thumbs-button-label = Miniature\npdfjs-current-outline-item-button =\n    .title = Trova elemento struttura corrente\npdfjs-current-outline-item-button-label = Elemento struttura corrente\npdfjs-findbar-button =\n    .title = Trova nel documento\npdfjs-findbar-button-label = Trova\npdfjs-additional-layers = Livelli aggiuntivi\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Pagina { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatura della pagina { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Trova\n    .placeholder = Trova nel documento…\npdfjs-find-previous-button =\n    .title = Trova l’occorrenza precedente del testo da cercare\npdfjs-find-previous-button-label = Precedente\npdfjs-find-next-button =\n    .title = Trova l’occorrenza successiva del testo da cercare\npdfjs-find-next-button-label = Successivo\npdfjs-find-highlight-checkbox = Evidenzia\npdfjs-find-match-case-checkbox-label = Maiuscole/minuscole\npdfjs-find-match-diacritics-checkbox-label = Segni diacritici\npdfjs-find-entire-word-checkbox-label = Parole intere\npdfjs-find-reached-top = Raggiunto l’inizio della pagina, continua dalla fine\npdfjs-find-reached-bottom = Raggiunta la fine della pagina, continua dall’inizio\n\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } di { $total } corrispondenza\n       *[other] { $current } di { $total } corrispondenze\n    }\n\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Più di una { $limit } corrispondenza\n       *[other] Più di { $limit } corrispondenze\n    }\n\npdfjs-find-not-found = Testo non trovato\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Larghezza pagina\npdfjs-page-scale-fit = Adatta a una pagina\npdfjs-page-scale-auto = Zoom automatico\npdfjs-page-scale-actual = Dimensioni effettive\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Pagina { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Si è verificato un errore durante il caricamento del PDF.\npdfjs-invalid-file-error = File PDF non valido o danneggiato.\npdfjs-missing-file-error = File PDF non disponibile.\npdfjs-unexpected-response-error = Risposta imprevista del server\npdfjs-rendering-error = Si è verificato un errore durante il rendering della pagina.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Annotazione: { $type }]\n\n## Password\n\npdfjs-password-label = Inserire la password per aprire questo file PDF.\npdfjs-password-invalid = Password non corretta. Riprovare.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Annulla\npdfjs-web-fonts-disabled = I web font risultano disattivati: impossibile utilizzare i caratteri incorporati nel PDF.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Testo\npdfjs-editor-free-text-button-label = Testo\npdfjs-editor-ink-button =\n    .title = Disegno\npdfjs-editor-ink-button-label = Disegno\npdfjs-editor-stamp-button =\n    .title = Aggiungi o rimuovi immagine\npdfjs-editor-stamp-button-label = Aggiungi o rimuovi immagine\npdfjs-editor-highlight-button =\n    .title = Evidenzia\npdfjs-editor-highlight-button-label = Evidenzia\npdfjs-highlight-floating-button1 =\n    .title = Evidenzia\n    .aria-label = Evidenzia\npdfjs-highlight-floating-button-label = Evidenzia\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Rimuovi disegno\npdfjs-editor-remove-freetext-button =\n    .title = Rimuovi testo\npdfjs-editor-remove-stamp-button =\n    .title = Rimuovi immagine\npdfjs-editor-remove-highlight-button =\n    .title = Rimuovi evidenziazione\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Colore\npdfjs-editor-free-text-size-input = Dimensione\npdfjs-editor-ink-color-input = Colore\npdfjs-editor-ink-thickness-input = Spessore\npdfjs-editor-ink-opacity-input = Opacità\npdfjs-editor-stamp-add-image-button =\n    .title = Aggiungi immagine\npdfjs-editor-stamp-add-image-button-label = Aggiungi immagine\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Spessore\npdfjs-editor-free-highlight-thickness-title =\n    .title = Modifica lo spessore della selezione per elementi non testuali\n\npdfjs-free-text =\n    .aria-label = Editor di testo\npdfjs-free-text-default-content = Inizia a digitare…\npdfjs-ink =\n    .aria-label = Editor disegni\npdfjs-ink-canvas =\n    .aria-label = Immagine creata dall’utente\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Testo alternativo\npdfjs-editor-alt-text-edit-button-label = Modifica testo alternativo\npdfjs-editor-alt-text-dialog-label = Scegli un’opzione\npdfjs-editor-alt-text-dialog-description = Il testo alternativo (“alt text”) aiuta quando le persone non possono vedere l’immagine o quando l’immagine non viene caricata.\npdfjs-editor-alt-text-add-description-label = Aggiungi una descrizione\npdfjs-editor-alt-text-add-description-description = Punta a una o due frasi che descrivono l’argomento, l’ambientazione o le azioni.\npdfjs-editor-alt-text-mark-decorative-label = Contrassegna come decorativa\npdfjs-editor-alt-text-mark-decorative-description = Viene utilizzato per immagini ornamentali, come bordi o filigrane.\npdfjs-editor-alt-text-cancel-button = Annulla\npdfjs-editor-alt-text-save-button = Salva\npdfjs-editor-alt-text-decorative-tooltip = Contrassegnata come decorativa\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Ad esempio, “Un giovane si siede a tavola per mangiare”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Angolo in alto a sinistra — ridimensiona\npdfjs-editor-resizer-label-top-middle = Lato superiore nel mezzo — ridimensiona\npdfjs-editor-resizer-label-top-right = Angolo in alto a destra — ridimensiona\npdfjs-editor-resizer-label-middle-right = Lato destro nel mezzo — ridimensiona\npdfjs-editor-resizer-label-bottom-right = Angolo in basso a destra — ridimensiona\npdfjs-editor-resizer-label-bottom-middle = Lato inferiore nel mezzo — ridimensiona\npdfjs-editor-resizer-label-bottom-left = Angolo in basso a sinistra — ridimensiona\npdfjs-editor-resizer-label-middle-left = Lato sinistro nel mezzo — ridimensiona\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Colore evidenziatore\n\npdfjs-editor-colorpicker-button =\n    .title = Cambia colore\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Colori disponibili\npdfjs-editor-colorpicker-yellow =\n    .title = Giallo\npdfjs-editor-colorpicker-green =\n    .title = Verde\npdfjs-editor-colorpicker-blue =\n    .title = Blu\npdfjs-editor-colorpicker-pink =\n    .title = Rosa\npdfjs-editor-colorpicker-red =\n    .title = Rosso\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Mostra tutto\npdfjs-editor-highlight-show-all-button =\n    .title = Mostra tutto\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/ja/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = 前のページへ戻ります\npdfjs-previous-button-label = 前へ\npdfjs-next-button =\n    .title = 次のページへ進みます\npdfjs-next-button-label = 次へ\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = ページ\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = / { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } / { $pagesCount })\npdfjs-zoom-out-button =\n    .title = 表示を縮小します\npdfjs-zoom-out-button-label = 縮小\npdfjs-zoom-in-button =\n    .title = 表示を拡大します\npdfjs-zoom-in-button-label = 拡大\npdfjs-zoom-select =\n    .title = 拡大/縮小\npdfjs-presentation-mode-button =\n    .title = プレゼンテーションモードに切り替えます\npdfjs-presentation-mode-button-label = プレゼンテーションモード\npdfjs-open-file-button =\n    .title = ファイルを開きます\npdfjs-open-file-button-label = 開く\npdfjs-print-button =\n    .title = 印刷します\npdfjs-print-button-label = 印刷\npdfjs-save-button =\n    .title = 保存します\npdfjs-save-button-label = 保存\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = ダウンロードします\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = ダウンロード\npdfjs-bookmark-button =\n    .title = 現在のページの URL です (現在のページを表示する URL)\npdfjs-bookmark-button-label = 現在のページ\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = ツール\npdfjs-tools-button-label = ツール\npdfjs-first-page-button =\n    .title = 最初のページへ移動します\npdfjs-first-page-button-label = 最初のページへ移動\npdfjs-last-page-button =\n    .title = 最後のページへ移動します\npdfjs-last-page-button-label = 最後のページへ移動\npdfjs-page-rotate-cw-button =\n    .title = ページを右へ回転します\npdfjs-page-rotate-cw-button-label = 右回転\npdfjs-page-rotate-ccw-button =\n    .title = ページを左へ回転します\npdfjs-page-rotate-ccw-button-label = 左回転\npdfjs-cursor-text-select-tool-button =\n    .title = テキスト選択ツールを有効にします\npdfjs-cursor-text-select-tool-button-label = テキスト選択ツール\npdfjs-cursor-hand-tool-button =\n    .title = 手のひらツールを有効にします\npdfjs-cursor-hand-tool-button-label = 手のひらツール\npdfjs-scroll-page-button =\n    .title = ページ単位でスクロールします\npdfjs-scroll-page-button-label = ページ単位でスクロール\npdfjs-scroll-vertical-button =\n    .title = 縦スクロールにします\npdfjs-scroll-vertical-button-label = 縦スクロール\npdfjs-scroll-horizontal-button =\n    .title = 横スクロールにします\npdfjs-scroll-horizontal-button-label = 横スクロール\npdfjs-scroll-wrapped-button =\n    .title = 折り返しスクロールにします\npdfjs-scroll-wrapped-button-label = 折り返しスクロール\npdfjs-spread-none-button =\n    .title = 見開きにしません\npdfjs-spread-none-button-label = 見開きにしない\npdfjs-spread-odd-button =\n    .title = 奇数ページ開始で見開きにします\npdfjs-spread-odd-button-label = 奇数ページ見開き\npdfjs-spread-even-button =\n    .title = 偶数ページ開始で見開きにします\npdfjs-spread-even-button-label = 偶数ページ見開き\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = 文書のプロパティ...\npdfjs-document-properties-button-label = 文書のプロパティ...\npdfjs-document-properties-file-name = ファイル名:\npdfjs-document-properties-file-size = ファイルサイズ:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } バイト)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } バイト)\npdfjs-document-properties-title = タイトル:\npdfjs-document-properties-author = 作成者:\npdfjs-document-properties-subject = 件名:\npdfjs-document-properties-keywords = キーワード:\npdfjs-document-properties-creation-date = 作成日:\npdfjs-document-properties-modification-date = 更新日:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = アプリケーション:\npdfjs-document-properties-producer = PDF 作成:\npdfjs-document-properties-version = PDF のバージョン:\npdfjs-document-properties-page-count = ページ数:\npdfjs-document-properties-page-size = ページサイズ:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = 縦\npdfjs-document-properties-page-size-orientation-landscape = 横\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = レター\npdfjs-document-properties-page-size-name-legal = リーガル\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = ウェブ表示用に最適化:\npdfjs-document-properties-linearized-yes = はい\npdfjs-document-properties-linearized-no = いいえ\npdfjs-document-properties-close-button = 閉じる\n\n## Print\n\npdfjs-print-progress-message = 文書の印刷を準備しています...\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = キャンセル\npdfjs-printing-not-supported = 警告: このブラウザーでは印刷が完全にサポートされていません。\npdfjs-printing-not-ready = 警告: PDF を印刷するための読み込みが終了していません。\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = サイドバー表示を切り替えます\npdfjs-toggle-sidebar-notification-button =\n    .title = サイドバー表示を切り替えます (文書に含まれるアウトライン / 添付 / レイヤー)\npdfjs-toggle-sidebar-button-label = サイドバーの切り替え\npdfjs-document-outline-button =\n    .title = 文書の目次を表示します (ダブルクリックで項目を開閉します)\npdfjs-document-outline-button-label = 文書の目次\npdfjs-attachments-button =\n    .title = 添付ファイルを表示します\npdfjs-attachments-button-label = 添付ファイル\npdfjs-layers-button =\n    .title = レイヤーを表示します (ダブルクリックですべてのレイヤーが初期状態に戻ります)\npdfjs-layers-button-label = レイヤー\npdfjs-thumbs-button =\n    .title = 縮小版を表示します\npdfjs-thumbs-button-label = 縮小版\npdfjs-current-outline-item-button =\n    .title = 現在のアウトライン項目を検索\npdfjs-current-outline-item-button-label = 現在のアウトライン項目\npdfjs-findbar-button =\n    .title = 文書内を検索します\npdfjs-findbar-button-label = 検索\npdfjs-additional-layers = 追加レイヤー\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = { $page } ページ\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = { $page } ページの縮小版\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = 検索\n    .placeholder = 文書内を検索...\npdfjs-find-previous-button =\n    .title = 現在より前の位置で指定文字列が現れる部分を検索します\npdfjs-find-previous-button-label = 前へ\npdfjs-find-next-button =\n    .title = 現在より後の位置で指定文字列が現れる部分を検索します\npdfjs-find-next-button-label = 次へ\npdfjs-find-highlight-checkbox = すべて強調表示\npdfjs-find-match-case-checkbox-label = 大文字/小文字を区別\npdfjs-find-match-diacritics-checkbox-label = 発音区別符号を区別\npdfjs-find-entire-word-checkbox-label = 単語一致\npdfjs-find-reached-top = 文書先頭に到達したので末尾から続けて検索します\npdfjs-find-reached-bottom = 文書末尾に到達したので先頭から続けて検索します\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $total } 件中 { $current } 件目\n       *[other] { $total } 件中 { $current } 件目\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] { $limit } 件以上一致\n       *[other] { $limit } 件以上一致\n    }\npdfjs-find-not-found = 見つかりませんでした\n\n## Predefined zoom values\n\npdfjs-page-scale-width = 幅に合わせる\npdfjs-page-scale-fit = ページのサイズに合わせる\npdfjs-page-scale-auto = 自動ズーム\npdfjs-page-scale-actual = 実際のサイズ\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = { $page } ページ\n\n## Loading indicator messages\n\npdfjs-loading-error = PDF の読み込み中にエラーが発生しました。\npdfjs-invalid-file-error = 無効または破損した PDF ファイル。\npdfjs-missing-file-error = PDF ファイルが見つかりません。\npdfjs-unexpected-response-error = サーバーから予期せぬ応答がありました。\npdfjs-rendering-error = ページのレンダリング中にエラーが発生しました。\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } 注釈]\n\n## Password\n\npdfjs-password-label = この PDF ファイルを開くためのパスワードを入力してください。\npdfjs-password-invalid = 無効なパスワードです。もう一度やり直してください。\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = キャンセル\npdfjs-web-fonts-disabled = ウェブフォントが無効になっています: 埋め込まれた PDF のフォントを使用できません。\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = フリーテキスト注釈を追加します\npdfjs-editor-free-text-button-label = フリーテキスト注釈\npdfjs-editor-ink-button =\n    .title = インク注釈を追加します\npdfjs-editor-ink-button-label = インク注釈\npdfjs-editor-stamp-button =\n    .title = 画像を追加または編集します\npdfjs-editor-stamp-button-label = 画像を追加または編集\npdfjs-editor-highlight-button =\n    .title = 強調します\npdfjs-editor-highlight-button-label = 強調\npdfjs-highlight-floating-button =\n    .title = 強調\npdfjs-highlight-floating-button1 =\n    .title = 強調\n    .aria-label = 強調します\npdfjs-highlight-floating-button-label = 強調\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = インク注釈を削除します\npdfjs-editor-remove-freetext-button =\n    .title = テキストを削除します\npdfjs-editor-remove-stamp-button =\n    .title = 画像を削除します\npdfjs-editor-remove-highlight-button =\n    .title = 強調を削除します\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = 色\npdfjs-editor-free-text-size-input = サイズ\npdfjs-editor-ink-color-input = 色\npdfjs-editor-ink-thickness-input = 太さ\npdfjs-editor-ink-opacity-input = 不透明度\npdfjs-editor-stamp-add-image-button =\n    .title = 画像を追加します\npdfjs-editor-stamp-add-image-button-label = 画像を追加\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = 太さ\npdfjs-editor-free-highlight-thickness-title =\n    .title = テキスト以外のアイテムを強調する時の太さを変更します\npdfjs-free-text =\n    .aria-label = フリーテキスト注釈エディター\npdfjs-free-text-default-content = テキストを入力してください...\npdfjs-ink =\n    .aria-label = インク注釈エディター\npdfjs-ink-canvas =\n    .aria-label = ユーザー作成画像\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = 代替テキスト\npdfjs-editor-alt-text-edit-button-label = 代替テキストを編集\npdfjs-editor-alt-text-dialog-label = オプションの選択\npdfjs-editor-alt-text-dialog-description = 代替テキストは画像が表示されない場合や読み込まれない場合にユーザーの助けになります。\npdfjs-editor-alt-text-add-description-label = 説明を追加\npdfjs-editor-alt-text-add-description-description = 対象や設定、動作を説明する短い文章を記入してください。\npdfjs-editor-alt-text-mark-decorative-label = 装飾マークを付ける\npdfjs-editor-alt-text-mark-decorative-description = これは区切り線やウォーターマークなどの装飾画像に使用されます。\npdfjs-editor-alt-text-cancel-button = キャンセル\npdfjs-editor-alt-text-save-button = 保存\npdfjs-editor-alt-text-decorative-tooltip = 装飾マークが付いています\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = 例:「若い人がテーブルの席について食事をしています」\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = 左上隅 — サイズ変更\npdfjs-editor-resizer-label-top-middle = 上中央 — サイズ変更\npdfjs-editor-resizer-label-top-right = 右上隅 — サイズ変更\npdfjs-editor-resizer-label-middle-right = 右中央 — サイズ変更\npdfjs-editor-resizer-label-bottom-right = 右下隅 — サイズ変更\npdfjs-editor-resizer-label-bottom-middle = 下中央 — サイズ変更\npdfjs-editor-resizer-label-bottom-left = 左下隅 — サイズ変更\npdfjs-editor-resizer-label-middle-left = 左中央 — サイズ変更\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = 強調色\npdfjs-editor-colorpicker-button =\n    .title = 色を変更します\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = 色の選択\npdfjs-editor-colorpicker-yellow =\n    .title = 黄色\npdfjs-editor-colorpicker-green =\n    .title = 緑色\npdfjs-editor-colorpicker-blue =\n    .title = 青色\npdfjs-editor-colorpicker-pink =\n    .title = ピンク色\npdfjs-editor-colorpicker-red =\n    .title = 赤色\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = すべて表示\npdfjs-editor-highlight-show-all-button =\n    .title = 強調の表示を切り替えます\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/ka/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = წინა გვერდი\npdfjs-previous-button-label = წინა\npdfjs-next-button =\n    .title = შემდეგი გვერდი\npdfjs-next-button-label = შემდეგი\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = გვერდი\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = { $pagesCount }-დან\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } { $pagesCount }-დან)\npdfjs-zoom-out-button =\n    .title = ზომის შემცირება\npdfjs-zoom-out-button-label = დაშორება\npdfjs-zoom-in-button =\n    .title = ზომის გაზრდა\npdfjs-zoom-in-button-label = მოახლოება\npdfjs-zoom-select =\n    .title = ზომა\npdfjs-presentation-mode-button =\n    .title = ჩვენების რეჟიმზე გადართვა\npdfjs-presentation-mode-button-label = ჩვენების რეჟიმი\npdfjs-open-file-button =\n    .title = ფაილის გახსნა\npdfjs-open-file-button-label = გახსნა\npdfjs-print-button =\n    .title = ამობეჭდვა\npdfjs-print-button-label = ამობეჭდვა\npdfjs-save-button =\n    .title = შენახვა\npdfjs-save-button-label = შენახვა\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = ჩამოტვირთვა\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = ჩამოტვირთვა\npdfjs-bookmark-button =\n    .title = მიმდინარე გვერდი (ბმული ამ გვერდისთვის)\npdfjs-bookmark-button-label = მიმდინარე გვერდი\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = გახსნა პროგრამით\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = გახსნა პროგრამით\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = ხელსაწყოები\npdfjs-tools-button-label = ხელსაწყოები\npdfjs-first-page-button =\n    .title = პირველ გვერდზე გადასვლა\npdfjs-first-page-button-label = პირველ გვერდზე გადასვლა\npdfjs-last-page-button =\n    .title = ბოლო გვერდზე გადასვლა\npdfjs-last-page-button-label = ბოლო გვერდზე გადასვლა\npdfjs-page-rotate-cw-button =\n    .title = საათის ისრის მიმართულებით შებრუნება\npdfjs-page-rotate-cw-button-label = მარჯვნივ გადაბრუნება\npdfjs-page-rotate-ccw-button =\n    .title = საათის ისრის საპირისპიროდ შებრუნება\npdfjs-page-rotate-ccw-button-label = მარცხნივ გადაბრუნება\npdfjs-cursor-text-select-tool-button =\n    .title = მოსანიშნი მაჩვენებლის გამოყენება\npdfjs-cursor-text-select-tool-button-label = მოსანიშნი მაჩვენებელი\npdfjs-cursor-hand-tool-button =\n    .title = გადასაადგილებელი მაჩვენებლის გამოყენება\npdfjs-cursor-hand-tool-button-label = გადასაადგილებელი\npdfjs-scroll-page-button =\n    .title = გვერდზე გადაადგილების გამოყენება\npdfjs-scroll-page-button-label = გვერდშივე გადაადგილება\npdfjs-scroll-vertical-button =\n    .title = გვერდების შვეულად ჩვენება\npdfjs-scroll-vertical-button-label = შვეული გადაადგილება\npdfjs-scroll-horizontal-button =\n    .title = გვერდების თარაზულად ჩვენება\npdfjs-scroll-horizontal-button-label = განივი გადაადგილება\npdfjs-scroll-wrapped-button =\n    .title = გვერდების ცხრილურად ჩვენება\npdfjs-scroll-wrapped-button-label = ცხრილური გადაადგილება\npdfjs-spread-none-button =\n    .title = ორ გვერდზე გაშლის გარეშე\npdfjs-spread-none-button-label = ცალგვერდიანი ჩვენება\npdfjs-spread-odd-button =\n    .title = ორ გვერდზე გაშლა კენტი გვერდიდან\npdfjs-spread-odd-button-label = ორ გვერდზე კენტიდან\npdfjs-spread-even-button =\n    .title = ორ გვერდზე გაშლა ლუწი გვერდიდან\npdfjs-spread-even-button-label = ორ გვერდზე ლუწიდან\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = დოკუმენტის შესახებ…\npdfjs-document-properties-button-label = დოკუმენტის შესახებ…\npdfjs-document-properties-file-name = ფაილის სახელი:\npdfjs-document-properties-file-size = ფაილის მოცულობა:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } კბ ({ $size_b } ბაიტი)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } მბ ({ $size_b } ბაიტი)\npdfjs-document-properties-title = სათაური:\npdfjs-document-properties-author = შემქმნელი:\npdfjs-document-properties-subject = თემა:\npdfjs-document-properties-keywords = საკვანძო სიტყვები:\npdfjs-document-properties-creation-date = შექმნის დრო:\npdfjs-document-properties-modification-date = ჩასწორების დრო:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = შემდგენელი:\npdfjs-document-properties-producer = PDF-შემდგენელი:\npdfjs-document-properties-version = PDF-ვერსია:\npdfjs-document-properties-page-count = გვერდები:\npdfjs-document-properties-page-size = გვერდის ზომა:\npdfjs-document-properties-page-size-unit-inches = დუიმი\npdfjs-document-properties-page-size-unit-millimeters = მმ\npdfjs-document-properties-page-size-orientation-portrait = შვეულად\npdfjs-document-properties-page-size-orientation-landscape = თარაზულად\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = მსუბუქი ვებჩვენება:\npdfjs-document-properties-linearized-yes = დიახ\npdfjs-document-properties-linearized-no = არა\npdfjs-document-properties-close-button = დახურვა\n\n## Print\n\npdfjs-print-progress-message = დოკუმენტი მზადდება ამოსაბეჭდად…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = გაუქმება\npdfjs-printing-not-supported = გაფრთხილება: ამობეჭდვა ამ ბრაუზერში არაა სრულად მხარდაჭერილი.\npdfjs-printing-not-ready = გაფრთხილება: PDF სრულად ჩატვირთული არაა, ამობეჭდვის დასაწყებად.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = გვერდითა ზოლის გამოჩენა/დამალვა\npdfjs-toggle-sidebar-notification-button =\n    .title = გვერდითი ზოლის გამოჩენა (შეიცავს სარჩევს/დანართს/ფენებს)\npdfjs-toggle-sidebar-button-label = გვერდითა ზოლის გამოჩენა/დამალვა\npdfjs-document-outline-button =\n    .title = დოკუმენტის სარჩევის ჩვენება (ორმაგი წკაპით თითოეულის ჩამოშლა/აკეცვა)\npdfjs-document-outline-button-label = დოკუმენტის სარჩევი\npdfjs-attachments-button =\n    .title = დანართების ჩვენება\npdfjs-attachments-button-label = დანართები\npdfjs-layers-button =\n    .title = ფენების გამოჩენა (ორმაგი წკაპით ყველა ფენის ნაგულისხმევზე დაბრუნება)\npdfjs-layers-button-label = ფენები\npdfjs-thumbs-button =\n    .title = შეთვალიერება\npdfjs-thumbs-button-label = ესკიზები\npdfjs-current-outline-item-button =\n    .title = მიმდინარე გვერდის მონახვა სარჩევში\npdfjs-current-outline-item-button-label = მიმდინარე გვერდი სარჩევში\npdfjs-findbar-button =\n    .title = პოვნა დოკუმენტში\npdfjs-findbar-button-label = ძიება\npdfjs-additional-layers = დამატებითი ფენები\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = გვერდი { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = გვერდის შეთვალიერება { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = ძიება\n    .placeholder = პოვნა დოკუმენტში…\npdfjs-find-previous-button =\n    .title = ფრაზის წინა კონტექსტის პოვნა\npdfjs-find-previous-button-label = წინა\npdfjs-find-next-button =\n    .title = ფრაზის შემდეგი კონტექსტის პოვნა\npdfjs-find-next-button-label = შემდეგი\npdfjs-find-highlight-checkbox = ყველაფრის მონიშვნა\npdfjs-find-match-case-checkbox-label = მთავრულით\npdfjs-find-match-diacritics-checkbox-label = ნიშნებით\npdfjs-find-entire-word-checkbox-label = მთლიანი სიტყვები\npdfjs-find-reached-top = მიღწეულია დოკუმენტის დასაწყისი, გრძელდება ბოლოდან\npdfjs-find-reached-bottom = მიღწეულია დოკუმენტის ბოლო, გრძელდება დასაწყისიდან\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] თანხვედრა { $current }, სულ { $total }\n       *[other] თანხვედრა { $current }, სულ { $total }\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] არანაკლებ { $limit } თანხვედრა\n       *[other] არანაკლებ { $limit } თანხვედრა\n    }\npdfjs-find-not-found = ფრაზა ვერ მოიძებნა\n\n## Predefined zoom values\n\npdfjs-page-scale-width = გვერდის სიგანეზე\npdfjs-page-scale-fit = მთლიანი გვერდი\npdfjs-page-scale-auto = ავტომატური\npdfjs-page-scale-actual = საწყისი ზომა\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = გვერდი { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = შეცდომა, PDF-ფაილის ჩატვირთვისას.\npdfjs-invalid-file-error = არამართებული ან დაზიანებული PDF-ფაილი.\npdfjs-missing-file-error = ნაკლული PDF-ფაილი.\npdfjs-unexpected-response-error = სერვერის მოულოდნელი პასუხი.\npdfjs-rendering-error = შეცდომა, გვერდის ჩვენებისას.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } შენიშვნა]\n\n## Password\n\npdfjs-password-label = შეიყვანეთ პაროლი PDF-ფაილის გასახსნელად.\npdfjs-password-invalid = არასწორი პაროლი. გთხოვთ, სცადოთ ხელახლა.\npdfjs-password-ok-button = კარგი\npdfjs-password-cancel-button = გაუქმება\npdfjs-web-fonts-disabled = ვებშრიფტები გამორთულია: ჩაშენებული PDF-შრიფტების გამოყენება ვერ ხერხდება.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = წარწერა\npdfjs-editor-free-text-button-label = ტექსტი\npdfjs-editor-ink-button =\n    .title = ხაზვა\npdfjs-editor-ink-button-label = ხაზვა\npdfjs-editor-stamp-button =\n    .title = სურათების დართვა ან ჩასწორება\npdfjs-editor-stamp-button-label = სურათების დართვა ან ჩასწორება\npdfjs-editor-remove-button =\n    .title = მოცილება\npdfjs-editor-highlight-button =\n    .title = მონიშვნა\npdfjs-editor-highlight-button-label = მონიშვნა\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = დახაზულის მოცილება\npdfjs-editor-remove-freetext-button =\n    .title = წარწერის მოცილება\npdfjs-editor-remove-stamp-button =\n    .title = სურათის მოცილება\npdfjs-editor-remove-highlight-button =\n    .title = მონიშვნის მოცილება\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = ფერი\npdfjs-editor-free-text-size-input = ზომა\npdfjs-editor-ink-color-input = ფერი\npdfjs-editor-ink-thickness-input = სისქე\npdfjs-editor-ink-opacity-input = გაუმჭვირვალობა\npdfjs-editor-stamp-add-image-button =\n    .title = სურათის დამატება\npdfjs-editor-stamp-add-image-button-label = სურათის დამატება\npdfjs-free-text =\n    .aria-label = ნაწერის ჩასწორება\npdfjs-free-text-default-content = აკრიფეთ…\npdfjs-ink =\n    .aria-label = დახაზულის შესწორება\npdfjs-ink-canvas =\n    .aria-label = მომხმარებლის შექმნილი სურათი\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = თანდართული წარწერა\npdfjs-editor-alt-text-edit-button-label = თანდართული წარწერის ჩასწორება\npdfjs-editor-alt-text-dialog-label = არჩევა\npdfjs-editor-alt-text-dialog-description = თანდართული (შემნაცვლებელი) წარწერა გამოსადეგია მათთვის, ვინც ვერ ხედავს სურათებს ან გამოისახება მაშინ, როცა სურათი ვერ ჩაიტვირთება.\npdfjs-editor-alt-text-add-description-label = აღწერილობის მითითება\npdfjs-editor-alt-text-add-description-description = განკუთვნილია 1-2 წინადადებით საგნის, მახასიათებლის ან მოქმედების აღსაწერად.\npdfjs-editor-alt-text-mark-decorative-label = მოინიშნოს მორთულობად\npdfjs-editor-alt-text-mark-decorative-description = განკუთვნილია შესამკობი სურათებისთვის, გარსშემოსავლები ჩარჩოებისა და ჭვირნიშნებისთვის.\npdfjs-editor-alt-text-cancel-button = გაუქმება\npdfjs-editor-alt-text-save-button = შენახვა\npdfjs-editor-alt-text-decorative-tooltip = მოინიშნოს მორთულობად\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = მაგალითად, „ახალგაზრდა მამაკაცი მაგიდასთან ზის და სადილობს“\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = ზევით მარცხნივ — ზომაცვლა\npdfjs-editor-resizer-label-top-middle = ზევით შუაში — ზომაცვლა\npdfjs-editor-resizer-label-top-right = ზევით მარჯვნივ — ზომაცვლა\npdfjs-editor-resizer-label-middle-right = შუაში მარჯვნივ — ზომაცვლა\npdfjs-editor-resizer-label-bottom-right = ქვევით მარჯვნივ — ზომაცვლა\npdfjs-editor-resizer-label-bottom-middle = ქვევით შუაში — ზომაცვლა\npdfjs-editor-resizer-label-bottom-left = ზვევით მარცხნივ — ზომაცვლა\npdfjs-editor-resizer-label-middle-left = შუაში მარცხნივ — ზომაცვლა\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = მოსანიშნი ფერი\npdfjs-editor-colorpicker-button =\n    .title = ფერის შეცვლა\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = ფერის არჩევა\npdfjs-editor-colorpicker-yellow =\n    .title = ყვითელი\npdfjs-editor-colorpicker-green =\n    .title = მწვანე\npdfjs-editor-colorpicker-blue =\n    .title = ლურჯი\npdfjs-editor-colorpicker-pink =\n    .title = ვარდისფერი\npdfjs-editor-colorpicker-red =\n    .title = წითელი\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/kab/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Asebter azewwar\npdfjs-previous-button-label = Azewwar\npdfjs-next-button =\n    .title = Asebter d-iteddun\npdfjs-next-button-label = Ddu ɣer zdat\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Asebter\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = ɣef { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } n { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Semẓi\npdfjs-zoom-out-button-label = Semẓi\npdfjs-zoom-in-button =\n    .title = Semɣeṛ\npdfjs-zoom-in-button-label = Semɣeṛ\npdfjs-zoom-select =\n    .title = Semɣeṛ/Semẓi\npdfjs-presentation-mode-button =\n    .title = Uɣal ɣer Uskar Tihawt\npdfjs-presentation-mode-button-label = Askar Tihawt\npdfjs-open-file-button =\n    .title = Ldi Afaylu\npdfjs-open-file-button-label = Ldi\npdfjs-print-button =\n    .title = Siggez\npdfjs-print-button-label = Siggez\npdfjs-save-button =\n    .title = Sekles\npdfjs-save-button-label = Sekles\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Sader\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Sader\npdfjs-bookmark-button =\n    .title = Asebter amiran (Sken-d tansa URL seg usebter amiran)\npdfjs-bookmark-button-label = Asebter amiran\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Ldi deg usnas\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Ldi deg usnas\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Ifecka\npdfjs-tools-button-label = Ifecka\npdfjs-first-page-button =\n    .title = Ddu ɣer usebter amezwaru\npdfjs-first-page-button-label = Ddu ɣer usebter amezwaru\npdfjs-last-page-button =\n    .title = Ddu ɣer usebter aneggaru\npdfjs-last-page-button-label = Ddu ɣer usebter aneggaru\npdfjs-page-rotate-cw-button =\n    .title = Tuzzya tusrigt\npdfjs-page-rotate-cw-button-label = Tuzzya tusrigt\npdfjs-page-rotate-ccw-button =\n    .title = Tuzzya amgal-usrig\npdfjs-page-rotate-ccw-button-label = Tuzzya amgal-usrig\npdfjs-cursor-text-select-tool-button =\n    .title = Rmed afecku n tefrant n uḍris\npdfjs-cursor-text-select-tool-button-label = Afecku n tefrant n uḍris\npdfjs-cursor-hand-tool-button =\n    .title = Rmed afecku afus\npdfjs-cursor-hand-tool-button-label = Afecku afus\npdfjs-scroll-page-button =\n    .title = Seqdec adrurem n usebter\npdfjs-scroll-page-button-label = Adrurem n usebter\npdfjs-scroll-vertical-button =\n    .title = Seqdec adrurem ubdid\npdfjs-scroll-vertical-button-label = Adrurem ubdid\npdfjs-scroll-horizontal-button =\n    .title = Seqdec adrurem aglawan\npdfjs-scroll-horizontal-button-label = Adrurem aglawan\npdfjs-scroll-wrapped-button =\n    .title = Seqdec adrurem yuẓen\npdfjs-scroll-wrapped-button-label = Adrurem yuẓen\npdfjs-spread-none-button =\n    .title = Ur sedday ara isiɣzaf n usebter\npdfjs-spread-none-button-label = Ulac isiɣzaf\npdfjs-spread-odd-button =\n    .title = Seddu isiɣzaf n usebter ibeddun s yisebtar irayuganen\npdfjs-spread-odd-button-label = Isiɣzaf irayuganen\npdfjs-spread-even-button =\n    .title = Seddu isiɣzaf n usebter ibeddun s yisebtar iyuganen\npdfjs-spread-even-button-label = Isiɣzaf iyuganen\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Taɣaṛa n isemli…\npdfjs-document-properties-button-label = Taɣaṛa n isemli…\npdfjs-document-properties-file-name = Isem n ufaylu:\npdfjs-document-properties-file-size = Teɣzi n ufaylu:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KAṬ ({ $size_b } ibiten)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MAṬ ({ $size_b } iṭamḍanen)\npdfjs-document-properties-title = Azwel:\npdfjs-document-properties-author = Ameskar:\npdfjs-document-properties-subject = Amgay:\npdfjs-document-properties-keywords = Awalen n tsaruţ\npdfjs-document-properties-creation-date = Azemz n tmerna:\npdfjs-document-properties-modification-date = Azemz n usnifel:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Yerna-t:\npdfjs-document-properties-producer = Afecku n uselket PDF:\npdfjs-document-properties-version = Lqem PDF:\npdfjs-document-properties-page-count = Amḍan n yisebtar:\npdfjs-document-properties-page-size = Tuγzi n usebter:\npdfjs-document-properties-page-size-unit-inches = deg\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = s teɣzi\npdfjs-document-properties-page-size-orientation-landscape = s tehri\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Asekkil\npdfjs-document-properties-page-size-name-legal = Usḍif\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Taskant Web taruradt:\npdfjs-document-properties-linearized-yes = Ih\npdfjs-document-properties-linearized-no = Ala\npdfjs-document-properties-close-button = Mdel\n\n## Print\n\npdfjs-print-progress-message = Aheggi i usiggez n isemli…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Sefsex\npdfjs-printing-not-supported = Ɣuṛ-k: Asiggez ur ittusefrak ara yakan imaṛṛa deg iminig-a.\npdfjs-printing-not-ready = Ɣuṛ-k: Afaylu PDF ur d-yuli ara imeṛṛa akken ad ittusiggez.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Sken/Fer agalis adisan\npdfjs-toggle-sidebar-notification-button =\n    .title = Ffer/Sekn agalis adisan (isemli yegber aɣawas/ticeqqufin yeddan/tissiwin)\npdfjs-toggle-sidebar-button-label = Sken/Fer agalis adisan\npdfjs-document-outline-button =\n    .title = Sken isemli (Senned snat tikal i wesemɣer/Afneẓ n iferdisen meṛṛa)\npdfjs-document-outline-button-label = Isɣalen n isebtar\npdfjs-attachments-button =\n    .title = Sken ticeqqufin yeddan\npdfjs-attachments-button-label = Ticeqqufin yeddan\npdfjs-layers-button =\n    .title = Skeen tissiwin (sit sin yiberdan i uwennez n meṛṛa tissiwin ɣer waddad amezwer)\npdfjs-layers-button-label = Tissiwin\npdfjs-thumbs-button =\n    .title = Sken tanfult.\npdfjs-thumbs-button-label = Tinfulin\npdfjs-current-outline-item-button =\n    .title = Af-d aferdis n uɣawas amiran\npdfjs-current-outline-item-button-label = Aferdis n uɣawas amiran\npdfjs-findbar-button =\n    .title = Nadi deg isemli\npdfjs-findbar-button-label = Nadi\npdfjs-additional-layers = Tissiwin-nniḍen\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Asebter { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Tanfult n usebter { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Nadi\n    .placeholder = Nadi deg isemli…\npdfjs-find-previous-button =\n    .title = Aff-d tamseḍriwt n twinest n deffir\npdfjs-find-previous-button-label = Azewwar\npdfjs-find-next-button =\n    .title = Aff-d timseḍriwt n twinest d-iteddun\npdfjs-find-next-button-label = Ddu ɣer zdat\npdfjs-find-highlight-checkbox = Err izirig imaṛṛa\npdfjs-find-match-case-checkbox-label = Qadeṛ amasal n isekkilen\npdfjs-find-match-diacritics-checkbox-label = Qadeṛ ifeskilen\npdfjs-find-entire-word-checkbox-label = Awalen iččuranen\npdfjs-find-reached-top = Yabbeḍ s afella n usebter, tuɣalin s wadda\npdfjs-find-reached-bottom = Tebḍeḍ s adda n usebter, tuɣalin s afella\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] Timeḍriwt { $current } ɣef { $total }\n       *[other] Timeḍriwin { $current } ɣef { $total }\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Ugar n { $limit } umṣada\n       *[other] Ugar n { $limit } yimṣadayen\n    }\npdfjs-find-not-found = Ulac tawinest\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Tehri n usebter\npdfjs-page-scale-fit = Asebter imaṛṛa\npdfjs-page-scale-auto = Asemɣeṛ/Asemẓi awurman\npdfjs-page-scale-actual = Teɣzi tilawt\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Asebter { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Teḍra-d tuccḍa deg alluy n PDF:\npdfjs-invalid-file-error = Afaylu PDF arameɣtu neɣ yexṣeṛ.\npdfjs-missing-file-error = Ulac afaylu PDF.\npdfjs-unexpected-response-error = Aqeddac yerra-d yir tiririt ur nettwaṛǧi ara.\npdfjs-rendering-error = Teḍra-d tuccḍa deg uskan n usebter.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Tabzimt { $type }]\n\n## Password\n\npdfjs-password-label = Sekcem awal uffir akken ad ldiḍ afaylu-yagi PDF\npdfjs-password-invalid = Awal uffir mačči d ameɣtu, Ɛreḍ tikelt-nniḍen.\npdfjs-password-ok-button = IH\npdfjs-password-cancel-button = Sefsex\npdfjs-web-fonts-disabled = Tisefsiyin web ttwassensent; D awezɣi useqdec n tsefsiyin yettwarnan ɣer PDF.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Aḍris\npdfjs-editor-free-text-button-label = Aḍris\npdfjs-editor-ink-button =\n    .title = Suneɣ\npdfjs-editor-ink-button-label = Suneɣ\npdfjs-editor-stamp-button =\n    .title = Rnu neɣ ẓreg tugniwin\npdfjs-editor-stamp-button-label = Rnu neɣ ẓreg tugniwin\npdfjs-editor-remove-button =\n    .title = Kkes\n# Editor Parameters\npdfjs-editor-free-text-color-input = Initen\npdfjs-editor-free-text-size-input = Teɣzi\npdfjs-editor-ink-color-input = Ini\npdfjs-editor-ink-thickness-input = Tuzert\npdfjs-editor-ink-opacity-input = Tebrek\npdfjs-editor-stamp-add-image-button =\n    .title = Rnu tawlaft\npdfjs-editor-stamp-add-image-button-label = Rnu tawlaft\npdfjs-free-text =\n    .aria-label = Amaẓrag n uḍris\npdfjs-free-text-default-content = Bdu tira...\npdfjs-ink =\n    .aria-label = Amaẓrag n usuneɣ\npdfjs-ink-canvas =\n    .aria-label = Tugna yettwarnan sɣur useqdac\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Aḍris amaskal\npdfjs-editor-alt-text-edit-button-label = Ẓreg aḍris amaskal\npdfjs-editor-alt-text-dialog-label = Fren taxtirt\npdfjs-editor-alt-text-add-description-label = Rnu aglam\npdfjs-editor-alt-text-mark-decorative-label = Creḍ d adlag\npdfjs-editor-alt-text-cancel-button = Sefsex\npdfjs-editor-alt-text-save-button = Sekles\npdfjs-editor-alt-text-decorative-tooltip = Yettwacreḍ d adlag\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/kk/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Алдыңғы парақ\npdfjs-previous-button-label = Алдыңғысы\npdfjs-next-button =\n    .title = Келесі парақ\npdfjs-next-button-label = Келесі\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Парақ\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = { $pagesCount } ішінен\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = (парақ { $pageNumber }, { $pagesCount } ішінен)\npdfjs-zoom-out-button =\n    .title = Кішірейту\npdfjs-zoom-out-button-label = Кішірейту\npdfjs-zoom-in-button =\n    .title = Үлкейту\npdfjs-zoom-in-button-label = Үлкейту\npdfjs-zoom-select =\n    .title = Масштаб\npdfjs-presentation-mode-button =\n    .title = Презентация режиміне ауысу\npdfjs-presentation-mode-button-label = Презентация режимі\npdfjs-open-file-button =\n    .title = Файлды ашу\npdfjs-open-file-button-label = Ашу\npdfjs-print-button =\n    .title = Баспаға шығару\npdfjs-print-button-label = Баспаға шығару\npdfjs-save-button =\n    .title = Сақтау\npdfjs-save-button-label = Сақтау\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Жүктеп алу\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Жүктеп алу\npdfjs-bookmark-button =\n    .title = Ағымдағы бет (Ағымдағы беттен URL адресін көру)\npdfjs-bookmark-button-label = Ағымдағы бет\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Қолданбада ашу\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Қолданбада ашу\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Құралдар\npdfjs-tools-button-label = Құралдар\npdfjs-first-page-button =\n    .title = Алғашқы параққа өту\npdfjs-first-page-button-label = Алғашқы параққа өту\npdfjs-last-page-button =\n    .title = Соңғы параққа өту\npdfjs-last-page-button-label = Соңғы параққа өту\npdfjs-page-rotate-cw-button =\n    .title = Сағат тілі бағытымен айналдыру\npdfjs-page-rotate-cw-button-label = Сағат тілі бағытымен бұру\npdfjs-page-rotate-ccw-button =\n    .title = Сағат тілі бағытына қарсы бұру\npdfjs-page-rotate-ccw-button-label = Сағат тілі бағытына қарсы бұру\npdfjs-cursor-text-select-tool-button =\n    .title = Мәтінді таңдау құралын іске қосу\npdfjs-cursor-text-select-tool-button-label = Мәтінді таңдау құралы\npdfjs-cursor-hand-tool-button =\n    .title = Қол құралын іске қосу\npdfjs-cursor-hand-tool-button-label = Қол құралы\npdfjs-scroll-page-button =\n    .title = Беттерді айналдыруды пайдалану\npdfjs-scroll-page-button-label = Беттерді айналдыру\npdfjs-scroll-vertical-button =\n    .title = Вертикалды айналдыруды қолдану\npdfjs-scroll-vertical-button-label = Вертикалды айналдыру\npdfjs-scroll-horizontal-button =\n    .title = Горизонталды айналдыруды қолдану\npdfjs-scroll-horizontal-button-label = Горизонталды айналдыру\npdfjs-scroll-wrapped-button =\n    .title = Масштабталатын айналдыруды қолдану\npdfjs-scroll-wrapped-button-label = Масштабталатын айналдыру\npdfjs-spread-none-button =\n    .title = Жазық беттер режимін қолданбау\npdfjs-spread-none-button-label = Жазық беттер режимсіз\npdfjs-spread-odd-button =\n    .title = Жазық беттер тақ нөмірлі беттерден басталады\npdfjs-spread-odd-button-label = Тақ нөмірлі беттер сол жақтан\npdfjs-spread-even-button =\n    .title = Жазық беттер жұп нөмірлі беттерден басталады\npdfjs-spread-even-button-label = Жұп нөмірлі беттер сол жақтан\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Құжат қасиеттері…\npdfjs-document-properties-button-label = Құжат қасиеттері…\npdfjs-document-properties-file-name = Файл аты:\npdfjs-document-properties-file-size = Файл өлшемі:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } КБ ({ $size_b } байт)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } МБ ({ $size_b } байт)\npdfjs-document-properties-title = Тақырыбы:\npdfjs-document-properties-author = Авторы:\npdfjs-document-properties-subject = Тақырыбы:\npdfjs-document-properties-keywords = Кілт сөздер:\npdfjs-document-properties-creation-date = Жасалған күні:\npdfjs-document-properties-modification-date = Түзету күні:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Жасаған:\npdfjs-document-properties-producer = PDF өндірген:\npdfjs-document-properties-version = PDF нұсқасы:\npdfjs-document-properties-page-count = Беттер саны:\npdfjs-document-properties-page-size = Бет өлшемі:\npdfjs-document-properties-page-size-unit-inches = дюйм\npdfjs-document-properties-page-size-unit-millimeters = мм\npdfjs-document-properties-page-size-orientation-portrait = тік\npdfjs-document-properties-page-size-orientation-landscape = жатық\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Жылдам Web көрінісі:\npdfjs-document-properties-linearized-yes = Иә\npdfjs-document-properties-linearized-no = Жоқ\npdfjs-document-properties-close-button = Жабу\n\n## Print\n\npdfjs-print-progress-message = Құжатты баспаға шығару үшін дайындау…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Бас тарту\npdfjs-printing-not-supported = Ескерту: Баспаға шығаруды бұл браузер толығымен қолдамайды.\npdfjs-printing-not-ready = Ескерту: Баспаға шығару үшін, бұл PDF толығымен жүктеліп алынбады.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Бүйір панелін көрсету/жасыру\npdfjs-toggle-sidebar-notification-button =\n    .title = Бүйір панелін көрсету/жасыру (құжатта құрылымы/салынымдар/қабаттар бар)\npdfjs-toggle-sidebar-button-label = Бүйір панелін көрсету/жасыру\npdfjs-document-outline-button =\n    .title = Құжат құрылымын көрсету (барлық нәрселерді жазық қылу/жинау үшін қос шерту керек)\npdfjs-document-outline-button-label = Құжат құрамасы\npdfjs-attachments-button =\n    .title = Салынымдарды көрсету\npdfjs-attachments-button-label = Салынымдар\npdfjs-layers-button =\n    .title = Қабаттарды көрсету (барлық қабаттарды бастапқы күйге келтіру үшін екі рет шертіңіз)\npdfjs-layers-button-label = Қабаттар\npdfjs-thumbs-button =\n    .title = Кіші көріністерді көрсету\npdfjs-thumbs-button-label = Кіші көріністер\npdfjs-current-outline-item-button =\n    .title = Құрылымның ағымдағы элементін табу\npdfjs-current-outline-item-button-label = Құрылымның ағымдағы элементі\npdfjs-findbar-button =\n    .title = Құжаттан табу\npdfjs-findbar-button-label = Табу\npdfjs-additional-layers = Қосымша қабаттар\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = { $page } парағы\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = { $page } парағы үшін кіші көрінісі\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Табу\n    .placeholder = Құжаттан табу…\npdfjs-find-previous-button =\n    .title = Осы сөздердің мәтіннен алдыңғы кездесуін табу\npdfjs-find-previous-button-label = Алдыңғысы\npdfjs-find-next-button =\n    .title = Осы сөздердің мәтіннен келесі кездесуін табу\npdfjs-find-next-button-label = Келесі\npdfjs-find-highlight-checkbox = Барлығын түспен ерекшелеу\npdfjs-find-match-case-checkbox-label = Регистрді ескеру\npdfjs-find-match-diacritics-checkbox-label = Диакритиканы ескеру\npdfjs-find-entire-word-checkbox-label = Сөздер толығымен\npdfjs-find-reached-top = Құжаттың басына жеттік, соңынан бастап жалғастырамыз\npdfjs-find-reached-bottom = Құжаттың соңына жеттік, басынан бастап жалғастырамыз\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } сәйкестік, барлығы { $total }\n       *[other] { $current } сәйкестік, барлығы { $total }\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] { $limit } сәйкестіктен көп\n       *[other] { $limit } сәйкестіктен көп\n    }\npdfjs-find-not-found = Сөз(дер) табылмады\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Парақ ені\npdfjs-page-scale-fit = Парақты сыйдыру\npdfjs-page-scale-auto = Автомасштабтау\npdfjs-page-scale-actual = Нақты өлшемі\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Бет { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = PDF жүктеу кезінде қате кетті.\npdfjs-invalid-file-error = Зақымдалған немесе қате PDF файл.\npdfjs-missing-file-error = PDF файлы жоқ.\npdfjs-unexpected-response-error = Сервердің күтпеген жауабы.\npdfjs-rendering-error = Парақты өңдеу кезінде қате кетті.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } аңдатпасы]\n\n## Password\n\npdfjs-password-label = Бұл PDF файлын ашу үшін парольді енгізіңіз.\npdfjs-password-invalid = Пароль дұрыс емес. Қайталап көріңіз.\npdfjs-password-ok-button = ОК\npdfjs-password-cancel-button = Бас тарту\npdfjs-web-fonts-disabled = Веб қаріптері сөндірілген: құрамына енгізілген PDF қаріптерін қолдану мүмкін емес.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Мәтін\npdfjs-editor-free-text-button-label = Мәтін\npdfjs-editor-ink-button =\n    .title = Сурет салу\npdfjs-editor-ink-button-label = Сурет салу\npdfjs-editor-stamp-button =\n    .title = Суреттерді қосу немесе түзету\npdfjs-editor-stamp-button-label = Суреттерді қосу немесе түзету\npdfjs-editor-highlight-button =\n    .title = Ерекшелеу\npdfjs-editor-highlight-button-label = Ерекшелеу\npdfjs-highlight-floating-button =\n    .title = Ерекшелеу\npdfjs-highlight-floating-button1 =\n    .title = Ерекшелеу\n    .aria-label = Ерекшелеу\npdfjs-highlight-floating-button-label = Ерекшелеу\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Сызбаны өшіру\npdfjs-editor-remove-freetext-button =\n    .title = Мәтінді өшіру\npdfjs-editor-remove-stamp-button =\n    .title = Суретті өшіру\npdfjs-editor-remove-highlight-button =\n    .title = Түспен ерекшелеуді өшіру\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Түс\npdfjs-editor-free-text-size-input = Өлшемі\npdfjs-editor-ink-color-input = Түс\npdfjs-editor-ink-thickness-input = Қалыңдығы\npdfjs-editor-ink-opacity-input = Мөлдірсіздігі\npdfjs-editor-stamp-add-image-button =\n    .title = Суретті қосу\npdfjs-editor-stamp-add-image-button-label = Суретті қосу\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Қалыңдығы\npdfjs-editor-free-highlight-thickness-title =\n    .title = Мәтіннен басқа элементтерді ерекшелеу кезінде қалыңдықты өзгерту\npdfjs-free-text =\n    .aria-label = Мәтін түзеткіші\npdfjs-free-text-default-content = Теруді бастау…\npdfjs-ink =\n    .aria-label = Сурет түзеткіші\npdfjs-ink-canvas =\n    .aria-label = Пайдаланушы жасаған сурет\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Балама мәтін\npdfjs-editor-alt-text-edit-button-label = Балама мәтінді өңдеу\npdfjs-editor-alt-text-dialog-label = Опцияны таңдау\npdfjs-editor-alt-text-dialog-description = Балама мәтін адамдар суретті көре алмағанда немесе ол жүктелмегенде көмектеседі.\npdfjs-editor-alt-text-add-description-label = Сипаттаманы қосу\npdfjs-editor-alt-text-add-description-description = Тақырыпты, баптауды немесе әрекетті сипаттайтын 1-2 сөйлемді қолдануға тырысыңыз.\npdfjs-editor-alt-text-mark-decorative-label = Декоративті деп белгілеу\npdfjs-editor-alt-text-mark-decorative-description = Бұл жиектер немесе су белгілері сияқты оюлық суреттер үшін пайдаланылады.\npdfjs-editor-alt-text-cancel-button = Бас тарту\npdfjs-editor-alt-text-save-button = Сақтау\npdfjs-editor-alt-text-decorative-tooltip = Декоративті деп белгіленген\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Мысалы, \"Жас жігіт тамақ ішу үшін үстел басына отырады\"\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Жоғарғы сол жақ бұрыш — өлшемін өзгерту\npdfjs-editor-resizer-label-top-middle = Жоғарғы ортасы — өлшемін өзгерту\npdfjs-editor-resizer-label-top-right = Жоғарғы оң жақ бұрыш — өлшемін өзгерту\npdfjs-editor-resizer-label-middle-right = Ортаңғы оң жақ — өлшемін өзгерту\npdfjs-editor-resizer-label-bottom-right = Төменгі оң жақ бұрыш — өлшемін өзгерту\npdfjs-editor-resizer-label-bottom-middle = Төменгі ортасы — өлшемін өзгерту\npdfjs-editor-resizer-label-bottom-left = Төменгі сол жақ бұрыш — өлшемін өзгерту\npdfjs-editor-resizer-label-middle-left = Ортаңғы сол жақ — өлшемін өзгерту\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Ерекшелеу түсі\npdfjs-editor-colorpicker-button =\n    .title = Түсті өзгерту\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Түс таңдаулары\npdfjs-editor-colorpicker-yellow =\n    .title = Сары\npdfjs-editor-colorpicker-green =\n    .title = Жасыл\npdfjs-editor-colorpicker-blue =\n    .title = Көк\npdfjs-editor-colorpicker-pink =\n    .title = Қызғылт\npdfjs-editor-colorpicker-red =\n    .title = Қызыл\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Барлығын көрсету\npdfjs-editor-highlight-show-all-button =\n    .title = Барлығын көрсету\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/km/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = ទំព័រ​មុន\npdfjs-previous-button-label = មុន\npdfjs-next-button =\n    .title = ទំព័រ​បន្ទាប់\npdfjs-next-button-label = បន្ទាប់\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = ទំព័រ\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = នៃ { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } នៃ { $pagesCount })\npdfjs-zoom-out-button =\n    .title = ​បង្រួម\npdfjs-zoom-out-button-label = ​បង្រួម\npdfjs-zoom-in-button =\n    .title = ​ពង្រីក\npdfjs-zoom-in-button-label = ​ពង្រីក\npdfjs-zoom-select =\n    .title = ពង្រីក\npdfjs-presentation-mode-button =\n    .title = ប្ដូរ​ទៅ​របៀប​បទ​បង្ហាញ\npdfjs-presentation-mode-button-label = របៀប​បទ​បង្ហាញ\npdfjs-open-file-button =\n    .title = បើក​ឯកសារ\npdfjs-open-file-button-label = បើក\npdfjs-print-button =\n    .title = បោះពុម្ព\npdfjs-print-button-label = បោះពុម្ព\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = ឧបករណ៍\npdfjs-tools-button-label = ឧបករណ៍\npdfjs-first-page-button =\n    .title = ទៅកាន់​ទំព័រ​ដំបូង​\npdfjs-first-page-button-label = ទៅកាន់​ទំព័រ​ដំបូង​\npdfjs-last-page-button =\n    .title = ទៅកាន់​ទំព័រ​ចុងក្រោយ​\npdfjs-last-page-button-label = ទៅកាន់​ទំព័រ​ចុងក្រោយ\npdfjs-page-rotate-cw-button =\n    .title = បង្វិល​ស្រប​ទ្រនិច​នាឡិកា\npdfjs-page-rotate-cw-button-label = បង្វិល​ស្រប​ទ្រនិច​នាឡិកា\npdfjs-page-rotate-ccw-button =\n    .title = បង្វិល​ច្រាស​ទ្រនិច​នាឡិកា​​\npdfjs-page-rotate-ccw-button-label = បង្វិល​ច្រាស​ទ្រនិច​នាឡិកា​​\npdfjs-cursor-text-select-tool-button =\n    .title = បើក​ឧបករណ៍​ជ្រើស​អត្ថបទ\npdfjs-cursor-text-select-tool-button-label = ឧបករណ៍​ជ្រើស​អត្ថបទ\npdfjs-cursor-hand-tool-button =\n    .title = បើក​ឧបករណ៍​ដៃ\npdfjs-cursor-hand-tool-button-label = ឧបករណ៍​ដៃ\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = លក្ខណ​សម្បត្តិ​ឯកសារ…\npdfjs-document-properties-button-label = លក្ខណ​សម្បត្តិ​ឯកសារ…\npdfjs-document-properties-file-name = ឈ្មោះ​ឯកសារ៖\npdfjs-document-properties-file-size = ទំហំ​ឯកសារ៖\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } បៃ)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } បៃ)\npdfjs-document-properties-title = ចំណងជើង៖\npdfjs-document-properties-author = អ្នក​និពន្ធ៖\npdfjs-document-properties-subject = ប្រធានបទ៖\npdfjs-document-properties-keywords = ពាក្យ​គន្លឹះ៖\npdfjs-document-properties-creation-date = កាលបរិច្ឆេទ​បង្កើត៖\npdfjs-document-properties-modification-date = កាលបរិច្ឆេទ​កែប្រែ៖\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = អ្នក​បង្កើត៖\npdfjs-document-properties-producer = កម្មវិធី​បង្កើត PDF ៖\npdfjs-document-properties-version = កំណែ PDF ៖\npdfjs-document-properties-page-count = ចំនួន​ទំព័រ៖\npdfjs-document-properties-page-size-unit-inches = អ៊ីញ\npdfjs-document-properties-page-size-unit-millimeters = មម\npdfjs-document-properties-page-size-orientation-portrait = បញ្ឈរ\npdfjs-document-properties-page-size-orientation-landscape = ផ្តេក\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = សំបុត្រ\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\npdfjs-document-properties-linearized-yes = បាទ/ចាស\npdfjs-document-properties-linearized-no = ទេ\npdfjs-document-properties-close-button = បិទ\n\n## Print\n\npdfjs-print-progress-message = កំពុង​រៀបចំ​ឯកសារ​សម្រាប់​បោះពុម្ព…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = បោះបង់\npdfjs-printing-not-supported = ការ​ព្រមាន ៖ កា​រ​បោះពុម្ព​មិន​ត្រូវ​បាន​គាំទ្រ​ពេញលេញ​ដោយ​កម្មវិធី​រុករក​នេះ​ទេ ។\npdfjs-printing-not-ready = ព្រមាន៖ PDF មិន​ត្រូវ​បាន​ផ្ទុក​ទាំងស្រុង​ដើម្បី​បោះពុម្ព​ទេ។\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = បិទ/បើក​គ្រាប់​រំកិល\npdfjs-toggle-sidebar-button-label = បិទ/បើក​គ្រាប់​រំកិល\npdfjs-document-outline-button =\n    .title = បង្ហាញ​គ្រោង​ឯកសារ (ចុច​ទ្វេ​ដង​ដើម្បី​ពង្រីក/បង្រួម​ធាតុ​ទាំងអស់)\npdfjs-document-outline-button-label = គ្រោង​ឯកសារ\npdfjs-attachments-button =\n    .title = បង្ហាញ​ឯកសារ​ភ្ជាប់\npdfjs-attachments-button-label = ឯកសារ​ភ្ជាប់\npdfjs-thumbs-button =\n    .title = បង្ហាញ​រូបភាព​តូចៗ\npdfjs-thumbs-button-label = រួបភាព​តូចៗ\npdfjs-findbar-button =\n    .title = រក​នៅ​ក្នុង​ឯកសារ\npdfjs-findbar-button-label = រក\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = ទំព័រ { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = រូបភាព​តូច​របស់​ទំព័រ { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = រក\n    .placeholder = រក​នៅ​ក្នុង​ឯកសារ...\npdfjs-find-previous-button =\n    .title = រក​ពាក្យ ឬ​ឃ្លា​ដែល​បាន​ជួប​មុន\npdfjs-find-previous-button-label = មុន\npdfjs-find-next-button =\n    .title = រក​ពាក្យ ឬ​ឃ្លា​ដែល​បាន​ជួប​បន្ទាប់\npdfjs-find-next-button-label = បន្ទាប់\npdfjs-find-highlight-checkbox = បន្លិច​ទាំងអស់\npdfjs-find-match-case-checkbox-label = ករណី​ដំណូច\npdfjs-find-reached-top = បាន​បន្ត​ពី​ខាង​ក្រោម ទៅ​ដល់​ខាង​​លើ​នៃ​ឯកសារ\npdfjs-find-reached-bottom = បាន​បន្ត​ពី​ខាងលើ ទៅដល់​ចុង​​នៃ​ឯកសារ\npdfjs-find-not-found = រក​មិន​ឃើញ​ពាក្យ ឬ​ឃ្លា\n\n## Predefined zoom values\n\npdfjs-page-scale-width = ទទឹង​ទំព័រ\npdfjs-page-scale-fit = សម​ទំព័រ\npdfjs-page-scale-auto = ពង្រីក​ស្វ័យប្រវត្តិ\npdfjs-page-scale-actual = ទំហំ​ជាក់ស្ដែង\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = មាន​កំហុស​បាន​កើតឡើង​ពេល​កំពុង​ផ្ទុក PDF ។\npdfjs-invalid-file-error = ឯកសារ PDF ខូច ឬ​មិន​ត្រឹមត្រូវ ។\npdfjs-missing-file-error = បាត់​ឯកសារ PDF\npdfjs-unexpected-response-error = ការ​ឆ្លើយ​តម​ម៉ាស៊ីន​មេ​ដែល​មិន​បាន​រំពឹង។\npdfjs-rendering-error = មាន​កំហុស​បាន​កើតឡើង​ពេល​បង្ហាញ​ទំព័រ ។\n\n## Annotations\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } ចំណារ​ពន្យល់]\n\n## Password\n\npdfjs-password-label = បញ្ចូល​ពាក្យសម្ងាត់​ដើម្បី​បើក​ឯកសារ PDF នេះ។\npdfjs-password-invalid = ពាក្យសម្ងាត់​មិន​ត្រឹមត្រូវ។ សូម​ព្យាយាម​ម្ដងទៀត។\npdfjs-password-ok-button = យល់​ព្រម\npdfjs-password-cancel-button = បោះបង់\npdfjs-web-fonts-disabled = បាន​បិទ​ពុម្ពអក្សរ​បណ្ដាញ ៖ មិន​អាច​ប្រើ​ពុម្ពអក្សរ PDF ដែល​បាន​បង្កប់​បាន​ទេ ។\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/kn/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = ಹಿಂದಿನ ಪುಟ\npdfjs-previous-button-label = ಹಿಂದಿನ\npdfjs-next-button =\n    .title = ಮುಂದಿನ ಪುಟ\npdfjs-next-button-label = ಮುಂದಿನ\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = ಪುಟ\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = { $pagesCount } ರಲ್ಲಿ\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pagesCount } ರಲ್ಲಿ { $pageNumber })\npdfjs-zoom-out-button =\n    .title = ಕಿರಿದಾಗಿಸು\npdfjs-zoom-out-button-label = ಕಿರಿದಾಗಿಸಿ\npdfjs-zoom-in-button =\n    .title = ಹಿರಿದಾಗಿಸು\npdfjs-zoom-in-button-label = ಹಿರಿದಾಗಿಸಿ\npdfjs-zoom-select =\n    .title = ಗಾತ್ರಬದಲಿಸು\npdfjs-presentation-mode-button =\n    .title = ಪ್ರಸ್ತುತಿ (ಪ್ರಸೆಂಟೇಶನ್) ಕ್ರಮಕ್ಕೆ ಬದಲಾಯಿಸು\npdfjs-presentation-mode-button-label = ಪ್ರಸ್ತುತಿ (ಪ್ರಸೆಂಟೇಶನ್) ಕ್ರಮ\npdfjs-open-file-button =\n    .title = ಕಡತವನ್ನು ತೆರೆ\npdfjs-open-file-button-label = ತೆರೆಯಿರಿ\npdfjs-print-button =\n    .title = ಮುದ್ರಿಸು\npdfjs-print-button-label = ಮುದ್ರಿಸಿ\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = ಉಪಕರಣಗಳು\npdfjs-tools-button-label = ಉಪಕರಣಗಳು\npdfjs-first-page-button =\n    .title = ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು\npdfjs-first-page-button-label = ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು\npdfjs-last-page-button =\n    .title = ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು\npdfjs-last-page-button-label = ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು\npdfjs-page-rotate-cw-button =\n    .title = ಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು\npdfjs-page-rotate-cw-button-label = ಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು\npdfjs-page-rotate-ccw-button =\n    .title = ಅಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು\npdfjs-page-rotate-ccw-button-label = ಅಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು\npdfjs-cursor-text-select-tool-button =\n    .title = ಪಠ್ಯ ಆಯ್ಕೆ ಉಪಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ\npdfjs-cursor-text-select-tool-button-label = ಪಠ್ಯ ಆಯ್ಕೆಯ ಉಪಕರಣ\npdfjs-cursor-hand-tool-button =\n    .title = ಕೈ ಉಪಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ\npdfjs-cursor-hand-tool-button-label = ಕೈ ಉಪಕರಣ\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = ಡಾಕ್ಯುಮೆಂಟ್‌ ಗುಣಗಳು...\npdfjs-document-properties-button-label = ಡಾಕ್ಯುಮೆಂಟ್‌ ಗುಣಗಳು...\npdfjs-document-properties-file-name = ಕಡತದ ಹೆಸರು:\npdfjs-document-properties-file-size = ಕಡತದ ಗಾತ್ರ:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } ಬೈಟ್‍ಗಳು)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } ಬೈಟ್‍ಗಳು)\npdfjs-document-properties-title = ಶೀರ್ಷಿಕೆ:\npdfjs-document-properties-author = ಕರ್ತೃ:\npdfjs-document-properties-subject = ವಿಷಯ:\npdfjs-document-properties-keywords = ಮುಖ್ಯಪದಗಳು:\npdfjs-document-properties-creation-date = ರಚಿಸಿದ ದಿನಾಂಕ:\npdfjs-document-properties-modification-date = ಮಾರ್ಪಡಿಸಲಾದ ದಿನಾಂಕ:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = ರಚಿಸಿದವರು:\npdfjs-document-properties-producer = PDF ಉತ್ಪಾದಕ:\npdfjs-document-properties-version = PDF ಆವೃತ್ತಿ:\npdfjs-document-properties-page-count = ಪುಟದ ಎಣಿಕೆ:\npdfjs-document-properties-page-size-unit-inches = ಇದರಲ್ಲಿ\npdfjs-document-properties-page-size-orientation-portrait = ಭಾವಚಿತ್ರ\npdfjs-document-properties-page-size-orientation-landscape = ಪ್ರಕೃತಿ ಚಿತ್ರ\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\n\n##\n\npdfjs-document-properties-close-button = ಮುಚ್ಚು\n\n## Print\n\npdfjs-print-progress-message = ಮುದ್ರಿಸುವುದಕ್ಕಾಗಿ ದಸ್ತಾವೇಜನ್ನು ಸಿದ್ಧಗೊಳಿಸಲಾಗುತ್ತಿದೆ…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = ರದ್ದು ಮಾಡು\npdfjs-printing-not-supported = ಎಚ್ಚರಿಕೆ: ಈ ಜಾಲವೀಕ್ಷಕದಲ್ಲಿ ಮುದ್ರಣಕ್ಕೆ ಸಂಪೂರ್ಣ ಬೆಂಬಲವಿಲ್ಲ.\npdfjs-printing-not-ready = ಎಚ್ಚರಿಕೆ: PDF ಕಡತವು ಮುದ್ರಿಸಲು ಸಂಪೂರ್ಣವಾಗಿ ಲೋಡ್ ಆಗಿಲ್ಲ.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = ಬದಿಪಟ್ಟಿಯನ್ನು ಹೊರಳಿಸು\npdfjs-toggle-sidebar-button-label = ಬದಿಪಟ್ಟಿಯನ್ನು ಹೊರಳಿಸು\npdfjs-document-outline-button-label = ದಸ್ತಾವೇಜಿನ ಹೊರರೇಖೆ\npdfjs-attachments-button =\n    .title = ಲಗತ್ತುಗಳನ್ನು ತೋರಿಸು\npdfjs-attachments-button-label = ಲಗತ್ತುಗಳು\npdfjs-thumbs-button =\n    .title = ಚಿಕ್ಕಚಿತ್ರದಂತೆ ತೋರಿಸು\npdfjs-thumbs-button-label = ಚಿಕ್ಕಚಿತ್ರಗಳು\npdfjs-findbar-button =\n    .title = ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಹುಡುಕು\npdfjs-findbar-button-label = ಹುಡುಕು\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = ಪುಟ { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = ಪುಟವನ್ನು ಚಿಕ್ಕಚಿತ್ರದಂತೆ ತೋರಿಸು { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = ಹುಡುಕು\n    .placeholder = ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಹುಡುಕು…\npdfjs-find-previous-button =\n    .title = ವಾಕ್ಯದ ಹಿಂದಿನ ಇರುವಿಕೆಯನ್ನು ಹುಡುಕು\npdfjs-find-previous-button-label = ಹಿಂದಿನ\npdfjs-find-next-button =\n    .title = ವಾಕ್ಯದ ಮುಂದಿನ ಇರುವಿಕೆಯನ್ನು ಹುಡುಕು\npdfjs-find-next-button-label = ಮುಂದಿನ\npdfjs-find-highlight-checkbox = ಎಲ್ಲವನ್ನು ಹೈಲೈಟ್ ಮಾಡು\npdfjs-find-match-case-checkbox-label = ಕೇಸನ್ನು ಹೊಂದಿಸು\npdfjs-find-reached-top = ದಸ್ತಾವೇಜಿನ ಮೇಲ್ಭಾಗವನ್ನು ತಲುಪಿದೆ, ಕೆಳಗಿನಿಂದ ಆರಂಭಿಸು\npdfjs-find-reached-bottom = ದಸ್ತಾವೇಜಿನ ಕೊನೆಯನ್ನು ತಲುಪಿದೆ, ಮೇಲಿನಿಂದ ಆರಂಭಿಸು\npdfjs-find-not-found = ವಾಕ್ಯವು ಕಂಡು ಬಂದಿಲ್ಲ\n\n## Predefined zoom values\n\npdfjs-page-scale-width = ಪುಟದ ಅಗಲ\npdfjs-page-scale-fit = ಪುಟದ ಸರಿಹೊಂದಿಕೆ\npdfjs-page-scale-auto = ಸ್ವಯಂಚಾಲಿತ ಗಾತ್ರಬದಲಾವಣೆ\npdfjs-page-scale-actual = ನಿಜವಾದ ಗಾತ್ರ\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = PDF ಅನ್ನು ಲೋಡ್ ಮಾಡುವಾಗ ಒಂದು ದೋಷ ಎದುರಾಗಿದೆ.\npdfjs-invalid-file-error = ಅಮಾನ್ಯವಾದ ಅಥವ ಹಾಳಾದ PDF ಕಡತ.\npdfjs-missing-file-error = PDF ಕಡತ ಇಲ್ಲ.\npdfjs-unexpected-response-error = ಅನಿರೀಕ್ಷಿತವಾದ ಪೂರೈಕೆಗಣಕದ ಪ್ರತಿಕ್ರಿಯೆ.\npdfjs-rendering-error = ಪುಟವನ್ನು ನಿರೂಪಿಸುವಾಗ ಒಂದು ದೋಷ ಎದುರಾಗಿದೆ.\n\n## Annotations\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } ಟಿಪ್ಪಣಿ]\n\n## Password\n\npdfjs-password-label = PDF ಅನ್ನು ತೆರೆಯಲು ಗುಪ್ತಪದವನ್ನು ನಮೂದಿಸಿ.\npdfjs-password-invalid = ಅಮಾನ್ಯವಾದ ಗುಪ್ತಪದ, ದಯವಿಟ್ಟು ಇನ್ನೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = ರದ್ದು ಮಾಡು\npdfjs-web-fonts-disabled = ಜಾಲ ಅಕ್ಷರಶೈಲಿಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ: ಅಡಕಗೊಳಿಸಿದ PDF ಅಕ್ಷರಶೈಲಿಗಳನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/ko/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = 이전 페이지\npdfjs-previous-button-label = 이전\npdfjs-next-button =\n    .title = 다음 페이지\npdfjs-next-button-label = 다음\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = 페이지\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = / { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } / { $pagesCount })\npdfjs-zoom-out-button =\n    .title = 축소\npdfjs-zoom-out-button-label = 축소\npdfjs-zoom-in-button =\n    .title = 확대\npdfjs-zoom-in-button-label = 확대\npdfjs-zoom-select =\n    .title = 확대/축소\npdfjs-presentation-mode-button =\n    .title = 프레젠테이션 모드로 전환\npdfjs-presentation-mode-button-label = 프레젠테이션 모드\npdfjs-open-file-button =\n    .title = 파일 열기\npdfjs-open-file-button-label = 열기\npdfjs-print-button =\n    .title = 인쇄\npdfjs-print-button-label = 인쇄\npdfjs-save-button =\n    .title = 저장\npdfjs-save-button-label = 저장\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = 다운로드\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = 다운로드\npdfjs-bookmark-button =\n    .title = 현재 페이지 (현재 페이지에서 URL 보기)\npdfjs-bookmark-button-label = 현재 페이지\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = 앱에서 열기\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = 앱에서 열기\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = 도구\npdfjs-tools-button-label = 도구\npdfjs-first-page-button =\n    .title = 첫 페이지로 이동\npdfjs-first-page-button-label = 첫 페이지로 이동\npdfjs-last-page-button =\n    .title = 마지막 페이지로 이동\npdfjs-last-page-button-label = 마지막 페이지로 이동\npdfjs-page-rotate-cw-button =\n    .title = 시계방향으로 회전\npdfjs-page-rotate-cw-button-label = 시계방향으로 회전\npdfjs-page-rotate-ccw-button =\n    .title = 시계 반대방향으로 회전\npdfjs-page-rotate-ccw-button-label = 시계 반대방향으로 회전\npdfjs-cursor-text-select-tool-button =\n    .title = 텍스트 선택 도구 활성화\npdfjs-cursor-text-select-tool-button-label = 텍스트 선택 도구\npdfjs-cursor-hand-tool-button =\n    .title = 손 도구 활성화\npdfjs-cursor-hand-tool-button-label = 손 도구\npdfjs-scroll-page-button =\n    .title = 페이지 스크롤 사용\npdfjs-scroll-page-button-label = 페이지 스크롤\npdfjs-scroll-vertical-button =\n    .title = 세로 스크롤 사용\npdfjs-scroll-vertical-button-label = 세로 스크롤\npdfjs-scroll-horizontal-button =\n    .title = 가로 스크롤 사용\npdfjs-scroll-horizontal-button-label = 가로 스크롤\npdfjs-scroll-wrapped-button =\n    .title = 래핑(자동 줄 바꿈) 스크롤 사용\npdfjs-scroll-wrapped-button-label = 래핑 스크롤\npdfjs-spread-none-button =\n    .title = 한 페이지 보기\npdfjs-spread-none-button-label = 펼침 없음\npdfjs-spread-odd-button =\n    .title = 홀수 페이지로 시작하는 두 페이지 보기\npdfjs-spread-odd-button-label = 홀수 펼침\npdfjs-spread-even-button =\n    .title = 짝수 페이지로 시작하는 두 페이지 보기\npdfjs-spread-even-button-label = 짝수 펼침\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = 문서 속성…\npdfjs-document-properties-button-label = 문서 속성…\npdfjs-document-properties-file-name = 파일 이름:\npdfjs-document-properties-file-size = 파일 크기:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b }바이트)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b }바이트)\npdfjs-document-properties-title = 제목:\npdfjs-document-properties-author = 작성자:\npdfjs-document-properties-subject = 주제:\npdfjs-document-properties-keywords = 키워드:\npdfjs-document-properties-creation-date = 작성 날짜:\npdfjs-document-properties-modification-date = 수정 날짜:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = 작성 프로그램:\npdfjs-document-properties-producer = PDF 변환 소프트웨어:\npdfjs-document-properties-version = PDF 버전:\npdfjs-document-properties-page-count = 페이지 수:\npdfjs-document-properties-page-size = 페이지 크기:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = 세로 방향\npdfjs-document-properties-page-size-orientation-landscape = 가로 방향\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = 레터\npdfjs-document-properties-page-size-name-legal = 리걸\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = 빠른 웹 보기:\npdfjs-document-properties-linearized-yes = 예\npdfjs-document-properties-linearized-no = 아니요\npdfjs-document-properties-close-button = 닫기\n\n## Print\n\npdfjs-print-progress-message = 인쇄 문서 준비 중…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = 취소\npdfjs-printing-not-supported = 경고: 이 브라우저는 인쇄를 완전히 지원하지 않습니다.\npdfjs-printing-not-ready = 경고: 이 PDF를 인쇄를 할 수 있을 정도로 읽어들이지 못했습니다.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = 사이드바 표시/숨기기\npdfjs-toggle-sidebar-notification-button =\n    .title = 사이드바 표시/숨기기 (문서에 아웃라인/첨부파일/레이어 포함됨)\npdfjs-toggle-sidebar-button-label = 사이드바 표시/숨기기\npdfjs-document-outline-button =\n    .title = 문서 아웃라인 보기 (더블 클릭해서 모든 항목 펼치기/접기)\npdfjs-document-outline-button-label = 문서 아웃라인\npdfjs-attachments-button =\n    .title = 첨부파일 보기\npdfjs-attachments-button-label = 첨부파일\npdfjs-layers-button =\n    .title = 레이어 보기 (더블 클릭해서 모든 레이어를 기본 상태로 재설정)\npdfjs-layers-button-label = 레이어\npdfjs-thumbs-button =\n    .title = 미리보기\npdfjs-thumbs-button-label = 미리보기\npdfjs-current-outline-item-button =\n    .title = 현재 아웃라인 항목 찾기\npdfjs-current-outline-item-button-label = 현재 아웃라인 항목\npdfjs-findbar-button =\n    .title = 검색\npdfjs-findbar-button-label = 검색\npdfjs-additional-layers = 추가 레이어\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = { $page } 페이지\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = { $page } 페이지 미리보기\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = 찾기\n    .placeholder = 문서에서 찾기…\npdfjs-find-previous-button =\n    .title = 지정 문자열에 일치하는 1개 부분을 검색\npdfjs-find-previous-button-label = 이전\npdfjs-find-next-button =\n    .title = 지정 문자열에 일치하는 다음 부분을 검색\npdfjs-find-next-button-label = 다음\npdfjs-find-highlight-checkbox = 모두 강조 표시\npdfjs-find-match-case-checkbox-label = 대/소문자 구분\npdfjs-find-match-diacritics-checkbox-label = 분음 부호 일치\npdfjs-find-entire-word-checkbox-label = 단어 단위로\npdfjs-find-reached-top = 문서 처음까지 검색하고 끝으로 돌아와 검색했습니다.\npdfjs-find-reached-bottom = 문서 끝까지 검색하고 앞으로 돌아와 검색했습니다.\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count = { $current } / { $total } 일치\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit = { $limit }개 이상 일치\npdfjs-find-not-found = 검색 결과 없음\n\n## Predefined zoom values\n\npdfjs-page-scale-width = 페이지 너비에 맞추기\npdfjs-page-scale-fit = 페이지에 맞추기\npdfjs-page-scale-auto = 자동\npdfjs-page-scale-actual = 실제 크기\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = { $page } 페이지\n\n## Loading indicator messages\n\npdfjs-loading-error = PDF를 로드하는 동안 오류가 발생했습니다.\npdfjs-invalid-file-error = 잘못되었거나 손상된 PDF 파일.\npdfjs-missing-file-error = PDF 파일 없음.\npdfjs-unexpected-response-error = 예기치 않은 서버 응답입니다.\npdfjs-rendering-error = 페이지를 렌더링하는 동안 오류가 발생했습니다.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date } { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } 주석]\n\n## Password\n\npdfjs-password-label = 이 PDF 파일을 열 수 있는 비밀번호를 입력하세요.\npdfjs-password-invalid = 잘못된 비밀번호입니다. 다시 시도하세요.\npdfjs-password-ok-button = 확인\npdfjs-password-cancel-button = 취소\npdfjs-web-fonts-disabled = 웹 폰트가 비활성화됨: 내장된 PDF 글꼴을 사용할 수 없습니다.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = 텍스트\npdfjs-editor-free-text-button-label = 텍스트\npdfjs-editor-ink-button =\n    .title = 그리기\npdfjs-editor-ink-button-label = 그리기\npdfjs-editor-stamp-button =\n    .title = 이미지 추가 또는 편집\npdfjs-editor-stamp-button-label = 이미지 추가 또는 편집\npdfjs-editor-highlight-button =\n    .title = 강조 표시\npdfjs-editor-highlight-button-label = 강조 표시\npdfjs-highlight-floating-button =\n    .title = 강조 표시\npdfjs-highlight-floating-button1 =\n    .title = 강조 표시\n    .aria-label = 강조 표시\npdfjs-highlight-floating-button-label = 강조 표시\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = 그리기 제거\npdfjs-editor-remove-freetext-button =\n    .title = 텍스트 제거\npdfjs-editor-remove-stamp-button =\n    .title = 이미지 제거\npdfjs-editor-remove-highlight-button =\n    .title = 강조 표시 제거\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = 색상\npdfjs-editor-free-text-size-input = 크기\npdfjs-editor-ink-color-input = 색상\npdfjs-editor-ink-thickness-input = 두께\npdfjs-editor-ink-opacity-input = 불투명도\npdfjs-editor-stamp-add-image-button =\n    .title = 이미지 추가\npdfjs-editor-stamp-add-image-button-label = 이미지 추가\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = 두께\npdfjs-editor-free-highlight-thickness-title =\n    .title = 텍스트 이외의 항목을 강조 표시할 때 두께 변경\npdfjs-free-text =\n    .aria-label = 텍스트 편집기\npdfjs-free-text-default-content = 입력하세요…\npdfjs-ink =\n    .aria-label = 그리기 편집기\npdfjs-ink-canvas =\n    .aria-label = 사용자 생성 이미지\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = 대체 텍스트\npdfjs-editor-alt-text-edit-button-label = 대체 텍스트 편집\npdfjs-editor-alt-text-dialog-label = 옵션을 선택하세요\npdfjs-editor-alt-text-dialog-description = 대체 텍스트는 사람들이 이미지를 볼 수 없거나 이미지가 로드되지 않을 때 도움이 됩니다.\npdfjs-editor-alt-text-add-description-label = 설명 추가\npdfjs-editor-alt-text-add-description-description = 주제, 설정, 동작을 설명하는 1~2개의 문장을 목표로 하세요.\npdfjs-editor-alt-text-mark-decorative-label = 장식용으로 표시\npdfjs-editor-alt-text-mark-decorative-description = 테두리나 워터마크와 같은 장식적인 이미지에 사용됩니다.\npdfjs-editor-alt-text-cancel-button = 취소\npdfjs-editor-alt-text-save-button = 저장\npdfjs-editor-alt-text-decorative-tooltip = 장식용으로 표시됨\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = 예를 들어, “한 청년이 식탁에 앉아 식사를 하고 있습니다.”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = 왼쪽 위 — 크기 조정\npdfjs-editor-resizer-label-top-middle = 가운데 위 - 크기 조정\npdfjs-editor-resizer-label-top-right = 오른쪽 위 — 크기 조정\npdfjs-editor-resizer-label-middle-right = 오른쪽 가운데 — 크기 조정\npdfjs-editor-resizer-label-bottom-right = 오른쪽 아래 - 크기 조정\npdfjs-editor-resizer-label-bottom-middle = 가운데 아래 — 크기 조정\npdfjs-editor-resizer-label-bottom-left = 왼쪽 아래 - 크기 조정\npdfjs-editor-resizer-label-middle-left = 왼쪽 가운데 — 크기 조정\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = 색상\npdfjs-editor-colorpicker-button =\n    .title = 색상 변경\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = 색상 선택\npdfjs-editor-colorpicker-yellow =\n    .title = 노란색\npdfjs-editor-colorpicker-green =\n    .title = 녹색\npdfjs-editor-colorpicker-blue =\n    .title = 파란색\npdfjs-editor-colorpicker-pink =\n    .title = 분홍색\npdfjs-editor-colorpicker-red =\n    .title = 빨간색\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = 모두 보기\npdfjs-editor-highlight-show-all-button =\n    .title = 모두 보기\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/lij/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Pagina primma\npdfjs-previous-button-label = Precedente\npdfjs-next-button =\n    .title = Pagina dòppo\npdfjs-next-button-label = Pròscima\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Pagina\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = de { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Diminoisci zoom\npdfjs-zoom-out-button-label = Diminoisci zoom\npdfjs-zoom-in-button =\n    .title = Aomenta zoom\npdfjs-zoom-in-button-label = Aomenta zoom\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Vanni into mòddo de prezentaçion\npdfjs-presentation-mode-button-label = Mòddo de prezentaçion\npdfjs-open-file-button =\n    .title = Arvi file\npdfjs-open-file-button-label = Arvi\npdfjs-print-button =\n    .title = Stanpa\npdfjs-print-button-label = Stanpa\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Atressi\npdfjs-tools-button-label = Atressi\npdfjs-first-page-button =\n    .title = Vanni a-a primma pagina\npdfjs-first-page-button-label = Vanni a-a primma pagina\npdfjs-last-page-button =\n    .title = Vanni a l'urtima pagina\npdfjs-last-page-button-label = Vanni a l'urtima pagina\npdfjs-page-rotate-cw-button =\n    .title = Gia into verso oraio\npdfjs-page-rotate-cw-button-label = Gia into verso oraio\npdfjs-page-rotate-ccw-button =\n    .title = Gia into verso antioraio\npdfjs-page-rotate-ccw-button-label = Gia into verso antioraio\npdfjs-cursor-text-select-tool-button =\n    .title = Abilita strumento de seleçion do testo\npdfjs-cursor-text-select-tool-button-label = Strumento de seleçion do testo\npdfjs-cursor-hand-tool-button =\n    .title = Abilita strumento man\npdfjs-cursor-hand-tool-button-label = Strumento man\npdfjs-scroll-vertical-button =\n    .title = Deuvia rebelamento verticale\npdfjs-scroll-vertical-button-label = Rebelamento verticale\npdfjs-scroll-horizontal-button =\n    .title = Deuvia rebelamento orizontâ\npdfjs-scroll-horizontal-button-label = Rebelamento orizontâ\npdfjs-scroll-wrapped-button =\n    .title = Deuvia rebelamento incapsolou\npdfjs-scroll-wrapped-button-label = Rebelamento incapsolou\npdfjs-spread-none-button =\n    .title = No unite a-a difuxon de pagina\npdfjs-spread-none-button-label = No difuxon\npdfjs-spread-odd-button =\n    .title = Uniscite a-a difuxon de pagina co-o numero dèspa\npdfjs-spread-odd-button-label = Difuxon dèspa\npdfjs-spread-even-button =\n    .title = Uniscite a-a difuxon de pagina co-o numero pari\npdfjs-spread-even-button-label = Difuxon pari\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Propietæ do documento…\npdfjs-document-properties-button-label = Propietæ do documento…\npdfjs-document-properties-file-name = Nomme schedaio:\npdfjs-document-properties-file-size = Dimenscion schedaio:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } kB ({ $size_b } byte)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } byte)\npdfjs-document-properties-title = Titolo:\npdfjs-document-properties-author = Aoto:\npdfjs-document-properties-subject = Ogetto:\npdfjs-document-properties-keywords = Paròlle ciave:\npdfjs-document-properties-creation-date = Dæta creaçion:\npdfjs-document-properties-modification-date = Dæta cangiamento:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Aotô originale:\npdfjs-document-properties-producer = Produtô PDF:\npdfjs-document-properties-version = Verscion PDF:\npdfjs-document-properties-page-count = Contezzo pagine:\npdfjs-document-properties-page-size = Dimenscion da pagina:\npdfjs-document-properties-page-size-unit-inches = dii gròsci\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = drito\npdfjs-document-properties-page-size-orientation-landscape = desteizo\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letia\npdfjs-document-properties-page-size-name-legal = Lezze\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Vista veloce do Web:\npdfjs-document-properties-linearized-yes = Sci\npdfjs-document-properties-linearized-no = No\npdfjs-document-properties-close-button = Særa\n\n## Print\n\npdfjs-print-progress-message = Praparo o documento pe-a stanpa…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Anulla\npdfjs-printing-not-supported = Atençion: a stanpa a no l'é conpletamente soportâ da sto navegatô.\npdfjs-printing-not-ready = Atençion: o PDF o no l'é ancon caregou conpletamente pe-a stanpa.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Ativa/dizativa bara de scianco\npdfjs-toggle-sidebar-button-label = Ativa/dizativa bara de scianco\npdfjs-document-outline-button =\n    .title = Fanni vedde o contorno do documento (scicca doggio pe espande/ridue tutti i elementi)\npdfjs-document-outline-button-label = Contorno do documento\npdfjs-attachments-button =\n    .title = Fanni vedde alegæ\npdfjs-attachments-button-label = Alegæ\npdfjs-thumbs-button =\n    .title = Mostra miniatue\npdfjs-thumbs-button-label = Miniatue\npdfjs-findbar-button =\n    .title = Treuva into documento\npdfjs-findbar-button-label = Treuva\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Pagina { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatua da pagina { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Treuva\n    .placeholder = Treuva into documento…\npdfjs-find-previous-button =\n    .title = Treuva a ripetiçion precedente do testo da çercâ\npdfjs-find-previous-button-label = Precedente\npdfjs-find-next-button =\n    .title = Treuva a ripetiçion dòppo do testo da çercâ\npdfjs-find-next-button-label = Segoente\npdfjs-find-highlight-checkbox = Evidençia\npdfjs-find-match-case-checkbox-label = Maioscole/minoscole\npdfjs-find-entire-word-checkbox-label = Poula intrega\npdfjs-find-reached-top = Razonto a fin da pagina, continoa da l'iniçio\npdfjs-find-reached-bottom = Razonto l'iniçio da pagina, continoa da-a fin\npdfjs-find-not-found = Testo no trovou\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Larghessa pagina\npdfjs-page-scale-fit = Adatta a una pagina\npdfjs-page-scale-auto = Zoom aotomatico\npdfjs-page-scale-actual = Dimenscioin efetive\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = S'é verificou 'n'erô itno caregamento do PDF.\npdfjs-invalid-file-error = O schedaio PDF o l'é no valido ò aroinou.\npdfjs-missing-file-error = O schedaio PDF o no gh'é.\npdfjs-unexpected-response-error = Risposta inprevista do-u server\npdfjs-rendering-error = Gh'é stæto 'n'erô itno rendering da pagina.\n\n## Annotations\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Anotaçion: { $type }]\n\n## Password\n\npdfjs-password-label = Dimme a paròlla segreta pe arvî sto schedaio PDF.\npdfjs-password-invalid = Paròlla segreta sbalia. Preuva torna.\npdfjs-password-ok-button = Va ben\npdfjs-password-cancel-button = Anulla\npdfjs-web-fonts-disabled = I font do web en dizativæ: inposcibile adeuviâ i carateri do PDF.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/lo/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = ຫນ້າກ່ອນຫນ້າ\npdfjs-previous-button-label = ກ່ອນຫນ້າ\npdfjs-next-button =\n    .title = ຫນ້າຖັດໄປ\npdfjs-next-button-label = ຖັດໄປ\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = ຫນ້າ\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = ຈາກ { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } ຈາກ { $pagesCount })\npdfjs-zoom-out-button =\n    .title = ຂະຫຍາຍອອກ\npdfjs-zoom-out-button-label = ຂະຫຍາຍອອກ\npdfjs-zoom-in-button =\n    .title = ຂະຫຍາຍເຂົ້າ\npdfjs-zoom-in-button-label = ຂະຫຍາຍເຂົ້າ\npdfjs-zoom-select =\n    .title = ຂະຫຍາຍ\npdfjs-presentation-mode-button =\n    .title = ສັບປ່ຽນເປັນໂຫມດການນຳສະເຫນີ\npdfjs-presentation-mode-button-label = ໂຫມດການນຳສະເຫນີ\npdfjs-open-file-button =\n    .title = ເປີດໄຟລ໌\npdfjs-open-file-button-label = ເປີດ\npdfjs-print-button =\n    .title = ພິມ\npdfjs-print-button-label = ພິມ\npdfjs-save-button =\n    .title = ບັນທຶກ\npdfjs-save-button-label = ບັນທຶກ\npdfjs-bookmark-button =\n    .title = ໜ້າປັດຈຸບັນ (ເບິ່ງ URL ຈາກໜ້າປັດຈຸບັນ)\npdfjs-bookmark-button-label = ຫນ້າ​ປັດ​ຈຸ​ບັນ\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = ເປີດໃນ App\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = ເປີດໃນ App\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = ເຄື່ອງມື\npdfjs-tools-button-label = ເຄື່ອງມື\npdfjs-first-page-button =\n    .title = ໄປທີ່ຫນ້າທຳອິດ\npdfjs-first-page-button-label = ໄປທີ່ຫນ້າທຳອິດ\npdfjs-last-page-button =\n    .title = ໄປທີ່ຫນ້າສຸດທ້າຍ\npdfjs-last-page-button-label = ໄປທີ່ຫນ້າສຸດທ້າຍ\npdfjs-page-rotate-cw-button =\n    .title = ຫມູນຕາມເຂັມໂມງ\npdfjs-page-rotate-cw-button-label = ຫມູນຕາມເຂັມໂມງ\npdfjs-page-rotate-ccw-button =\n    .title = ຫມູນທວນເຂັມໂມງ\npdfjs-page-rotate-ccw-button-label = ຫມູນທວນເຂັມໂມງ\npdfjs-cursor-text-select-tool-button =\n    .title = ເປີດໃຊ້ເຄື່ອງມືການເລືອກຂໍ້ຄວາມ\npdfjs-cursor-text-select-tool-button-label = ເຄື່ອງມືເລືອກຂໍ້ຄວາມ\npdfjs-cursor-hand-tool-button =\n    .title = ເປີດໃຊ້ເຄື່ອງມືມື\npdfjs-cursor-hand-tool-button-label = ເຄື່ອງມືມື\npdfjs-scroll-page-button =\n    .title = ໃຊ້ການເລື່ອນໜ້າ\npdfjs-scroll-page-button-label = ເລື່ອນໜ້າ\npdfjs-scroll-vertical-button =\n    .title = ໃຊ້ການເລື່ອນແນວຕັ້ງ\npdfjs-scroll-vertical-button-label = ເລື່ອນແນວຕັ້ງ\npdfjs-scroll-horizontal-button =\n    .title = ໃຊ້ການເລື່ອນແນວນອນ\npdfjs-scroll-horizontal-button-label = ເລື່ອນແນວນອນ\npdfjs-scroll-wrapped-button =\n    .title = ໃຊ້ Wrapped Scrolling\npdfjs-scroll-wrapped-button-label = Wrapped Scrolling\npdfjs-spread-none-button =\n    .title = ບໍ່ຕ້ອງຮ່ວມການແຜ່ກະຈາຍຫນ້າ\npdfjs-spread-none-button-label = ບໍ່ມີການແຜ່ກະຈາຍ\npdfjs-spread-odd-button =\n    .title = ເຂົ້າຮ່ວມການແຜ່ກະຈາຍຫນ້າເລີ່ມຕົ້ນດ້ວຍຫນ້າເລກຄີກ\npdfjs-spread-odd-button-label = ການແຜ່ກະຈາຍຄີກ\npdfjs-spread-even-button =\n    .title = ເຂົ້າຮ່ວມການແຜ່ກະຈາຍຂອງຫນ້າເລີ່ມຕົ້ນດ້ວຍຫນ້າເລກຄູ່\npdfjs-spread-even-button-label = ການແຜ່ກະຈາຍຄູ່\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = ຄຸນສົມບັດເອກະສານ...\npdfjs-document-properties-button-label = ຄຸນສົມບັດເອກະສານ...\npdfjs-document-properties-file-name = ຊື່ໄຟລ໌:\npdfjs-document-properties-file-size = ຂະຫນາດໄຟລ໌:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b }  ໄບຕ໌)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } ໄບຕ໌)\npdfjs-document-properties-title = ຫົວຂໍ້:\npdfjs-document-properties-author = ຜູ້ຂຽນ:\npdfjs-document-properties-subject = ຫົວຂໍ້:\npdfjs-document-properties-keywords = ຄໍາທີ່ຕ້ອງການຄົ້ນຫາ:\npdfjs-document-properties-creation-date = ວັນທີສ້າງ:\npdfjs-document-properties-modification-date = ວັນທີແກ້ໄຂ:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = ຜູ້ສ້າງ:\npdfjs-document-properties-producer = ຜູ້ຜະລິດ PDF:\npdfjs-document-properties-version = ເວີຊັ່ນ PDF:\npdfjs-document-properties-page-count = ຈຳນວນໜ້າ:\npdfjs-document-properties-page-size = ຂະໜາດໜ້າ:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = ລວງຕັ້ງ\npdfjs-document-properties-page-size-orientation-landscape = ລວງນອນ\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = ຈົດໝາຍ\npdfjs-document-properties-page-size-name-legal = ຂໍ້ກົດຫມາຍ\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = ມຸມມອງເວັບທີ່ໄວ:\npdfjs-document-properties-linearized-yes = ແມ່ນ\npdfjs-document-properties-linearized-no = ບໍ່\npdfjs-document-properties-close-button = ປິດ\n\n## Print\n\npdfjs-print-progress-message = ກຳລັງກະກຽມເອກະສານສຳລັບການພິມ...\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = ຍົກເລີກ\npdfjs-printing-not-supported = ຄຳເຕືອນ: ບຼາວເຊີນີ້ບໍ່ຮອງຮັບການພິມຢ່າງເຕັມທີ່.\npdfjs-printing-not-ready = ຄໍາ​ເຕືອນ​: PDF ບໍ່​ໄດ້​ຖືກ​ໂຫຼດ​ຢ່າງ​ເຕັມ​ທີ່​ສໍາ​ລັບ​ການ​ພິມ​.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = ເປີດ/ປິດແຖບຂ້າງ\npdfjs-toggle-sidebar-notification-button =\n    .title = ສະຫຼັບແຖບດ້ານຂ້າງ (ເອກະສານປະກອບມີໂຄງຮ່າງ/ໄຟລ໌ແນບ/ຊັ້ນຂໍ້ມູນ)\npdfjs-toggle-sidebar-button-label = ເປີດ/ປິດແຖບຂ້າງ\npdfjs-document-outline-button =\n    .title = ສະ​ແດງ​ໂຄງ​ຮ່າງ​ເອ​ກະ​ສານ (ກົດ​ສອງ​ຄັ້ງ​ເພື່ອ​ຂະ​ຫຍາຍ / ຫຍໍ້​ລາຍ​ການ​ທັງ​ຫມົດ​)\npdfjs-document-outline-button-label = ເຄົ້າຮ່າງເອກະສານ\npdfjs-attachments-button =\n    .title = ສະແດງໄຟລ໌ແນບ\npdfjs-attachments-button-label = ໄຟລ໌ແນບ\npdfjs-layers-button =\n    .title = ສະແດງຊັ້ນຂໍ້ມູນ (ຄລິກສອງເທື່ອເພື່ອຣີເຊັດຊັ້ນຂໍ້ມູນທັງໝົດໃຫ້ເປັນສະຖານະເລີ່ມຕົ້ນ)\npdfjs-layers-button-label = ຊັ້ນ\npdfjs-thumbs-button =\n    .title = ສະແດງຮູບຫຍໍ້\npdfjs-thumbs-button-label = ຮູບຕົວຢ່າງ\npdfjs-current-outline-item-button =\n    .title = ຊອກຫາລາຍການໂຄງຮ່າງປະຈຸບັນ\npdfjs-current-outline-item-button-label = ລາຍການໂຄງຮ່າງປະຈຸບັນ\npdfjs-findbar-button =\n    .title = ຊອກຫາໃນເອກະສານ\npdfjs-findbar-button-label = ຄົ້ນຫາ\npdfjs-additional-layers = ຊັ້ນຂໍ້ມູນເພີ່ມເຕີມ\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = ໜ້າ { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = ຮູບຕົວຢ່າງຂອງໜ້າ { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = ຄົ້ນຫາ\n    .placeholder = ຊອກຫາໃນເອກະສານ...\npdfjs-find-previous-button =\n    .title = ຊອກຫາການປະກົດຕົວທີ່ຜ່ານມາຂອງປະໂຫຍກ\npdfjs-find-previous-button-label = ກ່ອນຫນ້ານີ້\npdfjs-find-next-button =\n    .title = ຊອກຫາຕຳແຫນ່ງຖັດໄປຂອງວະລີ\npdfjs-find-next-button-label = ຕໍ່ໄປ\npdfjs-find-highlight-checkbox = ໄຮໄລທ໌ທັງຫມົດ\npdfjs-find-match-case-checkbox-label = ກໍລະນີທີ່ກົງກັນ\npdfjs-find-match-diacritics-checkbox-label = ເຄື່ອງໝາຍກຳກັບການອອກສຽງກົງກັນ\npdfjs-find-entire-word-checkbox-label = ກົງກັນທຸກຄຳ\npdfjs-find-reached-top = ມາຮອດເທິງຂອງເອກະສານ, ສືບຕໍ່ຈາກລຸ່ມ\npdfjs-find-reached-bottom = ຮອດຕອນທ້າຍຂອງເອກະສານ, ສືບຕໍ່ຈາກເທິງ\npdfjs-find-not-found = ບໍ່ພົບວະລີທີ່ຕ້ອງການ\n\n## Predefined zoom values\n\npdfjs-page-scale-width = ຄວາມກວ້າງໜ້າ\npdfjs-page-scale-fit = ໜ້າພໍດີ\npdfjs-page-scale-auto = ຊູມອັດຕະໂນມັດ\npdfjs-page-scale-actual = ຂະໜາດຕົວຈິງ\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = ໜ້າ { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = ມີຂໍ້ຜິດພາດເກີດຂື້ນຂະນະທີ່ກຳລັງໂຫລດ PDF.\npdfjs-invalid-file-error = ໄຟລ໌ PDF ບໍ່ຖືກຕ້ອງຫລືເສຍຫາຍ.\npdfjs-missing-file-error = ບໍ່ມີໄຟລ໌ PDF.\npdfjs-unexpected-response-error = ການຕອບສະໜອງຂອງເຊີບເວີທີ່ບໍ່ຄາດຄິດ.\npdfjs-rendering-error = ມີຂໍ້ຜິດພາດເກີດຂື້ນຂະນະທີ່ກຳລັງເຣັນເດີຫນ້າ.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } ຄຳບັນຍາຍ]\n\n## Password\n\npdfjs-password-label = ໃສ່ລະຫັດຜ່ານເພື່ອເປີດໄຟລ໌ PDF ນີ້.\npdfjs-password-invalid = ລະຫັດຜ່ານບໍ່ຖືກຕ້ອງ. ກະລຸນາລອງອີກຄັ້ງ.\npdfjs-password-ok-button = ຕົກລົງ\npdfjs-password-cancel-button = ຍົກເລີກ\npdfjs-web-fonts-disabled = ຟອນເວັບຖືກປິດໃຊ້ງານ: ບໍ່ສາມາດໃຊ້ຟອນ PDF ທີ່ຝັງໄວ້ໄດ້.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = ຂໍ້ຄວາມ\npdfjs-editor-free-text-button-label = ຂໍ້ຄວາມ\npdfjs-editor-ink-button =\n    .title = ແຕ້ມ\npdfjs-editor-ink-button-label = ແຕ້ມ\n# Editor Parameters\npdfjs-editor-free-text-color-input = ສີ\npdfjs-editor-free-text-size-input = ຂະຫນາດ\npdfjs-editor-ink-color-input = ສີ\npdfjs-editor-ink-thickness-input = ຄວາມຫນາ\npdfjs-editor-ink-opacity-input = ຄວາມໂປ່ງໃສ\npdfjs-free-text =\n    .aria-label = ຕົວແກ້ໄຂຂໍ້ຄວາມ\npdfjs-free-text-default-content = ເລີ່ມພິມ...\npdfjs-ink =\n    .aria-label = ຕົວແກ້ໄຂຮູບແຕ້ມ\npdfjs-ink-canvas =\n    .aria-label = ຮູບພາບທີ່ຜູ້ໃຊ້ສ້າງ\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/locale.json",
    "content": "{\"ach\":\"ach/viewer.ftl\",\"af\":\"af/viewer.ftl\",\"an\":\"an/viewer.ftl\",\"ar\":\"ar/viewer.ftl\",\"ast\":\"ast/viewer.ftl\",\"az\":\"az/viewer.ftl\",\"be\":\"be/viewer.ftl\",\"bg\":\"bg/viewer.ftl\",\"bn\":\"bn/viewer.ftl\",\"bo\":\"bo/viewer.ftl\",\"br\":\"br/viewer.ftl\",\"brx\":\"brx/viewer.ftl\",\"bs\":\"bs/viewer.ftl\",\"ca\":\"ca/viewer.ftl\",\"cak\":\"cak/viewer.ftl\",\"ckb\":\"ckb/viewer.ftl\",\"cs\":\"cs/viewer.ftl\",\"cy\":\"cy/viewer.ftl\",\"da\":\"da/viewer.ftl\",\"de\":\"de/viewer.ftl\",\"dsb\":\"dsb/viewer.ftl\",\"el\":\"el/viewer.ftl\",\"en-ca\":\"en-CA/viewer.ftl\",\"en-gb\":\"en-GB/viewer.ftl\",\"en-us\":\"en-US/viewer.ftl\",\"eo\":\"eo/viewer.ftl\",\"es-ar\":\"es-AR/viewer.ftl\",\"es-cl\":\"es-CL/viewer.ftl\",\"es-es\":\"es-ES/viewer.ftl\",\"es-mx\":\"es-MX/viewer.ftl\",\"et\":\"et/viewer.ftl\",\"eu\":\"eu/viewer.ftl\",\"fa\":\"fa/viewer.ftl\",\"ff\":\"ff/viewer.ftl\",\"fi\":\"fi/viewer.ftl\",\"fr\":\"fr/viewer.ftl\",\"fur\":\"fur/viewer.ftl\",\"fy-nl\":\"fy-NL/viewer.ftl\",\"ga-ie\":\"ga-IE/viewer.ftl\",\"gd\":\"gd/viewer.ftl\",\"gl\":\"gl/viewer.ftl\",\"gn\":\"gn/viewer.ftl\",\"gu-in\":\"gu-IN/viewer.ftl\",\"he\":\"he/viewer.ftl\",\"hi-in\":\"hi-IN/viewer.ftl\",\"hr\":\"hr/viewer.ftl\",\"hsb\":\"hsb/viewer.ftl\",\"hu\":\"hu/viewer.ftl\",\"hy-am\":\"hy-AM/viewer.ftl\",\"hye\":\"hye/viewer.ftl\",\"ia\":\"ia/viewer.ftl\",\"id\":\"id/viewer.ftl\",\"is\":\"is/viewer.ftl\",\"it\":\"it/viewer.ftl\",\"ja\":\"ja/viewer.ftl\",\"ka\":\"ka/viewer.ftl\",\"kab\":\"kab/viewer.ftl\",\"kk\":\"kk/viewer.ftl\",\"km\":\"km/viewer.ftl\",\"kn\":\"kn/viewer.ftl\",\"ko\":\"ko/viewer.ftl\",\"lij\":\"lij/viewer.ftl\",\"lo\":\"lo/viewer.ftl\",\"lt\":\"lt/viewer.ftl\",\"ltg\":\"ltg/viewer.ftl\",\"lv\":\"lv/viewer.ftl\",\"meh\":\"meh/viewer.ftl\",\"mk\":\"mk/viewer.ftl\",\"mr\":\"mr/viewer.ftl\",\"ms\":\"ms/viewer.ftl\",\"my\":\"my/viewer.ftl\",\"nb-no\":\"nb-NO/viewer.ftl\",\"ne-np\":\"ne-NP/viewer.ftl\",\"nl\":\"nl/viewer.ftl\",\"nn-no\":\"nn-NO/viewer.ftl\",\"oc\":\"oc/viewer.ftl\",\"pa-in\":\"pa-IN/viewer.ftl\",\"pl\":\"pl/viewer.ftl\",\"pt-br\":\"pt-BR/viewer.ftl\",\"pt-pt\":\"pt-PT/viewer.ftl\",\"rm\":\"rm/viewer.ftl\",\"ro\":\"ro/viewer.ftl\",\"ru\":\"ru/viewer.ftl\",\"sat\":\"sat/viewer.ftl\",\"sc\":\"sc/viewer.ftl\",\"scn\":\"scn/viewer.ftl\",\"sco\":\"sco/viewer.ftl\",\"si\":\"si/viewer.ftl\",\"sk\":\"sk/viewer.ftl\",\"skr\":\"skr/viewer.ftl\",\"sl\":\"sl/viewer.ftl\",\"son\":\"son/viewer.ftl\",\"sq\":\"sq/viewer.ftl\",\"sr\":\"sr/viewer.ftl\",\"sv-se\":\"sv-SE/viewer.ftl\",\"szl\":\"szl/viewer.ftl\",\"ta\":\"ta/viewer.ftl\",\"te\":\"te/viewer.ftl\",\"tg\":\"tg/viewer.ftl\",\"th\":\"th/viewer.ftl\",\"tl\":\"tl/viewer.ftl\",\"tr\":\"tr/viewer.ftl\",\"trs\":\"trs/viewer.ftl\",\"uk\":\"uk/viewer.ftl\",\"ur\":\"ur/viewer.ftl\",\"uz\":\"uz/viewer.ftl\",\"vi\":\"vi/viewer.ftl\",\"wo\":\"wo/viewer.ftl\",\"xh\":\"xh/viewer.ftl\",\"zh-cn\":\"zh-CN/viewer.ftl\",\"zh-tw\":\"zh-TW/viewer.ftl\"}"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/lt/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Ankstesnis puslapis\npdfjs-previous-button-label = Ankstesnis\npdfjs-next-button =\n    .title = Kitas puslapis\npdfjs-next-button-label = Kitas\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Puslapis\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = iš { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } iš { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Sumažinti\npdfjs-zoom-out-button-label = Sumažinti\npdfjs-zoom-in-button =\n    .title = Padidinti\npdfjs-zoom-in-button-label = Padidinti\npdfjs-zoom-select =\n    .title = Mastelis\npdfjs-presentation-mode-button =\n    .title = Pereiti į pateikties veikseną\npdfjs-presentation-mode-button-label = Pateikties veiksena\npdfjs-open-file-button =\n    .title = Atverti failą\npdfjs-open-file-button-label = Atverti\npdfjs-print-button =\n    .title = Spausdinti\npdfjs-print-button-label = Spausdinti\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Priemonės\npdfjs-tools-button-label = Priemonės\npdfjs-first-page-button =\n    .title = Eiti į pirmą puslapį\npdfjs-first-page-button-label = Eiti į pirmą puslapį\npdfjs-last-page-button =\n    .title = Eiti į paskutinį puslapį\npdfjs-last-page-button-label = Eiti į paskutinį puslapį\npdfjs-page-rotate-cw-button =\n    .title = Pasukti pagal laikrodžio rodyklę\npdfjs-page-rotate-cw-button-label = Pasukti pagal laikrodžio rodyklę\npdfjs-page-rotate-ccw-button =\n    .title = Pasukti prieš laikrodžio rodyklę\npdfjs-page-rotate-ccw-button-label = Pasukti prieš laikrodžio rodyklę\npdfjs-cursor-text-select-tool-button =\n    .title = Įjungti teksto žymėjimo įrankį\npdfjs-cursor-text-select-tool-button-label = Teksto žymėjimo įrankis\npdfjs-cursor-hand-tool-button =\n    .title = Įjungti vilkimo įrankį\npdfjs-cursor-hand-tool-button-label = Vilkimo įrankis\npdfjs-scroll-page-button =\n    .title = Naudoti puslapio slinkimą\npdfjs-scroll-page-button-label = Puslapio slinkimas\npdfjs-scroll-vertical-button =\n    .title = Naudoti vertikalų slinkimą\npdfjs-scroll-vertical-button-label = Vertikalus slinkimas\npdfjs-scroll-horizontal-button =\n    .title = Naudoti horizontalų slinkimą\npdfjs-scroll-horizontal-button-label = Horizontalus slinkimas\npdfjs-scroll-wrapped-button =\n    .title = Naudoti išklotą slinkimą\npdfjs-scroll-wrapped-button-label = Išklotas slinkimas\npdfjs-spread-none-button =\n    .title = Nejungti puslapių į dvilapius\npdfjs-spread-none-button-label = Be dvilapių\npdfjs-spread-odd-button =\n    .title = Sujungti į dvilapius pradedant nelyginiais puslapiais\npdfjs-spread-odd-button-label = Nelyginiai dvilapiai\npdfjs-spread-even-button =\n    .title = Sujungti į dvilapius pradedant lyginiais puslapiais\npdfjs-spread-even-button-label = Lyginiai dvilapiai\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Dokumento savybės…\npdfjs-document-properties-button-label = Dokumento savybės…\npdfjs-document-properties-file-name = Failo vardas:\npdfjs-document-properties-file-size = Failo dydis:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } B)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } B)\npdfjs-document-properties-title = Antraštė:\npdfjs-document-properties-author = Autorius:\npdfjs-document-properties-subject = Tema:\npdfjs-document-properties-keywords = Reikšminiai žodžiai:\npdfjs-document-properties-creation-date = Sukūrimo data:\npdfjs-document-properties-modification-date = Modifikavimo data:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Kūrėjas:\npdfjs-document-properties-producer = PDF generatorius:\npdfjs-document-properties-version = PDF versija:\npdfjs-document-properties-page-count = Puslapių skaičius:\npdfjs-document-properties-page-size = Puslapio dydis:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = stačias\npdfjs-document-properties-page-size-orientation-landscape = gulsčias\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Laiškas\npdfjs-document-properties-page-size-name-legal = Dokumentas\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Spartus žiniatinklio rodinys:\npdfjs-document-properties-linearized-yes = Taip\npdfjs-document-properties-linearized-no = Ne\npdfjs-document-properties-close-button = Užverti\n\n## Print\n\npdfjs-print-progress-message = Dokumentas ruošiamas spausdinimui…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Atsisakyti\npdfjs-printing-not-supported = Dėmesio! Spausdinimas šioje naršyklėje nėra pilnai realizuotas.\npdfjs-printing-not-ready = Dėmesio! PDF failas dar nėra pilnai įkeltas spausdinimui.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Rodyti / slėpti šoninį polangį\npdfjs-toggle-sidebar-notification-button =\n    .title = Parankinė (dokumentas turi struktūrą / priedų / sluoksnių)\npdfjs-toggle-sidebar-button-label = Šoninis polangis\npdfjs-document-outline-button =\n    .title = Rodyti dokumento struktūrą (spustelėkite dukart norėdami išplėsti/suskleisti visus elementus)\npdfjs-document-outline-button-label = Dokumento struktūra\npdfjs-attachments-button =\n    .title = Rodyti priedus\npdfjs-attachments-button-label = Priedai\npdfjs-layers-button =\n    .title = Rodyti sluoksnius (spustelėkite dukart, norėdami atstatyti visus sluoksnius į numatytąją būseną)\npdfjs-layers-button-label = Sluoksniai\npdfjs-thumbs-button =\n    .title = Rodyti puslapių miniatiūras\npdfjs-thumbs-button-label = Miniatiūros\npdfjs-current-outline-item-button =\n    .title = Rasti dabartinį struktūros elementą\npdfjs-current-outline-item-button-label = Dabartinis struktūros elementas\npdfjs-findbar-button =\n    .title = Ieškoti dokumente\npdfjs-findbar-button-label = Rasti\npdfjs-additional-layers = Papildomi sluoksniai\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = { $page } puslapis\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = { $page } puslapio miniatiūra\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Rasti\n    .placeholder = Rasti dokumente…\npdfjs-find-previous-button =\n    .title = Ieškoti ankstesnio frazės egzemplioriaus\npdfjs-find-previous-button-label = Ankstesnis\npdfjs-find-next-button =\n    .title = Ieškoti tolesnio frazės egzemplioriaus\npdfjs-find-next-button-label = Tolesnis\npdfjs-find-highlight-checkbox = Viską paryškinti\npdfjs-find-match-case-checkbox-label = Skirti didžiąsias ir mažąsias raides\npdfjs-find-match-diacritics-checkbox-label = Skirti diakritinius ženklus\npdfjs-find-entire-word-checkbox-label = Ištisi žodžiai\npdfjs-find-reached-top = Pasiekus dokumento pradžią, paieška pratęsta nuo pabaigos\npdfjs-find-reached-bottom = Pasiekus dokumento pabaigą, paieška pratęsta nuo pradžios\npdfjs-find-not-found = Ieškoma frazė nerasta\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Priderinti prie lapo pločio\npdfjs-page-scale-fit = Pritaikyti prie lapo dydžio\npdfjs-page-scale-auto = Automatinis mastelis\npdfjs-page-scale-actual = Tikras dydis\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = { $page } puslapis\n\n## Loading indicator messages\n\npdfjs-loading-error = Įkeliant PDF failą įvyko klaida.\npdfjs-invalid-file-error = Tai nėra PDF failas arba jis yra sugadintas.\npdfjs-missing-file-error = PDF failas nerastas.\npdfjs-unexpected-response-error = Netikėtas serverio atsakas.\npdfjs-rendering-error = Atvaizduojant puslapį įvyko klaida.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [„{ $type }“ tipo anotacija]\n\n## Password\n\npdfjs-password-label = Įveskite slaptažodį šiam PDF failui atverti.\npdfjs-password-invalid = Slaptažodis neteisingas. Bandykite dar kartą.\npdfjs-password-ok-button = Gerai\npdfjs-password-cancel-button = Atsisakyti\npdfjs-web-fonts-disabled = Saityno šriftai išjungti – PDF faile esančių šriftų naudoti negalima.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/ltg/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Īprīkšejā lopa\npdfjs-previous-button-label = Īprīkšejā\npdfjs-next-button =\n    .title = Nuokomuo lopa\npdfjs-next-button-label = Nuokomuo\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Lopa\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = nu { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } nu { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Attuolynuot\npdfjs-zoom-out-button-label = Attuolynuot\npdfjs-zoom-in-button =\n    .title = Pītuvynuot\npdfjs-zoom-in-button-label = Pītuvynuot\npdfjs-zoom-select =\n    .title = Palelynuojums\npdfjs-presentation-mode-button =\n    .title = Puorslēgtīs iz Prezentacejis režymu\npdfjs-presentation-mode-button-label = Prezentacejis režyms\npdfjs-open-file-button =\n    .title = Attaiseit failu\npdfjs-open-file-button-label = Attaiseit\npdfjs-print-button =\n    .title = Drukuošona\npdfjs-print-button-label = Drukōt\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Reiki\npdfjs-tools-button-label = Reiki\npdfjs-first-page-button =\n    .title = Īt iz pyrmū lopu\npdfjs-first-page-button-label = Īt iz pyrmū lopu\npdfjs-last-page-button =\n    .title = Īt iz piedejū lopu\npdfjs-last-page-button-label = Īt iz piedejū lopu\npdfjs-page-rotate-cw-button =\n    .title = Pagrīzt pa pulksteni\npdfjs-page-rotate-cw-button-label = Pagrīzt pa pulksteni\npdfjs-page-rotate-ccw-button =\n    .title = Pagrīzt pret pulksteni\npdfjs-page-rotate-ccw-button-label = Pagrīzt pret pulksteni\npdfjs-cursor-text-select-tool-button =\n    .title = Aktivizēt teksta izvieles reiku\npdfjs-cursor-text-select-tool-button-label = Teksta izvieles reiks\npdfjs-cursor-hand-tool-button =\n    .title = Aktivēt rūkys reiku\npdfjs-cursor-hand-tool-button-label = Rūkys reiks\npdfjs-scroll-vertical-button =\n    .title = Izmontōt vertikalū ritinōšonu\npdfjs-scroll-vertical-button-label = Vertikalō ritinōšona\npdfjs-scroll-horizontal-button =\n    .title = Izmontōt horizontalū ritinōšonu\npdfjs-scroll-horizontal-button-label = Horizontalō ritinōšona\npdfjs-scroll-wrapped-button =\n    .title = Izmontōt mārūgojamū ritinōšonu\npdfjs-scroll-wrapped-button-label = Mārūgojamō ritinōšona\npdfjs-spread-none-button =\n    .title = Naizmontōt lopu atvāruma režimu\npdfjs-spread-none-button-label = Bez atvārumim\npdfjs-spread-odd-button =\n    .title = Izmontōt lopu atvārumus sōkut nu napōra numeru lopom\npdfjs-spread-odd-button-label = Napōra lopys pa kreisi\npdfjs-spread-even-button =\n    .title = Izmontōt lopu atvārumus sōkut nu pōra numeru lopom\npdfjs-spread-even-button-label = Pōra lopys pa kreisi\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Dokumenta īstatiejumi…\npdfjs-document-properties-button-label = Dokumenta īstatiejumi…\npdfjs-document-properties-file-name = Faila nūsaukums:\npdfjs-document-properties-file-size = Faila izmārs:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } biti)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } biti)\npdfjs-document-properties-title = Nūsaukums:\npdfjs-document-properties-author = Autors:\npdfjs-document-properties-subject = Tema:\npdfjs-document-properties-keywords = Atslāgi vuordi:\npdfjs-document-properties-creation-date = Izveides datums:\npdfjs-document-properties-modification-date = lobuošonys datums:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Radeituojs:\npdfjs-document-properties-producer = PDF producents:\npdfjs-document-properties-version = PDF verseja:\npdfjs-document-properties-page-count = Lopu skaits:\npdfjs-document-properties-page-size = Lopas izmārs:\npdfjs-document-properties-page-size-unit-inches = collas\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = portreta orientaceja\npdfjs-document-properties-page-size-orientation-landscape = ainovys orientaceja\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Fast Web View:\npdfjs-document-properties-linearized-yes = Jā\npdfjs-document-properties-linearized-no = Nā\npdfjs-document-properties-close-button = Aiztaiseit\n\n## Print\n\npdfjs-print-progress-message = Preparing document for printing…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Atceļt\npdfjs-printing-not-supported = Uzmaneibu: Drukuošona nu itei puorlūka dorbojās tikai daleji.\npdfjs-printing-not-ready = Uzmaneibu: PDF nav pilneibā īluodeits drukuošonai.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Puorslēgt suonu jūslu\npdfjs-toggle-sidebar-button-label = Puorslēgt suonu jūslu\npdfjs-document-outline-button =\n    .title = Show Document Outline (double-click to expand/collapse all items)\npdfjs-document-outline-button-label = Dokumenta saturs\npdfjs-attachments-button =\n    .title = Show Attachments\npdfjs-attachments-button-label = Attachments\npdfjs-thumbs-button =\n    .title = Paruodeit seiktālus\npdfjs-thumbs-button-label = Seiktāli\npdfjs-findbar-button =\n    .title = Mekleit dokumentā\npdfjs-findbar-button-label = Mekleit\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Lopa { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Lopys { $page } seiktāls\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Mekleit\n    .placeholder = Mekleit dokumentā…\npdfjs-find-previous-button =\n    .title = Atrast īprīkšejū\npdfjs-find-previous-button-label = Īprīkšejā\npdfjs-find-next-button =\n    .title = Atrast nuokamū\npdfjs-find-next-button-label = Nuokomuo\npdfjs-find-highlight-checkbox = Īkruosuot vysys\npdfjs-find-match-case-checkbox-label = Lelū, mozū burtu jiuteigs\npdfjs-find-reached-top = Sasnīgts dokumenta suokums, turpynojom nu beigom\npdfjs-find-reached-bottom = Sasnīgtys dokumenta beigys, turpynojom nu suokuma\npdfjs-find-not-found = Frāze nav atrosta\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Lopys plotumā\npdfjs-page-scale-fit = Ītylpynūt lopu\npdfjs-page-scale-auto = Automatiskais izmārs\npdfjs-page-scale-actual = Patīsais izmārs\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = Īluodejūt PDF nūtyka klaida.\npdfjs-invalid-file-error = Nadereigs voi būjuots PDF fails.\npdfjs-missing-file-error = PDF fails nav atrosts.\npdfjs-unexpected-response-error = Unexpected server response.\npdfjs-rendering-error = Attālojūt lopu rodās klaida\n\n## Annotations\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Annotation]\n\n## Password\n\npdfjs-password-label = Īvodit paroli, kab attaiseitu PDF failu.\npdfjs-password-invalid = Napareiza parole, raugit vēļreiz.\npdfjs-password-ok-button = Labi\npdfjs-password-cancel-button = Atceļt\npdfjs-web-fonts-disabled = Šķārsteikla fonti nav aktivizāti: Navar īgult PDF fontus.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/lv/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Iepriekšējā lapa\npdfjs-previous-button-label = Iepriekšējā\npdfjs-next-button =\n    .title = Nākamā lapa\npdfjs-next-button-label = Nākamā\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Lapa\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = no { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } no { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Attālināt\npdfjs-zoom-out-button-label = Attālināt\npdfjs-zoom-in-button =\n    .title = Pietuvināt\npdfjs-zoom-in-button-label = Pietuvināt\npdfjs-zoom-select =\n    .title = Palielinājums\npdfjs-presentation-mode-button =\n    .title = Pārslēgties uz Prezentācijas režīmu\npdfjs-presentation-mode-button-label = Prezentācijas režīms\npdfjs-open-file-button =\n    .title = Atvērt failu\npdfjs-open-file-button-label = Atvērt\npdfjs-print-button =\n    .title = Drukāšana\npdfjs-print-button-label = Drukāt\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Rīki\npdfjs-tools-button-label = Rīki\npdfjs-first-page-button =\n    .title = Iet uz pirmo lapu\npdfjs-first-page-button-label = Iet uz pirmo lapu\npdfjs-last-page-button =\n    .title = Iet uz pēdējo lapu\npdfjs-last-page-button-label = Iet uz pēdējo lapu\npdfjs-page-rotate-cw-button =\n    .title = Pagriezt pa pulksteni\npdfjs-page-rotate-cw-button-label = Pagriezt pa pulksteni\npdfjs-page-rotate-ccw-button =\n    .title = Pagriezt pret pulksteni\npdfjs-page-rotate-ccw-button-label = Pagriezt pret pulksteni\npdfjs-cursor-text-select-tool-button =\n    .title = Aktivizēt teksta izvēles rīku\npdfjs-cursor-text-select-tool-button-label = Teksta izvēles rīks\npdfjs-cursor-hand-tool-button =\n    .title = Aktivēt rokas rīku\npdfjs-cursor-hand-tool-button-label = Rokas rīks\npdfjs-scroll-vertical-button =\n    .title = Izmantot vertikālo ritināšanu\npdfjs-scroll-vertical-button-label = Vertikālā ritināšana\npdfjs-scroll-horizontal-button =\n    .title = Izmantot horizontālo ritināšanu\npdfjs-scroll-horizontal-button-label = Horizontālā ritināšana\npdfjs-scroll-wrapped-button =\n    .title = Izmantot apkļauto ritināšanu\npdfjs-scroll-wrapped-button-label = Apkļautā ritināšana\npdfjs-spread-none-button =\n    .title = Nepievienoties lapu izpletumiem\npdfjs-spread-none-button-label = Neizmantot izpletumus\npdfjs-spread-odd-button =\n    .title = Izmantot lapu izpletumus sākot ar nepāra numuru lapām\npdfjs-spread-odd-button-label = Nepāra izpletumi\npdfjs-spread-even-button =\n    .title = Izmantot lapu izpletumus sākot ar pāra numuru lapām\npdfjs-spread-even-button-label = Pāra izpletumi\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Dokumenta iestatījumi…\npdfjs-document-properties-button-label = Dokumenta iestatījumi…\npdfjs-document-properties-file-name = Faila nosaukums:\npdfjs-document-properties-file-size = Faila izmērs:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } biti)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } biti)\npdfjs-document-properties-title = Nosaukums:\npdfjs-document-properties-author = Autors:\npdfjs-document-properties-subject = Tēma:\npdfjs-document-properties-keywords = Atslēgas vārdi:\npdfjs-document-properties-creation-date = Izveides datums:\npdfjs-document-properties-modification-date = LAbošanas datums:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Radītājs:\npdfjs-document-properties-producer = PDF producents:\npdfjs-document-properties-version = PDF versija:\npdfjs-document-properties-page-count = Lapu skaits:\npdfjs-document-properties-page-size = Papīra izmērs:\npdfjs-document-properties-page-size-unit-inches = collas\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = portretorientācija\npdfjs-document-properties-page-size-orientation-landscape = ainavorientācija\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Vēstule\npdfjs-document-properties-page-size-name-legal = Juridiskie teksti\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Ātrā tīmekļa skats:\npdfjs-document-properties-linearized-yes = Jā\npdfjs-document-properties-linearized-no = Nē\npdfjs-document-properties-close-button = Aizvērt\n\n## Print\n\npdfjs-print-progress-message = Gatavo dokumentu drukāšanai...\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Atcelt\npdfjs-printing-not-supported = Uzmanību: Drukāšana no šī pārlūka darbojas tikai daļēji.\npdfjs-printing-not-ready = Uzmanību: PDF nav pilnībā ielādēts drukāšanai.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Pārslēgt sānu joslu\npdfjs-toggle-sidebar-button-label = Pārslēgt sānu joslu\npdfjs-document-outline-button =\n    .title = Rādīt dokumenta struktūru (veiciet dubultklikšķi lai izvērstu/sakļautu visus vienumus)\npdfjs-document-outline-button-label = Dokumenta saturs\npdfjs-attachments-button =\n    .title = Rādīt pielikumus\npdfjs-attachments-button-label = Pielikumi\npdfjs-thumbs-button =\n    .title = Parādīt sīktēlus\npdfjs-thumbs-button-label = Sīktēli\npdfjs-findbar-button =\n    .title = Meklēt dokumentā\npdfjs-findbar-button-label = Meklēt\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Lapa { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Lapas { $page } sīktēls\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Meklēt\n    .placeholder = Meklēt dokumentā…\npdfjs-find-previous-button =\n    .title = Atrast iepriekšējo\npdfjs-find-previous-button-label = Iepriekšējā\npdfjs-find-next-button =\n    .title = Atrast nākamo\npdfjs-find-next-button-label = Nākamā\npdfjs-find-highlight-checkbox = Iekrāsot visas\npdfjs-find-match-case-checkbox-label = Lielo, mazo burtu jutīgs\npdfjs-find-entire-word-checkbox-label = Veselus vārdus\npdfjs-find-reached-top = Sasniegts dokumenta sākums, turpinām no beigām\npdfjs-find-reached-bottom = Sasniegtas dokumenta beigas, turpinām no sākuma\npdfjs-find-not-found = Frāze nav atrasta\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Lapas platumā\npdfjs-page-scale-fit = Ietilpinot lapu\npdfjs-page-scale-auto = Automātiskais izmērs\npdfjs-page-scale-actual = Patiesais izmērs\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = Ielādējot PDF notika kļūda.\npdfjs-invalid-file-error = Nederīgs vai bojāts PDF fails.\npdfjs-missing-file-error = PDF fails nav atrasts.\npdfjs-unexpected-response-error = Negaidīa servera atbilde.\npdfjs-rendering-error = Attēlojot lapu radās kļūda\n\n## Annotations\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } anotācija]\n\n## Password\n\npdfjs-password-label = Ievadiet paroli, lai atvērtu PDF failu.\npdfjs-password-invalid = Nepareiza parole, mēģiniet vēlreiz.\npdfjs-password-ok-button = Labi\npdfjs-password-cancel-button = Atcelt\npdfjs-web-fonts-disabled = Tīmekļa fonti nav aktivizēti: Nevar iegult PDF fontus.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/meh/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Página yata\npdfjs-zoom-select =\n    .title = Nasa´a ka´nu/Nasa´a luli\npdfjs-open-file-button-label = Síne\n\n##  Secondary toolbar and context menu\n\n\n## Document properties dialog\n\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\npdfjs-document-properties-linearized-yes = Kuvi\npdfjs-document-properties-close-button = Nakasɨ\n\n## Print\n\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Nkuvi-ka\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-findbar-button-label = Nánuku\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n\n## Find panel button title and messages\n\n\n## Predefined zoom values\n\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n\n## Password\n\npdfjs-password-cancel-button = Nkuvi-ka\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/mk/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Претходна страница\npdfjs-previous-button-label = Претходна\npdfjs-next-button =\n    .title = Следна страница\npdfjs-next-button-label = Следна\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Страница\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = од { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } од { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Намалување\npdfjs-zoom-out-button-label = Намали\npdfjs-zoom-in-button =\n    .title = Зголемување\npdfjs-zoom-in-button-label = Зголеми\npdfjs-zoom-select =\n    .title = Променување на големина\npdfjs-presentation-mode-button =\n    .title = Премини во презентациски режим\npdfjs-presentation-mode-button-label = Презентациски режим\npdfjs-open-file-button =\n    .title = Отворање датотека\npdfjs-open-file-button-label = Отвори\npdfjs-print-button =\n    .title = Печатење\npdfjs-print-button-label = Печати\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Алатки\npdfjs-tools-button-label = Алатки\npdfjs-first-page-button =\n    .title = Оди до првата страница\npdfjs-first-page-button-label = Оди до првата страница\npdfjs-last-page-button =\n    .title = Оди до последната страница\npdfjs-last-page-button-label = Оди до последната страница\npdfjs-page-rotate-cw-button =\n    .title = Ротирај по стрелките на часовникот\npdfjs-page-rotate-cw-button-label = Ротирај по стрелките на часовникот\npdfjs-page-rotate-ccw-button =\n    .title = Ротирај спротивно од стрелките на часовникот\npdfjs-page-rotate-ccw-button-label = Ротирај спротивно од стрелките на часовникот\npdfjs-cursor-text-select-tool-button =\n    .title = Овозможи алатка за избор на текст\npdfjs-cursor-text-select-tool-button-label = Алатка за избор на текст\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Својства на документот…\npdfjs-document-properties-button-label = Својства на документот…\npdfjs-document-properties-file-name = Име на датотека:\npdfjs-document-properties-file-size = Големина на датотеката:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } КБ ({ $size_b } бајти)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } МБ ({ $size_b } бајти)\npdfjs-document-properties-title = Наслов:\npdfjs-document-properties-author = Автор:\npdfjs-document-properties-subject = Тема:\npdfjs-document-properties-keywords = Клучни зборови:\npdfjs-document-properties-creation-date = Датум на создавање:\npdfjs-document-properties-modification-date = Датум на промена:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Креатор:\npdfjs-document-properties-version = Верзија на PDF:\npdfjs-document-properties-page-count = Број на страници:\npdfjs-document-properties-page-size = Големина на страница:\npdfjs-document-properties-page-size-unit-inches = инч\npdfjs-document-properties-page-size-unit-millimeters = мм\npdfjs-document-properties-page-size-orientation-portrait = портрет\npdfjs-document-properties-page-size-orientation-landscape = пејзаж\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Писмо\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\npdfjs-document-properties-linearized-yes = Да\npdfjs-document-properties-linearized-no = Не\npdfjs-document-properties-close-button = Затвори\n\n## Print\n\npdfjs-print-progress-message = Документ се подготвува за печатење…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Откажи\npdfjs-printing-not-supported = Предупредување: Печатењето не е целосно поддржано во овој прелистувач.\npdfjs-printing-not-ready = Предупредување: PDF документот не е целосно вчитан за печатење.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Вклучи странична лента\npdfjs-toggle-sidebar-button-label = Вклучи странична лента\npdfjs-document-outline-button-label = Содржина на документот\npdfjs-attachments-button =\n    .title = Прикажи додатоци\npdfjs-thumbs-button =\n    .title = Прикажување на икони\npdfjs-thumbs-button-label = Икони\npdfjs-findbar-button =\n    .title = Најди во документот\npdfjs-findbar-button-label = Најди\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Страница { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Икона од страница { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Пронајди\n    .placeholder = Пронајди во документот…\npdfjs-find-previous-button =\n    .title = Најди ја предходната појава на фразата\npdfjs-find-previous-button-label = Претходно\npdfjs-find-next-button =\n    .title = Најди ја следната појава на фразата\npdfjs-find-next-button-label = Следно\npdfjs-find-highlight-checkbox = Означи сѐ\npdfjs-find-match-case-checkbox-label = Токму така\npdfjs-find-entire-word-checkbox-label = Цели зборови\npdfjs-find-reached-top = Барањето стигна до почетокот на документот и почнува од крајот\npdfjs-find-reached-bottom = Барањето стигна до крајот на документот и почнува од почеток\npdfjs-find-not-found = Фразата не е пронајдена\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Ширина на страница\npdfjs-page-scale-fit = Цела страница\npdfjs-page-scale-auto = Автоматска големина\npdfjs-page-scale-actual = Вистинска големина\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = Настана грешка при вчитувањето на PDF-от.\npdfjs-invalid-file-error = Невалидна или корумпирана PDF датотека.\npdfjs-missing-file-error = Недостасува PDF документ.\npdfjs-unexpected-response-error = Неочекуван одговор од серверот.\npdfjs-rendering-error = Настана грешка при прикажувањето на страницата.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n\n## Password\n\npdfjs-password-label = Внесете ја лозинката за да ја отворите оваа датотека.\npdfjs-password-invalid = Невалидна лозинка. Обидете се повторно.\npdfjs-password-ok-button = Во ред\npdfjs-password-cancel-button = Откажи\npdfjs-web-fonts-disabled = Интернет фонтовите се оневозможени: не може да се користат вградените PDF фонтови.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/mr/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = मागील पृष्ठ\npdfjs-previous-button-label = मागील\npdfjs-next-button =\n    .title = पुढील पृष्ठ\npdfjs-next-button-label = पुढील\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = पृष्ठ\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = { $pagesCount }पैकी\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pagesCount } पैकी { $pageNumber })\npdfjs-zoom-out-button =\n    .title = छोटे करा\npdfjs-zoom-out-button-label = छोटे करा\npdfjs-zoom-in-button =\n    .title = मोठे करा\npdfjs-zoom-in-button-label = मोठे करा\npdfjs-zoom-select =\n    .title = लहान किंवा मोठे करा\npdfjs-presentation-mode-button =\n    .title = प्रस्तुतिकरण मोडचा वापर करा\npdfjs-presentation-mode-button-label = प्रस्तुतिकरण मोड\npdfjs-open-file-button =\n    .title = फाइल उघडा\npdfjs-open-file-button-label = उघडा\npdfjs-print-button =\n    .title = छपाई करा\npdfjs-print-button-label = छपाई करा\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = साधने\npdfjs-tools-button-label = साधने\npdfjs-first-page-button =\n    .title = पहिल्या पृष्ठावर जा\npdfjs-first-page-button-label = पहिल्या पृष्ठावर जा\npdfjs-last-page-button =\n    .title = शेवटच्या पृष्ठावर जा\npdfjs-last-page-button-label = शेवटच्या पृष्ठावर जा\npdfjs-page-rotate-cw-button =\n    .title = घड्याळाच्या काट्याच्या दिशेने फिरवा\npdfjs-page-rotate-cw-button-label = घड्याळाच्या काट्याच्या दिशेने फिरवा\npdfjs-page-rotate-ccw-button =\n    .title = घड्याळाच्या काट्याच्या उलट दिशेने फिरवा\npdfjs-page-rotate-ccw-button-label = घड्याळाच्या काट्याच्या उलट दिशेने फिरवा\npdfjs-cursor-text-select-tool-button =\n    .title = मजकूर निवड साधन कार्यान्वयीत करा\npdfjs-cursor-text-select-tool-button-label = मजकूर निवड साधन\npdfjs-cursor-hand-tool-button =\n    .title = हात साधन कार्यान्वित करा\npdfjs-cursor-hand-tool-button-label = हस्त साधन\npdfjs-scroll-vertical-button =\n    .title = अनुलंब स्क्रोलिंग वापरा\npdfjs-scroll-vertical-button-label = अनुलंब स्क्रोलिंग\npdfjs-scroll-horizontal-button =\n    .title = क्षैतिज स्क्रोलिंग वापरा\npdfjs-scroll-horizontal-button-label = क्षैतिज स्क्रोलिंग\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = दस्तऐवज गुणधर्म…\npdfjs-document-properties-button-label = दस्तऐवज गुणधर्म…\npdfjs-document-properties-file-name = फाइलचे नाव:\npdfjs-document-properties-file-size = फाइल आकार:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } बाइट्स)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } बाइट्स)\npdfjs-document-properties-title = शिर्षक:\npdfjs-document-properties-author = लेखक:\npdfjs-document-properties-subject = विषय:\npdfjs-document-properties-keywords = मुख्यशब्द:\npdfjs-document-properties-creation-date = निर्माण दिनांक:\npdfjs-document-properties-modification-date = दुरूस्ती दिनांक:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = निर्माता:\npdfjs-document-properties-producer = PDF निर्माता:\npdfjs-document-properties-version = PDF आवृत्ती:\npdfjs-document-properties-page-count = पृष्ठ संख्या:\npdfjs-document-properties-page-size = पृष्ठ आकार:\npdfjs-document-properties-page-size-unit-inches = इंच\npdfjs-document-properties-page-size-unit-millimeters = मीमी\npdfjs-document-properties-page-size-orientation-portrait = उभी मांडणी\npdfjs-document-properties-page-size-orientation-landscape = आडवे\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = जलद वेब दृष्य:\npdfjs-document-properties-linearized-yes = हो\npdfjs-document-properties-linearized-no = नाही\npdfjs-document-properties-close-button = बंद करा\n\n## Print\n\npdfjs-print-progress-message = छपाई करीता पृष्ठ तयार करीत आहे…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = रद्द करा\npdfjs-printing-not-supported = सावधानता: या ब्राउझरतर्फे छपाइ पूर्णपणे समर्थीत नाही.\npdfjs-printing-not-ready = सावधानता: छपाईकरिता PDF पूर्णतया लोड झाले नाही.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = बाजूचीपट्टी टॉगल करा\npdfjs-toggle-sidebar-button-label = बाजूचीपट्टी टॉगल करा\npdfjs-document-outline-button =\n    .title = दस्तऐवज बाह्यरेखा दर्शवा (विस्तृत करण्यासाठी दोनवेळा क्लिक करा /सर्व घटक दाखवा)\npdfjs-document-outline-button-label = दस्तऐवज रूपरेषा\npdfjs-attachments-button =\n    .title = जोडपत्र दाखवा\npdfjs-attachments-button-label = जोडपत्र\npdfjs-thumbs-button =\n    .title = थंबनेल्स् दाखवा\npdfjs-thumbs-button-label = थंबनेल्स्\npdfjs-findbar-button =\n    .title = दस्तऐवजात शोधा\npdfjs-findbar-button-label = शोधा\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = पृष्ठ { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = पृष्ठाचे थंबनेल { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = शोधा\n    .placeholder = दस्तऐवजात शोधा…\npdfjs-find-previous-button =\n    .title = वाकप्रयोगची मागील घटना शोधा\npdfjs-find-previous-button-label = मागील\npdfjs-find-next-button =\n    .title = वाकप्रयोगची पुढील घटना शोधा\npdfjs-find-next-button-label = पुढील\npdfjs-find-highlight-checkbox = सर्व ठळक करा\npdfjs-find-match-case-checkbox-label = आकार जुळवा\npdfjs-find-entire-word-checkbox-label = संपूर्ण शब्द\npdfjs-find-reached-top = दस्तऐवजाच्या शीर्षकास पोहचले, तळपासून पुढे\npdfjs-find-reached-bottom = दस्तऐवजाच्या तळाला पोहचले, शीर्षकापासून पुढे\npdfjs-find-not-found = वाकप्रयोग आढळले नाही\n\n## Predefined zoom values\n\npdfjs-page-scale-width = पृष्ठाची रूंदी\npdfjs-page-scale-fit = पृष्ठ बसवा\npdfjs-page-scale-auto = स्वयं लाहन किंवा मोठे करणे\npdfjs-page-scale-actual = प्रत्यक्ष आकार\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = PDF लोड करतेवेळी त्रुटी आढळली.\npdfjs-invalid-file-error = अवैध किंवा दोषीत PDF फाइल.\npdfjs-missing-file-error = न आढळणारी PDF फाइल.\npdfjs-unexpected-response-error = अनपेक्षित सर्व्हर प्रतिसाद.\npdfjs-rendering-error = पृष्ठ दाखवतेवेळी त्रुटी आढळली.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } टिपण्णी]\n\n## Password\n\npdfjs-password-label = ही PDF फाइल उघडण्याकरिता पासवर्ड द्या.\npdfjs-password-invalid = अवैध पासवर्ड. कृपया पुन्हा प्रयत्न करा.\npdfjs-password-ok-button = ठीक आहे\npdfjs-password-cancel-button = रद्द करा\npdfjs-web-fonts-disabled = वेब टंक असमर्थीत आहेत: एम्बेडेड PDF टंक वापर अशक्य.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/ms/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Halaman Dahulu\npdfjs-previous-button-label = Dahulu\npdfjs-next-button =\n    .title = Halaman Berikut\npdfjs-next-button-label = Berikut\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Halaman\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = daripada { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } daripada { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Zum Keluar\npdfjs-zoom-out-button-label = Zum Keluar\npdfjs-zoom-in-button =\n    .title = Zum Masuk\npdfjs-zoom-in-button-label = Zum Masuk\npdfjs-zoom-select =\n    .title = Zum\npdfjs-presentation-mode-button =\n    .title = Tukar ke Mod Persembahan\npdfjs-presentation-mode-button-label = Mod Persembahan\npdfjs-open-file-button =\n    .title = Buka Fail\npdfjs-open-file-button-label = Buka\npdfjs-print-button =\n    .title = Cetak\npdfjs-print-button-label = Cetak\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Alatan\npdfjs-tools-button-label = Alatan\npdfjs-first-page-button =\n    .title = Pergi ke Halaman Pertama\npdfjs-first-page-button-label = Pergi ke Halaman Pertama\npdfjs-last-page-button =\n    .title = Pergi ke Halaman Terakhir\npdfjs-last-page-button-label = Pergi ke Halaman Terakhir\npdfjs-page-rotate-cw-button =\n    .title = Berputar ikut arah Jam\npdfjs-page-rotate-cw-button-label = Berputar ikut arah Jam\npdfjs-page-rotate-ccw-button =\n    .title = Pusing berlawan arah jam\npdfjs-page-rotate-ccw-button-label = Pusing berlawan arah jam\npdfjs-cursor-text-select-tool-button =\n    .title = Dayakan Alatan Pilihan Teks\npdfjs-cursor-text-select-tool-button-label = Alatan Pilihan Teks\npdfjs-cursor-hand-tool-button =\n    .title = Dayakan Alatan Tangan\npdfjs-cursor-hand-tool-button-label = Alatan Tangan\npdfjs-scroll-vertical-button =\n    .title = Guna Skrol Menegak\npdfjs-scroll-vertical-button-label = Skrol Menegak\npdfjs-scroll-horizontal-button =\n    .title = Guna Skrol Mengufuk\npdfjs-scroll-horizontal-button-label = Skrol Mengufuk\npdfjs-scroll-wrapped-button =\n    .title = Guna Skrol Berbalut\npdfjs-scroll-wrapped-button-label = Skrol Berbalut\npdfjs-spread-none-button =\n    .title = Jangan hubungkan hamparan halaman\npdfjs-spread-none-button-label = Tanpa Hamparan\npdfjs-spread-odd-button =\n    .title = Hubungkan hamparan halaman dengan halaman nombor ganjil\npdfjs-spread-odd-button-label = Hamparan Ganjil\npdfjs-spread-even-button =\n    .title = Hubungkan hamparan halaman dengan halaman nombor genap\npdfjs-spread-even-button-label = Hamparan Seimbang\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Sifat Dokumen…\npdfjs-document-properties-button-label = Sifat Dokumen…\npdfjs-document-properties-file-name = Nama fail:\npdfjs-document-properties-file-size = Saiz fail:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bait)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bait)\npdfjs-document-properties-title = Tajuk:\npdfjs-document-properties-author = Pengarang:\npdfjs-document-properties-subject = Subjek:\npdfjs-document-properties-keywords = Kata kunci:\npdfjs-document-properties-creation-date = Masa Dicipta:\npdfjs-document-properties-modification-date = Tarikh Ubahsuai:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Pencipta:\npdfjs-document-properties-producer = Pengeluar PDF:\npdfjs-document-properties-version = Versi PDF:\npdfjs-document-properties-page-count = Kiraan Laman:\npdfjs-document-properties-page-size = Saiz Halaman:\npdfjs-document-properties-page-size-unit-inches = dalam\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = potret\npdfjs-document-properties-page-size-orientation-landscape = landskap\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Paparan Web Pantas:\npdfjs-document-properties-linearized-yes = Ya\npdfjs-document-properties-linearized-no = Tidak\npdfjs-document-properties-close-button = Tutup\n\n## Print\n\npdfjs-print-progress-message = Menyediakan dokumen untuk dicetak…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Batal\npdfjs-printing-not-supported = Amaran: Cetakan ini tidak sepenuhnya disokong oleh pelayar ini.\npdfjs-printing-not-ready = Amaran: PDF tidak sepenuhnya dimuatkan untuk dicetak.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Togol Bar Sisi\npdfjs-toggle-sidebar-button-label = Togol Bar Sisi\npdfjs-document-outline-button =\n    .title = Papar Rangka Dokumen (klik-dua-kali untuk kembangkan/kolaps semua item)\npdfjs-document-outline-button-label = Rangka Dokumen\npdfjs-attachments-button =\n    .title = Papar Lampiran\npdfjs-attachments-button-label = Lampiran\npdfjs-thumbs-button =\n    .title = Papar Thumbnails\npdfjs-thumbs-button-label = Imej kecil\npdfjs-findbar-button =\n    .title = Cari didalam Dokumen\npdfjs-findbar-button-label = Cari\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Halaman { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Halaman Imej kecil { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Cari\n    .placeholder = Cari dalam dokumen…\npdfjs-find-previous-button =\n    .title = Cari teks frasa berkenaan yang terdahulu\npdfjs-find-previous-button-label = Dahulu\npdfjs-find-next-button =\n    .title = Cari teks frasa berkenaan yang berikut\npdfjs-find-next-button-label = Berikut\npdfjs-find-highlight-checkbox = Serlahkan semua\npdfjs-find-match-case-checkbox-label = Huruf sepadan\npdfjs-find-entire-word-checkbox-label = Seluruh perkataan\npdfjs-find-reached-top = Mencapai teratas daripada dokumen, sambungan daripada bawah\npdfjs-find-reached-bottom = Mencapai terakhir daripada dokumen, sambungan daripada atas\npdfjs-find-not-found = Frasa tidak ditemui\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Lebar Halaman\npdfjs-page-scale-fit = Muat Halaman\npdfjs-page-scale-auto = Zoom Automatik\npdfjs-page-scale-actual = Saiz Sebenar\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = Masalah berlaku semasa menuatkan sebuah PDF.\npdfjs-invalid-file-error = Tidak sah atau fail PDF rosak.\npdfjs-missing-file-error = Fail PDF Hilang.\npdfjs-unexpected-response-error = Respon pelayan yang tidak dijangka.\npdfjs-rendering-error = Ralat berlaku ketika memberikan halaman.\n\n## Annotations\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Anotasi]\n\n## Password\n\npdfjs-password-label = Masukan kata kunci untuk membuka fail PDF ini.\npdfjs-password-invalid = Kata laluan salah. Cuba lagi.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Batal\npdfjs-web-fonts-disabled = Fon web dinyahdayakan: tidak dapat menggunakan fon terbenam PDF.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/my/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = အရင် စာမျက်နှာ\npdfjs-previous-button-label = အရင်နေရာ\npdfjs-next-button =\n    .title = ရှေ့ စာမျက်နှာ\npdfjs-next-button-label = နောက်တခု\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = စာမျက်နှာ\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = { $pagesCount } ၏\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pagesCount } ၏ { $pageNumber })\npdfjs-zoom-out-button =\n    .title = ချုံ့ပါ\npdfjs-zoom-out-button-label = ချုံ့ပါ\npdfjs-zoom-in-button =\n    .title = ချဲ့ပါ\npdfjs-zoom-in-button-label = ချဲ့ပါ\npdfjs-zoom-select =\n    .title = ချုံ့/ချဲ့ပါ\npdfjs-presentation-mode-button =\n    .title = ဆွေးနွေးတင်ပြစနစ်သို့ ကူးပြောင်းပါ\npdfjs-presentation-mode-button-label = ဆွေးနွေးတင်ပြစနစ်\npdfjs-open-file-button =\n    .title = ဖိုင်အားဖွင့်ပါ။\npdfjs-open-file-button-label = ဖွင့်ပါ\npdfjs-print-button =\n    .title = ပုံနှိုပ်ပါ\npdfjs-print-button-label = ပုံနှိုပ်ပါ\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = ကိရိယာများ\npdfjs-tools-button-label = ကိရိယာများ\npdfjs-first-page-button =\n    .title = ပထမ စာမျက်နှာသို့\npdfjs-first-page-button-label = ပထမ စာမျက်နှာသို့\npdfjs-last-page-button =\n    .title = နောက်ဆုံး စာမျက်နှာသို့\npdfjs-last-page-button-label = နောက်ဆုံး စာမျက်နှာသို့\npdfjs-page-rotate-cw-button =\n    .title = နာရီလက်တံ အတိုင်း\npdfjs-page-rotate-cw-button-label = နာရီလက်တံ အတိုင်း\npdfjs-page-rotate-ccw-button =\n    .title = နာရီလက်တံ ပြောင်းပြန်\npdfjs-page-rotate-ccw-button-label = နာရီလက်တံ ပြောင်းပြန်\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = မှတ်တမ်းမှတ်ရာ ဂုဏ်သတ္တိများ\npdfjs-document-properties-button-label = မှတ်တမ်းမှတ်ရာ ဂုဏ်သတ္တိများ\npdfjs-document-properties-file-name = ဖိုင် :\npdfjs-document-properties-file-size = ဖိုင်ဆိုဒ် :\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } ကီလိုဘိုတ် ({ $size_b }ဘိုတ်)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = ခေါင်းစဉ်‌ -\npdfjs-document-properties-author = ရေးသားသူ:\npdfjs-document-properties-subject = အကြောင်းအရာ:\npdfjs-document-properties-keywords = သော့ချက် စာလုံး:\npdfjs-document-properties-creation-date = ထုတ်လုပ်ရက်စွဲ:\npdfjs-document-properties-modification-date = ပြင်ဆင်ရက်စွဲ:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = ဖန်တီးသူ:\npdfjs-document-properties-producer = PDF ထုတ်လုပ်သူ:\npdfjs-document-properties-version = PDF ဗားရှင်း:\npdfjs-document-properties-page-count = စာမျက်နှာအရေအတွက်:\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\n\n##\n\npdfjs-document-properties-close-button = ပိတ်\n\n## Print\n\npdfjs-print-progress-message = Preparing document for printing…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = ပယ်​ဖျက်ပါ\npdfjs-printing-not-supported = သတိပေးချက်၊ပရင့်ထုတ်ခြင်းကိုဤဘယောက်ဆာသည် ပြည့်ဝစွာထောက်ပံ့မထားပါ ။\npdfjs-printing-not-ready = သတိပေးချက်: ယခု PDF ဖိုင်သည် ပုံနှိပ်ရန် မပြည့်စုံပါ\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = ဘေးတန်းဖွင့်ပိတ်\npdfjs-toggle-sidebar-button-label = ဖွင့်ပိတ် ဆလိုက်ဒါ\npdfjs-document-outline-button =\n    .title = စာတမ်းအကျဉ်းချုပ်ကို ပြပါ (စာရင်းအားလုံးကို ချုံ့/ချဲ့ရန် ကလစ်နှစ်ချက်နှိပ်ပါ)\npdfjs-document-outline-button-label = စာတမ်းအကျဉ်းချုပ်\npdfjs-attachments-button =\n    .title = တွဲချက်များ ပြပါ\npdfjs-attachments-button-label = တွဲထားချက်များ\npdfjs-thumbs-button =\n    .title = ပုံရိပ်ငယ်များကို ပြပါ\npdfjs-thumbs-button-label = ပုံရိပ်ငယ်များ\npdfjs-findbar-button =\n    .title = Find in Document\npdfjs-findbar-button-label = ရှာဖွေပါ\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = စာမျက်နှာ { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = စာမျက်နှာရဲ့ ပုံရိပ်ငယ် { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = ရှာဖွေပါ\n    .placeholder = စာတမ်းထဲတွင် ရှာဖွေရန်…\npdfjs-find-previous-button =\n    .title = စကားစုရဲ့ အရင် ​ဖြစ်ပွားမှုကို ရှာဖွေပါ\npdfjs-find-previous-button-label = နောက်သို့\npdfjs-find-next-button =\n    .title = စကားစုရဲ့ နောက်ထပ် ​ဖြစ်ပွားမှုကို ရှာဖွေပါ\npdfjs-find-next-button-label = ရှေ့သို့\npdfjs-find-highlight-checkbox = အားလုံးကို မျဉ်းသားပါ\npdfjs-find-match-case-checkbox-label = စာလုံး တိုက်ဆိုင်ပါ\npdfjs-find-reached-top = စာမျက်နှာထိပ် ရောက်နေပြီ၊ အဆုံးကနေ ပြန်စပါ\npdfjs-find-reached-bottom = စာမျက်နှာအဆုံး ရောက်နေပြီ၊ ထိပ်ကနေ ပြန်စပါ\npdfjs-find-not-found = စကားစု မတွေ့ရဘူး\n\n## Predefined zoom values\n\npdfjs-page-scale-width = စာမျက်နှာ အကျယ်\npdfjs-page-scale-fit = စာမျက်နှာ ကွက်တိ\npdfjs-page-scale-auto = အလိုအလျောက် ချုံ့ချဲ့\npdfjs-page-scale-actual = အမှန်တကယ်ရှိတဲ့ အရွယ်\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = PDF ဖိုင် ကိုဆွဲတင်နေချိန်မှာ အမှားတစ်ခုတွေ့ရပါတယ်။\npdfjs-invalid-file-error = မရသော သို့ ပျက်နေသော PDF ဖိုင်\npdfjs-missing-file-error = PDF ပျောက်ဆုံး\npdfjs-unexpected-response-error = မမျှော်လင့်ထားသော ဆာဗာမှ ပြန်ကြားချက်\npdfjs-rendering-error = စာမျက်နှာကို ပုံဖော်နေချိန်မှာ အမှားတစ်ခုတွေ့ရပါတယ်။\n\n## Annotations\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } အဓိပ္ပာယ်ဖွင့်ဆိုချက်]\n\n## Password\n\npdfjs-password-label = ယခု PDF ကို ဖွင့်ရန် စကားဝှက်ကို ရိုက်ပါ။\npdfjs-password-invalid = စာဝှက် မှားသည်။ ထပ်ကြိုးစားကြည့်ပါ။\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = ပယ်​ဖျက်ပါ\npdfjs-web-fonts-disabled = Web fonts are disabled: unable to use embedded PDF fonts.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/nb-NO/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Forrige side\npdfjs-previous-button-label = Forrige\npdfjs-next-button =\n    .title = Neste side\npdfjs-next-button-label = Neste\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Side\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = av { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } av { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Zoom ut\npdfjs-zoom-out-button-label = Zoom ut\npdfjs-zoom-in-button =\n    .title = Zoom inn\npdfjs-zoom-in-button-label = Zoom inn\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Bytt til presentasjonsmodus\npdfjs-presentation-mode-button-label = Presentasjonsmodus\npdfjs-open-file-button =\n    .title = Åpne fil\npdfjs-open-file-button-label = Åpne\npdfjs-print-button =\n    .title = Skriv ut\npdfjs-print-button-label = Skriv ut\npdfjs-save-button =\n    .title = Lagre\npdfjs-save-button-label = Lagre\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Last ned\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Last ned\npdfjs-bookmark-button =\n    .title = Gjeldende side (se URL fra gjeldende side)\npdfjs-bookmark-button-label = Gjeldende side\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Verktøy\npdfjs-tools-button-label = Verktøy\npdfjs-first-page-button =\n    .title = Gå til første side\npdfjs-first-page-button-label = Gå til første side\npdfjs-last-page-button =\n    .title = Gå til siste side\npdfjs-last-page-button-label = Gå til siste side\npdfjs-page-rotate-cw-button =\n    .title = Roter med klokken\npdfjs-page-rotate-cw-button-label = Roter med klokken\npdfjs-page-rotate-ccw-button =\n    .title = Roter mot klokken\npdfjs-page-rotate-ccw-button-label = Roter mot klokken\npdfjs-cursor-text-select-tool-button =\n    .title = Aktiver tekstmarkeringsverktøy\npdfjs-cursor-text-select-tool-button-label = Tekstmarkeringsverktøy\npdfjs-cursor-hand-tool-button =\n    .title = Aktiver handverktøy\npdfjs-cursor-hand-tool-button-label = Handverktøy\npdfjs-scroll-page-button =\n    .title = Bruk siderulling\npdfjs-scroll-page-button-label = Siderulling\npdfjs-scroll-vertical-button =\n    .title = Bruk vertikal rulling\npdfjs-scroll-vertical-button-label = Vertikal rulling\npdfjs-scroll-horizontal-button =\n    .title = Bruk horisontal rulling\npdfjs-scroll-horizontal-button-label = Horisontal rulling\npdfjs-scroll-wrapped-button =\n    .title = Bruk flersiderulling\npdfjs-scroll-wrapped-button-label = Flersiderulling\npdfjs-spread-none-button =\n    .title = Vis enkeltsider\npdfjs-spread-none-button-label = Enkeltsider\npdfjs-spread-odd-button =\n    .title = Vis oppslag med ulike sidenumre til venstre\npdfjs-spread-odd-button-label = Oppslag med forside\npdfjs-spread-even-button =\n    .title = Vis oppslag med like sidenumre til venstre\npdfjs-spread-even-button-label = Oppslag uten forside\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Dokumentegenskaper …\npdfjs-document-properties-button-label = Dokumentegenskaper …\npdfjs-document-properties-file-name = Filnavn:\npdfjs-document-properties-file-size = Filstørrelse:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Dokumentegenskaper …\npdfjs-document-properties-author = Forfatter:\npdfjs-document-properties-subject = Emne:\npdfjs-document-properties-keywords = Nøkkelord:\npdfjs-document-properties-creation-date = Opprettet dato:\npdfjs-document-properties-modification-date = Endret dato:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Opprettet av:\npdfjs-document-properties-producer = PDF-verktøy:\npdfjs-document-properties-version = PDF-versjon:\npdfjs-document-properties-page-count = Sideantall:\npdfjs-document-properties-page-size = Sidestørrelse:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = stående\npdfjs-document-properties-page-size-orientation-landscape = liggende\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Hurtig nettvisning:\npdfjs-document-properties-linearized-yes = Ja\npdfjs-document-properties-linearized-no = Nei\npdfjs-document-properties-close-button = Lukk\n\n## Print\n\npdfjs-print-progress-message = Forbereder dokument for utskrift …\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Avbryt\npdfjs-printing-not-supported = Advarsel: Utskrift er ikke fullstendig støttet av denne nettleseren.\npdfjs-printing-not-ready = Advarsel: PDF er ikke fullstendig innlastet for utskrift.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Slå av/på sidestolpe\npdfjs-toggle-sidebar-notification-button =\n    .title = Vis/gjem sidestolpe (dokumentet inneholder oversikt/vedlegg/lag)\npdfjs-toggle-sidebar-button-label = Slå av/på sidestolpe\npdfjs-document-outline-button =\n    .title = Vis dokumentdisposisjonen (dobbeltklikk for å utvide/skjule alle elementer)\npdfjs-document-outline-button-label = Dokumentdisposisjon\npdfjs-attachments-button =\n    .title = Vis vedlegg\npdfjs-attachments-button-label = Vedlegg\npdfjs-layers-button =\n    .title = Vis lag (dobbeltklikk for å tilbakestille alle lag til standardtilstand)\npdfjs-layers-button-label = Lag\npdfjs-thumbs-button =\n    .title = Vis miniatyrbilde\npdfjs-thumbs-button-label = Miniatyrbilde\npdfjs-current-outline-item-button =\n    .title = Finn gjeldende disposisjonselement\npdfjs-current-outline-item-button-label = Gjeldende disposisjonselement\npdfjs-findbar-button =\n    .title = Finn i dokumentet\npdfjs-findbar-button-label = Finn\npdfjs-additional-layers = Ytterligere lag\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Side { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatyrbilde av side { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Søk\n    .placeholder = Søk i dokument…\npdfjs-find-previous-button =\n    .title = Finn forrige forekomst av frasen\npdfjs-find-previous-button-label = Forrige\npdfjs-find-next-button =\n    .title = Finn neste forekomst av frasen\npdfjs-find-next-button-label = Neste\npdfjs-find-highlight-checkbox = Uthev alle\npdfjs-find-match-case-checkbox-label = Skill store/små bokstaver\npdfjs-find-match-diacritics-checkbox-label = Samsvar diakritiske tegn\npdfjs-find-entire-word-checkbox-label = Hele ord\npdfjs-find-reached-top = Nådde toppen av dokumentet, fortsetter fra bunnen\npdfjs-find-reached-bottom = Nådde bunnen av dokumentet, fortsetter fra toppen\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } av { $total } treff\n       *[other] { $current } av { $total } treff\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Mer enn { $limit } treff\n       *[other] Mer enn { $limit } treff\n    }\npdfjs-find-not-found = Fant ikke teksten\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Sidebredde\npdfjs-page-scale-fit = Tilpass til siden\npdfjs-page-scale-auto = Automatisk zoom\npdfjs-page-scale-actual = Virkelig størrelse\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale } %\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Side { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = En feil oppstod ved lasting av PDF.\npdfjs-invalid-file-error = Ugyldig eller skadet PDF-fil.\npdfjs-missing-file-error = Manglende PDF-fil.\npdfjs-unexpected-response-error = Uventet serverrespons.\npdfjs-rendering-error = En feil oppstod ved opptegning av siden.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } annotasjon]\n\n## Password\n\npdfjs-password-label = Skriv inn passordet for å åpne denne PDF-filen.\npdfjs-password-invalid = Ugyldig passord. Prøv igjen.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Avbryt\npdfjs-web-fonts-disabled = Web-fonter er avslått: Kan ikke bruke innbundne PDF-fonter.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Tekst\npdfjs-editor-free-text-button-label = Tekst\npdfjs-editor-ink-button =\n    .title = Tegn\npdfjs-editor-ink-button-label = Tegn\npdfjs-editor-stamp-button =\n    .title = Legg til eller rediger bilder\npdfjs-editor-stamp-button-label = Legg til eller rediger bilder\npdfjs-editor-highlight-button =\n    .title = Markere\npdfjs-editor-highlight-button-label = Markere\npdfjs-highlight-floating-button =\n    .title = Markere\npdfjs-highlight-floating-button1 =\n    .title = Markere\n    .aria-label = Markere\npdfjs-highlight-floating-button-label = Markere\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Fjern tegningen\npdfjs-editor-remove-freetext-button =\n    .title = Fjern tekst\npdfjs-editor-remove-stamp-button =\n    .title = Fjern bildet\npdfjs-editor-remove-highlight-button =\n    .title = Fjern utheving\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Farge\npdfjs-editor-free-text-size-input = Størrelse\npdfjs-editor-ink-color-input = Farge\npdfjs-editor-ink-thickness-input = Tykkelse\npdfjs-editor-ink-opacity-input = Ugjennomsiktighet\npdfjs-editor-stamp-add-image-button =\n    .title = Legg til bilde\npdfjs-editor-stamp-add-image-button-label = Legg til bilde\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Tykkelse\npdfjs-editor-free-highlight-thickness-title =\n    .title = Endre tykkelse når du markerer andre elementer enn tekst\npdfjs-free-text =\n    .aria-label = Tekstredigering\npdfjs-free-text-default-content = Begynn å skrive…\npdfjs-ink =\n    .aria-label = Tegneredigering\npdfjs-ink-canvas =\n    .aria-label = Brukerskapt bilde\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Alt-tekst\npdfjs-editor-alt-text-edit-button-label = Rediger alt-tekst tekst\npdfjs-editor-alt-text-dialog-label = Velg et alternativ\npdfjs-editor-alt-text-dialog-description = Alt-tekst (alternativ tekst) hjelper når folk ikke kan se bildet eller når det ikke lastes inn.\npdfjs-editor-alt-text-add-description-label = Legg til en beskrivelse\npdfjs-editor-alt-text-add-description-description = Gå etter 1-2 setninger som beskriver emnet, settingen eller handlingene.\npdfjs-editor-alt-text-mark-decorative-label = Merk som dekorativt\npdfjs-editor-alt-text-mark-decorative-description = Dette brukes til dekorative bilder, som kantlinjer eller vannmerker.\npdfjs-editor-alt-text-cancel-button = Avbryt\npdfjs-editor-alt-text-save-button = Lagre\npdfjs-editor-alt-text-decorative-tooltip = Merket som dekorativ\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = For eksempel, «En ung mann setter seg ved et bord for å spise et måltid»\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Øverste venstre hjørne – endre størrelse\npdfjs-editor-resizer-label-top-middle = Øverst i midten — endre størrelse\npdfjs-editor-resizer-label-top-right = Øverste høyre hjørne – endre størrelse\npdfjs-editor-resizer-label-middle-right = Midt til høyre – endre størrelse\npdfjs-editor-resizer-label-bottom-right = Nederste høyre hjørne – endre størrelse\npdfjs-editor-resizer-label-bottom-middle = Nederst i midten — endre størrelse\npdfjs-editor-resizer-label-bottom-left = Nederste venstre hjørne – endre størrelse\npdfjs-editor-resizer-label-middle-left = Midt til venstre — endre størrelse\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Uthevingsfarge\npdfjs-editor-colorpicker-button =\n    .title = Endre farge\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Fargevalg\npdfjs-editor-colorpicker-yellow =\n    .title = Gul\npdfjs-editor-colorpicker-green =\n    .title = Grønn\npdfjs-editor-colorpicker-blue =\n    .title = Blå\npdfjs-editor-colorpicker-pink =\n    .title = Rosa\npdfjs-editor-colorpicker-red =\n    .title = Rød\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Vis alle\npdfjs-editor-highlight-show-all-button =\n    .title = Vis alle\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/ne-NP/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = अघिल्लो पृष्ठ\npdfjs-previous-button-label = अघिल्लो\npdfjs-next-button =\n    .title = पछिल्लो पृष्ठ\npdfjs-next-button-label = पछिल्लो\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = पृष्ठ\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = { $pagesCount } मध्ये\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pagesCount } को { $pageNumber })\npdfjs-zoom-out-button =\n    .title = जुम घटाउनुहोस्\npdfjs-zoom-out-button-label = जुम घटाउनुहोस्\npdfjs-zoom-in-button =\n    .title = जुम बढाउनुहोस्\npdfjs-zoom-in-button-label = जुम बढाउनुहोस्\npdfjs-zoom-select =\n    .title = जुम गर्नुहोस्\npdfjs-presentation-mode-button =\n    .title = प्रस्तुति मोडमा जानुहोस्\npdfjs-presentation-mode-button-label = प्रस्तुति मोड\npdfjs-open-file-button =\n    .title = फाइल खोल्नुहोस्\npdfjs-open-file-button-label = खोल्नुहोस्\npdfjs-print-button =\n    .title = मुद्रण गर्नुहोस्\npdfjs-print-button-label = मुद्रण गर्नुहोस्\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = औजारहरू\npdfjs-tools-button-label = औजारहरू\npdfjs-first-page-button =\n    .title = पहिलो पृष्ठमा जानुहोस्\npdfjs-first-page-button-label = पहिलो पृष्ठमा जानुहोस्\npdfjs-last-page-button =\n    .title = पछिल्लो पृष्ठमा जानुहोस्\npdfjs-last-page-button-label = पछिल्लो पृष्ठमा जानुहोस्\npdfjs-page-rotate-cw-button =\n    .title = घडीको दिशामा घुमाउनुहोस्\npdfjs-page-rotate-cw-button-label = घडीको दिशामा घुमाउनुहोस्\npdfjs-page-rotate-ccw-button =\n    .title = घडीको विपरित दिशामा घुमाउनुहोस्\npdfjs-page-rotate-ccw-button-label = घडीको विपरित दिशामा घुमाउनुहोस्\npdfjs-cursor-text-select-tool-button =\n    .title = पाठ चयन उपकरण सक्षम गर्नुहोस्\npdfjs-cursor-text-select-tool-button-label = पाठ चयन उपकरण\npdfjs-cursor-hand-tool-button =\n    .title = हाते उपकरण सक्षम गर्नुहोस्\npdfjs-cursor-hand-tool-button-label = हाते उपकरण\npdfjs-scroll-vertical-button =\n    .title = ठाडो स्क्रोलिङ्ग प्रयोग गर्नुहोस्\npdfjs-scroll-vertical-button-label = ठाडो स्क्र्रोलिङ्ग\npdfjs-scroll-horizontal-button =\n    .title = तेर्सो स्क्रोलिङ्ग प्रयोग गर्नुहोस्\npdfjs-scroll-horizontal-button-label = तेर्सो स्क्रोलिङ्ग\npdfjs-scroll-wrapped-button =\n    .title = लिपि स्क्रोलिङ्ग प्रयोग गर्नुहोस्\npdfjs-scroll-wrapped-button-label = लिपि स्क्रोलिङ्ग\npdfjs-spread-none-button =\n    .title = पृष्ठ स्प्रेडमा सामेल हुनुहुन्न\npdfjs-spread-none-button-label = स्प्रेड छैन\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = कागजात विशेषताहरू...\npdfjs-document-properties-button-label = कागजात विशेषताहरू...\npdfjs-document-properties-file-name = फाइल नाम:\npdfjs-document-properties-file-size = फाइल आकार:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = शीर्षक:\npdfjs-document-properties-author = लेखक:\npdfjs-document-properties-subject = विषयः\npdfjs-document-properties-keywords = शब्दकुञ्जीः\npdfjs-document-properties-creation-date = सिर्जना गरिएको मिति:\npdfjs-document-properties-modification-date = परिमार्जित मिति:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = सर्जक:\npdfjs-document-properties-producer = PDF निर्माता:\npdfjs-document-properties-version = PDF संस्करण\npdfjs-document-properties-page-count = पृष्ठ गणना:\npdfjs-document-properties-page-size = पृष्ठ आकार:\npdfjs-document-properties-page-size-unit-inches = इन्च\npdfjs-document-properties-page-size-unit-millimeters = मि.मि.\npdfjs-document-properties-page-size-orientation-portrait = पोट्रेट\npdfjs-document-properties-page-size-orientation-landscape = परिदृश्य\npdfjs-document-properties-page-size-name-letter = अक्षर\npdfjs-document-properties-page-size-name-legal = कानूनी\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\n\n##\n\npdfjs-document-properties-linearized-yes = हो\npdfjs-document-properties-linearized-no = होइन\npdfjs-document-properties-close-button = बन्द गर्नुहोस्\n\n## Print\n\npdfjs-print-progress-message = मुद्रणका लागि कागजात तयारी गरिदै…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = रद्द गर्नुहोस्\npdfjs-printing-not-supported = चेतावनी: यो ब्राउजरमा मुद्रण पूर्णतया समर्थित छैन।\npdfjs-printing-not-ready = चेतावनी: PDF मुद्रणका लागि पूर्णतया लोड भएको छैन।\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = टगल साइडबार\npdfjs-toggle-sidebar-button-label = टगल साइडबार\npdfjs-document-outline-button =\n    .title = कागजातको रूपरेखा देखाउनुहोस् (सबै वस्तुहरू विस्तार/पतन गर्न डबल-क्लिक गर्नुहोस्)\npdfjs-document-outline-button-label = दस्तावेजको रूपरेखा\npdfjs-attachments-button =\n    .title = संलग्नहरू देखाउनुहोस्\npdfjs-attachments-button-label = संलग्नकहरू\npdfjs-thumbs-button =\n    .title = थम्बनेलहरू देखाउनुहोस्\npdfjs-thumbs-button-label = थम्बनेलहरू\npdfjs-findbar-button =\n    .title = कागजातमा फेला पार्नुहोस्\npdfjs-findbar-button-label = फेला पार्नुहोस्\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = पृष्ठ { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = { $page } पृष्ठको थम्बनेल\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = फेला पार्नुहोस्\n    .placeholder = कागजातमा फेला पार्नुहोस्…\npdfjs-find-previous-button =\n    .title = यस वाक्यांशको अघिल्लो घटना फेला पार्नुहोस्\npdfjs-find-previous-button-label = अघिल्लो\npdfjs-find-next-button =\n    .title = यस वाक्यांशको पछिल्लो घटना फेला पार्नुहोस्\npdfjs-find-next-button-label = अर्को\npdfjs-find-highlight-checkbox = सबै हाइलाइट गर्ने\npdfjs-find-match-case-checkbox-label = केस जोडा मिलाउनुहोस्\npdfjs-find-entire-word-checkbox-label = पुरा शब्दहरु\npdfjs-find-reached-top = पृष्ठको शिर्षमा पुगीयो, तलबाट जारी गरिएको थियो\npdfjs-find-reached-bottom = पृष्ठको अन्त्यमा पुगीयो, शिर्षबाट जारी गरिएको थियो\npdfjs-find-not-found = वाक्यांश फेला परेन\n\n## Predefined zoom values\n\npdfjs-page-scale-width = पृष्ठ चौडाइ\npdfjs-page-scale-fit = पृष्ठ ठिक्क मिल्ने\npdfjs-page-scale-auto = स्वचालित जुम\npdfjs-page-scale-actual = वास्तविक आकार\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = यो PDF लोड गर्दा एउटा त्रुटि देखापर्‍यो।\npdfjs-invalid-file-error = अवैध वा दुषित PDF फाइल।\npdfjs-missing-file-error = हराईरहेको PDF फाइल।\npdfjs-unexpected-response-error = अप्रत्याशित सर्भर प्रतिक्रिया।\npdfjs-rendering-error = पृष्ठ प्रतिपादन गर्दा एउटा त्रुटि देखापर्‍यो।\n\n## Annotations\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Annotation]\n\n## Password\n\npdfjs-password-label = यस PDF फाइललाई खोल्न गोप्यशब्द प्रविष्ट गर्नुहोस्।\npdfjs-password-invalid = अवैध गोप्यशब्द। पुनः प्रयास गर्नुहोस्।\npdfjs-password-ok-button = ठिक छ\npdfjs-password-cancel-button = रद्द गर्नुहोस्\npdfjs-web-fonts-disabled = वेब फन्ट असक्षम छन्: एम्बेडेड PDF फन्ट प्रयोग गर्न असमर्थ।\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/nl/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Vorige pagina\npdfjs-previous-button-label = Vorige\npdfjs-next-button =\n    .title = Volgende pagina\npdfjs-next-button-label = Volgende\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Pagina\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = van { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } van { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Uitzoomen\npdfjs-zoom-out-button-label = Uitzoomen\npdfjs-zoom-in-button =\n    .title = Inzoomen\npdfjs-zoom-in-button-label = Inzoomen\npdfjs-zoom-select =\n    .title = Zoomen\npdfjs-presentation-mode-button =\n    .title = Wisselen naar presentatiemodus\npdfjs-presentation-mode-button-label = Presentatiemodus\npdfjs-open-file-button =\n    .title = Bestand openen\npdfjs-open-file-button-label = Openen\npdfjs-print-button =\n    .title = Afdrukken\npdfjs-print-button-label = Afdrukken\npdfjs-save-button =\n    .title = Opslaan\npdfjs-save-button-label = Opslaan\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Downloaden\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Downloaden\npdfjs-bookmark-button =\n    .title = Huidige pagina (URL van huidige pagina bekijken)\npdfjs-bookmark-button-label = Huidige pagina\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Openen in app\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Openen in app\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Hulpmiddelen\npdfjs-tools-button-label = Hulpmiddelen\npdfjs-first-page-button =\n    .title = Naar eerste pagina gaan\npdfjs-first-page-button-label = Naar eerste pagina gaan\npdfjs-last-page-button =\n    .title = Naar laatste pagina gaan\npdfjs-last-page-button-label = Naar laatste pagina gaan\npdfjs-page-rotate-cw-button =\n    .title = Rechtsom draaien\npdfjs-page-rotate-cw-button-label = Rechtsom draaien\npdfjs-page-rotate-ccw-button =\n    .title = Linksom draaien\npdfjs-page-rotate-ccw-button-label = Linksom draaien\npdfjs-cursor-text-select-tool-button =\n    .title = Tekstselectiehulpmiddel inschakelen\npdfjs-cursor-text-select-tool-button-label = Tekstselectiehulpmiddel\npdfjs-cursor-hand-tool-button =\n    .title = Handhulpmiddel inschakelen\npdfjs-cursor-hand-tool-button-label = Handhulpmiddel\npdfjs-scroll-page-button =\n    .title = Paginascrollen gebruiken\npdfjs-scroll-page-button-label = Paginascrollen\npdfjs-scroll-vertical-button =\n    .title = Verticaal scrollen gebruiken\npdfjs-scroll-vertical-button-label = Verticaal scrollen\npdfjs-scroll-horizontal-button =\n    .title = Horizontaal scrollen gebruiken\npdfjs-scroll-horizontal-button-label = Horizontaal scrollen\npdfjs-scroll-wrapped-button =\n    .title = Scrollen met terugloop gebruiken\npdfjs-scroll-wrapped-button-label = Scrollen met terugloop\npdfjs-spread-none-button =\n    .title = Dubbele pagina’s niet samenvoegen\npdfjs-spread-none-button-label = Geen dubbele pagina’s\npdfjs-spread-odd-button =\n    .title = Dubbele pagina’s samenvoegen vanaf oneven pagina’s\npdfjs-spread-odd-button-label = Oneven dubbele pagina’s\npdfjs-spread-even-button =\n    .title = Dubbele pagina’s samenvoegen vanaf even pagina’s\npdfjs-spread-even-button-label = Even dubbele pagina’s\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Documenteigenschappen…\npdfjs-document-properties-button-label = Documenteigenschappen…\npdfjs-document-properties-file-name = Bestandsnaam:\npdfjs-document-properties-file-size = Bestandsgrootte:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Titel:\npdfjs-document-properties-author = Auteur:\npdfjs-document-properties-subject = Onderwerp:\npdfjs-document-properties-keywords = Sleutelwoorden:\npdfjs-document-properties-creation-date = Aanmaakdatum:\npdfjs-document-properties-modification-date = Wijzigingsdatum:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Maker:\npdfjs-document-properties-producer = PDF-producent:\npdfjs-document-properties-version = PDF-versie:\npdfjs-document-properties-page-count = Aantal pagina’s:\npdfjs-document-properties-page-size = Paginagrootte:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = staand\npdfjs-document-properties-page-size-orientation-landscape = liggend\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Snelle webweergave:\npdfjs-document-properties-linearized-yes = Ja\npdfjs-document-properties-linearized-no = Nee\npdfjs-document-properties-close-button = Sluiten\n\n## Print\n\npdfjs-print-progress-message = Document voorbereiden voor afdrukken…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Annuleren\npdfjs-printing-not-supported = Waarschuwing: afdrukken wordt niet volledig ondersteund door deze browser.\npdfjs-printing-not-ready = Waarschuwing: de PDF is niet volledig geladen voor afdrukken.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Zijbalk in-/uitschakelen\npdfjs-toggle-sidebar-notification-button =\n    .title = Zijbalk in-/uitschakelen (document bevat overzicht/bijlagen/lagen)\npdfjs-toggle-sidebar-button-label = Zijbalk in-/uitschakelen\npdfjs-document-outline-button =\n    .title = Documentoverzicht tonen (dubbelklik om alle items uit/samen te vouwen)\npdfjs-document-outline-button-label = Documentoverzicht\npdfjs-attachments-button =\n    .title = Bijlagen tonen\npdfjs-attachments-button-label = Bijlagen\npdfjs-layers-button =\n    .title = Lagen tonen (dubbelklik om alle lagen naar de standaardstatus terug te zetten)\npdfjs-layers-button-label = Lagen\npdfjs-thumbs-button =\n    .title = Miniaturen tonen\npdfjs-thumbs-button-label = Miniaturen\npdfjs-current-outline-item-button =\n    .title = Huidig item in inhoudsopgave zoeken\npdfjs-current-outline-item-button-label = Huidig item in inhoudsopgave\npdfjs-findbar-button =\n    .title = Zoeken in document\npdfjs-findbar-button-label = Zoeken\npdfjs-additional-layers = Aanvullende lagen\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Pagina { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatuur van pagina { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Zoeken\n    .placeholder = Zoeken in document…\npdfjs-find-previous-button =\n    .title = De vorige overeenkomst van de tekst zoeken\npdfjs-find-previous-button-label = Vorige\npdfjs-find-next-button =\n    .title = De volgende overeenkomst van de tekst zoeken\npdfjs-find-next-button-label = Volgende\npdfjs-find-highlight-checkbox = Alles markeren\npdfjs-find-match-case-checkbox-label = Hoofdlettergevoelig\npdfjs-find-match-diacritics-checkbox-label = Diakritische tekens gebruiken\npdfjs-find-entire-word-checkbox-label = Hele woorden\npdfjs-find-reached-top = Bovenkant van document bereikt, doorgegaan vanaf onderkant\npdfjs-find-reached-bottom = Onderkant van document bereikt, doorgegaan vanaf bovenkant\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } van { $total } overeenkomst\n       *[other] { $current } van { $total } overeenkomsten\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Meer dan { $limit } overeenkomst\n       *[other] Meer dan { $limit } overeenkomsten\n    }\npdfjs-find-not-found = Tekst niet gevonden\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Paginabreedte\npdfjs-page-scale-fit = Hele pagina\npdfjs-page-scale-auto = Automatisch zoomen\npdfjs-page-scale-actual = Werkelijke grootte\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Pagina { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Er is een fout opgetreden bij het laden van de PDF.\npdfjs-invalid-file-error = Ongeldig of beschadigd PDF-bestand.\npdfjs-missing-file-error = PDF-bestand ontbreekt.\npdfjs-unexpected-response-error = Onverwacht serverantwoord.\npdfjs-rendering-error = Er is een fout opgetreden bij het weergeven van de pagina.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type }-aantekening]\n\n## Password\n\npdfjs-password-label = Voer het wachtwoord in om dit PDF-bestand te openen.\npdfjs-password-invalid = Ongeldig wachtwoord. Probeer het opnieuw.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Annuleren\npdfjs-web-fonts-disabled = Weblettertypen zijn uitgeschakeld: gebruik van ingebedde PDF-lettertypen is niet mogelijk.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Tekst\npdfjs-editor-free-text-button-label = Tekst\npdfjs-editor-ink-button =\n    .title = Tekenen\npdfjs-editor-ink-button-label = Tekenen\npdfjs-editor-stamp-button =\n    .title = Afbeeldingen toevoegen of bewerken\npdfjs-editor-stamp-button-label = Afbeeldingen toevoegen of bewerken\npdfjs-editor-highlight-button =\n    .title = Markeren\npdfjs-editor-highlight-button-label = Markeren\npdfjs-highlight-floating-button =\n    .title = Markeren\npdfjs-highlight-floating-button1 =\n    .title = Markeren\n    .aria-label = Markeren\npdfjs-highlight-floating-button-label = Markeren\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Tekening verwijderen\npdfjs-editor-remove-freetext-button =\n    .title = Tekst verwijderen\npdfjs-editor-remove-stamp-button =\n    .title = Afbeelding verwijderen\npdfjs-editor-remove-highlight-button =\n    .title = Markering verwijderen\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Kleur\npdfjs-editor-free-text-size-input = Grootte\npdfjs-editor-ink-color-input = Kleur\npdfjs-editor-ink-thickness-input = Dikte\npdfjs-editor-ink-opacity-input = Opaciteit\npdfjs-editor-stamp-add-image-button =\n    .title = Afbeelding toevoegen\npdfjs-editor-stamp-add-image-button-label = Afbeelding toevoegen\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Dikte\npdfjs-editor-free-highlight-thickness-title =\n    .title = Dikte wijzigen bij accentuering van andere items dan tekst\npdfjs-free-text =\n    .aria-label = Tekstbewerker\npdfjs-free-text-default-content = Begin met typen…\npdfjs-ink =\n    .aria-label = Tekeningbewerker\npdfjs-ink-canvas =\n    .aria-label = Door gebruiker gemaakte afbeelding\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Alternatieve tekst\npdfjs-editor-alt-text-edit-button-label = Alternatieve tekst bewerken\npdfjs-editor-alt-text-dialog-label = Kies een optie\npdfjs-editor-alt-text-dialog-description = Alternatieve tekst helpt wanneer mensen de afbeelding niet kunnen zien of wanneer deze niet wordt geladen.\npdfjs-editor-alt-text-add-description-label = Voeg een beschrijving toe\npdfjs-editor-alt-text-add-description-description = Streef naar 1-2 zinnen die het onderwerp, de omgeving of de acties beschrijven.\npdfjs-editor-alt-text-mark-decorative-label = Als decoratief markeren\npdfjs-editor-alt-text-mark-decorative-description = Dit wordt gebruikt voor sierafbeeldingen, zoals randen of watermerken.\npdfjs-editor-alt-text-cancel-button = Annuleren\npdfjs-editor-alt-text-save-button = Opslaan\npdfjs-editor-alt-text-decorative-tooltip = Als decoratief gemarkeerd\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Bijvoorbeeld: ‘Een jonge man gaat aan een tafel zitten om te eten’\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Linkerbovenhoek – formaat wijzigen\npdfjs-editor-resizer-label-top-middle = Midden boven – formaat wijzigen\npdfjs-editor-resizer-label-top-right = Rechterbovenhoek – formaat wijzigen\npdfjs-editor-resizer-label-middle-right = Midden rechts – formaat wijzigen\npdfjs-editor-resizer-label-bottom-right = Rechterbenedenhoek – formaat wijzigen\npdfjs-editor-resizer-label-bottom-middle = Midden onder – formaat wijzigen\npdfjs-editor-resizer-label-bottom-left = Linkerbenedenhoek – formaat wijzigen\npdfjs-editor-resizer-label-middle-left = Links midden – formaat wijzigen\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Markeringskleur\npdfjs-editor-colorpicker-button =\n    .title = Kleur wijzigen\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Kleurkeuzes\npdfjs-editor-colorpicker-yellow =\n    .title = Geel\npdfjs-editor-colorpicker-green =\n    .title = Groen\npdfjs-editor-colorpicker-blue =\n    .title = Blauw\npdfjs-editor-colorpicker-pink =\n    .title = Roze\npdfjs-editor-colorpicker-red =\n    .title = Rood\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Alles tonen\npdfjs-editor-highlight-show-all-button =\n    .title = Alles tonen\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/nn-NO/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Føregåande side\npdfjs-previous-button-label = Føregåande\npdfjs-next-button =\n    .title = Neste side\npdfjs-next-button-label = Neste\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Side\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = av { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } av { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Zoom ut\npdfjs-zoom-out-button-label = Zoom ut\npdfjs-zoom-in-button =\n    .title = Zoom inn\npdfjs-zoom-in-button-label = Zoom inn\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Byt til presentasjonsmodus\npdfjs-presentation-mode-button-label = Presentasjonsmodus\npdfjs-open-file-button =\n    .title = Opne fil\npdfjs-open-file-button-label = Opne\npdfjs-print-button =\n    .title = Skriv ut\npdfjs-print-button-label = Skriv ut\npdfjs-save-button =\n    .title = Lagre\npdfjs-save-button-label = Lagre\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Last ned\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Last ned\npdfjs-bookmark-button =\n    .title = Gjeldande side (sjå URL frå gjeldande side)\npdfjs-bookmark-button-label = Gjeldande side\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Opne i app\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Opne i app\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Verktøy\npdfjs-tools-button-label = Verktøy\npdfjs-first-page-button =\n    .title = Gå til første side\npdfjs-first-page-button-label = Gå til første side\npdfjs-last-page-button =\n    .title = Gå til siste side\npdfjs-last-page-button-label = Gå til siste side\npdfjs-page-rotate-cw-button =\n    .title = Roter med klokka\npdfjs-page-rotate-cw-button-label = Roter med klokka\npdfjs-page-rotate-ccw-button =\n    .title = Roter mot klokka\npdfjs-page-rotate-ccw-button-label = Roter mot klokka\npdfjs-cursor-text-select-tool-button =\n    .title = Aktiver tekstmarkeringsverktøy\npdfjs-cursor-text-select-tool-button-label = Tekstmarkeringsverktøy\npdfjs-cursor-hand-tool-button =\n    .title = Aktiver handverktøy\npdfjs-cursor-hand-tool-button-label = Handverktøy\npdfjs-scroll-page-button =\n    .title = Bruk siderulling\npdfjs-scroll-page-button-label = Siderulling\npdfjs-scroll-vertical-button =\n    .title = Bruk vertikal rulling\npdfjs-scroll-vertical-button-label = Vertikal rulling\npdfjs-scroll-horizontal-button =\n    .title = Bruk horisontal rulling\npdfjs-scroll-horizontal-button-label = Horisontal rulling\npdfjs-scroll-wrapped-button =\n    .title = Bruk fleirsiderulling\npdfjs-scroll-wrapped-button-label = Fleirsiderulling\npdfjs-spread-none-button =\n    .title = Vis enkeltsider\npdfjs-spread-none-button-label = Enkeltside\npdfjs-spread-odd-button =\n    .title = Vis oppslag med ulike sidenummer til venstre\npdfjs-spread-odd-button-label = Oppslag med framside\npdfjs-spread-even-button =\n    .title = Vis oppslag med like sidenummmer til venstre\npdfjs-spread-even-button-label = Oppslag utan framside\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Dokumenteigenskapar…\npdfjs-document-properties-button-label = Dokumenteigenskapar…\npdfjs-document-properties-file-name = Filnamn:\npdfjs-document-properties-file-size = Filstorleik:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Tittel:\npdfjs-document-properties-author = Forfattar:\npdfjs-document-properties-subject = Emne:\npdfjs-document-properties-keywords = Stikkord:\npdfjs-document-properties-creation-date = Dato oppretta:\npdfjs-document-properties-modification-date = Dato endra:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Oppretta av:\npdfjs-document-properties-producer = PDF-verktøy:\npdfjs-document-properties-version = PDF-versjon:\npdfjs-document-properties-page-count = Sidetal:\npdfjs-document-properties-page-size = Sidestørrelse:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = ståande\npdfjs-document-properties-page-size-orientation-landscape = liggande\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Brev\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Rask nettvising:\npdfjs-document-properties-linearized-yes = Ja\npdfjs-document-properties-linearized-no = Nei\npdfjs-document-properties-close-button = Lat att\n\n## Print\n\npdfjs-print-progress-message = Førebur dokumentet for utskrift…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Avbryt\npdfjs-printing-not-supported = Åtvaring: Utskrift er ikkje fullstendig støtta av denne nettlesaren.\npdfjs-printing-not-ready = Åtvaring: PDF ikkje fullstendig innlasta for utskrift.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Slå av/på sidestolpe\npdfjs-toggle-sidebar-notification-button =\n    .title = Vis/gøym sidestolpe (dokumentet inneheld oversikt/vedlegg/lag)\npdfjs-toggle-sidebar-button-label = Slå av/på sidestolpe\npdfjs-document-outline-button =\n    .title = Vis dokumentdisposisjonen (dobbelklikk for å utvide/gøyme alle elementa)\npdfjs-document-outline-button-label = Dokumentdisposisjon\npdfjs-attachments-button =\n    .title = Vis vedlegg\npdfjs-attachments-button-label = Vedlegg\npdfjs-layers-button =\n    .title = Vis lag (dobbeltklikk for å tilbakestille alle lag til standardtilstand)\npdfjs-layers-button-label = Lag\npdfjs-thumbs-button =\n    .title = Vis miniatyrbilde\npdfjs-thumbs-button-label = Miniatyrbilde\npdfjs-current-outline-item-button =\n    .title = Finn gjeldande disposisjonselement\npdfjs-current-outline-item-button-label = Gjeldande disposisjonselement\npdfjs-findbar-button =\n    .title = Finn i dokumentet\npdfjs-findbar-button-label = Finn\npdfjs-additional-layers = Ytterlegare lag\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Side { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatyrbilde av side { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Søk\n    .placeholder = Søk i dokument…\npdfjs-find-previous-button =\n    .title = Finn førre førekomst av frasen\npdfjs-find-previous-button-label = Førre\npdfjs-find-next-button =\n    .title = Finn neste førekomst av frasen\npdfjs-find-next-button-label = Neste\npdfjs-find-highlight-checkbox = Uthev alle\npdfjs-find-match-case-checkbox-label = Skil store/små bokstavar\npdfjs-find-match-diacritics-checkbox-label = Samsvar diakritiske teikn\npdfjs-find-entire-word-checkbox-label = Heile ord\npdfjs-find-reached-top = Nådde toppen av dokumentet, fortset frå botnen\npdfjs-find-reached-bottom = Nådde botnen av dokumentet, fortset frå toppen\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } av { $total } treff\n       *[other] { $current } av { $total } treff\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Meir enn { $limit } treff\n       *[other] Meir enn { $limit } treff\n    }\npdfjs-find-not-found = Fann ikkje teksten\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Sidebreidde\npdfjs-page-scale-fit = Tilpass til sida\npdfjs-page-scale-auto = Automatisk skalering\npdfjs-page-scale-actual = Verkeleg storleik\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Side { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Ein feil oppstod ved lasting av PDF.\npdfjs-invalid-file-error = Ugyldig eller korrupt PDF-fil.\npdfjs-missing-file-error = Manglande PDF-fil.\npdfjs-unexpected-response-error = Uventa tenarrespons.\npdfjs-rendering-error = Ein feil oppstod under vising av sida.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date } { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } annotasjon]\n\n## Password\n\npdfjs-password-label = Skriv inn passordet for å opne denne PDF-fila.\npdfjs-password-invalid = Ugyldig passord. Prøv på nytt.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Avbryt\npdfjs-web-fonts-disabled = Web-skrifter er slått av: Kan ikkje bruke innbundne PDF-skrifter.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Tekst\npdfjs-editor-free-text-button-label = Tekst\npdfjs-editor-ink-button =\n    .title = Teikne\npdfjs-editor-ink-button-label = Teikne\npdfjs-editor-stamp-button =\n    .title = Legg til eller rediger bilde\npdfjs-editor-stamp-button-label = Legg til eller rediger bilde\n\n## Remove button for the various kind of editor.\n\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Farge\npdfjs-editor-free-text-size-input = Storleik\npdfjs-editor-ink-color-input = Farge\npdfjs-editor-ink-thickness-input = Tjukkleik\npdfjs-editor-ink-opacity-input = Ugjennomskinleg\npdfjs-editor-stamp-add-image-button =\n    .title = Legg til bilde\npdfjs-editor-stamp-add-image-button-label = Legg til bilde\npdfjs-free-text =\n    .aria-label = Tekstredigering\npdfjs-free-text-default-content = Byrje å skrive…\npdfjs-ink =\n    .aria-label = Teikneredigering\npdfjs-ink-canvas =\n    .aria-label = Brukarskapt bilde\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Alt-tekst\npdfjs-editor-alt-text-edit-button-label = Rediger alt-tekst tekst\npdfjs-editor-alt-text-dialog-label = Vel eit alternativ\npdfjs-editor-alt-text-dialog-description = Alt-tekst (alternativ tekst) hjelper når folk ikkje kan sjå bildet eller når det ikkje vert lasta inn.\npdfjs-editor-alt-text-add-description-label = Legg til ei skildring\npdfjs-editor-alt-text-add-description-description = Gå etter 1-2 setninger som skildrar emnet, settinga eller handlingane.\npdfjs-editor-alt-text-mark-decorative-label = Merk som dekorativt\npdfjs-editor-alt-text-mark-decorative-description = Dette vert brukt til dekorative bilde, som kantlinjer eller vassmerke.\npdfjs-editor-alt-text-cancel-button = Avbryt\npdfjs-editor-alt-text-save-button = Lagre\npdfjs-editor-alt-text-decorative-tooltip = Merkt som dekorativ\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Til dømes, «Ein ung mann set seg ved eit bord for å ete eit måltid»\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n\n## Color picker\n\npdfjs-editor-colorpicker-yellow =\n    .title = Gul\npdfjs-editor-colorpicker-green =\n    .title = Grøn\npdfjs-editor-colorpicker-blue =\n    .title = Blå\npdfjs-editor-colorpicker-pink =\n    .title = Rosa\npdfjs-editor-colorpicker-red =\n    .title = Raud\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/oc/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Pagina precedenta\npdfjs-previous-button-label = Precedent\npdfjs-next-button =\n    .title = Pagina seguenta\npdfjs-next-button-label = Seguent\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Pagina\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = sus { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Zoom arrièr\npdfjs-zoom-out-button-label = Zoom arrièr\npdfjs-zoom-in-button =\n    .title = Zoom avant\npdfjs-zoom-in-button-label = Zoom avant\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Bascular en mòde presentacion\npdfjs-presentation-mode-button-label = Mòde Presentacion\npdfjs-open-file-button =\n    .title = Dobrir lo fichièr\npdfjs-open-file-button-label = Dobrir\npdfjs-print-button =\n    .title = Imprimir\npdfjs-print-button-label = Imprimir\npdfjs-save-button =\n    .title = Enregistrar\npdfjs-save-button-label = Enregistrar\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Telecargar\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Telecargar\npdfjs-bookmark-button =\n    .title = Pagina actuala (mostrar l’adreça de la pagina actuala)\npdfjs-bookmark-button-label = Pagina actuala\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Dobrir amb l’aplicacion\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Dobrir amb l’aplicacion\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Aisinas\npdfjs-tools-button-label = Aisinas\npdfjs-first-page-button =\n    .title = Anar a la primièra pagina\npdfjs-first-page-button-label = Anar a la primièra pagina\npdfjs-last-page-button =\n    .title = Anar a la darrièra pagina\npdfjs-last-page-button-label = Anar a la darrièra pagina\npdfjs-page-rotate-cw-button =\n    .title = Rotacion orària\npdfjs-page-rotate-cw-button-label = Rotacion orària\npdfjs-page-rotate-ccw-button =\n    .title = Rotacion antiorària\npdfjs-page-rotate-ccw-button-label = Rotacion antiorària\npdfjs-cursor-text-select-tool-button =\n    .title = Activar l'aisina de seleccion de tèxte\npdfjs-cursor-text-select-tool-button-label = Aisina de seleccion de tèxte\npdfjs-cursor-hand-tool-button =\n    .title = Activar l’aisina man\npdfjs-cursor-hand-tool-button-label = Aisina man\npdfjs-scroll-page-button =\n    .title = Activar lo defilament per pagina\npdfjs-scroll-page-button-label = Defilament per pagina\npdfjs-scroll-vertical-button =\n    .title = Utilizar lo defilament vertical\npdfjs-scroll-vertical-button-label = Defilament vertical\npdfjs-scroll-horizontal-button =\n    .title = Utilizar lo defilament orizontal\npdfjs-scroll-horizontal-button-label = Defilament orizontal\npdfjs-scroll-wrapped-button =\n    .title = Activar lo defilament continú\npdfjs-scroll-wrapped-button-label = Defilament continú\npdfjs-spread-none-button =\n    .title = Agropar pas las paginas doas a doas\npdfjs-spread-none-button-label = Una sola pagina\npdfjs-spread-odd-button =\n    .title = Mostrar doas paginas en començant per las paginas imparas a esquèrra\npdfjs-spread-odd-button-label = Dobla pagina, impara a drecha\npdfjs-spread-even-button =\n    .title = Mostrar doas paginas en començant per las paginas paras a esquèrra\npdfjs-spread-even-button-label = Dobla pagina, para a drecha\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Proprietats del document…\npdfjs-document-properties-button-label = Proprietats del document…\npdfjs-document-properties-file-name = Nom del fichièr :\npdfjs-document-properties-file-size = Talha del fichièr :\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } Ko ({ $size_b } octets)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } Mo ({ $size_b } octets)\npdfjs-document-properties-title = Títol :\npdfjs-document-properties-author = Autor :\npdfjs-document-properties-subject = Subjècte :\npdfjs-document-properties-keywords = Mots claus :\npdfjs-document-properties-creation-date = Data de creacion :\npdfjs-document-properties-modification-date = Data de modificacion :\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, a { $time }\npdfjs-document-properties-creator = Creator :\npdfjs-document-properties-producer = Aisina de conversion PDF :\npdfjs-document-properties-version = Version PDF :\npdfjs-document-properties-page-count = Nombre de paginas :\npdfjs-document-properties-page-size = Talha de la pagina :\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = retrach\npdfjs-document-properties-page-size-orientation-landscape = païsatge\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letra\npdfjs-document-properties-page-size-name-legal = Document juridic\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Vista web rapida :\npdfjs-document-properties-linearized-yes = Òc\npdfjs-document-properties-linearized-no = Non\npdfjs-document-properties-close-button = Tampar\n\n## Print\n\npdfjs-print-progress-message = Preparacion del document per l’impression…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Anullar\npdfjs-printing-not-supported = Atencion : l'impression es pas complètament gerida per aqueste navegador.\npdfjs-printing-not-ready = Atencion : lo PDF es pas entièrament cargat per lo poder imprimir.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Afichar/amagar lo panèl lateral\npdfjs-toggle-sidebar-notification-button =\n    .title = Afichar/amagar lo panèl lateral (lo document conten esquèmas/pèças juntas/calques)\npdfjs-toggle-sidebar-button-label = Afichar/amagar lo panèl lateral\npdfjs-document-outline-button =\n    .title = Mostrar los esquèmas del document (dobleclicar per espandre/reduire totes los elements)\npdfjs-document-outline-button-label = Marcapaginas del document\npdfjs-attachments-button =\n    .title = Visualizar las pèças juntas\npdfjs-attachments-button-label = Pèças juntas\npdfjs-layers-button =\n    .title = Afichar los calques (doble-clicar per reïnicializar totes los calques a l’estat per defaut)\npdfjs-layers-button-label = Calques\npdfjs-thumbs-button =\n    .title = Afichar las vinhetas\npdfjs-thumbs-button-label = Vinhetas\npdfjs-current-outline-item-button =\n    .title = Trobar l’element de plan actual\npdfjs-current-outline-item-button-label = Element de plan actual\npdfjs-findbar-button =\n    .title = Cercar dins lo document\npdfjs-findbar-button-label = Recercar\npdfjs-additional-layers = Calques suplementaris\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Pagina { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Vinheta de la pagina { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Recercar\n    .placeholder = Cercar dins lo document…\npdfjs-find-previous-button =\n    .title = Tròba l'ocurréncia precedenta de la frasa\npdfjs-find-previous-button-label = Precedent\npdfjs-find-next-button =\n    .title = Tròba l'ocurréncia venenta de la frasa\npdfjs-find-next-button-label = Seguent\npdfjs-find-highlight-checkbox = Suslinhar tot\npdfjs-find-match-case-checkbox-label = Respectar la cassa\npdfjs-find-match-diacritics-checkbox-label = Respectar los diacritics\npdfjs-find-entire-word-checkbox-label = Mots entièrs\npdfjs-find-reached-top = Naut de la pagina atenh, perseguida del bas\npdfjs-find-reached-bottom = Bas de la pagina atench, perseguida al començament\npdfjs-find-not-found = Frasa pas trobada\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Largor plena\npdfjs-page-scale-fit = Pagina entièra\npdfjs-page-scale-auto = Zoom automatic\npdfjs-page-scale-actual = Talha vertadièra\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Pagina { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Una error s'es producha pendent lo cargament del fichièr PDF.\npdfjs-invalid-file-error = Fichièr PDF invalid o corromput.\npdfjs-missing-file-error = Fichièr PDF mancant.\npdfjs-unexpected-response-error = Responsa de servidor imprevista.\npdfjs-rendering-error = Una error s'es producha pendent l'afichatge de la pagina.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date } a { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Anotacion { $type }]\n\n## Password\n\npdfjs-password-label = Picatz lo senhal per dobrir aqueste fichièr PDF.\npdfjs-password-invalid = Senhal incorrècte. Tornatz ensajar.\npdfjs-password-ok-button = D'acòrdi\npdfjs-password-cancel-button = Anullar\npdfjs-web-fonts-disabled = Las polissas web son desactivadas : impossible d'utilizar las polissas integradas al PDF.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Tèxte\npdfjs-editor-free-text-button-label = Tèxte\npdfjs-editor-ink-button =\n    .title = Dessenhar\npdfjs-editor-ink-button-label = Dessenhar\npdfjs-editor-stamp-button =\n    .title = Apondre o modificar d’imatges\npdfjs-editor-stamp-button-label = Apondre o modificar d’imatges\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-freetext-button =\n    .title = Suprimir lo tèxte\npdfjs-editor-remove-stamp-button =\n    .title = Suprimir l’imatge\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Color\npdfjs-editor-free-text-size-input = Talha\npdfjs-editor-ink-color-input = Color\npdfjs-editor-ink-thickness-input = Espessor\npdfjs-editor-ink-opacity-input = Opacitat\npdfjs-editor-stamp-add-image-button =\n    .title = Apondre imatge\npdfjs-editor-stamp-add-image-button-label = Apondre imatge\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Espessor\npdfjs-free-text =\n    .aria-label = Editor de tèxte\npdfjs-free-text-default-content = Començatz d’escriure…\npdfjs-ink =\n    .aria-label = Editor de dessenh\npdfjs-ink-canvas =\n    .aria-label = Imatge creat per l’utilizaire\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Tèxt alternatiu\npdfjs-editor-alt-text-edit-button-label = Modificar lo tèxt alternatiu\npdfjs-editor-alt-text-dialog-label = Causir una opcion\npdfjs-editor-alt-text-add-description-label = Apondre una descripcion\npdfjs-editor-alt-text-cancel-button = Anullar\npdfjs-editor-alt-text-save-button = Enregistrar\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Color de suslinhatge\npdfjs-editor-colorpicker-button =\n    .title = Cambiar de color\npdfjs-editor-colorpicker-yellow =\n    .title = Jaune\npdfjs-editor-colorpicker-green =\n    .title = Verd\npdfjs-editor-colorpicker-blue =\n    .title = Blau\npdfjs-editor-colorpicker-pink =\n    .title = Ròse\npdfjs-editor-colorpicker-red =\n    .title = Roge\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = O afichar tot\npdfjs-editor-highlight-show-all-button =\n    .title = O afichar tot\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/pa-IN/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = ਪਿਛਲਾ ਸਫ਼ਾ\npdfjs-previous-button-label = ਪਿੱਛੇ\npdfjs-next-button =\n    .title = ਅਗਲਾ ਸਫ਼ਾ\npdfjs-next-button-label = ਅੱਗੇ\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = ਸਫ਼ਾ\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = { $pagesCount } ਵਿੱਚੋਂ\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = { $pagesCount }) ਵਿੱਚੋਂ ({ $pageNumber }\npdfjs-zoom-out-button =\n    .title = ਜ਼ੂਮ ਆਉਟ\npdfjs-zoom-out-button-label = ਜ਼ੂਮ ਆਉਟ\npdfjs-zoom-in-button =\n    .title = ਜ਼ੂਮ ਇਨ\npdfjs-zoom-in-button-label = ਜ਼ੂਮ ਇਨ\npdfjs-zoom-select =\n    .title = ਜ਼ੂਨ\npdfjs-presentation-mode-button =\n    .title = ਪਰਿਜੈਂਟੇਸ਼ਨ ਮੋਡ ਵਿੱਚ ਜਾਓ\npdfjs-presentation-mode-button-label = ਪਰਿਜੈਂਟੇਸ਼ਨ ਮੋਡ\npdfjs-open-file-button =\n    .title = ਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹੋ\npdfjs-open-file-button-label = ਖੋਲ੍ਹੋ\npdfjs-print-button =\n    .title = ਪਰਿੰਟ\npdfjs-print-button-label = ਪਰਿੰਟ\npdfjs-save-button =\n    .title = ਸੰਭਾਲੋ\npdfjs-save-button-label = ਸੰਭਾਲੋ\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = ਡਾਊਨਲੋਡ\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = ਡਾਊਨਲੋਡ\npdfjs-bookmark-button =\n    .title = ਮੌਜੂਦਾ ਸਫ਼਼ਾ (ਮੌਜੂਦਾ ਸਫ਼ੇ ਤੋਂ URL ਵੇਖੋ)\npdfjs-bookmark-button-label = ਮੌਜੂਦਾ ਸਫ਼਼ਾ\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = ਟੂਲ\npdfjs-tools-button-label = ਟੂਲ\npdfjs-first-page-button =\n    .title = ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ\npdfjs-first-page-button-label = ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ\npdfjs-last-page-button =\n    .title = ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ\npdfjs-last-page-button-label = ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ\npdfjs-page-rotate-cw-button =\n    .title = ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਓ\npdfjs-page-rotate-cw-button-label = ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਓ\npdfjs-page-rotate-ccw-button =\n    .title = ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਓ\npdfjs-page-rotate-ccw-button-label = ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਓ\npdfjs-cursor-text-select-tool-button =\n    .title = ਲਿਖਤ ਚੋਣ ਟੂਲ ਸਮਰੱਥ ਕਰੋ\npdfjs-cursor-text-select-tool-button-label = ਲਿਖਤ ਚੋਣ ਟੂਲ\npdfjs-cursor-hand-tool-button =\n    .title = ਹੱਥ ਟੂਲ ਸਮਰੱਥ ਕਰੋ\npdfjs-cursor-hand-tool-button-label = ਹੱਥ ਟੂਲ\npdfjs-scroll-page-button =\n    .title = ਸਫ਼ਾ ਖਿਸਕਾਉਣ ਨੂੰ ਵਰਤੋਂ\npdfjs-scroll-page-button-label = ਸਫ਼ਾ ਖਿਸਕਾਉਣਾ\npdfjs-scroll-vertical-button =\n    .title = ਖੜ੍ਹਵੇਂ ਸਕਰਾਉਣ ਨੂੰ ਵਰਤੋਂ\npdfjs-scroll-vertical-button-label = ਖੜ੍ਹਵਾਂ ਸਰਕਾਉਣਾ\npdfjs-scroll-horizontal-button =\n    .title = ਲੇਟਵੇਂ ਸਰਕਾਉਣ ਨੂੰ ਵਰਤੋਂ\npdfjs-scroll-horizontal-button-label = ਲੇਟਵਾਂ ਸਰਕਾਉਣਾ\npdfjs-scroll-wrapped-button =\n    .title = ਸਮੇਟੇ ਸਰਕਾਉਣ ਨੂੰ ਵਰਤੋਂ\npdfjs-scroll-wrapped-button-label = ਸਮੇਟਿਆ ਸਰਕਾਉਣਾ\npdfjs-spread-none-button =\n    .title = ਸਫ਼ਾ ਫੈਲਾਅ ਵਿੱਚ ਸ਼ਾਮਲ ਨਾ ਹੋਵੋ\npdfjs-spread-none-button-label = ਕੋਈ ਫੈਲਾਅ ਨਹੀਂ\npdfjs-spread-odd-button =\n    .title = ਟਾਂਕ ਅੰਕ ਵਾਲੇ ਸਫ਼ਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਸਫਿਆਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ\npdfjs-spread-odd-button-label = ਟਾਂਕ ਫੈਲਾਅ\npdfjs-spread-even-button =\n    .title = ਜਿਸਤ ਅੰਕ ਵਾਲੇ ਸਫ਼ਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਸਫਿਆਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ\npdfjs-spread-even-button-label = ਜਿਸਤ ਫੈਲਾਅ\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = …ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ\npdfjs-document-properties-button-label = …ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ\npdfjs-document-properties-file-name = ਫਾਈਲ ਦਾ ਨਾਂ:\npdfjs-document-properties-file-size = ਫਾਈਲ ਦਾ ਆਕਾਰ:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } ਬਾਈਟ)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } ਬਾਈਟ)\npdfjs-document-properties-title = ਟਾਈਟਲ:\npdfjs-document-properties-author = ਲੇਖਕ:\npdfjs-document-properties-subject = ਵਿਸ਼ਾ:\npdfjs-document-properties-keywords = ਸ਼ਬਦ:\npdfjs-document-properties-creation-date = ਬਣਾਉਣ ਦੀ ਮਿਤੀ:\npdfjs-document-properties-modification-date = ਸੋਧ ਦੀ ਮਿਤੀ:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = ਨਿਰਮਾਤਾ:\npdfjs-document-properties-producer = PDF ਪ੍ਰੋਡਿਊਸਰ:\npdfjs-document-properties-version = PDF ਵਰਜਨ:\npdfjs-document-properties-page-count = ਸਫ਼ੇ ਦੀ ਗਿਣਤੀ:\npdfjs-document-properties-page-size = ਸਫ਼ਾ ਆਕਾਰ:\npdfjs-document-properties-page-size-unit-inches = ਇੰਚ\npdfjs-document-properties-page-size-unit-millimeters = ਮਿਮੀ\npdfjs-document-properties-page-size-orientation-portrait = ਪੋਰਟਰੇਟ\npdfjs-document-properties-page-size-orientation-landscape = ਲੈਂਡਸਕੇਪ\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = ਲੈਟਰ\npdfjs-document-properties-page-size-name-legal = ਕਨੂੰਨੀ\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = ਤੇਜ਼ ਵੈੱਬ ਝਲਕ:\npdfjs-document-properties-linearized-yes = ਹਾਂ\npdfjs-document-properties-linearized-no = ਨਹੀਂ\npdfjs-document-properties-close-button = ਬੰਦ ਕਰੋ\n\n## Print\n\npdfjs-print-progress-message = …ਪਰਿੰਟ ਕਰਨ ਲਈ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਤਿਆਰ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = ਰੱਦ ਕਰੋ\npdfjs-printing-not-supported = ਸਾਵਧਾਨ: ਇਹ ਬਰਾਊਜ਼ਰ ਪਰਿੰਟ ਕਰਨ ਲਈ ਪੂਰੀ ਤਰ੍ਹਾਂ ਸਹਾਇਕ ਨਹੀਂ ਹੈ।\npdfjs-printing-not-ready = ਸਾਵਧਾਨ: PDF ਨੂੰ ਪਰਿੰਟ ਕਰਨ ਲਈ ਪੂਰੀ ਤਰ੍ਹਾਂ ਲੋਡ ਨਹੀਂ ਹੈ।\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = ਬਾਹੀ ਬਦਲੋ\npdfjs-toggle-sidebar-notification-button =\n    .title = ਬਾਹੀ ਨੂੰ ਬਦਲੋ (ਦਸਤਾਵੇਜ਼ ਖਾਕਾ/ਅਟੈਚਮੈਂਟ/ਪਰਤਾਂ ਰੱਖਦਾ ਹੈ)\npdfjs-toggle-sidebar-button-label = ਬਾਹੀ ਬਦਲੋ\npdfjs-document-outline-button =\n    .title = ਦਸਤਾਵੇਜ਼ ਖਾਕਾ ਦਿਖਾਓ (ਸਾਰੀਆਂ ਆਈਟਮਾਂ ਨੂੰ ਫੈਲਾਉਣ/ਸਮੇਟਣ ਲਈ ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰੋ)\npdfjs-document-outline-button-label = ਦਸਤਾਵੇਜ਼ ਖਾਕਾ\npdfjs-attachments-button =\n    .title = ਅਟੈਚਮੈਂਟ ਵੇਖਾਓ\npdfjs-attachments-button-label = ਅਟੈਚਮੈਂਟਾਂ\npdfjs-layers-button =\n    .title = ਪਰਤਾਂ ਵੇਖਾਓ (ਸਾਰੀਆਂ ਪਰਤਾਂ ਨੂੰ ਮੂਲ ਹਾਲਤ ਉੱਤੇ ਮੁੜ-ਸੈੱਟ ਕਰਨ ਲਈ ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰੋ)\npdfjs-layers-button-label = ਪਰਤਾਂ\npdfjs-thumbs-button =\n    .title = ਥੰਮਨੇਲ ਨੂੰ ਵੇਖਾਓ\npdfjs-thumbs-button-label = ਥੰਮਨੇਲ\npdfjs-current-outline-item-button =\n    .title = ਮੌੌਜੂਦਾ ਖਾਕਾ ਚੀਜ਼ ਲੱਭੋ\npdfjs-current-outline-item-button-label = ਮੌਜੂਦਾ ਖਾਕਾ ਚੀਜ਼\npdfjs-findbar-button =\n    .title = ਦਸਤਾਵੇਜ਼ ਵਿੱਚ ਲੱਭੋ\npdfjs-findbar-button-label = ਲੱਭੋ\npdfjs-additional-layers = ਵਾਧੂ ਪਰਤਾਂ\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = ਸਫ਼ਾ { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = { $page } ਸਫ਼ੇ ਦਾ ਥੰਮਨੇਲ\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = ਲੱਭੋ\n    .placeholder = …ਦਸਤਾਵੇਜ਼ 'ਚ ਲੱਭੋ\npdfjs-find-previous-button =\n    .title = ਵਾਕ ਦੀ ਪਿਛਲੀ ਮੌਜੂਦਗੀ ਲੱਭੋ\npdfjs-find-previous-button-label = ਪਿੱਛੇ\npdfjs-find-next-button =\n    .title = ਵਾਕ ਦੀ ਅਗਲੀ ਮੌਜੂਦਗੀ ਲੱਭੋ\npdfjs-find-next-button-label = ਅੱਗੇ\npdfjs-find-highlight-checkbox = ਸਭ ਉਭਾਰੋ\npdfjs-find-match-case-checkbox-label = ਅੱਖਰ ਆਕਾਰ ਨੂੰ ਮਿਲਾਉ\npdfjs-find-match-diacritics-checkbox-label = ਭੇਦਸੂਚਕ ਮੇਲ\npdfjs-find-entire-word-checkbox-label = ਪੂਰੇ ਸ਼ਬਦ\npdfjs-find-reached-top = ਦਸਤਾਵੇਜ਼ ਦੇ ਉੱਤੇ ਆ ਗਏ ਹਾਂ, ਥੱਲੇ ਤੋਂ ਜਾਰੀ ਰੱਖਿਆ ਹੈ\npdfjs-find-reached-bottom = ਦਸਤਾਵੇਜ਼ ਦੇ ਅੰਤ ਉੱਤੇ ਆ ਗਏ ਹਾਂ, ਉੱਤੇ ਤੋਂ ਜਾਰੀ ਰੱਖਿਆ ਹੈ\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $total } ਵਿੱਚੋਂ { $current } ਮੇਲ\n       *[other] { $total } ਵਿੱਚੋਂ { $current } ਮੇਲ\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] { $limit } ਤੋਂ ਵੱਧ ਮੇਲ\n       *[other] { $limit } ਤੋਂ ਵੱਧ ਮੇਲ\n    }\npdfjs-find-not-found = ਵਾਕ ਨਹੀਂ ਲੱਭਿਆ\n\n## Predefined zoom values\n\npdfjs-page-scale-width = ਸਫ਼ੇ ਦੀ ਚੌੜਾਈ\npdfjs-page-scale-fit = ਸਫ਼ਾ ਫਿੱਟ\npdfjs-page-scale-auto = ਆਟੋਮੈਟਿਕ ਜ਼ੂਮ ਕਰੋ\npdfjs-page-scale-actual = ਆਟੋਮੈਟਿਕ ਆਕਾਰ\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = ਸਫ਼ਾ { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = PDF ਲੋਡ ਕਰਨ ਦੇ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ।\npdfjs-invalid-file-error = ਗਲਤ ਜਾਂ ਨਿਕਾਰਾ PDF ਫਾਈਲ ਹੈ।\npdfjs-missing-file-error = ਨਾ-ਮੌਜੂਦ PDF ਫਾਈਲ।\npdfjs-unexpected-response-error = ਅਣਜਾਣ ਸਰਵਰ ਜਵਾਬ।\npdfjs-rendering-error = ਸਫ਼ਾ ਰੈਡਰ ਕਰਨ ਦੇ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ।\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } ਵਿਆਖਿਆ]\n\n## Password\n\npdfjs-password-label = ਇਹ PDF ਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਪਾਸਵਰਡ ਦਿਉ।\npdfjs-password-invalid = ਗਲਤ ਪਾਸਵਰਡ। ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ।\npdfjs-password-ok-button = ਠੀਕ ਹੈ\npdfjs-password-cancel-button = ਰੱਦ ਕਰੋ\npdfjs-web-fonts-disabled = ਵੈਬ ਫੋਂਟ ਬੰਦ ਹਨ: ਇੰਬੈਡ PDF ਫੋਂਟ ਨੂੰ ਵਰਤਣ ਲਈ ਅਸਮਰੱਥ ਹੈ।\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = ਲਿਖਤ\npdfjs-editor-free-text-button-label = ਲਿਖਤ\npdfjs-editor-ink-button =\n    .title = ਵਾਹੋ\npdfjs-editor-ink-button-label = ਵਾਹੋ\npdfjs-editor-stamp-button =\n    .title = ਚਿੱਤਰ ਜੋੜੋ ਜਾਂ ਸੋਧੋ\npdfjs-editor-stamp-button-label = ਚਿੱਤਰ ਜੋੜੋ ਜਾਂ ਸੋਧੋ\npdfjs-editor-highlight-button =\n    .title = ਹਾਈਲਾਈਟ\npdfjs-editor-highlight-button-label = ਹਾਈਲਾਈਟ\npdfjs-highlight-floating-button =\n    .title = ਹਾਈਲਾਈਟ\npdfjs-highlight-floating-button1 =\n    .title = ਹਾਈਲਾਈਟ\n    .aria-label = ਹਾਈਲਾਈਟ\npdfjs-highlight-floating-button-label = ਹਾਈਲਾਈਟ\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = ਡਰਾਇੰਗ ਨੂੰ ਹਟਾਓ\npdfjs-editor-remove-freetext-button =\n    .title = ਲਿਖਤ ਨੂੰ ਹਟਾਓ\npdfjs-editor-remove-stamp-button =\n    .title = ਚਿੱਤਰ ਨੂੰ ਹਟਾਓ\npdfjs-editor-remove-highlight-button =\n    .title = ਹਾਈਲਾਈਟ ਨੂੰ ਹਟਾਓ\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = ਰੰਗ\npdfjs-editor-free-text-size-input = ਆਕਾਰ\npdfjs-editor-ink-color-input = ਰੰਗ\npdfjs-editor-ink-thickness-input = ਮੋਟਾਈ\npdfjs-editor-ink-opacity-input = ਧੁੰਦਲਾਪਨ\npdfjs-editor-stamp-add-image-button =\n    .title = ਚਿੱਤਰ ਜੋੜੋ\npdfjs-editor-stamp-add-image-button-label = ਚਿੱਤਰ ਜੋੜੋ\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = ਮੋਟਾਈ\npdfjs-editor-free-highlight-thickness-title =\n    .title = ਚੀਜ਼ਾਂ ਨੂੰ ਹੋਰ ਲਿਖਤਾਂ ਤੋਂ ਉਘਾੜਨ ਸਮੇਂ ਮੋਟਾਈ ਨੂੰ ਬਦਲੋ\npdfjs-free-text =\n    .aria-label = ਲਿਖਤ ਐਡੀਟਰ\npdfjs-free-text-default-content = …ਲਿਖਣਾ ਸ਼ੁਰੂ ਕਰੋ\npdfjs-ink =\n    .aria-label = ਵਹਾਉਣ ਐਡੀਟਰ\npdfjs-ink-canvas =\n    .aria-label = ਵਰਤੋਂਕਾਰ ਵਲੋਂ ਬਣਾਇਆ ਚਿੱਤਰ\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = ਬਦਲਵੀਂ ਲਿਖਤ\npdfjs-editor-alt-text-edit-button-label = ਬਦਲਵੀ ਲਿਖਤ ਨੂੰ ਸੋਧੋ\npdfjs-editor-alt-text-dialog-label = ਚੋਣ ਕਰੋ\npdfjs-editor-alt-text-dialog-description = ਚਿੱਤਰ ਨਾ ਦਿੱਸਣ ਜਾਂ ਲੋਡ ਨਾ ਹੋਣ ਦੀ ਹਾਲਤ ਵਿੱਚ Alt ਲਿਖਤ (ਬਦਲਵੀਂ ਲਿਖਤ) ਲੋਕਾਂ ਲਈ ਮਦਦਗਾਰ ਹੁੰਦੀ ਹੈ।\npdfjs-editor-alt-text-add-description-label = ਵਰਣਨ ਜੋੜੋ\npdfjs-editor-alt-text-add-description-description = 1-2 ਵਾਕ ਰੱਖੋ, ਜੋ ਕਿ ਵਿਸ਼ੇ, ਸੈਟਿੰਗ ਜਾਂ ਕਾਰਵਾਈਆਂ ਬਾਰੇ ਦਰਸਾਉਂਦੇ ਹੋਣ।\npdfjs-editor-alt-text-mark-decorative-label = ਸਜਾਵਟ ਵਜੋਂ ਨਿਸ਼ਾਨ ਲਾਇਆ\npdfjs-editor-alt-text-mark-decorative-description = ਇਸ ਨੂੰ ਸਜਾਵਟੀ ਚਿੱਤਰਾਂ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ ਜਿਵੇਂ ਕਿ ਹਾਸ਼ੀਆ ਜਾਂ ਵਾਟਰਮਾਰਕ ਆਦਿ।\npdfjs-editor-alt-text-cancel-button = ਰੱਦ ਕਰੋ\npdfjs-editor-alt-text-save-button = ਸੰਭਾਲੋ\npdfjs-editor-alt-text-decorative-tooltip = ਸਜਾਵਟ ਵਜੋਂ ਨਿਸ਼ਾਨ ਲਾਓ\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = ਮਿਸਾਲ ਵਜੋਂ, “ਗੱਭਰੂ ਭੋਜਨ ਲੈ ਕੇ ਮੇਜ਼ ਉੱਤੇ ਬੈਠਾ ਹੈ”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = ਉੱਤੇ ਖੱਬਾ ਕੋਨਾ — ਮੁੜ-ਆਕਾਰ ਕਰੋ\npdfjs-editor-resizer-label-top-middle = ਉੱਤੇ ਮੱਧ — ਮੁੜ-ਆਕਾਰ ਕਰੋ\npdfjs-editor-resizer-label-top-right = ਉੱਤੇ ਸੱਜਾ ਕੋਨਾ — ਮੁੜ-ਆਕਾਰ ਕਰੋ\npdfjs-editor-resizer-label-middle-right = ਮੱਧ ਸੱਜਾ — ਮੁੜ-ਆਕਾਰ ਕਰੋ\npdfjs-editor-resizer-label-bottom-right = ਹੇਠਾਂ ਸੱਜਾ ਕੋਨਾ — ਮੁੜ-ਆਕਾਰ ਕਰੋ\npdfjs-editor-resizer-label-bottom-middle = ਹੇਠਾਂ ਮੱਧ — ਮੁੜ-ਆਕਾਰ ਕਰੋ\npdfjs-editor-resizer-label-bottom-left = ਹੇਠਾਂ ਖੱਬਾ ਕੋਨਾ — ਮੁੜ-ਆਕਾਰ ਕਰੋ\npdfjs-editor-resizer-label-middle-left = ਮੱਧ ਖੱਬਾ — ਮੁੜ-ਆਕਾਰ ਕਰੋ\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = ਹਾਈਟਲਾਈਟ ਦਾ ਰੰਗ\npdfjs-editor-colorpicker-button =\n    .title = ਰੰਗ ਨੂੰ ਬਦਲੋ\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = ਰੰਗ ਚੋਣਾਂ\npdfjs-editor-colorpicker-yellow =\n    .title = ਪੀਲਾ\npdfjs-editor-colorpicker-green =\n    .title = ਹਰਾ\npdfjs-editor-colorpicker-blue =\n    .title = ਨੀਲਾ\npdfjs-editor-colorpicker-pink =\n    .title = ਗੁਲਾਬੀ\npdfjs-editor-colorpicker-red =\n    .title = ਲਾਲ\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = ਸਭ ਵੇਖੋ\npdfjs-editor-highlight-show-all-button =\n    .title = ਸਭ ਵੇਖੋ\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/pl/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Poprzednia strona\npdfjs-previous-button-label = Poprzednia\npdfjs-next-button =\n    .title = Następna strona\npdfjs-next-button-label = Następna\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Strona\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = z { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } z { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Pomniejsz\npdfjs-zoom-out-button-label = Pomniejsz\npdfjs-zoom-in-button =\n    .title = Powiększ\npdfjs-zoom-in-button-label = Powiększ\npdfjs-zoom-select =\n    .title = Skala\npdfjs-presentation-mode-button =\n    .title = Przełącz na tryb prezentacji\npdfjs-presentation-mode-button-label = Tryb prezentacji\npdfjs-open-file-button =\n    .title = Otwórz plik\npdfjs-open-file-button-label = Otwórz\npdfjs-print-button =\n    .title = Drukuj\npdfjs-print-button-label = Drukuj\npdfjs-save-button =\n    .title = Zapisz\npdfjs-save-button-label = Zapisz\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Pobierz\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Pobierz\npdfjs-bookmark-button =\n    .title = Bieżąca strona (adres do otwarcia na bieżącej stronie)\npdfjs-bookmark-button-label = Bieżąca strona\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Otwórz w aplikacji\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Otwórz w aplikacji\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Narzędzia\npdfjs-tools-button-label = Narzędzia\npdfjs-first-page-button =\n    .title = Przejdź do pierwszej strony\npdfjs-first-page-button-label = Przejdź do pierwszej strony\npdfjs-last-page-button =\n    .title = Przejdź do ostatniej strony\npdfjs-last-page-button-label = Przejdź do ostatniej strony\npdfjs-page-rotate-cw-button =\n    .title = Obróć zgodnie z ruchem wskazówek zegara\npdfjs-page-rotate-cw-button-label = Obróć zgodnie z ruchem wskazówek zegara\npdfjs-page-rotate-ccw-button =\n    .title = Obróć przeciwnie do ruchu wskazówek zegara\npdfjs-page-rotate-ccw-button-label = Obróć przeciwnie do ruchu wskazówek zegara\npdfjs-cursor-text-select-tool-button =\n    .title = Włącz narzędzie zaznaczania tekstu\npdfjs-cursor-text-select-tool-button-label = Narzędzie zaznaczania tekstu\npdfjs-cursor-hand-tool-button =\n    .title = Włącz narzędzie rączka\npdfjs-cursor-hand-tool-button-label = Narzędzie rączka\npdfjs-scroll-page-button =\n    .title = Przewijaj strony\npdfjs-scroll-page-button-label = Przewijanie stron\npdfjs-scroll-vertical-button =\n    .title = Przewijaj dokument w pionie\npdfjs-scroll-vertical-button-label = Przewijanie pionowe\npdfjs-scroll-horizontal-button =\n    .title = Przewijaj dokument w poziomie\npdfjs-scroll-horizontal-button-label = Przewijanie poziome\npdfjs-scroll-wrapped-button =\n    .title = Strony dokumentu wyświetlaj i przewijaj w kolumnach\npdfjs-scroll-wrapped-button-label = Widok dwóch stron\npdfjs-spread-none-button =\n    .title = Nie ustawiaj stron obok siebie\npdfjs-spread-none-button-label = Brak kolumn\npdfjs-spread-odd-button =\n    .title = Strony nieparzyste ustawiaj na lewo od parzystych\npdfjs-spread-odd-button-label = Nieparzyste po lewej\npdfjs-spread-even-button =\n    .title = Strony parzyste ustawiaj na lewo od nieparzystych\npdfjs-spread-even-button-label = Parzyste po lewej\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Właściwości dokumentu…\npdfjs-document-properties-button-label = Właściwości dokumentu…\npdfjs-document-properties-file-name = Nazwa pliku:\npdfjs-document-properties-file-size = Rozmiar pliku:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } B)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } B)\npdfjs-document-properties-title = Tytuł:\npdfjs-document-properties-author = Autor:\npdfjs-document-properties-subject = Temat:\npdfjs-document-properties-keywords = Słowa kluczowe:\npdfjs-document-properties-creation-date = Data utworzenia:\npdfjs-document-properties-modification-date = Data modyfikacji:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Utworzony przez:\npdfjs-document-properties-producer = PDF wyprodukowany przez:\npdfjs-document-properties-version = Wersja PDF:\npdfjs-document-properties-page-count = Liczba stron:\npdfjs-document-properties-page-size = Wymiary strony:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = pionowa\npdfjs-document-properties-page-size-orientation-landscape = pozioma\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = US Letter\npdfjs-document-properties-page-size-name-legal = US Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width }×{ $height } { $unit } (orientacja { $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width }×{ $height } { $unit } ({ $name }, orientacja { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Szybki podgląd w Internecie:\npdfjs-document-properties-linearized-yes = tak\npdfjs-document-properties-linearized-no = nie\npdfjs-document-properties-close-button = Zamknij\n\n## Print\n\npdfjs-print-progress-message = Przygotowywanie dokumentu do druku…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Anuluj\npdfjs-printing-not-supported = Ostrzeżenie: drukowanie nie jest w pełni obsługiwane przez tę przeglądarkę.\npdfjs-printing-not-ready = Ostrzeżenie: dokument PDF nie jest całkowicie wczytany, więc nie można go wydrukować.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Przełącz panel boczny\npdfjs-toggle-sidebar-notification-button =\n    .title = Przełącz panel boczny (dokument zawiera konspekt/załączniki/warstwy)\npdfjs-toggle-sidebar-button-label = Przełącz panel boczny\npdfjs-document-outline-button =\n    .title = Konspekt dokumentu (podwójne kliknięcie rozwija lub zwija wszystkie pozycje)\npdfjs-document-outline-button-label = Konspekt dokumentu\npdfjs-attachments-button =\n    .title = Załączniki\npdfjs-attachments-button-label = Załączniki\npdfjs-layers-button =\n    .title = Warstwy (podwójne kliknięcie przywraca wszystkie warstwy do stanu domyślnego)\npdfjs-layers-button-label = Warstwy\npdfjs-thumbs-button =\n    .title = Miniatury\npdfjs-thumbs-button-label = Miniatury\npdfjs-current-outline-item-button =\n    .title = Znajdź bieżący element konspektu\npdfjs-current-outline-item-button-label = Bieżący element konspektu\npdfjs-findbar-button =\n    .title = Znajdź w dokumencie\npdfjs-findbar-button-label = Znajdź\npdfjs-additional-layers = Dodatkowe warstwy\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = { $page }. strona\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatura { $page }. strony\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Znajdź\n    .placeholder = Znajdź w dokumencie…\npdfjs-find-previous-button =\n    .title = Znajdź poprzednie wystąpienie tekstu\npdfjs-find-previous-button-label = Poprzednie\npdfjs-find-next-button =\n    .title = Znajdź następne wystąpienie tekstu\npdfjs-find-next-button-label = Następne\npdfjs-find-highlight-checkbox = Wyróżnianie wszystkich\npdfjs-find-match-case-checkbox-label = Rozróżnianie wielkości liter\npdfjs-find-match-diacritics-checkbox-label = Rozróżnianie liter diakrytyzowanych\npdfjs-find-entire-word-checkbox-label = Całe słowa\npdfjs-find-reached-top = Początek dokumentu. Wyszukiwanie od końca.\npdfjs-find-reached-bottom = Koniec dokumentu. Wyszukiwanie od początku.\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current }. z { $total } trafienia\n        [few] { $current }. z { $total } trafień\n       *[many] { $current }. z { $total } trafień\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Więcej niż { $limit } trafienie\n        [few] Więcej niż { $limit } trafienia\n       *[many] Więcej niż { $limit } trafień\n    }\npdfjs-find-not-found = Nie znaleziono tekstu\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Szerokość strony\npdfjs-page-scale-fit = Dopasowanie strony\npdfjs-page-scale-auto = Skala automatyczna\npdfjs-page-scale-actual = Rozmiar oryginalny\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = { $page }. strona\n\n## Loading indicator messages\n\npdfjs-loading-error = Podczas wczytywania dokumentu PDF wystąpił błąd.\npdfjs-invalid-file-error = Nieprawidłowy lub uszkodzony plik PDF.\npdfjs-missing-file-error = Brak pliku PDF.\npdfjs-unexpected-response-error = Nieoczekiwana odpowiedź serwera.\npdfjs-rendering-error = Podczas renderowania strony wystąpił błąd.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Przypis: { $type }]\n\n## Password\n\npdfjs-password-label = Wprowadź hasło, aby otworzyć ten dokument PDF.\npdfjs-password-invalid = Nieprawidłowe hasło. Proszę spróbować ponownie.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Anuluj\npdfjs-web-fonts-disabled = Czcionki sieciowe są wyłączone: nie można użyć osadzonych czcionek PDF.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Tekst\npdfjs-editor-free-text-button-label = Tekst\npdfjs-editor-ink-button =\n    .title = Rysunek\npdfjs-editor-ink-button-label = Rysunek\npdfjs-editor-stamp-button =\n    .title = Dodaj lub edytuj obrazy\npdfjs-editor-stamp-button-label = Dodaj lub edytuj obrazy\npdfjs-editor-highlight-button =\n    .title = Wyróżnij\npdfjs-editor-highlight-button-label = Wyróżnij\npdfjs-highlight-floating-button =\n    .title = Wyróżnij\npdfjs-highlight-floating-button1 =\n    .title = Wyróżnij\n    .aria-label = Wyróżnij\npdfjs-highlight-floating-button-label = Wyróżnij\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Usuń rysunek\npdfjs-editor-remove-freetext-button =\n    .title = Usuń tekst\npdfjs-editor-remove-stamp-button =\n    .title = Usuń obraz\npdfjs-editor-remove-highlight-button =\n    .title = Usuń wyróżnienie\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Kolor\npdfjs-editor-free-text-size-input = Rozmiar\npdfjs-editor-ink-color-input = Kolor\npdfjs-editor-ink-thickness-input = Grubość\npdfjs-editor-ink-opacity-input = Nieprzezroczystość\npdfjs-editor-stamp-add-image-button =\n    .title = Dodaj obraz\npdfjs-editor-stamp-add-image-button-label = Dodaj obraz\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Grubość\npdfjs-editor-free-highlight-thickness-title =\n    .title = Zmień grubość podczas wyróżniania elementów innych niż tekst\npdfjs-free-text =\n    .aria-label = Edytor tekstu\npdfjs-free-text-default-content = Zacznij pisać…\npdfjs-ink =\n    .aria-label = Edytor rysunku\npdfjs-ink-canvas =\n    .aria-label = Obraz utworzony przez użytkownika\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Tekst alternatywny\npdfjs-editor-alt-text-edit-button-label = Edytuj tekst alternatywny\npdfjs-editor-alt-text-dialog-label = Wybierz opcję\npdfjs-editor-alt-text-dialog-description = Tekst alternatywny pomaga, kiedy ktoś nie może zobaczyć obrazu lub gdy się nie wczytuje.\npdfjs-editor-alt-text-add-description-label = Dodaj opis\npdfjs-editor-alt-text-add-description-description = Staraj się napisać 1-2 zdania opisujące temat, miejsce lub działania.\npdfjs-editor-alt-text-mark-decorative-label = Oznacz jako dekoracyjne\npdfjs-editor-alt-text-mark-decorative-description = Używane w przypadku obrazów ozdobnych, takich jak obramowania lub znaki wodne.\npdfjs-editor-alt-text-cancel-button = Anuluj\npdfjs-editor-alt-text-save-button = Zapisz\npdfjs-editor-alt-text-decorative-tooltip = Oznaczone jako dekoracyjne\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Na przykład: „Młody człowiek siada przy stole, aby zjeść posiłek”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Lewy górny róg — zmień rozmiar\npdfjs-editor-resizer-label-top-middle = Górny środkowy — zmień rozmiar\npdfjs-editor-resizer-label-top-right = Prawy górny róg — zmień rozmiar\npdfjs-editor-resizer-label-middle-right = Prawy środkowy — zmień rozmiar\npdfjs-editor-resizer-label-bottom-right = Prawy dolny róg — zmień rozmiar\npdfjs-editor-resizer-label-bottom-middle = Dolny środkowy — zmień rozmiar\npdfjs-editor-resizer-label-bottom-left = Lewy dolny róg — zmień rozmiar\npdfjs-editor-resizer-label-middle-left = Lewy środkowy — zmień rozmiar\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Kolor wyróżnienia\npdfjs-editor-colorpicker-button =\n    .title = Zmień kolor\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Wybór kolorów\npdfjs-editor-colorpicker-yellow =\n    .title = Żółty\npdfjs-editor-colorpicker-green =\n    .title = Zielony\npdfjs-editor-colorpicker-blue =\n    .title = Niebieski\npdfjs-editor-colorpicker-pink =\n    .title = Różowy\npdfjs-editor-colorpicker-red =\n    .title = Czerwony\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Pokaż wszystkie\npdfjs-editor-highlight-show-all-button =\n    .title = Pokaż wszystkie\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/pt-BR/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Página anterior\npdfjs-previous-button-label = Anterior\npdfjs-next-button =\n    .title = Próxima página\npdfjs-next-button-label = Próxima\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Página\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = de { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Reduzir\npdfjs-zoom-out-button-label = Reduzir\npdfjs-zoom-in-button =\n    .title = Ampliar\npdfjs-zoom-in-button-label = Ampliar\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Mudar para o modo de apresentação\npdfjs-presentation-mode-button-label = Modo de apresentação\npdfjs-open-file-button =\n    .title = Abrir arquivo\npdfjs-open-file-button-label = Abrir\npdfjs-print-button =\n    .title = Imprimir\npdfjs-print-button-label = Imprimir\npdfjs-save-button =\n    .title = Salvar\npdfjs-save-button-label = Salvar\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Baixar\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Baixar\npdfjs-bookmark-button =\n    .title = Página atual (ver URL da página atual)\npdfjs-bookmark-button-label = Pagina atual\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Ferramentas\npdfjs-tools-button-label = Ferramentas\npdfjs-first-page-button =\n    .title = Ir para a primeira página\npdfjs-first-page-button-label = Ir para a primeira página\npdfjs-last-page-button =\n    .title = Ir para a última página\npdfjs-last-page-button-label = Ir para a última página\npdfjs-page-rotate-cw-button =\n    .title = Girar no sentido horário\npdfjs-page-rotate-cw-button-label = Girar no sentido horário\npdfjs-page-rotate-ccw-button =\n    .title = Girar no sentido anti-horário\npdfjs-page-rotate-ccw-button-label = Girar no sentido anti-horário\npdfjs-cursor-text-select-tool-button =\n    .title = Ativar a ferramenta de seleção de texto\npdfjs-cursor-text-select-tool-button-label = Ferramenta de seleção de texto\npdfjs-cursor-hand-tool-button =\n    .title = Ativar ferramenta de deslocamento\npdfjs-cursor-hand-tool-button-label = Ferramenta de deslocamento\npdfjs-scroll-page-button =\n    .title = Usar rolagem de página\npdfjs-scroll-page-button-label = Rolagem de página\npdfjs-scroll-vertical-button =\n    .title = Usar deslocamento vertical\npdfjs-scroll-vertical-button-label = Deslocamento vertical\npdfjs-scroll-horizontal-button =\n    .title = Usar deslocamento horizontal\npdfjs-scroll-horizontal-button-label = Deslocamento horizontal\npdfjs-scroll-wrapped-button =\n    .title = Usar deslocamento contido\npdfjs-scroll-wrapped-button-label = Deslocamento contido\npdfjs-spread-none-button =\n    .title = Não reagrupar páginas\npdfjs-spread-none-button-label = Não estender\npdfjs-spread-odd-button =\n    .title = Agrupar páginas começando em páginas com números ímpares\npdfjs-spread-odd-button-label = Estender ímpares\npdfjs-spread-even-button =\n    .title = Agrupar páginas começando em páginas com números pares\npdfjs-spread-even-button-label = Estender pares\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Propriedades do documento…\npdfjs-document-properties-button-label = Propriedades do documento…\npdfjs-document-properties-file-name = Nome do arquivo:\npdfjs-document-properties-file-size = Tamanho do arquivo:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Título:\npdfjs-document-properties-author = Autor:\npdfjs-document-properties-subject = Assunto:\npdfjs-document-properties-keywords = Palavras-chave:\npdfjs-document-properties-creation-date = Data da criação:\npdfjs-document-properties-modification-date = Data da modificação:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Criação:\npdfjs-document-properties-producer = Criador do PDF:\npdfjs-document-properties-version = Versão do PDF:\npdfjs-document-properties-page-count = Número de páginas:\npdfjs-document-properties-page-size = Tamanho da página:\npdfjs-document-properties-page-size-unit-inches = pol.\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = retrato\npdfjs-document-properties-page-size-orientation-landscape = paisagem\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Carta\npdfjs-document-properties-page-size-name-legal = Jurídico\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Exibição web rápida:\npdfjs-document-properties-linearized-yes = Sim\npdfjs-document-properties-linearized-no = Não\npdfjs-document-properties-close-button = Fechar\n\n## Print\n\npdfjs-print-progress-message = Preparando documento para impressão…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress } %\npdfjs-print-progress-close-button = Cancelar\npdfjs-printing-not-supported = Aviso: a impressão não é totalmente suportada neste navegador.\npdfjs-printing-not-ready = Aviso: o PDF não está totalmente carregado para impressão.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Exibir/ocultar painel lateral\npdfjs-toggle-sidebar-notification-button =\n    .title = Exibir/ocultar painel (documento contém estrutura/anexos/camadas)\npdfjs-toggle-sidebar-button-label = Exibir/ocultar painel\npdfjs-document-outline-button =\n    .title = Mostrar estrutura do documento (duplo-clique expande/recolhe todos os itens)\npdfjs-document-outline-button-label = Estrutura do documento\npdfjs-attachments-button =\n    .title = Mostrar anexos\npdfjs-attachments-button-label = Anexos\npdfjs-layers-button =\n    .title = Mostrar camadas (duplo-clique redefine todas as camadas ao estado predefinido)\npdfjs-layers-button-label = Camadas\npdfjs-thumbs-button =\n    .title = Mostrar miniaturas\npdfjs-thumbs-button-label = Miniaturas\npdfjs-current-outline-item-button =\n    .title = Encontrar item atual da estrutura\npdfjs-current-outline-item-button-label = Item atual da estrutura\npdfjs-findbar-button =\n    .title = Procurar no documento\npdfjs-findbar-button-label = Procurar\npdfjs-additional-layers = Camadas adicionais\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Página { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatura da página { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Procurar\n    .placeholder = Procurar no documento…\npdfjs-find-previous-button =\n    .title = Procurar a ocorrência anterior da frase\npdfjs-find-previous-button-label = Anterior\npdfjs-find-next-button =\n    .title = Procurar a próxima ocorrência da frase\npdfjs-find-next-button-label = Próxima\npdfjs-find-highlight-checkbox = Destacar tudo\npdfjs-find-match-case-checkbox-label = Diferenciar maiúsculas/minúsculas\npdfjs-find-match-diacritics-checkbox-label = Considerar acentuação\npdfjs-find-entire-word-checkbox-label = Palavras completas\npdfjs-find-reached-top = Início do documento alcançado, continuando do fim\npdfjs-find-reached-bottom = Fim do documento alcançado, continuando do início\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } de { $total } ocorrência\n       *[other] { $current } de { $total } ocorrências\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Mais de { $limit } ocorrência\n       *[other] Mais de { $limit } ocorrências\n    }\npdfjs-find-not-found = Não encontrado\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Largura da página\npdfjs-page-scale-fit = Ajustar à janela\npdfjs-page-scale-auto = Zoom automático\npdfjs-page-scale-actual = Tamanho real\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Página { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Ocorreu um erro ao carregar o PDF.\npdfjs-invalid-file-error = Arquivo PDF corrompido ou inválido.\npdfjs-missing-file-error = Arquivo PDF ausente.\npdfjs-unexpected-response-error = Resposta inesperada do servidor.\npdfjs-rendering-error = Ocorreu um erro ao renderizar a página.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Anotação { $type }]\n\n## Password\n\npdfjs-password-label = Forneça a senha para abrir este arquivo PDF.\npdfjs-password-invalid = Senha inválida. Tente novamente.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Cancelar\npdfjs-web-fonts-disabled = As fontes web estão desativadas: não foi possível usar fontes incorporadas do PDF.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Texto\npdfjs-editor-free-text-button-label = Texto\npdfjs-editor-ink-button =\n    .title = Desenho\npdfjs-editor-ink-button-label = Desenho\npdfjs-editor-stamp-button =\n    .title = Adicionar ou editar imagens\npdfjs-editor-stamp-button-label = Adicionar ou editar imagens\npdfjs-editor-highlight-button =\n    .title = Destaque\npdfjs-editor-highlight-button-label = Destaque\npdfjs-highlight-floating-button =\n    .title = Destaque\npdfjs-highlight-floating-button1 =\n    .title = Destaque\n    .aria-label = Destaque\npdfjs-highlight-floating-button-label = Destaque\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Remover desenho\npdfjs-editor-remove-freetext-button =\n    .title = Remover texto\npdfjs-editor-remove-stamp-button =\n    .title = Remover imagem\npdfjs-editor-remove-highlight-button =\n    .title = Remover destaque\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Cor\npdfjs-editor-free-text-size-input = Tamanho\npdfjs-editor-ink-color-input = Cor\npdfjs-editor-ink-thickness-input = Espessura\npdfjs-editor-ink-opacity-input = Opacidade\npdfjs-editor-stamp-add-image-button =\n    .title = Adicionar imagem\npdfjs-editor-stamp-add-image-button-label = Adicionar imagem\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Espessura\npdfjs-editor-free-highlight-thickness-title =\n    .title = Mudar espessura ao destacar itens que não são texto\npdfjs-free-text =\n    .aria-label = Editor de texto\npdfjs-free-text-default-content = Comece digitando…\npdfjs-ink =\n    .aria-label = Editor de desenho\npdfjs-ink-canvas =\n    .aria-label = Imagem criada pelo usuário\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Texto alternativo\npdfjs-editor-alt-text-edit-button-label = Editar texto alternativo\npdfjs-editor-alt-text-dialog-label = Escolha uma opção\npdfjs-editor-alt-text-dialog-description = O texto alternativo ajuda quando uma imagem não aparece ou não é carregada.\npdfjs-editor-alt-text-add-description-label = Adicionar uma descrição\npdfjs-editor-alt-text-add-description-description = Procure usar uma ou duas frases que descrevam o assunto, cenário ou ação.\npdfjs-editor-alt-text-mark-decorative-label = Marcar como decorativa\npdfjs-editor-alt-text-mark-decorative-description = Isto é usado em imagens ornamentais, como bordas ou marcas d'água.\npdfjs-editor-alt-text-cancel-button = Cancelar\npdfjs-editor-alt-text-save-button = Salvar\npdfjs-editor-alt-text-decorative-tooltip = Marcado como decorativa\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Por exemplo, “Um jovem senta-se à mesa para comer uma refeição”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Canto superior esquerdo — redimensionar\npdfjs-editor-resizer-label-top-middle = No centro do topo — redimensionar\npdfjs-editor-resizer-label-top-right = Canto superior direito — redimensionar\npdfjs-editor-resizer-label-middle-right = No meio à direita — redimensionar\npdfjs-editor-resizer-label-bottom-right = Canto inferior direito — redimensionar\npdfjs-editor-resizer-label-bottom-middle = No centro da base — redimensionar\npdfjs-editor-resizer-label-bottom-left = Canto inferior esquerdo — redimensionar\npdfjs-editor-resizer-label-middle-left = No meio à esquerda — redimensionar\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Cor de destaque\npdfjs-editor-colorpicker-button =\n    .title = Mudar cor\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Opções de cores\npdfjs-editor-colorpicker-yellow =\n    .title = Amarelo\npdfjs-editor-colorpicker-green =\n    .title = Verde\npdfjs-editor-colorpicker-blue =\n    .title = Azul\npdfjs-editor-colorpicker-pink =\n    .title = Rosa\npdfjs-editor-colorpicker-red =\n    .title = Vermelho\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Mostrar todos\npdfjs-editor-highlight-show-all-button =\n    .title = Mostrar todos\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/pt-PT/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Página anterior\npdfjs-previous-button-label = Anterior\npdfjs-next-button =\n    .title = Página seguinte\npdfjs-next-button-label = Seguinte\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Página\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = de { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Reduzir\npdfjs-zoom-out-button-label = Reduzir\npdfjs-zoom-in-button =\n    .title = Ampliar\npdfjs-zoom-in-button-label = Ampliar\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Trocar para o modo de apresentação\npdfjs-presentation-mode-button-label = Modo de apresentação\npdfjs-open-file-button =\n    .title = Abrir ficheiro\npdfjs-open-file-button-label = Abrir\npdfjs-print-button =\n    .title = Imprimir\npdfjs-print-button-label = Imprimir\npdfjs-save-button =\n    .title = Guardar\npdfjs-save-button-label = Guardar\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Transferir\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Transferir\npdfjs-bookmark-button =\n    .title = Página atual (ver URL da página atual)\npdfjs-bookmark-button-label = Pagina atual\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Abrir na aplicação\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Abrir na aplicação\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Ferramentas\npdfjs-tools-button-label = Ferramentas\npdfjs-first-page-button =\n    .title = Ir para a primeira página\npdfjs-first-page-button-label = Ir para a primeira página\npdfjs-last-page-button =\n    .title = Ir para a última página\npdfjs-last-page-button-label = Ir para a última página\npdfjs-page-rotate-cw-button =\n    .title = Rodar à direita\npdfjs-page-rotate-cw-button-label = Rodar à direita\npdfjs-page-rotate-ccw-button =\n    .title = Rodar à esquerda\npdfjs-page-rotate-ccw-button-label = Rodar à esquerda\npdfjs-cursor-text-select-tool-button =\n    .title = Ativar ferramenta de seleção de texto\npdfjs-cursor-text-select-tool-button-label = Ferramenta de seleção de texto\npdfjs-cursor-hand-tool-button =\n    .title = Ativar ferramenta de mão\npdfjs-cursor-hand-tool-button-label = Ferramenta de mão\npdfjs-scroll-page-button =\n    .title = Utilizar deslocamento da página\npdfjs-scroll-page-button-label = Deslocamento da página\npdfjs-scroll-vertical-button =\n    .title = Utilizar deslocação vertical\npdfjs-scroll-vertical-button-label = Deslocação vertical\npdfjs-scroll-horizontal-button =\n    .title = Utilizar deslocação horizontal\npdfjs-scroll-horizontal-button-label = Deslocação horizontal\npdfjs-scroll-wrapped-button =\n    .title = Utilizar deslocação encapsulada\npdfjs-scroll-wrapped-button-label = Deslocação encapsulada\npdfjs-spread-none-button =\n    .title = Não juntar páginas dispersas\npdfjs-spread-none-button-label = Sem spreads\npdfjs-spread-odd-button =\n    .title = Juntar páginas dispersas a partir de páginas com números ímpares\npdfjs-spread-odd-button-label = Spreads ímpares\npdfjs-spread-even-button =\n    .title = Juntar páginas dispersas a partir de páginas com números pares\npdfjs-spread-even-button-label = Spreads pares\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Propriedades do documento…\npdfjs-document-properties-button-label = Propriedades do documento…\npdfjs-document-properties-file-name = Nome do ficheiro:\npdfjs-document-properties-file-size = Tamanho do ficheiro:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Título:\npdfjs-document-properties-author = Autor:\npdfjs-document-properties-subject = Assunto:\npdfjs-document-properties-keywords = Palavras-chave:\npdfjs-document-properties-creation-date = Data de criação:\npdfjs-document-properties-modification-date = Data de modificação:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Criador:\npdfjs-document-properties-producer = Produtor de PDF:\npdfjs-document-properties-version = Versão do PDF:\npdfjs-document-properties-page-count = N.º de páginas:\npdfjs-document-properties-page-size = Tamanho da página:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = retrato\npdfjs-document-properties-page-size-orientation-landscape = paisagem\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Carta\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Vista rápida web:\npdfjs-document-properties-linearized-yes = Sim\npdfjs-document-properties-linearized-no = Não\npdfjs-document-properties-close-button = Fechar\n\n## Print\n\npdfjs-print-progress-message = A preparar o documento para impressão…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Cancelar\npdfjs-printing-not-supported = Aviso: a impressão não é totalmente suportada por este navegador.\npdfjs-printing-not-ready = Aviso: o PDF ainda não está totalmente carregado.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Alternar barra lateral\npdfjs-toggle-sidebar-notification-button =\n    .title = Alternar barra lateral (o documento contém contornos/anexos/camadas)\npdfjs-toggle-sidebar-button-label = Alternar barra lateral\npdfjs-document-outline-button =\n    .title = Mostrar esquema do documento (duplo clique para expandir/colapsar todos os itens)\npdfjs-document-outline-button-label = Esquema do documento\npdfjs-attachments-button =\n    .title = Mostrar anexos\npdfjs-attachments-button-label = Anexos\npdfjs-layers-button =\n    .title = Mostrar camadas (clique duas vezes para repor todas as camadas para o estado predefinido)\npdfjs-layers-button-label = Camadas\npdfjs-thumbs-button =\n    .title = Mostrar miniaturas\npdfjs-thumbs-button-label = Miniaturas\npdfjs-current-outline-item-button =\n    .title = Encontrar o item atualmente destacado\npdfjs-current-outline-item-button-label = Item atualmente destacado\npdfjs-findbar-button =\n    .title = Localizar em documento\npdfjs-findbar-button-label = Localizar\npdfjs-additional-layers = Camadas adicionais\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Página { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatura da página { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Localizar\n    .placeholder = Localizar em documento…\npdfjs-find-previous-button =\n    .title = Localizar ocorrência anterior da frase\npdfjs-find-previous-button-label = Anterior\npdfjs-find-next-button =\n    .title = Localizar ocorrência seguinte da frase\npdfjs-find-next-button-label = Seguinte\npdfjs-find-highlight-checkbox = Destacar tudo\npdfjs-find-match-case-checkbox-label = Correspondência\npdfjs-find-match-diacritics-checkbox-label = Corresponder diacríticos\npdfjs-find-entire-word-checkbox-label = Palavras completas\npdfjs-find-reached-top = Topo do documento atingido, a continuar a partir do fundo\npdfjs-find-reached-bottom = Fim do documento atingido, a continuar a partir do topo\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } de { $total } correspondência\n       *[other] { $current } de { $total } correspondências\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Mais de { $limit } correspondência\n       *[other] Mais de { $limit } correspondências\n    }\npdfjs-find-not-found = Frase não encontrada\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Ajustar à largura\npdfjs-page-scale-fit = Ajustar à página\npdfjs-page-scale-auto = Zoom automático\npdfjs-page-scale-actual = Tamanho real\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Página { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Ocorreu um erro ao carregar o PDF.\npdfjs-invalid-file-error = Ficheiro PDF inválido ou danificado.\npdfjs-missing-file-error = Ficheiro PDF inexistente.\npdfjs-unexpected-response-error = Resposta inesperada do servidor.\npdfjs-rendering-error = Ocorreu um erro ao processar a página.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Anotação { $type }]\n\n## Password\n\npdfjs-password-label = Introduza a palavra-passe para abrir este ficheiro PDF.\npdfjs-password-invalid = Palavra-passe inválida. Por favor, tente novamente.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Cancelar\npdfjs-web-fonts-disabled = Os tipos de letra web estão desativados: não é possível utilizar os tipos de letra PDF embutidos.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Texto\npdfjs-editor-free-text-button-label = Texto\npdfjs-editor-ink-button =\n    .title = Desenhar\npdfjs-editor-ink-button-label = Desenhar\npdfjs-editor-stamp-button =\n    .title = Adicionar ou editar imagens\npdfjs-editor-stamp-button-label = Adicionar ou editar imagens\npdfjs-editor-highlight-button =\n    .title = Destaque\npdfjs-editor-highlight-button-label = Destaque\npdfjs-highlight-floating-button =\n    .title = Destaque\npdfjs-highlight-floating-button1 =\n    .title = Realçar\n    .aria-label = Realçar\npdfjs-highlight-floating-button-label = Realçar\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Remover desenho\npdfjs-editor-remove-freetext-button =\n    .title = Remover texto\npdfjs-editor-remove-stamp-button =\n    .title = Remover imagem\npdfjs-editor-remove-highlight-button =\n    .title = Remover destaque\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Cor\npdfjs-editor-free-text-size-input = Tamanho\npdfjs-editor-ink-color-input = Cor\npdfjs-editor-ink-thickness-input = Espessura\npdfjs-editor-ink-opacity-input = Opacidade\npdfjs-editor-stamp-add-image-button =\n    .title = Adicionar imagem\npdfjs-editor-stamp-add-image-button-label = Adicionar imagem\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Espessura\npdfjs-editor-free-highlight-thickness-title =\n    .title = Alterar espessura quando destacar itens que não sejam texto\npdfjs-free-text =\n    .aria-label = Editor de texto\npdfjs-free-text-default-content = Começar a digitar…\npdfjs-ink =\n    .aria-label = Editor de desenho\npdfjs-ink-canvas =\n    .aria-label = Imagem criada pelo utilizador\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Texto alternativo\npdfjs-editor-alt-text-edit-button-label = Editar texto alternativo\npdfjs-editor-alt-text-dialog-label = Escolher uma opção\npdfjs-editor-alt-text-dialog-description = O texto alternativo (texto alternativo) ajuda quando as pessoas não conseguem ver a imagem ou quando a mesma não é carregada.\npdfjs-editor-alt-text-add-description-label = Adicionar uma descrição\npdfjs-editor-alt-text-add-description-description = Aponte para 1-2 frases que descrevam o assunto, definição ou ações.\npdfjs-editor-alt-text-mark-decorative-label = Marcar como decorativa\npdfjs-editor-alt-text-mark-decorative-description = Isto é utilizado para imagens decorativas, tais como limites ou marcas d'água.\npdfjs-editor-alt-text-cancel-button = Cancelar\npdfjs-editor-alt-text-save-button = Guardar\npdfjs-editor-alt-text-decorative-tooltip = Marcada como decorativa\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Por exemplo, “Um jovem senta-se à mesa para comer uma refeição”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Canto superior esquerdo — redimensionar\npdfjs-editor-resizer-label-top-middle = Superior ao centro — redimensionar\npdfjs-editor-resizer-label-top-right = Canto superior direito — redimensionar\npdfjs-editor-resizer-label-middle-right = Centro à direita — redimensionar\npdfjs-editor-resizer-label-bottom-right = Canto inferior direito — redimensionar\npdfjs-editor-resizer-label-bottom-middle = Inferior ao centro — redimensionar\npdfjs-editor-resizer-label-bottom-left = Canto inferior esquerdo — redimensionar\npdfjs-editor-resizer-label-middle-left = Centro à esquerda — redimensionar\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Cor de destaque\npdfjs-editor-colorpicker-button =\n    .title = Alterar cor\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Escolhas de cor\npdfjs-editor-colorpicker-yellow =\n    .title = Amarelo\npdfjs-editor-colorpicker-green =\n    .title = Verde\npdfjs-editor-colorpicker-blue =\n    .title = Azul\npdfjs-editor-colorpicker-pink =\n    .title = Rosa\npdfjs-editor-colorpicker-red =\n    .title = Vermelho\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Mostrar tudo\npdfjs-editor-highlight-show-all-button =\n    .title = Mostrar tudo\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/rm/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Pagina precedenta\npdfjs-previous-button-label = Enavos\npdfjs-next-button =\n    .title = Proxima pagina\npdfjs-next-button-label = Enavant\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Pagina\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = da { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } da { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Empitschnir\npdfjs-zoom-out-button-label = Empitschnir\npdfjs-zoom-in-button =\n    .title = Engrondir\npdfjs-zoom-in-button-label = Engrondir\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Midar en il modus da preschentaziun\npdfjs-presentation-mode-button-label = Modus da preschentaziun\npdfjs-open-file-button =\n    .title = Avrir datoteca\npdfjs-open-file-button-label = Avrir\npdfjs-print-button =\n    .title = Stampar\npdfjs-print-button-label = Stampar\npdfjs-save-button =\n    .title = Memorisar\npdfjs-save-button-label = Memorisar\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Telechargiar\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Telechargiar\npdfjs-bookmark-button =\n    .title = Pagina actuala (mussar l'URL da la pagina actuala)\npdfjs-bookmark-button-label = Pagina actuala\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Utensils\npdfjs-tools-button-label = Utensils\npdfjs-first-page-button =\n    .title = Siglir a l'emprima pagina\npdfjs-first-page-button-label = Siglir a l'emprima pagina\npdfjs-last-page-button =\n    .title = Siglir a la davosa pagina\npdfjs-last-page-button-label = Siglir a la davosa pagina\npdfjs-page-rotate-cw-button =\n    .title = Rotar en direcziun da l'ura\npdfjs-page-rotate-cw-button-label = Rotar en direcziun da l'ura\npdfjs-page-rotate-ccw-button =\n    .title = Rotar en direcziun cuntraria a l'ura\npdfjs-page-rotate-ccw-button-label = Rotar en direcziun cuntraria a l'ura\npdfjs-cursor-text-select-tool-button =\n    .title = Activar l'utensil per selecziunar text\npdfjs-cursor-text-select-tool-button-label = Utensil per selecziunar text\npdfjs-cursor-hand-tool-button =\n    .title = Activar l'utensil da maun\npdfjs-cursor-hand-tool-button-label = Utensil da maun\npdfjs-scroll-page-button =\n    .title = Utilisar la defilada per pagina\npdfjs-scroll-page-button-label = Defilada per pagina\npdfjs-scroll-vertical-button =\n    .title = Utilisar il defilar vertical\npdfjs-scroll-vertical-button-label = Defilar vertical\npdfjs-scroll-horizontal-button =\n    .title = Utilisar il defilar orizontal\npdfjs-scroll-horizontal-button-label = Defilar orizontal\npdfjs-scroll-wrapped-button =\n    .title = Utilisar il defilar en colonnas\npdfjs-scroll-wrapped-button-label = Defilar en colonnas\npdfjs-spread-none-button =\n    .title = Betg parallelisar las paginas\npdfjs-spread-none-button-label = Betg parallel\npdfjs-spread-odd-button =\n    .title = Parallelisar las paginas cun cumenzar cun paginas spèras\npdfjs-spread-odd-button-label = Parallel spèr\npdfjs-spread-even-button =\n    .title = Parallelisar las paginas cun cumenzar cun paginas pèras\npdfjs-spread-even-button-label = Parallel pèr\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Caracteristicas dal document…\npdfjs-document-properties-button-label = Caracteristicas dal document…\npdfjs-document-properties-file-name = Num da la datoteca:\npdfjs-document-properties-file-size = Grondezza da la datoteca:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Titel:\npdfjs-document-properties-author = Autur:\npdfjs-document-properties-subject = Tema:\npdfjs-document-properties-keywords = Chavazzins:\npdfjs-document-properties-creation-date = Data da creaziun:\npdfjs-document-properties-modification-date = Data da modificaziun:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date } { $time }\npdfjs-document-properties-creator = Creà da:\npdfjs-document-properties-producer = Creà il PDF cun:\npdfjs-document-properties-version = Versiun da PDF:\npdfjs-document-properties-page-count = Dumber da paginas:\npdfjs-document-properties-page-size = Grondezza da la pagina:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = vertical\npdfjs-document-properties-page-size-orientation-landscape = orizontal\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Fast Web View:\npdfjs-document-properties-linearized-yes = Gea\npdfjs-document-properties-linearized-no = Na\npdfjs-document-properties-close-button = Serrar\n\n## Print\n\npdfjs-print-progress-message = Preparar il document per stampar…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Interrumper\npdfjs-printing-not-supported = Attenziun: Il stampar na funcziunescha anc betg dal tut en quest navigatur.\npdfjs-printing-not-ready = Attenziun: Il PDF n'è betg chargià cumplettamain per stampar.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Activar/deactivar la trav laterala\npdfjs-toggle-sidebar-notification-button =\n    .title = Activar/deactivar la trav laterala (il document cuntegna structura dal document/agiuntas/nivels)\npdfjs-toggle-sidebar-button-label = Activar/deactivar la trav laterala\npdfjs-document-outline-button =\n    .title = Mussar la structura dal document (cliccar duas giadas per extender/cumprimer tut ils elements)\npdfjs-document-outline-button-label = Structura dal document\npdfjs-attachments-button =\n    .title = Mussar agiuntas\npdfjs-attachments-button-label = Agiuntas\npdfjs-layers-button =\n    .title = Mussar ils nivels (cliccar dubel per restaurar il stadi da standard da tut ils nivels)\npdfjs-layers-button-label = Nivels\npdfjs-thumbs-button =\n    .title = Mussar las miniaturas\npdfjs-thumbs-button-label = Miniaturas\npdfjs-current-outline-item-button =\n    .title = Tschertgar l'element da structura actual\npdfjs-current-outline-item-button-label = Element da structura actual\npdfjs-findbar-button =\n    .title = Tschertgar en il document\npdfjs-findbar-button-label = Tschertgar\npdfjs-additional-layers = Nivels supplementars\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Pagina { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatura da la pagina { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Tschertgar\n    .placeholder = Tschertgar en il document…\npdfjs-find-previous-button =\n    .title = Tschertgar la posiziun precedenta da l'expressiun\npdfjs-find-previous-button-label = Enavos\npdfjs-find-next-button =\n    .title = Tschertgar la proxima posiziun da l'expressiun\npdfjs-find-next-button-label = Enavant\npdfjs-find-highlight-checkbox = Relevar tuts\npdfjs-find-match-case-checkbox-label = Resguardar maiusclas/minusclas\npdfjs-find-match-diacritics-checkbox-label = Resguardar ils segns diacritics\npdfjs-find-entire-word-checkbox-label = Pleds entirs\npdfjs-find-reached-top = Il cumenzament dal document è cuntanschì, la tschertga cuntinuescha a la fin dal document\npdfjs-find-reached-bottom = La fin dal document è cuntanschì, la tschertga cuntinuescha al cumenzament dal document\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } dad { $total } correspundenza\n       *[other] { $current } da { $total } correspundenzas\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Dapli che { $limit } correspundenza\n       *[other] Dapli che { $limit } correspundenzas\n    }\npdfjs-find-not-found = Impussibel da chattar l'expressiun\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Ladezza da la pagina\npdfjs-page-scale-fit = Entira pagina\npdfjs-page-scale-auto = Zoom automatic\npdfjs-page-scale-actual = Grondezza actuala\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Pagina { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Ina errur è cumparida cun chargiar il PDF.\npdfjs-invalid-file-error = Datoteca PDF nunvalida u donnegiada.\npdfjs-missing-file-error = Datoteca PDF manconta.\npdfjs-unexpected-response-error = Resposta nunspetgada dal server.\npdfjs-rendering-error = Ina errur è cumparida cun visualisar questa pagina.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Annotaziun da { $type }]\n\n## Password\n\npdfjs-password-label = Endatescha il pled-clav per avrir questa datoteca da PDF.\npdfjs-password-invalid = Pled-clav nunvalid. Emprova anc ina giada.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Interrumper\npdfjs-web-fonts-disabled = Scrittiras dal web èn deactivadas: impussibel dad utilisar las scrittiras integradas en il PDF.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Text\npdfjs-editor-free-text-button-label = Text\npdfjs-editor-ink-button =\n    .title = Dissegnar\npdfjs-editor-ink-button-label = Dissegnar\npdfjs-editor-stamp-button =\n    .title = Agiuntar u modifitgar maletgs\npdfjs-editor-stamp-button-label = Agiuntar u modifitgar maletgs\npdfjs-editor-highlight-button =\n    .title = Marcar\npdfjs-editor-highlight-button-label = Marcar\npdfjs-highlight-floating-button =\n    .title = Relevar\npdfjs-highlight-floating-button1 =\n    .title = Marcar\n    .aria-label = Marcar\npdfjs-highlight-floating-button-label = Marcar\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Allontanar il dissegn\npdfjs-editor-remove-freetext-button =\n    .title = Allontanar il text\npdfjs-editor-remove-stamp-button =\n    .title = Allontanar la grafica\npdfjs-editor-remove-highlight-button =\n    .title = Allontanar l'emfasa\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Colur\npdfjs-editor-free-text-size-input = Grondezza\npdfjs-editor-ink-color-input = Colur\npdfjs-editor-ink-thickness-input = Grossezza\npdfjs-editor-ink-opacity-input = Opacitad\npdfjs-editor-stamp-add-image-button =\n    .title = Agiuntar in maletg\npdfjs-editor-stamp-add-image-button-label = Agiuntar in maletg\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Grossezza\npdfjs-editor-free-highlight-thickness-title =\n    .title = Midar la grossezza cun relevar elements betg textuals\npdfjs-free-text =\n    .aria-label = Editur da text\npdfjs-free-text-default-content = Cumenzar a tippar…\npdfjs-ink =\n    .aria-label = Editur dissegn\npdfjs-ink-canvas =\n    .aria-label = Maletg creà da l'utilisader\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Text alternativ\npdfjs-editor-alt-text-edit-button-label = Modifitgar il text alternativ\npdfjs-editor-alt-text-dialog-label = Tscherner ina opziun\npdfjs-editor-alt-text-dialog-description = Il text alternativ (alt text) gida en cas che persunas na vesan betg il maletg u sch'i na reussescha betg d'al chargiar.\npdfjs-editor-alt-text-add-description-label = Agiuntar ina descripziun\npdfjs-editor-alt-text-add-description-description = Scriva idealmain 1-2 frasas che descrivan l'object, la situaziun u las acziuns.\npdfjs-editor-alt-text-mark-decorative-label = Marcar sco decorativ\npdfjs-editor-alt-text-mark-decorative-description = Quai vegn duvrà per maletgs ornamentals, sco urs u filigranas.\npdfjs-editor-alt-text-cancel-button = Interrumper\npdfjs-editor-alt-text-save-button = Memorisar\npdfjs-editor-alt-text-decorative-tooltip = Marcà sco decorativ\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Per exempel: «In um giuven sesa a maisa per mangiar in past»\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Chantun sura a sanestra — redimensiunar\npdfjs-editor-resizer-label-top-middle = Sura amez — redimensiunar\npdfjs-editor-resizer-label-top-right = Chantun sura a dretga — redimensiunar\npdfjs-editor-resizer-label-middle-right = Da vart dretga amez — redimensiunar\npdfjs-editor-resizer-label-bottom-right = Chantun sut a dretga — redimensiunar\npdfjs-editor-resizer-label-bottom-middle = Sutvart amez — redimensiunar\npdfjs-editor-resizer-label-bottom-left = Chantun sut a sanestra — redimensiunar\npdfjs-editor-resizer-label-middle-left = Vart sanestra amez — redimensiunar\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Colur per l'emfasa\npdfjs-editor-colorpicker-button =\n    .title = Midar la colur\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Colurs disponiblas\npdfjs-editor-colorpicker-yellow =\n    .title = Mellen\npdfjs-editor-colorpicker-green =\n    .title = Verd\npdfjs-editor-colorpicker-blue =\n    .title = Blau\npdfjs-editor-colorpicker-pink =\n    .title = Rosa\npdfjs-editor-colorpicker-red =\n    .title = Cotschen\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Mussar tut\npdfjs-editor-highlight-show-all-button =\n    .title = Mussar tut\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/ro/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Pagina precedentă\npdfjs-previous-button-label = Înapoi\npdfjs-next-button =\n    .title = Pagina următoare\npdfjs-next-button-label = Înainte\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Pagina\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = din { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } din { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Micșorează\npdfjs-zoom-out-button-label = Micșorează\npdfjs-zoom-in-button =\n    .title = Mărește\npdfjs-zoom-in-button-label = Mărește\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Comută la modul de prezentare\npdfjs-presentation-mode-button-label = Mod de prezentare\npdfjs-open-file-button =\n    .title = Deschide un fișier\npdfjs-open-file-button-label = Deschide\npdfjs-print-button =\n    .title = Tipărește\npdfjs-print-button-label = Tipărește\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Instrumente\npdfjs-tools-button-label = Instrumente\npdfjs-first-page-button =\n    .title = Mergi la prima pagină\npdfjs-first-page-button-label = Mergi la prima pagină\npdfjs-last-page-button =\n    .title = Mergi la ultima pagină\npdfjs-last-page-button-label = Mergi la ultima pagină\npdfjs-page-rotate-cw-button =\n    .title = Rotește în sensul acelor de ceas\npdfjs-page-rotate-cw-button-label = Rotește în sensul acelor de ceas\npdfjs-page-rotate-ccw-button =\n    .title = Rotește în sens invers al acelor de ceas\npdfjs-page-rotate-ccw-button-label = Rotește în sens invers al acelor de ceas\npdfjs-cursor-text-select-tool-button =\n    .title = Activează instrumentul de selecție a textului\npdfjs-cursor-text-select-tool-button-label = Instrumentul de selecție a textului\npdfjs-cursor-hand-tool-button =\n    .title = Activează instrumentul mână\npdfjs-cursor-hand-tool-button-label = Unealta mână\npdfjs-scroll-vertical-button =\n    .title = Folosește derularea verticală\npdfjs-scroll-vertical-button-label = Derulare verticală\npdfjs-scroll-horizontal-button =\n    .title = Folosește derularea orizontală\npdfjs-scroll-horizontal-button-label = Derulare orizontală\npdfjs-scroll-wrapped-button =\n    .title = Folosește derularea încadrată\npdfjs-scroll-wrapped-button-label = Derulare încadrată\npdfjs-spread-none-button =\n    .title = Nu uni paginile broșate\npdfjs-spread-none-button-label = Fără pagini broșate\npdfjs-spread-odd-button =\n    .title = Unește paginile broșate începând cu cele impare\npdfjs-spread-odd-button-label = Broșare pagini impare\npdfjs-spread-even-button =\n    .title = Unește paginile broșate începând cu cele pare\npdfjs-spread-even-button-label = Broșare pagini pare\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Proprietățile documentului…\npdfjs-document-properties-button-label = Proprietățile documentului…\npdfjs-document-properties-file-name = Numele fișierului:\npdfjs-document-properties-file-size = Mărimea fișierului:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } byți)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } byți)\npdfjs-document-properties-title = Titlu:\npdfjs-document-properties-author = Autor:\npdfjs-document-properties-subject = Subiect:\npdfjs-document-properties-keywords = Cuvinte cheie:\npdfjs-document-properties-creation-date = Data creării:\npdfjs-document-properties-modification-date = Data modificării:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Autor:\npdfjs-document-properties-producer = Producător PDF:\npdfjs-document-properties-version = Versiune PDF:\npdfjs-document-properties-page-count = Număr de pagini:\npdfjs-document-properties-page-size = Mărimea paginii:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = verticală\npdfjs-document-properties-page-size-orientation-landscape = orizontală\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Literă\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Vizualizare web rapidă:\npdfjs-document-properties-linearized-yes = Da\npdfjs-document-properties-linearized-no = Nu\npdfjs-document-properties-close-button = Închide\n\n## Print\n\npdfjs-print-progress-message = Se pregătește documentul pentru tipărire…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Renunță\npdfjs-printing-not-supported = Avertisment: Tipărirea nu este suportată în totalitate de acest browser.\npdfjs-printing-not-ready = Avertisment: PDF-ul nu este încărcat complet pentru tipărire.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Comută bara laterală\npdfjs-toggle-sidebar-button-label = Comută bara laterală\npdfjs-document-outline-button =\n    .title = Afișează schița documentului (dublu-clic pentru a extinde/restrânge toate elementele)\npdfjs-document-outline-button-label = Schița documentului\npdfjs-attachments-button =\n    .title = Afișează atașamentele\npdfjs-attachments-button-label = Atașamente\npdfjs-thumbs-button =\n    .title = Afișează miniaturi\npdfjs-thumbs-button-label = Miniaturi\npdfjs-findbar-button =\n    .title = Caută în document\npdfjs-findbar-button-label = Caută\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Pagina { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatura paginii { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Caută\n    .placeholder = Caută în document…\npdfjs-find-previous-button =\n    .title = Mergi la apariția anterioară a textului\npdfjs-find-previous-button-label = Înapoi\npdfjs-find-next-button =\n    .title = Mergi la apariția următoare a textului\npdfjs-find-next-button-label = Înainte\npdfjs-find-highlight-checkbox = Evidențiază toate aparițiile\npdfjs-find-match-case-checkbox-label = Ține cont de majuscule și minuscule\npdfjs-find-entire-word-checkbox-label = Cuvinte întregi\npdfjs-find-reached-top = Am ajuns la începutul documentului, continuă de la sfârșit\npdfjs-find-reached-bottom = Am ajuns la sfârșitul documentului, continuă de la început\npdfjs-find-not-found = Nu s-a găsit textul\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Lățime pagină\npdfjs-page-scale-fit = Potrivire la pagină\npdfjs-page-scale-auto = Zoom automat\npdfjs-page-scale-actual = Mărime reală\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = A intervenit o eroare la încărcarea PDF-ului.\npdfjs-invalid-file-error = Fișier PDF nevalid sau corupt.\npdfjs-missing-file-error = Fișier PDF lipsă.\npdfjs-unexpected-response-error = Răspuns neașteptat de la server.\npdfjs-rendering-error = A intervenit o eroare la randarea paginii.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Adnotare { $type }]\n\n## Password\n\npdfjs-password-label = Introdu parola pentru a deschide acest fișier PDF.\npdfjs-password-invalid = Parolă nevalidă. Te rugăm să încerci din nou.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Renunță\npdfjs-web-fonts-disabled = Fonturile web sunt dezactivate: nu se pot folosi fonturile PDF încorporate.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/ru/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Предыдущая страница\npdfjs-previous-button-label = Предыдущая\npdfjs-next-button =\n    .title = Следующая страница\npdfjs-next-button-label = Следующая\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Страница\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = из { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } из { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Уменьшить\npdfjs-zoom-out-button-label = Уменьшить\npdfjs-zoom-in-button =\n    .title = Увеличить\npdfjs-zoom-in-button-label = Увеличить\npdfjs-zoom-select =\n    .title = Масштаб\npdfjs-presentation-mode-button =\n    .title = Перейти в режим презентации\npdfjs-presentation-mode-button-label = Режим презентации\npdfjs-open-file-button =\n    .title = Открыть файл\npdfjs-open-file-button-label = Открыть\npdfjs-print-button =\n    .title = Печать\npdfjs-print-button-label = Печать\npdfjs-save-button =\n    .title = Сохранить\npdfjs-save-button-label = Сохранить\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Загрузить\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Загрузить\npdfjs-bookmark-button =\n    .title = Текущая страница (просмотр URL-адреса с текущей страницы)\npdfjs-bookmark-button-label = Текущая страница\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Открыть в приложении\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Открыть в программе\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Инструменты\npdfjs-tools-button-label = Инструменты\npdfjs-first-page-button =\n    .title = Перейти на первую страницу\npdfjs-first-page-button-label = Перейти на первую страницу\npdfjs-last-page-button =\n    .title = Перейти на последнюю страницу\npdfjs-last-page-button-label = Перейти на последнюю страницу\npdfjs-page-rotate-cw-button =\n    .title = Повернуть по часовой стрелке\npdfjs-page-rotate-cw-button-label = Повернуть по часовой стрелке\npdfjs-page-rotate-ccw-button =\n    .title = Повернуть против часовой стрелки\npdfjs-page-rotate-ccw-button-label = Повернуть против часовой стрелки\npdfjs-cursor-text-select-tool-button =\n    .title = Включить Инструмент «Выделение текста»\npdfjs-cursor-text-select-tool-button-label = Инструмент «Выделение текста»\npdfjs-cursor-hand-tool-button =\n    .title = Включить Инструмент «Рука»\npdfjs-cursor-hand-tool-button-label = Инструмент «Рука»\npdfjs-scroll-page-button =\n    .title = Использовать прокрутку страниц\npdfjs-scroll-page-button-label = Прокрутка страниц\npdfjs-scroll-vertical-button =\n    .title = Использовать вертикальную прокрутку\npdfjs-scroll-vertical-button-label = Вертикальная прокрутка\npdfjs-scroll-horizontal-button =\n    .title = Использовать горизонтальную прокрутку\npdfjs-scroll-horizontal-button-label = Горизонтальная прокрутка\npdfjs-scroll-wrapped-button =\n    .title = Использовать масштабируемую прокрутку\npdfjs-scroll-wrapped-button-label = Масштабируемая прокрутка\npdfjs-spread-none-button =\n    .title = Не использовать режим разворотов страниц\npdfjs-spread-none-button-label = Без разворотов страниц\npdfjs-spread-odd-button =\n    .title = Развороты начинаются с нечётных номеров страниц\npdfjs-spread-odd-button-label = Нечётные страницы слева\npdfjs-spread-even-button =\n    .title = Развороты начинаются с чётных номеров страниц\npdfjs-spread-even-button-label = Чётные страницы слева\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Свойства документа…\npdfjs-document-properties-button-label = Свойства документа…\npdfjs-document-properties-file-name = Имя файла:\npdfjs-document-properties-file-size = Размер файла:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } КБ ({ $size_b } байт)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } МБ ({ $size_b } байт)\npdfjs-document-properties-title = Заголовок:\npdfjs-document-properties-author = Автор:\npdfjs-document-properties-subject = Тема:\npdfjs-document-properties-keywords = Ключевые слова:\npdfjs-document-properties-creation-date = Дата создания:\npdfjs-document-properties-modification-date = Дата изменения:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Приложение:\npdfjs-document-properties-producer = Производитель PDF:\npdfjs-document-properties-version = Версия PDF:\npdfjs-document-properties-page-count = Число страниц:\npdfjs-document-properties-page-size = Размер страницы:\npdfjs-document-properties-page-size-unit-inches = дюймов\npdfjs-document-properties-page-size-unit-millimeters = мм\npdfjs-document-properties-page-size-orientation-portrait = книжная\npdfjs-document-properties-page-size-orientation-landscape = альбомная\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Быстрый просмотр в Web:\npdfjs-document-properties-linearized-yes = Да\npdfjs-document-properties-linearized-no = Нет\npdfjs-document-properties-close-button = Закрыть\n\n## Print\n\npdfjs-print-progress-message = Подготовка документа к печати…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Отмена\npdfjs-printing-not-supported = Предупреждение: В этом браузере не полностью поддерживается печать.\npdfjs-printing-not-ready = Предупреждение: PDF не полностью загружен для печати.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Показать/скрыть боковую панель\npdfjs-toggle-sidebar-notification-button =\n    .title = Показать/скрыть боковую панель (документ имеет содержание/вложения/слои)\npdfjs-toggle-sidebar-button-label = Показать/скрыть боковую панель\npdfjs-document-outline-button =\n    .title = Показать содержание документа (двойной щелчок, чтобы развернуть/свернуть все элементы)\npdfjs-document-outline-button-label = Содержание документа\npdfjs-attachments-button =\n    .title = Показать вложения\npdfjs-attachments-button-label = Вложения\npdfjs-layers-button =\n    .title = Показать слои (дважды щёлкните, чтобы сбросить все слои к состоянию по умолчанию)\npdfjs-layers-button-label = Слои\npdfjs-thumbs-button =\n    .title = Показать миниатюры\npdfjs-thumbs-button-label = Миниатюры\npdfjs-current-outline-item-button =\n    .title = Найти текущий элемент структуры\npdfjs-current-outline-item-button-label = Текущий элемент структуры\npdfjs-findbar-button =\n    .title = Найти в документе\npdfjs-findbar-button-label = Найти\npdfjs-additional-layers = Дополнительные слои\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Страница { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Миниатюра страницы { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Найти\n    .placeholder = Найти в документе…\npdfjs-find-previous-button =\n    .title = Найти предыдущее вхождение фразы в текст\npdfjs-find-previous-button-label = Назад\npdfjs-find-next-button =\n    .title = Найти следующее вхождение фразы в текст\npdfjs-find-next-button-label = Далее\npdfjs-find-highlight-checkbox = Подсветить все\npdfjs-find-match-case-checkbox-label = С учётом регистра\npdfjs-find-match-diacritics-checkbox-label = С учётом диакритических знаков\npdfjs-find-entire-word-checkbox-label = Слова целиком\npdfjs-find-reached-top = Достигнут верх документа, продолжено снизу\npdfjs-find-reached-bottom = Достигнут конец документа, продолжено сверху\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } из { $total } совпадения\n        [few] { $current } из { $total } совпадений\n       *[many] { $current } из { $total } совпадений\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Более { $limit } совпадения\n        [few] Более { $limit } совпадений\n       *[many] Более { $limit } совпадений\n    }\npdfjs-find-not-found = Фраза не найдена\n\n## Predefined zoom values\n\npdfjs-page-scale-width = По ширине страницы\npdfjs-page-scale-fit = По размеру страницы\npdfjs-page-scale-auto = Автоматически\npdfjs-page-scale-actual = Реальный размер\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Страница { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = При загрузке PDF произошла ошибка.\npdfjs-invalid-file-error = Некорректный или повреждённый PDF-файл.\npdfjs-missing-file-error = PDF-файл отсутствует.\npdfjs-unexpected-response-error = Неожиданный ответ сервера.\npdfjs-rendering-error = При создании страницы произошла ошибка.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Аннотация { $type }]\n\n## Password\n\npdfjs-password-label = Введите пароль, чтобы открыть этот PDF-файл.\npdfjs-password-invalid = Неверный пароль. Пожалуйста, попробуйте снова.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Отмена\npdfjs-web-fonts-disabled = Веб-шрифты отключены: не удалось задействовать встроенные PDF-шрифты.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Текст\npdfjs-editor-free-text-button-label = Текст\npdfjs-editor-ink-button =\n    .title = Рисовать\npdfjs-editor-ink-button-label = Рисовать\npdfjs-editor-stamp-button =\n    .title = Добавить или изменить изображения\npdfjs-editor-stamp-button-label = Добавить или изменить изображения\npdfjs-editor-highlight-button =\n    .title = Выделение\npdfjs-editor-highlight-button-label = Выделение\npdfjs-highlight-floating-button =\n    .title = Выделение\npdfjs-highlight-floating-button1 =\n    .title = Выделение\n    .aria-label = Выделение\npdfjs-highlight-floating-button-label = Выделение\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Удалить рисунок\npdfjs-editor-remove-freetext-button =\n    .title = Удалить текст\npdfjs-editor-remove-stamp-button =\n    .title = Удалить изображение\npdfjs-editor-remove-highlight-button =\n    .title = Удалить выделение\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Цвет\npdfjs-editor-free-text-size-input = Размер\npdfjs-editor-ink-color-input = Цвет\npdfjs-editor-ink-thickness-input = Толщина\npdfjs-editor-ink-opacity-input = Прозрачность\npdfjs-editor-stamp-add-image-button =\n    .title = Добавить изображение\npdfjs-editor-stamp-add-image-button-label = Добавить изображение\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Толщина\npdfjs-editor-free-highlight-thickness-title =\n    .title = Изменить толщину при выделении элементов, кроме текста\npdfjs-free-text =\n    .aria-label = Текстовый редактор\npdfjs-free-text-default-content = Начните вводить…\npdfjs-ink =\n    .aria-label = Редактор рисования\npdfjs-ink-canvas =\n    .aria-label = Созданное пользователем изображение\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Альтернативный текст\npdfjs-editor-alt-text-edit-button-label = Изменить альтернативный текст\npdfjs-editor-alt-text-dialog-label = Выберите вариант\npdfjs-editor-alt-text-dialog-description = Альтернативный текст помогает, когда люди не видят изображение или оно не загружается.\npdfjs-editor-alt-text-add-description-label = Добавить описание\npdfjs-editor-alt-text-add-description-description = Старайтесь составлять 1–2 предложения, описывающих предмет, обстановку или действия.\npdfjs-editor-alt-text-mark-decorative-label = Отметить как декоративное\npdfjs-editor-alt-text-mark-decorative-description = Используется для декоративных изображений, таких как рамки или водяные знаки.\npdfjs-editor-alt-text-cancel-button = Отменить\npdfjs-editor-alt-text-save-button = Сохранить\npdfjs-editor-alt-text-decorative-tooltip = Помечен как декоративный\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Например: «Молодой человек садится за стол, чтобы поесть»\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Левый верхний угол — изменить размер\npdfjs-editor-resizer-label-top-middle = Вверху посередине — изменить размер\npdfjs-editor-resizer-label-top-right = Верхний правый угол — изменить размер\npdfjs-editor-resizer-label-middle-right = В центре справа — изменить размер\npdfjs-editor-resizer-label-bottom-right = Нижний правый угол — изменить размер\npdfjs-editor-resizer-label-bottom-middle = Внизу посередине — изменить размер\npdfjs-editor-resizer-label-bottom-left = Нижний левый угол — изменить размер\npdfjs-editor-resizer-label-middle-left = В центре слева — изменить размер\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Цвет выделения\npdfjs-editor-colorpicker-button =\n    .title = Изменить цвет\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Выбор цвета\npdfjs-editor-colorpicker-yellow =\n    .title = Жёлтый\npdfjs-editor-colorpicker-green =\n    .title = Зелёный\npdfjs-editor-colorpicker-blue =\n    .title = Синий\npdfjs-editor-colorpicker-pink =\n    .title = Розовый\npdfjs-editor-colorpicker-red =\n    .title = Красный\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Показать все\npdfjs-editor-highlight-show-all-button =\n    .title = Показать все\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/sat/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = ᱢᱟᱲᱟᱝ ᱥᱟᱦᱴᱟ\npdfjs-previous-button-label = ᱢᱟᱲᱟᱝᱟᱜ\npdfjs-next-button =\n    .title = ᱤᱱᱟᱹ ᱛᱟᱭᱚᱢ ᱥᱟᱦᱴᱟ\npdfjs-next-button-label = ᱤᱱᱟᱹ ᱛᱟᱭᱚᱢ\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = ᱥᱟᱦᱴᱟ\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = ᱨᱮᱭᱟᱜ { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } ᱠᱷᱚᱱ { $pagesCount })\npdfjs-zoom-out-button =\n    .title = ᱦᱤᱲᱤᱧ ᱛᱮᱭᱟᱨ\npdfjs-zoom-out-button-label = ᱦᱤᱲᱤᱧ ᱛᱮᱭᱟᱨ\npdfjs-zoom-in-button =\n    .title = ᱢᱟᱨᱟᱝ ᱛᱮᱭᱟᱨ\npdfjs-zoom-in-button-label = ᱢᱟᱨᱟᱝ ᱛᱮᱭᱟᱨ\npdfjs-zoom-select =\n    .title = ᱡᱩᱢ\npdfjs-presentation-mode-button =\n    .title = ᱩᱫᱩᱜ ᱥᱚᱫᱚᱨ ᱚᱵᱚᱥᱛᱟ ᱨᱮ ᱚᱛᱟᱭ ᱢᱮ\npdfjs-presentation-mode-button-label = ᱩᱫᱩᱜ ᱥᱚᱫᱚᱨ ᱚᱵᱚᱥᱛᱟ ᱨᱮ\npdfjs-open-file-button =\n    .title = ᱨᱮᱫ ᱡᱷᱤᱡᱽ ᱢᱮ\npdfjs-open-file-button-label = ᱡᱷᱤᱡᱽ ᱢᱮ\npdfjs-print-button =\n    .title = ᱪᱷᱟᱯᱟ\npdfjs-print-button-label = ᱪᱷᱟᱯᱟ\npdfjs-save-button =\n    .title = ᱥᱟᱺᱪᱟᱣ ᱢᱮ\npdfjs-save-button-label = ᱥᱟᱺᱪᱟᱣ ᱢᱮ\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = ᱰᱟᱣᱩᱱᱞᱚᱰ\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = ᱰᱟᱣᱩᱱᱞᱚᱰ\npdfjs-bookmark-button =\n    .title = ᱱᱤᱛᱚᱜᱟᱜ ᱥᱟᱦᱴᱟ (ᱱᱤᱛᱚᱜᱟᱜ ᱥᱟᱦᱴᱟ ᱠᱷᱚᱱ URL ᱫᱮᱠᱷᱟᱣ ᱢᱮ)\npdfjs-bookmark-button-label = ᱱᱤᱛᱚᱜᱟᱜ ᱥᱟᱦᱴᱟ\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = ᱮᱯ ᱨᱮ ᱡᱷᱤᱡᱽ ᱢᱮ\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = ᱮᱯ ᱨᱮ ᱡᱷᱤᱡᱽ ᱢᱮ\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = ᱦᱟᱹᱛᱤᱭᱟᱹᱨ ᱠᱚ\npdfjs-tools-button-label = ᱦᱟᱹᱛᱤᱭᱟᱹᱨ ᱠᱚ\npdfjs-first-page-button =\n    .title = ᱯᱩᱭᱞᱩ ᱥᱟᱦᱴᱟ ᱥᱮᱫ ᱪᱟᱞᱟᱜ ᱢᱮ\npdfjs-first-page-button-label = ᱯᱩᱭᱞᱩ ᱥᱟᱦᱴᱟ ᱥᱮᱫ ᱪᱟᱞᱟᱜ ᱢᱮ\npdfjs-last-page-button =\n    .title = ᱢᱩᱪᱟᱹᱫ ᱥᱟᱦᱴᱟ ᱥᱮᱫ ᱪᱟᱞᱟᱜ ᱢᱮ\npdfjs-last-page-button-label = ᱢᱩᱪᱟᱹᱫ ᱥᱟᱦᱴᱟ ᱥᱮᱫ ᱪᱟᱞᱟᱜ ᱢᱮ\npdfjs-page-rotate-cw-button =\n    .title = ᱜᱷᱚᱰᱤ ᱦᱤᱥᱟᱹᱵ ᱛᱮ ᱟᱹᱪᱩᱨ\npdfjs-page-rotate-cw-button-label = ᱜᱷᱚᱰᱤ ᱦᱤᱥᱟᱹᱵ ᱛᱮ ᱟᱹᱪᱩᱨ\npdfjs-page-rotate-ccw-button =\n    .title = ᱜᱷᱚᱰᱤ ᱦᱤᱥᱟᱹᱵ ᱛᱮ ᱩᱞᱴᱟᱹ ᱟᱹᱪᱩᱨ\npdfjs-page-rotate-ccw-button-label = ᱜᱷᱚᱰᱤ ᱦᱤᱥᱟᱹᱵ ᱛᱮ ᱩᱞᱴᱟᱹ ᱟᱹᱪᱩᱨ\npdfjs-cursor-text-select-tool-button =\n    .title = ᱚᱞ ᱵᱟᱪᱷᱟᱣ ᱦᱟᱹᱛᱤᱭᱟᱨ ᱮᱢ ᱪᱷᱚᱭ ᱢᱮ\npdfjs-cursor-text-select-tool-button-label = ᱚᱞ ᱵᱟᱪᱷᱟᱣ ᱦᱟᱹᱛᱤᱭᱟᱨ\npdfjs-cursor-hand-tool-button =\n    .title = ᱛᱤ ᱦᱟᱹᱛᱤᱭᱟᱨ ᱮᱢ ᱪᱷᱚᱭ ᱢᱮ\npdfjs-cursor-hand-tool-button-label = ᱛᱤ ᱦᱟᱹᱛᱤᱭᱟᱨ\npdfjs-scroll-page-button =\n    .title = ᱥᱟᱦᱴᱟ ᱜᱩᱲᱟᱹᱣ ᱵᱮᱵᱷᱟᱨ ᱢᱮ\npdfjs-scroll-page-button-label = ᱥᱟᱦᱴᱟ ᱜᱩᱲᱟᱹᱣ\npdfjs-scroll-vertical-button =\n    .title = ᱥᱤᱫᱽ ᱜᱩᱲᱟᱹᱣ ᱵᱮᱵᱷᱟᱨ ᱢᱮ\npdfjs-scroll-vertical-button-label = ᱥᱤᱫᱽ ᱜᱩᱲᱟᱹᱣ\npdfjs-scroll-horizontal-button =\n    .title = ᱜᱤᱛᱤᱡ ᱛᱮ ᱜᱩᱲᱟᱹᱣ ᱵᱮᱵᱷᱟᱨ ᱢᱮ\npdfjs-scroll-horizontal-button-label = ᱜᱤᱛᱤᱡ ᱛᱮ ᱜᱩᱲᱟᱹᱣ\npdfjs-scroll-wrapped-button =\n    .title = ᱞᱤᱯᱴᱟᱹᱣ ᱜᱩᱰᱨᱟᱹᱣ ᱵᱮᱵᱷᱟᱨ ᱢᱮ\npdfjs-scroll-wrapped-button-label = ᱞᱤᱯᱴᱟᱣ ᱜᱩᱰᱨᱟᱹᱣ\npdfjs-spread-none-button =\n    .title = ᱟᱞᱚᱢ ᱡᱚᱲᱟᱣ ᱟ ᱥᱟᱦᱴᱟ ᱫᱚ ᱯᱟᱥᱱᱟᱣᱜᱼᱟ\npdfjs-spread-none-button-label = ᱯᱟᱥᱱᱟᱣ ᱵᱟᱹᱱᱩᱜᱼᱟ\npdfjs-spread-odd-button =\n    .title = ᱥᱟᱦᱴᱟ ᱯᱟᱥᱱᱟᱣ ᱡᱚᱲᱟᱣ ᱢᱮ ᱡᱟᱦᱟᱸ ᱫᱚ ᱚᱰᱼᱮᱞ ᱥᱟᱦᱴᱟᱠᱚ ᱥᱟᱞᱟᱜ ᱮᱛᱦᱚᱵᱚᱜ ᱠᱟᱱᱟ\npdfjs-spread-odd-button-label = ᱚᱰ ᱯᱟᱥᱱᱟᱣ\npdfjs-spread-even-button =\n    .title = ᱥᱟᱦᱴᱟ ᱯᱟᱥᱱᱟᱣ ᱡᱚᱲᱟᱣ ᱢᱮ ᱡᱟᱦᱟᱸ ᱫᱚ ᱤᱣᱮᱱᱼᱮᱞ ᱥᱟᱦᱴᱟᱠᱚ ᱥᱟᱞᱟᱜ ᱮᱛᱦᱚᱵᱚᱜ ᱠᱟᱱᱟ\npdfjs-spread-even-button-label = ᱯᱟᱥᱱᱟᱣ ᱤᱣᱮᱱ\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = ᱫᱚᱞᱤᱞ ᱜᱩᱱᱠᱚ …\npdfjs-document-properties-button-label = ᱫᱚᱞᱤᱞ ᱜᱩᱱᱠᱚ …\npdfjs-document-properties-file-name = ᱨᱮᱫᱽ ᱧᱩᱛᱩᱢ :\npdfjs-document-properties-file-size = ᱨᱮᱫᱽ ᱢᱟᱯ :\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } ᱵᱟᱭᱤᱴ ᱠᱚ)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } ᱵᱟᱭᱤᱴ ᱠᱚ)\npdfjs-document-properties-title = ᱧᱩᱛᱩᱢ :\npdfjs-document-properties-author = ᱚᱱᱚᱞᱤᱭᱟᱹ :\npdfjs-document-properties-subject = ᱵᱤᱥᱚᱭ :\npdfjs-document-properties-keywords = ᱠᱟᱹᱴᱷᱤ ᱥᱟᱵᱟᱫᱽ :\npdfjs-document-properties-creation-date = ᱛᱮᱭᱟᱨ ᱢᱟᱸᱦᱤᱛ :\npdfjs-document-properties-modification-date = ᱵᱚᱫᱚᱞ ᱦᱚᱪᱚ ᱢᱟᱹᱦᱤᱛ :\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = ᱵᱮᱱᱟᱣᱤᱡ :\npdfjs-document-properties-producer = PDF ᱛᱮᱭᱟᱨ ᱚᱰᱚᱠᱤᱡ :\npdfjs-document-properties-version = PDF ᱵᱷᱟᱹᱨᱥᱚᱱ :\npdfjs-document-properties-page-count = ᱥᱟᱦᱴᱟ ᱞᱮᱠᱷᱟ :\npdfjs-document-properties-page-size = ᱥᱟᱦᱴᱟ ᱢᱟᱯ :\npdfjs-document-properties-page-size-unit-inches = ᱤᱧᱪ\npdfjs-document-properties-page-size-unit-millimeters = ᱢᱤᱢᱤ\npdfjs-document-properties-page-size-orientation-portrait = ᱯᱚᱴᱨᱮᱴ\npdfjs-document-properties-page-size-orientation-landscape = ᱞᱮᱱᱰᱥᱠᱮᱯ\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = ᱪᱤᱴᱷᱤ\npdfjs-document-properties-page-size-name-legal = ᱠᱟᱹᱱᱩᱱᱤ\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = ᱞᱚᱜᱚᱱ ᱣᱮᱵᱽ ᱧᱮᱞ :\npdfjs-document-properties-linearized-yes = ᱦᱚᱭ\npdfjs-document-properties-linearized-no = ᱵᱟᱝ\npdfjs-document-properties-close-button = ᱵᱚᱸᱫᱚᱭ ᱢᱮ\n\n## Print\n\npdfjs-print-progress-message = ᱪᱷᱟᱯᱟ ᱞᱟᱹᱜᱤᱫ ᱫᱚᱞᱤᱞ ᱛᱮᱭᱟᱨᱚᱜ ᱠᱟᱱᱟ …\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = ᱵᱟᱹᱰᱨᱟᱹ\npdfjs-printing-not-supported = ᱦᱚᱥᱤᱭᱟᱨ : ᱪᱷᱟᱯᱟ ᱱᱚᱣᱟ ᱯᱟᱱᱛᱮᱭᱟᱜ ᱫᱟᱨᱟᱭ ᱛᱮ ᱯᱩᱨᱟᱹᱣ ᱵᱟᱭ ᱜᱚᱲᱚᱣᱟᱠᱟᱱᱟ ᱾\npdfjs-printing-not-ready = ᱦᱩᱥᱤᱭᱟᱹᱨ : ᱪᱷᱟᱯᱟ ᱞᱟᱹᱜᱤᱫ PDF ᱯᱩᱨᱟᱹ ᱵᱟᱭ ᱞᱟᱫᱮ ᱟᱠᱟᱱᱟ ᱾\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = ᱫᱷᱟᱨᱮᱵᱟᱨ ᱥᱮᱫ ᱩᱪᱟᱹᱲᱚᱜ ᱢᱮ\npdfjs-toggle-sidebar-notification-button =\n    .title = ᱫᱷᱟᱨᱮᱵᱟᱨ ᱥᱮᱫ ᱩᱪᱟᱹᱲᱚᱜ ᱢᱮ  (ᱫᱚᱞᱤᱞ ᱨᱮ ᱟᱣᱴᱞᱟᱭᱤᱢ ᱢᱮᱱᱟᱜᱼᱟ/ᱞᱟᱪᱷᱟᱠᱚ/ᱯᱚᱨᱚᱛᱠᱚ)\npdfjs-toggle-sidebar-button-label = ᱫᱷᱟᱨᱮᱵᱟᱨ ᱥᱮᱫ ᱩᱪᱟᱹᱲᱚᱜ ᱢᱮ\npdfjs-document-outline-button =\n    .title = ᱫᱚᱞᱚᱞ ᱟᱣᱴᱞᱟᱭᱤᱱ ᱫᱮᱠᱷᱟᱣ ᱢᱮ (ᱡᱷᱚᱛᱚ ᱡᱤᱱᱤᱥᱠᱚ ᱵᱟᱨ ᱡᱮᱠᱷᱟ ᱚᱛᱟ ᱠᱮᱛᱮ ᱡᱷᱟᱹᱞ/ᱦᱩᱰᱤᱧ ᱪᱷᱚᱭ ᱢᱮ)\npdfjs-document-outline-button-label = ᱫᱚᱞᱤᱞ ᱛᱮᱭᱟᱨ ᱛᱮᱫ\npdfjs-attachments-button =\n    .title = ᱞᱟᱴᱷᱟ ᱥᱮᱞᱮᱫ ᱠᱚ ᱩᱫᱩᱜᱽ ᱢᱮ\npdfjs-attachments-button-label = ᱞᱟᱴᱷᱟ ᱥᱮᱞᱮᱫ ᱠᱚ\npdfjs-layers-button =\n    .title = ᱯᱚᱨᱚᱛ ᱫᱮᱠᱷᱟᱣ ᱢᱮ (ᱢᱩᱞ ᱡᱟᱭᱜᱟ ᱛᱮ ᱡᱷᱚᱛᱚ ᱯᱚᱨᱚᱛᱠᱚ ᱨᱤᱥᱮᱴ ᱞᱟᱹᱜᱤᱫ ᱵᱟᱨ ᱡᱮᱠᱷᱟ ᱚᱛᱚᱭ ᱢᱮ)\npdfjs-layers-button-label = ᱯᱚᱨᱚᱛᱠᱚ\npdfjs-thumbs-button =\n    .title = ᱪᱤᱛᱟᱹᱨ ᱟᱦᱞᱟ ᱠᱚ ᱩᱫᱩᱜᱽ ᱢᱮ\npdfjs-thumbs-button-label = ᱪᱤᱛᱟᱹᱨ ᱟᱦᱞᱟ ᱠᱚ\npdfjs-current-outline-item-button =\n    .title = ᱱᱤᱛᱚᱜᱟᱜ ᱟᱣᱴᱞᱟᱭᱤᱱ ᱡᱟᱱᱤᱥ ᱯᱟᱱᱛᱮ ᱢᱮ\npdfjs-current-outline-item-button-label = ᱱᱤᱛᱚᱜᱟᱜ ᱟᱣᱴᱞᱟᱭᱤᱱ ᱡᱟᱱᱤᱥ\npdfjs-findbar-button =\n    .title = ᱫᱚᱞᱤᱞ ᱨᱮ ᱯᱟᱱᱛᱮ\npdfjs-findbar-button-label = ᱥᱮᱸᱫᱽᱨᱟᱭ ᱢᱮ\npdfjs-additional-layers = ᱵᱟᱹᱲᱛᱤ ᱯᱚᱨᱚᱛᱠᱚ\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = { $page } ᱥᱟᱦᱴᱟ\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = { $page } ᱥᱟᱦᱴᱟ ᱨᱮᱭᱟᱜ ᱪᱤᱛᱟᱹᱨ ᱟᱦᱞᱟ\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = ᱥᱮᱸᱫᱽᱨᱟᱭ ᱢᱮ\n    .placeholder = ᱫᱚᱞᱤᱞ ᱨᱮ ᱯᱟᱱᱛᱮ ᱢᱮ …\npdfjs-find-previous-button =\n    .title = ᱟᱭᱟᱛ ᱦᱤᱸᱥ ᱨᱮᱭᱟᱜ ᱯᱟᱹᱦᱤᱞ ᱥᱮᱫᱟᱜ ᱚᱰᱚᱠ ᱧᱟᱢ ᱢᱮ\npdfjs-find-previous-button-label = ᱢᱟᱲᱟᱝᱟᱜ\npdfjs-find-next-button =\n    .title = ᱟᱭᱟᱛ ᱦᱤᱸᱥ ᱨᱮᱭᱟᱜ ᱤᱱᱟᱹ ᱛᱟᱭᱚᱢ ᱚᱰᱚᱠ ᱧᱟᱢ ᱢᱮ\npdfjs-find-next-button-label = ᱤᱱᱟᱹ ᱛᱟᱭᱚᱢ\npdfjs-find-highlight-checkbox = ᱡᱷᱚᱛᱚ ᱩᱫᱩᱜ ᱨᱟᱠᱟᱵ\npdfjs-find-match-case-checkbox-label = ᱡᱚᱲ ᱠᱟᱛᱷᱟ\npdfjs-find-match-diacritics-checkbox-label = ᱵᱤᱥᱮᱥᱚᱠ ᱠᱚ ᱢᱮᱲᱟᱣ ᱢᱮ\npdfjs-find-entire-word-checkbox-label = ᱡᱷᱚᱛᱚ ᱟᱹᱲᱟᱹᱠᱚ\npdfjs-find-reached-top = ᱫᱚᱞᱤᱞ ᱨᱮᱭᱟᱜ ᱪᱤᱴ ᱨᱮ ᱥᱮᱴᱮᱨ, ᱞᱟᱛᱟᱨ ᱠᱷᱚᱱ ᱞᱮᱛᱟᱲ\npdfjs-find-reached-bottom = ᱫᱚᱞᱤᱞ ᱨᱮᱭᱟᱜ ᱢᱩᱪᱟᱹᱫ ᱨᱮ ᱥᱮᱴᱮᱨ, ᱪᱚᱴ ᱠᱷᱚᱱ ᱞᱮᱛᱟᱲ\npdfjs-find-not-found = ᱛᱚᱯᱚᱞ ᱫᱚᱱᱚᱲ ᱵᱟᱝ ᱧᱟᱢ ᱞᱮᱱᱟ\n\n## Predefined zoom values\n\npdfjs-page-scale-width = ᱥᱟᱦᱴᱟ ᱚᱥᱟᱨ\npdfjs-page-scale-fit = ᱥᱟᱦᱴᱟ ᱠᱷᱟᱯ\npdfjs-page-scale-auto = ᱟᱡᱼᱟᱡ ᱛᱮ ᱦᱩᱰᱤᱧ ᱞᱟᱹᱴᱩ ᱛᱮᱭᱟᱨ\npdfjs-page-scale-actual = ᱴᱷᱤᱠ ᱢᱟᱨᱟᱝ ᱛᱮᱫ\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = { $page } ᱥᱟᱦᱴᱟ\n\n## Loading indicator messages\n\npdfjs-loading-error = PDF ᱞᱟᱫᱮ ᱡᱚᱦᱚᱜ ᱢᱤᱫ ᱵᱷᱩᱞ ᱦᱩᱭ ᱮᱱᱟ ᱾\npdfjs-invalid-file-error = ᱵᱟᱝ ᱵᱟᱛᱟᱣ ᱟᱨᱵᱟᱝᱠᱷᱟᱱ ᱰᱤᱜᱟᱹᱣ PDF ᱨᱮᱫᱽ ᱾\npdfjs-missing-file-error = ᱟᱫᱟᱜ PDF ᱨᱮᱫᱽ ᱾\npdfjs-unexpected-response-error = ᱵᱟᱝᱵᱩᱡᱷ ᱥᱚᱨᱵᱷᱚᱨ ᱛᱮᱞᱟ ᱾\npdfjs-rendering-error = ᱥᱟᱦᱴᱟ ᱮᱢ ᱡᱚᱦᱚᱠ ᱢᱤᱫ ᱵᱷᱩᱞ ᱦᱩᱭ ᱮᱱᱟ ᱾\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } ᱢᱚᱱᱛᱚ ᱮᱢ]\n\n## Password\n\npdfjs-password-label = ᱱᱚᱶᱟ PDF ᱨᱮᱫᱽ ᱡᱷᱤᱡᱽ ᱞᱟᱹᱜᱤᱫ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱟᱫᱮᱨ ᱢᱮ ᱾\npdfjs-password-invalid = ᱵᱷᱩᱞ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱾ ᱫᱟᱭᱟᱠᱟᱛᱮ ᱫᱩᱦᱲᱟᱹ ᱪᱮᱥᱴᱟᱭ ᱢᱮ ᱾\npdfjs-password-ok-button = ᱴᱷᱤᱠ\npdfjs-password-cancel-button = ᱵᱟᱹᱰᱨᱟᱹ\npdfjs-web-fonts-disabled = ᱣᱮᱵᱽ ᱪᱤᱠᱤ ᱵᱟᱝ ᱦᱩᱭ ᱦᱚᱪᱚ ᱠᱟᱱᱟ : ᱵᱷᱤᱛᱤᱨ ᱛᱷᱟᱯᱚᱱ PDF ᱪᱤᱠᱤ ᱵᱮᱵᱷᱟᱨ ᱵᱟᱝ ᱦᱩᱭ ᱠᱮᱭᱟ ᱾\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = ᱚᱞ\npdfjs-editor-free-text-button-label = ᱚᱞ\npdfjs-editor-ink-button =\n    .title = ᱛᱮᱭᱟᱨ\npdfjs-editor-ink-button-label = ᱛᱮᱭᱟᱨ\npdfjs-editor-stamp-button =\n    .title = ᱪᱤᱛᱟᱹᱨᱠᱚ ᱥᱮᱞᱮᱫ ᱥᱮ ᱥᱟᱯᱲᱟᱣ ᱢᱮ\npdfjs-editor-stamp-button-label = ᱪᱤᱛᱟᱹᱨᱠᱚ ᱥᱮᱞᱮᱫ ᱥᱮ ᱥᱟᱯᱲᱟᱣ ᱢᱮ\n# Editor Parameters\npdfjs-editor-free-text-color-input = ᱨᱚᱝ\npdfjs-editor-free-text-size-input = ᱢᱟᱯ\npdfjs-editor-ink-color-input = ᱨᱚᱝ\npdfjs-editor-ink-thickness-input = ᱢᱚᱴᱟ\npdfjs-editor-ink-opacity-input = ᱟᱨᱯᱟᱨ\npdfjs-editor-stamp-add-image-button =\n    .title = ᱪᱤᱛᱟᱹᱨ ᱥᱮᱞᱮᱫ ᱢᱮ\npdfjs-editor-stamp-add-image-button-label = ᱪᱤᱛᱟᱹᱨ ᱥᱮᱞᱮᱫ ᱢᱮ\npdfjs-free-text =\n    .aria-label = ᱚᱞ ᱥᱟᱯᱲᱟᱣᱤᱭᱟᱹ\npdfjs-free-text-default-content = ᱚᱞ ᱮᱛᱦᱚᱵ ᱢᱮ …\npdfjs-ink =\n    .aria-label = ᱛᱮᱭᱟᱨ ᱥᱟᱯᱲᱟᱣᱤᱭᱟᱹ\npdfjs-ink-canvas =\n    .aria-label = ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱛᱮᱭᱟᱨ ᱠᱟᱫ ᱪᱤᱛᱟᱹᱨ\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/sc/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Pàgina anteriore\npdfjs-previous-button-label = S'ischeda chi b'est primu\npdfjs-next-button =\n    .title = Pàgina imbeniente\npdfjs-next-button-label = Imbeniente\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Pàgina\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = de { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } de { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Impitica\npdfjs-zoom-out-button-label = Impitica\npdfjs-zoom-in-button =\n    .title = Ismànnia\npdfjs-zoom-in-button-label = Ismànnia\npdfjs-zoom-select =\n    .title = Ismànnia\npdfjs-presentation-mode-button =\n    .title = Cola a sa modalidade de presentatzione\npdfjs-presentation-mode-button-label = Modalidade de presentatzione\npdfjs-open-file-button =\n    .title = Aberi s'archìviu\npdfjs-open-file-button-label = Abertu\npdfjs-print-button =\n    .title = Imprenta\npdfjs-print-button-label = Imprenta\npdfjs-save-button =\n    .title = Sarva\npdfjs-save-button-label = Sarva\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Iscàrriga\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Iscàrriga\npdfjs-bookmark-button =\n    .title = Pàgina atuale (ammustra s’URL de sa pàgina atuale)\npdfjs-bookmark-button-label = Pàgina atuale\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Aberi in un’aplicatzione\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Aberi in un’aplicatzione\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Istrumentos\npdfjs-tools-button-label = Istrumentos\npdfjs-first-page-button =\n    .title = Bae a sa prima pàgina\npdfjs-first-page-button-label = Bae a sa prima pàgina\npdfjs-last-page-button =\n    .title = Bae a s'ùrtima pàgina\npdfjs-last-page-button-label = Bae a s'ùrtima pàgina\npdfjs-page-rotate-cw-button =\n    .title = Gira in sensu oràriu\npdfjs-page-rotate-cw-button-label = Gira in sensu oràriu\npdfjs-page-rotate-ccw-button =\n    .title = Gira in sensu anti-oràriu\npdfjs-page-rotate-ccw-button-label = Gira in sensu anti-oràriu\npdfjs-cursor-text-select-tool-button =\n    .title = Ativa s'aina de seletzione de testu\npdfjs-cursor-text-select-tool-button-label = Aina de seletzione de testu\npdfjs-cursor-hand-tool-button =\n    .title = Ativa s'aina de manu\npdfjs-cursor-hand-tool-button-label = Aina de manu\npdfjs-scroll-page-button =\n    .title = Imprea s'iscurrimentu de pàgina\npdfjs-scroll-page-button-label = Iscurrimentu de pàgina\npdfjs-scroll-vertical-button =\n    .title = Imprea s'iscurrimentu verticale\npdfjs-scroll-vertical-button-label = Iscurrimentu verticale\npdfjs-scroll-horizontal-button =\n    .title = Imprea s'iscurrimentu orizontale\npdfjs-scroll-horizontal-button-label = Iscurrimentu orizontale\npdfjs-scroll-wrapped-button =\n    .title = Imprea s'iscurrimentu continu\npdfjs-scroll-wrapped-button-label = Iscurrimentu continu\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Propiedades de su documentu…\npdfjs-document-properties-button-label = Propiedades de su documentu…\npdfjs-document-properties-file-name = Nòmine de s'archìviu:\npdfjs-document-properties-file-size = Mannària de s'archìviu:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Tìtulu:\npdfjs-document-properties-author = Autoria:\npdfjs-document-properties-subject = Ogetu:\npdfjs-document-properties-keywords = Faeddos crae:\npdfjs-document-properties-creation-date = Data de creatzione:\npdfjs-document-properties-modification-date = Data de modìfica:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Creatzione:\npdfjs-document-properties-producer = Produtore de PDF:\npdfjs-document-properties-version = Versione de PDF:\npdfjs-document-properties-page-count = Contu de pàginas:\npdfjs-document-properties-page-size = Mannària de sa pàgina:\npdfjs-document-properties-page-size-unit-inches = pòddighes\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = verticale\npdfjs-document-properties-page-size-orientation-landscape = orizontale\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Lìtera\npdfjs-document-properties-page-size-name-legal = Legale\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Visualizatzione web lestra:\npdfjs-document-properties-linearized-yes = Eja\npdfjs-document-properties-linearized-no = Nono\npdfjs-document-properties-close-button = Serra\n\n## Print\n\npdfjs-print-progress-message = Aparitzende s'imprenta de su documentu…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Cantzella\npdfjs-printing-not-supported = Atentzione: s'imprenta no est funtzionende de su totu in custu navigadore.\npdfjs-printing-not-ready = Atentzione: su PDF no est istadu carrigadu de su totu pro s'imprenta.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Ativa/disativa sa barra laterale\npdfjs-toggle-sidebar-notification-button =\n    .title = Ativa/disativa sa barra laterale (su documentu cuntenet un'ischema, alligongiados o livellos)\npdfjs-toggle-sidebar-button-label = Ativa/disativa sa barra laterale\npdfjs-document-outline-button-label = Ischema de su documentu\npdfjs-attachments-button =\n    .title = Ammustra alligongiados\npdfjs-attachments-button-label = Alliongiados\npdfjs-layers-button =\n    .title = Ammustra livellos (clic dòpiu pro ripristinare totu is livellos a s'istadu predefinidu)\npdfjs-layers-button-label = Livellos\npdfjs-thumbs-button =\n    .title = Ammustra miniaturas\npdfjs-thumbs-button-label = Miniaturas\npdfjs-current-outline-item-button =\n    .title = Agata s'elementu atuale de s'ischema\npdfjs-current-outline-item-button-label = Elementu atuale de s'ischema\npdfjs-findbar-button =\n    .title = Agata in su documentu\npdfjs-findbar-button-label = Agata\npdfjs-additional-layers = Livellos additzionales\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Pàgina { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatura de sa pàgina { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Agata\n    .placeholder = Agata in su documentu…\npdfjs-find-previous-button =\n    .title = Agata s'ocurrèntzia pretzedente de sa fràsia\npdfjs-find-previous-button-label = S'ischeda chi b'est primu\npdfjs-find-next-button =\n    .title = Agata s'ocurrèntzia imbeniente de sa fràsia\npdfjs-find-next-button-label = Imbeniente\npdfjs-find-highlight-checkbox = Evidèntzia totu\npdfjs-find-match-case-checkbox-label = Distinghe intre majùsculas e minùsculas\npdfjs-find-match-diacritics-checkbox-label = Respeta is diacrìticos\npdfjs-find-entire-word-checkbox-label = Faeddos intreos\npdfjs-find-reached-top = S'est lòmpidu a su cumintzu de su documentu, si sighit dae su bàsciu\npdfjs-find-reached-bottom = Acabbu de su documentu, si sighit dae s'artu\npdfjs-find-not-found = Testu no agatadu\n\n## Predefined zoom values\n\npdfjs-page-scale-auto = Ingrandimentu automàticu\npdfjs-page-scale-actual = Mannària reale\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Pàgina { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Faddina in sa càrriga de su PDF.\npdfjs-invalid-file-error = Archìviu PDF non vàlidu o corrùmpidu.\npdfjs-missing-file-error = Ammancat s'archìviu PDF.\npdfjs-unexpected-response-error = Risposta imprevista de su serbidore.\npdfjs-rendering-error = Faddina in sa visualizatzione de sa pàgina.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n\n## Password\n\npdfjs-password-label = Inserta sa crae pro abèrrere custu archìviu PDF.\npdfjs-password-invalid = Sa crae no est curreta. Torra a nche proare.\npdfjs-password-ok-button = Andat bene\npdfjs-password-cancel-button = Cantzella\npdfjs-web-fonts-disabled = Is tipografias web sunt disativadas: is tipografias incrustadas a su PDF non podent èssere impreadas.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Testu\npdfjs-editor-free-text-button-label = Testu\npdfjs-editor-ink-button =\n    .title = Disinnu\npdfjs-editor-ink-button-label = Disinnu\npdfjs-editor-stamp-button =\n    .title = Agiunghe o modìfica immàgines\npdfjs-editor-stamp-button-label = Agiunghe o modìfica immàgines\n# Editor Parameters\npdfjs-editor-free-text-color-input = Colore\npdfjs-editor-free-text-size-input = Mannària\npdfjs-editor-ink-color-input = Colore\npdfjs-editor-ink-thickness-input = Grussària\npdfjs-editor-stamp-add-image-button =\n    .title = Agiunghe un’immàgine\npdfjs-editor-stamp-add-image-button-label = Agiunghe un’immàgine\npdfjs-free-text =\n    .aria-label = Editore de testu\npdfjs-free-text-default-content = Cumintza a iscrìere…\npdfjs-ink =\n    .aria-label = Editore de disinnos\npdfjs-ink-canvas =\n    .aria-label = Immàgine creada dae s’utente\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/scn/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-zoom-out-button =\n    .title = Cchiù nicu\npdfjs-zoom-out-button-label = Cchiù nicu\npdfjs-zoom-in-button =\n    .title = Cchiù granni\npdfjs-zoom-in-button-label = Cchiù granni\n\n##  Secondary toolbar and context menu\n\n\n## Document properties dialog\n\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Vista web lesta:\npdfjs-document-properties-linearized-yes = Se\n\n## Print\n\npdfjs-print-progress-close-button = Sfai\n\n## Tooltips and alt text for side panel toolbar buttons\n\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n\n## Find panel button title and messages\n\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Larghizza dâ pàggina\n\n## PDF page\n\n\n## Loading indicator messages\n\n\n## Annotations\n\n\n## Password\n\npdfjs-password-cancel-button = Sfai\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/sco/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Page Afore\npdfjs-previous-button-label = Previous\npdfjs-next-button =\n    .title = Page Efter\npdfjs-next-button-label = Neist\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Page\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = o { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } o { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Zoom Oot\npdfjs-zoom-out-button-label = Zoom Oot\npdfjs-zoom-in-button =\n    .title = Zoom In\npdfjs-zoom-in-button-label = Zoom In\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Flit tae Presentation Mode\npdfjs-presentation-mode-button-label = Presentation Mode\npdfjs-open-file-button =\n    .title = Open File\npdfjs-open-file-button-label = Open\npdfjs-print-button =\n    .title = Prent\npdfjs-print-button-label = Prent\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Tools\npdfjs-tools-button-label = Tools\npdfjs-first-page-button =\n    .title = Gang tae First Page\npdfjs-first-page-button-label = Gang tae First Page\npdfjs-last-page-button =\n    .title = Gang tae Lest Page\npdfjs-last-page-button-label = Gang tae Lest Page\npdfjs-page-rotate-cw-button =\n    .title = Rotate Clockwise\npdfjs-page-rotate-cw-button-label = Rotate Clockwise\npdfjs-page-rotate-ccw-button =\n    .title = Rotate Coonterclockwise\npdfjs-page-rotate-ccw-button-label = Rotate Coonterclockwise\npdfjs-cursor-text-select-tool-button =\n    .title = Enable Text Walin Tool\npdfjs-cursor-text-select-tool-button-label = Text Walin Tool\npdfjs-cursor-hand-tool-button =\n    .title = Enable Haun Tool\npdfjs-cursor-hand-tool-button-label = Haun Tool\npdfjs-scroll-vertical-button =\n    .title = Yaise Vertical Scrollin\npdfjs-scroll-vertical-button-label = Vertical Scrollin\npdfjs-scroll-horizontal-button =\n    .title = Yaise Horizontal Scrollin\npdfjs-scroll-horizontal-button-label = Horizontal Scrollin\npdfjs-scroll-wrapped-button =\n    .title = Yaise Wrapped Scrollin\npdfjs-scroll-wrapped-button-label = Wrapped Scrollin\npdfjs-spread-none-button =\n    .title = Dinnae jyn page spreids\npdfjs-spread-none-button-label = Nae Spreids\npdfjs-spread-odd-button =\n    .title = Jyn page spreids stertin wi odd-numbered pages\npdfjs-spread-odd-button-label = Odd Spreids\npdfjs-spread-even-button =\n    .title = Jyn page spreids stertin wi even-numbered pages\npdfjs-spread-even-button-label = Even Spreids\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Document Properties…\npdfjs-document-properties-button-label = Document Properties…\npdfjs-document-properties-file-name = File nemme:\npdfjs-document-properties-file-size = File size:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Title:\npdfjs-document-properties-author = Author:\npdfjs-document-properties-subject = Subjeck:\npdfjs-document-properties-keywords = Keywirds:\npdfjs-document-properties-creation-date = Date o Makkin:\npdfjs-document-properties-modification-date = Date o Chynges:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Makker:\npdfjs-document-properties-producer = PDF Producer:\npdfjs-document-properties-version = PDF Version:\npdfjs-document-properties-page-count = Page Coont:\npdfjs-document-properties-page-size = Page Size:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = portrait\npdfjs-document-properties-page-size-orientation-landscape = landscape\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Fast Wab View:\npdfjs-document-properties-linearized-yes = Aye\npdfjs-document-properties-linearized-no = Naw\npdfjs-document-properties-close-button = Sneck\n\n## Print\n\npdfjs-print-progress-message = Reddin document fur prentin…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Stap\npdfjs-printing-not-supported = Tak tent: Prentin isnae richt supportit by this stravaiger.\npdfjs-printing-not-ready = Tak tent: The PDF isnae richt loadit fur prentin.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Toggle Sidebaur\npdfjs-toggle-sidebar-notification-button =\n    .title = Toggle Sidebaur (document conteens ootline/attachments/layers)\npdfjs-toggle-sidebar-button-label = Toggle Sidebaur\npdfjs-document-outline-button =\n    .title = Kythe Document Ootline (double-click fur tae oot-fauld/in-fauld aw items)\npdfjs-document-outline-button-label = Document Ootline\npdfjs-attachments-button =\n    .title = Kythe Attachments\npdfjs-attachments-button-label = Attachments\npdfjs-layers-button =\n    .title = Kythe Layers (double-click fur tae reset aw layers tae the staunart state)\npdfjs-layers-button-label = Layers\npdfjs-thumbs-button =\n    .title = Kythe Thumbnails\npdfjs-thumbs-button-label = Thumbnails\npdfjs-current-outline-item-button =\n    .title = Find Current Ootline Item\npdfjs-current-outline-item-button-label = Current Ootline Item\npdfjs-findbar-button =\n    .title = Find in Document\npdfjs-findbar-button-label = Find\npdfjs-additional-layers = Mair Layers\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Page { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Thumbnail o Page { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Find\n    .placeholder = Find in document…\npdfjs-find-previous-button =\n    .title = Airt oot the last time this phrase occurred\npdfjs-find-previous-button-label = Previous\npdfjs-find-next-button =\n    .title = Airt oot the neist time this phrase occurs\npdfjs-find-next-button-label = Neist\npdfjs-find-highlight-checkbox = Highlicht aw\npdfjs-find-match-case-checkbox-label = Match case\npdfjs-find-entire-word-checkbox-label = Hale Wirds\npdfjs-find-reached-top = Raxed tap o document, went on fae the dowp end\npdfjs-find-reached-bottom = Raxed end o document, went on fae the tap\npdfjs-find-not-found = Phrase no fund\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Page Width\npdfjs-page-scale-fit = Page Fit\npdfjs-page-scale-auto = Automatic Zoom\npdfjs-page-scale-actual = Actual Size\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Page { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = An mishanter tuik place while loadin the PDF.\npdfjs-invalid-file-error = No suithfest or camshauchlet PDF file.\npdfjs-missing-file-error = PDF file tint.\npdfjs-unexpected-response-error = Unexpectit server repone.\npdfjs-rendering-error = A mishanter tuik place while renderin the page.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Annotation]\n\n## Password\n\npdfjs-password-label = Inpit the passwird fur tae open this PDF file.\npdfjs-password-invalid = Passwird no suithfest. Gonnae gie it anither shot.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Stap\npdfjs-web-fonts-disabled = Wab fonts are disabled: cannae yaise embeddit PDF fonts.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/si/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = කලින් පිටුව\npdfjs-previous-button-label = කලින්\npdfjs-next-button =\n    .title = ඊළඟ පිටුව\npdfjs-next-button-label = ඊළඟ\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = පිටුව\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } / { $pagesCount })\npdfjs-zoom-out-button =\n    .title = කුඩාලනය\npdfjs-zoom-out-button-label = කුඩාලනය\npdfjs-zoom-in-button =\n    .title = විශාලනය\npdfjs-zoom-in-button-label = විශාලනය\npdfjs-zoom-select =\n    .title = විශාල කරන්න\npdfjs-presentation-mode-button =\n    .title = සමර්පණ ප්‍රකාරය වෙත මාරුවන්න\npdfjs-presentation-mode-button-label = සමර්පණ ප්‍රකාරය\npdfjs-open-file-button =\n    .title = ගොනුව අරින්න\npdfjs-open-file-button-label = අරින්න\npdfjs-print-button =\n    .title = මුද්‍රණය\npdfjs-print-button-label = මුද්‍රණය\npdfjs-save-button =\n    .title = සුරකින්න\npdfjs-save-button-label = සුරකින්න\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = බාගන්න\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = බාගන්න\npdfjs-bookmark-button-label = පවතින පිටුව\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = යෙදුමෙහි අරින්න\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = යෙදුමෙහි අරින්න\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = මෙවලම්\npdfjs-tools-button-label = මෙවලම්\npdfjs-first-page-button =\n    .title = මුල් පිටුවට යන්න\npdfjs-first-page-button-label = මුල් පිටුවට යන්න\npdfjs-last-page-button =\n    .title = අවසන් පිටුවට යන්න\npdfjs-last-page-button-label = අවසන් පිටුවට යන්න\npdfjs-cursor-text-select-tool-button =\n    .title = පෙළ තේරීමේ මෙවලම සබල කරන්න\npdfjs-cursor-text-select-tool-button-label = පෙළ තේරීමේ මෙවලම\npdfjs-cursor-hand-tool-button =\n    .title = අත් මෙවලම සබල කරන්න\npdfjs-cursor-hand-tool-button-label = අත් මෙවලම\npdfjs-scroll-page-button =\n    .title = පිටුව අනුචලනය භාවිතය\npdfjs-scroll-page-button-label = පිටුව අනුචලනය\npdfjs-scroll-vertical-button =\n    .title = සිරස් අනුචලනය භාවිතය\npdfjs-scroll-vertical-button-label = සිරස් අනුචලනය\npdfjs-scroll-horizontal-button =\n    .title = තිරස් අනුචලනය භාවිතය\npdfjs-scroll-horizontal-button-label = තිරස් අනුචලනය\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = ලේඛනයේ ගුණාංග…\npdfjs-document-properties-button-label = ලේඛනයේ ගුණාංග…\npdfjs-document-properties-file-name = ගොනුවේ නම:\npdfjs-document-properties-file-size = ගොනුවේ ප්‍රමාණය:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = කි.බ. { $size_kb } (බයිට { $size_b })\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = මෙ.බ. { $size_mb } (බයිට { $size_b })\npdfjs-document-properties-title = සිරැසිය:\npdfjs-document-properties-author = කතෘ:\npdfjs-document-properties-subject = මාතෘකාව:\npdfjs-document-properties-keywords = මූල පද:\npdfjs-document-properties-creation-date = සෑදූ දිනය:\npdfjs-document-properties-modification-date = සංශෝධිත දිනය:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = නිර්මාතෘ:\npdfjs-document-properties-producer = පීඩීඑෆ් සම්පාදක:\npdfjs-document-properties-version = පීඩීඑෆ් අනුවාදය:\npdfjs-document-properties-page-count = පිටු ගණන:\npdfjs-document-properties-page-size = පිටුවේ තරම:\npdfjs-document-properties-page-size-unit-inches = අඟල්\npdfjs-document-properties-page-size-unit-millimeters = මි.මී.\npdfjs-document-properties-page-size-orientation-portrait = සිරස්\npdfjs-document-properties-page-size-orientation-landscape = තිරස්\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width }×{ $height }{ $unit }{ $name }{ $orientation }\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = වේගවත් වියමන දැක්ම:\npdfjs-document-properties-linearized-yes = ඔව්\npdfjs-document-properties-linearized-no = නැහැ\npdfjs-document-properties-close-button = වසන්න\n\n## Print\n\npdfjs-print-progress-message = මුද්‍රණය සඳහා ලේඛනය සූදානම් වෙමින්…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = අවලංගු කරන්න\npdfjs-printing-not-supported = අවවාදයයි: මෙම අතිරික්සුව මුද්‍රණය සඳහා හොඳින් සහාය නොදක්වයි.\npdfjs-printing-not-ready = අවවාදයයි: මුද්‍රණයට පීඩීඑෆ් ගොනුව සම්පූර්ණයෙන් පූරණය වී නැත.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-document-outline-button-label = ලේඛනයේ වටසන\npdfjs-attachments-button =\n    .title = ඇමුණුම් පෙන්වන්න\npdfjs-attachments-button-label = ඇමුණුම්\npdfjs-layers-button =\n    .title = ස්තර පෙන්වන්න (සියළු ස්තර පෙරනිමි තත්‍වයට යළි සැකසීමට දෙවරක් ඔබන්න)\npdfjs-layers-button-label = ස්තර\npdfjs-thumbs-button =\n    .title = සිඟිති රූ පෙන්වන්න\npdfjs-thumbs-button-label = සිඟිති රූ\npdfjs-findbar-button =\n    .title = ලේඛනයෙහි සොයන්න\npdfjs-findbar-button-label = සොයන්න\npdfjs-additional-layers = අතිරේක ස්තර\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = පිටුව { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = පිටුවේ සිඟිත රූව { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = සොයන්න\n    .placeholder = ලේඛනයේ සොයන්න…\npdfjs-find-previous-button =\n    .title = මෙම වැකිකඩ කලින් යෙදුණු ස්ථානය සොයන්න\npdfjs-find-previous-button-label = කලින්\npdfjs-find-next-button =\n    .title = මෙම වැකිකඩ ඊළඟට යෙදෙන ස්ථානය සොයන්න\npdfjs-find-next-button-label = ඊළඟ\npdfjs-find-highlight-checkbox = සියල්ල උද්දීපනය\npdfjs-find-entire-word-checkbox-label = සමස්ත වචන\npdfjs-find-reached-top = ලේඛනයේ මුදුනට ළඟා විය, පහළ සිට ඉහළට\npdfjs-find-reached-bottom = ලේඛනයේ අවසානයට ළඟා විය, ඉහළ සිට පහළට\npdfjs-find-not-found = වැකිකඩ හමු නොවිණි\n\n## Predefined zoom values\n\npdfjs-page-scale-width = පිටුවේ පළල\npdfjs-page-scale-auto = ස්වයංක්‍රීය විශාලනය\npdfjs-page-scale-actual = සැබෑ ප්‍රමාණය\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = පිටුව { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = පීඩීඑෆ් පූරණය කිරීමේදී දෝෂයක් සිදු විය.\npdfjs-invalid-file-error = වලංගු නොවන හෝ හානිවූ පීඩීඑෆ් ගොනුවකි.\npdfjs-missing-file-error = මඟහැරුණු පීඩීඑෆ් ගොනුවකි.\npdfjs-unexpected-response-error = අනපේක්‍ෂිත සේවාදායක ප්‍රතිචාරයකි.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n\n## Password\n\npdfjs-password-label = මෙම පීඩීඑෆ් ගොනුව විවෘත කිරීමට මුරපදය යොදන්න.\npdfjs-password-invalid = වැරදි මුරපදයකි. නැවත උත්සාහ කරන්න.\npdfjs-password-ok-button = හරි\npdfjs-password-cancel-button = අවලංගු\npdfjs-web-fonts-disabled = වියමන අකුරු අබලයි: පීඩීඑෆ් වෙත කාවැද්දූ රුවකුරු භාවිතා කළ නොහැකිය.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = පෙළ\npdfjs-editor-free-text-button-label = පෙළ\npdfjs-editor-ink-button =\n    .title = අඳින්න\npdfjs-editor-ink-button-label = අඳින්න\n# Editor Parameters\npdfjs-editor-free-text-color-input = වර්ණය\npdfjs-editor-free-text-size-input = තරම\npdfjs-editor-ink-color-input = වර්ණය\npdfjs-editor-ink-thickness-input = ඝණකම\npdfjs-free-text =\n    .aria-label = වදන් සකසනය\npdfjs-free-text-default-content = ලිවීීම අරඹන්න…\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/sk/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Predchádzajúca strana\npdfjs-previous-button-label = Predchádzajúca\npdfjs-next-button =\n    .title = Nasledujúca strana\npdfjs-next-button-label = Nasledujúca\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Strana\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = z { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } z { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Zmenšiť veľkosť\npdfjs-zoom-out-button-label = Zmenšiť veľkosť\npdfjs-zoom-in-button =\n    .title = Zväčšiť veľkosť\npdfjs-zoom-in-button-label = Zväčšiť veľkosť\npdfjs-zoom-select =\n    .title = Nastavenie veľkosti\npdfjs-presentation-mode-button =\n    .title = Prepnúť na režim prezentácie\npdfjs-presentation-mode-button-label = Režim prezentácie\npdfjs-open-file-button =\n    .title = Otvoriť súbor\npdfjs-open-file-button-label = Otvoriť\npdfjs-print-button =\n    .title = Tlačiť\npdfjs-print-button-label = Tlačiť\npdfjs-save-button =\n    .title = Uložiť\npdfjs-save-button-label = Uložiť\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Stiahnuť\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Stiahnuť\npdfjs-bookmark-button =\n    .title = Aktuálna stránka (zobraziť adresu URL z aktuálnej stránky)\npdfjs-bookmark-button-label = Aktuálna stránka\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Otvoriť v aplikácii\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Otvoriť v aplikácii\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Nástroje\npdfjs-tools-button-label = Nástroje\npdfjs-first-page-button =\n    .title = Prejsť na prvú stranu\npdfjs-first-page-button-label = Prejsť na prvú stranu\npdfjs-last-page-button =\n    .title = Prejsť na poslednú stranu\npdfjs-last-page-button-label = Prejsť na poslednú stranu\npdfjs-page-rotate-cw-button =\n    .title = Otočiť v smere hodinových ručičiek\npdfjs-page-rotate-cw-button-label = Otočiť v smere hodinových ručičiek\npdfjs-page-rotate-ccw-button =\n    .title = Otočiť proti smeru hodinových ručičiek\npdfjs-page-rotate-ccw-button-label = Otočiť proti smeru hodinových ručičiek\npdfjs-cursor-text-select-tool-button =\n    .title = Povoliť výber textu\npdfjs-cursor-text-select-tool-button-label = Výber textu\npdfjs-cursor-hand-tool-button =\n    .title = Povoliť nástroj ruka\npdfjs-cursor-hand-tool-button-label = Nástroj ruka\npdfjs-scroll-page-button =\n    .title = Použiť rolovanie po stránkach\npdfjs-scroll-page-button-label = Rolovanie po stránkach\npdfjs-scroll-vertical-button =\n    .title = Používať zvislé posúvanie\npdfjs-scroll-vertical-button-label = Zvislé posúvanie\npdfjs-scroll-horizontal-button =\n    .title = Používať vodorovné posúvanie\npdfjs-scroll-horizontal-button-label = Vodorovné posúvanie\npdfjs-scroll-wrapped-button =\n    .title = Použiť postupné posúvanie\npdfjs-scroll-wrapped-button-label = Postupné posúvanie\npdfjs-spread-none-button =\n    .title = Nezdružovať stránky\npdfjs-spread-none-button-label = Žiadne združovanie\npdfjs-spread-odd-button =\n    .title = Združí stránky a umiestni nepárne stránky vľavo\npdfjs-spread-odd-button-label = Združiť stránky (nepárne vľavo)\npdfjs-spread-even-button =\n    .title = Združí stránky a umiestni párne stránky vľavo\npdfjs-spread-even-button-label = Združiť stránky (párne vľavo)\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Vlastnosti dokumentu…\npdfjs-document-properties-button-label = Vlastnosti dokumentu…\npdfjs-document-properties-file-name = Názov súboru:\npdfjs-document-properties-file-size = Veľkosť súboru:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } kB ({ $size_b } bajtov)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bajtov)\npdfjs-document-properties-title = Názov:\npdfjs-document-properties-author = Autor:\npdfjs-document-properties-subject = Predmet:\npdfjs-document-properties-keywords = Kľúčové slová:\npdfjs-document-properties-creation-date = Dátum vytvorenia:\npdfjs-document-properties-modification-date = Dátum úpravy:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Aplikácia:\npdfjs-document-properties-producer = Tvorca PDF:\npdfjs-document-properties-version = Verzia PDF:\npdfjs-document-properties-page-count = Počet strán:\npdfjs-document-properties-page-size = Veľkosť stránky:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = na výšku\npdfjs-document-properties-page-size-orientation-landscape = na šírku\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = List\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Rýchle zobrazovanie z webu:\npdfjs-document-properties-linearized-yes = Áno\npdfjs-document-properties-linearized-no = Nie\npdfjs-document-properties-close-button = Zavrieť\n\n## Print\n\npdfjs-print-progress-message = Príprava dokumentu na tlač…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress } %\npdfjs-print-progress-close-button = Zrušiť\npdfjs-printing-not-supported = Upozornenie: tlač nie je v tomto prehliadači plne podporovaná.\npdfjs-printing-not-ready = Upozornenie: súbor PDF nie je plne načítaný pre tlač.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Prepnúť bočný panel\npdfjs-toggle-sidebar-notification-button =\n    .title = Prepnúť bočný panel (dokument obsahuje osnovu/prílohy/vrstvy)\npdfjs-toggle-sidebar-button-label = Prepnúť bočný panel\npdfjs-document-outline-button =\n    .title = Zobraziť osnovu dokumentu (dvojitým kliknutím rozbalíte/zbalíte všetky položky)\npdfjs-document-outline-button-label = Osnova dokumentu\npdfjs-attachments-button =\n    .title = Zobraziť prílohy\npdfjs-attachments-button-label = Prílohy\npdfjs-layers-button =\n    .title = Zobraziť vrstvy (dvojitým kliknutím uvediete všetky vrstvy do pôvodného stavu)\npdfjs-layers-button-label = Vrstvy\npdfjs-thumbs-button =\n    .title = Zobraziť miniatúry\npdfjs-thumbs-button-label = Miniatúry\npdfjs-current-outline-item-button =\n    .title = Nájsť aktuálnu položku v osnove\npdfjs-current-outline-item-button-label = Aktuálna položka v osnove\npdfjs-findbar-button =\n    .title = Hľadať v dokumente\npdfjs-findbar-button-label = Hľadať\npdfjs-additional-layers = Ďalšie vrstvy\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Strana { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatúra strany { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Hľadať\n    .placeholder = Hľadať v dokumente…\npdfjs-find-previous-button =\n    .title = Vyhľadať predchádzajúci výskyt reťazca\npdfjs-find-previous-button-label = Predchádzajúce\npdfjs-find-next-button =\n    .title = Vyhľadať ďalší výskyt reťazca\npdfjs-find-next-button-label = Ďalšie\npdfjs-find-highlight-checkbox = Zvýrazniť všetky\npdfjs-find-match-case-checkbox-label = Rozlišovať veľkosť písmen\npdfjs-find-match-diacritics-checkbox-label = Rozlišovať diakritiku\npdfjs-find-entire-word-checkbox-label = Celé slová\npdfjs-find-reached-top = Bol dosiahnutý začiatok stránky, pokračuje sa od konca\npdfjs-find-reached-bottom = Bol dosiahnutý koniec stránky, pokračuje sa od začiatku\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] Výskyt { $current } z { $total }\n        [few] Výskyt { $current } z { $total }\n        [many] Výskyt { $current } z { $total }\n       *[other] Výskyt { $current } z { $total }\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Viac ako { $limit } výskyt\n        [few] Viac ako { $limit } výskyty\n        [many] Viac ako { $limit } výskytov\n       *[other] Viac ako { $limit } výskytov\n    }\npdfjs-find-not-found = Výraz nebol nájdený\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Na šírku strany\npdfjs-page-scale-fit = Na veľkosť strany\npdfjs-page-scale-auto = Automatická veľkosť\npdfjs-page-scale-actual = Skutočná veľkosť\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale } %\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Strana { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Počas načítavania dokumentu PDF sa vyskytla chyba.\npdfjs-invalid-file-error = Neplatný alebo poškodený súbor PDF.\npdfjs-missing-file-error = Chýbajúci súbor PDF.\npdfjs-unexpected-response-error = Neočakávaná odpoveď zo servera.\npdfjs-rendering-error = Pri vykresľovaní stránky sa vyskytla chyba.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Anotácia typu { $type }]\n\n## Password\n\npdfjs-password-label = Ak chcete otvoriť tento súbor PDF, zadajte jeho heslo.\npdfjs-password-invalid = Heslo nie je platné. Skúste to znova.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Zrušiť\npdfjs-web-fonts-disabled = Webové písma sú vypnuté: nie je možné použiť písma vložené do súboru PDF.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Text\npdfjs-editor-free-text-button-label = Text\npdfjs-editor-ink-button =\n    .title = Kresliť\npdfjs-editor-ink-button-label = Kresliť\npdfjs-editor-stamp-button =\n    .title = Pridať alebo upraviť obrázky\npdfjs-editor-stamp-button-label = Pridať alebo upraviť obrázky\npdfjs-editor-highlight-button =\n    .title = Zvýrazniť\npdfjs-editor-highlight-button-label = Zvýrazniť\npdfjs-highlight-floating-button =\n    .title = Zvýrazniť\npdfjs-highlight-floating-button1 =\n    .title = Zvýrazniť\n    .aria-label = Zvýrazniť\npdfjs-highlight-floating-button-label = Zvýrazniť\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Odstrániť kresbu\npdfjs-editor-remove-freetext-button =\n    .title = Odstrániť text\npdfjs-editor-remove-stamp-button =\n    .title = Odstrániť obrázok\npdfjs-editor-remove-highlight-button =\n    .title = Odstrániť zvýraznenie\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Farba\npdfjs-editor-free-text-size-input = Veľkosť\npdfjs-editor-ink-color-input = Farba\npdfjs-editor-ink-thickness-input = Hrúbka\npdfjs-editor-ink-opacity-input = Priehľadnosť\npdfjs-editor-stamp-add-image-button =\n    .title = Pridať obrázok\npdfjs-editor-stamp-add-image-button-label = Pridať obrázok\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Hrúbka\npdfjs-editor-free-highlight-thickness-title =\n    .title = Zmeňte hrúbku pre zvýrazňovanie iných položiek ako textu\npdfjs-free-text =\n    .aria-label = Textový editor\npdfjs-free-text-default-content = Začnite písať…\npdfjs-ink =\n    .aria-label = Editor kreslenia\npdfjs-ink-canvas =\n    .aria-label = Obrázok vytvorený používateľom\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Alternatívny text\npdfjs-editor-alt-text-edit-button-label = Upraviť alternatívny text\npdfjs-editor-alt-text-dialog-label = Vyberte možnosť\npdfjs-editor-alt-text-dialog-description = Alternatívny text (alt text) pomáha, keď ľudia obrázok nevidia alebo sa nenačítava.\npdfjs-editor-alt-text-add-description-label = Pridať popis\npdfjs-editor-alt-text-add-description-description = Zamerajte sa na 1-2 vety, ktoré popisujú predmet, prostredie alebo akcie.\npdfjs-editor-alt-text-mark-decorative-label = Označiť ako dekoratívny\npdfjs-editor-alt-text-mark-decorative-description = Používa sa na ozdobné obrázky, ako sú okraje alebo vodoznaky.\npdfjs-editor-alt-text-cancel-button = Zrušiť\npdfjs-editor-alt-text-save-button = Uložiť\npdfjs-editor-alt-text-decorative-tooltip = Označený ako dekoratívny\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Napríklad: „Mladý muž si sadá za stôl, aby sa najedol“\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Ľavý horný roh – zmena veľkosti\npdfjs-editor-resizer-label-top-middle = Horný stred – zmena veľkosti\npdfjs-editor-resizer-label-top-right = Pravý horný roh – zmena veľkosti\npdfjs-editor-resizer-label-middle-right = Vpravo uprostred – zmena veľkosti\npdfjs-editor-resizer-label-bottom-right = Pravý dolný roh – zmena veľkosti\npdfjs-editor-resizer-label-bottom-middle = Stred dole – zmena veľkosti\npdfjs-editor-resizer-label-bottom-left = Ľavý dolný roh – zmena veľkosti\npdfjs-editor-resizer-label-middle-left = Vľavo uprostred – zmena veľkosti\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Farba zvýraznenia\npdfjs-editor-colorpicker-button =\n    .title = Zmeniť farbu\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Výber farieb\npdfjs-editor-colorpicker-yellow =\n    .title = Žltá\npdfjs-editor-colorpicker-green =\n    .title = Zelená\npdfjs-editor-colorpicker-blue =\n    .title = Modrá\npdfjs-editor-colorpicker-pink =\n    .title = Ružová\npdfjs-editor-colorpicker-red =\n    .title = Červená\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Zobraziť všetko\npdfjs-editor-highlight-show-all-button =\n    .title = Zobraziť všetko\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/skr/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = پچھلا ورقہ\npdfjs-previous-button-label = پچھلا\npdfjs-next-button =\n    .title = اڳلا ورقہ\npdfjs-next-button-label = اڳلا\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = ورقہ\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = { $pagesCount } دا\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } دا { $pagesCount })\npdfjs-zoom-out-button =\n    .title = زوم آؤٹ\npdfjs-zoom-out-button-label = زوم آؤٹ\npdfjs-zoom-in-button =\n    .title = زوم اِن\npdfjs-zoom-in-button-label = زوم اِن\npdfjs-zoom-select =\n    .title = زوم\npdfjs-presentation-mode-button =\n    .title = پریزنٹیشن موڈ تے سوئچ کرو\npdfjs-presentation-mode-button-label = پریزنٹیشن موڈ\npdfjs-open-file-button =\n    .title = فائل کھولو\npdfjs-open-file-button-label = کھولو\npdfjs-print-button =\n    .title = چھاپو\npdfjs-print-button-label = چھاپو\npdfjs-save-button =\n    .title = ہتھیکڑا کرو\npdfjs-save-button-label = ہتھیکڑا کرو\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = ڈاؤن لوڈ\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = ڈاؤن لوڈ\npdfjs-bookmark-button =\n    .title = موجودہ ورقہ (موجودہ ورقے کنوں یوآرایل ݙیکھو)\npdfjs-bookmark-button-label = موجودہ ورقہ\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = اوزار\npdfjs-tools-button-label = اوزار\npdfjs-first-page-button =\n    .title = پہلے ورقے تے ونڄو\npdfjs-first-page-button-label = پہلے ورقے تے ونڄو\npdfjs-last-page-button =\n    .title = چھیکڑی ورقے تے ونڄو\npdfjs-last-page-button-label = چھیکڑی ورقے تے ونڄو\npdfjs-page-rotate-cw-button =\n    .title = گھڑی وانگوں گھماؤ\npdfjs-page-rotate-cw-button-label = گھڑی وانگوں گھماؤ\npdfjs-page-rotate-ccw-button =\n    .title = گھڑی تے اُپٹھ گھماؤ\npdfjs-page-rotate-ccw-button-label = گھڑی تے اُپٹھ گھماؤ\npdfjs-cursor-text-select-tool-button =\n    .title = متن منتخب کݨ والا آلہ فعال بݨاؤ\npdfjs-cursor-text-select-tool-button-label = متن منتخب کرݨ والا آلہ\npdfjs-cursor-hand-tool-button =\n    .title = ہینڈ ٹول فعال بݨاؤ\npdfjs-cursor-hand-tool-button-label = ہینڈ ٹول\npdfjs-scroll-page-button =\n    .title = پیج سکرولنگ استعمال کرو\npdfjs-scroll-page-button-label = پیج سکرولنگ\npdfjs-scroll-vertical-button =\n    .title = عمودی سکرولنگ استعمال کرو\npdfjs-scroll-vertical-button-label = عمودی سکرولنگ\npdfjs-scroll-horizontal-button =\n    .title = افقی سکرولنگ استعمال کرو\npdfjs-scroll-horizontal-button-label = افقی سکرولنگ\npdfjs-scroll-wrapped-button =\n    .title = ویڑھی ہوئی سکرولنگ استعمال کرو\npdfjs-scroll-wrapped-button-label = وہڑھی ہوئی سکرولنگ\npdfjs-spread-none-button =\n    .title = پیج سپریڈز وِچ شامل نہ تھیوو۔\npdfjs-spread-none-button-label = کوئی پولھ کائنی\npdfjs-spread-odd-button =\n    .title = طاق نمبر والے ورقیاں دے نال شروع تھیوݨ والے پیج سپریڈز وِچ شامل تھیوو۔\npdfjs-spread-odd-button-label = تاک پھیلاؤ\npdfjs-spread-even-button =\n    .title = جفت نمر والے ورقیاں نال شروع تھیوݨ والے پیج سپریڈز وِ شامل تھیوو۔\npdfjs-spread-even-button-label = جفت پھیلاؤ\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = دستاویز خواص…\npdfjs-document-properties-button-label = دستاویز خواص …\npdfjs-document-properties-file-name = فائل دا ناں:\npdfjs-document-properties-file-size = فائل دا سائز:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } کے بی ({ $size_b } بائٹس)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } ایم بی ({ $size_b } بائٹس)\npdfjs-document-properties-title = عنوان:\npdfjs-document-properties-author = تخلیق کار:\npdfjs-document-properties-subject = موضوع:\npdfjs-document-properties-keywords = کلیدی الفاظ:\npdfjs-document-properties-creation-date = تخلیق دی تاریخ:\npdfjs-document-properties-modification-date = ترمیم دی تاریخ:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = تخلیق کار:\npdfjs-document-properties-producer = PDF پیدا کار:\npdfjs-document-properties-version = PDF ورژن:\npdfjs-document-properties-page-count = ورقہ شماری:\npdfjs-document-properties-page-size = ورقہ دی سائز:\npdfjs-document-properties-page-size-unit-inches = وِچ\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = عمودی انداز\npdfjs-document-properties-page-size-orientation-landscape = افقى انداز\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = لیٹر\npdfjs-document-properties-page-size-name-legal = قنونی\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = تکھا ویب نظارہ:\npdfjs-document-properties-linearized-yes = جیا\npdfjs-document-properties-linearized-no = کو\npdfjs-document-properties-close-button = بند کرو\n\n## Print\n\npdfjs-print-progress-message = چھاپݨ کیتے دستاویز تیار تھیندے پئے ہن …\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = منسوخ کرو\npdfjs-printing-not-supported = چتاوݨی: چھپائی ایں براؤزر تے پوری طراں معاونت شدہ کائنی۔\npdfjs-printing-not-ready = چتاوݨی: PDF چھپائی کیتے پوری طراں لوڈ نئیں تھئی۔\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = سائیڈ بار ٹوگل کرو\npdfjs-toggle-sidebar-notification-button =\n    .title = سائیڈ بار ٹوگل کرو (دستاویز وِچ آؤٹ لائن/ منسلکات/ پرتاں شامل ہن)\npdfjs-toggle-sidebar-button-label = سائیڈ بار ٹوگل کرو\npdfjs-document-outline-button =\n    .title = دستاویز دا خاکہ ݙکھاؤ (تمام آئٹمز کوں پھیلاوݨ/سنگوڑݨ کیتے ڈبل کلک کرو)\npdfjs-document-outline-button-label = دستاویز آؤٹ لائن\npdfjs-attachments-button =\n    .title = نتھیاں ݙکھاؤ\npdfjs-attachments-button-label = منسلکات\npdfjs-layers-button =\n    .title = پرتاں ݙکھاؤ (تمام پرتاں کوں ڈیفالٹ حالت وِچ دوبارہ ترتیب ݙیوݨ کیتے ڈبل کلک کرو)\npdfjs-layers-button-label = پرتاں\npdfjs-thumbs-button =\n    .title = تھمبنیل ݙکھاؤ\npdfjs-thumbs-button-label = تھمبنیلز\npdfjs-current-outline-item-button =\n    .title = موجودہ آؤٹ لائن آئٹم لبھو\npdfjs-current-outline-item-button-label = موجودہ آؤٹ لائن آئٹم\npdfjs-findbar-button =\n    .title = دستاویز وِچ لبھو\npdfjs-findbar-button-label = لبھو\npdfjs-additional-layers = اضافی پرتاں\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = ورقہ { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = ورقے دا تھمبنیل { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = لبھو\n    .placeholder = دستاویز وِچ لبھو …\npdfjs-find-previous-button =\n    .title = فقرے دا پچھلا واقعہ لبھو\npdfjs-find-previous-button-label = پچھلا\npdfjs-find-next-button =\n    .title = فقرے دا اڳلا واقعہ لبھو\npdfjs-find-next-button-label = اڳلا\npdfjs-find-highlight-checkbox = تمام نشابر کرو\npdfjs-find-match-case-checkbox-label = حروف مشابہ کرو\npdfjs-find-match-diacritics-checkbox-label = ڈائیکرٹکس مشابہ کرو\npdfjs-find-entire-word-checkbox-label = تمام الفاظ\npdfjs-find-reached-top = ورقے دے شروع تے پُج ڳیا، تلوں جاری کیتا ڳیا\npdfjs-find-reached-bottom = ورقے دے پاند تے پُڄ ڳیا، اُتوں شروع کیتا ڳیا\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $total } وِچوں { $current } مشابہ\n       *[other] { $total } وِچوں { $current } مشابے\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] { $limit } توں ودھ مماثلت۔\n       *[other] { $limit } توں ودھ مماثلتاں۔\n    }\npdfjs-find-not-found = فقرہ نئیں ملیا\n\n## Predefined zoom values\n\npdfjs-page-scale-width = ورقے دی چوڑائی\npdfjs-page-scale-fit = ورقہ فٹنگ\npdfjs-page-scale-auto = آپوں آپ زوم\npdfjs-page-scale-actual = اصل میچا\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = ورقہ { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = PDF لوڈ کریندے ویلھے نقص آ ڳیا۔\npdfjs-invalid-file-error = غلط یا خراب شدہ PDF فائل۔\npdfjs-missing-file-error = PDF فائل غائب ہے۔\npdfjs-unexpected-response-error = سرور دا غیر متوقع جواب۔\npdfjs-rendering-error = ورقہ رینڈر کریندے ویلھے ہک خرابی پیش آڳئی۔\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } تشریح]\n\n## Password\n\npdfjs-password-label = ایہ PDF فائل کھولݨ کیتے پاس ورڈ درج کرو۔\npdfjs-password-invalid = غلط پاس ورڈ: براہ مہربانی ولدا کوشش کرو۔\npdfjs-password-ok-button = ٹھیک ہے\npdfjs-password-cancel-button = منسوخ کرو\npdfjs-web-fonts-disabled = ویب فونٹس غیر فعال ہن: ایمبیڈڈ PDF  فونٹس استعمال کرݨ کنوں قاصر ہن\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = متن\npdfjs-editor-free-text-button-label = متن\npdfjs-editor-ink-button =\n    .title = چھکو\npdfjs-editor-ink-button-label = چھکو\npdfjs-editor-stamp-button =\n    .title = تصویراں کوں شامل کرو یا ترمیم کرو\npdfjs-editor-stamp-button-label = تصویراں کوں شامل کرو یا ترمیم کرو\npdfjs-editor-highlight-button =\n    .title = نمایاں کرو\npdfjs-editor-highlight-button-label = نمایاں کرو\npdfjs-highlight-floating-button =\n    .title = نمایاں کرو\npdfjs-highlight-floating-button1 =\n    .title = نمایاں کرو\n    .aria-label = نمایاں کرو\npdfjs-highlight-floating-button-label = نمایاں کرو\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = ڈرائینگ ہٹاؤ\npdfjs-editor-remove-freetext-button =\n    .title = متن ہٹاؤ\npdfjs-editor-remove-stamp-button =\n    .title = تصویر ہٹاؤ\npdfjs-editor-remove-highlight-button =\n    .title = نمایاں ہٹاؤ\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = رنگ\npdfjs-editor-free-text-size-input = سائز\npdfjs-editor-ink-color-input = رنگ\npdfjs-editor-ink-thickness-input = ٹھولھ\npdfjs-editor-ink-opacity-input = دھندلاپن\npdfjs-editor-stamp-add-image-button =\n    .title = تصویر شامل کرو\npdfjs-editor-stamp-add-image-button-label = تصویر شامل کرو\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = مُٹاݨ\npdfjs-editor-free-highlight-thickness-title =\n    .title = متن توں ان٘ج ٻئے شئیں کوں نمایاں کرݨ ویلے مُٹاݨ کوں بدلو\npdfjs-free-text =\n    .aria-label = ٹیکسٹ ایڈیٹر\npdfjs-free-text-default-content = ٹائپنگ شروع کرو …\npdfjs-ink =\n    .aria-label = ڈرا ایڈیٹر\npdfjs-ink-canvas =\n    .aria-label = صارف دی بݨائی ہوئی تصویر\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Alt متن\npdfjs-editor-alt-text-edit-button-label = alt متن وِچ ترمیم کرو\npdfjs-editor-alt-text-dialog-label = ہِک اختیار چُݨو\npdfjs-editor-alt-text-dialog-description = Alt متن (متبادل متن) اِیں ویلے مَدَت کرین٘دا ہِے جہڑیلے لوک تصویر کوں نِھیں ݙیکھ سڳدے یا جہڑیلے اِیہ لوڈ کائنی تِھین٘دا۔\npdfjs-editor-alt-text-add-description-label = تفصیل شامل کرو\npdfjs-editor-alt-text-add-description-description = 1-2 جملیاں دا مقصد جہڑے موضوع، ترتیب، یا اعمال کوں بیان کرین٘دے ہِن۔\npdfjs-editor-alt-text-mark-decorative-label = آرائشی طور تے نشان زد کرو\npdfjs-editor-alt-text-mark-decorative-description = اِیہ آرائشی تصویراں کِیتے استعمال تِھین٘دا ہِے، جیویں بارڈر یا واٹر مارکس۔\npdfjs-editor-alt-text-cancel-button = منسوخ\npdfjs-editor-alt-text-save-button = محفوظ\npdfjs-editor-alt-text-decorative-tooltip = آرائشی دے طور تے نشان زد تِھی ڳِیا\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = مثال دے طور تے، \"ہِک جؤان کھاݨاں کھاوݨ کِیتے میز اُتّے ٻیٹھا ہِے\"\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = اُتلی کَھٻّی نُکّڑ — سائز بدلو\npdfjs-editor-resizer-label-top-middle = اُتلا وِچلا — سائز بدلو\npdfjs-editor-resizer-label-top-right = اُتلی سَڄّی نُکَّڑ — سائز بدلو\npdfjs-editor-resizer-label-middle-right = وِچلا سڄّا — سائز بدلو\npdfjs-editor-resizer-label-bottom-right = تلوِیں سَڄّی نُکَّڑ — سائز بدلو\npdfjs-editor-resizer-label-bottom-middle = تلواں وِچلا — سائز بدلو\npdfjs-editor-resizer-label-bottom-left = تلوِیں کَھٻّی نُکّڑ — سائز بدلو\npdfjs-editor-resizer-label-middle-left = وِچلا کَھٻّا — سائز بدلو\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = نشابر رنگ\npdfjs-editor-colorpicker-button =\n    .title = رنگ بدلو\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = رنگ اختیارات\npdfjs-editor-colorpicker-yellow =\n    .title = پیلا\npdfjs-editor-colorpicker-green =\n    .title = ساوا\npdfjs-editor-colorpicker-blue =\n    .title = نیلا\npdfjs-editor-colorpicker-pink =\n    .title = گلابی\npdfjs-editor-colorpicker-red =\n    .title = لال\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = سارے ݙکھاؤ\npdfjs-editor-highlight-show-all-button =\n    .title = سارے ݙکھاؤ\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/sl/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Prejšnja stran\npdfjs-previous-button-label = Nazaj\npdfjs-next-button =\n    .title = Naslednja stran\npdfjs-next-button-label = Naprej\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Stran\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = od { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } od { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Pomanjšaj\npdfjs-zoom-out-button-label = Pomanjšaj\npdfjs-zoom-in-button =\n    .title = Povečaj\npdfjs-zoom-in-button-label = Povečaj\npdfjs-zoom-select =\n    .title = Povečava\npdfjs-presentation-mode-button =\n    .title = Preklopi v način predstavitve\npdfjs-presentation-mode-button-label = Način predstavitve\npdfjs-open-file-button =\n    .title = Odpri datoteko\npdfjs-open-file-button-label = Odpri\npdfjs-print-button =\n    .title = Natisni\npdfjs-print-button-label = Natisni\npdfjs-save-button =\n    .title = Shrani\npdfjs-save-button-label = Shrani\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Prenesi\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Prenesi\npdfjs-bookmark-button =\n    .title = Trenutna stran (prikaži URL, ki vodi do trenutne strani)\npdfjs-bookmark-button-label = Na trenutno stran\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Orodja\npdfjs-tools-button-label = Orodja\npdfjs-first-page-button =\n    .title = Pojdi na prvo stran\npdfjs-first-page-button-label = Pojdi na prvo stran\npdfjs-last-page-button =\n    .title = Pojdi na zadnjo stran\npdfjs-last-page-button-label = Pojdi na zadnjo stran\npdfjs-page-rotate-cw-button =\n    .title = Zavrti v smeri urnega kazalca\npdfjs-page-rotate-cw-button-label = Zavrti v smeri urnega kazalca\npdfjs-page-rotate-ccw-button =\n    .title = Zavrti v nasprotni smeri urnega kazalca\npdfjs-page-rotate-ccw-button-label = Zavrti v nasprotni smeri urnega kazalca\npdfjs-cursor-text-select-tool-button =\n    .title = Omogoči orodje za izbor besedila\npdfjs-cursor-text-select-tool-button-label = Orodje za izbor besedila\npdfjs-cursor-hand-tool-button =\n    .title = Omogoči roko\npdfjs-cursor-hand-tool-button-label = Roka\npdfjs-scroll-page-button =\n    .title = Uporabi drsenje po strani\npdfjs-scroll-page-button-label = Drsenje po strani\npdfjs-scroll-vertical-button =\n    .title = Uporabi navpično drsenje\npdfjs-scroll-vertical-button-label = Navpično drsenje\npdfjs-scroll-horizontal-button =\n    .title = Uporabi vodoravno drsenje\npdfjs-scroll-horizontal-button-label = Vodoravno drsenje\npdfjs-scroll-wrapped-button =\n    .title = Uporabi ovito drsenje\npdfjs-scroll-wrapped-button-label = Ovito drsenje\npdfjs-spread-none-button =\n    .title = Ne združuj razponov strani\npdfjs-spread-none-button-label = Brez razponov\npdfjs-spread-odd-button =\n    .title = Združuj razpone strani z začetkom pri lihih straneh\npdfjs-spread-odd-button-label = Lihi razponi\npdfjs-spread-even-button =\n    .title = Združuj razpone strani z začetkom pri sodih straneh\npdfjs-spread-even-button-label = Sodi razponi\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Lastnosti dokumenta …\npdfjs-document-properties-button-label = Lastnosti dokumenta …\npdfjs-document-properties-file-name = Ime datoteke:\npdfjs-document-properties-file-size = Velikost datoteke:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bajtov)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bajtov)\npdfjs-document-properties-title = Ime:\npdfjs-document-properties-author = Avtor:\npdfjs-document-properties-subject = Tema:\npdfjs-document-properties-keywords = Ključne besede:\npdfjs-document-properties-creation-date = Datum nastanka:\npdfjs-document-properties-modification-date = Datum spremembe:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Ustvaril:\npdfjs-document-properties-producer = Izdelovalec PDF:\npdfjs-document-properties-version = Različica PDF:\npdfjs-document-properties-page-count = Število strani:\npdfjs-document-properties-page-size = Velikost strani:\npdfjs-document-properties-page-size-unit-inches = palcev\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = pokončno\npdfjs-document-properties-page-size-orientation-landscape = ležeče\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Pismo\npdfjs-document-properties-page-size-name-legal = Pravno\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Hitri spletni ogled:\npdfjs-document-properties-linearized-yes = Da\npdfjs-document-properties-linearized-no = Ne\npdfjs-document-properties-close-button = Zapri\n\n## Print\n\npdfjs-print-progress-message = Priprava dokumenta na tiskanje …\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress } %\npdfjs-print-progress-close-button = Prekliči\npdfjs-printing-not-supported = Opozorilo: ta brskalnik ne podpira vseh možnosti tiskanja.\npdfjs-printing-not-ready = Opozorilo: PDF ni v celoti naložen za tiskanje.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Preklopi stransko vrstico\npdfjs-toggle-sidebar-notification-button =\n    .title = Preklopi stransko vrstico (dokument vsebuje oris/priponke/plasti)\npdfjs-toggle-sidebar-button-label = Preklopi stransko vrstico\npdfjs-document-outline-button =\n    .title = Prikaži oris dokumenta (dvokliknite za razširitev/strnitev vseh predmetov)\npdfjs-document-outline-button-label = Oris dokumenta\npdfjs-attachments-button =\n    .title = Prikaži priponke\npdfjs-attachments-button-label = Priponke\npdfjs-layers-button =\n    .title = Prikaži plasti (dvokliknite za ponastavitev vseh plasti na privzeto stanje)\npdfjs-layers-button-label = Plasti\npdfjs-thumbs-button =\n    .title = Prikaži sličice\npdfjs-thumbs-button-label = Sličice\npdfjs-current-outline-item-button =\n    .title = Najdi trenutni predmet orisa\npdfjs-current-outline-item-button-label = Trenutni predmet orisa\npdfjs-findbar-button =\n    .title = Iskanje po dokumentu\npdfjs-findbar-button-label = Najdi\npdfjs-additional-layers = Dodatne plasti\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Stran { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Sličica strani { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Najdi\n    .placeholder = Najdi v dokumentu …\npdfjs-find-previous-button =\n    .title = Najdi prejšnjo ponovitev iskanega\npdfjs-find-previous-button-label = Najdi nazaj\npdfjs-find-next-button =\n    .title = Najdi naslednjo ponovitev iskanega\npdfjs-find-next-button-label = Najdi naprej\npdfjs-find-highlight-checkbox = Označi vse\npdfjs-find-match-case-checkbox-label = Razlikuj velike/male črke\npdfjs-find-match-diacritics-checkbox-label = Razlikuj diakritične znake\npdfjs-find-entire-word-checkbox-label = Cele besede\npdfjs-find-reached-top = Dosežen začetek dokumenta iz smeri konca\npdfjs-find-reached-bottom = Doseženo konec dokumenta iz smeri začetka\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] Zadetek { $current } od { $total }\n        [two] Zadetek { $current } od { $total }\n        [few] Zadetek { $current } od { $total }\n       *[other] Zadetek { $current } od { $total }\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Več kot { $limit } zadetek\n        [two] Več kot { $limit } zadetka\n        [few] Več kot { $limit } zadetki\n       *[other] Več kot { $limit } zadetkov\n    }\npdfjs-find-not-found = Iskanega ni mogoče najti\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Širina strani\npdfjs-page-scale-fit = Prilagodi stran\npdfjs-page-scale-auto = Samodejno\npdfjs-page-scale-actual = Dejanska velikost\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale } %\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Stran { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Med nalaganjem datoteke PDF je prišlo do napake.\npdfjs-invalid-file-error = Neveljavna ali pokvarjena datoteka PDF.\npdfjs-missing-file-error = Ni datoteke PDF.\npdfjs-unexpected-response-error = Nepričakovan odgovor strežnika.\npdfjs-rendering-error = Med pripravljanjem strani je prišlo do napake!\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Opomba vrste { $type }]\n\n## Password\n\npdfjs-password-label = Vnesite geslo za odpiranje te datoteke PDF.\npdfjs-password-invalid = Neveljavno geslo. Poskusite znova.\npdfjs-password-ok-button = V redu\npdfjs-password-cancel-button = Prekliči\npdfjs-web-fonts-disabled = Spletne pisave so onemogočene: vgradnih pisav za PDF ni mogoče uporabiti.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Besedilo\npdfjs-editor-free-text-button-label = Besedilo\npdfjs-editor-ink-button =\n    .title = Riši\npdfjs-editor-ink-button-label = Riši\npdfjs-editor-stamp-button =\n    .title = Dodajanje ali urejanje slik\npdfjs-editor-stamp-button-label = Dodajanje ali urejanje slik\npdfjs-editor-highlight-button =\n    .title = Označevalnik\npdfjs-editor-highlight-button-label = Označevalnik\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Odstrani risbo\npdfjs-editor-remove-freetext-button =\n    .title = Odstrani besedilo\npdfjs-editor-remove-stamp-button =\n    .title = Odstrani sliko\npdfjs-editor-remove-highlight-button =\n    .title = Odstrani označbo\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Barva\npdfjs-editor-free-text-size-input = Velikost\npdfjs-editor-ink-color-input = Barva\npdfjs-editor-ink-thickness-input = Debelina\npdfjs-editor-ink-opacity-input = Neprosojnost\npdfjs-editor-stamp-add-image-button =\n    .title = Dodaj sliko\npdfjs-editor-stamp-add-image-button-label = Dodaj sliko\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Debelina\npdfjs-editor-free-highlight-thickness-title =\n    .title = Spremeni debelino pri označevanju nebesedilnih elementov\npdfjs-free-text =\n    .aria-label = Urejevalnik besedila\npdfjs-free-text-default-content = Začnite tipkati …\npdfjs-ink =\n    .aria-label = Urejevalnik risanja\npdfjs-ink-canvas =\n    .aria-label = Uporabnikova slika\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Nadomestno besedilo\npdfjs-editor-alt-text-edit-button-label = Uredi nadomestno besedilo\npdfjs-editor-alt-text-dialog-label = Izberite možnost\npdfjs-editor-alt-text-dialog-description = Nadomestno besedilo se prikaže tistim, ki ne vidijo slike, ali če se ta ne naloži.\npdfjs-editor-alt-text-add-description-label = Dodaj opis\npdfjs-editor-alt-text-add-description-description = Poskušajte v enem ali dveh stavkih opisati motiv, okolje ali dejanja.\npdfjs-editor-alt-text-mark-decorative-label = Označi kot okrasno\npdfjs-editor-alt-text-mark-decorative-description = Uporablja se za slike, ki služijo samo okrasu, na primer obrobe ali vodne žige.\npdfjs-editor-alt-text-cancel-button = Prekliči\npdfjs-editor-alt-text-save-button = Shrani\npdfjs-editor-alt-text-decorative-tooltip = Označeno kot okrasno\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Na primer: \"Mladenič sedi za mizo pri jedi\"\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Zgornji levi kot – spremeni velikost\npdfjs-editor-resizer-label-top-middle = Zgoraj na sredini – spremeni velikost\npdfjs-editor-resizer-label-top-right = Zgornji desni kot – spremeni velikost\npdfjs-editor-resizer-label-middle-right = Desno na sredini – spremeni velikost\npdfjs-editor-resizer-label-bottom-right = Spodnji desni kot – spremeni velikost\npdfjs-editor-resizer-label-bottom-middle = Spodaj na sredini – spremeni velikost\npdfjs-editor-resizer-label-bottom-left = Spodnji levi kot – spremeni velikost\npdfjs-editor-resizer-label-middle-left = Levo na sredini – spremeni velikost\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Barva označbe\npdfjs-editor-colorpicker-button =\n    .title = Spremeni barvo\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Izbira barve\npdfjs-editor-colorpicker-yellow =\n    .title = Rumena\npdfjs-editor-colorpicker-green =\n    .title = Zelena\npdfjs-editor-colorpicker-blue =\n    .title = Modra\npdfjs-editor-colorpicker-pink =\n    .title = Roza\npdfjs-editor-colorpicker-red =\n    .title = Rdeča\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Prikaži vse\npdfjs-editor-highlight-show-all-button =\n    .title = Prikaži vse\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/son/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Moo bisante\npdfjs-previous-button-label = Bisante\npdfjs-next-button =\n    .title = Jinehere moo\npdfjs-next-button-label = Jine\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Moo\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = { $pagesCount } ra\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } ka hun { $pagesCount }) ra\npdfjs-zoom-out-button =\n    .title = Nakasandi\npdfjs-zoom-out-button-label = Nakasandi\npdfjs-zoom-in-button =\n    .title = Bebbeerandi\npdfjs-zoom-in-button-label = Bebbeerandi\npdfjs-zoom-select =\n    .title = Bebbeerandi\npdfjs-presentation-mode-button =\n    .title = Bere cebeyan alhaali\npdfjs-presentation-mode-button-label = Cebeyan alhaali\npdfjs-open-file-button =\n    .title = Tuku feeri\npdfjs-open-file-button-label = Feeri\npdfjs-print-button =\n    .title = Kar\npdfjs-print-button-label = Kar\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Goyjinawey\npdfjs-tools-button-label = Goyjinawey\npdfjs-first-page-button =\n    .title = Koy moo jinaa ga\npdfjs-first-page-button-label = Koy moo jinaa ga\npdfjs-last-page-button =\n    .title = Koy moo koraa ga\npdfjs-last-page-button-label = Koy moo koraa ga\npdfjs-page-rotate-cw-button =\n    .title = Kuubi kanbe guma here\npdfjs-page-rotate-cw-button-label = Kuubi kanbe guma here\npdfjs-page-rotate-ccw-button =\n    .title = Kuubi kanbe wowa here\npdfjs-page-rotate-ccw-button-label = Kuubi kanbe wowa here\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Takadda mayrawey…\npdfjs-document-properties-button-label = Takadda mayrawey…\npdfjs-document-properties-file-name = Tuku maa:\npdfjs-document-properties-file-size = Tuku adadu:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = KB { $size_kb } (cebsu-ize { $size_b })\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = MB { $size_mb } (cebsu-ize { $size_b })\npdfjs-document-properties-title = Tiiramaa:\npdfjs-document-properties-author = Hantumkaw:\npdfjs-document-properties-subject = Dalil:\npdfjs-document-properties-keywords = Kufalkalimawey:\npdfjs-document-properties-creation-date = Teeyan han:\npdfjs-document-properties-modification-date = Barmayan han:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Teekaw:\npdfjs-document-properties-producer = PDF berandikaw:\npdfjs-document-properties-version = PDF dumi:\npdfjs-document-properties-page-count = Moo hinna:\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\n\n##\n\npdfjs-document-properties-close-button = Daabu\n\n## Print\n\npdfjs-print-progress-message = Goo ma takaddaa soolu k'a kar se…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Naŋ\npdfjs-printing-not-supported = Yaamar: Karyan ši tee ka timme nda ceecikaa woo.\npdfjs-printing-not-ready = Yaamar: PDF ši zunbu ka timme karyan še.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Kanjari ceraw zuu\npdfjs-toggle-sidebar-button-label = Kanjari ceraw zuu\npdfjs-document-outline-button =\n    .title = Takaddaa korfur alhaaloo cebe (naagu cee hinka ka haya-izey kul hayandi/kankamandi)\npdfjs-document-outline-button-label = Takadda filla-boŋ\npdfjs-attachments-button =\n    .title = Hangarey cebe\npdfjs-attachments-button-label = Hangarey\npdfjs-thumbs-button =\n    .title = Kabeboy biyey cebe\npdfjs-thumbs-button-label = Kabeboy biyey\npdfjs-findbar-button =\n    .title = Ceeci takaddaa ra\npdfjs-findbar-button-label = Ceeci\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = { $page } moo\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Kabeboy bii { $page } moo še\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Ceeci\n    .placeholder = Ceeci takaddaa ra…\npdfjs-find-previous-button =\n    .title = Kalimaɲaŋoo bangayri bisantaa ceeci\npdfjs-find-previous-button-label = Bisante\npdfjs-find-next-button =\n    .title = Kalimaɲaŋoo hiino bangayroo ceeci\npdfjs-find-next-button-label = Jine\npdfjs-find-highlight-checkbox = Ikul šilbay\npdfjs-find-match-case-checkbox-label = Harfu-beeriyan hawgay\npdfjs-find-reached-top = A too moŋoo boŋoo, koy jine ka šinitin nda cewoo\npdfjs-find-reached-bottom = A too moɲoo cewoo, koy jine šintioo ga\npdfjs-find-not-found = Kalimaɲaa mana duwandi\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Mooo hayyan\npdfjs-page-scale-fit = Moo sawayan\npdfjs-page-scale-auto = Boŋše azzaati barmayyan\npdfjs-page-scale-actual = Adadu cimi\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = Firka bangay kaŋ PDF goo ma zumandi.\npdfjs-invalid-file-error = PDF tuku laala wala laybante.\npdfjs-missing-file-error = PDF tuku kumante.\npdfjs-unexpected-response-error = Manti feršikaw tuuruyan maatante.\npdfjs-rendering-error = Firka bangay kaŋ moɲoo goo ma willandi.\n\n## Annotations\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = { $type } maasa-caw]\n\n## Password\n\npdfjs-password-label = Šennikufal dam ka PDF tukoo woo feeri.\npdfjs-password-invalid = Šennikufal laalo. Ceeci koyne taare.\npdfjs-password-ok-button = Ayyo\npdfjs-password-cancel-button = Naŋ\npdfjs-web-fonts-disabled = Interneti šigirawey kay: ši hin ka goy nda PDF šigira hurantey.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/sq/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Faqja e Mëparshme\npdfjs-previous-button-label = E mëparshmja\npdfjs-next-button =\n    .title = Faqja Pasuese\npdfjs-next-button-label = Pasuesja\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Faqe\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = nga { $pagesCount } gjithsej\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } nga { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Zvogëlojeni\npdfjs-zoom-out-button-label = Zvogëlojeni\npdfjs-zoom-in-button =\n    .title = Zmadhojeni\npdfjs-zoom-in-button-label = Zmadhojini\npdfjs-zoom-select =\n    .title = Zmadhim/Zvogëlim\npdfjs-presentation-mode-button =\n    .title = Kalo te Mënyra Paraqitje\npdfjs-presentation-mode-button-label = Mënyra Paraqitje\npdfjs-open-file-button =\n    .title = Hapni Kartelë\npdfjs-open-file-button-label = Hape\npdfjs-print-button =\n    .title = Shtypje\npdfjs-print-button-label = Shtype\npdfjs-save-button =\n    .title = Ruaje\npdfjs-save-button-label = Ruaje\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Shkarkojeni\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Shkarkoje\npdfjs-bookmark-button =\n    .title = Faqja e Tanishme (Shihni URL nga Faqja e Tanishme)\npdfjs-bookmark-button-label = Faqja e Tanishme\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Mjete\npdfjs-tools-button-label = Mjete\npdfjs-first-page-button =\n    .title = Kaloni te Faqja e Parë\npdfjs-first-page-button-label = Kaloni te Faqja e Parë\npdfjs-last-page-button =\n    .title = Kaloni te Faqja e Fundit\npdfjs-last-page-button-label = Kaloni te Faqja e Fundit\npdfjs-page-rotate-cw-button =\n    .title = Rrotullojeni Në Kahun Orar\npdfjs-page-rotate-cw-button-label = Rrotulloje Në Kahun Orar\npdfjs-page-rotate-ccw-button =\n    .title = Rrotullojeni Në Kahun Kundërorar\npdfjs-page-rotate-ccw-button-label = Rrotulloje Në Kahun Kundërorar\npdfjs-cursor-text-select-tool-button =\n    .title = Aktivizo Mjet Përzgjedhjeje Teksti\npdfjs-cursor-text-select-tool-button-label = Mjet Përzgjedhjeje Teksti\npdfjs-cursor-hand-tool-button =\n    .title = Aktivizo Mjetin Dorë\npdfjs-cursor-hand-tool-button-label = Mjeti Dorë\npdfjs-scroll-page-button =\n    .title = Përdor Rrëshqitje Në Faqe\npdfjs-scroll-page-button-label = Rrëshqitje Në Faqe\npdfjs-scroll-vertical-button =\n    .title = Përdor Rrëshqitje Vertikale\npdfjs-scroll-vertical-button-label = Rrëshqitje Vertikale\npdfjs-scroll-horizontal-button =\n    .title = Përdor Rrëshqitje Horizontale\npdfjs-scroll-horizontal-button-label = Rrëshqitje Horizontale\npdfjs-scroll-wrapped-button =\n    .title = Përdor Rrëshqitje Me Mbështjellje\npdfjs-scroll-wrapped-button-label = Rrëshqitje Me Mbështjellje\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Veti Dokumenti…\npdfjs-document-properties-button-label = Veti Dokumenti…\npdfjs-document-properties-file-name = Emër kartele:\npdfjs-document-properties-file-size = Madhësi kartele:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bajte)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bajte)\npdfjs-document-properties-title = Titull:\npdfjs-document-properties-author = Autor:\npdfjs-document-properties-subject = Subjekt:\npdfjs-document-properties-keywords = Fjalëkyçe:\npdfjs-document-properties-creation-date = Datë Krijimi:\npdfjs-document-properties-modification-date = Datë Ndryshimi:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Krijues:\npdfjs-document-properties-producer = Prodhues PDF-je:\npdfjs-document-properties-version = Version PDF-je:\npdfjs-document-properties-page-count = Numër Faqesh:\npdfjs-document-properties-page-size = Madhësi Faqeje:\npdfjs-document-properties-page-size-unit-inches = inç\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = portret\npdfjs-document-properties-page-size-orientation-landscape = së gjeri\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Parje e Shpjetë në Web:\npdfjs-document-properties-linearized-yes = Po\npdfjs-document-properties-linearized-no = Jo\npdfjs-document-properties-close-button = Mbylleni\n\n## Print\n\npdfjs-print-progress-message = Po përgatitet dokumenti për shtypje…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Anuloje\npdfjs-printing-not-supported = Kujdes: Shtypja s’mbulohet plotësisht nga ky shfletues.\npdfjs-printing-not-ready = Kujdes: PDF-ja s’është ngarkuar plotësisht që ta shtypni.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Shfaqni/Fshihni Anështyllën\npdfjs-toggle-sidebar-notification-button =\n    .title = Hap/Mbyll Anështylë (dokumenti përmban përvijim/nashkëngjitje/shtresa)\npdfjs-toggle-sidebar-button-label = Shfaq/Fshih Anështyllën\npdfjs-document-outline-button =\n    .title = Shfaqni Përvijim Dokumenti (dyklikoni që të shfaqen/fshihen krejt elementët)\npdfjs-document-outline-button-label = Përvijim Dokumenti\npdfjs-attachments-button =\n    .title = Shfaqni Bashkëngjitje\npdfjs-attachments-button-label = Bashkëngjitje\npdfjs-layers-button =\n    .title = Shfaq Shtresa (dyklikoni që të rikthehen krejt shtresat në gjendjen e tyre parazgjedhje)\npdfjs-layers-button-label = Shtresa\npdfjs-thumbs-button =\n    .title = Shfaqni Miniatura\npdfjs-thumbs-button-label = Miniatura\npdfjs-current-outline-item-button =\n    .title = Gjej Objektin e Tanishëm të Përvijuar\npdfjs-current-outline-item-button-label = Objekt i Tanishëm i Përvijuar\npdfjs-findbar-button =\n    .title = Gjeni në Dokument\npdfjs-findbar-button-label = Gjej\npdfjs-additional-layers = Shtresa Shtesë\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Faqja { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniaturë e Faqes { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Gjej\n    .placeholder = Gjeni në dokument…\npdfjs-find-previous-button =\n    .title = Gjeni hasjen e mëparshme të togfjalëshit\npdfjs-find-previous-button-label = E mëparshmja\npdfjs-find-next-button =\n    .title = Gjeni hasjen pasuese të togfjalëshit\npdfjs-find-next-button-label = Pasuesja\npdfjs-find-highlight-checkbox = Theksoji të tëra\npdfjs-find-match-case-checkbox-label = Siç Është Shkruar\npdfjs-find-match-diacritics-checkbox-label = Me Përputhje Me Shenjat Diakritike\npdfjs-find-entire-word-checkbox-label = Fjalë të Plota\npdfjs-find-reached-top = U mbërrit në krye të dokumentit, vazhduar prej fundit\npdfjs-find-reached-bottom = U mbërrit në fund të dokumentit, vazhduar prej kreut\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } nga { $total } përputhje\n       *[other] { $current } nga { $total } përputhje\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Më tepër se { $limit } përputhje\n       *[other] Më tepër se { $limit } përputhje\n    }\npdfjs-find-not-found = Togfjalësh që s’gjendet\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Gjerësi Faqeje\npdfjs-page-scale-fit = Sa Nxë Faqja\npdfjs-page-scale-auto = Zoom i Vetvetishëm\npdfjs-page-scale-actual = Madhësia Faktike\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Faqja { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Ndodhi një gabim gjatë ngarkimit të PDF-së.\npdfjs-invalid-file-error = Kartelë PDF e pavlefshme ose e dëmtuar.\npdfjs-missing-file-error = Kartelë PDF që mungon.\npdfjs-unexpected-response-error = Përgjigje shërbyesi e papritur.\npdfjs-rendering-error = Ndodhi një gabim gjatë riprodhimit të faqes.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Nënvizim { $type }]\n\n## Password\n\npdfjs-password-label = Jepni fjalëkalimin që të hapet kjo kartelë PDF.\npdfjs-password-invalid = Fjalëkalim i pavlefshëm. Ju lutemi, riprovoni.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Anuloje\npdfjs-web-fonts-disabled = Shkronjat Web janë të çaktivizuara: s’arrihet të përdoren shkronja të trupëzuara në PDF.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Tekst\npdfjs-editor-free-text-button-label = Tekst\npdfjs-editor-ink-button =\n    .title = Vizatoni\npdfjs-editor-ink-button-label = Vizatoni\npdfjs-editor-stamp-button =\n    .title = Shtoni ose përpunoni figura\npdfjs-editor-stamp-button-label = Shtoni ose përpunoni figura\npdfjs-editor-highlight-button =\n    .title = Theksim\npdfjs-editor-highlight-button-label = Theksoje\npdfjs-highlight-floating-button =\n    .title = Theksim\npdfjs-highlight-floating-button1 =\n    .title = Theksim\n    .aria-label = Theksim\npdfjs-highlight-floating-button-label = Theksim\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Hiq vizatim\npdfjs-editor-remove-freetext-button =\n    .title = Hiq tekst\npdfjs-editor-remove-stamp-button =\n    .title = Hiq figurë\npdfjs-editor-remove-highlight-button =\n    .title = Hiqe theksimin\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Ngjyrë\npdfjs-editor-free-text-size-input = Madhësi\npdfjs-editor-ink-color-input = Ngjyrë\npdfjs-editor-ink-thickness-input = Trashësi\npdfjs-editor-ink-opacity-input = Patejdukshmëri\npdfjs-editor-stamp-add-image-button =\n    .title = Shtoni figurë\npdfjs-editor-stamp-add-image-button-label = Shtoni figurë\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Trashësi\npdfjs-editor-free-highlight-thickness-title =\n    .title = Ndryshoni trashësinë kur theksoni objekte tjetër nga tekst\npdfjs-free-text =\n    .aria-label = Përpunues Tekstesh\npdfjs-free-text-default-content = Filloni të shtypni…\npdfjs-ink =\n    .aria-label = Përpunues Vizatimesh\npdfjs-ink-canvas =\n    .aria-label = Figurë e krijuar nga përdoruesi\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Tekst alternativ\npdfjs-editor-alt-text-edit-button-label = Përpunoni tekst alternativ\npdfjs-editor-alt-text-dialog-label = Zgjidhni një mundësi\npdfjs-editor-alt-text-dialog-description = Teksti alt (tekst alternativ) vjen në ndihmë kur njerëzit s’mund të shohin figurën, ose kur ajo nuk ngarkohet.\npdfjs-editor-alt-text-add-description-label = Shtoni një përshkrim\npdfjs-editor-alt-text-add-description-description = Synoni për 1-2 togfjalësha që përshkruajnë subjektin, rrethanat apo veprimet.\npdfjs-editor-alt-text-mark-decorative-label = Vëri shenjë si dekorative\npdfjs-editor-alt-text-mark-decorative-description = Kjo përdoret për figura zbukuruese, fjala vjen, anë, ose watermark-e.\npdfjs-editor-alt-text-cancel-button = Anuloje\npdfjs-editor-alt-text-save-button = Ruaje\npdfjs-editor-alt-text-decorative-tooltip = Iu vu shenjë si dekorative\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Për shembull, “Një djalosh ulet në një tryezë të hajë”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Cepi i sipërm majtas — ripërmasojeni\npdfjs-editor-resizer-label-top-middle = Mesi i pjesës sipër — ripërmasojeni\npdfjs-editor-resizer-label-top-right = Cepi i sipërm djathtas — ripërmasojeni\npdfjs-editor-resizer-label-middle-right = Djathtas në mes — ripërmasojeni\npdfjs-editor-resizer-label-bottom-right = Cepi i poshtëm djathtas — ripërmasojeni\npdfjs-editor-resizer-label-bottom-middle = Mesi i pjesës poshtë — ripërmasojeni\npdfjs-editor-resizer-label-bottom-left = Cepi i poshtëm — ripërmasojeni\npdfjs-editor-resizer-label-middle-left = Majtas në mes — ripërmasojeni\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Ngjyrë theksimi\npdfjs-editor-colorpicker-button =\n    .title = Ndryshoni ngjyrë\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Zgjedhje ngjyre\npdfjs-editor-colorpicker-yellow =\n    .title = E verdhë\npdfjs-editor-colorpicker-green =\n    .title = E gjelbër\npdfjs-editor-colorpicker-blue =\n    .title = Blu\npdfjs-editor-colorpicker-pink =\n    .title = Rozë\npdfjs-editor-colorpicker-red =\n    .title = E kuqe\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Shfaqi krejt\npdfjs-editor-highlight-show-all-button =\n    .title = Shfaqi krejt\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/sr/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Претходна страница\npdfjs-previous-button-label = Претходна\npdfjs-next-button =\n    .title = Следећа страница\npdfjs-next-button-label = Следећа\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Страница\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = од { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } од { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Умањи\npdfjs-zoom-out-button-label = Умањи\npdfjs-zoom-in-button =\n    .title = Увеличај\npdfjs-zoom-in-button-label = Увеличај\npdfjs-zoom-select =\n    .title = Увеличавање\npdfjs-presentation-mode-button =\n    .title = Промени на приказ у режиму презентације\npdfjs-presentation-mode-button-label = Режим презентације\npdfjs-open-file-button =\n    .title = Отвори датотеку\npdfjs-open-file-button-label = Отвори\npdfjs-print-button =\n    .title = Штампај\npdfjs-print-button-label = Штампај\npdfjs-save-button =\n    .title = Сачувај\npdfjs-save-button-label = Сачувај\npdfjs-bookmark-button =\n    .title = Тренутна страница (погледајте URL са тренутне странице)\npdfjs-bookmark-button-label = Тренутна страница\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Отвори у апликацији\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Отвори у апликацији\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Алатке\npdfjs-tools-button-label = Алатке\npdfjs-first-page-button =\n    .title = Иди на прву страницу\npdfjs-first-page-button-label = Иди на прву страницу\npdfjs-last-page-button =\n    .title = Иди на последњу страницу\npdfjs-last-page-button-label = Иди на последњу страницу\npdfjs-page-rotate-cw-button =\n    .title = Ротирај у смеру казаљке на сату\npdfjs-page-rotate-cw-button-label = Ротирај у смеру казаљке на сату\npdfjs-page-rotate-ccw-button =\n    .title = Ротирај у смеру супротном од казаљке на сату\npdfjs-page-rotate-ccw-button-label = Ротирај у смеру супротном од казаљке на сату\npdfjs-cursor-text-select-tool-button =\n    .title = Омогући алат за селектовање текста\npdfjs-cursor-text-select-tool-button-label = Алат за селектовање текста\npdfjs-cursor-hand-tool-button =\n    .title = Омогући алат за померање\npdfjs-cursor-hand-tool-button-label = Алат за померање\npdfjs-scroll-page-button =\n    .title = Користи скроловање по омоту\npdfjs-scroll-page-button-label = Скроловање странице\npdfjs-scroll-vertical-button =\n    .title = Користи вертикално скроловање\npdfjs-scroll-vertical-button-label = Вертикално скроловање\npdfjs-scroll-horizontal-button =\n    .title = Користи хоризонтално скроловање\npdfjs-scroll-horizontal-button-label = Хоризонтално скроловање\npdfjs-scroll-wrapped-button =\n    .title = Користи скроловање по омоту\npdfjs-scroll-wrapped-button-label = Скроловање по омоту\npdfjs-spread-none-button =\n    .title = Немој спајати ширења страница\npdfjs-spread-none-button-label = Без распростирања\npdfjs-spread-odd-button =\n    .title = Споји ширења страница које почињу непарним бројем\npdfjs-spread-odd-button-label = Непарна распростирања\npdfjs-spread-even-button =\n    .title = Споји ширења страница које почињу парним бројем\npdfjs-spread-even-button-label = Парна распростирања\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Параметри документа…\npdfjs-document-properties-button-label = Параметри документа…\npdfjs-document-properties-file-name = Име датотеке:\npdfjs-document-properties-file-size = Величина датотеке:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } B)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } B)\npdfjs-document-properties-title = Наслов:\npdfjs-document-properties-author = Аутор:\npdfjs-document-properties-subject = Тема:\npdfjs-document-properties-keywords = Кључне речи:\npdfjs-document-properties-creation-date = Датум креирања:\npdfjs-document-properties-modification-date = Датум модификације:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Стваралац:\npdfjs-document-properties-producer = PDF произвођач:\npdfjs-document-properties-version = PDF верзија:\npdfjs-document-properties-page-count = Број страница:\npdfjs-document-properties-page-size = Величина странице:\npdfjs-document-properties-page-size-unit-inches = ин\npdfjs-document-properties-page-size-unit-millimeters = мм\npdfjs-document-properties-page-size-orientation-portrait = усправно\npdfjs-document-properties-page-size-orientation-landscape = водоравно\npdfjs-document-properties-page-size-name-a-three = А3\npdfjs-document-properties-page-size-name-a-four = А4\npdfjs-document-properties-page-size-name-letter = Слово\npdfjs-document-properties-page-size-name-legal = Права\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Брз веб приказ:\npdfjs-document-properties-linearized-yes = Да\npdfjs-document-properties-linearized-no = Не\npdfjs-document-properties-close-button = Затвори\n\n## Print\n\npdfjs-print-progress-message = Припремам документ за штампање…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Откажи\npdfjs-printing-not-supported = Упозорење: Штампање није у потпуности подржано у овом прегледачу.\npdfjs-printing-not-ready = Упозорење: PDF није у потпуности учитан за штампу.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Прикажи додатну палету\npdfjs-toggle-sidebar-notification-button =\n    .title = Прикажи/сакриј бочну траку (документ садржи контуру/прилоге/слојеве)\npdfjs-toggle-sidebar-button-label = Прикажи додатну палету\npdfjs-document-outline-button =\n    .title = Прикажи структуру документа (двоструким кликом проширујете/скупљате све ставке)\npdfjs-document-outline-button-label = Контура документа\npdfjs-attachments-button =\n    .title = Прикажи прилоге\npdfjs-attachments-button-label = Прилози\npdfjs-layers-button =\n    .title = Прикажи слојеве (дупли клик за враћање свих слојева у подразумевано стање)\npdfjs-layers-button-label = Слојеви\npdfjs-thumbs-button =\n    .title = Прикажи сличице\npdfjs-thumbs-button-label = Сличице\npdfjs-current-outline-item-button =\n    .title = Пронађите тренутни елемент структуре\npdfjs-current-outline-item-button-label = Тренутна контура\npdfjs-findbar-button =\n    .title = Пронађи у документу\npdfjs-findbar-button-label = Пронађи\npdfjs-additional-layers = Додатни слојеви\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Страница { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Сличица од странице { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Пронађи\n    .placeholder = Пронађи у документу…\npdfjs-find-previous-button =\n    .title = Пронађи претходно појављивање фразе\npdfjs-find-previous-button-label = Претходна\npdfjs-find-next-button =\n    .title = Пронађи следеће појављивање фразе\npdfjs-find-next-button-label = Следећа\npdfjs-find-highlight-checkbox = Истакнути све\npdfjs-find-match-case-checkbox-label = Подударања\npdfjs-find-match-diacritics-checkbox-label = Дијакритика\npdfjs-find-entire-word-checkbox-label = Целе речи\npdfjs-find-reached-top = Достигнут врх документа, наставио са дна\npdfjs-find-reached-bottom = Достигнуто дно документа, наставио са врха\npdfjs-find-not-found = Фраза није пронађена\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Ширина странице\npdfjs-page-scale-fit = Прилагоди страницу\npdfjs-page-scale-auto = Аутоматско увеличавање\npdfjs-page-scale-actual = Стварна величина\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Страница { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Дошло је до грешке приликом учитавања PDF-а.\npdfjs-invalid-file-error = PDF датотека је неважећа или је оштећена.\npdfjs-missing-file-error = Недостаје PDF датотека.\npdfjs-unexpected-response-error = Неочекиван одговор од сервера.\npdfjs-rendering-error = Дошло је до грешке приликом рендеровања ове странице.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } коментар]\n\n## Password\n\npdfjs-password-label = Унесите лозинку да бисте отворили овај PDF докуменат.\npdfjs-password-invalid = Неисправна лозинка. Покушајте поново.\npdfjs-password-ok-button = У реду\npdfjs-password-cancel-button = Откажи\npdfjs-web-fonts-disabled = Веб фонтови су онемогућени: не могу користити уграђене PDF фонтове.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Текст\npdfjs-editor-free-text-button-label = Текст\npdfjs-editor-ink-button =\n    .title = Цртај\npdfjs-editor-ink-button-label = Цртај\n# Editor Parameters\npdfjs-editor-free-text-color-input = Боја\npdfjs-editor-free-text-size-input = Величина\npdfjs-editor-ink-color-input = Боја\npdfjs-editor-ink-thickness-input = Дебљина\npdfjs-editor-ink-opacity-input = Опацитет\npdfjs-free-text =\n    .aria-label = Уређивач текста\npdfjs-free-text-default-content = Почни куцање…\npdfjs-ink =\n    .aria-label = Уређивач цртежа\npdfjs-ink-canvas =\n    .aria-label = Кориснички направљена слика\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/sv-SE/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Föregående sida\npdfjs-previous-button-label = Föregående\npdfjs-next-button =\n    .title = Nästa sida\npdfjs-next-button-label = Nästa\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Sida\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = av { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } av { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Zooma ut\npdfjs-zoom-out-button-label = Zooma ut\npdfjs-zoom-in-button =\n    .title = Zooma in\npdfjs-zoom-in-button-label = Zooma in\npdfjs-zoom-select =\n    .title = Zoom\npdfjs-presentation-mode-button =\n    .title = Byt till presentationsläge\npdfjs-presentation-mode-button-label = Presentationsläge\npdfjs-open-file-button =\n    .title = Öppna fil\npdfjs-open-file-button-label = Öppna\npdfjs-print-button =\n    .title = Skriv ut\npdfjs-print-button-label = Skriv ut\npdfjs-save-button =\n    .title = Spara\npdfjs-save-button-label = Spara\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Hämta\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Hämta\npdfjs-bookmark-button =\n    .title = Aktuell sida (Visa URL från aktuell sida)\npdfjs-bookmark-button-label = Aktuell sida\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Öppna i app\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Öppna i app\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Verktyg\npdfjs-tools-button-label = Verktyg\npdfjs-first-page-button =\n    .title = Gå till första sidan\npdfjs-first-page-button-label = Gå till första sidan\npdfjs-last-page-button =\n    .title = Gå till sista sidan\npdfjs-last-page-button-label = Gå till sista sidan\npdfjs-page-rotate-cw-button =\n    .title = Rotera medurs\npdfjs-page-rotate-cw-button-label = Rotera medurs\npdfjs-page-rotate-ccw-button =\n    .title = Rotera moturs\npdfjs-page-rotate-ccw-button-label = Rotera moturs\npdfjs-cursor-text-select-tool-button =\n    .title = Aktivera textmarkeringsverktyg\npdfjs-cursor-text-select-tool-button-label = Textmarkeringsverktyg\npdfjs-cursor-hand-tool-button =\n    .title = Aktivera handverktyg\npdfjs-cursor-hand-tool-button-label = Handverktyg\npdfjs-scroll-page-button =\n    .title = Använd sidrullning\npdfjs-scroll-page-button-label = Sidrullning\npdfjs-scroll-vertical-button =\n    .title = Använd vertikal rullning\npdfjs-scroll-vertical-button-label = Vertikal rullning\npdfjs-scroll-horizontal-button =\n    .title = Använd horisontell rullning\npdfjs-scroll-horizontal-button-label = Horisontell rullning\npdfjs-scroll-wrapped-button =\n    .title = Använd överlappande rullning\npdfjs-scroll-wrapped-button-label = Överlappande rullning\npdfjs-spread-none-button =\n    .title = Visa enkelsidor\npdfjs-spread-none-button-label = Enkelsidor\npdfjs-spread-odd-button =\n    .title = Visa uppslag med olika sidnummer till vänster\npdfjs-spread-odd-button-label = Uppslag med framsida\npdfjs-spread-even-button =\n    .title = Visa uppslag med lika sidnummer till vänster\npdfjs-spread-even-button-label = Uppslag utan framsida\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Dokumentegenskaper…\npdfjs-document-properties-button-label = Dokumentegenskaper…\npdfjs-document-properties-file-name = Filnamn:\npdfjs-document-properties-file-size = Filstorlek:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } kB ({ $size_b } byte)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } byte)\npdfjs-document-properties-title = Titel:\npdfjs-document-properties-author = Författare:\npdfjs-document-properties-subject = Ämne:\npdfjs-document-properties-keywords = Nyckelord:\npdfjs-document-properties-creation-date = Skapades:\npdfjs-document-properties-modification-date = Ändrades:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Skapare:\npdfjs-document-properties-producer = PDF-producent:\npdfjs-document-properties-version = PDF-version:\npdfjs-document-properties-page-count = Sidantal:\npdfjs-document-properties-page-size = Pappersstorlek:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = porträtt\npdfjs-document-properties-page-size-orientation-landscape = landskap\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Snabb webbvisning:\npdfjs-document-properties-linearized-yes = Ja\npdfjs-document-properties-linearized-no = Nej\npdfjs-document-properties-close-button = Stäng\n\n## Print\n\npdfjs-print-progress-message = Förbereder sidor för utskrift…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Avbryt\npdfjs-printing-not-supported = Varning: Utskrifter stöds inte helt av den här webbläsaren.\npdfjs-printing-not-ready = Varning: PDF:en är inte klar för utskrift.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Visa/dölj sidofält\npdfjs-toggle-sidebar-notification-button =\n    .title = Växla sidofält (dokumentet innehåller dokumentstruktur/bilagor/lager)\npdfjs-toggle-sidebar-button-label = Visa/dölj sidofält\npdfjs-document-outline-button =\n    .title = Visa dokumentdisposition (dubbelklicka för att expandera/komprimera alla objekt)\npdfjs-document-outline-button-label = Dokumentöversikt\npdfjs-attachments-button =\n    .title = Visa Bilagor\npdfjs-attachments-button-label = Bilagor\npdfjs-layers-button =\n    .title = Visa lager (dubbelklicka för att återställa alla lager till standardläge)\npdfjs-layers-button-label = Lager\npdfjs-thumbs-button =\n    .title = Visa miniatyrer\npdfjs-thumbs-button-label = Miniatyrer\npdfjs-current-outline-item-button =\n    .title = Hitta aktuellt dispositionsobjekt\npdfjs-current-outline-item-button-label = Aktuellt dispositionsobjekt\npdfjs-findbar-button =\n    .title = Sök i dokument\npdfjs-findbar-button-label = Sök\npdfjs-additional-layers = Ytterligare lager\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Sida { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatyr av sida { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Sök\n    .placeholder = Sök i dokument…\npdfjs-find-previous-button =\n    .title = Hitta föregående förekomst av frasen\npdfjs-find-previous-button-label = Föregående\npdfjs-find-next-button =\n    .title = Hitta nästa förekomst av frasen\npdfjs-find-next-button-label = Nästa\npdfjs-find-highlight-checkbox = Markera alla\npdfjs-find-match-case-checkbox-label = Matcha versal/gemen\npdfjs-find-match-diacritics-checkbox-label = Matcha diakritiska tecken\npdfjs-find-entire-word-checkbox-label = Hela ord\npdfjs-find-reached-top = Nådde början av dokumentet, började från slutet\npdfjs-find-reached-bottom = Nådde slutet på dokumentet, började från början\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } av { $total } match\n       *[other] { $current } av { $total } matchningar\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Mer än { $limit } matchning\n       *[other] Fler än { $limit } matchningar\n    }\npdfjs-find-not-found = Frasen hittades inte\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Sidbredd\npdfjs-page-scale-fit = Anpassa sida\npdfjs-page-scale-auto = Automatisk zoom\npdfjs-page-scale-actual = Verklig storlek\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Sida { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Ett fel uppstod vid laddning av PDF-filen.\npdfjs-invalid-file-error = Ogiltig eller korrupt PDF-fil.\npdfjs-missing-file-error = Saknad PDF-fil.\npdfjs-unexpected-response-error = Oväntat svar från servern.\npdfjs-rendering-error = Ett fel uppstod vid visning av sidan.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date } { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type }-annotering]\n\n## Password\n\npdfjs-password-label = Skriv in lösenordet för att öppna PDF-filen.\npdfjs-password-invalid = Ogiltigt lösenord. Försök igen.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Avbryt\npdfjs-web-fonts-disabled = Webbtypsnitt är inaktiverade: kan inte använda inbäddade PDF-typsnitt.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Text\npdfjs-editor-free-text-button-label = Text\npdfjs-editor-ink-button =\n    .title = Rita\npdfjs-editor-ink-button-label = Rita\npdfjs-editor-stamp-button =\n    .title = Lägg till eller redigera bilder\npdfjs-editor-stamp-button-label = Lägg till eller redigera bilder\npdfjs-editor-highlight-button =\n    .title = Markera\npdfjs-editor-highlight-button-label = Markera\npdfjs-highlight-floating-button =\n    .title = Markera\npdfjs-highlight-floating-button1 =\n    .title = Markera\n    .aria-label = Markera\npdfjs-highlight-floating-button-label = Markera\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Ta bort ritning\npdfjs-editor-remove-freetext-button =\n    .title = Ta bort text\npdfjs-editor-remove-stamp-button =\n    .title = Ta bort bild\npdfjs-editor-remove-highlight-button =\n    .title = Ta bort markering\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Färg\npdfjs-editor-free-text-size-input = Storlek\npdfjs-editor-ink-color-input = Färg\npdfjs-editor-ink-thickness-input = Tjocklek\npdfjs-editor-ink-opacity-input = Opacitet\npdfjs-editor-stamp-add-image-button =\n    .title = Lägg till bild\npdfjs-editor-stamp-add-image-button-label = Lägg till bild\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Tjocklek\npdfjs-editor-free-highlight-thickness-title =\n    .title = Ändra tjocklek när du markerar andra objekt än text\npdfjs-free-text =\n    .aria-label = Textredigerare\npdfjs-free-text-default-content = Börja skriva…\npdfjs-ink =\n    .aria-label = Ritredigerare\npdfjs-ink-canvas =\n    .aria-label = Användarskapad bild\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Alternativ text\npdfjs-editor-alt-text-edit-button-label = Redigera alternativ text\npdfjs-editor-alt-text-dialog-label = Välj ett alternativ\npdfjs-editor-alt-text-dialog-description = Alt text (alternativ text) hjälper till när människor inte kan se bilden eller när den inte laddas.\npdfjs-editor-alt-text-add-description-label = Lägg till en beskrivning\npdfjs-editor-alt-text-add-description-description = Sikta på 1-2 meningar som beskriver ämnet, miljön eller handlingen.\npdfjs-editor-alt-text-mark-decorative-label = Markera som dekorativ\npdfjs-editor-alt-text-mark-decorative-description = Detta används för dekorativa bilder, som kanter eller vattenstämplar.\npdfjs-editor-alt-text-cancel-button = Avbryt\npdfjs-editor-alt-text-save-button = Spara\npdfjs-editor-alt-text-decorative-tooltip = Märkt som dekorativ\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Till exempel, \"En ung man sätter sig vid ett bord för att äta en måltid\"\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Det övre vänstra hörnet — ändra storlek\npdfjs-editor-resizer-label-top-middle = Överst i mitten — ändra storlek\npdfjs-editor-resizer-label-top-right = Det övre högra hörnet — ändra storlek\npdfjs-editor-resizer-label-middle-right = Mitten höger — ändra storlek\npdfjs-editor-resizer-label-bottom-right = Nedre högra hörnet — ändra storlek\npdfjs-editor-resizer-label-bottom-middle = Nedre mitten — ändra storlek\npdfjs-editor-resizer-label-bottom-left = Nedre vänstra hörnet — ändra storlek\npdfjs-editor-resizer-label-middle-left = Mitten till vänster — ändra storlek\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Markeringsfärg\npdfjs-editor-colorpicker-button =\n    .title = Ändra färg\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Färgval\npdfjs-editor-colorpicker-yellow =\n    .title = Gul\npdfjs-editor-colorpicker-green =\n    .title = Grön\npdfjs-editor-colorpicker-blue =\n    .title = Blå\npdfjs-editor-colorpicker-pink =\n    .title = Rosa\npdfjs-editor-colorpicker-red =\n    .title = Röd\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Visa alla\npdfjs-editor-highlight-show-all-button =\n    .title = Visa alla\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/szl/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Piyrwyjszo strōna\npdfjs-previous-button-label = Piyrwyjszo\npdfjs-next-button =\n    .title = Nastympno strōna\npdfjs-next-button-label = Dalij\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Strōna\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = ze { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } ze { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Zmyńsz\npdfjs-zoom-out-button-label = Zmyńsz\npdfjs-zoom-in-button =\n    .title = Zwiynksz\npdfjs-zoom-in-button-label = Zwiynksz\npdfjs-zoom-select =\n    .title = Srogość\npdfjs-presentation-mode-button =\n    .title = Przełōncz na tryb prezyntacyje\npdfjs-presentation-mode-button-label = Tryb prezyntacyje\npdfjs-open-file-button =\n    .title = Ôdewrzij zbiōr\npdfjs-open-file-button-label = Ôdewrzij\npdfjs-print-button =\n    .title = Durkuj\npdfjs-print-button-label = Durkuj\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Noczynia\npdfjs-tools-button-label = Noczynia\npdfjs-first-page-button =\n    .title = Idź ku piyrszyj strōnie\npdfjs-first-page-button-label = Idź ku piyrszyj strōnie\npdfjs-last-page-button =\n    .title = Idź ku ôstatnij strōnie\npdfjs-last-page-button-label = Idź ku ôstatnij strōnie\npdfjs-page-rotate-cw-button =\n    .title = Zwyrtnij w prawo\npdfjs-page-rotate-cw-button-label = Zwyrtnij w prawo\npdfjs-page-rotate-ccw-button =\n    .title = Zwyrtnij w lewo\npdfjs-page-rotate-ccw-button-label = Zwyrtnij w lewo\npdfjs-cursor-text-select-tool-button =\n    .title = Załōncz noczynie ôbiyranio tekstu\npdfjs-cursor-text-select-tool-button-label = Noczynie ôbiyranio tekstu\npdfjs-cursor-hand-tool-button =\n    .title = Załōncz noczynie rōnczka\npdfjs-cursor-hand-tool-button-label = Noczynie rōnczka\npdfjs-scroll-vertical-button =\n    .title = Używej piōnowego przewijanio\npdfjs-scroll-vertical-button-label = Piōnowe przewijanie\npdfjs-scroll-horizontal-button =\n    .title = Używej poziōmego przewijanio\npdfjs-scroll-horizontal-button-label = Poziōme przewijanie\npdfjs-scroll-wrapped-button =\n    .title = Używej szichtowego przewijanio\npdfjs-scroll-wrapped-button-label = Szichtowe przewijanie\npdfjs-spread-none-button =\n    .title = Niy dowej strōn w widoku po dwie\npdfjs-spread-none-button-label = Po jednyj strōnie\npdfjs-spread-odd-button =\n    .title = Pokoż strōny po dwie; niyporziste po lewyj\npdfjs-spread-odd-button-label = Niyporziste po lewyj\npdfjs-spread-even-button =\n    .title = Pokoż strōny po dwie; porziste po lewyj\npdfjs-spread-even-button-label = Porziste po lewyj\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Włosności dokumyntu…\npdfjs-document-properties-button-label = Włosności dokumyntu…\npdfjs-document-properties-file-name = Miano zbioru:\npdfjs-document-properties-file-size = Srogość zbioru:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } B)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } B)\npdfjs-document-properties-title = Tytuł:\npdfjs-document-properties-author = Autōr:\npdfjs-document-properties-subject = Tymat:\npdfjs-document-properties-keywords = Kluczowe słowa:\npdfjs-document-properties-creation-date = Data zrychtowanio:\npdfjs-document-properties-modification-date = Data zmiany:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Zrychtowane ôd:\npdfjs-document-properties-producer = PDF ôd:\npdfjs-document-properties-version = Wersyjo PDF:\npdfjs-document-properties-page-count = Wielość strōn:\npdfjs-document-properties-page-size = Srogość strōny:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = piōnowo\npdfjs-document-properties-page-size-orientation-landscape = poziōmo\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Gibki necowy podglōnd:\npdfjs-document-properties-linearized-yes = Ja\npdfjs-document-properties-linearized-no = Niy\npdfjs-document-properties-close-button = Zawrzij\n\n## Print\n\npdfjs-print-progress-message = Rychtowanie dokumyntu do durku…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Pociep\npdfjs-printing-not-supported = Pozōr: Ta przeglōndarka niy cołkiym ôbsuguje durk.\npdfjs-printing-not-ready = Pozōr: Tyn PDF niy ma za tela zaladowany do durku.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Przełōncz posek na rancie\npdfjs-toggle-sidebar-notification-button =\n    .title = Przełōncz posek na rancie (dokumynt mo struktura/przidowki/warstwy)\npdfjs-toggle-sidebar-button-label = Przełōncz posek na rancie\npdfjs-document-outline-button =\n    .title = Pokoż struktura dokumyntu (tuplowane klikniyncie rozszyrzo/swijo wszyskie elymynta)\npdfjs-document-outline-button-label = Struktura dokumyntu\npdfjs-attachments-button =\n    .title = Pokoż przidowki\npdfjs-attachments-button-label = Przidowki\npdfjs-layers-button =\n    .title = Pokoż warstwy (tuplowane klikniyncie resetuje wszyskie warstwy do bazowego stanu)\npdfjs-layers-button-label = Warstwy\npdfjs-thumbs-button =\n    .title = Pokoż miniatury\npdfjs-thumbs-button-label = Miniatury\npdfjs-findbar-button =\n    .title = Znojdź w dokumyncie\npdfjs-findbar-button-label = Znojdź\npdfjs-additional-layers = Nadbytnie warstwy\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Strōna { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Miniatura strōny { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Znojdź\n    .placeholder = Znojdź w dokumyncie…\npdfjs-find-previous-button =\n    .title = Znojdź piyrwyjsze pokozanie sie tyj frazy\npdfjs-find-previous-button-label = Piyrwyjszo\npdfjs-find-next-button =\n    .title = Znojdź nastympne pokozanie sie tyj frazy\npdfjs-find-next-button-label = Dalij\npdfjs-find-highlight-checkbox = Zaznacz wszysko\npdfjs-find-match-case-checkbox-label = Poznowej srogość liter\npdfjs-find-entire-word-checkbox-label = Cołke słowa\npdfjs-find-reached-top = Doszło do samego wiyrchu strōny, dalij ôd spodku\npdfjs-find-reached-bottom = Doszło do samego spodku strōny, dalij ôd wiyrchu\npdfjs-find-not-found = Fraza niy znaleziōno\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Szyrzka strōny\npdfjs-page-scale-fit = Napasowanie strōny\npdfjs-page-scale-auto = Autōmatyczno srogość\npdfjs-page-scale-actual = Aktualno srogość\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = Przi ladowaniu PDFa pokozoł sie feler.\npdfjs-invalid-file-error = Zły abo felerny zbiōr PDF.\npdfjs-missing-file-error = Chybio zbioru PDF.\npdfjs-unexpected-response-error = Niyôczekowano ôdpowiydź serwera.\npdfjs-rendering-error = Przi renderowaniu strōny pokozoł sie feler.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Anotacyjo typu { $type }]\n\n## Password\n\npdfjs-password-label = Wkludź hasło, coby ôdewrzić tyn zbiōr PDF.\npdfjs-password-invalid = Hasło je złe. Sprōbuj jeszcze roz.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Pociep\npdfjs-web-fonts-disabled = Necowe fōnty sōm zastawiōne: niy idzie użyć wkludzōnych fōntōw PDF.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/ta/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = முந்தைய பக்கம்\npdfjs-previous-button-label = முந்தையது\npdfjs-next-button =\n    .title = அடுத்த பக்கம்\npdfjs-next-button-label = அடுத்து\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = பக்கம்\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = { $pagesCount } இல்\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = { $pagesCount }) இல் ({ $pageNumber }\npdfjs-zoom-out-button =\n    .title = சிறிதாக்கு\npdfjs-zoom-out-button-label = சிறிதாக்கு\npdfjs-zoom-in-button =\n    .title = பெரிதாக்கு\npdfjs-zoom-in-button-label = பெரிதாக்கு\npdfjs-zoom-select =\n    .title = பெரிதாக்கு\npdfjs-presentation-mode-button =\n    .title = விளக்ககாட்சி பயன்முறைக்கு மாறு\npdfjs-presentation-mode-button-label = விளக்ககாட்சி பயன்முறை\npdfjs-open-file-button =\n    .title = கோப்பினை திற\npdfjs-open-file-button-label = திற\npdfjs-print-button =\n    .title = அச்சிடு\npdfjs-print-button-label = அச்சிடு\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = கருவிகள்\npdfjs-tools-button-label = கருவிகள்\npdfjs-first-page-button =\n    .title = முதல் பக்கத்திற்கு செல்லவும்\npdfjs-first-page-button-label = முதல் பக்கத்திற்கு செல்லவும்\npdfjs-last-page-button =\n    .title = கடைசி பக்கத்திற்கு செல்லவும்\npdfjs-last-page-button-label = கடைசி பக்கத்திற்கு செல்லவும்\npdfjs-page-rotate-cw-button =\n    .title = வலஞ்சுழியாக சுழற்று\npdfjs-page-rotate-cw-button-label = வலஞ்சுழியாக சுழற்று\npdfjs-page-rotate-ccw-button =\n    .title = இடஞ்சுழியாக சுழற்று\npdfjs-page-rotate-ccw-button-label = இடஞ்சுழியாக சுழற்று\npdfjs-cursor-text-select-tool-button =\n    .title = உரைத் தெரிவு கருவியைச் செயல்படுத்து\npdfjs-cursor-text-select-tool-button-label = உரைத் தெரிவு கருவி\npdfjs-cursor-hand-tool-button =\n    .title = கைக் கருவிக்ச் செயற்படுத்து\npdfjs-cursor-hand-tool-button-label = கைக்குருவி\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = ஆவண பண்புகள்...\npdfjs-document-properties-button-label = ஆவண பண்புகள்...\npdfjs-document-properties-file-name = கோப்பு பெயர்:\npdfjs-document-properties-file-size = கோப்பின் அளவு:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } கிபை ({ $size_b } பைட்டுகள்)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } மெபை ({ $size_b } பைட்டுகள்)\npdfjs-document-properties-title = தலைப்பு:\npdfjs-document-properties-author = எழுதியவர்\npdfjs-document-properties-subject = பொருள்:\npdfjs-document-properties-keywords = முக்கிய வார்த்தைகள்:\npdfjs-document-properties-creation-date = படைத்த தேதி :\npdfjs-document-properties-modification-date = திருத்திய தேதி:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = உருவாக்குபவர்:\npdfjs-document-properties-producer = பிடிஎஃப் தயாரிப்பாளர்:\npdfjs-document-properties-version = PDF பதிப்பு:\npdfjs-document-properties-page-count = பக்க எண்ணிக்கை:\npdfjs-document-properties-page-size = பக்க அளவு:\npdfjs-document-properties-page-size-unit-inches = இதில்\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = நிலைபதிப்பு\npdfjs-document-properties-page-size-orientation-landscape = நிலைபரப்பு\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = கடிதம்\npdfjs-document-properties-page-size-name-legal = சட்டபூர்வ\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\npdfjs-document-properties-close-button = மூடுக\n\n## Print\n\npdfjs-print-progress-message = அச்சிடுவதற்கான ஆவணம் தயாராகிறது...\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = ரத்து\npdfjs-printing-not-supported = எச்சரிக்கை: இந்த உலாவி அச்சிடுதலை முழுமையாக ஆதரிக்கவில்லை.\npdfjs-printing-not-ready = எச்சரிக்கை: PDF அச்சிட முழுவதுமாக ஏற்றப்படவில்லை.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = பக்கப் பட்டியை நிலைமாற்று\npdfjs-toggle-sidebar-button-label = பக்கப் பட்டியை நிலைமாற்று\npdfjs-document-outline-button =\n    .title = ஆவண அடக்கத்தைக் காட்டு (இருமுறைச் சொடுக்கி அனைத்து உறுப்பிடிகளையும் விரி/சேர்)\npdfjs-document-outline-button-label = ஆவண வெளிவரை\npdfjs-attachments-button =\n    .title = இணைப்புகளை காண்பி\npdfjs-attachments-button-label = இணைப்புகள்\npdfjs-thumbs-button =\n    .title = சிறுபடங்களைக் காண்பி\npdfjs-thumbs-button-label = சிறுபடங்கள்\npdfjs-findbar-button =\n    .title = ஆவணத்தில் கண்டறி\npdfjs-findbar-button-label = தேடு\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = பக்கம் { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = பக்கத்தின் சிறுபடம் { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = கண்டுபிடி\n    .placeholder = ஆவணத்தில் கண்டறி…\npdfjs-find-previous-button =\n    .title = இந்த சொற்றொடரின் முந்தைய நிகழ்வை தேடு\npdfjs-find-previous-button-label = முந்தையது\npdfjs-find-next-button =\n    .title = இந்த சொற்றொடரின் அடுத்த நிகழ்வை தேடு\npdfjs-find-next-button-label = அடுத்து\npdfjs-find-highlight-checkbox = அனைத்தையும் தனிப்படுத்து\npdfjs-find-match-case-checkbox-label = பேரெழுத்தாக்கத்தை உணர்\npdfjs-find-reached-top = ஆவணத்தின் மேல் பகுதியை அடைந்தது, அடிப்பக்கத்திலிருந்து தொடர்ந்தது\npdfjs-find-reached-bottom = ஆவணத்தின் முடிவை அடைந்தது, மேலிருந்து தொடர்ந்தது\npdfjs-find-not-found = சொற்றொடர் காணவில்லை\n\n## Predefined zoom values\n\npdfjs-page-scale-width = பக்க அகலம்\npdfjs-page-scale-fit = பக்கப் பொருத்தம்\npdfjs-page-scale-auto = தானியக்க பெரிதாக்கல்\npdfjs-page-scale-actual = உண்மையான அளவு\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = PDF ஐ ஏற்றும் போது ஒரு பிழை ஏற்பட்டது.\npdfjs-invalid-file-error = செல்லுபடியாகாத அல்லது சிதைந்த PDF கோப்பு.\npdfjs-missing-file-error = PDF கோப்பு காணவில்லை.\npdfjs-unexpected-response-error = சேவகன் பதில் எதிர்பாரதது.\npdfjs-rendering-error = இந்தப் பக்கத்தை காட்சிப்படுத்தும் போது ஒரு பிழை ஏற்பட்டது.\n\n## Annotations\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } விளக்கம்]\n\n## Password\n\npdfjs-password-label = இந்த PDF கோப்பை திறக்க கடவுச்சொல்லை உள்ளிடவும்.\npdfjs-password-invalid = செல்லுபடியாகாத கடவுச்சொல், தயை செய்து மீண்டும் முயற்சி செய்க.\npdfjs-password-ok-button = சரி\npdfjs-password-cancel-button = ரத்து\npdfjs-web-fonts-disabled = வலை எழுத்துருக்கள் முடக்கப்பட்டுள்ளன: உட்பொதிக்கப்பட்ட PDF எழுத்துருக்களைப் பயன்படுத்த முடியவில்லை.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/te/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = మునుపటి పేజీ\npdfjs-previous-button-label = క్రితం\npdfjs-next-button =\n    .title = తరువాత పేజీ\npdfjs-next-button-label = తరువాత\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = పేజీ\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = మొత్తం { $pagesCount } లో\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = (మొత్తం { $pagesCount } లో { $pageNumber }వది)\npdfjs-zoom-out-button =\n    .title = జూమ్ తగ్గించు\npdfjs-zoom-out-button-label = జూమ్ తగ్గించు\npdfjs-zoom-in-button =\n    .title = జూమ్ చేయి\npdfjs-zoom-in-button-label = జూమ్ చేయి\npdfjs-zoom-select =\n    .title = జూమ్\npdfjs-presentation-mode-button =\n    .title = ప్రదర్శనా రీతికి మారు\npdfjs-presentation-mode-button-label = ప్రదర్శనా రీతి\npdfjs-open-file-button =\n    .title = ఫైల్ తెరువు\npdfjs-open-file-button-label = తెరువు\npdfjs-print-button =\n    .title = ముద్రించు\npdfjs-print-button-label = ముద్రించు\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = పనిముట్లు\npdfjs-tools-button-label = పనిముట్లు\npdfjs-first-page-button =\n    .title = మొదటి పేజీకి వెళ్ళు\npdfjs-first-page-button-label = మొదటి పేజీకి వెళ్ళు\npdfjs-last-page-button =\n    .title = చివరి పేజీకి వెళ్ళు\npdfjs-last-page-button-label = చివరి పేజీకి వెళ్ళు\npdfjs-page-rotate-cw-button =\n    .title = సవ్యదిశలో తిప్పు\npdfjs-page-rotate-cw-button-label = సవ్యదిశలో తిప్పు\npdfjs-page-rotate-ccw-button =\n    .title = అపసవ్యదిశలో తిప్పు\npdfjs-page-rotate-ccw-button-label = అపసవ్యదిశలో తిప్పు\npdfjs-cursor-text-select-tool-button =\n    .title = టెక్స్ట్ ఎంపిక సాధనాన్ని ప్రారంభించండి\npdfjs-cursor-text-select-tool-button-label = టెక్స్ట్ ఎంపిక సాధనం\npdfjs-cursor-hand-tool-button =\n    .title = చేతి సాధనం చేతనించు\npdfjs-cursor-hand-tool-button-label = చేతి సాధనం\npdfjs-scroll-vertical-button-label = నిలువు స్క్రోలింగు\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = పత్రము లక్షణాలు...\npdfjs-document-properties-button-label = పత్రము లక్షణాలు...\npdfjs-document-properties-file-name = దస్త్రం పేరు:\npdfjs-document-properties-file-size = దస్త్రం పరిమాణం:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = శీర్షిక:\npdfjs-document-properties-author = మూలకర్త:\npdfjs-document-properties-subject = విషయం:\npdfjs-document-properties-keywords = కీ పదాలు:\npdfjs-document-properties-creation-date = సృష్టించిన తేదీ:\npdfjs-document-properties-modification-date = సవరించిన తేదీ:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = సృష్టికర్త:\npdfjs-document-properties-producer = PDF ఉత్పాదకి:\npdfjs-document-properties-version = PDF వర్షన్:\npdfjs-document-properties-page-count = పేజీల సంఖ్య:\npdfjs-document-properties-page-size = కాగితం పరిమాణం:\npdfjs-document-properties-page-size-unit-inches = లో\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = నిలువుచిత్రం\npdfjs-document-properties-page-size-orientation-landscape = అడ్డచిత్రం\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = లేఖ\npdfjs-document-properties-page-size-name-legal = చట్టపరమైన\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\npdfjs-document-properties-linearized-yes = అవును\npdfjs-document-properties-linearized-no = కాదు\npdfjs-document-properties-close-button = మూసివేయి\n\n## Print\n\npdfjs-print-progress-message = ముద్రించడానికి పత్రము సిద్ధమవుతున్నది…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = రద్దుచేయి\npdfjs-printing-not-supported = హెచ్చరిక: ఈ విహారిణి చేత ముద్రణ పూర్తిగా తోడ్పాటు లేదు.\npdfjs-printing-not-ready = హెచ్చరిక: ముద్రణ కొరకు ఈ PDF పూర్తిగా లోడవలేదు.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = పక్కపట్టీ మార్చు\npdfjs-toggle-sidebar-button-label = పక్కపట్టీ మార్చు\npdfjs-document-outline-button =\n    .title = పత్రము రూపము చూపించు (డబుల్ క్లిక్ చేసి అన్ని అంశాలను విస్తరించు/కూల్చు)\npdfjs-document-outline-button-label = పత్రము అవుట్‌లైన్\npdfjs-attachments-button =\n    .title = అనుబంధాలు చూపు\npdfjs-attachments-button-label = అనుబంధాలు\npdfjs-layers-button-label = పొరలు\npdfjs-thumbs-button =\n    .title = థంబ్‌నైల్స్ చూపు\npdfjs-thumbs-button-label = థంబ్‌నైల్స్\npdfjs-findbar-button =\n    .title = పత్రములో కనుగొనుము\npdfjs-findbar-button-label = కనుగొను\npdfjs-additional-layers = అదనపు పొరలు\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = పేజీ { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = { $page } పేజీ నఖచిత్రం\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = కనుగొను\n    .placeholder = పత్రములో కనుగొను…\npdfjs-find-previous-button =\n    .title = పదం యొక్క ముందు సంభవాన్ని కనుగొను\npdfjs-find-previous-button-label = మునుపటి\npdfjs-find-next-button =\n    .title = పదం యొక్క తర్వాతి సంభవాన్ని కనుగొను\npdfjs-find-next-button-label = తరువాత\npdfjs-find-highlight-checkbox = అన్నిటిని ఉద్దీపనం చేయుము\npdfjs-find-match-case-checkbox-label = అక్షరముల తేడాతో పోల్చు\npdfjs-find-entire-word-checkbox-label = పూర్తి పదాలు\npdfjs-find-reached-top = పేజీ పైకి చేరుకున్నది, క్రింది నుండి కొనసాగించండి\npdfjs-find-reached-bottom = పేజీ చివరకు చేరుకున్నది, పైనుండి కొనసాగించండి\npdfjs-find-not-found = పదబంధం కనబడలేదు\n\n## Predefined zoom values\n\npdfjs-page-scale-width = పేజీ వెడల్పు\npdfjs-page-scale-fit = పేజీ అమర్పు\npdfjs-page-scale-auto = స్వయంచాలక జూమ్\npdfjs-page-scale-actual = యథార్ధ పరిమాణం\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = PDF లోడవుచున్నప్పుడు ఒక దోషం ఎదురైంది.\npdfjs-invalid-file-error = చెల్లని లేదా పాడైన PDF ఫైలు.\npdfjs-missing-file-error = దొరకని PDF ఫైలు.\npdfjs-unexpected-response-error = అనుకోని సర్వర్ స్పందన.\npdfjs-rendering-error = పేజీను రెండర్ చేయుటలో ఒక దోషం ఎదురైంది.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } టీకా]\n\n## Password\n\npdfjs-password-label = ఈ PDF ఫైల్ తెరుచుటకు సంకేతపదం ప్రవేశపెట్టుము.\npdfjs-password-invalid = సంకేతపదం చెల్లదు. దయచేసి మళ్ళీ ప్రయత్నించండి.\npdfjs-password-ok-button = సరే\npdfjs-password-cancel-button = రద్దుచేయి\npdfjs-web-fonts-disabled = వెబ్ ఫాంట్లు అచేతనించబడెను: ఎంబెడెడ్ PDF ఫాంట్లు ఉపయోగించలేక పోయింది.\n\n## Editing\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = రంగు\npdfjs-editor-free-text-size-input = పరిమాణం\npdfjs-editor-ink-color-input = రంగు\npdfjs-editor-ink-thickness-input = మందం\npdfjs-editor-ink-opacity-input = అకిరణ్యత\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/tg/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Саҳифаи қаблӣ\npdfjs-previous-button-label = Қаблӣ\npdfjs-next-button =\n    .title = Саҳифаи навбатӣ\npdfjs-next-button-label = Навбатӣ\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Саҳифа\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = аз { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } аз { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Хурд кардан\npdfjs-zoom-out-button-label = Хурд кардан\npdfjs-zoom-in-button =\n    .title = Калон кардан\npdfjs-zoom-in-button-label = Калон кардан\npdfjs-zoom-select =\n    .title = Танзими андоза\npdfjs-presentation-mode-button =\n    .title = Гузариш ба реҷаи тақдим\npdfjs-presentation-mode-button-label = Реҷаи тақдим\npdfjs-open-file-button =\n    .title = Кушодани файл\npdfjs-open-file-button-label = Кушодан\npdfjs-print-button =\n    .title = Чоп кардан\npdfjs-print-button-label = Чоп кардан\npdfjs-save-button =\n    .title = Нигоҳ доштан\npdfjs-save-button-label = Нигоҳ доштан\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Боргирӣ кардан\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Боргирӣ кардан\npdfjs-bookmark-button =\n    .title = Саҳифаи ҷорӣ (Дидани нишонии URL аз саҳифаи ҷорӣ)\npdfjs-bookmark-button-label = Саҳифаи ҷорӣ\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Абзорҳо\npdfjs-tools-button-label = Абзорҳо\npdfjs-first-page-button =\n    .title = Ба саҳифаи аввал гузаред\npdfjs-first-page-button-label = Ба саҳифаи аввал гузаред\npdfjs-last-page-button =\n    .title = Ба саҳифаи охирин гузаред\npdfjs-last-page-button-label = Ба саҳифаи охирин гузаред\npdfjs-page-rotate-cw-button =\n    .title = Ба самти ҳаракати ақрабаки соат давр задан\npdfjs-page-rotate-cw-button-label = Ба самти ҳаракати ақрабаки соат давр задан\npdfjs-page-rotate-ccw-button =\n    .title = Ба муқобили самти ҳаракати ақрабаки соат давр задан\npdfjs-page-rotate-ccw-button-label = Ба муқобили самти ҳаракати ақрабаки соат давр задан\npdfjs-cursor-text-select-tool-button =\n    .title = Фаъол кардани «Абзори интихоби матн»\npdfjs-cursor-text-select-tool-button-label = Абзори интихоби матн\npdfjs-cursor-hand-tool-button =\n    .title = Фаъол кардани «Абзори даст»\npdfjs-cursor-hand-tool-button-label = Абзори даст\npdfjs-scroll-page-button =\n    .title = Истифодаи варақзанӣ\npdfjs-scroll-page-button-label = Варақзанӣ\npdfjs-scroll-vertical-button =\n    .title = Истифодаи варақзании амудӣ\npdfjs-scroll-vertical-button-label = Варақзании амудӣ\npdfjs-scroll-horizontal-button =\n    .title = Истифодаи варақзании уфуқӣ\npdfjs-scroll-horizontal-button-label = Варақзании уфуқӣ\npdfjs-scroll-wrapped-button =\n    .title = Истифодаи варақзании миқёсбандӣ\npdfjs-scroll-wrapped-button-label = Варақзании миқёсбандӣ\npdfjs-spread-none-button =\n    .title = Густариши саҳифаҳо истифода бурда нашавад\npdfjs-spread-none-button-label = Бе густурдани саҳифаҳо\npdfjs-spread-odd-button =\n    .title = Густариши саҳифаҳо аз саҳифаҳо бо рақамҳои тоқ оғоз карда мешавад\npdfjs-spread-odd-button-label = Саҳифаҳои тоқ аз тарафи чап\npdfjs-spread-even-button =\n    .title = Густариши саҳифаҳо аз саҳифаҳо бо рақамҳои ҷуфт оғоз карда мешавад\npdfjs-spread-even-button-label = Саҳифаҳои ҷуфт аз тарафи чап\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Хусусиятҳои ҳуҷҷат…\npdfjs-document-properties-button-label = Хусусиятҳои ҳуҷҷат…\npdfjs-document-properties-file-name = Номи файл:\npdfjs-document-properties-file-size = Андозаи файл:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } КБ ({ $size_b } байт)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } МБ ({ $size_b } байт)\npdfjs-document-properties-title = Сарлавҳа:\npdfjs-document-properties-author = Муаллиф:\npdfjs-document-properties-subject = Мавзуъ:\npdfjs-document-properties-keywords = Калимаҳои калидӣ:\npdfjs-document-properties-creation-date = Санаи эҷод:\npdfjs-document-properties-modification-date = Санаи тағйирот:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Эҷодкунанда:\npdfjs-document-properties-producer = Таҳиякунандаи «PDF»:\npdfjs-document-properties-version = Версияи «PDF»:\npdfjs-document-properties-page-count = Шумораи саҳифаҳо:\npdfjs-document-properties-page-size = Андозаи саҳифа:\npdfjs-document-properties-page-size-unit-inches = дюйм\npdfjs-document-properties-page-size-unit-millimeters = мм\npdfjs-document-properties-page-size-orientation-portrait = амудӣ\npdfjs-document-properties-page-size-orientation-landscape = уфуқӣ\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Мактуб\npdfjs-document-properties-page-size-name-legal = Ҳуқуқӣ\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Намоиши тез дар Интернет:\npdfjs-document-properties-linearized-yes = Ҳа\npdfjs-document-properties-linearized-no = Не\npdfjs-document-properties-close-button = Пӯшидан\n\n## Print\n\npdfjs-print-progress-message = Омодасозии ҳуҷҷат барои чоп…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Бекор кардан\npdfjs-printing-not-supported = Диққат: Чопкунӣ аз тарафи ин браузер ба таври пурра дастгирӣ намешавад.\npdfjs-printing-not-ready = Диққат: Файли «PDF» барои чопкунӣ пурра бор карда нашуд.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Фаъол кардани навори ҷонибӣ\npdfjs-toggle-sidebar-notification-button =\n    .title = Фаъол кардани навори ҷонибӣ (ҳуҷҷат дорои сохтор/замимаҳо/қабатҳо мебошад)\npdfjs-toggle-sidebar-button-label = Фаъол кардани навори ҷонибӣ\npdfjs-document-outline-button =\n    .title = Намоиш додани сохтори ҳуҷҷат (барои баркушодан/пеҷондани ҳамаи унсурҳо дубора зер кунед)\npdfjs-document-outline-button-label = Сохтори ҳуҷҷат\npdfjs-attachments-button =\n    .title = Намоиш додани замимаҳо\npdfjs-attachments-button-label = Замимаҳо\npdfjs-layers-button =\n    .title = Намоиш додани қабатҳо (барои барқарор кардани ҳамаи қабатҳо ба вазъияти пешфарз дубора зер кунед)\npdfjs-layers-button-label = Қабатҳо\npdfjs-thumbs-button =\n    .title = Намоиш додани тасвирчаҳо\npdfjs-thumbs-button-label = Тасвирчаҳо\npdfjs-current-outline-item-button =\n    .title = Ёфтани унсури сохтори ҷорӣ\npdfjs-current-outline-item-button-label = Унсури сохтори ҷорӣ\npdfjs-findbar-button =\n    .title = Ёфтан дар ҳуҷҷат\npdfjs-findbar-button-label = Ёфтан\npdfjs-additional-layers = Қабатҳои иловагӣ\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Саҳифаи { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Тасвирчаи саҳифаи { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Ёфтан\n    .placeholder = Ёфтан дар ҳуҷҷат…\npdfjs-find-previous-button =\n    .title = Ҷустуҷӯи мавриди қаблии ибораи пешниҳодшуда\npdfjs-find-previous-button-label = Қаблӣ\npdfjs-find-next-button =\n    .title = Ҷустуҷӯи мавриди навбатии ибораи пешниҳодшуда\npdfjs-find-next-button-label = Навбатӣ\npdfjs-find-highlight-checkbox = Ҳамаашро бо ранг ҷудо кардан\npdfjs-find-match-case-checkbox-label = Бо дарназардошти ҳарфҳои хурду калон\npdfjs-find-match-diacritics-checkbox-label = Бо дарназардошти аломатҳои диакритикӣ\npdfjs-find-entire-word-checkbox-label = Калимаҳои пурра\npdfjs-find-reached-top = Ба болои ҳуҷҷат расид, аз поён идома ёфт\npdfjs-find-reached-bottom = Ба поёни ҳуҷҷат расид, аз боло идома ёфт\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } аз { $total } мувофиқат\n       *[other] { $current } аз { $total } мувофиқат\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Зиёда аз { $limit } мувофиқат\n       *[other] Зиёда аз { $limit } мувофиқат\n    }\npdfjs-find-not-found = Ибора ёфт нашуд\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Аз рӯи паҳнои саҳифа\npdfjs-page-scale-fit = Аз рӯи андозаи саҳифа\npdfjs-page-scale-auto = Андозаи худкор\npdfjs-page-scale-actual = Андозаи воқеӣ\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Саҳифаи { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Ҳангоми боркунии «PDF» хато ба миён омад.\npdfjs-invalid-file-error = Файли «PDF» нодуруст ё вайроншуда мебошад.\npdfjs-missing-file-error = Файли «PDF» ғоиб аст.\npdfjs-unexpected-response-error = Ҷавоби ногаҳон аз сервер.\npdfjs-rendering-error = Ҳангоми шаклсозии саҳифа хато ба миён омад.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Ҳошиянависӣ - { $type }]\n\n## Password\n\npdfjs-password-label = Барои кушодани ин файли «PDF» ниҳонвожаро ворид кунед.\npdfjs-password-invalid = Ниҳонвожаи нодуруст. Лутфан, аз нав кӯшиш кунед.\npdfjs-password-ok-button = ХУБ\npdfjs-password-cancel-button = Бекор кардан\npdfjs-web-fonts-disabled = Шрифтҳои интернетӣ ғайрифаъоланд: истифодаи шрифтҳои дарунсохти «PDF» ғайриимкон аст.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Матн\npdfjs-editor-free-text-button-label = Матн\npdfjs-editor-ink-button =\n    .title = Расмкашӣ\npdfjs-editor-ink-button-label = Расмкашӣ\npdfjs-editor-stamp-button =\n    .title = Илова ё таҳрир кардани тасвирҳо\npdfjs-editor-stamp-button-label = Илова ё таҳрир кардани тасвирҳо\npdfjs-editor-highlight-button =\n    .title = Ҷудокунӣ\npdfjs-editor-highlight-button-label = Ҷудокунӣ\npdfjs-highlight-floating-button =\n    .title = Ҷудокунӣ\npdfjs-highlight-floating-button1 =\n    .title = Ҷудокунӣ\n    .aria-label = Ҷудокунӣ\npdfjs-highlight-floating-button-label = Ҷудокунӣ\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Тоза кардани нақша\npdfjs-editor-remove-freetext-button =\n    .title = Тоза кардани матн\npdfjs-editor-remove-stamp-button =\n    .title = Тоза кардани тасвир\npdfjs-editor-remove-highlight-button =\n    .title = Тоза кардани ҷудокунӣ\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Ранг\npdfjs-editor-free-text-size-input = Андоза\npdfjs-editor-ink-color-input = Ранг\npdfjs-editor-ink-thickness-input = Ғафсӣ\npdfjs-editor-ink-opacity-input = Шаффофӣ\npdfjs-editor-stamp-add-image-button =\n    .title = Илова кардани тасвир\npdfjs-editor-stamp-add-image-button-label = Илова кардани тасвир\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Ғафсӣ\npdfjs-editor-free-highlight-thickness-title =\n    .title = Иваз кардани ғафсӣ ҳангоми ҷудокунии унсурҳо ба ғайр аз матн\npdfjs-free-text =\n    .aria-label = Муҳаррири матн\npdfjs-free-text-default-content = Нависед…\npdfjs-ink =\n    .aria-label = Муҳаррири расмкашӣ\npdfjs-ink-canvas =\n    .aria-label = Тасвири эҷодкардаи корбар\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Матни ивазкунанда\npdfjs-editor-alt-text-edit-button-label = Таҳрир кардани матни ивазкунанда\npdfjs-editor-alt-text-dialog-label = Имконеро интихоб намоед\npdfjs-editor-alt-text-dialog-description = Вақте ки одамон тасвирро дида наметавонанд ё вақте ки тасвир бор карда намешавад, матни иловагӣ (Alt text) кумак мерасонад.\npdfjs-editor-alt-text-add-description-label = Илова кардани тавсиф\npdfjs-editor-alt-text-add-description-description = Кӯшиш кунед, ки 1-2 ҷумлаеро нависед, ки ба мавзӯъ, танзим ё амалҳо тавзеҳ медиҳад.\npdfjs-editor-alt-text-mark-decorative-label = Гузоштан ҳамчун матни ороишӣ\npdfjs-editor-alt-text-mark-decorative-description = Ин барои тасвирҳои ороишӣ, ба монанди марзҳо ё аломатҳои обӣ, истифода мешавад.\npdfjs-editor-alt-text-cancel-button = Бекор кардан\npdfjs-editor-alt-text-save-button = Нигоҳ доштан\npdfjs-editor-alt-text-decorative-tooltip = Ҳамчун матни ороишӣ гузошта шуд\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Барои мисол, «Ман забони тоҷикиро дӯст медорам»\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Кунҷи чапи боло — тағйир додани андоза\npdfjs-editor-resizer-label-top-middle = Канори миёнаи боло — тағйир додани андоза\npdfjs-editor-resizer-label-top-right = Кунҷи рости боло — тағйир додани андоза\npdfjs-editor-resizer-label-middle-right = Канори миёнаи рост — тағйир додани андоза\npdfjs-editor-resizer-label-bottom-right = Кунҷи рости поён — тағйир додани андоза\npdfjs-editor-resizer-label-bottom-middle = Канори миёнаи поён — тағйир додани андоза\npdfjs-editor-resizer-label-bottom-left = Кунҷи чапи поён — тағйир додани андоза\npdfjs-editor-resizer-label-middle-left = Канори миёнаи чап — тағйир додани андоза\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Ранги ҷудокунӣ\npdfjs-editor-colorpicker-button =\n    .title = Иваз кардани ранг\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Интихоби ранг\npdfjs-editor-colorpicker-yellow =\n    .title = Зард\npdfjs-editor-colorpicker-green =\n    .title = Сабз\npdfjs-editor-colorpicker-blue =\n    .title = Кабуд\npdfjs-editor-colorpicker-pink =\n    .title = Гулобӣ\npdfjs-editor-colorpicker-red =\n    .title = Сурх\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Ҳамаро намоиш додан\npdfjs-editor-highlight-show-all-button =\n    .title = Ҳамаро намоиш додан\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/th/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = หน้าก่อนหน้า\npdfjs-previous-button-label = ก่อนหน้า\npdfjs-next-button =\n    .title = หน้าถัดไป\npdfjs-next-button-label = ถัดไป\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = หน้า\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = จาก { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } จาก { $pagesCount })\npdfjs-zoom-out-button =\n    .title = ซูมออก\npdfjs-zoom-out-button-label = ซูมออก\npdfjs-zoom-in-button =\n    .title = ซูมเข้า\npdfjs-zoom-in-button-label = ซูมเข้า\npdfjs-zoom-select =\n    .title = ซูม\npdfjs-presentation-mode-button =\n    .title = สลับเป็นโหมดการนำเสนอ\npdfjs-presentation-mode-button-label = โหมดการนำเสนอ\npdfjs-open-file-button =\n    .title = เปิดไฟล์\npdfjs-open-file-button-label = เปิด\npdfjs-print-button =\n    .title = พิมพ์\npdfjs-print-button-label = พิมพ์\npdfjs-save-button =\n    .title = บันทึก\npdfjs-save-button-label = บันทึก\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = ดาวน์โหลด\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = ดาวน์โหลด\npdfjs-bookmark-button =\n    .title = หน้าปัจจุบัน (ดู URL จากหน้าปัจจุบัน)\npdfjs-bookmark-button-label = หน้าปัจจุบัน\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = เปิดในแอป\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = เปิดในแอป\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = เครื่องมือ\npdfjs-tools-button-label = เครื่องมือ\npdfjs-first-page-button =\n    .title = ไปยังหน้าแรก\npdfjs-first-page-button-label = ไปยังหน้าแรก\npdfjs-last-page-button =\n    .title = ไปยังหน้าสุดท้าย\npdfjs-last-page-button-label = ไปยังหน้าสุดท้าย\npdfjs-page-rotate-cw-button =\n    .title = หมุนตามเข็มนาฬิกา\npdfjs-page-rotate-cw-button-label = หมุนตามเข็มนาฬิกา\npdfjs-page-rotate-ccw-button =\n    .title = หมุนทวนเข็มนาฬิกา\npdfjs-page-rotate-ccw-button-label = หมุนทวนเข็มนาฬิกา\npdfjs-cursor-text-select-tool-button =\n    .title = เปิดใช้งานเครื่องมือการเลือกข้อความ\npdfjs-cursor-text-select-tool-button-label = เครื่องมือการเลือกข้อความ\npdfjs-cursor-hand-tool-button =\n    .title = เปิดใช้งานเครื่องมือมือ\npdfjs-cursor-hand-tool-button-label = เครื่องมือมือ\npdfjs-scroll-page-button =\n    .title = ใช้การเลื่อนหน้า\npdfjs-scroll-page-button-label = การเลื่อนหน้า\npdfjs-scroll-vertical-button =\n    .title = ใช้การเลื่อนแนวตั้ง\npdfjs-scroll-vertical-button-label = การเลื่อนแนวตั้ง\npdfjs-scroll-horizontal-button =\n    .title = ใช้การเลื่อนแนวนอน\npdfjs-scroll-horizontal-button-label = การเลื่อนแนวนอน\npdfjs-scroll-wrapped-button =\n    .title = ใช้การเลื่อนแบบคลุม\npdfjs-scroll-wrapped-button-label = เลื่อนแบบคลุม\npdfjs-spread-none-button =\n    .title = ไม่ต้องรวมการกระจายหน้า\npdfjs-spread-none-button-label = ไม่กระจาย\npdfjs-spread-odd-button =\n    .title = รวมการกระจายหน้าเริ่มจากหน้าคี่\npdfjs-spread-odd-button-label = กระจายอย่างเหลือเศษ\npdfjs-spread-even-button =\n    .title = รวมการกระจายหน้าเริ่มจากหน้าคู่\npdfjs-spread-even-button-label = กระจายอย่างเท่าเทียม\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = คุณสมบัติเอกสาร…\npdfjs-document-properties-button-label = คุณสมบัติเอกสาร…\npdfjs-document-properties-file-name = ชื่อไฟล์:\npdfjs-document-properties-file-size = ขนาดไฟล์:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } ไบต์)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } ไบต์)\npdfjs-document-properties-title = ชื่อเรื่อง:\npdfjs-document-properties-author = ผู้สร้าง:\npdfjs-document-properties-subject = ชื่อเรื่อง:\npdfjs-document-properties-keywords = คำสำคัญ:\npdfjs-document-properties-creation-date = วันที่สร้าง:\npdfjs-document-properties-modification-date = วันที่แก้ไข:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = ผู้สร้าง:\npdfjs-document-properties-producer = ผู้ผลิต PDF:\npdfjs-document-properties-version = รุ่น PDF:\npdfjs-document-properties-page-count = จำนวนหน้า:\npdfjs-document-properties-page-size = ขนาดหน้า:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = แนวตั้ง\npdfjs-document-properties-page-size-orientation-landscape = แนวนอน\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = จดหมาย\npdfjs-document-properties-page-size-name-legal = ข้อกฎหมาย\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = มุมมองเว็บแบบรวดเร็ว:\npdfjs-document-properties-linearized-yes = ใช่\npdfjs-document-properties-linearized-no = ไม่\npdfjs-document-properties-close-button = ปิด\n\n## Print\n\npdfjs-print-progress-message = กำลังเตรียมเอกสารสำหรับการพิมพ์…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = ยกเลิก\npdfjs-printing-not-supported = คำเตือน: เบราว์เซอร์นี้ไม่ได้สนับสนุนการพิมพ์อย่างเต็มที่\npdfjs-printing-not-ready = คำเตือน: PDF ไม่ได้รับการโหลดอย่างเต็มที่สำหรับการพิมพ์\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = เปิด/ปิดแถบข้าง\npdfjs-toggle-sidebar-notification-button =\n    .title = เปิด/ปิดแถบข้าง (เอกสารมีเค้าร่าง/ไฟล์แนบ/เลเยอร์)\npdfjs-toggle-sidebar-button-label = เปิด/ปิดแถบข้าง\npdfjs-document-outline-button =\n    .title = แสดงเค้าร่างเอกสาร (คลิกสองครั้งเพื่อขยาย/ยุบรายการทั้งหมด)\npdfjs-document-outline-button-label = เค้าร่างเอกสาร\npdfjs-attachments-button =\n    .title = แสดงไฟล์แนบ\npdfjs-attachments-button-label = ไฟล์แนบ\npdfjs-layers-button =\n    .title = แสดงเลเยอร์ (คลิกสองครั้งเพื่อรีเซ็ตเลเยอร์ทั้งหมดเป็นสถานะเริ่มต้น)\npdfjs-layers-button-label = เลเยอร์\npdfjs-thumbs-button =\n    .title = แสดงภาพขนาดย่อ\npdfjs-thumbs-button-label = ภาพขนาดย่อ\npdfjs-current-outline-item-button =\n    .title = ค้นหารายการเค้าร่างปัจจุบัน\npdfjs-current-outline-item-button-label = รายการเค้าร่างปัจจุบัน\npdfjs-findbar-button =\n    .title = ค้นหาในเอกสาร\npdfjs-findbar-button-label = ค้นหา\npdfjs-additional-layers = เลเยอร์เพิ่มเติม\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = หน้า { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = ภาพขนาดย่อของหน้า { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = ค้นหา\n    .placeholder = ค้นหาในเอกสาร…\npdfjs-find-previous-button =\n    .title = หาตำแหน่งก่อนหน้าของวลี\npdfjs-find-previous-button-label = ก่อนหน้า\npdfjs-find-next-button =\n    .title = หาตำแหน่งถัดไปของวลี\npdfjs-find-next-button-label = ถัดไป\npdfjs-find-highlight-checkbox = เน้นสีทั้งหมด\npdfjs-find-match-case-checkbox-label = ตัวพิมพ์ใหญ่เล็กตรงกัน\npdfjs-find-match-diacritics-checkbox-label = เครื่องหมายกำกับการออกเสียงตรงกัน\npdfjs-find-entire-word-checkbox-label = ทั้งคำ\npdfjs-find-reached-top = ค้นหาถึงจุดเริ่มต้นของหน้า เริ่มค้นต่อจากด้านล่าง\npdfjs-find-reached-bottom = ค้นหาถึงจุดสิ้นสุดหน้า เริ่มค้นต่อจากด้านบน\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count = { $current } จาก { $total } รายการที่ตรงกัน\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit = มากกว่า { $limit } รายการที่ตรงกัน\npdfjs-find-not-found = ไม่พบวลี\n\n## Predefined zoom values\n\npdfjs-page-scale-width = ความกว้างหน้า\npdfjs-page-scale-fit = พอดีหน้า\npdfjs-page-scale-auto = ซูมอัตโนมัติ\npdfjs-page-scale-actual = ขนาดจริง\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = หน้า { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = เกิดข้อผิดพลาดขณะโหลด PDF\npdfjs-invalid-file-error = ไฟล์ PDF ไม่ถูกต้องหรือเสียหาย\npdfjs-missing-file-error = ไฟล์ PDF หายไป\npdfjs-unexpected-response-error = การตอบสนองของเซิร์ฟเวอร์ที่ไม่คาดคิด\npdfjs-rendering-error = เกิดข้อผิดพลาดขณะเรนเดอร์หน้า\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [คำอธิบายประกอบ { $type }]\n\n## Password\n\npdfjs-password-label = ป้อนรหัสผ่านเพื่อเปิดไฟล์ PDF นี้\npdfjs-password-invalid = รหัสผ่านไม่ถูกต้อง โปรดลองอีกครั้ง\npdfjs-password-ok-button = ตกลง\npdfjs-password-cancel-button = ยกเลิก\npdfjs-web-fonts-disabled = แบบอักษรเว็บถูกปิดใช้งาน: ไม่สามารถใช้แบบอักษร PDF ฝังตัว\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = ข้อความ\npdfjs-editor-free-text-button-label = ข้อความ\npdfjs-editor-ink-button =\n    .title = รูปวาด\npdfjs-editor-ink-button-label = รูปวาด\npdfjs-editor-stamp-button =\n    .title = เพิ่มหรือแก้ไขภาพ\npdfjs-editor-stamp-button-label = เพิ่มหรือแก้ไขภาพ\npdfjs-editor-highlight-button =\n    .title = เน้น\npdfjs-editor-highlight-button-label = เน้น\npdfjs-highlight-floating-button =\n    .title = เน้นสี\npdfjs-highlight-floating-button1 =\n    .title = เน้นสี\n    .aria-label = เน้นสี\npdfjs-highlight-floating-button-label = เน้นสี\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = เอาภาพวาดออก\npdfjs-editor-remove-freetext-button =\n    .title = เอาข้อความออก\npdfjs-editor-remove-stamp-button =\n    .title = เอาภาพออก\npdfjs-editor-remove-highlight-button =\n    .title = เอาการเน้นสีออก\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = สี\npdfjs-editor-free-text-size-input = ขนาด\npdfjs-editor-ink-color-input = สี\npdfjs-editor-ink-thickness-input = ความหนา\npdfjs-editor-ink-opacity-input = ความทึบ\npdfjs-editor-stamp-add-image-button =\n    .title = เพิ่มภาพ\npdfjs-editor-stamp-add-image-button-label = เพิ่มภาพ\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = ความหนา\npdfjs-editor-free-highlight-thickness-title =\n    .title = เปลี่ยนความหนาเมื่อเน้นรายการอื่นๆ ที่ไม่ใช่ข้อความ\npdfjs-free-text =\n    .aria-label = ตัวแก้ไขข้อความ\npdfjs-free-text-default-content = เริ่มพิมพ์…\npdfjs-ink =\n    .aria-label = ตัวแก้ไขรูปวาด\npdfjs-ink-canvas =\n    .aria-label = ภาพที่ผู้ใช้สร้างขึ้น\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = ข้อความทดแทน\npdfjs-editor-alt-text-edit-button-label = แก้ไขข้อความทดแทน\npdfjs-editor-alt-text-dialog-label = เลือกตัวเลือก\npdfjs-editor-alt-text-dialog-description = ข้อความทดแทนสามารถช่วยเหลือได้เมื่อผู้ใช้มองไม่เห็นภาพ หรือภาพไม่โหลด\npdfjs-editor-alt-text-add-description-label = เพิ่มคำอธิบาย\npdfjs-editor-alt-text-add-description-description = แนะนำให้ใช้ 1-2 ประโยคซึ่งอธิบายหัวเรื่อง ฉาก หรือการกระทำ\npdfjs-editor-alt-text-mark-decorative-label = ทำเครื่องหมายเป็นสิ่งตกแต่ง\npdfjs-editor-alt-text-mark-decorative-description = สิ่งนี้ใช้สำหรับภาพที่เป็นสิ่งประดับ เช่น ขอบ หรือลายน้ำ\npdfjs-editor-alt-text-cancel-button = ยกเลิก\npdfjs-editor-alt-text-save-button = บันทึก\npdfjs-editor-alt-text-decorative-tooltip = ทำเครื่องหมายเป็นสิ่งตกแต่งแล้ว\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = ตัวอย่างเช่น “ชายหนุ่มคนหนึ่งนั่งลงที่โต๊ะเพื่อรับประทานอาหารมื้อหนึ่ง”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = มุมซ้ายบน — ปรับขนาด\npdfjs-editor-resizer-label-top-middle = ตรงกลางด้านบน — ปรับขนาด\npdfjs-editor-resizer-label-top-right = มุมขวาบน — ปรับขนาด\npdfjs-editor-resizer-label-middle-right = ตรงกลางด้านขวา — ปรับขนาด\npdfjs-editor-resizer-label-bottom-right = มุมขวาล่าง — ปรับขนาด\npdfjs-editor-resizer-label-bottom-middle = ตรงกลางด้านล่าง — ปรับขนาด\npdfjs-editor-resizer-label-bottom-left = มุมซ้ายล่าง — ปรับขนาด\npdfjs-editor-resizer-label-middle-left = ตรงกลางด้านซ้าย — ปรับขนาด\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = สีเน้น\npdfjs-editor-colorpicker-button =\n    .title = เปลี่ยนสี\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = ทางเลือกสี\npdfjs-editor-colorpicker-yellow =\n    .title = เหลือง\npdfjs-editor-colorpicker-green =\n    .title = เขียว\npdfjs-editor-colorpicker-blue =\n    .title = น้ำเงิน\npdfjs-editor-colorpicker-pink =\n    .title = ชมพู\npdfjs-editor-colorpicker-red =\n    .title = แดง\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = แสดงทั้งหมด\npdfjs-editor-highlight-show-all-button =\n    .title = แสดงทั้งหมด\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/tl/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Naunang Pahina\npdfjs-previous-button-label = Nakaraan\npdfjs-next-button =\n    .title = Sunod na Pahina\npdfjs-next-button-label = Sunod\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Pahina\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = ng { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } ng { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Paliitin\npdfjs-zoom-out-button-label = Paliitin\npdfjs-zoom-in-button =\n    .title = Palakihin\npdfjs-zoom-in-button-label = Palakihin\npdfjs-zoom-select =\n    .title = Mag-zoom\npdfjs-presentation-mode-button =\n    .title = Lumipat sa Presentation Mode\npdfjs-presentation-mode-button-label = Presentation Mode\npdfjs-open-file-button =\n    .title = Magbukas ng file\npdfjs-open-file-button-label = Buksan\npdfjs-print-button =\n    .title = i-Print\npdfjs-print-button-label = i-Print\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Mga Kagamitan\npdfjs-tools-button-label = Mga Kagamitan\npdfjs-first-page-button =\n    .title = Pumunta sa Unang Pahina\npdfjs-first-page-button-label = Pumunta sa Unang Pahina\npdfjs-last-page-button =\n    .title = Pumunta sa Huling Pahina\npdfjs-last-page-button-label = Pumunta sa Huling Pahina\npdfjs-page-rotate-cw-button =\n    .title = Paikutin Pakanan\npdfjs-page-rotate-cw-button-label = Paikutin Pakanan\npdfjs-page-rotate-ccw-button =\n    .title = Paikutin Pakaliwa\npdfjs-page-rotate-ccw-button-label = Paikutin Pakaliwa\npdfjs-cursor-text-select-tool-button =\n    .title = I-enable ang Text Selection Tool\npdfjs-cursor-text-select-tool-button-label = Text Selection Tool\npdfjs-cursor-hand-tool-button =\n    .title = I-enable ang Hand Tool\npdfjs-cursor-hand-tool-button-label = Hand Tool\npdfjs-scroll-vertical-button =\n    .title = Gumamit ng Vertical Scrolling\npdfjs-scroll-vertical-button-label = Vertical Scrolling\npdfjs-scroll-horizontal-button =\n    .title = Gumamit ng Horizontal Scrolling\npdfjs-scroll-horizontal-button-label = Horizontal Scrolling\npdfjs-scroll-wrapped-button =\n    .title = Gumamit ng Wrapped Scrolling\npdfjs-scroll-wrapped-button-label = Wrapped Scrolling\npdfjs-spread-none-button =\n    .title = Huwag pagsamahin ang mga page spread\npdfjs-spread-none-button-label = No Spreads\npdfjs-spread-odd-button =\n    .title = Join page spreads starting with odd-numbered pages\npdfjs-spread-odd-button-label = Mga Odd Spread\npdfjs-spread-even-button =\n    .title = Pagsamahin ang mga page spread na nagsisimula sa mga even-numbered na pahina\npdfjs-spread-even-button-label = Mga Even Spread\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Mga Katangian ng Dokumento…\npdfjs-document-properties-button-label = Mga Katangian ng Dokumento…\npdfjs-document-properties-file-name = File name:\npdfjs-document-properties-file-size = File size:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Pamagat:\npdfjs-document-properties-author = May-akda:\npdfjs-document-properties-subject = Paksa:\npdfjs-document-properties-keywords = Mga keyword:\npdfjs-document-properties-creation-date = Petsa ng Pagkakagawa:\npdfjs-document-properties-modification-date = Petsa ng Pagkakabago:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Tagalikha:\npdfjs-document-properties-producer = PDF Producer:\npdfjs-document-properties-version = PDF Version:\npdfjs-document-properties-page-count = Bilang ng Pahina:\npdfjs-document-properties-page-size = Laki ng Pahina:\npdfjs-document-properties-page-size-unit-inches = pulgada\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = patayo\npdfjs-document-properties-page-size-orientation-landscape = pahiga\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Fast Web View:\npdfjs-document-properties-linearized-yes = Oo\npdfjs-document-properties-linearized-no = Hindi\npdfjs-document-properties-close-button = Isara\n\n## Print\n\npdfjs-print-progress-message = Inihahanda ang dokumento para sa pag-print…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Kanselahin\npdfjs-printing-not-supported = Babala: Hindi pa ganap na suportado ang pag-print sa browser na ito.\npdfjs-printing-not-ready = Babala: Hindi ganap na nabuksan ang PDF para sa pag-print.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Ipakita/Itago ang Sidebar\npdfjs-toggle-sidebar-notification-button =\n    .title = Ipakita/Itago ang Sidebar (nagtataglay ang dokumento ng balangkas/mga attachment/mga layer)\npdfjs-toggle-sidebar-button-label = Ipakita/Itago ang Sidebar\npdfjs-document-outline-button =\n    .title = Ipakita ang Document Outline (mag-double-click para i-expand/collapse ang laman)\npdfjs-document-outline-button-label = Balangkas ng Dokumento\npdfjs-attachments-button =\n    .title = Ipakita ang mga Attachment\npdfjs-attachments-button-label = Mga attachment\npdfjs-layers-button =\n    .title = Ipakita ang mga Layer (mag-double click para mareset ang lahat ng layer sa orihinal na estado)\npdfjs-layers-button-label = Mga layer\npdfjs-thumbs-button =\n    .title = Ipakita ang mga Thumbnail\npdfjs-thumbs-button-label = Mga thumbnail\npdfjs-findbar-button =\n    .title = Hanapin sa Dokumento\npdfjs-findbar-button-label = Hanapin\npdfjs-additional-layers = Mga Karagdagang Layer\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Pahina { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Thumbnail ng Pahina { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Hanapin\n    .placeholder = Hanapin sa dokumento…\npdfjs-find-previous-button =\n    .title = Hanapin ang nakaraang pangyayari ng parirala\npdfjs-find-previous-button-label = Nakaraan\npdfjs-find-next-button =\n    .title = Hanapin ang susunod na pangyayari ng parirala\npdfjs-find-next-button-label = Susunod\npdfjs-find-highlight-checkbox = I-highlight lahat\npdfjs-find-match-case-checkbox-label = Itugma ang case\npdfjs-find-entire-word-checkbox-label = Buong salita\npdfjs-find-reached-top = Naabot na ang tuktok ng dokumento, ipinagpatuloy mula sa ilalim\npdfjs-find-reached-bottom = Naabot na ang dulo ng dokumento, ipinagpatuloy mula sa tuktok\npdfjs-find-not-found = Hindi natagpuan ang parirala\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Lapad ng Pahina\npdfjs-page-scale-fit = Pagkasyahin ang Pahina\npdfjs-page-scale-auto = Automatic Zoom\npdfjs-page-scale-actual = Totoong sukat\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = Nagkaproblema habang niloload ang PDF.\npdfjs-invalid-file-error = Di-wasto o sira ang PDF file.\npdfjs-missing-file-error = Nawawalang PDF file.\npdfjs-unexpected-response-error = Hindi inaasahang tugon ng server.\npdfjs-rendering-error = Nagkaproblema habang nirerender ang pahina.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Annotation]\n\n## Password\n\npdfjs-password-label = Ipasok ang password upang buksan ang PDF file na ito.\npdfjs-password-invalid = Maling password. Subukan uli.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Kanselahin\npdfjs-web-fonts-disabled = Naka-disable ang mga Web font: hindi kayang gamitin ang mga naka-embed na PDF font.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/tr/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Önceki sayfa\npdfjs-previous-button-label = Önceki\npdfjs-next-button =\n    .title = Sonraki sayfa\npdfjs-next-button-label = Sonraki\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Sayfa\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = / { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } / { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Uzaklaştır\npdfjs-zoom-out-button-label = Uzaklaştır\npdfjs-zoom-in-button =\n    .title = Yakınlaştır\npdfjs-zoom-in-button-label = Yakınlaştır\npdfjs-zoom-select =\n    .title = Yakınlaştırma\npdfjs-presentation-mode-button =\n    .title = Sunum moduna geç\npdfjs-presentation-mode-button-label = Sunum modu\npdfjs-open-file-button =\n    .title = Dosya aç\npdfjs-open-file-button-label = Aç\npdfjs-print-button =\n    .title = Yazdır\npdfjs-print-button-label = Yazdır\npdfjs-save-button =\n    .title = Kaydet\npdfjs-save-button-label = Kaydet\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = İndir\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = İndir\npdfjs-bookmark-button =\n    .title = Geçerli sayfa (geçerli sayfanın adresini görüntüle)\npdfjs-bookmark-button-label = Geçerli sayfa\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Araçlar\npdfjs-tools-button-label = Araçlar\npdfjs-first-page-button =\n    .title = İlk sayfaya git\npdfjs-first-page-button-label = İlk sayfaya git\npdfjs-last-page-button =\n    .title = Son sayfaya git\npdfjs-last-page-button-label = Son sayfaya git\npdfjs-page-rotate-cw-button =\n    .title = Saat yönünde döndür\npdfjs-page-rotate-cw-button-label = Saat yönünde döndür\npdfjs-page-rotate-ccw-button =\n    .title = Saat yönünün tersine döndür\npdfjs-page-rotate-ccw-button-label = Saat yönünün tersine döndür\npdfjs-cursor-text-select-tool-button =\n    .title = Metin seçme aracını etkinleştir\npdfjs-cursor-text-select-tool-button-label = Metin seçme aracı\npdfjs-cursor-hand-tool-button =\n    .title = El aracını etkinleştir\npdfjs-cursor-hand-tool-button-label = El aracı\npdfjs-scroll-page-button =\n    .title = Sayfa kaydırmayı kullan\npdfjs-scroll-page-button-label = Sayfa kaydırma\npdfjs-scroll-vertical-button =\n    .title = Dikey kaydırmayı kullan\npdfjs-scroll-vertical-button-label = Dikey kaydırma\npdfjs-scroll-horizontal-button =\n    .title = Yatay kaydırmayı kullan\npdfjs-scroll-horizontal-button-label = Yatay kaydırma\npdfjs-scroll-wrapped-button =\n    .title = Yan yana kaydırmayı kullan\npdfjs-scroll-wrapped-button-label = Yan yana kaydırma\npdfjs-spread-none-button =\n    .title = Yan yana sayfaları birleştirme\npdfjs-spread-none-button-label = Birleştirme\npdfjs-spread-odd-button =\n    .title = Yan yana sayfaları tek numaralı sayfalardan başlayarak birleştir\npdfjs-spread-odd-button-label = Tek numaralı\npdfjs-spread-even-button =\n    .title = Yan yana sayfaları çift numaralı sayfalardan başlayarak birleştir\npdfjs-spread-even-button-label = Çift numaralı\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Belge özellikleri…\npdfjs-document-properties-button-label = Belge özellikleri…\npdfjs-document-properties-file-name = Dosya adı:\npdfjs-document-properties-file-size = Dosya boyutu:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bayt)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bayt)\npdfjs-document-properties-title = Başlık:\npdfjs-document-properties-author = Yazar:\npdfjs-document-properties-subject = Konu:\npdfjs-document-properties-keywords = Anahtar kelimeler:\npdfjs-document-properties-creation-date = Oluşturma tarihi:\npdfjs-document-properties-modification-date = Değiştirme tarihi:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date } { $time }\npdfjs-document-properties-creator = Oluşturan:\npdfjs-document-properties-producer = PDF üreticisi:\npdfjs-document-properties-version = PDF sürümü:\npdfjs-document-properties-page-count = Sayfa sayısı:\npdfjs-document-properties-page-size = Sayfa boyutu:\npdfjs-document-properties-page-size-unit-inches = inç\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = dikey\npdfjs-document-properties-page-size-orientation-landscape = yatay\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Hızlı web görünümü:\npdfjs-document-properties-linearized-yes = Evet\npdfjs-document-properties-linearized-no = Hayır\npdfjs-document-properties-close-button = Kapat\n\n## Print\n\npdfjs-print-progress-message = Belge yazdırılmaya hazırlanıyor…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = %{ $progress }\npdfjs-print-progress-close-button = İptal\npdfjs-printing-not-supported = Uyarı: Yazdırma bu tarayıcı tarafından tam olarak desteklenmemektedir.\npdfjs-printing-not-ready = Uyarı: PDF tamamen yüklenmedi ve yazdırmaya hazır değil.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Kenar çubuğunu aç/kapat\npdfjs-toggle-sidebar-notification-button =\n    .title = Kenar çubuğunu aç/kapat (Belge ana hat/ekler/katmanlar içeriyor)\npdfjs-toggle-sidebar-button-label = Kenar çubuğunu aç/kapat\npdfjs-document-outline-button =\n    .title = Belge ana hatlarını göster (Tüm öğeleri genişletmek/daraltmak için çift tıklayın)\npdfjs-document-outline-button-label = Belge ana hatları\npdfjs-attachments-button =\n    .title = Ekleri göster\npdfjs-attachments-button-label = Ekler\npdfjs-layers-button =\n    .title = Katmanları göster (tüm katmanları varsayılan duruma sıfırlamak için çift tıklayın)\npdfjs-layers-button-label = Katmanlar\npdfjs-thumbs-button =\n    .title = Küçük resimleri göster\npdfjs-thumbs-button-label = Küçük resimler\npdfjs-current-outline-item-button =\n    .title = Mevcut ana hat öğesini bul\npdfjs-current-outline-item-button-label = Mevcut ana hat öğesi\npdfjs-findbar-button =\n    .title = Belgede bul\npdfjs-findbar-button-label = Bul\npdfjs-additional-layers = Ek katmanlar\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Sayfa { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = { $page }. sayfanın küçük hâli\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Bul\n    .placeholder = Belgede bul…\npdfjs-find-previous-button =\n    .title = Önceki eşleşmeyi bul\npdfjs-find-previous-button-label = Önceki\npdfjs-find-next-button =\n    .title = Sonraki eşleşmeyi bul\npdfjs-find-next-button-label = Sonraki\npdfjs-find-highlight-checkbox = Tümünü vurgula\npdfjs-find-match-case-checkbox-label = Büyük-küçük harfe duyarlı\npdfjs-find-match-diacritics-checkbox-label = Fonetik işaretleri bul\npdfjs-find-entire-word-checkbox-label = Tam sözcükler\npdfjs-find-reached-top = Belgenin başına ulaşıldı, sonundan devam edildi\npdfjs-find-reached-bottom = Belgenin sonuna ulaşıldı, başından devam edildi\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $total } eşleşmeden { $current }. eşleşme\n       *[other] { $total } eşleşmeden { $current }. eşleşme\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] { $limit } eşleşmeden fazla\n       *[other] { $limit } eşleşmeden fazla\n    }\npdfjs-find-not-found = Eşleşme bulunamadı\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Sayfa genişliği\npdfjs-page-scale-fit = Sayfayı sığdır\npdfjs-page-scale-auto = Otomatik yakınlaştır\npdfjs-page-scale-actual = Gerçek boyut\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = %{ $scale }\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Sayfa { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = PDF yüklenirken bir hata oluştu.\npdfjs-invalid-file-error = Geçersiz veya bozulmuş PDF dosyası.\npdfjs-missing-file-error = PDF dosyası eksik.\npdfjs-unexpected-response-error = Beklenmeyen sunucu yanıtı.\npdfjs-rendering-error = Sayfa yorumlanırken bir hata oluştu.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date } { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } işareti]\n\n## Password\n\npdfjs-password-label = Bu PDF dosyasını açmak için parolasını yazın.\npdfjs-password-invalid = Geçersiz parola. Lütfen yeniden deneyin.\npdfjs-password-ok-button = Tamam\npdfjs-password-cancel-button = İptal\npdfjs-web-fonts-disabled = Web fontları devre dışı: Gömülü PDF fontları kullanılamıyor.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Metin\npdfjs-editor-free-text-button-label = Metin\npdfjs-editor-ink-button =\n    .title = Çiz\npdfjs-editor-ink-button-label = Çiz\npdfjs-editor-stamp-button =\n    .title = Resim ekle veya düzenle\npdfjs-editor-stamp-button-label = Resim ekle veya düzenle\npdfjs-editor-highlight-button =\n    .title = Vurgula\npdfjs-editor-highlight-button-label = Vurgula\npdfjs-highlight-floating-button =\n    .title = Vurgula\npdfjs-highlight-floating-button1 =\n    .title = Vurgula\n    .aria-label = Vurgula\npdfjs-highlight-floating-button-label = Vurgula\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Çizimi kaldır\npdfjs-editor-remove-freetext-button =\n    .title = Metni kaldır\npdfjs-editor-remove-stamp-button =\n    .title = Resmi kaldır\npdfjs-editor-remove-highlight-button =\n    .title = Vurgulamayı kaldır\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Renk\npdfjs-editor-free-text-size-input = Boyut\npdfjs-editor-ink-color-input = Renk\npdfjs-editor-ink-thickness-input = Kalınlık\npdfjs-editor-ink-opacity-input = Saydamlık\npdfjs-editor-stamp-add-image-button =\n    .title = Resim ekle\npdfjs-editor-stamp-add-image-button-label = Resim ekle\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Kalınlık\npdfjs-editor-free-highlight-thickness-title =\n    .title = Metin dışındaki öğeleri vurgularken kalınlığı değiştir\npdfjs-free-text =\n    .aria-label = Metin düzenleyicisi\npdfjs-free-text-default-content = Yazmaya başlayın…\npdfjs-ink =\n    .aria-label = Çizim düzenleyicisi\npdfjs-ink-canvas =\n    .aria-label = Kullanıcı tarafından oluşturulan resim\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Alternatif metin\npdfjs-editor-alt-text-edit-button-label = Alternatif metni düzenle\npdfjs-editor-alt-text-dialog-label = Bir seçenek seçin\npdfjs-editor-alt-text-dialog-description = Alternatif metin, insanlar resmi göremediğinde veya resim yüklenmediğinde işe yarar.\npdfjs-editor-alt-text-add-description-label = Açıklama ekle\npdfjs-editor-alt-text-add-description-description = Konuyu, ortamı veya eylemleri tanımlayan bir iki cümle yazmaya çalışın.\npdfjs-editor-alt-text-mark-decorative-label = Dekoratif olarak işaretle\npdfjs-editor-alt-text-mark-decorative-description = Kenarlıklar veya filigranlar gibi dekoratif resimler için kullanılır.\npdfjs-editor-alt-text-cancel-button = Vazgeç\npdfjs-editor-alt-text-save-button = Kaydet\npdfjs-editor-alt-text-decorative-tooltip = Dekoratif olarak işaretlendi\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Örneğin, “Genç bir adam yemek yemek için masaya oturuyor”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Sol üst köşe — yeniden boyutlandır\npdfjs-editor-resizer-label-top-middle = Üst orta — yeniden boyutlandır\npdfjs-editor-resizer-label-top-right = Sağ üst köşe — yeniden boyutlandır\npdfjs-editor-resizer-label-middle-right = Orta sağ — yeniden boyutlandır\npdfjs-editor-resizer-label-bottom-right = Sağ alt köşe — yeniden boyutlandır\npdfjs-editor-resizer-label-bottom-middle = Alt orta — yeniden boyutlandır\npdfjs-editor-resizer-label-bottom-left = Sol alt köşe — yeniden boyutlandır\npdfjs-editor-resizer-label-middle-left = Orta sol — yeniden boyutlandır\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Vurgu rengi\npdfjs-editor-colorpicker-button =\n    .title = Rengi değiştir\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Renk seçenekleri\npdfjs-editor-colorpicker-yellow =\n    .title = Sarı\npdfjs-editor-colorpicker-green =\n    .title = Yeşil\npdfjs-editor-colorpicker-blue =\n    .title = Mavi\npdfjs-editor-colorpicker-pink =\n    .title = Pembe\npdfjs-editor-colorpicker-red =\n    .title = Kırmızı\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Tümünü göster\npdfjs-editor-highlight-show-all-button =\n    .title = Tümünü göster\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/trs/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Pajinâ gunâj rukùu\npdfjs-previous-button-label = Sa gachin\npdfjs-next-button =\n    .title = Pajinâ 'na' ñaan\npdfjs-next-button-label = Ne' ñaan\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Ñanj\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = si'iaj { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Nagi'iaj li'\npdfjs-zoom-out-button-label = Nagi'iaj li'\npdfjs-zoom-in-button =\n    .title = Nagi'iaj niko'\npdfjs-zoom-in-button-label = Nagi'iaj niko'\npdfjs-zoom-select =\n    .title = dàj nìko ma'an\npdfjs-presentation-mode-button =\n    .title = Naduno' daj ga ma\npdfjs-presentation-mode-button-label = Daj gà ma\npdfjs-open-file-button =\n    .title = Na'nïn' chrû ñanj\npdfjs-open-file-button-label = Na'nïn\npdfjs-print-button =\n    .title = Nari' ña du'ua\npdfjs-print-button-label = Nari' ñadu'ua\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Rasun\npdfjs-tools-button-label = Nej rasùun\npdfjs-first-page-button =\n    .title = gun' riña pajina asiniin\npdfjs-first-page-button-label = Gun' riña pajina asiniin\npdfjs-last-page-button =\n    .title = Gun' riña pajina rukù ni'in\npdfjs-last-page-button-label = Gun' riña pajina rukù ni'inj\npdfjs-page-rotate-cw-button =\n    .title = Tanikaj ne' huat\npdfjs-page-rotate-cw-button-label = Tanikaj ne' huat\npdfjs-page-rotate-ccw-button =\n    .title = Tanikaj ne' chînt'\npdfjs-page-rotate-ccw-button-label = Tanikaj ne' chint\npdfjs-cursor-text-select-tool-button =\n    .title = Dugi'iaj sun' sa ganahui texto\npdfjs-cursor-text-select-tool-button-label = Nej rasun arajsun' da' nahui' texto\npdfjs-cursor-hand-tool-button =\n    .title = Nachrun' nej rasun\npdfjs-cursor-hand-tool-button-label = Sa rajsun ro'o'\npdfjs-scroll-vertical-button =\n    .title = Garasun' dukuán runūu\npdfjs-scroll-vertical-button-label = Dukuán runūu\npdfjs-scroll-horizontal-button =\n    .title = Garasun' dukuán nikin' nahui\npdfjs-scroll-horizontal-button-label = Dukuán nikin' nahui\npdfjs-scroll-wrapped-button =\n    .title = Garasun' sa nachree\npdfjs-scroll-wrapped-button-label = Sa nachree\npdfjs-spread-none-button =\n    .title = Si nagi'iaj nugun'un' nej pagina hua ninin\npdfjs-spread-none-button-label = Ni'io daj hua pagina\npdfjs-spread-odd-button =\n    .title = Nagi'iaj nugua'ant nej pajina\npdfjs-spread-odd-button-label = Ni'io' daj hua libro gurin\npdfjs-spread-even-button =\n    .title = Nakāj dugui' ngà nej pajinâ ayi'ì ngà da' hùi hùi\npdfjs-spread-even-button-label = Nahuin nìko nej\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Nej sa nikāj ñanj…\npdfjs-document-properties-button-label = Nej sa nikāj ñanj…\npdfjs-document-properties-file-name = Si yugui archîbo:\npdfjs-document-properties-file-size = Dàj yachìj archîbo:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Si yugui:\npdfjs-document-properties-author = Sí girirà:\npdfjs-document-properties-subject = Dugui':\npdfjs-document-properties-keywords = Nej nuguan' huìi:\npdfjs-document-properties-creation-date = Gui gurugui' man:\npdfjs-document-properties-modification-date = Nuguan' nahuin nakà:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Guiri ro'\npdfjs-document-properties-producer = Sa ri PDF:\npdfjs-document-properties-version = PDF Version:\npdfjs-document-properties-page-count = Si Guendâ Pâjina:\npdfjs-document-properties-page-size = Dàj yachìj pâjina:\npdfjs-document-properties-page-size-unit-inches = riña\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = nadu'ua\npdfjs-document-properties-page-size-orientation-landscape = dàj huaj\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Da'ngà'a\npdfjs-document-properties-page-size-name-legal = Nuguan' a'nï'ïn\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Nanèt chre ni'iajt riña Web:\npdfjs-document-properties-linearized-yes = Ga'ue\npdfjs-document-properties-linearized-no = Si ga'ue\npdfjs-document-properties-close-button = Narán\n\n## Print\n\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Duyichin'\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Nadunā barrâ nù yi'nïn\npdfjs-toggle-sidebar-button-label = Nadunā barrâ nù yi'nïn\npdfjs-findbar-button-label = Narì'\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n\n## Find panel button title and messages\n\npdfjs-find-previous-button-label = Sa gachîn\npdfjs-find-next-button-label = Ne' ñaan\npdfjs-find-highlight-checkbox = Daran' sa ña'an\npdfjs-find-match-case-checkbox-label = Match case\npdfjs-find-not-found = Nu narì'ij nugua'anj\n\n## Predefined zoom values\n\npdfjs-page-scale-actual = Dàj yàchi akuan' nín\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\n\n## Annotations\n\n\n## Password\n\npdfjs-password-ok-button = Ga'ue\npdfjs-password-cancel-button = Duyichin'\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/uk/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Попередня сторінка\npdfjs-previous-button-label = Попередня\npdfjs-next-button =\n    .title = Наступна сторінка\npdfjs-next-button-label = Наступна\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Сторінка\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = із { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } із { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Зменшити\npdfjs-zoom-out-button-label = Зменшити\npdfjs-zoom-in-button =\n    .title = Збільшити\npdfjs-zoom-in-button-label = Збільшити\npdfjs-zoom-select =\n    .title = Масштаб\npdfjs-presentation-mode-button =\n    .title = Перейти в режим презентації\npdfjs-presentation-mode-button-label = Режим презентації\npdfjs-open-file-button =\n    .title = Відкрити файл\npdfjs-open-file-button-label = Відкрити\npdfjs-print-button =\n    .title = Друк\npdfjs-print-button-label = Друк\npdfjs-save-button =\n    .title = Зберегти\npdfjs-save-button-label = Зберегти\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Завантажити\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Завантажити\npdfjs-bookmark-button =\n    .title = Поточна сторінка (перегляд URL-адреси з поточної сторінки)\npdfjs-bookmark-button-label = Поточна сторінка\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Інструменти\npdfjs-tools-button-label = Інструменти\npdfjs-first-page-button =\n    .title = На першу сторінку\npdfjs-first-page-button-label = На першу сторінку\npdfjs-last-page-button =\n    .title = На останню сторінку\npdfjs-last-page-button-label = На останню сторінку\npdfjs-page-rotate-cw-button =\n    .title = Повернути за годинниковою стрілкою\npdfjs-page-rotate-cw-button-label = Повернути за годинниковою стрілкою\npdfjs-page-rotate-ccw-button =\n    .title = Повернути проти годинникової стрілки\npdfjs-page-rotate-ccw-button-label = Повернути проти годинникової стрілки\npdfjs-cursor-text-select-tool-button =\n    .title = Увімкнути інструмент вибору тексту\npdfjs-cursor-text-select-tool-button-label = Інструмент вибору тексту\npdfjs-cursor-hand-tool-button =\n    .title = Увімкнути інструмент \"Рука\"\npdfjs-cursor-hand-tool-button-label = Інструмент \"Рука\"\npdfjs-scroll-page-button =\n    .title = Використовувати прокручування сторінки\npdfjs-scroll-page-button-label = Прокручування сторінки\npdfjs-scroll-vertical-button =\n    .title = Використовувати вертикальне прокручування\npdfjs-scroll-vertical-button-label = Вертикальне прокручування\npdfjs-scroll-horizontal-button =\n    .title = Використовувати горизонтальне прокручування\npdfjs-scroll-horizontal-button-label = Горизонтальне прокручування\npdfjs-scroll-wrapped-button =\n    .title = Використовувати масштабоване прокручування\npdfjs-scroll-wrapped-button-label = Масштабоване прокручування\npdfjs-spread-none-button =\n    .title = Не використовувати розгорнуті сторінки\npdfjs-spread-none-button-label = Без розгорнутих сторінок\npdfjs-spread-odd-button =\n    .title = Розгорнуті сторінки починаються з непарних номерів\npdfjs-spread-odd-button-label = Непарні сторінки зліва\npdfjs-spread-even-button =\n    .title = Розгорнуті сторінки починаються з парних номерів\npdfjs-spread-even-button-label = Парні сторінки зліва\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Властивості документа…\npdfjs-document-properties-button-label = Властивості документа…\npdfjs-document-properties-file-name = Назва файлу:\npdfjs-document-properties-file-size = Розмір файлу:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } КБ ({ $size_b } байтів)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } МБ ({ $size_b } байтів)\npdfjs-document-properties-title = Заголовок:\npdfjs-document-properties-author = Автор:\npdfjs-document-properties-subject = Тема:\npdfjs-document-properties-keywords = Ключові слова:\npdfjs-document-properties-creation-date = Дата створення:\npdfjs-document-properties-modification-date = Дата зміни:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Створено:\npdfjs-document-properties-producer = Виробник PDF:\npdfjs-document-properties-version = Версія PDF:\npdfjs-document-properties-page-count = Кількість сторінок:\npdfjs-document-properties-page-size = Розмір сторінки:\npdfjs-document-properties-page-size-unit-inches = дюймів\npdfjs-document-properties-page-size-unit-millimeters = мм\npdfjs-document-properties-page-size-orientation-portrait = книжкова\npdfjs-document-properties-page-size-orientation-landscape = альбомна\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Швидкий перегляд в Інтернеті:\npdfjs-document-properties-linearized-yes = Так\npdfjs-document-properties-linearized-no = Ні\npdfjs-document-properties-close-button = Закрити\n\n## Print\n\npdfjs-print-progress-message = Підготовка документу до друку…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Скасувати\npdfjs-printing-not-supported = Попередження: Цей браузер не повністю підтримує друк.\npdfjs-printing-not-ready = Попередження: PDF не повністю завантажений для друку.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Бічна панель\npdfjs-toggle-sidebar-notification-button =\n    .title = Перемкнути бічну панель (документ містить ескіз/вкладення/шари)\npdfjs-toggle-sidebar-button-label = Перемкнути бічну панель\npdfjs-document-outline-button =\n    .title = Показати схему документу (подвійний клік для розгортання/згортання елементів)\npdfjs-document-outline-button-label = Схема документа\npdfjs-attachments-button =\n    .title = Показати вкладення\npdfjs-attachments-button-label = Вкладення\npdfjs-layers-button =\n    .title = Показати шари (двічі клацніть, щоб скинути всі шари до типового стану)\npdfjs-layers-button-label = Шари\npdfjs-thumbs-button =\n    .title = Показати мініатюри\npdfjs-thumbs-button-label = Мініатюри\npdfjs-current-outline-item-button =\n    .title = Знайти поточний елемент змісту\npdfjs-current-outline-item-button-label = Поточний елемент змісту\npdfjs-findbar-button =\n    .title = Знайти в документі\npdfjs-findbar-button-label = Знайти\npdfjs-additional-layers = Додаткові шари\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Сторінка { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Ескіз сторінки { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Знайти\n    .placeholder = Знайти в документі…\npdfjs-find-previous-button =\n    .title = Знайти попереднє входження фрази\npdfjs-find-previous-button-label = Попереднє\npdfjs-find-next-button =\n    .title = Знайти наступне входження фрази\npdfjs-find-next-button-label = Наступне\npdfjs-find-highlight-checkbox = Підсвітити все\npdfjs-find-match-case-checkbox-label = З урахуванням регістру\npdfjs-find-match-diacritics-checkbox-label = Відповідність діакритичних знаків\npdfjs-find-entire-word-checkbox-label = Цілі слова\npdfjs-find-reached-top = Досягнуто початку документу, продовжено з кінця\npdfjs-find-reached-bottom = Досягнуто кінця документу, продовжено з початку\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count =\n    { $total ->\n        [one] { $current } збіг з { $total }\n        [few] { $current } збіги з { $total }\n       *[many] { $current } збігів з { $total }\n    }\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit =\n    { $limit ->\n        [one] Понад { $limit } збіг\n        [few] Понад { $limit } збіги\n       *[many] Понад { $limit } збігів\n    }\npdfjs-find-not-found = Фразу не знайдено\n\n## Predefined zoom values\n\npdfjs-page-scale-width = За шириною\npdfjs-page-scale-fit = Вмістити\npdfjs-page-scale-auto = Автомасштаб\npdfjs-page-scale-actual = Дійсний розмір\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Сторінка { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Під час завантаження PDF сталася помилка.\npdfjs-invalid-file-error = Недійсний або пошкоджений PDF-файл.\npdfjs-missing-file-error = Відсутній PDF-файл.\npdfjs-unexpected-response-error = Неочікувана відповідь сервера.\npdfjs-rendering-error = Під час виведення сторінки сталася помилка.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type }-анотація]\n\n## Password\n\npdfjs-password-label = Введіть пароль для відкриття цього PDF-файлу.\npdfjs-password-invalid = Неправильний пароль. Спробуйте ще раз.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Скасувати\npdfjs-web-fonts-disabled = Веб-шрифти вимкнено: неможливо використати вбудовані у PDF шрифти.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Текст\npdfjs-editor-free-text-button-label = Текст\npdfjs-editor-ink-button =\n    .title = Малювати\npdfjs-editor-ink-button-label = Малювати\npdfjs-editor-stamp-button =\n    .title = Додати чи редагувати зображення\npdfjs-editor-stamp-button-label = Додати чи редагувати зображення\npdfjs-editor-highlight-button =\n    .title = Підсвітити\npdfjs-editor-highlight-button-label = Підсвітити\npdfjs-highlight-floating-button =\n    .title = Підсвітити\npdfjs-highlight-floating-button1 =\n    .title = Підсвітити\n    .aria-label = Підсвітити\npdfjs-highlight-floating-button-label = Підсвітити\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Вилучити малюнок\npdfjs-editor-remove-freetext-button =\n    .title = Вилучити текст\npdfjs-editor-remove-stamp-button =\n    .title = Вилучити зображення\npdfjs-editor-remove-highlight-button =\n    .title = Вилучити підсвічування\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Колір\npdfjs-editor-free-text-size-input = Розмір\npdfjs-editor-ink-color-input = Колір\npdfjs-editor-ink-thickness-input = Товщина\npdfjs-editor-ink-opacity-input = Прозорість\npdfjs-editor-stamp-add-image-button =\n    .title = Додати зображення\npdfjs-editor-stamp-add-image-button-label = Додати зображення\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Товщина\npdfjs-editor-free-highlight-thickness-title =\n    .title = Змінюйте товщину під час підсвічування елементів, крім тексту\npdfjs-free-text =\n    .aria-label = Текстовий редактор\npdfjs-free-text-default-content = Почніть вводити…\npdfjs-ink =\n    .aria-label = Графічний редактор\npdfjs-ink-canvas =\n    .aria-label = Зображення, створене користувачем\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Альтернативний текст\npdfjs-editor-alt-text-edit-button-label = Змінити альтернативний текст\npdfjs-editor-alt-text-dialog-label = Вибрати варіант\npdfjs-editor-alt-text-dialog-description = Альтернативний текст допомагає, коли зображення не видно або коли воно не завантажується.\npdfjs-editor-alt-text-add-description-label = Додати опис\npdfjs-editor-alt-text-add-description-description = Намагайтеся створити 1-2 речення, які описують тему, обставини або дії.\npdfjs-editor-alt-text-mark-decorative-label = Позначити декоративним\npdfjs-editor-alt-text-mark-decorative-description = Використовується для декоративних зображень, наприклад рамок або водяних знаків.\npdfjs-editor-alt-text-cancel-button = Скасувати\npdfjs-editor-alt-text-save-button = Зберегти\npdfjs-editor-alt-text-decorative-tooltip = Позначено декоративним\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Наприклад, “Молодий чоловік сідає за стіл їсти”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Верхній лівий кут – зміна розміру\npdfjs-editor-resizer-label-top-middle = Вгорі посередині – зміна розміру\npdfjs-editor-resizer-label-top-right = Верхній правий кут – зміна розміру\npdfjs-editor-resizer-label-middle-right = Праворуч посередині – зміна розміру\npdfjs-editor-resizer-label-bottom-right = Нижній правий кут – зміна розміру\npdfjs-editor-resizer-label-bottom-middle = Внизу посередині – зміна розміру\npdfjs-editor-resizer-label-bottom-left = Нижній лівий кут – зміна розміру\npdfjs-editor-resizer-label-middle-left = Ліворуч посередині – зміна розміру\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Колір підсвічування\npdfjs-editor-colorpicker-button =\n    .title = Змінити колір\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Вибір кольору\npdfjs-editor-colorpicker-yellow =\n    .title = Жовтий\npdfjs-editor-colorpicker-green =\n    .title = Зелений\npdfjs-editor-colorpicker-blue =\n    .title = Блакитний\npdfjs-editor-colorpicker-pink =\n    .title = Рожевий\npdfjs-editor-colorpicker-red =\n    .title = Червоний\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Показати все\npdfjs-editor-highlight-show-all-button =\n    .title = Показати все\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/ur/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = پچھلا صفحہ\npdfjs-previous-button-label = پچھلا\npdfjs-next-button =\n    .title = اگلا صفحہ\npdfjs-next-button-label = آگے\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = صفحہ\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = { $pagesCount } کا\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } کا { $pagesCount })\npdfjs-zoom-out-button =\n    .title = باہر زوم کریں\npdfjs-zoom-out-button-label = باہر زوم کریں\npdfjs-zoom-in-button =\n    .title = اندر زوم کریں\npdfjs-zoom-in-button-label = اندر زوم کریں\npdfjs-zoom-select =\n    .title = زوم\npdfjs-presentation-mode-button =\n    .title = پیشکش موڈ میں چلے جائیں\npdfjs-presentation-mode-button-label = پیشکش موڈ\npdfjs-open-file-button =\n    .title = مسل کھولیں\npdfjs-open-file-button-label = کھولیں\npdfjs-print-button =\n    .title = چھاپیں\npdfjs-print-button-label = چھاپیں\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = آلات\npdfjs-tools-button-label = آلات\npdfjs-first-page-button =\n    .title = پہلے صفحہ پر جائیں\npdfjs-first-page-button-label = پہلے صفحہ پر جائیں\npdfjs-last-page-button =\n    .title = آخری صفحہ پر جائیں\npdfjs-last-page-button-label = آخری صفحہ پر جائیں\npdfjs-page-rotate-cw-button =\n    .title = گھڑی وار گھمائیں\npdfjs-page-rotate-cw-button-label = گھڑی وار گھمائیں\npdfjs-page-rotate-ccw-button =\n    .title = ضد گھڑی وار گھمائیں\npdfjs-page-rotate-ccw-button-label = ضد گھڑی وار گھمائیں\npdfjs-cursor-text-select-tool-button =\n    .title = متن کے انتخاب کے ٹول کو فعال بناے\npdfjs-cursor-text-select-tool-button-label = متن کے انتخاب کا آلہ\npdfjs-cursor-hand-tool-button =\n    .title = ہینڈ ٹول کو فعال بناییں\npdfjs-cursor-hand-tool-button-label = ہاتھ کا آلہ\npdfjs-scroll-vertical-button =\n    .title = عمودی اسکرولنگ کا استعمال کریں\npdfjs-scroll-vertical-button-label = عمودی اسکرولنگ\npdfjs-scroll-horizontal-button =\n    .title = افقی سکرولنگ کا استعمال کریں\npdfjs-scroll-horizontal-button-label = افقی سکرولنگ\npdfjs-spread-none-button =\n    .title = صفحہ پھیلانے میں شامل نہ ہوں\npdfjs-spread-none-button-label = کوئی پھیلاؤ نہیں\npdfjs-spread-odd-button-label = تاک پھیلاؤ\npdfjs-spread-even-button-label = جفت پھیلاؤ\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = دستاویز خواص…\npdfjs-document-properties-button-label = دستاویز خواص…\npdfjs-document-properties-file-name = نام مسل:\npdfjs-document-properties-file-size = مسل سائز:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = عنوان:\npdfjs-document-properties-author = تخلیق کار:\npdfjs-document-properties-subject = موضوع:\npdfjs-document-properties-keywords = کلیدی الفاظ:\npdfjs-document-properties-creation-date = تخلیق کی تاریخ:\npdfjs-document-properties-modification-date = ترمیم کی تاریخ:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }، { $time }\npdfjs-document-properties-creator = تخلیق کار:\npdfjs-document-properties-producer = PDF پیدا کار:\npdfjs-document-properties-version = PDF ورژن:\npdfjs-document-properties-page-count = صفحہ شمار:\npdfjs-document-properties-page-size = صفہ کی لمبائ:\npdfjs-document-properties-page-size-unit-inches = میں\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = عمودی انداز\npdfjs-document-properties-page-size-orientation-landscape = افقى انداز\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = خط\npdfjs-document-properties-page-size-name-legal = قانونی\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } { $name } { $orientation }\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = تیز ویب دیکھیں:\npdfjs-document-properties-linearized-yes = ہاں\npdfjs-document-properties-linearized-no = نہیں\npdfjs-document-properties-close-button = بند کریں\n\n## Print\n\npdfjs-print-progress-message = چھاپنے کرنے کے لیے دستاویز تیار کیے جا رھے ھیں\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = *{ $progress }%*\npdfjs-print-progress-close-button = منسوخ کریں\npdfjs-printing-not-supported = تنبیہ:چھاپنا اس براؤزر پر پوری طرح معاونت شدہ نہیں ہے۔\npdfjs-printing-not-ready = تنبیہ: PDF چھپائی کے لیے پوری طرح لوڈ نہیں ہوئی۔\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = سلائیڈ ٹوگل کریں\npdfjs-toggle-sidebar-button-label = سلائیڈ ٹوگل کریں\npdfjs-document-outline-button =\n    .title = دستاویز کی سرخیاں دکھایں (تمام اشیاء وسیع / غائب کرنے کے لیے ڈبل کلک کریں)\npdfjs-document-outline-button-label = دستاویز آؤٹ لائن\npdfjs-attachments-button =\n    .title = منسلکات دکھائیں\npdfjs-attachments-button-label = منسلکات\npdfjs-thumbs-button =\n    .title = تھمبنیل دکھائیں\npdfjs-thumbs-button-label = مجمل\npdfjs-findbar-button =\n    .title = دستاویز میں ڈھونڈیں\npdfjs-findbar-button-label = ڈھونڈیں\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = صفحہ { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = صفحے کا مجمل { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = ڈھونڈیں\n    .placeholder = دستاویز… میں ڈھونڈیں\npdfjs-find-previous-button =\n    .title = فقرے کا پچھلا وقوع ڈھونڈیں\npdfjs-find-previous-button-label = پچھلا\npdfjs-find-next-button =\n    .title = فقرے کا اگلہ وقوع ڈھونڈیں\npdfjs-find-next-button-label = آگے\npdfjs-find-highlight-checkbox = تمام نمایاں کریں\npdfjs-find-match-case-checkbox-label = حروف مشابہ کریں\npdfjs-find-entire-word-checkbox-label = تمام الفاظ\npdfjs-find-reached-top = صفحہ کے شروع پر پہنچ گیا، نیچے سے جاری کیا\npdfjs-find-reached-bottom = صفحہ کے اختتام پر پہنچ گیا، اوپر سے جاری کیا\npdfjs-find-not-found = فقرا نہیں ملا\n\n## Predefined zoom values\n\npdfjs-page-scale-width = صفحہ چوڑائی\npdfjs-page-scale-fit = صفحہ فٹنگ\npdfjs-page-scale-auto = خودکار زوم\npdfjs-page-scale-actual = اصل سائز\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = صفحہ { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = PDF لوڈ کرتے وقت نقص آ گیا۔\npdfjs-invalid-file-error = ناجائز یا خراب PDF مسل\npdfjs-missing-file-error = PDF مسل غائب ہے۔\npdfjs-unexpected-response-error = غیرمتوقع پیش کار جواب\npdfjs-rendering-error = صفحہ بناتے ہوئے نقص آ گیا۔\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }.{ $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } نوٹ]\n\n## Password\n\npdfjs-password-label = PDF مسل کھولنے کے لیے پاس ورڈ داخل کریں.\npdfjs-password-invalid = ناجائز پاس ورڈ. براےؑ کرم دوبارہ کوشش کریں.\npdfjs-password-ok-button = ٹھیک ہے\npdfjs-password-cancel-button = منسوخ کریں\npdfjs-web-fonts-disabled = ویب فانٹ نا اہل ہیں: شامل PDF فانٹ استعمال کرنے میں ناکام۔\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/uz/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Oldingi sahifa\npdfjs-previous-button-label = Oldingi\npdfjs-next-button =\n    .title = Keyingi sahifa\npdfjs-next-button-label = Keyingi\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = /{ $pagesCount }\npdfjs-zoom-out-button =\n    .title = Kichiklashtirish\npdfjs-zoom-out-button-label = Kichiklashtirish\npdfjs-zoom-in-button =\n    .title = Kattalashtirish\npdfjs-zoom-in-button-label = Kattalashtirish\npdfjs-zoom-select =\n    .title = Masshtab\npdfjs-presentation-mode-button =\n    .title = Namoyish usuliga oʻtish\npdfjs-presentation-mode-button-label = Namoyish usuli\npdfjs-open-file-button =\n    .title = Faylni ochish\npdfjs-open-file-button-label = Ochish\npdfjs-print-button =\n    .title = Chop qilish\npdfjs-print-button-label = Chop qilish\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Vositalar\npdfjs-tools-button-label = Vositalar\npdfjs-first-page-button =\n    .title = Birinchi sahifaga oʻtish\npdfjs-first-page-button-label = Birinchi sahifaga oʻtish\npdfjs-last-page-button =\n    .title = Soʻnggi sahifaga oʻtish\npdfjs-last-page-button-label = Soʻnggi sahifaga oʻtish\npdfjs-page-rotate-cw-button =\n    .title = Soat yoʻnalishi boʻyicha burish\npdfjs-page-rotate-cw-button-label = Soat yoʻnalishi boʻyicha burish\npdfjs-page-rotate-ccw-button =\n    .title = Soat yoʻnalishiga qarshi burish\npdfjs-page-rotate-ccw-button-label = Soat yoʻnalishiga qarshi burish\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Hujjat xossalari\npdfjs-document-properties-button-label = Hujjat xossalari\npdfjs-document-properties-file-name = Fayl nomi:\npdfjs-document-properties-file-size = Fayl hajmi:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\npdfjs-document-properties-title = Nomi:\npdfjs-document-properties-author = Muallifi:\npdfjs-document-properties-subject = Mavzusi:\npdfjs-document-properties-keywords = Kalit so‘zlar\npdfjs-document-properties-creation-date = Yaratilgan sanasi:\npdfjs-document-properties-modification-date = O‘zgartirilgan sanasi\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Yaratuvchi:\npdfjs-document-properties-producer = PDF ishlab chiqaruvchi:\npdfjs-document-properties-version = PDF versiyasi:\npdfjs-document-properties-page-count = Sahifa soni:\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\n\n##\n\npdfjs-document-properties-close-button = Yopish\n\n## Print\n\npdfjs-printing-not-supported = Diqqat: chop qilish bruzer tomonidan toʻliq qoʻllab-quvvatlanmaydi.\npdfjs-printing-not-ready = Diqqat: PDF fayl chop qilish uchun toʻliq yuklanmadi.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Yon panelni yoqib/oʻchirib qoʻyish\npdfjs-toggle-sidebar-button-label = Yon panelni yoqib/oʻchirib qoʻyish\npdfjs-document-outline-button-label = Hujjat tuzilishi\npdfjs-attachments-button =\n    .title = Ilovalarni ko‘rsatish\npdfjs-attachments-button-label = Ilovalar\npdfjs-thumbs-button =\n    .title = Nishonchalarni koʻrsatish\npdfjs-thumbs-button-label = Nishoncha\npdfjs-findbar-button =\n    .title = Hujjat ichidan topish\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = { $page } sahifa\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = { $page } sahifa nishonchasi\n\n## Find panel button title and messages\n\npdfjs-find-previous-button =\n    .title = Soʻzlardagi oldingi hodisani topish\npdfjs-find-previous-button-label = Oldingi\npdfjs-find-next-button =\n    .title = Iboradagi keyingi hodisani topish\npdfjs-find-next-button-label = Keyingi\npdfjs-find-highlight-checkbox = Barchasini ajratib koʻrsatish\npdfjs-find-match-case-checkbox-label = Katta-kichik harflarni farqlash\npdfjs-find-reached-top = Hujjatning boshigacha yetib keldik, pastdan davom ettiriladi\npdfjs-find-reached-bottom = Hujjatning oxiriga yetib kelindi, yuqoridan davom ettirladi\npdfjs-find-not-found = Soʻzlar topilmadi\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Sahifa eni\npdfjs-page-scale-fit = Sahifani moslashtirish\npdfjs-page-scale-auto = Avtomatik masshtab\npdfjs-page-scale-actual = Haqiqiy hajmi\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = PDF yuklanayotganda xato yuz berdi.\npdfjs-invalid-file-error = Xato yoki buzuq PDF fayli.\npdfjs-missing-file-error = PDF fayl kerak.\npdfjs-unexpected-response-error = Kutilmagan server javobi.\npdfjs-rendering-error = Sahifa renderlanayotganda xato yuz berdi.\n\n## Annotations\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Annotation]\n\n## Password\n\npdfjs-password-label = PDF faylni ochish uchun parolni kiriting.\npdfjs-password-invalid = Parol - notoʻgʻri. Qaytadan urinib koʻring.\npdfjs-password-ok-button = OK\npdfjs-web-fonts-disabled = Veb shriftlar oʻchirilgan: ichki PDF shriftlardan foydalanib boʻlmmaydi.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/vi/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Trang trước\npdfjs-previous-button-label = Trước\npdfjs-next-button =\n    .title = Trang Sau\npdfjs-next-button-label = Tiếp\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Trang\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = trên { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } trên { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Thu nhỏ\npdfjs-zoom-out-button-label = Thu nhỏ\npdfjs-zoom-in-button =\n    .title = Phóng to\npdfjs-zoom-in-button-label = Phóng to\npdfjs-zoom-select =\n    .title = Thu phóng\npdfjs-presentation-mode-button =\n    .title = Chuyển sang chế độ trình chiếu\npdfjs-presentation-mode-button-label = Chế độ trình chiếu\npdfjs-open-file-button =\n    .title = Mở tập tin\npdfjs-open-file-button-label = Mở tập tin\npdfjs-print-button =\n    .title = In\npdfjs-print-button-label = In\npdfjs-save-button =\n    .title = Lưu\npdfjs-save-button-label = Lưu\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = Tải xuống\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = Tải xuống\npdfjs-bookmark-button =\n    .title = Trang hiện tại (xem URL từ trang hiện tại)\npdfjs-bookmark-button-label = Trang hiện tại\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = Mở trong ứng dụng\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = Mở trong ứng dụng\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Công cụ\npdfjs-tools-button-label = Công cụ\npdfjs-first-page-button =\n    .title = Về trang đầu\npdfjs-first-page-button-label = Về trang đầu\npdfjs-last-page-button =\n    .title = Đến trang cuối\npdfjs-last-page-button-label = Đến trang cuối\npdfjs-page-rotate-cw-button =\n    .title = Xoay theo chiều kim đồng hồ\npdfjs-page-rotate-cw-button-label = Xoay theo chiều kim đồng hồ\npdfjs-page-rotate-ccw-button =\n    .title = Xoay ngược chiều kim đồng hồ\npdfjs-page-rotate-ccw-button-label = Xoay ngược chiều kim đồng hồ\npdfjs-cursor-text-select-tool-button =\n    .title = Kích hoạt công cụ chọn vùng văn bản\npdfjs-cursor-text-select-tool-button-label = Công cụ chọn vùng văn bản\npdfjs-cursor-hand-tool-button =\n    .title = Kích hoạt công cụ con trỏ\npdfjs-cursor-hand-tool-button-label = Công cụ con trỏ\npdfjs-scroll-page-button =\n    .title = Sử dụng cuộn trang hiện tại\npdfjs-scroll-page-button-label = Cuộn trang hiện tại\npdfjs-scroll-vertical-button =\n    .title = Sử dụng cuộn dọc\npdfjs-scroll-vertical-button-label = Cuộn dọc\npdfjs-scroll-horizontal-button =\n    .title = Sử dụng cuộn ngang\npdfjs-scroll-horizontal-button-label = Cuộn ngang\npdfjs-scroll-wrapped-button =\n    .title = Sử dụng cuộn ngắt dòng\npdfjs-scroll-wrapped-button-label = Cuộn ngắt dòng\npdfjs-spread-none-button =\n    .title = Không nối rộng trang\npdfjs-spread-none-button-label = Không có phân cách\npdfjs-spread-odd-button =\n    .title = Nối trang bài bắt đầu với các trang được đánh số lẻ\npdfjs-spread-odd-button-label = Phân cách theo số lẻ\npdfjs-spread-even-button =\n    .title = Nối trang bài bắt đầu với các trang được đánh số chẵn\npdfjs-spread-even-button-label = Phân cách theo số chẵn\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Thuộc tính của tài liệu…\npdfjs-document-properties-button-label = Thuộc tính của tài liệu…\npdfjs-document-properties-file-name = Tên tập tin:\npdfjs-document-properties-file-size = Kích thước:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } byte)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } byte)\npdfjs-document-properties-title = Tiêu đề:\npdfjs-document-properties-author = Tác giả:\npdfjs-document-properties-subject = Chủ đề:\npdfjs-document-properties-keywords = Từ khóa:\npdfjs-document-properties-creation-date = Ngày tạo:\npdfjs-document-properties-modification-date = Ngày sửa đổi:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Người tạo:\npdfjs-document-properties-producer = Phần mềm tạo PDF:\npdfjs-document-properties-version = Phiên bản PDF:\npdfjs-document-properties-page-count = Tổng số trang:\npdfjs-document-properties-page-size = Kích thước trang:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = khổ dọc\npdfjs-document-properties-page-size-orientation-landscape = khổ ngang\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Thư\npdfjs-document-properties-page-size-name-legal = Pháp lý\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = Xem nhanh trên web:\npdfjs-document-properties-linearized-yes = Có\npdfjs-document-properties-linearized-no = Không\npdfjs-document-properties-close-button = Ðóng\n\n## Print\n\npdfjs-print-progress-message = Chuẩn bị trang để in…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Hủy bỏ\npdfjs-printing-not-supported = Cảnh báo: In ấn không được hỗ trợ đầy đủ ở trình duyệt này.\npdfjs-printing-not-ready = Cảnh báo: PDF chưa được tải hết để in.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Bật/Tắt thanh lề\npdfjs-toggle-sidebar-notification-button =\n    .title = Bật tắt thanh lề (tài liệu bao gồm bản phác thảo/tập tin đính kèm/lớp)\npdfjs-toggle-sidebar-button-label = Bật/Tắt thanh lề\npdfjs-document-outline-button =\n    .title = Hiển thị tài liệu phác thảo (nhấp đúp vào để mở rộng/thu gọn tất cả các mục)\npdfjs-document-outline-button-label = Bản phác tài liệu\npdfjs-attachments-button =\n    .title = Hiện nội dung đính kèm\npdfjs-attachments-button-label = Nội dung đính kèm\npdfjs-layers-button =\n    .title = Hiển thị các lớp (nhấp đúp để đặt lại tất cả các lớp về trạng thái mặc định)\npdfjs-layers-button-label = Lớp\npdfjs-thumbs-button =\n    .title = Hiển thị ảnh thu nhỏ\npdfjs-thumbs-button-label = Ảnh thu nhỏ\npdfjs-current-outline-item-button =\n    .title = Tìm mục phác thảo hiện tại\npdfjs-current-outline-item-button-label = Mục phác thảo hiện tại\npdfjs-findbar-button =\n    .title = Tìm trong tài liệu\npdfjs-findbar-button-label = Tìm\npdfjs-additional-layers = Các lớp bổ sung\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Trang { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Ảnh thu nhỏ của trang { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Tìm\n    .placeholder = Tìm trong tài liệu…\npdfjs-find-previous-button =\n    .title = Tìm cụm từ ở phần trước\npdfjs-find-previous-button-label = Trước\npdfjs-find-next-button =\n    .title = Tìm cụm từ ở phần sau\npdfjs-find-next-button-label = Tiếp\npdfjs-find-highlight-checkbox = Đánh dấu tất cả\npdfjs-find-match-case-checkbox-label = Phân biệt hoa, thường\npdfjs-find-match-diacritics-checkbox-label = Khớp dấu phụ\npdfjs-find-entire-word-checkbox-label = Toàn bộ từ\npdfjs-find-reached-top = Đã đến phần đầu tài liệu, quay trở lại từ cuối\npdfjs-find-reached-bottom = Đã đến phần cuối của tài liệu, quay trở lại từ đầu\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count = { $current } trên { $total } kết quả\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit = Tìm thấy hơn { $limit } kết quả\npdfjs-find-not-found = Không tìm thấy cụm từ này\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Vừa chiều rộng\npdfjs-page-scale-fit = Vừa chiều cao\npdfjs-page-scale-auto = Tự động chọn kích thước\npdfjs-page-scale-actual = Kích thước thực\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = Trang { $page }\n\n## Loading indicator messages\n\npdfjs-loading-error = Lỗi khi tải tài liệu PDF.\npdfjs-invalid-file-error = Tập tin PDF hỏng hoặc không hợp lệ.\npdfjs-missing-file-error = Thiếu tập tin PDF.\npdfjs-unexpected-response-error = Máy chủ có phản hồi lạ.\npdfjs-rendering-error = Lỗi khi hiển thị trang.\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }, { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Chú thích]\n\n## Password\n\npdfjs-password-label = Nhập mật khẩu để mở tập tin PDF này.\npdfjs-password-invalid = Mật khẩu không đúng. Vui lòng thử lại.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Hủy bỏ\npdfjs-web-fonts-disabled = Phông chữ Web bị vô hiệu hóa: không thể sử dụng các phông chữ PDF được nhúng.\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = Văn bản\npdfjs-editor-free-text-button-label = Văn bản\npdfjs-editor-ink-button =\n    .title = Vẽ\npdfjs-editor-ink-button-label = Vẽ\npdfjs-editor-stamp-button =\n    .title = Thêm hoặc chỉnh sửa hình ảnh\npdfjs-editor-stamp-button-label = Thêm hoặc chỉnh sửa hình ảnh\npdfjs-editor-highlight-button =\n    .title = Đánh dấu\npdfjs-editor-highlight-button-label = Đánh dấu\npdfjs-highlight-floating-button =\n    .title = Đánh dấu\npdfjs-highlight-floating-button1 =\n    .title = Đánh dấu\n    .aria-label = Đánh dấu\npdfjs-highlight-floating-button-label = Đánh dấu\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = Xóa bản vẽ\npdfjs-editor-remove-freetext-button =\n    .title = Xóa văn bản\npdfjs-editor-remove-stamp-button =\n    .title = Xóa ảnh\npdfjs-editor-remove-highlight-button =\n    .title = Xóa phần đánh dấu\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = Màu\npdfjs-editor-free-text-size-input = Kích cỡ\npdfjs-editor-ink-color-input = Màu\npdfjs-editor-ink-thickness-input = Độ dày\npdfjs-editor-ink-opacity-input = Độ mờ\npdfjs-editor-stamp-add-image-button =\n    .title = Thêm hình ảnh\npdfjs-editor-stamp-add-image-button-label = Thêm hình ảnh\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = Độ dày\npdfjs-editor-free-highlight-thickness-title =\n    .title = Thay đổi độ dày khi đánh dấu các mục không phải là văn bản\npdfjs-free-text =\n    .aria-label = Trình sửa văn bản\npdfjs-free-text-default-content = Bắt đầu nhập…\npdfjs-ink =\n    .aria-label = Trình sửa nét vẽ\npdfjs-ink-canvas =\n    .aria-label = Hình ảnh do người dùng tạo\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = Văn bản thay thế\npdfjs-editor-alt-text-edit-button-label = Chỉnh sửa văn bản thay thế\npdfjs-editor-alt-text-dialog-label = Chọn một lựa chọn\npdfjs-editor-alt-text-dialog-description = Văn bản thay thế sẽ hữu ích khi mọi người không thể thấy hình ảnh hoặc khi hình ảnh không tải.\npdfjs-editor-alt-text-add-description-label = Thêm một mô tả\npdfjs-editor-alt-text-add-description-description = Hãy nhắm tới 1-2 câu mô tả chủ đề, bối cảnh hoặc hành động.\npdfjs-editor-alt-text-mark-decorative-label = Đánh dấu là trang trí\npdfjs-editor-alt-text-mark-decorative-description = Điều này được sử dụng cho các hình ảnh trang trí, như đường viền hoặc watermark.\npdfjs-editor-alt-text-cancel-button = Hủy bỏ\npdfjs-editor-alt-text-save-button = Lưu\npdfjs-editor-alt-text-decorative-tooltip = Đã đánh dấu là trang trí\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = Ví dụ: “Một thanh niên ngồi xuống bàn để thưởng thức một bữa ăn”\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = Trên cùng bên trái — thay đổi kích thước\npdfjs-editor-resizer-label-top-middle = Trên cùng ở giữa — thay đổi kích thước\npdfjs-editor-resizer-label-top-right = Trên cùng bên phải — thay đổi kích thước\npdfjs-editor-resizer-label-middle-right = Ở giữa bên phải — thay đổi kích thước\npdfjs-editor-resizer-label-bottom-right = Dưới cùng bên phải — thay đổi kích thước\npdfjs-editor-resizer-label-bottom-middle = Ở giữa dưới cùng — thay đổi kích thước\npdfjs-editor-resizer-label-bottom-left = Góc dưới bên trái — thay đổi kích thước\npdfjs-editor-resizer-label-middle-left = Ở giữa bên trái — thay đổi kích thước\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = Màu đánh dấu\npdfjs-editor-colorpicker-button =\n    .title = Thay đổi màu\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = Lựa chọn màu sắc\npdfjs-editor-colorpicker-yellow =\n    .title = Vàng\npdfjs-editor-colorpicker-green =\n    .title = Xanh lục\npdfjs-editor-colorpicker-blue =\n    .title = Xanh dương\npdfjs-editor-colorpicker-pink =\n    .title = Hồng\npdfjs-editor-colorpicker-red =\n    .title = Đỏ\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = Hiện tất cả\npdfjs-editor-highlight-show-all-button =\n    .title = Hiện tất cả\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/wo/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Xët wi jiitu\npdfjs-previous-button-label = Bi jiitu\npdfjs-next-button =\n    .title = Xët wi ci topp\npdfjs-next-button-label = Bi ci topp\npdfjs-zoom-out-button =\n    .title = Wàññi\npdfjs-zoom-out-button-label = Wàññi\npdfjs-zoom-in-button =\n    .title = Yaatal\npdfjs-zoom-in-button-label = Yaatal\npdfjs-zoom-select =\n    .title = Yambalaŋ\npdfjs-presentation-mode-button =\n    .title = Wañarñil ci anamu wone\npdfjs-presentation-mode-button-label = Anamu Wone\npdfjs-open-file-button =\n    .title = Ubbi benn dencukaay\npdfjs-open-file-button-label = Ubbi\npdfjs-print-button =\n    .title = Móol\npdfjs-print-button-label = Móol\n\n##  Secondary toolbar and context menu\n\n\n## Document properties dialog\n\npdfjs-document-properties-title = Bopp:\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\n\n##\n\n\n## Print\n\npdfjs-printing-not-supported = Artu: Joowkat bii nanguwul lool mool.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-thumbs-button =\n    .title = Wone nataal yu ndaw yi\npdfjs-thumbs-button-label = Nataal yu ndaw yi\npdfjs-findbar-button =\n    .title = Gis ci biir jukki bi\npdfjs-findbar-button-label = Wut\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Xët { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Wiñet bu xët { $page }\n\n## Find panel button title and messages\n\npdfjs-find-previous-button =\n    .title = Seet beneen kaddu bu ni mel te jiitu\npdfjs-find-previous-button-label = Bi jiitu\npdfjs-find-next-button =\n    .title = Seet beneen kaddu bu ni mel\npdfjs-find-next-button-label = Bi ci topp\npdfjs-find-highlight-checkbox = Melaxal lépp\npdfjs-find-match-case-checkbox-label = Sàmm jëmmalin wi\npdfjs-find-reached-top = Jot nañu ndorteel xët wi, kontine dale ko ci suuf\npdfjs-find-reached-bottom = Jot nañu jeexitalu xët wi, kontine ci ndorte\npdfjs-find-not-found = Gisiñu kaddu gi\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Yaatuwaay bu mët\npdfjs-page-scale-fit = Xët lëmm\npdfjs-page-scale-auto = Yambalaŋ ci saa si\npdfjs-page-scale-actual = Dayo bi am\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = Am na njumte ci yebum dencukaay PDF bi.\npdfjs-invalid-file-error = Dencukaay PDF bi baaxul walla mu sankar.\npdfjs-rendering-error = Am njumte bu am bi xët bi di wonewu.\n\n## Annotations\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [Karmat { $type }]\n\n## Password\n\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Neenal\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/xh/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = Iphepha langaphambili\npdfjs-previous-button-label = Okwangaphambili\npdfjs-next-button =\n    .title = Iphepha elilandelayo\npdfjs-next-button-label = Okulandelayo\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = Iphepha\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = kwali- { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } kwali { $pagesCount })\npdfjs-zoom-out-button =\n    .title = Bhekelisela Kudana\npdfjs-zoom-out-button-label = Bhekelisela Kudana\npdfjs-zoom-in-button =\n    .title = Sondeza Kufuphi\npdfjs-zoom-in-button-label = Sondeza Kufuphi\npdfjs-zoom-select =\n    .title = Yandisa / Nciphisa\npdfjs-presentation-mode-button =\n    .title = Tshintshela kwimo yonikezelo\npdfjs-presentation-mode-button-label = Imo yonikezelo\npdfjs-open-file-button =\n    .title = Vula Ifayile\npdfjs-open-file-button-label = Vula\npdfjs-print-button =\n    .title = Printa\npdfjs-print-button-label = Printa\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = Izixhobo zemiyalelo\npdfjs-tools-button-label = Izixhobo zemiyalelo\npdfjs-first-page-button =\n    .title = Yiya kwiphepha lokuqala\npdfjs-first-page-button-label = Yiya kwiphepha lokuqala\npdfjs-last-page-button =\n    .title = Yiya kwiphepha lokugqibela\npdfjs-last-page-button-label = Yiya kwiphepha lokugqibela\npdfjs-page-rotate-cw-button =\n    .title = Jikelisa ngasekunene\npdfjs-page-rotate-cw-button-label = Jikelisa ngasekunene\npdfjs-page-rotate-ccw-button =\n    .title = Jikelisa ngasekhohlo\npdfjs-page-rotate-ccw-button-label = Jikelisa ngasekhohlo\npdfjs-cursor-text-select-tool-button =\n    .title = Vumela iSixhobo sokuKhetha iTeksti\npdfjs-cursor-text-select-tool-button-label = ISixhobo sokuKhetha iTeksti\npdfjs-cursor-hand-tool-button =\n    .title = Yenza iSixhobo seSandla siSebenze\npdfjs-cursor-hand-tool-button-label = ISixhobo seSandla\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = Iipropati zoxwebhu…\npdfjs-document-properties-button-label = Iipropati zoxwebhu…\npdfjs-document-properties-file-name = Igama lefayile:\npdfjs-document-properties-file-size = Isayizi yefayile:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB (iibhayiti{ $size_b })\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB (iibhayithi{ $size_b })\npdfjs-document-properties-title = Umxholo:\npdfjs-document-properties-author = Umbhali:\npdfjs-document-properties-subject = Umbandela:\npdfjs-document-properties-keywords = Amagama aphambili:\npdfjs-document-properties-creation-date = Umhla wokwenziwa kwayo:\npdfjs-document-properties-modification-date = Umhla wokulungiswa kwayo:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = Umntu oyenzileyo:\npdfjs-document-properties-producer = Umvelisi we-PDF:\npdfjs-document-properties-version = Uhlelo lwe-PDF:\npdfjs-document-properties-page-count = Inani lamaphepha:\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\n\n##\n\npdfjs-document-properties-close-button = Vala\n\n## Print\n\npdfjs-print-progress-message = Ilungisa uxwebhu ukuze iprinte…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Rhoxisa\npdfjs-printing-not-supported = Isilumkiso: Ukuprinta akuxhaswa ngokupheleleyo yile bhrawuza.\npdfjs-printing-not-ready = Isilumkiso: IPDF ayihlohlwanga ngokupheleleyo ukwenzela ukuprinta.\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = Togola ngebha eseCaleni\npdfjs-toggle-sidebar-button-label = Togola ngebha eseCaleni\npdfjs-document-outline-button =\n    .title = Bonisa uLwandlalo loXwebhu (cofa kabini ukuze wandise/diliza zonke izinto)\npdfjs-document-outline-button-label = Isishwankathelo soxwebhu\npdfjs-attachments-button =\n    .title = Bonisa iziqhotyoshelwa\npdfjs-attachments-button-label = Iziqhoboshelo\npdfjs-thumbs-button =\n    .title = Bonisa ukrobiso kumfanekiso\npdfjs-thumbs-button-label = Ukrobiso kumfanekiso\npdfjs-findbar-button =\n    .title = Fumana kuXwebhu\npdfjs-findbar-button-label = Fumana\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = Iphepha { $page }\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = Ukrobiso kumfanekiso wephepha { $page }\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = Fumana\n    .placeholder = Fumana kuXwebhu…\npdfjs-find-previous-button =\n    .title = Fumanisa isenzeko sangaphambili sebinzana lamagama\npdfjs-find-previous-button-label = Okwangaphambili\npdfjs-find-next-button =\n    .title = Fumanisa isenzeko esilandelayo sebinzana lamagama\npdfjs-find-next-button-label = Okulandelayo\npdfjs-find-highlight-checkbox = Qaqambisa konke\npdfjs-find-match-case-checkbox-label = Tshatisa ngobukhulu bukanobumba\npdfjs-find-reached-top = Ufike ngaphezulu ephepheni, kusukwa ngezantsi\npdfjs-find-reached-bottom = Ufike ekupheleni kwephepha, kusukwa ngaphezulu\npdfjs-find-not-found = Ibinzana alifunyenwanga\n\n## Predefined zoom values\n\npdfjs-page-scale-width = Ububanzi bephepha\npdfjs-page-scale-fit = Ukulinganiswa kwephepha\npdfjs-page-scale-auto = Ukwandisa/Ukunciphisa Ngokwayo\npdfjs-page-scale-actual = Ubungakanani bokwenene\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n\n## Loading indicator messages\n\npdfjs-loading-error = Imposiso yenzekile xa kulayishwa i-PDF.\npdfjs-invalid-file-error = Ifayile ye-PDF engeyiyo okanye eyonakalisiweyo.\npdfjs-missing-file-error = Ifayile ye-PDF edukileyo.\npdfjs-unexpected-response-error = Impendulo yeseva engalindelekanga.\npdfjs-rendering-error = Imposiso yenzekile xa bekunikezelwa iphepha.\n\n## Annotations\n\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } Ubhalo-nqaku]\n\n## Password\n\npdfjs-password-label = Faka ipasiwedi ukuze uvule le fayile yePDF.\npdfjs-password-invalid = Ipasiwedi ayisebenzi. Nceda uzame kwakhona.\npdfjs-password-ok-button = KULUNGILE\npdfjs-password-cancel-button = Rhoxisa\npdfjs-web-fonts-disabled = Iifonti zewebhu ziqhwalelisiwe: ayikwazi ukusebenzisa iifonti ze-PDF ezincanyathelisiweyo.\n\n## Editing\n\n\n## Alt-text dialog\n\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/zh-CN/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = 上一页\npdfjs-previous-button-label = 上一页\npdfjs-next-button =\n    .title = 下一页\npdfjs-next-button-label = 下一页\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = 页面\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = / { $pagesCount }\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = ({ $pageNumber } / { $pagesCount })\npdfjs-zoom-out-button =\n    .title = 缩小\npdfjs-zoom-out-button-label = 缩小\npdfjs-zoom-in-button =\n    .title = 放大\npdfjs-zoom-in-button-label = 放大\npdfjs-zoom-select =\n    .title = 缩放\npdfjs-presentation-mode-button =\n    .title = 切换到演示模式\npdfjs-presentation-mode-button-label = 演示模式\npdfjs-open-file-button =\n    .title = 打开文件\npdfjs-open-file-button-label = 打开\npdfjs-print-button =\n    .title = 打印\npdfjs-print-button-label = 打印\npdfjs-save-button =\n    .title = 保存\npdfjs-save-button-label = 保存\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = 下载\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = 下载\npdfjs-bookmark-button =\n    .title = 当前页面（在当前页面查看 URL）\npdfjs-bookmark-button-label = 当前页面\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = 工具\npdfjs-tools-button-label = 工具\npdfjs-first-page-button =\n    .title = 转到第一页\npdfjs-first-page-button-label = 转到第一页\npdfjs-last-page-button =\n    .title = 转到最后一页\npdfjs-last-page-button-label = 转到最后一页\npdfjs-page-rotate-cw-button =\n    .title = 顺时针旋转\npdfjs-page-rotate-cw-button-label = 顺时针旋转\npdfjs-page-rotate-ccw-button =\n    .title = 逆时针旋转\npdfjs-page-rotate-ccw-button-label = 逆时针旋转\npdfjs-cursor-text-select-tool-button =\n    .title = 启用文本选择工具\npdfjs-cursor-text-select-tool-button-label = 文本选择工具\npdfjs-cursor-hand-tool-button =\n    .title = 启用手形工具\npdfjs-cursor-hand-tool-button-label = 手形工具\npdfjs-scroll-page-button =\n    .title = 使用页面滚动\npdfjs-scroll-page-button-label = 页面滚动\npdfjs-scroll-vertical-button =\n    .title = 使用垂直滚动\npdfjs-scroll-vertical-button-label = 垂直滚动\npdfjs-scroll-horizontal-button =\n    .title = 使用水平滚动\npdfjs-scroll-horizontal-button-label = 水平滚动\npdfjs-scroll-wrapped-button =\n    .title = 使用平铺滚动\npdfjs-scroll-wrapped-button-label = 平铺滚动\npdfjs-spread-none-button =\n    .title = 不加入衔接页\npdfjs-spread-none-button-label = 单页视图\npdfjs-spread-odd-button =\n    .title = 加入衔接页使奇数页作为起始页\npdfjs-spread-odd-button-label = 双页视图\npdfjs-spread-even-button =\n    .title = 加入衔接页使偶数页作为起始页\npdfjs-spread-even-button-label = 书籍视图\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = 文档属性…\npdfjs-document-properties-button-label = 文档属性…\npdfjs-document-properties-file-name = 文件名:\npdfjs-document-properties-file-size = 文件大小:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } 字节)\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } 字节)\npdfjs-document-properties-title = 标题:\npdfjs-document-properties-author = 作者:\npdfjs-document-properties-subject = 主题:\npdfjs-document-properties-keywords = 关键词:\npdfjs-document-properties-creation-date = 创建日期:\npdfjs-document-properties-modification-date = 修改日期:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date }, { $time }\npdfjs-document-properties-creator = 创建者:\npdfjs-document-properties-producer = PDF 生成器：\npdfjs-document-properties-version = PDF 版本:\npdfjs-document-properties-page-count = 页数:\npdfjs-document-properties-page-size = 页面大小：\npdfjs-document-properties-page-size-unit-inches = 英寸\npdfjs-document-properties-page-size-unit-millimeters = 毫米\npdfjs-document-properties-page-size-orientation-portrait = 纵向\npdfjs-document-properties-page-size-orientation-landscape = 横向\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit }（{ $orientation }）\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit }（{ $name }，{ $orientation }）\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = 快速 Web 视图：\npdfjs-document-properties-linearized-yes = 是\npdfjs-document-properties-linearized-no = 否\npdfjs-document-properties-close-button = 关闭\n\n## Print\n\npdfjs-print-progress-message = 正在准备打印文档…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = 取消\npdfjs-printing-not-supported = 警告：此浏览器尚未完整支持打印功能。\npdfjs-printing-not-ready = 警告：此 PDF 未完成加载，无法打印。\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = 切换侧栏\npdfjs-toggle-sidebar-notification-button =\n    .title = 切换侧栏（文档所含的大纲/附件/图层）\npdfjs-toggle-sidebar-button-label = 切换侧栏\npdfjs-document-outline-button =\n    .title = 显示文档大纲（双击展开/折叠所有项）\npdfjs-document-outline-button-label = 文档大纲\npdfjs-attachments-button =\n    .title = 显示附件\npdfjs-attachments-button-label = 附件\npdfjs-layers-button =\n    .title = 显示图层（双击即可将所有图层重置为默认状态）\npdfjs-layers-button-label = 图层\npdfjs-thumbs-button =\n    .title = 显示缩略图\npdfjs-thumbs-button-label = 缩略图\npdfjs-current-outline-item-button =\n    .title = 查找当前大纲项目\npdfjs-current-outline-item-button-label = 当前大纲项目\npdfjs-findbar-button =\n    .title = 在文档中查找\npdfjs-findbar-button-label = 查找\npdfjs-additional-layers = 其他图层\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = 第 { $page } 页\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = 页面 { $page } 的缩略图\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = 查找\n    .placeholder = 在文档中查找…\npdfjs-find-previous-button =\n    .title = 查找词语上一次出现的位置\npdfjs-find-previous-button-label = 上一页\npdfjs-find-next-button =\n    .title = 查找词语后一次出现的位置\npdfjs-find-next-button-label = 下一页\npdfjs-find-highlight-checkbox = 全部高亮显示\npdfjs-find-match-case-checkbox-label = 区分大小写\npdfjs-find-match-diacritics-checkbox-label = 匹配变音符号\npdfjs-find-entire-word-checkbox-label = 全词匹配\npdfjs-find-reached-top = 到达文档开头，从末尾继续\npdfjs-find-reached-bottom = 到达文档末尾，从开头继续\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count = 第 { $current } 项，共找到 { $total } 个匹配项\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit = 匹配超过 { $limit } 项\npdfjs-find-not-found = 找不到指定词语\n\n## Predefined zoom values\n\npdfjs-page-scale-width = 适合页宽\npdfjs-page-scale-fit = 适合页面\npdfjs-page-scale-auto = 自动缩放\npdfjs-page-scale-actual = 实际大小\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = 第 { $page } 页\n\n## Loading indicator messages\n\npdfjs-loading-error = 加载 PDF 时发生错误。\npdfjs-invalid-file-error = 无效或损坏的 PDF 文件。\npdfjs-missing-file-error = 缺少 PDF 文件。\npdfjs-unexpected-response-error = 意外的服务器响应。\npdfjs-rendering-error = 渲染页面时发生错误。\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date }，{ $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } 注释]\n\n## Password\n\npdfjs-password-label = 输入密码以打开此 PDF 文件。\npdfjs-password-invalid = 密码无效。请重试。\npdfjs-password-ok-button = 确定\npdfjs-password-cancel-button = 取消\npdfjs-web-fonts-disabled = Web 字体已被禁用：无法使用嵌入的 PDF 字体。\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = 文本\npdfjs-editor-free-text-button-label = 文本\npdfjs-editor-ink-button =\n    .title = 绘图\npdfjs-editor-ink-button-label = 绘图\npdfjs-editor-stamp-button =\n    .title = 添加或编辑图像\npdfjs-editor-stamp-button-label = 添加或编辑图像\npdfjs-editor-highlight-button =\n    .title = 高亮\npdfjs-editor-highlight-button-label = 高亮\npdfjs-highlight-floating-button =\n    .title = 高亮\npdfjs-highlight-floating-button1 =\n    .title = 高亮\n    .aria-label = 高亮\npdfjs-highlight-floating-button-label = 高亮\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = 移除绘图\npdfjs-editor-remove-freetext-button =\n    .title = 移除文本\npdfjs-editor-remove-stamp-button =\n    .title = 移除图像\npdfjs-editor-remove-highlight-button =\n    .title = 移除高亮\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = 颜色\npdfjs-editor-free-text-size-input = 字号\npdfjs-editor-ink-color-input = 颜色\npdfjs-editor-ink-thickness-input = 粗细\npdfjs-editor-ink-opacity-input = 不透明度\npdfjs-editor-stamp-add-image-button =\n    .title = 添加图像\npdfjs-editor-stamp-add-image-button-label = 添加图像\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = 粗细\npdfjs-editor-free-highlight-thickness-title =\n    .title = 更改高亮粗细（用于文本以外项目）\npdfjs-free-text =\n    .aria-label = 文本编辑器\npdfjs-free-text-default-content = 开始输入…\npdfjs-ink =\n    .aria-label = 绘图编辑器\npdfjs-ink-canvas =\n    .aria-label = 用户创建图像\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = 替换文字\npdfjs-editor-alt-text-edit-button-label = 编辑替换文字\npdfjs-editor-alt-text-dialog-label = 选择一项\npdfjs-editor-alt-text-dialog-description = 替换文字可在用户无法看到或加载图像时，描述其内容。\npdfjs-editor-alt-text-add-description-label = 添加描述\npdfjs-editor-alt-text-add-description-description = 描述主题、背景或动作，长度尽量控制在两句话内。\npdfjs-editor-alt-text-mark-decorative-label = 标记为装饰\npdfjs-editor-alt-text-mark-decorative-description = 用于装饰的图像，例如边框和水印。\npdfjs-editor-alt-text-cancel-button = 取消\npdfjs-editor-alt-text-save-button = 保存\npdfjs-editor-alt-text-decorative-tooltip = 已标记为装饰\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = 例如：一个少年坐到桌前，准备吃饭\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = 调整尺寸 - 左上角\npdfjs-editor-resizer-label-top-middle = 调整尺寸 - 顶部中间\npdfjs-editor-resizer-label-top-right = 调整尺寸 - 右上角\npdfjs-editor-resizer-label-middle-right = 调整尺寸 - 右侧中间\npdfjs-editor-resizer-label-bottom-right = 调整尺寸 - 右下角\npdfjs-editor-resizer-label-bottom-middle = 调整大小 - 底部中间\npdfjs-editor-resizer-label-bottom-left = 调整尺寸 - 左下角\npdfjs-editor-resizer-label-middle-left = 调整尺寸 - 左侧中间\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = 高亮色\npdfjs-editor-colorpicker-button =\n    .title = 更改颜色\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = 颜色选择\npdfjs-editor-colorpicker-yellow =\n    .title = 黄色\npdfjs-editor-colorpicker-green =\n    .title = 绿色\npdfjs-editor-colorpicker-blue =\n    .title = 蓝色\npdfjs-editor-colorpicker-pink =\n    .title = 粉色\npdfjs-editor-colorpicker-red =\n    .title = 红色\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = 显示全部\npdfjs-editor-highlight-show-all-button =\n    .title = 显示全部\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/locale/zh-TW/viewer.ftl",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n## Main toolbar buttons (tooltips and alt text for images)\n\npdfjs-previous-button =\n    .title = 上一頁\npdfjs-previous-button-label = 上一頁\npdfjs-next-button =\n    .title = 下一頁\npdfjs-next-button-label = 下一頁\n# .title: Tooltip for the pageNumber input.\npdfjs-page-input =\n    .title = 第\n# Variables:\n#   $pagesCount (Number) - the total number of pages in the document\n# This string follows an input field with the number of the page currently displayed.\npdfjs-of-pages = 頁，共 { $pagesCount } 頁\n# Variables:\n#   $pageNumber (Number) - the currently visible page\n#   $pagesCount (Number) - the total number of pages in the document\npdfjs-page-of-pages = （第 { $pageNumber } 頁，共 { $pagesCount } 頁）\npdfjs-zoom-out-button =\n    .title = 縮小\npdfjs-zoom-out-button-label = 縮小\npdfjs-zoom-in-button =\n    .title = 放大\npdfjs-zoom-in-button-label = 放大\npdfjs-zoom-select =\n    .title = 縮放\npdfjs-presentation-mode-button =\n    .title = 切換至簡報模式\npdfjs-presentation-mode-button-label = 簡報模式\npdfjs-open-file-button =\n    .title = 開啟檔案\npdfjs-open-file-button-label = 開啟\npdfjs-print-button =\n    .title = 列印\npdfjs-print-button-label = 列印\npdfjs-save-button =\n    .title = 儲存\npdfjs-save-button-label = 儲存\n# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).\npdfjs-download-button =\n    .title = 下載\n# Used in Firefox for Android as a label for the download button (“download” is a verb).\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-download-button-label = 下載\npdfjs-bookmark-button =\n    .title = 目前頁面（含目前檢視頁面的網址）\npdfjs-bookmark-button-label = 目前頁面\n# Used in Firefox for Android.\npdfjs-open-in-app-button =\n    .title = 在應用程式中開啟\n# Used in Firefox for Android.\n# Length of the translation matters since we are in a mobile context, with limited screen estate.\npdfjs-open-in-app-button-label = 用程式開啟\n\n##  Secondary toolbar and context menu\n\npdfjs-tools-button =\n    .title = 工具\npdfjs-tools-button-label = 工具\npdfjs-first-page-button =\n    .title = 跳到第一頁\npdfjs-first-page-button-label = 跳到第一頁\npdfjs-last-page-button =\n    .title = 跳到最後一頁\npdfjs-last-page-button-label = 跳到最後一頁\npdfjs-page-rotate-cw-button =\n    .title = 順時針旋轉\npdfjs-page-rotate-cw-button-label = 順時針旋轉\npdfjs-page-rotate-ccw-button =\n    .title = 逆時針旋轉\npdfjs-page-rotate-ccw-button-label = 逆時針旋轉\npdfjs-cursor-text-select-tool-button =\n    .title = 開啟文字選擇工具\npdfjs-cursor-text-select-tool-button-label = 文字選擇工具\npdfjs-cursor-hand-tool-button =\n    .title = 開啟頁面移動工具\npdfjs-cursor-hand-tool-button-label = 頁面移動工具\npdfjs-scroll-page-button =\n    .title = 使用頁面捲動功能\npdfjs-scroll-page-button-label = 頁面捲動功能\npdfjs-scroll-vertical-button =\n    .title = 使用垂直捲動版面\npdfjs-scroll-vertical-button-label = 垂直捲動\npdfjs-scroll-horizontal-button =\n    .title = 使用水平捲動版面\npdfjs-scroll-horizontal-button-label = 水平捲動\npdfjs-scroll-wrapped-button =\n    .title = 使用多頁捲動版面\npdfjs-scroll-wrapped-button-label = 多頁捲動\npdfjs-spread-none-button =\n    .title = 不要進行跨頁顯示\npdfjs-spread-none-button-label = 不跨頁\npdfjs-spread-odd-button =\n    .title = 從奇數頁開始跨頁\npdfjs-spread-odd-button-label = 奇數跨頁\npdfjs-spread-even-button =\n    .title = 從偶數頁開始跨頁\npdfjs-spread-even-button-label = 偶數跨頁\n\n## Document properties dialog\n\npdfjs-document-properties-button =\n    .title = 文件內容…\npdfjs-document-properties-button-label = 文件內容…\npdfjs-document-properties-file-name = 檔案名稱:\npdfjs-document-properties-file-size = 檔案大小:\n# Variables:\n#   $size_kb (Number) - the PDF file size in kilobytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-kb = { $size_kb } KB（{ $size_b } 位元組）\n# Variables:\n#   $size_mb (Number) - the PDF file size in megabytes\n#   $size_b (Number) - the PDF file size in bytes\npdfjs-document-properties-mb = { $size_mb } MB（{ $size_b } 位元組）\npdfjs-document-properties-title = 標題:\npdfjs-document-properties-author = 作者:\npdfjs-document-properties-subject = 主旨:\npdfjs-document-properties-keywords = 關鍵字:\npdfjs-document-properties-creation-date = 建立日期:\npdfjs-document-properties-modification-date = 修改日期:\n# Variables:\n#   $date (Date) - the creation/modification date of the PDF file\n#   $time (Time) - the creation/modification time of the PDF file\npdfjs-document-properties-date-string = { $date } { $time }\npdfjs-document-properties-creator = 建立者:\npdfjs-document-properties-producer = PDF 產生器:\npdfjs-document-properties-version = PDF 版本:\npdfjs-document-properties-page-count = 頁數:\npdfjs-document-properties-page-size = 頁面大小:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = 垂直\npdfjs-document-properties-page-size-orientation-landscape = 水平\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\n\n## Variables:\n##   $width (Number) - the width of the (current) page\n##   $height (Number) - the height of the (current) page\n##   $unit (String) - the unit of measurement of the (current) page\n##   $name (String) - the name of the (current) page\n##   $orientation (String) - the orientation of the (current) page\n\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit }（{ $orientation }）\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit }（{ $name }，{ $orientation }）\n\n##\n\n# The linearization status of the document; usually called \"Fast Web View\" in\n# English locales of Adobe software.\npdfjs-document-properties-linearized = 快速 Web 檢視:\npdfjs-document-properties-linearized-yes = 是\npdfjs-document-properties-linearized-no = 否\npdfjs-document-properties-close-button = 關閉\n\n## Print\n\npdfjs-print-progress-message = 正在準備列印文件…\n# Variables:\n#   $progress (Number) - percent value\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = 取消\npdfjs-printing-not-supported = 警告: 此瀏覽器未完整支援列印功能。\npdfjs-printing-not-ready = 警告: 此 PDF 未完成下載以供列印。\n\n## Tooltips and alt text for side panel toolbar buttons\n\npdfjs-toggle-sidebar-button =\n    .title = 切換側邊欄\npdfjs-toggle-sidebar-notification-button =\n    .title = 切換側邊欄（包含大綱、附件、圖層的文件）\npdfjs-toggle-sidebar-button-label = 切換側邊欄\npdfjs-document-outline-button =\n    .title = 顯示文件大綱（雙擊展開/摺疊所有項目）\npdfjs-document-outline-button-label = 文件大綱\npdfjs-attachments-button =\n    .title = 顯示附件\npdfjs-attachments-button-label = 附件\npdfjs-layers-button =\n    .title = 顯示圖層（滑鼠雙擊即可將所有圖層重設為預設狀態）\npdfjs-layers-button-label = 圖層\npdfjs-thumbs-button =\n    .title = 顯示縮圖\npdfjs-thumbs-button-label = 縮圖\npdfjs-current-outline-item-button =\n    .title = 尋找目前的大綱項目\npdfjs-current-outline-item-button-label = 目前的大綱項目\npdfjs-findbar-button =\n    .title = 在文件中尋找\npdfjs-findbar-button-label = 尋找\npdfjs-additional-layers = 其他圖層\n\n## Thumbnails panel item (tooltip and alt text for images)\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-title =\n    .title = 第 { $page } 頁\n# Variables:\n#   $page (Number) - the page number\npdfjs-thumb-page-canvas =\n    .aria-label = 第 { $page } 頁的縮圖\n\n## Find panel button title and messages\n\npdfjs-find-input =\n    .title = 尋找\n    .placeholder = 在文件中搜尋…\npdfjs-find-previous-button =\n    .title = 尋找文字前次出現的位置\npdfjs-find-previous-button-label = 上一個\npdfjs-find-next-button =\n    .title = 尋找文字下次出現的位置\npdfjs-find-next-button-label = 下一個\npdfjs-find-highlight-checkbox = 強調全部\npdfjs-find-match-case-checkbox-label = 區分大小寫\npdfjs-find-match-diacritics-checkbox-label = 符合變音符號\npdfjs-find-entire-word-checkbox-label = 符合整個字\npdfjs-find-reached-top = 已搜尋至文件頂端，自底端繼續搜尋\npdfjs-find-reached-bottom = 已搜尋至文件底端，自頂端繼續搜尋\n# Variables:\n#   $current (Number) - the index of the currently active find result\n#   $total (Number) - the total number of matches in the document\npdfjs-find-match-count = 第 { $current } 筆符合，共符合 { $total } 筆\n# Variables:\n#   $limit (Number) - the maximum number of matches\npdfjs-find-match-count-limit = 符合超過 { $limit } 項\npdfjs-find-not-found = 找不到指定文字\n\n## Predefined zoom values\n\npdfjs-page-scale-width = 頁面寬度\npdfjs-page-scale-fit = 縮放至頁面大小\npdfjs-page-scale-auto = 自動縮放\npdfjs-page-scale-actual = 實際大小\n# Variables:\n#   $scale (Number) - percent value for page scale\npdfjs-page-scale-percent = { $scale }%\n\n## PDF page\n\n# Variables:\n#   $page (Number) - the page number\npdfjs-page-landmark =\n    .aria-label = 第 { $page } 頁\n\n## Loading indicator messages\n\npdfjs-loading-error = 載入 PDF 時發生錯誤。\npdfjs-invalid-file-error = 無效或毀損的 PDF 檔案。\npdfjs-missing-file-error = 找不到 PDF 檔案。\npdfjs-unexpected-response-error = 伺服器回應未預期的內容。\npdfjs-rendering-error = 描繪頁面時發生錯誤。\n\n## Annotations\n\n# Variables:\n#   $date (Date) - the modification date of the annotation\n#   $time (Time) - the modification time of the annotation\npdfjs-annotation-date-string = { $date } { $time }\n# .alt: This is used as a tooltip.\n# Variables:\n#   $type (String) - an annotation type from a list defined in the PDF spec\n# (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\npdfjs-text-annotation-type =\n    .alt = [{ $type } 註解]\n\n## Password\n\npdfjs-password-label = 請輸入用來開啟此 PDF 檔案的密碼。\npdfjs-password-invalid = 密碼不正確，請再試一次。\npdfjs-password-ok-button = 確定\npdfjs-password-cancel-button = 取消\npdfjs-web-fonts-disabled = 已停用網路字型 (Web fonts): 無法使用 PDF 內嵌字型。\n\n## Editing\n\npdfjs-editor-free-text-button =\n    .title = 文字\npdfjs-editor-free-text-button-label = 文字\npdfjs-editor-ink-button =\n    .title = 繪圖\npdfjs-editor-ink-button-label = 繪圖\npdfjs-editor-stamp-button =\n    .title = 新增或編輯圖片\npdfjs-editor-stamp-button-label = 新增或編輯圖片\npdfjs-editor-highlight-button =\n    .title = 強調\npdfjs-editor-highlight-button-label = 強調\npdfjs-highlight-floating-button =\n    .title = 強調\npdfjs-highlight-floating-button1 =\n    .title = 強調\n    .aria-label = 強調\npdfjs-highlight-floating-button-label = 強調\n\n## Remove button for the various kind of editor.\n\npdfjs-editor-remove-ink-button =\n    .title = 移除繪圖\npdfjs-editor-remove-freetext-button =\n    .title = 移除文字\npdfjs-editor-remove-stamp-button =\n    .title = 移除圖片\npdfjs-editor-remove-highlight-button =\n    .title = 移除強調範圍\n\n##\n\n# Editor Parameters\npdfjs-editor-free-text-color-input = 色彩\npdfjs-editor-free-text-size-input = 大小\npdfjs-editor-ink-color-input = 色彩\npdfjs-editor-ink-thickness-input = 線條粗細\npdfjs-editor-ink-opacity-input = 透​明度\npdfjs-editor-stamp-add-image-button =\n    .title = 新增圖片\npdfjs-editor-stamp-add-image-button-label = 新增圖片\n# This refers to the thickness of the line used for free highlighting (not bound to text)\npdfjs-editor-free-highlight-thickness-input = 線條粗細\npdfjs-editor-free-highlight-thickness-title =\n    .title = 更改強調文字以外的項目時的線條粗細\npdfjs-free-text =\n    .aria-label = 文本編輯器\npdfjs-free-text-default-content = 開始打字…\npdfjs-ink =\n    .aria-label = 圖形編輯器\npdfjs-ink-canvas =\n    .aria-label = 使用者建立的圖片\n\n## Alt-text dialog\n\n# Alternative text (alt text) helps when people can't see the image.\npdfjs-editor-alt-text-button-label = 替代文字\npdfjs-editor-alt-text-edit-button-label = 編輯替代文字\npdfjs-editor-alt-text-dialog-label = 挑選一種\npdfjs-editor-alt-text-dialog-description = 替代文字可協助盲人，或於圖片無法載入時提供說明。\npdfjs-editor-alt-text-add-description-label = 新增描述\npdfjs-editor-alt-text-add-description-description = 用 1-2 句文字描述主題、背景或動作。\npdfjs-editor-alt-text-mark-decorative-label = 標示為裝飾性內容\npdfjs-editor-alt-text-mark-decorative-description = 這是裝飾性圖片，例如邊框或浮水印。\npdfjs-editor-alt-text-cancel-button = 取消\npdfjs-editor-alt-text-save-button = 儲存\npdfjs-editor-alt-text-decorative-tooltip = 已標示為裝飾性內容\n# .placeholder: This is a placeholder for the alt text input area\npdfjs-editor-alt-text-textarea =\n    .placeholder = 例如：「有一位年輕男人坐在桌子前面吃飯」\n\n## Editor resizers\n## This is used in an aria label to help to understand the role of the resizer.\n\npdfjs-editor-resizer-label-top-left = 左上角 — 調整大小\npdfjs-editor-resizer-label-top-middle = 頂部中間 — 調整大小\npdfjs-editor-resizer-label-top-right = 右上角 — 調整大小\npdfjs-editor-resizer-label-middle-right = 中間右方 — 調整大小\npdfjs-editor-resizer-label-bottom-right = 右下角 — 調整大小\npdfjs-editor-resizer-label-bottom-middle = 底部中間 — 調整大小\npdfjs-editor-resizer-label-bottom-left = 左下角 — 調整大小\npdfjs-editor-resizer-label-middle-left = 中間左方 — 調整大小\n\n## Color picker\n\n# This means \"Color used to highlight text\"\npdfjs-editor-highlight-colorpicker-label = 強調色彩\npdfjs-editor-colorpicker-button =\n    .title = 更改色彩\npdfjs-editor-colorpicker-dropdown =\n    .aria-label = 色彩選項\npdfjs-editor-colorpicker-yellow =\n    .title = 黃色\npdfjs-editor-colorpicker-green =\n    .title = 綠色\npdfjs-editor-colorpicker-blue =\n    .title = 藍色\npdfjs-editor-colorpicker-pink =\n    .title = 粉紅色\npdfjs-editor-colorpicker-red =\n    .title = 紅色\n\n## Show all highlights\n## This is a toggle button to show/hide all the highlights.\n\npdfjs-editor-highlight-show-all-button-label = 顯示全部\npdfjs-editor-highlight-show-all-button =\n    .title = 顯示全部\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/pdfjs-annotation-extension/pdfjs-annotation-extension.js",
    "content": "/*! For license information please see pdfjs-annotation-extension.js.LICENSE.txt */\n!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.PdfjsAnnotationExtension=t():e.PdfjsAnnotationExtension=t()}(self,(()=>(()=>{var e,t,r={289:(e,t,r)=>{\"use strict\";r.d(t,{A:()=>s});var n=r(1601),o=r.n(n),i=r(6314),a=r.n(i)()(o());a.push([e.id,\".EditorFreeText-Modal{margin:0 auto}.EditorFreeText-Modal-Toolbar{border-top:0;display:flex;justify-content:space-between;margin:0 auto}.EditorFreeText-Modal-Toolbar .colorPalette{display:flex;margin:8px}.EditorFreeText-Modal-Toolbar .colorPalette .cell{cursor:pointer;width:22px;height:22px;margin-right:5px;border-radius:100px;display:flex;align-items:center;justify-content:center;border:1px solid #fff}.EditorFreeText-Modal-Toolbar .colorPalette .cell span{width:12px;height:12px;display:inline-block;border-radius:100px}.EditorFreeText-Modal-Toolbar .colorPalette .active{border:1px solid #bbb}\",\"\"]);const s=a},445:function(e){e.exports=function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,r=/\\d/,n=/\\d\\d/,o=/\\d\\d?/,i=/\\d*[^-_:/,()\\s\\d]+/,a={},s=function(e){return(e=+e)+(e>68?1900:2e3)},l=function(e){return function(t){this[e]=+t}},c=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),r=60*t[1]+(+t[2]||0);return 0===r?0:\"+\"===t[0]?-r:r}(e)}],u=function(e){var t=a[e];return t&&(t.indexOf?t:t.s.concat(t.f))},d=function(e,t){var r,n=a.meridiem;if(n){for(var o=1;o<=24;o+=1)if(e.indexOf(n(o,0,t))>-1){r=o>12;break}}else r=e===(t?\"pm\":\"PM\");return r},f={A:[i,function(e){this.afternoon=d(e,!1)}],a:[i,function(e){this.afternoon=d(e,!0)}],Q:[r,function(e){this.month=3*(e-1)+1}],S:[r,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[o,l(\"seconds\")],ss:[o,l(\"seconds\")],m:[o,l(\"minutes\")],mm:[o,l(\"minutes\")],H:[o,l(\"hours\")],h:[o,l(\"hours\")],HH:[o,l(\"hours\")],hh:[o,l(\"hours\")],D:[o,l(\"day\")],DD:[n,l(\"day\")],Do:[i,function(e){var t=a.ordinal,r=e.match(/\\d+/);if(this.day=r[0],t)for(var n=1;n<=31;n+=1)t(n).replace(/\\[|\\]/g,\"\")===e&&(this.day=n)}],w:[o,l(\"week\")],ww:[n,l(\"week\")],M:[o,l(\"month\")],MM:[n,l(\"month\")],MMM:[i,function(e){var t=u(\"months\"),r=(u(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(r<1)throw new Error;this.month=r%12||r}],MMMM:[i,function(e){var t=u(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,l(\"year\")],YY:[n,function(e){this.year=s(e)}],YYYY:[/\\d{4}/,l(\"year\")],Z:c,ZZ:c};function h(r){var n,o;n=r,o=a&&a.formats;for(var i=(r=n.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,r,n){var i=n&&n.toUpperCase();return r||o[n]||e[n]||o[i].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,r){return t||r.slice(1)}))}))).match(t),s=i.length,l=0;l<s;l+=1){var c=i[l],u=f[c],d=u&&u[0],h=u&&u[1];i[l]=h?{regex:d,parser:h}:c.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},r=0,n=0;r<s;r+=1){var o=i[r];if(\"string\"==typeof o)n+=o.length;else{var a=o.regex,l=o.parser,c=e.slice(n),u=a.exec(c)[0];l.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var r=e.hours;t?r<12&&(e.hours+=12):12===r&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,r){r.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(s=e.parseTwoDigitYear);var n=t.prototype,o=n.parse;n.parse=function(e){var t=e.date,n=e.utc,i=e.args;this.$u=n;var s=i[1];if(\"string\"==typeof s){var l=!0===i[2],c=!0===i[3],u=l||c,d=i[2];c&&(d=i[2]),a=this.$locale(),!l&&d&&(a=r.Ls[d]),this.$d=function(e,t,r,n){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var o=h(t)(e),i=o.year,a=o.month,s=o.day,l=o.hours,c=o.minutes,u=o.seconds,d=o.milliseconds,f=o.zone,p=o.week,m=new Date,g=s||(i||a?1:m.getDate()),v=i||m.getFullYear(),b=0;i&&!a||(b=a>0?a-1:m.getMonth());var y,w=l||0,x=c||0,S=u||0,C=d||0;return f?new Date(Date.UTC(v,b,g,w,x,S,C+60*f.offset*1e3)):r?new Date(Date.UTC(v,b,g,w,x,S,C)):(y=new Date(v,b,g,w,x,S,C),p&&(y=n(y).week(p).toDate()),y)}catch(e){return new Date(\"\")}}(t,s,n,r),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(s)&&(this.$d=new Date(\"\")),a={}}else if(s instanceof Array)for(var f=s.length,p=1;p<=f;p+=1){i[1]=s[p-1];var m=r.apply(this,i);if(m.isValid()){this.$d=m.$d,this.$L=m.$L,this.init();break}p===f&&(this.$d=new Date(\"\"))}else o.call(this,e)}}}()},517:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Solarize=void 0,t.Solarize=function(e){const t=e.data,r=e.width,n=4*r;let o=e.height;do{const e=(o-1)*n;let i=r;do{const r=e+4*(i-1);let n=t[r],o=t[r+1],a=t[r+2];n>127&&(n=255-n),o>127&&(o=255-o),a>127&&(a=255-a),t[r]=n,t[r+1]=o,t[r+2]=a}while(--i)}while(--o)}},540:e=>{\"use strict\";e.exports=function(e){var t=document.createElement(\"style\");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},661:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Threshold=void 0;const n=r(4892),o=r(6536),i=r(5483);t.Threshold=function(e){const t=255*this.threshold(),r=e.data,n=r.length;for(let e=0;e<n;e+=1)r[e]=r[e]<t?0:255},n.Factory.addGetterSetter(o.Node,\"threshold\",.5,(0,i.getNumberValidator)(),n.Factory.afterSetFilter)},680:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Konva=void 0;const n=r(8871),o=r(4060),i=r(6536),a=r(4473),s=r(7324),l=r(6267),c=r(7457),u=r(7949),d=r(1268),f=r(4723),h=r(9696),p=r(8665),m=r(9869),g=r(8604);t.Konva=o.Util._assign(n.Konva,{Util:o.Util,Transform:o.Transform,Node:i.Node,Container:a.Container,Stage:s.Stage,stages:s.stages,Layer:l.Layer,FastLayer:c.FastLayer,Group:u.Group,DD:d.DD,Shape:f.Shape,shapes:f.shapes,Animation:h.Animation,Tween:p.Tween,Easings:p.Easings,Context:m.Context,Canvas:g.Canvas}),t.default=t.Konva},961:(e,t,r)=>{\"use strict\";!function e(){if(\"undefined\"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&\"function\"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=r(2551)},983:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Emboss=void 0;const n=r(4892),o=r(6536),i=r(4060),a=r(5483);t.Emboss=function(e){const t=10*this.embossStrength(),r=255*this.embossWhiteLevel(),n=this.embossDirection(),o=this.embossBlend(),a=e.data,s=e.width,l=e.height,c=4*s;let u=0,d=0,f=l;switch(n){case\"top-left\":u=-1,d=-1;break;case\"top\":u=-1,d=0;break;case\"top-right\":u=-1,d=1;break;case\"right\":u=0,d=1;break;case\"bottom-right\":u=1,d=1;break;case\"bottom\":u=1,d=0;break;case\"bottom-left\":u=1,d=-1;break;case\"left\":u=0,d=-1;break;default:i.Util.error(\"Unknown emboss direction: \"+n)}do{const e=(f-1)*c;let n=u;f+n<1&&(n=0),f+n>l&&(n=0);const i=(f-1+n)*s*4;let h=s;do{const n=e+4*(h-1);let l=d;h+l<1&&(l=0),h+l>s&&(l=0);const c=i+4*(h-1+l),u=a[n]-a[c],f=a[n+1]-a[c+1],p=a[n+2]-a[c+2];let m=u;const g=m>0?m:-m;if((f>0?f:-f)>g&&(m=f),(p>0?p:-p)>g&&(m=p),m*=t,o){const e=a[n]+m,t=a[n+1]+m,r=a[n+2]+m;a[n]=e>255?255:e<0?0:e,a[n+1]=t>255?255:t<0?0:t,a[n+2]=r>255?255:r<0?0:r}else{let e=r-m;e<0?e=0:e>255&&(e=255),a[n]=a[n+1]=a[n+2]=e}}while(--h)}while(--f)},n.Factory.addGetterSetter(o.Node,\"embossStrength\",.5,(0,a.getNumberValidator)(),n.Factory.afterSetFilter),n.Factory.addGetterSetter(o.Node,\"embossWhiteLevel\",.5,(0,a.getNumberValidator)(),n.Factory.afterSetFilter),n.Factory.addGetterSetter(o.Node,\"embossDirection\",\"top-left\",void 0,n.Factory.afterSetFilter),n.Factory.addGetterSetter(o.Node,\"embossBlend\",!1,void 0,n.Factory.afterSetFilter)},1020:(e,t,r)=>{\"use strict\";var n=r(6540),o=Symbol.for(\"react.element\"),i=Symbol.for(\"react.fragment\"),a=Object.prototype.hasOwnProperty,s=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,r){var n,i={},c=null,u=null;for(n in void 0!==r&&(c=\"\"+r),void 0!==t.key&&(c=\"\"+t.key),void 0!==t.ref&&(u=t.ref),t)a.call(t,n)&&!l.hasOwnProperty(n)&&(i[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps)void 0===i[n]&&(i[n]=t[n]);return{$$typeof:o,type:e,key:c,ref:u,props:i,_owner:s.current}}t.Fragment=i,t.jsx=c,t.jsxs=c},1113:e=>{\"use strict\";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},1268:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.DD=void 0;const n=r(8871),o=r(4060);t.DD={get isDragging(){let e=!1;return t.DD._dragElements.forEach((t=>{\"dragging\"===t.dragStatus&&(e=!0)})),e},justDragged:!1,get node(){let e;return t.DD._dragElements.forEach((t=>{e=t.node})),e},_dragElements:new Map,_drag(e){const r=[];t.DD._dragElements.forEach(((t,n)=>{const{node:i}=t,a=i.getStage();a.setPointersPositions(e),void 0===t.pointerId&&(t.pointerId=o.Util._getFirstPointerId(e));const s=a._changedPointerPositions.find((e=>e.id===t.pointerId));if(s){if(\"dragging\"!==t.dragStatus){const r=i.dragDistance();if(Math.max(Math.abs(s.x-t.startPointerPos.x),Math.abs(s.y-t.startPointerPos.y))<r)return;if(i.startDrag({evt:e}),!i.isDragging())return}i._setDragPosition(e,t),r.push(i)}})),r.forEach((t=>{t.fire(\"dragmove\",{type:\"dragmove\",target:t,evt:e},!0)}))},_endDragBefore(e){const r=[];t.DD._dragElements.forEach((o=>{const{node:i}=o,a=i.getStage();if(e&&a.setPointersPositions(e),!a._changedPointerPositions.find((e=>e.id===o.pointerId)))return;\"dragging\"!==o.dragStatus&&\"stopped\"!==o.dragStatus||(t.DD.justDragged=!0,n.Konva._mouseListenClick=!1,n.Konva._touchListenClick=!1,n.Konva._pointerListenClick=!1,o.dragStatus=\"stopped\");const s=o.node.getLayer()||o.node instanceof n.Konva.Stage&&o.node;s&&-1===r.indexOf(s)&&r.push(s)})),r.forEach((e=>{e.draw()}))},_endDragAfter(e){t.DD._dragElements.forEach(((r,n)=>{\"stopped\"===r.dragStatus&&r.node.fire(\"dragend\",{type:\"dragend\",target:r.node,evt:e},!0),\"dragging\"!==r.dragStatus&&t.DD._dragElements.delete(n)}))}},n.Konva.isBrowser&&(window.addEventListener(\"mouseup\",t.DD._endDragBefore,!0),window.addEventListener(\"touchend\",t.DD._endDragBefore,!0),window.addEventListener(\"touchcancel\",t.DD._endDragBefore,!0),window.addEventListener(\"mousemove\",t.DD._drag),window.addEventListener(\"touchmove\",t.DD._drag),window.addEventListener(\"mouseup\",t.DD._endDragAfter,!1),window.addEventListener(\"touchend\",t.DD._endDragAfter,!1),window.addEventListener(\"touchcancel\",t.DD._endDragAfter,!1))},1447:(e,t,r)=>{\"use strict\";var n=r(9805),o=r(3269),i=r(4823),a=r(7293),s=r(1998),l=-2,c=12,u=30;function d(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function f(){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 n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function h(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=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new n.Buf32(852),t.distcode=t.distdyn=new n.Buf32(592),t.sane=1,t.back=-1,0):l}function p(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,h(e)):l}function m(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?l:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,p(e))):l}function g(e,t){var r,n;return e?(n=new f,e.state=n,n.window=null,0!==(r=m(e,t))&&(e.state=null),r):l}var v,b,y=!0;function w(e){if(y){var t;for(v=new n.Buf32(512),b=new n.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(s(1,e.lens,0,288,v,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;s(2,e.lens,0,32,b,0,e.work,{bits:5}),y=!1}e.lencode=v,e.lenbits=9,e.distcode=b,e.distbits=5}function x(e,t,r,o){var i,a=e.state;return null===a.window&&(a.wsize=1<<a.wbits,a.wnext=0,a.whave=0,a.window=new n.Buf8(a.wsize)),o>=a.wsize?(n.arraySet(a.window,t,r-a.wsize,a.wsize,0),a.wnext=0,a.whave=a.wsize):((i=a.wsize-a.wnext)>o&&(i=o),n.arraySet(a.window,t,r-o,i,a.wnext),(o-=i)?(n.arraySet(a.window,t,r-o,o,0),a.wnext=o,a.whave=a.wsize):(a.wnext+=i,a.wnext===a.wsize&&(a.wnext=0),a.whave<a.wsize&&(a.whave+=i))),0}t.inflateReset=p,t.inflateReset2=m,t.inflateResetKeep=h,t.inflateInit=function(e){return g(e,15)},t.inflateInit2=g,t.inflate=function(e,t){var r,f,h,p,m,g,v,b,y,S,C,k,E,O,A,T,j,P,M,R,_,I,N,F,D=0,B=new n.Buf8(4),L=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return l;(r=e.state).mode===c&&(r.mode=13),m=e.next_out,h=e.output,v=e.avail_out,p=e.next_in,f=e.input,g=e.avail_in,b=r.hold,y=r.bits,S=g,C=v,I=0;e:for(;;)switch(r.mode){case 1:if(0===r.wrap){r.mode=13;break}for(;y<16;){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}if(2&r.wrap&&35615===b){r.check=0,B[0]=255&b,B[1]=b>>>8&255,r.check=i(r.check,B,2,0),b=0,y=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&b)<<8)+(b>>8))%31){e.msg=\"incorrect header check\",r.mode=u;break}if(8!=(15&b)){e.msg=\"unknown compression method\",r.mode=u;break}if(y-=4,_=8+(15&(b>>>=4)),0===r.wbits)r.wbits=_;else if(_>r.wbits){e.msg=\"invalid window size\",r.mode=u;break}r.dmax=1<<_,e.adler=r.check=1,r.mode=512&b?10:c,b=0,y=0;break;case 2:for(;y<16;){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}if(r.flags=b,8!=(255&r.flags)){e.msg=\"unknown compression method\",r.mode=u;break}if(57344&r.flags){e.msg=\"unknown header flags set\",r.mode=u;break}r.head&&(r.head.text=b>>8&1),512&r.flags&&(B[0]=255&b,B[1]=b>>>8&255,r.check=i(r.check,B,2,0)),b=0,y=0,r.mode=3;case 3:for(;y<32;){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}r.head&&(r.head.time=b),512&r.flags&&(B[0]=255&b,B[1]=b>>>8&255,B[2]=b>>>16&255,B[3]=b>>>24&255,r.check=i(r.check,B,4,0)),b=0,y=0,r.mode=4;case 4:for(;y<16;){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}r.head&&(r.head.xflags=255&b,r.head.os=b>>8),512&r.flags&&(B[0]=255&b,B[1]=b>>>8&255,r.check=i(r.check,B,2,0)),b=0,y=0,r.mode=5;case 5:if(1024&r.flags){for(;y<16;){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}r.length=b,r.head&&(r.head.extra_len=b),512&r.flags&&(B[0]=255&b,B[1]=b>>>8&255,r.check=i(r.check,B,2,0)),b=0,y=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&((k=r.length)>g&&(k=g),k&&(r.head&&(_=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),n.arraySet(r.head.extra,f,p,k,_)),512&r.flags&&(r.check=i(r.check,f,k,p)),g-=k,p+=k,r.length-=k),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===g)break e;k=0;do{_=f[p+k++],r.head&&_&&r.length<65536&&(r.head.name+=String.fromCharCode(_))}while(_&&k<g);if(512&r.flags&&(r.check=i(r.check,f,k,p)),g-=k,p+=k,_)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===g)break e;k=0;do{_=f[p+k++],r.head&&_&&r.length<65536&&(r.head.comment+=String.fromCharCode(_))}while(_&&k<g);if(512&r.flags&&(r.check=i(r.check,f,k,p)),g-=k,p+=k,_)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;y<16;){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}if(b!==(65535&r.check)){e.msg=\"header crc mismatch\",r.mode=u;break}b=0,y=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=c;break;case 10:for(;y<32;){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}e.adler=r.check=d(b),b=0,y=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=m,e.avail_out=v,e.next_in=p,e.avail_in=g,r.hold=b,r.bits=y,2;e.adler=r.check=1,r.mode=c;case c:if(5===t||6===t)break e;case 13:if(r.last){b>>>=7&y,y-=7&y,r.mode=27;break}for(;y<3;){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}switch(r.last=1&b,y-=1,3&(b>>>=1)){case 0:r.mode=14;break;case 1:if(w(r),r.mode=20,6===t){b>>>=2,y-=2;break e}break;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=u}b>>>=2,y-=2;break;case 14:for(b>>>=7&y,y-=7&y;y<32;){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}if((65535&b)!=(b>>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=u;break}if(r.length=65535&b,b=0,y=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(k=r.length){if(k>g&&(k=g),k>v&&(k=v),0===k)break e;n.arraySet(h,f,p,k,m),g-=k,p+=k,v-=k,m+=k,r.length-=k;break}r.mode=c;break;case 17:for(;y<14;){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}if(r.nlen=257+(31&b),b>>>=5,y-=5,r.ndist=1+(31&b),b>>>=5,y-=5,r.ncode=4+(15&b),b>>>=4,y-=4,r.nlen>286||r.ndist>30){e.msg=\"too many length or distance symbols\",r.mode=u;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;y<3;){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}r.lens[L[r.have++]]=7&b,b>>>=3,y-=3}for(;r.have<19;)r.lens[L[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,N={bits:r.lenbits},I=s(0,r.lens,0,19,r.lencode,0,r.work,N),r.lenbits=N.bits,I){e.msg=\"invalid code lengths set\",r.mode=u;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;T=(D=r.lencode[b&(1<<r.lenbits)-1])>>>16&255,j=65535&D,!((A=D>>>24)<=y);){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}if(j<16)b>>>=A,y-=A,r.lens[r.have++]=j;else{if(16===j){for(F=A+2;y<F;){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}if(b>>>=A,y-=A,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=u;break}_=r.lens[r.have-1],k=3+(3&b),b>>>=2,y-=2}else if(17===j){for(F=A+3;y<F;){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}y-=A,_=0,k=3+(7&(b>>>=A)),b>>>=3,y-=3}else{for(F=A+7;y<F;){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}y-=A,_=0,k=11+(127&(b>>>=A)),b>>>=7,y-=7}if(r.have+k>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=u;break}for(;k--;)r.lens[r.have++]=_}}if(r.mode===u)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=u;break}if(r.lenbits=9,N={bits:r.lenbits},I=s(1,r.lens,0,r.nlen,r.lencode,0,r.work,N),r.lenbits=N.bits,I){e.msg=\"invalid literal/lengths set\",r.mode=u;break}if(r.distbits=6,r.distcode=r.distdyn,N={bits:r.distbits},I=s(2,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,N),r.distbits=N.bits,I){e.msg=\"invalid distances set\",r.mode=u;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(g>=6&&v>=258){e.next_out=m,e.avail_out=v,e.next_in=p,e.avail_in=g,r.hold=b,r.bits=y,a(e,C),m=e.next_out,h=e.output,v=e.avail_out,p=e.next_in,f=e.input,g=e.avail_in,b=r.hold,y=r.bits,r.mode===c&&(r.back=-1);break}for(r.back=0;T=(D=r.lencode[b&(1<<r.lenbits)-1])>>>16&255,j=65535&D,!((A=D>>>24)<=y);){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}if(T&&!(240&T)){for(P=A,M=T,R=j;T=(D=r.lencode[R+((b&(1<<P+M)-1)>>P)])>>>16&255,j=65535&D,!(P+(A=D>>>24)<=y);){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}b>>>=P,y-=P,r.back+=P}if(b>>>=A,y-=A,r.back+=A,r.length=j,0===T){r.mode=26;break}if(32&T){r.back=-1,r.mode=c;break}if(64&T){e.msg=\"invalid literal/length code\",r.mode=u;break}r.extra=15&T,r.mode=22;case 22:if(r.extra){for(F=r.extra;y<F;){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}r.length+=b&(1<<r.extra)-1,b>>>=r.extra,y-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;T=(D=r.distcode[b&(1<<r.distbits)-1])>>>16&255,j=65535&D,!((A=D>>>24)<=y);){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}if(!(240&T)){for(P=A,M=T,R=j;T=(D=r.distcode[R+((b&(1<<P+M)-1)>>P)])>>>16&255,j=65535&D,!(P+(A=D>>>24)<=y);){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}b>>>=P,y-=P,r.back+=P}if(b>>>=A,y-=A,r.back+=A,64&T){e.msg=\"invalid distance code\",r.mode=u;break}r.offset=j,r.extra=15&T,r.mode=24;case 24:if(r.extra){for(F=r.extra;y<F;){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}r.offset+=b&(1<<r.extra)-1,b>>>=r.extra,y-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=u;break}r.mode=25;case 25:if(0===v)break e;if(k=C-v,r.offset>k){if((k=r.offset-k)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=u;break}k>r.wnext?(k-=r.wnext,E=r.wsize-k):E=r.wnext-k,k>r.length&&(k=r.length),O=r.window}else O=h,E=m-r.offset,k=r.length;k>v&&(k=v),v-=k,r.length-=k;do{h[m++]=O[E++]}while(--k);0===r.length&&(r.mode=21);break;case 26:if(0===v)break e;h[m++]=r.length,v--,r.mode=21;break;case 27:if(r.wrap){for(;y<32;){if(0===g)break e;g--,b|=f[p++]<<y,y+=8}if(C-=v,e.total_out+=C,r.total+=C,C&&(e.adler=r.check=r.flags?i(r.check,h,C,m-C):o(r.check,h,C,m-C)),C=v,(r.flags?b:d(b))!==r.check){e.msg=\"incorrect data check\",r.mode=u;break}b=0,y=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;y<32;){if(0===g)break e;g--,b+=f[p++]<<y,y+=8}if(b!==(4294967295&r.total)){e.msg=\"incorrect length check\",r.mode=u;break}b=0,y=0}r.mode=29;case 29:I=1;break e;case u:I=-3;break e;case 31:return-4;default:return l}return e.next_out=m,e.avail_out=v,e.next_in=p,e.avail_in=g,r.hold=b,r.bits=y,(r.wsize||C!==e.avail_out&&r.mode<u&&(r.mode<27||4!==t))&&x(e,e.output,e.next_out,C-e.avail_out)?(r.mode=31,-4):(S-=e.avail_in,C-=e.avail_out,e.total_in+=S,e.total_out+=C,r.total+=C,r.wrap&&C&&(e.adler=r.check=r.flags?i(r.check,h,C,e.next_out-C):o(r.check,h,C,e.next_out-C)),e.data_type=r.bits+(r.last?64:0)+(r.mode===c?128:0)+(20===r.mode||15===r.mode?256:0),(0===S&&0===C||4===t)&&0===I&&(I=-5),I)},t.inflateEnd=function(e){if(!e||!e.state)return l;var t=e.state;return t.window&&(t.window=null),e.state=null,0},t.inflateGetHeader=function(e,t){var r;return e&&e.state&&2&(r=e.state).wrap?(r.head=t,t.done=!1,0):l},t.inflateSetDictionary=function(e,t){var r,n=t.length;return e&&e.state?0!==(r=e.state).wrap&&11!==r.mode?l:11===r.mode&&o(1,t,n,0)!==r.check?-3:x(e,t,n,n)?(r.mode=31,-4):(r.havedict=1,0):l},t.inflateInfo=\"pako inflate (from Nodeca project)\"},1486:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Path=void 0;const n=r(4892),o=r(4723),i=r(8871),a=r(5570);class s extends o.Shape{constructor(e){super(e),this.dataArray=[],this.pathLength=0,this._readDataAttribute(),this.on(\"dataChange.konva\",(function(){this._readDataAttribute()}))}_readDataAttribute(){this.dataArray=s.parsePathData(this.data()),this.pathLength=s.getPathLength(this.dataArray)}_sceneFunc(e){const t=this.dataArray;e.beginPath();let r=!1;for(let p=0;p<t.length;p++){const m=t[p].command,g=t[p].points;switch(m){case\"L\":e.lineTo(g[0],g[1]);break;case\"M\":e.moveTo(g[0],g[1]);break;case\"C\":e.bezierCurveTo(g[0],g[1],g[2],g[3],g[4],g[5]);break;case\"Q\":e.quadraticCurveTo(g[0],g[1],g[2],g[3]);break;case\"A\":var n=g[0],o=g[1],i=g[2],a=g[3],s=g[4],l=g[5],c=g[6],u=g[7],d=i>a?i:a,f=i>a?1:i/a,h=i>a?a/i:1;e.translate(n,o),e.rotate(c),e.scale(f,h),e.arc(0,0,d,s,s+l,1-u),e.scale(1/f,1/h),e.rotate(-c),e.translate(-n,-o);break;case\"z\":r=!0,e.closePath()}}r||this.hasFill()?e.fillStrokeShape(this):e.strokeShape(this)}getSelfRect(){let e=[];this.dataArray.forEach((function(t){if(\"A\"===t.command){const r=t.points[4],n=t.points[5],o=t.points[4]+n;let i=Math.PI/180;if(Math.abs(r-o)<i&&(i=Math.abs(r-o)),n<0)for(let n=r-i;n>o;n-=i){const r=s.getPointOnEllipticalArc(t.points[0],t.points[1],t.points[2],t.points[3],n,0);e.push(r.x,r.y)}else for(let n=r+i;n<o;n+=i){const r=s.getPointOnEllipticalArc(t.points[0],t.points[1],t.points[2],t.points[3],n,0);e.push(r.x,r.y)}}else if(\"C\"===t.command)for(let r=0;r<=1;r+=.01){const n=s.getPointOnCubicBezier(r,t.start.x,t.start.y,t.points[0],t.points[1],t.points[2],t.points[3],t.points[4],t.points[5]);e.push(n.x,n.y)}else e=e.concat(t.points)}));let t,r,n=e[0],o=e[0],i=e[1],a=e[1];for(let s=0;s<e.length/2;s++)t=e[2*s],r=e[2*s+1],isNaN(t)||(n=Math.min(n,t),o=Math.max(o,t)),isNaN(r)||(i=Math.min(i,r),a=Math.max(a,r));return{x:n,y:i,width:o-n,height:a-i}}getLength(){return this.pathLength}getPointAtLength(e){return s.getPointAtLengthOfDataArray(e,this.dataArray)}static getLineLength(e,t,r,n){return Math.sqrt((r-e)*(r-e)+(n-t)*(n-t))}static getPathLength(e){let t=0;for(let r=0;r<e.length;++r)t+=e[r].pathLength;return t}static getPointAtLengthOfDataArray(e,t){let r,n=0,o=t.length;if(!o)return null;for(;n<o&&e>t[n].pathLength;)e-=t[n].pathLength,++n;if(n===o)return r=t[n-1].points.slice(-2),{x:r[0],y:r[1]};if(e<.01)return r=t[n].points.slice(0,2),{x:r[0],y:r[1]};const i=t[n],l=i.points;switch(i.command){case\"L\":return s.getPointOnLine(e,i.start.x,i.start.y,l[0],l[1]);case\"C\":return s.getPointOnCubicBezier((0,a.t2length)(e,s.getPathLength(t),(e=>(0,a.getCubicArcLength)([i.start.x,l[0],l[2],l[4]],[i.start.y,l[1],l[3],l[5]],e))),i.start.x,i.start.y,l[0],l[1],l[2],l[3],l[4],l[5]);case\"Q\":return s.getPointOnQuadraticBezier((0,a.t2length)(e,s.getPathLength(t),(e=>(0,a.getQuadraticArcLength)([i.start.x,l[0],l[2]],[i.start.y,l[1],l[3]],e))),i.start.x,i.start.y,l[0],l[1],l[2],l[3]);case\"A\":var c=l[0],u=l[1],d=l[2],f=l[3],h=l[4],p=l[5],m=l[6];return h+=p*e/i.pathLength,s.getPointOnEllipticalArc(c,u,d,f,h,m)}return null}static getPointOnLine(e,t,r,n,o,i,a){i=null!=i?i:t,a=null!=a?a:r;const s=this.getLineLength(t,r,n,o);if(s<1e-10)return{x:t,y:r};if(n===t)return{x:i,y:a+(o>r?e:-e)};const l=(o-r)/(n-t),c=Math.sqrt(e*e/(1+l*l))*(n<t?-1:1),u=l*c;if(Math.abs(a-r-l*(i-t))<1e-10)return{x:i+c,y:a+u};const d=((i-t)*(n-t)+(a-r)*(o-r))/(s*s),f=t+d*(n-t),h=r+d*(o-r),p=this.getLineLength(i,a,f,h),m=Math.sqrt(e*e-p*p),g=Math.sqrt(m*m/(1+l*l))*(n<t?-1:1);return{x:f+g,y:h+l*g}}static getPointOnCubicBezier(e,t,r,n,o,i,a,s,l){function c(e){return e*e*e}function u(e){return 3*e*e*(1-e)}function d(e){return 3*e*(1-e)*(1-e)}function f(e){return(1-e)*(1-e)*(1-e)}return{x:s*c(e)+i*u(e)+n*d(e)+t*f(e),y:l*c(e)+a*u(e)+o*d(e)+r*f(e)}}static getPointOnQuadraticBezier(e,t,r,n,o,i,a){function s(e){return e*e}function l(e){return 2*e*(1-e)}function c(e){return(1-e)*(1-e)}return{x:i*s(e)+n*l(e)+t*c(e),y:a*s(e)+o*l(e)+r*c(e)}}static getPointOnEllipticalArc(e,t,r,n,o,i){const a=Math.cos(i),s=Math.sin(i),l=r*Math.cos(o),c=n*Math.sin(o);return{x:e+(l*a-c*s),y:t+(l*s+c*a)}}static parsePathData(e){if(!e)return[];let t=e;const r=[\"m\",\"M\",\"l\",\"L\",\"v\",\"V\",\"h\",\"H\",\"z\",\"Z\",\"c\",\"C\",\"q\",\"Q\",\"t\",\"T\",\"s\",\"S\",\"a\",\"A\"];t=t.replace(new RegExp(\" \",\"g\"),\",\");for(var n=0;n<r.length;n++)t=t.replace(new RegExp(r[n],\"g\"),\"|\"+r[n]);const o=t.split(\"|\"),i=[],a=[];let s=0,l=0;const c=/([-+]?((\\d+\\.\\d+)|((\\d+)|(\\.\\d+)))(?:e[-+]?\\d+)?)/gi;let u;for(n=1;n<o.length;n++){let e=o[n],t=e.charAt(0);for(e=e.slice(1),a.length=0;u=c.exec(e);)a.push(u[0]);const r=[];for(let e=0,t=a.length;e<t;e++){if(\"00\"===a[e]){r.push(0,0);continue}const t=parseFloat(a[e]);isNaN(t)?r.push(0):r.push(t)}for(;r.length>0&&!isNaN(r[0]);){let e=\"\",n=[];const o=s,a=l;var d,f,h,p,m,g,v,b,y,w;switch(t){case\"l\":s+=r.shift(),l+=r.shift(),e=\"L\",n.push(s,l);break;case\"L\":s=r.shift(),l=r.shift(),n.push(s,l);break;case\"m\":var x=r.shift(),S=r.shift();if(s+=x,l+=S,e=\"M\",i.length>2&&\"z\"===i[i.length-1].command)for(let e=i.length-2;e>=0;e--)if(\"M\"===i[e].command){s=i[e].points[0]+x,l=i[e].points[1]+S;break}n.push(s,l),t=\"l\";break;case\"M\":s=r.shift(),l=r.shift(),e=\"M\",n.push(s,l),t=\"L\";break;case\"h\":s+=r.shift(),e=\"L\",n.push(s,l);break;case\"H\":s=r.shift(),e=\"L\",n.push(s,l);break;case\"v\":l+=r.shift(),e=\"L\",n.push(s,l);break;case\"V\":l=r.shift(),e=\"L\",n.push(s,l);break;case\"C\":n.push(r.shift(),r.shift(),r.shift(),r.shift()),s=r.shift(),l=r.shift(),n.push(s,l);break;case\"c\":n.push(s+r.shift(),l+r.shift(),s+r.shift(),l+r.shift()),s+=r.shift(),l+=r.shift(),e=\"C\",n.push(s,l);break;case\"S\":f=s,h=l,\"C\"===(d=i[i.length-1]).command&&(f=s+(s-d.points[2]),h=l+(l-d.points[3])),n.push(f,h,r.shift(),r.shift()),s=r.shift(),l=r.shift(),e=\"C\",n.push(s,l);break;case\"s\":f=s,h=l,\"C\"===(d=i[i.length-1]).command&&(f=s+(s-d.points[2]),h=l+(l-d.points[3])),n.push(f,h,s+r.shift(),l+r.shift()),s+=r.shift(),l+=r.shift(),e=\"C\",n.push(s,l);break;case\"Q\":n.push(r.shift(),r.shift()),s=r.shift(),l=r.shift(),n.push(s,l);break;case\"q\":n.push(s+r.shift(),l+r.shift()),s+=r.shift(),l+=r.shift(),e=\"Q\",n.push(s,l);break;case\"T\":f=s,h=l,\"Q\"===(d=i[i.length-1]).command&&(f=s+(s-d.points[0]),h=l+(l-d.points[1])),s=r.shift(),l=r.shift(),e=\"Q\",n.push(f,h,s,l);break;case\"t\":f=s,h=l,\"Q\"===(d=i[i.length-1]).command&&(f=s+(s-d.points[0]),h=l+(l-d.points[1])),s+=r.shift(),l+=r.shift(),e=\"Q\",n.push(f,h,s,l);break;case\"A\":p=r.shift(),m=r.shift(),g=r.shift(),v=r.shift(),b=r.shift(),y=s,w=l,s=r.shift(),l=r.shift(),e=\"A\",n=this.convertEndpointToCenterParameterization(y,w,s,l,v,b,p,m,g);break;case\"a\":p=r.shift(),m=r.shift(),g=r.shift(),v=r.shift(),b=r.shift(),y=s,w=l,s+=r.shift(),l+=r.shift(),e=\"A\",n=this.convertEndpointToCenterParameterization(y,w,s,l,v,b,p,m,g)}i.push({command:e||t,points:n,start:{x:o,y:a},pathLength:this.calcLength(o,a,e||t,n)})}\"z\"!==t&&\"Z\"!==t||i.push({command:\"z\",points:[],start:void 0,pathLength:0})}return i}static calcLength(e,t,r,n){let o,i,l,c;const u=s;switch(r){case\"L\":return u.getLineLength(e,t,n[0],n[1]);case\"C\":return(0,a.getCubicArcLength)([e,n[0],n[2],n[4]],[t,n[1],n[3],n[5]],1);case\"Q\":return(0,a.getQuadraticArcLength)([e,n[0],n[2]],[t,n[1],n[3]],1);case\"A\":o=0;var d=n[4],f=n[5],h=n[4]+f,p=Math.PI/180;if(Math.abs(d-h)<p&&(p=Math.abs(d-h)),i=u.getPointOnEllipticalArc(n[0],n[1],n[2],n[3],d,0),f<0)for(c=d-p;c>h;c-=p)l=u.getPointOnEllipticalArc(n[0],n[1],n[2],n[3],c,0),o+=u.getLineLength(i.x,i.y,l.x,l.y),i=l;else for(c=d+p;c<h;c+=p)l=u.getPointOnEllipticalArc(n[0],n[1],n[2],n[3],c,0),o+=u.getLineLength(i.x,i.y,l.x,l.y),i=l;return l=u.getPointOnEllipticalArc(n[0],n[1],n[2],n[3],h,0),o+=u.getLineLength(i.x,i.y,l.x,l.y),o}return 0}static convertEndpointToCenterParameterization(e,t,r,n,o,i,a,s,l){const c=l*(Math.PI/180),u=Math.cos(c)*(e-r)/2+Math.sin(c)*(t-n)/2,d=-1*Math.sin(c)*(e-r)/2+Math.cos(c)*(t-n)/2,f=u*u/(a*a)+d*d/(s*s);f>1&&(a*=Math.sqrt(f),s*=Math.sqrt(f));let h=Math.sqrt((a*a*(s*s)-a*a*(d*d)-s*s*(u*u))/(a*a*(d*d)+s*s*(u*u)));o===i&&(h*=-1),isNaN(h)&&(h=0);const p=h*a*d/s,m=h*-s*u/a,g=(e+r)/2+Math.cos(c)*p-Math.sin(c)*m,v=(t+n)/2+Math.sin(c)*p+Math.cos(c)*m,b=function(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1])},y=function(e,t){return(e[0]*t[0]+e[1]*t[1])/(b(e)*b(t))},w=function(e,t){return(e[0]*t[1]<e[1]*t[0]?-1:1)*Math.acos(y(e,t))},x=w([1,0],[(u-p)/a,(d-m)/s]),S=[(u-p)/a,(d-m)/s],C=[(-1*u-p)/a,(-1*d-m)/s];let k=w(S,C);return y(S,C)<=-1&&(k=Math.PI),y(S,C)>=1&&(k=0),0===i&&k>0&&(k-=2*Math.PI),1===i&&k<0&&(k+=2*Math.PI),[g,v,a,s,x,k,c,i]}}t.Path=s,s.prototype.className=\"Path\",s.prototype._attrsAffectingSize=[\"data\"],(0,i._registerNode)(s),n.Factory.addGetterSetter(s,\"data\")},1601:e=>{\"use strict\";e.exports=function(e){return e[1]}},1665:(e,t,r)=>{\"use strict\";r.d(t,{A:()=>s});var n=r(1601),o=r.n(n),i=r(6314),a=r.n(i)()(o());a.push([e.id,\".PdfjsAnnotationExtension_painter_wrapper{position:absolute;text-align:initial;top:0;inset:0;overflow:hidden;line-height:1;text-size-adjust:none;forced-color-adjust:none;transform-origin:0 0;z-index:1}.PdfjsAnnotationExtension_selector_hover .PdfjsAnnotationExtension_painter_wrapper{cursor:pointer !important}.PdfjsAnnotationExtension_is_painting .PdfjsAnnotationExtension_painter_wrapper{z-index:999}.PdfjsAnnotationExtension_painting_type_1 .textLayer:not(.free) span,.PdfjsAnnotationExtension_painting_type_2 .textLayer:not(.free) span,.PdfjsAnnotationExtension_painting_type_3 .textLayer:not(.free) span{cursor:var(--editorHighlight-editing-cursor)}.PdfjsAnnotationExtension_painting_type_4 .PdfjsAnnotationExtension_painter_wrapper,.PdfjsAnnotationExtension_painting_type_5 .PdfjsAnnotationExtension_painter_wrapper,.PdfjsAnnotationExtension_painting_type_6 .PdfjsAnnotationExtension_painter_wrapper,.PdfjsAnnotationExtension_painting_type_11 .PdfjsAnnotationExtension_painter_wrapper,.PdfjsAnnotationExtension_painting_type_12 .PdfjsAnnotationExtension_painter_wrapper,.PdfjsAnnotationExtension_painting_type_13 .PdfjsAnnotationExtension_painter_wrapper{cursor:crosshair}.PdfjsAnnotationExtension_painting_type_7 .PdfjsAnnotationExtension_painter_wrapper{cursor:var(--editorInk-editing-cursor)}.PdfjsAnnotationExtension_painting_type_8 .PdfjsAnnotationExtension_painter_wrapper{cursor:var(--editorFreeHighlight-editing-cursor)}.PdfjsAnnotationExtension_painting_type_9 .PdfjsAnnotationExtension_painter_wrapper,.PdfjsAnnotationExtension_painting_type_10 .PdfjsAnnotationExtension_painter_wrapper{cursor:var(--PdfjsAnnotationExtension-image-cursor)}\",\"\"]);const s=a},1668:(e,t,r)=>{\"use strict\";var n={};(0,r(9805).assign)(n,r(3303),r(7083),r(9681)),e.exports=n},1958:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Text=void 0,t.stringToArray=c;const n=r(4060),o=r(4892),i=r(4723),a=r(8871),s=r(5483),l=r(8871);function c(e){return[...e].reduce(((e,t,r,n)=>{if(/\\p{Emoji}/u.test(t)){const o=n[r+1];o&&/\\p{Emoji_Modifier}|\\u200D/u.test(o)?(e.push(t+o),n[r+1]=\"\"):e.push(t)}else/\\p{Regional_Indicator}{2}/u.test(t+(n[r+1]||\"\"))?e.push(t+n[r+1]):r>0&&/\\p{Mn}|\\p{Me}|\\p{Mc}/u.test(t)?e[e.length-1]+=t:t&&e.push(t);return e}),[])}const u=\"auto\",d=\"inherit\",f=\"justify\",h=\"left\",p=\"middle\",m=\"normal\",g=\" \",v=\"none\",b=[\"direction\",\"fontFamily\",\"fontSize\",\"fontStyle\",\"fontVariant\",\"padding\",\"align\",\"verticalAlign\",\"lineHeight\",\"text\",\"width\",\"height\",\"wrap\",\"ellipsis\",\"letterSpacing\"],y=b.length;let w;function x(){return w||(w=n.Util.createCanvasElement().getContext(\"2d\"),w)}class S extends i.Shape{constructor(e){super(function(e){return(e=e||{}).fillLinearGradientColorStops||e.fillRadialGradientColorStops||e.fillPatternImage||(e.fill=e.fill||\"black\"),e}(e)),this._partialTextX=0,this._partialTextY=0;for(let e=0;e<y;e++)this.on(b[e]+\"Change.konva\",this._setTextData);this._setTextData()}_sceneFunc(e){const t=this.textArr,r=t.length;if(!this.text())return;let n,o=this.padding(),i=this.fontSize(),s=this.lineHeight()*i,l=this.verticalAlign(),u=this.direction(),m=0,g=this.align(),v=this.getWidth(),b=this.letterSpacing(),y=this.fill(),w=this.textDecoration(),x=-1!==w.indexOf(\"underline\"),S=-1!==w.indexOf(\"line-through\");u=u===d?e.direction:u;let C=s/2,k=p;if(a.Konva._fixTextRendering){const e=this.measureSize(\"M\");k=\"alphabetic\",C=(e.fontBoundingBoxAscent-e.fontBoundingBoxDescent)/2+s/2}var E=0,O=0;for(\"rtl\"===u&&e.setAttr(\"direction\",u),e.setAttr(\"font\",this._getContextFont()),e.setAttr(\"textBaseline\",k),e.setAttr(\"textAlign\",h),l===p?m=(this.getHeight()-r*s-2*o)/2:\"bottom\"===l&&(m=this.getHeight()-r*s-2*o),e.translate(o,m+o),n=0;n<r;n++){E=0,O=0;var A,T,j=t[n],P=j.text,M=j.width,R=j.lastInParagraph;if(e.save(),\"right\"===g?E+=v-M-2*o:\"center\"===g&&(E+=(v-M-2*o)/2),x){e.save(),e.beginPath();const t=E,r=C+O+(a.Konva._fixTextRendering?Math.round(i/4):Math.round(i/2));e.moveTo(t,r),A=P.split(\" \").length-1,T=g!==f||R?M:v-2*o,e.lineTo(t+Math.round(T),r),e.lineWidth=i/15;const n=this._getLinearGradient();e.strokeStyle=n||y,e.stroke(),e.restore()}if(S){e.save(),e.beginPath();const t=a.Konva._fixTextRendering?-Math.round(i/4):0;e.moveTo(E,C+O+t),A=P.split(\" \").length-1,T=g!==f||R?M:v-2*o,e.lineTo(E+Math.round(T),C+O+t),e.lineWidth=i/15;const r=this._getLinearGradient();e.strokeStyle=r||y,e.stroke(),e.restore()}if(\"rtl\"===u||0===b&&g!==f)0!==b&&e.setAttr(\"letterSpacing\",`${b}px`),this._partialTextX=E,this._partialTextY=C+O,this._partialText=P,e.fillStrokeShape(this);else{A=P.split(\" \").length-1;const t=c(P);for(let r=0;r<t.length;r++){const n=t[r];\" \"!==n||R||g!==f||(E+=(v-2*o-M)/A),this._partialTextX=E,this._partialTextY=C+O,this._partialText=n,e.fillStrokeShape(this),E+=this.measureSize(n).width+b}}e.restore(),r>1&&(C+=s)}}_hitFunc(e){const t=this.getWidth(),r=this.getHeight();e.beginPath(),e.rect(0,0,t,r),e.closePath(),e.fillStrokeShape(this)}setText(e){const t=n.Util._isString(e)?e:null==e?\"\":e+\"\";return this._setAttr(\"text\",t),this}getWidth(){return this.attrs.width===u||void 0===this.attrs.width?this.getTextWidth()+2*this.padding():this.attrs.width}getHeight(){return this.attrs.height===u||void 0===this.attrs.height?this.fontSize()*this.textArr.length*this.lineHeight()+2*this.padding():this.attrs.height}getTextWidth(){return this.textWidth}getTextHeight(){return n.Util.warn(\"text.getTextHeight() method is deprecated. Use text.height() - for full height and text.fontSize() - for one line height.\"),this.textHeight}measureSize(e){var t,r,n,o,i,a,s,l,c,u,d;let f,h=x(),p=this.fontSize();h.save(),h.font=this._getContextFont(),f=h.measureText(e),h.restore();const m=p/100;return{actualBoundingBoxAscent:null!==(t=f.actualBoundingBoxAscent)&&void 0!==t?t:71.58203125*m,actualBoundingBoxDescent:null!==(r=f.actualBoundingBoxDescent)&&void 0!==r?r:0,actualBoundingBoxLeft:null!==(n=f.actualBoundingBoxLeft)&&void 0!==n?n:-7.421875*m,actualBoundingBoxRight:null!==(o=f.actualBoundingBoxRight)&&void 0!==o?o:75.732421875*m,alphabeticBaseline:null!==(i=f.alphabeticBaseline)&&void 0!==i?i:0,emHeightAscent:null!==(a=f.emHeightAscent)&&void 0!==a?a:100*m,emHeightDescent:null!==(s=f.emHeightDescent)&&void 0!==s?s:-20*m,fontBoundingBoxAscent:null!==(l=f.fontBoundingBoxAscent)&&void 0!==l?l:91*m,fontBoundingBoxDescent:null!==(c=f.fontBoundingBoxDescent)&&void 0!==c?c:21*m,hangingBaseline:null!==(u=f.hangingBaseline)&&void 0!==u?u:72.80000305175781*m,ideographicBaseline:null!==(d=f.ideographicBaseline)&&void 0!==d?d:-21*m,width:f.width,height:p}}_getContextFont(){return this.fontStyle()+g+this.fontVariant()+g+(this.fontSize()+\"px \")+this.fontFamily().split(\",\").map((e=>{const t=(e=e.trim()).indexOf(\" \")>=0,r=e.indexOf('\"')>=0||e.indexOf(\"'\")>=0;return t&&!r&&(e=`\"${e}\"`),e})).join(\", \")}_addTextLine(e){this.align()===f&&(e=e.trim());const t=this._getTextWidth(e);return this.textArr.push({text:e,width:t,lastInParagraph:!1})}_getTextWidth(e){const t=this.letterSpacing(),r=e.length;return x().measureText(e).width+t*r}_setTextData(){let e=this.text().split(\"\\n\"),t=+this.fontSize(),r=0,n=this.lineHeight()*t,o=this.attrs.width,i=this.attrs.height,a=o!==u&&void 0!==o,s=i!==u&&void 0!==i,l=this.padding(),d=o-2*l,f=i-2*l,h=0,p=this.wrap(),m=\"char\"!==p&&p!==v,b=this.ellipsis();this.textArr=[],x().font=this._getContextFont();const y=b?this._getTextWidth(\"…\"):0;for(let t=0,o=e.length;t<o;++t){let i=e[t],l=this._getTextWidth(i);if(a&&l>d)for(;i.length>0;){let e=0,t=c(i).length,o=\"\",a=0;for(;e<t;){const r=e+t>>>1,l=c(i).slice(0,r+1).join(\"\"),u=this._getTextWidth(l);(b&&s&&h+n>f?u+y:u)<=d?(e=r+1,o=l,a=u):t=r}if(!o)break;if(m){const t=c(i),r=c(o),n=t[r.length];let s;if((n===g||\"-\"===n)&&a<=d)s=r.length;else{const e=r.lastIndexOf(g),t=r.lastIndexOf(\"-\");s=Math.max(e,t)+1}s>0&&(e=s,o=t.slice(0,e).join(\"\"),a=this._getTextWidth(o))}if(o=o.trimRight(),this._addTextLine(o),r=Math.max(r,a),h+=n,this._shouldHandleEllipsis(h)){this._tryToAddEllipsisToLastLine();break}if(i=c(i).slice(e).join(\"\").trimLeft(),i.length>0&&(l=this._getTextWidth(i),l<=d)){this._addTextLine(i),h+=n,r=Math.max(r,l);break}}else this._addTextLine(i),h+=n,r=Math.max(r,l),this._shouldHandleEllipsis(h)&&t<o-1&&this._tryToAddEllipsisToLastLine();if(this.textArr[this.textArr.length-1]&&(this.textArr[this.textArr.length-1].lastInParagraph=!0),s&&h+n>f)break}this.textHeight=t,this.textWidth=r}_shouldHandleEllipsis(e){const t=+this.fontSize(),r=this.lineHeight()*t,n=this.attrs.height,o=n!==u&&void 0!==n,i=n-2*this.padding();return!(this.wrap()!==v)||o&&e+r>i}_tryToAddEllipsisToLastLine(){const e=this.attrs.width,t=e!==u&&void 0!==e,r=e-2*this.padding(),n=this.ellipsis(),o=this.textArr[this.textArr.length-1];o&&n&&(t&&(this._getTextWidth(o.text+\"…\")<r||(o.text=o.text.slice(0,o.text.length-3))),this.textArr.splice(this.textArr.length-1,1),this._addTextLine(o.text+\"…\"))}getStrokeScaleEnabled(){return!0}_useBufferCanvas(){const e=-1!==this.textDecoration().indexOf(\"underline\")||-1!==this.textDecoration().indexOf(\"line-through\"),t=this.hasShadow();return!(!e||!t)||super._useBufferCanvas()}}t.Text=S,S.prototype._fillFunc=function(e){e.fillText(this._partialText,this._partialTextX,this._partialTextY)},S.prototype._strokeFunc=function(e){e.setAttr(\"miterLimit\",2),e.strokeText(this._partialText,this._partialTextX,this._partialTextY)},S.prototype.className=\"Text\",S.prototype._attrsAffectingSize=[\"text\",\"fontSize\",\"padding\",\"wrap\",\"lineHeight\",\"letterSpacing\"],(0,l._registerNode)(S),o.Factory.overWriteSetter(S,\"width\",(0,s.getNumberOrAutoValidator)()),o.Factory.overWriteSetter(S,\"height\",(0,s.getNumberOrAutoValidator)()),o.Factory.addGetterSetter(S,\"direction\",d),o.Factory.addGetterSetter(S,\"fontFamily\",\"Arial\"),o.Factory.addGetterSetter(S,\"fontSize\",12,(0,s.getNumberValidator)()),o.Factory.addGetterSetter(S,\"fontStyle\",m),o.Factory.addGetterSetter(S,\"fontVariant\",m),o.Factory.addGetterSetter(S,\"padding\",0,(0,s.getNumberValidator)()),o.Factory.addGetterSetter(S,\"align\",h),o.Factory.addGetterSetter(S,\"verticalAlign\",\"top\"),o.Factory.addGetterSetter(S,\"lineHeight\",1,(0,s.getNumberValidator)()),o.Factory.addGetterSetter(S,\"wrap\",\"word\"),o.Factory.addGetterSetter(S,\"ellipsis\",!1,(0,s.getBooleanValidator)()),o.Factory.addGetterSetter(S,\"letterSpacing\",0,(0,s.getNumberValidator)()),o.Factory.addGetterSetter(S,\"text\",\"\",(0,s.getStringValidator)()),o.Factory.addGetterSetter(S,\"textDecoration\",\"\")},1996:(e,t,r)=>{\"use strict\";var n=r(9805),o=!0,i=!0;try{String.fromCharCode.apply(null,[0])}catch(e){o=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){i=!1}for(var a=new n.Buf8(256),s=0;s<256;s++)a[s]=s>=252?6:s>=248?5:s>=240?4:s>=224?3:s>=192?2:1;function l(e,t){if(t<65534&&(e.subarray&&i||!e.subarray&&o))return String.fromCharCode.apply(null,n.shrinkBuf(e,t));for(var r=\"\",a=0;a<t;a++)r+=String.fromCharCode(e[a]);return r}a[254]=a[254]=1,t.string2buf=function(e){var t,r,o,i,a,s=e.length,l=0;for(i=0;i<s;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<s&&56320==(64512&(o=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(o-56320),i++),l+=r<128?1:r<2048?2:r<65536?3:4;for(t=new n.Buf8(l),a=0,i=0;a<l;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<s&&56320==(64512&(o=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(o-56320),i++),r<128?t[a++]=r:r<2048?(t[a++]=192|r>>>6,t[a++]=128|63&r):r<65536?(t[a++]=224|r>>>12,t[a++]=128|r>>>6&63,t[a++]=128|63&r):(t[a++]=240|r>>>18,t[a++]=128|r>>>12&63,t[a++]=128|r>>>6&63,t[a++]=128|63&r);return t},t.buf2binstring=function(e){return l(e,e.length)},t.binstring2buf=function(e){for(var t=new n.Buf8(e.length),r=0,o=t.length;r<o;r++)t[r]=e.charCodeAt(r);return t},t.buf2string=function(e,t){var r,n,o,i,s=t||e.length,c=new Array(2*s);for(n=0,r=0;r<s;)if((o=e[r++])<128)c[n++]=o;else if((i=a[o])>4)c[n++]=65533,r+=i-1;else{for(o&=2===i?31:3===i?15:7;i>1&&r<s;)o=o<<6|63&e[r++],i--;i>1?c[n++]=65533:o<65536?c[n++]=o:(o-=65536,c[n++]=55296|o>>10&1023,c[n++]=56320|1023&o)}return l(c,n)},t.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;r>=0&&128==(192&e[r]);)r--;return r<0||0===r?t:r+a[e[r]]>t?r:t}},1998:(e,t,r)=>{\"use strict\";var n=r(9805),o=[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],i=[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],a=[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],s=[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];e.exports=function(e,t,r,l,c,u,d,f){var h,p,m,g,v,b,y,w,x,S=f.bits,C=0,k=0,E=0,O=0,A=0,T=0,j=0,P=0,M=0,R=0,_=null,I=0,N=new n.Buf16(16),F=new n.Buf16(16),D=null,B=0;for(C=0;C<=15;C++)N[C]=0;for(k=0;k<l;k++)N[t[r+k]]++;for(A=S,O=15;O>=1&&0===N[O];O--);if(A>O&&(A=O),0===O)return c[u++]=20971520,c[u++]=20971520,f.bits=1,0;for(E=1;E<O&&0===N[E];E++);for(A<E&&(A=E),P=1,C=1;C<=15;C++)if(P<<=1,(P-=N[C])<0)return-1;if(P>0&&(0===e||1!==O))return-1;for(F[1]=0,C=1;C<15;C++)F[C+1]=F[C]+N[C];for(k=0;k<l;k++)0!==t[r+k]&&(d[F[t[r+k]]++]=k);if(0===e?(_=D=d,b=19):1===e?(_=o,I-=257,D=i,B-=257,b=256):(_=a,D=s,b=-1),R=0,k=0,C=E,v=u,T=A,j=0,m=-1,g=(M=1<<A)-1,1===e&&M>852||2===e&&M>592)return 1;for(;;){y=C-j,d[k]<b?(w=0,x=d[k]):d[k]>b?(w=D[B+d[k]],x=_[I+d[k]]):(w=96,x=0),h=1<<C-j,E=p=1<<T;do{c[v+(R>>j)+(p-=h)]=y<<24|w<<16|x}while(0!==p);for(h=1<<C-1;R&h;)h>>=1;if(0!==h?(R&=h-1,R+=h):R=0,k++,0===--N[C]){if(C===O)break;C=t[r+d[k]]}if(C>A&&(R&g)!==m){for(0===j&&(j=A),v+=E,P=1<<(T=C-j);T+j<O&&!((P-=N[T+j])<=0);)T++,P<<=1;if(M+=1<<T,1===e&&M>852||2===e&&M>592)return 1;c[m=R&g]=A<<24|T<<16|v-u}}return 0!==R&&(c[v+R]=C-j<<24|64<<16),f.bits=A,0}},2512:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Sepia=void 0,t.Sepia=function(e){const t=e.data,r=t.length;for(let e=0;e<r;e+=4){const r=t[e+0],n=t[e+1],o=t[e+2];t[e+0]=Math.min(255,.393*r+.769*n+.189*o),t[e+1]=Math.min(255,.349*r+.686*n+.168*o),t[e+2]=Math.min(255,.272*r+.534*n+.131*o)}}},2551:(e,t,r)=>{\"use strict\";var n=r(6540),o=r(9982);function i(e){for(var t=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+e,r=1;r<arguments.length;r++)t+=\"&args[]=\"+encodeURIComponent(arguments[r]);return\"Minified React error #\"+e+\"; visit \"+t+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}var a=new Set,s={};function l(e,t){c(e,t),c(e+\"Capture\",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)a.add(t[e])}var u=!(\"undefined\"==typeof window||void 0===window.document||void 0===window.document.createElement),d=Object.prototype.hasOwnProperty,f=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,h={},p={};function m(e,t,r,n,o,i,a){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=n,this.attributeNamespace=o,this.mustUseProperty=r,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=a}var g={};\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach((function(e){g[e]=new m(e,0,!1,e,null,!1,!1)})),[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach((function(e){var t=e[0];g[t]=new m(t,1,!1,e[1],null,!1,!1)})),[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach((function(e){g[e]=new m(e,2,!1,e.toLowerCase(),null,!1,!1)})),[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach((function(e){g[e]=new m(e,2,!1,e,null,!1,!1)})),\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach((function(e){g[e]=new m(e,3,!1,e.toLowerCase(),null,!1,!1)})),[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach((function(e){g[e]=new m(e,3,!0,e,null,!1,!1)})),[\"capture\",\"download\"].forEach((function(e){g[e]=new m(e,4,!1,e,null,!1,!1)})),[\"cols\",\"rows\",\"size\",\"span\"].forEach((function(e){g[e]=new m(e,6,!1,e,null,!1,!1)})),[\"rowSpan\",\"start\"].forEach((function(e){g[e]=new m(e,5,!1,e.toLowerCase(),null,!1,!1)}));var v=/[\\-:]([a-z])/g;function b(e){return e[1].toUpperCase()}function y(e,t,r,n){var o=g.hasOwnProperty(t)?g[t]:null;(null!==o?0!==o.type:n||!(2<t.length)||\"o\"!==t[0]&&\"O\"!==t[0]||\"n\"!==t[1]&&\"N\"!==t[1])&&(function(e,t,r,n){if(null==t||function(e,t,r,n){if(null!==r&&0===r.type)return!1;switch(typeof t){case\"function\":case\"symbol\":return!0;case\"boolean\":return!n&&(null!==r?!r.acceptsBooleans:\"data-\"!==(e=e.toLowerCase().slice(0,5))&&\"aria-\"!==e);default:return!1}}(e,t,r,n))return!0;if(n)return!1;if(null!==r)switch(r.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,r,o,n)&&(r=null),n||null===o?function(e){return!!d.call(p,e)||!d.call(h,e)&&(f.test(e)?p[e]=!0:(h[e]=!0,!1))}(t)&&(null===r?e.removeAttribute(t):e.setAttribute(t,\"\"+r)):o.mustUseProperty?e[o.propertyName]=null===r?3!==o.type&&\"\":r:(t=o.attributeName,n=o.attributeNamespace,null===r?e.removeAttribute(t):(r=3===(o=o.type)||4===o&&!0===r?\"\":\"\"+r,n?e.setAttributeNS(n,t,r):e.setAttribute(t,r))))}\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach((function(e){var t=e.replace(v,b);g[t]=new m(t,1,!1,e,null,!1,!1)})),\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach((function(e){var t=e.replace(v,b);g[t]=new m(t,1,!1,e,\"http://www.w3.org/1999/xlink\",!1,!1)})),[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach((function(e){var t=e.replace(v,b);g[t]=new m(t,1,!1,e,\"http://www.w3.org/XML/1998/namespace\",!1,!1)})),[\"tabIndex\",\"crossOrigin\"].forEach((function(e){g[e]=new m(e,1,!1,e.toLowerCase(),null,!1,!1)})),g.xlinkHref=new m(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1),[\"src\",\"href\",\"action\",\"formAction\"].forEach((function(e){g[e]=new m(e,1,!1,e.toLowerCase(),null,!0,!0)}));var w=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,x=Symbol.for(\"react.element\"),S=Symbol.for(\"react.portal\"),C=Symbol.for(\"react.fragment\"),k=Symbol.for(\"react.strict_mode\"),E=Symbol.for(\"react.profiler\"),O=Symbol.for(\"react.provider\"),A=Symbol.for(\"react.context\"),T=Symbol.for(\"react.forward_ref\"),j=Symbol.for(\"react.suspense\"),P=Symbol.for(\"react.suspense_list\"),M=Symbol.for(\"react.memo\"),R=Symbol.for(\"react.lazy\");Symbol.for(\"react.scope\"),Symbol.for(\"react.debug_trace_mode\");var _=Symbol.for(\"react.offscreen\");Symbol.for(\"react.legacy_hidden\"),Symbol.for(\"react.cache\"),Symbol.for(\"react.tracing_marker\");var I=Symbol.iterator;function N(e){return null===e||\"object\"!=typeof e?null:\"function\"==typeof(e=I&&e[I]||e[\"@@iterator\"])?e:null}var F,D=Object.assign;function B(e){if(void 0===F)try{throw Error()}catch(e){var t=e.stack.trim().match(/\\n( *(at )?)/);F=t&&t[1]||\"\"}return\"\\n\"+F+e}var L=!1;function z(e,t){if(!e||L)return\"\";L=!0;var r=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,\"props\",{set:function(){throw Error()}}),\"object\"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(e){var n=e}Reflect.construct(e,[],t)}else{try{t.call()}catch(e){n=e}e.call(t.prototype)}else{try{throw Error()}catch(e){n=e}e()}}catch(t){if(t&&n&&\"string\"==typeof t.stack){for(var o=t.stack.split(\"\\n\"),i=n.stack.split(\"\\n\"),a=o.length-1,s=i.length-1;1<=a&&0<=s&&o[a]!==i[s];)s--;for(;1<=a&&0<=s;a--,s--)if(o[a]!==i[s]){if(1!==a||1!==s)do{if(a--,0>--s||o[a]!==i[s]){var l=\"\\n\"+o[a].replace(\" at new \",\" at \");return e.displayName&&l.includes(\"<anonymous>\")&&(l=l.replace(\"<anonymous>\",e.displayName)),l}}while(1<=a&&0<=s);break}}}finally{L=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:\"\")?B(e):\"\"}function H(e){switch(e.tag){case 5:return B(e.type);case 16:return B(\"Lazy\");case 13:return B(\"Suspense\");case 19:return B(\"SuspenseList\");case 0:case 2:case 15:return z(e.type,!1);case 11:return z(e.type.render,!1);case 1:return z(e.type,!0);default:return\"\"}}function U(e){if(null==e)return null;if(\"function\"==typeof e)return e.displayName||e.name||null;if(\"string\"==typeof e)return e;switch(e){case C:return\"Fragment\";case S:return\"Portal\";case E:return\"Profiler\";case k:return\"StrictMode\";case j:return\"Suspense\";case P:return\"SuspenseList\"}if(\"object\"==typeof e)switch(e.$$typeof){case A:return(e.displayName||\"Context\")+\".Consumer\";case O:return(e._context.displayName||\"Context\")+\".Provider\";case T:var t=e.render;return(e=e.displayName)||(e=\"\"!==(e=t.displayName||t.name||\"\")?\"ForwardRef(\"+e+\")\":\"ForwardRef\"),e;case M:return null!==(t=e.displayName||null)?t:U(e.type)||\"Memo\";case R:t=e._payload,e=e._init;try{return U(e(t))}catch(e){}}return null}function V(e){var t=e.type;switch(e.tag){case 24:return\"Cache\";case 9:return(t.displayName||\"Context\")+\".Consumer\";case 10:return(t._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return e=(e=t.render).displayName||e.name||\"\",t.displayName||(\"\"!==e?\"ForwardRef(\"+e+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return t;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return U(t);case 8:return t===k?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";case 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"==typeof t)return t.displayName||t.name||null;if(\"string\"==typeof t)return t}return null}function W(e){switch(typeof e){case\"boolean\":case\"number\":case\"string\":case\"undefined\":case\"object\":return e;default:return\"\"}}function G(e){var t=e.type;return(e=e.nodeName)&&\"input\"===e.toLowerCase()&&(\"checkbox\"===t||\"radio\"===t)}function q(e){e._valueTracker||(e._valueTracker=function(e){var t=G(e)?\"checked\":\"value\",r=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),n=\"\"+e[t];if(!e.hasOwnProperty(t)&&void 0!==r&&\"function\"==typeof r.get&&\"function\"==typeof r.set){var o=r.get,i=r.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){n=\"\"+e,i.call(this,e)}}),Object.defineProperty(e,t,{enumerable:r.enumerable}),{getValue:function(){return n},setValue:function(e){n=\"\"+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function K(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var r=t.getValue(),n=\"\";return e&&(n=G(e)?e.checked?\"true\":\"false\":e.value),(e=n)!==r&&(t.setValue(e),!0)}function X(e){if(void 0===(e=e||(\"undefined\"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function Y(e,t){var r=t.checked;return D({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=r?r:e._wrapperState.initialChecked})}function $(e,t){var r=null==t.defaultValue?\"\":t.defaultValue,n=null!=t.checked?t.checked:t.defaultChecked;r=W(null!=t.value?t.value:r),e._wrapperState={initialChecked:n,initialValue:r,controlled:\"checkbox\"===t.type||\"radio\"===t.type?null!=t.checked:null!=t.value}}function Z(e,t){null!=(t=t.checked)&&y(e,\"checked\",t,!1)}function Q(e,t){Z(e,t);var r=W(t.value),n=t.type;if(null!=r)\"number\"===n?(0===r&&\"\"===e.value||e.value!=r)&&(e.value=\"\"+r):e.value!==\"\"+r&&(e.value=\"\"+r);else if(\"submit\"===n||\"reset\"===n)return void e.removeAttribute(\"value\");t.hasOwnProperty(\"value\")?ee(e,t.type,r):t.hasOwnProperty(\"defaultValue\")&&ee(e,t.type,W(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function J(e,t,r){if(t.hasOwnProperty(\"value\")||t.hasOwnProperty(\"defaultValue\")){var n=t.type;if(!(\"submit\"!==n&&\"reset\"!==n||void 0!==t.value&&null!==t.value))return;t=\"\"+e._wrapperState.initialValue,r||t===e.value||(e.value=t),e.defaultValue=t}\"\"!==(r=e.name)&&(e.name=\"\"),e.defaultChecked=!!e._wrapperState.initialChecked,\"\"!==r&&(e.name=r)}function ee(e,t,r){\"number\"===t&&X(e.ownerDocument)===e||(null==r?e.defaultValue=\"\"+e._wrapperState.initialValue:e.defaultValue!==\"\"+r&&(e.defaultValue=\"\"+r))}var te=Array.isArray;function re(e,t,r,n){if(e=e.options,t){t={};for(var o=0;o<r.length;o++)t[\"$\"+r[o]]=!0;for(r=0;r<e.length;r++)o=t.hasOwnProperty(\"$\"+e[r].value),e[r].selected!==o&&(e[r].selected=o),o&&n&&(e[r].defaultSelected=!0)}else{for(r=\"\"+W(r),t=null,o=0;o<e.length;o++){if(e[o].value===r)return e[o].selected=!0,void(n&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function ne(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return D({},t,{value:void 0,defaultValue:void 0,children:\"\"+e._wrapperState.initialValue})}function oe(e,t){var r=t.value;if(null==r){if(r=t.children,t=t.defaultValue,null!=r){if(null!=t)throw Error(i(92));if(te(r)){if(1<r.length)throw Error(i(93));r=r[0]}t=r}null==t&&(t=\"\"),r=t}e._wrapperState={initialValue:W(r)}}function ie(e,t){var r=W(t.value),n=W(t.defaultValue);null!=r&&((r=\"\"+r)!==e.value&&(e.value=r),null==t.defaultValue&&e.defaultValue!==r&&(e.defaultValue=r)),null!=n&&(e.defaultValue=\"\"+n)}function ae(e){var t=e.textContent;t===e._wrapperState.initialValue&&\"\"!==t&&null!==t&&(e.value=t)}function se(e){switch(e){case\"svg\":return\"http://www.w3.org/2000/svg\";case\"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function le(e,t){return null==e||\"http://www.w3.org/1999/xhtml\"===e?se(t):\"http://www.w3.org/2000/svg\"===e&&\"foreignObject\"===t?\"http://www.w3.org/1999/xhtml\":e}var ce,ue,de=(ue=function(e,t){if(\"http://www.w3.org/2000/svg\"!==e.namespaceURI||\"innerHTML\"in e)e.innerHTML=t;else{for((ce=ce||document.createElement(\"div\")).innerHTML=\"<svg>\"+t.valueOf().toString()+\"</svg>\",t=ce.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},\"undefined\"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,r,n){MSApp.execUnsafeLocalFunction((function(){return ue(e,t)}))}:ue);function fe(e,t){if(t){var r=e.firstChild;if(r&&r===e.lastChild&&3===r.nodeType)return void(r.nodeValue=t)}e.textContent=t}var he={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},pe=[\"Webkit\",\"ms\",\"Moz\",\"O\"];function me(e,t,r){return null==t||\"boolean\"==typeof t||\"\"===t?\"\":r||\"number\"!=typeof t||0===t||he.hasOwnProperty(e)&&he[e]?(\"\"+t).trim():t+\"px\"}function ge(e,t){for(var r in e=e.style,t)if(t.hasOwnProperty(r)){var n=0===r.indexOf(\"--\"),o=me(r,t[r],n);\"float\"===r&&(r=\"cssFloat\"),n?e.setProperty(r,o):e[r]=o}}Object.keys(he).forEach((function(e){pe.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),he[t]=he[e]}))}));var ve=D({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function be(e,t){if(t){if(ve[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if(\"object\"!=typeof t.dangerouslySetInnerHTML||!(\"__html\"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&\"object\"!=typeof t.style)throw Error(i(62))}}function ye(e,t){if(-1===e.indexOf(\"-\"))return\"string\"==typeof t.is;switch(e){case\"annotation-xml\":case\"color-profile\":case\"font-face\":case\"font-face-src\":case\"font-face-uri\":case\"font-face-format\":case\"font-face-name\":case\"missing-glyph\":return!1;default:return!0}}var we=null;function xe(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Se=null,Ce=null,ke=null;function Ee(e){if(e=wo(e)){if(\"function\"!=typeof Se)throw Error(i(280));var t=e.stateNode;t&&(t=So(t),Se(e.stateNode,e.type,t))}}function Oe(e){Ce?ke?ke.push(e):ke=[e]:Ce=e}function Ae(){if(Ce){var e=Ce,t=ke;if(ke=Ce=null,Ee(e),t)for(e=0;e<t.length;e++)Ee(t[e])}}function Te(e,t){return e(t)}function je(){}var Pe=!1;function Me(e,t,r){if(Pe)return e(t,r);Pe=!0;try{return Te(e,t,r)}finally{Pe=!1,(null!==Ce||null!==ke)&&(je(),Ae())}}function Re(e,t){var r=e.stateNode;if(null===r)return null;var n=So(r);if(null===n)return null;r=n[t];e:switch(t){case\"onClick\":case\"onClickCapture\":case\"onDoubleClick\":case\"onDoubleClickCapture\":case\"onMouseDown\":case\"onMouseDownCapture\":case\"onMouseMove\":case\"onMouseMoveCapture\":case\"onMouseUp\":case\"onMouseUpCapture\":case\"onMouseEnter\":(n=!n.disabled)||(n=!(\"button\"===(e=e.type)||\"input\"===e||\"select\"===e||\"textarea\"===e)),e=!n;break e;default:e=!1}if(e)return null;if(r&&\"function\"!=typeof r)throw Error(i(231,t,typeof r));return r}var _e=!1;if(u)try{var Ie={};Object.defineProperty(Ie,\"passive\",{get:function(){_e=!0}}),window.addEventListener(\"test\",Ie,Ie),window.removeEventListener(\"test\",Ie,Ie)}catch(ue){_e=!1}function Ne(e,t,r,n,o,i,a,s,l){var c=Array.prototype.slice.call(arguments,3);try{t.apply(r,c)}catch(e){this.onError(e)}}var Fe=!1,De=null,Be=!1,Le=null,ze={onError:function(e){Fe=!0,De=e}};function He(e,t,r,n,o,i,a,s,l){Fe=!1,De=null,Ne.apply(ze,arguments)}function Ue(e){var t=e,r=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{!!(4098&(t=e).flags)&&(r=t.return),e=t.return}while(e)}return 3===t.tag?r:null}function Ve(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&null!==(e=e.alternate)&&(t=e.memoizedState),null!==t)return t.dehydrated}return null}function We(e){if(Ue(e)!==e)throw Error(i(188))}function Ge(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ue(e)))throw Error(i(188));return t!==e?null:e}for(var r=e,n=t;;){var o=r.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(n=o.return)){r=n;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===r)return We(o),e;if(a===n)return We(o),t;a=a.sibling}throw Error(i(188))}if(r.return!==n.return)r=o,n=a;else{for(var s=!1,l=o.child;l;){if(l===r){s=!0,r=o,n=a;break}if(l===n){s=!0,n=o,r=a;break}l=l.sibling}if(!s){for(l=a.child;l;){if(l===r){s=!0,r=a,n=o;break}if(l===n){s=!0,n=a,r=o;break}l=l.sibling}if(!s)throw Error(i(189))}}if(r.alternate!==n)throw Error(i(190))}if(3!==r.tag)throw Error(i(188));return r.stateNode.current===r?e:t}(e))?qe(e):null}function qe(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var t=qe(e);if(null!==t)return t;e=e.sibling}return null}var Ke=o.unstable_scheduleCallback,Xe=o.unstable_cancelCallback,Ye=o.unstable_shouldYield,$e=o.unstable_requestPaint,Ze=o.unstable_now,Qe=o.unstable_getCurrentPriorityLevel,Je=o.unstable_ImmediatePriority,et=o.unstable_UserBlockingPriority,tt=o.unstable_NormalPriority,rt=o.unstable_LowPriority,nt=o.unstable_IdlePriority,ot=null,it=null,at=Math.clz32?Math.clz32:function(e){return 0===(e>>>=0)?32:31-(st(e)/lt|0)|0},st=Math.log,lt=Math.LN2,ct=64,ut=4194304;function dt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function ft(e,t){var r=e.pendingLanes;if(0===r)return 0;var n=0,o=e.suspendedLanes,i=e.pingedLanes,a=268435455&r;if(0!==a){var s=a&~o;0!==s?n=dt(s):0!==(i&=a)&&(n=dt(i))}else 0!==(a=r&~o)?n=dt(a):0!==i&&(n=dt(i));if(0===n)return 0;if(0!==t&&t!==n&&0===(t&o)&&((o=n&-n)>=(i=t&-t)||16===o&&4194240&i))return t;if(4&n&&(n|=16&r),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=n;0<t;)o=1<<(r=31-at(t)),n|=e[r],t&=~o;return n}function ht(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function pt(e){return 0!=(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function mt(){var e=ct;return!(4194240&(ct<<=1))&&(ct=64),e}function gt(e){for(var t=[],r=0;31>r;r++)t.push(e);return t}function vt(e,t,r){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-at(t)]=r}function bt(e,t){var r=e.entangledLanes|=t;for(e=e.entanglements;r;){var n=31-at(r),o=1<<n;o&t|e[n]&t&&(e[n]|=t),r&=~o}}var yt=0;function wt(e){return 1<(e&=-e)?4<e?268435455&e?16:536870912:4:1}var xt,St,Ct,kt,Et,Ot=!1,At=[],Tt=null,jt=null,Pt=null,Mt=new Map,Rt=new Map,_t=[],It=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit\".split(\" \");function Nt(e,t){switch(e){case\"focusin\":case\"focusout\":Tt=null;break;case\"dragenter\":case\"dragleave\":jt=null;break;case\"mouseover\":case\"mouseout\":Pt=null;break;case\"pointerover\":case\"pointerout\":Mt.delete(t.pointerId);break;case\"gotpointercapture\":case\"lostpointercapture\":Rt.delete(t.pointerId)}}function Ft(e,t,r,n,o,i){return null===e||e.nativeEvent!==i?(e={blockedOn:t,domEventName:r,eventSystemFlags:n,nativeEvent:i,targetContainers:[o]},null!==t&&null!==(t=wo(t))&&St(t),e):(e.eventSystemFlags|=n,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function Dt(e){var t=yo(e.target);if(null!==t){var r=Ue(t);if(null!==r)if(13===(t=r.tag)){if(null!==(t=Ve(r)))return e.blockedOn=t,void Et(e.priority,(function(){Ct(r)}))}else if(3===t&&r.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===r.tag?r.stateNode.containerInfo:null)}e.blockedOn=null}function Bt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var r=Yt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==r)return null!==(t=wo(r))&&St(t),e.blockedOn=r,!1;var n=new(r=e.nativeEvent).constructor(r.type,r);we=n,r.target.dispatchEvent(n),we=null,t.shift()}return!0}function Lt(e,t,r){Bt(e)&&r.delete(t)}function zt(){Ot=!1,null!==Tt&&Bt(Tt)&&(Tt=null),null!==jt&&Bt(jt)&&(jt=null),null!==Pt&&Bt(Pt)&&(Pt=null),Mt.forEach(Lt),Rt.forEach(Lt)}function Ht(e,t){e.blockedOn===t&&(e.blockedOn=null,Ot||(Ot=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,zt)))}function Ut(e){function t(t){return Ht(t,e)}if(0<At.length){Ht(At[0],e);for(var r=1;r<At.length;r++){var n=At[r];n.blockedOn===e&&(n.blockedOn=null)}}for(null!==Tt&&Ht(Tt,e),null!==jt&&Ht(jt,e),null!==Pt&&Ht(Pt,e),Mt.forEach(t),Rt.forEach(t),r=0;r<_t.length;r++)(n=_t[r]).blockedOn===e&&(n.blockedOn=null);for(;0<_t.length&&null===(r=_t[0]).blockedOn;)Dt(r),null===r.blockedOn&&_t.shift()}var Vt=w.ReactCurrentBatchConfig,Wt=!0;function Gt(e,t,r,n){var o=yt,i=Vt.transition;Vt.transition=null;try{yt=1,Kt(e,t,r,n)}finally{yt=o,Vt.transition=i}}function qt(e,t,r,n){var o=yt,i=Vt.transition;Vt.transition=null;try{yt=4,Kt(e,t,r,n)}finally{yt=o,Vt.transition=i}}function Kt(e,t,r,n){if(Wt){var o=Yt(e,t,r,n);if(null===o)Wn(e,t,n,Xt,r),Nt(e,n);else if(function(e,t,r,n,o){switch(t){case\"focusin\":return Tt=Ft(Tt,e,t,r,n,o),!0;case\"dragenter\":return jt=Ft(jt,e,t,r,n,o),!0;case\"mouseover\":return Pt=Ft(Pt,e,t,r,n,o),!0;case\"pointerover\":var i=o.pointerId;return Mt.set(i,Ft(Mt.get(i)||null,e,t,r,n,o)),!0;case\"gotpointercapture\":return i=o.pointerId,Rt.set(i,Ft(Rt.get(i)||null,e,t,r,n,o)),!0}return!1}(o,e,t,r,n))n.stopPropagation();else if(Nt(e,n),4&t&&-1<It.indexOf(e)){for(;null!==o;){var i=wo(o);if(null!==i&&xt(i),null===(i=Yt(e,t,r,n))&&Wn(e,t,n,Xt,r),i===o)break;o=i}null!==o&&n.stopPropagation()}else Wn(e,t,n,null,r)}}var Xt=null;function Yt(e,t,r,n){if(Xt=null,null!==(e=yo(e=xe(n))))if(null===(t=Ue(e)))e=null;else if(13===(r=t.tag)){if(null!==(e=Ve(t)))return e;e=null}else if(3===r){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Xt=e,null}function $t(e){switch(e){case\"cancel\":case\"click\":case\"close\":case\"contextmenu\":case\"copy\":case\"cut\":case\"auxclick\":case\"dblclick\":case\"dragend\":case\"dragstart\":case\"drop\":case\"focusin\":case\"focusout\":case\"input\":case\"invalid\":case\"keydown\":case\"keypress\":case\"keyup\":case\"mousedown\":case\"mouseup\":case\"paste\":case\"pause\":case\"play\":case\"pointercancel\":case\"pointerdown\":case\"pointerup\":case\"ratechange\":case\"reset\":case\"resize\":case\"seeked\":case\"submit\":case\"touchcancel\":case\"touchend\":case\"touchstart\":case\"volumechange\":case\"change\":case\"selectionchange\":case\"textInput\":case\"compositionstart\":case\"compositionend\":case\"compositionupdate\":case\"beforeblur\":case\"afterblur\":case\"beforeinput\":case\"blur\":case\"fullscreenchange\":case\"focus\":case\"hashchange\":case\"popstate\":case\"select\":case\"selectstart\":return 1;case\"drag\":case\"dragenter\":case\"dragexit\":case\"dragleave\":case\"dragover\":case\"mousemove\":case\"mouseout\":case\"mouseover\":case\"pointermove\":case\"pointerout\":case\"pointerover\":case\"scroll\":case\"toggle\":case\"touchmove\":case\"wheel\":case\"mouseenter\":case\"mouseleave\":case\"pointerenter\":case\"pointerleave\":return 4;case\"message\":switch(Qe()){case Je:return 1;case et:return 4;case tt:case rt:return 16;case nt:return 536870912;default:return 16}default:return 16}}var Zt=null,Qt=null,Jt=null;function er(){if(Jt)return Jt;var e,t,r=Qt,n=r.length,o=\"value\"in Zt?Zt.value:Zt.textContent,i=o.length;for(e=0;e<n&&r[e]===o[e];e++);var a=n-e;for(t=1;t<=a&&r[n-t]===o[i-t];t++);return Jt=o.slice(e,1<t?1-t:void 0)}function tr(e){var t=e.keyCode;return\"charCode\"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function rr(){return!0}function nr(){return!1}function or(e){function t(t,r,n,o,i){for(var a in this._reactName=t,this._targetInst=n,this.type=r,this.nativeEvent=o,this.target=i,this.currentTarget=null,e)e.hasOwnProperty(a)&&(t=e[a],this[a]=t?t(o):o[a]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?rr:nr,this.isPropagationStopped=nr,this}return D(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():\"unknown\"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=rr)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():\"unknown\"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=rr)},persist:function(){},isPersistent:rr}),t}var ir,ar,sr,lr={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},cr=or(lr),ur=D({},lr,{view:0,detail:0}),dr=or(ur),fr=D({},ur,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:kr,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return\"movementX\"in e?e.movementX:(e!==sr&&(sr&&\"mousemove\"===e.type?(ir=e.screenX-sr.screenX,ar=e.screenY-sr.screenY):ar=ir=0,sr=e),ir)},movementY:function(e){return\"movementY\"in e?e.movementY:ar}}),hr=or(fr),pr=or(D({},fr,{dataTransfer:0})),mr=or(D({},ur,{relatedTarget:0})),gr=or(D({},lr,{animationName:0,elapsedTime:0,pseudoElement:0})),vr=D({},lr,{clipboardData:function(e){return\"clipboardData\"in e?e.clipboardData:window.clipboardData}}),br=or(vr),yr=or(D({},lr,{data:0})),wr={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},xr={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},Sr={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function Cr(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Sr[e])&&!!t[e]}function kr(){return Cr}var Er=D({},ur,{key:function(e){if(e.key){var t=wr[e.key]||e.key;if(\"Unidentified\"!==t)return t}return\"keypress\"===e.type?13===(e=tr(e))?\"Enter\":String.fromCharCode(e):\"keydown\"===e.type||\"keyup\"===e.type?xr[e.keyCode]||\"Unidentified\":\"\"},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:kr,charCode:function(e){return\"keypress\"===e.type?tr(e):0},keyCode:function(e){return\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0},which:function(e){return\"keypress\"===e.type?tr(e):\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0}}),Or=or(Er),Ar=or(D({},fr,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Tr=or(D({},ur,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:kr})),jr=or(D({},lr,{propertyName:0,elapsedTime:0,pseudoElement:0})),Pr=D({},fr,{deltaX:function(e){return\"deltaX\"in e?e.deltaX:\"wheelDeltaX\"in e?-e.wheelDeltaX:0},deltaY:function(e){return\"deltaY\"in e?e.deltaY:\"wheelDeltaY\"in e?-e.wheelDeltaY:\"wheelDelta\"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Mr=or(Pr),Rr=[9,13,27,32],_r=u&&\"CompositionEvent\"in window,Ir=null;u&&\"documentMode\"in document&&(Ir=document.documentMode);var Nr=u&&\"TextEvent\"in window&&!Ir,Fr=u&&(!_r||Ir&&8<Ir&&11>=Ir),Dr=String.fromCharCode(32),Br=!1;function Lr(e,t){switch(e){case\"keyup\":return-1!==Rr.indexOf(t.keyCode);case\"keydown\":return 229!==t.keyCode;case\"keypress\":case\"mousedown\":case\"focusout\":return!0;default:return!1}}function zr(e){return\"object\"==typeof(e=e.detail)&&\"data\"in e?e.data:null}var Hr=!1,Ur={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Vr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return\"input\"===t?!!Ur[e.type]:\"textarea\"===t}function Wr(e,t,r,n){Oe(n),0<(t=qn(t,\"onChange\")).length&&(r=new cr(\"onChange\",\"change\",null,r,n),e.push({event:r,listeners:t}))}var Gr=null,qr=null;function Kr(e){Bn(e,0)}function Xr(e){if(K(xo(e)))return e}function Yr(e,t){if(\"change\"===e)return t}var $r=!1;if(u){var Zr;if(u){var Qr=\"oninput\"in document;if(!Qr){var Jr=document.createElement(\"div\");Jr.setAttribute(\"oninput\",\"return;\"),Qr=\"function\"==typeof Jr.oninput}Zr=Qr}else Zr=!1;$r=Zr&&(!document.documentMode||9<document.documentMode)}function en(){Gr&&(Gr.detachEvent(\"onpropertychange\",tn),qr=Gr=null)}function tn(e){if(\"value\"===e.propertyName&&Xr(qr)){var t=[];Wr(t,qr,e,xe(e)),Me(Kr,t)}}function rn(e,t,r){\"focusin\"===e?(en(),qr=r,(Gr=t).attachEvent(\"onpropertychange\",tn)):\"focusout\"===e&&en()}function nn(e){if(\"selectionchange\"===e||\"keyup\"===e||\"keydown\"===e)return Xr(qr)}function on(e,t){if(\"click\"===e)return Xr(t)}function an(e,t){if(\"input\"===e||\"change\"===e)return Xr(t)}var sn=\"function\"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function ln(e,t){if(sn(e,t))return!0;if(\"object\"!=typeof e||null===e||\"object\"!=typeof t||null===t)return!1;var r=Object.keys(e),n=Object.keys(t);if(r.length!==n.length)return!1;for(n=0;n<r.length;n++){var o=r[n];if(!d.call(t,o)||!sn(e[o],t[o]))return!1}return!0}function cn(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function un(e,t){var r,n=cn(e);for(e=0;n;){if(3===n.nodeType){if(r=e+n.textContent.length,e<=t&&r>=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=cn(n)}}function dn(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?dn(e,t.parentNode):\"contains\"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function fn(){for(var e=window,t=X();t instanceof e.HTMLIFrameElement;){try{var r=\"string\"==typeof t.contentWindow.location.href}catch(e){r=!1}if(!r)break;t=X((e=t.contentWindow).document)}return t}function hn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(\"input\"===t&&(\"text\"===e.type||\"search\"===e.type||\"tel\"===e.type||\"url\"===e.type||\"password\"===e.type)||\"textarea\"===t||\"true\"===e.contentEditable)}function pn(e){var t=fn(),r=e.focusedElem,n=e.selectionRange;if(t!==r&&r&&r.ownerDocument&&dn(r.ownerDocument.documentElement,r)){if(null!==n&&hn(r))if(t=n.start,void 0===(e=n.end)&&(e=t),\"selectionStart\"in r)r.selectionStart=t,r.selectionEnd=Math.min(e,r.value.length);else if((e=(t=r.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var o=r.textContent.length,i=Math.min(n.start,o);n=void 0===n.end?i:Math.min(n.end,o),!e.extend&&i>n&&(o=n,n=i,i=o),o=un(r,i);var a=un(r,n);o&&a&&(1!==e.rangeCount||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==a.node||e.focusOffset!==a.offset)&&((t=t.createRange()).setStart(o.node,o.offset),e.removeAllRanges(),i>n?(e.addRange(t),e.extend(a.node,a.offset)):(t.setEnd(a.node,a.offset),e.addRange(t)))}for(t=[],e=r;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(\"function\"==typeof r.focus&&r.focus(),r=0;r<t.length;r++)(e=t[r]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var mn=u&&\"documentMode\"in document&&11>=document.documentMode,gn=null,vn=null,bn=null,yn=!1;function wn(e,t,r){var n=r.window===r?r.document:9===r.nodeType?r:r.ownerDocument;yn||null==gn||gn!==X(n)||(n=\"selectionStart\"in(n=gn)&&hn(n)?{start:n.selectionStart,end:n.selectionEnd}:{anchorNode:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset},bn&&ln(bn,n)||(bn=n,0<(n=qn(vn,\"onSelect\")).length&&(t=new cr(\"onSelect\",\"select\",null,t,r),e.push({event:t,listeners:n}),t.target=gn)))}function xn(e,t){var r={};return r[e.toLowerCase()]=t.toLowerCase(),r[\"Webkit\"+e]=\"webkit\"+t,r[\"Moz\"+e]=\"moz\"+t,r}var Sn={animationend:xn(\"Animation\",\"AnimationEnd\"),animationiteration:xn(\"Animation\",\"AnimationIteration\"),animationstart:xn(\"Animation\",\"AnimationStart\"),transitionend:xn(\"Transition\",\"TransitionEnd\")},Cn={},kn={};function En(e){if(Cn[e])return Cn[e];if(!Sn[e])return e;var t,r=Sn[e];for(t in r)if(r.hasOwnProperty(t)&&t in kn)return Cn[e]=r[t];return e}u&&(kn=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete Sn.animationend.animation,delete Sn.animationiteration.animation,delete Sn.animationstart.animation),\"TransitionEvent\"in window||delete Sn.transitionend.transition);var On=En(\"animationend\"),An=En(\"animationiteration\"),Tn=En(\"animationstart\"),jn=En(\"transitionend\"),Pn=new Map,Mn=\"abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\" \");function Rn(e,t){Pn.set(e,t),l(t,[e])}for(var _n=0;_n<Mn.length;_n++){var In=Mn[_n];Rn(In.toLowerCase(),\"on\"+(In[0].toUpperCase()+In.slice(1)))}Rn(On,\"onAnimationEnd\"),Rn(An,\"onAnimationIteration\"),Rn(Tn,\"onAnimationStart\"),Rn(\"dblclick\",\"onDoubleClick\"),Rn(\"focusin\",\"onFocus\"),Rn(\"focusout\",\"onBlur\"),Rn(jn,\"onTransitionEnd\"),c(\"onMouseEnter\",[\"mouseout\",\"mouseover\"]),c(\"onMouseLeave\",[\"mouseout\",\"mouseover\"]),c(\"onPointerEnter\",[\"pointerout\",\"pointerover\"]),c(\"onPointerLeave\",[\"pointerout\",\"pointerover\"]),l(\"onChange\",\"change click focusin focusout input keydown keyup selectionchange\".split(\" \")),l(\"onSelect\",\"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\" \")),l(\"onBeforeInput\",[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]),l(\"onCompositionEnd\",\"compositionend focusout keydown keypress keyup mousedown\".split(\" \")),l(\"onCompositionStart\",\"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")),l(\"onCompositionUpdate\",\"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \"));var Nn=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),Fn=new Set(\"cancel close invalid load scroll toggle\".split(\" \").concat(Nn));function Dn(e,t,r){var n=e.type||\"unknown-event\";e.currentTarget=r,function(e,t,r,n,o,a,s,l,c){if(He.apply(this,arguments),Fe){if(!Fe)throw Error(i(198));var u=De;Fe=!1,De=null,Be||(Be=!0,Le=u)}}(n,t,void 0,e),e.currentTarget=null}function Bn(e,t){t=!!(4&t);for(var r=0;r<e.length;r++){var n=e[r],o=n.event;n=n.listeners;e:{var i=void 0;if(t)for(var a=n.length-1;0<=a;a--){var s=n[a],l=s.instance,c=s.currentTarget;if(s=s.listener,l!==i&&o.isPropagationStopped())break e;Dn(o,s,c),i=l}else for(a=0;a<n.length;a++){if(l=(s=n[a]).instance,c=s.currentTarget,s=s.listener,l!==i&&o.isPropagationStopped())break e;Dn(o,s,c),i=l}}}if(Be)throw e=Le,Be=!1,Le=null,e}function Ln(e,t){var r=t[go];void 0===r&&(r=t[go]=new Set);var n=e+\"__bubble\";r.has(n)||(Vn(t,e,2,!1),r.add(n))}function zn(e,t,r){var n=0;t&&(n|=4),Vn(r,e,n,t)}var Hn=\"_reactListening\"+Math.random().toString(36).slice(2);function Un(e){if(!e[Hn]){e[Hn]=!0,a.forEach((function(t){\"selectionchange\"!==t&&(Fn.has(t)||zn(t,!1,e),zn(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[Hn]||(t[Hn]=!0,zn(\"selectionchange\",!1,t))}}function Vn(e,t,r,n){switch($t(t)){case 1:var o=Gt;break;case 4:o=qt;break;default:o=Kt}r=o.bind(null,t,r,e),o=void 0,!_e||\"touchstart\"!==t&&\"touchmove\"!==t&&\"wheel\"!==t||(o=!0),n?void 0!==o?e.addEventListener(t,r,{capture:!0,passive:o}):e.addEventListener(t,r,!0):void 0!==o?e.addEventListener(t,r,{passive:o}):e.addEventListener(t,r,!1)}function Wn(e,t,r,n,o){var i=n;if(!(1&t||2&t||null===n))e:for(;;){if(null===n)return;var a=n.tag;if(3===a||4===a){var s=n.stateNode.containerInfo;if(s===o||8===s.nodeType&&s.parentNode===o)break;if(4===a)for(a=n.return;null!==a;){var l=a.tag;if((3===l||4===l)&&((l=a.stateNode.containerInfo)===o||8===l.nodeType&&l.parentNode===o))return;a=a.return}for(;null!==s;){if(null===(a=yo(s)))return;if(5===(l=a.tag)||6===l){n=i=a;continue e}s=s.parentNode}}n=n.return}Me((function(){var n=i,o=xe(r),a=[];e:{var s=Pn.get(e);if(void 0!==s){var l=cr,c=e;switch(e){case\"keypress\":if(0===tr(r))break e;case\"keydown\":case\"keyup\":l=Or;break;case\"focusin\":c=\"focus\",l=mr;break;case\"focusout\":c=\"blur\",l=mr;break;case\"beforeblur\":case\"afterblur\":l=mr;break;case\"click\":if(2===r.button)break e;case\"auxclick\":case\"dblclick\":case\"mousedown\":case\"mousemove\":case\"mouseup\":case\"mouseout\":case\"mouseover\":case\"contextmenu\":l=hr;break;case\"drag\":case\"dragend\":case\"dragenter\":case\"dragexit\":case\"dragleave\":case\"dragover\":case\"dragstart\":case\"drop\":l=pr;break;case\"touchcancel\":case\"touchend\":case\"touchmove\":case\"touchstart\":l=Tr;break;case On:case An:case Tn:l=gr;break;case jn:l=jr;break;case\"scroll\":l=dr;break;case\"wheel\":l=Mr;break;case\"copy\":case\"cut\":case\"paste\":l=br;break;case\"gotpointercapture\":case\"lostpointercapture\":case\"pointercancel\":case\"pointerdown\":case\"pointermove\":case\"pointerout\":case\"pointerover\":case\"pointerup\":l=Ar}var u=!!(4&t),d=!u&&\"scroll\"===e,f=u?null!==s?s+\"Capture\":null:s;u=[];for(var h,p=n;null!==p;){var m=(h=p).stateNode;if(5===h.tag&&null!==m&&(h=m,null!==f&&null!=(m=Re(p,f))&&u.push(Gn(p,m,h))),d)break;p=p.return}0<u.length&&(s=new l(s,c,null,r,o),a.push({event:s,listeners:u}))}}if(!(7&t)){if(l=\"mouseout\"===e||\"pointerout\"===e,(!(s=\"mouseover\"===e||\"pointerover\"===e)||r===we||!(c=r.relatedTarget||r.fromElement)||!yo(c)&&!c[mo])&&(l||s)&&(s=o.window===o?o:(s=o.ownerDocument)?s.defaultView||s.parentWindow:window,l?(l=n,null!==(c=(c=r.relatedTarget||r.toElement)?yo(c):null)&&(c!==(d=Ue(c))||5!==c.tag&&6!==c.tag)&&(c=null)):(l=null,c=n),l!==c)){if(u=hr,m=\"onMouseLeave\",f=\"onMouseEnter\",p=\"mouse\",\"pointerout\"!==e&&\"pointerover\"!==e||(u=Ar,m=\"onPointerLeave\",f=\"onPointerEnter\",p=\"pointer\"),d=null==l?s:xo(l),h=null==c?s:xo(c),(s=new u(m,p+\"leave\",l,r,o)).target=d,s.relatedTarget=h,m=null,yo(o)===n&&((u=new u(f,p+\"enter\",c,r,o)).target=h,u.relatedTarget=d,m=u),d=m,l&&c)e:{for(f=c,p=0,h=u=l;h;h=Kn(h))p++;for(h=0,m=f;m;m=Kn(m))h++;for(;0<p-h;)u=Kn(u),p--;for(;0<h-p;)f=Kn(f),h--;for(;p--;){if(u===f||null!==f&&u===f.alternate)break e;u=Kn(u),f=Kn(f)}u=null}else u=null;null!==l&&Xn(a,s,l,u,!1),null!==c&&null!==d&&Xn(a,d,c,u,!0)}if(\"select\"===(l=(s=n?xo(n):window).nodeName&&s.nodeName.toLowerCase())||\"input\"===l&&\"file\"===s.type)var g=Yr;else if(Vr(s))if($r)g=an;else{g=nn;var v=rn}else(l=s.nodeName)&&\"input\"===l.toLowerCase()&&(\"checkbox\"===s.type||\"radio\"===s.type)&&(g=on);switch(g&&(g=g(e,n))?Wr(a,g,r,o):(v&&v(e,s,n),\"focusout\"===e&&(v=s._wrapperState)&&v.controlled&&\"number\"===s.type&&ee(s,\"number\",s.value)),v=n?xo(n):window,e){case\"focusin\":(Vr(v)||\"true\"===v.contentEditable)&&(gn=v,vn=n,bn=null);break;case\"focusout\":bn=vn=gn=null;break;case\"mousedown\":yn=!0;break;case\"contextmenu\":case\"mouseup\":case\"dragend\":yn=!1,wn(a,r,o);break;case\"selectionchange\":if(mn)break;case\"keydown\":case\"keyup\":wn(a,r,o)}var b;if(_r)e:{switch(e){case\"compositionstart\":var y=\"onCompositionStart\";break e;case\"compositionend\":y=\"onCompositionEnd\";break e;case\"compositionupdate\":y=\"onCompositionUpdate\";break e}y=void 0}else Hr?Lr(e,r)&&(y=\"onCompositionEnd\"):\"keydown\"===e&&229===r.keyCode&&(y=\"onCompositionStart\");y&&(Fr&&\"ko\"!==r.locale&&(Hr||\"onCompositionStart\"!==y?\"onCompositionEnd\"===y&&Hr&&(b=er()):(Qt=\"value\"in(Zt=o)?Zt.value:Zt.textContent,Hr=!0)),0<(v=qn(n,y)).length&&(y=new yr(y,e,null,r,o),a.push({event:y,listeners:v}),(b||null!==(b=zr(r)))&&(y.data=b))),(b=Nr?function(e,t){switch(e){case\"compositionend\":return zr(t);case\"keypress\":return 32!==t.which?null:(Br=!0,Dr);case\"textInput\":return(e=t.data)===Dr&&Br?null:e;default:return null}}(e,r):function(e,t){if(Hr)return\"compositionend\"===e||!_r&&Lr(e,t)?(e=er(),Jt=Qt=Zt=null,Hr=!1,e):null;switch(e){case\"paste\":default:return null;case\"keypress\":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case\"compositionend\":return Fr&&\"ko\"!==t.locale?null:t.data}}(e,r))&&0<(n=qn(n,\"onBeforeInput\")).length&&(o=new yr(\"onBeforeInput\",\"beforeinput\",null,r,o),a.push({event:o,listeners:n}),o.data=b)}Bn(a,t)}))}function Gn(e,t,r){return{instance:e,listener:t,currentTarget:r}}function qn(e,t){for(var r=t+\"Capture\",n=[];null!==e;){var o=e,i=o.stateNode;5===o.tag&&null!==i&&(o=i,null!=(i=Re(e,r))&&n.unshift(Gn(e,i,o)),null!=(i=Re(e,t))&&n.push(Gn(e,i,o))),e=e.return}return n}function Kn(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Xn(e,t,r,n,o){for(var i=t._reactName,a=[];null!==r&&r!==n;){var s=r,l=s.alternate,c=s.stateNode;if(null!==l&&l===n)break;5===s.tag&&null!==c&&(s=c,o?null!=(l=Re(r,i))&&a.unshift(Gn(r,l,s)):o||null!=(l=Re(r,i))&&a.push(Gn(r,l,s))),r=r.return}0!==a.length&&e.push({event:t,listeners:a})}var Yn=/\\r\\n?/g,$n=/\\u0000|\\uFFFD/g;function Zn(e){return(\"string\"==typeof e?e:\"\"+e).replace(Yn,\"\\n\").replace($n,\"\")}function Qn(e,t,r){if(t=Zn(t),Zn(e)!==t&&r)throw Error(i(425))}function Jn(){}var eo=null,to=null;function ro(e,t){return\"textarea\"===e||\"noscript\"===e||\"string\"==typeof t.children||\"number\"==typeof t.children||\"object\"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var no=\"function\"==typeof setTimeout?setTimeout:void 0,oo=\"function\"==typeof clearTimeout?clearTimeout:void 0,io=\"function\"==typeof Promise?Promise:void 0,ao=\"function\"==typeof queueMicrotask?queueMicrotask:void 0!==io?function(e){return io.resolve(null).then(e).catch(so)}:no;function so(e){setTimeout((function(){throw e}))}function lo(e,t){var r=t,n=0;do{var o=r.nextSibling;if(e.removeChild(r),o&&8===o.nodeType)if(\"/$\"===(r=o.data)){if(0===n)return e.removeChild(o),void Ut(t);n--}else\"$\"!==r&&\"$?\"!==r&&\"$!\"!==r||n++;r=o}while(r);Ut(t)}function co(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if(\"$\"===(t=e.data)||\"$!\"===t||\"$?\"===t)break;if(\"/$\"===t)return null}}return e}function uo(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var r=e.data;if(\"$\"===r||\"$!\"===r||\"$?\"===r){if(0===t)return e;t--}else\"/$\"===r&&t++}e=e.previousSibling}return null}var fo=Math.random().toString(36).slice(2),ho=\"__reactFiber$\"+fo,po=\"__reactProps$\"+fo,mo=\"__reactContainer$\"+fo,go=\"__reactEvents$\"+fo,vo=\"__reactListeners$\"+fo,bo=\"__reactHandles$\"+fo;function yo(e){var t=e[ho];if(t)return t;for(var r=e.parentNode;r;){if(t=r[mo]||r[ho]){if(r=t.alternate,null!==t.child||null!==r&&null!==r.child)for(e=uo(e);null!==e;){if(r=e[ho])return r;e=uo(e)}return t}r=(e=r).parentNode}return null}function wo(e){return!(e=e[ho]||e[mo])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function xo(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function So(e){return e[po]||null}var Co=[],ko=-1;function Eo(e){return{current:e}}function Oo(e){0>ko||(e.current=Co[ko],Co[ko]=null,ko--)}function Ao(e,t){ko++,Co[ko]=e.current,e.current=t}var To={},jo=Eo(To),Po=Eo(!1),Mo=To;function Ro(e,t){var r=e.type.contextTypes;if(!r)return To;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===t)return n.__reactInternalMemoizedMaskedChildContext;var o,i={};for(o in r)i[o]=t[o];return n&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function _o(e){return null!=e.childContextTypes}function Io(){Oo(Po),Oo(jo)}function No(e,t,r){if(jo.current!==To)throw Error(i(168));Ao(jo,t),Ao(Po,r)}function Fo(e,t,r){var n=e.stateNode;if(t=t.childContextTypes,\"function\"!=typeof n.getChildContext)return r;for(var o in n=n.getChildContext())if(!(o in t))throw Error(i(108,V(e)||\"Unknown\",o));return D({},r,n)}function Do(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||To,Mo=jo.current,Ao(jo,e),Ao(Po,Po.current),!0}function Bo(e,t,r){var n=e.stateNode;if(!n)throw Error(i(169));r?(e=Fo(e,t,Mo),n.__reactInternalMemoizedMergedChildContext=e,Oo(Po),Oo(jo),Ao(jo,e)):Oo(Po),Ao(Po,r)}var Lo=null,zo=!1,Ho=!1;function Uo(e){null===Lo?Lo=[e]:Lo.push(e)}function Vo(){if(!Ho&&null!==Lo){Ho=!0;var e=0,t=yt;try{var r=Lo;for(yt=1;e<r.length;e++){var n=r[e];do{n=n(!0)}while(null!==n)}Lo=null,zo=!1}catch(t){throw null!==Lo&&(Lo=Lo.slice(e+1)),Ke(Je,Vo),t}finally{yt=t,Ho=!1}}return null}var Wo=[],Go=0,qo=null,Ko=0,Xo=[],Yo=0,$o=null,Zo=1,Qo=\"\";function Jo(e,t){Wo[Go++]=Ko,Wo[Go++]=qo,qo=e,Ko=t}function ei(e,t,r){Xo[Yo++]=Zo,Xo[Yo++]=Qo,Xo[Yo++]=$o,$o=e;var n=Zo;e=Qo;var o=32-at(n)-1;n&=~(1<<o),r+=1;var i=32-at(t)+o;if(30<i){var a=o-o%5;i=(n&(1<<a)-1).toString(32),n>>=a,o-=a,Zo=1<<32-at(t)+o|r<<o|n,Qo=i+e}else Zo=1<<i|r<<o|n,Qo=e}function ti(e){null!==e.return&&(Jo(e,1),ei(e,1,0))}function ri(e){for(;e===qo;)qo=Wo[--Go],Wo[Go]=null,Ko=Wo[--Go],Wo[Go]=null;for(;e===$o;)$o=Xo[--Yo],Xo[Yo]=null,Qo=Xo[--Yo],Xo[Yo]=null,Zo=Xo[--Yo],Xo[Yo]=null}var ni=null,oi=null,ii=!1,ai=null;function si(e,t){var r=Mc(5,null,null,0);r.elementType=\"DELETED\",r.stateNode=t,r.return=e,null===(t=e.deletions)?(e.deletions=[r],e.flags|=16):t.push(r)}function li(e,t){switch(e.tag){case 5:var r=e.type;return null!==(t=1!==t.nodeType||r.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,ni=e,oi=co(t.firstChild),!0);case 6:return null!==(t=\"\"===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,ni=e,oi=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(r=null!==$o?{id:Zo,overflow:Qo}:null,e.memoizedState={dehydrated:t,treeContext:r,retryLane:1073741824},(r=Mc(18,null,null,0)).stateNode=t,r.return=e,e.child=r,ni=e,oi=null,!0);default:return!1}}function ci(e){return!(!(1&e.mode)||128&e.flags)}function ui(e){if(ii){var t=oi;if(t){var r=t;if(!li(e,t)){if(ci(e))throw Error(i(418));t=co(r.nextSibling);var n=ni;t&&li(e,t)?si(n,r):(e.flags=-4097&e.flags|2,ii=!1,ni=e)}}else{if(ci(e))throw Error(i(418));e.flags=-4097&e.flags|2,ii=!1,ni=e}}}function di(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;ni=e}function fi(e){if(e!==ni)return!1;if(!ii)return di(e),ii=!0,!1;var t;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t=\"head\"!==(t=e.type)&&\"body\"!==t&&!ro(e.type,e.memoizedProps)),t&&(t=oi)){if(ci(e))throw hi(),Error(i(418));for(;t;)si(e,t),t=co(t.nextSibling)}if(di(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var r=e.data;if(\"/$\"===r){if(0===t){oi=co(e.nextSibling);break e}t--}else\"$\"!==r&&\"$!\"!==r&&\"$?\"!==r||t++}e=e.nextSibling}oi=null}}else oi=ni?co(e.stateNode.nextSibling):null;return!0}function hi(){for(var e=oi;e;)e=co(e.nextSibling)}function pi(){oi=ni=null,ii=!1}function mi(e){null===ai?ai=[e]:ai.push(e)}var gi=w.ReactCurrentBatchConfig;function vi(e,t,r){if(null!==(e=r.ref)&&\"function\"!=typeof e&&\"object\"!=typeof e){if(r._owner){if(r=r._owner){if(1!==r.tag)throw Error(i(309));var n=r.stateNode}if(!n)throw Error(i(147,e));var o=n,a=\"\"+e;return null!==t&&null!==t.ref&&\"function\"==typeof t.ref&&t.ref._stringRef===a?t.ref:(t=function(e){var t=o.refs;null===e?delete t[a]:t[a]=e},t._stringRef=a,t)}if(\"string\"!=typeof e)throw Error(i(284));if(!r._owner)throw Error(i(290,e))}return e}function bi(e,t){throw e=Object.prototype.toString.call(t),Error(i(31,\"[object Object]\"===e?\"object with keys {\"+Object.keys(t).join(\", \")+\"}\":e))}function yi(e){return(0,e._init)(e._payload)}function wi(e){function t(t,r){if(e){var n=t.deletions;null===n?(t.deletions=[r],t.flags|=16):n.push(r)}}function r(r,n){if(!e)return null;for(;null!==n;)t(r,n),n=n.sibling;return null}function n(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=_c(e,t)).index=0,e.sibling=null,e}function a(t,r,n){return t.index=n,e?null!==(n=t.alternate)?(n=n.index)<r?(t.flags|=2,r):n:(t.flags|=2,r):(t.flags|=1048576,r)}function s(t){return e&&null===t.alternate&&(t.flags|=2),t}function l(e,t,r,n){return null===t||6!==t.tag?((t=Dc(r,e.mode,n)).return=e,t):((t=o(t,r)).return=e,t)}function c(e,t,r,n){var i=r.type;return i===C?d(e,t,r.props.children,n,r.key):null!==t&&(t.elementType===i||\"object\"==typeof i&&null!==i&&i.$$typeof===R&&yi(i)===t.type)?((n=o(t,r.props)).ref=vi(e,t,r),n.return=e,n):((n=Ic(r.type,r.key,r.props,null,e.mode,n)).ref=vi(e,t,r),n.return=e,n)}function u(e,t,r,n){return null===t||4!==t.tag||t.stateNode.containerInfo!==r.containerInfo||t.stateNode.implementation!==r.implementation?((t=Bc(r,e.mode,n)).return=e,t):((t=o(t,r.children||[])).return=e,t)}function d(e,t,r,n,i){return null===t||7!==t.tag?((t=Nc(r,e.mode,n,i)).return=e,t):((t=o(t,r)).return=e,t)}function f(e,t,r){if(\"string\"==typeof t&&\"\"!==t||\"number\"==typeof t)return(t=Dc(\"\"+t,e.mode,r)).return=e,t;if(\"object\"==typeof t&&null!==t){switch(t.$$typeof){case x:return(r=Ic(t.type,t.key,t.props,null,e.mode,r)).ref=vi(e,null,t),r.return=e,r;case S:return(t=Bc(t,e.mode,r)).return=e,t;case R:return f(e,(0,t._init)(t._payload),r)}if(te(t)||N(t))return(t=Nc(t,e.mode,r,null)).return=e,t;bi(e,t)}return null}function h(e,t,r,n){var o=null!==t?t.key:null;if(\"string\"==typeof r&&\"\"!==r||\"number\"==typeof r)return null!==o?null:l(e,t,\"\"+r,n);if(\"object\"==typeof r&&null!==r){switch(r.$$typeof){case x:return r.key===o?c(e,t,r,n):null;case S:return r.key===o?u(e,t,r,n):null;case R:return h(e,t,(o=r._init)(r._payload),n)}if(te(r)||N(r))return null!==o?null:d(e,t,r,n,null);bi(e,r)}return null}function p(e,t,r,n,o){if(\"string\"==typeof n&&\"\"!==n||\"number\"==typeof n)return l(t,e=e.get(r)||null,\"\"+n,o);if(\"object\"==typeof n&&null!==n){switch(n.$$typeof){case x:return c(t,e=e.get(null===n.key?r:n.key)||null,n,o);case S:return u(t,e=e.get(null===n.key?r:n.key)||null,n,o);case R:return p(e,t,r,(0,n._init)(n._payload),o)}if(te(n)||N(n))return d(t,e=e.get(r)||null,n,o,null);bi(t,n)}return null}function m(o,i,s,l){for(var c=null,u=null,d=i,m=i=0,g=null;null!==d&&m<s.length;m++){d.index>m?(g=d,d=null):g=d.sibling;var v=h(o,d,s[m],l);if(null===v){null===d&&(d=g);break}e&&d&&null===v.alternate&&t(o,d),i=a(v,i,m),null===u?c=v:u.sibling=v,u=v,d=g}if(m===s.length)return r(o,d),ii&&Jo(o,m),c;if(null===d){for(;m<s.length;m++)null!==(d=f(o,s[m],l))&&(i=a(d,i,m),null===u?c=d:u.sibling=d,u=d);return ii&&Jo(o,m),c}for(d=n(o,d);m<s.length;m++)null!==(g=p(d,o,m,s[m],l))&&(e&&null!==g.alternate&&d.delete(null===g.key?m:g.key),i=a(g,i,m),null===u?c=g:u.sibling=g,u=g);return e&&d.forEach((function(e){return t(o,e)})),ii&&Jo(o,m),c}function g(o,s,l,c){var u=N(l);if(\"function\"!=typeof u)throw Error(i(150));if(null==(l=u.call(l)))throw Error(i(151));for(var d=u=null,m=s,g=s=0,v=null,b=l.next();null!==m&&!b.done;g++,b=l.next()){m.index>g?(v=m,m=null):v=m.sibling;var y=h(o,m,b.value,c);if(null===y){null===m&&(m=v);break}e&&m&&null===y.alternate&&t(o,m),s=a(y,s,g),null===d?u=y:d.sibling=y,d=y,m=v}if(b.done)return r(o,m),ii&&Jo(o,g),u;if(null===m){for(;!b.done;g++,b=l.next())null!==(b=f(o,b.value,c))&&(s=a(b,s,g),null===d?u=b:d.sibling=b,d=b);return ii&&Jo(o,g),u}for(m=n(o,m);!b.done;g++,b=l.next())null!==(b=p(m,o,g,b.value,c))&&(e&&null!==b.alternate&&m.delete(null===b.key?g:b.key),s=a(b,s,g),null===d?u=b:d.sibling=b,d=b);return e&&m.forEach((function(e){return t(o,e)})),ii&&Jo(o,g),u}return function e(n,i,a,l){if(\"object\"==typeof a&&null!==a&&a.type===C&&null===a.key&&(a=a.props.children),\"object\"==typeof a&&null!==a){switch(a.$$typeof){case x:e:{for(var c=a.key,u=i;null!==u;){if(u.key===c){if((c=a.type)===C){if(7===u.tag){r(n,u.sibling),(i=o(u,a.props.children)).return=n,n=i;break e}}else if(u.elementType===c||\"object\"==typeof c&&null!==c&&c.$$typeof===R&&yi(c)===u.type){r(n,u.sibling),(i=o(u,a.props)).ref=vi(n,u,a),i.return=n,n=i;break e}r(n,u);break}t(n,u),u=u.sibling}a.type===C?((i=Nc(a.props.children,n.mode,l,a.key)).return=n,n=i):((l=Ic(a.type,a.key,a.props,null,n.mode,l)).ref=vi(n,i,a),l.return=n,n=l)}return s(n);case S:e:{for(u=a.key;null!==i;){if(i.key===u){if(4===i.tag&&i.stateNode.containerInfo===a.containerInfo&&i.stateNode.implementation===a.implementation){r(n,i.sibling),(i=o(i,a.children||[])).return=n,n=i;break e}r(n,i);break}t(n,i),i=i.sibling}(i=Bc(a,n.mode,l)).return=n,n=i}return s(n);case R:return e(n,i,(u=a._init)(a._payload),l)}if(te(a))return m(n,i,a,l);if(N(a))return g(n,i,a,l);bi(n,a)}return\"string\"==typeof a&&\"\"!==a||\"number\"==typeof a?(a=\"\"+a,null!==i&&6===i.tag?(r(n,i.sibling),(i=o(i,a)).return=n,n=i):(r(n,i),(i=Dc(a,n.mode,l)).return=n,n=i),s(n)):r(n,i)}}var xi=wi(!0),Si=wi(!1),Ci=Eo(null),ki=null,Ei=null,Oi=null;function Ai(){Oi=Ei=ki=null}function Ti(e){var t=Ci.current;Oo(Ci),e._currentValue=t}function ji(e,t,r){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==n&&(n.childLanes|=t)):null!==n&&(n.childLanes&t)!==t&&(n.childLanes|=t),e===r)break;e=e.return}}function Pi(e,t){ki=e,Oi=Ei=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!==(e.lanes&t)&&(ys=!0),e.firstContext=null)}function Mi(e){var t=e._currentValue;if(Oi!==e)if(e={context:e,memoizedValue:t,next:null},null===Ei){if(null===ki)throw Error(i(308));Ei=e,ki.dependencies={lanes:0,firstContext:e}}else Ei=Ei.next=e;return t}var Ri=null;function _i(e){null===Ri?Ri=[e]:Ri.push(e)}function Ii(e,t,r,n){var o=t.interleaved;return null===o?(r.next=r,_i(t)):(r.next=o.next,o.next=r),t.interleaved=r,Ni(e,n)}function Ni(e,t){e.lanes|=t;var r=e.alternate;for(null!==r&&(r.lanes|=t),r=e,e=e.return;null!==e;)e.childLanes|=t,null!==(r=e.alternate)&&(r.childLanes|=t),r=e,e=e.return;return 3===r.tag?r.stateNode:null}var Fi=!1;function Di(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Bi(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Li(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function zi(e,t,r){var n=e.updateQueue;if(null===n)return null;if(n=n.shared,2&Tl){var o=n.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),n.pending=t,Ni(e,r)}return null===(o=n.interleaved)?(t.next=t,_i(n)):(t.next=o.next,o.next=t),n.interleaved=t,Ni(e,r)}function Hi(e,t,r){if(null!==(t=t.updateQueue)&&(t=t.shared,4194240&r)){var n=t.lanes;r|=n&=e.pendingLanes,t.lanes=r,bt(e,r)}}function Ui(e,t){var r=e.updateQueue,n=e.alternate;if(null!==n&&r===(n=n.updateQueue)){var o=null,i=null;if(null!==(r=r.firstBaseUpdate)){do{var a={eventTime:r.eventTime,lane:r.lane,tag:r.tag,payload:r.payload,callback:r.callback,next:null};null===i?o=i=a:i=i.next=a,r=r.next}while(null!==r);null===i?o=i=t:i=i.next=t}else o=i=t;return r={baseState:n.baseState,firstBaseUpdate:o,lastBaseUpdate:i,shared:n.shared,effects:n.effects},void(e.updateQueue=r)}null===(e=r.lastBaseUpdate)?r.firstBaseUpdate=t:e.next=t,r.lastBaseUpdate=t}function Vi(e,t,r,n){var o=e.updateQueue;Fi=!1;var i=o.firstBaseUpdate,a=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var l=s,c=l.next;l.next=null,null===a?i=c:a.next=c,a=l;var u=e.alternate;null!==u&&(s=(u=u.updateQueue).lastBaseUpdate)!==a&&(null===s?u.firstBaseUpdate=c:s.next=c,u.lastBaseUpdate=l)}if(null!==i){var d=o.baseState;for(a=0,u=c=l=null,s=i;;){var f=s.lane,h=s.eventTime;if((n&f)===f){null!==u&&(u=u.next={eventTime:h,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var p=e,m=s;switch(f=t,h=r,m.tag){case 1:if(\"function\"==typeof(p=m.payload)){d=p.call(h,d,f);break e}d=p;break e;case 3:p.flags=-65537&p.flags|128;case 0:if(null==(f=\"function\"==typeof(p=m.payload)?p.call(h,d,f):p))break e;d=D({},d,f);break e;case 2:Fi=!0}}null!==s.callback&&0!==s.lane&&(e.flags|=64,null===(f=o.effects)?o.effects=[s]:f.push(s))}else h={eventTime:h,lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},null===u?(c=u=h,l=d):u=u.next=h,a|=f;if(null===(s=s.next)){if(null===(s=o.shared.pending))break;s=(f=s).next,f.next=null,o.lastBaseUpdate=f,o.shared.pending=null}}if(null===u&&(l=d),o.baseState=l,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null!==(t=o.shared.interleaved)){o=t;do{a|=o.lane,o=o.next}while(o!==t)}else null===i&&(o.shared.lanes=0);Fl|=a,e.lanes=a,e.memoizedState=d}}function Wi(e,t,r){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var n=e[t],o=n.callback;if(null!==o){if(n.callback=null,n=r,\"function\"!=typeof o)throw Error(i(191,o));o.call(n)}}}var Gi={},qi=Eo(Gi),Ki=Eo(Gi),Xi=Eo(Gi);function Yi(e){if(e===Gi)throw Error(i(174));return e}function $i(e,t){switch(Ao(Xi,t),Ao(Ki,e),Ao(qi,Gi),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:le(null,\"\");break;default:t=le(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}Oo(qi),Ao(qi,t)}function Zi(){Oo(qi),Oo(Ki),Oo(Xi)}function Qi(e){Yi(Xi.current);var t=Yi(qi.current),r=le(t,e.type);t!==r&&(Ao(Ki,e),Ao(qi,r))}function Ji(e){Ki.current===e&&(Oo(qi),Oo(Ki))}var ea=Eo(0);function ta(e){for(var t=e;null!==t;){if(13===t.tag){var r=t.memoizedState;if(null!==r&&(null===(r=r.dehydrated)||\"$?\"===r.data||\"$!\"===r.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(128&t.flags)return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var ra=[];function na(){for(var e=0;e<ra.length;e++)ra[e]._workInProgressVersionPrimary=null;ra.length=0}var oa=w.ReactCurrentDispatcher,ia=w.ReactCurrentBatchConfig,aa=0,sa=null,la=null,ca=null,ua=!1,da=!1,fa=0,ha=0;function pa(){throw Error(i(321))}function ma(e,t){if(null===t)return!1;for(var r=0;r<t.length&&r<e.length;r++)if(!sn(e[r],t[r]))return!1;return!0}function ga(e,t,r,n,o,a){if(aa=a,sa=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,oa.current=null===e||null===e.memoizedState?Ja:es,e=r(n,o),da){a=0;do{if(da=!1,fa=0,25<=a)throw Error(i(301));a+=1,ca=la=null,t.updateQueue=null,oa.current=ts,e=r(n,o)}while(da)}if(oa.current=Qa,t=null!==la&&null!==la.next,aa=0,ca=la=sa=null,ua=!1,t)throw Error(i(300));return e}function va(){var e=0!==fa;return fa=0,e}function ba(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ca?sa.memoizedState=ca=e:ca=ca.next=e,ca}function ya(){if(null===la){var e=sa.alternate;e=null!==e?e.memoizedState:null}else e=la.next;var t=null===ca?sa.memoizedState:ca.next;if(null!==t)ca=t,la=e;else{if(null===e)throw Error(i(310));e={memoizedState:(la=e).memoizedState,baseState:la.baseState,baseQueue:la.baseQueue,queue:la.queue,next:null},null===ca?sa.memoizedState=ca=e:ca=ca.next=e}return ca}function wa(e,t){return\"function\"==typeof t?t(e):t}function xa(e){var t=ya(),r=t.queue;if(null===r)throw Error(i(311));r.lastRenderedReducer=e;var n=la,o=n.baseQueue,a=r.pending;if(null!==a){if(null!==o){var s=o.next;o.next=a.next,a.next=s}n.baseQueue=o=a,r.pending=null}if(null!==o){a=o.next,n=n.baseState;var l=s=null,c=null,u=a;do{var d=u.lane;if((aa&d)===d)null!==c&&(c=c.next={lane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),n=u.hasEagerState?u.eagerState:e(n,u.action);else{var f={lane:d,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null};null===c?(l=c=f,s=n):c=c.next=f,sa.lanes|=d,Fl|=d}u=u.next}while(null!==u&&u!==a);null===c?s=n:c.next=l,sn(n,t.memoizedState)||(ys=!0),t.memoizedState=n,t.baseState=s,t.baseQueue=c,r.lastRenderedState=n}if(null!==(e=r.interleaved)){o=e;do{a=o.lane,sa.lanes|=a,Fl|=a,o=o.next}while(o!==e)}else null===o&&(r.lanes=0);return[t.memoizedState,r.dispatch]}function Sa(e){var t=ya(),r=t.queue;if(null===r)throw Error(i(311));r.lastRenderedReducer=e;var n=r.dispatch,o=r.pending,a=t.memoizedState;if(null!==o){r.pending=null;var s=o=o.next;do{a=e(a,s.action),s=s.next}while(s!==o);sn(a,t.memoizedState)||(ys=!0),t.memoizedState=a,null===t.baseQueue&&(t.baseState=a),r.lastRenderedState=a}return[a,n]}function Ca(){}function ka(e,t){var r=sa,n=ya(),o=t(),a=!sn(n.memoizedState,o);if(a&&(n.memoizedState=o,ys=!0),n=n.queue,Fa(Aa.bind(null,r,n,e),[e]),n.getSnapshot!==t||a||null!==ca&&1&ca.memoizedState.tag){if(r.flags|=2048,Ma(9,Oa.bind(null,r,n,o,t),void 0,null),null===jl)throw Error(i(349));30&aa||Ea(r,t,o)}return o}function Ea(e,t,r){e.flags|=16384,e={getSnapshot:t,value:r},null===(t=sa.updateQueue)?(t={lastEffect:null,stores:null},sa.updateQueue=t,t.stores=[e]):null===(r=t.stores)?t.stores=[e]:r.push(e)}function Oa(e,t,r,n){t.value=r,t.getSnapshot=n,Ta(t)&&ja(e)}function Aa(e,t,r){return r((function(){Ta(t)&&ja(e)}))}function Ta(e){var t=e.getSnapshot;e=e.value;try{var r=t();return!sn(e,r)}catch(e){return!0}}function ja(e){var t=Ni(e,1);null!==t&&rc(t,e,1,-1)}function Pa(e){var t=ba();return\"function\"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:wa,lastRenderedState:e},t.queue=e,e=e.dispatch=Xa.bind(null,sa,e),[t.memoizedState,e]}function Ma(e,t,r,n){return e={tag:e,create:t,destroy:r,deps:n,next:null},null===(t=sa.updateQueue)?(t={lastEffect:null,stores:null},sa.updateQueue=t,t.lastEffect=e.next=e):null===(r=t.lastEffect)?t.lastEffect=e.next=e:(n=r.next,r.next=e,e.next=n,t.lastEffect=e),e}function Ra(){return ya().memoizedState}function _a(e,t,r,n){var o=ba();sa.flags|=e,o.memoizedState=Ma(1|t,r,void 0,void 0===n?null:n)}function Ia(e,t,r,n){var o=ya();n=void 0===n?null:n;var i=void 0;if(null!==la){var a=la.memoizedState;if(i=a.destroy,null!==n&&ma(n,a.deps))return void(o.memoizedState=Ma(t,r,i,n))}sa.flags|=e,o.memoizedState=Ma(1|t,r,i,n)}function Na(e,t){return _a(8390656,8,e,t)}function Fa(e,t){return Ia(2048,8,e,t)}function Da(e,t){return Ia(4,2,e,t)}function Ba(e,t){return Ia(4,4,e,t)}function La(e,t){return\"function\"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function za(e,t,r){return r=null!=r?r.concat([e]):null,Ia(4,4,La.bind(null,t,e),r)}function Ha(){}function Ua(e,t){var r=ya();t=void 0===t?null:t;var n=r.memoizedState;return null!==n&&null!==t&&ma(t,n[1])?n[0]:(r.memoizedState=[e,t],e)}function Va(e,t){var r=ya();t=void 0===t?null:t;var n=r.memoizedState;return null!==n&&null!==t&&ma(t,n[1])?n[0]:(e=e(),r.memoizedState=[e,t],e)}function Wa(e,t,r){return 21&aa?(sn(r,t)||(r=mt(),sa.lanes|=r,Fl|=r,e.baseState=!0),t):(e.baseState&&(e.baseState=!1,ys=!0),e.memoizedState=r)}function Ga(e,t){var r=yt;yt=0!==r&&4>r?r:4,e(!0);var n=ia.transition;ia.transition={};try{e(!1),t()}finally{yt=r,ia.transition=n}}function qa(){return ya().memoizedState}function Ka(e,t,r){var n=tc(e);r={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null},Ya(e)?$a(t,r):null!==(r=Ii(e,t,r,n))&&(rc(r,e,n,ec()),Za(r,t,n))}function Xa(e,t,r){var n=tc(e),o={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null};if(Ya(e))$a(t,o);else{var i=e.alternate;if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var a=t.lastRenderedState,s=i(a,r);if(o.hasEagerState=!0,o.eagerState=s,sn(s,a)){var l=t.interleaved;return null===l?(o.next=o,_i(t)):(o.next=l.next,l.next=o),void(t.interleaved=o)}}catch(e){}null!==(r=Ii(e,t,o,n))&&(rc(r,e,n,o=ec()),Za(r,t,n))}}function Ya(e){var t=e.alternate;return e===sa||null!==t&&t===sa}function $a(e,t){da=ua=!0;var r=e.pending;null===r?t.next=t:(t.next=r.next,r.next=t),e.pending=t}function Za(e,t,r){if(4194240&r){var n=t.lanes;r|=n&=e.pendingLanes,t.lanes=r,bt(e,r)}}var Qa={readContext:Mi,useCallback:pa,useContext:pa,useEffect:pa,useImperativeHandle:pa,useInsertionEffect:pa,useLayoutEffect:pa,useMemo:pa,useReducer:pa,useRef:pa,useState:pa,useDebugValue:pa,useDeferredValue:pa,useTransition:pa,useMutableSource:pa,useSyncExternalStore:pa,useId:pa,unstable_isNewReconciler:!1},Ja={readContext:Mi,useCallback:function(e,t){return ba().memoizedState=[e,void 0===t?null:t],e},useContext:Mi,useEffect:Na,useImperativeHandle:function(e,t,r){return r=null!=r?r.concat([e]):null,_a(4194308,4,La.bind(null,t,e),r)},useLayoutEffect:function(e,t){return _a(4194308,4,e,t)},useInsertionEffect:function(e,t){return _a(4,2,e,t)},useMemo:function(e,t){var r=ba();return t=void 0===t?null:t,e=e(),r.memoizedState=[e,t],e},useReducer:function(e,t,r){var n=ba();return t=void 0!==r?r(t):t,n.memoizedState=n.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},n.queue=e,e=e.dispatch=Ka.bind(null,sa,e),[n.memoizedState,e]},useRef:function(e){return e={current:e},ba().memoizedState=e},useState:Pa,useDebugValue:Ha,useDeferredValue:function(e){return ba().memoizedState=e},useTransition:function(){var e=Pa(!1),t=e[0];return e=Ga.bind(null,e[1]),ba().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,r){var n=sa,o=ba();if(ii){if(void 0===r)throw Error(i(407));r=r()}else{if(r=t(),null===jl)throw Error(i(349));30&aa||Ea(n,t,r)}o.memoizedState=r;var a={value:r,getSnapshot:t};return o.queue=a,Na(Aa.bind(null,n,a,e),[e]),n.flags|=2048,Ma(9,Oa.bind(null,n,a,r,t),void 0,null),r},useId:function(){var e=ba(),t=jl.identifierPrefix;if(ii){var r=Qo;t=\":\"+t+\"R\"+(r=(Zo&~(1<<32-at(Zo)-1)).toString(32)+r),0<(r=fa++)&&(t+=\"H\"+r.toString(32)),t+=\":\"}else t=\":\"+t+\"r\"+(r=ha++).toString(32)+\":\";return e.memoizedState=t},unstable_isNewReconciler:!1},es={readContext:Mi,useCallback:Ua,useContext:Mi,useEffect:Fa,useImperativeHandle:za,useInsertionEffect:Da,useLayoutEffect:Ba,useMemo:Va,useReducer:xa,useRef:Ra,useState:function(){return xa(wa)},useDebugValue:Ha,useDeferredValue:function(e){return Wa(ya(),la.memoizedState,e)},useTransition:function(){return[xa(wa)[0],ya().memoizedState]},useMutableSource:Ca,useSyncExternalStore:ka,useId:qa,unstable_isNewReconciler:!1},ts={readContext:Mi,useCallback:Ua,useContext:Mi,useEffect:Fa,useImperativeHandle:za,useInsertionEffect:Da,useLayoutEffect:Ba,useMemo:Va,useReducer:Sa,useRef:Ra,useState:function(){return Sa(wa)},useDebugValue:Ha,useDeferredValue:function(e){var t=ya();return null===la?t.memoizedState=e:Wa(t,la.memoizedState,e)},useTransition:function(){return[Sa(wa)[0],ya().memoizedState]},useMutableSource:Ca,useSyncExternalStore:ka,useId:qa,unstable_isNewReconciler:!1};function rs(e,t){if(e&&e.defaultProps){for(var r in t=D({},t),e=e.defaultProps)void 0===t[r]&&(t[r]=e[r]);return t}return t}function ns(e,t,r,n){r=null==(r=r(n,t=e.memoizedState))?t:D({},t,r),e.memoizedState=r,0===e.lanes&&(e.updateQueue.baseState=r)}var os={isMounted:function(e){return!!(e=e._reactInternals)&&Ue(e)===e},enqueueSetState:function(e,t,r){e=e._reactInternals;var n=ec(),o=tc(e),i=Li(n,o);i.payload=t,null!=r&&(i.callback=r),null!==(t=zi(e,i,o))&&(rc(t,e,o,n),Hi(t,e,o))},enqueueReplaceState:function(e,t,r){e=e._reactInternals;var n=ec(),o=tc(e),i=Li(n,o);i.tag=1,i.payload=t,null!=r&&(i.callback=r),null!==(t=zi(e,i,o))&&(rc(t,e,o,n),Hi(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var r=ec(),n=tc(e),o=Li(r,n);o.tag=2,null!=t&&(o.callback=t),null!==(t=zi(e,o,n))&&(rc(t,e,n,r),Hi(t,e,n))}};function is(e,t,r,n,o,i,a){return\"function\"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(n,i,a):!(t.prototype&&t.prototype.isPureReactComponent&&ln(r,n)&&ln(o,i))}function as(e,t,r){var n=!1,o=To,i=t.contextType;return\"object\"==typeof i&&null!==i?i=Mi(i):(o=_o(t)?Mo:jo.current,i=(n=null!=(n=t.contextTypes))?Ro(e,o):To),t=new t(r,i),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=os,e.stateNode=t,t._reactInternals=e,n&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=i),t}function ss(e,t,r,n){e=t.state,\"function\"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(r,n),\"function\"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(r,n),t.state!==e&&os.enqueueReplaceState(t,t.state,null)}function ls(e,t,r,n){var o=e.stateNode;o.props=r,o.state=e.memoizedState,o.refs={},Di(e);var i=t.contextType;\"object\"==typeof i&&null!==i?o.context=Mi(i):(i=_o(t)?Mo:jo.current,o.context=Ro(e,i)),o.state=e.memoizedState,\"function\"==typeof(i=t.getDerivedStateFromProps)&&(ns(e,t,i,r),o.state=e.memoizedState),\"function\"==typeof t.getDerivedStateFromProps||\"function\"==typeof o.getSnapshotBeforeUpdate||\"function\"!=typeof o.UNSAFE_componentWillMount&&\"function\"!=typeof o.componentWillMount||(t=o.state,\"function\"==typeof o.componentWillMount&&o.componentWillMount(),\"function\"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&os.enqueueReplaceState(o,o.state,null),Vi(e,r,o,n),o.state=e.memoizedState),\"function\"==typeof o.componentDidMount&&(e.flags|=4194308)}function cs(e,t){try{var r=\"\",n=t;do{r+=H(n),n=n.return}while(n);var o=r}catch(e){o=\"\\nError generating stack: \"+e.message+\"\\n\"+e.stack}return{value:e,source:t,stack:o,digest:null}}function us(e,t,r){return{value:e,source:null,stack:null!=r?r:null,digest:null!=t?t:null}}function ds(e,t){try{console.error(t.value)}catch(e){setTimeout((function(){throw e}))}}var fs=\"function\"==typeof WeakMap?WeakMap:Map;function hs(e,t,r){(r=Li(-1,r)).tag=3,r.payload={element:null};var n=t.value;return r.callback=function(){Wl||(Wl=!0,Gl=n),ds(0,t)},r}function ps(e,t,r){(r=Li(-1,r)).tag=3;var n=e.type.getDerivedStateFromError;if(\"function\"==typeof n){var o=t.value;r.payload=function(){return n(o)},r.callback=function(){ds(0,t)}}var i=e.stateNode;return null!==i&&\"function\"==typeof i.componentDidCatch&&(r.callback=function(){ds(0,t),\"function\"!=typeof n&&(null===ql?ql=new Set([this]):ql.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:\"\"})}),r}function ms(e,t,r){var n=e.pingCache;if(null===n){n=e.pingCache=new fs;var o=new Set;n.set(t,o)}else void 0===(o=n.get(t))&&(o=new Set,n.set(t,o));o.has(r)||(o.add(r),e=Ec.bind(null,e,t,r),t.then(e,e))}function gs(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function vs(e,t,r,n,o){return 1&e.mode?(e.flags|=65536,e.lanes=o,e):(e===t?e.flags|=65536:(e.flags|=128,r.flags|=131072,r.flags&=-52805,1===r.tag&&(null===r.alternate?r.tag=17:((t=Li(-1,1)).tag=2,zi(r,t,1))),r.lanes|=1),e)}var bs=w.ReactCurrentOwner,ys=!1;function ws(e,t,r,n){t.child=null===e?Si(t,null,r,n):xi(t,e.child,r,n)}function xs(e,t,r,n,o){r=r.render;var i=t.ref;return Pi(t,o),n=ga(e,t,r,n,i,o),r=va(),null===e||ys?(ii&&r&&ti(t),t.flags|=1,ws(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Ws(e,t,o))}function Ss(e,t,r,n,o){if(null===e){var i=r.type;return\"function\"!=typeof i||Rc(i)||void 0!==i.defaultProps||null!==r.compare||void 0!==r.defaultProps?((e=Ic(r.type,null,n,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,Cs(e,t,i,n,o))}if(i=e.child,0===(e.lanes&o)){var a=i.memoizedProps;if((r=null!==(r=r.compare)?r:ln)(a,n)&&e.ref===t.ref)return Ws(e,t,o)}return t.flags|=1,(e=_c(i,n)).ref=t.ref,e.return=t,t.child=e}function Cs(e,t,r,n,o){if(null!==e){var i=e.memoizedProps;if(ln(i,n)&&e.ref===t.ref){if(ys=!1,t.pendingProps=n=i,0===(e.lanes&o))return t.lanes=e.lanes,Ws(e,t,o);131072&e.flags&&(ys=!0)}}return Os(e,t,r,n,o)}function ks(e,t,r){var n=t.pendingProps,o=n.children,i=null!==e?e.memoizedState:null;if(\"hidden\"===n.mode)if(1&t.mode){if(!(1073741824&r))return e=null!==i?i.baseLanes|r:r,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,Ao(_l,Rl),Rl|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},n=null!==i?i.baseLanes:r,Ao(_l,Rl),Rl|=n}else t.memoizedState={baseLanes:0,cachePool:null,transitions:null},Ao(_l,Rl),Rl|=r;else null!==i?(n=i.baseLanes|r,t.memoizedState=null):n=r,Ao(_l,Rl),Rl|=n;return ws(e,t,o,r),t.child}function Es(e,t){var r=t.ref;(null===e&&null!==r||null!==e&&e.ref!==r)&&(t.flags|=512,t.flags|=2097152)}function Os(e,t,r,n,o){var i=_o(r)?Mo:jo.current;return i=Ro(t,i),Pi(t,o),r=ga(e,t,r,n,i,o),n=va(),null===e||ys?(ii&&n&&ti(t),t.flags|=1,ws(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Ws(e,t,o))}function As(e,t,r,n,o){if(_o(r)){var i=!0;Do(t)}else i=!1;if(Pi(t,o),null===t.stateNode)Vs(e,t),as(t,r,n),ls(t,r,n,o),n=!0;else if(null===e){var a=t.stateNode,s=t.memoizedProps;a.props=s;var l=a.context,c=r.contextType;c=\"object\"==typeof c&&null!==c?Mi(c):Ro(t,c=_o(r)?Mo:jo.current);var u=r.getDerivedStateFromProps,d=\"function\"==typeof u||\"function\"==typeof a.getSnapshotBeforeUpdate;d||\"function\"!=typeof a.UNSAFE_componentWillReceiveProps&&\"function\"!=typeof a.componentWillReceiveProps||(s!==n||l!==c)&&ss(t,a,n,c),Fi=!1;var f=t.memoizedState;a.state=f,Vi(t,n,a,o),l=t.memoizedState,s!==n||f!==l||Po.current||Fi?(\"function\"==typeof u&&(ns(t,r,u,n),l=t.memoizedState),(s=Fi||is(t,r,s,n,f,l,c))?(d||\"function\"!=typeof a.UNSAFE_componentWillMount&&\"function\"!=typeof a.componentWillMount||(\"function\"==typeof a.componentWillMount&&a.componentWillMount(),\"function\"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount()),\"function\"==typeof a.componentDidMount&&(t.flags|=4194308)):(\"function\"==typeof a.componentDidMount&&(t.flags|=4194308),t.memoizedProps=n,t.memoizedState=l),a.props=n,a.state=l,a.context=c,n=s):(\"function\"==typeof a.componentDidMount&&(t.flags|=4194308),n=!1)}else{a=t.stateNode,Bi(e,t),s=t.memoizedProps,c=t.type===t.elementType?s:rs(t.type,s),a.props=c,d=t.pendingProps,f=a.context,l=\"object\"==typeof(l=r.contextType)&&null!==l?Mi(l):Ro(t,l=_o(r)?Mo:jo.current);var h=r.getDerivedStateFromProps;(u=\"function\"==typeof h||\"function\"==typeof a.getSnapshotBeforeUpdate)||\"function\"!=typeof a.UNSAFE_componentWillReceiveProps&&\"function\"!=typeof a.componentWillReceiveProps||(s!==d||f!==l)&&ss(t,a,n,l),Fi=!1,f=t.memoizedState,a.state=f,Vi(t,n,a,o);var p=t.memoizedState;s!==d||f!==p||Po.current||Fi?(\"function\"==typeof h&&(ns(t,r,h,n),p=t.memoizedState),(c=Fi||is(t,r,c,n,f,p,l)||!1)?(u||\"function\"!=typeof a.UNSAFE_componentWillUpdate&&\"function\"!=typeof a.componentWillUpdate||(\"function\"==typeof a.componentWillUpdate&&a.componentWillUpdate(n,p,l),\"function\"==typeof a.UNSAFE_componentWillUpdate&&a.UNSAFE_componentWillUpdate(n,p,l)),\"function\"==typeof a.componentDidUpdate&&(t.flags|=4),\"function\"==typeof a.getSnapshotBeforeUpdate&&(t.flags|=1024)):(\"function\"!=typeof a.componentDidUpdate||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),\"function\"!=typeof a.getSnapshotBeforeUpdate||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),t.memoizedProps=n,t.memoizedState=p),a.props=n,a.state=p,a.context=l,n=c):(\"function\"!=typeof a.componentDidUpdate||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),\"function\"!=typeof a.getSnapshotBeforeUpdate||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),n=!1)}return Ts(e,t,r,n,i,o)}function Ts(e,t,r,n,o,i){Es(e,t);var a=!!(128&t.flags);if(!n&&!a)return o&&Bo(t,r,!1),Ws(e,t,i);n=t.stateNode,bs.current=t;var s=a&&\"function\"!=typeof r.getDerivedStateFromError?null:n.render();return t.flags|=1,null!==e&&a?(t.child=xi(t,e.child,null,i),t.child=xi(t,null,s,i)):ws(e,t,s,i),t.memoizedState=n.state,o&&Bo(t,r,!0),t.child}function js(e){var t=e.stateNode;t.pendingContext?No(0,t.pendingContext,t.pendingContext!==t.context):t.context&&No(0,t.context,!1),$i(e,t.containerInfo)}function Ps(e,t,r,n,o){return pi(),mi(o),t.flags|=256,ws(e,t,r,n),t.child}var Ms,Rs,_s,Is,Ns={dehydrated:null,treeContext:null,retryLane:0};function Fs(e){return{baseLanes:e,cachePool:null,transitions:null}}function Ds(e,t,r){var n,o=t.pendingProps,a=ea.current,s=!1,l=!!(128&t.flags);if((n=l)||(n=(null===e||null!==e.memoizedState)&&!!(2&a)),n?(s=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(a|=1),Ao(ea,1&a),null===e)return ui(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(1&t.mode?\"$!\"===e.data?t.lanes=8:t.lanes=1073741824:t.lanes=1,null):(l=o.children,e=o.fallback,s?(o=t.mode,s=t.child,l={mode:\"hidden\",children:l},1&o||null===s?s=Fc(l,o,0,null):(s.childLanes=0,s.pendingProps=l),e=Nc(e,o,r,null),s.return=t,e.return=t,s.sibling=e,t.child=s,t.child.memoizedState=Fs(r),t.memoizedState=Ns,e):Bs(t,l));if(null!==(a=e.memoizedState)&&null!==(n=a.dehydrated))return function(e,t,r,n,o,a,s){if(r)return 256&t.flags?(t.flags&=-257,Ls(e,t,s,n=us(Error(i(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(a=n.fallback,o=t.mode,n=Fc({mode:\"visible\",children:n.children},o,0,null),(a=Nc(a,o,s,null)).flags|=2,n.return=t,a.return=t,n.sibling=a,t.child=n,1&t.mode&&xi(t,e.child,null,s),t.child.memoizedState=Fs(s),t.memoizedState=Ns,a);if(!(1&t.mode))return Ls(e,t,s,null);if(\"$!\"===o.data){if(n=o.nextSibling&&o.nextSibling.dataset)var l=n.dgst;return n=l,Ls(e,t,s,n=us(a=Error(i(419)),n,void 0))}if(l=0!==(s&e.childLanes),ys||l){if(null!==(n=jl)){switch(s&-s){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}0!==(o=0!==(o&(n.suspendedLanes|s))?0:o)&&o!==a.retryLane&&(a.retryLane=o,Ni(e,o),rc(n,e,o,-1))}return mc(),Ls(e,t,s,n=us(Error(i(421))))}return\"$?\"===o.data?(t.flags|=128,t.child=e.child,t=Ac.bind(null,e),o._reactRetry=t,null):(e=a.treeContext,oi=co(o.nextSibling),ni=t,ii=!0,ai=null,null!==e&&(Xo[Yo++]=Zo,Xo[Yo++]=Qo,Xo[Yo++]=$o,Zo=e.id,Qo=e.overflow,$o=t),(t=Bs(t,n.children)).flags|=4096,t)}(e,t,l,o,n,a,r);if(s){s=o.fallback,l=t.mode,n=(a=e.child).sibling;var c={mode:\"hidden\",children:o.children};return 1&l||t.child===a?(o=_c(a,c)).subtreeFlags=14680064&a.subtreeFlags:((o=t.child).childLanes=0,o.pendingProps=c,t.deletions=null),null!==n?s=_c(n,s):(s=Nc(s,l,r,null)).flags|=2,s.return=t,o.return=t,o.sibling=s,t.child=o,o=s,s=t.child,l=null===(l=e.child.memoizedState)?Fs(r):{baseLanes:l.baseLanes|r,cachePool:null,transitions:l.transitions},s.memoizedState=l,s.childLanes=e.childLanes&~r,t.memoizedState=Ns,o}return e=(s=e.child).sibling,o=_c(s,{mode:\"visible\",children:o.children}),!(1&t.mode)&&(o.lanes=r),o.return=t,o.sibling=null,null!==e&&(null===(r=t.deletions)?(t.deletions=[e],t.flags|=16):r.push(e)),t.child=o,t.memoizedState=null,o}function Bs(e,t){return(t=Fc({mode:\"visible\",children:t},e.mode,0,null)).return=e,e.child=t}function Ls(e,t,r,n){return null!==n&&mi(n),xi(t,e.child,null,r),(e=Bs(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function zs(e,t,r){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),ji(e.return,t,r)}function Hs(e,t,r,n,o){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:n,tail:r,tailMode:o}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=n,i.tail=r,i.tailMode=o)}function Us(e,t,r){var n=t.pendingProps,o=n.revealOrder,i=n.tail;if(ws(e,t,n.children,r),2&(n=ea.current))n=1&n|2,t.flags|=128;else{if(null!==e&&128&e.flags)e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&zs(e,r,t);else if(19===e.tag)zs(e,r,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}n&=1}if(Ao(ea,n),1&t.mode)switch(o){case\"forwards\":for(r=t.child,o=null;null!==r;)null!==(e=r.alternate)&&null===ta(e)&&(o=r),r=r.sibling;null===(r=o)?(o=t.child,t.child=null):(o=r.sibling,r.sibling=null),Hs(t,!1,o,r,i);break;case\"backwards\":for(r=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===ta(e)){t.child=o;break}e=o.sibling,o.sibling=r,r=o,o=e}Hs(t,!0,r,null,i);break;case\"together\":Hs(t,!1,null,null,void 0);break;default:t.memoizedState=null}else t.memoizedState=null;return t.child}function Vs(e,t){!(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Ws(e,t,r){if(null!==e&&(t.dependencies=e.dependencies),Fl|=t.lanes,0===(r&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(r=_c(e=t.child,e.pendingProps),t.child=r,r.return=t;null!==e.sibling;)e=e.sibling,(r=r.sibling=_c(e,e.pendingProps)).return=t;r.sibling=null}return t.child}function Gs(e,t){if(!ii)switch(e.tailMode){case\"hidden\":t=e.tail;for(var r=null;null!==t;)null!==t.alternate&&(r=t),t=t.sibling;null===r?e.tail=null:r.sibling=null;break;case\"collapsed\":r=e.tail;for(var n=null;null!==r;)null!==r.alternate&&(n=r),r=r.sibling;null===n?t||null===e.tail?e.tail=null:e.tail.sibling=null:n.sibling=null}}function qs(e){var t=null!==e.alternate&&e.alternate.child===e.child,r=0,n=0;if(t)for(var o=e.child;null!==o;)r|=o.lanes|o.childLanes,n|=14680064&o.subtreeFlags,n|=14680064&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)r|=o.lanes|o.childLanes,n|=o.subtreeFlags,n|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=n,e.childLanes=r,t}function Ks(e,t,r){var n=t.pendingProps;switch(ri(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return qs(t),null;case 1:case 17:return _o(t.type)&&Io(),qs(t),null;case 3:return n=t.stateNode,Zi(),Oo(Po),Oo(jo),na(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),null!==e&&null!==e.child||(fi(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&!(256&t.flags)||(t.flags|=1024,null!==ai&&(ac(ai),ai=null))),Rs(e,t),qs(t),null;case 5:Ji(t);var o=Yi(Xi.current);if(r=t.type,null!==e&&null!=t.stateNode)_s(e,t,r,n,o),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!n){if(null===t.stateNode)throw Error(i(166));return qs(t),null}if(e=Yi(qi.current),fi(t)){n=t.stateNode,r=t.type;var a=t.memoizedProps;switch(n[ho]=t,n[po]=a,e=!!(1&t.mode),r){case\"dialog\":Ln(\"cancel\",n),Ln(\"close\",n);break;case\"iframe\":case\"object\":case\"embed\":Ln(\"load\",n);break;case\"video\":case\"audio\":for(o=0;o<Nn.length;o++)Ln(Nn[o],n);break;case\"source\":Ln(\"error\",n);break;case\"img\":case\"image\":case\"link\":Ln(\"error\",n),Ln(\"load\",n);break;case\"details\":Ln(\"toggle\",n);break;case\"input\":$(n,a),Ln(\"invalid\",n);break;case\"select\":n._wrapperState={wasMultiple:!!a.multiple},Ln(\"invalid\",n);break;case\"textarea\":oe(n,a),Ln(\"invalid\",n)}for(var l in be(r,a),o=null,a)if(a.hasOwnProperty(l)){var c=a[l];\"children\"===l?\"string\"==typeof c?n.textContent!==c&&(!0!==a.suppressHydrationWarning&&Qn(n.textContent,c,e),o=[\"children\",c]):\"number\"==typeof c&&n.textContent!==\"\"+c&&(!0!==a.suppressHydrationWarning&&Qn(n.textContent,c,e),o=[\"children\",\"\"+c]):s.hasOwnProperty(l)&&null!=c&&\"onScroll\"===l&&Ln(\"scroll\",n)}switch(r){case\"input\":q(n),J(n,a,!0);break;case\"textarea\":q(n),ae(n);break;case\"select\":case\"option\":break;default:\"function\"==typeof a.onClick&&(n.onclick=Jn)}n=o,t.updateQueue=n,null!==n&&(t.flags|=4)}else{l=9===o.nodeType?o:o.ownerDocument,\"http://www.w3.org/1999/xhtml\"===e&&(e=se(r)),\"http://www.w3.org/1999/xhtml\"===e?\"script\"===r?((e=l.createElement(\"div\")).innerHTML=\"<script><\\/script>\",e=e.removeChild(e.firstChild)):\"string\"==typeof n.is?e=l.createElement(r,{is:n.is}):(e=l.createElement(r),\"select\"===r&&(l=e,n.multiple?l.multiple=!0:n.size&&(l.size=n.size))):e=l.createElementNS(e,r),e[ho]=t,e[po]=n,Ms(e,t,!1,!1),t.stateNode=e;e:{switch(l=ye(r,n),r){case\"dialog\":Ln(\"cancel\",e),Ln(\"close\",e),o=n;break;case\"iframe\":case\"object\":case\"embed\":Ln(\"load\",e),o=n;break;case\"video\":case\"audio\":for(o=0;o<Nn.length;o++)Ln(Nn[o],e);o=n;break;case\"source\":Ln(\"error\",e),o=n;break;case\"img\":case\"image\":case\"link\":Ln(\"error\",e),Ln(\"load\",e),o=n;break;case\"details\":Ln(\"toggle\",e),o=n;break;case\"input\":$(e,n),o=Y(e,n),Ln(\"invalid\",e);break;case\"option\":default:o=n;break;case\"select\":e._wrapperState={wasMultiple:!!n.multiple},o=D({},n,{value:void 0}),Ln(\"invalid\",e);break;case\"textarea\":oe(e,n),o=ne(e,n),Ln(\"invalid\",e)}for(a in be(r,o),c=o)if(c.hasOwnProperty(a)){var u=c[a];\"style\"===a?ge(e,u):\"dangerouslySetInnerHTML\"===a?null!=(u=u?u.__html:void 0)&&de(e,u):\"children\"===a?\"string\"==typeof u?(\"textarea\"!==r||\"\"!==u)&&fe(e,u):\"number\"==typeof u&&fe(e,\"\"+u):\"suppressContentEditableWarning\"!==a&&\"suppressHydrationWarning\"!==a&&\"autoFocus\"!==a&&(s.hasOwnProperty(a)?null!=u&&\"onScroll\"===a&&Ln(\"scroll\",e):null!=u&&y(e,a,u,l))}switch(r){case\"input\":q(e),J(e,n,!1);break;case\"textarea\":q(e),ae(e);break;case\"option\":null!=n.value&&e.setAttribute(\"value\",\"\"+W(n.value));break;case\"select\":e.multiple=!!n.multiple,null!=(a=n.value)?re(e,!!n.multiple,a,!1):null!=n.defaultValue&&re(e,!!n.multiple,n.defaultValue,!0);break;default:\"function\"==typeof o.onClick&&(e.onclick=Jn)}switch(r){case\"button\":case\"input\":case\"select\":case\"textarea\":n=!!n.autoFocus;break e;case\"img\":n=!0;break e;default:n=!1}}n&&(t.flags|=4)}null!==t.ref&&(t.flags|=512,t.flags|=2097152)}return qs(t),null;case 6:if(e&&null!=t.stateNode)Is(e,t,e.memoizedProps,n);else{if(\"string\"!=typeof n&&null===t.stateNode)throw Error(i(166));if(r=Yi(Xi.current),Yi(qi.current),fi(t)){if(n=t.stateNode,r=t.memoizedProps,n[ho]=t,(a=n.nodeValue!==r)&&null!==(e=ni))switch(e.tag){case 3:Qn(n.nodeValue,r,!!(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&Qn(n.nodeValue,r,!!(1&e.mode))}a&&(t.flags|=4)}else(n=(9===r.nodeType?r:r.ownerDocument).createTextNode(n))[ho]=t,t.stateNode=n}return qs(t),null;case 13:if(Oo(ea),n=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(ii&&null!==oi&&1&t.mode&&!(128&t.flags))hi(),pi(),t.flags|=98560,a=!1;else if(a=fi(t),null!==n&&null!==n.dehydrated){if(null===e){if(!a)throw Error(i(318));if(!(a=null!==(a=t.memoizedState)?a.dehydrated:null))throw Error(i(317));a[ho]=t}else pi(),!(128&t.flags)&&(t.memoizedState=null),t.flags|=4;qs(t),a=!1}else null!==ai&&(ac(ai),ai=null),a=!0;if(!a)return 65536&t.flags?t:null}return 128&t.flags?(t.lanes=r,t):((n=null!==n)!=(null!==e&&null!==e.memoizedState)&&n&&(t.child.flags|=8192,1&t.mode&&(null===e||1&ea.current?0===Il&&(Il=3):mc())),null!==t.updateQueue&&(t.flags|=4),qs(t),null);case 4:return Zi(),Rs(e,t),null===e&&Un(t.stateNode.containerInfo),qs(t),null;case 10:return Ti(t.type._context),qs(t),null;case 19:if(Oo(ea),null===(a=t.memoizedState))return qs(t),null;if(n=!!(128&t.flags),null===(l=a.rendering))if(n)Gs(a,!1);else{if(0!==Il||null!==e&&128&e.flags)for(e=t.child;null!==e;){if(null!==(l=ta(e))){for(t.flags|=128,Gs(a,!1),null!==(n=l.updateQueue)&&(t.updateQueue=n,t.flags|=4),t.subtreeFlags=0,n=r,r=t.child;null!==r;)e=n,(a=r).flags&=14680066,null===(l=a.alternate)?(a.childLanes=0,a.lanes=e,a.child=null,a.subtreeFlags=0,a.memoizedProps=null,a.memoizedState=null,a.updateQueue=null,a.dependencies=null,a.stateNode=null):(a.childLanes=l.childLanes,a.lanes=l.lanes,a.child=l.child,a.subtreeFlags=0,a.deletions=null,a.memoizedProps=l.memoizedProps,a.memoizedState=l.memoizedState,a.updateQueue=l.updateQueue,a.type=l.type,e=l.dependencies,a.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),r=r.sibling;return Ao(ea,1&ea.current|2),t.child}e=e.sibling}null!==a.tail&&Ze()>Ul&&(t.flags|=128,n=!0,Gs(a,!1),t.lanes=4194304)}else{if(!n)if(null!==(e=ta(l))){if(t.flags|=128,n=!0,null!==(r=e.updateQueue)&&(t.updateQueue=r,t.flags|=4),Gs(a,!0),null===a.tail&&\"hidden\"===a.tailMode&&!l.alternate&&!ii)return qs(t),null}else 2*Ze()-a.renderingStartTime>Ul&&1073741824!==r&&(t.flags|=128,n=!0,Gs(a,!1),t.lanes=4194304);a.isBackwards?(l.sibling=t.child,t.child=l):(null!==(r=a.last)?r.sibling=l:t.child=l,a.last=l)}return null!==a.tail?(t=a.tail,a.rendering=t,a.tail=t.sibling,a.renderingStartTime=Ze(),t.sibling=null,r=ea.current,Ao(ea,n?1&r|2:1&r),t):(qs(t),null);case 22:case 23:return dc(),n=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==n&&(t.flags|=8192),n&&1&t.mode?!!(1073741824&Rl)&&(qs(t),6&t.subtreeFlags&&(t.flags|=8192)):qs(t),null;case 24:case 25:return null}throw Error(i(156,t.tag))}function Xs(e,t){switch(ri(t),t.tag){case 1:return _o(t.type)&&Io(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return Zi(),Oo(Po),Oo(jo),na(),65536&(e=t.flags)&&!(128&e)?(t.flags=-65537&e|128,t):null;case 5:return Ji(t),null;case 13:if(Oo(ea),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(i(340));pi()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return Oo(ea),null;case 4:return Zi(),null;case 10:return Ti(t.type._context),null;case 22:case 23:return dc(),null;default:return null}}Ms=function(e,t){for(var r=t.child;null!==r;){if(5===r.tag||6===r.tag)e.appendChild(r.stateNode);else if(4!==r.tag&&null!==r.child){r.child.return=r,r=r.child;continue}if(r===t)break;for(;null===r.sibling;){if(null===r.return||r.return===t)return;r=r.return}r.sibling.return=r.return,r=r.sibling}},Rs=function(){},_s=function(e,t,r,n){var o=e.memoizedProps;if(o!==n){e=t.stateNode,Yi(qi.current);var i,a=null;switch(r){case\"input\":o=Y(e,o),n=Y(e,n),a=[];break;case\"select\":o=D({},o,{value:void 0}),n=D({},n,{value:void 0}),a=[];break;case\"textarea\":o=ne(e,o),n=ne(e,n),a=[];break;default:\"function\"!=typeof o.onClick&&\"function\"==typeof n.onClick&&(e.onclick=Jn)}for(u in be(r,n),r=null,o)if(!n.hasOwnProperty(u)&&o.hasOwnProperty(u)&&null!=o[u])if(\"style\"===u){var l=o[u];for(i in l)l.hasOwnProperty(i)&&(r||(r={}),r[i]=\"\")}else\"dangerouslySetInnerHTML\"!==u&&\"children\"!==u&&\"suppressContentEditableWarning\"!==u&&\"suppressHydrationWarning\"!==u&&\"autoFocus\"!==u&&(s.hasOwnProperty(u)?a||(a=[]):(a=a||[]).push(u,null));for(u in n){var c=n[u];if(l=null!=o?o[u]:void 0,n.hasOwnProperty(u)&&c!==l&&(null!=c||null!=l))if(\"style\"===u)if(l){for(i in l)!l.hasOwnProperty(i)||c&&c.hasOwnProperty(i)||(r||(r={}),r[i]=\"\");for(i in c)c.hasOwnProperty(i)&&l[i]!==c[i]&&(r||(r={}),r[i]=c[i])}else r||(a||(a=[]),a.push(u,r)),r=c;else\"dangerouslySetInnerHTML\"===u?(c=c?c.__html:void 0,l=l?l.__html:void 0,null!=c&&l!==c&&(a=a||[]).push(u,c)):\"children\"===u?\"string\"!=typeof c&&\"number\"!=typeof c||(a=a||[]).push(u,\"\"+c):\"suppressContentEditableWarning\"!==u&&\"suppressHydrationWarning\"!==u&&(s.hasOwnProperty(u)?(null!=c&&\"onScroll\"===u&&Ln(\"scroll\",e),a||l===c||(a=[])):(a=a||[]).push(u,c))}r&&(a=a||[]).push(\"style\",r);var u=a;(t.updateQueue=u)&&(t.flags|=4)}},Is=function(e,t,r,n){r!==n&&(t.flags|=4)};var Ys=!1,$s=!1,Zs=\"function\"==typeof WeakSet?WeakSet:Set,Qs=null;function Js(e,t){var r=e.ref;if(null!==r)if(\"function\"==typeof r)try{r(null)}catch(r){kc(e,t,r)}else r.current=null}function el(e,t,r){try{r()}catch(r){kc(e,t,r)}}var tl=!1;function rl(e,t,r){var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var o=n=n.next;do{if((o.tag&e)===e){var i=o.destroy;o.destroy=void 0,void 0!==i&&el(t,r,i)}o=o.next}while(o!==n)}}function nl(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var r=t=t.next;do{if((r.tag&e)===e){var n=r.create;r.destroy=n()}r=r.next}while(r!==t)}}function ol(e){var t=e.ref;if(null!==t){var r=e.stateNode;e.tag,e=r,\"function\"==typeof t?t(e):t.current=e}}function il(e){var t=e.alternate;null!==t&&(e.alternate=null,il(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&null!==(t=e.stateNode)&&(delete t[ho],delete t[po],delete t[go],delete t[vo],delete t[bo]),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function al(e){return 5===e.tag||3===e.tag||4===e.tag}function sl(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||al(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function ll(e,t,r){var n=e.tag;if(5===n||6===n)e=e.stateNode,t?8===r.nodeType?r.parentNode.insertBefore(e,t):r.insertBefore(e,t):(8===r.nodeType?(t=r.parentNode).insertBefore(e,r):(t=r).appendChild(e),null!=(r=r._reactRootContainer)||null!==t.onclick||(t.onclick=Jn));else if(4!==n&&null!==(e=e.child))for(ll(e,t,r),e=e.sibling;null!==e;)ll(e,t,r),e=e.sibling}function cl(e,t,r){var n=e.tag;if(5===n||6===n)e=e.stateNode,t?r.insertBefore(e,t):r.appendChild(e);else if(4!==n&&null!==(e=e.child))for(cl(e,t,r),e=e.sibling;null!==e;)cl(e,t,r),e=e.sibling}var ul=null,dl=!1;function fl(e,t,r){for(r=r.child;null!==r;)hl(e,t,r),r=r.sibling}function hl(e,t,r){if(it&&\"function\"==typeof it.onCommitFiberUnmount)try{it.onCommitFiberUnmount(ot,r)}catch(e){}switch(r.tag){case 5:$s||Js(r,t);case 6:var n=ul,o=dl;ul=null,fl(e,t,r),dl=o,null!==(ul=n)&&(dl?(e=ul,r=r.stateNode,8===e.nodeType?e.parentNode.removeChild(r):e.removeChild(r)):ul.removeChild(r.stateNode));break;case 18:null!==ul&&(dl?(e=ul,r=r.stateNode,8===e.nodeType?lo(e.parentNode,r):1===e.nodeType&&lo(e,r),Ut(e)):lo(ul,r.stateNode));break;case 4:n=ul,o=dl,ul=r.stateNode.containerInfo,dl=!0,fl(e,t,r),ul=n,dl=o;break;case 0:case 11:case 14:case 15:if(!$s&&null!==(n=r.updateQueue)&&null!==(n=n.lastEffect)){o=n=n.next;do{var i=o,a=i.destroy;i=i.tag,void 0!==a&&(2&i||4&i)&&el(r,t,a),o=o.next}while(o!==n)}fl(e,t,r);break;case 1:if(!$s&&(Js(r,t),\"function\"==typeof(n=r.stateNode).componentWillUnmount))try{n.props=r.memoizedProps,n.state=r.memoizedState,n.componentWillUnmount()}catch(e){kc(r,t,e)}fl(e,t,r);break;case 21:fl(e,t,r);break;case 22:1&r.mode?($s=(n=$s)||null!==r.memoizedState,fl(e,t,r),$s=n):fl(e,t,r);break;default:fl(e,t,r)}}function pl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var r=e.stateNode;null===r&&(r=e.stateNode=new Zs),t.forEach((function(t){var n=Tc.bind(null,e,t);r.has(t)||(r.add(t),t.then(n,n))}))}}function ml(e,t){var r=t.deletions;if(null!==r)for(var n=0;n<r.length;n++){var o=r[n];try{var a=e,s=t,l=s;e:for(;null!==l;){switch(l.tag){case 5:ul=l.stateNode,dl=!1;break e;case 3:case 4:ul=l.stateNode.containerInfo,dl=!0;break e}l=l.return}if(null===ul)throw Error(i(160));hl(a,s,o),ul=null,dl=!1;var c=o.alternate;null!==c&&(c.return=null),o.return=null}catch(e){kc(o,t,e)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)gl(t,e),t=t.sibling}function gl(e,t){var r=e.alternate,n=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(ml(t,e),vl(e),4&n){try{rl(3,e,e.return),nl(3,e)}catch(t){kc(e,e.return,t)}try{rl(5,e,e.return)}catch(t){kc(e,e.return,t)}}break;case 1:ml(t,e),vl(e),512&n&&null!==r&&Js(r,r.return);break;case 5:if(ml(t,e),vl(e),512&n&&null!==r&&Js(r,r.return),32&e.flags){var o=e.stateNode;try{fe(o,\"\")}catch(t){kc(e,e.return,t)}}if(4&n&&null!=(o=e.stateNode)){var a=e.memoizedProps,s=null!==r?r.memoizedProps:a,l=e.type,c=e.updateQueue;if(e.updateQueue=null,null!==c)try{\"input\"===l&&\"radio\"===a.type&&null!=a.name&&Z(o,a),ye(l,s);var u=ye(l,a);for(s=0;s<c.length;s+=2){var d=c[s],f=c[s+1];\"style\"===d?ge(o,f):\"dangerouslySetInnerHTML\"===d?de(o,f):\"children\"===d?fe(o,f):y(o,d,f,u)}switch(l){case\"input\":Q(o,a);break;case\"textarea\":ie(o,a);break;case\"select\":var h=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!a.multiple;var p=a.value;null!=p?re(o,!!a.multiple,p,!1):h!==!!a.multiple&&(null!=a.defaultValue?re(o,!!a.multiple,a.defaultValue,!0):re(o,!!a.multiple,a.multiple?[]:\"\",!1))}o[po]=a}catch(t){kc(e,e.return,t)}}break;case 6:if(ml(t,e),vl(e),4&n){if(null===e.stateNode)throw Error(i(162));o=e.stateNode,a=e.memoizedProps;try{o.nodeValue=a}catch(t){kc(e,e.return,t)}}break;case 3:if(ml(t,e),vl(e),4&n&&null!==r&&r.memoizedState.isDehydrated)try{Ut(t.containerInfo)}catch(t){kc(e,e.return,t)}break;case 4:default:ml(t,e),vl(e);break;case 13:ml(t,e),vl(e),8192&(o=e.child).flags&&(a=null!==o.memoizedState,o.stateNode.isHidden=a,!a||null!==o.alternate&&null!==o.alternate.memoizedState||(Hl=Ze())),4&n&&pl(e);break;case 22:if(d=null!==r&&null!==r.memoizedState,1&e.mode?($s=(u=$s)||d,ml(t,e),$s=u):ml(t,e),vl(e),8192&n){if(u=null!==e.memoizedState,(e.stateNode.isHidden=u)&&!d&&1&e.mode)for(Qs=e,d=e.child;null!==d;){for(f=Qs=d;null!==Qs;){switch(p=(h=Qs).child,h.tag){case 0:case 11:case 14:case 15:rl(4,h,h.return);break;case 1:Js(h,h.return);var m=h.stateNode;if(\"function\"==typeof m.componentWillUnmount){n=h,r=h.return;try{t=n,m.props=t.memoizedProps,m.state=t.memoizedState,m.componentWillUnmount()}catch(e){kc(n,r,e)}}break;case 5:Js(h,h.return);break;case 22:if(null!==h.memoizedState){xl(f);continue}}null!==p?(p.return=h,Qs=p):xl(f)}d=d.sibling}e:for(d=null,f=e;;){if(5===f.tag){if(null===d){d=f;try{o=f.stateNode,u?\"function\"==typeof(a=o.style).setProperty?a.setProperty(\"display\",\"none\",\"important\"):a.display=\"none\":(l=f.stateNode,s=null!=(c=f.memoizedProps.style)&&c.hasOwnProperty(\"display\")?c.display:null,l.style.display=me(\"display\",s))}catch(t){kc(e,e.return,t)}}}else if(6===f.tag){if(null===d)try{f.stateNode.nodeValue=u?\"\":f.memoizedProps}catch(t){kc(e,e.return,t)}}else if((22!==f.tag&&23!==f.tag||null===f.memoizedState||f===e)&&null!==f.child){f.child.return=f,f=f.child;continue}if(f===e)break e;for(;null===f.sibling;){if(null===f.return||f.return===e)break e;d===f&&(d=null),f=f.return}d===f&&(d=null),f.sibling.return=f.return,f=f.sibling}}break;case 19:ml(t,e),vl(e),4&n&&pl(e);case 21:}}function vl(e){var t=e.flags;if(2&t){try{e:{for(var r=e.return;null!==r;){if(al(r)){var n=r;break e}r=r.return}throw Error(i(160))}switch(n.tag){case 5:var o=n.stateNode;32&n.flags&&(fe(o,\"\"),n.flags&=-33),cl(e,sl(e),o);break;case 3:case 4:var a=n.stateNode.containerInfo;ll(e,sl(e),a);break;default:throw Error(i(161))}}catch(t){kc(e,e.return,t)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function bl(e,t,r){Qs=e,yl(e,t,r)}function yl(e,t,r){for(var n=!!(1&e.mode);null!==Qs;){var o=Qs,i=o.child;if(22===o.tag&&n){var a=null!==o.memoizedState||Ys;if(!a){var s=o.alternate,l=null!==s&&null!==s.memoizedState||$s;s=Ys;var c=$s;if(Ys=a,($s=l)&&!c)for(Qs=o;null!==Qs;)l=(a=Qs).child,22===a.tag&&null!==a.memoizedState?Sl(o):null!==l?(l.return=a,Qs=l):Sl(o);for(;null!==i;)Qs=i,yl(i,t,r),i=i.sibling;Qs=o,Ys=s,$s=c}wl(e)}else 8772&o.subtreeFlags&&null!==i?(i.return=o,Qs=i):wl(e)}}function wl(e){for(;null!==Qs;){var t=Qs;if(8772&t.flags){var r=t.alternate;try{if(8772&t.flags)switch(t.tag){case 0:case 11:case 15:$s||nl(5,t);break;case 1:var n=t.stateNode;if(4&t.flags&&!$s)if(null===r)n.componentDidMount();else{var o=t.elementType===t.type?r.memoizedProps:rs(t.type,r.memoizedProps);n.componentDidUpdate(o,r.memoizedState,n.__reactInternalSnapshotBeforeUpdate)}var a=t.updateQueue;null!==a&&Wi(t,a,n);break;case 3:var s=t.updateQueue;if(null!==s){if(r=null,null!==t.child)switch(t.child.tag){case 5:case 1:r=t.child.stateNode}Wi(t,s,r)}break;case 5:var l=t.stateNode;if(null===r&&4&t.flags){r=l;var c=t.memoizedProps;switch(t.type){case\"button\":case\"input\":case\"select\":case\"textarea\":c.autoFocus&&r.focus();break;case\"img\":c.src&&(r.src=c.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===t.memoizedState){var u=t.alternate;if(null!==u){var d=u.memoizedState;if(null!==d){var f=d.dehydrated;null!==f&&Ut(f)}}}break;default:throw Error(i(163))}$s||512&t.flags&&ol(t)}catch(e){kc(t,t.return,e)}}if(t===e){Qs=null;break}if(null!==(r=t.sibling)){r.return=t.return,Qs=r;break}Qs=t.return}}function xl(e){for(;null!==Qs;){var t=Qs;if(t===e){Qs=null;break}var r=t.sibling;if(null!==r){r.return=t.return,Qs=r;break}Qs=t.return}}function Sl(e){for(;null!==Qs;){var t=Qs;try{switch(t.tag){case 0:case 11:case 15:var r=t.return;try{nl(4,t)}catch(e){kc(t,r,e)}break;case 1:var n=t.stateNode;if(\"function\"==typeof n.componentDidMount){var o=t.return;try{n.componentDidMount()}catch(e){kc(t,o,e)}}var i=t.return;try{ol(t)}catch(e){kc(t,i,e)}break;case 5:var a=t.return;try{ol(t)}catch(e){kc(t,a,e)}}}catch(e){kc(t,t.return,e)}if(t===e){Qs=null;break}var s=t.sibling;if(null!==s){s.return=t.return,Qs=s;break}Qs=t.return}}var Cl,kl=Math.ceil,El=w.ReactCurrentDispatcher,Ol=w.ReactCurrentOwner,Al=w.ReactCurrentBatchConfig,Tl=0,jl=null,Pl=null,Ml=0,Rl=0,_l=Eo(0),Il=0,Nl=null,Fl=0,Dl=0,Bl=0,Ll=null,zl=null,Hl=0,Ul=1/0,Vl=null,Wl=!1,Gl=null,ql=null,Kl=!1,Xl=null,Yl=0,$l=0,Zl=null,Ql=-1,Jl=0;function ec(){return 6&Tl?Ze():-1!==Ql?Ql:Ql=Ze()}function tc(e){return 1&e.mode?2&Tl&&0!==Ml?Ml&-Ml:null!==gi.transition?(0===Jl&&(Jl=mt()),Jl):0!==(e=yt)?e:e=void 0===(e=window.event)?16:$t(e.type):1}function rc(e,t,r,n){if(50<$l)throw $l=0,Zl=null,Error(i(185));vt(e,r,n),2&Tl&&e===jl||(e===jl&&(!(2&Tl)&&(Dl|=r),4===Il&&sc(e,Ml)),nc(e,n),1===r&&0===Tl&&!(1&t.mode)&&(Ul=Ze()+500,zo&&Vo()))}function nc(e,t){var r=e.callbackNode;!function(e,t){for(var r=e.suspendedLanes,n=e.pingedLanes,o=e.expirationTimes,i=e.pendingLanes;0<i;){var a=31-at(i),s=1<<a,l=o[a];-1===l?0!==(s&r)&&0===(s&n)||(o[a]=ht(s,t)):l<=t&&(e.expiredLanes|=s),i&=~s}}(e,t);var n=ft(e,e===jl?Ml:0);if(0===n)null!==r&&Xe(r),e.callbackNode=null,e.callbackPriority=0;else if(t=n&-n,e.callbackPriority!==t){if(null!=r&&Xe(r),1===t)0===e.tag?function(e){zo=!0,Uo(e)}(lc.bind(null,e)):Uo(lc.bind(null,e)),ao((function(){!(6&Tl)&&Vo()})),r=null;else{switch(wt(n)){case 1:r=Je;break;case 4:r=et;break;case 16:default:r=tt;break;case 536870912:r=nt}r=jc(r,oc.bind(null,e))}e.callbackPriority=t,e.callbackNode=r}}function oc(e,t){if(Ql=-1,Jl=0,6&Tl)throw Error(i(327));var r=e.callbackNode;if(Sc()&&e.callbackNode!==r)return null;var n=ft(e,e===jl?Ml:0);if(0===n)return null;if(30&n||0!==(n&e.expiredLanes)||t)t=gc(e,n);else{t=n;var o=Tl;Tl|=2;var a=pc();for(jl===e&&Ml===t||(Vl=null,Ul=Ze()+500,fc(e,t));;)try{bc();break}catch(t){hc(e,t)}Ai(),El.current=a,Tl=o,null!==Pl?t=0:(jl=null,Ml=0,t=Il)}if(0!==t){if(2===t&&0!==(o=pt(e))&&(n=o,t=ic(e,o)),1===t)throw r=Nl,fc(e,0),sc(e,n),nc(e,Ze()),r;if(6===t)sc(e,n);else{if(o=e.current.alternate,!(30&n||function(e){for(var t=e;;){if(16384&t.flags){var r=t.updateQueue;if(null!==r&&null!==(r=r.stores))for(var n=0;n<r.length;n++){var o=r[n],i=o.getSnapshot;o=o.value;try{if(!sn(i(),o))return!1}catch(e){return!1}}}if(r=t.child,16384&t.subtreeFlags&&null!==r)r.return=t,t=r;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(o)||(t=gc(e,n),2===t&&(a=pt(e),0!==a&&(n=a,t=ic(e,a))),1!==t)))throw r=Nl,fc(e,0),sc(e,n),nc(e,Ze()),r;switch(e.finishedWork=o,e.finishedLanes=n,t){case 0:case 1:throw Error(i(345));case 2:case 5:xc(e,zl,Vl);break;case 3:if(sc(e,n),(130023424&n)===n&&10<(t=Hl+500-Ze())){if(0!==ft(e,0))break;if(((o=e.suspendedLanes)&n)!==n){ec(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=no(xc.bind(null,e,zl,Vl),t);break}xc(e,zl,Vl);break;case 4:if(sc(e,n),(4194240&n)===n)break;for(t=e.eventTimes,o=-1;0<n;){var s=31-at(n);a=1<<s,(s=t[s])>o&&(o=s),n&=~a}if(n=o,10<(n=(120>(n=Ze()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*kl(n/1960))-n)){e.timeoutHandle=no(xc.bind(null,e,zl,Vl),n);break}xc(e,zl,Vl);break;default:throw Error(i(329))}}}return nc(e,Ze()),e.callbackNode===r?oc.bind(null,e):null}function ic(e,t){var r=Ll;return e.current.memoizedState.isDehydrated&&(fc(e,t).flags|=256),2!==(e=gc(e,t))&&(t=zl,zl=r,null!==t&&ac(t)),e}function ac(e){null===zl?zl=e:zl.push.apply(zl,e)}function sc(e,t){for(t&=~Bl,t&=~Dl,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var r=31-at(t),n=1<<r;e[r]=-1,t&=~n}}function lc(e){if(6&Tl)throw Error(i(327));Sc();var t=ft(e,0);if(!(1&t))return nc(e,Ze()),null;var r=gc(e,t);if(0!==e.tag&&2===r){var n=pt(e);0!==n&&(t=n,r=ic(e,n))}if(1===r)throw r=Nl,fc(e,0),sc(e,t),nc(e,Ze()),r;if(6===r)throw Error(i(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,xc(e,zl,Vl),nc(e,Ze()),null}function cc(e,t){var r=Tl;Tl|=1;try{return e(t)}finally{0===(Tl=r)&&(Ul=Ze()+500,zo&&Vo())}}function uc(e){null!==Xl&&0===Xl.tag&&!(6&Tl)&&Sc();var t=Tl;Tl|=1;var r=Al.transition,n=yt;try{if(Al.transition=null,yt=1,e)return e()}finally{yt=n,Al.transition=r,!(6&(Tl=t))&&Vo()}}function dc(){Rl=_l.current,Oo(_l)}function fc(e,t){e.finishedWork=null,e.finishedLanes=0;var r=e.timeoutHandle;if(-1!==r&&(e.timeoutHandle=-1,oo(r)),null!==Pl)for(r=Pl.return;null!==r;){var n=r;switch(ri(n),n.tag){case 1:null!=(n=n.type.childContextTypes)&&Io();break;case 3:Zi(),Oo(Po),Oo(jo),na();break;case 5:Ji(n);break;case 4:Zi();break;case 13:case 19:Oo(ea);break;case 10:Ti(n.type._context);break;case 22:case 23:dc()}r=r.return}if(jl=e,Pl=e=_c(e.current,null),Ml=Rl=t,Il=0,Nl=null,Bl=Dl=Fl=0,zl=Ll=null,null!==Ri){for(t=0;t<Ri.length;t++)if(null!==(n=(r=Ri[t]).interleaved)){r.interleaved=null;var o=n.next,i=r.pending;if(null!==i){var a=i.next;i.next=o,n.next=a}r.pending=n}Ri=null}return e}function hc(e,t){for(;;){var r=Pl;try{if(Ai(),oa.current=Qa,ua){for(var n=sa.memoizedState;null!==n;){var o=n.queue;null!==o&&(o.pending=null),n=n.next}ua=!1}if(aa=0,ca=la=sa=null,da=!1,fa=0,Ol.current=null,null===r||null===r.return){Il=1,Nl=t,Pl=null;break}e:{var a=e,s=r.return,l=r,c=t;if(t=Ml,l.flags|=32768,null!==c&&\"object\"==typeof c&&\"function\"==typeof c.then){var u=c,d=l,f=d.tag;if(!(1&d.mode||0!==f&&11!==f&&15!==f)){var h=d.alternate;h?(d.updateQueue=h.updateQueue,d.memoizedState=h.memoizedState,d.lanes=h.lanes):(d.updateQueue=null,d.memoizedState=null)}var p=gs(s);if(null!==p){p.flags&=-257,vs(p,s,l,0,t),1&p.mode&&ms(a,u,t),c=u;var m=(t=p).updateQueue;if(null===m){var g=new Set;g.add(c),t.updateQueue=g}else m.add(c);break e}if(!(1&t)){ms(a,u,t),mc();break e}c=Error(i(426))}else if(ii&&1&l.mode){var v=gs(s);if(null!==v){!(65536&v.flags)&&(v.flags|=256),vs(v,s,l,0,t),mi(cs(c,l));break e}}a=c=cs(c,l),4!==Il&&(Il=2),null===Ll?Ll=[a]:Ll.push(a),a=s;do{switch(a.tag){case 3:a.flags|=65536,t&=-t,a.lanes|=t,Ui(a,hs(0,c,t));break e;case 1:l=c;var b=a.type,y=a.stateNode;if(!(128&a.flags||\"function\"!=typeof b.getDerivedStateFromError&&(null===y||\"function\"!=typeof y.componentDidCatch||null!==ql&&ql.has(y)))){a.flags|=65536,t&=-t,a.lanes|=t,Ui(a,ps(a,l,t));break e}}a=a.return}while(null!==a)}wc(r)}catch(e){t=e,Pl===r&&null!==r&&(Pl=r=r.return);continue}break}}function pc(){var e=El.current;return El.current=Qa,null===e?Qa:e}function mc(){0!==Il&&3!==Il&&2!==Il||(Il=4),null===jl||!(268435455&Fl)&&!(268435455&Dl)||sc(jl,Ml)}function gc(e,t){var r=Tl;Tl|=2;var n=pc();for(jl===e&&Ml===t||(Vl=null,fc(e,t));;)try{vc();break}catch(t){hc(e,t)}if(Ai(),Tl=r,El.current=n,null!==Pl)throw Error(i(261));return jl=null,Ml=0,Il}function vc(){for(;null!==Pl;)yc(Pl)}function bc(){for(;null!==Pl&&!Ye();)yc(Pl)}function yc(e){var t=Cl(e.alternate,e,Rl);e.memoizedProps=e.pendingProps,null===t?wc(e):Pl=t,Ol.current=null}function wc(e){var t=e;do{var r=t.alternate;if(e=t.return,32768&t.flags){if(null!==(r=Xs(r,t)))return r.flags&=32767,void(Pl=r);if(null===e)return Il=6,void(Pl=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}else if(null!==(r=Ks(r,t,Rl)))return void(Pl=r);if(null!==(t=t.sibling))return void(Pl=t);Pl=t=e}while(null!==t);0===Il&&(Il=5)}function xc(e,t,r){var n=yt,o=Al.transition;try{Al.transition=null,yt=1,function(e,t,r,n){do{Sc()}while(null!==Xl);if(6&Tl)throw Error(i(327));r=e.finishedWork;var o=e.finishedLanes;if(null===r)return null;if(e.finishedWork=null,e.finishedLanes=0,r===e.current)throw Error(i(177));e.callbackNode=null,e.callbackPriority=0;var a=r.lanes|r.childLanes;if(function(e,t){var r=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var n=e.eventTimes;for(e=e.expirationTimes;0<r;){var o=31-at(r),i=1<<o;t[o]=0,n[o]=-1,e[o]=-1,r&=~i}}(e,a),e===jl&&(Pl=jl=null,Ml=0),!(2064&r.subtreeFlags)&&!(2064&r.flags)||Kl||(Kl=!0,jc(tt,(function(){return Sc(),null}))),a=!!(15990&r.flags),15990&r.subtreeFlags||a){a=Al.transition,Al.transition=null;var s=yt;yt=1;var l=Tl;Tl|=4,Ol.current=null,function(e,t){if(eo=Wt,hn(e=fn())){if(\"selectionStart\"in e)var r={start:e.selectionStart,end:e.selectionEnd};else e:{var n=(r=(r=e.ownerDocument)&&r.defaultView||window).getSelection&&r.getSelection();if(n&&0!==n.rangeCount){r=n.anchorNode;var o=n.anchorOffset,a=n.focusNode;n=n.focusOffset;try{r.nodeType,a.nodeType}catch(e){r=null;break e}var s=0,l=-1,c=-1,u=0,d=0,f=e,h=null;t:for(;;){for(var p;f!==r||0!==o&&3!==f.nodeType||(l=s+o),f!==a||0!==n&&3!==f.nodeType||(c=s+n),3===f.nodeType&&(s+=f.nodeValue.length),null!==(p=f.firstChild);)h=f,f=p;for(;;){if(f===e)break t;if(h===r&&++u===o&&(l=s),h===a&&++d===n&&(c=s),null!==(p=f.nextSibling))break;h=(f=h).parentNode}f=p}r=-1===l||-1===c?null:{start:l,end:c}}else r=null}r=r||{start:0,end:0}}else r=null;for(to={focusedElem:e,selectionRange:r},Wt=!1,Qs=t;null!==Qs;)if(e=(t=Qs).child,1028&t.subtreeFlags&&null!==e)e.return=t,Qs=e;else for(;null!==Qs;){t=Qs;try{var m=t.alternate;if(1024&t.flags)switch(t.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==m){var g=m.memoizedProps,v=m.memoizedState,b=t.stateNode,y=b.getSnapshotBeforeUpdate(t.elementType===t.type?g:rs(t.type,g),v);b.__reactInternalSnapshotBeforeUpdate=y}break;case 3:var w=t.stateNode.containerInfo;1===w.nodeType?w.textContent=\"\":9===w.nodeType&&w.documentElement&&w.removeChild(w.documentElement);break;default:throw Error(i(163))}}catch(e){kc(t,t.return,e)}if(null!==(e=t.sibling)){e.return=t.return,Qs=e;break}Qs=t.return}m=tl,tl=!1}(e,r),gl(r,e),pn(to),Wt=!!eo,to=eo=null,e.current=r,bl(r,e,o),$e(),Tl=l,yt=s,Al.transition=a}else e.current=r;if(Kl&&(Kl=!1,Xl=e,Yl=o),0===(a=e.pendingLanes)&&(ql=null),function(e){if(it&&\"function\"==typeof it.onCommitFiberRoot)try{it.onCommitFiberRoot(ot,e,void 0,!(128&~e.current.flags))}catch(e){}}(r.stateNode),nc(e,Ze()),null!==t)for(n=e.onRecoverableError,r=0;r<t.length;r++)n((o=t[r]).value,{componentStack:o.stack,digest:o.digest});if(Wl)throw Wl=!1,e=Gl,Gl=null,e;!!(1&Yl)&&0!==e.tag&&Sc(),1&(a=e.pendingLanes)?e===Zl?$l++:($l=0,Zl=e):$l=0,Vo()}(e,t,r,n)}finally{Al.transition=o,yt=n}return null}function Sc(){if(null!==Xl){var e=wt(Yl),t=Al.transition,r=yt;try{if(Al.transition=null,yt=16>e?16:e,null===Xl)var n=!1;else{if(e=Xl,Xl=null,Yl=0,6&Tl)throw Error(i(331));var o=Tl;for(Tl|=4,Qs=e.current;null!==Qs;){var a=Qs,s=a.child;if(16&Qs.flags){var l=a.deletions;if(null!==l){for(var c=0;c<l.length;c++){var u=l[c];for(Qs=u;null!==Qs;){var d=Qs;switch(d.tag){case 0:case 11:case 15:rl(8,d,a)}var f=d.child;if(null!==f)f.return=d,Qs=f;else for(;null!==Qs;){var h=(d=Qs).sibling,p=d.return;if(il(d),d===u){Qs=null;break}if(null!==h){h.return=p,Qs=h;break}Qs=p}}}var m=a.alternate;if(null!==m){var g=m.child;if(null!==g){m.child=null;do{var v=g.sibling;g.sibling=null,g=v}while(null!==g)}}Qs=a}}if(2064&a.subtreeFlags&&null!==s)s.return=a,Qs=s;else e:for(;null!==Qs;){if(2048&(a=Qs).flags)switch(a.tag){case 0:case 11:case 15:rl(9,a,a.return)}var b=a.sibling;if(null!==b){b.return=a.return,Qs=b;break e}Qs=a.return}}var y=e.current;for(Qs=y;null!==Qs;){var w=(s=Qs).child;if(2064&s.subtreeFlags&&null!==w)w.return=s,Qs=w;else e:for(s=y;null!==Qs;){if(2048&(l=Qs).flags)try{switch(l.tag){case 0:case 11:case 15:nl(9,l)}}catch(e){kc(l,l.return,e)}if(l===s){Qs=null;break e}var x=l.sibling;if(null!==x){x.return=l.return,Qs=x;break e}Qs=l.return}}if(Tl=o,Vo(),it&&\"function\"==typeof it.onPostCommitFiberRoot)try{it.onPostCommitFiberRoot(ot,e)}catch(e){}n=!0}return n}finally{yt=r,Al.transition=t}}return!1}function Cc(e,t,r){e=zi(e,t=hs(0,t=cs(r,t),1),1),t=ec(),null!==e&&(vt(e,1,t),nc(e,t))}function kc(e,t,r){if(3===e.tag)Cc(e,e,r);else for(;null!==t;){if(3===t.tag){Cc(t,e,r);break}if(1===t.tag){var n=t.stateNode;if(\"function\"==typeof t.type.getDerivedStateFromError||\"function\"==typeof n.componentDidCatch&&(null===ql||!ql.has(n))){t=zi(t,e=ps(t,e=cs(r,e),1),1),e=ec(),null!==t&&(vt(t,1,e),nc(t,e));break}}t=t.return}}function Ec(e,t,r){var n=e.pingCache;null!==n&&n.delete(t),t=ec(),e.pingedLanes|=e.suspendedLanes&r,jl===e&&(Ml&r)===r&&(4===Il||3===Il&&(130023424&Ml)===Ml&&500>Ze()-Hl?fc(e,0):Bl|=r),nc(e,t)}function Oc(e,t){0===t&&(1&e.mode?(t=ut,!(130023424&(ut<<=1))&&(ut=4194304)):t=1);var r=ec();null!==(e=Ni(e,t))&&(vt(e,t,r),nc(e,r))}function Ac(e){var t=e.memoizedState,r=0;null!==t&&(r=t.retryLane),Oc(e,r)}function Tc(e,t){var r=0;switch(e.tag){case 13:var n=e.stateNode,o=e.memoizedState;null!==o&&(r=o.retryLane);break;case 19:n=e.stateNode;break;default:throw Error(i(314))}null!==n&&n.delete(t),Oc(e,r)}function jc(e,t){return Ke(e,t)}function Pc(e,t,r,n){this.tag=e,this.key=r,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Mc(e,t,r,n){return new Pc(e,t,r,n)}function Rc(e){return!(!(e=e.prototype)||!e.isReactComponent)}function _c(e,t){var r=e.alternate;return null===r?((r=Mc(e.tag,t,e.key,e.mode)).elementType=e.elementType,r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.pendingProps=t,r.type=e.type,r.flags=0,r.subtreeFlags=0,r.deletions=null),r.flags=14680064&e.flags,r.childLanes=e.childLanes,r.lanes=e.lanes,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,t=e.dependencies,r.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r}function Ic(e,t,r,n,o,a){var s=2;if(n=e,\"function\"==typeof e)Rc(e)&&(s=1);else if(\"string\"==typeof e)s=5;else e:switch(e){case C:return Nc(r.children,o,a,t);case k:s=8,o|=8;break;case E:return(e=Mc(12,r,t,2|o)).elementType=E,e.lanes=a,e;case j:return(e=Mc(13,r,t,o)).elementType=j,e.lanes=a,e;case P:return(e=Mc(19,r,t,o)).elementType=P,e.lanes=a,e;case _:return Fc(r,o,a,t);default:if(\"object\"==typeof e&&null!==e)switch(e.$$typeof){case O:s=10;break e;case A:s=9;break e;case T:s=11;break e;case M:s=14;break e;case R:s=16,n=null;break e}throw Error(i(130,null==e?e:typeof e,\"\"))}return(t=Mc(s,r,t,o)).elementType=e,t.type=n,t.lanes=a,t}function Nc(e,t,r,n){return(e=Mc(7,e,n,t)).lanes=r,e}function Fc(e,t,r,n){return(e=Mc(22,e,n,t)).elementType=_,e.lanes=r,e.stateNode={isHidden:!1},e}function Dc(e,t,r){return(e=Mc(6,e,null,t)).lanes=r,e}function Bc(e,t,r){return(t=Mc(4,null!==e.children?e.children:[],e.key,t)).lanes=r,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Lc(e,t,r,n,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=gt(0),this.expirationTimes=gt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=gt(0),this.identifierPrefix=n,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function zc(e,t,r,n,o,i,a,s,l){return e=new Lc(e,t,r,s,l),1===t?(t=1,!0===i&&(t|=8)):t=0,i=Mc(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:n,isDehydrated:r,cache:null,transitions:null,pendingSuspenseBoundaries:null},Di(i),e}function Hc(e){if(!e)return To;e:{if(Ue(e=e._reactInternals)!==e||1!==e.tag)throw Error(i(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(_o(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(i(171))}if(1===e.tag){var r=e.type;if(_o(r))return Fo(e,r,t)}return t}function Uc(e,t,r,n,o,i,a,s,l){return(e=zc(r,n,!0,e,0,i,0,s,l)).context=Hc(null),r=e.current,(i=Li(n=ec(),o=tc(r))).callback=null!=t?t:null,zi(r,i,o),e.current.lanes=o,vt(e,o,n),nc(e,n),e}function Vc(e,t,r,n){var o=t.current,i=ec(),a=tc(o);return r=Hc(r),null===t.context?t.context=r:t.pendingContext=r,(t=Li(i,a)).payload={element:e},null!==(n=void 0===n?null:n)&&(t.callback=n),null!==(e=zi(o,t,a))&&(rc(e,o,a,i),Hi(e,o,a)),a}function Wc(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function Gc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var r=e.retryLane;e.retryLane=0!==r&&r<t?r:t}}function qc(e,t){Gc(e,t),(e=e.alternate)&&Gc(e,t)}Cl=function(e,t,r){if(null!==e)if(e.memoizedProps!==t.pendingProps||Po.current)ys=!0;else{if(0===(e.lanes&r)&&!(128&t.flags))return ys=!1,function(e,t,r){switch(t.tag){case 3:js(t),pi();break;case 5:Qi(t);break;case 1:_o(t.type)&&Do(t);break;case 4:$i(t,t.stateNode.containerInfo);break;case 10:var n=t.type._context,o=t.memoizedProps.value;Ao(Ci,n._currentValue),n._currentValue=o;break;case 13:if(null!==(n=t.memoizedState))return null!==n.dehydrated?(Ao(ea,1&ea.current),t.flags|=128,null):0!==(r&t.child.childLanes)?Ds(e,t,r):(Ao(ea,1&ea.current),null!==(e=Ws(e,t,r))?e.sibling:null);Ao(ea,1&ea.current);break;case 19:if(n=0!==(r&t.childLanes),128&e.flags){if(n)return Us(e,t,r);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),Ao(ea,ea.current),n)break;return null;case 22:case 23:return t.lanes=0,ks(e,t,r)}return Ws(e,t,r)}(e,t,r);ys=!!(131072&e.flags)}else ys=!1,ii&&1048576&t.flags&&ei(t,Ko,t.index);switch(t.lanes=0,t.tag){case 2:var n=t.type;Vs(e,t),e=t.pendingProps;var o=Ro(t,jo.current);Pi(t,r),o=ga(null,t,n,e,o,r);var a=va();return t.flags|=1,\"object\"==typeof o&&null!==o&&\"function\"==typeof o.render&&void 0===o.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,_o(n)?(a=!0,Do(t)):a=!1,t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,Di(t),o.updater=os,t.stateNode=o,o._reactInternals=t,ls(t,n,e,r),t=Ts(null,t,n,!0,a,r)):(t.tag=0,ii&&a&&ti(t),ws(null,t,o,r),t=t.child),t;case 16:n=t.elementType;e:{switch(Vs(e,t),e=t.pendingProps,n=(o=n._init)(n._payload),t.type=n,o=t.tag=function(e){if(\"function\"==typeof e)return Rc(e)?1:0;if(null!=e){if((e=e.$$typeof)===T)return 11;if(e===M)return 14}return 2}(n),e=rs(n,e),o){case 0:t=Os(null,t,n,e,r);break e;case 1:t=As(null,t,n,e,r);break e;case 11:t=xs(null,t,n,e,r);break e;case 14:t=Ss(null,t,n,rs(n.type,e),r);break e}throw Error(i(306,n,\"\"))}return t;case 0:return n=t.type,o=t.pendingProps,Os(e,t,n,o=t.elementType===n?o:rs(n,o),r);case 1:return n=t.type,o=t.pendingProps,As(e,t,n,o=t.elementType===n?o:rs(n,o),r);case 3:e:{if(js(t),null===e)throw Error(i(387));n=t.pendingProps,o=(a=t.memoizedState).element,Bi(e,t),Vi(t,n,null,r);var s=t.memoizedState;if(n=s.element,a.isDehydrated){if(a={element:n,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=a,t.memoizedState=a,256&t.flags){t=Ps(e,t,n,r,o=cs(Error(i(423)),t));break e}if(n!==o){t=Ps(e,t,n,r,o=cs(Error(i(424)),t));break e}for(oi=co(t.stateNode.containerInfo.firstChild),ni=t,ii=!0,ai=null,r=Si(t,null,n,r),t.child=r;r;)r.flags=-3&r.flags|4096,r=r.sibling}else{if(pi(),n===o){t=Ws(e,t,r);break e}ws(e,t,n,r)}t=t.child}return t;case 5:return Qi(t),null===e&&ui(t),n=t.type,o=t.pendingProps,a=null!==e?e.memoizedProps:null,s=o.children,ro(n,o)?s=null:null!==a&&ro(n,a)&&(t.flags|=32),Es(e,t),ws(e,t,s,r),t.child;case 6:return null===e&&ui(t),null;case 13:return Ds(e,t,r);case 4:return $i(t,t.stateNode.containerInfo),n=t.pendingProps,null===e?t.child=xi(t,null,n,r):ws(e,t,n,r),t.child;case 11:return n=t.type,o=t.pendingProps,xs(e,t,n,o=t.elementType===n?o:rs(n,o),r);case 7:return ws(e,t,t.pendingProps,r),t.child;case 8:case 12:return ws(e,t,t.pendingProps.children,r),t.child;case 10:e:{if(n=t.type._context,o=t.pendingProps,a=t.memoizedProps,s=o.value,Ao(Ci,n._currentValue),n._currentValue=s,null!==a)if(sn(a.value,s)){if(a.children===o.children&&!Po.current){t=Ws(e,t,r);break e}}else for(null!==(a=t.child)&&(a.return=t);null!==a;){var l=a.dependencies;if(null!==l){s=a.child;for(var c=l.firstContext;null!==c;){if(c.context===n){if(1===a.tag){(c=Li(-1,r&-r)).tag=2;var u=a.updateQueue;if(null!==u){var d=(u=u.shared).pending;null===d?c.next=c:(c.next=d.next,d.next=c),u.pending=c}}a.lanes|=r,null!==(c=a.alternate)&&(c.lanes|=r),ji(a.return,r,t),l.lanes|=r;break}c=c.next}}else if(10===a.tag)s=a.type===t.type?null:a.child;else if(18===a.tag){if(null===(s=a.return))throw Error(i(341));s.lanes|=r,null!==(l=s.alternate)&&(l.lanes|=r),ji(s,r,t),s=a.sibling}else s=a.child;if(null!==s)s.return=a;else for(s=a;null!==s;){if(s===t){s=null;break}if(null!==(a=s.sibling)){a.return=s.return,s=a;break}s=s.return}a=s}ws(e,t,o.children,r),t=t.child}return t;case 9:return o=t.type,n=t.pendingProps.children,Pi(t,r),n=n(o=Mi(o)),t.flags|=1,ws(e,t,n,r),t.child;case 14:return o=rs(n=t.type,t.pendingProps),Ss(e,t,n,o=rs(n.type,o),r);case 15:return Cs(e,t,t.type,t.pendingProps,r);case 17:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:rs(n,o),Vs(e,t),t.tag=1,_o(n)?(e=!0,Do(t)):e=!1,Pi(t,r),as(t,n,o),ls(t,n,o,r),Ts(null,t,n,!0,e,r);case 19:return Us(e,t,r);case 22:return ks(e,t,r)}throw Error(i(156,t.tag))};var Kc=\"function\"==typeof reportError?reportError:function(e){console.error(e)};function Xc(e){this._internalRoot=e}function Yc(e){this._internalRoot=e}function $c(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Zc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||\" react-mount-point-unstable \"!==e.nodeValue))}function Qc(){}function Jc(e,t,r,n,o){var i=r._reactRootContainer;if(i){var a=i;if(\"function\"==typeof o){var s=o;o=function(){var e=Wc(a);s.call(e)}}Vc(t,a,e,o)}else a=function(e,t,r,n,o){if(o){if(\"function\"==typeof n){var i=n;n=function(){var e=Wc(a);i.call(e)}}var a=Uc(t,n,e,0,null,!1,0,\"\",Qc);return e._reactRootContainer=a,e[mo]=a.current,Un(8===e.nodeType?e.parentNode:e),uc(),a}for(;o=e.lastChild;)e.removeChild(o);if(\"function\"==typeof n){var s=n;n=function(){var e=Wc(l);s.call(e)}}var l=zc(e,0,!1,null,0,!1,0,\"\",Qc);return e._reactRootContainer=l,e[mo]=l.current,Un(8===e.nodeType?e.parentNode:e),uc((function(){Vc(t,l,r,n)})),l}(r,t,e,o,n);return Wc(a)}Yc.prototype.render=Xc.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(i(409));Vc(e,t,null,null)},Yc.prototype.unmount=Xc.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;uc((function(){Vc(null,e,null,null)})),t[mo]=null}},Yc.prototype.unstable_scheduleHydration=function(e){if(e){var t=kt();e={blockedOn:null,target:e,priority:t};for(var r=0;r<_t.length&&0!==t&&t<_t[r].priority;r++);_t.splice(r,0,e),0===r&&Dt(e)}},xt=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var r=dt(t.pendingLanes);0!==r&&(bt(t,1|r),nc(t,Ze()),!(6&Tl)&&(Ul=Ze()+500,Vo()))}break;case 13:uc((function(){var t=Ni(e,1);if(null!==t){var r=ec();rc(t,e,1,r)}})),qc(e,1)}},St=function(e){if(13===e.tag){var t=Ni(e,134217728);null!==t&&rc(t,e,134217728,ec()),qc(e,134217728)}},Ct=function(e){if(13===e.tag){var t=tc(e),r=Ni(e,t);null!==r&&rc(r,e,t,ec()),qc(e,t)}},kt=function(){return yt},Et=function(e,t){var r=yt;try{return yt=e,t()}finally{yt=r}},Se=function(e,t,r){switch(t){case\"input\":if(Q(e,r),t=r.name,\"radio\"===r.type&&null!=t){for(r=e;r.parentNode;)r=r.parentNode;for(r=r.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+t)+'][type=\"radio\"]'),t=0;t<r.length;t++){var n=r[t];if(n!==e&&n.form===e.form){var o=So(n);if(!o)throw Error(i(90));K(n),Q(n,o)}}}break;case\"textarea\":ie(e,r);break;case\"select\":null!=(t=r.value)&&re(e,!!r.multiple,t,!1)}},Te=cc,je=uc;var eu={usingClientEntryPoint:!1,Events:[wo,xo,So,Oe,Ae,cc]},tu={findFiberByHostInstance:yo,bundleType:0,version:\"18.3.1\",rendererPackageName:\"react-dom\"},ru={bundleType:tu.bundleType,version:tu.version,rendererPackageName:tu.rendererPackageName,rendererConfig:tu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:w.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Ge(e))?null:e.stateNode},findFiberByHostInstance:tu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:\"18.3.1-next-f1338f8080-20240426\"};if(\"undefined\"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var nu=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!nu.isDisabled&&nu.supportsFiber)try{ot=nu.inject(ru),it=nu}catch(ue){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=eu,t.createPortal=function(e,t){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!$c(t))throw Error(i(200));return function(e,t,r){var n=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:S,key:null==n?null:\"\"+n,children:e,containerInfo:t,implementation:r}}(e,t,null,r)},t.createRoot=function(e,t){if(!$c(e))throw Error(i(299));var r=!1,n=\"\",o=Kc;return null!=t&&(!0===t.unstable_strictMode&&(r=!0),void 0!==t.identifierPrefix&&(n=t.identifierPrefix),void 0!==t.onRecoverableError&&(o=t.onRecoverableError)),t=zc(e,1,!1,null,0,r,0,n,o),e[mo]=t.current,Un(8===e.nodeType?e.parentNode:e),new Xc(t)},t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if(\"function\"==typeof e.render)throw Error(i(188));throw e=Object.keys(e).join(\",\"),Error(i(268,e))}return null===(e=Ge(t))?null:e.stateNode},t.flushSync=function(e){return uc(e)},t.hydrate=function(e,t,r){if(!Zc(t))throw Error(i(200));return Jc(null,e,t,!0,r)},t.hydrateRoot=function(e,t,r){if(!$c(e))throw Error(i(405));var n=null!=r&&r.hydratedSources||null,o=!1,a=\"\",s=Kc;if(null!=r&&(!0===r.unstable_strictMode&&(o=!0),void 0!==r.identifierPrefix&&(a=r.identifierPrefix),void 0!==r.onRecoverableError&&(s=r.onRecoverableError)),t=Uc(t,null,e,1,null!=r?r:null,o,0,a,s),e[mo]=t.current,Un(e),n)for(e=0;e<n.length;e++)o=(o=(r=n[e])._getVersion)(r._source),null==t.mutableSourceEagerHydrationData?t.mutableSourceEagerHydrationData=[r,o]:t.mutableSourceEagerHydrationData.push(r,o);return new Yc(t)},t.render=function(e,t,r){if(!Zc(t))throw Error(i(200));return Jc(null,e,t,!1,r)},t.unmountComponentAtNode=function(e){if(!Zc(e))throw Error(i(40));return!!e._reactRootContainer&&(uc((function(){Jc(null,null,e,!1,(function(){e._reactRootContainer=null,e[mo]=null}))})),!0)},t.unstable_batchedUpdates=cc,t.unstable_renderSubtreeIntoContainer=function(e,t,r,n){if(!Zc(r))throw Error(i(200));if(null==e||void 0===e._reactInternals)throw Error(i(38));return Jc(e,t,r,!1,n)},t.version=\"18.3.1-next-f1338f8080-20240426\"},2650:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Contrast=void 0;const n=r(4892),o=r(6536),i=r(5483);t.Contrast=function(e){const t=Math.pow((this.contrast()+100)/100,2),r=e.data,n=r.length;let o=150,i=150,a=150;for(let e=0;e<n;e+=4)o=r[e],i=r[e+1],a=r[e+2],o/=255,o-=.5,o*=t,o+=.5,o*=255,i/=255,i-=.5,i*=t,i+=.5,i*=255,a/=255,a-=.5,a*=t,a+=.5,a*=255,o=o<0?0:o>255?255:o,i=i<0?0:i>255?255:i,a=a<0?0:a>255?255:a,r[e]=o,r[e+1]=i,r[e+2]=a},n.Factory.addGetterSetter(o.Node,\"contrast\",0,(0,i.getNumberValidator)(),n.Factory.afterSetFilter)},2910:e=>{window,e.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=7)}([function(e,t,r){\"use strict\";var n,o=this&&this.__extends||(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.eventEmitter=t.INTERNAL_ERROR_EVENT=t.UNKNOWN_IDX=t.ROOT_IDX=t.getStylesheet=t.getDefaultOptions=t.CAMEL_DATASET_SPLIT_TYPE=t.CAMEL_DATASET_IDENTIFIER_EXTRA=t.CAMEL_DATASET_IDENTIFIER=t.DATASET_SPLIT_TYPE=t.DATASET_IDENTIFIER_EXTRA=t.DATASET_IDENTIFIER=t.STYLESHEET_ID=t.LOCAL_STORE_KEY=t.ID_DIVISION=void 0;var a=i(r(10)),s=i(r(2));t.ID_DIVISION=\";\",t.LOCAL_STORE_KEY=\"highlight-mengshou\",t.STYLESHEET_ID=\"highlight-mengshou-style\",t.DATASET_IDENTIFIER=\"highlight-id\",t.DATASET_IDENTIFIER_EXTRA=\"highlight-id-extra\",t.DATASET_SPLIT_TYPE=\"highlight-split-type\",t.CAMEL_DATASET_IDENTIFIER=a.default(t.DATASET_IDENTIFIER),t.CAMEL_DATASET_IDENTIFIER_EXTRA=a.default(t.DATASET_IDENTIFIER_EXTRA),t.CAMEL_DATASET_SPLIT_TYPE=a.default(t.DATASET_SPLIT_TYPE),t.getDefaultOptions=function(){return{$root:document||document.documentElement,exceptSelectors:null,wrapTag:\"span\",verbose:!1,style:{className:\"highlight-mengshou-wrap\"}}},t.getStylesheet=function(){return\"\\n    .\"+t.getDefaultOptions().style.className+\" {\\n        background: #ff9;\\n        cursor: pointer;\\n    }\\n    .\"+t.getDefaultOptions().style.className+\".active {\\n        background: #ffb;\\n    }\\n\"},t.ROOT_IDX=-2,t.UNKNOWN_IDX=-1,t.INTERNAL_ERROR_EVENT=\"error\";var l=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return o(t,e),t}(s.default);t.eventEmitter=new l},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.UserInputEvent=t.SelectedNodeType=t.CreateFrom=t.EventType=t.ERROR=t.SplitType=void 0,function(e){e.none=\"none\",e.head=\"head\",e.tail=\"tail\",e.both=\"both\"}(t.SplitType||(t.SplitType={})),function(e){e.DOM_TYPE_ERROR=\"[DOM] Receive wrong node type.\",e.DOM_SELECTION_EMPTY=\"[DOM] The selection contains no dom node, may be you except them.\",e.RANGE_INVALID=\"[RANGE] Got invalid dom range, can't convert to a valid highlight range.\",e.RANGE_NODE_INVALID=\"[RANGE] Start or end node isn't a text node, it may occur an error.\",e.DB_ID_DUPLICATE_ERROR=\"[STORE] Unique id conflict.\",e.CACHE_SET_ERROR=\"[CACHE] Cache.data can't be set manually, please use .save().\",e.SOURCE_TYPE_ERROR=\"[SOURCE] Object isn't a highlight source instance.\",e.HIGHLIGHT_RANGE_FROZEN=\"[HIGHLIGHT_RANGE] A highlight range must be frozen before render.\",e.HIGHLIGHT_SOURCE_RECREATE=\"[HIGHLIGHT_SOURCE] Recreate highlights from sources error.\",e.HIGHLIGHT_SOURCE_NONE_RENDER=\"[HIGHLIGHT_SOURCE] This highlight source isn't rendered. May be the exception skips it or the dom structure has changed.\"}(t.ERROR||(t.ERROR={})),function(e){e.CREATE=\"selection:create\",e.REMOVE=\"selection:remove\",e.MODIFY=\"selection:modify\",e.HOVER=\"selection:hover\",e.HOVER_OUT=\"selection:hover-out\",e.CLICK=\"selection:click\"}(t.EventType||(t.EventType={})),function(e){e.STORE=\"from-store\",e.INPUT=\"from-input\"}(t.CreateFrom||(t.CreateFrom={})),function(e){e.text=\"text\",e.span=\"span\"}(t.SelectedNodeType||(t.SelectedNodeType={})),function(e){e.touchend=\"touchend\",e.mouseup=\"mouseup\",e.touchstart=\"touchstart\",e.click=\"click\",e.mouseover=\"mouseover\"}(t.UserInputEvent||(t.UserInputEvent={}))},function(e,t,r){\"use strict\";var n=this&&this.__read||function(e,t){var r=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,i=r.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},o=this&&this.__spread||function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(n(arguments[t]));return e};Object.defineProperty(t,\"__esModule\",{value:!0});var i=function(){function e(){this.handlersMap=Object.create(null)}return e.prototype.on=function(e,t){return this.handlersMap[e]||(this.handlersMap[e]=[]),this.handlersMap[e].push(t),this},e.prototype.off=function(e,t){return this.handlersMap[e]&&this.handlersMap[e].splice(this.handlersMap[e].indexOf(t)>>>0,1),this},e.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return this.handlersMap[e]&&this.handlersMap[e].slice().forEach((function(e){e.apply(void 0,o(t))})),this},e}();t.default=i},function(e,t,r){\"use strict\";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(r(5)),i=r(9),a=function(){function e(e,t,r,n,o){this.startMeta=e,this.endMeta=t,this.text=r,this.id=n,this.__isHighlightSource={},o&&(this.extra=o)}return e.prototype.deSerialize=function(e,t){var r=i.queryElementNode(this,e),n=r.start,a=r.end,s=i.getTextChildByOffset(n,this.startMeta.textOffset),l=i.getTextChildByOffset(a,this.endMeta.textOffset);if(!t.Serialize.Restore.isEmpty()){var c=t.Serialize.Restore.call(this,s,l)||[];s=c[0]||s,l=c[1]||l}return new o.default(s,l,this.text,this.id,!0)},e}();t.default=a},function(e,t,r){\"use strict\";var n=this&&this.__values||function(e){var t=\"function\"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&\"number\"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},o=this&&this.__read||function(e,t){var r=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,i=r.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},i=this&&this.__spread||function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(o(arguments[t]));return e};Object.defineProperty(t,\"__esModule\",{value:!0}),t.hasClass=t.removeAllClass=t.removeClass=t.addClass=t.addEventListener=t.removeEventListener=t.forEach=t.getHighlightById=t.getHighlightsByRoot=t.getExtraHighlightId=t.getHighlightId=t.isHighlightWrapNode=void 0;var a=r(0);t.isHighlightWrapNode=function(e){return!!e.dataset&&!!e.dataset[a.CAMEL_DATASET_IDENTIFIER]};var s=function(e,r){for(var n=!1,o=null;e;){if(t.isHighlightWrapNode(e)&&(o=e),e===r){n=!0;break}e=e.parentNode}return n?o:null};t.getHighlightId=function(e,t){return(e=s(e,t))?e.dataset[a.CAMEL_DATASET_IDENTIFIER]:\"\"},t.getExtraHighlightId=function(e,t){return(e=s(e,t))?e.dataset[a.CAMEL_DATASET_IDENTIFIER_EXTRA].split(a.ID_DIVISION).filter((function(e){return e})):[]},t.getHighlightsByRoot=function(e,t){var r,o;Array.isArray(e)||(e=[e]);var i=[];try{for(var s=n(e),l=s.next();!l.done;l=s.next()){var c=l.value.querySelectorAll(t+\"[data-\"+a.DATASET_IDENTIFIER+\"]\");i.push.apply(i,c)}}catch(e){r={error:e}}finally{try{l&&!l.done&&(o=s.return)&&o.call(s)}finally{if(r)throw r.error}}return i},t.getHighlightById=function(e,t,r){var o,i,s=[],l=new RegExp(\"(\"+t+\"\\\\\"+a.ID_DIVISION+\"|\\\\\"+a.ID_DIVISION+\"?\"+t+\"$)\"),c=e.querySelectorAll(r+\"[data-\"+a.DATASET_IDENTIFIER+\"]\");try{for(var u=n(c),d=u.next();!d.done;d=u.next()){var f=d.value;if(f.dataset[a.CAMEL_DATASET_IDENTIFIER]!==t){var h=f.dataset[a.CAMEL_DATASET_IDENTIFIER_EXTRA];l.test(h)&&s.push(f)}else s.push(f)}}catch(e){o={error:e}}finally{try{d&&!d.done&&(i=u.return)&&i.call(u)}finally{if(o)throw o.error}}return s},t.forEach=function(e,t){for(var r=0;r<e.length;r++)t(e[r],r,e)},t.removeEventListener=function(e,t,r){e.removeEventListener(t,r)},t.addEventListener=function(e,r,n){return e.addEventListener(r,n),function(){t.removeEventListener(e,r,n)}},t.addClass=function(e,t){var r;Array.isArray(t)||(t=[t]),(r=e.classList).add.apply(r,i(t))},t.removeClass=function(e,t){e.classList.remove(t)},t.removeAllClass=function(e){e.className=\"\"},t.hasClass=function(e,t){return e.classList.contains(t)}},function(e,t,r){\"use strict\";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});var o=n(r(3)),i=r(1),a=r(11),s=n(r(6)),l=r(12),c=r(0),u=function(){function e(e,t,r,n,o){void 0===o&&(o=!1),3===e.$node.nodeType&&3===t.$node.nodeType||c.eventEmitter.emit(c.INTERNAL_ERROR_EVENT,{type:i.ERROR.RANGE_NODE_INVALID}),this.start=l.formatDomNode(e),this.end=l.formatDomNode(t),this.text=r,this.frozen=o,this.id=n}return e.fromSelection=function(t){var r=a.getDomRange();if(!r)return null;var n={$node:r.startContainer,offset:r.startOffset},o={$node:r.endContainer,offset:r.endOffset},i=r.toString(),l=t.call(n,o,i);return new e(n,o,i,l=null!=l?l:s.default())},e.prototype.serialize=function(e,t){var r,n=l.getDomMeta(this.start.$node,this.start.offset,e),i=l.getDomMeta(this.end.$node,this.end.offset,e);return t.Serialize.RecordInfo.isEmpty()||(r=t.Serialize.RecordInfo.call(this.start,this.end,e)),this.frozen=!0,new o.default(n,i,this.text,this.id,r)},e.removeDomRange=a.removeSelection,e}();t.default=u},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function e(t){return t?(t^16*Math.random()>>t/4).toString(16):([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,e)}},function(e,t,r){e.exports=r(8)},function(e,t,r){\"use strict\";var n,o=this&&this.__extends||(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),i=this&&this.__assign||function(){return(i=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});var s=a(r(2)),l=a(r(5)),c=a(r(3)),u=a(r(6)),d=a(r(13)),f=a(r(14)),h=a(r(16)),p=a(r(17)),m=r(0),g=r(1),v=r(4),b=function(e){function t(t){var r=e.call(this)||this;r.event=f.default(),r.run=function(){return v.addEventListener(r.options.$root,r.event.PointerEnd,r._handleSelection)},r.stop=function(){v.removeEventListener(r.options.$root,r.event.PointerEnd,r._handleSelection)},r.addClass=function(e,t){r.getDoms(t).forEach((function(t){v.addClass(t,e)}))},r.removeClass=function(e,t){r.getDoms(t).forEach((function(t){v.removeClass(t,e)}))},r.getIdByDom=function(e){return v.getHighlightId(e,r.options.$root)},r.getExtraIdByDom=function(e){return v.getExtraHighlightId(e,r.options.$root)},r.getDoms=function(e){return e?v.getHighlightById(r.options.$root,e,r.options.wrapTag):v.getHighlightsByRoot(r.options.$root,r.options.wrapTag)},r.dispose=function(){var e=r.options.$root;v.removeEventListener(e,r.event.PointerOver,r._handleHighlightHover),v.removeEventListener(e,r.event.PointerEnd,r._handleSelection),v.removeEventListener(e,r.event.PointerTap,r._handleHighlightClick),r.removeAll()},r.setOption=function(e){r.options=i(i({},r.options),e),r.painter=new p.default({$root:r.options.$root,wrapTag:r.options.wrapTag,className:r.options.style.className,exceptSelectors:r.options.exceptSelectors},r.hooks)},r.fromRange=function(e){var t={$node:e.startContainer,offset:e.startOffset},n={$node:e.endContainer,offset:e.endOffset},o=e.toString(),i=r.hooks.Render.UUID.call(t,n,o);i=null!=i?i:u.default();var a=new l.default(t,n,o,i);return a?r._highlightFromHRange(a):(m.eventEmitter.emit(m.INTERNAL_ERROR_EVENT,{type:g.ERROR.RANGE_INVALID}),null)},r.fromStore=function(e,t,n,o,i){var a=new c.default(e,t,n,o,i);try{return r._highlightFromHSource(a),a}catch(e){return m.eventEmitter.emit(m.INTERNAL_ERROR_EVENT,{type:g.ERROR.HIGHLIGHT_SOURCE_RECREATE,error:e,detail:a}),null}},r._getHooks=function(){return{Render:{UUID:new d.default(\"Render.UUID\"),SelectedNodes:new d.default(\"Render.SelectedNodes\"),WrapNode:new d.default(\"Render.WrapNode\")},Serialize:{Restore:new d.default(\"Serialize.Restore\"),RecordInfo:new d.default(\"Serialize.RecordInfo\")},Remove:{UpdateNodes:new d.default(\"Remove.UpdateNodes\")}}},r._highlightFromHRange=function(e){var t=e.serialize(r.options.$root,r.hooks);return 0===r.painter.highlightRange(e).length?(m.eventEmitter.emit(m.INTERNAL_ERROR_EVENT,{type:g.ERROR.DOM_SELECTION_EMPTY}),null):(r.cache.save(t),r.emit(g.EventType.CREATE,{sources:[t],type:g.CreateFrom.INPUT},r),t)},r._handleSelection=function(){var e=l.default.fromSelection(r.hooks.Render.UUID);e&&(r._highlightFromHRange(e),l.default.removeDomRange())},r._handleHighlightHover=function(e){var t=e.target;if(!v.isHighlightWrapNode(t))return r._hoverId&&r.emit(g.EventType.HOVER_OUT,{id:r._hoverId},r,e),void(r._hoverId=null);var n=v.getHighlightId(t,r.options.$root);r._hoverId!==n&&(r._hoverId&&r.emit(g.EventType.HOVER_OUT,{id:r._hoverId},r,e),r._hoverId=n,r.emit(g.EventType.HOVER,{id:r._hoverId},r,e))},r._handleError=function(e){r.options.verbose&&console.warn(e)},r._handleHighlightClick=function(e){var t=e.target;if(v.isHighlightWrapNode(t)){var n=v.getHighlightId(t,r.options.$root);r.emit(g.EventType.CLICK,{id:n},r,e)}},r.options=m.getDefaultOptions(),r.hooks=r._getHooks(),r.setOption(t),r.cache=new h.default;var n=r.options.$root;return v.addEventListener(n,r.event.PointerOver,r._handleHighlightHover),v.addEventListener(n,r.event.PointerTap,r._handleHighlightClick),m.eventEmitter.on(m.INTERNAL_ERROR_EVENT,r._handleError),r}return o(t,e),t.prototype.remove=function(e){if(e){var t=this.painter.removeHighlight(e);this.cache.remove(e),t&&this.emit(g.EventType.REMOVE,{ids:[e]},this)}},t.prototype.removeAll=function(){this.painter.removeAllHighlight();var e=this.cache.removeAll();this.emit(g.EventType.REMOVE,{ids:e},this)},t.prototype._highlightFromHSource=function(e){void 0===e&&(e=[]);var t=this.painter.highlightSource(e);this.emit(g.EventType.CREATE,{sources:t,type:g.CreateFrom.STORE},this),this.cache.save(e)},t.event=g.EventType,t.isHighlightWrapNode=v.isHighlightWrapNode,t.isHighlightSource=function(e){return!!e.__isHighlightSource},t}(s.default);t.default=b},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.queryElementNode=t.getTextChildByOffset=void 0;var n=r(0);t.getTextChildByOffset=function(e,t){for(var r=[e],n=null,o=0,i=0;n=r.pop();){for(var a=n.childNodes,s=a.length-1;s>=0;s--)r.push(a[s]);if(3===n.nodeType&&(i=t-o,(o+=n.textContent.length)>=t))break}return n||(n=e),{$node:n,offset:i}},t.queryElementNode=function(e,t){return{start:e.startMeta.parentIndex===n.ROOT_IDX?t:t.getElementsByTagName(e.startMeta.parentTagName)[e.startMeta.parentIndex],end:e.endMeta.parentIndex===n.ROOT_IDX?t:t.getElementsByTagName(e.endMeta.parentTagName)[e.endMeta.parentIndex]}}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return e.split(\"-\").reduce((function(e,t,r){return e+(0===r?t:t[0].toUpperCase()+t.slice(1))}),\"\")}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.removeSelection=t.getDomRange=void 0,t.getDomRange=function(){var e=window.getSelection();return e.isCollapsed?(console.debug(\"no text selected\"),null):e.getRangeAt(0)},t.removeSelection=function(){window.getSelection().removeAllRanges()}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.formatDomNode=t.getDomMeta=void 0;var n=r(0);t.getDomMeta=function(e,t,r){var o=function(e){if(e instanceof HTMLElement&&(!e.dataset||!e.dataset[n.CAMEL_DATASET_IDENTIFIER]))return e;for(var t=e.parentNode;null==t?void 0:t.dataset[n.CAMEL_DATASET_IDENTIFIER];)t=t.parentNode;return t}(e),i=o===r?n.ROOT_IDX:function(e,t){for(var r=e.tagName,o=t.getElementsByTagName(r),i=0;i<o.length;i++)if(e===o[i])return i;return n.UNKNOWN_IDX}(o,r),a=function(e,t){for(var r=[e],n=null,o=0;n=r.pop();){for(var i=n.childNodes,a=i.length-1;a>=0;a--)r.push(i[a]);if(3===n.nodeType&&n!==t)o+=n.textContent.length;else if(3===n.nodeType)break}return o}(o,e);return{parentTagName:o.tagName,parentIndex:i,textOffset:a+t}},t.formatDomNode=function(e){return 3===e.$node.nodeType||4===e.$node.nodeType||8===e.$node.nodeType?e:{$node:e.$node.childNodes[e.offset],offset:0}}},function(e,t,r){\"use strict\";var n=this&&this.__read||function(e,t){var r=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,i=r.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},o=this&&this.__spread||function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(n(arguments[t]));return e};Object.defineProperty(t,\"__esModule\",{value:!0});var i=function(){function e(e){this.name=\"\",this.ops=[],this.name=e}return e.prototype.tap=function(e){var t=this;return-1===this.ops.indexOf(e)&&this.ops.push(e),function(){t.remove(e)}},e.prototype.remove=function(e){var t=this.ops.indexOf(e);t<0||this.ops.splice(t,1)},e.prototype.isEmpty=function(){return 0===this.ops.length},e.prototype.call=function(){for(var e,t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return this.ops.forEach((function(r){e=r.apply(void 0,o(t))})),e},e}();t.default=i},function(e,t,r){\"use strict\";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});var o=r(1),i=n(r(15));t.default=function(){var e=i.default(window.navigator.userAgent);return{PointerEnd:e?o.UserInputEvent.touchend:o.UserInputEvent.mouseup,PointerTap:e?o.UserInputEvent.touchstart:o.UserInputEvent.click,PointerOver:e?o.UserInputEvent.touchstart:o.UserInputEvent.mouseover}}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=/Android|iPhone|BlackBerry|BB10|Opera Mini|Phone|Mobile|Silk|Windows Phone|Mobile(?:.+)Firefox\\b/i;t.default=function(e){return n.test(e)}},function(e,t,r){\"use strict\";var n,o=this&&this.__extends||(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),i=this&&this.__values||function(e){var t=\"function\"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&\"number\"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});var s=a(r(2)),l=r(1),c=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._data=new Map,t}return o(t,e),Object.defineProperty(t.prototype,\"data\",{get:function(){return this.getAll()},set:function(e){throw l.ERROR.CACHE_SET_ERROR},enumerable:!1,configurable:!0}),t.prototype.save=function(e){var t=this;Array.isArray(e)?e.forEach((function(e){return t._data.set(e.id,e)})):this._data.set(e.id,e)},t.prototype.get=function(e){return this._data.get(e)},t.prototype.remove=function(e){this._data.delete(e)},t.prototype.getAll=function(){var e,t,r=[];try{for(var n=i(this._data),o=n.next();!o.done;o=n.next()){var a=o.value;r.push(a[1])}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}return r},t.prototype.removeAll=function(){var e,t,r=[];try{for(var n=i(this._data),o=n.next();!o.done;o=n.next()){var a=o.value;r.push(a[0])}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}return this._data=new Map,r},t}(s.default);t.default=c},function(e,t,r){\"use strict\";var n=this&&this.__values||function(e){var t=\"function\"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&\"number\"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},o=this&&this.__read||function(e,t){var r=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,i=r.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},i=this&&this.__spread||function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(o(arguments[t]));return e},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});var s=a(r(3)),l=r(18),c=r(4),u=r(1),d=r(20),f=r(0),h=function(){function e(e,t){this.options={$root:e.$root,wrapTag:e.wrapTag,exceptSelectors:e.exceptSelectors,className:e.className},this.hooks=t,d.initDefaultStylesheet()}return e.prototype.highlightRange=function(e){var t=this;if(!e.frozen)throw u.ERROR.HIGHLIGHT_RANGE_FROZEN;var r=this.options,n=r.$root,o=r.className,i=r.exceptSelectors,a=this.hooks,s=l.getSelectedNodes(n,e.start,e.end,i);return a.Render.SelectedNodes.isEmpty()||(s=a.Render.SelectedNodes.call(e.id,s)||[]),s.map((function(r){var n=l.wrapHighlight(r,e,o,t.options.wrapTag);return a.Render.WrapNode.isEmpty()||(n=a.Render.WrapNode.call(e.id,n)),n}))},e.prototype.highlightSource=function(e){var t=this,r=Array.isArray(e)?e:[e],n=[];return r.forEach((function(e){if(e instanceof s.default){var r=e.deSerialize(t.options.$root,t.hooks);t.highlightRange(r).length>0?n.push(e):f.eventEmitter.emit(f.INTERNAL_ERROR_EVENT,{type:u.ERROR.HIGHLIGHT_SOURCE_NONE_RENDER,detail:e})}else f.eventEmitter.emit(f.INTERNAL_ERROR_EVENT,{type:u.ERROR.SOURCE_TYPE_ERROR})})),n},e.prototype.removeHighlight=function(e){var t,r,o=new RegExp(\"(\"+e+\"\\\\\"+f.ID_DIVISION+\"|\\\\\"+f.ID_DIVISION+\"?\"+e+\"$)\"),a=this.hooks,s=this.options.wrapTag,u=document.querySelectorAll(s+\"[data-\"+f.DATASET_IDENTIFIER+\"]\"),d=[],h=[],p=[];try{for(var m=n(u),g=m.next();!g.done;g=m.next()){var v=g.value,b=v.dataset[f.CAMEL_DATASET_IDENTIFIER],y=v.dataset[f.CAMEL_DATASET_IDENTIFIER_EXTRA];b!==e||y?b===e?h.push(v):b!==e&&o.test(y)&&p.push(v):d.push(v)}}catch(e){t={error:e}}finally{try{g&&!g.done&&(r=m.return)&&r.call(m)}finally{if(t)throw t.error}}return d.forEach((function(t){var r=t.parentNode,n=document.createDocumentFragment();c.forEach(t.childNodes,(function(e){return n.appendChild(e.cloneNode(!1))}));var o=t.previousSibling,i=t.nextSibling;r.replaceChild(n,t),l.normalizeSiblingText(o,!0),l.normalizeSiblingText(i,!1),a.Remove.UpdateNodes.call(e,t,\"remove\")})),h.forEach((function(t){var r=t.dataset,n=r[f.CAMEL_DATASET_IDENTIFIER_EXTRA].split(f.ID_DIVISION),o=n.shift(),l=document.querySelector(s+\"[data-\"+f.DATASET_IDENTIFIER+'=\"'+o+'\"]');l&&(c.removeAllClass(t),c.addClass(t,i(l.classList))),r[f.CAMEL_DATASET_IDENTIFIER]=o,r[f.CAMEL_DATASET_IDENTIFIER_EXTRA]=n.join(f.ID_DIVISION),a.Remove.UpdateNodes.call(e,t,\"id-update\")})),p.forEach((function(t){var r=t.dataset[f.CAMEL_DATASET_IDENTIFIER_EXTRA];t.dataset[f.CAMEL_DATASET_IDENTIFIER_EXTRA]=r.replace(o,\"\"),a.Remove.UpdateNodes.call(e,t,\"extra-update\")})),d.length+h.length+p.length!==0},e.prototype.removeAllHighlight=function(){var e=this.options,t=e.wrapTag,r=e.$root;c.getHighlightsByRoot(r,t).forEach((function(e){var t=e.parentNode,r=document.createDocumentFragment();c.forEach(e.childNodes,(function(e){return r.appendChild(e.cloneNode(!1))})),t.replaceChild(r,e)}))},e}();t.default=h},function(e,t,r){\"use strict\";var n=this&&this.__read||function(e,t){var r=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,i=r.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},o=this&&this.__spread||function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(n(arguments[t]));return e};Object.defineProperty(t,\"__esModule\",{value:!0}),t.normalizeSiblingText=t.wrapHighlight=t.getSelectedNodes=void 0;var i=r(1),a=r(4),s=r(0),l=r(19),c=function(e,t){if(!e)return!1;if(/^\\./.test(t)){var r=t.replace(/^\\./,\"\");return e&&a.hasClass(e,r)}if(/^#/.test(t)){var n=t.replace(/^#/,\"\");return e&&e.id===n}var o=t.toUpperCase();return e&&e.tagName===o};t.getSelectedNodes=function(e,t,r,n){var o=t.$node,a=r.$node,s=t.offset,l=r.offset;if(o===a&&o instanceof Text)return function(e,t,r,n){for(var o=e,a=function(e){return null==n?void 0:n.some((function(t){return c(e,t)}))};o;){if(1===o.nodeType&&a(o))return[];o=o.parentNode}e.splitText(t);var s=e.nextSibling;return s.splitText(r-t),[{$node:s,type:i.SelectedNodeType.text,splitType:i.SplitType.both}]}(o,s,l,n);for(var u=[e],d=[],f=function(e){return null==n?void 0:n.some((function(t){return c(e,t)}))},h=!1,p=null;p=u.pop();)if(1!==p.nodeType||!f(p)){for(var m=p.childNodes,g=m.length-1;g>=0;g--)u.push(m[g]);if(p===o){if(3===p.nodeType){p.splitText(s);var v=p.nextSibling;d.push({$node:v,type:i.SelectedNodeType.text,splitType:i.SplitType.head})}h=!0}else{if(p===a){3===p.nodeType&&((v=p).splitText(l),d.push({$node:v,type:i.SelectedNodeType.text,splitType:i.SplitType.tail}));break}h&&3===p.nodeType&&d.push({$node:p,type:i.SelectedNodeType.text,splitType:i.SplitType.none})}}return d};var u=function(e,t){var r=Array.isArray(t)?t:[t];return(r=0===r.length?[s.getDefaultOptions().style.className]:r).forEach((function(t){a.addClass(e,t)})),e},d=function(e){return!e||!e.textContent};t.wrapHighlight=function(e,t,r,n){var c=e.$node.parentNode,f=e.$node.previousSibling,h=e.$node.nextSibling;return a.isHighlightWrapNode(c)?!a.isHighlightWrapNode(c)||d(f)&&d(h)?function(e,t,r){var n=e.$node.parentNode,o=n;a.removeAllClass(o),u(o,r);var i=n.dataset,l=i[s.CAMEL_DATASET_IDENTIFIER];return i[s.CAMEL_DATASET_IDENTIFIER]=t.id,i[s.CAMEL_DATASET_IDENTIFIER_EXTRA]=i[s.CAMEL_DATASET_IDENTIFIER_EXTRA]?l+s.ID_DIVISION+i[s.CAMEL_DATASET_IDENTIFIER_EXTRA]:l,o}(e,t,r):function(e,t,r,n){var a=document.createElement(n),c=e.$node.parentNode,d=e.$node.previousSibling,f=e.$node.nextSibling,h=document.createDocumentFragment(),p=c.dataset[s.CAMEL_DATASET_IDENTIFIER],m=c.dataset[s.CAMEL_DATASET_IDENTIFIER_EXTRA],g=m?p+s.ID_DIVISION+m:p;a.setAttribute(\"data-\"+s.DATASET_IDENTIFIER,t.id),a.setAttribute(\"data-\"+s.DATASET_IDENTIFIER_EXTRA,g),a.appendChild(e.$node.cloneNode(!1));var v,b=!1,y=!1;d&&((w=c.cloneNode(!1)).textContent=d.textContent,h.appendChild(w),b=!0);var w,x=[];return Array.isArray(r)?x.push.apply(x,o(r)):x.push(r),u(a,l.unique(x)),h.appendChild(a),f&&((w=c.cloneNode(!1)).textContent=f.textContent,h.appendChild(w),y=!0),v=b&&y?i.SplitType.both:b?i.SplitType.head:y?i.SplitType.tail:i.SplitType.none,a.setAttribute(\"data-\"+s.DATASET_SPLIT_TYPE,v),c.parentNode.replaceChild(h,c),a}(e,t,r,n):function(e,t,r,n){var o=document.createElement(n);return u(o,r),o.appendChild(e.$node.cloneNode(!1)),e.$node.parentNode.replaceChild(o,e.$node),o.setAttribute(\"data-\"+s.DATASET_IDENTIFIER,t.id),o.setAttribute(\"data-\"+s.DATASET_SPLIT_TYPE,e.splitType),o.setAttribute(\"data-\"+s.DATASET_IDENTIFIER_EXTRA,\"\"),o}(e,t,r,n)},t.normalizeSiblingText=function(e,t){if(void 0===t&&(t=!0),e&&3===e.nodeType){var r=t?e.nextSibling:e.previousSibling;if(3===r.nodeType){var n=r.nodeValue;e.nodeValue=t?e.nodeValue+n:n+e.nodeValue,r.parentNode.removeChild(r)}}}},function(e,t,r){\"use strict\";var n=this&&this.__values||function(e){var t=\"function\"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&\"number\"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(t,\"__esModule\",{value:!0}),t.unique=void 0,t.unique=function(e){var t,r,o=[];try{for(var i=n(e),a=i.next();!a.done;a=i.next()){var s=a.value;-1===o.indexOf(s)&&o.push(s)}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}return o}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.initDefaultStylesheet=void 0;var n=r(0);t.initDefaultStylesheet=function(){var e=n.STYLESHEET_ID,t=document.getElementById(e);if(!t){var r=document.createTextNode(n.getStylesheet());(t=document.createElement(\"style\")).id=e,t.appendChild(r),document.head.appendChild(t)}return t}}]).default},3269:e=>{\"use strict\";e.exports=function(e,t,r,n){for(var o=65535&e,i=e>>>16&65535,a=0;0!==r;){r-=a=r>2e3?2e3:r;do{i=i+(o=o+t[n++]|0)|0}while(--a);o%=65521,i%=65521}return o|i<<16}},3303:(e,t,r)=>{\"use strict\";var n=r(8411),o=r(9805),i=r(1996),a=r(4674),s=r(4442),l=Object.prototype.toString;function c(e){if(!(this instanceof c))return new c(e);this.options=o.assign({level:-1,method:8,chunkSize:16384,windowBits:15,memLevel:8,strategy:0,to:\"\"},e||{});var t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=n.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(0!==r)throw new Error(a[r]);if(t.header&&n.deflateSetHeader(this.strm,t.header),t.dictionary){var u;if(u=\"string\"==typeof t.dictionary?i.string2buf(t.dictionary):\"[object ArrayBuffer]\"===l.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,0!==(r=n.deflateSetDictionary(this.strm,u)))throw new Error(a[r]);this._dict_set=!0}}function u(e,t){var r=new c(t);if(r.push(e,!0),r.err)throw r.msg||a[r.err];return r.result}c.prototype.push=function(e,t){var r,a,s=this.strm,c=this.options.chunkSize;if(this.ended)return!1;a=t===~~t?t:!0===t?4:0,\"string\"==typeof e?s.input=i.string2buf(e):\"[object ArrayBuffer]\"===l.call(e)?s.input=new Uint8Array(e):s.input=e,s.next_in=0,s.avail_in=s.input.length;do{if(0===s.avail_out&&(s.output=new o.Buf8(c),s.next_out=0,s.avail_out=c),1!==(r=n.deflate(s,a))&&0!==r)return this.onEnd(r),this.ended=!0,!1;0!==s.avail_out&&(0!==s.avail_in||4!==a&&2!==a)||(\"string\"===this.options.to?this.onData(i.buf2binstring(o.shrinkBuf(s.output,s.next_out))):this.onData(o.shrinkBuf(s.output,s.next_out)))}while((s.avail_in>0||0===s.avail_out)&&1!==r);return 4===a?(r=n.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,0===r):2!==a||(this.onEnd(0),s.avail_out=0,!0)},c.prototype.onData=function(e){this.chunks.push(e)},c.prototype.onEnd=function(e){0===e&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},t.Deflate=c,t.deflate=u,t.deflateRaw=function(e,t){return(t=t||{}).raw=!0,u(e,t)},t.gzip=function(e,t){return(t=t||{}).gzip=!0,u(e,t)}},3443:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Line=void 0;const n=r(4892),o=r(8871),i=r(4723),a=r(5483);function s(e,t,r,n,o,i,a){const s=Math.sqrt(Math.pow(r-e,2)+Math.pow(n-t,2)),l=Math.sqrt(Math.pow(o-r,2)+Math.pow(i-n,2)),c=a*s/(s+l),u=a*l/(s+l);return[r-c*(o-e),n-c*(i-t),r+u*(o-e),n+u*(i-t)]}function l(e,t){const r=e.length,n=[];for(let o=2;o<r-2;o+=2){const r=s(e[o-2],e[o-1],e[o],e[o+1],e[o+2],e[o+3],t);isNaN(r[0])||(n.push(r[0]),n.push(r[1]),n.push(e[o]),n.push(e[o+1]),n.push(r[2]),n.push(r[3]))}return n}class c extends i.Shape{constructor(e){super(e),this.on(\"pointsChange.konva tensionChange.konva closedChange.konva bezierChange.konva\",(function(){this._clearCache(\"tensionPoints\")}))}_sceneFunc(e){let t,r,n,o=this.points(),i=o.length,a=this.tension(),s=this.closed(),l=this.bezier();if(i){if(e.beginPath(),e.moveTo(o[0],o[1]),0!==a&&i>4){for(t=this.getTensionPoints(),r=t.length,n=s?0:4,s||e.quadraticCurveTo(t[0],t[1],t[2],t[3]);n<r-2;)e.bezierCurveTo(t[n++],t[n++],t[n++],t[n++],t[n++],t[n++]);s||e.quadraticCurveTo(t[r-2],t[r-1],o[i-2],o[i-1])}else if(l)for(n=2;n<i;)e.bezierCurveTo(o[n++],o[n++],o[n++],o[n++],o[n++],o[n++]);else for(n=2;n<i;n+=2)e.lineTo(o[n],o[n+1]);s?(e.closePath(),e.fillStrokeShape(this)):e.strokeShape(this)}}getTensionPoints(){return this._getCache(\"tensionPoints\",this._getTensionPoints)}_getTensionPoints(){return this.closed()?this._getTensionPointsClosed():l(this.points(),this.tension())}_getTensionPointsClosed(){const e=this.points(),t=e.length,r=this.tension(),n=s(e[t-2],e[t-1],e[0],e[1],e[2],e[3],r),o=s(e[t-4],e[t-3],e[t-2],e[t-1],e[0],e[1],r),i=l(e,r);return[n[2],n[3]].concat(i).concat([o[0],o[1],e[t-2],e[t-1],o[2],o[3],n[0],n[1],e[0],e[1]])}getWidth(){return this.getSelfRect().width}getHeight(){return this.getSelfRect().height}getSelfRect(){let e=this.points();if(e.length<4)return{x:e[0]||0,y:e[1]||0,width:0,height:0};e=0!==this.tension()?[e[0],e[1],...this._getTensionPoints(),e[e.length-2],e[e.length-1]]:this.points();let t,r,n=e[0],o=e[0],i=e[1],a=e[1];for(let s=0;s<e.length/2;s++)t=e[2*s],r=e[2*s+1],n=Math.min(n,t),o=Math.max(o,t),i=Math.min(i,r),a=Math.max(a,r);return{x:n,y:i,width:o-n,height:a-i}}}t.Line=c,c.prototype.className=\"Line\",c.prototype._attrsAffectingSize=[\"points\",\"bezier\",\"tension\"],(0,o._registerNode)(c),n.Factory.addGetterSetter(c,\"closed\",!1),n.Factory.addGetterSetter(c,\"bezier\",!1),n.Factory.addGetterSetter(c,\"tension\",0,(0,a.getNumberValidator)()),n.Factory.addGetterSetter(c,\"points\",[],(0,a.getNumberArrayValidator)())},3665:(e,t,r)=>{\"use strict\";var n=r(9805);function o(e){for(var t=e.length;--t>=0;)e[t]=0}var i=[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],a=[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],s=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],l=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],c=new Array(576);o(c);var u=new Array(60);o(u);var d=new Array(512);o(d);var f=new Array(256);o(f);var h=new Array(29);o(h);var p,m,g,v=new Array(30);function b(e,t,r,n,o){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=o,this.has_stree=e&&e.length}function y(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function w(e){return e<256?d[e]:d[256+(e>>>7)]}function x(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function S(e,t,r){e.bi_valid>16-r?(e.bi_buf|=t<<e.bi_valid&65535,x(e,e.bi_buf),e.bi_buf=t>>16-e.bi_valid,e.bi_valid+=r-16):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function C(e,t,r){S(e,r[2*t],r[2*t+1])}function k(e,t){var r=0;do{r|=1&e,e>>>=1,r<<=1}while(--t>0);return r>>>1}function E(e,t,r){var n,o,i=new Array(16),a=0;for(n=1;n<=15;n++)i[n]=a=a+r[n-1]<<1;for(o=0;o<=t;o++){var s=e[2*o+1];0!==s&&(e[2*o]=k(i[s]++,s))}}function O(e){var t;for(t=0;t<286;t++)e.dyn_ltree[2*t]=0;for(t=0;t<30;t++)e.dyn_dtree[2*t]=0;for(t=0;t<19;t++)e.bl_tree[2*t]=0;e.dyn_ltree[512]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function A(e){e.bi_valid>8?x(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function T(e,t,r,n){var o=2*t,i=2*r;return e[o]<e[i]||e[o]===e[i]&&n[t]<=n[r]}function j(e,t,r){for(var n=e.heap[r],o=r<<1;o<=e.heap_len&&(o<e.heap_len&&T(t,e.heap[o+1],e.heap[o],e.depth)&&o++,!T(t,n,e.heap[o],e.depth));)e.heap[r]=e.heap[o],r=o,o<<=1;e.heap[r]=n}function P(e,t,r){var n,o,s,l,c=0;if(0!==e.last_lit)do{n=e.pending_buf[e.d_buf+2*c]<<8|e.pending_buf[e.d_buf+2*c+1],o=e.pending_buf[e.l_buf+c],c++,0===n?C(e,o,t):(C(e,(s=f[o])+256+1,t),0!==(l=i[s])&&S(e,o-=h[s],l),C(e,s=w(--n),r),0!==(l=a[s])&&S(e,n-=v[s],l))}while(c<e.last_lit);C(e,256,t)}function M(e,t){var r,n,o,i=t.dyn_tree,a=t.stat_desc.static_tree,s=t.stat_desc.has_stree,l=t.stat_desc.elems,c=-1;for(e.heap_len=0,e.heap_max=573,r=0;r<l;r++)0!==i[2*r]?(e.heap[++e.heap_len]=c=r,e.depth[r]=0):i[2*r+1]=0;for(;e.heap_len<2;)i[2*(o=e.heap[++e.heap_len]=c<2?++c:0)]=1,e.depth[o]=0,e.opt_len--,s&&(e.static_len-=a[2*o+1]);for(t.max_code=c,r=e.heap_len>>1;r>=1;r--)j(e,i,r);o=l;do{r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],j(e,i,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,i[2*o]=i[2*r]+i[2*n],e.depth[o]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,i[2*r+1]=i[2*n+1]=o,e.heap[1]=o++,j(e,i,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,o,i,a,s,l=t.dyn_tree,c=t.max_code,u=t.stat_desc.static_tree,d=t.stat_desc.has_stree,f=t.stat_desc.extra_bits,h=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(i=0;i<=15;i++)e.bl_count[i]=0;for(l[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<573;r++)(i=l[2*l[2*(n=e.heap[r])+1]+1]+1)>p&&(i=p,m++),l[2*n+1]=i,n>c||(e.bl_count[i]++,a=0,n>=h&&(a=f[n-h]),s=l[2*n],e.opt_len+=s*(i+a),d&&(e.static_len+=s*(u[2*n+1]+a)));if(0!==m){do{for(i=p-1;0===e.bl_count[i];)i--;e.bl_count[i]--,e.bl_count[i+1]+=2,e.bl_count[p]--,m-=2}while(m>0);for(i=p;0!==i;i--)for(n=e.bl_count[i];0!==n;)(o=e.heap[--r])>c||(l[2*o+1]!==i&&(e.opt_len+=(i-l[2*o+1])*l[2*o],l[2*o+1]=i),n--)}}(e,t),E(i,c,e.bl_count)}function R(e,t,r){var n,o,i=-1,a=t[1],s=0,l=7,c=4;for(0===a&&(l=138,c=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)o=a,a=t[2*(n+1)+1],++s<l&&o===a||(s<c?e.bl_tree[2*o]+=s:0!==o?(o!==i&&e.bl_tree[2*o]++,e.bl_tree[32]++):s<=10?e.bl_tree[34]++:e.bl_tree[36]++,s=0,i=o,0===a?(l=138,c=3):o===a?(l=6,c=3):(l=7,c=4))}function _(e,t,r){var n,o,i=-1,a=t[1],s=0,l=7,c=4;for(0===a&&(l=138,c=3),n=0;n<=r;n++)if(o=a,a=t[2*(n+1)+1],!(++s<l&&o===a)){if(s<c)do{C(e,o,e.bl_tree)}while(0!==--s);else 0!==o?(o!==i&&(C(e,o,e.bl_tree),s--),C(e,16,e.bl_tree),S(e,s-3,2)):s<=10?(C(e,17,e.bl_tree),S(e,s-3,3)):(C(e,18,e.bl_tree),S(e,s-11,7));s=0,i=o,0===a?(l=138,c=3):o===a?(l=6,c=3):(l=7,c=4)}}o(v);var I=!1;function N(e,t,r,o){S(e,0+(o?1:0),3),function(e,t,r){A(e),x(e,r),x(e,~r),n.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}(e,t,r)}t._tr_init=function(e){I||(function(){var e,t,r,n,o,l=new Array(16);for(r=0,n=0;n<28;n++)for(h[n]=r,e=0;e<1<<i[n];e++)f[r++]=n;for(f[r-1]=n,o=0,n=0;n<16;n++)for(v[n]=o,e=0;e<1<<a[n];e++)d[o++]=n;for(o>>=7;n<30;n++)for(v[n]=o<<7,e=0;e<1<<a[n]-7;e++)d[256+o++]=n;for(t=0;t<=15;t++)l[t]=0;for(e=0;e<=143;)c[2*e+1]=8,e++,l[8]++;for(;e<=255;)c[2*e+1]=9,e++,l[9]++;for(;e<=279;)c[2*e+1]=7,e++,l[7]++;for(;e<=287;)c[2*e+1]=8,e++,l[8]++;for(E(c,287,l),e=0;e<30;e++)u[2*e+1]=5,u[2*e]=k(e,5);p=new b(c,i,257,286,15),m=new b(u,a,0,30,15),g=new b(new Array(0),s,0,19,7)}(),I=!0),e.l_desc=new y(e.dyn_ltree,p),e.d_desc=new y(e.dyn_dtree,m),e.bl_desc=new y(e.bl_tree,g),e.bi_buf=0,e.bi_valid=0,O(e)},t._tr_stored_block=N,t._tr_flush_block=function(e,t,r,n){var o,i,a=0;e.level>0?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t<256;t++)if(0!==e.dyn_ltree[2*t])return 1;return 0}(e)),M(e,e.l_desc),M(e,e.d_desc),a=function(e){var t;for(R(e,e.dyn_ltree,e.l_desc.max_code),R(e,e.dyn_dtree,e.d_desc.max_code),M(e,e.bl_desc),t=18;t>=3&&0===e.bl_tree[2*l[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),o=e.opt_len+3+7>>>3,(i=e.static_len+3+7>>>3)<=o&&(o=i)):o=i=r+5,r+4<=o&&-1!==t?N(e,t,r,n):4===e.strategy||i===o?(S(e,2+(n?1:0),3),P(e,c,u)):(S(e,4+(n?1:0),3),function(e,t,r,n){var o;for(S(e,t-257,5),S(e,r-1,5),S(e,n-4,4),o=0;o<n;o++)S(e,e.bl_tree[2*l[o]+1],3);_(e,e.dyn_ltree,t-1),_(e,e.dyn_dtree,r-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,a+1),P(e,e.dyn_ltree,e.dyn_dtree)),O(e),n&&A(e)},t._tr_tally=function(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(f[r]+256+1)]++,e.dyn_dtree[2*w(t)]++),e.last_lit===e.lit_bufsize-1},t._tr_align=function(e){S(e,2,3),C(e,256,c),function(e){16===e.bi_valid?(x(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},3862:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.RGBA=void 0;const n=r(4892),o=r(6536),i=r(5483);t.RGBA=function(e){const t=e.data,r=t.length,n=this.red(),o=this.green(),i=this.blue(),a=this.alpha();for(let e=0;e<r;e+=4){const r=1-a;t[e]=n*a+t[e]*r,t[e+1]=o*a+t[e+1]*r,t[e+2]=i*a+t[e+2]*r}},n.Factory.addGetterSetter(o.Node,\"red\",0,(function(e){return this._filterUpToDate=!1,e>255?255:e<0?0:Math.round(e)})),n.Factory.addGetterSetter(o.Node,\"green\",0,(function(e){return this._filterUpToDate=!1,e>255?255:e<0?0:Math.round(e)})),n.Factory.addGetterSetter(o.Node,\"blue\",0,i.RGBComponent,n.Factory.afterSetFilter),n.Factory.addGetterSetter(o.Node,\"alpha\",1,(function(e){return this._filterUpToDate=!1,e>1?1:e<0?0:e}))},4060:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Util=t.Transform=void 0;const n=r(8871);class o{constructor(e=[1,0,0,1,0,0]){this.dirty=!1,this.m=e&&e.slice()||[1,0,0,1,0,0]}reset(){this.m[0]=1,this.m[1]=0,this.m[2]=0,this.m[3]=1,this.m[4]=0,this.m[5]=0}copy(){return new o(this.m)}copyInto(e){e.m[0]=this.m[0],e.m[1]=this.m[1],e.m[2]=this.m[2],e.m[3]=this.m[3],e.m[4]=this.m[4],e.m[5]=this.m[5]}point(e){const t=this.m;return{x:t[0]*e.x+t[2]*e.y+t[4],y:t[1]*e.x+t[3]*e.y+t[5]}}translate(e,t){return this.m[4]+=this.m[0]*e+this.m[2]*t,this.m[5]+=this.m[1]*e+this.m[3]*t,this}scale(e,t){return this.m[0]*=e,this.m[1]*=e,this.m[2]*=t,this.m[3]*=t,this}rotate(e){const t=Math.cos(e),r=Math.sin(e),n=this.m[0]*t+this.m[2]*r,o=this.m[1]*t+this.m[3]*r,i=this.m[0]*-r+this.m[2]*t,a=this.m[1]*-r+this.m[3]*t;return this.m[0]=n,this.m[1]=o,this.m[2]=i,this.m[3]=a,this}getTranslation(){return{x:this.m[4],y:this.m[5]}}skew(e,t){const r=this.m[0]+this.m[2]*t,n=this.m[1]+this.m[3]*t,o=this.m[2]+this.m[0]*e,i=this.m[3]+this.m[1]*e;return this.m[0]=r,this.m[1]=n,this.m[2]=o,this.m[3]=i,this}multiply(e){const t=this.m[0]*e.m[0]+this.m[2]*e.m[1],r=this.m[1]*e.m[0]+this.m[3]*e.m[1],n=this.m[0]*e.m[2]+this.m[2]*e.m[3],o=this.m[1]*e.m[2]+this.m[3]*e.m[3],i=this.m[0]*e.m[4]+this.m[2]*e.m[5]+this.m[4],a=this.m[1]*e.m[4]+this.m[3]*e.m[5]+this.m[5];return this.m[0]=t,this.m[1]=r,this.m[2]=n,this.m[3]=o,this.m[4]=i,this.m[5]=a,this}invert(){const e=1/(this.m[0]*this.m[3]-this.m[1]*this.m[2]),t=this.m[3]*e,r=-this.m[1]*e,n=-this.m[2]*e,o=this.m[0]*e,i=e*(this.m[2]*this.m[5]-this.m[3]*this.m[4]),a=e*(this.m[1]*this.m[4]-this.m[0]*this.m[5]);return this.m[0]=t,this.m[1]=r,this.m[2]=n,this.m[3]=o,this.m[4]=i,this.m[5]=a,this}getMatrix(){return this.m}decompose(){const e=this.m[0],r=this.m[1],n=this.m[2],o=this.m[3],i=e*o-r*n,a={x:this.m[4],y:this.m[5],rotation:0,scaleX:0,scaleY:0,skewX:0,skewY:0};if(0!=e||0!=r){const t=Math.sqrt(e*e+r*r);a.rotation=r>0?Math.acos(e/t):-Math.acos(e/t),a.scaleX=t,a.scaleY=i/t,a.skewX=(e*n+r*o)/i,a.skewY=0}else if(0!=n||0!=o){const t=Math.sqrt(n*n+o*o);a.rotation=Math.PI/2-(o>0?Math.acos(-n/t):-Math.acos(n/t)),a.scaleX=i/t,a.scaleY=t,a.skewX=0,a.skewY=(e*n+r*o)/i}return a.rotation=t.Util._getRotation(a.rotation),a}}t.Transform=o;const i=Math.PI/180,a=180/Math.PI,s=\"Konva error: \",l={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,132,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,255,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],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],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,203],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],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:[119,128,144],slategrey:[119,128,144],snow:[255,255,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],transparent:[255,255,255,0],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,5]},c=/rgb\\((\\d{1,3}),(\\d{1,3}),(\\d{1,3})\\)/;let u=[];const d=\"undefined\"!=typeof requestAnimationFrame&&requestAnimationFrame||function(e){setTimeout(e,60)};t.Util={_isElement:e=>!(!e||1!=e.nodeType),_isFunction:e=>!!(e&&e.constructor&&e.call&&e.apply),_isPlainObject:e=>!!e&&e.constructor===Object,_isArray:e=>\"[object Array]\"===Object.prototype.toString.call(e),_isNumber:e=>\"[object Number]\"===Object.prototype.toString.call(e)&&!isNaN(e)&&isFinite(e),_isString:e=>\"[object String]\"===Object.prototype.toString.call(e),_isBoolean:e=>\"[object Boolean]\"===Object.prototype.toString.call(e),isObject:e=>e instanceof Object,isValidSelector(e){if(\"string\"!=typeof e)return!1;const t=e[0];return\"#\"===t||\".\"===t||t===t.toUpperCase()},_sign:e=>0===e||e>0?1:-1,requestAnimFrame(e){u.push(e),1===u.length&&d((function(){const e=u;u=[],e.forEach((function(e){e()}))}))},createCanvasElement(){const e=document.createElement(\"canvas\");try{e.style=e.style||{}}catch(e){}return e},createImageElement:()=>document.createElement(\"img\"),_isInDocument(e){for(;e=e.parentNode;)if(e==document)return!0;return!1},_urlToImage(e,r){const n=t.Util.createImageElement();n.onload=function(){r(n)},n.src=e},_rgbToHex:(e,t,r)=>((1<<24)+(e<<16)+(t<<8)+r).toString(16).slice(1),_hexToRgb(e){e=e.replace(\"#\",\"\");const t=parseInt(e,16);return{r:t>>16&255,g:t>>8&255,b:255&t}},getRandomColor(){let e=(16777215*Math.random()|0).toString(16);for(;e.length<6;)e=\"0\"+e;return\"#\"+e},getRGB(e){let t;return e in l?(t=l[e],{r:t[0],g:t[1],b:t[2]}):\"#\"===e[0]?this._hexToRgb(e.substring(1)):\"rgb(\"===e.substr(0,4)?(t=c.exec(e.replace(/ /g,\"\")),{r:parseInt(t[1],10),g:parseInt(t[2],10),b:parseInt(t[3],10)}):{r:0,g:0,b:0}},colorToRGBA:e=>(e=e||\"black\",t.Util._namedColorToRBA(e)||t.Util._hex3ColorToRGBA(e)||t.Util._hex4ColorToRGBA(e)||t.Util._hex6ColorToRGBA(e)||t.Util._hex8ColorToRGBA(e)||t.Util._rgbColorToRGBA(e)||t.Util._rgbaColorToRGBA(e)||t.Util._hslColorToRGBA(e)),_namedColorToRBA(e){const t=l[e.toLowerCase()];return t?{r:t[0],g:t[1],b:t[2],a:1}:null},_rgbColorToRGBA(e){if(0===e.indexOf(\"rgb(\")){const t=(e=e.match(/rgb\\(([^)]+)\\)/)[1]).split(/ *, */).map(Number);return{r:t[0],g:t[1],b:t[2],a:1}}},_rgbaColorToRGBA(e){if(0===e.indexOf(\"rgba(\")){const t=(e=e.match(/rgba\\(([^)]+)\\)/)[1]).split(/ *, */).map(((e,t)=>\"%\"===e.slice(-1)?3===t?parseInt(e)/100:parseInt(e)/100*255:Number(e)));return{r:t[0],g:t[1],b:t[2],a:t[3]}}},_hex8ColorToRGBA(e){if(\"#\"===e[0]&&9===e.length)return{r:parseInt(e.slice(1,3),16),g:parseInt(e.slice(3,5),16),b:parseInt(e.slice(5,7),16),a:parseInt(e.slice(7,9),16)/255}},_hex6ColorToRGBA(e){if(\"#\"===e[0]&&7===e.length)return{r:parseInt(e.slice(1,3),16),g:parseInt(e.slice(3,5),16),b:parseInt(e.slice(5,7),16),a:1}},_hex4ColorToRGBA(e){if(\"#\"===e[0]&&5===e.length)return{r:parseInt(e[1]+e[1],16),g:parseInt(e[2]+e[2],16),b:parseInt(e[3]+e[3],16),a:parseInt(e[4]+e[4],16)/255}},_hex3ColorToRGBA(e){if(\"#\"===e[0]&&4===e.length)return{r:parseInt(e[1]+e[1],16),g:parseInt(e[2]+e[2],16),b:parseInt(e[3]+e[3],16),a:1}},_hslColorToRGBA(e){if(/hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g.test(e)){const[t,...r]=/hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g.exec(e),n=Number(r[0])/360,o=Number(r[1])/100,i=Number(r[2])/100;let a,s,l;if(0===o)return l=255*i,{r:Math.round(l),g:Math.round(l),b:Math.round(l),a:1};a=i<.5?i*(1+o):i+o-i*o;const c=2*i-a,u=[0,0,0];for(let e=0;e<3;e++)s=n+1/3*-(e-1),s<0&&s++,s>1&&s--,l=6*s<1?c+6*(a-c)*s:2*s<1?a:3*s<2?c+(a-c)*(2/3-s)*6:c,u[e]=255*l;return{r:Math.round(u[0]),g:Math.round(u[1]),b:Math.round(u[2]),a:1}}},haveIntersection:(e,t)=>!(t.x>e.x+e.width||t.x+t.width<e.x||t.y>e.y+e.height||t.y+t.height<e.y),cloneObject(e){const t={};for(const r in e)this._isPlainObject(e[r])?t[r]=this.cloneObject(e[r]):this._isArray(e[r])?t[r]=this.cloneArray(e[r]):t[r]=e[r];return t},cloneArray:e=>e.slice(0),degToRad:e=>e*i,radToDeg:e=>e*a,_degToRad:e=>(t.Util.warn(\"Util._degToRad is removed. Please use public Util.degToRad instead.\"),t.Util.degToRad(e)),_radToDeg:e=>(t.Util.warn(\"Util._radToDeg is removed. Please use public Util.radToDeg instead.\"),t.Util.radToDeg(e)),_getRotation:e=>n.Konva.angleDeg?t.Util.radToDeg(e):e,_capitalize:e=>e.charAt(0).toUpperCase()+e.slice(1),throw(e){throw new Error(s+e)},error(e){console.error(s+e)},warn(e){n.Konva.showWarnings&&console.warn(\"Konva warning: \"+e)},each(e,t){for(const r in e)t(r,e[r])},_inRange:(e,t,r)=>t<=e&&e<r,_getProjectionToSegment(e,t,r,n,o,i){let a,s,l;const c=(e-r)*(e-r)+(t-n)*(t-n);if(0==c)a=e,s=t,l=(o-r)*(o-r)+(i-n)*(i-n);else{const u=((o-e)*(r-e)+(i-t)*(n-t))/c;u<0?(a=e,s=t,l=(e-o)*(e-o)+(t-i)*(t-i)):u>1?(a=r,s=n,l=(r-o)*(r-o)+(n-i)*(n-i)):(a=e+u*(r-e),s=t+u*(n-t),l=(a-o)*(a-o)+(s-i)*(s-i))}return[a,s,l]},_getProjectionToLine(e,r,n){const o=t.Util.cloneObject(e);let i=Number.MAX_VALUE;return r.forEach((function(a,s){if(!n&&s===r.length-1)return;const l=r[(s+1)%r.length],c=t.Util._getProjectionToSegment(a.x,a.y,l.x,l.y,e.x,e.y),u=c[0],d=c[1],f=c[2];f<i&&(o.x=u,o.y=d,i=f)})),o},_prepareArrayForTween(e,r,n){const o=[],i=[];if(e.length>r.length){const t=r;r=e,e=t}for(let t=0;t<e.length;t+=2)o.push({x:e[t],y:e[t+1]});for(let e=0;e<r.length;e+=2)i.push({x:r[e],y:r[e+1]});const a=[];return i.forEach((function(e){const r=t.Util._getProjectionToLine(e,o,n);a.push(r.x),a.push(r.y)})),a},_prepareToStringify(e){let r;e.visitedByCircularReferenceRemoval=!0;for(const n in e)if(e.hasOwnProperty(n)&&e[n]&&\"object\"==typeof e[n])if(r=Object.getOwnPropertyDescriptor(e,n),e[n].visitedByCircularReferenceRemoval||t.Util._isElement(e[n])){if(!r.configurable)return null;delete e[n]}else if(null===t.Util._prepareToStringify(e[n])){if(!r.configurable)return null;delete e[n]}return delete e.visitedByCircularReferenceRemoval,e},_assign(e,t){for(const r in t)e[r]=t[r];return e},_getFirstPointerId:e=>e.touches?e.changedTouches[0].identifier:e.pointerId||999,releaseCanvas(...e){n.Konva.releaseCanvasOnDestroy&&e.forEach((e=>{e.width=0,e.height=0}))},drawRoundedRectPath(e,t,r,n){let o=0,i=0,a=0,s=0;\"number\"==typeof n?o=i=a=s=Math.min(n,t/2,r/2):(o=Math.min(n[0]||0,t/2,r/2),i=Math.min(n[1]||0,t/2,r/2),s=Math.min(n[2]||0,t/2,r/2),a=Math.min(n[3]||0,t/2,r/2)),e.moveTo(o,0),e.lineTo(t-i,0),e.arc(t-i,i,i,3*Math.PI/2,0,!1),e.lineTo(t,r-s),e.arc(t-s,r-s,s,0,Math.PI/2,!1),e.lineTo(a,r),e.arc(a,r-a,a,Math.PI/2,Math.PI,!1),e.lineTo(0,o),e.arc(o,o,o,Math.PI,3*Math.PI/2,!1)}}},4213:function(e,t,r){var n,o;void 0===(o=\"function\"==typeof(n=function(){\"use strict\";function t(e,t,r){var n=new XMLHttpRequest;n.open(\"GET\",e),n.responseType=\"blob\",n.onload=function(){s(n.response,t,r)},n.onerror=function(){console.error(\"could not download file\")},n.send()}function n(e){var t=new XMLHttpRequest;t.open(\"HEAD\",e,!1);try{t.send()}catch(e){}return 200<=t.status&&299>=t.status}function o(e){try{e.dispatchEvent(new MouseEvent(\"click\"))}catch(r){var t=document.createEvent(\"MouseEvents\");t.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(t)}}var i=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof r.g&&r.g.global===r.g?r.g:void 0,a=i.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),s=i.saveAs||(\"object\"!=typeof window||window!==i?function(){}:\"download\"in HTMLAnchorElement.prototype&&!a?function(e,r,a){var s=i.URL||i.webkitURL,l=document.createElement(\"a\");r=r||e.name||\"download\",l.download=r,l.rel=\"noopener\",\"string\"==typeof e?(l.href=e,l.origin===location.origin?o(l):n(l.href)?t(e,r,a):o(l,l.target=\"_blank\")):(l.href=s.createObjectURL(e),setTimeout((function(){s.revokeObjectURL(l.href)}),4e4),setTimeout((function(){o(l)}),0))}:\"msSaveOrOpenBlob\"in navigator?function(e,r,i){if(r=r||e.name||\"download\",\"string\"!=typeof e)navigator.msSaveOrOpenBlob(function(e,t){return void 0===t?t={autoBom:!1}:\"object\"!=typeof t&&(console.warn(\"Deprecated: Expected third argument to be a object\"),t={autoBom:!t}),t.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(e.type)?new Blob([\"\\ufeff\",e],{type:e.type}):e}(e,i),r);else if(n(e))t(e,r,i);else{var a=document.createElement(\"a\");a.href=e,a.target=\"_blank\",setTimeout((function(){o(a)}))}}:function(e,r,n,o){if((o=o||open(\"\",\"_blank\"))&&(o.document.title=o.document.body.innerText=\"downloading...\"),\"string\"==typeof e)return t(e,r,n);var s=\"application/octet-stream\"===e.type,l=/constructor/i.test(i.HTMLElement)||i.safari,c=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((c||s&&l||a)&&\"undefined\"!=typeof FileReader){var u=new FileReader;u.onloadend=function(){var e=u.result;e=c?e:e.replace(/^data:[^;]*;/,\"data:attachment/file;\"),o?o.location.href=e:location=e,o=null},u.readAsDataURL(e)}else{var d=i.URL||i.webkitURL,f=d.createObjectURL(e);o?o.location=f:location.href=f,o=null,setTimeout((function(){d.revokeObjectURL(f)}),4e4)}});i.saveAs=s.saveAs=s,e.exports=s})?n.apply(t,[]):n)||(e.exports=o)},4353:function(e){e.exports=function(){\"use strict\";var e=6e4,t=36e5,r=\"millisecond\",n=\"second\",o=\"minute\",i=\"hour\",a=\"day\",s=\"week\",l=\"month\",c=\"quarter\",u=\"year\",d=\"date\",f=\"Invalid Date\",h=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,p=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,m={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(e){var t=[\"th\",\"st\",\"nd\",\"rd\"],r=e%100;return\"[\"+e+(t[(r-20)%10]||t[r]||t[0])+\"]\"}},g=function(e,t,r){var n=String(e);return!n||n.length>=t?e:\"\"+Array(t+1-n.length).join(r)+e},v={s:g,z:function(e){var t=-e.utcOffset(),r=Math.abs(t),n=Math.floor(r/60),o=r%60;return(t<=0?\"+\":\"-\")+g(n,2,\"0\")+\":\"+g(o,2,\"0\")},m:function e(t,r){if(t.date()<r.date())return-e(r,t);var n=12*(r.year()-t.year())+(r.month()-t.month()),o=t.clone().add(n,l),i=r-o<0,a=t.clone().add(n+(i?-1:1),l);return+(-(n+(r-o)/(i?o-a:a-o))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(e){return{M:l,y:u,w:s,d:a,D:d,h:i,m:o,s:n,ms:r,Q:c}[e]||String(e||\"\").toLowerCase().replace(/s$/,\"\")},u:function(e){return void 0===e}},b=\"en\",y={};y[b]=m;var w=\"$isDayjsObject\",x=function(e){return e instanceof E||!(!e||!e[w])},S=function e(t,r,n){var o;if(!t)return b;if(\"string\"==typeof t){var i=t.toLowerCase();y[i]&&(o=i),r&&(y[i]=r,o=i);var a=t.split(\"-\");if(!o&&a.length>1)return e(a[0])}else{var s=t.name;y[s]=t,o=s}return!n&&o&&(b=o),o||!n&&b},C=function(e,t){if(x(e))return e.clone();var r=\"object\"==typeof t?t:{};return r.date=e,r.args=arguments,new E(r)},k=v;k.l=S,k.i=x,k.w=function(e,t){return C(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var E=function(){function m(e){this.$L=S(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[w]=!0}var g=m.prototype;return g.parse=function(e){this.$d=function(e){var t=e.date,r=e.utc;if(null===t)return new Date(NaN);if(k.u(t))return new Date;if(t instanceof Date)return new Date(t);if(\"string\"==typeof t&&!/Z$/i.test(t)){var n=t.match(h);if(n){var o=n[2]-1||0,i=(n[7]||\"0\").substring(0,3);return r?new Date(Date.UTC(n[1],o,n[3]||1,n[4]||0,n[5]||0,n[6]||0,i)):new Date(n[1],o,n[3]||1,n[4]||0,n[5]||0,n[6]||0,i)}}return new Date(t)}(e),this.init()},g.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},g.$utils=function(){return k},g.isValid=function(){return!(this.$d.toString()===f)},g.isSame=function(e,t){var r=C(e);return this.startOf(t)<=r&&r<=this.endOf(t)},g.isAfter=function(e,t){return C(e)<this.startOf(t)},g.isBefore=function(e,t){return this.endOf(t)<C(e)},g.$g=function(e,t,r){return k.u(e)?this[t]:this.set(r,e)},g.unix=function(){return Math.floor(this.valueOf()/1e3)},g.valueOf=function(){return this.$d.getTime()},g.startOf=function(e,t){var r=this,c=!!k.u(t)||t,f=k.p(e),h=function(e,t){var n=k.w(r.$u?Date.UTC(r.$y,t,e):new Date(r.$y,t,e),r);return c?n:n.endOf(a)},p=function(e,t){return k.w(r.toDate()[e].apply(r.toDate(\"s\"),(c?[0,0,0,0]:[23,59,59,999]).slice(t)),r)},m=this.$W,g=this.$M,v=this.$D,b=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case u:return c?h(1,0):h(31,11);case l:return c?h(1,g):h(0,g+1);case s:var y=this.$locale().weekStart||0,w=(m<y?m+7:m)-y;return h(c?v-w:v+(6-w),g);case a:case d:return p(b+\"Hours\",0);case i:return p(b+\"Minutes\",1);case o:return p(b+\"Seconds\",2);case n:return p(b+\"Milliseconds\",3);default:return this.clone()}},g.endOf=function(e){return this.startOf(e,!1)},g.$set=function(e,t){var s,c=k.p(e),f=\"set\"+(this.$u?\"UTC\":\"\"),h=(s={},s[a]=f+\"Date\",s[d]=f+\"Date\",s[l]=f+\"Month\",s[u]=f+\"FullYear\",s[i]=f+\"Hours\",s[o]=f+\"Minutes\",s[n]=f+\"Seconds\",s[r]=f+\"Milliseconds\",s)[c],p=c===a?this.$D+(t-this.$W):t;if(c===l||c===u){var m=this.clone().set(d,1);m.$d[h](p),m.init(),this.$d=m.set(d,Math.min(this.$D,m.daysInMonth())).$d}else h&&this.$d[h](p);return this.init(),this},g.set=function(e,t){return this.clone().$set(e,t)},g.get=function(e){return this[k.p(e)]()},g.add=function(r,c){var d,f=this;r=Number(r);var h=k.p(c),p=function(e){var t=C(f);return k.w(t.date(t.date()+Math.round(e*r)),f)};if(h===l)return this.set(l,this.$M+r);if(h===u)return this.set(u,this.$y+r);if(h===a)return p(1);if(h===s)return p(7);var m=(d={},d[o]=e,d[i]=t,d[n]=1e3,d)[h]||1,g=this.$d.getTime()+r*m;return k.w(g,this)},g.subtract=function(e,t){return this.add(-1*e,t)},g.format=function(e){var t=this,r=this.$locale();if(!this.isValid())return r.invalidDate||f;var n=e||\"YYYY-MM-DDTHH:mm:ssZ\",o=k.z(this),i=this.$H,a=this.$m,s=this.$M,l=r.weekdays,c=r.months,u=r.meridiem,d=function(e,r,o,i){return e&&(e[r]||e(t,n))||o[r].slice(0,i)},h=function(e){return k.s(i%12||12,e,\"0\")},m=u||function(e,t,r){var n=e<12?\"AM\":\"PM\";return r?n.toLowerCase():n};return n.replace(p,(function(e,n){return n||function(e){switch(e){case\"YY\":return String(t.$y).slice(-2);case\"YYYY\":return k.s(t.$y,4,\"0\");case\"M\":return s+1;case\"MM\":return k.s(s+1,2,\"0\");case\"MMM\":return d(r.monthsShort,s,c,3);case\"MMMM\":return d(c,s);case\"D\":return t.$D;case\"DD\":return k.s(t.$D,2,\"0\");case\"d\":return String(t.$W);case\"dd\":return d(r.weekdaysMin,t.$W,l,2);case\"ddd\":return d(r.weekdaysShort,t.$W,l,3);case\"dddd\":return l[t.$W];case\"H\":return String(i);case\"HH\":return k.s(i,2,\"0\");case\"h\":return h(1);case\"hh\":return h(2);case\"a\":return m(i,a,!0);case\"A\":return m(i,a,!1);case\"m\":return String(a);case\"mm\":return k.s(a,2,\"0\");case\"s\":return String(t.$s);case\"ss\":return k.s(t.$s,2,\"0\");case\"SSS\":return k.s(t.$ms,3,\"0\");case\"Z\":return o}return null}(e)||o.replace(\":\",\"\")}))},g.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},g.diff=function(r,d,f){var h,p=this,m=k.p(d),g=C(r),v=(g.utcOffset()-this.utcOffset())*e,b=this-g,y=function(){return k.m(p,g)};switch(m){case u:h=y()/12;break;case l:h=y();break;case c:h=y()/3;break;case s:h=(b-v)/6048e5;break;case a:h=(b-v)/864e5;break;case i:h=b/t;break;case o:h=b/e;break;case n:h=b/1e3;break;default:h=b}return f?h:k.a(h)},g.daysInMonth=function(){return this.endOf(l).$D},g.$locale=function(){return y[this.$L]},g.locale=function(e,t){if(!e)return this.$L;var r=this.clone(),n=S(e,t,!0);return n&&(r.$L=n),r},g.clone=function(){return k.w(this.$d,this)},g.toDate=function(){return new Date(this.valueOf())},g.toJSON=function(){return this.isValid()?this.toISOString():null},g.toISOString=function(){return this.$d.toISOString()},g.toString=function(){return this.$d.toUTCString()},m}(),O=E.prototype;return C.prototype=O,[[\"$ms\",r],[\"$s\",n],[\"$m\",o],[\"$H\",i],[\"$W\",a],[\"$M\",l],[\"$y\",u],[\"$D\",d]].forEach((function(e){O[e[1]]=function(t){return this.$g(t,e[0],e[1])}})),C.extend=function(e,t){return e.$i||(e(t,E,C),e.$i=!0),C},C.locale=S,C.isDayjs=x,C.unix=function(e){return C(1e3*e)},C.en=y[b],C.Ls=y,C.p={},C}()},4442:e=>{\"use strict\";e.exports=function(){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}},4473:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Container=void 0;const n=r(4892),o=r(6536),i=r(5483);class a extends o.Node{constructor(){super(...arguments),this.children=[]}getChildren(e){if(!e)return this.children||[];const t=this.children||[],r=[];return t.forEach((function(t){e(t)&&r.push(t)})),r}hasChildren(){return this.getChildren().length>0}removeChildren(){return this.getChildren().forEach((e=>{e.parent=null,e.index=0,e.remove()})),this.children=[],this._requestDraw(),this}destroyChildren(){return this.getChildren().forEach((e=>{e.parent=null,e.index=0,e.destroy()})),this.children=[],this._requestDraw(),this}add(...e){if(0===e.length)return this;if(e.length>1){for(let t=0;t<e.length;t++)this.add(e[t]);return this}const t=e[0];return t.getParent()?(t.moveTo(this),this):(this._validateAdd(t),t.index=this.getChildren().length,t.parent=this,t._clearCaches(),this.getChildren().push(t),this._fire(\"add\",{child:t}),this._requestDraw(),this)}destroy(){return this.hasChildren()&&this.destroyChildren(),super.destroy(),this}find(e){return this._generalFind(e,!1)}findOne(e){const t=this._generalFind(e,!0);return t.length>0?t[0]:void 0}_generalFind(e,t){const r=[];return this._descendants((n=>{const o=n._isMatch(e);return o&&r.push(n),!(!o||!t)})),r}_descendants(e){let t=!1;const r=this.getChildren();for(const n of r){if(t=e(n),t)return!0;if(n.hasChildren()&&(t=n._descendants(e),t))return!0}return!1}toObject(){const e=o.Node.prototype.toObject.call(this);return e.children=[],this.getChildren().forEach((t=>{e.children.push(t.toObject())})),e}isAncestorOf(e){let t=e.getParent();for(;t;){if(t._id===this._id)return!0;t=t.getParent()}return!1}clone(e){const t=o.Node.prototype.clone.call(this,e);return this.getChildren().forEach((function(e){t.add(e.clone())})),t}getAllIntersections(e){const t=[];return this.find(\"Shape\").forEach((r=>{r.isVisible()&&r.intersects(e)&&t.push(r)})),t}_clearSelfAndDescendantCache(e){var t;super._clearSelfAndDescendantCache(e),this.isCached()||null===(t=this.children)||void 0===t||t.forEach((function(t){t._clearSelfAndDescendantCache(e)}))}_setChildrenIndices(){var e;null===(e=this.children)||void 0===e||e.forEach((function(e,t){e.index=t})),this._requestDraw()}drawScene(e,t,r){const n=this.getLayer(),o=e||n&&n.getCanvas(),i=o&&o.getContext(),a=this._getCanvasCache(),s=a&&a.scene,l=o&&o.isCache;if(!this.isVisible()&&!l)return this;if(s){i.save();const e=this.getAbsoluteTransform(t).getMatrix();i.transform(e[0],e[1],e[2],e[3],e[4],e[5]),this._drawCachedSceneCanvas(i),i.restore()}else this._drawChildren(\"drawScene\",o,t,r);return this}drawHit(e,t){if(!this.shouldDrawHit(t))return this;const r=this.getLayer(),n=e||r&&r.hitCanvas,o=n&&n.getContext(),i=this._getCanvasCache();if(i&&i.hit){o.save();const e=this.getAbsoluteTransform(t).getMatrix();o.transform(e[0],e[1],e[2],e[3],e[4],e[5]),this._drawCachedHitCanvas(o),o.restore()}else this._drawChildren(\"drawHit\",n,t);return this}_drawChildren(e,t,r,n){var o;const i=t&&t.getContext(),a=this.clipWidth(),s=this.clipHeight(),l=this.clipFunc(),c=\"number\"==typeof a&&\"number\"==typeof s||l,u=r===this;if(c){i.save();const e=this.getAbsoluteTransform(r);let t,n=e.getMatrix();if(i.transform(n[0],n[1],n[2],n[3],n[4],n[5]),i.beginPath(),l)t=l.call(this,i,this);else{const e=this.clipX(),t=this.clipY();i.rect(e||0,t||0,a,s)}i.clip.apply(i,t),n=e.copy().invert().getMatrix(),i.transform(n[0],n[1],n[2],n[3],n[4],n[5])}const d=!u&&\"source-over\"!==this.globalCompositeOperation()&&\"drawScene\"===e;d&&(i.save(),i._applyGlobalCompositeOperation(this)),null===(o=this.children)||void 0===o||o.forEach((function(o){o[e](t,r,n)})),d&&i.restore(),c&&i.restore()}getClientRect(e={}){var t;const r=e.skipTransform,n=e.relativeTo;let o,i,a,s,l={x:1/0,y:1/0,width:0,height:0};const c=this;null===(t=this.children)||void 0===t||t.forEach((function(t){if(!t.visible())return;const r=t.getClientRect({relativeTo:c,skipShadow:e.skipShadow,skipStroke:e.skipStroke});0===r.width&&0===r.height||(void 0===o?(o=r.x,i=r.y,a=r.x+r.width,s=r.y+r.height):(o=Math.min(o,r.x),i=Math.min(i,r.y),a=Math.max(a,r.x+r.width),s=Math.max(s,r.y+r.height)))}));const u=this.find(\"Shape\");let d=!1;for(let e=0;e<u.length;e++)if(u[e]._isVisible(this)){d=!0;break}return l=d&&void 0!==o?{x:o,y:i,width:a-o,height:s-i}:{x:0,y:0,width:0,height:0},r?l:this._transformedRect(l,n)}}t.Container=a,n.Factory.addComponentsGetterSetter(a,\"clip\",[\"x\",\"y\",\"width\",\"height\"]),n.Factory.addGetterSetter(a,\"clipX\",void 0,(0,i.getNumberValidator)()),n.Factory.addGetterSetter(a,\"clipY\",void 0,(0,i.getNumberValidator)()),n.Factory.addGetterSetter(a,\"clipWidth\",void 0,(0,i.getNumberValidator)()),n.Factory.addGetterSetter(a,\"clipHeight\",void 0,(0,i.getNumberValidator)()),n.Factory.addGetterSetter(a,\"clipFunc\")},4481:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Star=void 0;const n=r(4892),o=r(4723),i=r(5483),a=r(8871);class s extends o.Shape{_sceneFunc(e){const t=this.innerRadius(),r=this.outerRadius(),n=this.numPoints();e.beginPath(),e.moveTo(0,0-r);for(let o=1;o<2*n;o++){const i=o%2==0?r:t,a=i*Math.sin(o*Math.PI/n),s=-1*i*Math.cos(o*Math.PI/n);e.lineTo(a,s)}e.closePath(),e.fillStrokeShape(this)}getWidth(){return 2*this.outerRadius()}getHeight(){return 2*this.outerRadius()}setWidth(e){this.outerRadius(e/2)}setHeight(e){this.outerRadius(e/2)}}t.Star=s,s.prototype.className=\"Star\",s.prototype._centroid=!0,s.prototype._attrsAffectingSize=[\"innerRadius\",\"outerRadius\"],(0,a._registerNode)(s),n.Factory.addGetterSetter(s,\"numPoints\",5,(0,i.getNumberValidator)()),n.Factory.addGetterSetter(s,\"innerRadius\",0,(0,i.getNumberValidator)()),n.Factory.addGetterSetter(s,\"outerRadius\",0,(0,i.getNumberValidator)())},4619:(e,t,r)=>{\"use strict\";r.d(t,{A:()=>s});var n=r(1601),o=r.n(n),i=r(6314),a=r.n(i)()(o());a.push([e.id,\".CustomPopbar{position:absolute;top:0;left:0;z-index:999;display:none;width:max-content;background-color:var(--doorhanger-bg-color);box-shadow:0 1px 5px var(--doorhanger-border-color),0 0 0 1px var(--doorhanger-border-color);border:var(--toolbar-border-color);border-radius:6px;font:message-box;padding:4px}.CustomPopbar.show{display:block}.CustomPopbar .buttons{display:flex;gap:4px;padding:0;margin:0;list-style:none;user-select:none}.CustomPopbar .buttons li{display:flex;justify-content:center;align-items:center;width:40px;height:32px;padding:0;border:1px solid rgba(0,0,0,0);color:var(--main-color);cursor:pointer;border-radius:4px;transition:background-color .2s ease}.CustomPopbar .buttons li .icon{font-size:14px;line-height:1}.CustomPopbar .buttons li:hover{background-color:var(--button-hover-color)}.CustomPopbar .buttons li:active{background-color:var(--button-hover-color-active, #ccc)}\",\"\"]);const s=a},4674:e=>{\"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\"}},4723:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Shape=t.shapes=void 0;const n=r(8871),o=r(4060),i=r(4892),a=r(6536),s=r(5483),l=r(8871),c=r(8722),u=\"hasShadow\",d=\"shadowRGBA\",f=\"patternImage\",h=\"linearGradient\",p=\"radialGradient\";let m;function g(){return m||(m=o.Util.createCanvasElement().getContext(\"2d\"),m)}t.shapes={};class v extends a.Node{constructor(e){let r;for(super(e);r=o.Util.getRandomColor(),!r||r in t.shapes;);this.colorKey=r,t.shapes[r]=this}getContext(){return o.Util.warn(\"shape.getContext() method is deprecated. Please do not use it.\"),this.getLayer().getContext()}getCanvas(){return o.Util.warn(\"shape.getCanvas() method is deprecated. Please do not use it.\"),this.getLayer().getCanvas()}getSceneFunc(){return this.attrs.sceneFunc||this._sceneFunc}getHitFunc(){return this.attrs.hitFunc||this._hitFunc}hasShadow(){return this._getCache(u,this._hasShadow)}_hasShadow(){return this.shadowEnabled()&&0!==this.shadowOpacity()&&!!(this.shadowColor()||this.shadowBlur()||this.shadowOffsetX()||this.shadowOffsetY())}_getFillPattern(){return this._getCache(f,this.__getFillPattern)}__getFillPattern(){if(this.fillPatternImage()){const e=g().createPattern(this.fillPatternImage(),this.fillPatternRepeat()||\"repeat\");if(e&&e.setTransform){const t=new o.Transform;t.translate(this.fillPatternX(),this.fillPatternY()),t.rotate(n.Konva.getAngle(this.fillPatternRotation())),t.scale(this.fillPatternScaleX(),this.fillPatternScaleY()),t.translate(-1*this.fillPatternOffsetX(),-1*this.fillPatternOffsetY());const r=t.getMatrix(),i=\"undefined\"==typeof DOMMatrix?{a:r[0],b:r[1],c:r[2],d:r[3],e:r[4],f:r[5]}:new DOMMatrix(r);e.setTransform(i)}return e}}_getLinearGradient(){return this._getCache(h,this.__getLinearGradient)}__getLinearGradient(){const e=this.fillLinearGradientColorStops();if(e){const t=g(),r=this.fillLinearGradientStartPoint(),n=this.fillLinearGradientEndPoint(),o=t.createLinearGradient(r.x,r.y,n.x,n.y);for(let t=0;t<e.length;t+=2)o.addColorStop(e[t],e[t+1]);return o}}_getRadialGradient(){return this._getCache(p,this.__getRadialGradient)}__getRadialGradient(){const e=this.fillRadialGradientColorStops();if(e){const t=g(),r=this.fillRadialGradientStartPoint(),n=this.fillRadialGradientEndPoint(),o=t.createRadialGradient(r.x,r.y,this.fillRadialGradientStartRadius(),n.x,n.y,this.fillRadialGradientEndRadius());for(let t=0;t<e.length;t+=2)o.addColorStop(e[t],e[t+1]);return o}}getShadowRGBA(){return this._getCache(d,this._getShadowRGBA)}_getShadowRGBA(){if(!this.hasShadow())return;const e=o.Util.colorToRGBA(this.shadowColor());return e?\"rgba(\"+e.r+\",\"+e.g+\",\"+e.b+\",\"+e.a*(this.shadowOpacity()||1)+\")\":void 0}hasFill(){return this._calculate(\"hasFill\",[\"fillEnabled\",\"fill\",\"fillPatternImage\",\"fillLinearGradientColorStops\",\"fillRadialGradientColorStops\"],(()=>this.fillEnabled()&&!!(this.fill()||this.fillPatternImage()||this.fillLinearGradientColorStops()||this.fillRadialGradientColorStops())))}hasStroke(){return this._calculate(\"hasStroke\",[\"strokeEnabled\",\"strokeWidth\",\"stroke\",\"strokeLinearGradientColorStops\"],(()=>this.strokeEnabled()&&this.strokeWidth()&&!(!this.stroke()&&!this.strokeLinearGradientColorStops())))}hasHitStroke(){const e=this.hitStrokeWidth();return\"auto\"===e?this.hasStroke():this.strokeEnabled()&&!!e}intersects(e){const t=this.getStage();if(!t)return!1;const r=t.bufferHitCanvas;return r.getContext().clear(),this.drawHit(r,void 0,!0),r.context.getImageData(Math.round(e.x),Math.round(e.y),1,1).data[3]>0}destroy(){return a.Node.prototype.destroy.call(this),delete t.shapes[this.colorKey],delete this.colorKey,this}_useBufferCanvas(e){var t;if(null!==(t=this.attrs.perfectDrawEnabled)&&void 0!==t&&!t)return!1;const r=e||this.hasFill(),n=this.hasStroke(),o=1!==this.getAbsoluteOpacity();if(r&&n&&o)return!0;const i=this.hasShadow(),a=this.shadowForStrokeEnabled();return!!(r&&n&&i&&a)}setStrokeHitEnabled(e){o.Util.warn(\"strokeHitEnabled property is deprecated. Please use hitStrokeWidth instead.\"),e?this.hitStrokeWidth(\"auto\"):this.hitStrokeWidth(0)}getStrokeHitEnabled(){return 0!==this.hitStrokeWidth()}getSelfRect(){const e=this.size();return{x:this._centroid?-e.width/2:0,y:this._centroid?-e.height/2:0,width:e.width,height:e.height}}getClientRect(e={}){let t=!1,r=this.getParent();for(;r;){if(r.isCached()){t=!0;break}r=r.getParent()}const n=e.skipTransform,o=e.relativeTo||t&&this.getStage()||void 0,i=this.getSelfRect(),a=!e.skipStroke&&this.hasStroke()&&this.strokeWidth()||0,s=i.width+a,l=i.height+a,c=!e.skipShadow&&this.hasShadow(),u=c?this.shadowOffsetX():0,d=c?this.shadowOffsetY():0,f=s+Math.abs(u),h=l+Math.abs(d),p=c&&this.shadowBlur()||0,m={width:f+2*p,height:h+2*p,x:-(a/2+p)+Math.min(u,0)+i.x,y:-(a/2+p)+Math.min(d,0)+i.y};return n?m:this._transformedRect(m,o)}drawScene(e,t,r){const n=this.getLayer();let o,i,a=e||n.getCanvas(),s=a.getContext(),l=this._getCanvasCache(),c=this.getSceneFunc(),u=this.hasShadow();const d=a.isCache,f=t===this;if(!this.isVisible()&&!f)return this;if(l){s.save();const e=this.getAbsoluteTransform(t).getMatrix();return s.transform(e[0],e[1],e[2],e[3],e[4],e[5]),this._drawCachedSceneCanvas(s),s.restore(),this}if(!c)return this;if(s.save(),this._useBufferCanvas()&&!d){o=this.getStage();const e=r||o.bufferCanvas;i=e.getContext(),i.clear(),i.save(),i._applyLineJoin(this);var h=this.getAbsoluteTransform(t).getMatrix();i.transform(h[0],h[1],h[2],h[3],h[4],h[5]),c.call(this,i,this),i.restore();const n=e.pixelRatio;u&&s._applyShadow(this),s._applyOpacity(this),s._applyGlobalCompositeOperation(this),s.drawImage(e._canvas,0,0,e.width/n,e.height/n)}else s._applyLineJoin(this),f||(h=this.getAbsoluteTransform(t).getMatrix(),s.transform(h[0],h[1],h[2],h[3],h[4],h[5]),s._applyOpacity(this),s._applyGlobalCompositeOperation(this)),u&&s._applyShadow(this),c.call(this,s,this);return s.restore(),this}drawHit(e,t,r=!1){if(!this.shouldDrawHit(t,r))return this;const n=this.getLayer(),i=e||n.hitCanvas,a=i&&i.getContext(),s=this.hitFunc()||this.sceneFunc(),l=this._getCanvasCache(),c=l&&l.hit;if(this.colorKey||o.Util.warn(\"Looks like your canvas has a destroyed shape in it. Do not reuse shape after you destroyed it. If you want to reuse shape you should call remove() instead of destroy()\"),c){a.save();const e=this.getAbsoluteTransform(t).getMatrix();return a.transform(e[0],e[1],e[2],e[3],e[4],e[5]),this._drawCachedHitCanvas(a),a.restore(),this}if(!s)return this;if(a.save(),a._applyLineJoin(this),this!==t){const e=this.getAbsoluteTransform(t).getMatrix();a.transform(e[0],e[1],e[2],e[3],e[4],e[5])}return s.call(this,a,this),a.restore(),this}drawHitFromCache(e=0){const t=this._getCanvasCache(),r=this._getCachedSceneCanvas(),n=t.hit,i=n.getContext(),a=n.getWidth(),s=n.getHeight();i.clear(),i.drawImage(r._canvas,0,0,a,s);try{const t=i.getImageData(0,0,a,s),r=t.data,n=r.length,l=o.Util._hexToRgb(this.colorKey);for(let t=0;t<n;t+=4)r[t+3]>e?(r[t]=l.r,r[t+1]=l.g,r[t+2]=l.b,r[t+3]=255):r[t+3]=0;i.putImageData(t,0,0)}catch(e){o.Util.error(\"Unable to draw hit graph from cached scene canvas. \"+e.message)}return this}hasPointerCapture(e){return c.hasPointerCapture(e,this)}setPointerCapture(e){c.setPointerCapture(e,this)}releaseCapture(e){c.releaseCapture(e,this)}}t.Shape=v,v.prototype._fillFunc=function(e){const t=this.attrs.fillRule;t?e.fill(t):e.fill()},v.prototype._strokeFunc=function(e){e.stroke()},v.prototype._fillFuncHit=function(e){const t=this.attrs.fillRule;t?e.fill(t):e.fill()},v.prototype._strokeFuncHit=function(e){e.stroke()},v.prototype._centroid=!1,v.prototype.nodeType=\"Shape\",(0,l._registerNode)(v),v.prototype.eventListeners={},v.prototype.on.call(v.prototype,\"shadowColorChange.konva shadowBlurChange.konva shadowOffsetChange.konva shadowOpacityChange.konva shadowEnabledChange.konva\",(function(){this._clearCache(u)})),v.prototype.on.call(v.prototype,\"shadowColorChange.konva shadowOpacityChange.konva shadowEnabledChange.konva\",(function(){this._clearCache(d)})),v.prototype.on.call(v.prototype,\"fillPriorityChange.konva fillPatternImageChange.konva fillPatternRepeatChange.konva fillPatternScaleXChange.konva fillPatternScaleYChange.konva fillPatternOffsetXChange.konva fillPatternOffsetYChange.konva fillPatternXChange.konva fillPatternYChange.konva fillPatternRotationChange.konva\",(function(){this._clearCache(f)})),v.prototype.on.call(v.prototype,\"fillPriorityChange.konva fillLinearGradientColorStopsChange.konva fillLinearGradientStartPointXChange.konva fillLinearGradientStartPointYChange.konva fillLinearGradientEndPointXChange.konva fillLinearGradientEndPointYChange.konva\",(function(){this._clearCache(h)})),v.prototype.on.call(v.prototype,\"fillPriorityChange.konva fillRadialGradientColorStopsChange.konva fillRadialGradientStartPointXChange.konva fillRadialGradientStartPointYChange.konva fillRadialGradientEndPointXChange.konva fillRadialGradientEndPointYChange.konva fillRadialGradientStartRadiusChange.konva fillRadialGradientEndRadiusChange.konva\",(function(){this._clearCache(p)})),i.Factory.addGetterSetter(v,\"stroke\",void 0,(0,s.getStringOrGradientValidator)()),i.Factory.addGetterSetter(v,\"strokeWidth\",2,(0,s.getNumberValidator)()),i.Factory.addGetterSetter(v,\"fillAfterStrokeEnabled\",!1),i.Factory.addGetterSetter(v,\"hitStrokeWidth\",\"auto\",(0,s.getNumberOrAutoValidator)()),i.Factory.addGetterSetter(v,\"strokeHitEnabled\",!0,(0,s.getBooleanValidator)()),i.Factory.addGetterSetter(v,\"perfectDrawEnabled\",!0,(0,s.getBooleanValidator)()),i.Factory.addGetterSetter(v,\"shadowForStrokeEnabled\",!0,(0,s.getBooleanValidator)()),i.Factory.addGetterSetter(v,\"lineJoin\"),i.Factory.addGetterSetter(v,\"lineCap\"),i.Factory.addGetterSetter(v,\"sceneFunc\"),i.Factory.addGetterSetter(v,\"hitFunc\"),i.Factory.addGetterSetter(v,\"dash\"),i.Factory.addGetterSetter(v,\"dashOffset\",0,(0,s.getNumberValidator)()),i.Factory.addGetterSetter(v,\"shadowColor\",void 0,(0,s.getStringValidator)()),i.Factory.addGetterSetter(v,\"shadowBlur\",0,(0,s.getNumberValidator)()),i.Factory.addGetterSetter(v,\"shadowOpacity\",1,(0,s.getNumberValidator)()),i.Factory.addComponentsGetterSetter(v,\"shadowOffset\",[\"x\",\"y\"]),i.Factory.addGetterSetter(v,\"shadowOffsetX\",0,(0,s.getNumberValidator)()),i.Factory.addGetterSetter(v,\"shadowOffsetY\",0,(0,s.getNumberValidator)()),i.Factory.addGetterSetter(v,\"fillPatternImage\"),i.Factory.addGetterSetter(v,\"fill\",void 0,(0,s.getStringOrGradientValidator)()),i.Factory.addGetterSetter(v,\"fillPatternX\",0,(0,s.getNumberValidator)()),i.Factory.addGetterSetter(v,\"fillPatternY\",0,(0,s.getNumberValidator)()),i.Factory.addGetterSetter(v,\"fillLinearGradientColorStops\"),i.Factory.addGetterSetter(v,\"strokeLinearGradientColorStops\"),i.Factory.addGetterSetter(v,\"fillRadialGradientStartRadius\",0),i.Factory.addGetterSetter(v,\"fillRadialGradientEndRadius\",0),i.Factory.addGetterSetter(v,\"fillRadialGradientColorStops\"),i.Factory.addGetterSetter(v,\"fillPatternRepeat\",\"repeat\"),i.Factory.addGetterSetter(v,\"fillEnabled\",!0),i.Factory.addGetterSetter(v,\"strokeEnabled\",!0),i.Factory.addGetterSetter(v,\"shadowEnabled\",!0),i.Factory.addGetterSetter(v,\"dashEnabled\",!0),i.Factory.addGetterSetter(v,\"strokeScaleEnabled\",!0),i.Factory.addGetterSetter(v,\"fillPriority\",\"color\"),i.Factory.addComponentsGetterSetter(v,\"fillPatternOffset\",[\"x\",\"y\"]),i.Factory.addGetterSetter(v,\"fillPatternOffsetX\",0,(0,s.getNumberValidator)()),i.Factory.addGetterSetter(v,\"fillPatternOffsetY\",0,(0,s.getNumberValidator)()),i.Factory.addComponentsGetterSetter(v,\"fillPatternScale\",[\"x\",\"y\"]),i.Factory.addGetterSetter(v,\"fillPatternScaleX\",1,(0,s.getNumberValidator)()),i.Factory.addGetterSetter(v,\"fillPatternScaleY\",1,(0,s.getNumberValidator)()),i.Factory.addComponentsGetterSetter(v,\"fillLinearGradientStartPoint\",[\"x\",\"y\"]),i.Factory.addComponentsGetterSetter(v,\"strokeLinearGradientStartPoint\",[\"x\",\"y\"]),i.Factory.addGetterSetter(v,\"fillLinearGradientStartPointX\",0),i.Factory.addGetterSetter(v,\"strokeLinearGradientStartPointX\",0),i.Factory.addGetterSetter(v,\"fillLinearGradientStartPointY\",0),i.Factory.addGetterSetter(v,\"strokeLinearGradientStartPointY\",0),i.Factory.addComponentsGetterSetter(v,\"fillLinearGradientEndPoint\",[\"x\",\"y\"]),i.Factory.addComponentsGetterSetter(v,\"strokeLinearGradientEndPoint\",[\"x\",\"y\"]),i.Factory.addGetterSetter(v,\"fillLinearGradientEndPointX\",0),i.Factory.addGetterSetter(v,\"strokeLinearGradientEndPointX\",0),i.Factory.addGetterSetter(v,\"fillLinearGradientEndPointY\",0),i.Factory.addGetterSetter(v,\"strokeLinearGradientEndPointY\",0),i.Factory.addComponentsGetterSetter(v,\"fillRadialGradientStartPoint\",[\"x\",\"y\"]),i.Factory.addGetterSetter(v,\"fillRadialGradientStartPointX\",0),i.Factory.addGetterSetter(v,\"fillRadialGradientStartPointY\",0),i.Factory.addComponentsGetterSetter(v,\"fillRadialGradientEndPoint\",[\"x\",\"y\"]),i.Factory.addGetterSetter(v,\"fillRadialGradientEndPointX\",0),i.Factory.addGetterSetter(v,\"fillRadialGradientEndPointY\",0),i.Factory.addGetterSetter(v,\"fillPatternRotation\",0),i.Factory.addGetterSetter(v,\"fillRule\",void 0,(0,s.getStringValidator)()),i.Factory.backCompat(v,{dashArray:\"dash\",getDashArray:\"getDash\",setDashArray:\"getDash\",drawFunc:\"sceneFunc\",getDrawFunc:\"getSceneFunc\",setDrawFunc:\"setSceneFunc\",drawHitFunc:\"hitFunc\",getDrawHitFunc:\"getHitFunc\",setDrawHitFunc:\"setHitFunc\"})},4821:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Arc=void 0;const n=r(4892),o=r(4723),i=r(8871),a=r(5483),s=r(8871);class l extends o.Shape{_sceneFunc(e){const t=i.Konva.getAngle(this.angle()),r=this.clockwise();e.beginPath(),e.arc(0,0,this.outerRadius(),0,t,r),e.arc(0,0,this.innerRadius(),t,0,!r),e.closePath(),e.fillStrokeShape(this)}getWidth(){return 2*this.outerRadius()}getHeight(){return 2*this.outerRadius()}setWidth(e){this.outerRadius(e/2)}setHeight(e){this.outerRadius(e/2)}getSelfRect(){const e=this.innerRadius(),t=this.outerRadius(),r=this.clockwise(),n=i.Konva.getAngle(r?360-this.angle():this.angle()),o=Math.cos(Math.min(n,Math.PI)),a=Math.sin(Math.min(Math.max(Math.PI,n),3*Math.PI/2)),s=Math.sin(Math.min(n,Math.PI/2)),l=o*(o>0?e:t),c=a*(a>0?e:t),u=s*(s>0?t:e);return{x:l,y:r?-1*u:c,width:1*t-l,height:u-c}}}t.Arc=l,l.prototype._centroid=!0,l.prototype.className=\"Arc\",l.prototype._attrsAffectingSize=[\"innerRadius\",\"outerRadius\",\"angle\",\"clockwise\"],(0,s._registerNode)(l),n.Factory.addGetterSetter(l,\"innerRadius\",0,(0,a.getNumberValidator)()),n.Factory.addGetterSetter(l,\"outerRadius\",0,(0,a.getNumberValidator)()),n.Factory.addGetterSetter(l,\"angle\",0,(0,a.getNumberValidator)()),n.Factory.addGetterSetter(l,\"clockwise\",!1,(0,a.getBooleanValidator)())},4823:e=>{\"use strict\";var t=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();e.exports=function(e,r,n,o){var i=t,a=o+n;e^=-1;for(var s=o;s<a;s++)e=e>>>8^i[255&(e^r[s])];return-1^e}},4843:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.HSV=void 0;const n=r(4892),o=r(6536),i=r(5483);t.HSV=function(e){const t=e.data,r=t.length,n=Math.pow(2,this.value()),o=Math.pow(2,this.saturation()),i=Math.abs(this.hue()+360)%360,a=n*o*Math.cos(i*Math.PI/180),s=n*o*Math.sin(i*Math.PI/180),l=.299*n+.701*a+.167*s,c=.587*n-.587*a+.33*s,u=.114*n-.114*a-.497*s,d=.299*n-.299*a-.328*s,f=.587*n+.413*a+.035*s,h=.114*n-.114*a+.293*s,p=.299*n-.3*a+1.25*s,m=.587*n-.586*a-1.05*s,g=.114*n+.886*a-.2*s;let v,b,y,w;for(let e=0;e<r;e+=4)v=t[e+0],b=t[e+1],y=t[e+2],w=t[e+3],t[e+0]=l*v+c*b+u*y,t[e+1]=d*v+f*b+h*y,t[e+2]=p*v+m*b+g*y,t[e+3]=w},n.Factory.addGetterSetter(o.Node,\"hue\",0,(0,i.getNumberValidator)(),n.Factory.afterSetFilter),n.Factory.addGetterSetter(o.Node,\"saturation\",0,(0,i.getNumberValidator)(),n.Factory.afterSetFilter),n.Factory.addGetterSetter(o.Node,\"value\",0,(0,i.getNumberValidator)(),n.Factory.afterSetFilter)},4848:(e,t,r)=>{\"use strict\";e.exports=r(1020)},4892:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Factory=void 0;const n=r(4060),o=r(5483),i=\"get\",a=\"set\";t.Factory={addGetterSetter(e,r,n,o,i){t.Factory.addGetter(e,r,n),t.Factory.addSetter(e,r,o,i),t.Factory.addOverloadedGetterSetter(e,r)},addGetter(e,t,r){var o=i+n.Util._capitalize(t);e.prototype[o]=e.prototype[o]||function(){const e=this.attrs[t];return void 0===e?r:e}},addSetter(e,r,o,i){var s=a+n.Util._capitalize(r);e.prototype[s]||t.Factory.overWriteSetter(e,r,o,i)},overWriteSetter(e,t,r,o){var i=a+n.Util._capitalize(t);e.prototype[i]=function(e){return r&&null!=e&&(e=r.call(this,e,t)),this._setAttr(t,e),o&&o.call(this),this}},addComponentsGetterSetter(e,r,s,l,c){const u=s.length,d=n.Util._capitalize,f=i+d(r),h=a+d(r);e.prototype[f]=function(){const e={};for(let t=0;t<u;t++){const n=s[t];e[n]=this.getAttr(r+d(n))}return e};const p=(0,o.getComponentValidator)(s);e.prototype[h]=function(e){const t=this.attrs[r];l&&(e=l.call(this,e,r)),p&&p.call(this,e,r);for(const t in e)e.hasOwnProperty(t)&&this._setAttr(r+d(t),e[t]);return e||s.forEach((e=>{this._setAttr(r+d(e),void 0)})),this._fireChangeEvent(r,t,e),c&&c.call(this),this},t.Factory.addOverloadedGetterSetter(e,r)},addOverloadedGetterSetter(e,t){var r=n.Util._capitalize(t),o=a+r,s=i+r;e.prototype[t]=function(){return arguments.length?(this[o](arguments[0]),this):this[s]()}},addDeprecatedGetterSetter(e,r,o,a){n.Util.error(\"Adding deprecated \"+r);const s=i+n.Util._capitalize(r),l=r+\" property is deprecated and will be removed soon. Look at Konva change log for more information.\";e.prototype[s]=function(){n.Util.error(l);const e=this.attrs[r];return void 0===e?o:e},t.Factory.addSetter(e,r,a,(function(){n.Util.error(l)})),t.Factory.addOverloadedGetterSetter(e,r)},backCompat(e,t){n.Util.each(t,(function(t,r){const o=e.prototype[r],s=i+n.Util._capitalize(t),l=a+n.Util._capitalize(t);function c(){o.apply(this,arguments),n.Util.error('\"'+t+'\" method is deprecated and will be removed soon. Use \"\"'+r+'\" instead.')}e.prototype[t]=c,e.prototype[s]=c,e.prototype[l]=c}))},afterSetFilter(){this._filterUpToDate=!1}}},4915:e=>{e.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}},4943:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Pixelate=void 0;const n=r(4892),o=r(4060),i=r(6536),a=r(5483);t.Pixelate=function(e){let t,r,n,i,a,s,l,c,u,d,f,h,p,m,g=Math.ceil(this.pixelSize()),v=e.width,b=e.height,y=Math.ceil(v/g),w=Math.ceil(b/g),x=e.data;if(g<=0)o.Util.error(\"pixelSize value can not be <= 0\");else for(h=0;h<y;h+=1)for(p=0;p<w;p+=1){for(i=0,a=0,s=0,l=0,c=h*g,u=c+g,d=p*g,f=d+g,m=0,t=c;t<u;t+=1)if(!(t>=v))for(r=d;r<f;r+=1)r>=b||(n=4*(v*r+t),i+=x[n+0],a+=x[n+1],s+=x[n+2],l+=x[n+3],m+=1);for(i/=m,a/=m,s/=m,l/=m,t=c;t<u;t+=1)if(!(t>=v))for(r=d;r<f;r+=1)r>=b||(n=4*(v*r+t),x[n+0]=i,x[n+1]=a,x[n+2]=s,x[n+3]=l)}},n.Factory.addGetterSetter(i.Node,\"pixelSize\",8,(0,a.getNumberValidator)(),n.Factory.afterSetFilter)},4974:(e,t,r)=>{e.exports=function e(t,r,n){function o(a,s){if(!r[a]){if(!t[a]){if(i)return i(a,!0);var l=new Error(\"Cannot find module '\"+a+\"'\");throw l.code=\"MODULE_NOT_FOUND\",l}var c=r[a]={exports:{}};t[a][0].call(c.exports,(function(e){return o(t[a][1][e]||e)}),c,c.exports,e,t,r,n)}return r[a].exports}for(var i=void 0,a=0;a<n.length;a++)o(n[a]);return o}({1:[function(e,t,r){\"use strict\";const n=e(\"fs\"),o=e(\"fast-csv\"),i=e(\"dayjs/plugin/customParseFormat\"),a=e(\"dayjs/plugin/utc\"),s=e(\"dayjs\").extend(i).extend(a),l=e(\"../utils/stream-buf\"),{fs:{exists:c}}=e(\"../utils/utils\"),u={true:!0,false:!1,\"#N/A\":{error:\"#N/A\"},\"#REF!\":{error:\"#REF!\"},\"#NAME?\":{error:\"#NAME?\"},\"#DIV/0!\":{error:\"#DIV/0!\"},\"#NULL!\":{error:\"#NULL!\"},\"#VALUE!\":{error:\"#VALUE!\"},\"#NUM!\":{error:\"#NUM!\"}};t.exports=class{constructor(e){this.workbook=e,this.worksheet=null}async readFile(e,t){if(t=t||{},!await c(e))throw new Error(\"File not found: \"+e);const r=n.createReadStream(e),o=await this.read(r,t);return r.close(),o}read(e,t){return t=t||{},new Promise(((r,n)=>{const i=this.workbook.addWorksheet(t.sheetName),a=t.dateFormats||[\"YYYY-MM-DD[T]HH:mm:ssZ\",\"YYYY-MM-DD[T]HH:mm:ss\",\"MM-DD-YYYY\",\"YYYY-MM-DD\"],l=t.map||function(e){if(\"\"===e)return null;const t=Number(e);if(!Number.isNaN(t)&&t!==1/0)return t;const r=a.reduce(((t,r)=>{if(t)return t;const n=s(e,r,!0);return n.isValid()?n:null}),null);if(r)return new Date(r.valueOf());const n=u[e];return void 0!==n?n:e},c=o.parse(t.parserOptions).on(\"data\",(e=>{i.addRow(e.map(l))})).on(\"end\",(()=>{c.emit(\"worksheet\",i)}));c.on(\"worksheet\",r).on(\"error\",n),e.pipe(c)}))}createInputStream(){throw new Error(\"`CSV#createInputStream` is deprecated. You should use `CSV#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md\")}write(e,t){return new Promise(((r,n)=>{t=t||{};const i=this.workbook.getWorksheet(t.sheetName||t.sheetId),a=o.format(t.formatterOptions);e.on(\"finish\",(()=>{r()})),a.on(\"error\",n),a.pipe(e);const{dateFormat:l,dateUTC:c}=t,u=t.map||(e=>{if(e){if(e.text||e.hyperlink)return e.hyperlink||e.text||\"\";if(e.formula||e.result)return e.result||\"\";if(e instanceof Date)return l?c?s.utc(e).format(l):s(e).format(l):c?s.utc(e).format():s(e).format();if(e.error)return e.error;if(\"object\"==typeof e)return JSON.stringify(e)}return e}),d=void 0===t.includeEmptyRows||t.includeEmptyRows;let f=1;i&&i.eachRow(((e,t)=>{if(d)for(;f++<t-1;)a.write([]);const{values:r}=e;r.shift(),a.write(r.map(u)),f=t})),a.end()}))}writeFile(e,t){const r={encoding:(t=t||{}).encoding||\"utf8\"},o=n.createWriteStream(e,r);return this.write(o,t)}async writeBuffer(e){const t=new l;return await this.write(t,e),t.read()}}},{\"../utils/stream-buf\":24,\"../utils/utils\":27,dayjs:391,\"dayjs/plugin/customParseFormat\":392,\"dayjs/plugin/utc\":393,\"fast-csv\":424,fs:216}],2:[function(e,t,r){\"use strict\";const n=e(\"../utils/col-cache\");class o{constructor(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;if(this.worksheet=e,t)if(\"string\"==typeof t){const e=n.decodeAddress(t);this.nativeCol=e.col+r,this.nativeColOff=0,this.nativeRow=e.row+r,this.nativeRowOff=0}else void 0!==t.nativeCol?(this.nativeCol=t.nativeCol||0,this.nativeColOff=t.nativeColOff||0,this.nativeRow=t.nativeRow||0,this.nativeRowOff=t.nativeRowOff||0):void 0!==t.col?(this.col=t.col+r,this.row=t.row+r):(this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0);else this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0}static asInstance(e){return e instanceof o||null==e?e:new o(e)}get col(){return this.nativeCol+Math.min(this.colWidth-1,this.nativeColOff)/this.colWidth}set col(e){this.nativeCol=Math.floor(e),this.nativeColOff=Math.floor((e-this.nativeCol)*this.colWidth)}get row(){return this.nativeRow+Math.min(this.rowHeight-1,this.nativeRowOff)/this.rowHeight}set row(e){this.nativeRow=Math.floor(e),this.nativeRowOff=Math.floor((e-this.nativeRow)*this.rowHeight)}get colWidth(){return this.worksheet&&this.worksheet.getColumn(this.nativeCol+1)&&this.worksheet.getColumn(this.nativeCol+1).isCustomWidth?Math.floor(1e4*this.worksheet.getColumn(this.nativeCol+1).width):64e4}get rowHeight(){return this.worksheet&&this.worksheet.getRow(this.nativeRow+1)&&this.worksheet.getRow(this.nativeRow+1).height?Math.floor(1e4*this.worksheet.getRow(this.nativeRow+1).height):18e4}get model(){return{nativeCol:this.nativeCol,nativeColOff:this.nativeColOff,nativeRow:this.nativeRow,nativeRowOff:this.nativeRowOff}}set model(e){this.nativeCol=e.nativeCol,this.nativeColOff=e.nativeColOff,this.nativeRow=e.nativeRow,this.nativeRowOff=e.nativeRowOff}}t.exports=o},{\"../utils/col-cache\":19}],3:[function(e,t,r){\"use strict\";const n=e(\"../utils/col-cache\"),o=e(\"../utils/under-dash\"),i=e(\"./enums\"),{slideFormula:a}=e(\"../utils/shared-formula\"),s=e(\"./note\");class l{constructor(e,t,r){if(!e||!t)throw new Error(\"A Cell needs a Row\");this._row=e,this._column=t,n.validateAddress(r),this._address=r,this._value=c.create(l.Types.Null,this),this.style=this._mergeStyle(e.style,t.style,{}),this._mergeCount=0}get worksheet(){return this._row.worksheet}get workbook(){return this._row.worksheet.workbook}destroy(){delete this.style,delete this._value,delete this._row,delete this._column,delete this._address}get numFmt(){return this.style.numFmt}set numFmt(e){this.style.numFmt=e}get font(){return this.style.font}set font(e){this.style.font=e}get alignment(){return this.style.alignment}set alignment(e){this.style.alignment=e}get border(){return this.style.border}set border(e){this.style.border=e}get fill(){return this.style.fill}set fill(e){this.style.fill=e}get protection(){return this.style.protection}set protection(e){this.style.protection=e}_mergeStyle(e,t,r){const n=e&&e.numFmt||t&&t.numFmt;n&&(r.numFmt=n);const o=e&&e.font||t&&t.font;o&&(r.font=o);const i=e&&e.alignment||t&&t.alignment;i&&(r.alignment=i);const a=e&&e.border||t&&t.border;a&&(r.border=a);const s=e&&e.fill||t&&t.fill;s&&(r.fill=s);const l=e&&e.protection||t&&t.protection;return l&&(r.protection=l),r}get address(){return this._address}get row(){return this._row.number}get col(){return this._column.number}get $col$row(){return`$${this._column.letter}$${this.row}`}get type(){return this._value.type}get effectiveType(){return this._value.effectiveType}toCsvString(){return this._value.toCsvString()}addMergeRef(){this._mergeCount++}releaseMergeRef(){this._mergeCount--}get isMerged(){return this._mergeCount>0||this.type===l.Types.Merge}merge(e,t){this._value.release(),this._value=c.create(l.Types.Merge,this,e),t||(this.style=e.style)}unmerge(){this.type===l.Types.Merge&&(this._value.release(),this._value=c.create(l.Types.Null,this),this.style=this._mergeStyle(this._row.style,this._column.style,{}))}isMergedTo(e){return this._value.type===l.Types.Merge&&this._value.isMergedTo(e)}get master(){return this.type===l.Types.Merge?this._value.master:this}get isHyperlink(){return this._value.type===l.Types.Hyperlink}get hyperlink(){return this._value.hyperlink}get value(){return this._value.value}set value(e){this.type!==l.Types.Merge?(this._value.release(),this._value=c.create(c.getType(e),this,e)):this._value.master.value=e}get note(){return this._comment&&this._comment.note}set note(e){this._comment=new s(e)}get text(){return this._value.toString()}get html(){return o.escapeHtml(this.text)}toString(){return this.text}_upgradeToHyperlink(e){this.type===l.Types.String&&(this._value=c.create(l.Types.Hyperlink,this,{text:this._value.value,hyperlink:e}))}get formula(){return this._value.formula}get result(){return this._value.result}get formulaType(){return this._value.formulaType}get fullAddress(){const{worksheet:e}=this._row;return{sheetName:e.name,address:this.address,row:this.row,col:this.col}}get name(){return this.names[0]}set name(e){this.names=[e]}get names(){return this.workbook.definedNames.getNamesEx(this.fullAddress)}set names(e){const{definedNames:t}=this.workbook;t.removeAllNames(this.fullAddress),e.forEach((e=>{t.addEx(this.fullAddress,e)}))}addName(e){this.workbook.definedNames.addEx(this.fullAddress,e)}removeName(e){this.workbook.definedNames.removeEx(this.fullAddress,e)}removeAllNames(){this.workbook.definedNames.removeAllNames(this.fullAddress)}get _dataValidations(){return this.worksheet.dataValidations}get dataValidation(){return this._dataValidations.find(this.address)}set dataValidation(e){this._dataValidations.add(this.address,e)}get model(){const{model:e}=this._value;return e.style=this.style,this._comment&&(e.comment=this._comment.model),e}set model(e){this._value.release(),this._value=c.create(e.type,this),this._value.model=e,e.comment&&\"note\"===e.comment.type&&(this._comment=s.fromModel(e.comment)),e.style?this.style=e.style:this.style={}}}l.Types=i.ValueType;const c={getType:e=>null==e?l.Types.Null:e instanceof String||\"string\"==typeof e?l.Types.String:\"number\"==typeof e?l.Types.Number:\"boolean\"==typeof e?l.Types.Boolean:e instanceof Date?l.Types.Date:e.text&&e.hyperlink?l.Types.Hyperlink:e.formula||e.sharedFormula?l.Types.Formula:e.richText?l.Types.RichText:e.sharedString?l.Types.SharedString:e.error?l.Types.Error:l.Types.JSON,types:[{t:l.Types.Null,f:class{constructor(e){this.model={address:e.address,type:l.Types.Null}}get value(){return null}set value(e){}get type(){return l.Types.Null}get effectiveType(){return l.Types.Null}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return\"\"}release(){}toString(){return\"\"}}},{t:l.Types.Number,f:class{constructor(e,t){this.model={address:e.address,type:l.Types.Number,value:t}}get value(){return this.model.value}set value(e){this.model.value=e}get type(){return l.Types.Number}get effectiveType(){return l.Types.Number}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return this.model.value.toString()}release(){}toString(){return this.model.value.toString()}}},{t:l.Types.String,f:class{constructor(e,t){this.model={address:e.address,type:l.Types.String,value:t}}get value(){return this.model.value}set value(e){this.model.value=e}get type(){return l.Types.String}get effectiveType(){return l.Types.String}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return`\"${this.model.value.replace(/\"/g,'\"\"')}\"`}release(){}toString(){return this.model.value}}},{t:l.Types.Date,f:class{constructor(e,t){this.model={address:e.address,type:l.Types.Date,value:t}}get value(){return this.model.value}set value(e){this.model.value=e}get type(){return l.Types.Date}get effectiveType(){return l.Types.Date}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return this.model.value.toISOString()}release(){}toString(){return this.model.value.toString()}}},{t:l.Types.Hyperlink,f:class{constructor(e,t){this.model={address:e.address,type:l.Types.Hyperlink,text:t?t.text:void 0,hyperlink:t?t.hyperlink:void 0},t&&t.tooltip&&(this.model.tooltip=t.tooltip)}get value(){const e={text:this.model.text,hyperlink:this.model.hyperlink};return this.model.tooltip&&(e.tooltip=this.model.tooltip),e}set value(e){this.model={text:e.text,hyperlink:e.hyperlink},e.tooltip&&(this.model.tooltip=e.tooltip)}get text(){return this.model.text}set text(e){this.model.text=e}get hyperlink(){return this.model.hyperlink}set hyperlink(e){this.model.hyperlink=e}get type(){return l.Types.Hyperlink}get effectiveType(){return l.Types.Hyperlink}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return this.model.hyperlink}release(){}toString(){return this.model.text}}},{t:l.Types.Formula,f:class{constructor(e,t){this.cell=e,this.model={address:e.address,type:l.Types.Formula,shareType:t?t.shareType:void 0,ref:t?t.ref:void 0,formula:t?t.formula:void 0,sharedFormula:t?t.sharedFormula:void 0,result:t?t.result:void 0}}_copyModel(e){const t={},r=r=>{const n=e[r];n&&(t[r]=n)};return r(\"formula\"),r(\"result\"),r(\"ref\"),r(\"shareType\"),r(\"sharedFormula\"),t}get value(){return this._copyModel(this.model)}set value(e){this.model=this._copyModel(e)}validate(e){switch(c.getType(e)){case l.Types.Null:case l.Types.String:case l.Types.Number:case l.Types.Date:break;case l.Types.Hyperlink:case l.Types.Formula:default:throw new Error(\"Cannot process that type of result value\")}}get dependencies(){return{ranges:this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}:[A-Z]{1,3}\\d{1,4}/g),cells:this.formula.replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}:[A-Z]{1,3}\\d{1,4}/g,\"\").match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}/g)}}get formula(){return this.model.formula||this._getTranslatedFormula()}set formula(e){this.model.formula=e}get formulaType(){return this.model.formula?i.FormulaType.Master:this.model.sharedFormula?i.FormulaType.Shared:i.FormulaType.None}get result(){return this.model.result}set result(e){this.model.result=e}get type(){return l.Types.Formula}get effectiveType(){const e=this.model.result;return null==e?i.ValueType.Null:e instanceof String||\"string\"==typeof e?i.ValueType.String:\"number\"==typeof e?i.ValueType.Number:e instanceof Date?i.ValueType.Date:e.text&&e.hyperlink?i.ValueType.Hyperlink:e.formula?i.ValueType.Formula:i.ValueType.Null}get address(){return this.model.address}set address(e){this.model.address=e}_getTranslatedFormula(){if(!this._translatedFormula&&this.model.sharedFormula){const{worksheet:e}=this.cell,t=e.findCell(this.model.sharedFormula);this._translatedFormula=t&&a(t.formula,t.address,this.model.address)}return this._translatedFormula}toCsvString(){return\"\"+(this.model.result||\"\")}release(){}toString(){return this.model.result?this.model.result.toString():\"\"}}},{t:l.Types.Merge,f:class{constructor(e,t){this.model={address:e.address,type:l.Types.Merge,master:t?t.address:void 0},this._master=t,t&&t.addMergeRef()}get value(){return this._master.value}set value(e){e instanceof l?(this._master&&this._master.releaseMergeRef(),e.addMergeRef(),this._master=e):this._master.value=e}isMergedTo(e){return e===this._master}get master(){return this._master}get type(){return l.Types.Merge}get effectiveType(){return this._master.effectiveType}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return\"\"}release(){this._master.releaseMergeRef()}toString(){return this.value.toString()}}},{t:l.Types.JSON,f:class{constructor(e,t){this.model={address:e.address,type:l.Types.String,value:JSON.stringify(t),rawValue:t}}get value(){return this.model.rawValue}set value(e){this.model.rawValue=e,this.model.value=JSON.stringify(e)}get type(){return l.Types.String}get effectiveType(){return l.Types.String}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return this.model.value}release(){}toString(){return this.model.value}}},{t:l.Types.SharedString,f:class{constructor(e,t){this.model={address:e.address,type:l.Types.SharedString,value:t}}get value(){return this.model.value}set value(e){this.model.value=e}get type(){return l.Types.SharedString}get effectiveType(){return l.Types.SharedString}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return this.model.value.toString()}release(){}toString(){return this.model.value.toString()}}},{t:l.Types.RichText,f:class{constructor(e,t){this.model={address:e.address,type:l.Types.String,value:t}}get value(){return this.model.value}set value(e){this.model.value=e}toString(){return this.model.value.richText.map((e=>e.text)).join(\"\")}get type(){return l.Types.RichText}get effectiveType(){return l.Types.RichText}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return`\"${this.text.replace(/\"/g,'\"\"')}\"`}release(){}}},{t:l.Types.Boolean,f:class{constructor(e,t){this.model={address:e.address,type:l.Types.Boolean,value:t}}get value(){return this.model.value}set value(e){this.model.value=e}get type(){return l.Types.Boolean}get effectiveType(){return l.Types.Boolean}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return this.model.value?1:0}release(){}toString(){return this.model.value.toString()}}},{t:l.Types.Error,f:class{constructor(e,t){this.model={address:e.address,type:l.Types.Error,value:t}}get value(){return this.model.value}set value(e){this.model.value=e}get type(){return l.Types.Error}get effectiveType(){return l.Types.Error}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return this.toString()}release(){}toString(){return this.model.value.error.toString()}}}].reduce(((e,t)=>(e[t.t]=t.f,e)),[]),create(e,t,r){const n=this.types[e];if(!n)throw new Error(\"Could not create Value of type \"+e);return new n(t,r)}};t.exports=l},{\"../utils/col-cache\":19,\"../utils/shared-formula\":23,\"../utils/under-dash\":26,\"./enums\":7,\"./note\":9}],4:[function(e,t,r){\"use strict\";const n=e(\"../utils/under-dash\"),o=e(\"./enums\"),i=e(\"../utils/col-cache\");class a{constructor(e,t,r){this._worksheet=e,this._number=t,!1!==r&&(this.defn=r)}get number(){return this._number}get worksheet(){return this._worksheet}get letter(){return i.n2l(this._number)}get isCustomWidth(){return void 0!==this.width&&9!==this.width}get defn(){return{header:this._header,key:this.key,width:this.width,style:this.style,hidden:this.hidden,outlineLevel:this.outlineLevel}}set defn(e){e?(this.key=e.key,this.width=void 0!==e.width?e.width:9,this.outlineLevel=e.outlineLevel,e.style?this.style=e.style:this.style={},this.header=e.header,this._hidden=!!e.hidden):(delete this._header,delete this._key,delete this.width,this.style={},this.outlineLevel=0)}get headers(){return this._header&&this._header instanceof Array?this._header:[this._header]}get header(){return this._header}set header(e){void 0!==e?(this._header=e,this.headers.forEach(((e,t)=>{this._worksheet.getCell(t+1,this.number).value=e}))):this._header=void 0}get key(){return this._key}set key(e){(this._key&&this._worksheet.getColumnKey(this._key))===this&&this._worksheet.deleteColumnKey(this._key),this._key=e,e&&this._worksheet.setColumnKey(this._key,this)}get hidden(){return!!this._hidden}set hidden(e){this._hidden=e}get outlineLevel(){return this._outlineLevel||0}set outlineLevel(e){this._outlineLevel=e}get collapsed(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelCol)}toString(){return JSON.stringify({key:this.key,width:this.width,headers:this.headers.length?this.headers:void 0})}equivalentTo(e){return this.width===e.width&&this.hidden===e.hidden&&this.outlineLevel===e.outlineLevel&&n.isEqual(this.style,e.style)}get isDefault(){if(this.isCustomWidth)return!1;if(this.hidden)return!1;if(this.outlineLevel)return!1;const e=this.style;return!e||!(e.font||e.numFmt||e.alignment||e.border||e.fill||e.protection)}get headerCount(){return this.headers.length}eachCell(e,t){const r=this.number;t||(t=e,e=null),this._worksheet.eachRow(e,((e,n)=>{t(e.getCell(r),n)}))}get values(){const e=[];return this.eachCell(((t,r)=>{t&&t.type!==o.ValueType.Null&&(e[r]=t.value)})),e}set values(e){if(!e)return;const t=this.number;let r=0;e.hasOwnProperty(\"0\")&&(r=1),e.forEach(((e,n)=>{this._worksheet.getCell(n+r,t).value=e}))}_applyStyle(e,t){return this.style[e]=t,this.eachCell((r=>{r[e]=t})),t}get numFmt(){return this.style.numFmt}set numFmt(e){this._applyStyle(\"numFmt\",e)}get font(){return this.style.font}set font(e){this._applyStyle(\"font\",e)}get alignment(){return this.style.alignment}set alignment(e){this._applyStyle(\"alignment\",e)}get protection(){return this.style.protection}set protection(e){this._applyStyle(\"protection\",e)}get border(){return this.style.border}set border(e){this._applyStyle(\"border\",e)}get fill(){return this.style.fill}set fill(e){this._applyStyle(\"fill\",e)}static toModel(e){const t=[];let r=null;return e&&e.forEach(((e,n)=>{e.isDefault?r&&(r=null):r&&e.equivalentTo(r)?r.max=n+1:(r={min:n+1,max:n+1,width:void 0!==e.width?e.width:9,style:e.style,isCustomWidth:e.isCustomWidth,hidden:e.hidden,outlineLevel:e.outlineLevel,collapsed:e.collapsed},t.push(r))})),t.length?t:void 0}static fromModel(e,t){const r=[];let n=1,o=0;for(t=(t=t||[]).sort((function(e,t){return e.min-t.min}));o<t.length;){const i=t[o++];for(;n<i.min;)r.push(new a(e,n++));for(;n<=i.max;)r.push(new a(e,n++,i))}return r.length?r:null}}t.exports=a},{\"../utils/col-cache\":19,\"../utils/under-dash\":26,\"./enums\":7}],5:[function(e,t,r){\"use strict\";t.exports=class{constructor(e){this.model=e||{}}add(e,t){return this.model[e]=t}find(e){return this.model[e]}remove(e){this.model[e]=void 0}}},{}],6:[function(e,t,r){\"use strict\";const n=e(\"../utils/under-dash\"),o=e(\"../utils/col-cache\"),i=e(\"../utils/cell-matrix\"),a=e(\"./range\"),s=/[$](\\w+)[$](\\d+)(:[$](\\w+)[$](\\d+))?/;t.exports=class{constructor(){this.matrixMap={}}getMatrix(e){return this.matrixMap[e]||(this.matrixMap[e]=new i)}add(e,t){const r=o.decodeEx(e);this.addEx(r,t)}addEx(e,t){const r=this.getMatrix(t);if(e.top)for(let t=e.left;t<=e.right;t++)for(let n=e.top;n<=e.bottom;n++){const i={sheetName:e.sheetName,address:o.n2l(t)+n,row:n,col:t};r.addCellEx(i)}else r.addCellEx(e)}remove(e,t){const r=o.decodeEx(e);this.removeEx(r,t)}removeEx(e,t){this.getMatrix(t).removeCellEx(e)}removeAllNames(e){n.each(this.matrixMap,(t=>{t.removeCellEx(e)}))}forEach(e){n.each(this.matrixMap,((t,r)=>{t.forEach((t=>{e(r,t)}))}))}getNames(e){return this.getNamesEx(o.decodeEx(e))}getNamesEx(e){return n.map(this.matrixMap,((t,r)=>t.findCellEx(e)&&r)).filter(Boolean)}_explore(e,t){t.mark=!1;const{sheetName:r}=t,n=new a(t.row,t.col,t.row,t.col,r);let o,i;function s(o,i){const a=e.findCellAt(r,o,t.col);return!(!a||!a.mark||(n[i]=o,a.mark=!1,0))}for(i=t.row-1;s(i,\"top\");i--);for(i=t.row+1;s(i,\"bottom\");i++);function l(t,o){const a=[];for(i=n.top;i<=n.bottom;i++){const n=e.findCellAt(r,i,t);if(!n||!n.mark)return!1;a.push(n)}n[o]=t;for(let e=0;e<a.length;e++)a[e].mark=!1;return!0}for(o=t.col-1;l(o,\"left\");o--);for(o=t.col+1;l(o,\"right\");o++);return n}getRanges(e,t){return(t=t||this.matrixMap[e])?(t.forEach((e=>{e.mark=!0})),{name:e,ranges:t.map((e=>e.mark&&this._explore(t,e))).filter(Boolean).map((e=>e.$shortRange))}):{name:e,ranges:[]}}normaliseMatrix(e,t){e.forEachInSheet(t,((e,t,r)=>{e&&(e.row===t&&e.col===r||(e.row=t,e.col=r,e.address=o.n2l(r)+t))}))}spliceRows(e,t,r,o){n.each(this.matrixMap,(n=>{n.spliceRows(e,t,r,o),this.normaliseMatrix(n,e)}))}spliceColumns(e,t,r,o){n.each(this.matrixMap,(n=>{n.spliceColumns(e,t,r,o),this.normaliseMatrix(n,e)}))}get model(){return n.map(this.matrixMap,((e,t)=>this.getRanges(t,e))).filter((e=>e.ranges.length))}set model(e){const t=this.matrixMap={};e.forEach((e=>{const r=t[e.name]=new i;e.ranges.forEach((e=>{s.test(e.split(\"!\").pop()||\"\")&&r.addCell(e)}))}))}}},{\"../utils/cell-matrix\":18,\"../utils/col-cache\":19,\"../utils/under-dash\":26,\"./range\":10}],7:[function(e,t,r){\"use strict\";t.exports={ValueType:{Null:0,Merge:1,Number:2,String:3,Date:4,Hyperlink:5,Formula:6,SharedString:7,RichText:8,Boolean:9,Error:10},FormulaType:{None:0,Master:1,Shared:2},RelationshipType:{None:0,OfficeDocument:1,Worksheet:2,CalcChain:3,SharedStrings:4,Styles:5,Theme:6,Hyperlink:7},DocumentType:{Xlsx:1},ReadingOrder:{LeftToRight:1,RightToLeft:2},ErrorValue:{NotApplicable:\"#N/A\",Ref:\"#REF!\",Name:\"#NAME?\",DivZero:\"#DIV/0!\",Null:\"#NULL!\",Value:\"#VALUE!\",Num:\"#NUM!\"}}},{}],8:[function(e,t,r){\"use strict\";const n=e(\"../utils/col-cache\"),o=e(\"./anchor\");t.exports=class{constructor(e,t){this.worksheet=e,this.model=t}get model(){switch(this.type){case\"background\":return{type:this.type,imageId:this.imageId};case\"image\":return{type:this.type,imageId:this.imageId,hyperlinks:this.range.hyperlinks,range:{tl:this.range.tl.model,br:this.range.br&&this.range.br.model,ext:this.range.ext,editAs:this.range.editAs}};default:throw new Error(\"Invalid Image Type\")}}set model(e){let{type:t,imageId:r,range:i,hyperlinks:a}=e;if(this.type=t,this.imageId=r,\"image\"===t)if(\"string\"==typeof i){const e=n.decode(i);this.range={tl:new o(this.worksheet,{col:e.left,row:e.top},-1),br:new o(this.worksheet,{col:e.right,row:e.bottom},0),editAs:\"oneCell\"}}else this.range={tl:new o(this.worksheet,i.tl,0),br:i.br&&new o(this.worksheet,i.br,0),ext:i.ext,editAs:i.editAs,hyperlinks:a||i.hyperlinks}}}},{\"../utils/col-cache\":19,\"./anchor\":2}],9:[function(e,t,r){\"use strict\";const n=e(\"../utils/under-dash\");class o{constructor(e){this.note=e}get model(){let e=null;return e=\"string\"==typeof this.note?{type:\"note\",note:{texts:[{text:this.note}]}}:{type:\"note\",note:this.note},n.deepMerge({},o.DEFAULT_CONFIGS,e)}set model(e){const{note:t}=e,{texts:r}=t;1===r.length&&1===Object.keys(r[0]).length?this.note=r[0].text:this.note=t}static fromModel(e){const t=new o;return t.model=e,t}}o.DEFAULT_CONFIGS={note:{margins:{insetmode:\"auto\",inset:[.13,.13,.25,.25]},protection:{locked:\"True\",lockText:\"True\"},editAs:\"absolute\"}},t.exports=o},{\"../utils/under-dash\":26}],10:[function(e,t,r){\"use strict\";const n=e(\"../utils/col-cache\");class o{constructor(){this.decode(arguments)}setTLBR(e,t,r,o,i){if(arguments.length<4){const o=n.decodeAddress(e),a=n.decodeAddress(t);this.model={top:Math.min(o.row,a.row),left:Math.min(o.col,a.col),bottom:Math.max(o.row,a.row),right:Math.max(o.col,a.col),sheetName:r},this.setTLBR(o.row,o.col,a.row,a.col,i)}else this.model={top:Math.min(e,r),left:Math.min(t,o),bottom:Math.max(e,r),right:Math.max(t,o),sheetName:i}}decode(e){switch(e.length){case 5:this.setTLBR(e[0],e[1],e[2],e[3],e[4]);break;case 4:this.setTLBR(e[0],e[1],e[2],e[3]);break;case 3:this.setTLBR(e[0],e[1],e[2]);break;case 2:this.setTLBR(e[0],e[1]);break;case 1:{const t=e[0];if(t instanceof o)this.model={top:t.model.top,left:t.model.left,bottom:t.model.bottom,right:t.model.right,sheetName:t.sheetName};else if(t instanceof Array)this.decode(t);else if(t.top&&t.left&&t.bottom&&t.right)this.model={top:t.top,left:t.left,bottom:t.bottom,right:t.right,sheetName:t.sheetName};else{const e=n.decodeEx(t);e.top?this.model={top:e.top,left:e.left,bottom:e.bottom,right:e.right,sheetName:e.sheetName}:this.model={top:e.row,left:e.col,bottom:e.row,right:e.col,sheetName:e.sheetName}}break}case 0:this.model={top:0,left:0,bottom:0,right:0};break;default:throw new Error(\"Invalid number of arguments to _getDimensions() - \"+e.length)}}get top(){return this.model.top||1}set top(e){this.model.top=e}get left(){return this.model.left||1}set left(e){this.model.left=e}get bottom(){return this.model.bottom||1}set bottom(e){this.model.bottom=e}get right(){return this.model.right||1}set right(e){this.model.right=e}get sheetName(){return this.model.sheetName}set sheetName(e){this.model.sheetName=e}get _serialisedSheetName(){const{sheetName:e}=this.model;return e?/^[a-zA-Z0-9]*$/.test(e)?e+\"!\":`'${e}'!`:\"\"}expand(e,t,r,n){(!this.model.top||e<this.top)&&(this.top=e),(!this.model.left||t<this.left)&&(this.left=t),(!this.model.bottom||r>this.bottom)&&(this.bottom=r),(!this.model.right||n>this.right)&&(this.right=n)}expandRow(e){if(e){const{dimensions:t,number:r}=e;t&&this.expand(r,t.min,r,t.max)}}expandToAddress(e){const t=n.decodeEx(e);this.expand(t.row,t.col,t.row,t.col)}get tl(){return n.n2l(this.left)+this.top}get $t$l(){return`$${n.n2l(this.left)}$${this.top}`}get br(){return n.n2l(this.right)+this.bottom}get $b$r(){return`$${n.n2l(this.right)}$${this.bottom}`}get range(){return`${this._serialisedSheetName+this.tl}:${this.br}`}get $range(){return`${this._serialisedSheetName+this.$t$l}:${this.$b$r}`}get shortRange(){return this.count>1?this.range:this._serialisedSheetName+this.tl}get $shortRange(){return this.count>1?this.$range:this._serialisedSheetName+this.$t$l}get count(){return(1+this.bottom-this.top)*(1+this.right-this.left)}toString(){return this.range}intersects(e){return!(e.sheetName&&this.sheetName&&e.sheetName!==this.sheetName||e.bottom<this.top||e.top>this.bottom||e.right<this.left||e.left>this.right)}contains(e){const t=n.decodeEx(e);return this.containsEx(t)}containsEx(e){return(!e.sheetName||!this.sheetName||e.sheetName===this.sheetName)&&e.row>=this.top&&e.row<=this.bottom&&e.col>=this.left&&e.col<=this.right}forEachAddress(e){for(let t=this.left;t<=this.right;t++)for(let r=this.top;r<=this.bottom;r++)e(n.encodeAddress(r,t),r,t)}}t.exports=o},{\"../utils/col-cache\":19}],11:[function(e,t,r){\"use strict\";const n=e(\"../utils/under-dash\"),o=e(\"./enums\"),i=e(\"../utils/col-cache\"),a=e(\"./cell\");t.exports=class{constructor(e,t){this._worksheet=e,this._number=t,this._cells=[],this.style={},this.outlineLevel=0}get number(){return this._number}get worksheet(){return this._worksheet}commit(){this._worksheet._commitRow(this)}destroy(){delete this._worksheet,delete this._cells,delete this.style}findCell(e){return this._cells[e-1]}getCellEx(e){let t=this._cells[e.col-1];if(!t){const r=this._worksheet.getColumn(e.col);t=new a(this,r,e.address),this._cells[e.col-1]=t}return t}getCell(e){if(\"string\"==typeof e){const t=this._worksheet.getColumnKey(e);e=t?t.number:i.l2n(e)}return this._cells[e-1]||this.getCellEx({address:i.encodeAddress(this._number,e),row:this._number,col:e})}splice(e,t){const r=e+t;for(var n=arguments.length,o=new Array(n>2?n-2:0),i=2;i<n;i++)o[i-2]=arguments[i];const a=o.length-t,s=this._cells.length;let l,c,u;if(a<0)for(l=e+o.length;l<=s;l++)u=this._cells[l-1],c=this._cells[l-a-1],c?(u=this.getCell(l),u.value=c.value,u.style=c.style,u._comment=c._comment):u&&(u.value=null,u.style={},u._comment=void 0);else if(a>0)for(l=s;l>=r;l--)c=this._cells[l-1],c?(u=this.getCell(l+a),u.value=c.value,u.style=c.style,u._comment=c._comment):this._cells[l+a-1]=void 0;for(l=0;l<o.length;l++)u=this.getCell(e+l),u.value=o[l],u.style={},u._comment=void 0}eachCell(e,t){if(t||(t=e,e=null),e&&e.includeEmpty){const e=this._cells.length;for(let r=1;r<=e;r++)t(this.getCell(r),r)}else this._cells.forEach(((e,r)=>{e&&e.type!==o.ValueType.Null&&t(e,r+1)}))}addPageBreak(e,t){const r=this._worksheet,n=Math.max(0,e-1)||0,o=Math.max(0,t-1)||16838,i={id:this._number,max:o,man:1};n&&(i.min=n),r.rowBreaks.push(i)}get values(){const e=[];return this._cells.forEach((t=>{t&&t.type!==o.ValueType.Null&&(e[t.col]=t.value)})),e}set values(e){if(this._cells=[],e)if(e instanceof Array){let t=0;e.hasOwnProperty(\"0\")&&(t=1),e.forEach(((e,r)=>{void 0!==e&&(this.getCellEx({address:i.encodeAddress(this._number,r+t),row:this._number,col:r+t}).value=e)}))}else this._worksheet.eachColumnKey(((t,r)=>{void 0!==e[r]&&(this.getCellEx({address:i.encodeAddress(this._number,t.number),row:this._number,col:t.number}).value=e[r])}))}get hasValues(){return n.some(this._cells,(e=>e&&e.type!==o.ValueType.Null))}get cellCount(){return this._cells.length}get actualCellCount(){let e=0;return this.eachCell((()=>{e++})),e}get dimensions(){let e=0,t=0;return this._cells.forEach((r=>{r&&r.type!==o.ValueType.Null&&((!e||e>r.col)&&(e=r.col),t<r.col&&(t=r.col))})),e>0?{min:e,max:t}:null}_applyStyle(e,t){return this.style[e]=t,this._cells.forEach((r=>{r&&(r[e]=t)})),t}get numFmt(){return this.style.numFmt}set numFmt(e){this._applyStyle(\"numFmt\",e)}get font(){return this.style.font}set font(e){this._applyStyle(\"font\",e)}get alignment(){return this.style.alignment}set alignment(e){this._applyStyle(\"alignment\",e)}get protection(){return this.style.protection}set protection(e){this._applyStyle(\"protection\",e)}get border(){return this.style.border}set border(e){this._applyStyle(\"border\",e)}get fill(){return this.style.fill}set fill(e){this._applyStyle(\"fill\",e)}get hidden(){return!!this._hidden}set hidden(e){this._hidden=e}get outlineLevel(){return this._outlineLevel||0}set outlineLevel(e){this._outlineLevel=e}get collapsed(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelRow)}get model(){const e=[];let t=0,r=0;return this._cells.forEach((n=>{if(n){const o=n.model;o&&((!t||t>n.col)&&(t=n.col),r<n.col&&(r=n.col),e.push(o))}})),this.height||e.length?{cells:e,number:this.number,min:t,max:r,height:this.height,style:this.style,hidden:this.hidden,outlineLevel:this.outlineLevel,collapsed:this.collapsed}:null}set model(e){if(e.number!==this._number)throw new Error(\"Invalid row number in model\");let t;this._cells=[],e.cells.forEach((e=>{switch(e.type){case a.Types.Merge:break;default:{let r;if(e.address)r=i.decodeAddress(e.address);else if(t){const{row:e}=t,n=t.col+1;r={row:e,col:n,address:i.encodeAddress(e,n),$col$row:`$${i.n2l(n)}$${e}`}}t=r,this.getCellEx(r).model=e;break}}})),e.height?this.height=e.height:delete this.height,this.hidden=e.hidden,this.outlineLevel=e.outlineLevel||0,this.style=e.style&&JSON.parse(JSON.stringify(e.style))||{}}}},{\"../utils/col-cache\":19,\"../utils/under-dash\":26,\"./cell\":3,\"./enums\":7}],12:[function(e,t,r){\"use strict\";const n=e(\"../utils/col-cache\");class o{constructor(e,t,r){this.table=e,this.column=t,this.index=r}_set(e,t){this.table.cacheState(),this.column[e]=t}get name(){return this.column.name}set name(e){this._set(\"name\",e)}get filterButton(){return this.column.filterButton}set filterButton(e){this.column.filterButton=e}get style(){return this.column.style}set style(e){this.column.style=e}get totalsRowLabel(){return this.column.totalsRowLabel}set totalsRowLabel(e){this._set(\"totalsRowLabel\",e)}get totalsRowFunction(){return this.column.totalsRowFunction}set totalsRowFunction(e){this._set(\"totalsRowFunction\",e)}get totalsRowResult(){return this.column.totalsRowResult}set totalsRowResult(e){this._set(\"totalsRowResult\",e)}get totalsRowFormula(){return this.column.totalsRowFormula}set totalsRowFormula(e){this._set(\"totalsRowFormula\",e)}}t.exports=class{constructor(e,t){this.worksheet=e,t&&(this.table=t,this.validate(),this.store())}getFormula(e){switch(e.totalsRowFunction){case\"none\":return null;case\"average\":return`SUBTOTAL(101,${this.table.name}[${e.name}])`;case\"countNums\":return`SUBTOTAL(102,${this.table.name}[${e.name}])`;case\"count\":return`SUBTOTAL(103,${this.table.name}[${e.name}])`;case\"max\":return`SUBTOTAL(104,${this.table.name}[${e.name}])`;case\"min\":return`SUBTOTAL(105,${this.table.name}[${e.name}])`;case\"stdDev\":return`SUBTOTAL(106,${this.table.name}[${e.name}])`;case\"var\":return`SUBTOTAL(107,${this.table.name}[${e.name}])`;case\"sum\":return`SUBTOTAL(109,${this.table.name}[${e.name}])`;case\"custom\":return e.totalsRowFormula;default:throw new Error(\"Invalid Totals Row Function: \"+e.totalsRowFunction)}}get width(){return this.table.columns.length}get height(){return this.table.rows.length}get filterHeight(){return this.height+(this.table.headerRow?1:0)}get tableHeight(){return this.filterHeight+(this.table.totalsRow?1:0)}validate(){const{table:e}=this,t=(e,t,r)=>{void 0===e[t]&&(e[t]=r)};t(e,\"headerRow\",!0),t(e,\"totalsRow\",!1),t(e,\"style\",{}),t(e.style,\"theme\",\"TableStyleMedium2\"),t(e.style,\"showFirstColumn\",!1),t(e.style,\"showLastColumn\",!1),t(e.style,\"showRowStripes\",!1),t(e.style,\"showColumnStripes\",!1);const r=(e,t)=>{if(!e)throw new Error(t)};r(e.ref,\"Table must have ref\"),r(e.columns,\"Table must have column definitions\"),r(e.rows,\"Table must have row definitions\"),e.tl=n.decodeAddress(e.ref);const{row:o,col:i}=e.tl;r(o>0,\"Table must be on valid row\"),r(i>0,\"Table must be on valid col\");const{width:a,filterHeight:s,tableHeight:l}=this;e.autoFilterRef=n.encode(o,i,o+s-1,i+a-1),e.tableRef=n.encode(o,i,o+l-1,i+a-1),e.columns.forEach(((e,n)=>{r(e.name,`Column ${n} must have a name`),0===n?t(e,\"totalsRowLabel\",\"Total\"):(t(e,\"totalsRowFunction\",\"none\"),e.totalsRowFormula=this.getFormula(e))}))}store(){const e=(e,t)=>{t&&Object.keys(t).forEach((r=>{e[r]=t[r]}))},{worksheet:t,table:r}=this,{row:n,col:o}=r.tl;let i=0;if(r.headerRow){const a=t.getRow(n+i++);r.columns.forEach(((t,r)=>{const{style:n,name:i}=t,s=a.getCell(o+r);s.value=i,e(s,n)}))}if(r.rows.forEach((a=>{const s=t.getRow(n+i++);a.forEach(((t,n)=>{const i=s.getCell(o+n);i.value=t,e(i,r.columns[n].style)}))})),r.totalsRow){const a=t.getRow(n+i++);r.columns.forEach(((t,r)=>{const n=a.getCell(o+r);if(0===r)n.value=t.totalsRowLabel;else{const e=this.getFormula(t);n.value=e?{formula:t.totalsRowFormula,result:t.totalsRowResult}:null}e(n,t.style)}))}}load(e){const{table:t}=this,{row:r,col:n}=t.tl;let o=0;if(t.headerRow){const i=e.getRow(r+o++);t.columns.forEach(((e,t)=>{i.getCell(n+t).value=e.name}))}if(t.rows.forEach((t=>{const i=e.getRow(r+o++);t.forEach(((e,t)=>{i.getCell(n+t).value=e}))})),t.totalsRow){const i=e.getRow(r+o++);t.columns.forEach(((e,t)=>{const r=i.getCell(n+t);0===t?r.value=e.totalsRowLabel:this.getFormula(e)&&(r.value={formula:e.totalsRowFormula,result:e.totalsRowResult})}))}}get model(){return this.table}set model(e){this.table=e}cacheState(){this._cache||(this._cache={ref:this.ref,width:this.width,tableHeight:this.tableHeight})}commit(){if(!this._cache)return;this.validate();const e=n.decodeAddress(this._cache.ref);if(this.ref!==this._cache.ref)for(let t=0;t<this._cache.tableHeight;t++){const r=this.worksheet.getRow(e.row+t);for(let t=0;t<this._cache.width;t++)r.getCell(e.col+t).value=null}else{for(let t=this.tableHeight;t<this._cache.tableHeight;t++){const r=this.worksheet.getRow(e.row+t);for(let t=0;t<this._cache.width;t++)r.getCell(e.col+t).value=null}for(let t=0;t<this.tableHeight;t++){const r=this.worksheet.getRow(e.row+t);for(let t=this.width;t<this._cache.width;t++)r.getCell(e.col+t).value=null}}this.store()}addRow(e,t){this.cacheState(),void 0===t?this.table.rows.push(e):this.table.rows.splice(t,0,e)}removeRows(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cacheState(),this.table.rows.splice(e,t)}getColumn(e){const t=this.table.columns[e];return new o(this,t,e)}addColumn(e,t,r){this.cacheState(),void 0===r?(this.table.columns.push(e),this.table.rows.forEach(((e,r)=>{e.push(t[r])}))):(this.table.columns.splice(r,0,e),this.table.rows.forEach(((e,n)=>{e.splice(r,0,t[n])})))}removeColumns(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cacheState(),this.table.columns.splice(e,t),this.table.rows.forEach((r=>{r.splice(e,t)}))}_assign(e,t,r){this.cacheState(),e[t]=r}get ref(){return this.table.ref}set ref(e){this._assign(this.table,\"ref\",e)}get name(){return this.table.name}set name(e){this.table.name=e}get displayName(){return this.table.displyName||this.table.name}set displayNamename(e){this.table.displayName=e}get headerRow(){return this.table.headerRow}set headerRow(e){this._assign(this.table,\"headerRow\",e)}get totalsRow(){return this.table.totalsRow}set totalsRow(e){this._assign(this.table,\"totalsRow\",e)}get theme(){return this.table.style.name}set theme(e){this.table.style.name=e}get showFirstColumn(){return this.table.style.showFirstColumn}set showFirstColumn(e){this.table.style.showFirstColumn=e}get showLastColumn(){return this.table.style.showLastColumn}set showLastColumn(e){this.table.style.showLastColumn=e}get showRowStripes(){return this.table.style.showRowStripes}set showRowStripes(e){this.table.style.showRowStripes=e}get showColumnStripes(){return this.table.style.showColumnStripes}set showColumnStripes(e){this.table.style.showColumnStripes=e}}},{\"../utils/col-cache\":19}],13:[function(e,t,r){\"use strict\";const n=e(\"./worksheet\"),o=e(\"./defined-names\"),i=e(\"../xlsx/xlsx\"),a=e(\"../csv/csv\");t.exports=class{constructor(){this.category=\"\",this.company=\"\",this.created=new Date,this.description=\"\",this.keywords=\"\",this.manager=\"\",this.modified=this.created,this.properties={},this.calcProperties={},this._worksheets=[],this.subject=\"\",this.title=\"\",this.views=[],this.media=[],this._definedNames=new o}get xlsx(){return this._xlsx||(this._xlsx=new i(this)),this._xlsx}get csv(){return this._csv||(this._csv=new a(this)),this._csv}get nextId(){for(let e=1;e<this._worksheets.length;e++)if(!this._worksheets[e])return e;return this._worksheets.length||1}addWorksheet(e,t){const r=this.nextId;t&&(\"string\"==typeof t?(console.trace('tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { argb: \"rbg value\" } }'),t={properties:{tabColor:{argb:t}}}):(t.argb||t.theme||t.indexed)&&(console.trace(\"tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { ... } }\"),t={properties:{tabColor:t}}));const o=this._worksheets.reduce(((e,t)=>(t&&t.orderNo)>e?t.orderNo:e),0),i=Object.assign({},t,{id:r,name:e,orderNo:o+1,workbook:this}),a=new n(i);return this._worksheets[r]=a,a}removeWorksheetEx(e){delete this._worksheets[e.id]}removeWorksheet(e){const t=this.getWorksheet(e);t&&t.destroy()}getWorksheet(e){return void 0===e?this._worksheets.find(Boolean):\"number\"==typeof e?this._worksheets[e]:\"string\"==typeof e?this._worksheets.find((t=>t&&t.name===e)):void 0}get worksheets(){return this._worksheets.slice(1).sort(((e,t)=>e.orderNo-t.orderNo)).filter(Boolean)}eachSheet(e){this.worksheets.forEach((t=>{e(t,t.id)}))}get definedNames(){return this._definedNames}clearThemes(){this._themes=void 0}addImage(e){const t=this.media.length;return this.media.push(Object.assign({},e,{type:\"image\"})),t}getImage(e){return this.media[e]}get model(){return{creator:this.creator||\"Unknown\",lastModifiedBy:this.lastModifiedBy||\"Unknown\",lastPrinted:this.lastPrinted,created:this.created,modified:this.modified,properties:this.properties,worksheets:this.worksheets.map((e=>e.model)),sheets:this.worksheets.map((e=>e.model)).filter(Boolean),definedNames:this._definedNames.model,views:this.views,company:this.company,manager:this.manager,title:this.title,subject:this.subject,keywords:this.keywords,category:this.category,description:this.description,language:this.language,revision:this.revision,contentStatus:this.contentStatus,themes:this._themes,media:this.media,calcProperties:this.calcProperties}}set model(e){this.creator=e.creator,this.lastModifiedBy=e.lastModifiedBy,this.lastPrinted=e.lastPrinted,this.created=e.created,this.modified=e.modified,this.company=e.company,this.manager=e.manager,this.title=e.title,this.subject=e.subject,this.keywords=e.keywords,this.category=e.category,this.description=e.description,this.language=e.language,this.revision=e.revision,this.contentStatus=e.contentStatus,this.properties=e.properties,this.calcProperties=e.calcProperties,this._worksheets=[],e.worksheets.forEach((t=>{const{id:r,name:o,state:i}=t,a=e.sheets&&e.sheets.findIndex((e=>e.id===r));(this._worksheets[r]=new n({id:r,name:o,orderNo:a,state:i,workbook:this})).model=t})),this._definedNames.model=e.definedNames,this.views=e.views,this._themes=e.themes,this.media=e.media||[]}}},{\"../csv/csv\":1,\"../xlsx/xlsx\":144,\"./defined-names\":6,\"./worksheet\":14}],14:[function(e,t,r){\"use strict\";const n=e(\"../utils/under-dash\"),o=e(\"../utils/col-cache\"),i=e(\"./range\"),a=e(\"./row\"),s=e(\"./column\"),l=e(\"./enums\"),c=e(\"./image\"),u=e(\"./table\"),d=e(\"./data-validations\"),f=e(\"../utils/encryptor\"),{copyStyle:h}=e(\"../utils/copy-style\");t.exports=class{constructor(e){e=e||{},this._workbook=e.workbook,this.id=e.id,this.orderNo=e.orderNo,this.name=e.name,this.state=e.state||\"visible\",this._rows=[],this._columns=null,this._keys={},this._merges={},this.rowBreaks=[],this.properties=Object.assign({},{defaultRowHeight:15,dyDescent:55,outlineLevelCol:0,outlineLevelRow:0},e.properties),this.pageSetup=Object.assign({},{margins:{left:.7,right:.7,top:.75,bottom:.75,header:.3,footer:.3},orientation:\"portrait\",horizontalDpi:4294967295,verticalDpi:4294967295,fitToPage:!(!e.pageSetup||!e.pageSetup.fitToWidth&&!e.pageSetup.fitToHeight||e.pageSetup.scale),pageOrder:\"downThenOver\",blackAndWhite:!1,draft:!1,cellComments:\"None\",errors:\"displayed\",scale:100,fitToWidth:1,fitToHeight:1,paperSize:void 0,showRowColHeaders:!1,showGridLines:!1,firstPageNumber:void 0,horizontalCentered:!1,verticalCentered:!1,rowBreaks:null,colBreaks:null},e.pageSetup),this.headerFooter=Object.assign({},{differentFirst:!1,differentOddEven:!1,oddHeader:null,oddFooter:null,evenHeader:null,evenFooter:null,firstHeader:null,firstFooter:null},e.headerFooter),this.dataValidations=new d,this.views=e.views||[],this.autoFilter=e.autoFilter||null,this._media=[],this.sheetProtection=null,this.tables={},this.conditionalFormattings=[]}get name(){return this._name}set name(e){if(void 0===e&&(e=\"sheet\"+this.id),this._name!==e){if(\"string\"!=typeof e)throw new Error(\"The name has to be a string.\");if(\"\"===e)throw new Error(\"The name can't be empty.\");if(\"History\"===e)throw new Error('The name \"History\" is protected. Please use a different name.');if(/[*?:/\\\\[\\]]/.test(e))throw new Error(`Worksheet name ${e} cannot include any of the following characters: * ? : \\\\ / [ ]`);if(/(^')|('$)/.test(e))throw new Error(\"The first or last character of worksheet name cannot be a single quotation mark: \"+e);if(e&&e.length>31&&(console.warn(`Worksheet name ${e} exceeds 31 chars. This will be truncated`),e=e.substring(0,31)),this._workbook._worksheets.find((t=>t&&t.name.toLowerCase()===e.toLowerCase())))throw new Error(\"Worksheet name already exists: \"+e);this._name=e}}get workbook(){return this._workbook}destroy(){this._workbook.removeWorksheetEx(this)}get dimensions(){const e=new i;return this._rows.forEach((t=>{if(t){const r=t.dimensions;r&&e.expand(t.number,r.min,t.number,r.max)}})),e}get columns(){return this._columns}set columns(e){this._headerRowCount=e.reduce(((e,t)=>{const r=(t.header?1:t.headers&&t.headers.length)||0;return Math.max(e,r)}),0);let t=1;const r=this._columns=[];e.forEach((e=>{const n=new s(this,t++,!1);r.push(n),n.defn=e}))}getColumnKey(e){return this._keys[e]}setColumnKey(e,t){this._keys[e]=t}deleteColumnKey(e){delete this._keys[e]}eachColumnKey(e){n.each(this._keys,e)}getColumn(e){if(\"string\"==typeof e){const t=this._keys[e];if(t)return t;e=o.l2n(e)}if(this._columns||(this._columns=[]),e>this._columns.length){let t=this._columns.length+1;for(;t<=e;)this._columns.push(new s(this,t++))}return this._columns[e-1]}spliceColumns(e,t){const r=this._rows.length;for(var n=arguments.length,o=new Array(n>2?n-2:0),i=2;i<n;i++)o[i-2]=arguments[i];if(o.length>0)for(let n=0;n<r;n++){const r=[e,t];o.forEach((e=>{r.push(e[n]||null)}));const i=this.getRow(n+1);i.splice.apply(i,r)}else this._rows.forEach((r=>{r&&r.splice(e,t)}));const a=o.length-t,s=e+t,l=this._columns.length;if(a<0)for(let t=e+o.length;t<=l;t++)this.getColumn(t).defn=this.getColumn(t-a).defn;else if(a>0)for(let e=l;e>=s;e--)this.getColumn(e+a).defn=this.getColumn(e).defn;for(let t=e;t<e+o.length;t++)this.getColumn(t).defn=null;this.workbook.definedNames.spliceColumns(this.name,e,t,o.length)}get lastColumn(){return this.getColumn(this.columnCount)}get columnCount(){let e=0;return this.eachRow((t=>{e=Math.max(e,t.cellCount)})),e}get actualColumnCount(){const e=[];let t=0;return this.eachRow((r=>{r.eachCell((r=>{let{col:n}=r;e[n]||(e[n]=!0,t++)}))})),t}_commitRow(){}get _lastRowNumber(){const e=this._rows;let t=e.length;for(;t>0&&void 0===e[t-1];)t--;return t}get _nextRow(){return this._lastRowNumber+1}get lastRow(){if(this._rows.length)return this._rows[this._rows.length-1]}findRow(e){return this._rows[e-1]}findRows(e,t){return this._rows.slice(e-1,e-1+t)}get rowCount(){return this._lastRowNumber}get actualRowCount(){let e=0;return this.eachRow((()=>{e++})),e}getRow(e){let t=this._rows[e-1];return t||(t=this._rows[e-1]=new a(this,e)),t}getRows(e,t){if(t<1)return;const r=[];for(let n=e;n<e+t;n++)r.push(this.getRow(n));return r}addRow(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"n\";const r=this._nextRow,n=this.getRow(r);return n.values=e,this._setStyleOption(r,\"i\"===t[0]?t:\"n\"),n}addRows(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"n\";const r=[];return e.forEach((e=>{r.push(this.addRow(e,t))})),r}insertRow(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"n\";return this.spliceRows(e,0,t),this._setStyleOption(e,r),this.getRow(e)}insertRows(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"n\";if(this.spliceRows(e,0,...t),\"n\"!==r)for(let n=0;n<t.length;n++)\"o\"===r[0]&&void 0!==this.findRow(t.length+e+n)?this._copyStyle(t.length+e+n,e+n,\"+\"===r[1]):\"i\"===r[0]&&void 0!==this.findRow(e-1)&&this._copyStyle(e-1,e+n,\"+\"===r[1]);return this.getRows(e,t.length)}_setStyleOption(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"n\";\"o\"===t[0]&&void 0!==this.findRow(e+1)?this._copyStyle(e+1,e,\"+\"===t[1]):\"i\"===t[0]&&void 0!==this.findRow(e-1)&&this._copyStyle(e-1,e,\"+\"===t[1])}_copyStyle(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=this.getRow(e),o=this.getRow(t);o.style=h(n.style),n.eachCell({includeEmpty:r},((e,t)=>{o.getCell(t).style=h(e.style)})),o.height=n.height}duplicateRow(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=this._rows[e-1],o=new Array(t).fill(n.values);this.spliceRows(e+1,r?0:t,...o);for(let r=0;r<t;r++){const t=this._rows[e+r];t.style=n.style,t.height=n.height,n.eachCell({includeEmpty:!0},((e,r)=>{t.getCell(r).style=e.style}))}}spliceRows(e,t){const r=e+t;for(var n=arguments.length,o=new Array(n>2?n-2:0),i=2;i<n;i++)o[i-2]=arguments[i];const a=o.length,s=a-t,l=this._rows.length;let c,u;if(s<0)for(e===l&&(this._rows[l-1]=void 0),c=r;c<=l;c++)if(u=this._rows[c-1],u){const e=this.getRow(c+s);e.values=u.values,e.style=u.style,e.height=u.height,u.eachCell({includeEmpty:!0},((t,r)=>{e.getCell(r).style=t.style})),this._rows[c-1]=void 0}else this._rows[c+s-1]=void 0;else if(s>0)for(c=l;c>=r;c--)if(u=this._rows[c-1],u){const e=this.getRow(c+s);e.values=u.values,e.style=u.style,e.height=u.height,u.eachCell({includeEmpty:!0},((t,r)=>{if(e.getCell(r).style=t.style,\"MergeValue\"===t._value.constructor.name){const e=this.getRow(t._row._number+a).getCell(r),n=t._value._master,o=this.getRow(n._row._number+a).getCell(n._column._number);e.merge(o)}}))}else this._rows[c+s-1]=void 0;for(c=0;c<a;c++){const t=this.getRow(e+c);t.style={},t.values=o[c]}this.workbook.definedNames.spliceRows(this.name,e,t,a)}eachRow(e,t){if(t||(t=e,e=void 0),e&&e.includeEmpty){const e=this._rows.length;for(let r=1;r<=e;r++)t(this.getRow(r),r)}else this._rows.forEach((e=>{e&&e.hasValues&&t(e,e.number)}))}getSheetValues(){const e=[];return this._rows.forEach((t=>{t&&(e[t.number]=t.values)})),e}findCell(e,t){const r=o.getAddress(e,t),n=this._rows[r.row-1];return n?n.findCell(r.col):void 0}getCell(e,t){const r=o.getAddress(e,t);return this.getRow(r.row).getCellEx(r)}mergeCells(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];const n=new i(t);this._mergeCellsInternal(n)}mergeCellsWithoutStyle(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];const n=new i(t);this._mergeCellsInternal(n,!0)}_mergeCellsInternal(e,t){n.each(this._merges,(t=>{if(t.intersects(e))throw new Error(\"Cannot merge already merged cells\")}));const r=this.getCell(e.top,e.left);for(let n=e.top;n<=e.bottom;n++)for(let o=e.left;o<=e.right;o++)(n>e.top||o>e.left)&&this.getCell(n,o).merge(r,t);this._merges[r.address]=e}_unMergeMaster(e){const t=this._merges[e.address];if(t){for(let e=t.top;e<=t.bottom;e++)for(let r=t.left;r<=t.right;r++)this.getCell(e,r).unmerge();delete this._merges[e.address]}}get hasMerges(){return n.some(this._merges,Boolean)}unMergeCells(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];const n=new i(t);for(let e=n.top;e<=n.bottom;e++)for(let t=n.left;t<=n.right;t++){const r=this.findCell(e,t);r&&(r.type===l.ValueType.Merge?this._unMergeMaster(r.master):this._merges[r.address]&&this._unMergeMaster(r))}}fillFormula(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"shared\";const i=o.decode(e),{top:a,left:s,bottom:l,right:c}=i,u=c-s+1,d=o.encodeAddress(a,s),f=\"shared\"===n;let h;h=\"function\"==typeof r?r:Array.isArray(r)?Array.isArray(r[0])?(e,t)=>r[e-a][t-s]:(e,t)=>r[(e-a)*u+(t-s)]:()=>{};let p=!0;for(let r=a;r<=l;r++)for(let o=s;o<=c;o++)p?(this.getCell(r,o).value={shareType:n,formula:t,ref:e,result:h(r,o)},p=!1):this.getCell(r,o).value=f?{sharedFormula:d,result:h(r,o)}:h(r,o)}addImage(e,t){const r={type:\"image\",imageId:e,range:t};this._media.push(new c(this,r))}getImages(){return this._media.filter((e=>\"image\"===e.type))}addBackgroundImage(e){const t={type:\"background\",imageId:e};this._media.push(new c(this,t))}getBackgroundImageId(){const e=this._media.find((e=>\"background\"===e.type));return e&&e.imageId}protect(e,t){return new Promise((r=>{this.sheetProtection={sheet:!0},t&&\"spinCount\"in t&&(t.spinCount=Number.isFinite(t.spinCount)?Math.round(Math.max(0,t.spinCount)):1e5),e&&(this.sheetProtection.algorithmName=\"SHA-512\",this.sheetProtection.saltValue=f.randomBytes(16).toString(\"base64\"),this.sheetProtection.spinCount=t&&\"spinCount\"in t?t.spinCount:1e5,this.sheetProtection.hashValue=f.convertPasswordToHash(e,\"SHA512\",this.sheetProtection.saltValue,this.sheetProtection.spinCount)),t&&(this.sheetProtection=Object.assign(this.sheetProtection,t),!e&&\"spinCount\"in t&&delete this.sheetProtection.spinCount),r()}))}unprotect(){this.sheetProtection=null}addTable(e){const t=new u(this,e);return this.tables[e.name]=t,t}getTable(e){return this.tables[e]}removeTable(e){delete this.tables[e]}getTables(){return Object.values(this.tables)}addConditionalFormatting(e){this.conditionalFormattings.push(e)}removeConditionalFormatting(e){\"number\"==typeof e?this.conditionalFormattings.splice(e,1):this.conditionalFormattings=e instanceof Function?this.conditionalFormattings.filter(e):[]}get tabColor(){return console.trace(\"worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor\"),this.properties.tabColor}set tabColor(e){console.trace(\"worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor\"),this.properties.tabColor=e}get model(){const e={id:this.id,name:this.name,dataValidations:this.dataValidations.model,properties:this.properties,state:this.state,pageSetup:this.pageSetup,headerFooter:this.headerFooter,rowBreaks:this.rowBreaks,views:this.views,autoFilter:this.autoFilter,media:this._media.map((e=>e.model)),sheetProtection:this.sheetProtection,tables:Object.values(this.tables).map((e=>e.model)),conditionalFormattings:this.conditionalFormattings};e.cols=s.toModel(this.columns);const t=e.rows=[],r=e.dimensions=new i;return this._rows.forEach((e=>{const n=e&&e.model;n&&(r.expand(n.number,n.min,n.number,n.max),t.push(n))})),e.merges=[],n.each(this._merges,(t=>{e.merges.push(t.range)})),e}_parseRows(e){this._rows=[],e.rows.forEach((e=>{const t=new a(this,e.number);this._rows[t.number-1]=t,t.model=e}))}_parseMergeCells(e){n.each(e.mergeCells,(e=>{this.mergeCellsWithoutStyle(e)}))}set model(e){this.name=e.name,this._columns=s.fromModel(this,e.cols),this._parseRows(e),this._parseMergeCells(e),this.dataValidations=new d(e.dataValidations),this.properties=e.properties,this.pageSetup=e.pageSetup,this.headerFooter=e.headerFooter,this.views=e.views,this.autoFilter=e.autoFilter,this._media=e.media.map((e=>new c(this,e))),this.sheetProtection=e.sheetProtection,this.tables=e.tables.reduce(((e,t)=>{const r=new u;return r.model=t,e[t.name]=r,e}),{}),this.conditionalFormattings=e.conditionalFormattings}}},{\"../utils/col-cache\":19,\"../utils/copy-style\":20,\"../utils/encryptor\":21,\"../utils/under-dash\":26,\"./column\":4,\"./data-validations\":5,\"./enums\":7,\"./image\":8,\"./range\":10,\"./row\":11,\"./table\":12}],15:[function(e,t,r){\"use strict\";e(\"core-js/modules/es.promise\"),e(\"core-js/modules/es.promise.finally\"),e(\"core-js/modules/es.object.assign\"),e(\"core-js/modules/es.object.keys\"),e(\"core-js/modules/es.object.values\"),e(\"core-js/modules/es.symbol\"),e(\"core-js/modules/es.symbol.async-iterator\"),e(\"core-js/modules/es.array.iterator\"),e(\"core-js/modules/es.array.includes\"),e(\"core-js/modules/es.array.find-index\"),e(\"core-js/modules/es.array.find\"),e(\"core-js/modules/es.string.from-code-point\"),e(\"core-js/modules/es.string.includes\"),e(\"core-js/modules/es.number.is-nan\"),e(\"regenerator-runtime/runtime\");const n={Workbook:e(\"./doc/workbook\")},o=e(\"./doc/enums\");Object.keys(o).forEach((e=>{n[e]=o[e]})),t.exports=n},{\"./doc/enums\":7,\"./doc/workbook\":13,\"core-js/modules/es.array.find\":359,\"core-js/modules/es.array.find-index\":358,\"core-js/modules/es.array.includes\":360,\"core-js/modules/es.array.iterator\":361,\"core-js/modules/es.number.is-nan\":363,\"core-js/modules/es.object.assign\":364,\"core-js/modules/es.object.keys\":366,\"core-js/modules/es.object.values\":367,\"core-js/modules/es.promise\":372,\"core-js/modules/es.promise.finally\":371,\"core-js/modules/es.string.from-code-point\":376,\"core-js/modules/es.string.includes\":377,\"core-js/modules/es.symbol\":381,\"core-js/modules/es.symbol.async-iterator\":378,\"regenerator-runtime/runtime\":492}],16:[function(e,t,r){\"use strict\";const n=\"undefined\"==typeof TextDecoder?null:new TextDecoder(\"utf-8\");r.bufferToString=function(e){return\"string\"==typeof e?e:n?n.decode(e):e.toString()}},{}],17:[function(e,t,r){\"use strict\";const n=\"undefined\"==typeof TextEncoder?null:new TextEncoder(\"utf-8\"),{Buffer:o}=e(\"buffer\");r.stringToBuffer=function(e){return\"string\"!=typeof e?e:n?o.from(n.encode(e).buffer):o.from(e)}},{buffer:220}],18:[function(e,t,r){\"use strict\";const n=e(\"./under-dash\"),o=e(\"./col-cache\");t.exports=class{constructor(e){this.template=e,this.sheets={}}addCell(e){this.addCellEx(o.decodeEx(e))}getCell(e){return this.findCellEx(o.decodeEx(e),!0)}findCell(e){return this.findCellEx(o.decodeEx(e),!1)}findCellAt(e,t,r){const n=this.sheets[e],o=n&&n[t];return o&&o[r]}addCellEx(e){if(e.top)for(let t=e.top;t<=e.bottom;t++)for(let r=e.left;r<=e.right;r++)this.getCellAt(e.sheetName,t,r);else this.findCellEx(e,!0)}getCellEx(e){return this.findCellEx(e,!0)}findCellEx(e,t){const r=this.findSheet(e,t),n=this.findSheetRow(r,e,t);return this.findRowCell(n,e,t)}getCellAt(e,t,r){const n=this.sheets[e]||(this.sheets[e]=[]),i=n[t]||(n[t]=[]);return i[r]||(i[r]={sheetName:e,address:o.n2l(r)+t,row:t,col:r})}removeCellEx(e){const t=this.findSheet(e);if(!t)return;const r=this.findSheetRow(t,e);r&&delete r[e.col]}forEachInSheet(e,t){const r=this.sheets[e];r&&r.forEach(((e,r)=>{e&&e.forEach(((e,n)=>{e&&t(e,r,n)}))}))}forEach(e){n.each(this.sheets,((t,r)=>{this.forEachInSheet(r,e)}))}map(e){const t=[];return this.forEach((r=>{t.push(e(r))})),t}findSheet(e,t){const r=e.sheetName;return this.sheets[r]?this.sheets[r]:t?this.sheets[r]=[]:void 0}findSheetRow(e,t,r){const{row:n}=t;return e&&e[n]?e[n]:r?e[n]=[]:void 0}findRowCell(e,t,r){const{col:n}=t;return e&&e[n]?e[n]:r?e[n]=this.template?Object.assign(t,JSON.parse(JSON.stringify(this.template))):t:void 0}spliceRows(e,t,r,n){const o=this.sheets[e];if(o){const e=[];for(let t=0;t<n;t++)e.push([]);o.splice(t,r,...e)}}spliceColumns(e,t,r,o){const i=this.sheets[e];if(i){const e=[];for(let t=0;t<o;t++)e.push(null);n.each(i,(n=>{n.splice(t,r,...e)}))}}}},{\"./col-cache\":19,\"./under-dash\":26}],19:[function(e,t,r){\"use strict\";const n=/^[A-Z]+\\d+$/,o={_dictionary:[\"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\"],_l2nFill:0,_l2n:{},_n2l:[],_level:e=>e<=26?1:e<=676?2:3,_fill(e){let t,r,n,o,i,a=1;if(e>=4)throw new Error(\"Out of bounds. Excel supports columns from 1 to 16384\");if(this._l2nFill<1&&e>=1){for(;a<=26;)t=this._dictionary[a-1],this._n2l[a]=t,this._l2n[t]=a,a++;this._l2nFill=1}if(this._l2nFill<2&&e>=2){for(a=27;a<=702;)r=a-27,n=r%26,o=Math.floor(r/26),t=this._dictionary[o]+this._dictionary[n],this._n2l[a]=t,this._l2n[t]=a,a++;this._l2nFill=2}if(this._l2nFill<3&&e>=3){for(a=703;a<=16384;)r=a-703,n=r%26,o=Math.floor(r/26)%26,i=Math.floor(r/676),t=this._dictionary[i]+this._dictionary[o]+this._dictionary[n],this._n2l[a]=t,this._l2n[t]=a,a++;this._l2nFill=3}},l2n(e){if(this._l2n[e]||this._fill(e.length),!this._l2n[e])throw new Error(\"Out of bounds. Invalid column letter: \"+e);return this._l2n[e]},n2l(e){if(e<1||e>16384)throw new Error(e+\" is out of bounds. Excel supports columns from 1 to 16384\");return this._n2l[e]||this._fill(this._level(e)),this._n2l[e]},_hash:{},validateAddress(e){if(!n.test(e))throw new Error(\"Invalid Address: \"+e);return!0},decodeAddress(e){const t=e.length<5&&this._hash[e];if(t)return t;let r=!1,n=\"\",o=0,i=!1,a=\"\",s=0;for(let t,l=0;l<e.length;l++)if(t=e.charCodeAt(l),!i&&t>=65&&t<=90)r=!0,n+=e[l],o=26*o+t-64;else if(t>=48&&t<=57)i=!0,a+=e[l],s=10*s+t-48;else if(i&&r&&36!==t)break;if(r){if(o>16384)throw new Error(\"Out of bounds. Invalid column letter: \"+n)}else o=void 0;i||(s=void 0);const l={address:e=n+a,col:o,row:s,$col$row:`$${n}$${a}`};return o<=100&&s<=100&&(this._hash[e]=l,this._hash[l.$col$row]=l),l},getAddress(e,t){if(t){const r=this.n2l(t)+e;return this.decodeAddress(r)}return this.decodeAddress(e)},decode(e){const t=e.split(\":\");if(2===t.length){const e=this.decodeAddress(t[0]),r=this.decodeAddress(t[1]),n={top:Math.min(e.row,r.row),left:Math.min(e.col,r.col),bottom:Math.max(e.row,r.row),right:Math.max(e.col,r.col)};return n.tl=this.n2l(n.left)+n.top,n.br=this.n2l(n.right)+n.bottom,n.dimensions=`${n.tl}:${n.br}`,n}return this.decodeAddress(e)},decodeEx(e){const t=e.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/),r=t[1]||t[2],n=t[3],o=n.split(\":\");if(o.length>1){let e=this.decodeAddress(o[0]),t=this.decodeAddress(o[1]);const n=Math.min(e.row,t.row),i=Math.min(e.col,t.col),a=Math.max(e.row,t.row),s=Math.max(e.col,t.col);return e=this.n2l(i)+n,t=this.n2l(s)+a,{top:n,left:i,bottom:a,right:s,sheetName:r,tl:{address:e,col:i,row:n,$col$row:`$${this.n2l(i)}$${n}`,sheetName:r},br:{address:t,col:s,row:a,$col$row:`$${this.n2l(s)}$${a}`,sheetName:r},dimensions:`${e}:${t}`}}if(n.startsWith(\"#\"))return r?{sheetName:r,error:n}:{error:n};const i=this.decodeAddress(n);return r?{sheetName:r,...i}:i},encodeAddress:(e,t)=>o.n2l(t)+e,encode(){switch(arguments.length){case 2:return o.encodeAddress(arguments[0],arguments[1]);case 4:return`${o.encodeAddress(arguments[0],arguments[1])}:${o.encodeAddress(arguments[2],arguments[3])}`;default:throw new Error(\"Can only encode with 2 or 4 arguments\")}},inRange(e,t){const[r,n,,o,i]=e,[a,s]=t;return a>=r&&a<=o&&s>=n&&s<=i}};t.exports=o},{}],20:[function(e,t,r){\"use strict\";const n=(e,t)=>({...e,...t.reduce(((t,r)=>(e[r]&&(t[r]={...e[r]}),t)),{})}),o=function(e,t,r){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];e[r]&&(t[r]=n(e[r],o))};r.copyStyle=e=>{if(!e)return e;if(t=e,0===Object.keys(t).length)return{};var t;const r={...e};return o(e,r,\"font\",[\"color\"]),o(e,r,\"alignment\"),o(e,r,\"protection\"),e.border&&(o(e,r,\"border\"),o(e.border,r.border,\"top\",[\"color\"]),o(e.border,r.border,\"left\",[\"color\"]),o(e.border,r.border,\"bottom\",[\"color\"]),o(e.border,r.border,\"right\",[\"color\"]),o(e.border,r.border,\"diagonal\",[\"color\"])),e.fill&&(o(e,r,\"fill\",[\"fgColor\",\"bgColor\",\"center\"]),e.fill.stops&&(r.fill.stops=e.fill.stops.map((e=>n(e,[\"color\"]))))),r}},{}],21:[function(e,t,r){(function(r){(function(){\"use strict\";const n=e(\"crypto\"),o={hash(e){const t=n.createHash(e);for(var o=arguments.length,i=new Array(o>1?o-1:0),a=1;a<o;a++)i[a-1]=arguments[a];return t.update(r.concat(i)),t.digest()},convertPasswordToHash(e,t,o,i){if(t=t.toLowerCase(),n.getHashes().indexOf(t)<0)throw new Error(`Hash algorithm '${t}' not supported!`);const a=r.from(e,\"utf16le\");let s=this.hash(t,r.from(o,\"base64\"),a);for(let e=0;e<i;e++){const n=r.alloc(4);n.writeUInt32LE(e,0),s=this.hash(t,s,n)}return s.toString(\"base64\")},randomBytes:e=>n.randomBytes(e)};t.exports=o}).call(this)}).call(this,e(\"buffer\").Buffer)},{buffer:220,crypto:390}],22:[function(e,t,r){\"use strict\";const{SaxesParser:n}=e(\"saxes\"),{PassThrough:o}=e(\"readable-stream\"),{bufferToString:i}=e(\"./browser-buffer-decode\");t.exports=async function*(e){e.pipe&&!e[Symbol.asyncIterator]&&(e=e.pipe(new o));const t=new n;let r;t.on(\"error\",(e=>{r=e}));let a=[];t.on(\"opentag\",(e=>a.push({eventType:\"opentag\",value:e}))),t.on(\"text\",(e=>a.push({eventType:\"text\",value:e}))),t.on(\"closetag\",(e=>a.push({eventType:\"closetag\",value:e})));for await(const n of e){if(t.write(i(n)),r)throw r;yield a,a=[]}}},{\"./browser-buffer-decode\":16,\"readable-stream\":491,saxes:496}],23:[function(e,t,r){\"use strict\";const n=e(\"./col-cache\"),o=/(([a-z_\\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi,i=/^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i;t.exports={slideFormula:function(e,t,r){const a=n.decode(t),s=n.decode(r);return e.replace(o,((e,t,r,o,l)=>{if(l)return e;const c=i.exec(o);if(c){const r=c[1],o=c[2].toUpperCase(),i=c[3],l=c[4];if(o.length>3||3===o.length&&o>\"XFD\")return e;let u=n.l2n(o),d=parseInt(l,10);return r||(u+=s.col-a.col),i||(d+=s.row-a.row),(t||\"\")+(r||\"\")+n.n2l(u)+(i||\"\")+d}return e}))}}},{\"./col-cache\":19}],24:[function(e,t,r){(function(r,n){(function(){\"use strict\";const o=e(\"readable-stream\"),i=e(\"./utils\"),a=e(\"./string-buf\");class s{constructor(e,t){this._data=e,this._encoding=t}get length(){return this.toBuffer().length}copy(e,t,r,n){return this.toBuffer().copy(e,t,r,n)}toBuffer(){return this._buffer||(this._buffer=n.from(this._data,this._encoding)),this._buffer}}class l{constructor(e){this._data=e}get length(){return this._data.length}copy(e,t,r,n){return this._data._buf.copy(e,t,r,n)}toBuffer(){return this._data.toBuffer()}}class c{constructor(e){this._data=e}get length(){return this._data.length}copy(e,t,r,n){this._data.copy(e,t,r,n)}toBuffer(){return this._data}}class u{constructor(e){this.size=e,this.buffer=n.alloc(e),this.iRead=0,this.iWrite=0}toBuffer(){if(0===this.iRead&&this.iWrite===this.size)return this.buffer;const e=n.alloc(this.iWrite-this.iRead);return this.buffer.copy(e,0,this.iRead,this.iWrite),e}get length(){return this.iWrite-this.iRead}get eod(){return this.iRead===this.iWrite}get full(){return this.iWrite===this.size}read(e){let t;return 0===e?null:void 0===e||e>=this.length?(t=this.toBuffer(),this.iRead=this.iWrite,t):(t=n.alloc(e),this.buffer.copy(t,0,this.iRead,e),this.iRead+=e,t)}write(e,t,r){const n=Math.min(r,this.size-this.iWrite);return e.copy(this.buffer,this.iWrite,t,t+n),this.iWrite+=n,n}}const d=function(e){e=e||{},this.bufSize=e.bufSize||1048576,this.buffers=[],this.batch=e.batch||!1,this.corked=!1,this.inPos=0,this.outPos=0,this.pipes=[],this.paused=!1,this.encoding=null};i.inherits(d,o.Duplex,{toBuffer(){switch(this.buffers.length){case 0:return null;case 1:return this.buffers[0].toBuffer();default:return n.concat(this.buffers.map((e=>e.toBuffer())))}},_getWritableBuffer(){if(this.buffers.length){const e=this.buffers[this.buffers.length-1];if(!e.full)return e}const e=new u(this.bufSize);return this.buffers.push(e),e},async _pipe(e){await Promise.all(this.pipes.map((function(t){return new Promise((r=>{t.write(e.toBuffer(),(()=>{r()}))}))})))},_writeToBuffers(e){let t=0;const r=e.length;for(;t<r;)t+=this._getWritableBuffer().write(e,t,r-t)},async write(e,t,o){let u;if(t instanceof Function&&(o=t,t=\"utf8\"),o=o||i.nop,e instanceof a)u=new l(e);else if(e instanceof n)u=new c(e);else{if(!(\"string\"==typeof e||e instanceof String||e instanceof ArrayBuffer))throw new Error(\"Chunk must be one of type String, Buffer or StringBuf.\");u=new s(e,t)}if(this.pipes.length)if(this.batch)for(this._writeToBuffers(u);!this.corked&&this.buffers.length>1;)this._pipe(this.buffers.shift());else this.corked?(this._writeToBuffers(u),r.nextTick(o)):(await this._pipe(u),o());else this.paused||this.emit(\"data\",u.toBuffer()),this._writeToBuffers(u),this.emit(\"readable\");return!0},cork(){this.corked=!0},_flush(){if(this.pipes.length)for(;this.buffers.length;)this._pipe(this.buffers.shift())},uncork(){this.corked=!1,this._flush()},end(e,t,r){const n=e=>{e?r(e):(this._flush(),this.pipes.forEach((e=>{e.end()})),this.emit(\"finish\"))};e?this.write(e,t,n):n()},read(e){let t;if(e){for(t=[];e&&this.buffers.length&&!this.buffers[0].eod;){const r=this.buffers[0],n=r.read(e);e-=n.length,t.push(n),r.eod&&r.full&&this.buffers.shift()}return n.concat(t)}return t=this.buffers.map((e=>e.toBuffer())).filter(Boolean),this.buffers=[],n.concat(t)},setEncoding(e){this.encoding=e},pause(){this.paused=!0},resume(){this.paused=!1},isPaused(){return!!this.paused},pipe(e){this.pipes.push(e),!this.paused&&this.buffers.length&&this.end()},unpipe(e){this.pipes=this.pipes.filter((t=>t!==e))},unshift(){throw new Error(\"Not Implemented\")},wrap(){throw new Error(\"Not Implemented\")}}),t.exports=d}).call(this)}).call(this,e(\"_process\"),e(\"buffer\").Buffer)},{\"./string-buf\":25,\"./utils\":27,_process:467,buffer:220,\"readable-stream\":491}],25:[function(e,t,r){(function(e){(function(){\"use strict\";t.exports=class{constructor(t){this._buf=e.alloc(t&&t.size||16384),this._encoding=t&&t.encoding||\"utf8\",this._inPos=0,this._buffer=void 0}get length(){return this._inPos}get capacity(){return this._buf.length}get buffer(){return this._buf}toBuffer(){return this._buffer||(this._buffer=e.alloc(this.length),this._buf.copy(this._buffer,0,0,this.length)),this._buffer}reset(e){e=e||0,this._buffer=void 0,this._inPos=e}_grow(t){let r=2*this._buf.length;for(;r<t;)r*=2;const n=e.alloc(r);this._buf.copy(n,0),this._buf=n}addText(e){this._buffer=void 0;let t=this._inPos+this._buf.write(e,this._inPos,this._encoding);for(;t>=this._buf.length-4;)this._grow(this._inPos+e.length),t=this._inPos+this._buf.write(e,this._inPos,this._encoding);this._inPos=t}addStringBuf(e){e.length&&(this._buffer=void 0,this.length+e.length>this.capacity&&this._grow(this.length+e.length),e._buf.copy(this._buf,this._inPos,0,e.length),this._inPos+=e.length)}}}).call(this)}).call(this,e(\"buffer\").Buffer)},{buffer:220}],26:[function(e,t,r){\"use strict\";const{toString:n}=Object.prototype,o=/[\"&<>]/,i={each:function(e,t){e&&(Array.isArray(e)?e.forEach(t):Object.keys(e).forEach((r=>{t(e[r],r)})))},some:function(e,t){return!!e&&(Array.isArray(e)?e.some(t):Object.keys(e).some((r=>t(e[r],r))))},every:function(e,t){return!e||(Array.isArray(e)?e.every(t):Object.keys(e).every((r=>t(e[r],r))))},map:function(e,t){return e?Array.isArray(e)?e.map(t):Object.keys(e).map((r=>t(e[r],r))):[]},keyBy:(e,t)=>e.reduce(((e,r)=>(e[r[t]]=r,e)),{}),isEqual:function(e,t){const r=typeof e,n=typeof t,o=Array.isArray(e),a=Array.isArray(t);let s;if(r!==n)return!1;if(\"object\"==typeof e){if(o||a)return!(!o||!a)&&e.length===t.length&&e.every(((e,r)=>{const n=t[r];return i.isEqual(e,n)}));if(null===e||null===t)return e===t;if(s=Object.keys(e),Object.keys(t).length!==s.length)return!1;for(const e of s)if(!t.hasOwnProperty(e))return!1;return i.every(e,((e,r)=>{const n=t[r];return i.isEqual(e,n)}))}return e===t},escapeHtml(e){const t=o.exec(e);if(!t)return e;let r=\"\",n=\"\",i=0,a=t.index;for(;a<e.length;a++){switch(e.charAt(a)){case'\"':n=\"&quot;\";break;case\"&\":n=\"&amp;\";break;case\"'\":n=\"&apos;\";break;case\"<\":n=\"&lt;\";break;case\">\":n=\"&gt;\";break;default:continue}i!==a&&(r+=e.substring(i,a)),i=a+1,r+=n}return i!==a?r+e.substring(i,a):r},strcmp:(e,t)=>e<t?-1:e>t?1:0,isUndefined:e=>\"[object Undefined]\"===n.call(e),isObject:e=>\"[object Object]\"===n.call(e),deepMerge(){const e=arguments[0]||{},{length:t}=arguments;let r,n,o;function a(t,a){r=e[a],o=Array.isArray(t),i.isObject(t)||o?(o?(o=!1,n=r&&Array.isArray(r)?r:[]):n=r&&i.isObject(r)?r:{},e[a]=i.deepMerge(n,t)):i.isUndefined(t)||(e[a]=t)}for(let e=0;e<t;e++)i.each(arguments[e],a);return e}};t.exports=i},{}],27:[function(e,t,n){(function(r,n){(function(){\"use strict\";const o=e(\"fs\"),i=/[<>&'\"\\x7F\\x00-\\x08\\x0B-\\x0C\\x0E-\\x1F]/,a={nop(){},promiseImmediate:e=>new Promise((t=>{r.setImmediate?n((()=>{t(e)})):setTimeout((()=>{t(e)}),1)})),inherits:function(e,t,r,n){e.super_=t,n||(n=r,r=null),r&&Object.keys(r).forEach((t=>{Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}));const o={constructor:{value:e,enumerable:!1,writable:!1,configurable:!0}};n&&Object.keys(n).forEach((e=>{o[e]=Object.getOwnPropertyDescriptor(n,e)})),e.prototype=Object.create(t.prototype,o)},dateToExcel:(e,t)=>25569+e.getTime()/864e5-(t?1462:0),excelToDate(e,t){const r=Math.round(24*(e-25569+(t?1462:0))*3600*1e3);return new Date(r)},parsePath(e){const t=e.lastIndexOf(\"/\");return{path:e.substring(0,t),name:e.substring(t+1)}},getRelsPath(e){const t=a.parsePath(e);return`${t.path}/_rels/${t.name}.rels`},xmlEncode(e){const t=i.exec(e);if(!t)return e;let r=\"\",n=\"\",o=0,a=t.index;for(;a<e.length;a++){const t=e.charCodeAt(a);switch(t){case 34:n=\"&quot;\";break;case 38:n=\"&amp;\";break;case 39:n=\"&apos;\";break;case 60:n=\"&lt;\";break;case 62:n=\"&gt;\";break;case 127:n=\"\";break;default:if(t<=31&&(t<=8||t>=11&&13!==t)){n=\"\";break}continue}o!==a&&(r+=e.substring(o,a)),o=a+1,n&&(r+=n)}return o!==a?r+e.substring(o,a):r},xmlDecode:e=>e.replace(/&([a-z]*);/g,(e=>{switch(e){case\"&lt;\":return\"<\";case\"&gt;\":return\">\";case\"&amp;\":return\"&\";case\"&apos;\":return\"'\";case\"&quot;\":return'\"';default:return e}})),validInt(e){const t=parseInt(e,10);return Number.isNaN(t)?0:t},isDateFmt:e=>!!e&&null!==(e=(e=e.replace(/\\[[^\\]]*]/g,\"\")).replace(/\"[^\"]*\"/g,\"\")).match(/[ymdhMsb]+/),fs:{exists:e=>new Promise((t=>{o.access(e,o.constants.F_OK,(e=>{t(!e)}))}))},toIsoDateString:e=>e.toIsoString().subsstr(0,10),parseBoolean:e=>!0===e||\"true\"===e||1===e||\"1\"===e};t.exports=a}).call(this)}).call(this,void 0!==r.g?r.g:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},e(\"timers\").setImmediate)},{fs:216,timers:523}],28:[function(e,t,r){\"use strict\";const n=e(\"./under-dash\"),o=e(\"./utils\");function i(e,t,r){e.push(` ${t}=\"${o.xmlEncode(r.toString())}\"`)}function a(e,t){if(t){const r=[];n.each(t,((e,t)=>{void 0!==e&&i(r,t,e)})),e.push(r.join(\"\"))}}class s{constructor(){this._xml=[],this._stack=[],this._rollbacks=[]}get tos(){return this._stack.length?this._stack[this._stack.length-1]:void 0}get cursor(){return this._xml.length}openXml(e){const t=this._xml;t.push(\"<?xml\"),a(t,e),t.push(\"?>\\n\")}openNode(e,t){const r=this.tos,n=this._xml;r&&this.open&&n.push(\">\"),this._stack.push(e),n.push(\"<\"),n.push(e),a(n,t),this.leaf=!0,this.open=!0}addAttribute(e,t){if(!this.open)throw new Error(\"Cannot write attributes to node if it is not open\");void 0!==t&&i(this._xml,e,t)}addAttributes(e){if(!this.open)throw new Error(\"Cannot write attributes to node if it is not open\");a(this._xml,e)}writeText(e){const t=this._xml;this.open&&(t.push(\">\"),this.open=!1),this.leaf=!1,t.push(o.xmlEncode(e.toString()))}writeXml(e){this.open&&(this._xml.push(\">\"),this.open=!1),this.leaf=!1,this._xml.push(e)}closeNode(){const e=this._stack.pop(),t=this._xml;this.leaf?t.push(\"/>\"):(t.push(\"</\"),t.push(e),t.push(\">\")),this.open=!1,this.leaf=!1}leafNode(e,t,r){this.openNode(e,t),void 0!==r&&this.writeText(r),this.closeNode()}closeAll(){for(;this._stack.length;)this.closeNode()}addRollback(){return this._rollbacks.push({xml:this._xml.length,stack:this._stack.length,leaf:this.leaf,open:this.open}),this.cursor}commit(){this._rollbacks.pop()}rollback(){const e=this._rollbacks.pop();this._xml.length>e.xml&&this._xml.splice(e.xml,this._xml.length-e.xml),this._stack.length>e.stack&&this._stack.splice(e.stack,this._stack.length-e.stack),this.leaf=e.leaf,this.open=e.open}get xml(){return this.closeAll(),this._xml.join(\"\")}}s.StdDocAttributes={version:\"1.0\",encoding:\"UTF-8\",standalone:\"yes\"},t.exports=s},{\"./under-dash\":26,\"./utils\":27}],29:[function(e,t,r){(function(r){(function(){\"use strict\";const n=e(\"events\"),o=e(\"jszip\"),i=e(\"./stream-buf\"),{stringToBuffer:a}=e(\"./browser-buffer-encode\");class s extends n.EventEmitter{constructor(e){super(),this.options=Object.assign({type:\"nodebuffer\",compression:\"DEFLATE\"},e),this.zip=new o,this.stream=new i}append(e,t){t.hasOwnProperty(\"base64\")&&t.base64?this.zip.file(t.name,e,{base64:!0}):(r.browser&&\"string\"==typeof e&&(e=a(e)),this.zip.file(t.name,e))}async finalize(){const e=await this.zip.generateAsync(this.options);this.stream.end(e),this.emit(\"finish\")}read(e){return this.stream.read(e)}setEncoding(e){return this.stream.setEncoding(e)}pause(){return this.stream.pause()}resume(){return this.stream.resume()}isPaused(){return this.stream.isPaused()}pipe(e,t){return this.stream.pipe(e,t)}unpipe(e){return this.stream.unpipe(e)}unshift(e){return this.stream.unshift(e)}wrap(e){return this.stream.wrap(e)}}t.exports={ZipWriter:s}}).call(this)}).call(this,e(\"_process\"))},{\"./browser-buffer-encode\":17,\"./stream-buf\":24,_process:467,events:422,jszip:441}],30:[function(e,t,r){\"use strict\";t.exports={0:{f:\"General\"},1:{f:\"0\"},2:{f:\"0.00\"},3:{f:\"#,##0\"},4:{f:\"#,##0.00\"},9:{f:\"0%\"},10:{f:\"0.00%\"},11:{f:\"0.00E+00\"},12:{f:\"# ?/?\"},13:{f:\"# ??/??\"},14:{f:\"mm-dd-yy\"},15:{f:\"d-mmm-yy\"},16:{f:\"d-mmm\"},17:{f:\"mmm-yy\"},18:{f:\"h:mm AM/PM\"},19:{f:\"h:mm:ss AM/PM\"},20:{f:\"h:mm\"},21:{f:\"h:mm:ss\"},22:{f:'m/d/yy \"h\":mm'},27:{\"zh-tw\":\"[$-404]e/m/d\",\"zh-cn\":'yyyy\"年\"m\"月\"',\"ja-jp\":\"[$-411]ge.m.d\",\"ko-kr\":'yyyy\"年\" mm\"月\" dd\"日\"'},28:{\"zh-tw\":'[$-404]e\"年\"m\"月\"d\"日\"',\"zh-cn\":'m\"月\"d\"日\"',\"ja-jp\":'[$-411]ggge\"年\"m\"月\"d\"日\"',\"ko-kr\":\"mm-dd\"},29:{\"zh-tw\":'[$-404]e\"年\"m\"月\"d\"日\"',\"zh-cn\":'m\"月\"d\"日\"',\"ja-jp\":'[$-411]ggge\"年\"m\"月\"d\"日\"',\"ko-kr\":\"mm-dd\"},30:{\"zh-tw\":\"m/d/yy \",\"zh-cn\":\"m-d-yy\",\"ja-jp\":\"m/d/yy\",\"ko-kr\":\"mm-dd-yy\"},31:{\"zh-tw\":'yyyy\"年\"m\"月\"d\"日\"',\"zh-cn\":'yyyy\"年\"m\"月\"d\"日\"',\"ja-jp\":'yyyy\"年\"m\"月\"d\"日\"',\"ko-kr\":'yyyy\"년\" mm\"월\" dd\"일\"'},32:{\"zh-tw\":'hh\"時\"mm\"分\"',\"zh-cn\":'h\"时\"mm\"分\"',\"ja-jp\":'h\"時\"mm\"分\"',\"ko-kr\":'h\"시\" mm\"분\"'},33:{\"zh-tw\":'hh\"時\"mm\"分\"ss\"秒\"',\"zh-cn\":'h\"时\"mm\"分\"ss\"秒\"',\"ja-jp\":'h\"時\"mm\"分\"ss\"秒\"',\"ko-kr\":'h\"시\" mm\"분\" ss\"초\"'},34:{\"zh-tw\":'上午/下午 hh\"時\"mm\"分\"',\"zh-cn\":'上午/下午 h\"时\"mm\"分\"',\"ja-jp\":'yyyy\"年\"m\"月\"',\"ko-kr\":\"yyyy-mm-dd\"},35:{\"zh-tw\":'上午/下午 hh\"時\"mm\"分\"ss\"秒\"',\"zh-cn\":'上午/下午 h\"时\"mm\"分\"ss\"秒\"',\"ja-jp\":'m\"月\"d\"日\"',\"ko-kr\":\"yyyy-mm-dd\"},36:{\"zh-tw\":\"[$-404]e/m/d\",\"zh-cn\":'yyyy\"年\"m\"月\"',\"ja-jp\":\"[$-411]ge.m.d\",\"ko-kr\":'yyyy\"年\" mm\"月\" dd\"日\"'},37:{f:\"#,##0 ;(#,##0)\"},38:{f:\"#,##0 ;[Red](#,##0)\"},39:{f:\"#,##0.00 ;(#,##0.00)\"},40:{f:\"#,##0.00 ;[Red](#,##0.00)\"},45:{f:\"mm:ss\"},46:{f:\"[h]:mm:ss\"},47:{f:\"mmss.0\"},48:{f:\"##0.0E+0\"},49:{f:\"@\"},50:{\"zh-tw\":\"[$-404]e/m/d\",\"zh-cn\":'yyyy\"年\"m\"月\"',\"ja-jp\":\"[$-411]ge.m.d\",\"ko-kr\":'yyyy\"年\" mm\"月\" dd\"日\"'},51:{\"zh-tw\":'[$-404]e\"年\"m\"月\"d\"日\"',\"zh-cn\":'m\"月\"d\"日\"',\"ja-jp\":'[$-411]ggge\"年\"m\"月\"d\"日\"',\"ko-kr\":\"mm-dd\"},52:{\"zh-tw\":'上午/下午 hh\"時\"mm\"分\"',\"zh-cn\":'yyyy\"年\"m\"月\"',\"ja-jp\":'yyyy\"年\"m\"月\"',\"ko-kr\":\"yyyy-mm-dd\"},53:{\"zh-tw\":'上午/下午 hh\"時\"mm\"分\"ss\"秒\"',\"zh-cn\":'m\"月\"d\"日\"',\"ja-jp\":'m\"月\"d\"日\"',\"ko-kr\":\"yyyy-mm-dd\"},54:{\"zh-tw\":'[$-404]e\"年\"m\"月\"d\"日\"',\"zh-cn\":'m\"月\"d\"日\"',\"ja-jp\":'[$-411]ggge\"年\"m\"月\"d\"日\"',\"ko-kr\":\"mm-dd\"},55:{\"zh-tw\":'上午/下午 hh\"時\"mm\"分\"',\"zh-cn\":'上午/下午 h\"时\"mm\"分\"',\"ja-jp\":'yyyy\"年\"m\"月\"',\"ko-kr\":\"yyyy-mm-dd\"},56:{\"zh-tw\":'上午/下午 hh\"時\"mm\"分\"ss\"秒\"',\"zh-cn\":'上午/下午 h\"时\"mm\"分\"ss\"秒\"',\"ja-jp\":'m\"月\"d\"日\"',\"ko-kr\":\"yyyy-mm-dd\"},57:{\"zh-tw\":\"[$-404]e/m/d\",\"zh-cn\":'yyyy\"年\"m\"月\"',\"ja-jp\":\"[$-411]ge.m.d\",\"ko-kr\":'yyyy\"年\" mm\"月\" dd\"日\"'},58:{\"zh-tw\":'[$-404]e\"年\"m\"月\"d\"日\"',\"zh-cn\":'m\"月\"d\"日\"',\"ja-jp\":'[$-411]ggge\"年\"m\"月\"d\"日\"',\"ko-kr\":\"mm-dd\"},59:{\"th-th\":\"t0\"},60:{\"th-th\":\"t0.00\"},61:{\"th-th\":\"t#,##0\"},62:{\"th-th\":\"t#,##0.00\"},67:{\"th-th\":\"t0%\"},68:{\"th-th\":\"t0.00%\"},69:{\"th-th\":\"t# ?/?\"},70:{\"th-th\":\"t# ??/??\"},81:{\"th-th\":\"d/m/bb\"}}},{}],31:[function(e,t,r){\"use strict\";t.exports={OfficeDocument:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",Worksheet:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\",CalcChain:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain\",SharedStrings:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\",Styles:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\",Theme:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",Hyperlink:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",Image:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",CoreProperties:\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\",ExtenderProperties:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\",Comments:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\",VmlDrawing:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing\",Table:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/table\"}},{}],32:[function(e,t,r){\"use strict\";const n=e(\"../../utils/parse-sax\"),o=e(\"../../utils/xml-stream\");class i{prepare(){}render(){}parseOpen(e){}parseText(e){}parseClose(e){}reconcile(e,t){}reset(){this.model=null,this.map&&Object.values(this.map).forEach((e=>{e instanceof i?e.reset():e.xform&&e.xform.reset()}))}mergeModel(e){this.model=Object.assign(this.model||{},e)}async parse(e){for await(const t of e)for(const{eventType:e,value:r}of t)if(\"opentag\"===e)this.parseOpen(r);else if(\"text\"===e)this.parseText(r);else if(\"closetag\"===e&&!this.parseClose(r.name))return this.model;return this.model}async parseStream(e){return this.parse(n(e))}get xml(){return this.toXml(this.model)}toXml(e){const t=new o;return this.render(t,e),t.xml}static toAttribute(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(void 0===e){if(r)return t}else if(r||e!==t)return e.toString()}static toStringAttribute(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return i.toAttribute(e,t,r)}static toStringValue(e,t){return void 0===e?t:e}static toBoolAttribute(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(void 0===e){if(r)return t}else if(r||e!==t)return e?\"1\":\"0\"}static toBoolValue(e,t){return void 0===e?t:\"1\"===e}static toIntAttribute(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return i.toAttribute(e,t,r)}static toIntValue(e,t){return void 0===e?t:parseInt(e,10)}static toFloatAttribute(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return i.toAttribute(e,t,r)}static toFloatValue(e,t){return void 0===e?t:parseFloat(e)}}t.exports=i},{\"../../utils/parse-sax\":22,\"../../utils/xml-stream\":28}],33:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\"),o=e(\"../../../utils/col-cache\");function i(e){try{return o.decodeEx(e),!0}catch(e){return!1}}function a(e){const t=[];let r=!1,n=\"\";return e.split(\",\").forEach((e=>{if(!e)return;const o=(e.match(/'/g)||[]).length;if(!o)return void(r?n+=e+\",\":i(e)&&t.push(e));const a=o%2==0;!r&&a&&i(e)?t.push(e):r&&!a?(r=!1,i(n+e)&&t.push(n+e),n=\"\"):(r=!0,n+=e+\",\")})),t}t.exports=class extends n{render(e,t){e.openNode(\"definedName\",{name:t.name,localSheetId:t.localSheetId}),e.writeText(t.ranges.join(\",\")),e.closeNode()}parseOpen(e){return\"definedName\"===e.name&&(this._parsedName=e.attributes.name,this._parsedLocalSheetId=e.attributes.localSheetId,this._parsedText=[],!0)}parseText(e){this._parsedText.push(e)}parseClose(){return this.model={name:this._parsedName,ranges:a(this._parsedText.join(\"\"))},void 0!==this._parsedLocalSheetId&&(this.model.localSheetId=parseInt(this._parsedLocalSheetId,10)),!1}}},{\"../../../utils/col-cache\":19,\"../base-xform\":32}],34:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/utils\"),o=e(\"../base-xform\");t.exports=class extends o{render(e,t){e.leafNode(\"sheet\",{sheetId:t.id,name:t.name,state:t.state,\"r:id\":t.rId})}parseOpen(e){return\"sheet\"===e.name&&(this.model={name:n.xmlDecode(e.attributes.name),id:parseInt(e.attributes.sheetId,10),state:e.attributes.state,rId:e.attributes[\"r:id\"]},!0)}parseText(){}parseClose(){return!1}}},{\"../../../utils/utils\":27,\"../base-xform\":32}],35:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{render(e,t){e.leafNode(\"calcPr\",{calcId:171027,fullCalcOnLoad:t.fullCalcOnLoad?1:void 0})}parseOpen(e){return\"calcPr\"===e.name&&(this.model={},!0)}parseText(){}parseClose(){return!1}}},{\"../base-xform\":32}],36:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{render(e,t){e.leafNode(\"workbookPr\",{date1904:t.date1904?1:void 0,defaultThemeVersion:164011,filterPrivacy:1})}parseOpen(e){return\"workbookPr\"===e.name&&(this.model={date1904:\"1\"===e.attributes.date1904},!0)}parseText(){}parseClose(){return!1}}},{\"../base-xform\":32}],37:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{render(e,t){const r={xWindow:t.x||0,yWindow:t.y||0,windowWidth:t.width||12e3,windowHeight:t.height||24e3,firstSheet:t.firstSheet,activeTab:t.activeTab};t.visibility&&\"visible\"!==t.visibility&&(r.visibility=t.visibility),e.leafNode(\"workbookView\",r)}parseOpen(e){if(\"workbookView\"===e.name){const t=this.model={},r=function(e,r,n){const o=void 0!==r?t[e]=r:n;void 0!==o&&(t[e]=o)},n=function(e,r,n){const o=void 0!==r?t[e]=parseInt(r,10):n;void 0!==o&&(t[e]=o)};return n(\"x\",e.attributes.xWindow,0),n(\"y\",e.attributes.yWindow,0),n(\"width\",e.attributes.windowWidth,25e3),n(\"height\",e.attributes.windowHeight,1e4),r(\"visibility\",e.attributes.visibility,\"visible\"),n(\"activeTab\",e.attributes.activeTab,void 0),n(\"firstSheet\",e.attributes.firstSheet,void 0),!0}return!1}parseText(){}parseClose(){return!1}}},{\"../base-xform\":32}],38:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/under-dash\"),o=e(\"../../../utils/col-cache\"),i=e(\"../../../utils/xml-stream\"),a=e(\"../base-xform\"),s=e(\"../static-xform\"),l=e(\"../list-xform\"),c=e(\"./defined-name-xform\"),u=e(\"./sheet-xform\"),d=e(\"./workbook-view-xform\"),f=e(\"./workbook-properties-xform\"),h=e(\"./workbook-calc-properties-xform\");class p extends a{constructor(){super(),this.map={fileVersion:p.STATIC_XFORMS.fileVersion,workbookPr:new f,bookViews:new l({tag:\"bookViews\",count:!1,childXform:new d}),sheets:new l({tag:\"sheets\",count:!1,childXform:new u}),definedNames:new l({tag:\"definedNames\",count:!1,childXform:new c}),calcPr:new h}}prepare(e){e.sheets=e.worksheets;const t=[];let r=0;e.sheets.forEach((e=>{if(e.pageSetup&&e.pageSetup.printArea&&e.pageSetup.printArea.split(\"&&\").forEach((n=>{const o=n.split(\":\"),i={name:\"_xlnm.Print_Area\",ranges:[`'${e.name}'!$${o[0]}:$${o[1]}`],localSheetId:r};t.push(i)})),e.pageSetup&&(e.pageSetup.printTitlesRow||e.pageSetup.printTitlesColumn)){const n=[];if(e.pageSetup.printTitlesColumn){const t=e.pageSetup.printTitlesColumn.split(\":\");n.push(`'${e.name}'!$${t[0]}:$${t[1]}`)}if(e.pageSetup.printTitlesRow){const t=e.pageSetup.printTitlesRow.split(\":\");n.push(`'${e.name}'!$${t[0]}:$${t[1]}`)}const o={name:\"_xlnm.Print_Titles\",ranges:n,localSheetId:r};t.push(o)}r++})),t.length&&(e.definedNames=e.definedNames.concat(t)),(e.media||[]).forEach(((e,t)=>{e.name=e.type+(t+1)}))}render(e,t){e.openXml(i.StdDocAttributes),e.openNode(\"workbook\",p.WORKBOOK_ATTRIBUTES),this.map.fileVersion.render(e),this.map.workbookPr.render(e,t.properties),this.map.bookViews.render(e,t.views),this.map.sheets.render(e,t.sheets),this.map.definedNames.render(e,t.definedNames),this.map.calcPr.render(e,t.calcProperties),e.closeNode()}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):(\"workbook\"===e.name||(this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)),!0)}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):\"workbook\"!==e||(this.model={sheets:this.map.sheets.model,properties:this.map.workbookPr.model||{},views:this.map.bookViews.model,calcProperties:{}},this.map.definedNames.model&&(this.model.definedNames=this.map.definedNames.model),!1)}reconcile(e){const t=(e.workbookRels||[]).reduce(((e,t)=>(e[t.Id]=t,e)),{}),r=[];let i,a=0;(e.sheets||[]).forEach((n=>{const o=t[n.rId];o&&(i=e.worksheetHash[\"xl/\"+o.Target.replace(/^(\\s|\\/xl\\/)+/,\"\")],i&&(i.name=n.name,i.id=n.id,i.state=n.state,r[a++]=i))}));const s=[];n.each(e.definedNames,(e=>{if(\"_xlnm.Print_Area\"===e.name){if(i=r[e.localSheetId],i){i.pageSetup||(i.pageSetup={});const t=o.decodeEx(e.ranges[0]);i.pageSetup.printArea=i.pageSetup.printArea?`${i.pageSetup.printArea}&&${t.dimensions}`:t.dimensions}}else if(\"_xlnm.Print_Titles\"===e.name){if(i=r[e.localSheetId],i){i.pageSetup||(i.pageSetup={});const t=e.ranges.join(\",\"),r=/\\$/g,n=/\\$\\d+:\\$\\d+/,o=t.match(n);if(o&&o.length){const e=o[0];i.pageSetup.printTitlesRow=e.replace(r,\"\")}const a=/\\$[A-Z]+:\\$[A-Z]+/,s=t.match(a);if(s&&s.length){const e=s[0];i.pageSetup.printTitlesColumn=e.replace(r,\"\")}}}else s.push(e)})),e.definedNames=s,e.media.forEach(((e,t)=>{e.index=t}))}}p.WORKBOOK_ATTRIBUTES={xmlns:\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\"xmlns:r\":\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\"xmlns:mc\":\"http://schemas.openxmlformats.org/markup-compatibility/2006\",\"mc:Ignorable\":\"x15\",\"xmlns:x15\":\"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main\"},p.STATIC_XFORMS={fileVersion:new s({tag:\"fileVersion\",$:{appName:\"xl\",lastEdited:5,lowestEdited:5,rupBuild:9303}})},t.exports=p},{\"../../../utils/col-cache\":19,\"../../../utils/under-dash\":26,\"../../../utils/xml-stream\":28,\"../base-xform\":32,\"../list-xform\":71,\"../static-xform\":120,\"./defined-name-xform\":33,\"./sheet-xform\":34,\"./workbook-calc-properties-xform\":35,\"./workbook-properties-xform\":36,\"./workbook-view-xform\":37}],39:[function(e,t,r){\"use strict\";const n=e(\"../strings/rich-text-xform\"),o=e(\"../../../utils/utils\"),i=e(\"../base-xform\"),a=t.exports=function(e){this.model=e};o.inherits(a,i,{get tag(){return\"r\"},get richTextXform(){return this._richTextXform||(this._richTextXform=new n),this._richTextXform},render(e,t){t=t||this.model,e.openNode(\"comment\",{ref:t.ref,authorId:0}),e.openNode(\"text\"),t&&t.note&&t.note.texts&&t.note.texts.forEach((t=>{this.richTextXform.render(e,t)})),e.closeNode(),e.closeNode()},parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"comment\":return this.model={type:\"note\",note:{texts:[]},...e.attributes},!0;case\"r\":return this.parser=this.richTextXform,this.parser.parseOpen(e),!0;default:return!1}},parseText(e){this.parser&&this.parser.parseText(e)},parseClose(e){switch(e){case\"comment\":return!1;case\"r\":return this.model.note.texts.push(this.parser.model),this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(e),!0}}})},{\"../../../utils/utils\":27,\"../base-xform\":32,\"../strings/rich-text-xform\":122}],40:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/xml-stream\"),o=e(\"../../../utils/utils\"),i=e(\"../base-xform\"),a=e(\"./comment-xform\"),s=t.exports=function(){this.map={comment:new a}};o.inherits(s,i,{COMMENTS_ATTRIBUTES:{xmlns:\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"}},{render(e,t){t=t||this.model,e.openXml(n.StdDocAttributes),e.openNode(\"comments\",s.COMMENTS_ATTRIBUTES),e.openNode(\"authors\"),e.leafNode(\"author\",null,\"Author\"),e.closeNode(),e.openNode(\"commentList\"),t.comments.forEach((t=>{this.map.comment.render(e,t)})),e.closeNode(),e.closeNode()},parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"commentList\":return this.model={comments:[]},!0;case\"comment\":return this.parser=this.map.comment,this.parser.parseOpen(e),!0;default:return!1}},parseText(e){this.parser&&this.parser.parseText(e)},parseClose(e){switch(e){case\"commentList\":return!1;case\"comment\":return this.model.comments.push(this.parser.model),this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(e),!0}}})},{\"../../../utils/utils\":27,\"../../../utils/xml-stream\":28,\"../base-xform\":32,\"./comment-xform\":39}],41:[function(e,t,r){\"use strict\";const n=e(\"../../base-xform\");t.exports=class extends n{constructor(e){super(),this._model=e}get tag(){return this._model&&this._model.tag}render(e,t,r){(t===r[2]||\"x:SizeWithCells\"===this.tag&&t===r[1])&&e.leafNode(this.tag)}parseOpen(e){return e.name===this.tag&&(this.model={},this.model[this.tag]=!0,!0)}parseText(){}parseClose(){return!1}}},{\"../../base-xform\":32}],42:[function(e,t,r){\"use strict\";const n=e(\"../../base-xform\");t.exports=class extends n{constructor(e){super(),this._model=e}get tag(){return this._model&&this._model.tag}render(e,t){e.leafNode(this.tag,null,t)}parseOpen(e){return e.name===this.tag&&(this.text=\"\",!0)}parseText(e){this.text=e}parseClose(){return!1}}},{\"../../base-xform\":32}],43:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{get tag(){return\"x:Anchor\"}getAnchorRect(e){const t=Math.floor(e.left),r=Math.floor(68*(e.left-t)),n=Math.floor(e.top),o=Math.floor(18*(e.top-n)),i=Math.floor(e.right),a=Math.floor(68*(e.right-i)),s=Math.floor(e.bottom);return[t,r,n,o,i,a,s,Math.floor(18*(e.bottom-s))]}getDefaultRect(e){const t=e.col,r=Math.max(e.row-2,0);return[t,6,r,14,t+2,2,r+4,16]}render(e,t){const r=t.anchor?this.getAnchorRect(t.anchor):this.getDefaultRect(t.refAddress);e.leafNode(\"x:Anchor\",null,r.join(\", \"))}parseOpen(e){return e.name===this.tag&&(this.text=\"\",!0)}parseText(e){this.text=e}parseClose(){return!1}}},{\"../base-xform\":32}],44:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\"),o=e(\"./vml-anchor-xform\"),i=e(\"./style/vml-protection-xform\"),a=e(\"./style/vml-position-xform\"),s=[\"twoCells\",\"oneCells\",\"absolute\"];t.exports=class extends n{constructor(){super(),this.map={\"x:Anchor\":new o,\"x:Locked\":new i({tag:\"x:Locked\"}),\"x:LockText\":new i({tag:\"x:LockText\"}),\"x:SizeWithCells\":new a({tag:\"x:SizeWithCells\"}),\"x:MoveWithCells\":new a({tag:\"x:MoveWithCells\"})}}get tag(){return\"x:ClientData\"}render(e,t){const{protection:r,editAs:n}=t.note;e.openNode(this.tag,{ObjectType:\"Note\"}),this.map[\"x:MoveWithCells\"].render(e,n,s),this.map[\"x:SizeWithCells\"].render(e,n,s),this.map[\"x:Anchor\"].render(e,t),this.map[\"x:Locked\"].render(e,r.locked),e.leafNode(\"x:AutoFill\",null,\"False\"),this.map[\"x:LockText\"].render(e,r.lockText),e.leafNode(\"x:Row\",null,t.refAddress.row-1),e.leafNode(\"x:Column\",null,t.refAddress.col-1),e.closeNode()}parseOpen(e){return e.name===this.tag?(this.reset(),this.model={anchor:[],protection:{},editAs:\"\"}):(this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)),!0}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):e!==this.tag||(this.normalizeModel(),!1)}normalizeModel(){const e=Object.assign({},this.map[\"x:MoveWithCells\"].model,this.map[\"x:SizeWithCells\"].model),t=Object.keys(e).length;this.model.editAs=s[t],this.model.anchor=this.map[\"x:Anchor\"].text,this.model.protection.locked=this.map[\"x:Locked\"].text,this.model.protection.lockText=this.map[\"x:LockText\"].text}}},{\"../base-xform\":32,\"./style/vml-position-xform\":41,\"./style/vml-protection-xform\":42,\"./vml-anchor-xform\":43}],45:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/xml-stream\"),o=e(\"../base-xform\"),i=e(\"./vml-shape-xform\");class a extends o{constructor(){super(),this.map={\"v:shape\":new i}}get tag(){return\"xml\"}render(e,t){e.openXml(n.StdDocAttributes),e.openNode(this.tag,a.DRAWING_ATTRIBUTES),e.openNode(\"o:shapelayout\",{\"v:ext\":\"edit\"}),e.leafNode(\"o:idmap\",{\"v:ext\":\"edit\",data:1}),e.closeNode(),e.openNode(\"v:shapetype\",{id:\"_x0000_t202\",coordsize:\"21600,21600\",\"o:spt\":202,path:\"m,l,21600r21600,l21600,xe\"}),e.leafNode(\"v:stroke\",{joinstyle:\"miter\"}),e.leafNode(\"v:path\",{gradientshapeok:\"t\",\"o:connecttype\":\"rect\"}),e.closeNode(),t.comments.forEach(((t,r)=>{this.map[\"v:shape\"].render(e,t,r)})),e.closeNode()}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):(e.name===this.tag?(this.reset(),this.model={comments:[]}):(this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)),!0)}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.model.comments.push(this.parser.model),this.parser=void 0),!0):e!==this.tag}reconcile(e,t){e.anchors.forEach((e=>{e.br?this.map[\"xdr:twoCellAnchor\"].reconcile(e,t):this.map[\"xdr:oneCellAnchor\"].reconcile(e,t)}))}}a.DRAWING_ATTRIBUTES={\"xmlns:v\":\"urn:schemas-microsoft-com:vml\",\"xmlns:o\":\"urn:schemas-microsoft-com:office:office\",\"xmlns:x\":\"urn:schemas-microsoft-com:office:excel\"},t.exports=a},{\"../../../utils/xml-stream\":28,\"../base-xform\":32,\"./vml-shape-xform\":46}],46:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\"),o=e(\"./vml-textbox-xform\"),i=e(\"./vml-client-data-xform\");class a extends n{constructor(){super(),this.map={\"v:textbox\":new o,\"x:ClientData\":new i}}get tag(){return\"v:shape\"}render(e,t,r){e.openNode(\"v:shape\",a.V_SHAPE_ATTRIBUTES(t,r)),e.leafNode(\"v:fill\",{color2:\"infoBackground [80]\"}),e.leafNode(\"v:shadow\",{color:\"none [81]\",obscured:\"t\"}),e.leafNode(\"v:path\",{\"o:connecttype\":\"none\"}),this.map[\"v:textbox\"].render(e,t),this.map[\"x:ClientData\"].render(e,t),e.closeNode()}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):(e.name===this.tag?(this.reset(),this.model={margins:{insetmode:e.attributes[\"o:insetmode\"]},anchor:\"\",editAs:\"\",protection:{}}):(this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)),!0)}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):e!==this.tag||(this.model.margins.inset=this.map[\"v:textbox\"].model&&this.map[\"v:textbox\"].model.inset,this.model.protection=this.map[\"x:ClientData\"].model&&this.map[\"x:ClientData\"].model.protection,this.model.anchor=this.map[\"x:ClientData\"].model&&this.map[\"x:ClientData\"].model.anchor,this.model.editAs=this.map[\"x:ClientData\"].model&&this.map[\"x:ClientData\"].model.editAs,!1)}}a.V_SHAPE_ATTRIBUTES=(e,t)=>({id:\"_x0000_s\"+(1025+t),type:\"#_x0000_t202\",style:\"position:absolute; margin-left:105.3pt;margin-top:10.5pt;width:97.8pt;height:59.1pt;z-index:1;visibility:hidden\",fillcolor:\"infoBackground [80]\",strokecolor:\"none [81]\",\"o:insetmode\":e.note.margins&&e.note.margins.insetmode}),t.exports=a},{\"../base-xform\":32,\"./vml-client-data-xform\":44,\"./vml-textbox-xform\":47}],47:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{get tag(){return\"v:textbox\"}conversionUnit(e,t,r){return`${parseFloat(e)*t.toFixed(2)}${r}`}reverseConversionUnit(e){return(e||\"\").split(\",\").map((e=>Number(parseFloat(this.conversionUnit(parseFloat(e),.1,\"\")).toFixed(2))))}render(e,t){const r={style:\"mso-direction-alt:auto\"};if(t&&t.note){let{inset:e}=t.note&&t.note.margins;Array.isArray(e)&&(e=e.map((e=>this.conversionUnit(e,10,\"mm\"))).join(\",\")),e&&(r.inset=e)}e.openNode(\"v:textbox\",r),e.leafNode(\"div\",{style:\"text-align:left\"}),e.closeNode()}parseOpen(e){return e.name!==this.tag||(this.model={inset:this.reverseConversionUnit(e.attributes.inset)},!0)}parseText(){}parseClose(e){return e!==this.tag}}},{\"../base-xform\":32}],48:[function(e,t,r){\"use strict\";const n=e(\"./base-xform\");t.exports=class extends n{createNewModel(e){return{}}parseOpen(e){return this.parser=this.parser||this.map[e.name],this.parser?(this.parser.parseOpen(e),!0):e.name===this.tag&&(this.model=this.createNewModel(e),!0)}parseText(e){this.parser&&this.parser.parseText(e)}onParserClose(e,t){this.model[e]=t.model}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.onParserClose(e,this.parser),this.parser=void 0),!0):e!==this.tag}}},{\"./base-xform\":32}],49:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{render(e,t){e.openNode(\"HeadingPairs\"),e.openNode(\"vt:vector\",{size:2,baseType:\"variant\"}),e.openNode(\"vt:variant\"),e.leafNode(\"vt:lpstr\",void 0,\"Worksheets\"),e.closeNode(),e.openNode(\"vt:variant\"),e.leafNode(\"vt:i4\",void 0,t.length),e.closeNode(),e.closeNode(),e.closeNode()}parseOpen(e){return\"HeadingPairs\"===e.name}parseText(){}parseClose(e){return\"HeadingPairs\"!==e}}},{\"../base-xform\":32}],50:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{render(e,t){e.openNode(\"TitlesOfParts\"),e.openNode(\"vt:vector\",{size:t.length,baseType:\"lpstr\"}),t.forEach((t=>{e.leafNode(\"vt:lpstr\",void 0,t.name)})),e.closeNode(),e.closeNode()}parseOpen(e){return\"TitlesOfParts\"===e.name}parseText(){}parseClose(e){return\"TitlesOfParts\"!==e}}},{\"../base-xform\":32}],51:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/xml-stream\"),o=e(\"../base-xform\"),i=e(\"../simple/string-xform\"),a=e(\"./app-heading-pairs-xform\"),s=e(\"./app-titles-of-parts-xform\");class l extends o{constructor(){super(),this.map={Company:new i({tag:\"Company\"}),Manager:new i({tag:\"Manager\"}),HeadingPairs:new a,TitleOfParts:new s}}render(e,t){e.openXml(n.StdDocAttributes),e.openNode(\"Properties\",l.PROPERTY_ATTRIBUTES),e.leafNode(\"Application\",void 0,\"Microsoft Excel\"),e.leafNode(\"DocSecurity\",void 0,\"0\"),e.leafNode(\"ScaleCrop\",void 0,\"false\"),this.map.HeadingPairs.render(e,t.worksheets),this.map.TitleOfParts.render(e,t.worksheets),this.map.Company.render(e,t.company||\"\"),this.map.Manager.render(e,t.manager),e.leafNode(\"LinksUpToDate\",void 0,\"false\"),e.leafNode(\"SharedDoc\",void 0,\"false\"),e.leafNode(\"HyperlinksChanged\",void 0,\"false\"),e.leafNode(\"AppVersion\",void 0,\"16.0300\"),e.closeNode()}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):\"Properties\"===e.name||(this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0))}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):\"Properties\"!==e||(this.model={worksheets:this.map.TitleOfParts.model,company:this.map.Company.model,manager:this.map.Manager.model},!1)}}l.DateFormat=function(e){return e.toISOString().replace(/[.]\\d{3,6}/,\"\")},l.DateAttrs={\"xsi:type\":\"dcterms:W3CDTF\"},l.PROPERTY_ATTRIBUTES={xmlns:\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\",\"xmlns:vt\":\"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\"},t.exports=l},{\"../../../utils/xml-stream\":28,\"../base-xform\":32,\"../simple/string-xform\":119,\"./app-heading-pairs-xform\":49,\"./app-titles-of-parts-xform\":50}],52:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/xml-stream\"),o=e(\"../base-xform\");class i extends o{render(e,t){e.openXml(n.StdDocAttributes),e.openNode(\"Types\",i.PROPERTY_ATTRIBUTES);const r={};(t.media||[]).forEach((t=>{if(\"image\"===t.type){const n=t.extension;r[n]||(r[n]=!0,e.leafNode(\"Default\",{Extension:n,ContentType:\"image/\"+n}))}})),e.leafNode(\"Default\",{Extension:\"rels\",ContentType:\"application/vnd.openxmlformats-package.relationships+xml\"}),e.leafNode(\"Default\",{Extension:\"xml\",ContentType:\"application/xml\"}),e.leafNode(\"Override\",{PartName:\"/xl/workbook.xml\",ContentType:\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\"}),t.worksheets.forEach((t=>{const r=`/xl/worksheets/sheet${t.id}.xml`;e.leafNode(\"Override\",{PartName:r,ContentType:\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\"})})),e.leafNode(\"Override\",{PartName:\"/xl/theme/theme1.xml\",ContentType:\"application/vnd.openxmlformats-officedocument.theme+xml\"}),e.leafNode(\"Override\",{PartName:\"/xl/styles.xml\",ContentType:\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"}),t.sharedStrings&&t.sharedStrings.count&&e.leafNode(\"Override\",{PartName:\"/xl/sharedStrings.xml\",ContentType:\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\"}),t.tables&&t.tables.forEach((t=>{e.leafNode(\"Override\",{PartName:\"/xl/tables/\"+t.target,ContentType:\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\"})})),t.drawings&&t.drawings.forEach((t=>{e.leafNode(\"Override\",{PartName:`/xl/drawings/${t.name}.xml`,ContentType:\"application/vnd.openxmlformats-officedocument.drawing+xml\"})})),t.commentRefs&&(e.leafNode(\"Default\",{Extension:\"vml\",ContentType:\"application/vnd.openxmlformats-officedocument.vmlDrawing\"}),t.commentRefs.forEach((t=>{let{commentName:r}=t;e.leafNode(\"Override\",{PartName:`/xl/${r}.xml`,ContentType:\"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\"})}))),e.leafNode(\"Override\",{PartName:\"/docProps/core.xml\",ContentType:\"application/vnd.openxmlformats-package.core-properties+xml\"}),e.leafNode(\"Override\",{PartName:\"/docProps/app.xml\",ContentType:\"application/vnd.openxmlformats-officedocument.extended-properties+xml\"}),e.closeNode()}parseOpen(){return!1}parseText(){}parseClose(){return!1}}i.PROPERTY_ATTRIBUTES={xmlns:\"http://schemas.openxmlformats.org/package/2006/content-types\"},t.exports=i},{\"../../../utils/xml-stream\":28,\"../base-xform\":32}],53:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/xml-stream\"),o=e(\"../base-xform\"),i=e(\"../simple/date-xform\"),a=e(\"../simple/string-xform\"),s=e(\"../simple/integer-xform\");class l extends o{constructor(){super(),this.map={\"dc:creator\":new a({tag:\"dc:creator\"}),\"dc:title\":new a({tag:\"dc:title\"}),\"dc:subject\":new a({tag:\"dc:subject\"}),\"dc:description\":new a({tag:\"dc:description\"}),\"dc:identifier\":new a({tag:\"dc:identifier\"}),\"dc:language\":new a({tag:\"dc:language\"}),\"cp:keywords\":new a({tag:\"cp:keywords\"}),\"cp:category\":new a({tag:\"cp:category\"}),\"cp:lastModifiedBy\":new a({tag:\"cp:lastModifiedBy\"}),\"cp:lastPrinted\":new i({tag:\"cp:lastPrinted\",format:l.DateFormat}),\"cp:revision\":new s({tag:\"cp:revision\"}),\"cp:version\":new a({tag:\"cp:version\"}),\"cp:contentStatus\":new a({tag:\"cp:contentStatus\"}),\"cp:contentType\":new a({tag:\"cp:contentType\"}),\"dcterms:created\":new i({tag:\"dcterms:created\",attrs:l.DateAttrs,format:l.DateFormat}),\"dcterms:modified\":new i({tag:\"dcterms:modified\",attrs:l.DateAttrs,format:l.DateFormat})}}render(e,t){e.openXml(n.StdDocAttributes),e.openNode(\"cp:coreProperties\",l.CORE_PROPERTY_ATTRIBUTES),this.map[\"dc:creator\"].render(e,t.creator),this.map[\"dc:title\"].render(e,t.title),this.map[\"dc:subject\"].render(e,t.subject),this.map[\"dc:description\"].render(e,t.description),this.map[\"dc:identifier\"].render(e,t.identifier),this.map[\"dc:language\"].render(e,t.language),this.map[\"cp:keywords\"].render(e,t.keywords),this.map[\"cp:category\"].render(e,t.category),this.map[\"cp:lastModifiedBy\"].render(e,t.lastModifiedBy),this.map[\"cp:lastPrinted\"].render(e,t.lastPrinted),this.map[\"cp:revision\"].render(e,t.revision),this.map[\"cp:version\"].render(e,t.version),this.map[\"cp:contentStatus\"].render(e,t.contentStatus),this.map[\"cp:contentType\"].render(e,t.contentType),this.map[\"dcterms:created\"].render(e,t.created),this.map[\"dcterms:modified\"].render(e,t.modified),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"cp:coreProperties\":case\"coreProperties\":return!0;default:if(this.parser=this.map[e.name],this.parser)return this.parser.parseOpen(e),!0;throw new Error(\"Unexpected xml node in parseOpen: \"+JSON.stringify(e))}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case\"cp:coreProperties\":case\"coreProperties\":return this.model={creator:this.map[\"dc:creator\"].model,title:this.map[\"dc:title\"].model,subject:this.map[\"dc:subject\"].model,description:this.map[\"dc:description\"].model,identifier:this.map[\"dc:identifier\"].model,language:this.map[\"dc:language\"].model,keywords:this.map[\"cp:keywords\"].model,category:this.map[\"cp:category\"].model,lastModifiedBy:this.map[\"cp:lastModifiedBy\"].model,lastPrinted:this.map[\"cp:lastPrinted\"].model,revision:this.map[\"cp:revision\"].model,contentStatus:this.map[\"cp:contentStatus\"].model,contentType:this.map[\"cp:contentType\"].model,created:this.map[\"dcterms:created\"].model,modified:this.map[\"dcterms:modified\"].model},!1;default:throw new Error(\"Unexpected xml node in parseClose: \"+e)}}}l.DateFormat=function(e){return e.toISOString().replace(/[.]\\d{3}/,\"\")},l.DateAttrs={\"xsi:type\":\"dcterms:W3CDTF\"},l.CORE_PROPERTY_ATTRIBUTES={\"xmlns:cp\":\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\",\"xmlns:dc\":\"http://purl.org/dc/elements/1.1/\",\"xmlns:dcterms\":\"http://purl.org/dc/terms/\",\"xmlns:dcmitype\":\"http://purl.org/dc/dcmitype/\",\"xmlns:xsi\":\"http://www.w3.org/2001/XMLSchema-instance\"},t.exports=l},{\"../../../utils/xml-stream\":28,\"../base-xform\":32,\"../simple/date-xform\":117,\"../simple/integer-xform\":118,\"../simple/string-xform\":119}],54:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{render(e,t){e.leafNode(\"Relationship\",t)}parseOpen(e){return\"Relationship\"===e.name&&(this.model=e.attributes,!0)}parseText(){}parseClose(){return!1}}},{\"../base-xform\":32}],55:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/xml-stream\"),o=e(\"../base-xform\"),i=e(\"./relationship-xform\");class a extends o{constructor(){super(),this.map={Relationship:new i}}render(e,t){t=t||this._values,e.openXml(n.StdDocAttributes),e.openNode(\"Relationships\",a.RELATIONSHIPS_ATTRIBUTES),t.forEach((t=>{this.map.Relationship.render(e,t)})),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;if(\"Relationships\"===e.name)return this.model=[],!0;if(this.parser=this.map[e.name],this.parser)return this.parser.parseOpen(e),!0;throw new Error(\"Unexpected xml node in parseOpen: \"+JSON.stringify(e))}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.model.push(this.parser.model),this.parser=void 0),!0;if(\"Relationships\"===e)return!1;throw new Error(\"Unexpected xml node in parseClose: \"+e)}}a.RELATIONSHIPS_ATTRIBUTES={xmlns:\"http://schemas.openxmlformats.org/package/2006/relationships\"},t.exports=a},{\"../../../utils/xml-stream\":28,\"../base-xform\":32,\"./relationship-xform\":54}],56:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):(e.name===this.tag?(this.reset(),this.model={range:{editAs:e.attributes.editAs||\"oneCell\"}}):(this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)),!0)}parseText(e){this.parser&&this.parser.parseText(e)}reconcilePicture(e,t){if(e&&e.rId){const r=t.rels[e.rId].Target.match(/.*\\/media\\/(.+[.][a-zA-Z]{3,4})/);if(r){const e=r[1],n=t.mediaIndex[e];return t.media[n]}}}}},{\"../base-xform\":32}],57:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\"),o=e(\"./blip-xform\");t.exports=class extends n{constructor(){super(),this.map={\"a:blip\":new o}}get tag(){return\"xdr:blipFill\"}render(e,t){e.openNode(this.tag),this.map[\"a:blip\"].render(e,t),e.openNode(\"a:stretch\"),e.leafNode(\"a:fillRect\"),e.closeNode(),e.closeNode()}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):(e.name===this.tag?this.reset():(this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)),!0)}parseText(){}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):e!==this.tag||(this.model=this.map[\"a:blip\"].model,!1)}}},{\"../base-xform\":32,\"./blip-xform\":58}],58:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{get tag(){return\"a:blip\"}render(e,t){e.leafNode(this.tag,{\"xmlns:r\":\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\"r:embed\":t.rId,cstate:\"print\"})}parseOpen(e){return e.name!==this.tag||(this.model={rId:e.attributes[\"r:embed\"]},!0)}parseText(){}parseClose(e){return e!==this.tag}}},{\"../base-xform\":32}],59:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{get tag(){return\"xdr:cNvPicPr\"}render(e){e.openNode(this.tag),e.leafNode(\"a:picLocks\",{noChangeAspect:\"1\"}),e.closeNode()}parseOpen(e){return e.name,this.tag,!0}parseText(){}parseClose(e){return e!==this.tag}}},{\"../base-xform\":32}],60:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\"),o=e(\"./hlink-click-xform\"),i=e(\"./ext-lst-xform\");t.exports=class extends n{constructor(){super(),this.map={\"a:hlinkClick\":new o,\"a:extLst\":new i}}get tag(){return\"xdr:cNvPr\"}render(e,t){e.openNode(this.tag,{id:t.index,name:\"Picture \"+t.index}),this.map[\"a:hlinkClick\"].render(e,t),this.map[\"a:extLst\"].render(e,t),e.closeNode()}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):(e.name===this.tag?this.reset():(this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)),!0)}parseText(){}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):e!==this.tag||(this.model=this.map[\"a:hlinkClick\"].model,!1)}}},{\"../base-xform\":32,\"./ext-lst-xform\":63,\"./hlink-click-xform\":65}],61:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\"),o=e(\"../simple/integer-xform\");t.exports=class extends n{constructor(e){super(),this.tag=e.tag,this.map={\"xdr:col\":new o({tag:\"xdr:col\",zero:!0}),\"xdr:colOff\":new o({tag:\"xdr:colOff\",zero:!0}),\"xdr:row\":new o({tag:\"xdr:row\",zero:!0}),\"xdr:rowOff\":new o({tag:\"xdr:rowOff\",zero:!0})}}render(e,t){e.openNode(this.tag),this.map[\"xdr:col\"].render(e,t.nativeCol),this.map[\"xdr:colOff\"].render(e,t.nativeColOff),this.map[\"xdr:row\"].render(e,t.nativeRow),this.map[\"xdr:rowOff\"].render(e,t.nativeRowOff),e.closeNode()}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):(e.name===this.tag?this.reset():(this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)),!0)}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):e!==this.tag||(this.model={nativeCol:this.map[\"xdr:col\"].model,nativeColOff:this.map[\"xdr:colOff\"].model,nativeRow:this.map[\"xdr:row\"].model,nativeRowOff:this.map[\"xdr:rowOff\"].model},!1)}}},{\"../base-xform\":32,\"../simple/integer-xform\":118}],62:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/col-cache\"),o=e(\"../../../utils/xml-stream\"),i=e(\"../base-xform\"),a=e(\"./two-cell-anchor-xform\"),s=e(\"./one-cell-anchor-xform\");class l extends i{constructor(){super(),this.map={\"xdr:twoCellAnchor\":new a,\"xdr:oneCellAnchor\":new s}}prepare(e){e.anchors.forEach(((e,t)=>{e.anchorType=function(e){return(\"string\"==typeof e.range?n.decode(e.range):e.range).br?\"xdr:twoCellAnchor\":\"xdr:oneCellAnchor\"}(e),this.map[e.anchorType].prepare(e,{index:t})}))}get tag(){return\"xdr:wsDr\"}render(e,t){e.openXml(o.StdDocAttributes),e.openNode(this.tag,l.DRAWING_ATTRIBUTES),t.anchors.forEach((t=>{this.map[t.anchorType].render(e,t)})),e.closeNode()}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):(e.name===this.tag?(this.reset(),this.model={anchors:[]}):(this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)),!0)}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.model.anchors.push(this.parser.model),this.parser=void 0),!0):e!==this.tag}reconcile(e,t){e.anchors.forEach((e=>{e.br?this.map[\"xdr:twoCellAnchor\"].reconcile(e,t):this.map[\"xdr:oneCellAnchor\"].reconcile(e,t)}))}}l.DRAWING_ATTRIBUTES={\"xmlns:xdr\":\"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing\",\"xmlns:a\":\"http://schemas.openxmlformats.org/drawingml/2006/main\"},t.exports=l},{\"../../../utils/col-cache\":19,\"../../../utils/xml-stream\":28,\"../base-xform\":32,\"./one-cell-anchor-xform\":67,\"./two-cell-anchor-xform\":70}],63:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{get tag(){return\"a:extLst\"}render(e){e.openNode(this.tag),e.openNode(\"a:ext\",{uri:\"{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}\"}),e.leafNode(\"a16:creationId\",{\"xmlns:a16\":\"http://schemas.microsoft.com/office/drawing/2014/main\",id:\"{00000000-0008-0000-0000-000002000000}\"}),e.closeNode(),e.closeNode()}parseOpen(e){return e.name,this.tag,!0}parseText(){}parseClose(e){return e!==this.tag}}},{\"../base-xform\":32}],64:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{constructor(e){super(),this.tag=e.tag,this.map={}}render(e,t){e.openNode(this.tag);const r=Math.floor(9525*t.width),n=Math.floor(9525*t.height);e.addAttribute(\"cx\",r),e.addAttribute(\"cy\",n),e.closeNode()}parseOpen(e){return e.name===this.tag&&(this.model={width:parseInt(e.attributes.cx||\"0\",10)/9525,height:parseInt(e.attributes.cy||\"0\",10)/9525},!0)}parseText(){}parseClose(){return!1}}},{\"../base-xform\":32}],65:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{get tag(){return\"a:hlinkClick\"}render(e,t){t.hyperlinks&&t.hyperlinks.rId&&e.leafNode(this.tag,{\"xmlns:r\":\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\"r:id\":t.hyperlinks.rId,tooltip:t.hyperlinks.tooltip})}parseOpen(e){return e.name!==this.tag||(this.model={hyperlinks:{rId:e.attributes[\"r:id\"],tooltip:e.attributes.tooltip}},!0)}parseText(){}parseClose(){return!1}}},{\"../base-xform\":32}],66:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\"),o=e(\"./c-nv-pr-xform\"),i=e(\"./c-nv-pic-pr-xform\");t.exports=class extends n{constructor(){super(),this.map={\"xdr:cNvPr\":new o,\"xdr:cNvPicPr\":new i}}get tag(){return\"xdr:nvPicPr\"}render(e,t){e.openNode(this.tag),this.map[\"xdr:cNvPr\"].render(e,t),this.map[\"xdr:cNvPicPr\"].render(e,t),e.closeNode()}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):(e.name===this.tag?this.reset():(this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)),!0)}parseText(){}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):e!==this.tag||(this.model=this.map[\"xdr:cNvPr\"].model,!1)}}},{\"../base-xform\":32,\"./c-nv-pic-pr-xform\":59,\"./c-nv-pr-xform\":60}],67:[function(e,t,r){\"use strict\";const n=e(\"./base-cell-anchor-xform\"),o=e(\"../static-xform\"),i=e(\"./cell-position-xform\"),a=e(\"./ext-xform\"),s=e(\"./pic-xform\");t.exports=class extends n{constructor(){super(),this.map={\"xdr:from\":new i({tag:\"xdr:from\"}),\"xdr:ext\":new a({tag:\"xdr:ext\"}),\"xdr:pic\":new s,\"xdr:clientData\":new o({tag:\"xdr:clientData\"})}}get tag(){return\"xdr:oneCellAnchor\"}prepare(e,t){this.map[\"xdr:pic\"].prepare(e.picture,t)}render(e,t){e.openNode(this.tag,{editAs:t.range.editAs||\"oneCell\"}),this.map[\"xdr:from\"].render(e,t.range.tl),this.map[\"xdr:ext\"].render(e,t.range.ext),this.map[\"xdr:pic\"].render(e,t.picture),this.map[\"xdr:clientData\"].render(e,{}),e.closeNode()}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):e!==this.tag||(this.model.range.tl=this.map[\"xdr:from\"].model,this.model.range.ext=this.map[\"xdr:ext\"].model,this.model.picture=this.map[\"xdr:pic\"].model,!1)}reconcile(e,t){e.medium=this.reconcilePicture(e.picture,t)}}},{\"../static-xform\":120,\"./base-cell-anchor-xform\":56,\"./cell-position-xform\":61,\"./ext-xform\":64,\"./pic-xform\":68}],68:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\"),o=e(\"../static-xform\"),i=e(\"./blip-fill-xform\"),a=e(\"./nv-pic-pr-xform\"),s=e(\"./sp-pr\");t.exports=class extends n{constructor(){super(),this.map={\"xdr:nvPicPr\":new a,\"xdr:blipFill\":new i,\"xdr:spPr\":new o(s)}}get tag(){return\"xdr:pic\"}prepare(e,t){e.index=t.index+1}render(e,t){e.openNode(this.tag),this.map[\"xdr:nvPicPr\"].render(e,t),this.map[\"xdr:blipFill\"].render(e,t),this.map[\"xdr:spPr\"].render(e,t),e.closeNode()}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):(e.name===this.tag?this.reset():(this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)),!0)}parseText(){}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.mergeModel(this.parser.model),this.parser=void 0),!0):e!==this.tag}}},{\"../base-xform\":32,\"../static-xform\":120,\"./blip-fill-xform\":57,\"./nv-pic-pr-xform\":66,\"./sp-pr\":69}],69:[function(e,t,r){\"use strict\";t.exports={tag:\"xdr:spPr\",c:[{tag:\"a:xfrm\",c:[{tag:\"a:off\",$:{x:\"0\",y:\"0\"}},{tag:\"a:ext\",$:{cx:\"0\",cy:\"0\"}}]},{tag:\"a:prstGeom\",$:{prst:\"rect\"},c:[{tag:\"a:avLst\"}]}]}},{}],70:[function(e,t,r){\"use strict\";const n=e(\"./base-cell-anchor-xform\"),o=e(\"../static-xform\"),i=e(\"./cell-position-xform\"),a=e(\"./pic-xform\");t.exports=class extends n{constructor(){super(),this.map={\"xdr:from\":new i({tag:\"xdr:from\"}),\"xdr:to\":new i({tag:\"xdr:to\"}),\"xdr:pic\":new a,\"xdr:clientData\":new o({tag:\"xdr:clientData\"})}}get tag(){return\"xdr:twoCellAnchor\"}prepare(e,t){this.map[\"xdr:pic\"].prepare(e.picture,t)}render(e,t){e.openNode(this.tag,{editAs:t.range.editAs||\"oneCell\"}),this.map[\"xdr:from\"].render(e,t.range.tl),this.map[\"xdr:to\"].render(e,t.range.br),this.map[\"xdr:pic\"].render(e,t.picture),this.map[\"xdr:clientData\"].render(e,{}),e.closeNode()}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):e!==this.tag||(this.model.range.tl=this.map[\"xdr:from\"].model,this.model.range.br=this.map[\"xdr:to\"].model,this.model.picture=this.map[\"xdr:pic\"].model,!1)}reconcile(e,t){e.medium=this.reconcilePicture(e.picture,t)}}},{\"../static-xform\":120,\"./base-cell-anchor-xform\":56,\"./cell-position-xform\":61,\"./pic-xform\":68}],71:[function(e,t,r){\"use strict\";const n=e(\"./base-xform\");t.exports=class extends n{constructor(e){super(),this.tag=e.tag,this.always=!!e.always,this.count=e.count,this.empty=e.empty,this.$count=e.$count||\"count\",this.$=e.$,this.childXform=e.childXform,this.maxItems=e.maxItems}prepare(e,t){const{childXform:r}=this;e&&e.forEach(((e,n)=>{t.index=n,r.prepare(e,t)}))}render(e,t){if(this.always||t&&t.length){e.openNode(this.tag,this.$),this.count&&e.addAttribute(this.$count,t&&t.length||0);const{childXform:r}=this;(t||[]).forEach(((t,n)=>{r.render(e,t,n)})),e.closeNode()}else this.empty&&e.leafNode(this.tag)}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):e.name===this.tag?(this.model=[],!0):!!this.childXform.parseOpen(e)&&(this.parser=this.childXform,!0)}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser){if(!this.parser.parseClose(e)&&(this.model.push(this.parser.model),this.parser=void 0,this.maxItems&&this.model.length>this.maxItems))throw new Error(`Max ${this.childXform.tag} count (${this.maxItems}) exceeded`);return!0}return!1}reconcile(e,t){if(e){const{childXform:r}=this;e.forEach((e=>{r.reconcile(e,t)}))}}}},{\"./base-xform\":32}],72:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/col-cache\"),o=e(\"../base-xform\");t.exports=class extends o{get tag(){return\"autoFilter\"}render(e,t){if(t)if(\"string\"==typeof t)e.leafNode(\"autoFilter\",{ref:t});else{const r=function(e){return\"string\"==typeof e?e:n.getAddress(e.row,e.column).address},o=r(t.from),i=r(t.to);o&&i&&e.leafNode(\"autoFilter\",{ref:`${o}:${i}`})}}parseOpen(e){\"autoFilter\"===e.name&&(this.model=e.attributes.ref)}}},{\"../../../utils/col-cache\":19,\"../base-xform\":32}],73:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/utils\"),o=e(\"../base-xform\"),i=e(\"../../../doc/range\"),a=e(\"../../../doc/enums\"),s=e(\"../strings/rich-text-xform\");function l(e){if(null==e)return a.ValueType.Null;if(e instanceof String||\"string\"==typeof e)return a.ValueType.String;if(\"number\"==typeof e)return a.ValueType.Number;if(\"boolean\"==typeof e)return a.ValueType.Boolean;if(e instanceof Date)return a.ValueType.Date;if(e.text&&e.hyperlink)return a.ValueType.Hyperlink;if(e.formula)return a.ValueType.Formula;if(e.error)return a.ValueType.Error;throw new Error(\"I could not understand type of value\")}t.exports=class extends o{constructor(){super(),this.richTextXForm=new s}get tag(){return\"c\"}prepare(e,t){const r=t.styles.addStyleModel(e.style||{},function(e){return e.type===a.ValueType.Formula?l(e.result):e.type}(e));switch(r&&(e.styleId=r),e.comment&&t.comments.push({...e.comment,ref:e.address}),e.type){case a.ValueType.String:case a.ValueType.RichText:t.sharedStrings&&(e.ssId=t.sharedStrings.add(e.value));break;case a.ValueType.Date:t.date1904&&(e.date1904=!0);break;case a.ValueType.Hyperlink:t.sharedStrings&&void 0!==e.text&&null!==e.text&&(e.ssId=t.sharedStrings.add(e.text)),t.hyperlinks.push({address:e.address,target:e.hyperlink,tooltip:e.tooltip});break;case a.ValueType.Merge:t.merges.add(e);break;case a.ValueType.Formula:if(t.date1904&&(e.date1904=!0),\"shared\"===e.shareType&&(e.si=t.siFormulae++),e.formula)t.formulae[e.address]=e;else if(e.sharedFormula){const r=t.formulae[e.sharedFormula];if(!r)throw new Error(\"Shared Formula master must exist above and or left of clone for cell \"+e.address);void 0===r.si?(r.shareType=\"shared\",r.si=t.siFormulae++,r.range=new i(r.address,e.address)):r.range&&r.range.expandToAddress(e.address),e.si=r.si}}}renderFormula(e,t){let r=null;switch(t.shareType){case\"shared\":r={t:\"shared\",ref:t.ref||t.range.range,si:t.si};break;case\"array\":r={t:\"array\",ref:t.ref};break;default:void 0!==t.si&&(r={t:\"shared\",si:t.si})}switch(l(t.result)){case a.ValueType.Null:e.leafNode(\"f\",r,t.formula);break;case a.ValueType.String:e.addAttribute(\"t\",\"str\"),e.leafNode(\"f\",r,t.formula),e.leafNode(\"v\",null,t.result);break;case a.ValueType.Number:e.leafNode(\"f\",r,t.formula),e.leafNode(\"v\",null,t.result);break;case a.ValueType.Boolean:e.addAttribute(\"t\",\"b\"),e.leafNode(\"f\",r,t.formula),e.leafNode(\"v\",null,t.result?1:0);break;case a.ValueType.Error:e.addAttribute(\"t\",\"e\"),e.leafNode(\"f\",r,t.formula),e.leafNode(\"v\",null,t.result.error);break;case a.ValueType.Date:e.leafNode(\"f\",r,t.formula),e.leafNode(\"v\",null,n.dateToExcel(t.result,t.date1904));break;default:throw new Error(\"I could not understand type of value\")}}render(e,t){if(t.type!==a.ValueType.Null||t.styleId){switch(e.openNode(\"c\"),e.addAttribute(\"r\",t.address),t.styleId&&e.addAttribute(\"s\",t.styleId),t.type){case a.ValueType.Null:break;case a.ValueType.Number:e.leafNode(\"v\",null,t.value);break;case a.ValueType.Boolean:e.addAttribute(\"t\",\"b\"),e.leafNode(\"v\",null,t.value?\"1\":\"0\");break;case a.ValueType.Error:e.addAttribute(\"t\",\"e\"),e.leafNode(\"v\",null,t.value.error);break;case a.ValueType.String:case a.ValueType.RichText:void 0!==t.ssId?(e.addAttribute(\"t\",\"s\"),e.leafNode(\"v\",null,t.ssId)):t.value&&t.value.richText?(e.addAttribute(\"t\",\"inlineStr\"),e.openNode(\"is\"),t.value.richText.forEach((t=>{this.richTextXForm.render(e,t)})),e.closeNode(\"is\")):(e.addAttribute(\"t\",\"str\"),e.leafNode(\"v\",null,t.value));break;case a.ValueType.Date:e.leafNode(\"v\",null,n.dateToExcel(t.value,t.date1904));break;case a.ValueType.Hyperlink:void 0!==t.ssId?(e.addAttribute(\"t\",\"s\"),e.leafNode(\"v\",null,t.ssId)):(e.addAttribute(\"t\",\"str\"),e.leafNode(\"v\",null,t.text));break;case a.ValueType.Formula:this.renderFormula(e,t);case a.ValueType.Merge:}e.closeNode()}}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"c\":return this.model={address:e.attributes.r},this.t=e.attributes.t,e.attributes.s&&(this.model.styleId=parseInt(e.attributes.s,10)),!0;case\"f\":return this.currentNode=\"f\",this.model.si=e.attributes.si,this.model.shareType=e.attributes.t,this.model.ref=e.attributes.ref,!0;case\"v\":return this.currentNode=\"v\",!0;case\"t\":return this.currentNode=\"t\",!0;case\"r\":return this.parser=this.richTextXForm,this.parser.parseOpen(e),!0;default:return!1}}parseText(e){if(this.parser)this.parser.parseText(e);else switch(this.currentNode){case\"f\":this.model.formula=this.model.formula?this.model.formula+e:e;break;case\"v\":case\"t\":this.model.value&&this.model.value.richText?this.model.value.richText.text=this.model.value.richText.text?this.model.value.richText.text+e:e:this.model.value=this.model.value?this.model.value+e:e}}parseClose(e){switch(e){case\"c\":{const{model:e}=this;if(e.formula||e.shareType)e.type=a.ValueType.Formula,e.value&&(\"str\"===this.t?e.result=n.xmlDecode(e.value):\"b\"===this.t?e.result=0!==parseInt(e.value,10):\"e\"===this.t?e.result={error:e.value}:e.result=parseFloat(e.value),e.value=void 0);else if(void 0!==e.value)switch(this.t){case\"s\":e.type=a.ValueType.String,e.value=parseInt(e.value,10);break;case\"str\":e.type=a.ValueType.String,e.value=n.xmlDecode(e.value);break;case\"inlineStr\":e.type=a.ValueType.String;break;case\"b\":e.type=a.ValueType.Boolean,e.value=0!==parseInt(e.value,10);break;case\"e\":e.type=a.ValueType.Error,e.value={error:e.value};break;default:e.type=a.ValueType.Number,e.value=parseFloat(e.value)}else e.styleId?e.type=a.ValueType.Null:e.type=a.ValueType.Merge;return!1}case\"f\":case\"v\":case\"is\":return this.currentNode=void 0,!0;case\"t\":return this.parser?(this.parser.parseClose(e),!0):(this.currentNode=void 0,!0);case\"r\":return this.model.value=this.model.value||{},this.model.value.richText=this.model.value.richText||[],this.model.value.richText.push(this.parser.model),this.parser=void 0,this.currentNode=void 0,!0;default:return!!this.parser&&(this.parser.parseClose(e),!0)}}reconcile(e,t){const r=e.styleId&&t.styles&&t.styles.getStyleModel(e.styleId);switch(r&&(e.style=r),void 0!==e.styleId&&(e.styleId=void 0),e.type){case a.ValueType.String:\"number\"==typeof e.value&&t.sharedStrings&&(e.value=t.sharedStrings.getString(e.value)),e.value.richText&&(e.type=a.ValueType.RichText);break;case a.ValueType.Number:r&&n.isDateFmt(r.numFmt)&&(e.type=a.ValueType.Date,e.value=n.excelToDate(e.value,t.date1904));break;case a.ValueType.Formula:void 0!==e.result&&r&&n.isDateFmt(r.numFmt)&&(e.result=n.excelToDate(e.result,t.date1904)),\"shared\"===e.shareType&&(e.ref?t.formulae[e.si]=e.address:(e.sharedFormula=t.formulae[e.si],delete e.shareType),delete e.si)}const o=t.hyperlinkMap[e.address];o&&(e.type===a.ValueType.Formula?(e.text=e.result,e.result=void 0):(e.text=e.value,e.value=void 0),e.type=a.ValueType.Hyperlink,e.hyperlink=o);const i=t.commentsMap&&t.commentsMap[e.address];i&&(e.comment=i)}}},{\"../../../doc/enums\":7,\"../../../doc/range\":10,\"../../../utils/utils\":27,\"../base-xform\":32,\"../strings/rich-text-xform\":122}],74:[function(e,t,r){\"use strict\";const n=e(\"../../base-xform\");t.exports=class extends n{get tag(){return\"x14:cfIcon\"}render(e,t){e.leafNode(this.tag,{iconSet:t.iconSet,iconId:t.iconId})}parseOpen(e){let{attributes:t}=e;this.model={iconSet:t.iconSet,iconId:n.toIntValue(t.iconId)}}parseClose(e){return e!==this.tag}}},{\"../../base-xform\":32}],75:[function(e,t,r){\"use strict\";const{v4:n}=e(\"uuid\"),o=e(\"../../base-xform\"),i=e(\"../../composite-xform\"),a=e(\"./databar-ext-xform\"),s=e(\"./icon-set-ext-xform\"),l={\"3Triangles\":!0,\"3Stars\":!0,\"5Boxes\":!0};class c extends i{constructor(){super(),this.map={\"x14:dataBar\":this.databarXform=new a,\"x14:iconSet\":this.iconSetXform=new s}}get tag(){return\"x14:cfRule\"}static isExt(e){return\"dataBar\"===e.type?a.isExt(e):!(\"iconSet\"!==e.type||!e.custom&&!l[e.iconSet])}prepare(e){c.isExt(e)&&(e.x14Id=`{${n()}}`.toUpperCase())}render(e,t){if(c.isExt(t))switch(t.type){case\"dataBar\":this.renderDataBar(e,t);break;case\"iconSet\":this.renderIconSet(e,t)}}renderDataBar(e,t){e.openNode(this.tag,{type:\"dataBar\",id:t.x14Id}),this.databarXform.render(e,t),e.closeNode()}renderIconSet(e,t){e.openNode(this.tag,{type:\"iconSet\",priority:t.priority,id:t.x14Id||`{${n()}}`}),this.iconSetXform.render(e,t),e.closeNode()}createNewModel(e){let{attributes:t}=e;return{type:t.type,x14Id:t.id,priority:o.toIntValue(t.priority)}}onParserClose(e,t){Object.assign(this.model,t.model)}}t.exports=c},{\"../../base-xform\":32,\"../../composite-xform\":48,\"./databar-ext-xform\":79,\"./icon-set-ext-xform\":81,uuid:528}],76:[function(e,t,r){\"use strict\";const n=e(\"../../composite-xform\"),o=e(\"./f-ext-xform\");t.exports=class extends n{constructor(){super(),this.map={\"xm:f\":this.fExtXform=new o}}get tag(){return\"x14:cfvo\"}render(e,t){e.openNode(this.tag,{type:t.type}),void 0!==t.value&&this.fExtXform.render(e,t.value),e.closeNode()}createNewModel(e){return{type:e.attributes.type}}onParserClose(e,t){\"xm:f\"===e&&(this.model.value=t.model?parseFloat(t.model):0)}}},{\"../../composite-xform\":48,\"./f-ext-xform\":80}],77:[function(e,t,r){\"use strict\";const n=e(\"../../composite-xform\"),o=e(\"./sqref-ext-xform\"),i=e(\"./cf-rule-ext-xform\");t.exports=class extends n{constructor(){super(),this.map={\"xm:sqref\":this.sqRef=new o,\"x14:cfRule\":this.cfRule=new i}}get tag(){return\"x14:conditionalFormatting\"}prepare(e,t){e.rules.forEach((e=>{this.cfRule.prepare(e,t)}))}render(e,t){t.rules.some(i.isExt)&&(e.openNode(this.tag,{\"xmlns:xm\":\"http://schemas.microsoft.com/office/excel/2006/main\"}),t.rules.filter(i.isExt).forEach((t=>this.cfRule.render(e,t))),this.sqRef.render(e,t.ref),e.closeNode())}createNewModel(){return{rules:[]}}onParserClose(e,t){switch(e){case\"xm:sqref\":this.model.ref=t.model;break;case\"x14:cfRule\":this.model.rules.push(t.model)}}}},{\"../../composite-xform\":48,\"./cf-rule-ext-xform\":75,\"./sqref-ext-xform\":82}],78:[function(e,t,r){\"use strict\";const n=e(\"../../composite-xform\"),o=e(\"./cf-rule-ext-xform\"),i=e(\"./conditional-formatting-ext-xform\");t.exports=class extends n{constructor(){super(),this.map={\"x14:conditionalFormatting\":this.cfXform=new i}}get tag(){return\"x14:conditionalFormattings\"}hasContent(e){return void 0===e.hasExtContent&&(e.hasExtContent=e.some((e=>e.rules.some(o.isExt)))),e.hasExtContent}prepare(e,t){e.forEach((e=>{this.cfXform.prepare(e,t)}))}render(e,t){this.hasContent(t)&&(e.openNode(this.tag),t.forEach((t=>this.cfXform.render(e,t))),e.closeNode())}createNewModel(){return[]}onParserClose(e,t){this.model.push(t.model)}}},{\"../../composite-xform\":48,\"./cf-rule-ext-xform\":75,\"./conditional-formatting-ext-xform\":77}],79:[function(e,t,r){\"use strict\";const n=e(\"../../base-xform\"),o=e(\"../../composite-xform\"),i=e(\"../../style/color-xform\"),a=e(\"./cfvo-ext-xform\");t.exports=class extends o{constructor(){super(),this.map={\"x14:cfvo\":this.cfvoXform=new a,\"x14:borderColor\":this.borderColorXform=new i(\"x14:borderColor\"),\"x14:negativeBorderColor\":this.negativeBorderColorXform=new i(\"x14:negativeBorderColor\"),\"x14:negativeFillColor\":this.negativeFillColorXform=new i(\"x14:negativeFillColor\"),\"x14:axisColor\":this.axisColorXform=new i(\"x14:axisColor\")}}static isExt(e){return!e.gradient}get tag(){return\"x14:dataBar\"}render(e,t){e.openNode(this.tag,{minLength:n.toIntAttribute(t.minLength,0,!0),maxLength:n.toIntAttribute(t.maxLength,100,!0),border:n.toBoolAttribute(t.border,!1),gradient:n.toBoolAttribute(t.gradient,!0),negativeBarColorSameAsPositive:n.toBoolAttribute(t.negativeBarColorSameAsPositive,!0),negativeBarBorderColorSameAsPositive:n.toBoolAttribute(t.negativeBarBorderColorSameAsPositive,!0),axisPosition:n.toAttribute(t.axisPosition,\"auto\"),direction:n.toAttribute(t.direction,\"leftToRight\")}),t.cfvo.forEach((t=>{this.cfvoXform.render(e,t)})),this.borderColorXform.render(e,t.borderColor),this.negativeBorderColorXform.render(e,t.negativeBorderColor),this.negativeFillColorXform.render(e,t.negativeFillColor),this.axisColorXform.render(e,t.axisColor),e.closeNode()}createNewModel(e){let{attributes:t}=e;return{cfvo:[],minLength:n.toIntValue(t.minLength,0),maxLength:n.toIntValue(t.maxLength,100),border:n.toBoolValue(t.border,!1),gradient:n.toBoolValue(t.gradient,!0),negativeBarColorSameAsPositive:n.toBoolValue(t.negativeBarColorSameAsPositive,!0),negativeBarBorderColorSameAsPositive:n.toBoolValue(t.negativeBarBorderColorSameAsPositive,!0),axisPosition:n.toStringValue(t.axisPosition,\"auto\"),direction:n.toStringValue(t.direction,\"leftToRight\")}}onParserClose(e,t){const[,r]=e.split(\":\");\"cfvo\"===r?this.model.cfvo.push(t.model):this.model[r]=t.model}}},{\"../../base-xform\":32,\"../../composite-xform\":48,\"../../style/color-xform\":128,\"./cfvo-ext-xform\":76}],80:[function(e,t,r){\"use strict\";const n=e(\"../../base-xform\");t.exports=class extends n{get tag(){return\"xm:f\"}render(e,t){e.leafNode(this.tag,null,t)}parseOpen(){this.model=\"\"}parseText(e){this.model+=e}parseClose(e){return e!==this.tag}}},{\"../../base-xform\":32}],81:[function(e,t,r){\"use strict\";const n=e(\"../../base-xform\"),o=e(\"../../composite-xform\"),i=e(\"./cfvo-ext-xform\"),a=e(\"./cf-icon-ext-xform\");t.exports=class extends o{constructor(){super(),this.map={\"x14:cfvo\":this.cfvoXform=new i,\"x14:cfIcon\":this.cfIconXform=new a}}get tag(){return\"x14:iconSet\"}render(e,t){e.openNode(this.tag,{iconSet:n.toStringAttribute(t.iconSet),reverse:n.toBoolAttribute(t.reverse,!1),showValue:n.toBoolAttribute(t.showValue,!0),custom:n.toBoolAttribute(t.icons,!1)}),t.cfvo.forEach((t=>{this.cfvoXform.render(e,t)})),t.icons&&t.icons.forEach(((t,r)=>{t.iconId=r,this.cfIconXform.render(e,t)})),e.closeNode()}createNewModel(e){let{attributes:t}=e;return{cfvo:[],iconSet:n.toStringValue(t.iconSet,\"3TrafficLights\"),reverse:n.toBoolValue(t.reverse,!1),showValue:n.toBoolValue(t.showValue,!0)}}onParserClose(e,t){const[,r]=e.split(\":\");switch(r){case\"cfvo\":this.model.cfvo.push(t.model);break;case\"cfIcon\":this.model.icons||(this.model.icons=[]),this.model.icons.push(t.model);break;default:this.model[r]=t.model}}}},{\"../../base-xform\":32,\"../../composite-xform\":48,\"./cf-icon-ext-xform\":74,\"./cfvo-ext-xform\":76}],82:[function(e,t,r){\"use strict\";const n=e(\"../../base-xform\");t.exports=class extends n{get tag(){return\"xm:sqref\"}render(e,t){e.leafNode(this.tag,null,t)}parseOpen(){this.model=\"\"}parseText(e){this.model+=e}parseClose(e){return e!==this.tag}}},{\"../../base-xform\":32}],83:[function(e,t,r){\"use strict\";const n=e(\"../../base-xform\"),o=e(\"../../composite-xform\"),i=e(\"../../../../doc/range\"),a=e(\"./databar-xform\"),s=e(\"./ext-lst-ref-xform\"),l=e(\"./formula-xform\"),c=e(\"./color-scale-xform\"),u=e(\"./icon-set-xform\"),d={\"3Triangles\":!0,\"3Stars\":!0,\"5Boxes\":!0},f=e=>{const{type:t,operator:r}=e;switch(t){case\"containsText\":case\"containsBlanks\":case\"notContainsBlanks\":case\"containsErrors\":case\"notContainsErrors\":return{type:\"containsText\",operator:t};default:return{type:t,operator:r}}};class h extends o{constructor(){super(),this.map={dataBar:this.databarXform=new a,extLst:this.extLstRefXform=new s,formula:this.formulaXform=new l,colorScale:this.colorScaleXform=new c,iconSet:this.iconSetXform=new u}}get tag(){return\"cfRule\"}static isPrimitive(e){return\"iconSet\"!==e.type||!e.custom&&!d[e.iconSet]}render(e,t){switch(t.type){case\"expression\":this.renderExpression(e,t);break;case\"cellIs\":this.renderCellIs(e,t);break;case\"top10\":this.renderTop10(e,t);break;case\"aboveAverage\":this.renderAboveAverage(e,t);break;case\"dataBar\":this.renderDataBar(e,t);break;case\"colorScale\":this.renderColorScale(e,t);break;case\"iconSet\":this.renderIconSet(e,t);break;case\"containsText\":this.renderText(e,t);break;case\"timePeriod\":this.renderTimePeriod(e,t)}}renderExpression(e,t){e.openNode(this.tag,{type:\"expression\",dxfId:t.dxfId,priority:t.priority}),this.formulaXform.render(e,t.formulae[0]),e.closeNode()}renderCellIs(e,t){e.openNode(this.tag,{type:\"cellIs\",dxfId:t.dxfId,priority:t.priority,operator:t.operator}),t.formulae.forEach((t=>{this.formulaXform.render(e,t)})),e.closeNode()}renderTop10(e,t){e.leafNode(this.tag,{type:\"top10\",dxfId:t.dxfId,priority:t.priority,percent:n.toBoolAttribute(t.percent,!1),bottom:n.toBoolAttribute(t.bottom,!1),rank:n.toIntValue(t.rank,10,!0)})}renderAboveAverage(e,t){e.leafNode(this.tag,{type:\"aboveAverage\",dxfId:t.dxfId,priority:t.priority,aboveAverage:n.toBoolAttribute(t.aboveAverage,!0)})}renderDataBar(e,t){e.openNode(this.tag,{type:\"dataBar\",priority:t.priority}),this.databarXform.render(e,t),this.extLstRefXform.render(e,t),e.closeNode()}renderColorScale(e,t){e.openNode(this.tag,{type:\"colorScale\",priority:t.priority}),this.colorScaleXform.render(e,t),e.closeNode()}renderIconSet(e,t){h.isPrimitive(t)&&(e.openNode(this.tag,{type:\"iconSet\",priority:t.priority}),this.iconSetXform.render(e,t),e.closeNode())}renderText(e,t){e.openNode(this.tag,{type:t.operator,dxfId:t.dxfId,priority:t.priority,operator:n.toStringAttribute(t.operator,\"containsText\")});const r=(e=>{if(e.formulae&&e.formulae[0])return e.formulae[0];const t=new i(e.ref),{tl:r}=t;switch(e.operator){case\"containsText\":return`NOT(ISERROR(SEARCH(\"${e.text}\",${r})))`;case\"containsBlanks\":return`LEN(TRIM(${r}))=0`;case\"notContainsBlanks\":return`LEN(TRIM(${r}))>0`;case\"containsErrors\":return`ISERROR(${r})`;case\"notContainsErrors\":return`NOT(ISERROR(${r}))`;default:return}})(t);r&&this.formulaXform.render(e,r),e.closeNode()}renderTimePeriod(e,t){e.openNode(this.tag,{type:\"timePeriod\",dxfId:t.dxfId,priority:t.priority,timePeriod:t.timePeriod});const r=(e=>{if(e.formulae&&e.formulae[0])return e.formulae[0];const t=new i(e.ref),{tl:r}=t;switch(e.timePeriod){case\"thisWeek\":return`AND(TODAY()-ROUNDDOWN(${r},0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(${r},0)-TODAY()<=7-WEEKDAY(TODAY()))`;case\"lastWeek\":return`AND(TODAY()-ROUNDDOWN(${r},0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(${r},0)<(WEEKDAY(TODAY())+7))`;case\"nextWeek\":return`AND(ROUNDDOWN(${r},0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(${r},0)-TODAY()<(15-WEEKDAY(TODAY())))`;case\"yesterday\":return`FLOOR(${r},1)=TODAY()-1`;case\"today\":return`FLOOR(${r},1)=TODAY()`;case\"tomorrow\":return`FLOOR(${r},1)=TODAY()+1`;case\"last7Days\":return`AND(TODAY()-FLOOR(${r},1)<=6,FLOOR(${r},1)<=TODAY())`;case\"lastMonth\":return`AND(MONTH(${r})=MONTH(EDATE(TODAY(),0-1)),YEAR(${r})=YEAR(EDATE(TODAY(),0-1)))`;case\"thisMonth\":return`AND(MONTH(${r})=MONTH(TODAY()),YEAR(${r})=YEAR(TODAY()))`;case\"nextMonth\":return`AND(MONTH(${r})=MONTH(EDATE(TODAY(),0+1)),YEAR(${r})=YEAR(EDATE(TODAY(),0+1)))`;default:return}})(t);r&&this.formulaXform.render(e,r),e.closeNode()}createNewModel(e){let{attributes:t}=e;return{...f(t),dxfId:n.toIntValue(t.dxfId),priority:n.toIntValue(t.priority),timePeriod:t.timePeriod,percent:n.toBoolValue(t.percent),bottom:n.toBoolValue(t.bottom),rank:n.toIntValue(t.rank),aboveAverage:n.toBoolValue(t.aboveAverage)}}onParserClose(e,t){switch(e){case\"dataBar\":case\"extLst\":case\"colorScale\":case\"iconSet\":Object.assign(this.model,t.model);break;case\"formula\":this.model.formulae=this.model.formulae||[],this.model.formulae.push(t.model)}}}t.exports=h},{\"../../../../doc/range\":10,\"../../base-xform\":32,\"../../composite-xform\":48,\"./color-scale-xform\":85,\"./databar-xform\":88,\"./ext-lst-ref-xform\":89,\"./formula-xform\":90,\"./icon-set-xform\":91}],84:[function(e,t,r){\"use strict\";const n=e(\"../../base-xform\");t.exports=class extends n{get tag(){return\"cfvo\"}render(e,t){e.leafNode(this.tag,{type:t.type,val:t.value})}parseOpen(e){this.model={type:e.attributes.type,value:n.toFloatValue(e.attributes.val)}}parseClose(e){return e!==this.tag}}},{\"../../base-xform\":32}],85:[function(e,t,r){\"use strict\";const n=e(\"../../composite-xform\"),o=e(\"../../style/color-xform\"),i=e(\"./cfvo-xform\");t.exports=class extends n{constructor(){super(),this.map={cfvo:this.cfvoXform=new i,color:this.colorXform=new o}}get tag(){return\"colorScale\"}render(e,t){e.openNode(this.tag),t.cfvo.forEach((t=>{this.cfvoXform.render(e,t)})),t.color.forEach((t=>{this.colorXform.render(e,t)})),e.closeNode()}createNewModel(e){return{cfvo:[],color:[]}}onParserClose(e,t){this.model[e].push(t.model)}}},{\"../../composite-xform\":48,\"../../style/color-xform\":128,\"./cfvo-xform\":84}],86:[function(e,t,r){\"use strict\";const n=e(\"../../composite-xform\"),o=e(\"./cf-rule-xform\");t.exports=class extends n{constructor(){super(),this.map={cfRule:new o}}get tag(){return\"conditionalFormatting\"}render(e,t){t.rules.some(o.isPrimitive)&&(e.openNode(this.tag,{sqref:t.ref}),t.rules.forEach((r=>{o.isPrimitive(r)&&(r.ref=t.ref,this.map.cfRule.render(e,r))})),e.closeNode())}createNewModel(e){let{attributes:t}=e;return{ref:t.sqref,rules:[]}}onParserClose(e,t){this.model.rules.push(t.model)}}},{\"../../composite-xform\":48,\"./cf-rule-xform\":83}],87:[function(e,t,r){\"use strict\";const n=e(\"../../base-xform\"),o=e(\"./conditional-formatting-xform\");t.exports=class extends n{constructor(){super(),this.cfXform=new o}get tag(){return\"conditionalFormatting\"}reset(){this.model=[]}prepare(e,t){let r=e.reduce(((e,t)=>Math.max(e,...t.rules.map((e=>e.priority||0)))),1);e.forEach((e=>{e.rules.forEach((e=>{e.priority||(e.priority=r++),e.style&&(e.dxfId=t.styles.addDxfStyle(e.style))}))}))}render(e,t){t.forEach((t=>{this.cfXform.render(e,t)}))}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):\"conditionalFormatting\"===e.name&&(this.parser=this.cfXform,this.parser.parseOpen(e),!0)}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return!(!this.parser||!this.parser.parseClose(e)&&(this.model.push(this.parser.model),this.parser=void 0,1))}reconcile(e,t){e.forEach((e=>{e.rules.forEach((e=>{void 0!==e.dxfId&&(e.style=t.styles.getDxfStyle(e.dxfId),delete e.dxfId)}))}))}}},{\"../../base-xform\":32,\"./conditional-formatting-xform\":86}],88:[function(e,t,r){\"use strict\";const n=e(\"../../composite-xform\"),o=e(\"../../style/color-xform\"),i=e(\"./cfvo-xform\");t.exports=class extends n{constructor(){super(),this.map={cfvo:this.cfvoXform=new i,color:this.colorXform=new o}}get tag(){return\"dataBar\"}render(e,t){e.openNode(this.tag),t.cfvo.forEach((t=>{this.cfvoXform.render(e,t)})),this.colorXform.render(e,t.color),e.closeNode()}createNewModel(){return{cfvo:[]}}onParserClose(e,t){switch(e){case\"cfvo\":this.model.cfvo.push(t.model);break;case\"color\":this.model.color=t.model}}}},{\"../../composite-xform\":48,\"../../style/color-xform\":128,\"./cfvo-xform\":84}],89:[function(e,t,r){\"use strict\";const n=e(\"../../base-xform\"),o=e(\"../../composite-xform\");class i extends n{get tag(){return\"x14:id\"}render(e,t){e.leafNode(this.tag,null,t)}parseOpen(){this.model=\"\"}parseText(e){this.model+=e}parseClose(e){return e!==this.tag}}class a extends o{constructor(){super(),this.map={\"x14:id\":this.idXform=new i}}get tag(){return\"ext\"}render(e,t){e.openNode(this.tag,{uri:\"{B025F937-C7B1-47D3-B67F-A62EFF666E3E}\",\"xmlns:x14\":\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main\"}),this.idXform.render(e,t.x14Id),e.closeNode()}createNewModel(){return{}}onParserClose(e,t){this.model.x14Id=t.model}}t.exports=class extends o{constructor(){super(),this.map={ext:new a}}get tag(){return\"extLst\"}render(e,t){e.openNode(this.tag),this.map.ext.render(e,t),e.closeNode()}createNewModel(){return{}}onParserClose(e,t){Object.assign(this.model,t.model)}}},{\"../../base-xform\":32,\"../../composite-xform\":48}],90:[function(e,t,r){\"use strict\";const n=e(\"../../base-xform\");t.exports=class extends n{get tag(){return\"formula\"}render(e,t){e.leafNode(this.tag,null,t)}parseOpen(){this.model=\"\"}parseText(e){this.model+=e}parseClose(e){return e!==this.tag}}},{\"../../base-xform\":32}],91:[function(e,t,r){\"use strict\";const n=e(\"../../base-xform\"),o=e(\"../../composite-xform\"),i=e(\"./cfvo-xform\");t.exports=class extends o{constructor(){super(),this.map={cfvo:this.cfvoXform=new i}}get tag(){return\"iconSet\"}render(e,t){e.openNode(this.tag,{iconSet:n.toStringAttribute(t.iconSet,\"3TrafficLights\"),reverse:n.toBoolAttribute(t.reverse,!1),showValue:n.toBoolAttribute(t.showValue,!0)}),t.cfvo.forEach((t=>{this.cfvoXform.render(e,t)})),e.closeNode()}createNewModel(e){let{attributes:t}=e;return{iconSet:n.toStringValue(t.iconSet,\"3TrafficLights\"),reverse:n.toBoolValue(t.reverse),showValue:n.toBoolValue(t.showValue),cfvo:[]}}onParserClose(e,t){this.model[e].push(t.model)}}},{\"../../base-xform\":32,\"../../composite-xform\":48,\"./cfvo-xform\":84}],92:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/utils\"),o=e(\"../base-xform\");t.exports=class extends o{get tag(){return\"col\"}prepare(e,t){const r=t.styles.addStyleModel(e.style||{});r&&(e.styleId=r)}render(e,t){e.openNode(\"col\"),e.addAttribute(\"min\",t.min),e.addAttribute(\"max\",t.max),t.width&&e.addAttribute(\"width\",t.width),t.styleId&&e.addAttribute(\"style\",t.styleId),t.hidden&&e.addAttribute(\"hidden\",\"1\"),t.bestFit&&e.addAttribute(\"bestFit\",\"1\"),t.outlineLevel&&e.addAttribute(\"outlineLevel\",t.outlineLevel),t.collapsed&&e.addAttribute(\"collapsed\",\"1\"),e.addAttribute(\"customWidth\",\"1\"),e.closeNode()}parseOpen(e){if(\"col\"===e.name){const t=this.model={min:parseInt(e.attributes.min||\"0\",10),max:parseInt(e.attributes.max||\"0\",10),width:void 0===e.attributes.width?void 0:parseFloat(e.attributes.width||\"0\")};return e.attributes.style&&(t.styleId=parseInt(e.attributes.style,10)),n.parseBoolean(e.attributes.hidden)&&(t.hidden=!0),n.parseBoolean(e.attributes.bestFit)&&(t.bestFit=!0),e.attributes.outlineLevel&&(t.outlineLevel=parseInt(e.attributes.outlineLevel,10)),n.parseBoolean(e.attributes.collapsed)&&(t.collapsed=!0),!0}return!1}parseText(){}parseClose(){return!1}reconcile(e,t){e.styleId&&(e.style=t.styles.getStyleModel(e.styleId))}}},{\"../../../utils/utils\":27,\"../base-xform\":32}],93:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/under-dash\"),o=e(\"../../../utils/utils\"),i=e(\"../../../utils/col-cache\"),a=e(\"../base-xform\"),s=e(\"../../../doc/range\");function l(e,t,r,n){const o=t[r];void 0!==o?e[r]=o:void 0!==n&&(e[r]=n)}function c(e,t,r,n){const i=t[r];void 0!==i?e[r]=o.parseBoolean(i):void 0!==n&&(e[r]=n)}t.exports=class extends a{get tag(){return\"dataValidations\"}render(e,t){const r=function(e){const t=n.map(e,((e,t)=>({address:t,dataValidation:e,marked:!1}))).sort(((e,t)=>n.strcmp(e.address,t.address))),r=n.keyBy(t,\"address\"),o=(t,r,o)=>{for(let a=0;a<r;a++){const r=i.encodeAddress(t.row+a,o);if(!e[r]||!n.isEqual(e[t.address],e[r]))return!1}return!0};return t.map((t=>{if(!t.marked){const a=i.decodeEx(t.address);if(a.dimensions)return r[a.dimensions].marked=!0,{...t.dataValidation,sqref:t.address};let s=1,l=i.encodeAddress(a.row+s,a.col);for(;e[l]&&n.isEqual(t.dataValidation,e[l]);)s++,l=i.encodeAddress(a.row+s,a.col);let c=1;for(;o(a,s,a.col+c);)c++;for(let e=0;e<s;e++)for(let t=0;t<c;t++)l=i.encodeAddress(a.row+e,a.col+t),r[l].marked=!0;if(s>1||c>1){const e=a.row+(s-1),r=a.col+(c-1);return{...t.dataValidation,sqref:`${t.address}:${i.encodeAddress(e,r)}`}}return{...t.dataValidation,sqref:t.address}}return null})).filter(Boolean)}(t);r.length&&(e.openNode(\"dataValidations\",{count:r.length}),r.forEach((t=>{e.openNode(\"dataValidation\"),\"any\"!==t.type&&(e.addAttribute(\"type\",t.type),t.operator&&\"list\"!==t.type&&\"between\"!==t.operator&&e.addAttribute(\"operator\",t.operator),t.allowBlank&&e.addAttribute(\"allowBlank\",\"1\")),t.showInputMessage&&e.addAttribute(\"showInputMessage\",\"1\"),t.promptTitle&&e.addAttribute(\"promptTitle\",t.promptTitle),t.prompt&&e.addAttribute(\"prompt\",t.prompt),t.showErrorMessage&&e.addAttribute(\"showErrorMessage\",\"1\"),t.errorStyle&&e.addAttribute(\"errorStyle\",t.errorStyle),t.errorTitle&&e.addAttribute(\"errorTitle\",t.errorTitle),t.error&&e.addAttribute(\"error\",t.error),e.addAttribute(\"sqref\",t.sqref),(t.formulae||[]).forEach(((r,n)=>{e.openNode(\"formula\"+(n+1)),\"date\"===t.type?e.writeText(o.dateToExcel(new Date(r))):e.writeText(r),e.closeNode()})),e.closeNode()})),e.closeNode())}parseOpen(e){switch(e.name){case\"dataValidations\":return this.model={},!0;case\"dataValidation\":{this._address=e.attributes.sqref;const t={type:e.attributes.type||\"any\",formulae:[]};switch(e.attributes.type&&c(t,e.attributes,\"allowBlank\"),c(t,e.attributes,\"showInputMessage\"),c(t,e.attributes,\"showErrorMessage\"),t.type){case\"any\":case\"list\":case\"custom\":break;default:l(t,e.attributes,\"operator\",\"between\")}return l(t,e.attributes,\"promptTitle\"),l(t,e.attributes,\"prompt\"),l(t,e.attributes,\"errorStyle\"),l(t,e.attributes,\"errorTitle\"),l(t,e.attributes,\"error\"),this._dataValidation=t,!0}case\"formula1\":case\"formula2\":return this._formula=[],!0;default:return!1}}parseText(e){this._formula&&this._formula.push(e)}parseClose(e){switch(e){case\"dataValidations\":return!1;case\"dataValidation\":return this._dataValidation.formulae&&this._dataValidation.formulae.length||(delete this._dataValidation.formulae,delete this._dataValidation.operator),(this._address.split(/\\s+/g)||[]).forEach((e=>{e.includes(\":\")?new s(e).forEachAddress((e=>{this.model[e]=this._dataValidation})):this.model[e]=this._dataValidation})),!0;case\"formula1\":case\"formula2\":{let e=this._formula.join(\"\");switch(this._dataValidation.type){case\"whole\":case\"textLength\":e=parseInt(e,10);break;case\"decimal\":e=parseFloat(e);break;case\"date\":e=o.excelToDate(parseFloat(e))}return this._dataValidation.formulae.push(e),this._formula=void 0,!0}default:return!0}}}},{\"../../../doc/range\":10,\"../../../utils/col-cache\":19,\"../../../utils/under-dash\":26,\"../../../utils/utils\":27,\"../base-xform\":32}],94:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{get tag(){return\"dimension\"}render(e,t){t&&e.leafNode(\"dimension\",{ref:t})}parseOpen(e){return\"dimension\"===e.name&&(this.model=e.attributes.ref,!0)}parseText(){}parseClose(){return!1}}},{\"../base-xform\":32}],95:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{get tag(){return\"drawing\"}render(e,t){t&&e.leafNode(this.tag,{\"r:id\":t.rId})}parseOpen(e){return e.name===this.tag&&(this.model={rId:e.attributes[\"r:id\"]},!0)}parseText(){}parseClose(){return!1}}},{\"../base-xform\":32}],96:[function(e,t,r){\"use strict\";const n=e(\"../composite-xform\"),o=e(\"./cf-ext/conditional-formattings-ext-xform\");class i extends n{constructor(){super(),this.map={\"x14:conditionalFormattings\":this.conditionalFormattings=new o}}get tag(){return\"ext\"}hasContent(e){return this.conditionalFormattings.hasContent(e.conditionalFormattings)}prepare(e,t){this.conditionalFormattings.prepare(e.conditionalFormattings,t)}render(e,t){e.openNode(\"ext\",{uri:\"{78C0D931-6437-407d-A8EE-F0AAD7539E65}\",\"xmlns:x14\":\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main\"}),this.conditionalFormattings.render(e,t.conditionalFormattings),e.closeNode()}createNewModel(){return{}}onParserClose(e,t){this.model[e]=t.model}}t.exports=class extends n{constructor(){super(),this.map={ext:this.ext=new i}}get tag(){return\"extLst\"}prepare(e,t){this.ext.prepare(e,t)}hasContent(e){return this.ext.hasContent(e)}render(e,t){this.hasContent(t)&&(e.openNode(\"extLst\"),this.ext.render(e,t),e.closeNode())}createNewModel(){return{}}onParserClose(e,t){Object.assign(this.model,t.model)}}},{\"../composite-xform\":48,\"./cf-ext/conditional-formattings-ext-xform\":78}],97:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{get tag(){return\"headerFooter\"}render(e,t){if(t){e.addRollback();let r=!1;e.openNode(\"headerFooter\"),t.differentFirst&&(e.addAttribute(\"differentFirst\",\"1\"),r=!0),t.differentOddEven&&(e.addAttribute(\"differentOddEven\",\"1\"),r=!0),t.oddHeader&&\"string\"==typeof t.oddHeader&&(e.leafNode(\"oddHeader\",null,t.oddHeader),r=!0),t.oddFooter&&\"string\"==typeof t.oddFooter&&(e.leafNode(\"oddFooter\",null,t.oddFooter),r=!0),t.evenHeader&&\"string\"==typeof t.evenHeader&&(e.leafNode(\"evenHeader\",null,t.evenHeader),r=!0),t.evenFooter&&\"string\"==typeof t.evenFooter&&(e.leafNode(\"evenFooter\",null,t.evenFooter),r=!0),t.firstHeader&&\"string\"==typeof t.firstHeader&&(e.leafNode(\"firstHeader\",null,t.firstHeader),r=!0),t.firstFooter&&\"string\"==typeof t.firstFooter&&(e.leafNode(\"firstFooter\",null,t.firstFooter),r=!0),r?(e.closeNode(),e.commit()):e.rollback()}}parseOpen(e){switch(e.name){case\"headerFooter\":return this.model={},e.attributes.differentFirst&&(this.model.differentFirst=1===parseInt(e.attributes.differentFirst,0)),e.attributes.differentOddEven&&(this.model.differentOddEven=1===parseInt(e.attributes.differentOddEven,0)),!0;case\"oddHeader\":return this.currentNode=\"oddHeader\",!0;case\"oddFooter\":return this.currentNode=\"oddFooter\",!0;case\"evenHeader\":return this.currentNode=\"evenHeader\",!0;case\"evenFooter\":return this.currentNode=\"evenFooter\",!0;case\"firstHeader\":return this.currentNode=\"firstHeader\",!0;case\"firstFooter\":return this.currentNode=\"firstFooter\",!0;default:return!1}}parseText(e){switch(this.currentNode){case\"oddHeader\":this.model.oddHeader=e;break;case\"oddFooter\":this.model.oddFooter=e;break;case\"evenHeader\":this.model.evenHeader=e;break;case\"evenFooter\":this.model.evenFooter=e;break;case\"firstHeader\":this.model.firstHeader=e;break;case\"firstFooter\":this.model.firstFooter=e}}parseClose(){switch(this.currentNode){case\"oddHeader\":case\"oddFooter\":case\"evenHeader\":case\"evenFooter\":case\"firstHeader\":case\"firstFooter\":return this.currentNode=void 0,!0;default:return!1}}}},{\"../base-xform\":32}],98:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{get tag(){return\"hyperlink\"}render(e,t){this.isInternalLink(t)?e.leafNode(\"hyperlink\",{ref:t.address,\"r:id\":t.rId,tooltip:t.tooltip,location:t.target}):e.leafNode(\"hyperlink\",{ref:t.address,\"r:id\":t.rId,tooltip:t.tooltip})}parseOpen(e){return\"hyperlink\"===e.name&&(this.model={address:e.attributes.ref,rId:e.attributes[\"r:id\"],tooltip:e.attributes.tooltip},e.attributes.location&&(this.model.target=e.attributes.location),!0)}parseText(){}parseClose(){return!1}isInternalLink(e){return e.target&&/^[^!]+![a-zA-Z]+[\\d]+$/.test(e.target)}}},{\"../base-xform\":32}],99:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{get tag(){return\"mergeCell\"}render(e,t){e.leafNode(\"mergeCell\",{ref:t})}parseOpen(e){return\"mergeCell\"===e.name&&(this.model=e.attributes.ref,!0)}parseText(){}parseClose(){return!1}}},{\"../base-xform\":32}],100:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/under-dash\"),o=e(\"../../../doc/range\"),i=e(\"../../../utils/col-cache\"),a=e(\"../../../doc/enums\");t.exports=class{constructor(){this.merges={}}add(e){if(this.merges[e.master])this.merges[e.master].expandToAddress(e.address);else{const t=`${e.master}:${e.address}`;this.merges[e.master]=new o(t)}}get mergeCells(){return n.map(this.merges,(e=>e.range))}reconcile(e,t){n.each(e,(e=>{const r=i.decode(e);for(let e=r.top;e<=r.bottom;e++){const n=t[e-1];for(let t=r.left;t<=r.right;t++){const o=n.cells[t-1];o?o.type===a.ValueType.Merge&&(o.master=r.tl):n.cells[t]={type:a.ValueType.Null,address:i.encodeAddress(e,t)}}}}))}getMasterAddress(e){const t=this.hash[e];return t&&t.tl}}},{\"../../../doc/enums\":7,\"../../../doc/range\":10,\"../../../utils/col-cache\":19,\"../../../utils/under-dash\":26}],101:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\"),o=e=>void 0!==e;t.exports=class extends n{get tag(){return\"outlinePr\"}render(e,t){return!(!t||!o(t.summaryBelow)&&!o(t.summaryRight)||(e.leafNode(this.tag,{summaryBelow:o(t.summaryBelow)?Number(t.summaryBelow):void 0,summaryRight:o(t.summaryRight)?Number(t.summaryRight):void 0}),0))}parseOpen(e){return e.name===this.tag&&(this.model={summaryBelow:o(e.attributes.summaryBelow)?Boolean(Number(e.attributes.summaryBelow)):void 0,summaryRight:o(e.attributes.summaryRight)?Boolean(Number(e.attributes.summaryRight)):void 0},!0)}parseText(){}parseClose(){return!1}}},{\"../base-xform\":32}],102:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{get tag(){return\"brk\"}render(e,t){e.leafNode(\"brk\",t)}parseOpen(e){return\"brk\"===e.name&&(this.model=e.attributes.ref,!0)}parseText(){}parseClose(){return!1}}},{\"../base-xform\":32}],103:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/under-dash\"),o=e(\"../base-xform\");t.exports=class extends o{get tag(){return\"pageMargins\"}render(e,t){if(t){const r={left:t.left,right:t.right,top:t.top,bottom:t.bottom,header:t.header,footer:t.footer};n.some(r,(e=>void 0!==e))&&e.leafNode(this.tag,r)}}parseOpen(e){return e.name===this.tag&&(this.model={left:parseFloat(e.attributes.left||.7),right:parseFloat(e.attributes.right||.7),top:parseFloat(e.attributes.top||.75),bottom:parseFloat(e.attributes.bottom||.75),header:parseFloat(e.attributes.header||.3),footer:parseFloat(e.attributes.footer||.3)},!0)}parseText(){}parseClose(){return!1}}},{\"../../../utils/under-dash\":26,\"../base-xform\":32}],104:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{get tag(){return\"pageSetUpPr\"}render(e,t){return!(!t||!t.fitToPage||(e.leafNode(this.tag,{fitToPage:t.fitToPage?\"1\":void 0}),0))}parseOpen(e){return e.name===this.tag&&(this.model={fitToPage:\"1\"===e.attributes.fitToPage},!0)}parseText(){}parseClose(){return!1}}},{\"../base-xform\":32}],105:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/under-dash\"),o=e(\"../base-xform\");function i(e){return e?\"1\":void 0}function a(e){if(\"overThenDown\"===e)return e}function s(e){switch(e){case\"atEnd\":case\"asDisplyed\":return e;default:return}}function l(e){switch(e){case\"dash\":case\"blank\":case\"NA\":return e;default:return}}t.exports=class extends o{get tag(){return\"pageSetup\"}render(e,t){if(t){const r={paperSize:t.paperSize,orientation:t.orientation,horizontalDpi:t.horizontalDpi,verticalDpi:t.verticalDpi,pageOrder:a(t.pageOrder),blackAndWhite:i(t.blackAndWhite),draft:i(t.draft),cellComments:s(t.cellComments),errors:l(t.errors),scale:t.scale,fitToWidth:t.fitToWidth,fitToHeight:t.fitToHeight,firstPageNumber:t.firstPageNumber,useFirstPageNumber:i(t.firstPageNumber),usePrinterDefaults:i(t.usePrinterDefaults),copies:t.copies};n.some(r,(e=>void 0!==e))&&e.leafNode(this.tag,r)}}parseOpen(e){return e.name===this.tag&&(this.model={paperSize:(t=e.attributes.paperSize,void 0!==t?parseInt(t,10):void 0),orientation:e.attributes.orientation||\"portrait\",horizontalDpi:parseInt(e.attributes.horizontalDpi||\"4294967295\",10),verticalDpi:parseInt(e.attributes.verticalDpi||\"4294967295\",10),pageOrder:e.attributes.pageOrder||\"downThenOver\",blackAndWhite:\"1\"===e.attributes.blackAndWhite,draft:\"1\"===e.attributes.draft,cellComments:e.attributes.cellComments||\"None\",errors:e.attributes.errors||\"displayed\",scale:parseInt(e.attributes.scale||\"100\",10),fitToWidth:parseInt(e.attributes.fitToWidth||\"1\",10),fitToHeight:parseInt(e.attributes.fitToHeight||\"1\",10),firstPageNumber:parseInt(e.attributes.firstPageNumber||\"1\",10),useFirstPageNumber:\"1\"===e.attributes.useFirstPageNumber,usePrinterDefaults:\"1\"===e.attributes.usePrinterDefaults,copies:parseInt(e.attributes.copies||\"1\",10)},!0);var t}parseText(){}parseClose(){return!1}}},{\"../../../utils/under-dash\":26,\"../base-xform\":32}],106:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{get tag(){return\"picture\"}render(e,t){t&&e.leafNode(this.tag,{\"r:id\":t.rId})}parseOpen(e){return e.name===this.tag&&(this.model={rId:e.attributes[\"r:id\"]},!0)}parseText(){}parseClose(){return!1}}},{\"../base-xform\":32}],107:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/under-dash\"),o=e(\"../base-xform\");function i(e){return e?\"1\":void 0}t.exports=class extends o{get tag(){return\"printOptions\"}render(e,t){if(t){const r={headings:i(t.showRowColHeaders),gridLines:i(t.showGridLines),horizontalCentered:i(t.horizontalCentered),verticalCentered:i(t.verticalCentered)};n.some(r,(e=>void 0!==e))&&e.leafNode(this.tag,r)}}parseOpen(e){return e.name===this.tag&&(this.model={showRowColHeaders:\"1\"===e.attributes.headings,showGridLines:\"1\"===e.attributes.gridLines,horizontalCentered:\"1\"===e.attributes.horizontalCentered,verticalCentered:\"1\"===e.attributes.verticalCentered},!0)}parseText(){}parseClose(){return!1}}},{\"../../../utils/under-dash\":26,\"../base-xform\":32}],108:[function(e,t,r){\"use strict\";const n=e(\"./page-breaks-xform\"),o=e(\"../list-xform\");t.exports=class extends o{constructor(){super({tag:\"rowBreaks\",count:!0,childXform:new n})}render(e,t){if(t&&t.length){e.openNode(this.tag,this.$),this.count&&(e.addAttribute(this.$count,t.length),e.addAttribute(\"manualBreakCount\",t.length));const{childXform:r}=this;t.forEach((t=>{r.render(e,t)})),e.closeNode()}else this.empty&&e.leafNode(this.tag)}}},{\"../list-xform\":71,\"./page-breaks-xform\":102}],109:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\"),o=e(\"../../../utils/utils\"),i=e(\"./cell-xform\");t.exports=class extends n{constructor(e){super(),this.maxItems=e&&e.maxItems,this.map={c:new i}}get tag(){return\"row\"}prepare(e,t){const r=t.styles.addStyleModel(e.style);r&&(e.styleId=r);const n=this.map.c;e.cells.forEach((e=>{n.prepare(e,t)}))}render(e,t,r){e.openNode(\"row\"),e.addAttribute(\"r\",t.number),t.height&&(e.addAttribute(\"ht\",t.height),e.addAttribute(\"customHeight\",\"1\")),t.hidden&&e.addAttribute(\"hidden\",\"1\"),t.min>0&&t.max>0&&t.min<=t.max&&e.addAttribute(\"spans\",`${t.min}:${t.max}`),t.styleId&&(e.addAttribute(\"s\",t.styleId),e.addAttribute(\"customFormat\",\"1\")),e.addAttribute(\"x14ac:dyDescent\",\"0.25\"),t.outlineLevel&&e.addAttribute(\"outlineLevel\",t.outlineLevel),t.collapsed&&e.addAttribute(\"collapsed\",\"1\");const n=this.map.c;t.cells.forEach((t=>{n.render(e,t,r)})),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;if(\"row\"===e.name){this.numRowsSeen+=1;const t=e.attributes.spans?e.attributes.spans.split(\":\").map((e=>parseInt(e,10))):[void 0,void 0],r=this.model={number:parseInt(e.attributes.r,10),min:t[0],max:t[1],cells:[]};return e.attributes.s&&(r.styleId=parseInt(e.attributes.s,10)),o.parseBoolean(e.attributes.hidden)&&(r.hidden=!0),o.parseBoolean(e.attributes.bestFit)&&(r.bestFit=!0),e.attributes.ht&&(r.height=parseFloat(e.attributes.ht)),e.attributes.outlineLevel&&(r.outlineLevel=parseInt(e.attributes.outlineLevel,10)),o.parseBoolean(e.attributes.collapsed)&&(r.collapsed=!0),!0}return this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0)}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser){if(!this.parser.parseClose(e)){if(this.model.cells.push(this.parser.model),this.maxItems&&this.model.cells.length>this.maxItems)throw new Error(`Max column count (${this.maxItems}) exceeded`);this.parser=void 0}return!0}return!1}reconcile(e,t){e.style=e.styleId?t.styles.getStyleModel(e.styleId):{},void 0!==e.styleId&&(e.styleId=void 0);const r=this.map.c;e.cells.forEach((e=>{r.reconcile(e,t)}))}}},{\"../../../utils/utils\":27,\"../base-xform\":32,\"./cell-xform\":73}],110:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/under-dash\"),o=e(\"../base-xform\");t.exports=class extends o{get tag(){return\"sheetFormatPr\"}render(e,t){if(t){const r={defaultRowHeight:t.defaultRowHeight,outlineLevelRow:t.outlineLevelRow,outlineLevelCol:t.outlineLevelCol,\"x14ac:dyDescent\":t.dyDescent};t.defaultColWidth&&(r.defaultColWidth=t.defaultColWidth),t.defaultRowHeight&&15===t.defaultRowHeight||(r.customHeight=\"1\"),n.some(r,(e=>void 0!==e))&&e.leafNode(\"sheetFormatPr\",r)}}parseOpen(e){return\"sheetFormatPr\"===e.name&&(this.model={defaultRowHeight:parseFloat(e.attributes.defaultRowHeight||\"0\"),dyDescent:parseFloat(e.attributes[\"x14ac:dyDescent\"]||\"0\"),outlineLevelRow:parseInt(e.attributes.outlineLevelRow||\"0\",10),outlineLevelCol:parseInt(e.attributes.outlineLevelCol||\"0\",10)},e.attributes.defaultColWidth&&(this.model.defaultColWidth=parseFloat(e.attributes.defaultColWidth)),!0)}parseText(){}parseClose(){return!1}}},{\"../../../utils/under-dash\":26,\"../base-xform\":32}],111:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\"),o=e(\"../style/color-xform\"),i=e(\"./page-setup-properties-xform\"),a=e(\"./outline-properties-xform\");t.exports=class extends n{constructor(){super(),this.map={tabColor:new o(\"tabColor\"),pageSetUpPr:new i,outlinePr:new a}}get tag(){return\"sheetPr\"}render(e,t){if(t){e.addRollback(),e.openNode(\"sheetPr\");let r=!1;r=this.map.tabColor.render(e,t.tabColor)||r,r=this.map.pageSetUpPr.render(e,t.pageSetup)||r,r=this.map.outlinePr.render(e,t.outlineProperties)||r,r?(e.closeNode(),e.commit()):e.rollback()}}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):e.name===this.tag?(this.reset(),!0):!!this.map[e.name]&&(this.parser=this.map[e.name],this.parser.parseOpen(e),!0)}parseText(e){return!!this.parser&&(this.parser.parseText(e),!0)}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):(this.map.tabColor.model||this.map.pageSetUpPr.model||this.map.outlinePr.model?(this.model={},this.map.tabColor.model&&(this.model.tabColor=this.map.tabColor.model),this.map.pageSetUpPr.model&&(this.model.pageSetup=this.map.pageSetUpPr.model),this.map.outlinePr.model&&(this.model.outlineProperties=this.map.outlinePr.model)):this.model=null,!1)}}},{\"../base-xform\":32,\"../style/color-xform\":128,\"./outline-properties-xform\":101,\"./page-setup-properties-xform\":104}],112:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/under-dash\"),o=e(\"../base-xform\");function i(e,t){return e?t:void 0}function a(e,t){return e===t||void 0}t.exports=class extends o{get tag(){return\"sheetProtection\"}render(e,t){if(t){const r={sheet:i(t.sheet,\"1\"),selectLockedCells:!1===t.selectLockedCells?\"1\":void 0,selectUnlockedCells:!1===t.selectUnlockedCells?\"1\":void 0,formatCells:i(t.formatCells,\"0\"),formatColumns:i(t.formatColumns,\"0\"),formatRows:i(t.formatRows,\"0\"),insertColumns:i(t.insertColumns,\"0\"),insertRows:i(t.insertRows,\"0\"),insertHyperlinks:i(t.insertHyperlinks,\"0\"),deleteColumns:i(t.deleteColumns,\"0\"),deleteRows:i(t.deleteRows,\"0\"),sort:i(t.sort,\"0\"),autoFilter:i(t.autoFilter,\"0\"),pivotTables:i(t.pivotTables,\"0\")};t.sheet&&(r.algorithmName=t.algorithmName,r.hashValue=t.hashValue,r.saltValue=t.saltValue,r.spinCount=t.spinCount,r.objects=i(!1===t.objects,\"1\"),r.scenarios=i(!1===t.scenarios,\"1\")),n.some(r,(e=>void 0!==e))&&e.leafNode(this.tag,r)}}parseOpen(e){return e.name===this.tag&&(this.model={sheet:a(e.attributes.sheet,\"1\"),objects:\"1\"!==e.attributes.objects&&void 0,scenarios:\"1\"!==e.attributes.scenarios&&void 0,selectLockedCells:\"1\"!==e.attributes.selectLockedCells&&void 0,selectUnlockedCells:\"1\"!==e.attributes.selectUnlockedCells&&void 0,formatCells:a(e.attributes.formatCells,\"0\"),formatColumns:a(e.attributes.formatColumns,\"0\"),formatRows:a(e.attributes.formatRows,\"0\"),insertColumns:a(e.attributes.insertColumns,\"0\"),insertRows:a(e.attributes.insertRows,\"0\"),insertHyperlinks:a(e.attributes.insertHyperlinks,\"0\"),deleteColumns:a(e.attributes.deleteColumns,\"0\"),deleteRows:a(e.attributes.deleteRows,\"0\"),sort:a(e.attributes.sort,\"0\"),autoFilter:a(e.attributes.autoFilter,\"0\"),pivotTables:a(e.attributes.pivotTables,\"0\")},e.attributes.algorithmName&&(this.model.algorithmName=e.attributes.algorithmName,this.model.hashValue=e.attributes.hashValue,this.model.saltValue=e.attributes.saltValue,this.model.spinCount=parseInt(e.attributes.spinCount,10)),!0)}parseText(){}parseClose(){return!1}}},{\"../../../utils/under-dash\":26,\"../base-xform\":32}],113:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/col-cache\"),o=e(\"../base-xform\"),i={frozen:\"frozen\",frozenSplit:\"frozen\",split:\"split\"};t.exports=class extends o{get tag(){return\"sheetView\"}prepare(e){switch(e.state){case\"frozen\":case\"split\":break;default:e.state=\"normal\"}}render(e,t){e.openNode(\"sheetView\",{workbookViewId:t.workbookViewId||0});const r=function(t,r,n){n&&e.addAttribute(t,r)};let o,i,a,s;switch(r(\"rightToLeft\",\"1\",!0===t.rightToLeft),r(\"tabSelected\",\"1\",t.tabSelected),r(\"showRuler\",\"0\",!1===t.showRuler),r(\"showRowColHeaders\",\"0\",!1===t.showRowColHeaders),r(\"showGridLines\",\"0\",!1===t.showGridLines),r(\"zoomScale\",t.zoomScale,t.zoomScale),r(\"zoomScaleNormal\",t.zoomScaleNormal,t.zoomScaleNormal),r(\"view\",t.style,t.style),t.state){case\"frozen\":i=t.xSplit||0,a=t.ySplit||0,o=t.topLeftCell||n.getAddress(a+1,i+1).address,s=(t.xSplit&&t.ySplit?\"bottomRight\":t.xSplit&&\"topRight\")||\"bottomLeft\",e.leafNode(\"pane\",{xSplit:t.xSplit||void 0,ySplit:t.ySplit||void 0,topLeftCell:o,activePane:s,state:\"frozen\"}),e.leafNode(\"selection\",{pane:s,activeCell:t.activeCell,sqref:t.activeCell});break;case\"split\":\"topLeft\"===t.activePane&&(t.activePane=void 0),e.leafNode(\"pane\",{xSplit:t.xSplit||void 0,ySplit:t.ySplit||void 0,topLeftCell:t.topLeftCell,activePane:t.activePane}),e.leafNode(\"selection\",{pane:t.activePane,activeCell:t.activeCell,sqref:t.activeCell});break;case\"normal\":t.activeCell&&e.leafNode(\"selection\",{activeCell:t.activeCell,sqref:t.activeCell})}e.closeNode()}parseOpen(e){switch(e.name){case\"sheetView\":return this.sheetView={workbookViewId:parseInt(e.attributes.workbookViewId,10),rightToLeft:\"1\"===e.attributes.rightToLeft,tabSelected:\"1\"===e.attributes.tabSelected,showRuler:!(\"0\"===e.attributes.showRuler),showRowColHeaders:!(\"0\"===e.attributes.showRowColHeaders),showGridLines:!(\"0\"===e.attributes.showGridLines),zoomScale:parseInt(e.attributes.zoomScale||\"100\",10),zoomScaleNormal:parseInt(e.attributes.zoomScaleNormal||\"100\",10),style:e.attributes.view},this.pane=void 0,this.selections={},!0;case\"pane\":return this.pane={xSplit:parseInt(e.attributes.xSplit||\"0\",10),ySplit:parseInt(e.attributes.ySplit||\"0\",10),topLeftCell:e.attributes.topLeftCell,activePane:e.attributes.activePane||\"topLeft\",state:e.attributes.state},!0;case\"selection\":{const t=e.attributes.pane||\"topLeft\";return this.selections[t]={pane:t,activeCell:e.attributes.activeCell},!0}default:return!1}}parseText(){}parseClose(e){let t,r;return\"sheetView\"!==e||(this.sheetView&&this.pane?(t=this.model={workbookViewId:this.sheetView.workbookViewId,rightToLeft:this.sheetView.rightToLeft,state:i[this.pane.state]||\"split\",xSplit:this.pane.xSplit,ySplit:this.pane.ySplit,topLeftCell:this.pane.topLeftCell,showRuler:this.sheetView.showRuler,showRowColHeaders:this.sheetView.showRowColHeaders,showGridLines:this.sheetView.showGridLines,zoomScale:this.sheetView.zoomScale,zoomScaleNormal:this.sheetView.zoomScaleNormal},\"split\"===this.model.state&&(t.activePane=this.pane.activePane),r=this.selections[this.pane.activePane],r&&r.activeCell&&(t.activeCell=r.activeCell),this.sheetView.style&&(t.style=this.sheetView.style)):(t=this.model={workbookViewId:this.sheetView.workbookViewId,rightToLeft:this.sheetView.rightToLeft,state:\"normal\",showRuler:this.sheetView.showRuler,showRowColHeaders:this.sheetView.showRowColHeaders,showGridLines:this.sheetView.showGridLines,zoomScale:this.sheetView.zoomScale,zoomScaleNormal:this.sheetView.zoomScaleNormal},r=this.selections.topLeft,r&&r.activeCell&&(t.activeCell=r.activeCell),this.sheetView.style&&(t.style=this.sheetView.style)),!1)}reconcile(){}}},{\"../../../utils/col-cache\":19,\"../base-xform\":32}],114:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{get tag(){return\"tablePart\"}render(e,t){t&&e.leafNode(this.tag,{\"r:id\":t.rId})}parseOpen(e){return e.name===this.tag&&(this.model={rId:e.attributes[\"r:id\"]},!0)}parseText(){}parseClose(){return!1}}},{\"../base-xform\":32}],115:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/under-dash\"),o=e(\"../../../utils/col-cache\"),i=e(\"../../../utils/xml-stream\"),a=e(\"../../rel-type\"),s=e(\"./merges\"),l=e(\"../base-xform\"),c=e(\"../list-xform\"),u=e(\"./row-xform\"),d=e(\"./col-xform\"),f=e(\"./dimension-xform\"),h=e(\"./hyperlink-xform\"),p=e(\"./merge-cell-xform\"),m=e(\"./data-validations-xform\"),g=e(\"./sheet-properties-xform\"),v=e(\"./sheet-format-properties-xform\"),b=e(\"./sheet-view-xform\"),y=e(\"./sheet-protection-xform\"),w=e(\"./page-margins-xform\"),x=e(\"./page-setup-xform\"),S=e(\"./print-options-xform\"),C=e(\"./auto-filter-xform\"),k=e(\"./picture-xform\"),E=e(\"./drawing-xform\"),O=e(\"./table-part-xform\"),A=e(\"./row-breaks-xform\"),T=e(\"./header-footer-xform\"),j=e(\"./cf/conditional-formattings-xform\"),P=e(\"./ext-lst-xform\");class M extends l{constructor(e){super();const{maxRows:t,maxCols:r,ignoreNodes:n}=e||{};this.ignoreNodes=n||[],this.map={sheetPr:new g,dimension:new f,sheetViews:new c({tag:\"sheetViews\",count:!1,childXform:new b}),sheetFormatPr:new v,cols:new c({tag:\"cols\",count:!1,childXform:new d}),sheetData:new c({tag:\"sheetData\",count:!1,empty:!0,childXform:new u({maxItems:r}),maxItems:t}),autoFilter:new C,mergeCells:new c({tag:\"mergeCells\",count:!0,childXform:new p}),rowBreaks:new A,hyperlinks:new c({tag:\"hyperlinks\",count:!1,childXform:new h}),pageMargins:new w,dataValidations:new m,pageSetup:new x,headerFooter:new T,printOptions:new S,picture:new k,drawing:new E,sheetProtection:new y,tableParts:new c({tag:\"tableParts\",count:!0,childXform:new O}),conditionalFormatting:new j,extLst:new P}}prepare(e,t){t.merges=new s,e.hyperlinks=t.hyperlinks=[],e.comments=t.comments=[],t.formulae={},t.siFormulae=0,this.map.cols.prepare(e.cols,t),this.map.sheetData.prepare(e.rows,t),this.map.conditionalFormatting.prepare(e.conditionalFormattings,t),e.mergeCells=t.merges.mergeCells;const r=e.rels=[];function n(e){return\"rId\"+(e.length+1)}if(e.hyperlinks.forEach((e=>{const t=n(r);e.rId=t,r.push({Id:t,Type:a.Hyperlink,Target:e.target,TargetMode:\"External\"})})),e.comments.length>0){const i={Id:n(r),Type:a.Comments,Target:`../comments${e.id}.xml`};r.push(i);const s={Id:n(r),Type:a.VmlDrawing,Target:`../drawings/vmlDrawing${e.id}.vml`};r.push(s),e.comments.forEach((e=>{e.refAddress=o.decodeAddress(e.ref)})),t.commentRefs.push({commentName:\"comments\"+e.id,vmlDrawing:\"vmlDrawing\"+e.id})}const i=[];let l;e.media.forEach((o=>{if(\"background\"===o.type){const i=n(r);l=t.media[o.imageId],r.push({Id:i,Type:a.Image,Target:`../media/${l.name}.${l.extension}`}),e.background={rId:i},e.image=t.media[o.imageId]}else if(\"image\"===o.type){let{drawing:s}=e;l=t.media[o.imageId],s||(s=e.drawing={rId:n(r),name:\"drawing\"+ ++t.drawingsCount,anchors:[],rels:[]},t.drawings.push(s),r.push({Id:s.rId,Type:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\",Target:`../drawings/${s.name}.xml`}));let c=this.preImageId===o.imageId?i[o.imageId]:i[s.rels.length];c||(c=n(s.rels),i[s.rels.length]=c,s.rels.push({Id:c,Type:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",Target:`../media/${l.name}.${l.extension}`}));const u={picture:{rId:c},range:o.range};if(o.hyperlinks&&o.hyperlinks.hyperlink){const e=n(s.rels);i[s.rels.length]=e,u.picture.hyperlinks={tooltip:o.hyperlinks.tooltip,rId:e},s.rels.push({Id:e,Type:a.Hyperlink,Target:o.hyperlinks.hyperlink,TargetMode:\"External\"})}this.preImageId=o.imageId,s.anchors.push(u)}})),e.tables.forEach((e=>{const o=n(r);e.rId=o,r.push({Id:o,Type:a.Table,Target:\"../tables/\"+e.target}),e.columns.forEach((e=>{const{style:r}=e;r&&(e.dxfId=t.styles.addDxfStyle(r))}))})),this.map.extLst.prepare(e,t)}render(e,t){e.openXml(i.StdDocAttributes),e.openNode(\"worksheet\",M.WORKSHEET_ATTRIBUTES);const r=t.properties?{defaultRowHeight:t.properties.defaultRowHeight,dyDescent:t.properties.dyDescent,outlineLevelCol:t.properties.outlineLevelCol,outlineLevelRow:t.properties.outlineLevelRow}:void 0;t.properties&&t.properties.defaultColWidth&&(r.defaultColWidth=t.properties.defaultColWidth);const n={outlineProperties:t.properties&&t.properties.outlineProperties,tabColor:t.properties&&t.properties.tabColor,pageSetup:t.pageSetup&&t.pageSetup.fitToPage?{fitToPage:t.pageSetup.fitToPage}:void 0},o=t.pageSetup&&t.pageSetup.margins,s={showRowColHeaders:t.pageSetup&&t.pageSetup.showRowColHeaders,showGridLines:t.pageSetup&&t.pageSetup.showGridLines,horizontalCentered:t.pageSetup&&t.pageSetup.horizontalCentered,verticalCentered:t.pageSetup&&t.pageSetup.verticalCentered},l=t.sheetProtection;this.map.sheetPr.render(e,n),this.map.dimension.render(e,t.dimensions),this.map.sheetViews.render(e,t.views),this.map.sheetFormatPr.render(e,r),this.map.cols.render(e,t.cols),this.map.sheetData.render(e,t.rows),this.map.sheetProtection.render(e,l),this.map.autoFilter.render(e,t.autoFilter),this.map.mergeCells.render(e,t.mergeCells),this.map.conditionalFormatting.render(e,t.conditionalFormattings),this.map.dataValidations.render(e,t.dataValidations),this.map.hyperlinks.render(e,t.hyperlinks),this.map.printOptions.render(e,s),this.map.pageMargins.render(e,o),this.map.pageSetup.render(e,t.pageSetup),this.map.headerFooter.render(e,t.headerFooter),this.map.rowBreaks.render(e,t.rowBreaks),this.map.drawing.render(e,t.drawing),this.map.picture.render(e,t.background),this.map.tableParts.render(e,t.tables),this.map.extLst.render(e,t),t.rels&&t.rels.forEach((t=>{t.Type===a.VmlDrawing&&e.leafNode(\"legacyDrawing\",{\"r:id\":t.Id})})),e.closeNode()}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):\"worksheet\"===e.name?(n.each(this.map,(e=>{e.reset()})),!0):(this.map[e.name]&&!this.ignoreNodes.includes(e.name)&&(this.parser=this.map[e.name],this.parser.parseOpen(e)),!0)}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;if(\"worksheet\"===e){const e=this.map.sheetFormatPr.model||{};this.map.sheetPr.model&&this.map.sheetPr.model.tabColor&&(e.tabColor=this.map.sheetPr.model.tabColor),this.map.sheetPr.model&&this.map.sheetPr.model.outlineProperties&&(e.outlineProperties=this.map.sheetPr.model.outlineProperties);const t={fitToPage:this.map.sheetPr.model&&this.map.sheetPr.model.pageSetup&&this.map.sheetPr.model.pageSetup.fitToPage||!1,margins:this.map.pageMargins.model},r=Object.assign(t,this.map.pageSetup.model,this.map.printOptions.model),n=((e,t)=>{if(!t||!t.length)return e;if(!e||!e.length)return t;const r={},n={};return e.forEach((e=>{r[e.ref]=e,e.rules.forEach((e=>{const{x14Id:t}=e;t&&(n[t]=e)}))})),t.forEach((t=>{t.rules.forEach((o=>{const i=n[o.x14Id];i?((e,t)=>{Object.keys(t).forEach((r=>{const n=e[r],o=t[r];void 0===n&&void 0!==o&&(e[r]=o)}))})(i,o):r[t.ref]?r[t.ref].rules.push(o):e.push({ref:t.ref,rules:[o]})}))})),e})(this.map.conditionalFormatting.model,this.map.extLst.model&&this.map.extLst.model[\"x14:conditionalFormattings\"]);return this.model={dimensions:this.map.dimension.model,cols:this.map.cols.model,rows:this.map.sheetData.model,mergeCells:this.map.mergeCells.model,hyperlinks:this.map.hyperlinks.model,dataValidations:this.map.dataValidations.model,properties:e,views:this.map.sheetViews.model,pageSetup:r,headerFooter:this.map.headerFooter.model,background:this.map.picture.model,drawing:this.map.drawing.model,tables:this.map.tableParts.model,conditionalFormattings:n},this.map.autoFilter.model&&(this.model.autoFilter=this.map.autoFilter.model),this.map.sheetProtection.model&&(this.model.sheetProtection=this.map.sheetProtection.model),!1}return!0}reconcile(e,t){const r=(e.relationships||[]).reduce(((r,n)=>{if(r[n.Id]=n,n.Type===a.Comments&&(e.comments=t.comments[n.Target].comments),n.Type===a.VmlDrawing&&e.comments&&e.comments.length){const r=t.vmlDrawings[n.Target].comments;e.comments.forEach(((e,t)=>{e.note=Object.assign({},e.note,r[t])}))}return r}),{});if(t.commentsMap=(e.comments||[]).reduce(((e,t)=>(t.ref&&(e[t.ref]=t),e)),{}),t.hyperlinkMap=(e.hyperlinks||[]).reduce(((e,t)=>(t.rId&&(e[t.address]=r[t.rId].Target),e)),{}),t.formulae={},e.rows=e.rows&&e.rows.filter(Boolean)||[],e.rows.forEach((e=>{e.cells=e.cells&&e.cells.filter(Boolean)||[]})),this.map.cols.reconcile(e.cols,t),this.map.sheetData.reconcile(e.rows,t),this.map.conditionalFormatting.reconcile(e.conditionalFormattings,t),e.media=[],e.drawing){const n=r[e.drawing.rId].Target.match(/\\/drawings\\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/);if(n){const r=n[1];t.drawings[r].anchors.forEach((t=>{if(t.medium){const r={type:\"image\",imageId:t.medium.index,range:t.range,hyperlinks:t.picture.hyperlinks};e.media.push(r)}}))}}const n=e.background&&r[e.background.rId];if(n){const r=n.Target.split(\"/media/\")[1],o=t.mediaIndex&&t.mediaIndex[r];void 0!==o&&e.media.push({type:\"background\",imageId:o})}e.tables=(e.tables||[]).map((e=>{const n=r[e.rId];return t.tables[n.Target]})),delete e.relationships,delete e.hyperlinks,delete e.comments}}M.WORKSHEET_ATTRIBUTES={xmlns:\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\"xmlns:r\":\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\"xmlns:mc\":\"http://schemas.openxmlformats.org/markup-compatibility/2006\",\"mc:Ignorable\":\"x14ac\",\"xmlns:x14ac\":\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\"},t.exports=M},{\"../../../utils/col-cache\":19,\"../../../utils/under-dash\":26,\"../../../utils/xml-stream\":28,\"../../rel-type\":31,\"../base-xform\":32,\"../list-xform\":71,\"./auto-filter-xform\":72,\"./cf/conditional-formattings-xform\":87,\"./col-xform\":92,\"./data-validations-xform\":93,\"./dimension-xform\":94,\"./drawing-xform\":95,\"./ext-lst-xform\":96,\"./header-footer-xform\":97,\"./hyperlink-xform\":98,\"./merge-cell-xform\":99,\"./merges\":100,\"./page-margins-xform\":103,\"./page-setup-xform\":105,\"./picture-xform\":106,\"./print-options-xform\":107,\"./row-breaks-xform\":108,\"./row-xform\":109,\"./sheet-format-properties-xform\":110,\"./sheet-properties-xform\":111,\"./sheet-protection-xform\":112,\"./sheet-view-xform\":113,\"./table-part-xform\":114}],116:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{constructor(e){super(),this.tag=e.tag,this.attr=e.attr}render(e,t){t&&(e.openNode(this.tag),e.closeNode())}parseOpen(e){e.name===this.tag&&(this.model=!0)}parseText(){}parseClose(){return!1}}},{\"../base-xform\":32}],117:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{constructor(e){super(),this.tag=e.tag,this.attr=e.attr,this.attrs=e.attrs,this._format=e.format||function(e){try{return Number.isNaN(e.getTime())?\"\":e.toISOString()}catch(e){return\"\"}},this._parse=e.parse||function(e){return new Date(e)}}render(e,t){t&&(e.openNode(this.tag),this.attrs&&e.addAttributes(this.attrs),this.attr?e.addAttribute(this.attr,this._format(t)):e.writeText(this._format(t)),e.closeNode())}parseOpen(e){e.name===this.tag&&(this.attr?this.model=this._parse(e.attributes[this.attr]):this.text=[])}parseText(e){this.attr||this.text.push(e)}parseClose(){return this.attr||(this.model=this._parse(this.text.join(\"\"))),!1}}},{\"../base-xform\":32}],118:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{constructor(e){super(),this.tag=e.tag,this.attr=e.attr,this.attrs=e.attrs,this.zero=e.zero}render(e,t){(t||this.zero)&&(e.openNode(this.tag),this.attrs&&e.addAttributes(this.attrs),this.attr?e.addAttribute(this.attr,t):e.writeText(t),e.closeNode())}parseOpen(e){return e.name===this.tag&&(this.attr?this.model=parseInt(e.attributes[this.attr],10):this.text=[],!0)}parseText(e){this.attr||this.text.push(e)}parseClose(){return this.attr||(this.model=parseInt(this.text.join(\"\")||0,10)),!1}}},{\"../base-xform\":32}],119:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{constructor(e){super(),this.tag=e.tag,this.attr=e.attr,this.attrs=e.attrs}render(e,t){void 0!==t&&(e.openNode(this.tag),this.attrs&&e.addAttributes(this.attrs),this.attr?e.addAttribute(this.attr,t):e.writeText(t),e.closeNode())}parseOpen(e){e.name===this.tag&&(this.attr?this.model=e.attributes[this.attr]:this.text=[])}parseText(e){this.attr||this.text.push(e)}parseClose(){return this.attr||(this.model=this.text.join(\"\")),!1}}},{\"../base-xform\":32}],120:[function(e,t,r){\"use strict\";const n=e(\"./base-xform\"),o=e(\"../../utils/xml-stream\");t.exports=class extends n{constructor(e){super(),this._model=e}render(e){if(!this._xml){const e=new o;!function e(t,r){t.openNode(r.tag,r.$),r.c&&r.c.forEach((r=>{e(t,r)})),r.t&&t.writeText(r.t),t.closeNode()}(e,this._model),this._xml=e.xml}e.writeXml(this._xml)}parseOpen(){return!0}parseText(){}parseClose(e){return e!==this._model.tag}}},{\"../../utils/xml-stream\":28,\"./base-xform\":32}],121:[function(e,t,r){\"use strict\";const n=e(\"./text-xform\"),o=e(\"./rich-text-xform\"),i=e(\"../base-xform\");t.exports=class extends i{constructor(){super(),this.map={r:new o,t:new n}}get tag(){return\"rPh\"}render(e,t){if(e.openNode(this.tag,{sb:t.sb||0,eb:t.eb||0}),t&&t.hasOwnProperty(\"richText\")&&t.richText){const{r}=this.map;t.richText.forEach((t=>{r.render(e,t)}))}else t&&this.map.t.render(e,t.text);e.closeNode()}parseOpen(e){const{name:t}=e;return this.parser?(this.parser.parseOpen(e),!0):t===this.tag?(this.model={sb:parseInt(e.attributes.sb,10),eb:parseInt(e.attributes.eb,10)},!0):(this.parser=this.map[t],!!this.parser&&(this.parser.parseOpen(e),!0))}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser){if(!this.parser.parseClose(e)){switch(e){case\"r\":{let e=this.model.richText;e||(e=this.model.richText=[]),e.push(this.parser.model);break}case\"t\":this.model.text=this.parser.model}this.parser=void 0}return!0}return e!==this.tag}}},{\"../base-xform\":32,\"./rich-text-xform\":122,\"./text-xform\":125}],122:[function(e,t,r){\"use strict\";const n=e(\"./text-xform\"),o=e(\"../style/font-xform\"),i=e(\"../base-xform\");class a extends i{constructor(e){super(),this.model=e}get tag(){return\"r\"}get textXform(){return this._textXform||(this._textXform=new n)}get fontXform(){return this._fontXform||(this._fontXform=new o(a.FONT_OPTIONS))}render(e,t){t=t||this.model,e.openNode(\"r\"),t.font&&this.fontXform.render(e,t.font),this.textXform.render(e,t.text),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"r\":return this.model={},!0;case\"t\":return this.parser=this.textXform,this.parser.parseOpen(e),!0;case\"rPr\":return this.parser=this.fontXform,this.parser.parseOpen(e),!0;default:return!1}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){switch(e){case\"r\":return!1;case\"t\":return this.model.text=this.parser.model,this.parser=void 0,!0;case\"rPr\":return this.model.font=this.parser.model,this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(e),!0}}}a.FONT_OPTIONS={tagName:\"rPr\",fontNameTag:\"rFont\"},t.exports=a},{\"../base-xform\":32,\"../style/font-xform\":131,\"./text-xform\":125}],123:[function(e,t,r){\"use strict\";const n=e(\"./text-xform\"),o=e(\"./rich-text-xform\"),i=e(\"./phonetic-text-xform\"),a=e(\"../base-xform\");t.exports=class extends a{constructor(e){super(),this.model=e,this.map={r:new o,t:new n,rPh:new i}}get tag(){return\"si\"}render(e,t){e.openNode(this.tag),t&&t.hasOwnProperty(\"richText\")&&t.richText?t.richText.length?t.richText.forEach((t=>{this.map.r.render(e,t)})):this.map.t.render(e,\"\"):null!=t&&this.map.t.render(e,t),e.closeNode()}parseOpen(e){const{name:t}=e;return this.parser?(this.parser.parseOpen(e),!0):t===this.tag?(this.model={},!0):(this.parser=this.map[t],!!this.parser&&(this.parser.parseOpen(e),!0))}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser){if(!this.parser.parseClose(e)){switch(e){case\"r\":{let e=this.model.richText;e||(e=this.model.richText=[]),e.push(this.parser.model);break}case\"t\":this.model=this.parser.model}this.parser=void 0}return!0}return e!==this.tag}}},{\"../base-xform\":32,\"./phonetic-text-xform\":121,\"./rich-text-xform\":122,\"./text-xform\":125}],124:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/xml-stream\"),o=e(\"../base-xform\"),i=e(\"./shared-string-xform\");t.exports=class extends o{constructor(e){super(),this.model=e||{values:[],count:0},this.hash=Object.create(null),this.rich=Object.create(null)}get sharedStringXform(){return this._sharedStringXform||(this._sharedStringXform=new i)}get values(){return this.model.values}get uniqueCount(){return this.model.values.length}get count(){return this.model.count}getString(e){return this.model.values[e]}add(e){return e.richText?this.addRichText(e):this.addText(e)}addText(e){let t=this.hash[e];return void 0===t&&(t=this.hash[e]=this.model.values.length,this.model.values.push(e)),this.model.count++,t}addRichText(e){const t=this.sharedStringXform.toXml(e);let r=this.rich[t];return void 0===r&&(r=this.rich[t]=this.model.values.length,this.model.values.push(e)),this.model.count++,r}render(e,t){t=t||this._values,e.openXml(n.StdDocAttributes),e.openNode(\"sst\",{xmlns:\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",count:t.count,uniqueCount:t.values.length});const r=this.sharedStringXform;t.values.forEach((t=>{r.render(e,t)})),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"sst\":return!0;case\"si\":return this.parser=this.sharedStringXform,this.parser.parseOpen(e),!0;default:throw new Error(\"Unexpected xml node in parseOpen: \"+JSON.stringify(e))}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.model.values.push(this.parser.model),this.model.count++,this.parser=void 0),!0;if(\"sst\"===e)return!1;throw new Error(\"Unexpected xml node in parseClose: \"+e)}}},{\"../../../utils/xml-stream\":28,\"../base-xform\":32,\"./shared-string-xform\":123}],125:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{get tag(){return\"t\"}render(e,t){e.openNode(\"t\"),/^\\s|\\n|\\s$/.test(t)&&e.addAttribute(\"xml:space\",\"preserve\"),e.writeText(t),e.closeNode()}get model(){return this._text.join(\"\").replace(/_x([0-9A-F]{4})_/g,((e,t)=>String.fromCharCode(parseInt(t,16))))}parseOpen(e){return\"t\"===e.name&&(this._text=[],!0)}parseText(e){this._text.push(e)}parseClose(){return!1}}},{\"../base-xform\":32}],126:[function(e,t,r){\"use strict\";const n=e(\"../../../doc/enums\"),o=e(\"../../../utils/utils\"),i=e(\"../base-xform\"),a={horizontalValues:[\"left\",\"center\",\"right\",\"fill\",\"centerContinuous\",\"distributed\",\"justify\"].reduce(((e,t)=>(e[t]=!0,e)),{}),horizontal(e){return this.horizontalValues[e]?e:void 0},verticalValues:[\"top\",\"middle\",\"bottom\",\"distributed\",\"justify\"].reduce(((e,t)=>(e[t]=!0,e)),{}),vertical(e){return\"middle\"===e?\"center\":this.verticalValues[e]?e:void 0},wrapText:e=>!!e||void 0,shrinkToFit:e=>!!e||void 0,textRotation:e=>\"vertical\"===e||(e=o.validInt(e))>=-90&&e<=90?e:void 0,indent:e=>(e=o.validInt(e),Math.max(0,e)),readingOrder(e){switch(e){case\"ltr\":return n.ReadingOrder.LeftToRight;case\"rtl\":return n.ReadingOrder.RightToLeft;default:return}}},s={toXml(e){if(e=a.textRotation(e)){if(\"vertical\"===e)return 255;const t=Math.round(e);if(t>=0&&t<=90)return t;if(t<0&&t>=-90)return 90-t}},toModel(e){const t=o.validInt(e);if(void 0!==t){if(255===t)return\"vertical\";if(t>=0&&t<=90)return t;if(t>90&&t<=180)return 90-t}}};t.exports=class extends i{get tag(){return\"alignment\"}render(e,t){e.addRollback(),e.openNode(\"alignment\");let r=!1;function n(t,n){n&&(e.addAttribute(t,n),r=!0)}n(\"horizontal\",a.horizontal(t.horizontal)),n(\"vertical\",a.vertical(t.vertical)),n(\"wrapText\",!!a.wrapText(t.wrapText)&&\"1\"),n(\"shrinkToFit\",!!a.shrinkToFit(t.shrinkToFit)&&\"1\"),n(\"indent\",a.indent(t.indent)),n(\"textRotation\",s.toXml(t.textRotation)),n(\"readingOrder\",a.readingOrder(t.readingOrder)),e.closeNode(),r?e.commit():e.rollback()}parseOpen(e){const t={};let r=!1;function n(e,n,o){e&&(t[n]=o,r=!0)}n(e.attributes.horizontal,\"horizontal\",e.attributes.horizontal),n(e.attributes.vertical,\"vertical\",\"center\"===e.attributes.vertical?\"middle\":e.attributes.vertical),n(e.attributes.wrapText,\"wrapText\",o.parseBoolean(e.attributes.wrapText)),n(e.attributes.shrinkToFit,\"shrinkToFit\",o.parseBoolean(e.attributes.shrinkToFit)),n(e.attributes.indent,\"indent\",parseInt(e.attributes.indent,10)),n(e.attributes.textRotation,\"textRotation\",s.toModel(e.attributes.textRotation)),n(e.attributes.readingOrder,\"readingOrder\",\"2\"===e.attributes.readingOrder?\"rtl\":\"ltr\"),this.model=r?t:null}parseText(){}parseClose(){return!1}}},{\"../../../doc/enums\":7,\"../../../utils/utils\":27,\"../base-xform\":32}],127:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\"),o=e(\"../../../utils/utils\"),i=e(\"./color-xform\");class a extends n{constructor(e){super(),this.name=e,this.map={color:new i}}get tag(){return this.name}render(e,t,r){const n=t&&t.color||r||this.defaultColor;e.openNode(this.name),t&&t.style&&(e.addAttribute(\"style\",t.style),n&&this.map.color.render(e,n)),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.name:{const{style:t}=e.attributes;return this.model=t?{style:t}:void 0,!0}case\"color\":return this.parser=this.map.color,this.parser.parseOpen(e),!0;default:return!1}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):(e===this.name&&this.map.color.model&&(this.model||(this.model={}),this.model.color=this.map.color.model),!1)}validStyle(e){return a.validStyleValues[e]}}a.validStyleValues=[\"thin\",\"dashed\",\"dotted\",\"dashDot\",\"hair\",\"dashDotDot\",\"slantDashDot\",\"mediumDashed\",\"mediumDashDotDot\",\"mediumDashDot\",\"medium\",\"double\",\"thick\"].reduce(((e,t)=>(e[t]=!0,e)),{}),t.exports=class extends n{constructor(){super(),this.map={top:new a(\"top\"),left:new a(\"left\"),bottom:new a(\"bottom\"),right:new a(\"right\"),diagonal:new a(\"diagonal\")}}render(e,t){const{color:r}=t;function n(n,o){n&&!n.color&&t.color&&(n={...n,color:t.color}),o.render(e,n,r)}e.openNode(\"border\"),t.diagonal&&t.diagonal.style&&(t.diagonal.up&&e.addAttribute(\"diagonalUp\",\"1\"),t.diagonal.down&&e.addAttribute(\"diagonalDown\",\"1\")),n(t.left,this.map.left),n(t.right,this.map.right),n(t.top,this.map.top),n(t.bottom,this.map.bottom),n(t.diagonal,this.map.diagonal),e.closeNode()}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):\"border\"===e.name?(this.reset(),this.diagonalUp=o.parseBoolean(e.attributes.diagonalUp),this.diagonalDown=o.parseBoolean(e.attributes.diagonalDown),!0):(this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0))}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;if(\"border\"===e){const e=this.model={},t=function(t,r,n){r&&(n&&Object.assign(r,n),e[t]=r)};t(\"left\",this.map.left.model),t(\"right\",this.map.right.model),t(\"top\",this.map.top.model),t(\"bottom\",this.map.bottom.model),t(\"diagonal\",this.map.diagonal.model,{up:this.diagonalUp,down:this.diagonalDown})}return!1}}},{\"../../../utils/utils\":27,\"../base-xform\":32,\"./color-xform\":128}],128:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{constructor(e){super(),this.name=e||\"color\"}get tag(){return this.name}render(e,t){return!!t&&(e.openNode(this.name),t.argb?e.addAttribute(\"rgb\",t.argb):void 0!==t.theme?(e.addAttribute(\"theme\",t.theme),void 0!==t.tint&&e.addAttribute(\"tint\",t.tint)):void 0!==t.indexed?e.addAttribute(\"indexed\",t.indexed):e.addAttribute(\"auto\",\"1\"),e.closeNode(),!0)}parseOpen(e){return e.name===this.name&&(e.attributes.rgb?this.model={argb:e.attributes.rgb}:e.attributes.theme?(this.model={theme:parseInt(e.attributes.theme,10)},e.attributes.tint&&(this.model.tint=parseFloat(e.attributes.tint))):e.attributes.indexed?this.model={indexed:parseInt(e.attributes.indexed,10)}:this.model=void 0,!0)}parseText(){}parseClose(){return!1}}},{\"../base-xform\":32}],129:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\"),o=e(\"./alignment-xform\"),i=e(\"./border-xform\"),a=e(\"./fill-xform\"),s=e(\"./font-xform\"),l=e(\"./numfmt-xform\"),c=e(\"./protection-xform\");t.exports=class extends n{constructor(){super(),this.map={alignment:new o,border:new i,fill:new a,font:new s,numFmt:new l,protection:new c}}get tag(){return\"dxf\"}render(e,t){if(e.openNode(this.tag),t.font&&this.map.font.render(e,t.font),t.numFmt&&t.numFmtId){const r={id:t.numFmtId,formatCode:t.numFmt};this.map.numFmt.render(e,r)}t.fill&&this.map.fill.render(e,t.fill),t.alignment&&this.map.alignment.render(e,t.alignment),t.border&&this.map.border.render(e,t.border),t.protection&&this.map.protection.render(e,t.protection),e.closeNode()}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):e.name===this.tag?(this.reset(),!0):(this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e),!0)}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):e!==this.tag||(this.model={alignment:this.map.alignment.model,border:this.map.border.model,fill:this.map.fill.model,font:this.map.font.model,numFmt:this.map.numFmt.model,protection:this.map.protection.model},!1)}}},{\"../base-xform\":32,\"./alignment-xform\":126,\"./border-xform\":127,\"./fill-xform\":130,\"./font-xform\":131,\"./numfmt-xform\":132,\"./protection-xform\":133}],130:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\"),o=e(\"./color-xform\");class i extends n{constructor(){super(),this.map={color:new o}}get tag(){return\"stop\"}render(e,t){e.openNode(\"stop\"),e.addAttribute(\"position\",t.position),this.map.color.render(e,t.color),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"stop\":return this.model={position:parseFloat(e.attributes.position)},!0;case\"color\":return this.parser=this.map.color,this.parser.parseOpen(e),!0;default:return!1}}parseText(){}parseClose(e){return!!this.parser&&(this.parser.parseClose(e)||(this.model.color=this.parser.model,this.parser=void 0),!0)}}class a extends n{constructor(){super(),this.map={fgColor:new o(\"fgColor\"),bgColor:new o(\"bgColor\")}}get name(){return\"pattern\"}get tag(){return\"patternFill\"}render(e,t){e.openNode(\"patternFill\"),e.addAttribute(\"patternType\",t.pattern),t.fgColor&&this.map.fgColor.render(e,t.fgColor),t.bgColor&&this.map.bgColor.render(e,t.bgColor),e.closeNode()}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):\"patternFill\"===e.name?(this.model={type:\"pattern\",pattern:e.attributes.patternType},!0):(this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0))}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return!!this.parser&&(this.parser.parseClose(e)||(this.parser.model&&(this.model[e]=this.parser.model),this.parser=void 0),!0)}}class s extends n{constructor(){super(),this.map={stop:new i}}get name(){return\"gradient\"}get tag(){return\"gradientFill\"}render(e,t){switch(e.openNode(\"gradientFill\"),t.gradient){case\"angle\":e.addAttribute(\"degree\",t.degree);break;case\"path\":e.addAttribute(\"type\",\"path\"),t.center.left&&(e.addAttribute(\"left\",t.center.left),void 0===t.center.right&&e.addAttribute(\"right\",t.center.left)),t.center.right&&e.addAttribute(\"right\",t.center.right),t.center.top&&(e.addAttribute(\"top\",t.center.top),void 0===t.center.bottom&&e.addAttribute(\"bottom\",t.center.top)),t.center.bottom&&e.addAttribute(\"bottom\",t.center.bottom)}const r=this.map.stop;t.stops.forEach((t=>{r.render(e,t)})),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"gradientFill\":{const t=this.model={stops:[]};return e.attributes.degree?(t.gradient=\"angle\",t.degree=parseInt(e.attributes.degree,10)):\"path\"===e.attributes.type&&(t.gradient=\"path\",t.center={left:e.attributes.left?parseFloat(e.attributes.left):0,top:e.attributes.top?parseFloat(e.attributes.top):0},e.attributes.right!==e.attributes.left&&(t.center.right=e.attributes.right?parseFloat(e.attributes.right):0),e.attributes.bottom!==e.attributes.top&&(t.center.bottom=e.attributes.bottom?parseFloat(e.attributes.bottom):0)),!0}case\"stop\":return this.parser=this.map.stop,this.parser.parseOpen(e),!0;default:return!1}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return!!this.parser&&(this.parser.parseClose(e)||(this.model.stops.push(this.parser.model),this.parser=void 0),!0)}}class l extends n{constructor(){super(),this.map={patternFill:new a,gradientFill:new s}}get tag(){return\"fill\"}render(e,t){switch(e.addRollback(),e.openNode(\"fill\"),t.type){case\"pattern\":this.map.patternFill.render(e,t);break;case\"gradient\":this.map.gradientFill.render(e,t);break;default:return void e.rollback()}e.closeNode(),e.commit()}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):\"fill\"===e.name?(this.model={},!0):(this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0))}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return!!this.parser&&(this.parser.parseClose(e)||(this.model=this.parser.model,this.model.type=this.parser.name,this.parser=void 0),!0)}validStyle(e){return l.validPatternValues[e]}}l.validPatternValues=[\"none\",\"solid\",\"darkVertical\",\"darkGray\",\"mediumGray\",\"lightGray\",\"gray125\",\"gray0625\",\"darkHorizontal\",\"darkVertical\",\"darkDown\",\"darkUp\",\"darkGrid\",\"darkTrellis\",\"lightHorizontal\",\"lightVertical\",\"lightDown\",\"lightUp\",\"lightGrid\",\"lightTrellis\",\"lightGrid\"].reduce(((e,t)=>(e[t]=!0,e)),{}),l.StopXform=i,l.PatternFillXform=a,l.GradientFillXform=s,t.exports=l},{\"../base-xform\":32,\"./color-xform\":128}],131:[function(e,t,r){\"use strict\";const n=e(\"./color-xform\"),o=e(\"../simple/boolean-xform\"),i=e(\"../simple/integer-xform\"),a=e(\"../simple/string-xform\"),s=e(\"./underline-xform\"),l=e(\"../../../utils/under-dash\"),c=e(\"../base-xform\");class u extends c{constructor(e){super(),this.options=e||u.OPTIONS,this.map={b:{prop:\"bold\",xform:new o({tag:\"b\",attr:\"val\"})},i:{prop:\"italic\",xform:new o({tag:\"i\",attr:\"val\"})},u:{prop:\"underline\",xform:new s},charset:{prop:\"charset\",xform:new i({tag:\"charset\",attr:\"val\"})},color:{prop:\"color\",xform:new n},condense:{prop:\"condense\",xform:new o({tag:\"condense\",attr:\"val\"})},extend:{prop:\"extend\",xform:new o({tag:\"extend\",attr:\"val\"})},family:{prop:\"family\",xform:new i({tag:\"family\",attr:\"val\"})},outline:{prop:\"outline\",xform:new o({tag:\"outline\",attr:\"val\"})},vertAlign:{prop:\"vertAlign\",xform:new a({tag:\"vertAlign\",attr:\"val\"})},scheme:{prop:\"scheme\",xform:new a({tag:\"scheme\",attr:\"val\"})},shadow:{prop:\"shadow\",xform:new o({tag:\"shadow\",attr:\"val\"})},strike:{prop:\"strike\",xform:new o({tag:\"strike\",attr:\"val\"})},sz:{prop:\"size\",xform:new i({tag:\"sz\",attr:\"val\"})}},this.map[this.options.fontNameTag]={prop:\"name\",xform:new a({tag:this.options.fontNameTag,attr:\"val\"})}}get tag(){return this.options.tagName}render(e,t){const{map:r}=this;e.openNode(this.options.tagName),l.each(this.map,((n,o)=>{r[o].xform.render(e,t[n.prop])})),e.closeNode()}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):this.map[e.name]?(this.parser=this.map[e.name].xform,this.parser.parseOpen(e)):e.name===this.options.tagName&&(this.model={},!0)}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser&&!this.parser.parseClose(e)){const t=this.map[e];return this.parser.model&&(this.model[t.prop]=this.parser.model),this.parser=void 0,!0}return e!==this.options.tagName}}u.OPTIONS={tagName:\"font\",fontNameTag:\"name\"},t.exports=u},{\"../../../utils/under-dash\":26,\"../base-xform\":32,\"../simple/boolean-xform\":116,\"../simple/integer-xform\":118,\"../simple/string-xform\":119,\"./color-xform\":128,\"./underline-xform\":136}],132:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/under-dash\"),o=e(\"../../defaultnumformats\"),i=e(\"../base-xform\"),a=function(){const e={};return n.each(o,((t,r)=>{t.f&&(e[t.f]=parseInt(r,10))})),e}();class s extends i{constructor(e,t){super(),this.id=e,this.formatCode=t}get tag(){return\"numFmt\"}render(e,t){e.leafNode(\"numFmt\",{numFmtId:t.id,formatCode:t.formatCode})}parseOpen(e){return\"numFmt\"===e.name&&(this.model={id:parseInt(e.attributes.numFmtId,10),formatCode:e.attributes.formatCode.replace(/[\\\\](.)/g,\"$1\")},!0)}parseText(){}parseClose(){return!1}}s.getDefaultFmtId=function(e){return a[e]},s.getDefaultFmtCode=function(e){return o[e]&&o[e].f},t.exports=s},{\"../../../utils/under-dash\":26,\"../../defaultnumformats\":30,\"../base-xform\":32}],133:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\"),o=(e,t)=>void 0===e?t:e;t.exports=class extends n{get tag(){return\"protection\"}render(e,t){e.addRollback(),e.openNode(\"protection\");let r=!1;function n(t,n){void 0!==n&&(e.addAttribute(t,n),r=!0)}n(\"locked\",o(t.locked,!0)?void 0:\"0\"),n(\"hidden\",o(t.hidden,!1)?\"1\":void 0),e.closeNode(),r?e.commit():e.rollback()}parseOpen(e){const t={locked:!(\"0\"===e.attributes.locked),hidden:\"1\"===e.attributes.hidden},r=!t.locked||t.hidden;this.model=r?t:null}parseText(){}parseClose(){return!1}}},{\"../base-xform\":32}],134:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\"),o=e(\"./alignment-xform\"),i=e(\"./protection-xform\");t.exports=class extends n{constructor(e){super(),this.xfId=!(!e||!e.xfId),this.map={alignment:new o,protection:new i}}get tag(){return\"xf\"}render(e,t){e.openNode(\"xf\",{numFmtId:t.numFmtId||0,fontId:t.fontId||0,fillId:t.fillId||0,borderId:t.borderId||0}),this.xfId&&e.addAttribute(\"xfId\",t.xfId||0),t.numFmtId&&e.addAttribute(\"applyNumberFormat\",\"1\"),t.fontId&&e.addAttribute(\"applyFont\",\"1\"),t.fillId&&e.addAttribute(\"applyFill\",\"1\"),t.borderId&&e.addAttribute(\"applyBorder\",\"1\"),t.alignment&&e.addAttribute(\"applyAlignment\",\"1\"),t.protection&&e.addAttribute(\"applyProtection\",\"1\"),t.alignment&&this.map.alignment.render(e,t.alignment),t.protection&&this.map.protection.render(e,t.protection),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"xf\":return this.model={numFmtId:parseInt(e.attributes.numFmtId,10),fontId:parseInt(e.attributes.fontId,10),fillId:parseInt(e.attributes.fillId,10),borderId:parseInt(e.attributes.borderId,10)},this.xfId&&(this.model.xfId=parseInt(e.attributes.xfId,10)),!0;case\"alignment\":return this.parser=this.map.alignment,this.parser.parseOpen(e),!0;case\"protection\":return this.parser=this.map.protection,this.parser.parseOpen(e),!0;default:return!1}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.map.protection===this.parser?this.model.protection=this.parser.model:this.model.alignment=this.parser.model,this.parser=void 0),!0):\"xf\"!==e}}},{\"../base-xform\":32,\"./alignment-xform\":126,\"./protection-xform\":133}],135:[function(e,t,r){\"use strict\";const n=e(\"../../../doc/enums\"),o=e(\"../../../utils/xml-stream\"),i=e(\"../base-xform\"),a=e(\"../static-xform\"),s=e(\"../list-xform\"),l=e(\"./font-xform\"),c=e(\"./fill-xform\"),u=e(\"./border-xform\"),d=e(\"./numfmt-xform\"),f=e(\"./style-xform\"),h=e(\"./dxf-xform\");class p extends i{constructor(e){super(),this.map={numFmts:new s({tag:\"numFmts\",count:!0,childXform:new d}),fonts:new s({tag:\"fonts\",count:!0,childXform:new l,$:{\"x14ac:knownFonts\":1}}),fills:new s({tag:\"fills\",count:!0,childXform:new c}),borders:new s({tag:\"borders\",count:!0,childXform:new u}),cellStyleXfs:new s({tag:\"cellStyleXfs\",count:!0,childXform:new f}),cellXfs:new s({tag:\"cellXfs\",count:!0,childXform:new f({xfId:!0})}),dxfs:new s({tag:\"dxfs\",always:!0,count:!0,childXform:new h}),numFmt:new d,font:new l,fill:new c,border:new u,style:new f({xfId:!0}),cellStyles:p.STATIC_XFORMS.cellStyles,tableStyles:p.STATIC_XFORMS.tableStyles,extLst:p.STATIC_XFORMS.extLst},e&&this.init()}initIndex(){this.index={style:{},numFmt:{},numFmtNextId:164,font:{},border:{},fill:{}}}init(){this.model={styles:[],numFmts:[],fonts:[],borders:[],fills:[],dxfs:[]},this.initIndex(),this._addBorder({}),this._addStyle({numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}),this._addFill({type:\"pattern\",pattern:\"none\"}),this._addFill({type:\"pattern\",pattern:\"gray125\"}),this.weakMap=new WeakMap}render(e,t){t=t||this.model,e.openXml(o.StdDocAttributes),e.openNode(\"styleSheet\",p.STYLESHEET_ATTRIBUTES),this.index?(t.numFmts&&t.numFmts.length&&(e.openNode(\"numFmts\",{count:t.numFmts.length}),t.numFmts.forEach((t=>{e.writeXml(t)})),e.closeNode()),t.fonts.length||this._addFont({size:11,color:{theme:1},name:\"Calibri\",family:2,scheme:\"minor\"}),e.openNode(\"fonts\",{count:t.fonts.length,\"x14ac:knownFonts\":1}),t.fonts.forEach((t=>{e.writeXml(t)})),e.closeNode(),e.openNode(\"fills\",{count:t.fills.length}),t.fills.forEach((t=>{e.writeXml(t)})),e.closeNode(),e.openNode(\"borders\",{count:t.borders.length}),t.borders.forEach((t=>{e.writeXml(t)})),e.closeNode(),this.map.cellStyleXfs.render(e,[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}]),e.openNode(\"cellXfs\",{count:t.styles.length}),t.styles.forEach((t=>{e.writeXml(t)})),e.closeNode()):(this.map.numFmts.render(e,t.numFmts),this.map.fonts.render(e,t.fonts),this.map.fills.render(e,t.fills),this.map.borders.render(e,t.borders),this.map.cellStyleXfs.render(e,[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}]),this.map.cellXfs.render(e,t.styles)),p.STATIC_XFORMS.cellStyles.render(e),this.map.dxfs.render(e,t.dxfs),p.STATIC_XFORMS.tableStyles.render(e),p.STATIC_XFORMS.extLst.render(e),e.closeNode()}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):\"styleSheet\"===e.name?(this.initIndex(),!0):(this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e),!0)}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;if(\"styleSheet\"===e){this.model={};const e=(e,t)=>{t.model&&t.model.length&&(this.model[e]=t.model)};if(e(\"numFmts\",this.map.numFmts),e(\"fonts\",this.map.fonts),e(\"fills\",this.map.fills),e(\"borders\",this.map.borders),e(\"styles\",this.map.cellXfs),e(\"dxfs\",this.map.dxfs),this.index={model:[],numFmt:[]},this.model.numFmts){const e=this.index.numFmt;this.model.numFmts.forEach((t=>{e[t.id]=t.formatCode}))}return!1}return!0}addStyleModel(e,t){if(!e)return 0;if(this.model.fonts.length||this._addFont({size:11,color:{theme:1},name:\"Calibri\",family:2,scheme:\"minor\"}),this.weakMap&&this.weakMap.has(e))return this.weakMap.get(e);const r={};if(t=t||n.ValueType.Number,e.numFmt)r.numFmtId=this._addNumFmtStr(e.numFmt);else switch(t){case n.ValueType.Number:r.numFmtId=this._addNumFmtStr(\"General\");break;case n.ValueType.Date:r.numFmtId=this._addNumFmtStr(\"mm-dd-yy\")}e.font&&(r.fontId=this._addFont(e.font)),e.border&&(r.borderId=this._addBorder(e.border)),e.fill&&(r.fillId=this._addFill(e.fill)),e.alignment&&(r.alignment=e.alignment),e.protection&&(r.protection=e.protection);const o=this._addStyle(r);return this.weakMap&&this.weakMap.set(e,o),o}getStyleModel(e){const t=this.model.styles[e];if(!t)return null;let r=this.index.model[e];if(r)return r;if(r=this.index.model[e]={},t.numFmtId){const e=this.index.numFmt[t.numFmtId]||d.getDefaultFmtCode(t.numFmtId);e&&(r.numFmt=e)}function n(e,t,n){if(n||0===n){const o=t[n];o&&(r[e]=o)}}return n(\"font\",this.model.fonts,t.fontId),n(\"border\",this.model.borders,t.borderId),n(\"fill\",this.model.fills,t.fillId),t.alignment&&(r.alignment=t.alignment),t.protection&&(r.protection=t.protection),r}addDxfStyle(e){return e.numFmt&&(e.numFmtId=this._addNumFmtStr(e.numFmt)),this.model.dxfs.push(e),this.model.dxfs.length-1}getDxfStyle(e){return this.model.dxfs[e]}_addStyle(e){const t=this.map.style.toXml(e);let r=this.index.style[t];return void 0===r&&(r=this.index.style[t]=this.model.styles.length,this.model.styles.push(t)),r}_addNumFmtStr(e){let t=d.getDefaultFmtId(e);if(void 0!==t)return t;if(t=this.index.numFmt[e],void 0!==t)return t;t=this.index.numFmt[e]=164+this.model.numFmts.length;const r=this.map.numFmt.toXml({id:t,formatCode:e});return this.model.numFmts.push(r),t}_addFont(e){const t=this.map.font.toXml(e);let r=this.index.font[t];return void 0===r&&(r=this.index.font[t]=this.model.fonts.length,this.model.fonts.push(t)),r}_addBorder(e){const t=this.map.border.toXml(e);let r=this.index.border[t];return void 0===r&&(r=this.index.border[t]=this.model.borders.length,this.model.borders.push(t)),r}_addFill(e){const t=this.map.fill.toXml(e);let r=this.index.fill[t];return void 0===r&&(r=this.index.fill[t]=this.model.fills.length,this.model.fills.push(t)),r}}p.STYLESHEET_ATTRIBUTES={xmlns:\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\"xmlns:mc\":\"http://schemas.openxmlformats.org/markup-compatibility/2006\",\"mc:Ignorable\":\"x14ac x16r2\",\"xmlns:x14ac\":\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\",\"xmlns:x16r2\":\"http://schemas.microsoft.com/office/spreadsheetml/2015/02/main\"},p.STATIC_XFORMS={cellStyles:new a({tag:\"cellStyles\",$:{count:1},c:[{tag:\"cellStyle\",$:{name:\"Normal\",xfId:0,builtinId:0}}]}),dxfs:new a({tag:\"dxfs\",$:{count:0}}),tableStyles:new a({tag:\"tableStyles\",$:{count:0,defaultTableStyle:\"TableStyleMedium2\",defaultPivotStyle:\"PivotStyleLight16\"}}),extLst:new a({tag:\"extLst\",c:[{tag:\"ext\",$:{uri:\"{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}\",\"xmlns:x14\":\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main\"},c:[{tag:\"x14:slicerStyles\",$:{defaultSlicerStyle:\"SlicerStyleLight1\"}}]},{tag:\"ext\",$:{uri:\"{9260A510-F301-46a8-8635-F512D64BE5F5}\",\"xmlns:x15\":\"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main\"},c:[{tag:\"x15:timelineStyles\",$:{defaultTimelineStyle:\"TimeSlicerStyleLight1\"}}]}]})},p.Mock=class extends p{constructor(){super(),this.model={styles:[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}],numFmts:[],fonts:[{size:11,color:{theme:1},name:\"Calibri\",family:2,scheme:\"minor\"}],borders:[{}],fills:[{type:\"pattern\",pattern:\"none\"},{type:\"pattern\",pattern:\"gray125\"}]}}parseStream(e){return e.autodrain(),Promise.resolve()}addStyleModel(e,t){return t===n.ValueType.Date?this.dateStyleId:0}get dateStyleId(){if(!this._dateStyleId){const e={numFmtId:d.getDefaultFmtId(\"mm-dd-yy\")};this._dateStyleId=this.model.styles.length,this.model.styles.push(e)}return this._dateStyleId}getStyleModel(){return{}}},t.exports=p},{\"../../../doc/enums\":7,\"../../../utils/xml-stream\":28,\"../base-xform\":32,\"../list-xform\":71,\"../static-xform\":120,\"./border-xform\":127,\"./dxf-xform\":129,\"./fill-xform\":130,\"./font-xform\":131,\"./numfmt-xform\":132,\"./style-xform\":134}],136:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");class o extends n{constructor(e){super(),this.model=e}get tag(){return\"u\"}render(e,t){if(!0===(t=t||this.model))e.leafNode(\"u\");else{const r=o.Attributes[t];r&&e.leafNode(\"u\",r)}}parseOpen(e){\"u\"===e.name&&(this.model=e.attributes.val||!0)}parseText(){}parseClose(){return!1}}o.Attributes={single:{},double:{val:\"double\"},singleAccounting:{val:\"singleAccounting\"},doubleAccounting:{val:\"doubleAccounting\"}},t.exports=o},{\"../base-xform\":32}],137:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\"),o=e(\"./filter-column-xform\");t.exports=class extends n{constructor(){super(),this.map={filterColumn:new o}}get tag(){return\"autoFilter\"}prepare(e){e.columns.forEach(((e,t)=>{this.map.filterColumn.prepare(e,{index:t})}))}render(e,t){return e.openNode(this.tag,{ref:t.autoFilterRef}),t.columns.forEach((t=>{this.map.filterColumn.render(e,t)})),e.closeNode(),!0}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;if(e.name===this.tag)return this.model={autoFilterRef:e.attributes.ref,columns:[]},!0;if(this.parser=this.map[e.name],this.parser)return this.parseOpen(e),!0;throw new Error(\"Unexpected xml node in parseOpen: \"+JSON.stringify(e))}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.model.columns.push(this.parser.model),this.parser=void 0),!0;if(e===this.tag)return!1;throw new Error(\"Unexpected xml node in parseClose: \"+e)}}},{\"../base-xform\":32,\"./filter-column-xform\":139}],138:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{get tag(){return\"customFilter\"}render(e,t){e.leafNode(this.tag,{val:t.val,operator:t.operator})}parseOpen(e){return e.name===this.tag&&(this.model={val:e.attributes.val,operator:e.attributes.operator},!0)}parseText(){}parseClose(){return!1}}},{\"../base-xform\":32}],139:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\"),o=e(\"../list-xform\"),i=e(\"./custom-filter-xform\"),a=e(\"./filter-xform\");t.exports=class extends n{constructor(){super(),this.map={customFilters:new o({tag:\"customFilters\",count:!1,empty:!0,childXform:new i}),filters:new o({tag:\"filters\",count:!1,empty:!0,childXform:new a})}}get tag(){return\"filterColumn\"}prepare(e,t){e.colId=t.index.toString()}render(e,t){return t.customFilters?(e.openNode(this.tag,{colId:t.colId,hiddenButton:t.filterButton?\"0\":\"1\"}),this.map.customFilters.render(e,t.customFilters),e.closeNode(),!0):(e.leafNode(this.tag,{colId:t.colId,hiddenButton:t.filterButton?\"0\":\"1\"}),!0)}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;const{attributes:t}=e;if(e.name===this.tag)return this.model={filterButton:\"0\"===t.hiddenButton},!0;if(this.parser=this.map[e.name],this.parser)return this.parseOpen(e),!0;throw new Error(\"Unexpected xml node in parseOpen: \"+JSON.stringify(e))}parseText(){}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):e!==this.tag||(this.model.customFilters=this.map.customFilters.model,!1)}}},{\"../base-xform\":32,\"../list-xform\":71,\"./custom-filter-xform\":138,\"./filter-xform\":140}],140:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{get tag(){return\"filter\"}render(e,t){e.leafNode(this.tag,{val:t.val})}parseOpen(e){return e.name===this.tag&&(this.model={val:e.attributes.val},!0)}parseText(){}parseClose(){return!1}}},{\"../base-xform\":32}],141:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{get tag(){return\"tableColumn\"}prepare(e,t){e.id=t.index+1}render(e,t){return e.leafNode(this.tag,{id:t.id.toString(),name:t.name,totalsRowLabel:t.totalsRowLabel,totalsRowFunction:t.totalsRowFunction,dxfId:t.dxfId}),!0}parseOpen(e){if(e.name===this.tag){const{attributes:t}=e;return this.model={name:t.name,totalsRowLabel:t.totalsRowLabel,totalsRowFunction:t.totalsRowFunction,dxfId:t.dxfId},!0}return!1}parseText(){}parseClose(){return!1}}},{\"../base-xform\":32}],142:[function(e,t,r){\"use strict\";const n=e(\"../base-xform\");t.exports=class extends n{get tag(){return\"tableStyleInfo\"}render(e,t){return e.leafNode(this.tag,{name:t.theme?t.theme:void 0,showFirstColumn:t.showFirstColumn?\"1\":\"0\",showLastColumn:t.showLastColumn?\"1\":\"0\",showRowStripes:t.showRowStripes?\"1\":\"0\",showColumnStripes:t.showColumnStripes?\"1\":\"0\"}),!0}parseOpen(e){if(e.name===this.tag){const{attributes:t}=e;return this.model={theme:t.name?t.name:null,showFirstColumn:\"1\"===t.showFirstColumn,showLastColumn:\"1\"===t.showLastColumn,showRowStripes:\"1\"===t.showRowStripes,showColumnStripes:\"1\"===t.showColumnStripes},!0}return!1}parseText(){}parseClose(){return!1}}},{\"../base-xform\":32}],143:[function(e,t,r){\"use strict\";const n=e(\"../../../utils/xml-stream\"),o=e(\"../base-xform\"),i=e(\"../list-xform\"),a=e(\"./auto-filter-xform\"),s=e(\"./table-column-xform\"),l=e(\"./table-style-info-xform\");class c extends o{constructor(){super(),this.map={autoFilter:new a,tableColumns:new i({tag:\"tableColumns\",count:!0,empty:!0,childXform:new s}),tableStyleInfo:new l}}prepare(e,t){this.map.autoFilter.prepare(e),this.map.tableColumns.prepare(e.columns,t)}get tag(){return\"table\"}render(e,t){e.openXml(n.StdDocAttributes),e.openNode(this.tag,{...c.TABLE_ATTRIBUTES,id:t.id,name:t.name,displayName:t.displayName||t.name,ref:t.tableRef,totalsRowCount:t.totalsRow?\"1\":void 0,totalsRowShown:t.totalsRow?void 0:\"1\",headerRowCount:t.headerRow?\"1\":\"0\"}),this.map.autoFilter.render(e,t),this.map.tableColumns.render(e,t.columns),this.map.tableStyleInfo.render(e,t.style),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;const{name:t,attributes:r}=e;return t===this.tag?(this.reset(),this.model={name:r.name,displayName:r.displayName||r.name,tableRef:r.ref,totalsRow:\"1\"===r.totalsRowCount,headerRow:\"1\"===r.headerRowCount}):(this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)),!0}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):e!==this.tag||(this.model.columns=this.map.tableColumns.model,this.map.autoFilter.model&&(this.model.autoFilterRef=this.map.autoFilter.model.autoFilterRef,this.map.autoFilter.model.columns.forEach(((e,t)=>{this.model.columns[t].filterButton=e.filterButton}))),this.model.style=this.map.tableStyleInfo.model,!1)}reconcile(e,t){e.columns.forEach((e=>{void 0!==e.dxfId&&(e.style=t.styles.getDxfStyle(e.dxfId))}))}}c.TABLE_ATTRIBUTES={xmlns:\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\"xmlns:mc\":\"http://schemas.openxmlformats.org/markup-compatibility/2006\",\"mc:Ignorable\":\"xr xr3\",\"xmlns:xr\":\"http://schemas.microsoft.com/office/spreadsheetml/2014/revision\",\"xmlns:xr3\":\"http://schemas.microsoft.com/office/spreadsheetml/2016/revision3\"},t.exports=c},{\"../../../utils/xml-stream\":28,\"../base-xform\":32,\"../list-xform\":71,\"./auto-filter-xform\":137,\"./table-column-xform\":141,\"./table-style-info-xform\":142}],144:[function(e,t,r){(function(r,n){(function(){\"use strict\";const o=e(\"fs\"),i=e(\"jszip\"),{PassThrough:a}=e(\"readable-stream\"),s=e(\"../utils/zip-stream\"),l=e(\"../utils/stream-buf\"),c=e(\"../utils/utils\"),u=e(\"../utils/xml-stream\"),{bufferToString:d}=e(\"../utils/browser-buffer-decode\"),f=e(\"./xform/style/styles-xform\"),h=e(\"./xform/core/core-xform\"),p=e(\"./xform/strings/shared-strings-xform\"),m=e(\"./xform/core/relationships-xform\"),g=e(\"./xform/core/content-types-xform\"),v=e(\"./xform/core/app-xform\"),b=e(\"./xform/book/workbook-xform\"),y=e(\"./xform/sheet/worksheet-xform\"),w=e(\"./xform/drawing/drawing-xform\"),x=e(\"./xform/table/table-xform\"),S=e(\"./xform/comment/comments-xform\"),C=e(\"./xform/comment/vml-notes-xform\"),k=e(\"./xml/theme1\");class E{constructor(e){this.workbook=e}async readFile(e,t){if(!await c.fs.exists(e))throw new Error(\"File not found: \"+e);const r=o.createReadStream(e);try{const e=await this.read(r,t);return r.close(),e}catch(e){throw r.close(),e}}parseRels(e){return(new m).parseStream(e)}parseWorkbook(e){return(new b).parseStream(e)}parseSharedStrings(e){return(new p).parseStream(e)}reconcile(e,t){const r=new b,n=new y(t),o=new w,i=new x;r.reconcile(e);const a={media:e.media,mediaIndex:e.mediaIndex};Object.keys(e.drawings).forEach((t=>{const r=e.drawings[t],n=e.drawingRels[t];n&&(a.rels=n.reduce(((e,t)=>(e[t.Id]=t,e)),{}),(r.anchors||[]).forEach((e=>{const t=e.picture&&e.picture.hyperlinks;t&&a.rels[t.rId]&&(t.hyperlink=a.rels[t.rId].Target,delete t.rId)})),o.reconcile(r,a))}));const s={styles:e.styles};Object.values(e.tables).forEach((e=>{i.reconcile(e,s)}));const l={styles:e.styles,sharedStrings:e.sharedStrings,media:e.media,mediaIndex:e.mediaIndex,date1904:e.properties&&e.properties.date1904,drawings:e.drawings,comments:e.comments,tables:e.tables,vmlDrawings:e.vmlDrawings};e.worksheets.forEach((t=>{t.relationships=e.worksheetRels[t.sheetNo],n.reconcile(t,l)})),delete e.worksheetHash,delete e.worksheetRels,delete e.globalRels,delete e.sharedStrings,delete e.workbookRels,delete e.sheetDefs,delete e.styles,delete e.mediaIndex,delete e.drawings,delete e.drawingRels,delete e.vmlDrawings}async _processWorksheetEntry(e,t,r,n,o){const i=new y(n),a=await i.parseStream(e);a.sheetNo=r,t.worksheetHash[o]=a,t.worksheets.push(a)}async _processCommentEntry(e,t,r){const n=new S,o=await n.parseStream(e);t.comments[`../${r}.xml`]=o}async _processTableEntry(e,t,r){const n=new x,o=await n.parseStream(e);t.tables[`../tables/${r}.xml`]=o}async _processWorksheetRelsEntry(e,t,r){const n=new m,o=await n.parseStream(e);t.worksheetRels[r]=o}async _processMediaEntry(e,t,r){const n=r.lastIndexOf(\".\");if(n>=1){const o=r.substr(n+1),i=r.substr(0,n);await new Promise(((n,a)=>{const s=new l;s.on(\"finish\",(()=>{t.mediaIndex[r]=t.media.length,t.mediaIndex[i]=t.media.length;const e={type:\"image\",name:i,extension:o,buffer:s.toBuffer()};t.media.push(e),n()})),e.on(\"error\",(e=>{a(e)})),e.pipe(s)}))}}async _processDrawingEntry(e,t,r){const n=new w,o=await n.parseStream(e);t.drawings[r]=o}async _processDrawingRelsEntry(e,t,r){const n=new m,o=await n.parseStream(e);t.drawingRels[r]=o}async _processVmlDrawingEntry(e,t,r){const n=new C,o=await n.parseStream(e);t.vmlDrawings[`../drawings/${r}.vml`]=o}async _processThemeEntry(e,t,r){await new Promise(((n,o)=>{const i=new l;e.on(\"error\",o),i.on(\"error\",o),i.on(\"finish\",(()=>{t.themes[r]=i.read().toString(),n()})),e.pipe(i)}))}createInputStream(){throw new Error(\"`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md\")}async read(e,t){!e[Symbol.asyncIterator]&&e.pipe&&(e=e.pipe(new a));const r=[];for await(const t of e)r.push(t);return this.load(n.concat(r),t)}async load(e,t){let o;o=t&&t.base64?n.from(e.toString(),\"base64\"):e;const s={worksheets:[],worksheetHash:{},worksheetRels:[],themes:{},media:[],mediaIndex:{},drawings:{},drawingRels:{},comments:{},tables:{},vmlDrawings:{}},l=await i.loadAsync(o);for(const e of Object.values(l.files))if(!e.dir){let n,o=e.name;if(\"/\"===o[0]&&(o=o.substr(1)),o.match(/xl\\/media\\//)||o.match(/xl\\/theme\\/([a-zA-Z0-9]+)[.]xml/))n=new a,n.write(await e.async(\"nodebuffer\"));else{let t;n=new a({writableObjectMode:!0,readableObjectMode:!0}),t=r.browser?d(await e.async(\"nodebuffer\")):await e.async(\"string\");const o=16384;for(let e=0;e<t.length;e+=o)n.write(t.substring(e,e+o))}switch(n.end(),o){case\"_rels/.rels\":s.globalRels=await this.parseRels(n);break;case\"xl/workbook.xml\":{const e=await this.parseWorkbook(n);s.sheets=e.sheets,s.definedNames=e.definedNames,s.views=e.views,s.properties=e.properties,s.calcProperties=e.calcProperties;break}case\"xl/_rels/workbook.xml.rels\":s.workbookRels=await this.parseRels(n);break;case\"xl/sharedStrings.xml\":s.sharedStrings=new p,await s.sharedStrings.parseStream(n);break;case\"xl/styles.xml\":s.styles=new f,await s.styles.parseStream(n);break;case\"docProps/app.xml\":{const e=new v,t=await e.parseStream(n);s.company=t.company,s.manager=t.manager;break}case\"docProps/core.xml\":{const e=new h,t=await e.parseStream(n);Object.assign(s,t);break}default:{let e=o.match(/xl\\/worksheets\\/sheet(\\d+)[.]xml/);if(e){await this._processWorksheetEntry(n,s,e[1],t,o);break}if(e=o.match(/xl\\/worksheets\\/_rels\\/sheet(\\d+)[.]xml.rels/),e){await this._processWorksheetRelsEntry(n,s,e[1]);break}if(e=o.match(/xl\\/theme\\/([a-zA-Z0-9]+)[.]xml/),e){await this._processThemeEntry(n,s,e[1]);break}if(e=o.match(/xl\\/media\\/([a-zA-Z0-9]+[.][a-zA-Z0-9]{3,4})$/),e){await this._processMediaEntry(n,s,e[1]);break}if(e=o.match(/xl\\/drawings\\/([a-zA-Z0-9]+)[.]xml/),e){await this._processDrawingEntry(n,s,e[1]);break}if(e=o.match(/xl\\/(comments\\d+)[.]xml/),e){await this._processCommentEntry(n,s,e[1]);break}if(e=o.match(/xl\\/tables\\/(table\\d+)[.]xml/),e){await this._processTableEntry(n,s,e[1]);break}if(e=o.match(/xl\\/drawings\\/_rels\\/([a-zA-Z0-9]+)[.]xml[.]rels/),e){await this._processDrawingRelsEntry(n,s,e[1]);break}if(e=o.match(/xl\\/drawings\\/(vmlDrawing\\d+)[.]vml/),e){await this._processVmlDrawingEntry(n,s,e[1]);break}}}}return this.reconcile(s,t),this.workbook.model=s,this.workbook}async addMedia(e,t){await Promise.all(t.media.map((async t=>{if(\"image\"===t.type){const r=`xl/media/${t.name}.${t.extension}`;if(t.filename){const n=await function(e){return new Promise(((t,r)=>{o.readFile(e,undefined,((e,n)=>{e?r(e):t(n)}))}))}(t.filename);return e.append(n,{name:r})}if(t.buffer)return e.append(t.buffer,{name:r});if(t.base64){const n=t.base64,o=n.substring(n.indexOf(\",\")+1);return e.append(o,{name:r,base64:!0})}}throw new Error(\"Unsupported media\")})))}addDrawings(e,t){const r=new w,n=new m;t.worksheets.forEach((t=>{const{drawing:o}=t;if(o){r.prepare(o,{});let t=r.toXml(o);e.append(t,{name:`xl/drawings/${o.name}.xml`}),t=n.toXml(o.rels),e.append(t,{name:`xl/drawings/_rels/${o.name}.xml.rels`})}}))}addTables(e,t){const r=new x;t.worksheets.forEach((t=>{const{tables:n}=t;n.forEach((t=>{r.prepare(t,{});const n=r.toXml(t);e.append(n,{name:\"xl/tables/\"+t.target})}))}))}async addContentTypes(e,t){const r=(new g).toXml(t);e.append(r,{name:\"[Content_Types].xml\"})}async addApp(e,t){const r=(new v).toXml(t);e.append(r,{name:\"docProps/app.xml\"})}async addCore(e,t){const r=new h;e.append(r.toXml(t),{name:\"docProps/core.xml\"})}async addThemes(e,t){const r=t.themes||{theme1:k};Object.keys(r).forEach((t=>{const n=r[t],o=`xl/theme/${t}.xml`;e.append(n,{name:o})}))}async addOfficeRels(e){const t=(new m).toXml([{Id:\"rId1\",Type:E.RelType.OfficeDocument,Target:\"xl/workbook.xml\"},{Id:\"rId2\",Type:E.RelType.CoreProperties,Target:\"docProps/core.xml\"},{Id:\"rId3\",Type:E.RelType.ExtenderProperties,Target:\"docProps/app.xml\"}]);e.append(t,{name:\"_rels/.rels\"})}async addWorkbookRels(e,t){let r=1;const n=[{Id:\"rId\"+r++,Type:E.RelType.Styles,Target:\"styles.xml\"},{Id:\"rId\"+r++,Type:E.RelType.Theme,Target:\"theme/theme1.xml\"}];t.sharedStrings.count&&n.push({Id:\"rId\"+r++,Type:E.RelType.SharedStrings,Target:\"sharedStrings.xml\"}),t.worksheets.forEach((e=>{e.rId=\"rId\"+r++,n.push({Id:e.rId,Type:E.RelType.Worksheet,Target:`worksheets/sheet${e.id}.xml`})}));const o=(new m).toXml(n);e.append(o,{name:\"xl/_rels/workbook.xml.rels\"})}async addSharedStrings(e,t){t.sharedStrings&&t.sharedStrings.count&&e.append(t.sharedStrings.xml,{name:\"xl/sharedStrings.xml\"})}async addStyles(e,t){const{xml:r}=t.styles;r&&e.append(r,{name:\"xl/styles.xml\"})}async addWorkbook(e,t){const r=new b;e.append(r.toXml(t),{name:\"xl/workbook.xml\"})}async addWorksheets(e,t){const r=new y,n=new m,o=new S,i=new C;t.worksheets.forEach((t=>{let a=new u;r.render(a,t),e.append(a.xml,{name:`xl/worksheets/sheet${t.id}.xml`}),t.rels&&t.rels.length&&(a=new u,n.render(a,t.rels),e.append(a.xml,{name:`xl/worksheets/_rels/sheet${t.id}.xml.rels`})),t.comments.length>0&&(a=new u,o.render(a,t),e.append(a.xml,{name:`xl/comments${t.id}.xml`}),a=new u,i.render(a,t),e.append(a.xml,{name:`xl/drawings/vmlDrawing${t.id}.vml`}))}))}_finalize(e){return new Promise(((t,r)=>{e.on(\"finish\",(()=>{t(this)})),e.on(\"error\",r),e.finalize()}))}prepareModel(e,t){e.creator=e.creator||\"ExcelJS\",e.lastModifiedBy=e.lastModifiedBy||\"ExcelJS\",e.created=e.created||new Date,e.modified=e.modified||new Date,e.useSharedStrings=void 0===t.useSharedStrings||t.useSharedStrings,e.useStyles=void 0===t.useStyles||t.useStyles,e.sharedStrings=new p,e.styles=e.useStyles?new f(!0):new f.Mock;const r=new b,n=new y;r.prepare(e);const o={sharedStrings:e.sharedStrings,styles:e.styles,date1904:e.properties.date1904,drawingsCount:0,media:e.media};o.drawings=e.drawings=[],o.commentRefs=e.commentRefs=[];let i=0;e.tables=[],e.worksheets.forEach((t=>{t.tables.forEach((t=>{i++,t.target=`table${i}.xml`,t.id=i,e.tables.push(t)})),n.prepare(t,o)}))}async write(e,t){t=t||{};const{model:r}=this.workbook,n=new s.ZipWriter(t.zip);return n.pipe(e),this.prepareModel(r,t),await this.addContentTypes(n,r),await this.addOfficeRels(n,r),await this.addWorkbookRels(n,r),await this.addWorksheets(n,r),await this.addSharedStrings(n,r),await this.addDrawings(n,r),await this.addTables(n,r),await Promise.all([this.addThemes(n,r),this.addStyles(n,r)]),await this.addMedia(n,r),await Promise.all([this.addApp(n,r),this.addCore(n,r)]),await this.addWorkbook(n,r),this._finalize(n)}writeFile(e,t){const r=o.createWriteStream(e);return new Promise(((e,n)=>{r.on(\"finish\",(()=>{e()})),r.on(\"error\",(e=>{n(e)})),this.write(r,t).then((()=>{r.end()})).catch((e=>{n(e)}))}))}async writeBuffer(e){const t=new l;return await this.write(t,e),t.read()}}E.RelType=e(\"./rel-type\"),t.exports=E}).call(this)}).call(this,e(\"_process\"),e(\"buffer\").Buffer)},{\"../utils/browser-buffer-decode\":16,\"../utils/stream-buf\":24,\"../utils/utils\":27,\"../utils/xml-stream\":28,\"../utils/zip-stream\":29,\"./rel-type\":31,\"./xform/book/workbook-xform\":38,\"./xform/comment/comments-xform\":40,\"./xform/comment/vml-notes-xform\":45,\"./xform/core/app-xform\":51,\"./xform/core/content-types-xform\":52,\"./xform/core/core-xform\":53,\"./xform/core/relationships-xform\":55,\"./xform/drawing/drawing-xform\":62,\"./xform/sheet/worksheet-xform\":115,\"./xform/strings/shared-strings-xform\":124,\"./xform/style/styles-xform\":135,\"./xform/table/table-xform\":143,\"./xml/theme1\":145,_process:467,buffer:220,fs:216,jszip:441,\"readable-stream\":491}],145:[function(e,t,r){\"use strict\";t.exports='<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"Office Theme\"> <a:themeElements> <a:clrScheme name=\"Office\"> <a:dk1> <a:sysClr val=\"windowText\" lastClr=\"000000\"/> </a:dk1> <a:lt1> <a:sysClr val=\"window\" lastClr=\"FFFFFF\"/> </a:lt1> <a:dk2> <a:srgbClr val=\"1F497D\"/> </a:dk2> <a:lt2> <a:srgbClr val=\"EEECE1\"/> </a:lt2> <a:accent1> <a:srgbClr val=\"4F81BD\"/> </a:accent1> <a:accent2> <a:srgbClr val=\"C0504D\"/> </a:accent2> <a:accent3> <a:srgbClr val=\"9BBB59\"/> </a:accent3> <a:accent4> <a:srgbClr val=\"8064A2\"/> </a:accent4> <a:accent5> <a:srgbClr val=\"4BACC6\"/> </a:accent5> <a:accent6> <a:srgbClr val=\"F79646\"/> </a:accent6> <a:hlink> <a:srgbClr val=\"0000FF\"/> </a:hlink> <a:folHlink> <a:srgbClr val=\"800080\"/> </a:folHlink> </a:clrScheme> <a:fontScheme name=\"Office\"> <a:majorFont> <a:latin typeface=\"Cambria\"/> <a:ea typeface=\"\"/> <a:cs typeface=\"\"/> <a:font script=\"Jpan\" typeface=\"ＭＳ Ｐゴシック\"/> <a:font script=\"Hang\" typeface=\"맑은 고딕\"/> <a:font script=\"Hans\" typeface=\"宋体\"/> <a:font script=\"Hant\" typeface=\"新細明體\"/> <a:font script=\"Arab\" typeface=\"Times New Roman\"/> <a:font script=\"Hebr\" typeface=\"Times New Roman\"/> <a:font script=\"Thai\" typeface=\"Tahoma\"/> <a:font script=\"Ethi\" typeface=\"Nyala\"/> <a:font script=\"Beng\" typeface=\"Vrinda\"/> <a:font script=\"Gujr\" typeface=\"Shruti\"/> <a:font script=\"Khmr\" typeface=\"MoolBoran\"/> <a:font script=\"Knda\" typeface=\"Tunga\"/> <a:font script=\"Guru\" typeface=\"Raavi\"/> <a:font script=\"Cans\" typeface=\"Euphemia\"/> <a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/> <a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/> <a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/> <a:font script=\"Thaa\" typeface=\"MV Boli\"/> <a:font script=\"Deva\" typeface=\"Mangal\"/> <a:font script=\"Telu\" typeface=\"Gautami\"/> <a:font script=\"Taml\" typeface=\"Latha\"/> <a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/> <a:font script=\"Orya\" typeface=\"Kalinga\"/> <a:font script=\"Mlym\" typeface=\"Kartika\"/> <a:font script=\"Laoo\" typeface=\"DokChampa\"/> <a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/> <a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/> <a:font script=\"Viet\" typeface=\"Times New Roman\"/> <a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/> <a:font script=\"Geor\" typeface=\"Sylfaen\"/> </a:majorFont> <a:minorFont> <a:latin typeface=\"Calibri\"/> <a:ea typeface=\"\"/> <a:cs typeface=\"\"/> <a:font script=\"Jpan\" typeface=\"ＭＳ Ｐゴシック\"/> <a:font script=\"Hang\" typeface=\"맑은 고딕\"/> <a:font script=\"Hans\" typeface=\"宋体\"/> <a:font script=\"Hant\" typeface=\"新細明體\"/> <a:font script=\"Arab\" typeface=\"Arial\"/> <a:font script=\"Hebr\" typeface=\"Arial\"/> <a:font script=\"Thai\" typeface=\"Tahoma\"/> <a:font script=\"Ethi\" typeface=\"Nyala\"/> <a:font script=\"Beng\" typeface=\"Vrinda\"/> <a:font script=\"Gujr\" typeface=\"Shruti\"/> <a:font script=\"Khmr\" typeface=\"DaunPenh\"/> <a:font script=\"Knda\" typeface=\"Tunga\"/> <a:font script=\"Guru\" typeface=\"Raavi\"/> <a:font script=\"Cans\" typeface=\"Euphemia\"/> <a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/> <a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/> <a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/> <a:font script=\"Thaa\" typeface=\"MV Boli\"/> <a:font script=\"Deva\" typeface=\"Mangal\"/> <a:font script=\"Telu\" typeface=\"Gautami\"/> <a:font script=\"Taml\" typeface=\"Latha\"/> <a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/> <a:font script=\"Orya\" typeface=\"Kalinga\"/> <a:font script=\"Mlym\" typeface=\"Kartika\"/> <a:font script=\"Laoo\" typeface=\"DokChampa\"/> <a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/> <a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/> <a:font script=\"Viet\" typeface=\"Arial\"/> <a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/> <a:font script=\"Geor\" typeface=\"Sylfaen\"/> </a:minorFont> </a:fontScheme> <a:fmtScheme name=\"Office\"> <a:fillStyleLst> <a:solidFill> <a:schemeClr val=\"phClr\"/> </a:solidFill> <a:gradFill rotWithShape=\"1\"> <a:gsLst> <a:gs pos=\"0\"> <a:schemeClr val=\"phClr\"> <a:tint val=\"50000\"/> <a:satMod val=\"300000\"/> </a:schemeClr> </a:gs> <a:gs pos=\"35000\"> <a:schemeClr val=\"phClr\"> <a:tint val=\"37000\"/> <a:satMod val=\"300000\"/> </a:schemeClr> </a:gs> <a:gs pos=\"100000\"> <a:schemeClr val=\"phClr\"> <a:tint val=\"15000\"/> <a:satMod val=\"350000\"/> </a:schemeClr> </a:gs> </a:gsLst> <a:lin ang=\"16200000\" scaled=\"1\"/> </a:gradFill> <a:gradFill rotWithShape=\"1\"> <a:gsLst> <a:gs pos=\"0\"> <a:schemeClr val=\"phClr\"> <a:tint val=\"100000\"/> <a:shade val=\"100000\"/> <a:satMod val=\"130000\"/> </a:schemeClr> </a:gs> <a:gs pos=\"100000\"> <a:schemeClr val=\"phClr\"> <a:tint val=\"50000\"/> <a:shade val=\"100000\"/> <a:satMod val=\"350000\"/> </a:schemeClr> </a:gs> </a:gsLst> <a:lin ang=\"16200000\" scaled=\"0\"/> </a:gradFill> </a:fillStyleLst> <a:lnStyleLst> <a:ln w=\"9525\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"> <a:solidFill> <a:schemeClr val=\"phClr\"> <a:shade val=\"95000\"/> <a:satMod val=\"105000\"/> </a:schemeClr> </a:solidFill> <a:prstDash val=\"solid\"/> </a:ln> <a:ln w=\"25400\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"> <a:solidFill> <a:schemeClr val=\"phClr\"/> </a:solidFill> <a:prstDash val=\"solid\"/> </a:ln> <a:ln w=\"38100\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"> <a:solidFill> <a:schemeClr val=\"phClr\"/> </a:solidFill> <a:prstDash val=\"solid\"/> </a:ln> </a:lnStyleLst> <a:effectStyleLst> <a:effectStyle> <a:effectLst> <a:outerShdw blurRad=\"40000\" dist=\"20000\" dir=\"5400000\" rotWithShape=\"0\"> <a:srgbClr val=\"000000\"> <a:alpha val=\"38000\"/> </a:srgbClr> </a:outerShdw> </a:effectLst> </a:effectStyle> <a:effectStyle> <a:effectLst> <a:outerShdw blurRad=\"40000\" dist=\"23000\" dir=\"5400000\" rotWithShape=\"0\"> <a:srgbClr val=\"000000\"> <a:alpha val=\"35000\"/> </a:srgbClr> </a:outerShdw> </a:effectLst> </a:effectStyle> <a:effectStyle> <a:effectLst> <a:outerShdw blurRad=\"40000\" dist=\"23000\" dir=\"5400000\" rotWithShape=\"0\"> <a:srgbClr val=\"000000\"> <a:alpha val=\"35000\"/> </a:srgbClr> </a:outerShdw> </a:effectLst> <a:scene3d> <a:camera prst=\"orthographicFront\"> <a:rot lat=\"0\" lon=\"0\" rev=\"0\"/> </a:camera> <a:lightRig rig=\"threePt\" dir=\"t\"> <a:rot lat=\"0\" lon=\"0\" rev=\"1200000\"/> </a:lightRig> </a:scene3d> <a:sp3d> <a:bevelT w=\"63500\" h=\"25400\"/> </a:sp3d> </a:effectStyle> </a:effectStyleLst> <a:bgFillStyleLst> <a:solidFill> <a:schemeClr val=\"phClr\"/> </a:solidFill> <a:gradFill rotWithShape=\"1\"> <a:gsLst> <a:gs pos=\"0\"> <a:schemeClr val=\"phClr\"> <a:tint val=\"40000\"/> <a:satMod val=\"350000\"/> </a:schemeClr> </a:gs> <a:gs pos=\"40000\"> <a:schemeClr val=\"phClr\"> <a:tint val=\"45000\"/> <a:shade val=\"99000\"/> <a:satMod val=\"350000\"/> </a:schemeClr> </a:gs> <a:gs pos=\"100000\"> <a:schemeClr val=\"phClr\"> <a:shade val=\"20000\"/> <a:satMod val=\"255000\"/> </a:schemeClr> </a:gs> </a:gsLst> <a:path path=\"circle\"> <a:fillToRect l=\"50000\" t=\"-80000\" r=\"50000\" b=\"180000\"/> </a:path> </a:gradFill> <a:gradFill rotWithShape=\"1\"> <a:gsLst> <a:gs pos=\"0\"> <a:schemeClr val=\"phClr\"> <a:tint val=\"80000\"/> <a:satMod val=\"300000\"/> </a:schemeClr> </a:gs> <a:gs pos=\"100000\"> <a:schemeClr val=\"phClr\"> <a:shade val=\"30000\"/> <a:satMod val=\"200000\"/> </a:schemeClr> </a:gs> </a:gsLst> <a:path path=\"circle\"> <a:fillToRect l=\"50000\" t=\"50000\" r=\"50000\" b=\"50000\"/> </a:path> </a:gradFill> </a:bgFillStyleLst> </a:fmtScheme> </a:themeElements> <a:objectDefaults> <a:spDef> <a:spPr/> <a:bodyPr/> <a:lstStyle/> <a:style> <a:lnRef idx=\"1\"> <a:schemeClr val=\"accent1\"/> </a:lnRef> <a:fillRef idx=\"3\"> <a:schemeClr val=\"accent1\"/> </a:fillRef> <a:effectRef idx=\"2\"> <a:schemeClr val=\"accent1\"/> </a:effectRef> <a:fontRef idx=\"minor\"> <a:schemeClr val=\"lt1\"/> </a:fontRef> </a:style> </a:spDef> <a:lnDef> <a:spPr/> <a:bodyPr/> <a:lstStyle/> <a:style> <a:lnRef idx=\"2\"> <a:schemeClr val=\"accent1\"/> </a:lnRef> <a:fillRef idx=\"0\"> <a:schemeClr val=\"accent1\"/> </a:fillRef> <a:effectRef idx=\"1\"> <a:schemeClr val=\"accent1\"/> </a:effectRef> <a:fontRef idx=\"minor\"> <a:schemeClr val=\"tx1\"/> </a:fontRef> </a:style> </a:lnDef> </a:objectDefaults> <a:extraClrSchemeLst/> </a:theme>'},{}],146:[function(e,t,r){(function(t){(function(){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.CsvFormatterStream=void 0;const n=e(\"stream\"),o=e(\"./formatter\");class i extends n.Transform{constructor(e){super({writableObjectMode:e.objectMode}),this.hasWrittenBOM=!1,this.formatterOptions=e,this.rowFormatter=new o.RowFormatter(e),this.hasWrittenBOM=!e.writeBOM}transform(e){return this.rowFormatter.rowTransform=e,this}_transform(e,r,n){let o=!1;try{this.hasWrittenBOM||(this.push(this.formatterOptions.BOM),this.hasWrittenBOM=!0),this.rowFormatter.format(e,((e,r)=>e?(o=!0,n(e)):(r&&r.forEach((e=>{this.push(t.from(e,\"utf8\"))})),o=!0,n())))}catch(e){if(o)throw e;n(e)}}_flush(e){this.rowFormatter.finish(((r,n)=>r?e(r):(n&&n.forEach((e=>{this.push(t.from(e,\"utf8\"))})),e())))}}r.CsvFormatterStream=i}).call(this)}).call(this,e(\"buffer\").Buffer)},{\"./formatter\":150,buffer:220,stream:505}],147:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.FormatterOptions=void 0,r.FormatterOptions=class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};var t;this.objectMode=!0,this.delimiter=\",\",this.rowDelimiter=\"\\n\",this.quote='\"',this.escape=this.quote,this.quoteColumns=!1,this.quoteHeaders=this.quoteColumns,this.headers=null,this.includeEndRowDelimiter=!1,this.writeBOM=!1,this.BOM=\"\\ufeff\",this.alwaysWriteHeaders=!1,Object.assign(this,e||{}),void 0===(null==e?void 0:e.quoteHeaders)&&(this.quoteHeaders=this.quoteColumns),!0===(null==e?void 0:e.quote)?this.quote='\"':!1===(null==e?void 0:e.quote)&&(this.quote=\"\"),\"string\"!=typeof(null==e?void 0:e.escape)&&(this.escape=this.quote),this.shouldWriteHeaders=!!this.headers&&(null===(t=e.writeHeaders)||void 0===t||t),this.headers=Array.isArray(this.headers)?this.headers:null,this.escapedQuote=`${this.escape}${this.quote}`}}},{}],148:[function(e,t,r){\"use strict\";var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,\"__esModule\",{value:!0}),r.FieldFormatter=void 0;const o=n(e(\"lodash.isboolean\")),i=n(e(\"lodash.isnil\")),a=n(e(\"lodash.escaperegexp\"));r.FieldFormatter=class{constructor(e){this._headers=null,this.formatterOptions=e,null!==e.headers&&(this.headers=e.headers),this.REPLACE_REGEXP=new RegExp(e.quote,\"g\");const t=`[${e.delimiter}${a.default(e.rowDelimiter)}|\\r|\\n]`;this.ESCAPE_REGEXP=new RegExp(t)}set headers(e){this._headers=e}shouldQuote(e,t){const r=t?this.formatterOptions.quoteHeaders:this.formatterOptions.quoteColumns;return o.default(r)?r:Array.isArray(r)?r[e]:null!==this._headers&&r[this._headers[e]]}format(e,t,r){const n=(\"\"+(i.default(e)?\"\":e)).replace(/\\0/g,\"\"),{formatterOptions:o}=this;return\"\"!==o.quote&&-1!==n.indexOf(o.quote)?this.quoteField(n.replace(this.REPLACE_REGEXP,o.escapedQuote)):-1!==n.search(this.ESCAPE_REGEXP)||this.shouldQuote(t,r)?this.quoteField(n):n}quoteField(e){const{quote:t}=this.formatterOptions;return`${t}${e}${t}`}}},{\"lodash.escaperegexp\":442,\"lodash.isboolean\":444,\"lodash.isnil\":447}],149:[function(e,t,r){\"use strict\";var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,\"__esModule\",{value:!0}),r.RowFormatter=void 0;const o=n(e(\"lodash.isfunction\")),i=n(e(\"lodash.isequal\")),a=e(\"./FieldFormatter\"),s=e(\"../types\");class l{constructor(e){this.rowCount=0,this.formatterOptions=e,this.fieldFormatter=new a.FieldFormatter(e),this.headers=e.headers,this.shouldWriteHeaders=e.shouldWriteHeaders,this.hasWrittenHeaders=!1,null!==this.headers&&(this.fieldFormatter.headers=this.headers),e.transform&&(this.rowTransform=e.transform)}static isRowHashArray(e){return!!Array.isArray(e)&&Array.isArray(e[0])&&2===e[0].length}static isRowArray(e){return Array.isArray(e)&&!this.isRowHashArray(e)}static gatherHeaders(e){return l.isRowHashArray(e)?e.map((e=>e[0])):Array.isArray(e)?e:Object.keys(e)}static createTransform(e){return s.isSyncTransform(e)?(t,r)=>{let n=null;try{n=e(t)}catch(e){return r(e)}return r(null,n)}:(t,r)=>{e(t,r)}}set rowTransform(e){if(!o.default(e))throw new TypeError(\"The transform should be a function\");this._rowTransform=l.createTransform(e)}format(e,t){this.callTransformer(e,((r,n)=>{if(r)return t(r);if(!e)return t(null);const o=[];if(n){const{shouldFormatColumns:e,headers:t}=this.checkHeaders(n);if(this.shouldWriteHeaders&&t&&!this.hasWrittenHeaders&&(o.push(this.formatColumns(t,!0)),this.hasWrittenHeaders=!0),e){const e=this.gatherColumns(n);o.push(this.formatColumns(e,!1))}}return t(null,o)}))}finish(e){const t=[];if(this.formatterOptions.alwaysWriteHeaders&&0===this.rowCount){if(!this.headers)return e(new Error(\"`alwaysWriteHeaders` option is set to true but `headers` option not provided.\"));t.push(this.formatColumns(this.headers,!0))}return this.formatterOptions.includeEndRowDelimiter&&t.push(this.formatterOptions.rowDelimiter),e(null,t)}checkHeaders(e){if(this.headers)return{shouldFormatColumns:!0,headers:this.headers};const t=l.gatherHeaders(e);return this.headers=t,this.fieldFormatter.headers=t,this.shouldWriteHeaders?{shouldFormatColumns:!i.default(t,e),headers:t}:{shouldFormatColumns:!0,headers:null}}gatherColumns(e){if(null===this.headers)throw new Error(\"Headers is currently null\");return Array.isArray(e)?l.isRowHashArray(e)?this.headers.map(((t,r)=>{const n=e[r];return n?n[1]:\"\"})):l.isRowArray(e)&&!this.shouldWriteHeaders?e:this.headers.map(((t,r)=>e[r])):this.headers.map((t=>e[t]))}callTransformer(e,t){return this._rowTransform?this._rowTransform(e,t):t(null,e)}formatColumns(e,t){const r=e.map(((e,r)=>this.fieldFormatter.format(e,r,t))).join(this.formatterOptions.delimiter),{rowCount:n}=this;return this.rowCount+=1,n?[this.formatterOptions.rowDelimiter,r].join(\"\"):r}}r.RowFormatter=l},{\"../types\":152,\"./FieldFormatter\":148,\"lodash.isequal\":445,\"lodash.isfunction\":446}],150:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.FieldFormatter=r.RowFormatter=void 0;var n=e(\"./RowFormatter\");Object.defineProperty(r,\"RowFormatter\",{enumerable:!0,get:function(){return n.RowFormatter}});var o=e(\"./FieldFormatter\");Object.defineProperty(r,\"FieldFormatter\",{enumerable:!0,get:function(){return o.FieldFormatter}})},{\"./FieldFormatter\":148,\"./RowFormatter\":149}],151:[function(e,t,r){(function(t){(function(){\"use strict\";var n=Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},o=Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:!0,value:t})}:function(e,t){e.default=t};Object.defineProperty(r,\"__esModule\",{value:!0}),r.writeToPath=r.writeToString=r.writeToBuffer=r.writeToStream=r.write=r.format=r.FormatterOptions=r.CsvFormatterStream=void 0;const i=e(\"util\"),a=e(\"stream\"),s=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)\"default\"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return o(t,e),t}(e(\"fs\")),l=e(\"./FormatterOptions\"),c=e(\"./CsvFormatterStream\");!function(e,t){for(var r in e)\"default\"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)}(e(\"./types\"),r);var u=e(\"./CsvFormatterStream\");Object.defineProperty(r,\"CsvFormatterStream\",{enumerable:!0,get:function(){return u.CsvFormatterStream}});var d=e(\"./FormatterOptions\");Object.defineProperty(r,\"FormatterOptions\",{enumerable:!0,get:function(){return d.FormatterOptions}}),r.format=e=>new c.CsvFormatterStream(new l.FormatterOptions(e)),r.write=(e,t)=>{const n=r.format(t),o=i.promisify(((e,t)=>{n.write(e,void 0,t)}));return e.reduce(((e,t)=>e.then((()=>o(t)))),Promise.resolve()).then((()=>n.end())).catch((e=>{n.emit(\"error\",e)})),n},r.writeToStream=(e,t,n)=>r.write(t,n).pipe(e),r.writeToBuffer=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=[],i=new a.Writable({write(e,t,r){o.push(e),r()}});return new Promise(((a,s)=>{i.on(\"error\",s).on(\"finish\",(()=>a(t.concat(o)))),r.write(e,n).pipe(i)}))},r.writeToString=(e,t)=>r.writeToBuffer(e,t).then((e=>e.toString())),r.writeToPath=(e,t,n)=>{const o=s.createWriteStream(e,{encoding:\"utf8\"});return r.write(t,n).pipe(o)}}).call(this)}).call(this,e(\"buffer\").Buffer)},{\"./CsvFormatterStream\":146,\"./FormatterOptions\":147,\"./types\":152,buffer:220,fs:216,stream:505,util:527}],152:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.isSyncTransform=void 0,r.isSyncTransform=e=>1===e.length},{}],153:[function(e,t,r){(function(t){(function(){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.CsvParserStream=void 0;const n=e(\"string_decoder\"),o=e(\"stream\"),i=e(\"./transforms\"),a=e(\"./parser\");class s extends o.Transform{constructor(e){super({objectMode:e.objectMode}),this.lines=\"\",this.rowCount=0,this.parsedRowCount=0,this.parsedLineCount=0,this.endEmitted=!1,this.headersEmitted=!1,this.parserOptions=e,this.parser=new a.Parser(e),this.headerTransformer=new i.HeaderTransformer(e),this.decoder=new n.StringDecoder(e.encoding),this.rowTransformerValidator=new i.RowTransformerValidator}get hasHitRowLimit(){return this.parserOptions.limitRows&&this.rowCount>=this.parserOptions.maxRows}get shouldEmitRows(){return this.parsedRowCount>this.parserOptions.skipRows}get shouldSkipLine(){return this.parsedLineCount<=this.parserOptions.skipLines}transform(e){return this.rowTransformerValidator.rowTransform=e,this}validate(e){return this.rowTransformerValidator.rowValidator=e,this}emit(e){if(\"end\"===e)return this.endEmitted||(this.endEmitted=!0,super.emit(\"end\",this.rowCount)),!1;for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];return super.emit(e,...r)}_transform(e,t,r){if(this.hasHitRowLimit)return r();const n=s.wrapDoneCallback(r);try{const{lines:t}=this,r=t+this.decoder.write(e),o=this.parse(r,!0);return this.processRows(o,n)}catch(e){return n(e)}}_flush(e){const t=s.wrapDoneCallback(e);if(this.hasHitRowLimit)return t();try{const e=this.lines+this.decoder.end(),r=this.parse(e,!1);return this.processRows(r,t)}catch(e){return t(e)}}parse(e,t){if(!e)return[];const{line:r,rows:n}=this.parser.parse(e,t);return this.lines=r,n}processRows(e,r){const n=e.length,o=i=>{const a=e=>e?r(e):i%100!=0?o(i+1):void t((()=>o(i+1)));if(this.checkAndEmitHeaders(),i>=n||this.hasHitRowLimit)return r();if(this.parsedLineCount+=1,this.shouldSkipLine)return a();const s=e[i];this.rowCount+=1,this.parsedRowCount+=1;const l=this.rowCount;return this.transformRow(s,((e,t)=>{if(e)return this.rowCount-=1,a(e);if(!t)return a(new Error(\"expected transform result\"));if(t.isValid){if(t.row)return this.pushRow(t.row,a)}else this.emit(\"data-invalid\",t.row,l,t.reason);return a()}))};o(0)}transformRow(e,t){try{this.headerTransformer.transform(e,((r,n)=>r?t(r):n?n.isValid?n.row?this.shouldEmitRows?this.rowTransformerValidator.transformAndValidate(n.row,t):this.skipRow(t):(this.rowCount-=1,this.parsedRowCount-=1,t(null,{row:null,isValid:!0})):this.shouldEmitRows?t(null,{isValid:!1,row:e}):this.skipRow(t):t(new Error(\"Expected result from header transform\"))))}catch(e){t(e)}}checkAndEmitHeaders(){!this.headersEmitted&&this.headerTransformer.headers&&(this.headersEmitted=!0,this.emit(\"headers\",this.headerTransformer.headers))}skipRow(e){return this.rowCount-=1,e(null,{row:null,isValid:!0})}pushRow(e,t){try{this.parserOptions.objectMode?this.push(e):this.push(JSON.stringify(e)),t()}catch(e){t(e)}}static wrapDoneCallback(e){let t=!1;return function(r){if(r){if(t)throw r;return t=!0,void e(r)}for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];e(...o)}}}r.CsvParserStream=s}).call(this)}).call(this,e(\"timers\").setImmediate)},{\"./parser\":165,\"./transforms\":168,stream:505,string_decoder:218,timers:523}],154:[function(e,t,r){\"use strict\";var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,\"__esModule\",{value:!0}),r.ParserOptions=void 0;const o=n(e(\"lodash.escaperegexp\")),i=n(e(\"lodash.isnil\"));r.ParserOptions=class{constructor(e){var t;if(this.objectMode=!0,this.delimiter=\",\",this.ignoreEmpty=!1,this.quote='\"',this.escape=null,this.escapeChar=this.quote,this.comment=null,this.supportsComments=!1,this.ltrim=!1,this.rtrim=!1,this.trim=!1,this.headers=null,this.renameHeaders=!1,this.strictColumnHandling=!1,this.discardUnmappedColumns=!1,this.carriageReturn=\"\\r\",this.encoding=\"utf8\",this.limitRows=!1,this.maxRows=0,this.skipLines=0,this.skipRows=0,Object.assign(this,e||{}),this.delimiter.length>1)throw new Error(\"delimiter option must be one character long\");this.escapedDelimiter=o.default(this.delimiter),this.escapeChar=null!==(t=this.escape)&&void 0!==t?t:this.quote,this.supportsComments=!i.default(this.comment),this.NEXT_TOKEN_REGEXP=new RegExp(`([^\\\\s]|\\\\r\\\\n|\\\\n|\\\\r|${this.escapedDelimiter})`),this.maxRows>0&&(this.limitRows=!0)}}},{\"lodash.escaperegexp\":442,\"lodash.isnil\":447}],155:[function(e,t,r){\"use strict\";var n=Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},o=Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:!0,value:t})}:function(e,t){e.default=t};Object.defineProperty(r,\"__esModule\",{value:!0}),r.parseString=r.parseFile=r.parseStream=r.parse=r.ParserOptions=r.CsvParserStream=void 0;const i=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)\"default\"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return o(t,e),t}(e(\"fs\")),a=e(\"stream\"),s=e(\"./ParserOptions\"),l=e(\"./CsvParserStream\");!function(e,t){for(var r in e)\"default\"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)}(e(\"./types\"),r);var c=e(\"./CsvParserStream\");Object.defineProperty(r,\"CsvParserStream\",{enumerable:!0,get:function(){return c.CsvParserStream}});var u=e(\"./ParserOptions\");Object.defineProperty(r,\"ParserOptions\",{enumerable:!0,get:function(){return u.ParserOptions}}),r.parse=e=>new l.CsvParserStream(new s.ParserOptions(e)),r.parseStream=(e,t)=>e.pipe(new l.CsvParserStream(new s.ParserOptions(t))),r.parseFile=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return i.createReadStream(e).pipe(new l.CsvParserStream(new s.ParserOptions(t)))},r.parseString=(e,t)=>{const r=new a.Readable;return r.push(e),r.push(null),r.pipe(new l.CsvParserStream(new s.ParserOptions(t)))}},{\"./CsvParserStream\":153,\"./ParserOptions\":154,\"./types\":169,fs:216,stream:505}],156:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.Parser=void 0;const n=e(\"./Scanner\"),o=e(\"./RowParser\"),i=e(\"./Token\");class a{constructor(e){this.parserOptions=e,this.rowParser=new o.RowParser(this.parserOptions)}static removeBOM(e){return e&&65279===e.charCodeAt(0)?e.slice(1):e}parse(e,t){const r=new n.Scanner({line:a.removeBOM(e),parserOptions:this.parserOptions,hasMoreData:t});return this.parserOptions.supportsComments?this.parseWithComments(r):this.parseWithoutComments(r)}parseWithoutComments(e){const t=[];let r=!0;for(;r;)r=this.parseRow(e,t);return{line:e.line,rows:t}}parseWithComments(e){const{parserOptions:t}=this,r=[];for(let n=e.nextCharacterToken;null!==n;n=e.nextCharacterToken)if(i.Token.isTokenComment(n,t)){if(null===e.advancePastLine())return{line:e.lineFromCursor,rows:r};if(!e.hasMoreCharacters)return{line:e.lineFromCursor,rows:r};e.truncateToCursor()}else if(!this.parseRow(e,r))break;return{line:e.line,rows:r}}parseRow(e,t){if(!e.nextNonSpaceToken)return!1;const r=this.rowParser.parse(e);return null!==r&&(this.parserOptions.ignoreEmpty&&o.RowParser.isEmptyRow(r)||t.push(r),!0)}}r.Parser=a},{\"./RowParser\":157,\"./Scanner\":158,\"./Token\":159}],157:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.RowParser=void 0;const n=e(\"./column\"),o=e(\"./Token\");r.RowParser=class{constructor(e){this.parserOptions=e,this.columnParser=new n.ColumnParser(e)}static isEmptyRow(e){return\"\"===e.join(\"\").replace(/\\s+/g,\"\")}parse(e){const{parserOptions:t}=this,{hasMoreData:r}=e,n=e,i=[];let a=this.getStartToken(n,i);for(;a;){if(o.Token.isTokenRowDelimiter(a))return n.advancePastToken(a),!n.hasMoreCharacters&&o.Token.isTokenCarriageReturn(a,t)&&r?null:(n.truncateToCursor(),i);if(!this.shouldSkipColumnParse(n,a,i)){const e=this.columnParser.parse(n);if(null===e)return null;i.push(e)}a=n.nextNonSpaceToken}return r?null:(n.truncateToCursor(),i)}getStartToken(e,t){const r=e.nextNonSpaceToken;return null!==r&&o.Token.isTokenDelimiter(r,this.parserOptions)?(t.push(\"\"),e.nextNonSpaceToken):r}shouldSkipColumnParse(e,t,r){const{parserOptions:n}=this;if(o.Token.isTokenDelimiter(t,n)){e.advancePastToken(t);const i=e.nextCharacterToken;if(!e.hasMoreCharacters||null!==i&&o.Token.isTokenRowDelimiter(i))return r.push(\"\"),!0;if(null!==i&&o.Token.isTokenDelimiter(i,n))return r.push(\"\"),!0}return!1}}},{\"./Token\":159,\"./column\":164}],158:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.Scanner=void 0;const n=e(\"./Token\"),o=/((?:\\r\\n)|\\n|\\r)/;r.Scanner=class{constructor(e){this.cursor=0,this.line=e.line,this.lineLength=this.line.length,this.parserOptions=e.parserOptions,this.hasMoreData=e.hasMoreData,this.cursor=e.cursor||0}get hasMoreCharacters(){return this.lineLength>this.cursor}get nextNonSpaceToken(){const{lineFromCursor:e}=this,t=this.parserOptions.NEXT_TOKEN_REGEXP;if(-1===e.search(t))return null;const r=t.exec(e);if(null==r)return null;const o=r[1],i=this.cursor+(r.index||0);return new n.Token({token:o,startCursor:i,endCursor:i+o.length-1})}get nextCharacterToken(){const{cursor:e,lineLength:t}=this;return t<=e?null:new n.Token({token:this.line[e],startCursor:e,endCursor:e})}get lineFromCursor(){return this.line.substr(this.cursor)}advancePastLine(){const e=o.exec(this.lineFromCursor);return e?(this.cursor+=(e.index||0)+e[0].length,this):this.hasMoreData?null:(this.cursor=this.lineLength,this)}advanceTo(e){return this.cursor=e,this}advanceToToken(e){return this.cursor=e.startCursor,this}advancePastToken(e){return this.cursor=e.endCursor+1,this}truncateToCursor(){return this.line=this.lineFromCursor,this.lineLength=this.line.length,this.cursor=0,this}}},{\"./Token\":159}],159:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.Token=void 0,r.Token=class{constructor(e){this.token=e.token,this.startCursor=e.startCursor,this.endCursor=e.endCursor}static isTokenRowDelimiter(e){const t=e.token;return\"\\r\"===t||\"\\n\"===t||\"\\r\\n\"===t}static isTokenCarriageReturn(e,t){return e.token===t.carriageReturn}static isTokenComment(e,t){return t.supportsComments&&!!e&&e.token===t.comment}static isTokenEscapeCharacter(e,t){return e.token===t.escapeChar}static isTokenQuote(e,t){return e.token===t.quote}static isTokenDelimiter(e,t){return e.token===t.delimiter}}},{}],160:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.ColumnFormatter=void 0,r.ColumnFormatter=class{constructor(e){e.trim?this.format=e=>e.trim():e.ltrim?this.format=e=>e.trimLeft():e.rtrim?this.format=e=>e.trimRight():this.format=e=>e}}},{}],161:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.ColumnParser=void 0;const n=e(\"./NonQuotedColumnParser\"),o=e(\"./QuotedColumnParser\"),i=e(\"../Token\");r.ColumnParser=class{constructor(e){this.parserOptions=e,this.quotedColumnParser=new o.QuotedColumnParser(e),this.nonQuotedColumnParser=new n.NonQuotedColumnParser(e)}parse(e){const{nextNonSpaceToken:t}=e;return null!==t&&i.Token.isTokenQuote(t,this.parserOptions)?(e.advanceToToken(t),this.quotedColumnParser.parse(e)):this.nonQuotedColumnParser.parse(e)}}},{\"../Token\":159,\"./NonQuotedColumnParser\":162,\"./QuotedColumnParser\":163}],162:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.NonQuotedColumnParser=void 0;const n=e(\"./ColumnFormatter\"),o=e(\"../Token\");r.NonQuotedColumnParser=class{constructor(e){this.parserOptions=e,this.columnFormatter=new n.ColumnFormatter(e)}parse(e){if(!e.hasMoreCharacters)return null;const{parserOptions:t}=this,r=[];let n=e.nextCharacterToken;for(;n&&!o.Token.isTokenDelimiter(n,t)&&!o.Token.isTokenRowDelimiter(n);n=e.nextCharacterToken)r.push(n.token),e.advancePastToken(n);return this.columnFormatter.format(r.join(\"\"))}}},{\"../Token\":159,\"./ColumnFormatter\":160}],163:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.QuotedColumnParser=void 0;const n=e(\"./ColumnFormatter\"),o=e(\"../Token\");r.QuotedColumnParser=class{constructor(e){this.parserOptions=e,this.columnFormatter=new n.ColumnFormatter(e)}parse(e){if(!e.hasMoreCharacters)return null;const t=e.cursor,{foundClosingQuote:r,col:n}=this.gatherDataBetweenQuotes(e);if(!r){if(e.advanceTo(t),!e.hasMoreData)throw new Error(`Parse Error: missing closing: '${this.parserOptions.quote||\"\"}' in line: at '${e.lineFromCursor.replace(/[\\r\\n]/g,\"\\\\n'\")}'`);return null}return this.checkForMalformedColumn(e),n}gatherDataBetweenQuotes(e){const{parserOptions:t}=this;let r=!1,n=!1;const i=[];let a=e.nextCharacterToken;for(;!n&&null!==a;a=e.nextCharacterToken){const s=o.Token.isTokenQuote(a,t);if(!r&&s)r=!0;else if(r)if(o.Token.isTokenEscapeCharacter(a,t)){e.advancePastToken(a);const r=e.nextCharacterToken;null!==r&&(o.Token.isTokenQuote(r,t)||o.Token.isTokenEscapeCharacter(r,t))?(i.push(r.token),a=r):s?n=!0:i.push(a.token)}else s?n=!0:i.push(a.token);e.advancePastToken(a)}return{col:this.columnFormatter.format(i.join(\"\")),foundClosingQuote:n}}checkForMalformedColumn(e){const{parserOptions:t}=this,{nextNonSpaceToken:r}=e;if(r){const n=o.Token.isTokenDelimiter(r,t),i=o.Token.isTokenRowDelimiter(r);if(!n&&!i){const n=e.lineFromCursor.substr(0,10).replace(/[\\r\\n]/g,\"\\\\n'\");throw new Error(`Parse Error: expected: '${t.escapedDelimiter}' OR new line got: '${r.token}'. at '${n}`)}e.advanceToToken(r)}else e.hasMoreData||e.advancePastLine()}}},{\"../Token\":159,\"./ColumnFormatter\":160}],164:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.ColumnFormatter=r.QuotedColumnParser=r.NonQuotedColumnParser=r.ColumnParser=void 0;var n=e(\"./ColumnParser\");Object.defineProperty(r,\"ColumnParser\",{enumerable:!0,get:function(){return n.ColumnParser}});var o=e(\"./NonQuotedColumnParser\");Object.defineProperty(r,\"NonQuotedColumnParser\",{enumerable:!0,get:function(){return o.NonQuotedColumnParser}});var i=e(\"./QuotedColumnParser\");Object.defineProperty(r,\"QuotedColumnParser\",{enumerable:!0,get:function(){return i.QuotedColumnParser}});var a=e(\"./ColumnFormatter\");Object.defineProperty(r,\"ColumnFormatter\",{enumerable:!0,get:function(){return a.ColumnFormatter}})},{\"./ColumnFormatter\":160,\"./ColumnParser\":161,\"./NonQuotedColumnParser\":162,\"./QuotedColumnParser\":163}],165:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.QuotedColumnParser=r.NonQuotedColumnParser=r.ColumnParser=r.Token=r.Scanner=r.RowParser=r.Parser=void 0;var n=e(\"./Parser\");Object.defineProperty(r,\"Parser\",{enumerable:!0,get:function(){return n.Parser}});var o=e(\"./RowParser\");Object.defineProperty(r,\"RowParser\",{enumerable:!0,get:function(){return o.RowParser}});var i=e(\"./Scanner\");Object.defineProperty(r,\"Scanner\",{enumerable:!0,get:function(){return i.Scanner}});var a=e(\"./Token\");Object.defineProperty(r,\"Token\",{enumerable:!0,get:function(){return a.Token}});var s=e(\"./column\");Object.defineProperty(r,\"ColumnParser\",{enumerable:!0,get:function(){return s.ColumnParser}}),Object.defineProperty(r,\"NonQuotedColumnParser\",{enumerable:!0,get:function(){return s.NonQuotedColumnParser}}),Object.defineProperty(r,\"QuotedColumnParser\",{enumerable:!0,get:function(){return s.QuotedColumnParser}})},{\"./Parser\":156,\"./RowParser\":157,\"./Scanner\":158,\"./Token\":159,\"./column\":164}],166:[function(e,t,r){\"use strict\";var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,\"__esModule\",{value:!0}),r.HeaderTransformer=void 0;const o=n(e(\"lodash.isundefined\")),i=n(e(\"lodash.isfunction\")),a=n(e(\"lodash.uniq\")),s=n(e(\"lodash.groupby\"));r.HeaderTransformer=class{constructor(e){this.headers=null,this.receivedHeaders=!1,this.shouldUseFirstRow=!1,this.processedFirstRow=!1,this.headersLength=0,this.parserOptions=e,!0===e.headers?this.shouldUseFirstRow=!0:Array.isArray(e.headers)?this.setHeaders(e.headers):i.default(e.headers)&&(this.headersTransform=e.headers)}transform(e,t){return this.shouldMapRow(e)?t(null,this.processRow(e)):t(null,{row:null,isValid:!0})}shouldMapRow(e){const{parserOptions:t}=this;if(!this.headersTransform&&t.renameHeaders&&!this.processedFirstRow){if(!this.receivedHeaders)throw new Error(\"Error renaming headers: new headers must be provided in an array\");return this.processedFirstRow=!0,!1}if(!this.receivedHeaders&&Array.isArray(e)){if(this.headersTransform)this.setHeaders(this.headersTransform(e));else{if(!this.shouldUseFirstRow)return!0;this.setHeaders(e)}return!1}return!0}processRow(e){if(!this.headers)return{row:e,isValid:!0};const{parserOptions:t}=this;if(!t.discardUnmappedColumns&&e.length>this.headersLength){if(!t.strictColumnHandling)throw new Error(`Unexpected Error: column header mismatch expected: ${this.headersLength} columns got: ${e.length}`);return{row:e,isValid:!1,reason:`Column header mismatch expected: ${this.headersLength} columns got: ${e.length}`}}return t.strictColumnHandling&&e.length<this.headersLength?{row:e,isValid:!1,reason:`Column header mismatch expected: ${this.headersLength} columns got: ${e.length}`}:{row:this.mapHeaders(e),isValid:!0}}mapHeaders(e){const t={},{headers:r,headersLength:n}=this;for(let i=0;i<n;i+=1){const n=r[i];if(!o.default(n)){const r=e[i];o.default(r)?t[n]=\"\":t[n]=r}}return t}setHeaders(e){var t;const r=e.filter((e=>!!e));if(a.default(r).length!==r.length){const e=s.default(r),t=Object.keys(e).filter((t=>e[t].length>1));throw new Error(\"Duplicate headers found \"+JSON.stringify(t))}this.headers=e,this.receivedHeaders=!0,this.headersLength=(null===(t=this.headers)||void 0===t?void 0:t.length)||0}}},{\"lodash.groupby\":443,\"lodash.isfunction\":446,\"lodash.isundefined\":448,\"lodash.uniq\":449}],167:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.RowTransformerValidator=void 0;const n=function(e){return e&&e.__esModule?e:{default:e}}(e(\"lodash.isfunction\")),o=e(\"../types\");class i{constructor(){this._rowTransform=null,this._rowValidator=null}static createTransform(e){return o.isSyncTransform(e)?(t,r)=>{let n=null;try{n=e(t)}catch(e){return r(e)}return r(null,n)}:e}static createValidator(e){return o.isSyncValidate(e)?(t,r)=>{r(null,{row:t,isValid:e(t)})}:(t,r)=>{e(t,((e,n,o)=>e?r(e):r(null,n?{row:t,isValid:n,reason:o}:{row:t,isValid:!1,reason:o})))}}set rowTransform(e){if(!n.default(e))throw new TypeError(\"The transform should be a function\");this._rowTransform=i.createTransform(e)}set rowValidator(e){if(!n.default(e))throw new TypeError(\"The validate should be a function\");this._rowValidator=i.createValidator(e)}transformAndValidate(e,t){return this.callTransformer(e,((e,r)=>e?t(e):r?this.callValidator(r,((e,n)=>e?t(e):n&&!n.isValid?t(null,{row:r,isValid:!1,reason:n.reason}):t(null,{row:r,isValid:!0}))):t(null,{row:null,isValid:!0})))}callTransformer(e,t){return this._rowTransform?this._rowTransform(e,t):t(null,e)}callValidator(e,t){return this._rowValidator?this._rowValidator(e,t):t(null,{row:e,isValid:!0})}}r.RowTransformerValidator=i},{\"../types\":169,\"lodash.isfunction\":446}],168:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.HeaderTransformer=r.RowTransformerValidator=void 0;var n=e(\"./RowTransformerValidator\");Object.defineProperty(r,\"RowTransformerValidator\",{enumerable:!0,get:function(){return n.RowTransformerValidator}});var o=e(\"./HeaderTransformer\");Object.defineProperty(r,\"HeaderTransformer\",{enumerable:!0,get:function(){return o.HeaderTransformer}})},{\"./HeaderTransformer\":166,\"./RowTransformerValidator\":167}],169:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.isSyncValidate=r.isSyncTransform=void 0,r.isSyncTransform=e=>1===e.length,r.isSyncValidate=e=>1===e.length},{}],170:[function(e,t,r){\"use strict\";const n=r;n.bignum=e(\"bn.js\"),n.define=e(\"./asn1/api\").define,n.base=e(\"./asn1/base\"),n.constants=e(\"./asn1/constants\"),n.decoders=e(\"./asn1/decoders\"),n.encoders=e(\"./asn1/encoders\")},{\"./asn1/api\":171,\"./asn1/base\":173,\"./asn1/constants\":177,\"./asn1/decoders\":179,\"./asn1/encoders\":182,\"bn.js\":184}],171:[function(e,t,r){\"use strict\";const n=e(\"./encoders\"),o=e(\"./decoders\"),i=e(\"inherits\");function a(e,t){this.name=e,this.body=t,this.decoders={},this.encoders={}}r.define=function(e,t){return new a(e,t)},a.prototype._createNamed=function(e){const t=this.name;function r(e){this._initNamed(e,t)}return i(r,e),r.prototype._initNamed=function(t,r){e.call(this,t,r)},new r(this)},a.prototype._getDecoder=function(e){return e=e||\"der\",this.decoders.hasOwnProperty(e)||(this.decoders[e]=this._createNamed(o[e])),this.decoders[e]},a.prototype.decode=function(e,t,r){return this._getDecoder(t).decode(e,r)},a.prototype._getEncoder=function(e){return e=e||\"der\",this.encoders.hasOwnProperty(e)||(this.encoders[e]=this._createNamed(n[e])),this.encoders[e]},a.prototype.encode=function(e,t,r){return this._getEncoder(t).encode(e,r)}},{\"./decoders\":179,\"./encoders\":182,inherits:440}],172:[function(e,t,r){\"use strict\";const n=e(\"inherits\"),o=e(\"../base/reporter\").Reporter,i=e(\"safer-buffer\").Buffer;function a(e,t){o.call(this,t),i.isBuffer(e)?(this.base=e,this.offset=0,this.length=e.length):this.error(\"Input not Buffer\")}function s(e,t){if(Array.isArray(e))this.length=0,this.value=e.map((function(e){return s.isEncoderBuffer(e)||(e=new s(e,t)),this.length+=e.length,e}),this);else if(\"number\"==typeof e){if(!(0<=e&&e<=255))return t.error(\"non-byte EncoderBuffer value\");this.value=e,this.length=1}else if(\"string\"==typeof e)this.value=e,this.length=i.byteLength(e);else{if(!i.isBuffer(e))return t.error(\"Unsupported type: \"+typeof e);this.value=e,this.length=e.length}}n(a,o),r.DecoderBuffer=a,a.isDecoderBuffer=function(e){return e instanceof a||\"object\"==typeof e&&i.isBuffer(e.base)&&\"DecoderBuffer\"===e.constructor.name&&\"number\"==typeof e.offset&&\"number\"==typeof e.length&&\"function\"==typeof e.save&&\"function\"==typeof e.restore&&\"function\"==typeof e.isEmpty&&\"function\"==typeof e.readUInt8&&\"function\"==typeof e.skip&&\"function\"==typeof e.raw},a.prototype.save=function(){return{offset:this.offset,reporter:o.prototype.save.call(this)}},a.prototype.restore=function(e){const t=new a(this.base);return t.offset=e.offset,t.length=this.offset,this.offset=e.offset,o.prototype.restore.call(this,e.reporter),t},a.prototype.isEmpty=function(){return this.offset===this.length},a.prototype.readUInt8=function(e){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(e||\"DecoderBuffer overrun\")},a.prototype.skip=function(e,t){if(!(this.offset+e<=this.length))return this.error(t||\"DecoderBuffer overrun\");const r=new a(this.base);return r._reporterState=this._reporterState,r.offset=this.offset,r.length=this.offset+e,this.offset+=e,r},a.prototype.raw=function(e){return this.base.slice(e?e.offset:this.offset,this.length)},r.EncoderBuffer=s,s.isEncoderBuffer=function(e){return e instanceof s||\"object\"==typeof e&&\"EncoderBuffer\"===e.constructor.name&&\"number\"==typeof e.length&&\"function\"==typeof e.join},s.prototype.join=function(e,t){return e||(e=i.alloc(this.length)),t||(t=0),0===this.length||(Array.isArray(this.value)?this.value.forEach((function(r){r.join(e,t),t+=r.length})):(\"number\"==typeof this.value?e[t]=this.value:\"string\"==typeof this.value?e.write(this.value,t):i.isBuffer(this.value)&&this.value.copy(e,t),t+=this.length)),e}},{\"../base/reporter\":175,inherits:440,\"safer-buffer\":495}],173:[function(e,t,r){\"use strict\";const n=r;n.Reporter=e(\"./reporter\").Reporter,n.DecoderBuffer=e(\"./buffer\").DecoderBuffer,n.EncoderBuffer=e(\"./buffer\").EncoderBuffer,n.Node=e(\"./node\")},{\"./buffer\":172,\"./node\":174,\"./reporter\":175}],174:[function(e,t,r){\"use strict\";const n=e(\"../base/reporter\").Reporter,o=e(\"../base/buffer\").EncoderBuffer,i=e(\"../base/buffer\").DecoderBuffer,a=e(\"minimalistic-assert\"),s=[\"seq\",\"seqof\",\"set\",\"setof\",\"objid\",\"bool\",\"gentime\",\"utctime\",\"null_\",\"enum\",\"int\",\"objDesc\",\"bitstr\",\"bmpstr\",\"charstr\",\"genstr\",\"graphstr\",\"ia5str\",\"iso646str\",\"numstr\",\"octstr\",\"printstr\",\"t61str\",\"unistr\",\"utf8str\",\"videostr\"],l=[\"key\",\"obj\",\"use\",\"optional\",\"explicit\",\"implicit\",\"def\",\"choice\",\"any\",\"contains\"].concat(s);function c(e,t,r){const n={};this._baseState=n,n.name=r,n.enc=e,n.parent=t||null,n.children=null,n.tag=null,n.args=null,n.reverseArgs=null,n.choice=null,n.optional=!1,n.any=!1,n.obj=!1,n.use=null,n.useDecoder=null,n.key=null,n.default=null,n.explicit=null,n.implicit=null,n.contains=null,n.parent||(n.children=[],this._wrap())}t.exports=c;const u=[\"enc\",\"parent\",\"children\",\"tag\",\"args\",\"reverseArgs\",\"choice\",\"optional\",\"any\",\"obj\",\"use\",\"alteredUse\",\"key\",\"default\",\"explicit\",\"implicit\",\"contains\"];c.prototype.clone=function(){const e=this._baseState,t={};u.forEach((function(r){t[r]=e[r]}));const r=new this.constructor(t.parent);return r._baseState=t,r},c.prototype._wrap=function(){const e=this._baseState;l.forEach((function(t){this[t]=function(){const r=new this.constructor(this);return e.children.push(r),r[t].apply(r,arguments)}}),this)},c.prototype._init=function(e){const t=this._baseState;a(null===t.parent),e.call(this),t.children=t.children.filter((function(e){return e._baseState.parent===this}),this),a.equal(t.children.length,1,\"Root node can have only one child\")},c.prototype._useArgs=function(e){const t=this._baseState,r=e.filter((function(e){return e instanceof this.constructor}),this);e=e.filter((function(e){return!(e instanceof this.constructor)}),this),0!==r.length&&(a(null===t.children),t.children=r,r.forEach((function(e){e._baseState.parent=this}),this)),0!==e.length&&(a(null===t.args),t.args=e,t.reverseArgs=e.map((function(e){if(\"object\"!=typeof e||e.constructor!==Object)return e;const t={};return Object.keys(e).forEach((function(r){r==(0|r)&&(r|=0);const n=e[r];t[n]=r})),t})))},[\"_peekTag\",\"_decodeTag\",\"_use\",\"_decodeStr\",\"_decodeObjid\",\"_decodeTime\",\"_decodeNull\",\"_decodeInt\",\"_decodeBool\",\"_decodeList\",\"_encodeComposite\",\"_encodeStr\",\"_encodeObjid\",\"_encodeTime\",\"_encodeNull\",\"_encodeInt\",\"_encodeBool\"].forEach((function(e){c.prototype[e]=function(){const t=this._baseState;throw new Error(e+\" not implemented for encoding: \"+t.enc)}})),s.forEach((function(e){c.prototype[e]=function(){const t=this._baseState,r=Array.prototype.slice.call(arguments);return a(null===t.tag),t.tag=e,this._useArgs(r),this}})),c.prototype.use=function(e){a(e);const t=this._baseState;return a(null===t.use),t.use=e,this},c.prototype.optional=function(){return this._baseState.optional=!0,this},c.prototype.def=function(e){const t=this._baseState;return a(null===t.default),t.default=e,t.optional=!0,this},c.prototype.explicit=function(e){const t=this._baseState;return a(null===t.explicit&&null===t.implicit),t.explicit=e,this},c.prototype.implicit=function(e){const t=this._baseState;return a(null===t.explicit&&null===t.implicit),t.implicit=e,this},c.prototype.obj=function(){const e=this._baseState,t=Array.prototype.slice.call(arguments);return e.obj=!0,0!==t.length&&this._useArgs(t),this},c.prototype.key=function(e){const t=this._baseState;return a(null===t.key),t.key=e,this},c.prototype.any=function(){return this._baseState.any=!0,this},c.prototype.choice=function(e){const t=this._baseState;return a(null===t.choice),t.choice=e,this._useArgs(Object.keys(e).map((function(t){return e[t]}))),this},c.prototype.contains=function(e){const t=this._baseState;return a(null===t.use),t.contains=e,this},c.prototype._decode=function(e,t){const r=this._baseState;if(null===r.parent)return e.wrapResult(r.children[0]._decode(e,t));let n,o=r.default,a=!0,s=null;if(null!==r.key&&(s=e.enterKey(r.key)),r.optional){let n=null;if(null!==r.explicit?n=r.explicit:null!==r.implicit?n=r.implicit:null!==r.tag&&(n=r.tag),null!==n||r.any){if(a=this._peekTag(e,n,r.any),e.isError(a))return a}else{const n=e.save();try{null===r.choice?this._decodeGeneric(r.tag,e,t):this._decodeChoice(e,t),a=!0}catch(e){a=!1}e.restore(n)}}if(r.obj&&a&&(n=e.enterObject()),a){if(null!==r.explicit){const t=this._decodeTag(e,r.explicit);if(e.isError(t))return t;e=t}const n=e.offset;if(null===r.use&&null===r.choice){let t;r.any&&(t=e.save());const n=this._decodeTag(e,null!==r.implicit?r.implicit:r.tag,r.any);if(e.isError(n))return n;r.any?o=e.raw(t):e=n}if(t&&t.track&&null!==r.tag&&t.track(e.path(),n,e.length,\"tagged\"),t&&t.track&&null!==r.tag&&t.track(e.path(),e.offset,e.length,\"content\"),r.any||(o=null===r.choice?this._decodeGeneric(r.tag,e,t):this._decodeChoice(e,t)),e.isError(o))return o;if(r.any||null!==r.choice||null===r.children||r.children.forEach((function(r){r._decode(e,t)})),r.contains&&(\"octstr\"===r.tag||\"bitstr\"===r.tag)){const n=new i(o);o=this._getUse(r.contains,e._reporterState.obj)._decode(n,t)}}return r.obj&&a&&(o=e.leaveObject(n)),null===r.key||null===o&&!0!==a?null!==s&&e.exitKey(s):e.leaveKey(s,r.key,o),o},c.prototype._decodeGeneric=function(e,t,r){const n=this._baseState;return\"seq\"===e||\"set\"===e?null:\"seqof\"===e||\"setof\"===e?this._decodeList(t,e,n.args[0],r):/str$/.test(e)?this._decodeStr(t,e,r):\"objid\"===e&&n.args?this._decodeObjid(t,n.args[0],n.args[1],r):\"objid\"===e?this._decodeObjid(t,null,null,r):\"gentime\"===e||\"utctime\"===e?this._decodeTime(t,e,r):\"null_\"===e?this._decodeNull(t,r):\"bool\"===e?this._decodeBool(t,r):\"objDesc\"===e?this._decodeStr(t,e,r):\"int\"===e||\"enum\"===e?this._decodeInt(t,n.args&&n.args[0],r):null!==n.use?this._getUse(n.use,t._reporterState.obj)._decode(t,r):t.error(\"unknown tag: \"+e)},c.prototype._getUse=function(e,t){const r=this._baseState;return r.useDecoder=this._use(e,t),a(null===r.useDecoder._baseState.parent),r.useDecoder=r.useDecoder._baseState.children[0],r.implicit!==r.useDecoder._baseState.implicit&&(r.useDecoder=r.useDecoder.clone(),r.useDecoder._baseState.implicit=r.implicit),r.useDecoder},c.prototype._decodeChoice=function(e,t){const r=this._baseState;let n=null,o=!1;return Object.keys(r.choice).some((function(i){const a=e.save(),s=r.choice[i];try{const r=s._decode(e,t);if(e.isError(r))return!1;n={type:i,value:r},o=!0}catch(t){return e.restore(a),!1}return!0}),this),o?n:e.error(\"Choice not matched\")},c.prototype._createEncoderBuffer=function(e){return new o(e,this.reporter)},c.prototype._encode=function(e,t,r){const n=this._baseState;if(null!==n.default&&n.default===e)return;const o=this._encodeValue(e,t,r);return void 0===o||this._skipDefault(o,t,r)?void 0:o},c.prototype._encodeValue=function(e,t,r){const o=this._baseState;if(null===o.parent)return o.children[0]._encode(e,t||new n);let i=null;if(this.reporter=t,o.optional&&void 0===e){if(null===o.default)return;e=o.default}let a=null,s=!1;if(o.any)i=this._createEncoderBuffer(e);else if(o.choice)i=this._encodeChoice(e,t);else if(o.contains)a=this._getUse(o.contains,r)._encode(e,t),s=!0;else if(o.children)a=o.children.map((function(r){if(\"null_\"===r._baseState.tag)return r._encode(null,t,e);if(null===r._baseState.key)return t.error(\"Child should have a key\");const n=t.enterKey(r._baseState.key);if(\"object\"!=typeof e)return t.error(\"Child expected, but input is not object\");const o=r._encode(e[r._baseState.key],t,e);return t.leaveKey(n),o}),this).filter((function(e){return e})),a=this._createEncoderBuffer(a);else if(\"seqof\"===o.tag||\"setof\"===o.tag){if(!o.args||1!==o.args.length)return t.error(\"Too many args for : \"+o.tag);if(!Array.isArray(e))return t.error(\"seqof/setof, but data is not Array\");const r=this.clone();r._baseState.implicit=null,a=this._createEncoderBuffer(e.map((function(r){const n=this._baseState;return this._getUse(n.args[0],e)._encode(r,t)}),r))}else null!==o.use?i=this._getUse(o.use,r)._encode(e,t):(a=this._encodePrimitive(o.tag,e),s=!0);if(!o.any&&null===o.choice){const e=null!==o.implicit?o.implicit:o.tag,r=null===o.implicit?\"universal\":\"context\";null===e?null===o.use&&t.error(\"Tag could be omitted only for .use()\"):null===o.use&&(i=this._encodeComposite(e,s,r,a))}return null!==o.explicit&&(i=this._encodeComposite(o.explicit,!1,\"context\",i)),i},c.prototype._encodeChoice=function(e,t){const r=this._baseState,n=r.choice[e.type];return n||a(!1,e.type+\" not found in \"+JSON.stringify(Object.keys(r.choice))),n._encode(e.value,t)},c.prototype._encodePrimitive=function(e,t){const r=this._baseState;if(/str$/.test(e))return this._encodeStr(t,e);if(\"objid\"===e&&r.args)return this._encodeObjid(t,r.reverseArgs[0],r.args[1]);if(\"objid\"===e)return this._encodeObjid(t,null,null);if(\"gentime\"===e||\"utctime\"===e)return this._encodeTime(t,e);if(\"null_\"===e)return this._encodeNull();if(\"int\"===e||\"enum\"===e)return this._encodeInt(t,r.args&&r.reverseArgs[0]);if(\"bool\"===e)return this._encodeBool(t);if(\"objDesc\"===e)return this._encodeStr(t,e);throw new Error(\"Unsupported tag: \"+e)},c.prototype._isNumstr=function(e){return/^[0-9 ]*$/.test(e)},c.prototype._isPrintstr=function(e){return/^[A-Za-z0-9 '()+,-./:=?]*$/.test(e)}},{\"../base/buffer\":172,\"../base/reporter\":175,\"minimalistic-assert\":453}],175:[function(e,t,r){\"use strict\";const n=e(\"inherits\");function o(e){this._reporterState={obj:null,path:[],options:e||{},errors:[]}}function i(e,t){this.path=e,this.rethrow(t)}r.Reporter=o,o.prototype.isError=function(e){return e instanceof i},o.prototype.save=function(){const e=this._reporterState;return{obj:e.obj,pathLen:e.path.length}},o.prototype.restore=function(e){const t=this._reporterState;t.obj=e.obj,t.path=t.path.slice(0,e.pathLen)},o.prototype.enterKey=function(e){return this._reporterState.path.push(e)},o.prototype.exitKey=function(e){const t=this._reporterState;t.path=t.path.slice(0,e-1)},o.prototype.leaveKey=function(e,t,r){const n=this._reporterState;this.exitKey(e),null!==n.obj&&(n.obj[t]=r)},o.prototype.path=function(){return this._reporterState.path.join(\"/\")},o.prototype.enterObject=function(){const e=this._reporterState,t=e.obj;return e.obj={},t},o.prototype.leaveObject=function(e){const t=this._reporterState,r=t.obj;return t.obj=e,r},o.prototype.error=function(e){let t;const r=this._reporterState,n=e instanceof i;if(t=n?e:new i(r.path.map((function(e){return\"[\"+JSON.stringify(e)+\"]\"})).join(\"\"),e.message||e,e.stack),!r.options.partial)throw t;return n||r.errors.push(t),t},o.prototype.wrapResult=function(e){const t=this._reporterState;return t.options.partial?{result:this.isError(e)?null:e,errors:t.errors}:e},n(i,Error),i.prototype.rethrow=function(e){if(this.message=e+\" at: \"+(this.path||\"(shallow)\"),Error.captureStackTrace&&Error.captureStackTrace(this,i),!this.stack)try{throw new Error(this.message)}catch(e){this.stack=e.stack}return this}},{inherits:440}],176:[function(e,t,r){\"use strict\";function n(e){const t={};return Object.keys(e).forEach((function(r){(0|r)==r&&(r|=0);const n=e[r];t[n]=r})),t}r.tagClass={0:\"universal\",1:\"application\",2:\"context\",3:\"private\"},r.tagClassByName=n(r.tagClass),r.tag={0:\"end\",1:\"bool\",2:\"int\",3:\"bitstr\",4:\"octstr\",5:\"null_\",6:\"objid\",7:\"objDesc\",8:\"external\",9:\"real\",10:\"enum\",11:\"embed\",12:\"utf8str\",13:\"relativeOid\",16:\"seq\",17:\"set\",18:\"numstr\",19:\"printstr\",20:\"t61str\",21:\"videostr\",22:\"ia5str\",23:\"utctime\",24:\"gentime\",25:\"graphstr\",26:\"iso646str\",27:\"genstr\",28:\"unistr\",29:\"charstr\",30:\"bmpstr\"},r.tagByName=n(r.tag)},{}],177:[function(e,t,r){\"use strict\";const n=r;n._reverse=function(e){const t={};return Object.keys(e).forEach((function(r){(0|r)==r&&(r|=0);const n=e[r];t[n]=r})),t},n.der=e(\"./der\")},{\"./der\":176}],178:[function(e,t,r){\"use strict\";const n=e(\"inherits\"),o=e(\"bn.js\"),i=e(\"../base/buffer\").DecoderBuffer,a=e(\"../base/node\"),s=e(\"../constants/der\");function l(e){this.enc=\"der\",this.name=e.name,this.entity=e,this.tree=new c,this.tree._init(e.body)}function c(e){a.call(this,\"der\",e)}function u(e,t){let r=e.readUInt8(t);if(e.isError(r))return r;const n=s.tagClass[r>>6],o=!(32&r);if(31&~r)r&=31;else{let n=r;for(r=0;!(128&~n);){if(n=e.readUInt8(t),e.isError(n))return n;r<<=7,r|=127&n}}return{cls:n,primitive:o,tag:r,tagStr:s.tag[r]}}function d(e,t,r){let n=e.readUInt8(r);if(e.isError(n))return n;if(!t&&128===n)return null;if(!(128&n))return n;const o=127&n;if(o>4)return e.error(\"length octect is too long\");n=0;for(let t=0;t<o;t++){n<<=8;const t=e.readUInt8(r);if(e.isError(t))return t;n|=t}return n}t.exports=l,l.prototype.decode=function(e,t){return i.isDecoderBuffer(e)||(e=new i(e,t)),this.tree._decode(e,t)},n(c,a),c.prototype._peekTag=function(e,t,r){if(e.isEmpty())return!1;const n=e.save(),o=u(e,'Failed to peek tag: \"'+t+'\"');return e.isError(o)?o:(e.restore(n),o.tag===t||o.tagStr===t||o.tagStr+\"of\"===t||r)},c.prototype._decodeTag=function(e,t,r){const n=u(e,'Failed to decode tag of \"'+t+'\"');if(e.isError(n))return n;let o=d(e,n.primitive,'Failed to get length of \"'+t+'\"');if(e.isError(o))return o;if(!r&&n.tag!==t&&n.tagStr!==t&&n.tagStr+\"of\"!==t)return e.error('Failed to match tag: \"'+t+'\"');if(n.primitive||null!==o)return e.skip(o,'Failed to match body of: \"'+t+'\"');const i=e.save(),a=this._skipUntilEnd(e,'Failed to skip indefinite length body: \"'+this.tag+'\"');return e.isError(a)?a:(o=e.offset-i.offset,e.restore(i),e.skip(o,'Failed to match body of: \"'+t+'\"'))},c.prototype._skipUntilEnd=function(e,t){for(;;){const r=u(e,t);if(e.isError(r))return r;const n=d(e,r.primitive,t);if(e.isError(n))return n;let o;if(o=r.primitive||null!==n?e.skip(n):this._skipUntilEnd(e,t),e.isError(o))return o;if(\"end\"===r.tagStr)break}},c.prototype._decodeList=function(e,t,r,n){const o=[];for(;!e.isEmpty();){const t=this._peekTag(e,\"end\");if(e.isError(t))return t;const i=r.decode(e,\"der\",n);if(e.isError(i)&&t)break;o.push(i)}return o},c.prototype._decodeStr=function(e,t){if(\"bitstr\"===t){const t=e.readUInt8();return e.isError(t)?t:{unused:t,data:e.raw()}}if(\"bmpstr\"===t){const t=e.raw();if(t.length%2==1)return e.error(\"Decoding of string type: bmpstr length mismatch\");let r=\"\";for(let e=0;e<t.length/2;e++)r+=String.fromCharCode(t.readUInt16BE(2*e));return r}if(\"numstr\"===t){const t=e.raw().toString(\"ascii\");return this._isNumstr(t)?t:e.error(\"Decoding of string type: numstr unsupported characters\")}if(\"octstr\"===t)return e.raw();if(\"objDesc\"===t)return e.raw();if(\"printstr\"===t){const t=e.raw().toString(\"ascii\");return this._isPrintstr(t)?t:e.error(\"Decoding of string type: printstr unsupported characters\")}return/str$/.test(t)?e.raw().toString():e.error(\"Decoding of string type: \"+t+\" unsupported\")},c.prototype._decodeObjid=function(e,t,r){let n;const o=[];let i=0,a=0;for(;!e.isEmpty();)a=e.readUInt8(),i<<=7,i|=127&a,!(128&a)&&(o.push(i),i=0);128&a&&o.push(i);const s=o[0]/40|0,l=o[0]%40;if(n=r?o:[s,l].concat(o.slice(1)),t){let e=t[n.join(\" \")];void 0===e&&(e=t[n.join(\".\")]),void 0!==e&&(n=e)}return n},c.prototype._decodeTime=function(e,t){const r=e.raw().toString();let n,o,i,a,s,l;if(\"gentime\"===t)n=0|r.slice(0,4),o=0|r.slice(4,6),i=0|r.slice(6,8),a=0|r.slice(8,10),s=0|r.slice(10,12),l=0|r.slice(12,14);else{if(\"utctime\"!==t)return e.error(\"Decoding \"+t+\" time is not supported yet\");n=0|r.slice(0,2),o=0|r.slice(2,4),i=0|r.slice(4,6),a=0|r.slice(6,8),s=0|r.slice(8,10),l=0|r.slice(10,12),n=n<70?2e3+n:1900+n}return Date.UTC(n,o-1,i,a,s,l,0)},c.prototype._decodeNull=function(){return null},c.prototype._decodeBool=function(e){const t=e.readUInt8();return e.isError(t)?t:0!==t},c.prototype._decodeInt=function(e,t){const r=e.raw();let n=new o(r);return t&&(n=t[n.toString(10)]||n),n},c.prototype._use=function(e,t){return\"function\"==typeof e&&(e=e(t)),e._getDecoder(\"der\").tree}},{\"../base/buffer\":172,\"../base/node\":174,\"../constants/der\":176,\"bn.js\":184,inherits:440}],179:[function(e,t,r){\"use strict\";const n=r;n.der=e(\"./der\"),n.pem=e(\"./pem\")},{\"./der\":178,\"./pem\":180}],180:[function(e,t,r){\"use strict\";const n=e(\"inherits\"),o=e(\"safer-buffer\").Buffer,i=e(\"./der\");function a(e){i.call(this,e),this.enc=\"pem\"}n(a,i),t.exports=a,a.prototype.decode=function(e,t){const r=e.toString().split(/[\\r\\n]+/g),n=t.label.toUpperCase(),a=/^-----(BEGIN|END) ([^-]+)-----$/;let s=-1,l=-1;for(let e=0;e<r.length;e++){const t=r[e].match(a);if(null!==t&&t[2]===n){if(-1!==s){if(\"END\"!==t[1])break;l=e;break}if(\"BEGIN\"!==t[1])break;s=e}}if(-1===s||-1===l)throw new Error(\"PEM section not found for: \"+n);const c=r.slice(s+1,l).join(\"\");c.replace(/[^a-z0-9+/=]+/gi,\"\");const u=o.from(c,\"base64\");return i.prototype.decode.call(this,u,t)}},{\"./der\":178,inherits:440,\"safer-buffer\":495}],181:[function(e,t,r){\"use strict\";const n=e(\"inherits\"),o=e(\"safer-buffer\").Buffer,i=e(\"../base/node\"),a=e(\"../constants/der\");function s(e){this.enc=\"der\",this.name=e.name,this.entity=e,this.tree=new l,this.tree._init(e.body)}function l(e){i.call(this,\"der\",e)}function c(e){return e<10?\"0\"+e:e}t.exports=s,s.prototype.encode=function(e,t){return this.tree._encode(e,t).join()},n(l,i),l.prototype._encodeComposite=function(e,t,r,n){const i=function(e,t,r,n){let o;if(\"seqof\"===e?e=\"seq\":\"setof\"===e&&(e=\"set\"),a.tagByName.hasOwnProperty(e))o=a.tagByName[e];else{if(\"number\"!=typeof e||(0|e)!==e)return n.error(\"Unknown tag: \"+e);o=e}return o>=31?n.error(\"Multi-octet tag encoding unsupported\"):(t||(o|=32),o|=a.tagClassByName[r||\"universal\"]<<6,o)}(e,t,r,this.reporter);if(n.length<128){const e=o.alloc(2);return e[0]=i,e[1]=n.length,this._createEncoderBuffer([e,n])}let s=1;for(let e=n.length;e>=256;e>>=8)s++;const l=o.alloc(2+s);l[0]=i,l[1]=128|s;for(let e=1+s,t=n.length;t>0;e--,t>>=8)l[e]=255&t;return this._createEncoderBuffer([l,n])},l.prototype._encodeStr=function(e,t){if(\"bitstr\"===t)return this._createEncoderBuffer([0|e.unused,e.data]);if(\"bmpstr\"===t){const t=o.alloc(2*e.length);for(let r=0;r<e.length;r++)t.writeUInt16BE(e.charCodeAt(r),2*r);return this._createEncoderBuffer(t)}return\"numstr\"===t?this._isNumstr(e)?this._createEncoderBuffer(e):this.reporter.error(\"Encoding of string type: numstr supports only digits and space\"):\"printstr\"===t?this._isPrintstr(e)?this._createEncoderBuffer(e):this.reporter.error(\"Encoding of string type: printstr supports only latin upper and lower case letters, digits, space, apostrophe, left and rigth parenthesis, plus sign, comma, hyphen, dot, slash, colon, equal sign, question mark\"):/str$/.test(t)||\"objDesc\"===t?this._createEncoderBuffer(e):this.reporter.error(\"Encoding of string type: \"+t+\" unsupported\")},l.prototype._encodeObjid=function(e,t,r){if(\"string\"==typeof e){if(!t)return this.reporter.error(\"string objid given, but no values map found\");if(!t.hasOwnProperty(e))return this.reporter.error(\"objid not found in values map\");e=t[e].split(/[\\s.]+/g);for(let t=0;t<e.length;t++)e[t]|=0}else if(Array.isArray(e)){e=e.slice();for(let t=0;t<e.length;t++)e[t]|=0}if(!Array.isArray(e))return this.reporter.error(\"objid() should be either array or string, got: \"+JSON.stringify(e));if(!r){if(e[1]>=40)return this.reporter.error(\"Second objid identifier OOB\");e.splice(0,2,40*e[0]+e[1])}let n=0;for(let t=0;t<e.length;t++){let r=e[t];for(n++;r>=128;r>>=7)n++}const i=o.alloc(n);let a=i.length-1;for(let t=e.length-1;t>=0;t--){let r=e[t];for(i[a--]=127&r;(r>>=7)>0;)i[a--]=128|127&r}return this._createEncoderBuffer(i)},l.prototype._encodeTime=function(e,t){let r;const n=new Date(e);return\"gentime\"===t?r=[c(n.getUTCFullYear()),c(n.getUTCMonth()+1),c(n.getUTCDate()),c(n.getUTCHours()),c(n.getUTCMinutes()),c(n.getUTCSeconds()),\"Z\"].join(\"\"):\"utctime\"===t?r=[c(n.getUTCFullYear()%100),c(n.getUTCMonth()+1),c(n.getUTCDate()),c(n.getUTCHours()),c(n.getUTCMinutes()),c(n.getUTCSeconds()),\"Z\"].join(\"\"):this.reporter.error(\"Encoding \"+t+\" time is not supported yet\"),this._encodeStr(r,\"octstr\")},l.prototype._encodeNull=function(){return this._createEncoderBuffer(\"\")},l.prototype._encodeInt=function(e,t){if(\"string\"==typeof e){if(!t)return this.reporter.error(\"String int or enum given, but no values map\");if(!t.hasOwnProperty(e))return this.reporter.error(\"Values map doesn't contain: \"+JSON.stringify(e));e=t[e]}if(\"number\"!=typeof e&&!o.isBuffer(e)){const t=e.toArray();!e.sign&&128&t[0]&&t.unshift(0),e=o.from(t)}if(o.isBuffer(e)){let t=e.length;0===e.length&&t++;const r=o.alloc(t);return e.copy(r),0===e.length&&(r[0]=0),this._createEncoderBuffer(r)}if(e<128)return this._createEncoderBuffer(e);if(e<256)return this._createEncoderBuffer([0,e]);let r=1;for(let t=e;t>=256;t>>=8)r++;const n=new Array(r);for(let t=n.length-1;t>=0;t--)n[t]=255&e,e>>=8;return 128&n[0]&&n.unshift(0),this._createEncoderBuffer(o.from(n))},l.prototype._encodeBool=function(e){return this._createEncoderBuffer(e?255:0)},l.prototype._use=function(e,t){return\"function\"==typeof e&&(e=e(t)),e._getEncoder(\"der\").tree},l.prototype._skipDefault=function(e,t,r){const n=this._baseState;let o;if(null===n.default)return!1;const i=e.join();if(void 0===n.defaultBuffer&&(n.defaultBuffer=this._encodeValue(n.default,t,r).join()),i.length!==n.defaultBuffer.length)return!1;for(o=0;o<i.length;o++)if(i[o]!==n.defaultBuffer[o])return!1;return!0}},{\"../base/node\":174,\"../constants/der\":176,inherits:440,\"safer-buffer\":495}],182:[function(e,t,r){\"use strict\";const n=r;n.der=e(\"./der\"),n.pem=e(\"./pem\")},{\"./der\":181,\"./pem\":183}],183:[function(e,t,r){\"use strict\";const n=e(\"inherits\"),o=e(\"./der\");function i(e){o.call(this,e),this.enc=\"pem\"}n(i,o),t.exports=i,i.prototype.encode=function(e,t){const r=o.prototype.encode.call(this,e).toString(\"base64\"),n=[\"-----BEGIN \"+t.label+\"-----\"];for(let e=0;e<r.length;e+=64)n.push(r.slice(e,e+64));return n.push(\"-----END \"+t.label+\"-----\"),n.join(\"\\n\")}},{\"./der\":181,inherits:440}],184:[function(e,t,r){\"use strict\";!function(t){function r(e,t){if(!e)throw new Error(t||\"Assertion failed\")}function n(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}function o(e,t,r){if(o.isBN(e))return e;this.negative=0,this.words=null,this.length=0,this.red=null,null!==e&&(\"le\"!==t&&\"be\"!==t||(r=t,t=10),this._init(e||0,t||10,r||\"be\"))}var i;\"object\"==typeof t?t.exports=o:(void 0).BN=o,o.BN=o,o.wordSize=26;try{i=\"undefined\"!=typeof window&&void 0!==window.Buffer?window.Buffer:e(\"buffer\").Buffer}catch(e){}function a(e,t){var r=e.charCodeAt(t);return r>=65&&r<=70?r-55:r>=97&&r<=102?r-87:r-48&15}function s(e,t,r){var n=a(e,r);return r-1>=t&&(n|=a(e,r-1)<<4),n}function l(e,t,r,n){for(var o=0,i=Math.min(e.length,r),a=t;a<i;a++){var s=e.charCodeAt(a)-48;o*=n,o+=s>=49?s-49+10:s>=17?s-17+10:s}return o}o.isBN=function(e){return e instanceof o||null!==e&&\"object\"==typeof e&&e.constructor.wordSize===o.wordSize&&Array.isArray(e.words)},o.max=function(e,t){return e.cmp(t)>0?e:t},o.min=function(e,t){return e.cmp(t)<0?e:t},o.prototype._init=function(e,t,n){if(\"number\"==typeof e)return this._initNumber(e,t,n);if(\"object\"==typeof e)return this._initArray(e,t,n);\"hex\"===t&&(t=16),r(t===(0|t)&&t>=2&&t<=36);var o=0;\"-\"===(e=e.toString().replace(/\\s+/g,\"\"))[0]&&(o++,this.negative=1),o<e.length&&(16===t?this._parseHex(e,o,n):(this._parseBase(e,t,o),\"le\"===n&&this._initArray(this.toArray(),t,n)))},o.prototype._initNumber=function(e,t,n){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(r(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),\"le\"===n&&this._initArray(this.toArray(),t,n)},o.prototype._initArray=function(e,t,n){if(r(\"number\"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var o=0;o<this.length;o++)this.words[o]=0;var i,a,s=0;if(\"be\"===n)for(o=e.length-1,i=0;o>=0;o-=3)a=e[o]|e[o-1]<<8|e[o-2]<<16,this.words[i]|=a<<s&67108863,this.words[i+1]=a>>>26-s&67108863,(s+=24)>=26&&(s-=26,i++);else if(\"le\"===n)for(o=0,i=0;o<e.length;o+=3)a=e[o]|e[o+1]<<8|e[o+2]<<16,this.words[i]|=a<<s&67108863,this.words[i+1]=a>>>26-s&67108863,(s+=24)>=26&&(s-=26,i++);return this.strip()},o.prototype._parseHex=function(e,t,r){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var n=0;n<this.length;n++)this.words[n]=0;var o,i=0,a=0;if(\"be\"===r)for(n=e.length-1;n>=t;n-=2)o=s(e,t,n)<<i,this.words[a]|=67108863&o,i>=18?(i-=18,a+=1,this.words[a]|=o>>>26):i+=8;else for(n=(e.length-t)%2==0?t+1:t;n<e.length;n+=2)o=s(e,t,n)<<i,this.words[a]|=67108863&o,i>=18?(i-=18,a+=1,this.words[a]|=o>>>26):i+=8;this.strip()},o.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var n=0,o=1;o<=67108863;o*=t)n++;n--,o=o/t|0;for(var i=e.length-r,a=i%n,s=Math.min(i,i-a)+r,c=0,u=r;u<s;u+=n)c=l(e,u,u+n,t),this.imuln(o),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c);if(0!==a){var d=1;for(c=l(e,u,e.length,t),u=0;u<a;u++)d*=t;this.imuln(d),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c)}this.strip()},o.prototype.copy=function(e){e.words=new Array(this.length);for(var t=0;t<this.length;t++)e.words[t]=this.words[t];e.length=this.length,e.negative=this.negative,e.red=this.red},o.prototype.clone=function(){var e=new o(null);return this.copy(e),e},o.prototype._expand=function(e){for(;this.length<e;)this.words[this.length++]=0;return this},o.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function(){return(this.red?\"<BN-R: \":\"<BN: \")+this.toString(16)+\">\"};var c=[\"\",\"0\",\"00\",\"000\",\"0000\",\"00000\",\"000000\",\"0000000\",\"00000000\",\"000000000\",\"0000000000\",\"00000000000\",\"000000000000\",\"0000000000000\",\"00000000000000\",\"000000000000000\",\"0000000000000000\",\"00000000000000000\",\"000000000000000000\",\"0000000000000000000\",\"00000000000000000000\",\"000000000000000000000\",\"0000000000000000000000\",\"00000000000000000000000\",\"000000000000000000000000\",\"0000000000000000000000000\"],u=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],d=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function f(e,t,r){r.negative=t.negative^e.negative;var n=e.length+t.length|0;r.length=n,n=n-1|0;var o=0|e.words[0],i=0|t.words[0],a=o*i,s=67108863&a,l=a/67108864|0;r.words[0]=s;for(var c=1;c<n;c++){for(var u=l>>>26,d=67108863&l,f=Math.min(c,t.length-1),h=Math.max(0,c-e.length+1);h<=f;h++){var p=c-h|0;u+=(a=(o=0|e.words[p])*(i=0|t.words[h])+d)/67108864|0,d=67108863&a}r.words[c]=0|d,l=0|u}return 0!==l?r.words[c]=0|l:r.length--,r.strip()}o.prototype.toString=function(e,t){var n;if(t=0|t||1,16===(e=e||10)||\"hex\"===e){n=\"\";for(var o=0,i=0,a=0;a<this.length;a++){var s=this.words[a],l=(16777215&(s<<o|i)).toString(16);n=0!=(i=s>>>24-o&16777215)||a!==this.length-1?c[6-l.length]+l+n:l+n,(o+=2)>=26&&(o-=26,a--)}for(0!==i&&(n=i.toString(16)+n);n.length%t!=0;)n=\"0\"+n;return 0!==this.negative&&(n=\"-\"+n),n}if(e===(0|e)&&e>=2&&e<=36){var f=u[e],h=d[e];n=\"\";var p=this.clone();for(p.negative=0;!p.isZero();){var m=p.modn(h).toString(e);n=(p=p.idivn(h)).isZero()?m+n:c[f-m.length]+m+n}for(this.isZero()&&(n=\"0\"+n);n.length%t!=0;)n=\"0\"+n;return 0!==this.negative&&(n=\"-\"+n),n}r(!1,\"Base should be between 2 and 36\")},o.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&r(!1,\"Number can only safely store up to 53 bits\"),0!==this.negative?-e:e},o.prototype.toJSON=function(){return this.toString(16)},o.prototype.toBuffer=function(e,t){return r(void 0!==i),this.toArrayLike(i,e,t)},o.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},o.prototype.toArrayLike=function(e,t,n){var o=this.byteLength(),i=n||Math.max(1,o);r(o<=i,\"byte array longer than desired length\"),r(i>0,\"Requested array length <= 0\"),this.strip();var a,s,l=\"le\"===t,c=new e(i),u=this.clone();if(l){for(s=0;!u.isZero();s++)a=u.andln(255),u.iushrn(8),c[s]=a;for(;s<i;s++)c[s]=0}else{for(s=0;s<i-o;s++)c[s]=0;for(s=0;!u.isZero();s++)a=u.andln(255),u.iushrn(8),c[i-s-1]=a}return c},Math.clz32?o.prototype._countBits=function(e){return 32-Math.clz32(e)}:o.prototype._countBits=function(e){var t=e,r=0;return t>=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},o.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return!(8191&t)&&(r+=13,t>>>=13),!(127&t)&&(r+=7,t>>>=7),!(15&t)&&(r+=4,t>>>=4),!(3&t)&&(r+=2,t>>>=2),!(1&t)&&r++,r},o.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;t<this.length;t++){var r=this._zeroBits(this.words[t]);if(e+=r,26!==r)break}return e},o.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},o.prototype.toTwos=function(e){return 0!==this.negative?this.abs().inotn(e).iaddn(1):this.clone()},o.prototype.fromTwos=function(e){return this.testn(e-1)?this.notn(e).iaddn(1).ineg():this.clone()},o.prototype.isNeg=function(){return 0!==this.negative},o.prototype.neg=function(){return this.clone().ineg()},o.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},o.prototype.iuor=function(e){for(;this.length<e.length;)this.words[this.length++]=0;for(var t=0;t<e.length;t++)this.words[t]=this.words[t]|e.words[t];return this.strip()},o.prototype.ior=function(e){return r(0==(this.negative|e.negative)),this.iuor(e)},o.prototype.or=function(e){return this.length>e.length?this.clone().ior(e):e.clone().ior(this)},o.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},o.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var r=0;r<t.length;r++)this.words[r]=this.words[r]&e.words[r];return this.length=t.length,this.strip()},o.prototype.iand=function(e){return r(0==(this.negative|e.negative)),this.iuand(e)},o.prototype.and=function(e){return this.length>e.length?this.clone().iand(e):e.clone().iand(this)},o.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},o.prototype.iuxor=function(e){var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var n=0;n<r.length;n++)this.words[n]=t.words[n]^r.words[n];if(this!==t)for(;n<t.length;n++)this.words[n]=t.words[n];return this.length=t.length,this.strip()},o.prototype.ixor=function(e){return r(0==(this.negative|e.negative)),this.iuxor(e)},o.prototype.xor=function(e){return this.length>e.length?this.clone().ixor(e):e.clone().ixor(this)},o.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},o.prototype.inotn=function(e){r(\"number\"==typeof e&&e>=0);var t=0|Math.ceil(e/26),n=e%26;this._expand(t),n>0&&t--;for(var o=0;o<t;o++)this.words[o]=67108863&~this.words[o];return n>0&&(this.words[o]=~this.words[o]&67108863>>26-n),this.strip()},o.prototype.notn=function(e){return this.clone().inotn(e)},o.prototype.setn=function(e,t){r(\"number\"==typeof e&&e>=0);var n=e/26|0,o=e%26;return this._expand(n+1),this.words[n]=t?this.words[n]|1<<o:this.words[n]&~(1<<o),this.strip()},o.prototype.iadd=function(e){var t,r,n;if(0!==this.negative&&0===e.negative)return this.negative=0,t=this.isub(e),this.negative^=1,this._normSign();if(0===this.negative&&0!==e.negative)return e.negative=0,t=this.isub(e),e.negative=1,t._normSign();this.length>e.length?(r=this,n=e):(r=e,n=this);for(var o=0,i=0;i<n.length;i++)t=(0|r.words[i])+(0|n.words[i])+o,this.words[i]=67108863&t,o=t>>>26;for(;0!==o&&i<r.length;i++)t=(0|r.words[i])+o,this.words[i]=67108863&t,o=t>>>26;if(this.length=r.length,0!==o)this.words[this.length]=o,this.length++;else if(r!==this)for(;i<r.length;i++)this.words[i]=r.words[i];return this},o.prototype.add=function(e){var t;return 0!==e.negative&&0===this.negative?(e.negative=0,t=this.sub(e),e.negative^=1,t):0===e.negative&&0!==this.negative?(this.negative=0,t=e.sub(this),this.negative=1,t):this.length>e.length?this.clone().iadd(e):e.clone().iadd(this)},o.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var r,n,o=this.cmp(e);if(0===o)return this.negative=0,this.length=1,this.words[0]=0,this;o>0?(r=this,n=e):(r=e,n=this);for(var i=0,a=0;a<n.length;a++)i=(t=(0|r.words[a])-(0|n.words[a])+i)>>26,this.words[a]=67108863&t;for(;0!==i&&a<r.length;a++)i=(t=(0|r.words[a])+i)>>26,this.words[a]=67108863&t;if(0===i&&a<r.length&&r!==this)for(;a<r.length;a++)this.words[a]=r.words[a];return this.length=Math.max(this.length,a),r!==this&&(this.negative=1),this.strip()},o.prototype.sub=function(e){return this.clone().isub(e)};var h=function(e,t,r){var n,o,i,a=e.words,s=t.words,l=r.words,c=0,u=0|a[0],d=8191&u,f=u>>>13,h=0|a[1],p=8191&h,m=h>>>13,g=0|a[2],v=8191&g,b=g>>>13,y=0|a[3],w=8191&y,x=y>>>13,S=0|a[4],C=8191&S,k=S>>>13,E=0|a[5],O=8191&E,A=E>>>13,T=0|a[6],j=8191&T,P=T>>>13,M=0|a[7],R=8191&M,_=M>>>13,I=0|a[8],N=8191&I,F=I>>>13,D=0|a[9],B=8191&D,L=D>>>13,z=0|s[0],H=8191&z,U=z>>>13,V=0|s[1],W=8191&V,G=V>>>13,q=0|s[2],K=8191&q,X=q>>>13,Y=0|s[3],$=8191&Y,Z=Y>>>13,Q=0|s[4],J=8191&Q,ee=Q>>>13,te=0|s[5],re=8191&te,ne=te>>>13,oe=0|s[6],ie=8191&oe,ae=oe>>>13,se=0|s[7],le=8191&se,ce=se>>>13,ue=0|s[8],de=8191&ue,fe=ue>>>13,he=0|s[9],pe=8191&he,me=he>>>13;r.negative=e.negative^t.negative,r.length=19;var ge=(c+(n=Math.imul(d,H))|0)+((8191&(o=(o=Math.imul(d,U))+Math.imul(f,H)|0))<<13)|0;c=((i=Math.imul(f,U))+(o>>>13)|0)+(ge>>>26)|0,ge&=67108863,n=Math.imul(p,H),o=(o=Math.imul(p,U))+Math.imul(m,H)|0,i=Math.imul(m,U);var ve=(c+(n=n+Math.imul(d,W)|0)|0)+((8191&(o=(o=o+Math.imul(d,G)|0)+Math.imul(f,W)|0))<<13)|0;c=((i=i+Math.imul(f,G)|0)+(o>>>13)|0)+(ve>>>26)|0,ve&=67108863,n=Math.imul(v,H),o=(o=Math.imul(v,U))+Math.imul(b,H)|0,i=Math.imul(b,U),n=n+Math.imul(p,W)|0,o=(o=o+Math.imul(p,G)|0)+Math.imul(m,W)|0,i=i+Math.imul(m,G)|0;var be=(c+(n=n+Math.imul(d,K)|0)|0)+((8191&(o=(o=o+Math.imul(d,X)|0)+Math.imul(f,K)|0))<<13)|0;c=((i=i+Math.imul(f,X)|0)+(o>>>13)|0)+(be>>>26)|0,be&=67108863,n=Math.imul(w,H),o=(o=Math.imul(w,U))+Math.imul(x,H)|0,i=Math.imul(x,U),n=n+Math.imul(v,W)|0,o=(o=o+Math.imul(v,G)|0)+Math.imul(b,W)|0,i=i+Math.imul(b,G)|0,n=n+Math.imul(p,K)|0,o=(o=o+Math.imul(p,X)|0)+Math.imul(m,K)|0,i=i+Math.imul(m,X)|0;var ye=(c+(n=n+Math.imul(d,$)|0)|0)+((8191&(o=(o=o+Math.imul(d,Z)|0)+Math.imul(f,$)|0))<<13)|0;c=((i=i+Math.imul(f,Z)|0)+(o>>>13)|0)+(ye>>>26)|0,ye&=67108863,n=Math.imul(C,H),o=(o=Math.imul(C,U))+Math.imul(k,H)|0,i=Math.imul(k,U),n=n+Math.imul(w,W)|0,o=(o=o+Math.imul(w,G)|0)+Math.imul(x,W)|0,i=i+Math.imul(x,G)|0,n=n+Math.imul(v,K)|0,o=(o=o+Math.imul(v,X)|0)+Math.imul(b,K)|0,i=i+Math.imul(b,X)|0,n=n+Math.imul(p,$)|0,o=(o=o+Math.imul(p,Z)|0)+Math.imul(m,$)|0,i=i+Math.imul(m,Z)|0;var we=(c+(n=n+Math.imul(d,J)|0)|0)+((8191&(o=(o=o+Math.imul(d,ee)|0)+Math.imul(f,J)|0))<<13)|0;c=((i=i+Math.imul(f,ee)|0)+(o>>>13)|0)+(we>>>26)|0,we&=67108863,n=Math.imul(O,H),o=(o=Math.imul(O,U))+Math.imul(A,H)|0,i=Math.imul(A,U),n=n+Math.imul(C,W)|0,o=(o=o+Math.imul(C,G)|0)+Math.imul(k,W)|0,i=i+Math.imul(k,G)|0,n=n+Math.imul(w,K)|0,o=(o=o+Math.imul(w,X)|0)+Math.imul(x,K)|0,i=i+Math.imul(x,X)|0,n=n+Math.imul(v,$)|0,o=(o=o+Math.imul(v,Z)|0)+Math.imul(b,$)|0,i=i+Math.imul(b,Z)|0,n=n+Math.imul(p,J)|0,o=(o=o+Math.imul(p,ee)|0)+Math.imul(m,J)|0,i=i+Math.imul(m,ee)|0;var xe=(c+(n=n+Math.imul(d,re)|0)|0)+((8191&(o=(o=o+Math.imul(d,ne)|0)+Math.imul(f,re)|0))<<13)|0;c=((i=i+Math.imul(f,ne)|0)+(o>>>13)|0)+(xe>>>26)|0,xe&=67108863,n=Math.imul(j,H),o=(o=Math.imul(j,U))+Math.imul(P,H)|0,i=Math.imul(P,U),n=n+Math.imul(O,W)|0,o=(o=o+Math.imul(O,G)|0)+Math.imul(A,W)|0,i=i+Math.imul(A,G)|0,n=n+Math.imul(C,K)|0,o=(o=o+Math.imul(C,X)|0)+Math.imul(k,K)|0,i=i+Math.imul(k,X)|0,n=n+Math.imul(w,$)|0,o=(o=o+Math.imul(w,Z)|0)+Math.imul(x,$)|0,i=i+Math.imul(x,Z)|0,n=n+Math.imul(v,J)|0,o=(o=o+Math.imul(v,ee)|0)+Math.imul(b,J)|0,i=i+Math.imul(b,ee)|0,n=n+Math.imul(p,re)|0,o=(o=o+Math.imul(p,ne)|0)+Math.imul(m,re)|0,i=i+Math.imul(m,ne)|0;var Se=(c+(n=n+Math.imul(d,ie)|0)|0)+((8191&(o=(o=o+Math.imul(d,ae)|0)+Math.imul(f,ie)|0))<<13)|0;c=((i=i+Math.imul(f,ae)|0)+(o>>>13)|0)+(Se>>>26)|0,Se&=67108863,n=Math.imul(R,H),o=(o=Math.imul(R,U))+Math.imul(_,H)|0,i=Math.imul(_,U),n=n+Math.imul(j,W)|0,o=(o=o+Math.imul(j,G)|0)+Math.imul(P,W)|0,i=i+Math.imul(P,G)|0,n=n+Math.imul(O,K)|0,o=(o=o+Math.imul(O,X)|0)+Math.imul(A,K)|0,i=i+Math.imul(A,X)|0,n=n+Math.imul(C,$)|0,o=(o=o+Math.imul(C,Z)|0)+Math.imul(k,$)|0,i=i+Math.imul(k,Z)|0,n=n+Math.imul(w,J)|0,o=(o=o+Math.imul(w,ee)|0)+Math.imul(x,J)|0,i=i+Math.imul(x,ee)|0,n=n+Math.imul(v,re)|0,o=(o=o+Math.imul(v,ne)|0)+Math.imul(b,re)|0,i=i+Math.imul(b,ne)|0,n=n+Math.imul(p,ie)|0,o=(o=o+Math.imul(p,ae)|0)+Math.imul(m,ie)|0,i=i+Math.imul(m,ae)|0;var Ce=(c+(n=n+Math.imul(d,le)|0)|0)+((8191&(o=(o=o+Math.imul(d,ce)|0)+Math.imul(f,le)|0))<<13)|0;c=((i=i+Math.imul(f,ce)|0)+(o>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,n=Math.imul(N,H),o=(o=Math.imul(N,U))+Math.imul(F,H)|0,i=Math.imul(F,U),n=n+Math.imul(R,W)|0,o=(o=o+Math.imul(R,G)|0)+Math.imul(_,W)|0,i=i+Math.imul(_,G)|0,n=n+Math.imul(j,K)|0,o=(o=o+Math.imul(j,X)|0)+Math.imul(P,K)|0,i=i+Math.imul(P,X)|0,n=n+Math.imul(O,$)|0,o=(o=o+Math.imul(O,Z)|0)+Math.imul(A,$)|0,i=i+Math.imul(A,Z)|0,n=n+Math.imul(C,J)|0,o=(o=o+Math.imul(C,ee)|0)+Math.imul(k,J)|0,i=i+Math.imul(k,ee)|0,n=n+Math.imul(w,re)|0,o=(o=o+Math.imul(w,ne)|0)+Math.imul(x,re)|0,i=i+Math.imul(x,ne)|0,n=n+Math.imul(v,ie)|0,o=(o=o+Math.imul(v,ae)|0)+Math.imul(b,ie)|0,i=i+Math.imul(b,ae)|0,n=n+Math.imul(p,le)|0,o=(o=o+Math.imul(p,ce)|0)+Math.imul(m,le)|0,i=i+Math.imul(m,ce)|0;var ke=(c+(n=n+Math.imul(d,de)|0)|0)+((8191&(o=(o=o+Math.imul(d,fe)|0)+Math.imul(f,de)|0))<<13)|0;c=((i=i+Math.imul(f,fe)|0)+(o>>>13)|0)+(ke>>>26)|0,ke&=67108863,n=Math.imul(B,H),o=(o=Math.imul(B,U))+Math.imul(L,H)|0,i=Math.imul(L,U),n=n+Math.imul(N,W)|0,o=(o=o+Math.imul(N,G)|0)+Math.imul(F,W)|0,i=i+Math.imul(F,G)|0,n=n+Math.imul(R,K)|0,o=(o=o+Math.imul(R,X)|0)+Math.imul(_,K)|0,i=i+Math.imul(_,X)|0,n=n+Math.imul(j,$)|0,o=(o=o+Math.imul(j,Z)|0)+Math.imul(P,$)|0,i=i+Math.imul(P,Z)|0,n=n+Math.imul(O,J)|0,o=(o=o+Math.imul(O,ee)|0)+Math.imul(A,J)|0,i=i+Math.imul(A,ee)|0,n=n+Math.imul(C,re)|0,o=(o=o+Math.imul(C,ne)|0)+Math.imul(k,re)|0,i=i+Math.imul(k,ne)|0,n=n+Math.imul(w,ie)|0,o=(o=o+Math.imul(w,ae)|0)+Math.imul(x,ie)|0,i=i+Math.imul(x,ae)|0,n=n+Math.imul(v,le)|0,o=(o=o+Math.imul(v,ce)|0)+Math.imul(b,le)|0,i=i+Math.imul(b,ce)|0,n=n+Math.imul(p,de)|0,o=(o=o+Math.imul(p,fe)|0)+Math.imul(m,de)|0,i=i+Math.imul(m,fe)|0;var Ee=(c+(n=n+Math.imul(d,pe)|0)|0)+((8191&(o=(o=o+Math.imul(d,me)|0)+Math.imul(f,pe)|0))<<13)|0;c=((i=i+Math.imul(f,me)|0)+(o>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,n=Math.imul(B,W),o=(o=Math.imul(B,G))+Math.imul(L,W)|0,i=Math.imul(L,G),n=n+Math.imul(N,K)|0,o=(o=o+Math.imul(N,X)|0)+Math.imul(F,K)|0,i=i+Math.imul(F,X)|0,n=n+Math.imul(R,$)|0,o=(o=o+Math.imul(R,Z)|0)+Math.imul(_,$)|0,i=i+Math.imul(_,Z)|0,n=n+Math.imul(j,J)|0,o=(o=o+Math.imul(j,ee)|0)+Math.imul(P,J)|0,i=i+Math.imul(P,ee)|0,n=n+Math.imul(O,re)|0,o=(o=o+Math.imul(O,ne)|0)+Math.imul(A,re)|0,i=i+Math.imul(A,ne)|0,n=n+Math.imul(C,ie)|0,o=(o=o+Math.imul(C,ae)|0)+Math.imul(k,ie)|0,i=i+Math.imul(k,ae)|0,n=n+Math.imul(w,le)|0,o=(o=o+Math.imul(w,ce)|0)+Math.imul(x,le)|0,i=i+Math.imul(x,ce)|0,n=n+Math.imul(v,de)|0,o=(o=o+Math.imul(v,fe)|0)+Math.imul(b,de)|0,i=i+Math.imul(b,fe)|0;var Oe=(c+(n=n+Math.imul(p,pe)|0)|0)+((8191&(o=(o=o+Math.imul(p,me)|0)+Math.imul(m,pe)|0))<<13)|0;c=((i=i+Math.imul(m,me)|0)+(o>>>13)|0)+(Oe>>>26)|0,Oe&=67108863,n=Math.imul(B,K),o=(o=Math.imul(B,X))+Math.imul(L,K)|0,i=Math.imul(L,X),n=n+Math.imul(N,$)|0,o=(o=o+Math.imul(N,Z)|0)+Math.imul(F,$)|0,i=i+Math.imul(F,Z)|0,n=n+Math.imul(R,J)|0,o=(o=o+Math.imul(R,ee)|0)+Math.imul(_,J)|0,i=i+Math.imul(_,ee)|0,n=n+Math.imul(j,re)|0,o=(o=o+Math.imul(j,ne)|0)+Math.imul(P,re)|0,i=i+Math.imul(P,ne)|0,n=n+Math.imul(O,ie)|0,o=(o=o+Math.imul(O,ae)|0)+Math.imul(A,ie)|0,i=i+Math.imul(A,ae)|0,n=n+Math.imul(C,le)|0,o=(o=o+Math.imul(C,ce)|0)+Math.imul(k,le)|0,i=i+Math.imul(k,ce)|0,n=n+Math.imul(w,de)|0,o=(o=o+Math.imul(w,fe)|0)+Math.imul(x,de)|0,i=i+Math.imul(x,fe)|0;var Ae=(c+(n=n+Math.imul(v,pe)|0)|0)+((8191&(o=(o=o+Math.imul(v,me)|0)+Math.imul(b,pe)|0))<<13)|0;c=((i=i+Math.imul(b,me)|0)+(o>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,n=Math.imul(B,$),o=(o=Math.imul(B,Z))+Math.imul(L,$)|0,i=Math.imul(L,Z),n=n+Math.imul(N,J)|0,o=(o=o+Math.imul(N,ee)|0)+Math.imul(F,J)|0,i=i+Math.imul(F,ee)|0,n=n+Math.imul(R,re)|0,o=(o=o+Math.imul(R,ne)|0)+Math.imul(_,re)|0,i=i+Math.imul(_,ne)|0,n=n+Math.imul(j,ie)|0,o=(o=o+Math.imul(j,ae)|0)+Math.imul(P,ie)|0,i=i+Math.imul(P,ae)|0,n=n+Math.imul(O,le)|0,o=(o=o+Math.imul(O,ce)|0)+Math.imul(A,le)|0,i=i+Math.imul(A,ce)|0,n=n+Math.imul(C,de)|0,o=(o=o+Math.imul(C,fe)|0)+Math.imul(k,de)|0,i=i+Math.imul(k,fe)|0;var Te=(c+(n=n+Math.imul(w,pe)|0)|0)+((8191&(o=(o=o+Math.imul(w,me)|0)+Math.imul(x,pe)|0))<<13)|0;c=((i=i+Math.imul(x,me)|0)+(o>>>13)|0)+(Te>>>26)|0,Te&=67108863,n=Math.imul(B,J),o=(o=Math.imul(B,ee))+Math.imul(L,J)|0,i=Math.imul(L,ee),n=n+Math.imul(N,re)|0,o=(o=o+Math.imul(N,ne)|0)+Math.imul(F,re)|0,i=i+Math.imul(F,ne)|0,n=n+Math.imul(R,ie)|0,o=(o=o+Math.imul(R,ae)|0)+Math.imul(_,ie)|0,i=i+Math.imul(_,ae)|0,n=n+Math.imul(j,le)|0,o=(o=o+Math.imul(j,ce)|0)+Math.imul(P,le)|0,i=i+Math.imul(P,ce)|0,n=n+Math.imul(O,de)|0,o=(o=o+Math.imul(O,fe)|0)+Math.imul(A,de)|0,i=i+Math.imul(A,fe)|0;var je=(c+(n=n+Math.imul(C,pe)|0)|0)+((8191&(o=(o=o+Math.imul(C,me)|0)+Math.imul(k,pe)|0))<<13)|0;c=((i=i+Math.imul(k,me)|0)+(o>>>13)|0)+(je>>>26)|0,je&=67108863,n=Math.imul(B,re),o=(o=Math.imul(B,ne))+Math.imul(L,re)|0,i=Math.imul(L,ne),n=n+Math.imul(N,ie)|0,o=(o=o+Math.imul(N,ae)|0)+Math.imul(F,ie)|0,i=i+Math.imul(F,ae)|0,n=n+Math.imul(R,le)|0,o=(o=o+Math.imul(R,ce)|0)+Math.imul(_,le)|0,i=i+Math.imul(_,ce)|0,n=n+Math.imul(j,de)|0,o=(o=o+Math.imul(j,fe)|0)+Math.imul(P,de)|0,i=i+Math.imul(P,fe)|0;var Pe=(c+(n=n+Math.imul(O,pe)|0)|0)+((8191&(o=(o=o+Math.imul(O,me)|0)+Math.imul(A,pe)|0))<<13)|0;c=((i=i+Math.imul(A,me)|0)+(o>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,n=Math.imul(B,ie),o=(o=Math.imul(B,ae))+Math.imul(L,ie)|0,i=Math.imul(L,ae),n=n+Math.imul(N,le)|0,o=(o=o+Math.imul(N,ce)|0)+Math.imul(F,le)|0,i=i+Math.imul(F,ce)|0,n=n+Math.imul(R,de)|0,o=(o=o+Math.imul(R,fe)|0)+Math.imul(_,de)|0,i=i+Math.imul(_,fe)|0;var Me=(c+(n=n+Math.imul(j,pe)|0)|0)+((8191&(o=(o=o+Math.imul(j,me)|0)+Math.imul(P,pe)|0))<<13)|0;c=((i=i+Math.imul(P,me)|0)+(o>>>13)|0)+(Me>>>26)|0,Me&=67108863,n=Math.imul(B,le),o=(o=Math.imul(B,ce))+Math.imul(L,le)|0,i=Math.imul(L,ce),n=n+Math.imul(N,de)|0,o=(o=o+Math.imul(N,fe)|0)+Math.imul(F,de)|0,i=i+Math.imul(F,fe)|0;var Re=(c+(n=n+Math.imul(R,pe)|0)|0)+((8191&(o=(o=o+Math.imul(R,me)|0)+Math.imul(_,pe)|0))<<13)|0;c=((i=i+Math.imul(_,me)|0)+(o>>>13)|0)+(Re>>>26)|0,Re&=67108863,n=Math.imul(B,de),o=(o=Math.imul(B,fe))+Math.imul(L,de)|0,i=Math.imul(L,fe);var _e=(c+(n=n+Math.imul(N,pe)|0)|0)+((8191&(o=(o=o+Math.imul(N,me)|0)+Math.imul(F,pe)|0))<<13)|0;c=((i=i+Math.imul(F,me)|0)+(o>>>13)|0)+(_e>>>26)|0,_e&=67108863;var Ie=(c+(n=Math.imul(B,pe))|0)+((8191&(o=(o=Math.imul(B,me))+Math.imul(L,pe)|0))<<13)|0;return c=((i=Math.imul(L,me))+(o>>>13)|0)+(Ie>>>26)|0,Ie&=67108863,l[0]=ge,l[1]=ve,l[2]=be,l[3]=ye,l[4]=we,l[5]=xe,l[6]=Se,l[7]=Ce,l[8]=ke,l[9]=Ee,l[10]=Oe,l[11]=Ae,l[12]=Te,l[13]=je,l[14]=Pe,l[15]=Me,l[16]=Re,l[17]=_e,l[18]=Ie,0!==c&&(l[19]=c,r.length++),r};function p(e,t,r){return(new m).mulp(e,t,r)}function m(e,t){this.x=e,this.y=t}Math.imul||(h=f),o.prototype.mulTo=function(e,t){var r=this.length+e.length;return 10===this.length&&10===e.length?h(this,e,t):r<63?f(this,e,t):r<1024?function(e,t,r){r.negative=t.negative^e.negative,r.length=e.length+t.length;for(var n=0,o=0,i=0;i<r.length-1;i++){var a=o;o=0;for(var s=67108863&n,l=Math.min(i,t.length-1),c=Math.max(0,i-e.length+1);c<=l;c++){var u=i-c,d=(0|e.words[u])*(0|t.words[c]),f=67108863&d;s=67108863&(f=f+s|0),o+=(a=(a=a+(d/67108864|0)|0)+(f>>>26)|0)>>>26,a&=67108863}r.words[i]=s,n=a,a=o}return 0!==n?r.words[i]=n:r.length--,r.strip()}(this,e,t):p(this,e,t)},m.prototype.makeRBT=function(e){for(var t=new Array(e),r=o.prototype._countBits(e)-1,n=0;n<e;n++)t[n]=this.revBin(n,r,e);return t},m.prototype.revBin=function(e,t,r){if(0===e||e===r-1)return e;for(var n=0,o=0;o<t;o++)n|=(1&e)<<t-o-1,e>>=1;return n},m.prototype.permute=function(e,t,r,n,o,i){for(var a=0;a<i;a++)n[a]=t[e[a]],o[a]=r[e[a]]},m.prototype.transform=function(e,t,r,n,o,i){this.permute(i,e,t,r,n,o);for(var a=1;a<o;a<<=1)for(var s=a<<1,l=Math.cos(2*Math.PI/s),c=Math.sin(2*Math.PI/s),u=0;u<o;u+=s)for(var d=l,f=c,h=0;h<a;h++){var p=r[u+h],m=n[u+h],g=r[u+h+a],v=n[u+h+a],b=d*g-f*v;v=d*v+f*g,g=b,r[u+h]=p+g,n[u+h]=m+v,r[u+h+a]=p-g,n[u+h+a]=m-v,h!==s&&(b=l*d-c*f,f=l*f+c*d,d=b)}},m.prototype.guessLen13b=function(e,t){var r=1|Math.max(t,e),n=1&r,o=0;for(r=r/2|0;r;r>>>=1)o++;return 1<<o+1+n},m.prototype.conjugate=function(e,t,r){if(!(r<=1))for(var n=0;n<r/2;n++){var o=e[n];e[n]=e[r-n-1],e[r-n-1]=o,o=t[n],t[n]=-t[r-n-1],t[r-n-1]=-o}},m.prototype.normalize13b=function(e,t){for(var r=0,n=0;n<t/2;n++){var o=8192*Math.round(e[2*n+1]/t)+Math.round(e[2*n]/t)+r;e[n]=67108863&o,r=o<67108864?0:o/67108864|0}return e},m.prototype.convert13b=function(e,t,n,o){for(var i=0,a=0;a<t;a++)i+=0|e[a],n[2*a]=8191&i,i>>>=13,n[2*a+1]=8191&i,i>>>=13;for(a=2*t;a<o;++a)n[a]=0;r(0===i),r(!(-8192&i))},m.prototype.stub=function(e){for(var t=new Array(e),r=0;r<e;r++)t[r]=0;return t},m.prototype.mulp=function(e,t,r){var n=2*this.guessLen13b(e.length,t.length),o=this.makeRBT(n),i=this.stub(n),a=new Array(n),s=new Array(n),l=new Array(n),c=new Array(n),u=new Array(n),d=new Array(n),f=r.words;f.length=n,this.convert13b(e.words,e.length,a,n),this.convert13b(t.words,t.length,c,n),this.transform(a,i,s,l,n,o),this.transform(c,i,u,d,n,o);for(var h=0;h<n;h++){var p=s[h]*u[h]-l[h]*d[h];l[h]=s[h]*d[h]+l[h]*u[h],s[h]=p}return this.conjugate(s,l,n),this.transform(s,l,f,i,n,o),this.conjugate(f,i,n),this.normalize13b(f,n),r.negative=e.negative^t.negative,r.length=e.length+t.length,r.strip()},o.prototype.mul=function(e){var t=new o(null);return t.words=new Array(this.length+e.length),this.mulTo(e,t)},o.prototype.mulf=function(e){var t=new o(null);return t.words=new Array(this.length+e.length),p(this,e,t)},o.prototype.imul=function(e){return this.clone().mulTo(e,this)},o.prototype.imuln=function(e){r(\"number\"==typeof e),r(e<67108864);for(var t=0,n=0;n<this.length;n++){var o=(0|this.words[n])*e,i=(67108863&o)+(67108863&t);t>>=26,t+=o/67108864|0,t+=i>>>26,this.words[n]=67108863&i}return 0!==t&&(this.words[n]=t,this.length++),this},o.prototype.muln=function(e){return this.clone().imuln(e)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(e){var t=function(e){for(var t=new Array(e.bitLength()),r=0;r<t.length;r++){var n=r/26|0,o=r%26;t[r]=(e.words[n]&1<<o)>>>o}return t}(e);if(0===t.length)return new o(1);for(var r=this,n=0;n<t.length&&0===t[n];n++,r=r.sqr());if(++n<t.length)for(var i=r.sqr();n<t.length;n++,i=i.sqr())0!==t[n]&&(r=r.mul(i));return r},o.prototype.iushln=function(e){r(\"number\"==typeof e&&e>=0);var t,n=e%26,o=(e-n)/26,i=67108863>>>26-n<<26-n;if(0!==n){var a=0;for(t=0;t<this.length;t++){var s=this.words[t]&i,l=(0|this.words[t])-s<<n;this.words[t]=l|a,a=s>>>26-n}a&&(this.words[t]=a,this.length++)}if(0!==o){for(t=this.length-1;t>=0;t--)this.words[t+o]=this.words[t];for(t=0;t<o;t++)this.words[t]=0;this.length+=o}return this.strip()},o.prototype.ishln=function(e){return r(0===this.negative),this.iushln(e)},o.prototype.iushrn=function(e,t,n){var o;r(\"number\"==typeof e&&e>=0),o=t?(t-t%26)/26:0;var i=e%26,a=Math.min((e-i)/26,this.length),s=67108863^67108863>>>i<<i,l=n;if(o-=a,o=Math.max(0,o),l){for(var c=0;c<a;c++)l.words[c]=this.words[c];l.length=a}if(0===a);else if(this.length>a)for(this.length-=a,c=0;c<this.length;c++)this.words[c]=this.words[c+a];else this.words[0]=0,this.length=1;var u=0;for(c=this.length-1;c>=0&&(0!==u||c>=o);c--){var d=0|this.words[c];this.words[c]=u<<26-i|d>>>i,u=d&s}return l&&0!==u&&(l.words[l.length++]=u),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function(e,t,n){return r(0===this.negative),this.iushrn(e,t,n)},o.prototype.shln=function(e){return this.clone().ishln(e)},o.prototype.ushln=function(e){return this.clone().iushln(e)},o.prototype.shrn=function(e){return this.clone().ishrn(e)},o.prototype.ushrn=function(e){return this.clone().iushrn(e)},o.prototype.testn=function(e){r(\"number\"==typeof e&&e>=0);var t=e%26,n=(e-t)/26,o=1<<t;return!(this.length<=n||!(this.words[n]&o))},o.prototype.imaskn=function(e){r(\"number\"==typeof e&&e>=0);var t=e%26,n=(e-t)/26;if(r(0===this.negative,\"imaskn works only with positive numbers\"),this.length<=n)return this;if(0!==t&&n++,this.length=Math.min(n,this.length),0!==t){var o=67108863^67108863>>>t<<t;this.words[this.length-1]&=o}return this.strip()},o.prototype.maskn=function(e){return this.clone().imaskn(e)},o.prototype.iaddn=function(e){return r(\"number\"==typeof e),r(e<67108864),e<0?this.isubn(-e):0!==this.negative?1===this.length&&(0|this.words[0])<e?(this.words[0]=e-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(e),this.negative=1,this):this._iaddn(e)},o.prototype._iaddn=function(e){this.words[0]+=e;for(var t=0;t<this.length&&this.words[t]>=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},o.prototype.isubn=function(e){if(r(\"number\"==typeof e),r(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t<this.length&&this.words[t]<0;t++)this.words[t]+=67108864,this.words[t+1]-=1;return this.strip()},o.prototype.addn=function(e){return this.clone().iaddn(e)},o.prototype.subn=function(e){return this.clone().isubn(e)},o.prototype.iabs=function(){return this.negative=0,this},o.prototype.abs=function(){return this.clone().iabs()},o.prototype._ishlnsubmul=function(e,t,n){var o,i,a=e.length+n;this._expand(a);var s=0;for(o=0;o<e.length;o++){i=(0|this.words[o+n])+s;var l=(0|e.words[o])*t;s=((i-=67108863&l)>>26)-(l/67108864|0),this.words[o+n]=67108863&i}for(;o<this.length-n;o++)s=(i=(0|this.words[o+n])+s)>>26,this.words[o+n]=67108863&i;if(0===s)return this.strip();for(r(-1===s),s=0,o=0;o<this.length;o++)s=(i=-(0|this.words[o])+s)>>26,this.words[o]=67108863&i;return this.negative=1,this.strip()},o.prototype._wordDiv=function(e,t){var r=(this.length,e.length),n=this.clone(),i=e,a=0|i.words[i.length-1];0!=(r=26-this._countBits(a))&&(i=i.ushln(r),n.iushln(r),a=0|i.words[i.length-1]);var s,l=n.length-i.length;if(\"mod\"!==t){(s=new o(null)).length=l+1,s.words=new Array(s.length);for(var c=0;c<s.length;c++)s.words[c]=0}var u=n.clone()._ishlnsubmul(i,1,l);0===u.negative&&(n=u,s&&(s.words[l]=1));for(var d=l-1;d>=0;d--){var f=67108864*(0|n.words[i.length+d])+(0|n.words[i.length+d-1]);for(f=Math.min(f/a|0,67108863),n._ishlnsubmul(i,f,d);0!==n.negative;)f--,n.negative=0,n._ishlnsubmul(i,1,d),n.isZero()||(n.negative^=1);s&&(s.words[d]=f)}return s&&s.strip(),n.strip(),\"div\"!==t&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},o.prototype.divmod=function(e,t,n){return r(!e.isZero()),this.isZero()?{div:new o(0),mod:new o(0)}:0!==this.negative&&0===e.negative?(s=this.neg().divmod(e,t),\"mod\"!==t&&(i=s.div.neg()),\"div\"!==t&&(a=s.mod.neg(),n&&0!==a.negative&&a.iadd(e)),{div:i,mod:a}):0===this.negative&&0!==e.negative?(s=this.divmod(e.neg(),t),\"mod\"!==t&&(i=s.div.neg()),{div:i,mod:s.mod}):0!=(this.negative&e.negative)?(s=this.neg().divmod(e.neg(),t),\"div\"!==t&&(a=s.mod.neg(),n&&0!==a.negative&&a.isub(e)),{div:s.div,mod:a}):e.length>this.length||this.cmp(e)<0?{div:new o(0),mod:this}:1===e.length?\"div\"===t?{div:this.divn(e.words[0]),mod:null}:\"mod\"===t?{div:null,mod:new o(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new o(this.modn(e.words[0]))}:this._wordDiv(e,t);var i,a,s},o.prototype.div=function(e){return this.divmod(e,\"div\",!1).div},o.prototype.mod=function(e){return this.divmod(e,\"mod\",!1).mod},o.prototype.umod=function(e){return this.divmod(e,\"mod\",!0).mod},o.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var r=0!==t.div.negative?t.mod.isub(e):t.mod,n=e.ushrn(1),o=e.andln(1),i=r.cmp(n);return i<0||1===o&&0===i?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},o.prototype.modn=function(e){r(e<=67108863);for(var t=(1<<26)%e,n=0,o=this.length-1;o>=0;o--)n=(t*n+(0|this.words[o]))%e;return n},o.prototype.idivn=function(e){r(e<=67108863);for(var t=0,n=this.length-1;n>=0;n--){var o=(0|this.words[n])+67108864*t;this.words[n]=o/e|0,t=o%e}return this.strip()},o.prototype.divn=function(e){return this.clone().idivn(e)},o.prototype.egcd=function(e){r(0===e.negative),r(!e.isZero());var t=this,n=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var i=new o(1),a=new o(0),s=new o(0),l=new o(1),c=0;t.isEven()&&n.isEven();)t.iushrn(1),n.iushrn(1),++c;for(var u=n.clone(),d=t.clone();!t.isZero();){for(var f=0,h=1;0==(t.words[0]&h)&&f<26;++f,h<<=1);if(f>0)for(t.iushrn(f);f-- >0;)(i.isOdd()||a.isOdd())&&(i.iadd(u),a.isub(d)),i.iushrn(1),a.iushrn(1);for(var p=0,m=1;0==(n.words[0]&m)&&p<26;++p,m<<=1);if(p>0)for(n.iushrn(p);p-- >0;)(s.isOdd()||l.isOdd())&&(s.iadd(u),l.isub(d)),s.iushrn(1),l.iushrn(1);t.cmp(n)>=0?(t.isub(n),i.isub(s),a.isub(l)):(n.isub(t),s.isub(i),l.isub(a))}return{a:s,b:l,gcd:n.iushln(c)}},o.prototype._invmp=function(e){r(0===e.negative),r(!e.isZero());var t=this,n=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var i,a=new o(1),s=new o(0),l=n.clone();t.cmpn(1)>0&&n.cmpn(1)>0;){for(var c=0,u=1;0==(t.words[0]&u)&&c<26;++c,u<<=1);if(c>0)for(t.iushrn(c);c-- >0;)a.isOdd()&&a.iadd(l),a.iushrn(1);for(var d=0,f=1;0==(n.words[0]&f)&&d<26;++d,f<<=1);if(d>0)for(n.iushrn(d);d-- >0;)s.isOdd()&&s.iadd(l),s.iushrn(1);t.cmp(n)>=0?(t.isub(n),a.isub(s)):(n.isub(t),s.isub(a))}return(i=0===t.cmpn(1)?a:s).cmpn(0)<0&&i.iadd(e),i},o.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),r=e.clone();t.negative=0,r.negative=0;for(var n=0;t.isEven()&&r.isEven();n++)t.iushrn(1),r.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;r.isEven();)r.iushrn(1);var o=t.cmp(r);if(o<0){var i=t;t=r,r=i}else if(0===o||0===r.cmpn(1))break;t.isub(r)}return r.iushln(n)},o.prototype.invm=function(e){return this.egcd(e).a.umod(e)},o.prototype.isEven=function(){return!(1&this.words[0])},o.prototype.isOdd=function(){return!(1&~this.words[0])},o.prototype.andln=function(e){return this.words[0]&e},o.prototype.bincn=function(e){r(\"number\"==typeof e);var t=e%26,n=(e-t)/26,o=1<<t;if(this.length<=n)return this._expand(n+1),this.words[n]|=o,this;for(var i=o,a=n;0!==i&&a<this.length;a++){var s=0|this.words[a];i=(s+=i)>>>26,s&=67108863,this.words[a]=s}return 0!==i&&(this.words[a]=i,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(e){var t,n=e<0;if(0!==this.negative&&!n)return-1;if(0===this.negative&&n)return 1;if(this.strip(),this.length>1)t=1;else{n&&(e=-e),r(e<=67108863,\"Number is too big\");var o=0|this.words[0];t=o===e?0:o<e?-1:1}return 0!==this.negative?0|-t:t},o.prototype.cmp=function(e){if(0!==this.negative&&0===e.negative)return-1;if(0===this.negative&&0!==e.negative)return 1;var t=this.ucmp(e);return 0!==this.negative?0|-t:t},o.prototype.ucmp=function(e){if(this.length>e.length)return 1;if(this.length<e.length)return-1;for(var t=0,r=this.length-1;r>=0;r--){var n=0|this.words[r],o=0|e.words[r];if(n!==o){n<o?t=-1:n>o&&(t=1);break}}return t},o.prototype.gtn=function(e){return 1===this.cmpn(e)},o.prototype.gt=function(e){return 1===this.cmp(e)},o.prototype.gten=function(e){return this.cmpn(e)>=0},o.prototype.gte=function(e){return this.cmp(e)>=0},o.prototype.ltn=function(e){return-1===this.cmpn(e)},o.prototype.lt=function(e){return-1===this.cmp(e)},o.prototype.lten=function(e){return this.cmpn(e)<=0},o.prototype.lte=function(e){return this.cmp(e)<=0},o.prototype.eqn=function(e){return 0===this.cmpn(e)},o.prototype.eq=function(e){return 0===this.cmp(e)},o.red=function(e){return new S(e)},o.prototype.toRed=function(e){return r(!this.red,\"Already a number in reduction context\"),r(0===this.negative,\"red works only with positives\"),e.convertTo(this)._forceRed(e)},o.prototype.fromRed=function(){return r(this.red,\"fromRed works only with numbers in reduction context\"),this.red.convertFrom(this)},o.prototype._forceRed=function(e){return this.red=e,this},o.prototype.forceRed=function(e){return r(!this.red,\"Already a number in reduction context\"),this._forceRed(e)},o.prototype.redAdd=function(e){return r(this.red,\"redAdd works only with red numbers\"),this.red.add(this,e)},o.prototype.redIAdd=function(e){return r(this.red,\"redIAdd works only with red numbers\"),this.red.iadd(this,e)},o.prototype.redSub=function(e){return r(this.red,\"redSub works only with red numbers\"),this.red.sub(this,e)},o.prototype.redISub=function(e){return r(this.red,\"redISub works only with red numbers\"),this.red.isub(this,e)},o.prototype.redShl=function(e){return r(this.red,\"redShl works only with red numbers\"),this.red.shl(this,e)},o.prototype.redMul=function(e){return r(this.red,\"redMul works only with red numbers\"),this.red._verify2(this,e),this.red.mul(this,e)},o.prototype.redIMul=function(e){return r(this.red,\"redMul works only with red numbers\"),this.red._verify2(this,e),this.red.imul(this,e)},o.prototype.redSqr=function(){return r(this.red,\"redSqr works only with red numbers\"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return r(this.red,\"redISqr works only with red numbers\"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return r(this.red,\"redSqrt works only with red numbers\"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return r(this.red,\"redInvm works only with red numbers\"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return r(this.red,\"redNeg works only with red numbers\"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(e){return r(this.red&&!e.red,\"redPow(normalNum)\"),this.red._verify1(this),this.red.pow(this,e)};var g={k256:null,p224:null,p192:null,p25519:null};function v(e,t){this.name=e,this.p=new o(t,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function b(){v.call(this,\"k256\",\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f\")}function y(){v.call(this,\"p224\",\"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001\")}function w(){v.call(this,\"p192\",\"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff\")}function x(){v.call(this,\"25519\",\"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed\")}function S(e){if(\"string\"==typeof e){var t=o._prime(e);this.m=t.p,this.prime=t}else r(e.gtn(1),\"modulus must be greater than 1\"),this.m=e,this.prime=null}function C(e){S.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}v.prototype._tmp=function(){var e=new o(null);return e.words=new Array(Math.ceil(this.n/13)),e},v.prototype.ireduce=function(e){var t,r=e;do{this.split(r,this.tmp),t=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(t>this.n);var n=t<this.n?-1:r.ucmp(this.p);return 0===n?(r.words[0]=0,r.length=1):n>0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},v.prototype.split=function(e,t){e.iushrn(this.n,0,t)},v.prototype.imulK=function(e){return e.imul(this.k)},n(b,v),b.prototype.split=function(e,t){for(var r=Math.min(e.length,9),n=0;n<r;n++)t.words[n]=e.words[n];if(t.length=r,e.length<=9)return e.words[0]=0,void(e.length=1);var o=e.words[9];for(t.words[t.length++]=4194303&o,n=10;n<e.length;n++){var i=0|e.words[n];e.words[n-10]=(4194303&i)<<4|o>>>22,o=i}o>>>=22,e.words[n-10]=o,0===o&&e.length>10?e.length-=10:e.length-=9},b.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,r=0;r<e.length;r++){var n=0|e.words[r];t+=977*n,e.words[r]=67108863&t,t=64*n+(t/67108864|0)}return 0===e.words[e.length-1]&&(e.length--,0===e.words[e.length-1]&&e.length--),e},n(y,v),n(w,v),n(x,v),x.prototype.imulK=function(e){for(var t=0,r=0;r<e.length;r++){var n=19*(0|e.words[r])+t,o=67108863&n;n>>>=26,e.words[r]=o,t=n}return 0!==t&&(e.words[e.length++]=t),e},o._prime=function(e){if(g[e])return g[e];var t;if(\"k256\"===e)t=new b;else if(\"p224\"===e)t=new y;else if(\"p192\"===e)t=new w;else{if(\"p25519\"!==e)throw new Error(\"Unknown prime \"+e);t=new x}return g[e]=t,t},S.prototype._verify1=function(e){r(0===e.negative,\"red works only with positives\"),r(e.red,\"red works only with red numbers\")},S.prototype._verify2=function(e,t){r(0==(e.negative|t.negative),\"red works only with positives\"),r(e.red&&e.red===t.red,\"red works only with red numbers\")},S.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},S.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},S.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},S.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},S.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},S.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},S.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},S.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},S.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},S.prototype.isqr=function(e){return this.imul(e,e.clone())},S.prototype.sqr=function(e){return this.mul(e,e)},S.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(r(t%2==1),3===t){var n=this.m.add(new o(1)).iushrn(2);return this.pow(e,n)}for(var i=this.m.subn(1),a=0;!i.isZero()&&0===i.andln(1);)a++,i.iushrn(1);r(!i.isZero());var s=new o(1).toRed(this),l=s.redNeg(),c=this.m.subn(1).iushrn(1),u=this.m.bitLength();for(u=new o(2*u*u).toRed(this);0!==this.pow(u,c).cmp(l);)u.redIAdd(l);for(var d=this.pow(u,i),f=this.pow(e,i.addn(1).iushrn(1)),h=this.pow(e,i),p=a;0!==h.cmp(s);){for(var m=h,g=0;0!==m.cmp(s);g++)m=m.redSqr();r(g<p);var v=this.pow(d,new o(1).iushln(p-g-1));f=f.redMul(v),d=v.redSqr(),h=h.redMul(d),p=g}return f},S.prototype.invm=function(e){var t=e._invmp(this.m);return 0!==t.negative?(t.negative=0,this.imod(t).redNeg()):this.imod(t)},S.prototype.pow=function(e,t){if(t.isZero())return new o(1).toRed(this);if(0===t.cmpn(1))return e.clone();var r=new Array(16);r[0]=new o(1).toRed(this),r[1]=e;for(var n=2;n<r.length;n++)r[n]=this.mul(r[n-1],e);var i=r[0],a=0,s=0,l=t.bitLength()%26;for(0===l&&(l=26),n=t.length-1;n>=0;n--){for(var c=t.words[n],u=l-1;u>=0;u--){var d=c>>u&1;i!==r[0]&&(i=this.sqr(i)),0!==d||0!==a?(a<<=1,a|=d,(4===++s||0===n&&0===u)&&(i=this.mul(i,r[a]),s=0,a=0)):s=0}l=26}return i},S.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},S.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},o.mont=function(e){return new C(e)},n(C,S),C.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},C.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},C.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var r=e.imul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=r.isub(n).iushrn(this.shift),i=o;return o.cmp(this.m)>=0?i=o.isub(this.m):o.cmpn(0)<0&&(i=o.iadd(this.m)),i._forceRed(this)},C.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new o(0)._forceRed(this);var r=e.mul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},C.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===t||t)},{buffer:188}],185:[function(e,t,r){\"use strict\";r.byteLength=function(e){var t=l(e),r=t[0],n=t[1];return 3*(r+n)/4-n},r.toByteArray=function(e){var t,r,n=l(e),a=n[0],s=n[1],c=new i(function(e,t,r){return 3*(t+r)/4-r}(0,a,s)),u=0,d=s>0?a-4:a;for(r=0;r<d;r+=4)t=o[e.charCodeAt(r)]<<18|o[e.charCodeAt(r+1)]<<12|o[e.charCodeAt(r+2)]<<6|o[e.charCodeAt(r+3)],c[u++]=t>>16&255,c[u++]=t>>8&255,c[u++]=255&t;return 2===s&&(t=o[e.charCodeAt(r)]<<2|o[e.charCodeAt(r+1)]>>4,c[u++]=255&t),1===s&&(t=o[e.charCodeAt(r)]<<10|o[e.charCodeAt(r+1)]<<4|o[e.charCodeAt(r+2)]>>2,c[u++]=t>>8&255,c[u++]=255&t),c},r.fromByteArray=function(e){for(var t,r=e.length,o=r%3,i=[],a=0,s=r-o;a<s;a+=16383)i.push(c(e,a,a+16383>s?s:a+16383));return 1===o?(t=e[r-1],i.push(n[t>>2]+n[t<<4&63]+\"==\")):2===o&&(t=(e[r-2]<<8)+e[r-1],i.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+\"=\")),i.join(\"\")};for(var n=[],o=[],i=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,a=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",s=0;s<64;++s)n[s]=a[s],o[a.charCodeAt(s)]=s;function l(e){var t=e.length;if(t%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var r=e.indexOf(\"=\");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function c(e,t,r){for(var o,i,a=[],s=t;s<r;s+=3)o=(e[s]<<16&16711680)+(e[s+1]<<8&65280)+(255&e[s+2]),a.push(n[(i=o)>>18&63]+n[i>>12&63]+n[i>>6&63]+n[63&i]);return a.join(\"\")}o[\"-\".charCodeAt(0)]=62,o[\"_\".charCodeAt(0)]=63},{}],186:[function(e,t,r){\"use strict\";!function(t){function r(e,t){if(!e)throw new Error(t||\"Assertion failed\")}function n(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}function o(e,t,r){if(o.isBN(e))return e;this.negative=0,this.words=null,this.length=0,this.red=null,null!==e&&(\"le\"!==t&&\"be\"!==t||(r=t,t=10),this._init(e||0,t||10,r||\"be\"))}var i;\"object\"==typeof t?t.exports=o:(void 0).BN=o,o.BN=o,o.wordSize=26;try{i=\"undefined\"!=typeof window&&void 0!==window.Buffer?window.Buffer:e(\"buffer\").Buffer}catch(e){}function a(e,t){var n=e.charCodeAt(t);return n>=48&&n<=57?n-48:n>=65&&n<=70?n-55:n>=97&&n<=102?n-87:void r(!1,\"Invalid character in \"+e)}function s(e,t,r){var n=a(e,r);return r-1>=t&&(n|=a(e,r-1)<<4),n}function l(e,t,n,o){for(var i=0,a=0,s=Math.min(e.length,n),l=t;l<s;l++){var c=e.charCodeAt(l)-48;i*=o,a=c>=49?c-49+10:c>=17?c-17+10:c,r(c>=0&&a<o,\"Invalid character\"),i+=a}return i}function c(e,t){e.words=t.words,e.length=t.length,e.negative=t.negative,e.red=t.red}if(o.isBN=function(e){return e instanceof o||null!==e&&\"object\"==typeof e&&e.constructor.wordSize===o.wordSize&&Array.isArray(e.words)},o.max=function(e,t){return e.cmp(t)>0?e:t},o.min=function(e,t){return e.cmp(t)<0?e:t},o.prototype._init=function(e,t,n){if(\"number\"==typeof e)return this._initNumber(e,t,n);if(\"object\"==typeof e)return this._initArray(e,t,n);\"hex\"===t&&(t=16),r(t===(0|t)&&t>=2&&t<=36);var o=0;\"-\"===(e=e.toString().replace(/\\s+/g,\"\"))[0]&&(o++,this.negative=1),o<e.length&&(16===t?this._parseHex(e,o,n):(this._parseBase(e,t,o),\"le\"===n&&this._initArray(this.toArray(),t,n)))},o.prototype._initNumber=function(e,t,n){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(r(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),\"le\"===n&&this._initArray(this.toArray(),t,n)},o.prototype._initArray=function(e,t,n){if(r(\"number\"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var o=0;o<this.length;o++)this.words[o]=0;var i,a,s=0;if(\"be\"===n)for(o=e.length-1,i=0;o>=0;o-=3)a=e[o]|e[o-1]<<8|e[o-2]<<16,this.words[i]|=a<<s&67108863,this.words[i+1]=a>>>26-s&67108863,(s+=24)>=26&&(s-=26,i++);else if(\"le\"===n)for(o=0,i=0;o<e.length;o+=3)a=e[o]|e[o+1]<<8|e[o+2]<<16,this.words[i]|=a<<s&67108863,this.words[i+1]=a>>>26-s&67108863,(s+=24)>=26&&(s-=26,i++);return this._strip()},o.prototype._parseHex=function(e,t,r){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var n=0;n<this.length;n++)this.words[n]=0;var o,i=0,a=0;if(\"be\"===r)for(n=e.length-1;n>=t;n-=2)o=s(e,t,n)<<i,this.words[a]|=67108863&o,i>=18?(i-=18,a+=1,this.words[a]|=o>>>26):i+=8;else for(n=(e.length-t)%2==0?t+1:t;n<e.length;n+=2)o=s(e,t,n)<<i,this.words[a]|=67108863&o,i>=18?(i-=18,a+=1,this.words[a]|=o>>>26):i+=8;this._strip()},o.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var n=0,o=1;o<=67108863;o*=t)n++;n--,o=o/t|0;for(var i=e.length-r,a=i%n,s=Math.min(i,i-a)+r,c=0,u=r;u<s;u+=n)c=l(e,u,u+n,t),this.imuln(o),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c);if(0!==a){var d=1;for(c=l(e,u,e.length,t),u=0;u<a;u++)d*=t;this.imuln(d),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c)}this._strip()},o.prototype.copy=function(e){e.words=new Array(this.length);for(var t=0;t<this.length;t++)e.words[t]=this.words[t];e.length=this.length,e.negative=this.negative,e.red=this.red},o.prototype._move=function(e){c(e,this)},o.prototype.clone=function(){var e=new o(null);return this.copy(e),e},o.prototype._expand=function(e){for(;this.length<e;)this.words[this.length++]=0;return this},o.prototype._strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},\"undefined\"!=typeof Symbol&&\"function\"==typeof Symbol.for)try{o.prototype[Symbol.for(\"nodejs.util.inspect.custom\")]=u}catch(e){o.prototype.inspect=u}else o.prototype.inspect=u;function u(){return(this.red?\"<BN-R: \":\"<BN: \")+this.toString(16)+\">\"}var d=[\"\",\"0\",\"00\",\"000\",\"0000\",\"00000\",\"000000\",\"0000000\",\"00000000\",\"000000000\",\"0000000000\",\"00000000000\",\"000000000000\",\"0000000000000\",\"00000000000000\",\"000000000000000\",\"0000000000000000\",\"00000000000000000\",\"000000000000000000\",\"0000000000000000000\",\"00000000000000000000\",\"000000000000000000000\",\"0000000000000000000000\",\"00000000000000000000000\",\"000000000000000000000000\",\"0000000000000000000000000\"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],h=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function p(e,t,r){r.negative=t.negative^e.negative;var n=e.length+t.length|0;r.length=n,n=n-1|0;var o=0|e.words[0],i=0|t.words[0],a=o*i,s=67108863&a,l=a/67108864|0;r.words[0]=s;for(var c=1;c<n;c++){for(var u=l>>>26,d=67108863&l,f=Math.min(c,t.length-1),h=Math.max(0,c-e.length+1);h<=f;h++){var p=c-h|0;u+=(a=(o=0|e.words[p])*(i=0|t.words[h])+d)/67108864|0,d=67108863&a}r.words[c]=0|d,l=0|u}return 0!==l?r.words[c]=0|l:r.length--,r._strip()}o.prototype.toString=function(e,t){var n;if(t=0|t||1,16===(e=e||10)||\"hex\"===e){n=\"\";for(var o=0,i=0,a=0;a<this.length;a++){var s=this.words[a],l=(16777215&(s<<o|i)).toString(16);i=s>>>24-o&16777215,(o+=2)>=26&&(o-=26,a--),n=0!==i||a!==this.length-1?d[6-l.length]+l+n:l+n}for(0!==i&&(n=i.toString(16)+n);n.length%t!=0;)n=\"0\"+n;return 0!==this.negative&&(n=\"-\"+n),n}if(e===(0|e)&&e>=2&&e<=36){var c=f[e],u=h[e];n=\"\";var p=this.clone();for(p.negative=0;!p.isZero();){var m=p.modrn(u).toString(e);n=(p=p.idivn(u)).isZero()?m+n:d[c-m.length]+m+n}for(this.isZero()&&(n=\"0\"+n);n.length%t!=0;)n=\"0\"+n;return 0!==this.negative&&(n=\"-\"+n),n}r(!1,\"Base should be between 2 and 36\")},o.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&r(!1,\"Number can only safely store up to 53 bits\"),0!==this.negative?-e:e},o.prototype.toJSON=function(){return this.toString(16,2)},i&&(o.prototype.toBuffer=function(e,t){return this.toArrayLike(i,e,t)}),o.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},o.prototype.toArrayLike=function(e,t,n){this._strip();var o=this.byteLength(),i=n||Math.max(1,o);r(o<=i,\"byte array longer than desired length\"),r(i>0,\"Requested array length <= 0\");var a=function(e,t){return e.allocUnsafe?e.allocUnsafe(t):new e(t)}(e,i);return this[\"_toArrayLike\"+(\"le\"===t?\"LE\":\"BE\")](a,o),a},o.prototype._toArrayLikeLE=function(e,t){for(var r=0,n=0,o=0,i=0;o<this.length;o++){var a=this.words[o]<<i|n;e[r++]=255&a,r<e.length&&(e[r++]=a>>8&255),r<e.length&&(e[r++]=a>>16&255),6===i?(r<e.length&&(e[r++]=a>>24&255),n=0,i=0):(n=a>>>24,i+=2)}if(r<e.length)for(e[r++]=n;r<e.length;)e[r++]=0},o.prototype._toArrayLikeBE=function(e,t){for(var r=e.length-1,n=0,o=0,i=0;o<this.length;o++){var a=this.words[o]<<i|n;e[r--]=255&a,r>=0&&(e[r--]=a>>8&255),r>=0&&(e[r--]=a>>16&255),6===i?(r>=0&&(e[r--]=a>>24&255),n=0,i=0):(n=a>>>24,i+=2)}if(r>=0)for(e[r--]=n;r>=0;)e[r--]=0},Math.clz32?o.prototype._countBits=function(e){return 32-Math.clz32(e)}:o.prototype._countBits=function(e){var t=e,r=0;return t>=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},o.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return!(8191&t)&&(r+=13,t>>>=13),!(127&t)&&(r+=7,t>>>=7),!(15&t)&&(r+=4,t>>>=4),!(3&t)&&(r+=2,t>>>=2),!(1&t)&&r++,r},o.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;t<this.length;t++){var r=this._zeroBits(this.words[t]);if(e+=r,26!==r)break}return e},o.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},o.prototype.toTwos=function(e){return 0!==this.negative?this.abs().inotn(e).iaddn(1):this.clone()},o.prototype.fromTwos=function(e){return this.testn(e-1)?this.notn(e).iaddn(1).ineg():this.clone()},o.prototype.isNeg=function(){return 0!==this.negative},o.prototype.neg=function(){return this.clone().ineg()},o.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},o.prototype.iuor=function(e){for(;this.length<e.length;)this.words[this.length++]=0;for(var t=0;t<e.length;t++)this.words[t]=this.words[t]|e.words[t];return this._strip()},o.prototype.ior=function(e){return r(0==(this.negative|e.negative)),this.iuor(e)},o.prototype.or=function(e){return this.length>e.length?this.clone().ior(e):e.clone().ior(this)},o.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},o.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var r=0;r<t.length;r++)this.words[r]=this.words[r]&e.words[r];return this.length=t.length,this._strip()},o.prototype.iand=function(e){return r(0==(this.negative|e.negative)),this.iuand(e)},o.prototype.and=function(e){return this.length>e.length?this.clone().iand(e):e.clone().iand(this)},o.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},o.prototype.iuxor=function(e){var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var n=0;n<r.length;n++)this.words[n]=t.words[n]^r.words[n];if(this!==t)for(;n<t.length;n++)this.words[n]=t.words[n];return this.length=t.length,this._strip()},o.prototype.ixor=function(e){return r(0==(this.negative|e.negative)),this.iuxor(e)},o.prototype.xor=function(e){return this.length>e.length?this.clone().ixor(e):e.clone().ixor(this)},o.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},o.prototype.inotn=function(e){r(\"number\"==typeof e&&e>=0);var t=0|Math.ceil(e/26),n=e%26;this._expand(t),n>0&&t--;for(var o=0;o<t;o++)this.words[o]=67108863&~this.words[o];return n>0&&(this.words[o]=~this.words[o]&67108863>>26-n),this._strip()},o.prototype.notn=function(e){return this.clone().inotn(e)},o.prototype.setn=function(e,t){r(\"number\"==typeof e&&e>=0);var n=e/26|0,o=e%26;return this._expand(n+1),this.words[n]=t?this.words[n]|1<<o:this.words[n]&~(1<<o),this._strip()},o.prototype.iadd=function(e){var t,r,n;if(0!==this.negative&&0===e.negative)return this.negative=0,t=this.isub(e),this.negative^=1,this._normSign();if(0===this.negative&&0!==e.negative)return e.negative=0,t=this.isub(e),e.negative=1,t._normSign();this.length>e.length?(r=this,n=e):(r=e,n=this);for(var o=0,i=0;i<n.length;i++)t=(0|r.words[i])+(0|n.words[i])+o,this.words[i]=67108863&t,o=t>>>26;for(;0!==o&&i<r.length;i++)t=(0|r.words[i])+o,this.words[i]=67108863&t,o=t>>>26;if(this.length=r.length,0!==o)this.words[this.length]=o,this.length++;else if(r!==this)for(;i<r.length;i++)this.words[i]=r.words[i];return this},o.prototype.add=function(e){var t;return 0!==e.negative&&0===this.negative?(e.negative=0,t=this.sub(e),e.negative^=1,t):0===e.negative&&0!==this.negative?(this.negative=0,t=e.sub(this),this.negative=1,t):this.length>e.length?this.clone().iadd(e):e.clone().iadd(this)},o.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var r,n,o=this.cmp(e);if(0===o)return this.negative=0,this.length=1,this.words[0]=0,this;o>0?(r=this,n=e):(r=e,n=this);for(var i=0,a=0;a<n.length;a++)i=(t=(0|r.words[a])-(0|n.words[a])+i)>>26,this.words[a]=67108863&t;for(;0!==i&&a<r.length;a++)i=(t=(0|r.words[a])+i)>>26,this.words[a]=67108863&t;if(0===i&&a<r.length&&r!==this)for(;a<r.length;a++)this.words[a]=r.words[a];return this.length=Math.max(this.length,a),r!==this&&(this.negative=1),this._strip()},o.prototype.sub=function(e){return this.clone().isub(e)};var m=function(e,t,r){var n,o,i,a=e.words,s=t.words,l=r.words,c=0,u=0|a[0],d=8191&u,f=u>>>13,h=0|a[1],p=8191&h,m=h>>>13,g=0|a[2],v=8191&g,b=g>>>13,y=0|a[3],w=8191&y,x=y>>>13,S=0|a[4],C=8191&S,k=S>>>13,E=0|a[5],O=8191&E,A=E>>>13,T=0|a[6],j=8191&T,P=T>>>13,M=0|a[7],R=8191&M,_=M>>>13,I=0|a[8],N=8191&I,F=I>>>13,D=0|a[9],B=8191&D,L=D>>>13,z=0|s[0],H=8191&z,U=z>>>13,V=0|s[1],W=8191&V,G=V>>>13,q=0|s[2],K=8191&q,X=q>>>13,Y=0|s[3],$=8191&Y,Z=Y>>>13,Q=0|s[4],J=8191&Q,ee=Q>>>13,te=0|s[5],re=8191&te,ne=te>>>13,oe=0|s[6],ie=8191&oe,ae=oe>>>13,se=0|s[7],le=8191&se,ce=se>>>13,ue=0|s[8],de=8191&ue,fe=ue>>>13,he=0|s[9],pe=8191&he,me=he>>>13;r.negative=e.negative^t.negative,r.length=19;var ge=(c+(n=Math.imul(d,H))|0)+((8191&(o=(o=Math.imul(d,U))+Math.imul(f,H)|0))<<13)|0;c=((i=Math.imul(f,U))+(o>>>13)|0)+(ge>>>26)|0,ge&=67108863,n=Math.imul(p,H),o=(o=Math.imul(p,U))+Math.imul(m,H)|0,i=Math.imul(m,U);var ve=(c+(n=n+Math.imul(d,W)|0)|0)+((8191&(o=(o=o+Math.imul(d,G)|0)+Math.imul(f,W)|0))<<13)|0;c=((i=i+Math.imul(f,G)|0)+(o>>>13)|0)+(ve>>>26)|0,ve&=67108863,n=Math.imul(v,H),o=(o=Math.imul(v,U))+Math.imul(b,H)|0,i=Math.imul(b,U),n=n+Math.imul(p,W)|0,o=(o=o+Math.imul(p,G)|0)+Math.imul(m,W)|0,i=i+Math.imul(m,G)|0;var be=(c+(n=n+Math.imul(d,K)|0)|0)+((8191&(o=(o=o+Math.imul(d,X)|0)+Math.imul(f,K)|0))<<13)|0;c=((i=i+Math.imul(f,X)|0)+(o>>>13)|0)+(be>>>26)|0,be&=67108863,n=Math.imul(w,H),o=(o=Math.imul(w,U))+Math.imul(x,H)|0,i=Math.imul(x,U),n=n+Math.imul(v,W)|0,o=(o=o+Math.imul(v,G)|0)+Math.imul(b,W)|0,i=i+Math.imul(b,G)|0,n=n+Math.imul(p,K)|0,o=(o=o+Math.imul(p,X)|0)+Math.imul(m,K)|0,i=i+Math.imul(m,X)|0;var ye=(c+(n=n+Math.imul(d,$)|0)|0)+((8191&(o=(o=o+Math.imul(d,Z)|0)+Math.imul(f,$)|0))<<13)|0;c=((i=i+Math.imul(f,Z)|0)+(o>>>13)|0)+(ye>>>26)|0,ye&=67108863,n=Math.imul(C,H),o=(o=Math.imul(C,U))+Math.imul(k,H)|0,i=Math.imul(k,U),n=n+Math.imul(w,W)|0,o=(o=o+Math.imul(w,G)|0)+Math.imul(x,W)|0,i=i+Math.imul(x,G)|0,n=n+Math.imul(v,K)|0,o=(o=o+Math.imul(v,X)|0)+Math.imul(b,K)|0,i=i+Math.imul(b,X)|0,n=n+Math.imul(p,$)|0,o=(o=o+Math.imul(p,Z)|0)+Math.imul(m,$)|0,i=i+Math.imul(m,Z)|0;var we=(c+(n=n+Math.imul(d,J)|0)|0)+((8191&(o=(o=o+Math.imul(d,ee)|0)+Math.imul(f,J)|0))<<13)|0;c=((i=i+Math.imul(f,ee)|0)+(o>>>13)|0)+(we>>>26)|0,we&=67108863,n=Math.imul(O,H),o=(o=Math.imul(O,U))+Math.imul(A,H)|0,i=Math.imul(A,U),n=n+Math.imul(C,W)|0,o=(o=o+Math.imul(C,G)|0)+Math.imul(k,W)|0,i=i+Math.imul(k,G)|0,n=n+Math.imul(w,K)|0,o=(o=o+Math.imul(w,X)|0)+Math.imul(x,K)|0,i=i+Math.imul(x,X)|0,n=n+Math.imul(v,$)|0,o=(o=o+Math.imul(v,Z)|0)+Math.imul(b,$)|0,i=i+Math.imul(b,Z)|0,n=n+Math.imul(p,J)|0,o=(o=o+Math.imul(p,ee)|0)+Math.imul(m,J)|0,i=i+Math.imul(m,ee)|0;var xe=(c+(n=n+Math.imul(d,re)|0)|0)+((8191&(o=(o=o+Math.imul(d,ne)|0)+Math.imul(f,re)|0))<<13)|0;c=((i=i+Math.imul(f,ne)|0)+(o>>>13)|0)+(xe>>>26)|0,xe&=67108863,n=Math.imul(j,H),o=(o=Math.imul(j,U))+Math.imul(P,H)|0,i=Math.imul(P,U),n=n+Math.imul(O,W)|0,o=(o=o+Math.imul(O,G)|0)+Math.imul(A,W)|0,i=i+Math.imul(A,G)|0,n=n+Math.imul(C,K)|0,o=(o=o+Math.imul(C,X)|0)+Math.imul(k,K)|0,i=i+Math.imul(k,X)|0,n=n+Math.imul(w,$)|0,o=(o=o+Math.imul(w,Z)|0)+Math.imul(x,$)|0,i=i+Math.imul(x,Z)|0,n=n+Math.imul(v,J)|0,o=(o=o+Math.imul(v,ee)|0)+Math.imul(b,J)|0,i=i+Math.imul(b,ee)|0,n=n+Math.imul(p,re)|0,o=(o=o+Math.imul(p,ne)|0)+Math.imul(m,re)|0,i=i+Math.imul(m,ne)|0;var Se=(c+(n=n+Math.imul(d,ie)|0)|0)+((8191&(o=(o=o+Math.imul(d,ae)|0)+Math.imul(f,ie)|0))<<13)|0;c=((i=i+Math.imul(f,ae)|0)+(o>>>13)|0)+(Se>>>26)|0,Se&=67108863,n=Math.imul(R,H),o=(o=Math.imul(R,U))+Math.imul(_,H)|0,i=Math.imul(_,U),n=n+Math.imul(j,W)|0,o=(o=o+Math.imul(j,G)|0)+Math.imul(P,W)|0,i=i+Math.imul(P,G)|0,n=n+Math.imul(O,K)|0,o=(o=o+Math.imul(O,X)|0)+Math.imul(A,K)|0,i=i+Math.imul(A,X)|0,n=n+Math.imul(C,$)|0,o=(o=o+Math.imul(C,Z)|0)+Math.imul(k,$)|0,i=i+Math.imul(k,Z)|0,n=n+Math.imul(w,J)|0,o=(o=o+Math.imul(w,ee)|0)+Math.imul(x,J)|0,i=i+Math.imul(x,ee)|0,n=n+Math.imul(v,re)|0,o=(o=o+Math.imul(v,ne)|0)+Math.imul(b,re)|0,i=i+Math.imul(b,ne)|0,n=n+Math.imul(p,ie)|0,o=(o=o+Math.imul(p,ae)|0)+Math.imul(m,ie)|0,i=i+Math.imul(m,ae)|0;var Ce=(c+(n=n+Math.imul(d,le)|0)|0)+((8191&(o=(o=o+Math.imul(d,ce)|0)+Math.imul(f,le)|0))<<13)|0;c=((i=i+Math.imul(f,ce)|0)+(o>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,n=Math.imul(N,H),o=(o=Math.imul(N,U))+Math.imul(F,H)|0,i=Math.imul(F,U),n=n+Math.imul(R,W)|0,o=(o=o+Math.imul(R,G)|0)+Math.imul(_,W)|0,i=i+Math.imul(_,G)|0,n=n+Math.imul(j,K)|0,o=(o=o+Math.imul(j,X)|0)+Math.imul(P,K)|0,i=i+Math.imul(P,X)|0,n=n+Math.imul(O,$)|0,o=(o=o+Math.imul(O,Z)|0)+Math.imul(A,$)|0,i=i+Math.imul(A,Z)|0,n=n+Math.imul(C,J)|0,o=(o=o+Math.imul(C,ee)|0)+Math.imul(k,J)|0,i=i+Math.imul(k,ee)|0,n=n+Math.imul(w,re)|0,o=(o=o+Math.imul(w,ne)|0)+Math.imul(x,re)|0,i=i+Math.imul(x,ne)|0,n=n+Math.imul(v,ie)|0,o=(o=o+Math.imul(v,ae)|0)+Math.imul(b,ie)|0,i=i+Math.imul(b,ae)|0,n=n+Math.imul(p,le)|0,o=(o=o+Math.imul(p,ce)|0)+Math.imul(m,le)|0,i=i+Math.imul(m,ce)|0;var ke=(c+(n=n+Math.imul(d,de)|0)|0)+((8191&(o=(o=o+Math.imul(d,fe)|0)+Math.imul(f,de)|0))<<13)|0;c=((i=i+Math.imul(f,fe)|0)+(o>>>13)|0)+(ke>>>26)|0,ke&=67108863,n=Math.imul(B,H),o=(o=Math.imul(B,U))+Math.imul(L,H)|0,i=Math.imul(L,U),n=n+Math.imul(N,W)|0,o=(o=o+Math.imul(N,G)|0)+Math.imul(F,W)|0,i=i+Math.imul(F,G)|0,n=n+Math.imul(R,K)|0,o=(o=o+Math.imul(R,X)|0)+Math.imul(_,K)|0,i=i+Math.imul(_,X)|0,n=n+Math.imul(j,$)|0,o=(o=o+Math.imul(j,Z)|0)+Math.imul(P,$)|0,i=i+Math.imul(P,Z)|0,n=n+Math.imul(O,J)|0,o=(o=o+Math.imul(O,ee)|0)+Math.imul(A,J)|0,i=i+Math.imul(A,ee)|0,n=n+Math.imul(C,re)|0,o=(o=o+Math.imul(C,ne)|0)+Math.imul(k,re)|0,i=i+Math.imul(k,ne)|0,n=n+Math.imul(w,ie)|0,o=(o=o+Math.imul(w,ae)|0)+Math.imul(x,ie)|0,i=i+Math.imul(x,ae)|0,n=n+Math.imul(v,le)|0,o=(o=o+Math.imul(v,ce)|0)+Math.imul(b,le)|0,i=i+Math.imul(b,ce)|0,n=n+Math.imul(p,de)|0,o=(o=o+Math.imul(p,fe)|0)+Math.imul(m,de)|0,i=i+Math.imul(m,fe)|0;var Ee=(c+(n=n+Math.imul(d,pe)|0)|0)+((8191&(o=(o=o+Math.imul(d,me)|0)+Math.imul(f,pe)|0))<<13)|0;c=((i=i+Math.imul(f,me)|0)+(o>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,n=Math.imul(B,W),o=(o=Math.imul(B,G))+Math.imul(L,W)|0,i=Math.imul(L,G),n=n+Math.imul(N,K)|0,o=(o=o+Math.imul(N,X)|0)+Math.imul(F,K)|0,i=i+Math.imul(F,X)|0,n=n+Math.imul(R,$)|0,o=(o=o+Math.imul(R,Z)|0)+Math.imul(_,$)|0,i=i+Math.imul(_,Z)|0,n=n+Math.imul(j,J)|0,o=(o=o+Math.imul(j,ee)|0)+Math.imul(P,J)|0,i=i+Math.imul(P,ee)|0,n=n+Math.imul(O,re)|0,o=(o=o+Math.imul(O,ne)|0)+Math.imul(A,re)|0,i=i+Math.imul(A,ne)|0,n=n+Math.imul(C,ie)|0,o=(o=o+Math.imul(C,ae)|0)+Math.imul(k,ie)|0,i=i+Math.imul(k,ae)|0,n=n+Math.imul(w,le)|0,o=(o=o+Math.imul(w,ce)|0)+Math.imul(x,le)|0,i=i+Math.imul(x,ce)|0,n=n+Math.imul(v,de)|0,o=(o=o+Math.imul(v,fe)|0)+Math.imul(b,de)|0,i=i+Math.imul(b,fe)|0;var Oe=(c+(n=n+Math.imul(p,pe)|0)|0)+((8191&(o=(o=o+Math.imul(p,me)|0)+Math.imul(m,pe)|0))<<13)|0;c=((i=i+Math.imul(m,me)|0)+(o>>>13)|0)+(Oe>>>26)|0,Oe&=67108863,n=Math.imul(B,K),o=(o=Math.imul(B,X))+Math.imul(L,K)|0,i=Math.imul(L,X),n=n+Math.imul(N,$)|0,o=(o=o+Math.imul(N,Z)|0)+Math.imul(F,$)|0,i=i+Math.imul(F,Z)|0,n=n+Math.imul(R,J)|0,o=(o=o+Math.imul(R,ee)|0)+Math.imul(_,J)|0,i=i+Math.imul(_,ee)|0,n=n+Math.imul(j,re)|0,o=(o=o+Math.imul(j,ne)|0)+Math.imul(P,re)|0,i=i+Math.imul(P,ne)|0,n=n+Math.imul(O,ie)|0,o=(o=o+Math.imul(O,ae)|0)+Math.imul(A,ie)|0,i=i+Math.imul(A,ae)|0,n=n+Math.imul(C,le)|0,o=(o=o+Math.imul(C,ce)|0)+Math.imul(k,le)|0,i=i+Math.imul(k,ce)|0,n=n+Math.imul(w,de)|0,o=(o=o+Math.imul(w,fe)|0)+Math.imul(x,de)|0,i=i+Math.imul(x,fe)|0;var Ae=(c+(n=n+Math.imul(v,pe)|0)|0)+((8191&(o=(o=o+Math.imul(v,me)|0)+Math.imul(b,pe)|0))<<13)|0;c=((i=i+Math.imul(b,me)|0)+(o>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,n=Math.imul(B,$),o=(o=Math.imul(B,Z))+Math.imul(L,$)|0,i=Math.imul(L,Z),n=n+Math.imul(N,J)|0,o=(o=o+Math.imul(N,ee)|0)+Math.imul(F,J)|0,i=i+Math.imul(F,ee)|0,n=n+Math.imul(R,re)|0,o=(o=o+Math.imul(R,ne)|0)+Math.imul(_,re)|0,i=i+Math.imul(_,ne)|0,n=n+Math.imul(j,ie)|0,o=(o=o+Math.imul(j,ae)|0)+Math.imul(P,ie)|0,i=i+Math.imul(P,ae)|0,n=n+Math.imul(O,le)|0,o=(o=o+Math.imul(O,ce)|0)+Math.imul(A,le)|0,i=i+Math.imul(A,ce)|0,n=n+Math.imul(C,de)|0,o=(o=o+Math.imul(C,fe)|0)+Math.imul(k,de)|0,i=i+Math.imul(k,fe)|0;var Te=(c+(n=n+Math.imul(w,pe)|0)|0)+((8191&(o=(o=o+Math.imul(w,me)|0)+Math.imul(x,pe)|0))<<13)|0;c=((i=i+Math.imul(x,me)|0)+(o>>>13)|0)+(Te>>>26)|0,Te&=67108863,n=Math.imul(B,J),o=(o=Math.imul(B,ee))+Math.imul(L,J)|0,i=Math.imul(L,ee),n=n+Math.imul(N,re)|0,o=(o=o+Math.imul(N,ne)|0)+Math.imul(F,re)|0,i=i+Math.imul(F,ne)|0,n=n+Math.imul(R,ie)|0,o=(o=o+Math.imul(R,ae)|0)+Math.imul(_,ie)|0,i=i+Math.imul(_,ae)|0,n=n+Math.imul(j,le)|0,o=(o=o+Math.imul(j,ce)|0)+Math.imul(P,le)|0,i=i+Math.imul(P,ce)|0,n=n+Math.imul(O,de)|0,o=(o=o+Math.imul(O,fe)|0)+Math.imul(A,de)|0,i=i+Math.imul(A,fe)|0;var je=(c+(n=n+Math.imul(C,pe)|0)|0)+((8191&(o=(o=o+Math.imul(C,me)|0)+Math.imul(k,pe)|0))<<13)|0;c=((i=i+Math.imul(k,me)|0)+(o>>>13)|0)+(je>>>26)|0,je&=67108863,n=Math.imul(B,re),o=(o=Math.imul(B,ne))+Math.imul(L,re)|0,i=Math.imul(L,ne),n=n+Math.imul(N,ie)|0,o=(o=o+Math.imul(N,ae)|0)+Math.imul(F,ie)|0,i=i+Math.imul(F,ae)|0,n=n+Math.imul(R,le)|0,o=(o=o+Math.imul(R,ce)|0)+Math.imul(_,le)|0,i=i+Math.imul(_,ce)|0,n=n+Math.imul(j,de)|0,o=(o=o+Math.imul(j,fe)|0)+Math.imul(P,de)|0,i=i+Math.imul(P,fe)|0;var Pe=(c+(n=n+Math.imul(O,pe)|0)|0)+((8191&(o=(o=o+Math.imul(O,me)|0)+Math.imul(A,pe)|0))<<13)|0;c=((i=i+Math.imul(A,me)|0)+(o>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,n=Math.imul(B,ie),o=(o=Math.imul(B,ae))+Math.imul(L,ie)|0,i=Math.imul(L,ae),n=n+Math.imul(N,le)|0,o=(o=o+Math.imul(N,ce)|0)+Math.imul(F,le)|0,i=i+Math.imul(F,ce)|0,n=n+Math.imul(R,de)|0,o=(o=o+Math.imul(R,fe)|0)+Math.imul(_,de)|0,i=i+Math.imul(_,fe)|0;var Me=(c+(n=n+Math.imul(j,pe)|0)|0)+((8191&(o=(o=o+Math.imul(j,me)|0)+Math.imul(P,pe)|0))<<13)|0;c=((i=i+Math.imul(P,me)|0)+(o>>>13)|0)+(Me>>>26)|0,Me&=67108863,n=Math.imul(B,le),o=(o=Math.imul(B,ce))+Math.imul(L,le)|0,i=Math.imul(L,ce),n=n+Math.imul(N,de)|0,o=(o=o+Math.imul(N,fe)|0)+Math.imul(F,de)|0,i=i+Math.imul(F,fe)|0;var Re=(c+(n=n+Math.imul(R,pe)|0)|0)+((8191&(o=(o=o+Math.imul(R,me)|0)+Math.imul(_,pe)|0))<<13)|0;c=((i=i+Math.imul(_,me)|0)+(o>>>13)|0)+(Re>>>26)|0,Re&=67108863,n=Math.imul(B,de),o=(o=Math.imul(B,fe))+Math.imul(L,de)|0,i=Math.imul(L,fe);var _e=(c+(n=n+Math.imul(N,pe)|0)|0)+((8191&(o=(o=o+Math.imul(N,me)|0)+Math.imul(F,pe)|0))<<13)|0;c=((i=i+Math.imul(F,me)|0)+(o>>>13)|0)+(_e>>>26)|0,_e&=67108863;var Ie=(c+(n=Math.imul(B,pe))|0)+((8191&(o=(o=Math.imul(B,me))+Math.imul(L,pe)|0))<<13)|0;return c=((i=Math.imul(L,me))+(o>>>13)|0)+(Ie>>>26)|0,Ie&=67108863,l[0]=ge,l[1]=ve,l[2]=be,l[3]=ye,l[4]=we,l[5]=xe,l[6]=Se,l[7]=Ce,l[8]=ke,l[9]=Ee,l[10]=Oe,l[11]=Ae,l[12]=Te,l[13]=je,l[14]=Pe,l[15]=Me,l[16]=Re,l[17]=_e,l[18]=Ie,0!==c&&(l[19]=c,r.length++),r};function g(e,t,r){r.negative=t.negative^e.negative,r.length=e.length+t.length;for(var n=0,o=0,i=0;i<r.length-1;i++){var a=o;o=0;for(var s=67108863&n,l=Math.min(i,t.length-1),c=Math.max(0,i-e.length+1);c<=l;c++){var u=i-c,d=(0|e.words[u])*(0|t.words[c]),f=67108863&d;s=67108863&(f=f+s|0),o+=(a=(a=a+(d/67108864|0)|0)+(f>>>26)|0)>>>26,a&=67108863}r.words[i]=s,n=a,a=o}return 0!==n?r.words[i]=n:r.length--,r._strip()}function v(e,t,r){return g(e,t,r)}function b(e,t){this.x=e,this.y=t}Math.imul||(m=p),o.prototype.mulTo=function(e,t){var r=this.length+e.length;return 10===this.length&&10===e.length?m(this,e,t):r<63?p(this,e,t):r<1024?g(this,e,t):v(this,e,t)},b.prototype.makeRBT=function(e){for(var t=new Array(e),r=o.prototype._countBits(e)-1,n=0;n<e;n++)t[n]=this.revBin(n,r,e);return t},b.prototype.revBin=function(e,t,r){if(0===e||e===r-1)return e;for(var n=0,o=0;o<t;o++)n|=(1&e)<<t-o-1,e>>=1;return n},b.prototype.permute=function(e,t,r,n,o,i){for(var a=0;a<i;a++)n[a]=t[e[a]],o[a]=r[e[a]]},b.prototype.transform=function(e,t,r,n,o,i){this.permute(i,e,t,r,n,o);for(var a=1;a<o;a<<=1)for(var s=a<<1,l=Math.cos(2*Math.PI/s),c=Math.sin(2*Math.PI/s),u=0;u<o;u+=s)for(var d=l,f=c,h=0;h<a;h++){var p=r[u+h],m=n[u+h],g=r[u+h+a],v=n[u+h+a],b=d*g-f*v;v=d*v+f*g,g=b,r[u+h]=p+g,n[u+h]=m+v,r[u+h+a]=p-g,n[u+h+a]=m-v,h!==s&&(b=l*d-c*f,f=l*f+c*d,d=b)}},b.prototype.guessLen13b=function(e,t){var r=1|Math.max(t,e),n=1&r,o=0;for(r=r/2|0;r;r>>>=1)o++;return 1<<o+1+n},b.prototype.conjugate=function(e,t,r){if(!(r<=1))for(var n=0;n<r/2;n++){var o=e[n];e[n]=e[r-n-1],e[r-n-1]=o,o=t[n],t[n]=-t[r-n-1],t[r-n-1]=-o}},b.prototype.normalize13b=function(e,t){for(var r=0,n=0;n<t/2;n++){var o=8192*Math.round(e[2*n+1]/t)+Math.round(e[2*n]/t)+r;e[n]=67108863&o,r=o<67108864?0:o/67108864|0}return e},b.prototype.convert13b=function(e,t,n,o){for(var i=0,a=0;a<t;a++)i+=0|e[a],n[2*a]=8191&i,i>>>=13,n[2*a+1]=8191&i,i>>>=13;for(a=2*t;a<o;++a)n[a]=0;r(0===i),r(!(-8192&i))},b.prototype.stub=function(e){for(var t=new Array(e),r=0;r<e;r++)t[r]=0;return t},b.prototype.mulp=function(e,t,r){var n=2*this.guessLen13b(e.length,t.length),o=this.makeRBT(n),i=this.stub(n),a=new Array(n),s=new Array(n),l=new Array(n),c=new Array(n),u=new Array(n),d=new Array(n),f=r.words;f.length=n,this.convert13b(e.words,e.length,a,n),this.convert13b(t.words,t.length,c,n),this.transform(a,i,s,l,n,o),this.transform(c,i,u,d,n,o);for(var h=0;h<n;h++){var p=s[h]*u[h]-l[h]*d[h];l[h]=s[h]*d[h]+l[h]*u[h],s[h]=p}return this.conjugate(s,l,n),this.transform(s,l,f,i,n,o),this.conjugate(f,i,n),this.normalize13b(f,n),r.negative=e.negative^t.negative,r.length=e.length+t.length,r._strip()},o.prototype.mul=function(e){var t=new o(null);return t.words=new Array(this.length+e.length),this.mulTo(e,t)},o.prototype.mulf=function(e){var t=new o(null);return t.words=new Array(this.length+e.length),v(this,e,t)},o.prototype.imul=function(e){return this.clone().mulTo(e,this)},o.prototype.imuln=function(e){var t=e<0;t&&(e=-e),r(\"number\"==typeof e),r(e<67108864);for(var n=0,o=0;o<this.length;o++){var i=(0|this.words[o])*e,a=(67108863&i)+(67108863&n);n>>=26,n+=i/67108864|0,n+=a>>>26,this.words[o]=67108863&a}return 0!==n&&(this.words[o]=n,this.length++),t?this.ineg():this},o.prototype.muln=function(e){return this.clone().imuln(e)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(e){var t=function(e){for(var t=new Array(e.bitLength()),r=0;r<t.length;r++){var n=r/26|0,o=r%26;t[r]=e.words[n]>>>o&1}return t}(e);if(0===t.length)return new o(1);for(var r=this,n=0;n<t.length&&0===t[n];n++,r=r.sqr());if(++n<t.length)for(var i=r.sqr();n<t.length;n++,i=i.sqr())0!==t[n]&&(r=r.mul(i));return r},o.prototype.iushln=function(e){r(\"number\"==typeof e&&e>=0);var t,n=e%26,o=(e-n)/26,i=67108863>>>26-n<<26-n;if(0!==n){var a=0;for(t=0;t<this.length;t++){var s=this.words[t]&i,l=(0|this.words[t])-s<<n;this.words[t]=l|a,a=s>>>26-n}a&&(this.words[t]=a,this.length++)}if(0!==o){for(t=this.length-1;t>=0;t--)this.words[t+o]=this.words[t];for(t=0;t<o;t++)this.words[t]=0;this.length+=o}return this._strip()},o.prototype.ishln=function(e){return r(0===this.negative),this.iushln(e)},o.prototype.iushrn=function(e,t,n){var o;r(\"number\"==typeof e&&e>=0),o=t?(t-t%26)/26:0;var i=e%26,a=Math.min((e-i)/26,this.length),s=67108863^67108863>>>i<<i,l=n;if(o-=a,o=Math.max(0,o),l){for(var c=0;c<a;c++)l.words[c]=this.words[c];l.length=a}if(0===a);else if(this.length>a)for(this.length-=a,c=0;c<this.length;c++)this.words[c]=this.words[c+a];else this.words[0]=0,this.length=1;var u=0;for(c=this.length-1;c>=0&&(0!==u||c>=o);c--){var d=0|this.words[c];this.words[c]=u<<26-i|d>>>i,u=d&s}return l&&0!==u&&(l.words[l.length++]=u),0===this.length&&(this.words[0]=0,this.length=1),this._strip()},o.prototype.ishrn=function(e,t,n){return r(0===this.negative),this.iushrn(e,t,n)},o.prototype.shln=function(e){return this.clone().ishln(e)},o.prototype.ushln=function(e){return this.clone().iushln(e)},o.prototype.shrn=function(e){return this.clone().ishrn(e)},o.prototype.ushrn=function(e){return this.clone().iushrn(e)},o.prototype.testn=function(e){r(\"number\"==typeof e&&e>=0);var t=e%26,n=(e-t)/26,o=1<<t;return!(this.length<=n||!(this.words[n]&o))},o.prototype.imaskn=function(e){r(\"number\"==typeof e&&e>=0);var t=e%26,n=(e-t)/26;if(r(0===this.negative,\"imaskn works only with positive numbers\"),this.length<=n)return this;if(0!==t&&n++,this.length=Math.min(n,this.length),0!==t){var o=67108863^67108863>>>t<<t;this.words[this.length-1]&=o}return this._strip()},o.prototype.maskn=function(e){return this.clone().imaskn(e)},o.prototype.iaddn=function(e){return r(\"number\"==typeof e),r(e<67108864),e<0?this.isubn(-e):0!==this.negative?1===this.length&&(0|this.words[0])<=e?(this.words[0]=e-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(e),this.negative=1,this):this._iaddn(e)},o.prototype._iaddn=function(e){this.words[0]+=e;for(var t=0;t<this.length&&this.words[t]>=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},o.prototype.isubn=function(e){if(r(\"number\"==typeof e),r(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t<this.length&&this.words[t]<0;t++)this.words[t]+=67108864,this.words[t+1]-=1;return this._strip()},o.prototype.addn=function(e){return this.clone().iaddn(e)},o.prototype.subn=function(e){return this.clone().isubn(e)},o.prototype.iabs=function(){return this.negative=0,this},o.prototype.abs=function(){return this.clone().iabs()},o.prototype._ishlnsubmul=function(e,t,n){var o,i,a=e.length+n;this._expand(a);var s=0;for(o=0;o<e.length;o++){i=(0|this.words[o+n])+s;var l=(0|e.words[o])*t;s=((i-=67108863&l)>>26)-(l/67108864|0),this.words[o+n]=67108863&i}for(;o<this.length-n;o++)s=(i=(0|this.words[o+n])+s)>>26,this.words[o+n]=67108863&i;if(0===s)return this._strip();for(r(-1===s),s=0,o=0;o<this.length;o++)s=(i=-(0|this.words[o])+s)>>26,this.words[o]=67108863&i;return this.negative=1,this._strip()},o.prototype._wordDiv=function(e,t){var r=(this.length,e.length),n=this.clone(),i=e,a=0|i.words[i.length-1];0!=(r=26-this._countBits(a))&&(i=i.ushln(r),n.iushln(r),a=0|i.words[i.length-1]);var s,l=n.length-i.length;if(\"mod\"!==t){(s=new o(null)).length=l+1,s.words=new Array(s.length);for(var c=0;c<s.length;c++)s.words[c]=0}var u=n.clone()._ishlnsubmul(i,1,l);0===u.negative&&(n=u,s&&(s.words[l]=1));for(var d=l-1;d>=0;d--){var f=67108864*(0|n.words[i.length+d])+(0|n.words[i.length+d-1]);for(f=Math.min(f/a|0,67108863),n._ishlnsubmul(i,f,d);0!==n.negative;)f--,n.negative=0,n._ishlnsubmul(i,1,d),n.isZero()||(n.negative^=1);s&&(s.words[d]=f)}return s&&s._strip(),n._strip(),\"div\"!==t&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},o.prototype.divmod=function(e,t,n){return r(!e.isZero()),this.isZero()?{div:new o(0),mod:new o(0)}:0!==this.negative&&0===e.negative?(s=this.neg().divmod(e,t),\"mod\"!==t&&(i=s.div.neg()),\"div\"!==t&&(a=s.mod.neg(),n&&0!==a.negative&&a.iadd(e)),{div:i,mod:a}):0===this.negative&&0!==e.negative?(s=this.divmod(e.neg(),t),\"mod\"!==t&&(i=s.div.neg()),{div:i,mod:s.mod}):0!=(this.negative&e.negative)?(s=this.neg().divmod(e.neg(),t),\"div\"!==t&&(a=s.mod.neg(),n&&0!==a.negative&&a.isub(e)),{div:s.div,mod:a}):e.length>this.length||this.cmp(e)<0?{div:new o(0),mod:this}:1===e.length?\"div\"===t?{div:this.divn(e.words[0]),mod:null}:\"mod\"===t?{div:null,mod:new o(this.modrn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new o(this.modrn(e.words[0]))}:this._wordDiv(e,t);var i,a,s},o.prototype.div=function(e){return this.divmod(e,\"div\",!1).div},o.prototype.mod=function(e){return this.divmod(e,\"mod\",!1).mod},o.prototype.umod=function(e){return this.divmod(e,\"mod\",!0).mod},o.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var r=0!==t.div.negative?t.mod.isub(e):t.mod,n=e.ushrn(1),o=e.andln(1),i=r.cmp(n);return i<0||1===o&&0===i?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},o.prototype.modrn=function(e){var t=e<0;t&&(e=-e),r(e<=67108863);for(var n=(1<<26)%e,o=0,i=this.length-1;i>=0;i--)o=(n*o+(0|this.words[i]))%e;return t?-o:o},o.prototype.modn=function(e){return this.modrn(e)},o.prototype.idivn=function(e){var t=e<0;t&&(e=-e),r(e<=67108863);for(var n=0,o=this.length-1;o>=0;o--){var i=(0|this.words[o])+67108864*n;this.words[o]=i/e|0,n=i%e}return this._strip(),t?this.ineg():this},o.prototype.divn=function(e){return this.clone().idivn(e)},o.prototype.egcd=function(e){r(0===e.negative),r(!e.isZero());var t=this,n=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var i=new o(1),a=new o(0),s=new o(0),l=new o(1),c=0;t.isEven()&&n.isEven();)t.iushrn(1),n.iushrn(1),++c;for(var u=n.clone(),d=t.clone();!t.isZero();){for(var f=0,h=1;0==(t.words[0]&h)&&f<26;++f,h<<=1);if(f>0)for(t.iushrn(f);f-- >0;)(i.isOdd()||a.isOdd())&&(i.iadd(u),a.isub(d)),i.iushrn(1),a.iushrn(1);for(var p=0,m=1;0==(n.words[0]&m)&&p<26;++p,m<<=1);if(p>0)for(n.iushrn(p);p-- >0;)(s.isOdd()||l.isOdd())&&(s.iadd(u),l.isub(d)),s.iushrn(1),l.iushrn(1);t.cmp(n)>=0?(t.isub(n),i.isub(s),a.isub(l)):(n.isub(t),s.isub(i),l.isub(a))}return{a:s,b:l,gcd:n.iushln(c)}},o.prototype._invmp=function(e){r(0===e.negative),r(!e.isZero());var t=this,n=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var i,a=new o(1),s=new o(0),l=n.clone();t.cmpn(1)>0&&n.cmpn(1)>0;){for(var c=0,u=1;0==(t.words[0]&u)&&c<26;++c,u<<=1);if(c>0)for(t.iushrn(c);c-- >0;)a.isOdd()&&a.iadd(l),a.iushrn(1);for(var d=0,f=1;0==(n.words[0]&f)&&d<26;++d,f<<=1);if(d>0)for(n.iushrn(d);d-- >0;)s.isOdd()&&s.iadd(l),s.iushrn(1);t.cmp(n)>=0?(t.isub(n),a.isub(s)):(n.isub(t),s.isub(a))}return(i=0===t.cmpn(1)?a:s).cmpn(0)<0&&i.iadd(e),i},o.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),r=e.clone();t.negative=0,r.negative=0;for(var n=0;t.isEven()&&r.isEven();n++)t.iushrn(1),r.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;r.isEven();)r.iushrn(1);var o=t.cmp(r);if(o<0){var i=t;t=r,r=i}else if(0===o||0===r.cmpn(1))break;t.isub(r)}return r.iushln(n)},o.prototype.invm=function(e){return this.egcd(e).a.umod(e)},o.prototype.isEven=function(){return!(1&this.words[0])},o.prototype.isOdd=function(){return!(1&~this.words[0])},o.prototype.andln=function(e){return this.words[0]&e},o.prototype.bincn=function(e){r(\"number\"==typeof e);var t=e%26,n=(e-t)/26,o=1<<t;if(this.length<=n)return this._expand(n+1),this.words[n]|=o,this;for(var i=o,a=n;0!==i&&a<this.length;a++){var s=0|this.words[a];i=(s+=i)>>>26,s&=67108863,this.words[a]=s}return 0!==i&&(this.words[a]=i,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(e){var t,n=e<0;if(0!==this.negative&&!n)return-1;if(0===this.negative&&n)return 1;if(this._strip(),this.length>1)t=1;else{n&&(e=-e),r(e<=67108863,\"Number is too big\");var o=0|this.words[0];t=o===e?0:o<e?-1:1}return 0!==this.negative?0|-t:t},o.prototype.cmp=function(e){if(0!==this.negative&&0===e.negative)return-1;if(0===this.negative&&0!==e.negative)return 1;var t=this.ucmp(e);return 0!==this.negative?0|-t:t},o.prototype.ucmp=function(e){if(this.length>e.length)return 1;if(this.length<e.length)return-1;for(var t=0,r=this.length-1;r>=0;r--){var n=0|this.words[r],o=0|e.words[r];if(n!==o){n<o?t=-1:n>o&&(t=1);break}}return t},o.prototype.gtn=function(e){return 1===this.cmpn(e)},o.prototype.gt=function(e){return 1===this.cmp(e)},o.prototype.gten=function(e){return this.cmpn(e)>=0},o.prototype.gte=function(e){return this.cmp(e)>=0},o.prototype.ltn=function(e){return-1===this.cmpn(e)},o.prototype.lt=function(e){return-1===this.cmp(e)},o.prototype.lten=function(e){return this.cmpn(e)<=0},o.prototype.lte=function(e){return this.cmp(e)<=0},o.prototype.eqn=function(e){return 0===this.cmpn(e)},o.prototype.eq=function(e){return 0===this.cmp(e)},o.red=function(e){return new E(e)},o.prototype.toRed=function(e){return r(!this.red,\"Already a number in reduction context\"),r(0===this.negative,\"red works only with positives\"),e.convertTo(this)._forceRed(e)},o.prototype.fromRed=function(){return r(this.red,\"fromRed works only with numbers in reduction context\"),this.red.convertFrom(this)},o.prototype._forceRed=function(e){return this.red=e,this},o.prototype.forceRed=function(e){return r(!this.red,\"Already a number in reduction context\"),this._forceRed(e)},o.prototype.redAdd=function(e){return r(this.red,\"redAdd works only with red numbers\"),this.red.add(this,e)},o.prototype.redIAdd=function(e){return r(this.red,\"redIAdd works only with red numbers\"),this.red.iadd(this,e)},o.prototype.redSub=function(e){return r(this.red,\"redSub works only with red numbers\"),this.red.sub(this,e)},o.prototype.redISub=function(e){return r(this.red,\"redISub works only with red numbers\"),this.red.isub(this,e)},o.prototype.redShl=function(e){return r(this.red,\"redShl works only with red numbers\"),this.red.shl(this,e)},o.prototype.redMul=function(e){return r(this.red,\"redMul works only with red numbers\"),this.red._verify2(this,e),this.red.mul(this,e)},o.prototype.redIMul=function(e){return r(this.red,\"redMul works only with red numbers\"),this.red._verify2(this,e),this.red.imul(this,e)},o.prototype.redSqr=function(){return r(this.red,\"redSqr works only with red numbers\"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return r(this.red,\"redISqr works only with red numbers\"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return r(this.red,\"redSqrt works only with red numbers\"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return r(this.red,\"redInvm works only with red numbers\"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return r(this.red,\"redNeg works only with red numbers\"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(e){return r(this.red&&!e.red,\"redPow(normalNum)\"),this.red._verify1(this),this.red.pow(this,e)};var y={k256:null,p224:null,p192:null,p25519:null};function w(e,t){this.name=e,this.p=new o(t,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function x(){w.call(this,\"k256\",\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f\")}function S(){w.call(this,\"p224\",\"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001\")}function C(){w.call(this,\"p192\",\"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff\")}function k(){w.call(this,\"25519\",\"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed\")}function E(e){if(\"string\"==typeof e){var t=o._prime(e);this.m=t.p,this.prime=t}else r(e.gtn(1),\"modulus must be greater than 1\"),this.m=e,this.prime=null}function O(e){E.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}w.prototype._tmp=function(){var e=new o(null);return e.words=new Array(Math.ceil(this.n/13)),e},w.prototype.ireduce=function(e){var t,r=e;do{this.split(r,this.tmp),t=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(t>this.n);var n=t<this.n?-1:r.ucmp(this.p);return 0===n?(r.words[0]=0,r.length=1):n>0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},w.prototype.split=function(e,t){e.iushrn(this.n,0,t)},w.prototype.imulK=function(e){return e.imul(this.k)},n(x,w),x.prototype.split=function(e,t){for(var r=Math.min(e.length,9),n=0;n<r;n++)t.words[n]=e.words[n];if(t.length=r,e.length<=9)return e.words[0]=0,void(e.length=1);var o=e.words[9];for(t.words[t.length++]=4194303&o,n=10;n<e.length;n++){var i=0|e.words[n];e.words[n-10]=(4194303&i)<<4|o>>>22,o=i}o>>>=22,e.words[n-10]=o,0===o&&e.length>10?e.length-=10:e.length-=9},x.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,r=0;r<e.length;r++){var n=0|e.words[r];t+=977*n,e.words[r]=67108863&t,t=64*n+(t/67108864|0)}return 0===e.words[e.length-1]&&(e.length--,0===e.words[e.length-1]&&e.length--),e},n(S,w),n(C,w),n(k,w),k.prototype.imulK=function(e){for(var t=0,r=0;r<e.length;r++){var n=19*(0|e.words[r])+t,o=67108863&n;n>>>=26,e.words[r]=o,t=n}return 0!==t&&(e.words[e.length++]=t),e},o._prime=function(e){if(y[e])return y[e];var t;if(\"k256\"===e)t=new x;else if(\"p224\"===e)t=new S;else if(\"p192\"===e)t=new C;else{if(\"p25519\"!==e)throw new Error(\"Unknown prime \"+e);t=new k}return y[e]=t,t},E.prototype._verify1=function(e){r(0===e.negative,\"red works only with positives\"),r(e.red,\"red works only with red numbers\")},E.prototype._verify2=function(e,t){r(0==(e.negative|t.negative),\"red works only with positives\"),r(e.red&&e.red===t.red,\"red works only with red numbers\")},E.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):(c(e,e.umod(this.m)._forceRed(this)),e)},E.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},E.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},E.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},E.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},E.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},E.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},E.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},E.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},E.prototype.isqr=function(e){return this.imul(e,e.clone())},E.prototype.sqr=function(e){return this.mul(e,e)},E.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(r(t%2==1),3===t){var n=this.m.add(new o(1)).iushrn(2);return this.pow(e,n)}for(var i=this.m.subn(1),a=0;!i.isZero()&&0===i.andln(1);)a++,i.iushrn(1);r(!i.isZero());var s=new o(1).toRed(this),l=s.redNeg(),c=this.m.subn(1).iushrn(1),u=this.m.bitLength();for(u=new o(2*u*u).toRed(this);0!==this.pow(u,c).cmp(l);)u.redIAdd(l);for(var d=this.pow(u,i),f=this.pow(e,i.addn(1).iushrn(1)),h=this.pow(e,i),p=a;0!==h.cmp(s);){for(var m=h,g=0;0!==m.cmp(s);g++)m=m.redSqr();r(g<p);var v=this.pow(d,new o(1).iushln(p-g-1));f=f.redMul(v),d=v.redSqr(),h=h.redMul(d),p=g}return f},E.prototype.invm=function(e){var t=e._invmp(this.m);return 0!==t.negative?(t.negative=0,this.imod(t).redNeg()):this.imod(t)},E.prototype.pow=function(e,t){if(t.isZero())return new o(1).toRed(this);if(0===t.cmpn(1))return e.clone();var r=new Array(16);r[0]=new o(1).toRed(this),r[1]=e;for(var n=2;n<r.length;n++)r[n]=this.mul(r[n-1],e);var i=r[0],a=0,s=0,l=t.bitLength()%26;for(0===l&&(l=26),n=t.length-1;n>=0;n--){for(var c=t.words[n],u=l-1;u>=0;u--){var d=c>>u&1;i!==r[0]&&(i=this.sqr(i)),0!==d||0!==a?(a<<=1,a|=d,(4===++s||0===n&&0===u)&&(i=this.mul(i,r[a]),s=0,a=0)):s=0}l=26}return i},E.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},E.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},o.mont=function(e){return new O(e)},n(O,E),O.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},O.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},O.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var r=e.imul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=r.isub(n).iushrn(this.shift),i=o;return o.cmp(this.m)>=0?i=o.isub(this.m):o.cmpn(0)<0&&(i=o.iadd(this.m)),i._forceRed(this)},O.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new o(0)._forceRed(this);var r=e.mul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},O.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===t||t)},{buffer:188}],187:[function(e,t,r){\"use strict\";var n;function o(e){this.rand=e}if(t.exports=function(e){return n||(n=new o(null)),n.generate(e)},t.exports.Rand=o,o.prototype.generate=function(e){return this._rand(e)},o.prototype._rand=function(e){if(this.rand.getBytes)return this.rand.getBytes(e);for(var t=new Uint8Array(e),r=0;r<t.length;r++)t[r]=this.rand.getByte();return t},\"object\"==typeof self)self.crypto&&self.crypto.getRandomValues?o.prototype._rand=function(e){var t=new Uint8Array(e);return self.crypto.getRandomValues(t),t}:self.msCrypto&&self.msCrypto.getRandomValues?o.prototype._rand=function(e){var t=new Uint8Array(e);return self.msCrypto.getRandomValues(t),t}:\"object\"==typeof window&&(o.prototype._rand=function(){throw new Error(\"Not implemented yet\")});else try{var i=e(\"crypto\");if(\"function\"!=typeof i.randomBytes)throw new Error(\"Not supported\");o.prototype._rand=function(e){return i.randomBytes(e)}}catch(e){}},{crypto:188}],188:[function(e,t,r){},{}],189:[function(e,t,r){\"use strict\";var n=e(\"safe-buffer\").Buffer;function o(e){n.isBuffer(e)||(e=n.from(e));for(var t=e.length/4|0,r=new Array(t),o=0;o<t;o++)r[o]=e.readUInt32BE(4*o);return r}function i(e){for(;0<e.length;e++)e[0]=0}function a(e,t,r,n,o){for(var i,a,s,l,c=r[0],u=r[1],d=r[2],f=r[3],h=e[0]^t[0],p=e[1]^t[1],m=e[2]^t[2],g=e[3]^t[3],v=4,b=1;b<o;b++)i=c[h>>>24]^u[p>>>16&255]^d[m>>>8&255]^f[255&g]^t[v++],a=c[p>>>24]^u[m>>>16&255]^d[g>>>8&255]^f[255&h]^t[v++],s=c[m>>>24]^u[g>>>16&255]^d[h>>>8&255]^f[255&p]^t[v++],l=c[g>>>24]^u[h>>>16&255]^d[p>>>8&255]^f[255&m]^t[v++],h=i,p=a,m=s,g=l;return i=(n[h>>>24]<<24|n[p>>>16&255]<<16|n[m>>>8&255]<<8|n[255&g])^t[v++],a=(n[p>>>24]<<24|n[m>>>16&255]<<16|n[g>>>8&255]<<8|n[255&h])^t[v++],s=(n[m>>>24]<<24|n[g>>>16&255]<<16|n[h>>>8&255]<<8|n[255&p])^t[v++],l=(n[g>>>24]<<24|n[h>>>16&255]<<16|n[p>>>8&255]<<8|n[255&m])^t[v++],[i>>>=0,a>>>=0,s>>>=0,l>>>=0]}var s=[0,1,2,4,8,16,32,64,128,27,54],l=function(){for(var e=new Array(256),t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;for(var r=[],n=[],o=[[],[],[],[]],i=[[],[],[],[]],a=0,s=0,l=0;l<256;++l){var c=s^s<<1^s<<2^s<<3^s<<4;c=c>>>8^255&c^99,r[a]=c,n[c]=a;var u=e[a],d=e[u],f=e[d],h=257*e[c]^16843008*c;o[0][a]=h<<24|h>>>8,o[1][a]=h<<16|h>>>16,o[2][a]=h<<8|h>>>24,o[3][a]=h,h=16843009*f^65537*d^257*u^16843008*a,i[0][c]=h<<24|h>>>8,i[1][c]=h<<16|h>>>16,i[2][c]=h<<8|h>>>24,i[3][c]=h,0===a?a=s=1:(a=u^e[e[e[f^u]]],s^=e[e[s]])}return{SBOX:r,INV_SBOX:n,SUB_MIX:o,INV_SUB_MIX:i}}();function c(e){this._key=o(e),this._reset()}c.blockSize=16,c.keySize=32,c.prototype.blockSize=c.blockSize,c.prototype.keySize=c.keySize,c.prototype._reset=function(){for(var e=this._key,t=e.length,r=t+6,n=4*(r+1),o=[],i=0;i<t;i++)o[i]=e[i];for(i=t;i<n;i++){var a=o[i-1];i%t==0?(a=a<<8|a>>>24,a=l.SBOX[a>>>24]<<24|l.SBOX[a>>>16&255]<<16|l.SBOX[a>>>8&255]<<8|l.SBOX[255&a],a^=s[i/t|0]<<24):t>6&&i%t==4&&(a=l.SBOX[a>>>24]<<24|l.SBOX[a>>>16&255]<<16|l.SBOX[a>>>8&255]<<8|l.SBOX[255&a]),o[i]=o[i-t]^a}for(var c=[],u=0;u<n;u++){var d=n-u,f=o[d-(u%4?0:4)];c[u]=u<4||d<=4?f:l.INV_SUB_MIX[0][l.SBOX[f>>>24]]^l.INV_SUB_MIX[1][l.SBOX[f>>>16&255]]^l.INV_SUB_MIX[2][l.SBOX[f>>>8&255]]^l.INV_SUB_MIX[3][l.SBOX[255&f]]}this._nRounds=r,this._keySchedule=o,this._invKeySchedule=c},c.prototype.encryptBlockRaw=function(e){return a(e=o(e),this._keySchedule,l.SUB_MIX,l.SBOX,this._nRounds)},c.prototype.encryptBlock=function(e){var t=this.encryptBlockRaw(e),r=n.allocUnsafe(16);return r.writeUInt32BE(t[0],0),r.writeUInt32BE(t[1],4),r.writeUInt32BE(t[2],8),r.writeUInt32BE(t[3],12),r},c.prototype.decryptBlock=function(e){var t=(e=o(e))[1];e[1]=e[3],e[3]=t;var r=a(e,this._invKeySchedule,l.INV_SUB_MIX,l.INV_SBOX,this._nRounds),i=n.allocUnsafe(16);return i.writeUInt32BE(r[0],0),i.writeUInt32BE(r[3],4),i.writeUInt32BE(r[2],8),i.writeUInt32BE(r[1],12),i},c.prototype.scrub=function(){i(this._keySchedule),i(this._invKeySchedule),i(this._key)},t.exports.AES=c},{\"safe-buffer\":494}],190:[function(e,t,r){\"use strict\";var n=e(\"./aes\"),o=e(\"safe-buffer\").Buffer,i=e(\"cipher-base\"),a=e(\"inherits\"),s=e(\"./ghash\"),l=e(\"buffer-xor\"),c=e(\"./incr32\");function u(e,t,r,a){i.call(this);var l=o.alloc(4,0);this._cipher=new n.AES(t);var u=this._cipher.encryptBlock(l);this._ghash=new s(u),r=function(e,t,r){if(12===t.length)return e._finID=o.concat([t,o.from([0,0,0,1])]),o.concat([t,o.from([0,0,0,2])]);var n=new s(r),i=t.length,a=i%16;n.update(t),a&&(a=16-a,n.update(o.alloc(a,0))),n.update(o.alloc(8,0));var l=8*i,u=o.alloc(8);u.writeUIntBE(l,0,8),n.update(u),e._finID=n.state;var d=o.from(e._finID);return c(d),d}(this,r,u),this._prev=o.from(r),this._cache=o.allocUnsafe(0),this._secCache=o.allocUnsafe(0),this._decrypt=a,this._alen=0,this._len=0,this._mode=e,this._authTag=null,this._called=!1}a(u,i),u.prototype._update=function(e){if(!this._called&&this._alen){var t=16-this._alen%16;t<16&&(t=o.alloc(t,0),this._ghash.update(t))}this._called=!0;var r=this._mode.encrypt(this,e);return this._decrypt?this._ghash.update(e):this._ghash.update(r),this._len+=e.length,r},u.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error(\"Unsupported state or unable to authenticate data\");var e=l(this._ghash.final(8*this._alen,8*this._len),this._cipher.encryptBlock(this._finID));if(this._decrypt&&function(e,t){var r=0;e.length!==t.length&&r++;for(var n=Math.min(e.length,t.length),o=0;o<n;++o)r+=e[o]^t[o];return r}(e,this._authTag))throw new Error(\"Unsupported state or unable to authenticate data\");this._authTag=e,this._cipher.scrub()},u.prototype.getAuthTag=function(){if(this._decrypt||!o.isBuffer(this._authTag))throw new Error(\"Attempting to get auth tag in unsupported state\");return this._authTag},u.prototype.setAuthTag=function(e){if(!this._decrypt)throw new Error(\"Attempting to set auth tag in unsupported state\");this._authTag=e},u.prototype.setAAD=function(e){if(this._called)throw new Error(\"Attempting to set AAD in unsupported state\");this._ghash.update(e),this._alen+=e.length},t.exports=u},{\"./aes\":189,\"./ghash\":194,\"./incr32\":195,\"buffer-xor\":219,\"cipher-base\":221,inherits:440,\"safe-buffer\":494}],191:[function(e,t,r){\"use strict\";var n=e(\"./encrypter\"),o=e(\"./decrypter\"),i=e(\"./modes/list.json\");r.createCipher=r.Cipher=n.createCipher,r.createCipheriv=r.Cipheriv=n.createCipheriv,r.createDecipher=r.Decipher=o.createDecipher,r.createDecipheriv=r.Decipheriv=o.createDecipheriv,r.listCiphers=r.getCiphers=function(){return Object.keys(i)}},{\"./decrypter\":192,\"./encrypter\":193,\"./modes/list.json\":203}],192:[function(e,t,r){\"use strict\";var n=e(\"./authCipher\"),o=e(\"safe-buffer\").Buffer,i=e(\"./modes\"),a=e(\"./streamCipher\"),s=e(\"cipher-base\"),l=e(\"./aes\"),c=e(\"evp_bytestokey\");function u(e,t,r){s.call(this),this._cache=new d,this._last=void 0,this._cipher=new l.AES(t),this._prev=o.from(r),this._mode=e,this._autopadding=!0}function d(){this.cache=o.allocUnsafe(0)}function f(e,t,r){var s=i[e.toLowerCase()];if(!s)throw new TypeError(\"invalid suite type\");if(\"string\"==typeof r&&(r=o.from(r)),\"GCM\"!==s.mode&&r.length!==s.iv)throw new TypeError(\"invalid iv length \"+r.length);if(\"string\"==typeof t&&(t=o.from(t)),t.length!==s.key/8)throw new TypeError(\"invalid key length \"+t.length);return\"stream\"===s.type?new a(s.module,t,r,!0):\"auth\"===s.type?new n(s.module,t,r,!0):new u(s.module,t,r)}e(\"inherits\")(u,s),u.prototype._update=function(e){var t,r;this._cache.add(e);for(var n=[];t=this._cache.get(this._autopadding);)r=this._mode.decrypt(this,t),n.push(r);return o.concat(n)},u.prototype._final=function(){var e=this._cache.flush();if(this._autopadding)return function(e){var t=e[15];if(t<1||t>16)throw new Error(\"unable to decrypt data\");for(var r=-1;++r<t;)if(e[r+(16-t)]!==t)throw new Error(\"unable to decrypt data\");if(16!==t)return e.slice(0,16-t)}(this._mode.decrypt(this,e));if(e)throw new Error(\"data not multiple of block length\")},u.prototype.setAutoPadding=function(e){return this._autopadding=!!e,this},d.prototype.add=function(e){this.cache=o.concat([this.cache,e])},d.prototype.get=function(e){var t;if(e){if(this.cache.length>16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t}else if(this.cache.length>=16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t;return null},d.prototype.flush=function(){if(this.cache.length)return this.cache},r.createDecipher=function(e,t){var r=i[e.toLowerCase()];if(!r)throw new TypeError(\"invalid suite type\");var n=c(t,!1,r.key,r.iv);return f(e,n.key,n.iv)},r.createDecipheriv=f},{\"./aes\":189,\"./authCipher\":190,\"./modes\":202,\"./streamCipher\":205,\"cipher-base\":221,evp_bytestokey:423,inherits:440,\"safe-buffer\":494}],193:[function(e,t,r){\"use strict\";var n=e(\"./modes\"),o=e(\"./authCipher\"),i=e(\"safe-buffer\").Buffer,a=e(\"./streamCipher\"),s=e(\"cipher-base\"),l=e(\"./aes\"),c=e(\"evp_bytestokey\");function u(e,t,r){s.call(this),this._cache=new f,this._cipher=new l.AES(t),this._prev=i.from(r),this._mode=e,this._autopadding=!0}e(\"inherits\")(u,s),u.prototype._update=function(e){var t,r;this._cache.add(e);for(var n=[];t=this._cache.get();)r=this._mode.encrypt(this,t),n.push(r);return i.concat(n)};var d=i.alloc(16,16);function f(){this.cache=i.allocUnsafe(0)}function h(e,t,r){var s=n[e.toLowerCase()];if(!s)throw new TypeError(\"invalid suite type\");if(\"string\"==typeof t&&(t=i.from(t)),t.length!==s.key/8)throw new TypeError(\"invalid key length \"+t.length);if(\"string\"==typeof r&&(r=i.from(r)),\"GCM\"!==s.mode&&r.length!==s.iv)throw new TypeError(\"invalid iv length \"+r.length);return\"stream\"===s.type?new a(s.module,t,r):\"auth\"===s.type?new o(s.module,t,r):new u(s.module,t,r)}u.prototype._final=function(){var e=this._cache.flush();if(this._autopadding)return e=this._mode.encrypt(this,e),this._cipher.scrub(),e;if(!e.equals(d))throw this._cipher.scrub(),new Error(\"data not multiple of block length\")},u.prototype.setAutoPadding=function(e){return this._autopadding=!!e,this},f.prototype.add=function(e){this.cache=i.concat([this.cache,e])},f.prototype.get=function(){if(this.cache.length>15){var e=this.cache.slice(0,16);return this.cache=this.cache.slice(16),e}return null},f.prototype.flush=function(){for(var e=16-this.cache.length,t=i.allocUnsafe(e),r=-1;++r<e;)t.writeUInt8(e,r);return i.concat([this.cache,t])},r.createCipheriv=h,r.createCipher=function(e,t){var r=n[e.toLowerCase()];if(!r)throw new TypeError(\"invalid suite type\");var o=c(t,!1,r.key,r.iv);return h(e,o.key,o.iv)}},{\"./aes\":189,\"./authCipher\":190,\"./modes\":202,\"./streamCipher\":205,\"cipher-base\":221,evp_bytestokey:423,inherits:440,\"safe-buffer\":494}],194:[function(e,t,r){\"use strict\";var n=e(\"safe-buffer\").Buffer,o=n.alloc(16,0);function i(e){var t=n.allocUnsafe(16);return t.writeUInt32BE(e[0]>>>0,0),t.writeUInt32BE(e[1]>>>0,4),t.writeUInt32BE(e[2]>>>0,8),t.writeUInt32BE(e[3]>>>0,12),t}function a(e){this.h=e,this.state=n.alloc(16,0),this.cache=n.allocUnsafe(0)}a.prototype.ghash=function(e){for(var t=-1;++t<e.length;)this.state[t]^=e[t];this._multiply()},a.prototype._multiply=function(){for(var e,t,r,n=[(e=this.h).readUInt32BE(0),e.readUInt32BE(4),e.readUInt32BE(8),e.readUInt32BE(12)],o=[0,0,0,0],a=-1;++a<128;){for(!!(this.state[~~(a/8)]&1<<7-a%8)&&(o[0]^=n[0],o[1]^=n[1],o[2]^=n[2],o[3]^=n[3]),r=!!(1&n[3]),t=3;t>0;t--)n[t]=n[t]>>>1|(1&n[t-1])<<31;n[0]=n[0]>>>1,r&&(n[0]=n[0]^225<<24)}this.state=i(o)},a.prototype.update=function(e){var t;for(this.cache=n.concat([this.cache,e]);this.cache.length>=16;)t=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(t)},a.prototype.final=function(e,t){return this.cache.length&&this.ghash(n.concat([this.cache,o],16)),this.ghash(i([0,e,0,t])),this.state},t.exports=a},{\"safe-buffer\":494}],195:[function(e,t,r){\"use strict\";t.exports=function(e){for(var t,r=e.length;r--;){if(255!==(t=e.readUInt8(r))){t++,e.writeUInt8(t,r);break}e.writeUInt8(0,r)}}},{}],196:[function(e,t,r){\"use strict\";var n=e(\"buffer-xor\");r.encrypt=function(e,t){var r=n(t,e._prev);return e._prev=e._cipher.encryptBlock(r),e._prev},r.decrypt=function(e,t){var r=e._prev;e._prev=t;var o=e._cipher.decryptBlock(t);return n(o,r)}},{\"buffer-xor\":219}],197:[function(e,t,r){\"use strict\";var n=e(\"safe-buffer\").Buffer,o=e(\"buffer-xor\");function i(e,t,r){var i=t.length,a=o(t,e._cache);return e._cache=e._cache.slice(i),e._prev=n.concat([e._prev,r?t:a]),a}r.encrypt=function(e,t,r){for(var o,a=n.allocUnsafe(0);t.length;){if(0===e._cache.length&&(e._cache=e._cipher.encryptBlock(e._prev),e._prev=n.allocUnsafe(0)),!(e._cache.length<=t.length)){a=n.concat([a,i(e,t,r)]);break}o=e._cache.length,a=n.concat([a,i(e,t.slice(0,o),r)]),t=t.slice(o)}return a}},{\"buffer-xor\":219,\"safe-buffer\":494}],198:[function(e,t,r){\"use strict\";var n=e(\"safe-buffer\").Buffer;function o(e,t,r){for(var n,o,a=-1,s=0;++a<8;)n=t&1<<7-a?128:0,s+=(128&(o=e._cipher.encryptBlock(e._prev)[0]^n))>>a%8,e._prev=i(e._prev,r?n:o);return s}function i(e,t){var r=e.length,o=-1,i=n.allocUnsafe(e.length);for(e=n.concat([e,n.from([t])]);++o<r;)i[o]=e[o]<<1|e[o+1]>>7;return i}r.encrypt=function(e,t,r){for(var i=t.length,a=n.allocUnsafe(i),s=-1;++s<i;)a[s]=o(e,t[s],r);return a}},{\"safe-buffer\":494}],199:[function(e,t,r){\"use strict\";var n=e(\"safe-buffer\").Buffer;function o(e,t,r){var o=e._cipher.encryptBlock(e._prev)[0]^t;return e._prev=n.concat([e._prev.slice(1),n.from([r?t:o])]),o}r.encrypt=function(e,t,r){for(var i=t.length,a=n.allocUnsafe(i),s=-1;++s<i;)a[s]=o(e,t[s],r);return a}},{\"safe-buffer\":494}],200:[function(e,t,r){\"use strict\";var n=e(\"buffer-xor\"),o=e(\"safe-buffer\").Buffer,i=e(\"../incr32\");function a(e){var t=e._cipher.encryptBlockRaw(e._prev);return i(e._prev),t}r.encrypt=function(e,t){var r=Math.ceil(t.length/16),i=e._cache.length;e._cache=o.concat([e._cache,o.allocUnsafe(16*r)]);for(var s=0;s<r;s++){var l=a(e),c=i+16*s;e._cache.writeUInt32BE(l[0],c+0),e._cache.writeUInt32BE(l[1],c+4),e._cache.writeUInt32BE(l[2],c+8),e._cache.writeUInt32BE(l[3],c+12)}var u=e._cache.slice(0,t.length);return e._cache=e._cache.slice(t.length),n(t,u)}},{\"../incr32\":195,\"buffer-xor\":219,\"safe-buffer\":494}],201:[function(e,t,r){\"use strict\";r.encrypt=function(e,t){return e._cipher.encryptBlock(t)},r.decrypt=function(e,t){return e._cipher.decryptBlock(t)}},{}],202:[function(e,t,r){\"use strict\";var n={ECB:e(\"./ecb\"),CBC:e(\"./cbc\"),CFB:e(\"./cfb\"),CFB8:e(\"./cfb8\"),CFB1:e(\"./cfb1\"),OFB:e(\"./ofb\"),CTR:e(\"./ctr\"),GCM:e(\"./ctr\")},o=e(\"./list.json\");for(var i in o)o[i].module=n[o[i].mode];t.exports=o},{\"./cbc\":196,\"./cfb\":197,\"./cfb1\":198,\"./cfb8\":199,\"./ctr\":200,\"./ecb\":201,\"./list.json\":203,\"./ofb\":204}],203:[function(e,t,r){t.exports={\"aes-128-ecb\":{cipher:\"AES\",key:128,iv:0,mode:\"ECB\",type:\"block\"},\"aes-192-ecb\":{cipher:\"AES\",key:192,iv:0,mode:\"ECB\",type:\"block\"},\"aes-256-ecb\":{cipher:\"AES\",key:256,iv:0,mode:\"ECB\",type:\"block\"},\"aes-128-cbc\":{cipher:\"AES\",key:128,iv:16,mode:\"CBC\",type:\"block\"},\"aes-192-cbc\":{cipher:\"AES\",key:192,iv:16,mode:\"CBC\",type:\"block\"},\"aes-256-cbc\":{cipher:\"AES\",key:256,iv:16,mode:\"CBC\",type:\"block\"},aes128:{cipher:\"AES\",key:128,iv:16,mode:\"CBC\",type:\"block\"},aes192:{cipher:\"AES\",key:192,iv:16,mode:\"CBC\",type:\"block\"},aes256:{cipher:\"AES\",key:256,iv:16,mode:\"CBC\",type:\"block\"},\"aes-128-cfb\":{cipher:\"AES\",key:128,iv:16,mode:\"CFB\",type:\"stream\"},\"aes-192-cfb\":{cipher:\"AES\",key:192,iv:16,mode:\"CFB\",type:\"stream\"},\"aes-256-cfb\":{cipher:\"AES\",key:256,iv:16,mode:\"CFB\",type:\"stream\"},\"aes-128-cfb8\":{cipher:\"AES\",key:128,iv:16,mode:\"CFB8\",type:\"stream\"},\"aes-192-cfb8\":{cipher:\"AES\",key:192,iv:16,mode:\"CFB8\",type:\"stream\"},\"aes-256-cfb8\":{cipher:\"AES\",key:256,iv:16,mode:\"CFB8\",type:\"stream\"},\"aes-128-cfb1\":{cipher:\"AES\",key:128,iv:16,mode:\"CFB1\",type:\"stream\"},\"aes-192-cfb1\":{cipher:\"AES\",key:192,iv:16,mode:\"CFB1\",type:\"stream\"},\"aes-256-cfb1\":{cipher:\"AES\",key:256,iv:16,mode:\"CFB1\",type:\"stream\"},\"aes-128-ofb\":{cipher:\"AES\",key:128,iv:16,mode:\"OFB\",type:\"stream\"},\"aes-192-ofb\":{cipher:\"AES\",key:192,iv:16,mode:\"OFB\",type:\"stream\"},\"aes-256-ofb\":{cipher:\"AES\",key:256,iv:16,mode:\"OFB\",type:\"stream\"},\"aes-128-ctr\":{cipher:\"AES\",key:128,iv:16,mode:\"CTR\",type:\"stream\"},\"aes-192-ctr\":{cipher:\"AES\",key:192,iv:16,mode:\"CTR\",type:\"stream\"},\"aes-256-ctr\":{cipher:\"AES\",key:256,iv:16,mode:\"CTR\",type:\"stream\"},\"aes-128-gcm\":{cipher:\"AES\",key:128,iv:12,mode:\"GCM\",type:\"auth\"},\"aes-192-gcm\":{cipher:\"AES\",key:192,iv:12,mode:\"GCM\",type:\"auth\"},\"aes-256-gcm\":{cipher:\"AES\",key:256,iv:12,mode:\"GCM\",type:\"auth\"}}},{}],204:[function(e,t,r){(function(t){(function(){\"use strict\";var n=e(\"buffer-xor\");function o(e){return e._prev=e._cipher.encryptBlock(e._prev),e._prev}r.encrypt=function(e,r){for(;e._cache.length<r.length;)e._cache=t.concat([e._cache,o(e)]);var i=e._cache.slice(0,r.length);return e._cache=e._cache.slice(r.length),n(r,i)}}).call(this)}).call(this,e(\"buffer\").Buffer)},{buffer:220,\"buffer-xor\":219}],205:[function(e,t,r){\"use strict\";var n=e(\"./aes\"),o=e(\"safe-buffer\").Buffer,i=e(\"cipher-base\");function a(e,t,r,a){i.call(this),this._cipher=new n.AES(t),this._prev=o.from(r),this._cache=o.allocUnsafe(0),this._secCache=o.allocUnsafe(0),this._decrypt=a,this._mode=e}e(\"inherits\")(a,i),a.prototype._update=function(e){return this._mode.encrypt(this,e,this._decrypt)},a.prototype._final=function(){this._cipher.scrub()},t.exports=a},{\"./aes\":189,\"cipher-base\":221,inherits:440,\"safe-buffer\":494}],206:[function(e,t,r){\"use strict\";var n=e(\"browserify-des\"),o=e(\"browserify-aes/browser\"),i=e(\"browserify-aes/modes\"),a=e(\"browserify-des/modes\"),s=e(\"evp_bytestokey\");function l(e,t,r){if(e=e.toLowerCase(),i[e])return o.createCipheriv(e,t,r);if(a[e])return new n({key:t,iv:r,mode:e});throw new TypeError(\"invalid suite type\")}function c(e,t,r){if(e=e.toLowerCase(),i[e])return o.createDecipheriv(e,t,r);if(a[e])return new n({key:t,iv:r,mode:e,decrypt:!0});throw new TypeError(\"invalid suite type\")}r.createCipher=r.Cipher=function(e,t){var r,n;if(e=e.toLowerCase(),i[e])r=i[e].key,n=i[e].iv;else{if(!a[e])throw new TypeError(\"invalid suite type\");r=8*a[e].key,n=a[e].iv}var o=s(t,!1,r,n);return l(e,o.key,o.iv)},r.createCipheriv=r.Cipheriv=l,r.createDecipher=r.Decipher=function(e,t){var r,n;if(e=e.toLowerCase(),i[e])r=i[e].key,n=i[e].iv;else{if(!a[e])throw new TypeError(\"invalid suite type\");r=8*a[e].key,n=a[e].iv}var o=s(t,!1,r,n);return c(e,o.key,o.iv)},r.createDecipheriv=r.Decipheriv=c,r.listCiphers=r.getCiphers=function(){return Object.keys(a).concat(o.getCiphers())}},{\"browserify-aes/browser\":191,\"browserify-aes/modes\":202,\"browserify-des\":207,\"browserify-des/modes\":208,evp_bytestokey:423}],207:[function(e,t,r){\"use strict\";var n=e(\"cipher-base\"),o=e(\"des.js\"),i=e(\"inherits\"),a=e(\"safe-buffer\").Buffer,s={\"des-ede3-cbc\":o.CBC.instantiate(o.EDE),\"des-ede3\":o.EDE,\"des-ede-cbc\":o.CBC.instantiate(o.EDE),\"des-ede\":o.EDE,\"des-cbc\":o.CBC.instantiate(o.DES),\"des-ecb\":o.DES};function l(e){n.call(this);var t,r=e.mode.toLowerCase(),o=s[r];t=e.decrypt?\"decrypt\":\"encrypt\";var i=e.key;a.isBuffer(i)||(i=a.from(i)),\"des-ede\"!==r&&\"des-ede-cbc\"!==r||(i=a.concat([i,i.slice(0,8)]));var l=e.iv;a.isBuffer(l)||(l=a.from(l)),this._des=o.create({key:i,iv:l,type:t})}s.des=s[\"des-cbc\"],s.des3=s[\"des-ede3-cbc\"],t.exports=l,i(l,n),l.prototype._update=function(e){return a.from(this._des.update(e))},l.prototype._final=function(){return a.from(this._des.final())}},{\"cipher-base\":221,\"des.js\":394,inherits:440,\"safe-buffer\":494}],208:[function(e,t,r){\"use strict\";r[\"des-ecb\"]={key:8,iv:0},r[\"des-cbc\"]=r.des={key:8,iv:8},r[\"des-ede3-cbc\"]=r.des3={key:24,iv:8},r[\"des-ede3\"]={key:24,iv:0},r[\"des-ede-cbc\"]={key:16,iv:8},r[\"des-ede\"]={key:16,iv:0}},{}],209:[function(e,t,r){(function(r){(function(){\"use strict\";var n=e(\"bn.js\"),o=e(\"randombytes\");function i(e){var t,r=e.modulus.byteLength();do{t=new n(o(r))}while(t.cmp(e.modulus)>=0||!t.umod(e.prime1)||!t.umod(e.prime2));return t}function a(e,t){var o=function(e){var t=i(e);return{blinder:t.toRed(n.mont(e.modulus)).redPow(new n(e.publicExponent)).fromRed(),unblinder:t.invm(e.modulus)}}(t),a=t.modulus.byteLength(),s=new n(e).mul(o.blinder).umod(t.modulus),l=s.toRed(n.mont(t.prime1)),c=s.toRed(n.mont(t.prime2)),u=t.coefficient,d=t.prime1,f=t.prime2,h=l.redPow(t.exponent1).fromRed(),p=c.redPow(t.exponent2).fromRed(),m=h.isub(p).imul(u).umod(d).imul(f);return p.iadd(m).imul(o.unblinder).umod(t.modulus).toArrayLike(r,\"be\",a)}a.getr=i,t.exports=a}).call(this)}).call(this,e(\"buffer\").Buffer)},{\"bn.js\":186,buffer:220,randombytes:475}],210:[function(e,t,r){\"use strict\";t.exports=e(\"./browser/algorithms.json\")},{\"./browser/algorithms.json\":211}],211:[function(e,t,r){t.exports={sha224WithRSAEncryption:{sign:\"rsa\",hash:\"sha224\",id:\"302d300d06096086480165030402040500041c\"},\"RSA-SHA224\":{sign:\"ecdsa/rsa\",hash:\"sha224\",id:\"302d300d06096086480165030402040500041c\"},sha256WithRSAEncryption:{sign:\"rsa\",hash:\"sha256\",id:\"3031300d060960864801650304020105000420\"},\"RSA-SHA256\":{sign:\"ecdsa/rsa\",hash:\"sha256\",id:\"3031300d060960864801650304020105000420\"},sha384WithRSAEncryption:{sign:\"rsa\",hash:\"sha384\",id:\"3041300d060960864801650304020205000430\"},\"RSA-SHA384\":{sign:\"ecdsa/rsa\",hash:\"sha384\",id:\"3041300d060960864801650304020205000430\"},sha512WithRSAEncryption:{sign:\"rsa\",hash:\"sha512\",id:\"3051300d060960864801650304020305000440\"},\"RSA-SHA512\":{sign:\"ecdsa/rsa\",hash:\"sha512\",id:\"3051300d060960864801650304020305000440\"},\"RSA-SHA1\":{sign:\"rsa\",hash:\"sha1\",id:\"3021300906052b0e03021a05000414\"},\"ecdsa-with-SHA1\":{sign:\"ecdsa\",hash:\"sha1\",id:\"\"},sha256:{sign:\"ecdsa\",hash:\"sha256\",id:\"\"},sha224:{sign:\"ecdsa\",hash:\"sha224\",id:\"\"},sha384:{sign:\"ecdsa\",hash:\"sha384\",id:\"\"},sha512:{sign:\"ecdsa\",hash:\"sha512\",id:\"\"},\"DSA-SHA\":{sign:\"dsa\",hash:\"sha1\",id:\"\"},\"DSA-SHA1\":{sign:\"dsa\",hash:\"sha1\",id:\"\"},DSA:{sign:\"dsa\",hash:\"sha1\",id:\"\"},\"DSA-WITH-SHA224\":{sign:\"dsa\",hash:\"sha224\",id:\"\"},\"DSA-SHA224\":{sign:\"dsa\",hash:\"sha224\",id:\"\"},\"DSA-WITH-SHA256\":{sign:\"dsa\",hash:\"sha256\",id:\"\"},\"DSA-SHA256\":{sign:\"dsa\",hash:\"sha256\",id:\"\"},\"DSA-WITH-SHA384\":{sign:\"dsa\",hash:\"sha384\",id:\"\"},\"DSA-SHA384\":{sign:\"dsa\",hash:\"sha384\",id:\"\"},\"DSA-WITH-SHA512\":{sign:\"dsa\",hash:\"sha512\",id:\"\"},\"DSA-SHA512\":{sign:\"dsa\",hash:\"sha512\",id:\"\"},\"DSA-RIPEMD160\":{sign:\"dsa\",hash:\"rmd160\",id:\"\"},ripemd160WithRSA:{sign:\"rsa\",hash:\"rmd160\",id:\"3021300906052b2403020105000414\"},\"RSA-RIPEMD160\":{sign:\"rsa\",hash:\"rmd160\",id:\"3021300906052b2403020105000414\"},md5WithRSAEncryption:{sign:\"rsa\",hash:\"md5\",id:\"3020300c06082a864886f70d020505000410\"},\"RSA-MD5\":{sign:\"rsa\",hash:\"md5\",id:\"3020300c06082a864886f70d020505000410\"}}},{}],212:[function(e,t,r){t.exports={\"1.3.132.0.10\":\"secp256k1\",\"1.3.132.0.33\":\"p224\",\"1.2.840.10045.3.1.1\":\"p192\",\"1.2.840.10045.3.1.7\":\"p256\",\"1.3.132.0.34\":\"p384\",\"1.3.132.0.35\":\"p521\"}},{}],213:[function(e,t,r){\"use strict\";var n=e(\"safe-buffer\").Buffer,o=e(\"create-hash\"),i=e(\"readable-stream\"),a=e(\"inherits\"),s=e(\"./sign\"),l=e(\"./verify\"),c=e(\"./algorithms.json\");function u(e){i.Writable.call(this);var t=c[e];if(!t)throw new Error(\"Unknown message digest\");this._hashType=t.hash,this._hash=o(t.hash),this._tag=t.id,this._signType=t.sign}function d(e){i.Writable.call(this);var t=c[e];if(!t)throw new Error(\"Unknown message digest\");this._hash=o(t.hash),this._tag=t.id,this._signType=t.sign}function f(e){return new u(e)}function h(e){return new d(e)}Object.keys(c).forEach((function(e){c[e].id=n.from(c[e].id,\"hex\"),c[e.toLowerCase()]=c[e]})),a(u,i.Writable),u.prototype._write=function(e,t,r){this._hash.update(e),r()},u.prototype.update=function(e,t){return\"string\"==typeof e&&(e=n.from(e,t)),this._hash.update(e),this},u.prototype.sign=function(e,t){this.end();var r=this._hash.digest(),n=s(r,e,this._hashType,this._signType,this._tag);return t?n.toString(t):n},a(d,i.Writable),d.prototype._write=function(e,t,r){this._hash.update(e),r()},d.prototype.update=function(e,t){return\"string\"==typeof e&&(e=n.from(e,t)),this._hash.update(e),this},d.prototype.verify=function(e,t,r){\"string\"==typeof t&&(t=n.from(t,r)),this.end();var o=this._hash.digest();return l(t,o,e,this._signType,this._tag)},t.exports={Sign:f,Verify:h,createSign:f,createVerify:h}},{\"./algorithms.json\":211,\"./sign\":214,\"./verify\":215,\"create-hash\":386,inherits:440,\"readable-stream\":491,\"safe-buffer\":494}],214:[function(e,t,r){\"use strict\";var n=e(\"safe-buffer\").Buffer,o=e(\"create-hmac\"),i=e(\"browserify-rsa\"),a=e(\"elliptic\").ec,s=e(\"bn.js\"),l=e(\"parse-asn1\"),c=e(\"./curves.json\");function u(e,t,r,i){if((e=n.from(e.toArray())).length<t.byteLength()){var a=n.alloc(t.byteLength()-e.length);e=n.concat([a,e])}var s=r.length,l=function(e,t){e=(e=d(e,t)).mod(t);var r=n.from(e.toArray());if(r.length<t.byteLength()){var o=n.alloc(t.byteLength()-r.length);r=n.concat([o,r])}return r}(r,t),c=n.alloc(s);c.fill(1);var u=n.alloc(s);return u=o(i,u).update(c).update(n.from([0])).update(e).update(l).digest(),c=o(i,u).update(c).digest(),{k:u=o(i,u).update(c).update(n.from([1])).update(e).update(l).digest(),v:c=o(i,u).update(c).digest()}}function d(e,t){var r=new s(e),n=(e.length<<3)-t.bitLength();return n>0&&r.ishrn(n),r}function f(e,t,r){var i,a;do{for(i=n.alloc(0);8*i.length<e.bitLength();)t.v=o(r,t.k).update(t.v).digest(),i=n.concat([i,t.v]);a=d(i,e),t.k=o(r,t.k).update(t.v).update(n.from([0])).digest(),t.v=o(r,t.k).update(t.v).digest()}while(-1!==a.cmp(e));return a}function h(e,t,r,n){return e.toRed(s.mont(r)).redPow(t).fromRed().mod(n)}t.exports=function(e,t,r,o,p){var m=l(t);if(m.curve){if(\"ecdsa\"!==o&&\"ecdsa/rsa\"!==o)throw new Error(\"wrong private key type\");return function(e,t){var r=c[t.curve.join(\".\")];if(!r)throw new Error(\"unknown curve \"+t.curve.join(\".\"));var o=new a(r).keyFromPrivate(t.privateKey).sign(e);return n.from(o.toDER())}(e,m)}if(\"dsa\"===m.type){if(\"dsa\"!==o)throw new Error(\"wrong private key type\");return function(e,t,r){for(var o,i=t.params.priv_key,a=t.params.p,l=t.params.q,c=t.params.g,p=new s(0),m=d(e,l).mod(l),g=!1,v=u(i,l,e,r);!1===g;)p=h(c,o=f(l,v,r),a,l),0===(g=o.invm(l).imul(m.add(i.mul(p))).mod(l)).cmpn(0)&&(g=!1,p=new s(0));return function(e,t){e=e.toArray(),t=t.toArray(),128&e[0]&&(e=[0].concat(e)),128&t[0]&&(t=[0].concat(t));var r=[48,e.length+t.length+4,2,e.length];return r=r.concat(e,[2,t.length],t),n.from(r)}(p,g)}(e,m,r)}if(\"rsa\"!==o&&\"ecdsa/rsa\"!==o)throw new Error(\"wrong private key type\");e=n.concat([p,e]);for(var g=m.modulus.byteLength(),v=[0,1];e.length+v.length+1<g;)v.push(255);v.push(0);for(var b=-1;++b<e.length;)v.push(e[b]);return i(v,m)},t.exports.getKey=u,t.exports.makeKey=f},{\"./curves.json\":212,\"bn.js\":186,\"browserify-rsa\":209,\"create-hmac\":388,elliptic:405,\"parse-asn1\":459,\"safe-buffer\":494}],215:[function(e,t,r){\"use strict\";var n=e(\"safe-buffer\").Buffer,o=e(\"bn.js\"),i=e(\"elliptic\").ec,a=e(\"parse-asn1\"),s=e(\"./curves.json\");function l(e,t){if(e.cmpn(0)<=0)throw new Error(\"invalid sig\");if(e.cmp(t)>=t)throw new Error(\"invalid sig\")}t.exports=function(e,t,r,c,u){var d=a(r);if(\"ec\"===d.type){if(\"ecdsa\"!==c&&\"ecdsa/rsa\"!==c)throw new Error(\"wrong public key type\");return function(e,t,r){var n=s[r.data.algorithm.curve.join(\".\")];if(!n)throw new Error(\"unknown curve \"+r.data.algorithm.curve.join(\".\"));var o=new i(n),a=r.data.subjectPrivateKey.data;return o.verify(t,e,a)}(e,t,d)}if(\"dsa\"===d.type){if(\"dsa\"!==c)throw new Error(\"wrong public key type\");return function(e,t,r){var n=r.data.p,i=r.data.q,s=r.data.g,c=r.data.pub_key,u=a.signature.decode(e,\"der\"),d=u.s,f=u.r;l(d,i),l(f,i);var h=o.mont(n),p=d.invm(i);return 0===s.toRed(h).redPow(new o(t).mul(p).mod(i)).fromRed().mul(c.toRed(h).redPow(f.mul(p).mod(i)).fromRed()).mod(n).mod(i).cmp(f)}(e,t,d)}if(\"rsa\"!==c&&\"ecdsa/rsa\"!==c)throw new Error(\"wrong public key type\");t=n.concat([u,t]);for(var f=d.modulus.byteLength(),h=[1],p=0;t.length+h.length+2<f;)h.push(255),p++;h.push(0);for(var m=-1;++m<t.length;)h.push(t[m]);h=n.from(h);var g=o.mont(d.modulus);e=(e=new o(e).toRed(g)).redPow(new o(d.publicExponent)),e=n.from(e.fromRed().toArray());var v=p<8?1:0;for(f=Math.min(e.length,h.length),e.length!==h.length&&(v=1),m=-1;++m<f;)v|=e[m]^h[m];return 0===v}},{\"./curves.json\":212,\"bn.js\":186,elliptic:405,\"parse-asn1\":459,\"safe-buffer\":494}],216:[function(e,t,r){},{}],217:[function(e,t,r){\"use strict\";var n=e(\"buffer\"),o=n.Buffer;function i(e,t){for(var r in e)t[r]=e[r]}function a(e,t,r){return o(e,t,r)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?t.exports=n:(i(n,r),r.Buffer=a),i(o,a),a.from=function(e,t,r){if(\"number\"==typeof e)throw new TypeError(\"Argument must not be a number\");return o(e,t,r)},a.alloc=function(e,t,r){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");var n=o(e);return void 0!==t?\"string\"==typeof r?n.fill(t,r):n.fill(t):n.fill(0),n},a.allocUnsafe=function(e){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");return o(e)},a.allocUnsafeSlow=function(e){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");return n.SlowBuffer(e)}},{buffer:220}],218:[function(e,t,r){\"use strict\";var n=e(\"safe-buffer\").Buffer,o=n.isEncoding||function(e){switch((e=\"\"+e)&&e.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!0;default:return!1}};function i(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return\"utf8\";for(var t;;)switch(e){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 e;default:if(t)return;e=(\"\"+e).toLowerCase(),t=!0}}(e);if(\"string\"!=typeof t&&(n.isEncoding===o||!o(e)))throw new Error(\"Unknown encoding: \"+e);return t||e}(e),this.encoding){case\"utf16le\":this.text=l,this.end=c,t=4;break;case\"utf8\":this.fillLast=s,t=4;break;case\"base64\":this.text=u,this.end=d,t=3;break;default:return this.write=f,void(this.end=h)}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(t)}function a(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,r=function(e,t){if(128!=(192&t[0]))return e.lastNeed=0,\"�\";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,\"�\";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,\"�\"}}(this,e);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function l(e,t){if((e.length-t)%2==0){var r=e.toString(\"utf16le\",t);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString(\"utf16le\",t,e.length-1)}function c(e){var t=e&&e.length?this.write(e):\"\";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return t+this.lastChar.toString(\"utf16le\",0,r)}return t}function u(e,t){var r=(e.length-t)%3;return 0===r?e.toString(\"base64\",t):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString(\"base64\",t,e.length-r))}function d(e){var t=e&&e.length?this.write(e):\"\";return this.lastNeed?t+this.lastChar.toString(\"base64\",0,3-this.lastNeed):t}function f(e){return e.toString(this.encoding)}function h(e){return e&&e.length?this.write(e):\"\"}r.StringDecoder=i,i.prototype.write=function(e){if(0===e.length)return\"\";var t,r;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return\"\";r=this.lastNeed,this.lastNeed=0}else r=0;return r<e.length?t?t+this.text(e,r):this.text(e,r):t||\"\"},i.prototype.end=function(e){var t=e&&e.length?this.write(e):\"\";return this.lastNeed?t+\"�\":t},i.prototype.text=function(e,t){var r=function(e,t,r){var n=t.length-1;if(n<r)return 0;var o=a(t[n]);return o>=0?(o>0&&(e.lastNeed=o-1),o):--n<r||-2===o?0:(o=a(t[n]))>=0?(o>0&&(e.lastNeed=o-2),o):--n<r||-2===o?0:(o=a(t[n]))>=0?(o>0&&(2===o?o=0:e.lastNeed=o-3),o):0}(this,e,t);if(!this.lastNeed)return e.toString(\"utf8\",t);this.lastTotal=r;var n=e.length-(r-this.lastNeed);return e.copy(this.lastChar,0,n),e.toString(\"utf8\",t,n)},i.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},{\"safe-buffer\":217}],219:[function(e,t,r){(function(e){(function(){\"use strict\";t.exports=function(t,r){for(var n=Math.min(t.length,r.length),o=new e(n),i=0;i<n;++i)o[i]=t[i]^r[i];return o}}).call(this)}).call(this,e(\"buffer\").Buffer)},{buffer:220}],220:[function(e,t,r){(function(t){(function(){\"use strict\";var t=e(\"base64-js\"),n=e(\"ieee754\");function o(e){if(e>2147483647)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"');var t=new Uint8Array(e);return t.__proto__=i.prototype,t}function i(e,t,r){if(\"number\"==typeof e){if(\"string\"==typeof t)throw new TypeError('The \"string\" argument must be of type string. Received type number');return l(e)}return a(e,t,r)}function a(e,t,r){if(\"string\"==typeof e)return function(e,t){if(\"string\"==typeof t&&\"\"!==t||(t=\"utf8\"),!i.isEncoding(t))throw new TypeError(\"Unknown encoding: \"+t);var r=0|d(e,t),n=o(r),a=n.write(e,t);return a!==r&&(n=n.slice(0,a)),n}(e,t);if(ArrayBuffer.isView(e))return c(e);if(null==e)throw TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e);if(B(e,ArrayBuffer)||e&&B(e.buffer,ArrayBuffer))return function(e,t,r){if(t<0||e.byteLength<t)throw new RangeError('\"offset\" is outside of buffer bounds');if(e.byteLength<t+(r||0))throw new RangeError('\"length\" is outside of buffer bounds');var n;return(n=void 0===t&&void 0===r?new Uint8Array(e):void 0===r?new Uint8Array(e,t):new Uint8Array(e,t,r)).__proto__=i.prototype,n}(e,t,r);if(\"number\"==typeof e)throw new TypeError('The \"value\" argument must not be of type number. Received type number');var n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return i.from(n,t,r);var a=function(e){if(i.isBuffer(e)){var t=0|u(e.length),r=o(t);return 0===r.length||e.copy(r,0,0,t),r}return void 0!==e.length?\"number\"!=typeof e.length||L(e.length)?o(0):c(e):\"Buffer\"===e.type&&Array.isArray(e.data)?c(e.data):void 0}(e);if(a)return a;if(\"undefined\"!=typeof Symbol&&null!=Symbol.toPrimitive&&\"function\"==typeof e[Symbol.toPrimitive])return i.from(e[Symbol.toPrimitive](\"string\"),t,r);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e)}function s(e){if(\"number\"!=typeof e)throw new TypeError('\"size\" argument must be of type number');if(e<0)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"')}function l(e){return s(e),o(e<0?0:0|u(e))}function c(e){for(var t=e.length<0?0:0|u(e.length),r=o(t),n=0;n<t;n+=1)r[n]=255&e[n];return r}function u(e){if(e>=2147483647)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+2147483647..toString(16)+\" bytes\");return 0|e}function d(e,t){if(i.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||B(e,ArrayBuffer))return e.byteLength;if(\"string\"!=typeof e)throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);var r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var o=!1;;)switch(t){case\"ascii\":case\"latin1\":case\"binary\":return r;case\"utf8\":case\"utf-8\":return N(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*r;case\"hex\":return r>>>1;case\"base64\":return F(e).length;default:if(o)return n?-1:N(e).length;t=(\"\"+t).toLowerCase(),o=!0}}function f(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return\"\";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return\"\";if((r>>>=0)<=(t>>>=0))return\"\";for(e||(e=\"utf8\");;)switch(e){case\"hex\":return O(this,t,r);case\"utf8\":case\"utf-8\":return C(this,t,r);case\"ascii\":return k(this,t,r);case\"latin1\":case\"binary\":return E(this,t,r);case\"base64\":return S(this,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return A(this,t,r);default:if(n)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase(),n=!0}}function h(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function p(e,t,r,n,o){if(0===e.length)return-1;if(\"string\"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),L(r=+r)&&(r=o?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(o)return-1;r=e.length-1}else if(r<0){if(!o)return-1;r=0}if(\"string\"==typeof t&&(t=i.from(t,n)),i.isBuffer(t))return 0===t.length?-1:m(e,t,r,n,o);if(\"number\"==typeof t)return t&=255,\"function\"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):m(e,[t],r,n,o);throw new TypeError(\"val must be string, number or Buffer\")}function m(e,t,r,n,o){var i,a=1,s=e.length,l=t.length;if(void 0!==n&&(\"ucs2\"===(n=String(n).toLowerCase())||\"ucs-2\"===n||\"utf16le\"===n||\"utf-16le\"===n)){if(e.length<2||t.length<2)return-1;a=2,s/=2,l/=2,r/=2}function c(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var u=-1;for(i=r;i<s;i++)if(c(e,i)===c(t,-1===u?0:i-u)){if(-1===u&&(u=i),i-u+1===l)return u*a}else-1!==u&&(i-=i-u),u=-1}else for(r+l>s&&(r=s-l),i=r;i>=0;i--){for(var d=!0,f=0;f<l;f++)if(c(e,i+f)!==c(t,f)){d=!1;break}if(d)return i}return-1}function g(e,t,r,n){r=Number(r)||0;var o=e.length-r;n?(n=Number(n))>o&&(n=o):n=o;var i=t.length;n>i/2&&(n=i/2);for(var a=0;a<n;++a){var s=parseInt(t.substr(2*a,2),16);if(L(s))return a;e[r+a]=s}return a}function v(e,t,r,n){return D(N(t,e.length-r),e,r,n)}function b(e,t,r,n){return D(function(e){for(var t=[],r=0;r<e.length;++r)t.push(255&e.charCodeAt(r));return t}(t),e,r,n)}function y(e,t,r,n){return b(e,t,r,n)}function w(e,t,r,n){return D(F(t),e,r,n)}function x(e,t,r,n){return D(function(e,t){for(var r,n,o,i=[],a=0;a<e.length&&!((t-=2)<0);++a)n=(r=e.charCodeAt(a))>>8,o=r%256,i.push(o),i.push(n);return i}(t,e.length-r),e,r,n)}function S(e,r,n){return 0===r&&n===e.length?t.fromByteArray(e):t.fromByteArray(e.slice(r,n))}function C(e,t,r){r=Math.min(e.length,r);for(var n=[],o=t;o<r;){var i,a,s,l,c=e[o],u=null,d=c>239?4:c>223?3:c>191?2:1;if(o+d<=r)switch(d){case 1:c<128&&(u=c);break;case 2:128==(192&(i=e[o+1]))&&(l=(31&c)<<6|63&i)>127&&(u=l);break;case 3:i=e[o+1],a=e[o+2],128==(192&i)&&128==(192&a)&&(l=(15&c)<<12|(63&i)<<6|63&a)>2047&&(l<55296||l>57343)&&(u=l);break;case 4:i=e[o+1],a=e[o+2],s=e[o+3],128==(192&i)&&128==(192&a)&&128==(192&s)&&(l=(15&c)<<18|(63&i)<<12|(63&a)<<6|63&s)>65535&&l<1114112&&(u=l)}null===u?(u=65533,d=1):u>65535&&(u-=65536,n.push(u>>>10&1023|55296),u=56320|1023&u),n.push(u),o+=d}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);for(var r=\"\",n=0;n<t;)r+=String.fromCharCode.apply(String,e.slice(n,n+=4096));return r}(n)}function k(e,t,r){var n=\"\";r=Math.min(e.length,r);for(var o=t;o<r;++o)n+=String.fromCharCode(127&e[o]);return n}function E(e,t,r){var n=\"\";r=Math.min(e.length,r);for(var o=t;o<r;++o)n+=String.fromCharCode(e[o]);return n}function O(e,t,r){var n=e.length;(!t||t<0)&&(t=0),(!r||r<0||r>n)&&(r=n);for(var o=\"\",i=t;i<r;++i)o+=I(e[i]);return o}function A(e,t,r){for(var n=e.slice(t,r),o=\"\",i=0;i<n.length;i+=2)o+=String.fromCharCode(n[i]+256*n[i+1]);return o}function T(e,t,r){if(e%1!=0||e<0)throw new RangeError(\"offset is not uint\");if(e+t>r)throw new RangeError(\"Trying to access beyond buffer length\")}function j(e,t,r,n,o,a){if(!i.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(t>o||t<a)throw new RangeError('\"value\" argument is out of bounds');if(r+n>e.length)throw new RangeError(\"Index out of range\")}function P(e,t,r,n,o,i){if(r+n>e.length)throw new RangeError(\"Index out of range\");if(r<0)throw new RangeError(\"Index out of range\")}function M(e,t,r,o,i){return t=+t,r>>>=0,i||P(e,0,r,4),n.write(e,t,r,o,23,4),r+4}function R(e,t,r,o,i){return t=+t,r>>>=0,i||P(e,0,r,8),n.write(e,t,r,o,52,8),r+8}r.Buffer=i,r.SlowBuffer=function(e){return+e!=e&&(e=0),i.alloc(+e)},r.INSPECT_MAX_BYTES=50,r.kMaxLength=2147483647,i.TYPED_ARRAY_SUPPORT=function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()}catch(e){return!1}}(),i.TYPED_ARRAY_SUPPORT||\"undefined\"==typeof console||\"function\"!=typeof console.error||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.\"),Object.defineProperty(i.prototype,\"parent\",{enumerable:!0,get:function(){if(i.isBuffer(this))return this.buffer}}),Object.defineProperty(i.prototype,\"offset\",{enumerable:!0,get:function(){if(i.isBuffer(this))return this.byteOffset}}),\"undefined\"!=typeof Symbol&&null!=Symbol.species&&i[Symbol.species]===i&&Object.defineProperty(i,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),i.poolSize=8192,i.from=function(e,t,r){return a(e,t,r)},i.prototype.__proto__=Uint8Array.prototype,i.__proto__=Uint8Array,i.alloc=function(e,t,r){return function(e,t,r){return s(e),e<=0?o(e):void 0!==t?\"string\"==typeof r?o(e).fill(t,r):o(e).fill(t):o(e)}(e,t,r)},i.allocUnsafe=function(e){return l(e)},i.allocUnsafeSlow=function(e){return l(e)},i.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==i.prototype},i.compare=function(e,t){if(B(e,Uint8Array)&&(e=i.from(e,e.offset,e.byteLength)),B(t,Uint8Array)&&(t=i.from(t,t.offset,t.byteLength)),!i.isBuffer(e)||!i.isBuffer(t))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;for(var r=e.length,n=t.length,o=0,a=Math.min(r,n);o<a;++o)if(e[o]!==t[o]){r=e[o],n=t[o];break}return r<n?-1:n<r?1:0},i.isEncoding=function(e){switch(String(e).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!0;default:return!1}},i.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('\"list\" argument must be an Array of Buffers');if(0===e.length)return i.alloc(0);var r;if(void 0===t)for(t=0,r=0;r<e.length;++r)t+=e[r].length;var n=i.allocUnsafe(t),o=0;for(r=0;r<e.length;++r){var a=e[r];if(B(a,Uint8Array)&&(a=i.from(a)),!i.isBuffer(a))throw new TypeError('\"list\" argument must be an Array of Buffers');a.copy(n,o),o+=a.length}return n},i.byteLength=d,i.prototype._isBuffer=!0,i.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(var t=0;t<e;t+=2)h(this,t,t+1);return this},i.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(var t=0;t<e;t+=4)h(this,t,t+3),h(this,t+1,t+2);return this},i.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(var t=0;t<e;t+=8)h(this,t,t+7),h(this,t+1,t+6),h(this,t+2,t+5),h(this,t+3,t+4);return this},i.prototype.toString=function(){var e=this.length;return 0===e?\"\":0===arguments.length?C(this,0,e):f.apply(this,arguments)},i.prototype.toLocaleString=i.prototype.toString,i.prototype.equals=function(e){if(!i.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");return this===e||0===i.compare(this,e)},i.prototype.inspect=function(){var e=\"\",t=r.INSPECT_MAX_BYTES;return e=this.toString(\"hex\",0,t).replace(/(.{2})/g,\"$1 \").trim(),this.length>t&&(e+=\" ... \"),\"<Buffer \"+e+\">\"},i.prototype.compare=function(e,t,r,n,o){if(B(e,Uint8Array)&&(e=i.from(e,e.offset,e.byteLength)),!i.isBuffer(e))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),t<0||r>e.length||n<0||o>this.length)throw new RangeError(\"out of range index\");if(n>=o&&t>=r)return 0;if(n>=o)return-1;if(t>=r)return 1;if(this===e)return 0;for(var a=(o>>>=0)-(n>>>=0),s=(r>>>=0)-(t>>>=0),l=Math.min(a,s),c=this.slice(n,o),u=e.slice(t,r),d=0;d<l;++d)if(c[d]!==u[d]){a=c[d],s=u[d];break}return a<s?-1:s<a?1:0},i.prototype.includes=function(e,t,r){return-1!==this.indexOf(e,t,r)},i.prototype.indexOf=function(e,t,r){return p(this,e,t,r,!0)},i.prototype.lastIndexOf=function(e,t,r){return p(this,e,t,r,!1)},i.prototype.write=function(e,t,r,n){if(void 0===t)n=\"utf8\",r=this.length,t=0;else if(void 0===r&&\"string\"==typeof t)n=t,r=this.length,t=0;else{if(!isFinite(t))throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");t>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n=\"utf8\")):(n=r,r=void 0)}var o=this.length-t;if((void 0===r||r>o)&&(r=o),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");n||(n=\"utf8\");for(var i=!1;;)switch(n){case\"hex\":return g(this,e,t,r);case\"utf8\":case\"utf-8\":return v(this,e,t,r);case\"ascii\":return b(this,e,t,r);case\"latin1\":case\"binary\":return y(this,e,t,r);case\"base64\":return w(this,e,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return x(this,e,t,r);default:if(i)throw new TypeError(\"Unknown encoding: \"+n);n=(\"\"+n).toLowerCase(),i=!0}},i.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}},i.prototype.slice=function(e,t){var r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t<e&&(t=e);var n=this.subarray(e,t);return n.__proto__=i.prototype,n},i.prototype.readUIntLE=function(e,t,r){e>>>=0,t>>>=0,r||T(e,t,this.length);for(var n=this[e],o=1,i=0;++i<t&&(o*=256);)n+=this[e+i]*o;return n},i.prototype.readUIntBE=function(e,t,r){e>>>=0,t>>>=0,r||T(e,t,this.length);for(var n=this[e+--t],o=1;t>0&&(o*=256);)n+=this[e+--t]*o;return n},i.prototype.readUInt8=function(e,t){return e>>>=0,t||T(e,1,this.length),this[e]},i.prototype.readUInt16LE=function(e,t){return e>>>=0,t||T(e,2,this.length),this[e]|this[e+1]<<8},i.prototype.readUInt16BE=function(e,t){return e>>>=0,t||T(e,2,this.length),this[e]<<8|this[e+1]},i.prototype.readUInt32LE=function(e,t){return e>>>=0,t||T(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},i.prototype.readUInt32BE=function(e,t){return e>>>=0,t||T(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},i.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||T(e,t,this.length);for(var n=this[e],o=1,i=0;++i<t&&(o*=256);)n+=this[e+i]*o;return n>=(o*=128)&&(n-=Math.pow(2,8*t)),n},i.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||T(e,t,this.length);for(var n=t,o=1,i=this[e+--n];n>0&&(o*=256);)i+=this[e+--n]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*t)),i},i.prototype.readInt8=function(e,t){return e>>>=0,t||T(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},i.prototype.readInt16LE=function(e,t){e>>>=0,t||T(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},i.prototype.readInt16BE=function(e,t){e>>>=0,t||T(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},i.prototype.readInt32LE=function(e,t){return e>>>=0,t||T(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},i.prototype.readInt32BE=function(e,t){return e>>>=0,t||T(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},i.prototype.readFloatLE=function(e,t){return e>>>=0,t||T(e,4,this.length),n.read(this,e,!0,23,4)},i.prototype.readFloatBE=function(e,t){return e>>>=0,t||T(e,4,this.length),n.read(this,e,!1,23,4)},i.prototype.readDoubleLE=function(e,t){return e>>>=0,t||T(e,8,this.length),n.read(this,e,!0,52,8)},i.prototype.readDoubleBE=function(e,t){return e>>>=0,t||T(e,8,this.length),n.read(this,e,!1,52,8)},i.prototype.writeUIntLE=function(e,t,r,n){e=+e,t>>>=0,r>>>=0,n||j(this,e,t,r,Math.pow(2,8*r)-1,0);var o=1,i=0;for(this[t]=255&e;++i<r&&(o*=256);)this[t+i]=e/o&255;return t+r},i.prototype.writeUIntBE=function(e,t,r,n){e=+e,t>>>=0,r>>>=0,n||j(this,e,t,r,Math.pow(2,8*r)-1,0);var o=r-1,i=1;for(this[t+o]=255&e;--o>=0&&(i*=256);)this[t+o]=e/i&255;return t+r},i.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,1,255,0),this[t]=255&e,t+1},i.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},i.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},i.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},i.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},i.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var o=Math.pow(2,8*r-1);j(this,e,t,r,o-1,-o)}var i=0,a=1,s=0;for(this[t]=255&e;++i<r&&(a*=256);)e<0&&0===s&&0!==this[t+i-1]&&(s=1),this[t+i]=(e/a|0)-s&255;return t+r},i.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var o=Math.pow(2,8*r-1);j(this,e,t,r,o-1,-o)}var i=r-1,a=1,s=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/a|0)-s&255;return t+r},i.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},i.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},i.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},i.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},i.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},i.prototype.writeFloatLE=function(e,t,r){return M(this,e,t,!0,r)},i.prototype.writeFloatBE=function(e,t,r){return M(this,e,t,!1,r)},i.prototype.writeDoubleLE=function(e,t,r){return R(this,e,t,!0,r)},i.prototype.writeDoubleBE=function(e,t,r){return R(this,e,t,!1,r)},i.prototype.copy=function(e,t,r,n){if(!i.isBuffer(e))throw new TypeError(\"argument should be a Buffer\");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError(\"targetStart out of bounds\");if(r<0||r>=this.length)throw new RangeError(\"Index out of range\");if(n<0)throw new RangeError(\"sourceEnd out of bounds\");n>this.length&&(n=this.length),e.length-t<n-r&&(n=e.length-t+r);var o=n-r;if(this===e&&\"function\"==typeof Uint8Array.prototype.copyWithin)this.copyWithin(t,r,n);else if(this===e&&r<t&&t<n)for(var a=o-1;a>=0;--a)e[a+t]=this[a+r];else Uint8Array.prototype.set.call(e,this.subarray(r,n),t);return o},i.prototype.fill=function(e,t,r,n){if(\"string\"==typeof e){if(\"string\"==typeof t?(n=t,t=0,r=this.length):\"string\"==typeof r&&(n=r,r=this.length),void 0!==n&&\"string\"!=typeof n)throw new TypeError(\"encoding must be a string\");if(\"string\"==typeof n&&!i.isEncoding(n))throw new TypeError(\"Unknown encoding: \"+n);if(1===e.length){var o=e.charCodeAt(0);(\"utf8\"===n&&o<128||\"latin1\"===n)&&(e=o)}}else\"number\"==typeof e&&(e&=255);if(t<0||this.length<t||this.length<r)throw new RangeError(\"Out of range index\");if(r<=t)return this;var a;if(t>>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),\"number\"==typeof e)for(a=t;a<r;++a)this[a]=e;else{var s=i.isBuffer(e)?e:i.from(e,n),l=s.length;if(0===l)throw new TypeError('The value \"'+e+'\" is invalid for argument \"value\"');for(a=0;a<r-t;++a)this[a+t]=s[a%l]}return this};var _=/[^+/0-9A-Za-z-_]/g;function I(e){return e<16?\"0\"+e.toString(16):e.toString(16)}function N(e,t){var r;t=t||1/0;for(var n=e.length,o=null,i=[],a=0;a<n;++a){if((r=e.charCodeAt(a))>55295&&r<57344){if(!o){if(r>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===n){(t-=3)>-1&&i.push(239,191,189);continue}o=r;continue}if(r<56320){(t-=3)>-1&&i.push(239,191,189),o=r;continue}r=65536+(o-55296<<10|r-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,r<128){if((t-=1)<0)break;i.push(r)}else if(r<2048){if((t-=2)<0)break;i.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error(\"Invalid code point\");if((t-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function F(e){return t.toByteArray(function(e){if((e=(e=e.split(\"=\")[0]).trim().replace(_,\"\")).length<2)return\"\";for(;e.length%4!=0;)e+=\"=\";return e}(e))}function D(e,t,r,n){for(var o=0;o<n&&!(o+r>=t.length||o>=e.length);++o)t[o+r]=e[o];return o}function B(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function L(e){return e!=e}}).call(this)}).call(this,e(\"buffer\").Buffer)},{\"base64-js\":185,buffer:220,ieee754:439}],221:[function(e,t,r){\"use strict\";var n=e(\"safe-buffer\").Buffer,o=e(\"stream\").Transform,i=e(\"string_decoder\").StringDecoder;function a(e){o.call(this),this.hashMode=\"string\"==typeof e,this.hashMode?this[e]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}e(\"inherits\")(a,o),a.prototype.update=function(e,t,r){\"string\"==typeof e&&(e=n.from(e,t));var o=this._update(e);return this.hashMode?this:(r&&(o=this._toString(o,r)),o)},a.prototype.setAutoPadding=function(){},a.prototype.getAuthTag=function(){throw new Error(\"trying to get auth tag in unsupported state\")},a.prototype.setAuthTag=function(){throw new Error(\"trying to set auth tag in unsupported state\")},a.prototype.setAAD=function(){throw new Error(\"trying to set aad in unsupported state\")},a.prototype._transform=function(e,t,r){var n;try{this.hashMode?this._update(e):this.push(this._update(e))}catch(e){n=e}finally{r(n)}},a.prototype._flush=function(e){var t;try{this.push(this.__final())}catch(e){t=e}e(t)},a.prototype._finalOrDigest=function(e){var t=this.__final()||n.alloc(0);return e&&(t=this._toString(t,e,!0)),t},a.prototype._toString=function(e,t,r){if(this._decoder||(this._decoder=new i(t),this._encoding=t),this._encoding!==t)throw new Error(\"can't switch encodings\");var n=this._decoder.write(e);return r&&(n+=this._decoder.end()),n},t.exports=a},{inherits:440,\"safe-buffer\":494,stream:505,string_decoder:218}],222:[function(e,t,r){\"use strict\";var n=e(\"../internals/is-callable\"),o=e(\"../internals/try-to-string\"),i=TypeError;t.exports=function(e){if(n(e))return e;throw new i(o(e)+\" is not a function\")}},{\"../internals/is-callable\":285,\"../internals/try-to-string\":349}],223:[function(e,t,r){\"use strict\";var n=e(\"../internals/is-constructor\"),o=e(\"../internals/try-to-string\"),i=TypeError;t.exports=function(e){if(n(e))return e;throw new i(o(e)+\" is not a constructor\")}},{\"../internals/is-constructor\":286,\"../internals/try-to-string\":349}],224:[function(e,t,r){\"use strict\";var n=e(\"../internals/is-callable\"),o=String,i=TypeError;t.exports=function(e){if(\"object\"==typeof e||n(e))return e;throw new i(\"Can't set \"+o(e)+\" as a prototype\")}},{\"../internals/is-callable\":285}],225:[function(e,t,r){\"use strict\";var n=e(\"../internals/well-known-symbol\"),o=e(\"../internals/object-create\"),i=e(\"../internals/object-define-property\").f,a=n(\"unscopables\"),s=Array.prototype;void 0===s[a]&&i(s,a,{configurable:!0,value:o(null)}),t.exports=function(e){s[a][e]=!0}},{\"../internals/object-create\":306,\"../internals/object-define-property\":308,\"../internals/well-known-symbol\":357}],226:[function(e,t,r){\"use strict\";var n=e(\"../internals/object-is-prototype-of\"),o=TypeError;t.exports=function(e,t){if(n(t,e))return e;throw new o(\"Incorrect invocation\")}},{\"../internals/object-is-prototype-of\":314}],227:[function(e,t,r){\"use strict\";var n=e(\"../internals/is-object\"),o=String,i=TypeError;t.exports=function(e){if(n(e))return e;throw new i(o(e)+\" is not an object\")}},{\"../internals/is-object\":289}],228:[function(e,t,r){\"use strict\";var n=e(\"../internals/to-indexed-object\"),o=e(\"../internals/to-absolute-index\"),i=e(\"../internals/length-of-array-like\"),a=function(e){return function(t,r,a){var s,l=n(t),c=i(l),u=o(a,c);if(e&&r!=r){for(;c>u;)if((s=l[u++])!=s)return!0}else for(;c>u;u++)if((e||u in l)&&l[u]===r)return e||u||0;return!e&&-1}};t.exports={includes:a(!0),indexOf:a(!1)}},{\"../internals/length-of-array-like\":299,\"../internals/to-absolute-index\":340,\"../internals/to-indexed-object\":341}],229:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-bind-context\"),o=e(\"../internals/function-uncurry-this\"),i=e(\"../internals/indexed-object\"),a=e(\"../internals/to-object\"),s=e(\"../internals/length-of-array-like\"),l=e(\"../internals/array-species-create\"),c=o([].push),u=function(e){var t=1===e,r=2===e,o=3===e,u=4===e,d=6===e,f=7===e,h=5===e||d;return function(p,m,g,v){for(var b,y,w=a(p),x=i(w),S=n(m,g),C=s(x),k=0,E=v||l,O=t?E(p,C):r||f?E(p,0):void 0;C>k;k++)if((h||k in x)&&(y=S(b=x[k],k,w),e))if(t)O[k]=y;else if(y)switch(e){case 3:return!0;case 5:return b;case 6:return k;case 2:c(O,b)}else switch(e){case 4:return!1;case 7:c(O,b)}return d?-1:o||u?u:O}};t.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterReject:u(7)}},{\"../internals/array-species-create\":233,\"../internals/function-bind-context\":262,\"../internals/function-uncurry-this\":268,\"../internals/indexed-object\":280,\"../internals/length-of-array-like\":299,\"../internals/to-object\":344}],230:[function(e,t,r){\"use strict\";var n=e(\"../internals/to-absolute-index\"),o=e(\"../internals/length-of-array-like\"),i=e(\"../internals/create-property\"),a=Array,s=Math.max;t.exports=function(e,t,r){for(var l=o(e),c=n(t,l),u=n(void 0===r?l:r,l),d=a(s(u-c,0)),f=0;c<u;c++,f++)i(d,f,e[c]);return d.length=f,d}},{\"../internals/create-property\":243,\"../internals/length-of-array-like\":299,\"../internals/to-absolute-index\":340}],231:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-uncurry-this\");t.exports=n([].slice)},{\"../internals/function-uncurry-this\":268}],232:[function(e,t,r){\"use strict\";var n=e(\"../internals/is-array\"),o=e(\"../internals/is-constructor\"),i=e(\"../internals/is-object\"),a=e(\"../internals/well-known-symbol\")(\"species\"),s=Array;t.exports=function(e){var t;return n(e)&&(t=e.constructor,(o(t)&&(t===s||n(t.prototype))||i(t)&&null===(t=t[a]))&&(t=void 0)),void 0===t?s:t}},{\"../internals/is-array\":284,\"../internals/is-constructor\":286,\"../internals/is-object\":289,\"../internals/well-known-symbol\":357}],233:[function(e,t,r){\"use strict\";var n=e(\"../internals/array-species-constructor\");t.exports=function(e,t){return new(n(e))(0===t?0:t)}},{\"../internals/array-species-constructor\":232}],234:[function(e,t,r){\"use strict\";var n=e(\"../internals/well-known-symbol\")(\"iterator\"),o=!1;try{var i=0,a={next:function(){return{done:!!i++}},return:function(){o=!0}};a[n]=function(){return this},Array.from(a,(function(){throw 2}))}catch(e){}t.exports=function(e,t){try{if(!t&&!o)return!1}catch(e){return!1}var r=!1;try{var i={};i[n]=function(){return{next:function(){return{done:r=!0}}}},e(i)}catch(e){}return r}},{\"../internals/well-known-symbol\":357}],235:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-uncurry-this\"),o=n({}.toString),i=n(\"\".slice);t.exports=function(e){return i(o(e),8,-1)}},{\"../internals/function-uncurry-this\":268}],236:[function(e,t,r){\"use strict\";var n=e(\"../internals/to-string-tag-support\"),o=e(\"../internals/is-callable\"),i=e(\"../internals/classof-raw\"),a=e(\"../internals/well-known-symbol\")(\"toStringTag\"),s=Object,l=\"Arguments\"===i(function(){return arguments}());t.exports=n?i:function(e){var t,r,n;return void 0===e?\"Undefined\":null===e?\"Null\":\"string\"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=s(e),a))?r:l?i(t):\"Object\"===(n=i(t))&&o(t.callee)?\"Arguments\":n}},{\"../internals/classof-raw\":235,\"../internals/is-callable\":285,\"../internals/to-string-tag-support\":347,\"../internals/well-known-symbol\":357}],237:[function(e,t,r){\"use strict\";var n=e(\"../internals/has-own-property\"),o=e(\"../internals/own-keys\"),i=e(\"../internals/object-get-own-property-descriptor\"),a=e(\"../internals/object-define-property\");t.exports=function(e,t,r){for(var s=o(t),l=a.f,c=i.f,u=0;u<s.length;u++){var d=s[u];n(e,d)||r&&n(r,d)||l(e,d,c(t,d))}}},{\"../internals/has-own-property\":275,\"../internals/object-define-property\":308,\"../internals/object-get-own-property-descriptor\":309,\"../internals/own-keys\":321}],238:[function(e,t,r){\"use strict\";var n=e(\"../internals/well-known-symbol\")(\"match\");t.exports=function(e){var t=/./;try{\"/./\"[e](t)}catch(r){try{return t[n]=!1,\"/./\"[e](t)}catch(e){}}return!1}},{\"../internals/well-known-symbol\":357}],239:[function(e,t,r){\"use strict\";var n=e(\"../internals/fails\");t.exports=!n((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},{\"../internals/fails\":260}],240:[function(e,t,r){\"use strict\";t.exports=function(e,t){return{value:e,done:t}}},{}],241:[function(e,t,r){\"use strict\";var n=e(\"../internals/descriptors\"),o=e(\"../internals/object-define-property\"),i=e(\"../internals/create-property-descriptor\");t.exports=n?function(e,t,r){return o.f(e,t,i(1,r))}:function(e,t,r){return e[t]=r,e}},{\"../internals/create-property-descriptor\":242,\"../internals/descriptors\":247,\"../internals/object-define-property\":308}],242:[function(e,t,r){\"use strict\";t.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},{}],243:[function(e,t,r){\"use strict\";var n=e(\"../internals/to-property-key\"),o=e(\"../internals/object-define-property\"),i=e(\"../internals/create-property-descriptor\");t.exports=function(e,t,r){var a=n(t);a in e?o.f(e,a,i(0,r)):e[a]=r}},{\"../internals/create-property-descriptor\":242,\"../internals/object-define-property\":308,\"../internals/to-property-key\":346}],244:[function(e,t,r){\"use strict\";var n=e(\"../internals/make-built-in\"),o=e(\"../internals/object-define-property\");t.exports=function(e,t,r){return r.get&&n(r.get,t,{getter:!0}),r.set&&n(r.set,t,{setter:!0}),o.f(e,t,r)}},{\"../internals/make-built-in\":300,\"../internals/object-define-property\":308}],245:[function(e,t,r){\"use strict\";var n=e(\"../internals/is-callable\"),o=e(\"../internals/object-define-property\"),i=e(\"../internals/make-built-in\"),a=e(\"../internals/define-global-property\");t.exports=function(e,t,r,s){s||(s={});var l=s.enumerable,c=void 0!==s.name?s.name:t;if(n(r)&&i(r,c,s),s.global)l?e[t]=r:a(t,r);else{try{s.unsafe?e[t]&&(l=!0):delete e[t]}catch(e){}l?e[t]=r:o.f(e,t,{value:r,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return e}},{\"../internals/define-global-property\":246,\"../internals/is-callable\":285,\"../internals/make-built-in\":300,\"../internals/object-define-property\":308}],246:[function(e,t,r){\"use strict\";var n=e(\"../internals/global\"),o=Object.defineProperty;t.exports=function(e,t){try{o(n,e,{value:t,configurable:!0,writable:!0})}catch(r){n[e]=t}return t}},{\"../internals/global\":274}],247:[function(e,t,r){\"use strict\";var n=e(\"../internals/fails\");t.exports=!n((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}))},{\"../internals/fails\":260}],248:[function(e,t,r){\"use strict\";var n=\"object\"==typeof document&&document.all,o=void 0===n&&void 0!==n;t.exports={all:n,IS_HTMLDDA:o}},{}],249:[function(e,t,r){\"use strict\";var n=e(\"../internals/global\"),o=e(\"../internals/is-object\"),i=n.document,a=o(i)&&o(i.createElement);t.exports=function(e){return a?i.createElement(e):{}}},{\"../internals/global\":274,\"../internals/is-object\":289}],250:[function(e,t,r){\"use strict\";var n=e(\"../internals/engine-is-deno\"),o=e(\"../internals/engine-is-node\");t.exports=!n&&!o&&\"object\"==typeof window&&\"object\"==typeof document},{\"../internals/engine-is-deno\":251,\"../internals/engine-is-node\":254}],251:[function(e,t,r){\"use strict\";t.exports=\"object\"==typeof Deno&&Deno&&\"object\"==typeof Deno.version},{}],252:[function(e,t,r){\"use strict\";var n=e(\"../internals/engine-user-agent\");t.exports=/ipad|iphone|ipod/i.test(n)&&\"undefined\"!=typeof Pebble},{\"../internals/engine-user-agent\":256}],253:[function(e,t,r){\"use strict\";var n=e(\"../internals/engine-user-agent\");t.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(n)},{\"../internals/engine-user-agent\":256}],254:[function(e,t,r){\"use strict\";var n=e(\"../internals/global\"),o=e(\"../internals/classof-raw\");t.exports=\"process\"===o(n.process)},{\"../internals/classof-raw\":235,\"../internals/global\":274}],255:[function(e,t,r){\"use strict\";var n=e(\"../internals/engine-user-agent\");t.exports=/web0s(?!.*chrome)/i.test(n)},{\"../internals/engine-user-agent\":256}],256:[function(e,t,r){\"use strict\";t.exports=\"undefined\"!=typeof navigator&&String(navigator.userAgent)||\"\"},{}],257:[function(e,t,r){\"use strict\";var n,o,i=e(\"../internals/global\"),a=e(\"../internals/engine-user-agent\"),s=i.process,l=i.Deno,c=s&&s.versions||l&&l.version,u=c&&c.v8;u&&(o=(n=u.split(\".\"))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!o&&a&&(!(n=a.match(/Edge\\/(\\d+)/))||n[1]>=74)&&(n=a.match(/Chrome\\/(\\d+)/))&&(o=+n[1]),t.exports=o},{\"../internals/engine-user-agent\":256,\"../internals/global\":274}],258:[function(e,t,r){\"use strict\";t.exports=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"]},{}],259:[function(e,t,r){\"use strict\";var n=e(\"../internals/global\"),o=e(\"../internals/object-get-own-property-descriptor\").f,i=e(\"../internals/create-non-enumerable-property\"),a=e(\"../internals/define-built-in\"),s=e(\"../internals/define-global-property\"),l=e(\"../internals/copy-constructor-properties\"),c=e(\"../internals/is-forced\");t.exports=function(e,t){var r,u,d,f,h,p=e.target,m=e.global,g=e.stat;if(r=m?n:g?n[p]||s(p,{}):(n[p]||{}).prototype)for(u in t){if(f=t[u],d=e.dontCallGetSet?(h=o(r,u))&&h.value:r[u],!c(m?u:p+(g?\".\":\"#\")+u,e.forced)&&void 0!==d){if(typeof f==typeof d)continue;l(f,d)}(e.sham||d&&d.sham)&&i(f,\"sham\",!0),a(r,u,f,e)}}},{\"../internals/copy-constructor-properties\":237,\"../internals/create-non-enumerable-property\":241,\"../internals/define-built-in\":245,\"../internals/define-global-property\":246,\"../internals/global\":274,\"../internals/is-forced\":287,\"../internals/object-get-own-property-descriptor\":309}],260:[function(e,t,r){\"use strict\";t.exports=function(e){try{return!!e()}catch(e){return!0}}},{}],261:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-bind-native\"),o=Function.prototype,i=o.apply,a=o.call;t.exports=\"object\"==typeof Reflect&&Reflect.apply||(n?a.bind(i):function(){return a.apply(i,arguments)})},{\"../internals/function-bind-native\":263}],262:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-uncurry-this-clause\"),o=e(\"../internals/a-callable\"),i=e(\"../internals/function-bind-native\"),a=n(n.bind);t.exports=function(e,t){return o(e),void 0===t?e:i?a(e,t):function(){return e.apply(t,arguments)}}},{\"../internals/a-callable\":222,\"../internals/function-bind-native\":263,\"../internals/function-uncurry-this-clause\":267}],263:[function(e,t,r){\"use strict\";var n=e(\"../internals/fails\");t.exports=!n((function(){var e=function(){}.bind();return\"function\"!=typeof e||e.hasOwnProperty(\"prototype\")}))},{\"../internals/fails\":260}],264:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-bind-native\"),o=Function.prototype.call;t.exports=n?o.bind(o):function(){return o.apply(o,arguments)}},{\"../internals/function-bind-native\":263}],265:[function(e,t,r){\"use strict\";var n=e(\"../internals/descriptors\"),o=e(\"../internals/has-own-property\"),i=Function.prototype,a=n&&Object.getOwnPropertyDescriptor,s=o(i,\"name\"),l=s&&\"something\"===function(){}.name,c=s&&(!n||n&&a(i,\"name\").configurable);t.exports={EXISTS:s,PROPER:l,CONFIGURABLE:c}},{\"../internals/descriptors\":247,\"../internals/has-own-property\":275}],266:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-uncurry-this\"),o=e(\"../internals/a-callable\");t.exports=function(e,t,r){try{return n(o(Object.getOwnPropertyDescriptor(e,t)[r]))}catch(e){}}},{\"../internals/a-callable\":222,\"../internals/function-uncurry-this\":268}],267:[function(e,t,r){\"use strict\";var n=e(\"../internals/classof-raw\"),o=e(\"../internals/function-uncurry-this\");t.exports=function(e){if(\"Function\"===n(e))return o(e)}},{\"../internals/classof-raw\":235,\"../internals/function-uncurry-this\":268}],268:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-bind-native\"),o=Function.prototype,i=o.call,a=n&&o.bind.bind(i,i);t.exports=n?a:function(e){return function(){return i.apply(e,arguments)}}},{\"../internals/function-bind-native\":263}],269:[function(e,t,r){\"use strict\";var n=e(\"../internals/global\"),o=e(\"../internals/is-callable\");t.exports=function(e,t){return arguments.length<2?function(e){return o(e)?e:void 0}(n[e]):n[e]&&n[e][t]}},{\"../internals/global\":274,\"../internals/is-callable\":285}],270:[function(e,t,r){\"use strict\";var n=e(\"../internals/classof\"),o=e(\"../internals/get-method\"),i=e(\"../internals/is-null-or-undefined\"),a=e(\"../internals/iterators\"),s=e(\"../internals/well-known-symbol\")(\"iterator\");t.exports=function(e){if(!i(e))return o(e,s)||o(e,\"@@iterator\")||a[n(e)]}},{\"../internals/classof\":236,\"../internals/get-method\":273,\"../internals/is-null-or-undefined\":288,\"../internals/iterators\":298,\"../internals/well-known-symbol\":357}],271:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-call\"),o=e(\"../internals/a-callable\"),i=e(\"../internals/an-object\"),a=e(\"../internals/try-to-string\"),s=e(\"../internals/get-iterator-method\"),l=TypeError;t.exports=function(e,t){var r=arguments.length<2?s(e):t;if(o(r))return i(n(r,e));throw new l(a(e)+\" is not iterable\")}},{\"../internals/a-callable\":222,\"../internals/an-object\":227,\"../internals/function-call\":264,\"../internals/get-iterator-method\":270,\"../internals/try-to-string\":349}],272:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-uncurry-this\"),o=e(\"../internals/is-array\"),i=e(\"../internals/is-callable\"),a=e(\"../internals/classof-raw\"),s=e(\"../internals/to-string\"),l=n([].push);t.exports=function(e){if(i(e))return e;if(o(e)){for(var t=e.length,r=[],n=0;n<t;n++){var c=e[n];\"string\"==typeof c?l(r,c):\"number\"!=typeof c&&\"Number\"!==a(c)&&\"String\"!==a(c)||l(r,s(c))}var u=r.length,d=!0;return function(e,t){if(d)return d=!1,t;if(o(this))return t;for(var n=0;n<u;n++)if(r[n]===e)return t}}}},{\"../internals/classof-raw\":235,\"../internals/function-uncurry-this\":268,\"../internals/is-array\":284,\"../internals/is-callable\":285,\"../internals/to-string\":348}],273:[function(e,t,r){\"use strict\";var n=e(\"../internals/a-callable\"),o=e(\"../internals/is-null-or-undefined\");t.exports=function(e,t){var r=e[t];return o(r)?void 0:n(r)}},{\"../internals/a-callable\":222,\"../internals/is-null-or-undefined\":288}],274:[function(e,t,n){(function(e){(function(){\"use strict\";var r=function(e){return e&&e.Math===Math&&e};t.exports=r(\"object\"==typeof globalThis&&globalThis)||r(\"object\"==typeof window&&window)||r(\"object\"==typeof self&&self)||r(\"object\"==typeof e&&e)||function(){return this}()||this||Function(\"return this\")()}).call(this)}).call(this,void 0!==r.g?r.g:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],275:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-uncurry-this\"),o=e(\"../internals/to-object\"),i=n({}.hasOwnProperty);t.exports=Object.hasOwn||function(e,t){return i(o(e),t)}},{\"../internals/function-uncurry-this\":268,\"../internals/to-object\":344}],276:[function(e,t,r){\"use strict\";t.exports={}},{}],277:[function(e,t,r){\"use strict\";t.exports=function(e,t){try{1===arguments.length?console.error(e):console.error(e,t)}catch(e){}}},{}],278:[function(e,t,r){\"use strict\";var n=e(\"../internals/get-built-in\");t.exports=n(\"document\",\"documentElement\")},{\"../internals/get-built-in\":269}],279:[function(e,t,r){\"use strict\";var n=e(\"../internals/descriptors\"),o=e(\"../internals/fails\"),i=e(\"../internals/document-create-element\");t.exports=!n&&!o((function(){return 7!==Object.defineProperty(i(\"div\"),\"a\",{get:function(){return 7}}).a}))},{\"../internals/descriptors\":247,\"../internals/document-create-element\":249,\"../internals/fails\":260}],280:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-uncurry-this\"),o=e(\"../internals/fails\"),i=e(\"../internals/classof-raw\"),a=Object,s=n(\"\".split);t.exports=o((function(){return!a(\"z\").propertyIsEnumerable(0)}))?function(e){return\"String\"===i(e)?s(e,\"\"):a(e)}:a},{\"../internals/classof-raw\":235,\"../internals/fails\":260,\"../internals/function-uncurry-this\":268}],281:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-uncurry-this\"),o=e(\"../internals/is-callable\"),i=e(\"../internals/shared-store\"),a=n(Function.toString);o(i.inspectSource)||(i.inspectSource=function(e){return a(e)}),t.exports=i.inspectSource},{\"../internals/function-uncurry-this\":268,\"../internals/is-callable\":285,\"../internals/shared-store\":333}],282:[function(e,t,r){\"use strict\";var n,o,i,a=e(\"../internals/weak-map-basic-detection\"),s=e(\"../internals/global\"),l=e(\"../internals/is-object\"),c=e(\"../internals/create-non-enumerable-property\"),u=e(\"../internals/has-own-property\"),d=e(\"../internals/shared-store\"),f=e(\"../internals/shared-key\"),h=e(\"../internals/hidden-keys\"),p=s.TypeError,m=s.WeakMap;if(a||d.state){var g=d.state||(d.state=new m);g.get=g.get,g.has=g.has,g.set=g.set,n=function(e,t){if(g.has(e))throw new p(\"Object already initialized\");return t.facade=e,g.set(e,t),t},o=function(e){return g.get(e)||{}},i=function(e){return g.has(e)}}else{var v=f(\"state\");h[v]=!0,n=function(e,t){if(u(e,v))throw new p(\"Object already initialized\");return t.facade=e,c(e,v,t),t},o=function(e){return u(e,v)?e[v]:{}},i=function(e){return u(e,v)}}t.exports={set:n,get:o,has:i,enforce:function(e){return i(e)?o(e):n(e,{})},getterFor:function(e){return function(t){var r;if(!l(t)||(r=o(t)).type!==e)throw new p(\"Incompatible receiver, \"+e+\" required\");return r}}}},{\"../internals/create-non-enumerable-property\":241,\"../internals/global\":274,\"../internals/has-own-property\":275,\"../internals/hidden-keys\":276,\"../internals/is-object\":289,\"../internals/shared-key\":332,\"../internals/shared-store\":333,\"../internals/weak-map-basic-detection\":354}],283:[function(e,t,r){\"use strict\";var n=e(\"../internals/well-known-symbol\"),o=e(\"../internals/iterators\"),i=n(\"iterator\"),a=Array.prototype;t.exports=function(e){return void 0!==e&&(o.Array===e||a[i]===e)}},{\"../internals/iterators\":298,\"../internals/well-known-symbol\":357}],284:[function(e,t,r){\"use strict\";var n=e(\"../internals/classof-raw\");t.exports=Array.isArray||function(e){return\"Array\"===n(e)}},{\"../internals/classof-raw\":235}],285:[function(e,t,r){\"use strict\";var n=e(\"../internals/document-all\"),o=n.all;t.exports=n.IS_HTMLDDA?function(e){return\"function\"==typeof e||e===o}:function(e){return\"function\"==typeof e}},{\"../internals/document-all\":248}],286:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-uncurry-this\"),o=e(\"../internals/fails\"),i=e(\"../internals/is-callable\"),a=e(\"../internals/classof\"),s=e(\"../internals/get-built-in\"),l=e(\"../internals/inspect-source\"),c=function(){},u=[],d=s(\"Reflect\",\"construct\"),f=/^\\s*(?:class|function)\\b/,h=n(f.exec),p=!f.test(c),m=function(e){if(!i(e))return!1;try{return d(c,u,e),!0}catch(e){return!1}},g=function(e){if(!i(e))return!1;switch(a(e)){case\"AsyncFunction\":case\"GeneratorFunction\":case\"AsyncGeneratorFunction\":return!1}try{return p||!!h(f,l(e))}catch(e){return!0}};g.sham=!0,t.exports=!d||o((function(){var e;return m(m.call)||!m(Object)||!m((function(){e=!0}))||e}))?g:m},{\"../internals/classof\":236,\"../internals/fails\":260,\"../internals/function-uncurry-this\":268,\"../internals/get-built-in\":269,\"../internals/inspect-source\":281,\"../internals/is-callable\":285}],287:[function(e,t,r){\"use strict\";var n=e(\"../internals/fails\"),o=e(\"../internals/is-callable\"),i=/#|\\.prototype\\./,a=function(e,t){var r=l[s(e)];return r===u||r!==c&&(o(t)?n(t):!!t)},s=a.normalize=function(e){return String(e).replace(i,\".\").toLowerCase()},l=a.data={},c=a.NATIVE=\"N\",u=a.POLYFILL=\"P\";t.exports=a},{\"../internals/fails\":260,\"../internals/is-callable\":285}],288:[function(e,t,r){\"use strict\";t.exports=function(e){return null==e}},{}],289:[function(e,t,r){\"use strict\";var n=e(\"../internals/is-callable\"),o=e(\"../internals/document-all\"),i=o.all;t.exports=o.IS_HTMLDDA?function(e){return\"object\"==typeof e?null!==e:n(e)||e===i}:function(e){return\"object\"==typeof e?null!==e:n(e)}},{\"../internals/document-all\":248,\"../internals/is-callable\":285}],290:[function(e,t,r){\"use strict\";t.exports=!1},{}],291:[function(e,t,r){\"use strict\";var n=e(\"../internals/is-object\"),o=e(\"../internals/classof-raw\"),i=e(\"../internals/well-known-symbol\")(\"match\");t.exports=function(e){var t;return n(e)&&(void 0!==(t=e[i])?!!t:\"RegExp\"===o(e))}},{\"../internals/classof-raw\":235,\"../internals/is-object\":289,\"../internals/well-known-symbol\":357}],292:[function(e,t,r){\"use strict\";var n=e(\"../internals/get-built-in\"),o=e(\"../internals/is-callable\"),i=e(\"../internals/object-is-prototype-of\"),a=e(\"../internals/use-symbol-as-uid\"),s=Object;t.exports=a?function(e){return\"symbol\"==typeof e}:function(e){var t=n(\"Symbol\");return o(t)&&i(t.prototype,s(e))}},{\"../internals/get-built-in\":269,\"../internals/is-callable\":285,\"../internals/object-is-prototype-of\":314,\"../internals/use-symbol-as-uid\":351}],293:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-bind-context\"),o=e(\"../internals/function-call\"),i=e(\"../internals/an-object\"),a=e(\"../internals/try-to-string\"),s=e(\"../internals/is-array-iterator-method\"),l=e(\"../internals/length-of-array-like\"),c=e(\"../internals/object-is-prototype-of\"),u=e(\"../internals/get-iterator\"),d=e(\"../internals/get-iterator-method\"),f=e(\"../internals/iterator-close\"),h=TypeError,p=function(e,t){this.stopped=e,this.result=t},m=p.prototype;t.exports=function(e,t,r){var g,v,b,y,w,x,S,C=r&&r.that,k=!(!r||!r.AS_ENTRIES),E=!(!r||!r.IS_RECORD),O=!(!r||!r.IS_ITERATOR),A=!(!r||!r.INTERRUPTED),T=n(t,C),j=function(e){return g&&f(g,\"normal\",e),new p(!0,e)},P=function(e){return k?(i(e),A?T(e[0],e[1],j):T(e[0],e[1])):A?T(e,j):T(e)};if(E)g=e.iterator;else if(O)g=e;else{if(!(v=d(e)))throw new h(a(e)+\" is not iterable\");if(s(v)){for(b=0,y=l(e);y>b;b++)if((w=P(e[b]))&&c(m,w))return w;return new p(!1)}g=u(e,v)}for(x=E?e.next:g.next;!(S=o(x,g)).done;){try{w=P(S.value)}catch(e){f(g,\"throw\",e)}if(\"object\"==typeof w&&w&&c(m,w))return w}return new p(!1)}},{\"../internals/an-object\":227,\"../internals/function-bind-context\":262,\"../internals/function-call\":264,\"../internals/get-iterator\":271,\"../internals/get-iterator-method\":270,\"../internals/is-array-iterator-method\":283,\"../internals/iterator-close\":294,\"../internals/length-of-array-like\":299,\"../internals/object-is-prototype-of\":314,\"../internals/try-to-string\":349}],294:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-call\"),o=e(\"../internals/an-object\"),i=e(\"../internals/get-method\");t.exports=function(e,t,r){var a,s;o(e);try{if(!(a=i(e,\"return\"))){if(\"throw\"===t)throw r;return r}a=n(a,e)}catch(e){s=!0,a=e}if(\"throw\"===t)throw r;if(s)throw a;return o(a),r}},{\"../internals/an-object\":227,\"../internals/function-call\":264,\"../internals/get-method\":273}],295:[function(e,t,r){\"use strict\";var n=e(\"../internals/iterators-core\").IteratorPrototype,o=e(\"../internals/object-create\"),i=e(\"../internals/create-property-descriptor\"),a=e(\"../internals/set-to-string-tag\"),s=e(\"../internals/iterators\"),l=function(){return this};t.exports=function(e,t,r,c){var u=t+\" Iterator\";return e.prototype=o(n,{next:i(+!c,r)}),a(e,u,!1,!0),s[u]=l,e}},{\"../internals/create-property-descriptor\":242,\"../internals/iterators\":298,\"../internals/iterators-core\":297,\"../internals/object-create\":306,\"../internals/set-to-string-tag\":331}],296:[function(e,t,r){\"use strict\";var n=e(\"../internals/export\"),o=e(\"../internals/function-call\"),i=e(\"../internals/is-pure\"),a=e(\"../internals/function-name\"),s=e(\"../internals/is-callable\"),l=e(\"../internals/iterator-create-constructor\"),c=e(\"../internals/object-get-prototype-of\"),u=e(\"../internals/object-set-prototype-of\"),d=e(\"../internals/set-to-string-tag\"),f=e(\"../internals/create-non-enumerable-property\"),h=e(\"../internals/define-built-in\"),p=e(\"../internals/well-known-symbol\"),m=e(\"../internals/iterators\"),g=e(\"../internals/iterators-core\"),v=a.PROPER,b=a.CONFIGURABLE,y=g.IteratorPrototype,w=g.BUGGY_SAFARI_ITERATORS,x=p(\"iterator\"),S=function(){return this};t.exports=function(e,t,r,a,p,g,C){l(r,t,a);var k,E,O,A=function(e){if(e===p&&R)return R;if(!w&&e&&e in P)return P[e];switch(e){case\"keys\":case\"values\":case\"entries\":return function(){return new r(this,e)}}return function(){return new r(this)}},T=t+\" Iterator\",j=!1,P=e.prototype,M=P[x]||P[\"@@iterator\"]||p&&P[p],R=!w&&M||A(p),_=\"Array\"===t&&P.entries||M;if(_&&(k=c(_.call(new e)))!==Object.prototype&&k.next&&(i||c(k)===y||(u?u(k,y):s(k[x])||h(k,x,S)),d(k,T,!0,!0),i&&(m[T]=S)),v&&\"values\"===p&&M&&\"values\"!==M.name&&(!i&&b?f(P,\"name\",\"values\"):(j=!0,R=function(){return o(M,this)})),p)if(E={values:A(\"values\"),keys:g?R:A(\"keys\"),entries:A(\"entries\")},C)for(O in E)(w||j||!(O in P))&&h(P,O,E[O]);else n({target:t,proto:!0,forced:w||j},E);return i&&!C||P[x]===R||h(P,x,R,{name:p}),m[t]=R,E}},{\"../internals/create-non-enumerable-property\":241,\"../internals/define-built-in\":245,\"../internals/export\":259,\"../internals/function-call\":264,\"../internals/function-name\":265,\"../internals/is-callable\":285,\"../internals/is-pure\":290,\"../internals/iterator-create-constructor\":295,\"../internals/iterators\":298,\"../internals/iterators-core\":297,\"../internals/object-get-prototype-of\":313,\"../internals/object-set-prototype-of\":318,\"../internals/set-to-string-tag\":331,\"../internals/well-known-symbol\":357}],297:[function(e,t,r){\"use strict\";var n,o,i,a=e(\"../internals/fails\"),s=e(\"../internals/is-callable\"),l=e(\"../internals/is-object\"),c=e(\"../internals/object-create\"),u=e(\"../internals/object-get-prototype-of\"),d=e(\"../internals/define-built-in\"),f=e(\"../internals/well-known-symbol\"),h=e(\"../internals/is-pure\"),p=f(\"iterator\"),m=!1;[].keys&&(\"next\"in(i=[].keys())?(o=u(u(i)))!==Object.prototype&&(n=o):m=!0),!l(n)||a((function(){var e={};return n[p].call(e)!==e}))?n={}:h&&(n=c(n)),s(n[p])||d(n,p,(function(){return this})),t.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:m}},{\"../internals/define-built-in\":245,\"../internals/fails\":260,\"../internals/is-callable\":285,\"../internals/is-object\":289,\"../internals/is-pure\":290,\"../internals/object-create\":306,\"../internals/object-get-prototype-of\":313,\"../internals/well-known-symbol\":357}],298:[function(e,t,r){arguments[4][276][0].apply(r,arguments)},{dup:276}],299:[function(e,t,r){\"use strict\";var n=e(\"../internals/to-length\");t.exports=function(e){return n(e.length)}},{\"../internals/to-length\":343}],300:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-uncurry-this\"),o=e(\"../internals/fails\"),i=e(\"../internals/is-callable\"),a=e(\"../internals/has-own-property\"),s=e(\"../internals/descriptors\"),l=e(\"../internals/function-name\").CONFIGURABLE,c=e(\"../internals/inspect-source\"),u=e(\"../internals/internal-state\"),d=u.enforce,f=u.get,h=String,p=Object.defineProperty,m=n(\"\".slice),g=n(\"\".replace),v=n([].join),b=s&&!o((function(){return 8!==p((function(){}),\"length\",{value:8}).length})),y=String(String).split(\"String\"),w=t.exports=function(e,t,r){\"Symbol(\"===m(h(t),0,7)&&(t=\"[\"+g(h(t),/^Symbol\\(([^)]*)\\)/,\"$1\")+\"]\"),r&&r.getter&&(t=\"get \"+t),r&&r.setter&&(t=\"set \"+t),(!a(e,\"name\")||l&&e.name!==t)&&(s?p(e,\"name\",{value:t,configurable:!0}):e.name=t),b&&r&&a(r,\"arity\")&&e.length!==r.arity&&p(e,\"length\",{value:r.arity});try{r&&a(r,\"constructor\")&&r.constructor?s&&p(e,\"prototype\",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var n=d(e);return a(n,\"source\")||(n.source=v(y,\"string\"==typeof t?t:\"\")),e};Function.prototype.toString=w((function(){return i(this)&&f(this).source||c(this)}),\"toString\")},{\"../internals/descriptors\":247,\"../internals/fails\":260,\"../internals/function-name\":265,\"../internals/function-uncurry-this\":268,\"../internals/has-own-property\":275,\"../internals/inspect-source\":281,\"../internals/internal-state\":282,\"../internals/is-callable\":285}],301:[function(e,t,r){\"use strict\";var n=Math.ceil,o=Math.floor;t.exports=Math.trunc||function(e){var t=+e;return(t>0?o:n)(t)}},{}],302:[function(e,t,r){\"use strict\";var n,o,i,a,s,l=e(\"../internals/global\"),c=e(\"../internals/function-bind-context\"),u=e(\"../internals/object-get-own-property-descriptor\").f,d=e(\"../internals/task\").set,f=e(\"../internals/queue\"),h=e(\"../internals/engine-is-ios\"),p=e(\"../internals/engine-is-ios-pebble\"),m=e(\"../internals/engine-is-webos-webkit\"),g=e(\"../internals/engine-is-node\"),v=l.MutationObserver||l.WebKitMutationObserver,b=l.document,y=l.process,w=l.Promise,x=u(l,\"queueMicrotask\"),S=x&&x.value;if(!S){var C=new f,k=function(){var e,t;for(g&&(e=y.domain)&&e.exit();t=C.get();)try{t()}catch(e){throw C.head&&n(),e}e&&e.enter()};h||g||m||!v||!b?!p&&w&&w.resolve?((a=w.resolve(void 0)).constructor=w,s=c(a.then,a),n=function(){s(k)}):g?n=function(){y.nextTick(k)}:(d=c(d,l),n=function(){d(k)}):(o=!0,i=b.createTextNode(\"\"),new v(k).observe(i,{characterData:!0}),n=function(){i.data=o=!o}),S=function(e){C.head||n(),C.add(e)}}t.exports=S},{\"../internals/engine-is-ios\":253,\"../internals/engine-is-ios-pebble\":252,\"../internals/engine-is-node\":254,\"../internals/engine-is-webos-webkit\":255,\"../internals/function-bind-context\":262,\"../internals/global\":274,\"../internals/object-get-own-property-descriptor\":309,\"../internals/queue\":328,\"../internals/task\":339}],303:[function(e,t,r){\"use strict\";var n=e(\"../internals/a-callable\"),o=TypeError,i=function(e){var t,r;this.promise=new e((function(e,n){if(void 0!==t||void 0!==r)throw new o(\"Bad Promise constructor\");t=e,r=n})),this.resolve=n(t),this.reject=n(r)};t.exports.f=function(e){return new i(e)}},{\"../internals/a-callable\":222}],304:[function(e,t,r){\"use strict\";var n=e(\"../internals/is-regexp\"),o=TypeError;t.exports=function(e){if(n(e))throw new o(\"The method doesn't accept regular expressions\");return e}},{\"../internals/is-regexp\":291}],305:[function(e,t,r){\"use strict\";var n=e(\"../internals/descriptors\"),o=e(\"../internals/function-uncurry-this\"),i=e(\"../internals/function-call\"),a=e(\"../internals/fails\"),s=e(\"../internals/object-keys\"),l=e(\"../internals/object-get-own-property-symbols\"),c=e(\"../internals/object-property-is-enumerable\"),u=e(\"../internals/to-object\"),d=e(\"../internals/indexed-object\"),f=Object.assign,h=Object.defineProperty,p=o([].concat);t.exports=!f||a((function(){if(n&&1!==f({b:1},f(h({},\"a\",{enumerable:!0,get:function(){h(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},r=Symbol(\"assign detection\");return e[r]=7,\"abcdefghijklmnopqrst\".split(\"\").forEach((function(e){t[e]=e})),7!==f({},e)[r]||\"abcdefghijklmnopqrst\"!==s(f({},t)).join(\"\")}))?function(e,t){for(var r=u(e),o=arguments.length,a=1,f=l.f,h=c.f;o>a;)for(var m,g=d(arguments[a++]),v=f?p(s(g),f(g)):s(g),b=v.length,y=0;b>y;)m=v[y++],n&&!i(h,g,m)||(r[m]=g[m]);return r}:f},{\"../internals/descriptors\":247,\"../internals/fails\":260,\"../internals/function-call\":264,\"../internals/function-uncurry-this\":268,\"../internals/indexed-object\":280,\"../internals/object-get-own-property-symbols\":312,\"../internals/object-keys\":316,\"../internals/object-property-is-enumerable\":317,\"../internals/to-object\":344}],306:[function(e,t,r){\"use strict\";var n,o=e(\"../internals/an-object\"),i=e(\"../internals/object-define-properties\"),a=e(\"../internals/enum-bug-keys\"),s=e(\"../internals/hidden-keys\"),l=e(\"../internals/html\"),c=e(\"../internals/document-create-element\"),u=e(\"../internals/shared-key\")(\"IE_PROTO\"),d=function(){},f=function(e){return\"<script>\"+e+\"<\\/script>\"},h=function(e){e.write(f(\"\")),e.close();var t=e.parentWindow.Object;return e=null,t},p=function(){try{n=new ActiveXObject(\"htmlfile\")}catch(e){}var e,t;p=\"undefined\"!=typeof document?document.domain&&n?h(n):((t=c(\"iframe\")).style.display=\"none\",l.appendChild(t),t.src=String(\"javascript:\"),(e=t.contentWindow.document).open(),e.write(f(\"document.F=Object\")),e.close(),e.F):h(n);for(var r=a.length;r--;)delete p.prototype[a[r]];return p()};s[u]=!0,t.exports=Object.create||function(e,t){var r;return null!==e?(d.prototype=o(e),r=new d,d.prototype=null,r[u]=e):r=p(),void 0===t?r:i.f(r,t)}},{\"../internals/an-object\":227,\"../internals/document-create-element\":249,\"../internals/enum-bug-keys\":258,\"../internals/hidden-keys\":276,\"../internals/html\":278,\"../internals/object-define-properties\":307,\"../internals/shared-key\":332}],307:[function(e,t,r){\"use strict\";var n=e(\"../internals/descriptors\"),o=e(\"../internals/v8-prototype-define-bug\"),i=e(\"../internals/object-define-property\"),a=e(\"../internals/an-object\"),s=e(\"../internals/to-indexed-object\"),l=e(\"../internals/object-keys\");r.f=n&&!o?Object.defineProperties:function(e,t){a(e);for(var r,n=s(t),o=l(t),c=o.length,u=0;c>u;)i.f(e,r=o[u++],n[r]);return e}},{\"../internals/an-object\":227,\"../internals/descriptors\":247,\"../internals/object-define-property\":308,\"../internals/object-keys\":316,\"../internals/to-indexed-object\":341,\"../internals/v8-prototype-define-bug\":352}],308:[function(e,t,r){\"use strict\";var n=e(\"../internals/descriptors\"),o=e(\"../internals/ie8-dom-define\"),i=e(\"../internals/v8-prototype-define-bug\"),a=e(\"../internals/an-object\"),s=e(\"../internals/to-property-key\"),l=TypeError,c=Object.defineProperty,u=Object.getOwnPropertyDescriptor;r.f=n?i?function(e,t,r){if(a(e),t=s(t),a(r),\"function\"==typeof e&&\"prototype\"===t&&\"value\"in r&&\"writable\"in r&&!r.writable){var n=u(e,t);n&&n.writable&&(e[t]=r.value,r={configurable:\"configurable\"in r?r.configurable:n.configurable,enumerable:\"enumerable\"in r?r.enumerable:n.enumerable,writable:!1})}return c(e,t,r)}:c:function(e,t,r){if(a(e),t=s(t),a(r),o)try{return c(e,t,r)}catch(e){}if(\"get\"in r||\"set\"in r)throw new l(\"Accessors not supported\");return\"value\"in r&&(e[t]=r.value),e}},{\"../internals/an-object\":227,\"../internals/descriptors\":247,\"../internals/ie8-dom-define\":279,\"../internals/to-property-key\":346,\"../internals/v8-prototype-define-bug\":352}],309:[function(e,t,r){\"use strict\";var n=e(\"../internals/descriptors\"),o=e(\"../internals/function-call\"),i=e(\"../internals/object-property-is-enumerable\"),a=e(\"../internals/create-property-descriptor\"),s=e(\"../internals/to-indexed-object\"),l=e(\"../internals/to-property-key\"),c=e(\"../internals/has-own-property\"),u=e(\"../internals/ie8-dom-define\"),d=Object.getOwnPropertyDescriptor;r.f=n?d:function(e,t){if(e=s(e),t=l(t),u)try{return d(e,t)}catch(e){}if(c(e,t))return a(!o(i.f,e,t),e[t])}},{\"../internals/create-property-descriptor\":242,\"../internals/descriptors\":247,\"../internals/function-call\":264,\"../internals/has-own-property\":275,\"../internals/ie8-dom-define\":279,\"../internals/object-property-is-enumerable\":317,\"../internals/to-indexed-object\":341,\"../internals/to-property-key\":346}],310:[function(e,t,r){\"use strict\";var n=e(\"../internals/classof-raw\"),o=e(\"../internals/to-indexed-object\"),i=e(\"../internals/object-get-own-property-names\").f,a=e(\"../internals/array-slice-simple\"),s=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(e){return s&&\"Window\"===n(e)?function(e){try{return i(e)}catch(e){return a(s)}}(e):i(o(e))}},{\"../internals/array-slice-simple\":230,\"../internals/classof-raw\":235,\"../internals/object-get-own-property-names\":311,\"../internals/to-indexed-object\":341}],311:[function(e,t,r){\"use strict\";var n=e(\"../internals/object-keys-internal\"),o=e(\"../internals/enum-bug-keys\").concat(\"length\",\"prototype\");r.f=Object.getOwnPropertyNames||function(e){return n(e,o)}},{\"../internals/enum-bug-keys\":258,\"../internals/object-keys-internal\":315}],312:[function(e,t,r){\"use strict\";r.f=Object.getOwnPropertySymbols},{}],313:[function(e,t,r){\"use strict\";var n=e(\"../internals/has-own-property\"),o=e(\"../internals/is-callable\"),i=e(\"../internals/to-object\"),a=e(\"../internals/shared-key\"),s=e(\"../internals/correct-prototype-getter\"),l=a(\"IE_PROTO\"),c=Object,u=c.prototype;t.exports=s?c.getPrototypeOf:function(e){var t=i(e);if(n(t,l))return t[l];var r=t.constructor;return o(r)&&t instanceof r?r.prototype:t instanceof c?u:null}},{\"../internals/correct-prototype-getter\":239,\"../internals/has-own-property\":275,\"../internals/is-callable\":285,\"../internals/shared-key\":332,\"../internals/to-object\":344}],314:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-uncurry-this\");t.exports=n({}.isPrototypeOf)},{\"../internals/function-uncurry-this\":268}],315:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-uncurry-this\"),o=e(\"../internals/has-own-property\"),i=e(\"../internals/to-indexed-object\"),a=e(\"../internals/array-includes\").indexOf,s=e(\"../internals/hidden-keys\"),l=n([].push);t.exports=function(e,t){var r,n=i(e),c=0,u=[];for(r in n)!o(s,r)&&o(n,r)&&l(u,r);for(;t.length>c;)o(n,r=t[c++])&&(~a(u,r)||l(u,r));return u}},{\"../internals/array-includes\":228,\"../internals/function-uncurry-this\":268,\"../internals/has-own-property\":275,\"../internals/hidden-keys\":276,\"../internals/to-indexed-object\":341}],316:[function(e,t,r){\"use strict\";var n=e(\"../internals/object-keys-internal\"),o=e(\"../internals/enum-bug-keys\");t.exports=Object.keys||function(e){return n(e,o)}},{\"../internals/enum-bug-keys\":258,\"../internals/object-keys-internal\":315}],317:[function(e,t,r){\"use strict\";var n={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!n.call({1:2},1);r.f=i?function(e){var t=o(this,e);return!!t&&t.enumerable}:n},{}],318:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-uncurry-this-accessor\"),o=e(\"../internals/an-object\"),i=e(\"../internals/a-possible-prototype\");t.exports=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var e,t=!1,r={};try{(e=n(Object.prototype,\"__proto__\",\"set\"))(r,[]),t=r instanceof Array}catch(e){}return function(r,n){return o(r),i(n),t?e(r,n):r.__proto__=n,r}}():void 0)},{\"../internals/a-possible-prototype\":224,\"../internals/an-object\":227,\"../internals/function-uncurry-this-accessor\":266}],319:[function(e,t,r){\"use strict\";var n=e(\"../internals/descriptors\"),o=e(\"../internals/fails\"),i=e(\"../internals/function-uncurry-this\"),a=e(\"../internals/object-get-prototype-of\"),s=e(\"../internals/object-keys\"),l=e(\"../internals/to-indexed-object\"),c=i(e(\"../internals/object-property-is-enumerable\").f),u=i([].push),d=n&&o((function(){var e=Object.create(null);return e[2]=2,!c(e,2)})),f=function(e){return function(t){for(var r,o=l(t),i=s(o),f=d&&null===a(o),h=i.length,p=0,m=[];h>p;)r=i[p++],n&&!(f?r in o:c(o,r))||u(m,e?[r,o[r]]:o[r]);return m}};t.exports={entries:f(!0),values:f(!1)}},{\"../internals/descriptors\":247,\"../internals/fails\":260,\"../internals/function-uncurry-this\":268,\"../internals/object-get-prototype-of\":313,\"../internals/object-keys\":316,\"../internals/object-property-is-enumerable\":317,\"../internals/to-indexed-object\":341}],320:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-call\"),o=e(\"../internals/is-callable\"),i=e(\"../internals/is-object\"),a=TypeError;t.exports=function(e,t){var r,s;if(\"string\"===t&&o(r=e.toString)&&!i(s=n(r,e)))return s;if(o(r=e.valueOf)&&!i(s=n(r,e)))return s;if(\"string\"!==t&&o(r=e.toString)&&!i(s=n(r,e)))return s;throw new a(\"Can't convert object to primitive value\")}},{\"../internals/function-call\":264,\"../internals/is-callable\":285,\"../internals/is-object\":289}],321:[function(e,t,r){\"use strict\";var n=e(\"../internals/get-built-in\"),o=e(\"../internals/function-uncurry-this\"),i=e(\"../internals/object-get-own-property-names\"),a=e(\"../internals/object-get-own-property-symbols\"),s=e(\"../internals/an-object\"),l=o([].concat);t.exports=n(\"Reflect\",\"ownKeys\")||function(e){var t=i.f(s(e)),r=a.f;return r?l(t,r(e)):t}},{\"../internals/an-object\":227,\"../internals/function-uncurry-this\":268,\"../internals/get-built-in\":269,\"../internals/object-get-own-property-names\":311,\"../internals/object-get-own-property-symbols\":312}],322:[function(e,t,r){\"use strict\";var n=e(\"../internals/global\");t.exports=n},{\"../internals/global\":274}],323:[function(e,t,r){\"use strict\";t.exports=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}}},{}],324:[function(e,t,r){\"use strict\";var n=e(\"../internals/global\"),o=e(\"../internals/promise-native-constructor\"),i=e(\"../internals/is-callable\"),a=e(\"../internals/is-forced\"),s=e(\"../internals/inspect-source\"),l=e(\"../internals/well-known-symbol\"),c=e(\"../internals/engine-is-browser\"),u=e(\"../internals/engine-is-deno\"),d=e(\"../internals/is-pure\"),f=e(\"../internals/engine-v8-version\"),h=o&&o.prototype,p=l(\"species\"),m=!1,g=i(n.PromiseRejectionEvent),v=a(\"Promise\",(function(){var e=s(o),t=e!==String(o);if(!t&&66===f)return!0;if(d&&(!h.catch||!h.finally))return!0;if(!f||f<51||!/native code/.test(e)){var r=new o((function(e){e(1)})),n=function(e){e((function(){}),(function(){}))};if((r.constructor={})[p]=n,!(m=r.then((function(){}))instanceof n))return!0}return!t&&(c||u)&&!g}));t.exports={CONSTRUCTOR:v,REJECTION_EVENT:g,SUBCLASSING:m}},{\"../internals/engine-is-browser\":250,\"../internals/engine-is-deno\":251,\"../internals/engine-v8-version\":257,\"../internals/global\":274,\"../internals/inspect-source\":281,\"../internals/is-callable\":285,\"../internals/is-forced\":287,\"../internals/is-pure\":290,\"../internals/promise-native-constructor\":325,\"../internals/well-known-symbol\":357}],325:[function(e,t,r){\"use strict\";var n=e(\"../internals/global\");t.exports=n.Promise},{\"../internals/global\":274}],326:[function(e,t,r){\"use strict\";var n=e(\"../internals/an-object\"),o=e(\"../internals/is-object\"),i=e(\"../internals/new-promise-capability\");t.exports=function(e,t){if(n(e),o(t)&&t.constructor===e)return t;var r=i.f(e);return(0,r.resolve)(t),r.promise}},{\"../internals/an-object\":227,\"../internals/is-object\":289,\"../internals/new-promise-capability\":303}],327:[function(e,t,r){\"use strict\";var n=e(\"../internals/promise-native-constructor\"),o=e(\"../internals/check-correctness-of-iteration\"),i=e(\"../internals/promise-constructor-detection\").CONSTRUCTOR;t.exports=i||!o((function(e){n.all(e).then(void 0,(function(){}))}))},{\"../internals/check-correctness-of-iteration\":234,\"../internals/promise-constructor-detection\":324,\"../internals/promise-native-constructor\":325}],328:[function(e,t,r){\"use strict\";var n=function(){this.head=null,this.tail=null};n.prototype={add:function(e){var t={item:e,next:null},r=this.tail;r?r.next=t:this.head=t,this.tail=t},get:function(){var e=this.head;if(e)return null===(this.head=e.next)&&(this.tail=null),e.item}},t.exports=n},{}],329:[function(e,t,r){\"use strict\";var n=e(\"../internals/is-null-or-undefined\"),o=TypeError;t.exports=function(e){if(n(e))throw new o(\"Can't call method on \"+e);return e}},{\"../internals/is-null-or-undefined\":288}],330:[function(e,t,r){\"use strict\";var n=e(\"../internals/get-built-in\"),o=e(\"../internals/define-built-in-accessor\"),i=e(\"../internals/well-known-symbol\"),a=e(\"../internals/descriptors\"),s=i(\"species\");t.exports=function(e){var t=n(e);a&&t&&!t[s]&&o(t,s,{configurable:!0,get:function(){return this}})}},{\"../internals/define-built-in-accessor\":244,\"../internals/descriptors\":247,\"../internals/get-built-in\":269,\"../internals/well-known-symbol\":357}],331:[function(e,t,r){\"use strict\";var n=e(\"../internals/object-define-property\").f,o=e(\"../internals/has-own-property\"),i=e(\"../internals/well-known-symbol\")(\"toStringTag\");t.exports=function(e,t,r){e&&!r&&(e=e.prototype),e&&!o(e,i)&&n(e,i,{configurable:!0,value:t})}},{\"../internals/has-own-property\":275,\"../internals/object-define-property\":308,\"../internals/well-known-symbol\":357}],332:[function(e,t,r){\"use strict\";var n=e(\"../internals/shared\"),o=e(\"../internals/uid\"),i=n(\"keys\");t.exports=function(e){return i[e]||(i[e]=o(e))}},{\"../internals/shared\":334,\"../internals/uid\":350}],333:[function(e,t,r){\"use strict\";var n=e(\"../internals/global\"),o=e(\"../internals/define-global-property\"),i=n[\"__core-js_shared__\"]||o(\"__core-js_shared__\",{});t.exports=i},{\"../internals/define-global-property\":246,\"../internals/global\":274}],334:[function(e,t,r){\"use strict\";var n=e(\"../internals/is-pure\"),o=e(\"../internals/shared-store\");(t.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})(\"versions\",[]).push({version:\"3.33.0\",mode:n?\"pure\":\"global\",copyright:\"© 2014-2023 Denis Pushkarev (zloirock.ru)\",license:\"https://github.com/zloirock/core-js/blob/v3.33.0/LICENSE\",source:\"https://github.com/zloirock/core-js\"})},{\"../internals/is-pure\":290,\"../internals/shared-store\":333}],335:[function(e,t,r){\"use strict\";var n=e(\"../internals/an-object\"),o=e(\"../internals/a-constructor\"),i=e(\"../internals/is-null-or-undefined\"),a=e(\"../internals/well-known-symbol\")(\"species\");t.exports=function(e,t){var r,s=n(e).constructor;return void 0===s||i(r=n(s)[a])?t:o(r)}},{\"../internals/a-constructor\":223,\"../internals/an-object\":227,\"../internals/is-null-or-undefined\":288,\"../internals/well-known-symbol\":357}],336:[function(e,t,r){\"use strict\";var n=e(\"../internals/engine-v8-version\"),o=e(\"../internals/fails\"),i=e(\"../internals/global\").String;t.exports=!!Object.getOwnPropertySymbols&&!o((function(){var e=Symbol(\"symbol detection\");return!i(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},{\"../internals/engine-v8-version\":257,\"../internals/fails\":260,\"../internals/global\":274}],337:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-call\"),o=e(\"../internals/get-built-in\"),i=e(\"../internals/well-known-symbol\"),a=e(\"../internals/define-built-in\");t.exports=function(){var e=o(\"Symbol\"),t=e&&e.prototype,r=t&&t.valueOf,s=i(\"toPrimitive\");t&&!t[s]&&a(t,s,(function(e){return n(r,this)}),{arity:1})}},{\"../internals/define-built-in\":245,\"../internals/function-call\":264,\"../internals/get-built-in\":269,\"../internals/well-known-symbol\":357}],338:[function(e,t,r){\"use strict\";var n=e(\"../internals/symbol-constructor-detection\");t.exports=n&&!!Symbol.for&&!!Symbol.keyFor},{\"../internals/symbol-constructor-detection\":336}],339:[function(e,t,r){\"use strict\";var n,o,i,a,s=e(\"../internals/global\"),l=e(\"../internals/function-apply\"),c=e(\"../internals/function-bind-context\"),u=e(\"../internals/is-callable\"),d=e(\"../internals/has-own-property\"),f=e(\"../internals/fails\"),h=e(\"../internals/html\"),p=e(\"../internals/array-slice\"),m=e(\"../internals/document-create-element\"),g=e(\"../internals/validate-arguments-length\"),v=e(\"../internals/engine-is-ios\"),b=e(\"../internals/engine-is-node\"),y=s.setImmediate,w=s.clearImmediate,x=s.process,S=s.Dispatch,C=s.Function,k=s.MessageChannel,E=s.String,O=0,A={};f((function(){n=s.location}));var T=function(e){if(d(A,e)){var t=A[e];delete A[e],t()}},j=function(e){return function(){T(e)}},P=function(e){T(e.data)},M=function(e){s.postMessage(E(e),n.protocol+\"//\"+n.host)};y&&w||(y=function(e){g(arguments.length,1);var t=u(e)?e:C(e),r=p(arguments,1);return A[++O]=function(){l(t,void 0,r)},o(O),O},w=function(e){delete A[e]},b?o=function(e){x.nextTick(j(e))}:S&&S.now?o=function(e){S.now(j(e))}:k&&!v?(a=(i=new k).port2,i.port1.onmessage=P,o=c(a.postMessage,a)):s.addEventListener&&u(s.postMessage)&&!s.importScripts&&n&&\"file:\"!==n.protocol&&!f(M)?(o=M,s.addEventListener(\"message\",P,!1)):o=\"onreadystatechange\"in m(\"script\")?function(e){h.appendChild(m(\"script\")).onreadystatechange=function(){h.removeChild(this),T(e)}}:function(e){setTimeout(j(e),0)}),t.exports={set:y,clear:w}},{\"../internals/array-slice\":231,\"../internals/document-create-element\":249,\"../internals/engine-is-ios\":253,\"../internals/engine-is-node\":254,\"../internals/fails\":260,\"../internals/function-apply\":261,\"../internals/function-bind-context\":262,\"../internals/global\":274,\"../internals/has-own-property\":275,\"../internals/html\":278,\"../internals/is-callable\":285,\"../internals/validate-arguments-length\":353}],340:[function(e,t,r){\"use strict\";var n=e(\"../internals/to-integer-or-infinity\"),o=Math.max,i=Math.min;t.exports=function(e,t){var r=n(e);return r<0?o(r+t,0):i(r,t)}},{\"../internals/to-integer-or-infinity\":342}],341:[function(e,t,r){\"use strict\";var n=e(\"../internals/indexed-object\"),o=e(\"../internals/require-object-coercible\");t.exports=function(e){return n(o(e))}},{\"../internals/indexed-object\":280,\"../internals/require-object-coercible\":329}],342:[function(e,t,r){\"use strict\";var n=e(\"../internals/math-trunc\");t.exports=function(e){var t=+e;return t!=t||0===t?0:n(t)}},{\"../internals/math-trunc\":301}],343:[function(e,t,r){\"use strict\";var n=e(\"../internals/to-integer-or-infinity\"),o=Math.min;t.exports=function(e){return e>0?o(n(e),9007199254740991):0}},{\"../internals/to-integer-or-infinity\":342}],344:[function(e,t,r){\"use strict\";var n=e(\"../internals/require-object-coercible\"),o=Object;t.exports=function(e){return o(n(e))}},{\"../internals/require-object-coercible\":329}],345:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-call\"),o=e(\"../internals/is-object\"),i=e(\"../internals/is-symbol\"),a=e(\"../internals/get-method\"),s=e(\"../internals/ordinary-to-primitive\"),l=e(\"../internals/well-known-symbol\"),c=TypeError,u=l(\"toPrimitive\");t.exports=function(e,t){if(!o(e)||i(e))return e;var r,l=a(e,u);if(l){if(void 0===t&&(t=\"default\"),r=n(l,e,t),!o(r)||i(r))return r;throw new c(\"Can't convert object to primitive value\")}return void 0===t&&(t=\"number\"),s(e,t)}},{\"../internals/function-call\":264,\"../internals/get-method\":273,\"../internals/is-object\":289,\"../internals/is-symbol\":292,\"../internals/ordinary-to-primitive\":320,\"../internals/well-known-symbol\":357}],346:[function(e,t,r){\"use strict\";var n=e(\"../internals/to-primitive\"),o=e(\"../internals/is-symbol\");t.exports=function(e){var t=n(e,\"string\");return o(t)?t:t+\"\"}},{\"../internals/is-symbol\":292,\"../internals/to-primitive\":345}],347:[function(e,t,r){\"use strict\";var n={};n[e(\"../internals/well-known-symbol\")(\"toStringTag\")]=\"z\",t.exports=\"[object z]\"===String(n)},{\"../internals/well-known-symbol\":357}],348:[function(e,t,r){\"use strict\";var n=e(\"../internals/classof\"),o=String;t.exports=function(e){if(\"Symbol\"===n(e))throw new TypeError(\"Cannot convert a Symbol value to a string\");return o(e)}},{\"../internals/classof\":236}],349:[function(e,t,r){\"use strict\";var n=String;t.exports=function(e){try{return n(e)}catch(e){return\"Object\"}}},{}],350:[function(e,t,r){\"use strict\";var n=e(\"../internals/function-uncurry-this\"),o=0,i=Math.random(),a=n(1..toString);t.exports=function(e){return\"Symbol(\"+(void 0===e?\"\":e)+\")_\"+a(++o+i,36)}},{\"../internals/function-uncurry-this\":268}],351:[function(e,t,r){\"use strict\";var n=e(\"../internals/symbol-constructor-detection\");t.exports=n&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator},{\"../internals/symbol-constructor-detection\":336}],352:[function(e,t,r){\"use strict\";var n=e(\"../internals/descriptors\"),o=e(\"../internals/fails\");t.exports=n&&o((function(){return 42!==Object.defineProperty((function(){}),\"prototype\",{value:42,writable:!1}).prototype}))},{\"../internals/descriptors\":247,\"../internals/fails\":260}],353:[function(e,t,r){\"use strict\";var n=TypeError;t.exports=function(e,t){if(e<t)throw new n(\"Not enough arguments\");return e}},{}],354:[function(e,t,r){\"use strict\";var n=e(\"../internals/global\"),o=e(\"../internals/is-callable\"),i=n.WeakMap;t.exports=o(i)&&/native code/.test(String(i))},{\"../internals/global\":274,\"../internals/is-callable\":285}],355:[function(e,t,r){\"use strict\";var n=e(\"../internals/path\"),o=e(\"../internals/has-own-property\"),i=e(\"../internals/well-known-symbol-wrapped\"),a=e(\"../internals/object-define-property\").f;t.exports=function(e){var t=n.Symbol||(n.Symbol={});o(t,e)||a(t,e,{value:i.f(e)})}},{\"../internals/has-own-property\":275,\"../internals/object-define-property\":308,\"../internals/path\":322,\"../internals/well-known-symbol-wrapped\":356}],356:[function(e,t,r){\"use strict\";var n=e(\"../internals/well-known-symbol\");r.f=n},{\"../internals/well-known-symbol\":357}],357:[function(e,t,r){\"use strict\";var n=e(\"../internals/global\"),o=e(\"../internals/shared\"),i=e(\"../internals/has-own-property\"),a=e(\"../internals/uid\"),s=e(\"../internals/symbol-constructor-detection\"),l=e(\"../internals/use-symbol-as-uid\"),c=n.Symbol,u=o(\"wks\"),d=l?c.for||c:c&&c.withoutSetter||a;t.exports=function(e){return i(u,e)||(u[e]=s&&i(c,e)?c[e]:d(\"Symbol.\"+e)),u[e]}},{\"../internals/global\":274,\"../internals/has-own-property\":275,\"../internals/shared\":334,\"../internals/symbol-constructor-detection\":336,\"../internals/uid\":350,\"../internals/use-symbol-as-uid\":351}],358:[function(e,t,r){\"use strict\";var n=e(\"../internals/export\"),o=e(\"../internals/array-iteration\").findIndex,i=e(\"../internals/add-to-unscopables\"),a=!0;\"findIndex\"in[]&&Array(1).findIndex((function(){a=!1})),n({target:\"Array\",proto:!0,forced:a},{findIndex:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),i(\"findIndex\")},{\"../internals/add-to-unscopables\":225,\"../internals/array-iteration\":229,\"../internals/export\":259}],359:[function(e,t,r){\"use strict\";var n=e(\"../internals/export\"),o=e(\"../internals/array-iteration\").find,i=e(\"../internals/add-to-unscopables\"),a=!0;\"find\"in[]&&Array(1).find((function(){a=!1})),n({target:\"Array\",proto:!0,forced:a},{find:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),i(\"find\")},{\"../internals/add-to-unscopables\":225,\"../internals/array-iteration\":229,\"../internals/export\":259}],360:[function(e,t,r){\"use strict\";var n=e(\"../internals/export\"),o=e(\"../internals/array-includes\").includes,i=e(\"../internals/fails\"),a=e(\"../internals/add-to-unscopables\");n({target:\"Array\",proto:!0,forced:i((function(){return!Array(1).includes()}))},{includes:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),a(\"includes\")},{\"../internals/add-to-unscopables\":225,\"../internals/array-includes\":228,\"../internals/export\":259,\"../internals/fails\":260}],361:[function(e,t,r){\"use strict\";var n=e(\"../internals/to-indexed-object\"),o=e(\"../internals/add-to-unscopables\"),i=e(\"../internals/iterators\"),a=e(\"../internals/internal-state\"),s=e(\"../internals/object-define-property\").f,l=e(\"../internals/iterator-define\"),c=e(\"../internals/create-iter-result-object\"),u=e(\"../internals/is-pure\"),d=e(\"../internals/descriptors\"),f=a.set,h=a.getterFor(\"Array Iterator\");t.exports=l(Array,\"Array\",(function(e,t){f(this,{type:\"Array Iterator\",target:n(e),index:0,kind:t})}),(function(){var e=h(this),t=e.target,r=e.kind,n=e.index++;if(!t||n>=t.length)return e.target=void 0,c(void 0,!0);switch(r){case\"keys\":return c(n,!1);case\"values\":return c(t[n],!1)}return c([n,t[n]],!1)}),\"values\");var p=i.Arguments=i.Array;if(o(\"keys\"),o(\"values\"),o(\"entries\"),!u&&d&&\"values\"!==p.name)try{s(p,\"name\",{value:\"values\"})}catch(e){}},{\"../internals/add-to-unscopables\":225,\"../internals/create-iter-result-object\":240,\"../internals/descriptors\":247,\"../internals/internal-state\":282,\"../internals/is-pure\":290,\"../internals/iterator-define\":296,\"../internals/iterators\":298,\"../internals/object-define-property\":308,\"../internals/to-indexed-object\":341}],362:[function(e,t,r){\"use strict\";var n=e(\"../internals/export\"),o=e(\"../internals/get-built-in\"),i=e(\"../internals/function-apply\"),a=e(\"../internals/function-call\"),s=e(\"../internals/function-uncurry-this\"),l=e(\"../internals/fails\"),c=e(\"../internals/is-callable\"),u=e(\"../internals/is-symbol\"),d=e(\"../internals/array-slice\"),f=e(\"../internals/get-json-replacer-function\"),h=e(\"../internals/symbol-constructor-detection\"),p=String,m=o(\"JSON\",\"stringify\"),g=s(/./.exec),v=s(\"\".charAt),b=s(\"\".charCodeAt),y=s(\"\".replace),w=s(1..toString),x=/[\\uD800-\\uDFFF]/g,S=/^[\\uD800-\\uDBFF]$/,C=/^[\\uDC00-\\uDFFF]$/,k=!h||l((function(){var e=o(\"Symbol\")(\"stringify detection\");return\"[null]\"!==m([e])||\"{}\"!==m({a:e})||\"{}\"!==m(Object(e))})),E=l((function(){return'\"\\\\udf06\\\\ud834\"'!==m(\"\\udf06\\ud834\")||'\"\\\\udead\"'!==m(\"\\udead\")})),O=function(e,t){var r=d(arguments),n=f(t);if(c(n)||void 0!==e&&!u(e))return r[1]=function(e,t){if(c(n)&&(t=a(n,this,p(e),t)),!u(t))return t},i(m,null,r)},A=function(e,t,r){var n=v(r,t-1),o=v(r,t+1);return g(S,e)&&!g(C,o)||g(C,e)&&!g(S,n)?\"\\\\u\"+w(b(e,0),16):e};m&&n({target:\"JSON\",stat:!0,arity:3,forced:k||E},{stringify:function(e,t,r){var n=d(arguments),o=i(k?O:m,null,n);return E&&\"string\"==typeof o?y(o,x,A):o}})},{\"../internals/array-slice\":231,\"../internals/export\":259,\"../internals/fails\":260,\"../internals/function-apply\":261,\"../internals/function-call\":264,\"../internals/function-uncurry-this\":268,\"../internals/get-built-in\":269,\"../internals/get-json-replacer-function\":272,\"../internals/is-callable\":285,\"../internals/is-symbol\":292,\"../internals/symbol-constructor-detection\":336}],363:[function(e,t,r){\"use strict\";e(\"../internals/export\")({target:\"Number\",stat:!0},{isNaN:function(e){return e!=e}})},{\"../internals/export\":259}],364:[function(e,t,r){\"use strict\";var n=e(\"../internals/export\"),o=e(\"../internals/object-assign\");n({target:\"Object\",stat:!0,arity:2,forced:Object.assign!==o},{assign:o})},{\"../internals/export\":259,\"../internals/object-assign\":305}],365:[function(e,t,r){\"use strict\";var n=e(\"../internals/export\"),o=e(\"../internals/symbol-constructor-detection\"),i=e(\"../internals/fails\"),a=e(\"../internals/object-get-own-property-symbols\"),s=e(\"../internals/to-object\");n({target:\"Object\",stat:!0,forced:!o||i((function(){a.f(1)}))},{getOwnPropertySymbols:function(e){var t=a.f;return t?t(s(e)):[]}})},{\"../internals/export\":259,\"../internals/fails\":260,\"../internals/object-get-own-property-symbols\":312,\"../internals/symbol-constructor-detection\":336,\"../internals/to-object\":344}],366:[function(e,t,r){\"use strict\";var n=e(\"../internals/export\"),o=e(\"../internals/to-object\"),i=e(\"../internals/object-keys\");n({target:\"Object\",stat:!0,forced:e(\"../internals/fails\")((function(){i(1)}))},{keys:function(e){return i(o(e))}})},{\"../internals/export\":259,\"../internals/fails\":260,\"../internals/object-keys\":316,\"../internals/to-object\":344}],367:[function(e,t,r){\"use strict\";var n=e(\"../internals/export\"),o=e(\"../internals/object-to-array\").values;n({target:\"Object\",stat:!0},{values:function(e){return o(e)}})},{\"../internals/export\":259,\"../internals/object-to-array\":319}],368:[function(e,t,r){\"use strict\";var n=e(\"../internals/export\"),o=e(\"../internals/function-call\"),i=e(\"../internals/a-callable\"),a=e(\"../internals/new-promise-capability\"),s=e(\"../internals/perform\"),l=e(\"../internals/iterate\");n({target:\"Promise\",stat:!0,forced:e(\"../internals/promise-statics-incorrect-iteration\")},{all:function(e){var t=this,r=a.f(t),n=r.resolve,c=r.reject,u=s((function(){var r=i(t.resolve),a=[],s=0,u=1;l(e,(function(e){var i=s++,l=!1;u++,o(r,t,e).then((function(e){l||(l=!0,a[i]=e,--u||n(a))}),c)})),--u||n(a)}));return u.error&&c(u.value),r.promise}})},{\"../internals/a-callable\":222,\"../internals/export\":259,\"../internals/function-call\":264,\"../internals/iterate\":293,\"../internals/new-promise-capability\":303,\"../internals/perform\":323,\"../internals/promise-statics-incorrect-iteration\":327}],369:[function(e,t,r){\"use strict\";var n=e(\"../internals/export\"),o=e(\"../internals/is-pure\"),i=e(\"../internals/promise-constructor-detection\").CONSTRUCTOR,a=e(\"../internals/promise-native-constructor\"),s=e(\"../internals/get-built-in\"),l=e(\"../internals/is-callable\"),c=e(\"../internals/define-built-in\"),u=a&&a.prototype;if(n({target:\"Promise\",proto:!0,forced:i,real:!0},{catch:function(e){return this.then(void 0,e)}}),!o&&l(a)){var d=s(\"Promise\").prototype.catch;u.catch!==d&&c(u,\"catch\",d,{unsafe:!0})}},{\"../internals/define-built-in\":245,\"../internals/export\":259,\"../internals/get-built-in\":269,\"../internals/is-callable\":285,\"../internals/is-pure\":290,\"../internals/promise-constructor-detection\":324,\"../internals/promise-native-constructor\":325}],370:[function(e,t,r){\"use strict\";var n,o,i,a=e(\"../internals/export\"),s=e(\"../internals/is-pure\"),l=e(\"../internals/engine-is-node\"),c=e(\"../internals/global\"),u=e(\"../internals/function-call\"),d=e(\"../internals/define-built-in\"),f=e(\"../internals/object-set-prototype-of\"),h=e(\"../internals/set-to-string-tag\"),p=e(\"../internals/set-species\"),m=e(\"../internals/a-callable\"),g=e(\"../internals/is-callable\"),v=e(\"../internals/is-object\"),b=e(\"../internals/an-instance\"),y=e(\"../internals/species-constructor\"),w=e(\"../internals/task\").set,x=e(\"../internals/microtask\"),S=e(\"../internals/host-report-errors\"),C=e(\"../internals/perform\"),k=e(\"../internals/queue\"),E=e(\"../internals/internal-state\"),O=e(\"../internals/promise-native-constructor\"),A=e(\"../internals/promise-constructor-detection\"),T=e(\"../internals/new-promise-capability\"),j=A.CONSTRUCTOR,P=A.REJECTION_EVENT,M=A.SUBCLASSING,R=E.getterFor(\"Promise\"),_=E.set,I=O&&O.prototype,N=O,F=I,D=c.TypeError,B=c.document,L=c.process,z=T.f,H=z,U=!!(B&&B.createEvent&&c.dispatchEvent),V=function(e){var t;return!(!v(e)||!g(t=e.then))&&t},W=function(e,t){var r,n,o,i=t.value,a=1===t.state,s=a?e.ok:e.fail,l=e.resolve,c=e.reject,d=e.domain;try{s?(a||(2===t.rejection&&Y(t),t.rejection=1),!0===s?r=i:(d&&d.enter(),r=s(i),d&&(d.exit(),o=!0)),r===e.promise?c(new D(\"Promise-chain cycle\")):(n=V(r))?u(n,r,l,c):l(r)):c(i)}catch(e){d&&!o&&d.exit(),c(e)}},G=function(e,t){e.notified||(e.notified=!0,x((function(){for(var r,n=e.reactions;r=n.get();)W(r,e);e.notified=!1,t&&!e.rejection&&K(e)})))},q=function(e,t,r){var n,o;U?((n=B.createEvent(\"Event\")).promise=t,n.reason=r,n.initEvent(e,!1,!0),c.dispatchEvent(n)):n={promise:t,reason:r},!P&&(o=c[\"on\"+e])?o(n):\"unhandledrejection\"===e&&S(\"Unhandled promise rejection\",r)},K=function(e){u(w,c,(function(){var t,r=e.facade,n=e.value;if(X(e)&&(t=C((function(){l?L.emit(\"unhandledRejection\",n,r):q(\"unhandledrejection\",r,n)})),e.rejection=l||X(e)?2:1,t.error))throw t.value}))},X=function(e){return 1!==e.rejection&&!e.parent},Y=function(e){u(w,c,(function(){var t=e.facade;l?L.emit(\"rejectionHandled\",t):q(\"rejectionhandled\",t,e.value)}))},$=function(e,t,r){return function(n){e(t,n,r)}},Z=function(e,t,r){e.done||(e.done=!0,r&&(e=r),e.value=t,e.state=2,G(e,!0))},Q=function(e,t,r){if(!e.done){e.done=!0,r&&(e=r);try{if(e.facade===t)throw new D(\"Promise can't be resolved itself\");var n=V(t);n?x((function(){var r={done:!1};try{u(n,t,$(Q,r,e),$(Z,r,e))}catch(t){Z(r,t,e)}})):(e.value=t,e.state=1,G(e,!1))}catch(t){Z({done:!1},t,e)}}};if(j&&(F=(N=function(e){b(this,F),m(e),u(n,this);var t=R(this);try{e($(Q,t),$(Z,t))}catch(e){Z(t,e)}}).prototype,(n=function(e){_(this,{type:\"Promise\",done:!1,notified:!1,parent:!1,reactions:new k,rejection:!1,state:0,value:void 0})}).prototype=d(F,\"then\",(function(e,t){var r=R(this),n=z(y(this,N));return r.parent=!0,n.ok=!g(e)||e,n.fail=g(t)&&t,n.domain=l?L.domain:void 0,0===r.state?r.reactions.add(n):x((function(){W(n,r)})),n.promise})),o=function(){var e=new n,t=R(e);this.promise=e,this.resolve=$(Q,t),this.reject=$(Z,t)},T.f=z=function(e){return e===N||void 0===e?new o(e):H(e)},!s&&g(O)&&I!==Object.prototype)){i=I.then,M||d(I,\"then\",(function(e,t){var r=this;return new N((function(e,t){u(i,r,e,t)})).then(e,t)}),{unsafe:!0});try{delete I.constructor}catch(e){}f&&f(I,F)}a({global:!0,constructor:!0,wrap:!0,forced:j},{Promise:N}),h(N,\"Promise\",!1,!0),p(\"Promise\")},{\"../internals/a-callable\":222,\"../internals/an-instance\":226,\"../internals/define-built-in\":245,\"../internals/engine-is-node\":254,\"../internals/export\":259,\"../internals/function-call\":264,\"../internals/global\":274,\"../internals/host-report-errors\":277,\"../internals/internal-state\":282,\"../internals/is-callable\":285,\"../internals/is-object\":289,\"../internals/is-pure\":290,\"../internals/microtask\":302,\"../internals/new-promise-capability\":303,\"../internals/object-set-prototype-of\":318,\"../internals/perform\":323,\"../internals/promise-constructor-detection\":324,\"../internals/promise-native-constructor\":325,\"../internals/queue\":328,\"../internals/set-species\":330,\"../internals/set-to-string-tag\":331,\"../internals/species-constructor\":335,\"../internals/task\":339}],371:[function(e,t,r){\"use strict\";var n=e(\"../internals/export\"),o=e(\"../internals/is-pure\"),i=e(\"../internals/promise-native-constructor\"),a=e(\"../internals/fails\"),s=e(\"../internals/get-built-in\"),l=e(\"../internals/is-callable\"),c=e(\"../internals/species-constructor\"),u=e(\"../internals/promise-resolve\"),d=e(\"../internals/define-built-in\"),f=i&&i.prototype;if(n({target:\"Promise\",proto:!0,real:!0,forced:!!i&&a((function(){f.finally.call({then:function(){}},(function(){}))}))},{finally:function(e){var t=c(this,s(\"Promise\")),r=l(e);return this.then(r?function(r){return u(t,e()).then((function(){return r}))}:e,r?function(r){return u(t,e()).then((function(){throw r}))}:e)}}),!o&&l(i)){var h=s(\"Promise\").prototype.finally;f.finally!==h&&d(f,\"finally\",h,{unsafe:!0})}},{\"../internals/define-built-in\":245,\"../internals/export\":259,\"../internals/fails\":260,\"../internals/get-built-in\":269,\"../internals/is-callable\":285,\"../internals/is-pure\":290,\"../internals/promise-native-constructor\":325,\"../internals/promise-resolve\":326,\"../internals/species-constructor\":335}],372:[function(e,t,r){\"use strict\";e(\"../modules/es.promise.constructor\"),e(\"../modules/es.promise.all\"),e(\"../modules/es.promise.catch\"),e(\"../modules/es.promise.race\"),e(\"../modules/es.promise.reject\"),e(\"../modules/es.promise.resolve\")},{\"../modules/es.promise.all\":368,\"../modules/es.promise.catch\":369,\"../modules/es.promise.constructor\":370,\"../modules/es.promise.race\":373,\"../modules/es.promise.reject\":374,\"../modules/es.promise.resolve\":375}],373:[function(e,t,r){\"use strict\";var n=e(\"../internals/export\"),o=e(\"../internals/function-call\"),i=e(\"../internals/a-callable\"),a=e(\"../internals/new-promise-capability\"),s=e(\"../internals/perform\"),l=e(\"../internals/iterate\");n({target:\"Promise\",stat:!0,forced:e(\"../internals/promise-statics-incorrect-iteration\")},{race:function(e){var t=this,r=a.f(t),n=r.reject,c=s((function(){var a=i(t.resolve);l(e,(function(e){o(a,t,e).then(r.resolve,n)}))}));return c.error&&n(c.value),r.promise}})},{\"../internals/a-callable\":222,\"../internals/export\":259,\"../internals/function-call\":264,\"../internals/iterate\":293,\"../internals/new-promise-capability\":303,\"../internals/perform\":323,\"../internals/promise-statics-incorrect-iteration\":327}],374:[function(e,t,r){\"use strict\";var n=e(\"../internals/export\"),o=e(\"../internals/function-call\"),i=e(\"../internals/new-promise-capability\");n({target:\"Promise\",stat:!0,forced:e(\"../internals/promise-constructor-detection\").CONSTRUCTOR},{reject:function(e){var t=i.f(this);return o(t.reject,void 0,e),t.promise}})},{\"../internals/export\":259,\"../internals/function-call\":264,\"../internals/new-promise-capability\":303,\"../internals/promise-constructor-detection\":324}],375:[function(e,t,r){\"use strict\";var n=e(\"../internals/export\"),o=e(\"../internals/get-built-in\"),i=e(\"../internals/is-pure\"),a=e(\"../internals/promise-native-constructor\"),s=e(\"../internals/promise-constructor-detection\").CONSTRUCTOR,l=e(\"../internals/promise-resolve\"),c=o(\"Promise\"),u=i&&!s;n({target:\"Promise\",stat:!0,forced:i||s},{resolve:function(e){return l(u&&this===c?a:this,e)}})},{\"../internals/export\":259,\"../internals/get-built-in\":269,\"../internals/is-pure\":290,\"../internals/promise-constructor-detection\":324,\"../internals/promise-native-constructor\":325,\"../internals/promise-resolve\":326}],376:[function(e,t,r){\"use strict\";var n=e(\"../internals/export\"),o=e(\"../internals/function-uncurry-this\"),i=e(\"../internals/to-absolute-index\"),a=RangeError,s=String.fromCharCode,l=String.fromCodePoint,c=o([].join);n({target:\"String\",stat:!0,arity:1,forced:!!l&&1!==l.length},{fromCodePoint:function(e){for(var t,r=[],n=arguments.length,o=0;n>o;){if(t=+arguments[o++],i(t,1114111)!==t)throw new a(t+\" is not a valid code point\");r[o]=t<65536?s(t):s(55296+((t-=65536)>>10),t%1024+56320)}return c(r,\"\")}})},{\"../internals/export\":259,\"../internals/function-uncurry-this\":268,\"../internals/to-absolute-index\":340}],377:[function(e,t,r){\"use strict\";var n=e(\"../internals/export\"),o=e(\"../internals/function-uncurry-this\"),i=e(\"../internals/not-a-regexp\"),a=e(\"../internals/require-object-coercible\"),s=e(\"../internals/to-string\"),l=e(\"../internals/correct-is-regexp-logic\"),c=o(\"\".indexOf);n({target:\"String\",proto:!0,forced:!l(\"includes\")},{includes:function(e){return!!~c(s(a(this)),s(i(e)),arguments.length>1?arguments[1]:void 0)}})},{\"../internals/correct-is-regexp-logic\":238,\"../internals/export\":259,\"../internals/function-uncurry-this\":268,\"../internals/not-a-regexp\":304,\"../internals/require-object-coercible\":329,\"../internals/to-string\":348}],378:[function(e,t,r){\"use strict\";e(\"../internals/well-known-symbol-define\")(\"asyncIterator\")},{\"../internals/well-known-symbol-define\":355}],379:[function(e,t,r){\"use strict\";var n=e(\"../internals/export\"),o=e(\"../internals/global\"),i=e(\"../internals/function-call\"),a=e(\"../internals/function-uncurry-this\"),s=e(\"../internals/is-pure\"),l=e(\"../internals/descriptors\"),c=e(\"../internals/symbol-constructor-detection\"),u=e(\"../internals/fails\"),d=e(\"../internals/has-own-property\"),f=e(\"../internals/object-is-prototype-of\"),h=e(\"../internals/an-object\"),p=e(\"../internals/to-indexed-object\"),m=e(\"../internals/to-property-key\"),g=e(\"../internals/to-string\"),v=e(\"../internals/create-property-descriptor\"),b=e(\"../internals/object-create\"),y=e(\"../internals/object-keys\"),w=e(\"../internals/object-get-own-property-names\"),x=e(\"../internals/object-get-own-property-names-external\"),S=e(\"../internals/object-get-own-property-symbols\"),C=e(\"../internals/object-get-own-property-descriptor\"),k=e(\"../internals/object-define-property\"),E=e(\"../internals/object-define-properties\"),O=e(\"../internals/object-property-is-enumerable\"),A=e(\"../internals/define-built-in\"),T=e(\"../internals/define-built-in-accessor\"),j=e(\"../internals/shared\"),P=e(\"../internals/shared-key\"),M=e(\"../internals/hidden-keys\"),R=e(\"../internals/uid\"),_=e(\"../internals/well-known-symbol\"),I=e(\"../internals/well-known-symbol-wrapped\"),N=e(\"../internals/well-known-symbol-define\"),F=e(\"../internals/symbol-define-to-primitive\"),D=e(\"../internals/set-to-string-tag\"),B=e(\"../internals/internal-state\"),L=e(\"../internals/array-iteration\").forEach,z=P(\"hidden\"),H=B.set,U=B.getterFor(\"Symbol\"),V=Object.prototype,W=o.Symbol,G=W&&W.prototype,q=o.RangeError,K=o.TypeError,X=o.QObject,Y=C.f,$=k.f,Z=x.f,Q=O.f,J=a([].push),ee=j(\"symbols\"),te=j(\"op-symbols\"),re=j(\"wks\"),ne=!X||!X.prototype||!X.prototype.findChild,oe=function(e,t,r){var n=Y(V,t);n&&delete V[t],$(e,t,r),n&&e!==V&&$(V,t,n)},ie=l&&u((function(){return 7!==b($({},\"a\",{get:function(){return $(this,\"a\",{value:7}).a}})).a}))?oe:$,ae=function(e,t){var r=ee[e]=b(G);return H(r,{type:\"Symbol\",tag:e,description:t}),l||(r.description=t),r},se=function(e,t,r){e===V&&se(te,t,r),h(e);var n=m(t);return h(r),d(ee,n)?(r.enumerable?(d(e,z)&&e[z][n]&&(e[z][n]=!1),r=b(r,{enumerable:v(0,!1)})):(d(e,z)||$(e,z,v(1,{})),e[z][n]=!0),ie(e,n,r)):$(e,n,r)},le=function(e,t){h(e);var r=p(t),n=y(r).concat(fe(r));return L(n,(function(t){l&&!i(ce,r,t)||se(e,t,r[t])})),e},ce=function(e){var t=m(e),r=i(Q,this,t);return!(this===V&&d(ee,t)&&!d(te,t))&&(!(r||!d(this,t)||!d(ee,t)||d(this,z)&&this[z][t])||r)},ue=function(e,t){var r=p(e),n=m(t);if(r!==V||!d(ee,n)||d(te,n)){var o=Y(r,n);return!o||!d(ee,n)||d(r,z)&&r[z][n]||(o.enumerable=!0),o}},de=function(e){var t=Z(p(e)),r=[];return L(t,(function(e){d(ee,e)||d(M,e)||J(r,e)})),r},fe=function(e){var t=e===V,r=Z(t?te:p(e)),n=[];return L(r,(function(e){!d(ee,e)||t&&!d(V,e)||J(n,ee[e])})),n};c||(A(G=(W=function(){if(f(G,this))throw new K(\"Symbol is not a constructor\");var e=arguments.length&&void 0!==arguments[0]?g(arguments[0]):void 0,t=R(e),r=function(e){this===V&&i(r,te,e),d(this,z)&&d(this[z],t)&&(this[z][t]=!1);var n=v(1,e);try{ie(this,t,n)}catch(e){if(!(e instanceof q))throw e;oe(this,t,n)}};return l&&ne&&ie(V,t,{configurable:!0,set:r}),ae(t,e)}).prototype,\"toString\",(function(){return U(this).tag})),A(W,\"withoutSetter\",(function(e){return ae(R(e),e)})),O.f=ce,k.f=se,E.f=le,C.f=ue,w.f=x.f=de,S.f=fe,I.f=function(e){return ae(_(e),e)},l&&(T(G,\"description\",{configurable:!0,get:function(){return U(this).description}}),s||A(V,\"propertyIsEnumerable\",ce,{unsafe:!0}))),n({global:!0,constructor:!0,wrap:!0,forced:!c,sham:!c},{Symbol:W}),L(y(re),(function(e){N(e)})),n({target:\"Symbol\",stat:!0,forced:!c},{useSetter:function(){ne=!0},useSimple:function(){ne=!1}}),n({target:\"Object\",stat:!0,forced:!c,sham:!l},{create:function(e,t){return void 0===t?b(e):le(b(e),t)},defineProperty:se,defineProperties:le,getOwnPropertyDescriptor:ue}),n({target:\"Object\",stat:!0,forced:!c},{getOwnPropertyNames:de}),F(),D(W,\"Symbol\"),M[z]=!0},{\"../internals/an-object\":227,\"../internals/array-iteration\":229,\"../internals/create-property-descriptor\":242,\"../internals/define-built-in\":245,\"../internals/define-built-in-accessor\":244,\"../internals/descriptors\":247,\"../internals/export\":259,\"../internals/fails\":260,\"../internals/function-call\":264,\"../internals/function-uncurry-this\":268,\"../internals/global\":274,\"../internals/has-own-property\":275,\"../internals/hidden-keys\":276,\"../internals/internal-state\":282,\"../internals/is-pure\":290,\"../internals/object-create\":306,\"../internals/object-define-properties\":307,\"../internals/object-define-property\":308,\"../internals/object-get-own-property-descriptor\":309,\"../internals/object-get-own-property-names\":311,\"../internals/object-get-own-property-names-external\":310,\"../internals/object-get-own-property-symbols\":312,\"../internals/object-is-prototype-of\":314,\"../internals/object-keys\":316,\"../internals/object-property-is-enumerable\":317,\"../internals/set-to-string-tag\":331,\"../internals/shared\":334,\"../internals/shared-key\":332,\"../internals/symbol-constructor-detection\":336,\"../internals/symbol-define-to-primitive\":337,\"../internals/to-indexed-object\":341,\"../internals/to-property-key\":346,\"../internals/to-string\":348,\"../internals/uid\":350,\"../internals/well-known-symbol\":357,\"../internals/well-known-symbol-define\":355,\"../internals/well-known-symbol-wrapped\":356}],380:[function(e,t,r){\"use strict\";var n=e(\"../internals/export\"),o=e(\"../internals/get-built-in\"),i=e(\"../internals/has-own-property\"),a=e(\"../internals/to-string\"),s=e(\"../internals/shared\"),l=e(\"../internals/symbol-registry-detection\"),c=s(\"string-to-symbol-registry\"),u=s(\"symbol-to-string-registry\");n({target:\"Symbol\",stat:!0,forced:!l},{for:function(e){var t=a(e);if(i(c,t))return c[t];var r=o(\"Symbol\")(t);return c[t]=r,u[r]=t,r}})},{\"../internals/export\":259,\"../internals/get-built-in\":269,\"../internals/has-own-property\":275,\"../internals/shared\":334,\"../internals/symbol-registry-detection\":338,\"../internals/to-string\":348}],381:[function(e,t,r){\"use strict\";e(\"../modules/es.symbol.constructor\"),e(\"../modules/es.symbol.for\"),e(\"../modules/es.symbol.key-for\"),e(\"../modules/es.json.stringify\"),e(\"../modules/es.object.get-own-property-symbols\")},{\"../modules/es.json.stringify\":362,\"../modules/es.object.get-own-property-symbols\":365,\"../modules/es.symbol.constructor\":379,\"../modules/es.symbol.for\":380,\"../modules/es.symbol.key-for\":382}],382:[function(e,t,r){\"use strict\";var n=e(\"../internals/export\"),o=e(\"../internals/has-own-property\"),i=e(\"../internals/is-symbol\"),a=e(\"../internals/try-to-string\"),s=e(\"../internals/shared\"),l=e(\"../internals/symbol-registry-detection\"),c=s(\"symbol-to-string-registry\");n({target:\"Symbol\",stat:!0,forced:!l},{keyFor:function(e){if(!i(e))throw new TypeError(a(e)+\" is not a symbol\");if(o(c,e))return c[e]}})},{\"../internals/export\":259,\"../internals/has-own-property\":275,\"../internals/is-symbol\":292,\"../internals/shared\":334,\"../internals/symbol-registry-detection\":338,\"../internals/try-to-string\":349}],383:[function(e,t,r){\"use strict\";function n(e){return Object.prototype.toString.call(e)}r.isArray=function(e){return Array.isArray?Array.isArray(e):\"[object Array]\"===n(e)},r.isBoolean=function(e){return\"boolean\"==typeof e},r.isNull=function(e){return null===e},r.isNullOrUndefined=function(e){return null==e},r.isNumber=function(e){return\"number\"==typeof e},r.isString=function(e){return\"string\"==typeof e},r.isSymbol=function(e){return\"symbol\"==typeof e},r.isUndefined=function(e){return void 0===e},r.isRegExp=function(e){return\"[object RegExp]\"===n(e)},r.isObject=function(e){return\"object\"==typeof e&&null!==e},r.isDate=function(e){return\"[object Date]\"===n(e)},r.isError=function(e){return\"[object Error]\"===n(e)||e instanceof Error},r.isFunction=function(e){return\"function\"==typeof e},r.isPrimitive=function(e){return null===e||\"boolean\"==typeof e||\"number\"==typeof e||\"string\"==typeof e||\"symbol\"==typeof e||void 0===e},r.isBuffer=e(\"buffer\").Buffer.isBuffer},{buffer:220}],384:[function(e,t,r){(function(r){(function(){\"use strict\";var n=e(\"elliptic\"),o=e(\"bn.js\");t.exports=function(e){return new a(e)};var i={secp256k1:{name:\"secp256k1\",byteLength:32},secp224r1:{name:\"p224\",byteLength:28},prime256v1:{name:\"p256\",byteLength:32},prime192v1:{name:\"p192\",byteLength:24},ed25519:{name:\"ed25519\",byteLength:32},secp384r1:{name:\"p384\",byteLength:48},secp521r1:{name:\"p521\",byteLength:66}};function a(e){this.curveType=i[e],this.curveType||(this.curveType={name:e}),this.curve=new n.ec(this.curveType.name),this.keys=void 0}function s(e,t,n){Array.isArray(e)||(e=e.toArray());var o=new r(e);if(n&&o.length<n){var i=new r(n-o.length);i.fill(0),o=r.concat([i,o])}return t?o.toString(t):o}i.p224=i.secp224r1,i.p256=i.secp256r1=i.prime256v1,i.p192=i.secp192r1=i.prime192v1,i.p384=i.secp384r1,i.p521=i.secp521r1,a.prototype.generateKeys=function(e,t){return this.keys=this.curve.genKeyPair(),this.getPublicKey(e,t)},a.prototype.computeSecret=function(e,t,n){return t=t||\"utf8\",r.isBuffer(e)||(e=new r(e,t)),s(this.curve.keyFromPublic(e).getPublic().mul(this.keys.getPrivate()).getX(),n,this.curveType.byteLength)},a.prototype.getPublicKey=function(e,t){var r=this.keys.getPublic(\"compressed\"===t,!0);return\"hybrid\"===t&&(r[r.length-1]%2?r[0]=7:r[0]=6),s(r,e)},a.prototype.getPrivateKey=function(e){return s(this.keys.getPrivate(),e)},a.prototype.setPublicKey=function(e,t){return t=t||\"utf8\",r.isBuffer(e)||(e=new r(e,t)),this.keys._importPublic(e),this},a.prototype.setPrivateKey=function(e,t){t=t||\"utf8\",r.isBuffer(e)||(e=new r(e,t));var n=new o(e);return n=n.toString(16),this.keys=this.curve.genKeyPair(),this.keys._importPrivate(n),this}}).call(this)}).call(this,e(\"buffer\").Buffer)},{\"bn.js\":385,buffer:220,elliptic:405}],385:[function(e,t,r){arguments[4][184][0].apply(r,arguments)},{buffer:188,dup:184}],386:[function(e,t,r){\"use strict\";var n=e(\"inherits\"),o=e(\"md5.js\"),i=e(\"ripemd160\"),a=e(\"sha.js\"),s=e(\"cipher-base\");function l(e){s.call(this,\"digest\"),this._hash=e}n(l,s),l.prototype._update=function(e){this._hash.update(e)},l.prototype._final=function(){return this._hash.digest()},t.exports=function(e){return\"md5\"===(e=e.toLowerCase())?new o:\"rmd160\"===e||\"ripemd160\"===e?new i:new l(a(e))}},{\"cipher-base\":221,inherits:440,\"md5.js\":450,ripemd160:493,\"sha.js\":498}],387:[function(e,t,r){\"use strict\";var n=e(\"md5.js\");t.exports=function(e){return(new n).update(e).digest()}},{\"md5.js\":450}],388:[function(e,t,r){\"use strict\";var n=e(\"inherits\"),o=e(\"./legacy\"),i=e(\"cipher-base\"),a=e(\"safe-buffer\").Buffer,s=e(\"create-hash/md5\"),l=e(\"ripemd160\"),c=e(\"sha.js\"),u=a.alloc(128);function d(e,t){i.call(this,\"digest\"),\"string\"==typeof t&&(t=a.from(t));var r=\"sha512\"===e||\"sha384\"===e?128:64;this._alg=e,this._key=t,t.length>r?t=(\"rmd160\"===e?new l:c(e)).update(t).digest():t.length<r&&(t=a.concat([t,u],r));for(var n=this._ipad=a.allocUnsafe(r),o=this._opad=a.allocUnsafe(r),s=0;s<r;s++)n[s]=54^t[s],o[s]=92^t[s];this._hash=\"rmd160\"===e?new l:c(e),this._hash.update(n)}n(d,i),d.prototype._update=function(e){this._hash.update(e)},d.prototype._final=function(){var e=this._hash.digest();return(\"rmd160\"===this._alg?new l:c(this._alg)).update(this._opad).update(e).digest()},t.exports=function(e,t){return\"rmd160\"===(e=e.toLowerCase())||\"ripemd160\"===e?new d(\"rmd160\",t):\"md5\"===e?new o(s,t):new d(e,t)}},{\"./legacy\":389,\"cipher-base\":221,\"create-hash/md5\":387,inherits:440,ripemd160:493,\"safe-buffer\":494,\"sha.js\":498}],389:[function(e,t,r){\"use strict\";var n=e(\"inherits\"),o=e(\"safe-buffer\").Buffer,i=e(\"cipher-base\"),a=o.alloc(128);function s(e,t){i.call(this,\"digest\"),\"string\"==typeof t&&(t=o.from(t)),this._alg=e,this._key=t,t.length>64?t=e(t):t.length<64&&(t=o.concat([t,a],64));for(var r=this._ipad=o.allocUnsafe(64),n=this._opad=o.allocUnsafe(64),s=0;s<64;s++)r[s]=54^t[s],n[s]=92^t[s];this._hash=[r]}n(s,i),s.prototype._update=function(e){this._hash.push(e)},s.prototype._final=function(){var e=this._alg(o.concat(this._hash));return this._alg(o.concat([this._opad,e]))},t.exports=s},{\"cipher-base\":221,inherits:440,\"safe-buffer\":494}],390:[function(e,t,r){\"use strict\";r.randomBytes=r.rng=r.pseudoRandomBytes=r.prng=e(\"randombytes\"),r.createHash=r.Hash=e(\"create-hash\"),r.createHmac=r.Hmac=e(\"create-hmac\");var n=e(\"browserify-sign/algos\"),o=Object.keys(n),i=[\"sha1\",\"sha224\",\"sha256\",\"sha384\",\"sha512\",\"md5\",\"rmd160\"].concat(o);r.getHashes=function(){return i};var a=e(\"pbkdf2\");r.pbkdf2=a.pbkdf2,r.pbkdf2Sync=a.pbkdf2Sync;var s=e(\"browserify-cipher\");r.Cipher=s.Cipher,r.createCipher=s.createCipher,r.Cipheriv=s.Cipheriv,r.createCipheriv=s.createCipheriv,r.Decipher=s.Decipher,r.createDecipher=s.createDecipher,r.Decipheriv=s.Decipheriv,r.createDecipheriv=s.createDecipheriv,r.getCiphers=s.getCiphers,r.listCiphers=s.listCiphers;var l=e(\"diffie-hellman\");r.DiffieHellmanGroup=l.DiffieHellmanGroup,r.createDiffieHellmanGroup=l.createDiffieHellmanGroup,r.getDiffieHellman=l.getDiffieHellman,r.createDiffieHellman=l.createDiffieHellman,r.DiffieHellman=l.DiffieHellman;var c=e(\"browserify-sign\");r.createSign=c.createSign,r.Sign=c.Sign,r.createVerify=c.createVerify,r.Verify=c.Verify,r.createECDH=e(\"create-ecdh\");var u=e(\"public-encrypt\");r.publicEncrypt=u.publicEncrypt,r.privateEncrypt=u.privateEncrypt,r.publicDecrypt=u.publicDecrypt,r.privateDecrypt=u.privateDecrypt;var d=e(\"randomfill\");r.randomFill=d.randomFill,r.randomFillSync=d.randomFillSync,r.createCredentials=function(){throw new Error([\"sorry, createCredentials is not implemented yet\",\"we accept pull requests\",\"https://github.com/crypto-browserify/crypto-browserify\"].join(\"\\n\"))},r.constants={DH_CHECK_P_NOT_SAFE_PRIME:2,DH_CHECK_P_NOT_PRIME:1,DH_UNABLE_TO_CHECK_GENERATOR:4,DH_NOT_SUITABLE_GENERATOR:8,NPN_ENABLED:1,ALPN_ENABLED:1,RSA_PKCS1_PADDING:1,RSA_SSLV23_PADDING:2,RSA_NO_PADDING:3,RSA_PKCS1_OAEP_PADDING:4,RSA_X931_PADDING:5,RSA_PKCS1_PSS_PADDING:6,POINT_CONVERSION_COMPRESSED:2,POINT_CONVERSION_UNCOMPRESSED:4,POINT_CONVERSION_HYBRID:6}},{\"browserify-cipher\":206,\"browserify-sign\":213,\"browserify-sign/algos\":210,\"create-ecdh\":384,\"create-hash\":386,\"create-hmac\":388,\"diffie-hellman\":400,pbkdf2:460,\"public-encrypt\":468,randombytes:475,randomfill:476}],391:[function(e,t,r){\"use strict\";!function(e,n){\"object\"==typeof r&&void 0!==t?t.exports=n():(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs=n()}(void 0,(function(){var e=6e4,t=36e5,r=\"millisecond\",n=\"second\",o=\"minute\",i=\"hour\",a=\"day\",s=\"week\",l=\"month\",c=\"quarter\",u=\"year\",d=\"date\",f=\"Invalid Date\",h=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,p=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,m={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(e){var t=[\"th\",\"st\",\"nd\",\"rd\"],r=e%100;return\"[\"+e+(t[(r-20)%10]||t[r]||t[0])+\"]\"}},g=function(e,t,r){var n=String(e);return!n||n.length>=t?e:\"\"+Array(t+1-n.length).join(r)+e},v={s:g,z:function(e){var t=-e.utcOffset(),r=Math.abs(t),n=Math.floor(r/60),o=r%60;return(t<=0?\"+\":\"-\")+g(n,2,\"0\")+\":\"+g(o,2,\"0\")},m:function e(t,r){if(t.date()<r.date())return-e(r,t);var n=12*(r.year()-t.year())+(r.month()-t.month()),o=t.clone().add(n,l),i=r-o<0,a=t.clone().add(n+(i?-1:1),l);return+(-(n+(r-o)/(i?o-a:a-o))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(e){return{M:l,y:u,w:s,d:a,D:d,h:i,m:o,s:n,ms:r,Q:c}[e]||String(e||\"\").toLowerCase().replace(/s$/,\"\")},u:function(e){return void 0===e}},b=\"en\",y={};y[b]=m;var w=\"$isDayjsObject\",x=function(e){return e instanceof E||!(!e||!e[w])},S=function e(t,r,n){var o;if(!t)return b;if(\"string\"==typeof t){var i=t.toLowerCase();y[i]&&(o=i),r&&(y[i]=r,o=i);var a=t.split(\"-\");if(!o&&a.length>1)return e(a[0])}else{var s=t.name;y[s]=t,o=s}return!n&&o&&(b=o),o||!n&&b},C=function(e,t){if(x(e))return e.clone();var r=\"object\"==typeof t?t:{};return r.date=e,r.args=arguments,new E(r)},k=v;k.l=S,k.i=x,k.w=function(e,t){return C(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var E=function(){function m(e){this.$L=S(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[w]=!0}var g=m.prototype;return g.parse=function(e){this.$d=function(e){var t=e.date,r=e.utc;if(null===t)return new Date(NaN);if(k.u(t))return new Date;if(t instanceof Date)return new Date(t);if(\"string\"==typeof t&&!/Z$/i.test(t)){var n=t.match(h);if(n){var o=n[2]-1||0,i=(n[7]||\"0\").substring(0,3);return r?new Date(Date.UTC(n[1],o,n[3]||1,n[4]||0,n[5]||0,n[6]||0,i)):new Date(n[1],o,n[3]||1,n[4]||0,n[5]||0,n[6]||0,i)}}return new Date(t)}(e),this.init()},g.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},g.$utils=function(){return k},g.isValid=function(){return!(this.$d.toString()===f)},g.isSame=function(e,t){var r=C(e);return this.startOf(t)<=r&&r<=this.endOf(t)},g.isAfter=function(e,t){return C(e)<this.startOf(t)},g.isBefore=function(e,t){return this.endOf(t)<C(e)},g.$g=function(e,t,r){return k.u(e)?this[t]:this.set(r,e)},g.unix=function(){return Math.floor(this.valueOf()/1e3)},g.valueOf=function(){return this.$d.getTime()},g.startOf=function(e,t){var r=this,c=!!k.u(t)||t,f=k.p(e),h=function(e,t){var n=k.w(r.$u?Date.UTC(r.$y,t,e):new Date(r.$y,t,e),r);return c?n:n.endOf(a)},p=function(e,t){return k.w(r.toDate()[e].apply(r.toDate(\"s\"),(c?[0,0,0,0]:[23,59,59,999]).slice(t)),r)},m=this.$W,g=this.$M,v=this.$D,b=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case u:return c?h(1,0):h(31,11);case l:return c?h(1,g):h(0,g+1);case s:var y=this.$locale().weekStart||0,w=(m<y?m+7:m)-y;return h(c?v-w:v+(6-w),g);case a:case d:return p(b+\"Hours\",0);case i:return p(b+\"Minutes\",1);case o:return p(b+\"Seconds\",2);case n:return p(b+\"Milliseconds\",3);default:return this.clone()}},g.endOf=function(e){return this.startOf(e,!1)},g.$set=function(e,t){var s,c=k.p(e),f=\"set\"+(this.$u?\"UTC\":\"\"),h=(s={},s[a]=f+\"Date\",s[d]=f+\"Date\",s[l]=f+\"Month\",s[u]=f+\"FullYear\",s[i]=f+\"Hours\",s[o]=f+\"Minutes\",s[n]=f+\"Seconds\",s[r]=f+\"Milliseconds\",s)[c],p=c===a?this.$D+(t-this.$W):t;if(c===l||c===u){var m=this.clone().set(d,1);m.$d[h](p),m.init(),this.$d=m.set(d,Math.min(this.$D,m.daysInMonth())).$d}else h&&this.$d[h](p);return this.init(),this},g.set=function(e,t){return this.clone().$set(e,t)},g.get=function(e){return this[k.p(e)]()},g.add=function(r,c){var d,f=this;r=Number(r);var h=k.p(c),p=function(e){var t=C(f);return k.w(t.date(t.date()+Math.round(e*r)),f)};if(h===l)return this.set(l,this.$M+r);if(h===u)return this.set(u,this.$y+r);if(h===a)return p(1);if(h===s)return p(7);var m=(d={},d[o]=e,d[i]=t,d[n]=1e3,d)[h]||1,g=this.$d.getTime()+r*m;return k.w(g,this)},g.subtract=function(e,t){return this.add(-1*e,t)},g.format=function(e){var t=this,r=this.$locale();if(!this.isValid())return r.invalidDate||f;var n=e||\"YYYY-MM-DDTHH:mm:ssZ\",o=k.z(this),i=this.$H,a=this.$m,s=this.$M,l=r.weekdays,c=r.months,u=r.meridiem,d=function(e,r,o,i){return e&&(e[r]||e(t,n))||o[r].slice(0,i)},h=function(e){return k.s(i%12||12,e,\"0\")},m=u||function(e,t,r){var n=e<12?\"AM\":\"PM\";return r?n.toLowerCase():n};return n.replace(p,(function(e,n){return n||function(e){switch(e){case\"YY\":return String(t.$y).slice(-2);case\"YYYY\":return k.s(t.$y,4,\"0\");case\"M\":return s+1;case\"MM\":return k.s(s+1,2,\"0\");case\"MMM\":return d(r.monthsShort,s,c,3);case\"MMMM\":return d(c,s);case\"D\":return t.$D;case\"DD\":return k.s(t.$D,2,\"0\");case\"d\":return String(t.$W);case\"dd\":return d(r.weekdaysMin,t.$W,l,2);case\"ddd\":return d(r.weekdaysShort,t.$W,l,3);case\"dddd\":return l[t.$W];case\"H\":return String(i);case\"HH\":return k.s(i,2,\"0\");case\"h\":return h(1);case\"hh\":return h(2);case\"a\":return m(i,a,!0);case\"A\":return m(i,a,!1);case\"m\":return String(a);case\"mm\":return k.s(a,2,\"0\");case\"s\":return String(t.$s);case\"ss\":return k.s(t.$s,2,\"0\");case\"SSS\":return k.s(t.$ms,3,\"0\");case\"Z\":return o}return null}(e)||o.replace(\":\",\"\")}))},g.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},g.diff=function(r,d,f){var h,p=this,m=k.p(d),g=C(r),v=(g.utcOffset()-this.utcOffset())*e,b=this-g,y=function(){return k.m(p,g)};switch(m){case u:h=y()/12;break;case l:h=y();break;case c:h=y()/3;break;case s:h=(b-v)/6048e5;break;case a:h=(b-v)/864e5;break;case i:h=b/t;break;case o:h=b/e;break;case n:h=b/1e3;break;default:h=b}return f?h:k.a(h)},g.daysInMonth=function(){return this.endOf(l).$D},g.$locale=function(){return y[this.$L]},g.locale=function(e,t){if(!e)return this.$L;var r=this.clone(),n=S(e,t,!0);return n&&(r.$L=n),r},g.clone=function(){return k.w(this.$d,this)},g.toDate=function(){return new Date(this.valueOf())},g.toJSON=function(){return this.isValid()?this.toISOString():null},g.toISOString=function(){return this.$d.toISOString()},g.toString=function(){return this.$d.toUTCString()},m}(),O=E.prototype;return C.prototype=O,[[\"$ms\",r],[\"$s\",n],[\"$m\",o],[\"$H\",i],[\"$W\",a],[\"$M\",l],[\"$y\",u],[\"$D\",d]].forEach((function(e){O[e[1]]=function(t){return this.$g(t,e[0],e[1])}})),C.extend=function(e,t){return e.$i||(e(t,E,C),e.$i=!0),C},C.locale=S,C.isDayjs=x,C.unix=function(e){return C(1e3*e)},C.en=y[b],C.Ls=y,C.p={},C}))},{}],392:[function(e,t,r){\"use strict\";!function(e,n){\"object\"==typeof r&&void 0!==t?t.exports=n():(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=n()}(void 0,(function(){var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,r=/\\d\\d/,n=/\\d\\d?/,o=/\\d*[^-_:/,()\\s\\d]+/,i={},a=function(e){return(e=+e)+(e>68?1900:2e3)},s=function(e){return function(t){this[e]=+t}},l=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),r=60*t[1]+(+t[2]||0);return 0===r?0:\"+\"===t[0]?-r:r}(e)}],c=function(e){var t=i[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var r,n=i.meridiem;if(n){for(var o=1;o<=24;o+=1)if(e.indexOf(n(o,0,t))>-1){r=o>12;break}}else r=e===(t?\"pm\":\"PM\");return r},d={A:[o,function(e){this.afternoon=u(e,!1)}],a:[o,function(e){this.afternoon=u(e,!0)}],S:[/\\d/,function(e){this.milliseconds=100*+e}],SS:[r,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[n,s(\"seconds\")],ss:[n,s(\"seconds\")],m:[n,s(\"minutes\")],mm:[n,s(\"minutes\")],H:[n,s(\"hours\")],h:[n,s(\"hours\")],HH:[n,s(\"hours\")],hh:[n,s(\"hours\")],D:[n,s(\"day\")],DD:[r,s(\"day\")],Do:[o,function(e){var t=i.ordinal,r=e.match(/\\d+/);if(this.day=r[0],t)for(var n=1;n<=31;n+=1)t(n).replace(/\\[|\\]/g,\"\")===e&&(this.day=n)}],M:[n,s(\"month\")],MM:[r,s(\"month\")],MMM:[o,function(e){var t=c(\"months\"),r=(c(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(r<1)throw new Error;this.month=r%12||r}],MMMM:[o,function(e){var t=c(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,s(\"year\")],YY:[r,function(e){this.year=a(e)}],YYYY:[/\\d{4}/,s(\"year\")],Z:l,ZZ:l};function f(r){var n,o;n=r,o=i&&i.formats;for(var a=(r=n.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,r,n){var i=n&&n.toUpperCase();return r||o[n]||e[n]||o[i].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,r){return t||r.slice(1)}))}))).match(t),s=a.length,l=0;l<s;l+=1){var c=a[l],u=d[c],f=u&&u[0],h=u&&u[1];a[l]=h?{regex:f,parser:h}:c.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},r=0,n=0;r<s;r+=1){var o=a[r];if(\"string\"==typeof o)n+=o.length;else{var i=o.regex,l=o.parser,c=e.slice(n),u=i.exec(c)[0];l.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var r=e.hours;t?r<12&&(e.hours+=12):12===r&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,r){r.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(a=e.parseTwoDigitYear);var n=t.prototype,o=n.parse;n.parse=function(e){var t=e.date,n=e.utc,a=e.args;this.$u=n;var s=a[1];if(\"string\"==typeof s){var l=!0===a[2],c=!0===a[3],u=l||c,d=a[2];c&&(d=a[2]),i=this.$locale(),!l&&d&&(i=r.Ls[d]),this.$d=function(e,t,r){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var n=f(t)(e),o=n.year,i=n.month,a=n.day,s=n.hours,l=n.minutes,c=n.seconds,u=n.milliseconds,d=n.zone,h=new Date,p=a||(o||i?1:h.getDate()),m=o||h.getFullYear(),g=0;o&&!i||(g=i>0?i-1:h.getMonth());var v=s||0,b=l||0,y=c||0,w=u||0;return d?new Date(Date.UTC(m,g,p,v,b,y,w+60*d.offset*1e3)):r?new Date(Date.UTC(m,g,p,v,b,y,w)):new Date(m,g,p,v,b,y,w)}catch(e){return new Date(\"\")}}(t,s,n),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(s)&&(this.$d=new Date(\"\")),i={}}else if(s instanceof Array)for(var h=s.length,p=1;p<=h;p+=1){a[1]=s[p-1];var m=r.apply(this,a);if(m.isValid()){this.$d=m.$d,this.$L=m.$L,this.init();break}p===h&&(this.$d=new Date(\"\"))}else o.call(this,e)}}}))},{}],393:[function(e,t,r){\"use strict\";!function(e,n){\"object\"==typeof r&&void 0!==t?t.exports=n():(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_utc=n()}(void 0,(function(){var e=\"minute\",t=/[+-]\\d\\d(?::?\\d\\d)?/g,r=/([+-]|\\d\\d)/g;return function(n,o,i){var a=o.prototype;i.utc=function(e){return new o({date:e,utc:!0,args:arguments})},a.utc=function(t){var r=i(this.toDate(),{locale:this.$L,utc:!0});return t?r.add(this.utcOffset(),e):r},a.local=function(){return i(this.toDate(),{locale:this.$L,utc:!1})};var s=a.parse;a.parse=function(e){e.utc&&(this.$u=!0),this.$utils().u(e.$offset)||(this.$offset=e.$offset),s.call(this,e)};var l=a.init;a.init=function(){if(this.$u){var e=this.$d;this.$y=e.getUTCFullYear(),this.$M=e.getUTCMonth(),this.$D=e.getUTCDate(),this.$W=e.getUTCDay(),this.$H=e.getUTCHours(),this.$m=e.getUTCMinutes(),this.$s=e.getUTCSeconds(),this.$ms=e.getUTCMilliseconds()}else l.call(this)};var c=a.utcOffset;a.utcOffset=function(n,o){var i=this.$utils().u;if(i(n))return this.$u?0:i(this.$offset)?c.call(this):this.$offset;if(\"string\"==typeof n&&null===(n=function(e){void 0===e&&(e=\"\");var n=e.match(t);if(!n)return null;var o=(\"\"+n[0]).match(r)||[\"-\",0,0],i=o[0],a=60*+o[1]+ +o[2];return 0===a?0:\"+\"===i?a:-a}(n)))return this;var a=Math.abs(n)<=16?60*n:n,s=this;if(o)return s.$offset=a,s.$u=0===n,s;if(0!==n){var l=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(s=this.local().add(a+l,e)).$offset=a,s.$x.$localOffset=l}else s=this.utc();return s};var u=a.format;a.format=function(e){var t=e||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return u.call(this,t)},a.valueOf=function(){var e=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*e},a.isUTC=function(){return!!this.$u},a.toISOString=function(){return this.toDate().toISOString()},a.toString=function(){return this.toDate().toUTCString()};var d=a.toDate;a.toDate=function(e){return\"s\"===e&&this.$offset?i(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():d.call(this)};var f=a.diff;a.diff=function(e,t,r){if(e&&this.$u===e.$u)return f.call(this,e,t,r);var n=this.local(),o=i(e).local();return f.call(n,o,t,r)}}}))},{}],394:[function(e,t,r){\"use strict\";r.utils=e(\"./des/utils\"),r.Cipher=e(\"./des/cipher\"),r.DES=e(\"./des/des\"),r.CBC=e(\"./des/cbc\"),r.EDE=e(\"./des/ede\")},{\"./des/cbc\":395,\"./des/cipher\":396,\"./des/des\":397,\"./des/ede\":398,\"./des/utils\":399}],395:[function(e,t,r){\"use strict\";var n=e(\"minimalistic-assert\"),o=e(\"inherits\"),i={};function a(e){n.equal(e.length,8,\"Invalid IV length\"),this.iv=new Array(8);for(var t=0;t<this.iv.length;t++)this.iv[t]=e[t]}r.instantiate=function(e){function t(t){e.call(this,t),this._cbcInit()}o(t,e);for(var r=Object.keys(i),n=0;n<r.length;n++){var a=r[n];t.prototype[a]=i[a]}return t.create=function(e){return new t(e)},t},i._cbcInit=function(){var e=new a(this.options.iv);this._cbcState=e},i._update=function(e,t,r,n){var o=this._cbcState,i=this.constructor.super_.prototype,a=o.iv;if(\"encrypt\"===this.type){for(var s=0;s<this.blockSize;s++)a[s]^=e[t+s];for(i._update.call(this,a,0,r,n),s=0;s<this.blockSize;s++)a[s]=r[n+s]}else{for(i._update.call(this,e,t,r,n),s=0;s<this.blockSize;s++)r[n+s]^=a[s];for(s=0;s<this.blockSize;s++)a[s]=e[t+s]}}},{inherits:440,\"minimalistic-assert\":453}],396:[function(e,t,r){\"use strict\";var n=e(\"minimalistic-assert\");function o(e){this.options=e,this.type=this.options.type,this.blockSize=8,this._init(),this.buffer=new Array(this.blockSize),this.bufferOff=0,this.padding=!1!==e.padding}t.exports=o,o.prototype._init=function(){},o.prototype.update=function(e){return 0===e.length?[]:\"decrypt\"===this.type?this._updateDecrypt(e):this._updateEncrypt(e)},o.prototype._buffer=function(e,t){for(var r=Math.min(this.buffer.length-this.bufferOff,e.length-t),n=0;n<r;n++)this.buffer[this.bufferOff+n]=e[t+n];return this.bufferOff+=r,r},o.prototype._flushBuffer=function(e,t){return this._update(this.buffer,0,e,t),this.bufferOff=0,this.blockSize},o.prototype._updateEncrypt=function(e){var t=0,r=0,n=(this.bufferOff+e.length)/this.blockSize|0,o=new Array(n*this.blockSize);0!==this.bufferOff&&(t+=this._buffer(e,t),this.bufferOff===this.buffer.length&&(r+=this._flushBuffer(o,r)));for(var i=e.length-(e.length-t)%this.blockSize;t<i;t+=this.blockSize)this._update(e,t,o,r),r+=this.blockSize;for(;t<e.length;t++,this.bufferOff++)this.buffer[this.bufferOff]=e[t];return o},o.prototype._updateDecrypt=function(e){for(var t=0,r=0,n=Math.ceil((this.bufferOff+e.length)/this.blockSize)-1,o=new Array(n*this.blockSize);n>0;n--)t+=this._buffer(e,t),r+=this._flushBuffer(o,r);return t+=this._buffer(e,t),o},o.prototype.final=function(e){var t,r;return e&&(t=this.update(e)),r=\"encrypt\"===this.type?this._finalEncrypt():this._finalDecrypt(),t?t.concat(r):r},o.prototype._pad=function(e,t){if(0===t)return!1;for(;t<e.length;)e[t++]=0;return!0},o.prototype._finalEncrypt=function(){if(!this._pad(this.buffer,this.bufferOff))return[];var e=new Array(this.blockSize);return this._update(this.buffer,0,e,0),e},o.prototype._unpad=function(e){return e},o.prototype._finalDecrypt=function(){n.equal(this.bufferOff,this.blockSize,\"Not enough data to decrypt\");var e=new Array(this.blockSize);return this._flushBuffer(e,0),this._unpad(e)}},{\"minimalistic-assert\":453}],397:[function(e,t,r){\"use strict\";var n=e(\"minimalistic-assert\"),o=e(\"inherits\"),i=e(\"./utils\"),a=e(\"./cipher\");function s(){this.tmp=new Array(2),this.keys=null}function l(e){a.call(this,e);var t=new s;this._desState=t,this.deriveKeys(t,e.key)}o(l,a),t.exports=l,l.create=function(e){return new l(e)};var c=[1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1];l.prototype.deriveKeys=function(e,t){e.keys=new Array(32),n.equal(t.length,this.blockSize,\"Invalid key length\");var r=i.readUInt32BE(t,0),o=i.readUInt32BE(t,4);i.pc1(r,o,e.tmp,0),r=e.tmp[0],o=e.tmp[1];for(var a=0;a<e.keys.length;a+=2){var s=c[a>>>1];r=i.r28shl(r,s),o=i.r28shl(o,s),i.pc2(r,o,e.keys,a)}},l.prototype._update=function(e,t,r,n){var o=this._desState,a=i.readUInt32BE(e,t),s=i.readUInt32BE(e,t+4);i.ip(a,s,o.tmp,0),a=o.tmp[0],s=o.tmp[1],\"encrypt\"===this.type?this._encrypt(o,a,s,o.tmp,0):this._decrypt(o,a,s,o.tmp,0),a=o.tmp[0],s=o.tmp[1],i.writeUInt32BE(r,a,n),i.writeUInt32BE(r,s,n+4)},l.prototype._pad=function(e,t){if(!1===this.padding)return!1;for(var r=e.length-t,n=t;n<e.length;n++)e[n]=r;return!0},l.prototype._unpad=function(e){if(!1===this.padding)return e;for(var t=e[e.length-1],r=e.length-t;r<e.length;r++)n.equal(e[r],t);return e.slice(0,e.length-t)},l.prototype._encrypt=function(e,t,r,n,o){for(var a=t,s=r,l=0;l<e.keys.length;l+=2){var c=e.keys[l],u=e.keys[l+1];i.expand(s,e.tmp,0),c^=e.tmp[0],u^=e.tmp[1];var d=i.substitute(c,u),f=s;s=(a^i.permute(d))>>>0,a=f}i.rip(s,a,n,o)},l.prototype._decrypt=function(e,t,r,n,o){for(var a=r,s=t,l=e.keys.length-2;l>=0;l-=2){var c=e.keys[l],u=e.keys[l+1];i.expand(a,e.tmp,0),c^=e.tmp[0],u^=e.tmp[1];var d=i.substitute(c,u),f=a;a=(s^i.permute(d))>>>0,s=f}i.rip(a,s,n,o)}},{\"./cipher\":396,\"./utils\":399,inherits:440,\"minimalistic-assert\":453}],398:[function(e,t,r){\"use strict\";var n=e(\"minimalistic-assert\"),o=e(\"inherits\"),i=e(\"./cipher\"),a=e(\"./des\");function s(e,t){n.equal(t.length,24,\"Invalid key length\");var r=t.slice(0,8),o=t.slice(8,16),i=t.slice(16,24);this.ciphers=\"encrypt\"===e?[a.create({type:\"encrypt\",key:r}),a.create({type:\"decrypt\",key:o}),a.create({type:\"encrypt\",key:i})]:[a.create({type:\"decrypt\",key:i}),a.create({type:\"encrypt\",key:o}),a.create({type:\"decrypt\",key:r})]}function l(e){i.call(this,e);var t=new s(this.type,this.options.key);this._edeState=t}o(l,i),t.exports=l,l.create=function(e){return new l(e)},l.prototype._update=function(e,t,r,n){var o=this._edeState;o.ciphers[0]._update(e,t,r,n),o.ciphers[1]._update(r,n,r,n),o.ciphers[2]._update(r,n,r,n)},l.prototype._pad=a.prototype._pad,l.prototype._unpad=a.prototype._unpad},{\"./cipher\":396,\"./des\":397,inherits:440,\"minimalistic-assert\":453}],399:[function(e,t,r){\"use strict\";r.readUInt32BE=function(e,t){return(e[0+t]<<24|e[1+t]<<16|e[2+t]<<8|e[3+t])>>>0},r.writeUInt32BE=function(e,t,r){e[0+r]=t>>>24,e[1+r]=t>>>16&255,e[2+r]=t>>>8&255,e[3+r]=255&t},r.ip=function(e,t,r,n){for(var o=0,i=0,a=6;a>=0;a-=2){for(var s=0;s<=24;s+=8)o<<=1,o|=t>>>s+a&1;for(s=0;s<=24;s+=8)o<<=1,o|=e>>>s+a&1}for(a=6;a>=0;a-=2){for(s=1;s<=25;s+=8)i<<=1,i|=t>>>s+a&1;for(s=1;s<=25;s+=8)i<<=1,i|=e>>>s+a&1}r[n+0]=o>>>0,r[n+1]=i>>>0},r.rip=function(e,t,r,n){for(var o=0,i=0,a=0;a<4;a++)for(var s=24;s>=0;s-=8)o<<=1,o|=t>>>s+a&1,o<<=1,o|=e>>>s+a&1;for(a=4;a<8;a++)for(s=24;s>=0;s-=8)i<<=1,i|=t>>>s+a&1,i<<=1,i|=e>>>s+a&1;r[n+0]=o>>>0,r[n+1]=i>>>0},r.pc1=function(e,t,r,n){for(var o=0,i=0,a=7;a>=5;a--){for(var s=0;s<=24;s+=8)o<<=1,o|=t>>s+a&1;for(s=0;s<=24;s+=8)o<<=1,o|=e>>s+a&1}for(s=0;s<=24;s+=8)o<<=1,o|=t>>s+a&1;for(a=1;a<=3;a++){for(s=0;s<=24;s+=8)i<<=1,i|=t>>s+a&1;for(s=0;s<=24;s+=8)i<<=1,i|=e>>s+a&1}for(s=0;s<=24;s+=8)i<<=1,i|=e>>s+a&1;r[n+0]=o>>>0,r[n+1]=i>>>0},r.r28shl=function(e,t){return e<<t&268435455|e>>>28-t};var n=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];r.pc2=function(e,t,r,o){for(var i=0,a=0,s=n.length>>>1,l=0;l<s;l++)i<<=1,i|=e>>>n[l]&1;for(l=s;l<n.length;l++)a<<=1,a|=t>>>n[l]&1;r[o+0]=i>>>0,r[o+1]=a>>>0},r.expand=function(e,t,r){var n=0,o=0;n=(1&e)<<5|e>>>27;for(var i=23;i>=15;i-=4)n<<=6,n|=e>>>i&63;for(i=11;i>=3;i-=4)o|=e>>>i&63,o<<=6;o|=(31&e)<<1|e>>>31,t[r+0]=n>>>0,t[r+1]=o>>>0};var o=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];r.substitute=function(e,t){for(var r=0,n=0;n<4;n++)r<<=4,r|=o[64*n+(e>>>18-6*n&63)];for(n=0;n<4;n++)r<<=4,r|=o[256+64*n+(t>>>18-6*n&63)];return r>>>0};var i=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];r.permute=function(e){for(var t=0,r=0;r<i.length;r++)t<<=1,t|=e>>>i[r]&1;return t>>>0},r.padSplit=function(e,t,r){for(var n=e.toString(2);n.length<t;)n=\"0\"+n;for(var o=[],i=0;i<t;i+=r)o.push(n.slice(i,i+r));return o.join(\" \")}},{}],400:[function(e,t,r){(function(t){(function(){\"use strict\";var n=e(\"./lib/generatePrime\"),o=e(\"./lib/primes.json\"),i=e(\"./lib/dh\"),a={binary:!0,hex:!0,base64:!0};r.DiffieHellmanGroup=r.createDiffieHellmanGroup=r.getDiffieHellman=function(e){var r=new t(o[e].prime,\"hex\"),n=new t(o[e].gen,\"hex\");return new i(r,n)},r.createDiffieHellman=r.DiffieHellman=function e(r,o,s,l){return t.isBuffer(o)||void 0===a[o]?e(r,\"binary\",o,s):(o=o||\"binary\",l=l||\"binary\",s=s||new t([2]),t.isBuffer(s)||(s=new t(s,l)),\"number\"==typeof r?new i(n(r,s),s,!0):(t.isBuffer(r)||(r=new t(r,o)),new i(r,s,!0)))}}).call(this)}).call(this,e(\"buffer\").Buffer)},{\"./lib/dh\":401,\"./lib/generatePrime\":402,\"./lib/primes.json\":403,buffer:220}],401:[function(e,t,r){(function(r){(function(){\"use strict\";var n=e(\"bn.js\"),o=new(e(\"miller-rabin\")),i=new n(24),a=new n(11),s=new n(10),l=new n(3),c=new n(7),u=e(\"./generatePrime\"),d=e(\"randombytes\");function f(e,t){return t=t||\"utf8\",r.isBuffer(e)||(e=new r(e,t)),this._pub=new n(e),this}function h(e,t){return t=t||\"utf8\",r.isBuffer(e)||(e=new r(e,t)),this._priv=new n(e),this}t.exports=m;var p={};function m(e,t,r){this.setGenerator(t),this.__prime=new n(e),this._prime=n.mont(this.__prime),this._primeLen=e.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,r?(this.setPublicKey=f,this.setPrivateKey=h):this._primeCode=8}function g(e,t){var n=new r(e.toArray());return t?n.toString(t):n}Object.defineProperty(m.prototype,\"verifyError\",{enumerable:!0,get:function(){return\"number\"!=typeof this._primeCode&&(this._primeCode=function(e,t){var r=t.toString(\"hex\"),n=[r,e.toString(16)].join(\"_\");if(n in p)return p[n];var d,f=0;if(e.isEven()||!u.simpleSieve||!u.fermatTest(e)||!o.test(e))return f+=1,f+=\"02\"===r||\"05\"===r?8:4,p[n]=f,f;switch(o.test(e.shrn(1))||(f+=2),r){case\"02\":e.mod(i).cmp(a)&&(f+=8);break;case\"05\":(d=e.mod(s)).cmp(l)&&d.cmp(c)&&(f+=8);break;default:f+=4}return p[n]=f,f}(this.__prime,this.__gen)),this._primeCode}}),m.prototype.generateKeys=function(){return this._priv||(this._priv=new n(d(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},m.prototype.computeSecret=function(e){var t=(e=(e=new n(e)).toRed(this._prime)).redPow(this._priv).fromRed(),o=new r(t.toArray()),i=this.getPrime();if(o.length<i.length){var a=new r(i.length-o.length);a.fill(0),o=r.concat([a,o])}return o},m.prototype.getPublicKey=function(e){return g(this._pub,e)},m.prototype.getPrivateKey=function(e){return g(this._priv,e)},m.prototype.getPrime=function(e){return g(this.__prime,e)},m.prototype.getGenerator=function(e){return g(this._gen,e)},m.prototype.setGenerator=function(e,t){return t=t||\"utf8\",r.isBuffer(e)||(e=new r(e,t)),this.__gen=e,this._gen=new n(e),this}}).call(this)}).call(this,e(\"buffer\").Buffer)},{\"./generatePrime\":402,\"bn.js\":404,buffer:220,\"miller-rabin\":451,randombytes:475}],402:[function(e,t,r){\"use strict\";var n=e(\"randombytes\");t.exports=v,v.simpleSieve=m,v.fermatTest=g;var o=e(\"bn.js\"),i=new o(24),a=new(e(\"miller-rabin\")),s=new o(1),l=new o(2),c=new o(5),u=(new o(16),new o(8),new o(10)),d=new o(3),f=(new o(7),new o(11)),h=new o(4),p=(new o(12),null);function m(e){for(var t=function(){if(null!==p)return p;var e=[];e[0]=2;for(var t=1,r=3;r<1048576;r+=2){for(var n=Math.ceil(Math.sqrt(r)),o=0;o<t&&e[o]<=n&&r%e[o]!=0;o++);t!==o&&e[o]<=n||(e[t++]=r)}return p=e,e}(),r=0;r<t.length;r++)if(0===e.modn(t[r]))return 0===e.cmpn(t[r]);return!0}function g(e){var t=o.mont(e);return 0===l.toRed(t).redPow(e.subn(1)).fromRed().cmpn(1)}function v(e,t){if(e<16)return new o(2===t||5===t?[140,123]:[140,39]);var r,p;for(t=new o(t);;){for(r=new o(n(Math.ceil(e/8)));r.bitLength()>e;)r.ishrn(1);if(r.isEven()&&r.iadd(s),r.testn(1)||r.iadd(l),t.cmp(l)){if(!t.cmp(c))for(;r.mod(u).cmp(d);)r.iadd(h)}else for(;r.mod(i).cmp(f);)r.iadd(h);if(m(p=r.shrn(1))&&m(r)&&g(p)&&g(r)&&a.test(p)&&a.test(r))return r}}},{\"bn.js\":404,\"miller-rabin\":451,randombytes:475}],403:[function(e,t,r){t.exports={modp1:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff\"},modp2:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff\"},modp5:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff\"},modp14:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff\"},modp15:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff\"},modp16:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff\"},modp17:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff\"},modp18:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff\"}}},{}],404:[function(e,t,r){arguments[4][184][0].apply(r,arguments)},{buffer:188,dup:184}],405:[function(e,t,r){\"use strict\";var n=r;n.version=e(\"../package.json\").version,n.utils=e(\"./elliptic/utils\"),n.rand=e(\"brorand\"),n.curve=e(\"./elliptic/curve\"),n.curves=e(\"./elliptic/curves\"),n.ec=e(\"./elliptic/ec\"),n.eddsa=e(\"./elliptic/eddsa\")},{\"../package.json\":421,\"./elliptic/curve\":408,\"./elliptic/curves\":411,\"./elliptic/ec\":412,\"./elliptic/eddsa\":415,\"./elliptic/utils\":419,brorand:187}],406:[function(e,t,r){\"use strict\";var n=e(\"bn.js\"),o=e(\"../utils\"),i=o.getNAF,a=o.getJSF,s=o.assert;function l(e,t){this.type=e,this.p=new n(t.p,16),this.red=t.prime?n.red(t.prime):n.mont(this.p),this.zero=new n(0).toRed(this.red),this.one=new n(1).toRed(this.red),this.two=new n(2).toRed(this.red),this.n=t.n&&new n(t.n,16),this.g=t.g&&this.pointFromJSON(t.g,t.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var r=this.n&&this.p.div(this.n);!r||r.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function c(e,t){this.curve=e,this.type=t,this.precomputed=null}t.exports=l,l.prototype.point=function(){throw new Error(\"Not implemented\")},l.prototype.validate=function(){throw new Error(\"Not implemented\")},l.prototype._fixedNafMul=function(e,t){s(e.precomputed);var r=e._getDoubles(),n=i(t,1,this._bitLength),o=(1<<r.step+1)-(r.step%2==0?2:1);o/=3;var a,l,c=[];for(a=0;a<n.length;a+=r.step){l=0;for(var u=a+r.step-1;u>=a;u--)l=(l<<1)+n[u];c.push(l)}for(var d=this.jpoint(null,null,null),f=this.jpoint(null,null,null),h=o;h>0;h--){for(a=0;a<c.length;a++)(l=c[a])===h?f=f.mixedAdd(r.points[a]):l===-h&&(f=f.mixedAdd(r.points[a].neg()));d=d.add(f)}return d.toP()},l.prototype._wnafMul=function(e,t){var r=4,n=e._getNAFPoints(r);r=n.wnd;for(var o=n.points,a=i(t,r,this._bitLength),l=this.jpoint(null,null,null),c=a.length-1;c>=0;c--){for(var u=0;c>=0&&0===a[c];c--)u++;if(c>=0&&u++,l=l.dblp(u),c<0)break;var d=a[c];s(0!==d),l=\"affine\"===e.type?d>0?l.mixedAdd(o[d-1>>1]):l.mixedAdd(o[-d-1>>1].neg()):d>0?l.add(o[d-1>>1]):l.add(o[-d-1>>1].neg())}return\"affine\"===e.type?l.toP():l},l.prototype._wnafMulAdd=function(e,t,r,n,o){var s,l,c,u=this._wnafT1,d=this._wnafT2,f=this._wnafT3,h=0;for(s=0;s<n;s++){var p=(c=t[s])._getNAFPoints(e);u[s]=p.wnd,d[s]=p.points}for(s=n-1;s>=1;s-=2){var m=s-1,g=s;if(1===u[m]&&1===u[g]){var v=[t[m],null,null,t[g]];0===t[m].y.cmp(t[g].y)?(v[1]=t[m].add(t[g]),v[2]=t[m].toJ().mixedAdd(t[g].neg())):0===t[m].y.cmp(t[g].y.redNeg())?(v[1]=t[m].toJ().mixedAdd(t[g]),v[2]=t[m].add(t[g].neg())):(v[1]=t[m].toJ().mixedAdd(t[g]),v[2]=t[m].toJ().mixedAdd(t[g].neg()));var b=[-3,-1,-5,-7,0,7,5,1,3],y=a(r[m],r[g]);for(h=Math.max(y[0].length,h),f[m]=new Array(h),f[g]=new Array(h),l=0;l<h;l++){var w=0|y[0][l],x=0|y[1][l];f[m][l]=b[3*(w+1)+(x+1)],f[g][l]=0,d[m]=v}}else f[m]=i(r[m],u[m],this._bitLength),f[g]=i(r[g],u[g],this._bitLength),h=Math.max(f[m].length,h),h=Math.max(f[g].length,h)}var S=this.jpoint(null,null,null),C=this._wnafT4;for(s=h;s>=0;s--){for(var k=0;s>=0;){var E=!0;for(l=0;l<n;l++)C[l]=0|f[l][s],0!==C[l]&&(E=!1);if(!E)break;k++,s--}if(s>=0&&k++,S=S.dblp(k),s<0)break;for(l=0;l<n;l++){var O=C[l];0!==O&&(O>0?c=d[l][O-1>>1]:O<0&&(c=d[l][-O-1>>1].neg()),S=\"affine\"===c.type?S.mixedAdd(c):S.add(c))}}for(s=0;s<n;s++)d[s]=null;return o?S:S.toP()},l.BasePoint=c,c.prototype.eq=function(){throw new Error(\"Not implemented\")},c.prototype.validate=function(){return this.curve.validate(this)},l.prototype.decodePoint=function(e,t){e=o.toArray(e,t);var r=this.p.byteLength();if((4===e[0]||6===e[0]||7===e[0])&&e.length-1==2*r)return 6===e[0]?s(e[e.length-1]%2==0):7===e[0]&&s(e[e.length-1]%2==1),this.point(e.slice(1,1+r),e.slice(1+r,1+2*r));if((2===e[0]||3===e[0])&&e.length-1===r)return this.pointFromX(e.slice(1,1+r),3===e[0]);throw new Error(\"Unknown point format\")},c.prototype.encodeCompressed=function(e){return this.encode(e,!0)},c.prototype._encode=function(e){var t=this.curve.p.byteLength(),r=this.getX().toArray(\"be\",t);return e?[this.getY().isEven()?2:3].concat(r):[4].concat(r,this.getY().toArray(\"be\",t))},c.prototype.encode=function(e,t){return o.encode(this._encode(t),e)},c.prototype.precompute=function(e){if(this.precomputed)return this;var t={doubles:null,naf:null,beta:null};return t.naf=this._getNAFPoints(8),t.doubles=this._getDoubles(4,e),t.beta=this._getBeta(),this.precomputed=t,this},c.prototype._hasDoubles=function(e){if(!this.precomputed)return!1;var t=this.precomputed.doubles;return!!t&&t.points.length>=Math.ceil((e.bitLength()+1)/t.step)},c.prototype._getDoubles=function(e,t){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],n=this,o=0;o<t;o+=e){for(var i=0;i<e;i++)n=n.dbl();r.push(n)}return{step:e,points:r}},c.prototype._getNAFPoints=function(e){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var t=[this],r=(1<<e)-1,n=1===r?null:this.dbl(),o=1;o<r;o++)t[o]=t[o-1].add(n);return{wnd:e,points:t}},c.prototype._getBeta=function(){return null},c.prototype.dblp=function(e){for(var t=this,r=0;r<e;r++)t=t.dbl();return t}},{\"../utils\":419,\"bn.js\":420}],407:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),o=e(\"bn.js\"),i=e(\"inherits\"),a=e(\"./base\"),s=n.assert;function l(e){this.twisted=1!=(0|e.a),this.mOneA=this.twisted&&-1==(0|e.a),this.extended=this.mOneA,a.call(this,\"edwards\",e),this.a=new o(e.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new o(e.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new o(e.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),s(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|e.c)}function c(e,t,r,n,i){a.BasePoint.call(this,e,\"projective\"),null===t&&null===r&&null===n?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new o(t,16),this.y=new o(r,16),this.z=n?new o(n,16):this.curve.one,this.t=i&&new o(i,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}i(l,a),t.exports=l,l.prototype._mulA=function(e){return this.mOneA?e.redNeg():this.a.redMul(e)},l.prototype._mulC=function(e){return this.oneC?e:this.c.redMul(e)},l.prototype.jpoint=function(e,t,r,n){return this.point(e,t,r,n)},l.prototype.pointFromX=function(e,t){(e=new o(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr(),n=this.c2.redSub(this.a.redMul(r)),i=this.one.redSub(this.c2.redMul(this.d).redMul(r)),a=n.redMul(i.redInvm()),s=a.redSqrt();if(0!==s.redSqr().redSub(a).cmp(this.zero))throw new Error(\"invalid point\");var l=s.fromRed().isOdd();return(t&&!l||!t&&l)&&(s=s.redNeg()),this.point(e,s)},l.prototype.pointFromY=function(e,t){(e=new o(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr(),n=r.redSub(this.c2),i=r.redMul(this.d).redMul(this.c2).redSub(this.a),a=n.redMul(i.redInvm());if(0===a.cmp(this.zero)){if(t)throw new Error(\"invalid point\");return this.point(this.zero,e)}var s=a.redSqrt();if(0!==s.redSqr().redSub(a).cmp(this.zero))throw new Error(\"invalid point\");return s.fromRed().isOdd()!==t&&(s=s.redNeg()),this.point(s,e)},l.prototype.validate=function(e){if(e.isInfinity())return!0;e.normalize();var t=e.x.redSqr(),r=e.y.redSqr(),n=t.redMul(this.a).redAdd(r),o=this.c2.redMul(this.one.redAdd(this.d.redMul(t).redMul(r)));return 0===n.cmp(o)},i(c,a.BasePoint),l.prototype.pointFromJSON=function(e){return c.fromJSON(this,e)},l.prototype.point=function(e,t,r,n){return new c(this,e,t,r,n)},c.fromJSON=function(e,t){return new c(e,t[0],t[1],t[2])},c.prototype.inspect=function(){return this.isInfinity()?\"<EC Point Infinity>\":\"<EC Point x: \"+this.x.fromRed().toString(16,2)+\" y: \"+this.y.fromRed().toString(16,2)+\" z: \"+this.z.fromRed().toString(16,2)+\">\"},c.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},c.prototype._extDbl=function(){var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var n=this.curve._mulA(e),o=this.x.redAdd(this.y).redSqr().redISub(e).redISub(t),i=n.redAdd(t),a=i.redSub(r),s=n.redSub(t),l=o.redMul(a),c=i.redMul(s),u=o.redMul(s),d=a.redMul(i);return this.curve.point(l,c,d,u)},c.prototype._projDbl=function(){var e,t,r,n,o,i,a=this.x.redAdd(this.y).redSqr(),s=this.x.redSqr(),l=this.y.redSqr();if(this.curve.twisted){var c=(n=this.curve._mulA(s)).redAdd(l);this.zOne?(e=a.redSub(s).redSub(l).redMul(c.redSub(this.curve.two)),t=c.redMul(n.redSub(l)),r=c.redSqr().redSub(c).redSub(c)):(o=this.z.redSqr(),i=c.redSub(o).redISub(o),e=a.redSub(s).redISub(l).redMul(i),t=c.redMul(n.redSub(l)),r=c.redMul(i))}else n=s.redAdd(l),o=this.curve._mulC(this.z).redSqr(),i=n.redSub(o).redSub(o),e=this.curve._mulC(a.redISub(n)).redMul(i),t=this.curve._mulC(n).redMul(s.redISub(l)),r=n.redMul(i);return this.curve.point(e,t,r)},c.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},c.prototype._extAdd=function(e){var t=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),r=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),n=this.t.redMul(this.curve.dd).redMul(e.t),o=this.z.redMul(e.z.redAdd(e.z)),i=r.redSub(t),a=o.redSub(n),s=o.redAdd(n),l=r.redAdd(t),c=i.redMul(a),u=s.redMul(l),d=i.redMul(l),f=a.redMul(s);return this.curve.point(c,u,f,d)},c.prototype._projAdd=function(e){var t,r,n=this.z.redMul(e.z),o=n.redSqr(),i=this.x.redMul(e.x),a=this.y.redMul(e.y),s=this.curve.d.redMul(i).redMul(a),l=o.redSub(s),c=o.redAdd(s),u=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(i).redISub(a),d=n.redMul(l).redMul(u);return this.curve.twisted?(t=n.redMul(c).redMul(a.redSub(this.curve._mulA(i))),r=l.redMul(c)):(t=n.redMul(c).redMul(a.redSub(i)),r=this.curve._mulC(l).redMul(c)),this.curve.point(d,t,r)},c.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},c.prototype.mul=function(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},c.prototype.mulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!1)},c.prototype.jmulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!0)},c.prototype.normalize=function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},c.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},c.prototype.getX=function(){return this.normalize(),this.x.fromRed()},c.prototype.getY=function(){return this.normalize(),this.y.fromRed()},c.prototype.eq=function(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},c.prototype.eqXToP=function(e){var t=e.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(t))return!0;for(var r=e.clone(),n=this.curve.redN.redMul(this.z);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(t.redIAdd(n),0===this.x.cmp(t))return!0}},c.prototype.toP=c.prototype.normalize,c.prototype.mixedAdd=c.prototype.add},{\"../utils\":419,\"./base\":406,\"bn.js\":420,inherits:440}],408:[function(e,t,r){\"use strict\";var n=r;n.base=e(\"./base\"),n.short=e(\"./short\"),n.mont=e(\"./mont\"),n.edwards=e(\"./edwards\")},{\"./base\":406,\"./edwards\":407,\"./mont\":409,\"./short\":410}],409:[function(e,t,r){\"use strict\";var n=e(\"bn.js\"),o=e(\"inherits\"),i=e(\"./base\"),a=e(\"../utils\");function s(e){i.call(this,\"mont\",e),this.a=new n(e.a,16).toRed(this.red),this.b=new n(e.b,16).toRed(this.red),this.i4=new n(4).toRed(this.red).redInvm(),this.two=new n(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function l(e,t,r){i.BasePoint.call(this,e,\"projective\"),null===t&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new n(t,16),this.z=new n(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}o(s,i),t.exports=s,s.prototype.validate=function(e){var t=e.normalize().x,r=t.redSqr(),n=r.redMul(t).redAdd(r.redMul(this.a)).redAdd(t);return 0===n.redSqrt().redSqr().cmp(n)},o(l,i.BasePoint),s.prototype.decodePoint=function(e,t){return this.point(a.toArray(e,t),1)},s.prototype.point=function(e,t){return new l(this,e,t)},s.prototype.pointFromJSON=function(e){return l.fromJSON(this,e)},l.prototype.precompute=function(){},l.prototype._encode=function(){return this.getX().toArray(\"be\",this.curve.p.byteLength())},l.fromJSON=function(e,t){return new l(e,t[0],t[1]||e.one)},l.prototype.inspect=function(){return this.isInfinity()?\"<EC Point Infinity>\":\"<EC Point x: \"+this.x.fromRed().toString(16,2)+\" z: \"+this.z.fromRed().toString(16,2)+\">\"},l.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},l.prototype.dbl=function(){var e=this.x.redAdd(this.z).redSqr(),t=this.x.redSub(this.z).redSqr(),r=e.redSub(t),n=e.redMul(t),o=r.redMul(t.redAdd(this.curve.a24.redMul(r)));return this.curve.point(n,o)},l.prototype.add=function(){throw new Error(\"Not supported on Montgomery curve\")},l.prototype.diffAdd=function(e,t){var r=this.x.redAdd(this.z),n=this.x.redSub(this.z),o=e.x.redAdd(e.z),i=e.x.redSub(e.z).redMul(r),a=o.redMul(n),s=t.z.redMul(i.redAdd(a).redSqr()),l=t.x.redMul(i.redISub(a).redSqr());return this.curve.point(s,l)},l.prototype.mul=function(e){for(var t=e.clone(),r=this,n=this.curve.point(null,null),o=[];0!==t.cmpn(0);t.iushrn(1))o.push(t.andln(1));for(var i=o.length-1;i>=0;i--)0===o[i]?(r=r.diffAdd(n,this),n=n.dbl()):(n=r.diffAdd(n,this),r=r.dbl());return n},l.prototype.mulAdd=function(){throw new Error(\"Not supported on Montgomery curve\")},l.prototype.jumlAdd=function(){throw new Error(\"Not supported on Montgomery curve\")},l.prototype.eq=function(e){return 0===this.getX().cmp(e.getX())},l.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},l.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},{\"../utils\":419,\"./base\":406,\"bn.js\":420,inherits:440}],410:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),o=e(\"bn.js\"),i=e(\"inherits\"),a=e(\"./base\"),s=n.assert;function l(e){a.call(this,\"short\",e),this.a=new o(e.a,16).toRed(this.red),this.b=new o(e.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(e),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function c(e,t,r,n){a.BasePoint.call(this,e,\"affine\"),null===t&&null===r?(this.x=null,this.y=null,this.inf=!0):(this.x=new o(t,16),this.y=new o(r,16),n&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function u(e,t,r,n){a.BasePoint.call(this,e,\"jacobian\"),null===t&&null===r&&null===n?(this.x=this.curve.one,this.y=this.curve.one,this.z=new o(0)):(this.x=new o(t,16),this.y=new o(r,16),this.z=new o(n,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}i(l,a),t.exports=l,l.prototype._getEndomorphism=function(e){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var t,r;if(e.beta)t=new o(e.beta,16).toRed(this.red);else{var n=this._getEndoRoots(this.p);t=(t=n[0].cmp(n[1])<0?n[0]:n[1]).toRed(this.red)}if(e.lambda)r=new o(e.lambda,16);else{var i=this._getEndoRoots(this.n);0===this.g.mul(i[0]).x.cmp(this.g.x.redMul(t))?r=i[0]:(r=i[1],s(0===this.g.mul(r).x.cmp(this.g.x.redMul(t))))}return{beta:t,lambda:r,basis:e.basis?e.basis.map((function(e){return{a:new o(e.a,16),b:new o(e.b,16)}})):this._getEndoBasis(r)}}},l.prototype._getEndoRoots=function(e){var t=e===this.p?this.red:o.mont(e),r=new o(2).toRed(t).redInvm(),n=r.redNeg(),i=new o(3).toRed(t).redNeg().redSqrt().redMul(r);return[n.redAdd(i).fromRed(),n.redSub(i).fromRed()]},l.prototype._getEndoBasis=function(e){for(var t,r,n,i,a,s,l,c,u,d=this.n.ushrn(Math.floor(this.n.bitLength()/2)),f=e,h=this.n.clone(),p=new o(1),m=new o(0),g=new o(0),v=new o(1),b=0;0!==f.cmpn(0);){var y=h.div(f);c=h.sub(y.mul(f)),u=g.sub(y.mul(p));var w=v.sub(y.mul(m));if(!n&&c.cmp(d)<0)t=l.neg(),r=p,n=c.neg(),i=u;else if(n&&2==++b)break;l=c,h=f,f=c,g=p,p=u,v=m,m=w}a=c.neg(),s=u;var x=n.sqr().add(i.sqr());return a.sqr().add(s.sqr()).cmp(x)>=0&&(a=t,s=r),n.negative&&(n=n.neg(),i=i.neg()),a.negative&&(a=a.neg(),s=s.neg()),[{a:n,b:i},{a,b:s}]},l.prototype._endoSplit=function(e){var t=this.endo.basis,r=t[0],n=t[1],o=n.b.mul(e).divRound(this.n),i=r.b.neg().mul(e).divRound(this.n),a=o.mul(r.a),s=i.mul(n.a),l=o.mul(r.b),c=i.mul(n.b);return{k1:e.sub(a).sub(s),k2:l.add(c).neg()}},l.prototype.pointFromX=function(e,t){(e=new o(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),n=r.redSqrt();if(0!==n.redSqr().redSub(r).cmp(this.zero))throw new Error(\"invalid point\");var i=n.fromRed().isOdd();return(t&&!i||!t&&i)&&(n=n.redNeg()),this.point(e,n)},l.prototype.validate=function(e){if(e.inf)return!0;var t=e.x,r=e.y,n=this.a.redMul(t),o=t.redSqr().redMul(t).redIAdd(n).redIAdd(this.b);return 0===r.redSqr().redISub(o).cmpn(0)},l.prototype._endoWnafMulAdd=function(e,t,r){for(var n=this._endoWnafT1,o=this._endoWnafT2,i=0;i<e.length;i++){var a=this._endoSplit(t[i]),s=e[i],l=s._getBeta();a.k1.negative&&(a.k1.ineg(),s=s.neg(!0)),a.k2.negative&&(a.k2.ineg(),l=l.neg(!0)),n[2*i]=s,n[2*i+1]=l,o[2*i]=a.k1,o[2*i+1]=a.k2}for(var c=this._wnafMulAdd(1,n,o,2*i,r),u=0;u<2*i;u++)n[u]=null,o[u]=null;return c},i(c,a.BasePoint),l.prototype.point=function(e,t,r){return new c(this,e,t,r)},l.prototype.pointFromJSON=function(e,t){return c.fromJSON(this,e,t)},c.prototype._getBeta=function(){if(this.curve.endo){var e=this.precomputed;if(e&&e.beta)return e.beta;var t=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(e){var r=this.curve,n=function(e){return r.point(e.x.redMul(r.endo.beta),e.y)};e.beta=t,t.precomputed={beta:null,naf:e.naf&&{wnd:e.naf.wnd,points:e.naf.points.map(n)},doubles:e.doubles&&{step:e.doubles.step,points:e.doubles.points.map(n)}}}return t}},c.prototype.toJSON=function(){return this.precomputed?[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}]:[this.x,this.y]},c.fromJSON=function(e,t,r){\"string\"==typeof t&&(t=JSON.parse(t));var n=e.point(t[0],t[1],r);if(!t[2])return n;function o(t){return e.point(t[0],t[1],r)}var i=t[2];return n.precomputed={beta:null,doubles:i.doubles&&{step:i.doubles.step,points:[n].concat(i.doubles.points.map(o))},naf:i.naf&&{wnd:i.naf.wnd,points:[n].concat(i.naf.points.map(o))}},n},c.prototype.inspect=function(){return this.isInfinity()?\"<EC Point Infinity>\":\"<EC Point x: \"+this.x.fromRed().toString(16,2)+\" y: \"+this.y.fromRed().toString(16,2)+\">\"},c.prototype.isInfinity=function(){return this.inf},c.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var t=this.y.redSub(e.y);0!==t.cmpn(0)&&(t=t.redMul(this.x.redSub(e.x).redInvm()));var r=t.redSqr().redISub(this.x).redISub(e.x),n=t.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,n)},c.prototype.dbl=function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var t=this.curve.a,r=this.x.redSqr(),n=e.redInvm(),o=r.redAdd(r).redIAdd(r).redIAdd(t).redMul(n),i=o.redSqr().redISub(this.x.redAdd(this.x)),a=o.redMul(this.x.redSub(i)).redISub(this.y);return this.curve.point(i,a)},c.prototype.getX=function(){return this.x.fromRed()},c.prototype.getY=function(){return this.y.fromRed()},c.prototype.mul=function(e){return e=new o(e,16),this.isInfinity()?this:this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},c.prototype.mulAdd=function(e,t,r){var n=[this,t],o=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,o):this.curve._wnafMulAdd(1,n,o,2)},c.prototype.jmulAdd=function(e,t,r){var n=[this,t],o=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,o,!0):this.curve._wnafMulAdd(1,n,o,2,!0)},c.prototype.eq=function(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},c.prototype.neg=function(e){if(this.inf)return this;var t=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var r=this.precomputed,n=function(e){return e.neg()};t.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(n)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(n)}}}return t},c.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},i(u,a.BasePoint),l.prototype.jpoint=function(e,t,r){return new u(this,e,t,r)},u.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),t=e.redSqr(),r=this.x.redMul(t),n=this.y.redMul(t).redMul(e);return this.curve.point(r,n)},u.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},u.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var t=e.z.redSqr(),r=this.z.redSqr(),n=this.x.redMul(t),o=e.x.redMul(r),i=this.y.redMul(t.redMul(e.z)),a=e.y.redMul(r.redMul(this.z)),s=n.redSub(o),l=i.redSub(a);if(0===s.cmpn(0))return 0!==l.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var c=s.redSqr(),u=c.redMul(s),d=n.redMul(c),f=l.redSqr().redIAdd(u).redISub(d).redISub(d),h=l.redMul(d.redISub(f)).redISub(i.redMul(u)),p=this.z.redMul(e.z).redMul(s);return this.curve.jpoint(f,h,p)},u.prototype.mixedAdd=function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var t=this.z.redSqr(),r=this.x,n=e.x.redMul(t),o=this.y,i=e.y.redMul(t).redMul(this.z),a=r.redSub(n),s=o.redSub(i);if(0===a.cmpn(0))return 0!==s.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var l=a.redSqr(),c=l.redMul(a),u=r.redMul(l),d=s.redSqr().redIAdd(c).redISub(u).redISub(u),f=s.redMul(u.redISub(d)).redISub(o.redMul(c)),h=this.z.redMul(a);return this.curve.jpoint(d,f,h)},u.prototype.dblp=function(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();var t;if(this.curve.zeroA||this.curve.threeA){var r=this;for(t=0;t<e;t++)r=r.dbl();return r}var n=this.curve.a,o=this.curve.tinv,i=this.x,a=this.y,s=this.z,l=s.redSqr().redSqr(),c=a.redAdd(a);for(t=0;t<e;t++){var u=i.redSqr(),d=c.redSqr(),f=d.redSqr(),h=u.redAdd(u).redIAdd(u).redIAdd(n.redMul(l)),p=i.redMul(d),m=h.redSqr().redISub(p.redAdd(p)),g=p.redISub(m),v=h.redMul(g);v=v.redIAdd(v).redISub(f);var b=c.redMul(s);t+1<e&&(l=l.redMul(f)),i=m,s=b,c=v}return this.curve.jpoint(i,c.redMul(o),s)},u.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},u.prototype._zeroDbl=function(){var e,t,r;if(this.zOne){var n=this.x.redSqr(),o=this.y.redSqr(),i=o.redSqr(),a=this.x.redAdd(o).redSqr().redISub(n).redISub(i);a=a.redIAdd(a);var s=n.redAdd(n).redIAdd(n),l=s.redSqr().redISub(a).redISub(a),c=i.redIAdd(i);c=(c=c.redIAdd(c)).redIAdd(c),e=l,t=s.redMul(a.redISub(l)).redISub(c),r=this.y.redAdd(this.y)}else{var u=this.x.redSqr(),d=this.y.redSqr(),f=d.redSqr(),h=this.x.redAdd(d).redSqr().redISub(u).redISub(f);h=h.redIAdd(h);var p=u.redAdd(u).redIAdd(u),m=p.redSqr(),g=f.redIAdd(f);g=(g=g.redIAdd(g)).redIAdd(g),e=m.redISub(h).redISub(h),t=p.redMul(h.redISub(e)).redISub(g),r=(r=this.y.redMul(this.z)).redIAdd(r)}return this.curve.jpoint(e,t,r)},u.prototype._threeDbl=function(){var e,t,r;if(this.zOne){var n=this.x.redSqr(),o=this.y.redSqr(),i=o.redSqr(),a=this.x.redAdd(o).redSqr().redISub(n).redISub(i);a=a.redIAdd(a);var s=n.redAdd(n).redIAdd(n).redIAdd(this.curve.a),l=s.redSqr().redISub(a).redISub(a);e=l;var c=i.redIAdd(i);c=(c=c.redIAdd(c)).redIAdd(c),t=s.redMul(a.redISub(l)).redISub(c),r=this.y.redAdd(this.y)}else{var u=this.z.redSqr(),d=this.y.redSqr(),f=this.x.redMul(d),h=this.x.redSub(u).redMul(this.x.redAdd(u));h=h.redAdd(h).redIAdd(h);var p=f.redIAdd(f),m=(p=p.redIAdd(p)).redAdd(p);e=h.redSqr().redISub(m),r=this.y.redAdd(this.z).redSqr().redISub(d).redISub(u);var g=d.redSqr();g=(g=(g=g.redIAdd(g)).redIAdd(g)).redIAdd(g),t=h.redMul(p.redISub(e)).redISub(g)}return this.curve.jpoint(e,t,r)},u.prototype._dbl=function(){var e=this.curve.a,t=this.x,r=this.y,n=this.z,o=n.redSqr().redSqr(),i=t.redSqr(),a=r.redSqr(),s=i.redAdd(i).redIAdd(i).redIAdd(e.redMul(o)),l=t.redAdd(t),c=(l=l.redIAdd(l)).redMul(a),u=s.redSqr().redISub(c.redAdd(c)),d=c.redISub(u),f=a.redSqr();f=(f=(f=f.redIAdd(f)).redIAdd(f)).redIAdd(f);var h=s.redMul(d).redISub(f),p=r.redAdd(r).redMul(n);return this.curve.jpoint(u,h,p)},u.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr(),n=t.redSqr(),o=e.redAdd(e).redIAdd(e),i=o.redSqr(),a=this.x.redAdd(t).redSqr().redISub(e).redISub(n),s=(a=(a=(a=a.redIAdd(a)).redAdd(a).redIAdd(a)).redISub(i)).redSqr(),l=n.redIAdd(n);l=(l=(l=l.redIAdd(l)).redIAdd(l)).redIAdd(l);var c=o.redIAdd(a).redSqr().redISub(i).redISub(s).redISub(l),u=t.redMul(c);u=(u=u.redIAdd(u)).redIAdd(u);var d=this.x.redMul(s).redISub(u);d=(d=d.redIAdd(d)).redIAdd(d);var f=this.y.redMul(c.redMul(l.redISub(c)).redISub(a.redMul(s)));f=(f=(f=f.redIAdd(f)).redIAdd(f)).redIAdd(f);var h=this.z.redAdd(a).redSqr().redISub(r).redISub(s);return this.curve.jpoint(d,f,h)},u.prototype.mul=function(e,t){return e=new o(e,t),this.curve._wnafMul(this,e)},u.prototype.eq=function(e){if(\"affine\"===e.type)return this.eq(e.toJ());if(this===e)return!0;var t=this.z.redSqr(),r=e.z.redSqr();if(0!==this.x.redMul(r).redISub(e.x.redMul(t)).cmpn(0))return!1;var n=t.redMul(this.z),o=r.redMul(e.z);return 0===this.y.redMul(o).redISub(e.y.redMul(n)).cmpn(0)},u.prototype.eqXToP=function(e){var t=this.z.redSqr(),r=e.toRed(this.curve.red).redMul(t);if(0===this.x.cmp(r))return!0;for(var n=e.clone(),o=this.curve.redN.redMul(t);;){if(n.iadd(this.curve.n),n.cmp(this.curve.p)>=0)return!1;if(r.redIAdd(o),0===this.x.cmp(r))return!0}},u.prototype.inspect=function(){return this.isInfinity()?\"<EC JPoint Infinity>\":\"<EC JPoint x: \"+this.x.toString(16,2)+\" y: \"+this.y.toString(16,2)+\" z: \"+this.z.toString(16,2)+\">\"},u.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},{\"../utils\":419,\"./base\":406,\"bn.js\":420,inherits:440}],411:[function(e,t,r){\"use strict\";var n,o=r,i=e(\"hash.js\"),a=e(\"./curve\"),s=e(\"./utils\").assert;function l(e){\"short\"===e.type?this.curve=new a.short(e):\"edwards\"===e.type?this.curve=new a.edwards(e):this.curve=new a.mont(e),this.g=this.curve.g,this.n=this.curve.n,this.hash=e.hash,s(this.g.validate(),\"Invalid curve\"),s(this.g.mul(this.n).isInfinity(),\"Invalid curve, G*N != O\")}function c(e,t){Object.defineProperty(o,e,{configurable:!0,enumerable:!0,get:function(){var r=new l(t);return Object.defineProperty(o,e,{configurable:!0,enumerable:!0,value:r}),r}})}o.PresetCurve=l,c(\"p192\",{type:\"short\",prime:\"p192\",p:\"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff\",a:\"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc\",b:\"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1\",n:\"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831\",hash:i.sha256,gRed:!1,g:[\"188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012\",\"07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811\"]}),c(\"p224\",{type:\"short\",prime:\"p224\",p:\"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001\",a:\"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe\",b:\"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4\",n:\"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d\",hash:i.sha256,gRed:!1,g:[\"b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21\",\"bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34\"]}),c(\"p256\",{type:\"short\",prime:null,p:\"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff\",a:\"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc\",b:\"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b\",n:\"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551\",hash:i.sha256,gRed:!1,g:[\"6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296\",\"4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5\"]}),c(\"p384\",{type:\"short\",prime:null,p:\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff\",a:\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc\",b:\"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef\",n:\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973\",hash:i.sha384,gRed:!1,g:[\"aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7\",\"3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f\"]}),c(\"p521\",{type:\"short\",prime:null,p:\"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff\",a:\"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc\",b:\"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00\",n:\"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409\",hash:i.sha512,gRed:!1,g:[\"000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66\",\"00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650\"]}),c(\"curve25519\",{type:\"mont\",prime:\"p25519\",p:\"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed\",a:\"76d06\",b:\"1\",n:\"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed\",hash:i.sha256,gRed:!1,g:[\"9\"]}),c(\"ed25519\",{type:\"edwards\",prime:\"p25519\",p:\"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed\",a:\"-1\",c:\"1\",d:\"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3\",n:\"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed\",hash:i.sha256,gRed:!1,g:[\"216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a\",\"6666666666666666666666666666666666666666666666666666666666666658\"]});try{n=e(\"./precomputed/secp256k1\")}catch(e){n=void 0}c(\"secp256k1\",{type:\"short\",prime:\"k256\",p:\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f\",a:\"0\",b:\"7\",n:\"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141\",h:\"1\",hash:i.sha256,beta:\"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee\",lambda:\"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72\",basis:[{a:\"3086d221a7d46bcde86c90e49284eb15\",b:\"-e4437ed6010e88286f547fa90abfe4c3\"},{a:\"114ca50f7a8e2f3f657c1108d9d44cfd8\",b:\"3086d221a7d46bcde86c90e49284eb15\"}],gRed:!1,g:[\"79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798\",\"483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8\",n]})},{\"./curve\":408,\"./precomputed/secp256k1\":418,\"./utils\":419,\"hash.js\":426}],412:[function(e,t,r){\"use strict\";var n=e(\"bn.js\"),o=e(\"hmac-drbg\"),i=e(\"../utils\"),a=e(\"../curves\"),s=e(\"brorand\"),l=i.assert,c=e(\"./key\"),u=e(\"./signature\");function d(e){if(!(this instanceof d))return new d(e);\"string\"==typeof e&&(l(Object.prototype.hasOwnProperty.call(a,e),\"Unknown curve \"+e),e=a[e]),e instanceof a.PresetCurve&&(e={curve:e}),this.curve=e.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=e.curve.g,this.g.precompute(e.curve.n.bitLength()+1),this.hash=e.hash||e.curve.hash}t.exports=d,d.prototype.keyPair=function(e){return new c(this,e)},d.prototype.keyFromPrivate=function(e,t){return c.fromPrivate(this,e,t)},d.prototype.keyFromPublic=function(e,t){return c.fromPublic(this,e,t)},d.prototype.genKeyPair=function(e){e||(e={});for(var t=new o({hash:this.hash,pers:e.pers,persEnc:e.persEnc||\"utf8\",entropy:e.entropy||s(this.hash.hmacStrength),entropyEnc:e.entropy&&e.entropyEnc||\"utf8\",nonce:this.n.toArray()}),r=this.n.byteLength(),i=this.n.sub(new n(2));;){var a=new n(t.generate(r));if(!(a.cmp(i)>0))return a.iaddn(1),this.keyFromPrivate(a)}},d.prototype._truncateToN=function(e,t){var r=8*e.byteLength()-this.n.bitLength();return r>0&&(e=e.ushrn(r)),!t&&e.cmp(this.n)>=0?e.sub(this.n):e},d.prototype.sign=function(e,t,r,i){\"object\"==typeof r&&(i=r,r=null),i||(i={}),t=this.keyFromPrivate(t,r),e=this._truncateToN(new n(e,16));for(var a=this.n.byteLength(),s=t.getPrivate().toArray(\"be\",a),l=e.toArray(\"be\",a),c=new o({hash:this.hash,entropy:s,nonce:l,pers:i.pers,persEnc:i.persEnc||\"utf8\"}),d=this.n.sub(new n(1)),f=0;;f++){var h=i.k?i.k(f):new n(c.generate(this.n.byteLength()));if(!((h=this._truncateToN(h,!0)).cmpn(1)<=0||h.cmp(d)>=0)){var p=this.g.mul(h);if(!p.isInfinity()){var m=p.getX(),g=m.umod(this.n);if(0!==g.cmpn(0)){var v=h.invm(this.n).mul(g.mul(t.getPrivate()).iadd(e));if(0!==(v=v.umod(this.n)).cmpn(0)){var b=(p.getY().isOdd()?1:0)|(0!==m.cmp(g)?2:0);return i.canonical&&v.cmp(this.nh)>0&&(v=this.n.sub(v),b^=1),new u({r:g,s:v,recoveryParam:b})}}}}}},d.prototype.verify=function(e,t,r,o){e=this._truncateToN(new n(e,16)),r=this.keyFromPublic(r,o);var i=(t=new u(t,\"hex\")).r,a=t.s;if(i.cmpn(1)<0||i.cmp(this.n)>=0)return!1;if(a.cmpn(1)<0||a.cmp(this.n)>=0)return!1;var s,l=a.invm(this.n),c=l.mul(e).umod(this.n),d=l.mul(i).umod(this.n);return this.curve._maxwellTrick?!(s=this.g.jmulAdd(c,r.getPublic(),d)).isInfinity()&&s.eqXToP(i):!(s=this.g.mulAdd(c,r.getPublic(),d)).isInfinity()&&0===s.getX().umod(this.n).cmp(i)},d.prototype.recoverPubKey=function(e,t,r,o){l((3&r)===r,\"The recovery param is more than two bits\"),t=new u(t,o);var i=this.n,a=new n(e),s=t.r,c=t.s,d=1&r,f=r>>1;if(s.cmp(this.curve.p.umod(this.curve.n))>=0&&f)throw new Error(\"Unable to find sencond key candinate\");s=f?this.curve.pointFromX(s.add(this.curve.n),d):this.curve.pointFromX(s,d);var h=t.r.invm(i),p=i.sub(a).mul(h).umod(i),m=c.mul(h).umod(i);return this.g.mulAdd(p,s,m)},d.prototype.getKeyRecoveryParam=function(e,t,r,n){if(null!==(t=new u(t,n)).recoveryParam)return t.recoveryParam;for(var o=0;o<4;o++){var i;try{i=this.recoverPubKey(e,t,o)}catch(e){continue}if(i.eq(r))return o}throw new Error(\"Unable to find valid recovery factor\")}},{\"../curves\":411,\"../utils\":419,\"./key\":413,\"./signature\":414,\"bn.js\":420,brorand:187,\"hmac-drbg\":438}],413:[function(e,t,r){\"use strict\";var n=e(\"bn.js\"),o=e(\"../utils\").assert;function i(e,t){this.ec=e,this.priv=null,this.pub=null,t.priv&&this._importPrivate(t.priv,t.privEnc),t.pub&&this._importPublic(t.pub,t.pubEnc)}t.exports=i,i.fromPublic=function(e,t,r){return t instanceof i?t:new i(e,{pub:t,pubEnc:r})},i.fromPrivate=function(e,t,r){return t instanceof i?t:new i(e,{priv:t,privEnc:r})},i.prototype.validate=function(){var e=this.getPublic();return e.isInfinity()?{result:!1,reason:\"Invalid public key\"}:e.validate()?e.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:\"Public key * N != O\"}:{result:!1,reason:\"Public key is not a point\"}},i.prototype.getPublic=function(e,t){return\"string\"==typeof e&&(t=e,e=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),t?this.pub.encode(t,e):this.pub},i.prototype.getPrivate=function(e){return\"hex\"===e?this.priv.toString(16,2):this.priv},i.prototype._importPrivate=function(e,t){this.priv=new n(e,t||16),this.priv=this.priv.umod(this.ec.curve.n)},i.prototype._importPublic=function(e,t){if(e.x||e.y)return\"mont\"===this.ec.curve.type?o(e.x,\"Need x coordinate\"):\"short\"!==this.ec.curve.type&&\"edwards\"!==this.ec.curve.type||o(e.x&&e.y,\"Need both x and y coordinate\"),void(this.pub=this.ec.curve.point(e.x,e.y));this.pub=this.ec.curve.decodePoint(e,t)},i.prototype.derive=function(e){return e.validate()||o(e.validate(),\"public point not validated\"),e.mul(this.priv).getX()},i.prototype.sign=function(e,t,r){return this.ec.sign(e,this,t,r)},i.prototype.verify=function(e,t){return this.ec.verify(e,t,this)},i.prototype.inspect=function(){return\"<Key priv: \"+(this.priv&&this.priv.toString(16,2))+\" pub: \"+(this.pub&&this.pub.inspect())+\" >\"}},{\"../utils\":419,\"bn.js\":420}],414:[function(e,t,r){\"use strict\";var n=e(\"bn.js\"),o=e(\"../utils\"),i=o.assert;function a(e,t){if(e instanceof a)return e;this._importDER(e,t)||(i(e.r&&e.s,\"Signature without r or s\"),this.r=new n(e.r,16),this.s=new n(e.s,16),void 0===e.recoveryParam?this.recoveryParam=null:this.recoveryParam=e.recoveryParam)}function s(){this.place=0}function l(e,t){var r=e[t.place++];if(!(128&r))return r;var n=15&r;if(0===n||n>4)return!1;for(var o=0,i=0,a=t.place;i<n;i++,a++)o<<=8,o|=e[a],o>>>=0;return!(o<=127)&&(t.place=a,o)}function c(e){for(var t=0,r=e.length-1;!e[t]&&!(128&e[t+1])&&t<r;)t++;return 0===t?e:e.slice(t)}function u(e,t){if(t<128)e.push(t);else{var r=1+(Math.log(t)/Math.LN2>>>3);for(e.push(128|r);--r;)e.push(t>>>(r<<3)&255);e.push(t)}}t.exports=a,a.prototype._importDER=function(e,t){e=o.toArray(e,t);var r=new s;if(48!==e[r.place++])return!1;var i=l(e,r);if(!1===i)return!1;if(i+r.place!==e.length)return!1;if(2!==e[r.place++])return!1;var a=l(e,r);if(!1===a)return!1;var c=e.slice(r.place,a+r.place);if(r.place+=a,2!==e[r.place++])return!1;var u=l(e,r);if(!1===u)return!1;if(e.length!==u+r.place)return!1;var d=e.slice(r.place,u+r.place);if(0===c[0]){if(!(128&c[1]))return!1;c=c.slice(1)}if(0===d[0]){if(!(128&d[1]))return!1;d=d.slice(1)}return this.r=new n(c),this.s=new n(d),this.recoveryParam=null,!0},a.prototype.toDER=function(e){var t=this.r.toArray(),r=this.s.toArray();for(128&t[0]&&(t=[0].concat(t)),128&r[0]&&(r=[0].concat(r)),t=c(t),r=c(r);!(r[0]||128&r[1]);)r=r.slice(1);var n=[2];u(n,t.length),(n=n.concat(t)).push(2),u(n,r.length);var i=n.concat(r),a=[48];return u(a,i.length),a=a.concat(i),o.encode(a,e)}},{\"../utils\":419,\"bn.js\":420}],415:[function(e,t,r){\"use strict\";var n=e(\"hash.js\"),o=e(\"../curves\"),i=e(\"../utils\"),a=i.assert,s=i.parseBytes,l=e(\"./key\"),c=e(\"./signature\");function u(e){if(a(\"ed25519\"===e,\"only tested with ed25519 so far\"),!(this instanceof u))return new u(e);e=o[e].curve,this.curve=e,this.g=e.g,this.g.precompute(e.n.bitLength()+1),this.pointClass=e.point().constructor,this.encodingLength=Math.ceil(e.n.bitLength()/8),this.hash=n.sha512}t.exports=u,u.prototype.sign=function(e,t){e=s(e);var r=this.keyFromSecret(t),n=this.hashInt(r.messagePrefix(),e),o=this.g.mul(n),i=this.encodePoint(o),a=this.hashInt(i,r.pubBytes(),e).mul(r.priv()),l=n.add(a).umod(this.curve.n);return this.makeSignature({R:o,S:l,Rencoded:i})},u.prototype.verify=function(e,t,r){e=s(e),t=this.makeSignature(t);var n=this.keyFromPublic(r),o=this.hashInt(t.Rencoded(),n.pubBytes(),e),i=this.g.mul(t.S());return t.R().add(n.pub().mul(o)).eq(i)},u.prototype.hashInt=function(){for(var e=this.hash(),t=0;t<arguments.length;t++)e.update(arguments[t]);return i.intFromLE(e.digest()).umod(this.curve.n)},u.prototype.keyFromPublic=function(e){return l.fromPublic(this,e)},u.prototype.keyFromSecret=function(e){return l.fromSecret(this,e)},u.prototype.makeSignature=function(e){return e instanceof c?e:new c(this,e)},u.prototype.encodePoint=function(e){var t=e.getY().toArray(\"le\",this.encodingLength);return t[this.encodingLength-1]|=e.getX().isOdd()?128:0,t},u.prototype.decodePoint=function(e){var t=(e=i.parseBytes(e)).length-1,r=e.slice(0,t).concat(-129&e[t]),n=!!(128&e[t]),o=i.intFromLE(r);return this.curve.pointFromY(o,n)},u.prototype.encodeInt=function(e){return e.toArray(\"le\",this.encodingLength)},u.prototype.decodeInt=function(e){return i.intFromLE(e)},u.prototype.isPoint=function(e){return e instanceof this.pointClass}},{\"../curves\":411,\"../utils\":419,\"./key\":416,\"./signature\":417,\"hash.js\":426}],416:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),o=n.assert,i=n.parseBytes,a=n.cachedProperty;function s(e,t){this.eddsa=e,this._secret=i(t.secret),e.isPoint(t.pub)?this._pub=t.pub:this._pubBytes=i(t.pub)}s.fromPublic=function(e,t){return t instanceof s?t:new s(e,{pub:t})},s.fromSecret=function(e,t){return t instanceof s?t:new s(e,{secret:t})},s.prototype.secret=function(){return this._secret},a(s,\"pubBytes\",(function(){return this.eddsa.encodePoint(this.pub())})),a(s,\"pub\",(function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())})),a(s,\"privBytes\",(function(){var e=this.eddsa,t=this.hash(),r=e.encodingLength-1,n=t.slice(0,e.encodingLength);return n[0]&=248,n[r]&=127,n[r]|=64,n})),a(s,\"priv\",(function(){return this.eddsa.decodeInt(this.privBytes())})),a(s,\"hash\",(function(){return this.eddsa.hash().update(this.secret()).digest()})),a(s,\"messagePrefix\",(function(){return this.hash().slice(this.eddsa.encodingLength)})),s.prototype.sign=function(e){return o(this._secret,\"KeyPair can only verify\"),this.eddsa.sign(e,this)},s.prototype.verify=function(e,t){return this.eddsa.verify(e,t,this)},s.prototype.getSecret=function(e){return o(this._secret,\"KeyPair is public only\"),n.encode(this.secret(),e)},s.prototype.getPublic=function(e){return n.encode(this.pubBytes(),e)},t.exports=s},{\"../utils\":419}],417:[function(e,t,r){\"use strict\";var n=e(\"bn.js\"),o=e(\"../utils\"),i=o.assert,a=o.cachedProperty,s=o.parseBytes;function l(e,t){this.eddsa=e,\"object\"!=typeof t&&(t=s(t)),Array.isArray(t)&&(t={R:t.slice(0,e.encodingLength),S:t.slice(e.encodingLength)}),i(t.R&&t.S,\"Signature without R or S\"),e.isPoint(t.R)&&(this._R=t.R),t.S instanceof n&&(this._S=t.S),this._Rencoded=Array.isArray(t.R)?t.R:t.Rencoded,this._Sencoded=Array.isArray(t.S)?t.S:t.Sencoded}a(l,\"S\",(function(){return this.eddsa.decodeInt(this.Sencoded())})),a(l,\"R\",(function(){return this.eddsa.decodePoint(this.Rencoded())})),a(l,\"Rencoded\",(function(){return this.eddsa.encodePoint(this.R())})),a(l,\"Sencoded\",(function(){return this.eddsa.encodeInt(this.S())})),l.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},l.prototype.toHex=function(){return o.encode(this.toBytes(),\"hex\").toUpperCase()},t.exports=l},{\"../utils\":419,\"bn.js\":420}],418:[function(e,t,r){\"use strict\";t.exports={doubles:{step:4,points:[[\"e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a\",\"f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821\"],[\"8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508\",\"11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf\"],[\"175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739\",\"d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695\"],[\"363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640\",\"4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9\"],[\"8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c\",\"4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36\"],[\"723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda\",\"96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f\"],[\"eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa\",\"5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999\"],[\"100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0\",\"cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09\"],[\"e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d\",\"9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d\"],[\"feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d\",\"e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088\"],[\"da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1\",\"9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d\"],[\"53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0\",\"5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8\"],[\"8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047\",\"10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a\"],[\"385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862\",\"283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453\"],[\"6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7\",\"7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160\"],[\"3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd\",\"56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0\"],[\"85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83\",\"7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6\"],[\"948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a\",\"53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589\"],[\"6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8\",\"bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17\"],[\"e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d\",\"4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda\"],[\"e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725\",\"7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd\"],[\"213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754\",\"4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2\"],[\"4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c\",\"17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6\"],[\"fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6\",\"6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f\"],[\"76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39\",\"c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01\"],[\"c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891\",\"893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3\"],[\"d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b\",\"febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f\"],[\"b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03\",\"2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7\"],[\"e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d\",\"eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78\"],[\"a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070\",\"7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1\"],[\"90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4\",\"e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150\"],[\"8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da\",\"662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82\"],[\"e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11\",\"1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc\"],[\"8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e\",\"efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b\"],[\"e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41\",\"2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51\"],[\"b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef\",\"67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45\"],[\"d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8\",\"db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120\"],[\"324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d\",\"648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84\"],[\"4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96\",\"35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d\"],[\"9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd\",\"ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d\"],[\"6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5\",\"9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8\"],[\"a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266\",\"40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8\"],[\"7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71\",\"34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac\"],[\"928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac\",\"c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f\"],[\"85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751\",\"1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962\"],[\"ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e\",\"493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907\"],[\"827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241\",\"c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec\"],[\"eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3\",\"be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d\"],[\"e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f\",\"4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414\"],[\"1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19\",\"aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd\"],[\"146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be\",\"b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0\"],[\"fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9\",\"6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811\"],[\"da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2\",\"8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1\"],[\"a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13\",\"7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c\"],[\"174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c\",\"ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73\"],[\"959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba\",\"2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd\"],[\"d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151\",\"e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405\"],[\"64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073\",\"d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589\"],[\"8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458\",\"38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e\"],[\"13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b\",\"69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27\"],[\"bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366\",\"d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1\"],[\"8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa\",\"40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482\"],[\"8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0\",\"620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945\"],[\"dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787\",\"7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573\"],[\"f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e\",\"ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82\"]]},naf:{wnd:7,points:[[\"f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9\",\"388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672\"],[\"2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4\",\"d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6\"],[\"5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc\",\"6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da\"],[\"acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe\",\"cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37\"],[\"774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb\",\"d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b\"],[\"f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8\",\"ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81\"],[\"d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e\",\"581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58\"],[\"defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34\",\"4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77\"],[\"2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c\",\"85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a\"],[\"352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5\",\"321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c\"],[\"2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f\",\"2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67\"],[\"9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714\",\"73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402\"],[\"daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729\",\"a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55\"],[\"c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db\",\"2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482\"],[\"6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4\",\"e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82\"],[\"1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5\",\"b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396\"],[\"605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479\",\"2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49\"],[\"62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d\",\"80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf\"],[\"80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f\",\"1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a\"],[\"7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb\",\"d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7\"],[\"d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9\",\"eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933\"],[\"49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963\",\"758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a\"],[\"77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74\",\"958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6\"],[\"f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530\",\"e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37\"],[\"463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b\",\"5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e\"],[\"f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247\",\"cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6\"],[\"caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1\",\"cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476\"],[\"2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120\",\"4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40\"],[\"7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435\",\"91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61\"],[\"754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18\",\"673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683\"],[\"e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8\",\"59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5\"],[\"186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb\",\"3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b\"],[\"df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f\",\"55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417\"],[\"5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143\",\"efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868\"],[\"290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba\",\"e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a\"],[\"af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45\",\"f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6\"],[\"766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a\",\"744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996\"],[\"59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e\",\"c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e\"],[\"f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8\",\"e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d\"],[\"7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c\",\"30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2\"],[\"948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519\",\"e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e\"],[\"7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab\",\"100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437\"],[\"3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca\",\"ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311\"],[\"d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf\",\"8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4\"],[\"1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610\",\"68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575\"],[\"733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4\",\"f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d\"],[\"15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c\",\"d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d\"],[\"a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940\",\"edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629\"],[\"e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980\",\"a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06\"],[\"311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3\",\"66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374\"],[\"34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf\",\"9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee\"],[\"f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63\",\"4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1\"],[\"d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448\",\"fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b\"],[\"32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf\",\"5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661\"],[\"7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5\",\"8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6\"],[\"ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6\",\"8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e\"],[\"16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5\",\"5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d\"],[\"eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99\",\"f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc\"],[\"78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51\",\"f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4\"],[\"494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5\",\"42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c\"],[\"a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5\",\"204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b\"],[\"c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997\",\"4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913\"],[\"841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881\",\"73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154\"],[\"5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5\",\"39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865\"],[\"36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66\",\"d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc\"],[\"336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726\",\"ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224\"],[\"8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede\",\"6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e\"],[\"1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94\",\"60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6\"],[\"85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31\",\"3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511\"],[\"29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51\",\"b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b\"],[\"a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252\",\"ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2\"],[\"4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5\",\"cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c\"],[\"d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b\",\"6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3\"],[\"ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4\",\"322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d\"],[\"af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f\",\"6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700\"],[\"e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889\",\"2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4\"],[\"591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246\",\"b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196\"],[\"11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984\",\"998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4\"],[\"3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a\",\"b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257\"],[\"cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030\",\"bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13\"],[\"c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197\",\"6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096\"],[\"c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593\",\"c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38\"],[\"a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef\",\"21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f\"],[\"347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38\",\"60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448\"],[\"da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a\",\"49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a\"],[\"c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111\",\"5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4\"],[\"4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502\",\"7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437\"],[\"3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea\",\"be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7\"],[\"cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26\",\"8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d\"],[\"b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986\",\"39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a\"],[\"d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e\",\"62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54\"],[\"48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4\",\"25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77\"],[\"dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda\",\"ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517\"],[\"6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859\",\"cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10\"],[\"e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f\",\"f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125\"],[\"eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c\",\"6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e\"],[\"13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942\",\"fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1\"],[\"ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a\",\"1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2\"],[\"b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80\",\"5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423\"],[\"ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d\",\"438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8\"],[\"8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1\",\"cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758\"],[\"52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63\",\"c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375\"],[\"e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352\",\"6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d\"],[\"7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193\",\"ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec\"],[\"5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00\",\"9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0\"],[\"32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58\",\"ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c\"],[\"e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7\",\"d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4\"],[\"8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8\",\"c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f\"],[\"4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e\",\"67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649\"],[\"3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d\",\"cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826\"],[\"674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b\",\"299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5\"],[\"d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f\",\"f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87\"],[\"30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6\",\"462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b\"],[\"be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297\",\"62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc\"],[\"93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a\",\"7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c\"],[\"b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c\",\"ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f\"],[\"d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52\",\"4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a\"],[\"d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb\",\"bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46\"],[\"463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065\",\"bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f\"],[\"7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917\",\"603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03\"],[\"74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9\",\"cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08\"],[\"30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3\",\"553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8\"],[\"9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57\",\"712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373\"],[\"176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66\",\"ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3\"],[\"75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8\",\"9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8\"],[\"809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721\",\"9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1\"],[\"1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180\",\"4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9\"]]}}},{}],419:[function(e,t,r){\"use strict\";var n=r,o=e(\"bn.js\"),i=e(\"minimalistic-assert\"),a=e(\"minimalistic-crypto-utils\");n.assert=i,n.toArray=a.toArray,n.zero2=a.zero2,n.toHex=a.toHex,n.encode=a.encode,n.getNAF=function(e,t,r){var n=new Array(Math.max(e.bitLength(),r)+1);n.fill(0);for(var o=1<<t+1,i=e.clone(),a=0;a<n.length;a++){var s,l=i.andln(o-1);i.isOdd()?(s=l>(o>>1)-1?(o>>1)-l:l,i.isubn(s)):s=0,n[a]=s,i.iushrn(1)}return n},n.getJSF=function(e,t){var r=[[],[]];e=e.clone(),t=t.clone();for(var n,o=0,i=0;e.cmpn(-o)>0||t.cmpn(-i)>0;){var a,s,l=e.andln(3)+o&3,c=t.andln(3)+i&3;3===l&&(l=-1),3===c&&(c=-1),a=1&l?3!=(n=e.andln(7)+o&7)&&5!==n||2!==c?l:-l:0,r[0].push(a),s=1&c?3!=(n=t.andln(7)+i&7)&&5!==n||2!==l?c:-c:0,r[1].push(s),2*o===a+1&&(o=1-o),2*i===s+1&&(i=1-i),e.iushrn(1),t.iushrn(1)}return r},n.cachedProperty=function(e,t,r){var n=\"_\"+t;e.prototype[t]=function(){return void 0!==this[n]?this[n]:this[n]=r.call(this)}},n.parseBytes=function(e){return\"string\"==typeof e?n.toArray(e,\"hex\"):e},n.intFromLE=function(e){return new o(e,\"hex\",\"le\")}},{\"bn.js\":420,\"minimalistic-assert\":453,\"minimalistic-crypto-utils\":454}],420:[function(e,t,r){arguments[4][184][0].apply(r,arguments)},{buffer:188,dup:184}],421:[function(e,t,r){t.exports={name:\"elliptic\",version:\"6.5.4\",description:\"EC cryptography\",main:\"lib/elliptic.js\",files:[\"lib\"],scripts:{lint:\"eslint lib test\",\"lint:fix\":\"npm run lint -- --fix\",unit:\"istanbul test _mocha --reporter=spec test/index.js\",test:\"npm run lint && npm run unit\",version:\"grunt dist && git add dist/\"},repository:{type:\"git\",url:\"git@github.com:indutny/elliptic\"},keywords:[\"EC\",\"Elliptic\",\"curve\",\"Cryptography\"],author:\"Fedor Indutny <fedor@indutny.com>\",license:\"MIT\",bugs:{url:\"https://github.com/indutny/elliptic/issues\"},homepage:\"https://github.com/indutny/elliptic\",devDependencies:{brfs:\"^2.0.2\",coveralls:\"^3.1.0\",eslint:\"^7.6.0\",grunt:\"^1.2.1\",\"grunt-browserify\":\"^5.3.0\",\"grunt-cli\":\"^1.3.2\",\"grunt-contrib-connect\":\"^3.0.0\",\"grunt-contrib-copy\":\"^1.0.0\",\"grunt-contrib-uglify\":\"^5.0.0\",\"grunt-mocha-istanbul\":\"^5.0.2\",\"grunt-saucelabs\":\"^9.0.1\",istanbul:\"^0.4.5\",mocha:\"^8.0.1\"},dependencies:{\"bn.js\":\"^4.11.9\",brorand:\"^1.1.0\",\"hash.js\":\"^1.0.0\",\"hmac-drbg\":\"^1.0.1\",inherits:\"^2.0.4\",\"minimalistic-assert\":\"^1.0.1\",\"minimalistic-crypto-utils\":\"^1.0.1\"}}},{}],422:[function(e,t,r){\"use strict\";var n=Object.create||function(e){var t=function(){};return t.prototype=e,new t},o=Object.keys||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.push(r);return r},i=Function.prototype.bind||function(e){var t=this;return function(){return t.apply(e,arguments)}};function a(){this._events&&Object.prototype.hasOwnProperty.call(this,\"_events\")||(this._events=n(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0}t.exports=a,a.EventEmitter=a,a.prototype._events=void 0,a.prototype._maxListeners=void 0;var s,l=10;try{var c={};Object.defineProperty&&Object.defineProperty(c,\"x\",{value:0}),s=0===c.x}catch(e){s=!1}function u(e){return void 0===e._maxListeners?a.defaultMaxListeners:e._maxListeners}function d(e,t,r,o){var i,a,s;if(\"function\"!=typeof r)throw new TypeError('\"listener\" argument must be a function');if((a=e._events)?(a.newListener&&(e.emit(\"newListener\",t,r.listener?r.listener:r),a=e._events),s=a[t]):(a=e._events=n(null),e._eventsCount=0),s){if(\"function\"==typeof s?s=a[t]=o?[r,s]:[s,r]:o?s.unshift(r):s.push(r),!s.warned&&(i=u(e))&&i>0&&s.length>i){s.warned=!0;var l=new Error(\"Possible EventEmitter memory leak detected. \"+s.length+' \"'+String(t)+'\" listeners added. Use emitter.setMaxListeners() to increase limit.');l.name=\"MaxListenersExceededWarning\",l.emitter=e,l.type=t,l.count=s.length,\"object\"==typeof console&&console.warn&&console.warn(\"%s: %s\",l.name,l.message)}}else s=a[t]=r,++e._eventsCount;return e}function f(){if(!this.fired)switch(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:for(var e=new Array(arguments.length),t=0;t<e.length;++t)e[t]=arguments[t];this.listener.apply(this.target,e)}}function h(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},o=i.call(f,n);return o.listener=r,n.wrapFn=o,o}function p(e,t,r){var n=e._events;if(!n)return[];var o=n[t];return o?\"function\"==typeof o?r?[o.listener||o]:[o]:r?function(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(o):g(o,o.length):[]}function m(e){var t=this._events;if(t){var r=t[e];if(\"function\"==typeof r)return 1;if(r)return r.length}return 0}function g(e,t){for(var r=new Array(t),n=0;n<t;++n)r[n]=e[n];return r}s?Object.defineProperty(a,\"defaultMaxListeners\",{enumerable:!0,get:function(){return l},set:function(e){if(\"number\"!=typeof e||e<0||e!=e)throw new TypeError('\"defaultMaxListeners\" must be a positive number');l=e}}):a.defaultMaxListeners=l,a.prototype.setMaxListeners=function(e){if(\"number\"!=typeof e||e<0||isNaN(e))throw new TypeError('\"n\" argument must be a positive number');return this._maxListeners=e,this},a.prototype.getMaxListeners=function(){return u(this)},a.prototype.emit=function(e){var t,r,n,o,i,a,s=\"error\"===e;if(a=this._events)s=s&&null==a.error;else if(!s)return!1;if(s){if(arguments.length>1&&(t=arguments[1]),t instanceof Error)throw t;var l=new Error('Unhandled \"error\" event. ('+t+\")\");throw l.context=t,l}if(!(r=a[e]))return!1;var c=\"function\"==typeof r;switch(n=arguments.length){case 1:!function(e,t,r){if(t)e.call(r);else for(var n=e.length,o=g(e,n),i=0;i<n;++i)o[i].call(r)}(r,c,this);break;case 2:!function(e,t,r,n){if(t)e.call(r,n);else for(var o=e.length,i=g(e,o),a=0;a<o;++a)i[a].call(r,n)}(r,c,this,arguments[1]);break;case 3:!function(e,t,r,n,o){if(t)e.call(r,n,o);else for(var i=e.length,a=g(e,i),s=0;s<i;++s)a[s].call(r,n,o)}(r,c,this,arguments[1],arguments[2]);break;case 4:!function(e,t,r,n,o,i){if(t)e.call(r,n,o,i);else for(var a=e.length,s=g(e,a),l=0;l<a;++l)s[l].call(r,n,o,i)}(r,c,this,arguments[1],arguments[2],arguments[3]);break;default:for(o=new Array(n-1),i=1;i<n;i++)o[i-1]=arguments[i];!function(e,t,r,n){if(t)e.apply(r,n);else for(var o=e.length,i=g(e,o),a=0;a<o;++a)i[a].apply(r,n)}(r,c,this,o)}return!0},a.prototype.addListener=function(e,t){return d(this,e,t,!1)},a.prototype.on=a.prototype.addListener,a.prototype.prependListener=function(e,t){return d(this,e,t,!0)},a.prototype.once=function(e,t){if(\"function\"!=typeof t)throw new TypeError('\"listener\" argument must be a function');return this.on(e,h(this,e,t)),this},a.prototype.prependOnceListener=function(e,t){if(\"function\"!=typeof t)throw new TypeError('\"listener\" argument must be a function');return this.prependListener(e,h(this,e,t)),this},a.prototype.removeListener=function(e,t){var r,o,i,a,s;if(\"function\"!=typeof t)throw new TypeError('\"listener\" argument must be a function');if(!(o=this._events))return this;if(!(r=o[e]))return this;if(r===t||r.listener===t)0==--this._eventsCount?this._events=n(null):(delete o[e],o.removeListener&&this.emit(\"removeListener\",e,r.listener||t));else if(\"function\"!=typeof r){for(i=-1,a=r.length-1;a>=0;a--)if(r[a]===t||r[a].listener===t){s=r[a].listener,i=a;break}if(i<0)return this;0===i?r.shift():function(e,t){for(var r=t,n=r+1,o=e.length;n<o;r+=1,n+=1)e[r]=e[n];e.pop()}(r,i),1===r.length&&(o[e]=r[0]),o.removeListener&&this.emit(\"removeListener\",e,s||t)}return this},a.prototype.removeAllListeners=function(e){var t,r,i;if(!(r=this._events))return this;if(!r.removeListener)return 0===arguments.length?(this._events=n(null),this._eventsCount=0):r[e]&&(0==--this._eventsCount?this._events=n(null):delete r[e]),this;if(0===arguments.length){var a,s=o(r);for(i=0;i<s.length;++i)\"removeListener\"!==(a=s[i])&&this.removeAllListeners(a);return this.removeAllListeners(\"removeListener\"),this._events=n(null),this._eventsCount=0,this}if(\"function\"==typeof(t=r[e]))this.removeListener(e,t);else if(t)for(i=t.length-1;i>=0;i--)this.removeListener(e,t[i]);return this},a.prototype.listeners=function(e){return p(this,e,!0)},a.prototype.rawListeners=function(e){return p(this,e,!1)},a.listenerCount=function(e,t){return\"function\"==typeof e.listenerCount?e.listenerCount(t):m.call(e,t)},a.prototype.listenerCount=m,a.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]}},{}],423:[function(e,t,r){\"use strict\";var n=e(\"safe-buffer\").Buffer,o=e(\"md5.js\");t.exports=function(e,t,r,i){if(n.isBuffer(e)||(e=n.from(e,\"binary\")),t&&(n.isBuffer(t)||(t=n.from(t,\"binary\")),8!==t.length))throw new RangeError(\"salt should be Buffer with 8 byte length\");for(var a=r/8,s=n.alloc(a),l=n.alloc(i||0),c=n.alloc(0);a>0||i>0;){var u=new o;u.update(c),u.update(e),t&&u.update(t),c=u.digest();var d=0;if(a>0){var f=s.length-a;d=Math.min(a,c.length),c.copy(s,f,0,d),a-=d}if(d<c.length&&i>0){var h=l.length-i,p=Math.min(i,c.length-d);c.copy(l,h,d,d+p),i-=p}}return c.fill(0),{key:s,iv:l}}},{\"md5.js\":450,\"safe-buffer\":494}],424:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.CsvParserStream=r.ParserOptions=r.parseFile=r.parseStream=r.parseString=r.parse=r.FormatterOptions=r.CsvFormatterStream=r.writeToPath=r.writeToString=r.writeToBuffer=r.writeToStream=r.write=r.format=void 0;var n=e(\"@fast-csv/format\");Object.defineProperty(r,\"format\",{enumerable:!0,get:function(){return n.format}}),Object.defineProperty(r,\"write\",{enumerable:!0,get:function(){return n.write}}),Object.defineProperty(r,\"writeToStream\",{enumerable:!0,get:function(){return n.writeToStream}}),Object.defineProperty(r,\"writeToBuffer\",{enumerable:!0,get:function(){return n.writeToBuffer}}),Object.defineProperty(r,\"writeToString\",{enumerable:!0,get:function(){return n.writeToString}}),Object.defineProperty(r,\"writeToPath\",{enumerable:!0,get:function(){return n.writeToPath}}),Object.defineProperty(r,\"CsvFormatterStream\",{enumerable:!0,get:function(){return n.CsvFormatterStream}}),Object.defineProperty(r,\"FormatterOptions\",{enumerable:!0,get:function(){return n.FormatterOptions}});var o=e(\"@fast-csv/parse\");Object.defineProperty(r,\"parse\",{enumerable:!0,get:function(){return o.parse}}),Object.defineProperty(r,\"parseString\",{enumerable:!0,get:function(){return o.parseString}}),Object.defineProperty(r,\"parseStream\",{enumerable:!0,get:function(){return o.parseStream}}),Object.defineProperty(r,\"parseFile\",{enumerable:!0,get:function(){return o.parseFile}}),Object.defineProperty(r,\"ParserOptions\",{enumerable:!0,get:function(){return o.ParserOptions}}),Object.defineProperty(r,\"CsvParserStream\",{enumerable:!0,get:function(){return o.CsvParserStream}})},{\"@fast-csv/format\":151,\"@fast-csv/parse\":155}],425:[function(e,t,r){\"use strict\";var n=e(\"safe-buffer\").Buffer,o=e(\"readable-stream\").Transform;function i(e){o.call(this),this._block=n.allocUnsafe(e),this._blockSize=e,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}e(\"inherits\")(i,o),i.prototype._transform=function(e,t,r){var n=null;try{this.update(e,t)}catch(e){n=e}r(n)},i.prototype._flush=function(e){var t=null;try{this.push(this.digest())}catch(e){t=e}e(t)},i.prototype.update=function(e,t){if(function(e){if(!n.isBuffer(e)&&\"string\"!=typeof e)throw new TypeError(\"Data must be a string or a buffer\")}(e),this._finalized)throw new Error(\"Digest already called\");n.isBuffer(e)||(e=n.from(e,t));for(var r=this._block,o=0;this._blockOffset+e.length-o>=this._blockSize;){for(var i=this._blockOffset;i<this._blockSize;)r[i++]=e[o++];this._update(),this._blockOffset=0}for(;o<e.length;)r[this._blockOffset++]=e[o++];for(var a=0,s=8*e.length;s>0;++a)this._length[a]+=s,(s=this._length[a]/4294967296|0)>0&&(this._length[a]-=4294967296*s);return this},i.prototype._update=function(){throw new Error(\"_update is not implemented\")},i.prototype.digest=function(e){if(this._finalized)throw new Error(\"Digest already called\");this._finalized=!0;var t=this._digest();void 0!==e&&(t=t.toString(e)),this._block.fill(0),this._blockOffset=0;for(var r=0;r<4;++r)this._length[r]=0;return t},i.prototype._digest=function(){throw new Error(\"_digest is not implemented\")},t.exports=i},{inherits:440,\"readable-stream\":491,\"safe-buffer\":494}],426:[function(e,t,r){\"use strict\";var n=r;n.utils=e(\"./hash/utils\"),n.common=e(\"./hash/common\"),n.sha=e(\"./hash/sha\"),n.ripemd=e(\"./hash/ripemd\"),n.hmac=e(\"./hash/hmac\"),n.sha1=n.sha.sha1,n.sha256=n.sha.sha256,n.sha224=n.sha.sha224,n.sha384=n.sha.sha384,n.sha512=n.sha.sha512,n.ripemd160=n.ripemd.ripemd160},{\"./hash/common\":427,\"./hash/hmac\":428,\"./hash/ripemd\":429,\"./hash/sha\":430,\"./hash/utils\":437}],427:[function(e,t,r){\"use strict\";var n=e(\"./utils\"),o=e(\"minimalistic-assert\");function i(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian=\"big\",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}r.BlockHash=i,i.prototype.update=function(e,t){if(e=n.toArray(e,t),this.pending?this.pending=this.pending.concat(e):this.pending=e,this.pendingTotal+=e.length,this.pending.length>=this._delta8){var r=(e=this.pending).length%this._delta8;this.pending=e.slice(e.length-r,e.length),0===this.pending.length&&(this.pending=null),e=n.join32(e,0,e.length-r,this.endian);for(var o=0;o<e.length;o+=this._delta32)this._update(e,o,o+this._delta32)}return this},i.prototype.digest=function(e){return this.update(this._pad()),o(null===this.pending),this._digest(e)},i.prototype._pad=function(){var e=this.pendingTotal,t=this._delta8,r=t-(e+this.padLength)%t,n=new Array(r+this.padLength);n[0]=128;for(var o=1;o<r;o++)n[o]=0;if(e<<=3,\"big\"===this.endian){for(var i=8;i<this.padLength;i++)n[o++]=0;n[o++]=0,n[o++]=0,n[o++]=0,n[o++]=0,n[o++]=e>>>24&255,n[o++]=e>>>16&255,n[o++]=e>>>8&255,n[o++]=255&e}else for(n[o++]=255&e,n[o++]=e>>>8&255,n[o++]=e>>>16&255,n[o++]=e>>>24&255,n[o++]=0,n[o++]=0,n[o++]=0,n[o++]=0,i=8;i<this.padLength;i++)n[o++]=0;return n}},{\"./utils\":437,\"minimalistic-assert\":453}],428:[function(e,t,r){\"use strict\";var n=e(\"./utils\"),o=e(\"minimalistic-assert\");function i(e,t,r){if(!(this instanceof i))return new i(e,t,r);this.Hash=e,this.blockSize=e.blockSize/8,this.outSize=e.outSize/8,this.inner=null,this.outer=null,this._init(n.toArray(t,r))}t.exports=i,i.prototype._init=function(e){e.length>this.blockSize&&(e=(new this.Hash).update(e).digest()),o(e.length<=this.blockSize);for(var t=e.length;t<this.blockSize;t++)e.push(0);for(t=0;t<e.length;t++)e[t]^=54;for(this.inner=(new this.Hash).update(e),t=0;t<e.length;t++)e[t]^=106;this.outer=(new this.Hash).update(e)},i.prototype.update=function(e,t){return this.inner.update(e,t),this},i.prototype.digest=function(e){return this.outer.update(this.inner.digest()),this.outer.digest(e)}},{\"./utils\":437,\"minimalistic-assert\":453}],429:[function(e,t,r){\"use strict\";var n=e(\"./utils\"),o=e(\"./common\"),i=n.rotl32,a=n.sum32,s=n.sum32_3,l=n.sum32_4,c=o.BlockHash;function u(){if(!(this instanceof u))return new u;c.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian=\"little\"}function d(e,t,r,n){return e<=15?t^r^n:e<=31?t&r|~t&n:e<=47?(t|~r)^n:e<=63?t&n|r&~n:t^(r|~n)}function f(e){return e<=15?0:e<=31?1518500249:e<=47?1859775393:e<=63?2400959708:2840853838}function h(e){return e<=15?1352829926:e<=31?1548603684:e<=47?1836072691:e<=63?2053994217:0}n.inherits(u,c),r.ripemd160=u,u.blockSize=512,u.outSize=160,u.hmacStrength=192,u.padLength=64,u.prototype._update=function(e,t){for(var r=this.h[0],n=this.h[1],o=this.h[2],c=this.h[3],u=this.h[4],b=r,y=n,w=o,x=c,S=u,C=0;C<80;C++){var k=a(i(l(r,d(C,n,o,c),e[p[C]+t],f(C)),g[C]),u);r=u,u=c,c=i(o,10),o=n,n=k,k=a(i(l(b,d(79-C,y,w,x),e[m[C]+t],h(C)),v[C]),S),b=S,S=x,x=i(w,10),w=y,y=k}k=s(this.h[1],o,x),this.h[1]=s(this.h[2],c,S),this.h[2]=s(this.h[3],u,b),this.h[3]=s(this.h[4],r,y),this.h[4]=s(this.h[0],n,w),this.h[0]=k},u.prototype._digest=function(e){return\"hex\"===e?n.toHex32(this.h,\"little\"):n.split32(this.h,\"little\")};var p=[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],m=[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],g=[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],v=[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]},{\"./common\":427,\"./utils\":437}],430:[function(e,t,r){\"use strict\";r.sha1=e(\"./sha/1\"),r.sha224=e(\"./sha/224\"),r.sha256=e(\"./sha/256\"),r.sha384=e(\"./sha/384\"),r.sha512=e(\"./sha/512\")},{\"./sha/1\":431,\"./sha/224\":432,\"./sha/256\":433,\"./sha/384\":434,\"./sha/512\":435}],431:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),o=e(\"../common\"),i=e(\"./common\"),a=n.rotl32,s=n.sum32,l=n.sum32_5,c=i.ft_1,u=o.BlockHash,d=[1518500249,1859775393,2400959708,3395469782];function f(){if(!(this instanceof f))return new f;u.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}n.inherits(f,u),t.exports=f,f.blockSize=512,f.outSize=160,f.hmacStrength=80,f.padLength=64,f.prototype._update=function(e,t){for(var r=this.W,n=0;n<16;n++)r[n]=e[t+n];for(;n<r.length;n++)r[n]=a(r[n-3]^r[n-8]^r[n-14]^r[n-16],1);var o=this.h[0],i=this.h[1],u=this.h[2],f=this.h[3],h=this.h[4];for(n=0;n<r.length;n++){var p=~~(n/20),m=l(a(o,5),c(p,i,u,f),h,r[n],d[p]);h=f,f=u,u=a(i,30),i=o,o=m}this.h[0]=s(this.h[0],o),this.h[1]=s(this.h[1],i),this.h[2]=s(this.h[2],u),this.h[3]=s(this.h[3],f),this.h[4]=s(this.h[4],h)},f.prototype._digest=function(e){return\"hex\"===e?n.toHex32(this.h,\"big\"):n.split32(this.h,\"big\")}},{\"../common\":427,\"../utils\":437,\"./common\":436}],432:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),o=e(\"./256\");function i(){if(!(this instanceof i))return new i;o.call(this),this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]}n.inherits(i,o),t.exports=i,i.blockSize=512,i.outSize=224,i.hmacStrength=192,i.padLength=64,i.prototype._digest=function(e){return\"hex\"===e?n.toHex32(this.h.slice(0,7),\"big\"):n.split32(this.h.slice(0,7),\"big\")}},{\"../utils\":437,\"./256\":433}],433:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),o=e(\"../common\"),i=e(\"./common\"),a=e(\"minimalistic-assert\"),s=n.sum32,l=n.sum32_4,c=n.sum32_5,u=i.ch32,d=i.maj32,f=i.s0_256,h=i.s1_256,p=i.g0_256,m=i.g1_256,g=o.BlockHash,v=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function b(){if(!(this instanceof b))return new b;g.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=v,this.W=new Array(64)}n.inherits(b,g),t.exports=b,b.blockSize=512,b.outSize=256,b.hmacStrength=192,b.padLength=64,b.prototype._update=function(e,t){for(var r=this.W,n=0;n<16;n++)r[n]=e[t+n];for(;n<r.length;n++)r[n]=l(m(r[n-2]),r[n-7],p(r[n-15]),r[n-16]);var o=this.h[0],i=this.h[1],g=this.h[2],v=this.h[3],b=this.h[4],y=this.h[5],w=this.h[6],x=this.h[7];for(a(this.k.length===r.length),n=0;n<r.length;n++){var S=c(x,h(b),u(b,y,w),this.k[n],r[n]),C=s(f(o),d(o,i,g));x=w,w=y,y=b,b=s(v,S),v=g,g=i,i=o,o=s(S,C)}this.h[0]=s(this.h[0],o),this.h[1]=s(this.h[1],i),this.h[2]=s(this.h[2],g),this.h[3]=s(this.h[3],v),this.h[4]=s(this.h[4],b),this.h[5]=s(this.h[5],y),this.h[6]=s(this.h[6],w),this.h[7]=s(this.h[7],x)},b.prototype._digest=function(e){return\"hex\"===e?n.toHex32(this.h,\"big\"):n.split32(this.h,\"big\")}},{\"../common\":427,\"../utils\":437,\"./common\":436,\"minimalistic-assert\":453}],434:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),o=e(\"./512\");function i(){if(!(this instanceof i))return new i;o.call(this),this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]}n.inherits(i,o),t.exports=i,i.blockSize=1024,i.outSize=384,i.hmacStrength=192,i.padLength=128,i.prototype._digest=function(e){return\"hex\"===e?n.toHex32(this.h.slice(0,12),\"big\"):n.split32(this.h.slice(0,12),\"big\")}},{\"../utils\":437,\"./512\":435}],435:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),o=e(\"../common\"),i=e(\"minimalistic-assert\"),a=n.rotr64_hi,s=n.rotr64_lo,l=n.shr64_hi,c=n.shr64_lo,u=n.sum64,d=n.sum64_hi,f=n.sum64_lo,h=n.sum64_4_hi,p=n.sum64_4_lo,m=n.sum64_5_hi,g=n.sum64_5_lo,v=o.BlockHash,b=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function y(){if(!(this instanceof y))return new y;v.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=b,this.W=new Array(160)}function w(e,t,r,n,o){var i=e&r^~e&o;return i<0&&(i+=4294967296),i}function x(e,t,r,n,o,i){var a=t&n^~t&i;return a<0&&(a+=4294967296),a}function S(e,t,r,n,o){var i=e&r^e&o^r&o;return i<0&&(i+=4294967296),i}function C(e,t,r,n,o,i){var a=t&n^t&i^n&i;return a<0&&(a+=4294967296),a}function k(e,t){var r=a(e,t,28)^a(t,e,2)^a(t,e,7);return r<0&&(r+=4294967296),r}function E(e,t){var r=s(e,t,28)^s(t,e,2)^s(t,e,7);return r<0&&(r+=4294967296),r}function O(e,t){var r=a(e,t,14)^a(e,t,18)^a(t,e,9);return r<0&&(r+=4294967296),r}function A(e,t){var r=s(e,t,14)^s(e,t,18)^s(t,e,9);return r<0&&(r+=4294967296),r}function T(e,t){var r=a(e,t,1)^a(e,t,8)^l(e,t,7);return r<0&&(r+=4294967296),r}function j(e,t){var r=s(e,t,1)^s(e,t,8)^c(e,t,7);return r<0&&(r+=4294967296),r}function P(e,t){var r=a(e,t,19)^a(t,e,29)^l(e,t,6);return r<0&&(r+=4294967296),r}function M(e,t){var r=s(e,t,19)^s(t,e,29)^c(e,t,6);return r<0&&(r+=4294967296),r}n.inherits(y,v),t.exports=y,y.blockSize=1024,y.outSize=512,y.hmacStrength=192,y.padLength=128,y.prototype._prepareBlock=function(e,t){for(var r=this.W,n=0;n<32;n++)r[n]=e[t+n];for(;n<r.length;n+=2){var o=P(r[n-4],r[n-3]),i=M(r[n-4],r[n-3]),a=r[n-14],s=r[n-13],l=T(r[n-30],r[n-29]),c=j(r[n-30],r[n-29]),u=r[n-32],d=r[n-31];r[n]=h(o,i,a,s,l,c,u,d),r[n+1]=p(o,i,a,s,l,c,u,d)}},y.prototype._update=function(e,t){this._prepareBlock(e,t);var r=this.W,n=this.h[0],o=this.h[1],a=this.h[2],s=this.h[3],l=this.h[4],c=this.h[5],h=this.h[6],p=this.h[7],v=this.h[8],b=this.h[9],y=this.h[10],T=this.h[11],j=this.h[12],P=this.h[13],M=this.h[14],R=this.h[15];i(this.k.length===r.length);for(var _=0;_<r.length;_+=2){var I=M,N=R,F=O(v,b),D=A(v,b),B=w(v,0,y,0,j),L=x(0,b,0,T,0,P),z=this.k[_],H=this.k[_+1],U=r[_],V=r[_+1],W=m(I,N,F,D,B,L,z,H,U,V),G=g(I,N,F,D,B,L,z,H,U,V);I=k(n,o),N=E(n,o),F=S(n,0,a,0,l),D=C(0,o,0,s,0,c);var q=d(I,N,F,D),K=f(I,N,F,D);M=j,R=P,j=y,P=T,y=v,T=b,v=d(h,p,W,G),b=f(p,p,W,G),h=l,p=c,l=a,c=s,a=n,s=o,n=d(W,G,q,K),o=f(W,G,q,K)}u(this.h,0,n,o),u(this.h,2,a,s),u(this.h,4,l,c),u(this.h,6,h,p),u(this.h,8,v,b),u(this.h,10,y,T),u(this.h,12,j,P),u(this.h,14,M,R)},y.prototype._digest=function(e){return\"hex\"===e?n.toHex32(this.h,\"big\"):n.split32(this.h,\"big\")}},{\"../common\":427,\"../utils\":437,\"minimalistic-assert\":453}],436:[function(e,t,r){\"use strict\";var n=e(\"../utils\").rotr32;function o(e,t,r){return e&t^~e&r}function i(e,t,r){return e&t^e&r^t&r}function a(e,t,r){return e^t^r}r.ft_1=function(e,t,r,n){return 0===e?o(t,r,n):1===e||3===e?a(t,r,n):2===e?i(t,r,n):void 0},r.ch32=o,r.maj32=i,r.p32=a,r.s0_256=function(e){return n(e,2)^n(e,13)^n(e,22)},r.s1_256=function(e){return n(e,6)^n(e,11)^n(e,25)},r.g0_256=function(e){return n(e,7)^n(e,18)^e>>>3},r.g1_256=function(e){return n(e,17)^n(e,19)^e>>>10}},{\"../utils\":437}],437:[function(e,t,r){\"use strict\";var n=e(\"minimalistic-assert\"),o=e(\"inherits\");function i(e,t){return 55296==(64512&e.charCodeAt(t))&&!(t<0||t+1>=e.length)&&56320==(64512&e.charCodeAt(t+1))}function a(e){return(e>>>24|e>>>8&65280|e<<8&16711680|(255&e)<<24)>>>0}function s(e){return 1===e.length?\"0\"+e:e}function l(e){return 7===e.length?\"0\"+e:6===e.length?\"00\"+e:5===e.length?\"000\"+e:4===e.length?\"0000\"+e:3===e.length?\"00000\"+e:2===e.length?\"000000\"+e:1===e.length?\"0000000\"+e:e}r.inherits=o,r.toArray=function(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var r=[];if(\"string\"==typeof e)if(t){if(\"hex\"===t)for((e=e.replace(/[^a-z0-9]+/gi,\"\")).length%2!=0&&(e=\"0\"+e),o=0;o<e.length;o+=2)r.push(parseInt(e[o]+e[o+1],16))}else for(var n=0,o=0;o<e.length;o++){var a=e.charCodeAt(o);a<128?r[n++]=a:a<2048?(r[n++]=a>>6|192,r[n++]=63&a|128):i(e,o)?(a=65536+((1023&a)<<10)+(1023&e.charCodeAt(++o)),r[n++]=a>>18|240,r[n++]=a>>12&63|128,r[n++]=a>>6&63|128,r[n++]=63&a|128):(r[n++]=a>>12|224,r[n++]=a>>6&63|128,r[n++]=63&a|128)}else for(o=0;o<e.length;o++)r[o]=0|e[o];return r},r.toHex=function(e){for(var t=\"\",r=0;r<e.length;r++)t+=s(e[r].toString(16));return t},r.htonl=a,r.toHex32=function(e,t){for(var r=\"\",n=0;n<e.length;n++){var o=e[n];\"little\"===t&&(o=a(o)),r+=l(o.toString(16))}return r},r.zero2=s,r.zero8=l,r.join32=function(e,t,r,o){var i=r-t;n(i%4==0);for(var a=new Array(i/4),s=0,l=t;s<a.length;s++,l+=4){var c;c=\"big\"===o?e[l]<<24|e[l+1]<<16|e[l+2]<<8|e[l+3]:e[l+3]<<24|e[l+2]<<16|e[l+1]<<8|e[l],a[s]=c>>>0}return a},r.split32=function(e,t){for(var r=new Array(4*e.length),n=0,o=0;n<e.length;n++,o+=4){var i=e[n];\"big\"===t?(r[o]=i>>>24,r[o+1]=i>>>16&255,r[o+2]=i>>>8&255,r[o+3]=255&i):(r[o+3]=i>>>24,r[o+2]=i>>>16&255,r[o+1]=i>>>8&255,r[o]=255&i)}return r},r.rotr32=function(e,t){return e>>>t|e<<32-t},r.rotl32=function(e,t){return e<<t|e>>>32-t},r.sum32=function(e,t){return e+t>>>0},r.sum32_3=function(e,t,r){return e+t+r>>>0},r.sum32_4=function(e,t,r,n){return e+t+r+n>>>0},r.sum32_5=function(e,t,r,n,o){return e+t+r+n+o>>>0},r.sum64=function(e,t,r,n){var o=e[t],i=n+e[t+1]>>>0,a=(i<n?1:0)+r+o;e[t]=a>>>0,e[t+1]=i},r.sum64_hi=function(e,t,r,n){return(t+n>>>0<t?1:0)+e+r>>>0},r.sum64_lo=function(e,t,r,n){return t+n>>>0},r.sum64_4_hi=function(e,t,r,n,o,i,a,s){var l=0,c=t;return l+=(c=c+n>>>0)<t?1:0,l+=(c=c+i>>>0)<i?1:0,e+r+o+a+(l+=(c=c+s>>>0)<s?1:0)>>>0},r.sum64_4_lo=function(e,t,r,n,o,i,a,s){return t+n+i+s>>>0},r.sum64_5_hi=function(e,t,r,n,o,i,a,s,l,c){var u=0,d=t;return u+=(d=d+n>>>0)<t?1:0,u+=(d=d+i>>>0)<i?1:0,u+=(d=d+s>>>0)<s?1:0,e+r+o+a+l+(u+=(d=d+c>>>0)<c?1:0)>>>0},r.sum64_5_lo=function(e,t,r,n,o,i,a,s,l,c){return t+n+i+s+c>>>0},r.rotr64_hi=function(e,t,r){return(t<<32-r|e>>>r)>>>0},r.rotr64_lo=function(e,t,r){return(e<<32-r|t>>>r)>>>0},r.shr64_hi=function(e,t,r){return e>>>r},r.shr64_lo=function(e,t,r){return(e<<32-r|t>>>r)>>>0}},{inherits:440,\"minimalistic-assert\":453}],438:[function(e,t,r){\"use strict\";var n=e(\"hash.js\"),o=e(\"minimalistic-crypto-utils\"),i=e(\"minimalistic-assert\");function a(e){if(!(this instanceof a))return new a(e);this.hash=e.hash,this.predResist=!!e.predResist,this.outLen=this.hash.outSize,this.minEntropy=e.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var t=o.toArray(e.entropy,e.entropyEnc||\"hex\"),r=o.toArray(e.nonce,e.nonceEnc||\"hex\"),n=o.toArray(e.pers,e.persEnc||\"hex\");i(t.length>=this.minEntropy/8,\"Not enough entropy. Minimum is: \"+this.minEntropy+\" bits\"),this._init(t,r,n)}t.exports=a,a.prototype._init=function(e,t,r){var n=e.concat(t).concat(r);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var o=0;o<this.V.length;o++)this.K[o]=0,this.V[o]=1;this._update(n),this._reseed=1,this.reseedInterval=281474976710656},a.prototype._hmac=function(){return new n.hmac(this.hash,this.K)},a.prototype._update=function(e){var t=this._hmac().update(this.V).update([0]);e&&(t=t.update(e)),this.K=t.digest(),this.V=this._hmac().update(this.V).digest(),e&&(this.K=this._hmac().update(this.V).update([1]).update(e).digest(),this.V=this._hmac().update(this.V).digest())},a.prototype.reseed=function(e,t,r,n){\"string\"!=typeof t&&(n=r,r=t,t=null),e=o.toArray(e,t),r=o.toArray(r,n),i(e.length>=this.minEntropy/8,\"Not enough entropy. Minimum is: \"+this.minEntropy+\" bits\"),this._update(e.concat(r||[])),this._reseed=1},a.prototype.generate=function(e,t,r,n){if(this._reseed>this.reseedInterval)throw new Error(\"Reseed is required\");\"string\"!=typeof t&&(n=r,r=t,t=null),r&&(r=o.toArray(r,n||\"hex\"),this._update(r));for(var i=[];i.length<e;)this.V=this._hmac().update(this.V).digest(),i=i.concat(this.V);var a=i.slice(0,e);return this._update(r),this._reseed++,o.encode(a,t)}},{\"hash.js\":426,\"minimalistic-assert\":453,\"minimalistic-crypto-utils\":454}],439:[function(e,t,r){\"use strict\";r.read=function(e,t,r,n,o){var i,a,s=8*o-n-1,l=(1<<s)-1,c=l>>1,u=-7,d=r?o-1:0,f=r?-1:1,h=e[t+d];for(d+=f,i=h&(1<<-u)-1,h>>=-u,u+=s;u>0;i=256*i+e[t+d],d+=f,u-=8);for(a=i&(1<<-u)-1,i>>=-u,u+=n;u>0;a=256*a+e[t+d],d+=f,u-=8);if(0===i)i=1-c;else{if(i===l)return a?NaN:1/0*(h?-1:1);a+=Math.pow(2,n),i-=c}return(h?-1:1)*a*Math.pow(2,i-n)},r.write=function(e,t,r,n,o,i){var a,s,l,c=8*i-o-1,u=(1<<c)-1,d=u>>1,f=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,h=n?0:i-1,p=n?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=u):(a=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-a))<1&&(a--,l*=2),(t+=a+d>=1?f/l:f*Math.pow(2,1-d))*l>=2&&(a++,l/=2),a+d>=u?(s=0,a=u):a+d>=1?(s=(t*l-1)*Math.pow(2,o),a+=d):(s=t*Math.pow(2,d-1)*Math.pow(2,o),a=0));o>=8;e[r+h]=255&s,h+=p,s/=256,o-=8);for(a=a<<o|s,c+=o;c>0;e[r+h]=255&a,h+=p,a/=256,c-=8);e[r+h-p]|=128*m}},{}],440:[function(e,t,r){\"use strict\";\"function\"==typeof Object.create?t.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:t.exports=function(e,t){if(t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}}},{}],441:[function(e,t,n){(function(r,o,i,a,s,l,c,u){(function(){\"use strict\";!function(e){\"object\"==typeof n&&void 0!==t?t.exports=e():(\"undefined\"!=typeof window?window:void 0!==o?o:\"undefined\"!=typeof self?self:this).JSZip=e()}((function(){return function t(r,n,o){function i(s,l){if(!n[s]){if(!r[s]){var c=\"function\"==typeof e&&e;if(!l&&c)return c(s,!0);if(a)return a(s,!0);var u=new Error(\"Cannot find module '\"+s+\"'\");throw u.code=\"MODULE_NOT_FOUND\",u}var d=n[s]={exports:{}};r[s][0].call(d.exports,(function(e){return i(r[s][1][e]||e)}),d,d.exports,t,r,n,o)}return n[s].exports}for(var a=\"function\"==typeof e&&e,s=0;s<o.length;s++)i(o[s]);return i}({1:[function(e,t,r){var n=e(\"./utils\"),o=e(\"./support\"),i=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r.encode=function(e){for(var t,r,o,a,s,l,c,u=[],d=0,f=e.length,h=f,p=\"string\"!==n.getTypeOf(e);d<e.length;)h=f-d,o=p?(t=e[d++],r=d<f?e[d++]:0,d<f?e[d++]:0):(t=e.charCodeAt(d++),r=d<f?e.charCodeAt(d++):0,d<f?e.charCodeAt(d++):0),a=t>>2,s=(3&t)<<4|r>>4,l=1<h?(15&r)<<2|o>>6:64,c=2<h?63&o:64,u.push(i.charAt(a)+i.charAt(s)+i.charAt(l)+i.charAt(c));return u.join(\"\")},r.decode=function(e){var t,r,n,a,s,l,c=0,u=0,d=\"data:\";if(e.substr(0,5)===d)throw new Error(\"Invalid base64 input, it looks like a data url.\");var f,h=3*(e=e.replace(/[^A-Za-z0-9+/=]/g,\"\")).length/4;if(e.charAt(e.length-1)===i.charAt(64)&&h--,e.charAt(e.length-2)===i.charAt(64)&&h--,h%1!=0)throw new Error(\"Invalid base64 input, bad content length.\");for(f=o.uint8array?new Uint8Array(0|h):new Array(0|h);c<e.length;)t=i.indexOf(e.charAt(c++))<<2|(a=i.indexOf(e.charAt(c++)))>>4,r=(15&a)<<4|(s=i.indexOf(e.charAt(c++)))>>2,n=(3&s)<<6|(l=i.indexOf(e.charAt(c++))),f[u++]=t,64!==s&&(f[u++]=r),64!==l&&(f[u++]=n);return f}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){var n=e(\"./external\"),o=e(\"./stream/DataWorker\"),i=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function s(e,t,r,n,o){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=o}s.prototype={getContentWorker:function(){var e=new o(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",(function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")})),e},getCompressedWorker:function(){return new o(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},s.createWorkerFrom=function(e,t,r){return e.pipe(new i).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=s},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){var n=e(\"./utils\"),o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r){var n=o,i=0+r;e^=-1;for(var a=0;a<i;a++)e=e>>>8^n[255&(e^t[a])];return-1^e}(0|t,e,e.length):function(e,t,r){var n=o,i=0+r;e^=-1;for(var a=0;a<i;a++)e=e>>>8^n[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length):0}},{\"./utils\":32}],5:[function(e,t,r){r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){var n;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,o=e(\"pako\"),i=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),s=n?\"uint8array\":\"array\";function l(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",i.inherits(l,a),l.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(i.transformTo(s,e.data),!1)},l.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},l.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},l.prototype._createPako=function(){this._pako=new o[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}},r.compressWorker=function(e){return new l(\"Deflate\",e)},r.uncompressWorker=function(){return new l(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){function n(e,t){var r,n=\"\";for(r=0;r<t;r++)n+=String.fromCharCode(255&e),e>>>=8;return n}function o(e,t,r,o,a,u){var d,f,h=e.file,p=e.compression,m=u!==s.utf8encode,g=i.transformTo(\"string\",u(h.name)),v=i.transformTo(\"string\",s.utf8encode(h.name)),b=h.comment,y=i.transformTo(\"string\",u(b)),w=i.transformTo(\"string\",s.utf8encode(b)),x=v.length!==h.name.length,S=w.length!==b.length,C=\"\",k=\"\",E=\"\",O=h.dir,A=h.date,T={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(T.crc32=e.crc32,T.compressedSize=e.compressedSize,T.uncompressedSize=e.uncompressedSize);var j=0;t&&(j|=8),m||!x&&!S||(j|=2048);var P=0,M=0;O&&(P|=16),\"UNIX\"===a?(M=798,P|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,O)):(M=20,P|=function(e){return 63&(e||0)}(h.dosPermissions)),d=A.getUTCHours(),d<<=6,d|=A.getUTCMinutes(),d<<=5,d|=A.getUTCSeconds()/2,f=A.getUTCFullYear()-1980,f<<=4,f|=A.getUTCMonth()+1,f<<=5,f|=A.getUTCDate(),x&&(k=n(1,1)+n(l(g),4)+v,C+=\"up\"+n(k.length,2)+k),S&&(E=n(1,1)+n(l(y),4)+w,C+=\"uc\"+n(E.length,2)+E);var R=\"\";return R+=\"\\n\\0\",R+=n(j,2),R+=p.magic,R+=n(d,2),R+=n(f,2),R+=n(T.crc32,4),R+=n(T.compressedSize,4),R+=n(T.uncompressedSize,4),R+=n(g.length,2),R+=n(C.length,2),{fileRecord:c.LOCAL_FILE_HEADER+R+g+C,dirRecord:c.CENTRAL_FILE_HEADER+n(M,2)+R+n(y.length,2)+\"\\0\\0\\0\\0\"+n(P,4)+n(o,4)+g+C+y}}var i=e(\"../utils\"),a=e(\"../stream/GenericWorker\"),s=e(\"../utf8\"),l=e(\"../crc32\"),c=e(\"../signature\");function u(e,t,r,n){a.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}i.inherits(u,a),u.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,a.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},u.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=o(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},u.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=o(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return c.DATA_DESCRIPTOR+n(e.crc32,4)+n(e.compressedSize,4)+n(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},u.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t<this.dirRecords.length;t++)this.push({data:this.dirRecords[t],meta:{percent:100}});var r=this.bytesWritten-e,o=function(e,t,r,o,a){var s=i.transformTo(\"string\",a(o));return c.CENTRAL_DIRECTORY_END+\"\\0\\0\\0\\0\"+n(e,2)+n(e,2)+n(t,4)+n(r,4)+n(s.length,2)+s}(this.dirRecords.length,r,e,this.zipComment,this.encodeFileName);this.push({data:o,meta:{percent:100}})},u.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},u.prototype.registerPrevious=function(e){this._sources.push(e);var t=this;return e.on(\"data\",(function(e){t.processChunk(e)})),e.on(\"end\",(function(){t.closedSource(t.previous.streamInfo),t._sources.length?t.prepareNextSource():t.end()})),e.on(\"error\",(function(e){t.error(e)})),this},u.prototype.resume=function(){return!!a.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},u.prototype.error=function(e){var t=this._sources;if(!a.prototype.error.call(this,e))return!1;for(var r=0;r<t.length;r++)try{t[r].error(e)}catch(e){}return!0},u.prototype.lock=function(){a.prototype.lock.call(this);for(var e=this._sources,t=0;t<e.length;t++)e[t].lock()},t.exports=u},{\"../crc32\":4,\"../signature\":23,\"../stream/GenericWorker\":28,\"../utf8\":31,\"../utils\":32}],9:[function(e,t,r){var n=e(\"../compressions\"),o=e(\"./ZipFileWorker\");r.generateWorker=function(e,t,r){var i=new o(t.streamFiles,r,t.platform,t.encodeFileName),a=0;try{e.forEach((function(e,r){a++;var o=function(e,t){var r=e||t,o=n[r];if(!o)throw new Error(r+\" is not a valid compression method !\");return o}(r.options.compression,t.compression),s=r.options.compressionOptions||t.compressionOptions||{},l=r.dir,c=r.date;r._compressWorker(o,s).withStreamInfo(\"file\",{name:e,dir:l,date:c,comment:r.comment||\"\",unixPermissions:r.unixPermissions,dosPermissions:r.dosPermissions}).pipe(i)})),i.entriesCount=a}catch(e){i.error(e)}return i}},{\"../compressions\":3,\"./ZipFileWorker\":8}],10:[function(e,t,r){function n(){if(!(this instanceof n))return new n;if(arguments.length)throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");this.files=Object.create(null),this.comment=null,this.root=\"\",this.clone=function(){var e=new n;for(var t in this)\"function\"!=typeof this[t]&&(e[t]=this[t]);return e}}(n.prototype=e(\"./object\")).loadAsync=e(\"./load\"),n.support=e(\"./support\"),n.defaults=e(\"./defaults\"),n.version=\"3.10.1\",n.loadAsync=function(e,t){return(new n).loadAsync(e,t)},n.external=e(\"./external\"),t.exports=n},{\"./defaults\":5,\"./external\":6,\"./load\":11,\"./object\":15,\"./support\":30}],11:[function(e,t,r){var n=e(\"./utils\"),o=e(\"./external\"),i=e(\"./utf8\"),a=e(\"./zipEntries\"),s=e(\"./stream/Crc32Probe\"),l=e(\"./nodejsUtils\");function c(e){return new o.Promise((function(t,r){var n=e.decompressed.getContentWorker().pipe(new s);n.on(\"error\",(function(e){r(e)})).on(\"end\",(function(){n.streamInfo.crc32!==e.decompressed.crc32?r(new Error(\"Corrupted zip : CRC32 mismatch\")):t()})).resume()}))}t.exports=function(e,t){var r=this;return t=n.extend(t||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:i.utf8decode}),l.isNode&&l.isStream(e)?o.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\")):n.prepareContent(\"the loaded zip file\",e,!0,t.optimizedBinaryString,t.base64).then((function(e){var r=new a(t);return r.load(e),r})).then((function(e){var r=[o.Promise.resolve(e)],n=e.files;if(t.checkCRC32)for(var i=0;i<n.length;i++)r.push(c(n[i]));return o.Promise.all(r)})).then((function(e){for(var o=e.shift(),i=o.files,a=0;a<i.length;a++){var s=i[a],l=s.fileNameStr,c=n.resolve(s.fileNameStr);r.file(c,s.decompressed,{binary:!0,optimizedBinaryString:!0,date:s.date,dir:s.dir,comment:s.fileCommentStr.length?s.fileCommentStr:null,unixPermissions:s.unixPermissions,dosPermissions:s.dosPermissions,createFolders:t.createFolders}),s.dir||(r.file(c).unsafeOriginalName=l)}return o.zipComment.length&&(r.comment=o.zipComment),r}))}},{\"./external\":6,\"./nodejsUtils\":14,\"./stream/Crc32Probe\":25,\"./utf8\":31,\"./utils\":32,\"./zipEntries\":33}],12:[function(e,t,r){var n=e(\"../utils\"),o=e(\"../stream/GenericWorker\");function i(e,t){o.call(this,\"Nodejs stream input adapter for \"+e),this._upstreamEnded=!1,this._bindStream(t)}n.inherits(i,o),i.prototype._bindStream=function(e){var t=this;(this._stream=e).pause(),e.on(\"data\",(function(e){t.push({data:e,meta:{percent:0}})})).on(\"error\",(function(e){t.isPaused?this.generatedError=e:t.error(e)})).on(\"end\",(function(){t.isPaused?t._upstreamEnded=!0:t.end()}))},i.prototype.pause=function(){return!!o.prototype.pause.call(this)&&(this._stream.pause(),!0)},i.prototype.resume=function(){return!!o.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},t.exports=i},{\"../stream/GenericWorker\":28,\"../utils\":32}],13:[function(e,t,r){var n=e(\"readable-stream\").Readable;function o(e,t,r){n.call(this,t),this._helper=e;var o=this;e.on(\"data\",(function(e,t){o.push(e)||o._helper.pause(),r&&r(t)})).on(\"error\",(function(e){o.emit(\"error\",e)})).on(\"end\",(function(){o.push(null)}))}e(\"../utils\").inherits(o,n),o.prototype._read=function(){this._helper.resume()},t.exports=o},{\"../utils\":32,\"readable-stream\":16}],14:[function(e,t,r){t.exports={isNode:void 0!==i,newBufferFrom:function(e,t){if(i.from&&i.from!==Uint8Array.from)return i.from(e,t);if(\"number\"==typeof e)throw new Error('The \"data\" argument must not be a number');return new i(e,t)},allocBuffer:function(e){if(i.alloc)return i.alloc(e);var t=new i(e);return t.fill(0),t},isBuffer:function(e){return i.isBuffer(e)},isStream:function(e){return e&&\"function\"==typeof e.on&&\"function\"==typeof e.pause&&\"function\"==typeof e.resume}}},{}],15:[function(e,t,r){function n(e,t,r){var n,o=i.getTypeOf(t),s=i.extend(r||{},l);s.date=s.date||new Date,null!==s.compression&&(s.compression=s.compression.toUpperCase()),\"string\"==typeof s.unixPermissions&&(s.unixPermissions=parseInt(s.unixPermissions,8)),s.unixPermissions&&16384&s.unixPermissions&&(s.dir=!0),s.dosPermissions&&16&s.dosPermissions&&(s.dir=!0),s.dir&&(e=m(e)),s.createFolders&&(n=p(e))&&g.call(this,n,!0);var d,v=\"string\"===o&&!1===s.binary&&!1===s.base64;r&&void 0!==r.binary||(s.binary=!v),(t instanceof c&&0===t.uncompressedSize||s.dir||!t||0===t.length)&&(s.base64=!1,s.binary=!0,t=\"\",s.compression=\"STORE\",o=\"string\"),d=t instanceof c||t instanceof a?t:f.isNode&&f.isStream(t)?new h(e,t):i.prepareContent(e,t,s.binary,s.optimizedBinaryString,s.base64);var b=new u(e,d,s);this.files[e]=b}var o=e(\"./utf8\"),i=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),s=e(\"./stream/StreamHelper\"),l=e(\"./defaults\"),c=e(\"./compressedObject\"),u=e(\"./zipObject\"),d=e(\"./generate\"),f=e(\"./nodejsUtils\"),h=e(\"./nodejs/NodejsStreamInputAdapter\"),p=function(e){\"/\"===e.slice(-1)&&(e=e.substring(0,e.length-1));var t=e.lastIndexOf(\"/\");return 0<t?e.substring(0,t):\"\"},m=function(e){return\"/\"!==e.slice(-1)&&(e+=\"/\"),e},g=function(e,t){return t=void 0!==t?t:l.createFolders,e=m(e),this.files[e]||n.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]};function v(e){return\"[object RegExp]\"===Object.prototype.toString.call(e)}var b={load:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},forEach:function(e){var t,r,n;for(t in this.files)n=this.files[t],(r=t.slice(this.root.length,t.length))&&t.slice(0,this.root.length)===this.root&&e(r,n)},filter:function(e){var t=[];return this.forEach((function(r,n){e(r,n)&&t.push(n)})),t},file:function(e,t,r){if(1!==arguments.length)return e=this.root+e,n.call(this,e,t,r),this;if(v(e)){var o=e;return this.filter((function(e,t){return!t.dir&&o.test(e)}))}var i=this.files[this.root+e];return i&&!i.dir?i:null},folder:function(e){if(!e)return this;if(v(e))return this.filter((function(t,r){return r.dir&&e.test(t)}));var t=this.root+e,r=g.call(this,t),n=this.clone();return n.root=r.name,n},remove:function(e){e=this.root+e;var t=this.files[e];if(t||(\"/\"!==e.slice(-1)&&(e+=\"/\"),t=this.files[e]),t&&!t.dir)delete this.files[e];else for(var r=this.filter((function(t,r){return r.name.slice(0,e.length)===e})),n=0;n<r.length;n++)delete this.files[r[n].name];return this},generate:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},generateInternalStream:function(e){var t,r={};try{if((r=i.extend(e||{},{streamFiles:!1,compression:\"STORE\",compressionOptions:null,type:\"\",platform:\"DOS\",comment:null,mimeType:\"application/zip\",encodeFileName:o.utf8encode})).type=r.type.toLowerCase(),r.compression=r.compression.toUpperCase(),\"binarystring\"===r.type&&(r.type=\"string\"),!r.type)throw new Error(\"No output type specified.\");i.checkSupport(r.type),\"darwin\"!==r.platform&&\"freebsd\"!==r.platform&&\"linux\"!==r.platform&&\"sunos\"!==r.platform||(r.platform=\"UNIX\"),\"win32\"===r.platform&&(r.platform=\"DOS\");var n=r.comment||this.comment||\"\";t=d.generateWorker(this,r,n)}catch(e){(t=new a(\"error\")).error(e)}return new s(t,r.type||\"string\",r.mimeType)},generateAsync:function(e,t){return this.generateInternalStream(e).accumulate(t)},generateNodeStream:function(e,t){return(e=e||{}).type||(e.type=\"nodebuffer\"),this.generateInternalStream(e).toNodejsStream(t)}};t.exports=b},{\"./compressedObject\":2,\"./defaults\":5,\"./generate\":9,\"./nodejs/NodejsStreamInputAdapter\":12,\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31,\"./utils\":32,\"./zipObject\":35}],16:[function(e,t,r){t.exports=e(\"stream\")},{stream:void 0}],17:[function(e,t,r){var n=e(\"./DataReader\");function o(e){n.call(this,e);for(var t=0;t<this.data.length;t++)e[t]=255&e[t]}e(\"../utils\").inherits(o,n),o.prototype.byteAt=function(e){return this.data[this.zero+e]},o.prototype.lastIndexOfSignature=function(e){for(var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),o=e.charCodeAt(3),i=this.length-4;0<=i;--i)if(this.data[i]===t&&this.data[i+1]===r&&this.data[i+2]===n&&this.data[i+3]===o)return i-this.zero;return-1},o.prototype.readAndCheckSignature=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),o=e.charCodeAt(3),i=this.readData(4);return t===i[0]&&r===i[1]&&n===i[2]&&o===i[3]},o.prototype.readData=function(e){if(this.checkOffset(e),0===e)return[];var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=o},{\"../utils\":32,\"./DataReader\":18}],18:[function(e,t,r){var n=e(\"../utils\");function o(e){this.data=e,this.length=e.length,this.index=0,this.zero=0}o.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length<this.zero+e||e<0)throw new Error(\"End of data reached (data length = \"+this.length+\", asked index = \"+e+\"). Corrupted zip ?\")},setIndex:function(e){this.checkIndex(e),this.index=e},skip:function(e){this.setIndex(this.index+e)},byteAt:function(){},readInt:function(e){var t,r=0;for(this.checkOffset(e),t=this.index+e-1;t>=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=o},{\"../utils\":32}],19:[function(e,t,r){var n=e(\"./Uint8ArrayReader\");function o(e){n.call(this,e)}e(\"../utils\").inherits(o,n),o.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=o},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){var n=e(\"./DataReader\");function o(e){n.call(this,e)}e(\"../utils\").inherits(o,n),o.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},o.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},o.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},o.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=o},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){var n=e(\"./ArrayReader\");function o(e){n.call(this,e)}e(\"../utils\").inherits(o,n),o.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=o},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){var n=e(\"../utils\"),o=e(\"../support\"),i=e(\"./ArrayReader\"),a=e(\"./StringReader\"),s=e(\"./NodeBufferReader\"),l=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||o.uint8array?\"nodebuffer\"===t?new s(e):o.uint8array?new l(n.transformTo(\"uint8array\",e)):new i(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){var n=e(\"./GenericWorker\"),o=e(\"../utils\");function i(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}o.inherits(i,n),i.prototype.processChunk=function(e){this.push({data:o.transformTo(this.destType,e.data),meta:e.meta})},t.exports=i},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){var n=e(\"./GenericWorker\"),o=e(\"../crc32\");function i(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(i,n),i.prototype.processChunk=function(e){this.streamInfo.crc32=o(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=i},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){var n=e(\"../utils\"),o=e(\"./GenericWorker\");function i(e){o.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(i,o),i.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}o.prototype.processChunk.call(this,e)},t.exports=i},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){var n=e(\"../utils\"),o=e(\"./GenericWorker\");function i(e){o.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then((function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()}),(function(e){t.error(e)}))}n.inherits(i,o),i.prototype.cleanUp=function(){o.prototype.cleanUp.call(this),this.data=null},i.prototype.resume=function(){return!!o.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},i.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},i.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=i},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r<this._listeners[e].length;r++)this._listeners[e][r].call(this,t)},pipe:function(e){return e.registerPrevious(this)},registerPrevious:function(e){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.streamInfo=e.streamInfo,this.mergeStreamInfo(),this.previous=e;var t=this;return e.on(\"data\",(function(e){t.processChunk(e)})),e.on(\"end\",(function(){t.end()})),e.on(\"error\",(function(e){t.error(e)})),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var e=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),e=!0),this.previous&&this.previous.resume(),!e},flush:function(){},processChunk:function(e){this.push(e)},withStreamInfo:function(e,t){return this.extraStreamInfo[e]=t,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var e in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,e)&&(this.streamInfo[e]=this.extraStreamInfo[e])},lock:function(){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var e=\"Worker \"+this.name;return this.previous?this.previous+\" -> \"+e:e}},t.exports=n},{}],29:[function(e,t,r){var n=e(\"../utils\"),o=e(\"./ConvertWorker\"),a=e(\"./GenericWorker\"),s=e(\"../base64\"),l=e(\"../support\"),c=e(\"../external\"),u=null;if(l.nodestream)try{u=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function d(e,t,r){var i=t;switch(t){case\"blob\":case\"arraybuffer\":i=\"uint8array\";break;case\"base64\":i=\"string\"}try{this._internalType=i,this._outputType=t,this._mimeType=r,n.checkSupport(i),this._worker=e.pipe(new o(i)),e.lock()}catch(e){this._worker=new a(\"error\"),this._worker.error(e)}}d.prototype={accumulate:function(e){return function(e,t){return new c.Promise((function(r,o){var a=[],l=e._internalType,c=e._outputType,u=e._mimeType;e.on(\"data\",(function(e,r){a.push(e),t&&t(r)})).on(\"error\",(function(e){a=[],o(e)})).on(\"end\",(function(){try{var e=function(e,t,r){switch(e){case\"blob\":return n.newBlob(n.transformTo(\"arraybuffer\",t),r);case\"base64\":return s.encode(t);default:return n.transformTo(e,t)}}(c,function(e,t){var r,n=0,o=null,a=0;for(r=0;r<t.length;r++)a+=t[r].length;switch(e){case\"string\":return t.join(\"\");case\"array\":return Array.prototype.concat.apply([],t);case\"uint8array\":for(o=new Uint8Array(a),r=0;r<t.length;r++)o.set(t[r],n),n+=t[r].length;return o;case\"nodebuffer\":return i.concat(t);default:throw new Error(\"concat : unsupported type '\"+e+\"'\")}}(l,a),u);r(e)}catch(e){o(e)}a=[]})).resume()}))}(this,e)},on:function(e,t){var r=this;return\"data\"===e?this._worker.on(e,(function(e){t.call(r,e.data,e.meta)})):this._worker.on(e,(function(){n.delay(t,arguments,r)})),this},resume:function(){return n.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(e){if(n.checkSupport(\"nodestream\"),\"nodebuffer\"!==this._outputType)throw new Error(this._outputType+\" is not supported by this method\");return new u(this,{objectMode:\"nodebuffer\"!==this._outputType},e)}},t.exports=d},{\"../base64\":1,\"../external\":6,\"../nodejs/NodejsStreamOutputAdapter\":13,\"../support\":30,\"../utils\":32,\"./ConvertWorker\":24,\"./GenericWorker\":28}],30:[function(e,t,r){if(r.base64=!0,r.array=!0,r.string=!0,r.arraybuffer=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array,r.nodebuffer=void 0!==i,r.uint8array=\"undefined\"!=typeof Uint8Array,\"undefined\"==typeof ArrayBuffer)r.blob=!1;else{var n=new ArrayBuffer(0);try{r.blob=0===new Blob([n],{type:\"application/zip\"}).size}catch(e){try{var o=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);o.append(n),r.blob=0===o.getBlob(\"application/zip\").size}catch(e){r.blob=!1}}}try{r.nodestream=!!e(\"readable-stream\").Readable}catch(e){r.nodestream=!1}},{\"readable-stream\":16}],31:[function(e,t,r){for(var n=e(\"./utils\"),o=e(\"./support\"),i=e(\"./nodejsUtils\"),a=e(\"./stream/GenericWorker\"),s=new Array(256),l=0;l<256;l++)s[l]=252<=l?6:248<=l?5:240<=l?4:224<=l?3:192<=l?2:1;function c(){a.call(this,\"utf-8 decode\"),this.leftOver=null}function u(){a.call(this,\"utf-8 encode\")}s[254]=s[254]=1,r.utf8encode=function(e){return o.nodebuffer?i.newBufferFrom(e,\"utf-8\"):function(e){var t,r,n,i,a,s=e.length,l=0;for(i=0;i<s;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<s&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),l+=r<128?1:r<2048?2:r<65536?3:4;for(t=o.uint8array?new Uint8Array(l):new Array(l),i=a=0;a<l;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<s&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[a++]=r:(r<2048?t[a++]=192|r>>>6:(r<65536?t[a++]=224|r>>>12:(t[a++]=240|r>>>18,t[a++]=128|r>>>12&63),t[a++]=128|r>>>6&63),t[a++]=128|63&r);return t}(e)},r.utf8decode=function(e){return o.nodebuffer?n.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,o,i,a=e.length,l=new Array(2*a);for(t=r=0;t<a;)if((o=e[t++])<128)l[r++]=o;else if(4<(i=s[o]))l[r++]=65533,t+=i-1;else{for(o&=2===i?31:3===i?15:7;1<i&&t<a;)o=o<<6|63&e[t++],i--;1<i?l[r++]=65533:o<65536?l[r++]=o:(o-=65536,l[r++]=55296|o>>10&1023,l[r++]=56320|1023&o)}return l.length!==r&&(l.subarray?l=l.subarray(0,r):l.length=r),n.applyFromCharCode(l)}(e=n.transformTo(o.uint8array?\"uint8array\":\"array\",e))},n.inherits(c,a),c.prototype.processChunk=function(e){var t=n.transformTo(o.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(o.uint8array){var i=t;(t=new Uint8Array(i.length+this.leftOver.length)).set(this.leftOver,0),t.set(i,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var a=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0||0===r?t:r+s[e[r]]>t?r:t}(t),l=t;a!==t.length&&(o.uint8array?(l=t.subarray(0,a),this.leftOver=t.subarray(a,t.length)):(l=t.slice(0,a),this.leftOver=t.slice(a,t.length))),this.push({data:r.utf8decode(l),meta:e.meta})},c.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:r.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},r.Utf8DecodeWorker=c,n.inherits(u,a),u.prototype.processChunk=function(e){this.push({data:r.utf8encode(e.data),meta:e.meta})},r.Utf8EncodeWorker=u},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,r){var n=e(\"./support\"),o=e(\"./base64\"),i=e(\"./nodejsUtils\"),a=e(\"./external\");function s(e){return e}function l(e,t){for(var r=0;r<e.length;++r)t[r]=255&e.charCodeAt(r);return t}e(\"setimmediate\"),r.newBlob=function(e,t){r.checkSupport(\"blob\");try{return new Blob([e],{type:t})}catch(r){try{var n=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return n.append(e),n.getBlob(t)}catch(e){throw new Error(\"Bug : can't construct the Blob.\")}}};var c={stringifyByChunk:function(e,t,r){var n=[],o=0,i=e.length;if(i<=r)return String.fromCharCode.apply(null,e);for(;o<i;)\"array\"===t||\"nodebuffer\"===t?n.push(String.fromCharCode.apply(null,e.slice(o,Math.min(o+r,i)))):n.push(String.fromCharCode.apply(null,e.subarray(o,Math.min(o+r,i)))),o+=r;return n.join(\"\")},stringifyByChar:function(e){for(var t=\"\",r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return t},applyCanBeUsed:{uint8array:function(){try{return n.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(e){return!1}}(),nodebuffer:function(){try{return n.nodebuffer&&1===String.fromCharCode.apply(null,i.allocBuffer(1)).length}catch(e){return!1}}()}};function d(e){var t=65536,n=r.getTypeOf(e),o=!0;if(\"uint8array\"===n?o=c.applyCanBeUsed.uint8array:\"nodebuffer\"===n&&(o=c.applyCanBeUsed.nodebuffer),o)for(;1<t;)try{return c.stringifyByChunk(e,n,t)}catch(e){t=Math.floor(t/2)}return c.stringifyByChar(e)}function f(e,t){for(var r=0;r<e.length;r++)t[r]=e[r];return t}r.applyFromCharCode=d;var h={};h.string={string:s,array:function(e){return l(e,new Array(e.length))},arraybuffer:function(e){return h.string.uint8array(e).buffer},uint8array:function(e){return l(e,new Uint8Array(e.length))},nodebuffer:function(e){return l(e,i.allocBuffer(e.length))}},h.array={string:d,array:s,arraybuffer:function(e){return new Uint8Array(e).buffer},uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return i.newBufferFrom(e)}},h.arraybuffer={string:function(e){return d(new Uint8Array(e))},array:function(e){return f(new Uint8Array(e),new Array(e.byteLength))},arraybuffer:s,uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return i.newBufferFrom(new Uint8Array(e))}},h.uint8array={string:d,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return e.buffer},uint8array:s,nodebuffer:function(e){return i.newBufferFrom(e)}},h.nodebuffer={string:d,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return h.nodebuffer.uint8array(e).buffer},uint8array:function(e){return f(e,new Uint8Array(e.length))},nodebuffer:s},r.transformTo=function(e,t){if(t=t||\"\",!e)return t;r.checkSupport(e);var n=r.getTypeOf(t);return h[n][e](t)},r.resolve=function(e){for(var t=e.split(\"/\"),r=[],n=0;n<t.length;n++){var o=t[n];\".\"===o||\"\"===o&&0!==n&&n!==t.length-1||(\"..\"===o?r.pop():r.push(o))}return r.join(\"/\")},r.getTypeOf=function(e){return\"string\"==typeof e?\"string\":\"[object Array]\"===Object.prototype.toString.call(e)?\"array\":n.nodebuffer&&i.isBuffer(e)?\"nodebuffer\":n.uint8array&&e instanceof Uint8Array?\"uint8array\":n.arraybuffer&&e instanceof ArrayBuffer?\"arraybuffer\":void 0},r.checkSupport=function(e){if(!n[e.toLowerCase()])throw new Error(e+\" is not supported by this platform\")},r.MAX_VALUE_16BITS=65535,r.MAX_VALUE_32BITS=-1,r.pretty=function(e){var t,r,n=\"\";for(r=0;r<(e||\"\").length;r++)n+=\"\\\\x\"+((t=e.charCodeAt(r))<16?\"0\":\"\")+t.toString(16).toUpperCase();return n},r.delay=function(e,t,r){u((function(){e.apply(r||null,t||[])}))},r.inherits=function(e,t){function r(){}r.prototype=t.prototype,e.prototype=new r},r.extend=function(){var e,t,r={};for(e=0;e<arguments.length;e++)for(t in arguments[e])Object.prototype.hasOwnProperty.call(arguments[e],t)&&void 0===r[t]&&(r[t]=arguments[e][t]);return r},r.prepareContent=function(e,t,i,s,c){return a.Promise.resolve(t).then((function(e){return n.blob&&(e instanceof Blob||-1!==[\"[object File]\",\"[object Blob]\"].indexOf(Object.prototype.toString.call(e)))&&\"undefined\"!=typeof FileReader?new a.Promise((function(t,r){var n=new FileReader;n.onload=function(e){t(e.target.result)},n.onerror=function(e){r(e.target.error)},n.readAsArrayBuffer(e)})):e})).then((function(t){var u=r.getTypeOf(t);return u?(\"arraybuffer\"===u?t=r.transformTo(\"uint8array\",t):\"string\"===u&&(c?t=o.decode(t):i&&!0!==s&&(t=function(e){return l(e,n.uint8array?new Uint8Array(e.length):new Array(e.length))}(t))),t):a.Promise.reject(new Error(\"Can't read the data of '\"+e+\"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\"))}))}},{\"./base64\":1,\"./external\":6,\"./nodejsUtils\":14,\"./support\":30,setimmediate:54}],33:[function(e,t,r){var n=e(\"./reader/readerFor\"),o=e(\"./utils\"),i=e(\"./signature\"),a=e(\"./zipEntry\"),s=e(\"./support\");function l(e){this.files=[],this.loadOptions=e}l.prototype={checkSignature:function(e){if(!this.reader.readAndCheckSignature(e)){this.reader.index-=4;var t=this.reader.readString(4);throw new Error(\"Corrupted zip or bug: unexpected signature (\"+o.pretty(t)+\", expected \"+o.pretty(e)+\")\")}},isSignature:function(e,t){var r=this.reader.index;this.reader.setIndex(e);var n=this.reader.readString(4)===t;return this.reader.setIndex(r),n},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var e=this.reader.readData(this.zipCommentLength),t=s.uint8array?\"uint8array\":\"array\",r=o.transformTo(t,e);this.zipComment=this.loadOptions.decodeFileName(r)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var e,t,r,n=this.zip64EndOfCentralSize-44;0<n;)e=this.reader.readInt(2),t=this.reader.readInt(4),r=this.reader.readData(t),this.zip64ExtensibleData[e]={id:e,length:t,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error(\"Multi-volumes zip are not supported\")},readLocalFiles:function(){var e,t;for(e=0;e<this.files.length;e++)t=this.files[e],this.reader.setIndex(t.localHeaderOffset),this.checkSignature(i.LOCAL_FILE_HEADER),t.readLocalPart(this.reader),t.handleUTF8(),t.processAttributes()},readCentralDir:function(){var e;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(i.CENTRAL_FILE_HEADER);)(e=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(e);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error(\"Corrupted zip or bug: expected \"+this.centralDirRecords+\" records in central dir, got \"+this.files.length)},readEndOfCentral:function(){var e=this.reader.lastIndexOfSignature(i.CENTRAL_DIRECTORY_END);if(e<0)throw this.isSignature(0,i.LOCAL_FILE_HEADER)?new Error(\"Corrupted zip: can't find end of central directory\"):new Error(\"Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\");this.reader.setIndex(e);var t=e;if(this.checkSignature(i.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===o.MAX_VALUE_16BITS||this.diskWithCentralDirStart===o.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===o.MAX_VALUE_16BITS||this.centralDirRecords===o.MAX_VALUE_16BITS||this.centralDirSize===o.MAX_VALUE_32BITS||this.centralDirOffset===o.MAX_VALUE_32BITS){if(this.zip64=!0,(e=this.reader.lastIndexOfSignature(i.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");if(this.reader.setIndex(e),this.checkSignature(i.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,i.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(i.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(i.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var r=this.centralDirOffset+this.centralDirSize;this.zip64&&(r+=20,r+=12+this.zip64EndOfCentralSize);var n=t-r;if(0<n)this.isSignature(t,i.CENTRAL_FILE_HEADER)||(this.reader.zero=n);else if(n<0)throw new Error(\"Corrupted zip: missing \"+Math.abs(n)+\" bytes.\")},prepareReader:function(e){this.reader=n(e)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},t.exports=l},{\"./reader/readerFor\":22,\"./signature\":23,\"./support\":30,\"./utils\":32,\"./zipEntry\":34}],34:[function(e,t,r){var n=e(\"./reader/readerFor\"),o=e(\"./utils\"),i=e(\"./compressedObject\"),a=e(\"./crc32\"),s=e(\"./utf8\"),l=e(\"./compressions\"),c=e(\"./support\");function u(e,t){this.options=e,this.loadOptions=t}u.prototype={isEncrypted:function(){return!(1&~this.bitFlag)},useUTF8:function(){return!(2048&~this.bitFlag)},readLocalPart:function(e){var t,r;if(e.skip(22),this.fileNameLength=e.readInt(2),r=e.readInt(2),this.fileName=e.readData(this.fileNameLength),e.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)\");if(null===(t=function(e){for(var t in l)if(Object.prototype.hasOwnProperty.call(l,t)&&l[t].magic===e)return l[t];return null}(this.compressionMethod)))throw new Error(\"Corrupted zip : compression \"+o.pretty(this.compressionMethod)+\" unknown (inner file : \"+o.transformTo(\"string\",this.fileName)+\")\");this.decompressed=new i(this.compressedSize,this.uncompressedSize,this.crc32,t,e.readData(this.compressedSize))},readCentralPart:function(e){this.versionMadeBy=e.readInt(2),e.skip(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4);var t=e.readInt(2);if(this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error(\"Encrypted zip are not supported\");e.skip(t),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var e=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===o.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===o.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===o.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===o.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,o=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4<o;)t=e.readInt(2),r=e.readInt(2),n=e.readData(r),this.extraFields[t]={id:t,length:r,value:n};e.setIndex(o)},handleUTF8:function(){var e=c.uint8array?\"uint8array\":\"array\";if(this.useUTF8())this.fileNameStr=s.utf8decode(this.fileName),this.fileCommentStr=s.utf8decode(this.fileComment);else{var t=this.findExtraFieldUnicodePath();if(null!==t)this.fileNameStr=t;else{var r=o.transformTo(e,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var n=this.findExtraFieldUnicodeComment();if(null!==n)this.fileCommentStr=n;else{var i=o.transformTo(e,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(i)}}},findExtraFieldUnicodePath:function(){var e=this.extraFields[28789];if(e){var t=n(e.value);return 1!==t.readInt(1)||a(this.fileName)!==t.readInt(4)?null:s.utf8decode(t.readData(e.length-5))}return null},findExtraFieldUnicodeComment:function(){var e=this.extraFields[25461];if(e){var t=n(e.value);return 1!==t.readInt(1)||a(this.fileComment)!==t.readInt(4)?null:s.utf8decode(t.readData(e.length-5))}return null}},t.exports=u},{\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./reader/readerFor\":22,\"./support\":30,\"./utf8\":31,\"./utils\":32}],35:[function(e,t,r){function n(e,t,r){this.name=e,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=t,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}}var o=e(\"./stream/StreamHelper\"),i=e(\"./stream/DataWorker\"),a=e(\"./utf8\"),s=e(\"./compressedObject\"),l=e(\"./stream/GenericWorker\");n.prototype={internalStream:function(e){var t=null,r=\"string\";try{if(!e)throw new Error(\"No output type specified.\");var n=\"string\"===(r=e.toLowerCase())||\"text\"===r;\"binarystring\"!==r&&\"text\"!==r||(r=\"string\"),t=this._decompressWorker();var i=!this._dataBinary;i&&!n&&(t=t.pipe(new a.Utf8EncodeWorker)),!i&&n&&(t=t.pipe(new a.Utf8DecodeWorker))}catch(e){(t=new l(\"error\")).error(e)}return new o(t,r,\"\")},async:function(e,t){return this.internalStream(e).accumulate(t)},nodeStream:function(e,t){return this.internalStream(e||\"nodebuffer\").toNodejsStream(t)},_compressWorker:function(e,t){if(this._data instanceof s&&this._data.compression.magic===e.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new a.Utf8EncodeWorker)),s.createWorkerFrom(r,e,t)},_decompressWorker:function(){return this._data instanceof s?this._data.getContentWorker():this._data instanceof l?this._data:new i(this._data)}};for(var c=[\"asText\",\"asBinary\",\"asNodeBuffer\",\"asUint8Array\",\"asArrayBuffer\"],u=function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},d=0;d<c.length;d++)n.prototype[c[d]]=u;t.exports=n},{\"./compressedObject\":2,\"./stream/DataWorker\":27,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31}],36:[function(e,t,r){(function(e){var r,n,o=e.MutationObserver||e.WebKitMutationObserver;if(o){var i=0,a=new o(u),s=e.document.createTextNode(\"\");a.observe(s,{characterData:!0}),r=function(){s.data=i=++i%2}}else if(e.setImmediate||void 0===e.MessageChannel)r=\"document\"in e&&\"onreadystatechange\"in e.document.createElement(\"script\")?function(){var t=e.document.createElement(\"script\");t.onreadystatechange=function(){u(),t.onreadystatechange=null,t.parentNode.removeChild(t),t=null},e.document.documentElement.appendChild(t)}:function(){setTimeout(u,0)};else{var l=new e.MessageChannel;l.port1.onmessage=u,r=function(){l.port2.postMessage(0)}}var c=[];function u(){var e,t;n=!0;for(var r=c.length;r;){for(t=c,c=[],e=-1;++e<r;)t[e]();r=c.length}n=!1}t.exports=function(e){1!==c.push(e)||n||r()}}).call(this,void 0!==o?o:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],37:[function(e,t,r){var n=e(\"immediate\");function o(){}var i={},a=[\"REJECTED\"],s=[\"FULFILLED\"],l=[\"PENDING\"];function c(e){if(\"function\"!=typeof e)throw new TypeError(\"resolver must be a function\");this.state=l,this.queue=[],this.outcome=void 0,e!==o&&h(this,e)}function u(e,t,r){this.promise=e,\"function\"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),\"function\"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function d(e,t,r){n((function(){var n;try{n=t(r)}catch(n){return i.reject(e,n)}n===e?i.reject(e,new TypeError(\"Cannot resolve promise with itself\")):i.resolve(e,n)}))}function f(e){var t=e&&e.then;if(e&&(\"object\"==typeof e||\"function\"==typeof e)&&\"function\"==typeof t)return function(){t.apply(e,arguments)}}function h(e,t){var r=!1;function n(t){r||(r=!0,i.reject(e,t))}function o(t){r||(r=!0,i.resolve(e,t))}var a=p((function(){t(o,n)}));\"error\"===a.status&&n(a.value)}function p(e,t){var r={};try{r.value=e(t),r.status=\"success\"}catch(e){r.status=\"error\",r.value=e}return r}(t.exports=c).prototype.finally=function(e){if(\"function\"!=typeof e)return this;var t=this.constructor;return this.then((function(r){return t.resolve(e()).then((function(){return r}))}),(function(r){return t.resolve(e()).then((function(){throw r}))}))},c.prototype.catch=function(e){return this.then(null,e)},c.prototype.then=function(e,t){if(\"function\"!=typeof e&&this.state===s||\"function\"!=typeof t&&this.state===a)return this;var r=new this.constructor(o);return this.state!==l?d(r,this.state===s?e:t,this.outcome):this.queue.push(new u(r,e,t)),r},u.prototype.callFulfilled=function(e){i.resolve(this.promise,e)},u.prototype.otherCallFulfilled=function(e){d(this.promise,this.onFulfilled,e)},u.prototype.callRejected=function(e){i.reject(this.promise,e)},u.prototype.otherCallRejected=function(e){d(this.promise,this.onRejected,e)},i.resolve=function(e,t){var r=p(f,t);if(\"error\"===r.status)return i.reject(e,r.value);var n=r.value;if(n)h(e,n);else{e.state=s,e.outcome=t;for(var o=-1,a=e.queue.length;++o<a;)e.queue[o].callFulfilled(t)}return e},i.reject=function(e,t){e.state=a,e.outcome=t;for(var r=-1,n=e.queue.length;++r<n;)e.queue[r].callRejected(t);return e},c.resolve=function(e){return e instanceof this?e:i.resolve(new this(o),e)},c.reject=function(e){var t=new this(o);return i.reject(t,e)},c.all=function(e){var t=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var r=e.length,n=!1;if(!r)return this.resolve([]);for(var a=new Array(r),s=0,l=-1,c=new this(o);++l<r;)u(e[l],l);return c;function u(e,o){t.resolve(e).then((function(e){a[o]=e,++s!==r||n||(n=!0,i.resolve(c,a))}),(function(e){n||(n=!0,i.reject(c,e))}))}},c.race=function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var t=e.length,r=!1;if(!t)return this.resolve([]);for(var n,a=-1,s=new this(o);++a<t;)n=e[a],this.resolve(n).then((function(e){r||(r=!0,i.resolve(s,e))}),(function(e){r||(r=!0,i.reject(s,e))}));return s}},{immediate:36}],38:[function(e,t,r){var n={};(0,e(\"./lib/utils/common\").assign)(n,e(\"./lib/deflate\"),e(\"./lib/inflate\"),e(\"./lib/zlib/constants\")),t.exports=n},{\"./lib/deflate\":39,\"./lib/inflate\":40,\"./lib/utils/common\":41,\"./lib/zlib/constants\":44}],39:[function(e,t,r){var n=e(\"./zlib/deflate\"),o=e(\"./utils/common\"),i=e(\"./utils/strings\"),a=e(\"./zlib/messages\"),s=e(\"./zlib/zstream\"),l=Object.prototype.toString;function c(e){if(!(this instanceof c))return new c(e);this.options=o.assign({level:-1,method:8,chunkSize:16384,windowBits:15,memLevel:8,strategy:0,to:\"\"},e||{});var t=this.options;t.raw&&0<t.windowBits?t.windowBits=-t.windowBits:t.gzip&&0<t.windowBits&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=n.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(0!==r)throw new Error(a[r]);if(t.header&&n.deflateSetHeader(this.strm,t.header),t.dictionary){var u;if(u=\"string\"==typeof t.dictionary?i.string2buf(t.dictionary):\"[object ArrayBuffer]\"===l.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,0!==(r=n.deflateSetDictionary(this.strm,u)))throw new Error(a[r]);this._dict_set=!0}}function u(e,t){var r=new c(t);if(r.push(e,!0),r.err)throw r.msg||a[r.err];return r.result}c.prototype.push=function(e,t){var r,a,s=this.strm,c=this.options.chunkSize;if(this.ended)return!1;a=t===~~t?t:!0===t?4:0,\"string\"==typeof e?s.input=i.string2buf(e):\"[object ArrayBuffer]\"===l.call(e)?s.input=new Uint8Array(e):s.input=e,s.next_in=0,s.avail_in=s.input.length;do{if(0===s.avail_out&&(s.output=new o.Buf8(c),s.next_out=0,s.avail_out=c),1!==(r=n.deflate(s,a))&&0!==r)return this.onEnd(r),!(this.ended=!0);0!==s.avail_out&&(0!==s.avail_in||4!==a&&2!==a)||(\"string\"===this.options.to?this.onData(i.buf2binstring(o.shrinkBuf(s.output,s.next_out))):this.onData(o.shrinkBuf(s.output,s.next_out)))}while((0<s.avail_in||0===s.avail_out)&&1!==r);return 4===a?(r=n.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,0===r):2!==a||(this.onEnd(0),!(s.avail_out=0))},c.prototype.onData=function(e){this.chunks.push(e)},c.prototype.onEnd=function(e){0===e&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Deflate=c,r.deflate=u,r.deflateRaw=function(e,t){return(t=t||{}).raw=!0,u(e,t)},r.gzip=function(e,t){return(t=t||{}).gzip=!0,u(e,t)}},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/deflate\":46,\"./zlib/messages\":51,\"./zlib/zstream\":53}],40:[function(e,t,r){var n=e(\"./zlib/inflate\"),o=e(\"./utils/common\"),i=e(\"./utils/strings\"),a=e(\"./zlib/constants\"),s=e(\"./zlib/messages\"),l=e(\"./zlib/zstream\"),c=e(\"./zlib/gzheader\"),u=Object.prototype.toString;function d(e){if(!(this instanceof d))return new d(e);this.options=o.assign({chunkSize:16384,windowBits:0,to:\"\"},e||{});var t=this.options;t.raw&&0<=t.windowBits&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(0<=t.windowBits&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),15<t.windowBits&&t.windowBits<48&&!(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var r=n.inflateInit2(this.strm,t.windowBits);if(r!==a.Z_OK)throw new Error(s[r]);this.header=new c,n.inflateGetHeader(this.strm,this.header)}function f(e,t){var r=new d(t);if(r.push(e,!0),r.err)throw r.msg||s[r.err];return r.result}d.prototype.push=function(e,t){var r,s,l,c,d,f,h=this.strm,p=this.options.chunkSize,m=this.options.dictionary,g=!1;if(this.ended)return!1;s=t===~~t?t:!0===t?a.Z_FINISH:a.Z_NO_FLUSH,\"string\"==typeof e?h.input=i.binstring2buf(e):\"[object ArrayBuffer]\"===u.call(e)?h.input=new Uint8Array(e):h.input=e,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new o.Buf8(p),h.next_out=0,h.avail_out=p),(r=n.inflate(h,a.Z_NO_FLUSH))===a.Z_NEED_DICT&&m&&(f=\"string\"==typeof m?i.string2buf(m):\"[object ArrayBuffer]\"===u.call(m)?new Uint8Array(m):m,r=n.inflateSetDictionary(this.strm,f)),r===a.Z_BUF_ERROR&&!0===g&&(r=a.Z_OK,g=!1),r!==a.Z_STREAM_END&&r!==a.Z_OK)return this.onEnd(r),!(this.ended=!0);h.next_out&&(0!==h.avail_out&&r!==a.Z_STREAM_END&&(0!==h.avail_in||s!==a.Z_FINISH&&s!==a.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(l=i.utf8border(h.output,h.next_out),c=h.next_out-l,d=i.buf2string(h.output,l),h.next_out=c,h.avail_out=p-c,c&&o.arraySet(h.output,h.output,l,c,0),this.onData(d)):this.onData(o.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(g=!0)}while((0<h.avail_in||0===h.avail_out)&&r!==a.Z_STREAM_END);return r===a.Z_STREAM_END&&(s=a.Z_FINISH),s===a.Z_FINISH?(r=n.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===a.Z_OK):s!==a.Z_SYNC_FLUSH||(this.onEnd(a.Z_OK),!(h.avail_out=0))},d.prototype.onData=function(e){this.chunks.push(e)},d.prototype.onEnd=function(e){e===a.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Inflate=d,r.inflate=f,r.inflateRaw=function(e,t){return(t=t||{}).raw=!0,f(e,t)},r.ungzip=f},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/constants\":44,\"./zlib/gzheader\":47,\"./zlib/inflate\":49,\"./zlib/messages\":51,\"./zlib/zstream\":53}],41:[function(e,t,r){var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;r.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(\"object\"!=typeof r)throw new TypeError(r+\"must be non-object\");for(var n in r)r.hasOwnProperty(n)&&(e[n]=r[n])}}return e},r.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var o={arraySet:function(e,t,r,n,o){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),o);else for(var i=0;i<n;i++)e[o+i]=t[r+i]},flattenChunks:function(e){var t,r,n,o,i,a;for(t=n=0,r=e.length;t<r;t++)n+=e[t].length;for(a=new Uint8Array(n),t=o=0,r=e.length;t<r;t++)i=e[t],a.set(i,o),o+=i.length;return a}},i={arraySet:function(e,t,r,n,o){for(var i=0;i<n;i++)e[o+i]=t[r+i]},flattenChunks:function(e){return[].concat.apply([],e)}};r.setTyped=function(e){e?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,o)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,i))},r.setTyped(n)},{}],42:[function(e,t,r){var n=e(\"./common\"),o=!0,i=!0;try{String.fromCharCode.apply(null,[0])}catch(e){o=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){i=!1}for(var a=new n.Buf8(256),s=0;s<256;s++)a[s]=252<=s?6:248<=s?5:240<=s?4:224<=s?3:192<=s?2:1;function l(e,t){if(t<65537&&(e.subarray&&i||!e.subarray&&o))return String.fromCharCode.apply(null,n.shrinkBuf(e,t));for(var r=\"\",a=0;a<t;a++)r+=String.fromCharCode(e[a]);return r}a[254]=a[254]=1,r.string2buf=function(e){var t,r,o,i,a,s=e.length,l=0;for(i=0;i<s;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<s&&56320==(64512&(o=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(o-56320),i++),l+=r<128?1:r<2048?2:r<65536?3:4;for(t=new n.Buf8(l),i=a=0;a<l;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<s&&56320==(64512&(o=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(o-56320),i++),r<128?t[a++]=r:(r<2048?t[a++]=192|r>>>6:(r<65536?t[a++]=224|r>>>12:(t[a++]=240|r>>>18,t[a++]=128|r>>>12&63),t[a++]=128|r>>>6&63),t[a++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new n.Buf8(e.length),r=0,o=t.length;r<o;r++)t[r]=e.charCodeAt(r);return t},r.buf2string=function(e,t){var r,n,o,i,s=t||e.length,c=new Array(2*s);for(r=n=0;r<s;)if((o=e[r++])<128)c[n++]=o;else if(4<(i=a[o]))c[n++]=65533,r+=i-1;else{for(o&=2===i?31:3===i?15:7;1<i&&r<s;)o=o<<6|63&e[r++],i--;1<i?c[n++]=65533:o<65536?c[n++]=o:(o-=65536,c[n++]=55296|o>>10&1023,c[n++]=56320|1023&o)}return l(c,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0||0===r?t:r+a[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){t.exports=function(e,t,r,n){for(var o=65535&e,i=e>>>16&65535,a=0;0!==r;){for(r-=a=2e3<r?2e3:r;i=i+(o=o+t[n++]|0)|0,--a;);o%=65521,i%=65521}return o|i<<16}},{}],44:[function(e,t,r){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}},{}],45:[function(e,t,r){var n=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,o){var i=n,a=o+r;e^=-1;for(var s=o;s<a;s++)e=e>>>8^i[255&(e^t[s])];return-1^e}},{}],46:[function(e,t,r){var n,o=e(\"../utils/common\"),i=e(\"./trees\"),a=e(\"./adler32\"),s=e(\"./crc32\"),l=e(\"./messages\"),c=-2,u=258,d=262,f=113;function h(e,t){return e.msg=l[t],t}function p(e){return(e<<1)-(4<e?9:0)}function m(e){for(var t=e.length;0<=--t;)e[t]=0}function g(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(o.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function v(e,t){i._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,g(e.strm)}function b(e,t){e.pending_buf[e.pending++]=t}function y(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function w(e,t){var r,n,o=e.max_chain_length,i=e.strstart,a=e.prev_length,s=e.nice_match,l=e.strstart>e.w_size-d?e.strstart-(e.w_size-d):0,c=e.window,f=e.w_mask,h=e.prev,p=e.strstart+u,m=c[i+a-1],g=c[i+a];e.prev_length>=e.good_match&&(o>>=2),s>e.lookahead&&(s=e.lookahead);do{if(c[(r=t)+a]===g&&c[r+a-1]===m&&c[r]===c[i]&&c[++r]===c[i+1]){i+=2,r++;do{}while(c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&i<p);if(n=u-(p-i),i=p-u,a<n){if(e.match_start=t,s<=(a=n))break;m=c[i+a-1],g=c[i+a]}}}while((t=h[t&f])>l&&0!=--o);return a<=e.lookahead?a:e.lookahead}function x(e){var t,r,n,i,l,c,u,f,h,p,m=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=m+(m-d)){for(o.arraySet(e.window,e.window,m,m,0),e.match_start-=m,e.strstart-=m,e.block_start-=m,t=r=e.hash_size;n=e.head[--t],e.head[t]=m<=n?n-m:0,--r;);for(t=r=m;n=e.prev[--t],e.prev[t]=m<=n?n-m:0,--r;);i+=m}if(0===e.strm.avail_in)break;if(c=e.strm,u=e.window,f=e.strstart+e.lookahead,p=void 0,(h=i)<(p=c.avail_in)&&(p=h),r=0===p?0:(c.avail_in-=p,o.arraySet(u,c.input,c.next_in,p,f),1===c.state.wrap?c.adler=a(c.adler,u,p,f):2===c.state.wrap&&(c.adler=s(c.adler,u,p,f)),c.next_in+=p,c.total_in+=p,p),e.lookahead+=r,e.lookahead+e.insert>=3)for(l=e.strstart-e.insert,e.ins_h=e.window[l],e.ins_h=(e.ins_h<<e.hash_shift^e.window[l+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[l+3-1])&e.hash_mask,e.prev[l&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=l,l++,e.insert--,!(e.lookahead+e.insert<3)););}while(e.lookahead<d&&0!==e.strm.avail_in)}function S(e,t){for(var r,n;;){if(e.lookahead<d){if(x(e),e.lookahead<d&&0===t)return 1;if(0===e.lookahead)break}if(r=0,e.lookahead>=3&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-d&&(e.match_length=w(e,r)),e.match_length>=3)if(n=i._tr_tally(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart,0!=--e.match_length;);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=i._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(v(e,!1),0===e.strm.avail_out))return 1}return e.insert=e.strstart<2?e.strstart:2,4===t?(v(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(v(e,!1),0===e.strm.avail_out)?1:2}function C(e,t){for(var r,n,o;;){if(e.lookahead<d){if(x(e),e.lookahead<d&&0===t)return 1;if(0===e.lookahead)break}if(r=0,e.lookahead>=3&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=2,0!==r&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-d&&(e.match_length=w(e,r),e.match_length<=5&&(1===e.strategy||3===e.match_length&&4096<e.strstart-e.match_start)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){for(o=e.strstart+e.lookahead-3,n=i._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=o&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!=--e.prev_length;);if(e.match_available=0,e.match_length=2,e.strstart++,n&&(v(e,!1),0===e.strm.avail_out))return 1}else if(e.match_available){if((n=i._tr_tally(e,0,e.window[e.strstart-1]))&&v(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return 1}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=i._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<2?e.strstart:2,4===t?(v(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(v(e,!1),0===e.strm.avail_out)?1:2}function k(e,t,r,n,o){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=o}function E(){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=8,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 o.Buf16(1146),this.dyn_dtree=new o.Buf16(122),this.bl_tree=new o.Buf16(78),m(this.dyn_ltree),m(this.dyn_dtree),m(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new o.Buf16(16),this.heap=new o.Buf16(573),m(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new o.Buf16(573),m(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 O(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=2,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?42:f,e.adler=2===t.wrap?0:1,t.last_flush=0,i._tr_init(t),0):h(e,c)}function A(e){var t=O(e);return 0===t&&function(e){e.window_size=2*e.w_size,m(e.head),e.max_lazy_match=n[e.level].max_lazy,e.good_match=n[e.level].good_length,e.nice_match=n[e.level].nice_length,e.max_chain_length=n[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=2,e.match_available=0,e.ins_h=0}(e.state),t}function T(e,t,r,n,i,a){if(!e)return c;var s=1;if(-1===t&&(t=6),n<0?(s=0,n=-n):15<n&&(s=2,n-=16),i<1||9<i||8!==r||n<8||15<n||t<0||9<t||a<0||4<a)return h(e,c);8===n&&(n=9);var l=new E;return(e.state=l).strm=e,l.wrap=s,l.gzhead=null,l.w_bits=n,l.w_size=1<<l.w_bits,l.w_mask=l.w_size-1,l.hash_bits=i+7,l.hash_size=1<<l.hash_bits,l.hash_mask=l.hash_size-1,l.hash_shift=~~((l.hash_bits+3-1)/3),l.window=new o.Buf8(2*l.w_size),l.head=new o.Buf16(l.hash_size),l.prev=new o.Buf16(l.w_size),l.lit_bufsize=1<<i+6,l.pending_buf_size=4*l.lit_bufsize,l.pending_buf=new o.Buf8(l.pending_buf_size),l.d_buf=1*l.lit_bufsize,l.l_buf=3*l.lit_bufsize,l.level=t,l.strategy=a,l.method=r,A(e)}n=[new k(0,0,0,0,(function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(x(e),0===e.lookahead&&0===t)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,v(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-d&&(v(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(v(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(v(e,!1),e.strm.avail_out),1)})),new k(4,4,8,4,S),new k(4,5,16,8,S),new k(4,6,32,32,S),new k(4,4,16,16,C),new k(8,16,32,32,C),new k(8,16,128,128,C),new k(8,32,128,256,C),new k(32,128,258,1024,C),new k(32,258,258,4096,C)],r.deflateInit=function(e,t){return T(e,t,8,15,8,0)},r.deflateInit2=T,r.deflateReset=A,r.deflateResetKeep=O,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?c:(e.state.gzhead=t,0):c},r.deflate=function(e,t){var r,o,a,l;if(!e||!e.state||5<t||t<0)return e?h(e,c):c;if(o=e.state,!e.output||!e.input&&0!==e.avail_in||666===o.status&&4!==t)return h(e,0===e.avail_out?-5:c);if(o.strm=e,r=o.last_flush,o.last_flush=t,42===o.status)if(2===o.wrap)e.adler=0,b(o,31),b(o,139),b(o,8),o.gzhead?(b(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)),b(o,255&o.gzhead.time),b(o,o.gzhead.time>>8&255),b(o,o.gzhead.time>>16&255),b(o,o.gzhead.time>>24&255),b(o,9===o.level?2:2<=o.strategy||o.level<2?4:0),b(o,255&o.gzhead.os),o.gzhead.extra&&o.gzhead.extra.length&&(b(o,255&o.gzhead.extra.length),b(o,o.gzhead.extra.length>>8&255)),o.gzhead.hcrc&&(e.adler=s(e.adler,o.pending_buf,o.pending,0)),o.gzindex=0,o.status=69):(b(o,0),b(o,0),b(o,0),b(o,0),b(o,0),b(o,9===o.level?2:2<=o.strategy||o.level<2?4:0),b(o,3),o.status=f);else{var d=8+(o.w_bits-8<<4)<<8;d|=(2<=o.strategy||o.level<2?0:o.level<6?1:6===o.level?2:3)<<6,0!==o.strstart&&(d|=32),d+=31-d%31,o.status=f,y(o,d),0!==o.strstart&&(y(o,e.adler>>>16),y(o,65535&e.adler)),e.adler=1}if(69===o.status)if(o.gzhead.extra){for(a=o.pending;o.gzindex<(65535&o.gzhead.extra.length)&&(o.pending!==o.pending_buf_size||(o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),g(e),a=o.pending,o.pending!==o.pending_buf_size));)b(o,255&o.gzhead.extra[o.gzindex]),o.gzindex++;o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),o.gzindex===o.gzhead.extra.length&&(o.gzindex=0,o.status=73)}else o.status=73;if(73===o.status)if(o.gzhead.name){a=o.pending;do{if(o.pending===o.pending_buf_size&&(o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),g(e),a=o.pending,o.pending===o.pending_buf_size)){l=1;break}l=o.gzindex<o.gzhead.name.length?255&o.gzhead.name.charCodeAt(o.gzindex++):0,b(o,l)}while(0!==l);o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),0===l&&(o.gzindex=0,o.status=91)}else o.status=91;if(91===o.status)if(o.gzhead.comment){a=o.pending;do{if(o.pending===o.pending_buf_size&&(o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),g(e),a=o.pending,o.pending===o.pending_buf_size)){l=1;break}l=o.gzindex<o.gzhead.comment.length?255&o.gzhead.comment.charCodeAt(o.gzindex++):0,b(o,l)}while(0!==l);o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),0===l&&(o.status=103)}else o.status=103;if(103===o.status&&(o.gzhead.hcrc?(o.pending+2>o.pending_buf_size&&g(e),o.pending+2<=o.pending_buf_size&&(b(o,255&e.adler),b(o,e.adler>>8&255),e.adler=0,o.status=f)):o.status=f),0!==o.pending){if(g(e),0===e.avail_out)return o.last_flush=-1,0}else if(0===e.avail_in&&p(t)<=p(r)&&4!==t)return h(e,-5);if(666===o.status&&0!==e.avail_in)return h(e,-5);if(0!==e.avail_in||0!==o.lookahead||0!==t&&666!==o.status){var w=2===o.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(x(e),0===e.lookahead)){if(0===t)return 1;break}if(e.match_length=0,r=i._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(v(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(v(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(v(e,!1),0===e.strm.avail_out)?1:2}(o,t):3===o.strategy?function(e,t){for(var r,n,o,a,s=e.window;;){if(e.lookahead<=u){if(x(e),e.lookahead<=u&&0===t)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&0<e.strstart&&(n=s[o=e.strstart-1])===s[++o]&&n===s[++o]&&n===s[++o]){a=e.strstart+u;do{}while(n===s[++o]&&n===s[++o]&&n===s[++o]&&n===s[++o]&&n===s[++o]&&n===s[++o]&&n===s[++o]&&n===s[++o]&&o<a);e.match_length=u-(a-o),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(r=i._tr_tally(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=i._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(v(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(v(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(v(e,!1),0===e.strm.avail_out)?1:2}(o,t):n[o.level].func(o,t);if(3!==w&&4!==w||(o.status=666),1===w||3===w)return 0===e.avail_out&&(o.last_flush=-1),0;if(2===w&&(1===t?i._tr_align(o):5!==t&&(i._tr_stored_block(o,0,0,!1),3===t&&(m(o.head),0===o.lookahead&&(o.strstart=0,o.block_start=0,o.insert=0))),g(e),0===e.avail_out))return o.last_flush=-1,0}return 4!==t?0:o.wrap<=0?1:(2===o.wrap?(b(o,255&e.adler),b(o,e.adler>>8&255),b(o,e.adler>>16&255),b(o,e.adler>>24&255),b(o,255&e.total_in),b(o,e.total_in>>8&255),b(o,e.total_in>>16&255),b(o,e.total_in>>24&255)):(y(o,e.adler>>>16),y(o,65535&e.adler)),g(e),0<o.wrap&&(o.wrap=-o.wrap),0!==o.pending?0:1)},r.deflateEnd=function(e){var t;return e&&e.state?42!==(t=e.state.status)&&69!==t&&73!==t&&91!==t&&103!==t&&t!==f&&666!==t?h(e,c):(e.state=null,t===f?h(e,-3):0):c},r.deflateSetDictionary=function(e,t){var r,n,i,s,l,u,d,f,h=t.length;if(!e||!e.state)return c;if(2===(s=(r=e.state).wrap)||1===s&&42!==r.status||r.lookahead)return c;for(1===s&&(e.adler=a(e.adler,t,h,0)),r.wrap=0,h>=r.w_size&&(0===s&&(m(r.head),r.strstart=0,r.block_start=0,r.insert=0),f=new o.Buf8(r.w_size),o.arraySet(f,t,h-r.w_size,r.w_size,0),t=f,h=r.w_size),l=e.avail_in,u=e.next_in,d=e.input,e.avail_in=h,e.next_in=0,e.input=t,x(r);r.lookahead>=3;){for(n=r.strstart,i=r.lookahead-2;r.ins_h=(r.ins_h<<r.hash_shift^r.window[n+3-1])&r.hash_mask,r.prev[n&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=n,n++,--i;);r.strstart=n,r.lookahead=2,x(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=2,r.match_available=0,e.next_in=u,e.input=d,e.avail_in=l,r.wrap=s,0},r.deflateInfo=\"pako deflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./messages\":51,\"./trees\":52}],47:[function(e,t,r){t.exports=function(){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}},{}],48:[function(e,t,r){t.exports=function(e,t){var r,n,o,i,a,s,l,c,u,d,f,h,p,m,g,v,b,y,w,x,S,C,k,E,O;r=e.state,n=e.next_in,E=e.input,o=n+(e.avail_in-5),i=e.next_out,O=e.output,a=i-(t-e.avail_out),s=i+(e.avail_out-257),l=r.dmax,c=r.wsize,u=r.whave,d=r.wnext,f=r.window,h=r.hold,p=r.bits,m=r.lencode,g=r.distcode,v=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;e:do{p<15&&(h+=E[n++]<<p,p+=8,h+=E[n++]<<p,p+=8),y=m[h&v];t:for(;;){if(h>>>=w=y>>>24,p-=w,0==(w=y>>>16&255))O[i++]=65535&y;else{if(!(16&w)){if(!(64&w)){y=m[(65535&y)+(h&(1<<w)-1)];continue t}if(32&w){r.mode=12;break e}e.msg=\"invalid literal/length code\",r.mode=30;break e}x=65535&y,(w&=15)&&(p<w&&(h+=E[n++]<<p,p+=8),x+=h&(1<<w)-1,h>>>=w,p-=w),p<15&&(h+=E[n++]<<p,p+=8,h+=E[n++]<<p,p+=8),y=g[h&b];r:for(;;){if(h>>>=w=y>>>24,p-=w,!(16&(w=y>>>16&255))){if(!(64&w)){y=g[(65535&y)+(h&(1<<w)-1)];continue r}e.msg=\"invalid distance code\",r.mode=30;break e}if(S=65535&y,p<(w&=15)&&(h+=E[n++]<<p,(p+=8)<w&&(h+=E[n++]<<p,p+=8)),l<(S+=h&(1<<w)-1)){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(h>>>=w,p-=w,(w=i-a)<S){if(u<(w=S-w)&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(k=f,(C=0)===d){if(C+=c-w,w<x){for(x-=w;O[i++]=f[C++],--w;);C=i-S,k=O}}else if(d<w){if(C+=c+d-w,(w-=d)<x){for(x-=w;O[i++]=f[C++],--w;);if(C=0,d<x){for(x-=w=d;O[i++]=f[C++],--w;);C=i-S,k=O}}}else if(C+=d-w,w<x){for(x-=w;O[i++]=f[C++],--w;);C=i-S,k=O}for(;2<x;)O[i++]=k[C++],O[i++]=k[C++],O[i++]=k[C++],x-=3;x&&(O[i++]=k[C++],1<x&&(O[i++]=k[C++]))}else{for(C=i-S;O[i++]=O[C++],O[i++]=O[C++],O[i++]=O[C++],2<(x-=3););x&&(O[i++]=O[C++],1<x&&(O[i++]=O[C++]))}break}}break}}while(n<o&&i<s);n-=x=p>>3,h&=(1<<(p-=x<<3))-1,e.next_in=n,e.next_out=i,e.avail_in=n<o?o-n+5:5-(n-o),e.avail_out=i<s?s-i+257:257-(i-s),r.hold=h,r.bits=p}},{}],49:[function(e,t,r){var n=e(\"../utils/common\"),o=e(\"./adler32\"),i=e(\"./crc32\"),a=e(\"./inffast\"),s=e(\"./inftrees\"),l=-2;function c(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function u(){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 n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function d(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=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new n.Buf32(852),t.distcode=t.distdyn=new n.Buf32(592),t.sane=1,t.back=-1,0):l}function f(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,d(e)):l}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15<t)?l:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,f(e))):l}function p(e,t){var r,n;return e?(n=new u,(e.state=n).window=null,0!==(r=h(e,t))&&(e.state=null),r):l}var m,g,v=!0;function b(e){if(v){var t;for(m=new n.Buf32(512),g=new n.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(s(1,e.lens,0,288,m,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;s(2,e.lens,0,32,g,0,e.work,{bits:5}),v=!1}e.lencode=m,e.lenbits=9,e.distcode=g,e.distbits=5}function y(e,t,r,o){var i,a=e.state;return null===a.window&&(a.wsize=1<<a.wbits,a.wnext=0,a.whave=0,a.window=new n.Buf8(a.wsize)),o>=a.wsize?(n.arraySet(a.window,t,r-a.wsize,a.wsize,0),a.wnext=0,a.whave=a.wsize):(o<(i=a.wsize-a.wnext)&&(i=o),n.arraySet(a.window,t,r-o,i,a.wnext),(o-=i)?(n.arraySet(a.window,t,r-o,o,0),a.wnext=o,a.whave=a.wsize):(a.wnext+=i,a.wnext===a.wsize&&(a.wnext=0),a.whave<a.wsize&&(a.whave+=i))),0}r.inflateReset=f,r.inflateReset2=h,r.inflateResetKeep=d,r.inflateInit=function(e){return p(e,15)},r.inflateInit2=p,r.inflate=function(e,t){var r,u,d,f,h,p,m,g,v,w,x,S,C,k,E,O,A,T,j,P,M,R,_,I,N=0,F=new n.Buf8(4),D=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return l;12===(r=e.state).mode&&(r.mode=13),h=e.next_out,d=e.output,m=e.avail_out,f=e.next_in,u=e.input,p=e.avail_in,g=r.hold,v=r.bits,w=p,x=m,R=0;e:for(;;)switch(r.mode){case 1:if(0===r.wrap){r.mode=13;break}for(;v<16;){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}if(2&r.wrap&&35615===g){F[r.check=0]=255&g,F[1]=g>>>8&255,r.check=i(r.check,F,2,0),v=g=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&g)<<8)+(g>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&g)){e.msg=\"unknown compression method\",r.mode=30;break}if(v-=4,M=8+(15&(g>>>=4)),0===r.wbits)r.wbits=M;else if(M>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<<M,e.adler=r.check=1,r.mode=512&g?10:12,v=g=0;break;case 2:for(;v<16;){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}if(r.flags=g,8!=(255&r.flags)){e.msg=\"unknown compression method\",r.mode=30;break}if(57344&r.flags){e.msg=\"unknown header flags set\",r.mode=30;break}r.head&&(r.head.text=g>>8&1),512&r.flags&&(F[0]=255&g,F[1]=g>>>8&255,r.check=i(r.check,F,2,0)),v=g=0,r.mode=3;case 3:for(;v<32;){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}r.head&&(r.head.time=g),512&r.flags&&(F[0]=255&g,F[1]=g>>>8&255,F[2]=g>>>16&255,F[3]=g>>>24&255,r.check=i(r.check,F,4,0)),v=g=0,r.mode=4;case 4:for(;v<16;){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}r.head&&(r.head.xflags=255&g,r.head.os=g>>8),512&r.flags&&(F[0]=255&g,F[1]=g>>>8&255,r.check=i(r.check,F,2,0)),v=g=0,r.mode=5;case 5:if(1024&r.flags){for(;v<16;){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}r.length=g,r.head&&(r.head.extra_len=g),512&r.flags&&(F[0]=255&g,F[1]=g>>>8&255,r.check=i(r.check,F,2,0)),v=g=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(p<(S=r.length)&&(S=p),S&&(r.head&&(M=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),n.arraySet(r.head.extra,u,f,S,M)),512&r.flags&&(r.check=i(r.check,u,S,f)),p-=S,f+=S,r.length-=S),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===p)break e;for(S=0;M=u[f+S++],r.head&&M&&r.length<65536&&(r.head.name+=String.fromCharCode(M)),M&&S<p;);if(512&r.flags&&(r.check=i(r.check,u,S,f)),p-=S,f+=S,M)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===p)break e;for(S=0;M=u[f+S++],r.head&&M&&r.length<65536&&(r.head.comment+=String.fromCharCode(M)),M&&S<p;);if(512&r.flags&&(r.check=i(r.check,u,S,f)),p-=S,f+=S,M)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;v<16;){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}if(g!==(65535&r.check)){e.msg=\"header crc mismatch\",r.mode=30;break}v=g=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;v<32;){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}e.adler=r.check=c(g),v=g=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=h,e.avail_out=m,e.next_in=f,e.avail_in=p,r.hold=g,r.bits=v,2;e.adler=r.check=1,r.mode=12;case 12:if(5===t||6===t)break e;case 13:if(r.last){g>>>=7&v,v-=7&v,r.mode=27;break}for(;v<3;){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}switch(r.last=1&g,v-=1,3&(g>>>=1)){case 0:r.mode=14;break;case 1:if(b(r),r.mode=20,6!==t)break;g>>>=2,v-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}g>>>=2,v-=2;break;case 14:for(g>>>=7&v,v-=7&v;v<32;){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}if((65535&g)!=(g>>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&g,v=g=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(S=r.length){if(p<S&&(S=p),m<S&&(S=m),0===S)break e;n.arraySet(d,u,f,S,h),p-=S,f+=S,m-=S,h+=S,r.length-=S;break}r.mode=12;break;case 17:for(;v<14;){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}if(r.nlen=257+(31&g),g>>>=5,v-=5,r.ndist=1+(31&g),g>>>=5,v-=5,r.ncode=4+(15&g),g>>>=4,v-=4,286<r.nlen||30<r.ndist){e.msg=\"too many length or distance symbols\",r.mode=30;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;v<3;){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}r.lens[D[r.have++]]=7&g,g>>>=3,v-=3}for(;r.have<19;)r.lens[D[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,_={bits:r.lenbits},R=s(0,r.lens,0,19,r.lencode,0,r.work,_),r.lenbits=_.bits,R){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;O=(N=r.lencode[g&(1<<r.lenbits)-1])>>>16&255,A=65535&N,!((E=N>>>24)<=v);){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}if(A<16)g>>>=E,v-=E,r.lens[r.have++]=A;else{if(16===A){for(I=E+2;v<I;){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}if(g>>>=E,v-=E,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}M=r.lens[r.have-1],S=3+(3&g),g>>>=2,v-=2}else if(17===A){for(I=E+3;v<I;){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}v-=E,M=0,S=3+(7&(g>>>=E)),g>>>=3,v-=3}else{for(I=E+7;v<I;){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}v-=E,M=0,S=11+(127&(g>>>=E)),g>>>=7,v-=7}if(r.have+S>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;S--;)r.lens[r.have++]=M}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,_={bits:r.lenbits},R=s(1,r.lens,0,r.nlen,r.lencode,0,r.work,_),r.lenbits=_.bits,R){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,_={bits:r.distbits},R=s(2,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,_),r.distbits=_.bits,R){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=p&&258<=m){e.next_out=h,e.avail_out=m,e.next_in=f,e.avail_in=p,r.hold=g,r.bits=v,a(e,x),h=e.next_out,d=e.output,m=e.avail_out,f=e.next_in,u=e.input,p=e.avail_in,g=r.hold,v=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;O=(N=r.lencode[g&(1<<r.lenbits)-1])>>>16&255,A=65535&N,!((E=N>>>24)<=v);){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}if(O&&!(240&O)){for(T=E,j=O,P=A;O=(N=r.lencode[P+((g&(1<<T+j)-1)>>T)])>>>16&255,A=65535&N,!(T+(E=N>>>24)<=v);){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}g>>>=T,v-=T,r.back+=T}if(g>>>=E,v-=E,r.back+=E,r.length=A,0===O){r.mode=26;break}if(32&O){r.back=-1,r.mode=12;break}if(64&O){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&O,r.mode=22;case 22:if(r.extra){for(I=r.extra;v<I;){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}r.length+=g&(1<<r.extra)-1,g>>>=r.extra,v-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;O=(N=r.distcode[g&(1<<r.distbits)-1])>>>16&255,A=65535&N,!((E=N>>>24)<=v);){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}if(!(240&O)){for(T=E,j=O,P=A;O=(N=r.distcode[P+((g&(1<<T+j)-1)>>T)])>>>16&255,A=65535&N,!(T+(E=N>>>24)<=v);){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}g>>>=T,v-=T,r.back+=T}if(g>>>=E,v-=E,r.back+=E,64&O){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=A,r.extra=15&O,r.mode=24;case 24:if(r.extra){for(I=r.extra;v<I;){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}r.offset+=g&(1<<r.extra)-1,g>>>=r.extra,v-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===m)break e;if(S=x-m,r.offset>S){if((S=r.offset-S)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}C=S>r.wnext?(S-=r.wnext,r.wsize-S):r.wnext-S,S>r.length&&(S=r.length),k=r.window}else k=d,C=h-r.offset,S=r.length;for(m<S&&(S=m),m-=S,r.length-=S;d[h++]=k[C++],--S;);0===r.length&&(r.mode=21);break;case 26:if(0===m)break e;d[h++]=r.length,m--,r.mode=21;break;case 27:if(r.wrap){for(;v<32;){if(0===p)break e;p--,g|=u[f++]<<v,v+=8}if(x-=m,e.total_out+=x,r.total+=x,x&&(e.adler=r.check=r.flags?i(r.check,d,x,h-x):o(r.check,d,x,h-x)),x=m,(r.flags?g:c(g))!==r.check){e.msg=\"incorrect data check\",r.mode=30;break}v=g=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;v<32;){if(0===p)break e;p--,g+=u[f++]<<v,v+=8}if(g!==(4294967295&r.total)){e.msg=\"incorrect length check\",r.mode=30;break}v=g=0}r.mode=29;case 29:R=1;break e;case 30:R=-3;break e;case 31:return-4;default:return l}return e.next_out=h,e.avail_out=m,e.next_in=f,e.avail_in=p,r.hold=g,r.bits=v,(r.wsize||x!==e.avail_out&&r.mode<30&&(r.mode<27||4!==t))&&y(e,e.output,e.next_out,x-e.avail_out)?(r.mode=31,-4):(w-=e.avail_in,x-=e.avail_out,e.total_in+=w,e.total_out+=x,r.total+=x,r.wrap&&x&&(e.adler=r.check=r.flags?i(r.check,d,x,e.next_out-x):o(r.check,d,x,e.next_out-x)),e.data_type=r.bits+(r.last?64:0)+(12===r.mode?128:0)+(20===r.mode||15===r.mode?256:0),(0==w&&0===x||4===t)&&0===R&&(R=-5),R)},r.inflateEnd=function(e){if(!e||!e.state)return l;var t=e.state;return t.window&&(t.window=null),e.state=null,0},r.inflateGetHeader=function(e,t){var r;return e&&e.state&&2&(r=e.state).wrap?((r.head=t).done=!1,0):l},r.inflateSetDictionary=function(e,t){var r,n=t.length;return e&&e.state?0!==(r=e.state).wrap&&11!==r.mode?l:11===r.mode&&o(1,t,n,0)!==r.check?-3:y(e,t,n,n)?(r.mode=31,-4):(r.havedict=1,0):l},r.inflateInfo=\"pako inflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./inffast\":48,\"./inftrees\":50}],50:[function(e,t,r){var n=e(\"../utils/common\"),o=[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],i=[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],a=[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],s=[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];t.exports=function(e,t,r,l,c,u,d,f){var h,p,m,g,v,b,y,w,x,S=f.bits,C=0,k=0,E=0,O=0,A=0,T=0,j=0,P=0,M=0,R=0,_=null,I=0,N=new n.Buf16(16),F=new n.Buf16(16),D=null,B=0;for(C=0;C<=15;C++)N[C]=0;for(k=0;k<l;k++)N[t[r+k]]++;for(A=S,O=15;1<=O&&0===N[O];O--);if(O<A&&(A=O),0===O)return c[u++]=20971520,c[u++]=20971520,f.bits=1,0;for(E=1;E<O&&0===N[E];E++);for(A<E&&(A=E),C=P=1;C<=15;C++)if(P<<=1,(P-=N[C])<0)return-1;if(0<P&&(0===e||1!==O))return-1;for(F[1]=0,C=1;C<15;C++)F[C+1]=F[C]+N[C];for(k=0;k<l;k++)0!==t[r+k]&&(d[F[t[r+k]]++]=k);if(b=0===e?(_=D=d,19):1===e?(_=o,I-=257,D=i,B-=257,256):(_=a,D=s,-1),C=E,v=u,j=k=R=0,m=-1,g=(M=1<<(T=A))-1,1===e&&852<M||2===e&&592<M)return 1;for(;;){for(y=C-j,x=d[k]<b?(w=0,d[k]):d[k]>b?(w=D[B+d[k]],_[I+d[k]]):(w=96,0),h=1<<C-j,E=p=1<<T;c[v+(R>>j)+(p-=h)]=y<<24|w<<16|x,0!==p;);for(h=1<<C-1;R&h;)h>>=1;if(0!==h?(R&=h-1,R+=h):R=0,k++,0==--N[C]){if(C===O)break;C=t[r+d[k]]}if(A<C&&(R&g)!==m){for(0===j&&(j=A),v+=E,P=1<<(T=C-j);T+j<O&&!((P-=N[T+j])<=0);)T++,P<<=1;if(M+=1<<T,1===e&&852<M||2===e&&592<M)return 1;c[m=R&g]=A<<24|T<<16|v-u}}return 0!==R&&(c[v+R]=C-j<<24|64<<16),f.bits=A,0}},{\"../utils/common\":41}],51:[function(e,t,r){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\"}},{}],52:[function(e,t,r){var n=e(\"../utils/common\");function o(e){for(var t=e.length;0<=--t;)e[t]=0}var i=[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],a=[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],s=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],l=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],c=new Array(576);o(c);var u=new Array(60);o(u);var d=new Array(512);o(d);var f=new Array(256);o(f);var h=new Array(29);o(h);var p,m,g,v=new Array(30);function b(e,t,r,n,o){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=o,this.has_stree=e&&e.length}function y(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function w(e){return e<256?d[e]:d[256+(e>>>7)]}function x(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function S(e,t,r){e.bi_valid>16-r?(e.bi_buf|=t<<e.bi_valid&65535,x(e,e.bi_buf),e.bi_buf=t>>16-e.bi_valid,e.bi_valid+=r-16):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function C(e,t,r){S(e,r[2*t],r[2*t+1])}function k(e,t){for(var r=0;r|=1&e,e>>>=1,r<<=1,0<--t;);return r>>>1}function E(e,t,r){var n,o,i=new Array(16),a=0;for(n=1;n<=15;n++)i[n]=a=a+r[n-1]<<1;for(o=0;o<=t;o++){var s=e[2*o+1];0!==s&&(e[2*o]=k(i[s]++,s))}}function O(e){var t;for(t=0;t<286;t++)e.dyn_ltree[2*t]=0;for(t=0;t<30;t++)e.dyn_dtree[2*t]=0;for(t=0;t<19;t++)e.bl_tree[2*t]=0;e.dyn_ltree[512]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function A(e){8<e.bi_valid?x(e,e.bi_buf):0<e.bi_valid&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function T(e,t,r,n){var o=2*t,i=2*r;return e[o]<e[i]||e[o]===e[i]&&n[t]<=n[r]}function j(e,t,r){for(var n=e.heap[r],o=r<<1;o<=e.heap_len&&(o<e.heap_len&&T(t,e.heap[o+1],e.heap[o],e.depth)&&o++,!T(t,n,e.heap[o],e.depth));)e.heap[r]=e.heap[o],r=o,o<<=1;e.heap[r]=n}function P(e,t,r){var n,o,s,l,c=0;if(0!==e.last_lit)for(;n=e.pending_buf[e.d_buf+2*c]<<8|e.pending_buf[e.d_buf+2*c+1],o=e.pending_buf[e.l_buf+c],c++,0===n?C(e,o,t):(C(e,(s=f[o])+256+1,t),0!==(l=i[s])&&S(e,o-=h[s],l),C(e,s=w(--n),r),0!==(l=a[s])&&S(e,n-=v[s],l)),c<e.last_lit;);C(e,256,t)}function M(e,t){var r,n,o,i=t.dyn_tree,a=t.stat_desc.static_tree,s=t.stat_desc.has_stree,l=t.stat_desc.elems,c=-1;for(e.heap_len=0,e.heap_max=573,r=0;r<l;r++)0!==i[2*r]?(e.heap[++e.heap_len]=c=r,e.depth[r]=0):i[2*r+1]=0;for(;e.heap_len<2;)i[2*(o=e.heap[++e.heap_len]=c<2?++c:0)]=1,e.depth[o]=0,e.opt_len--,s&&(e.static_len-=a[2*o+1]);for(t.max_code=c,r=e.heap_len>>1;1<=r;r--)j(e,i,r);for(o=l;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],j(e,i,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,i[2*o]=i[2*r]+i[2*n],e.depth[o]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,i[2*r+1]=i[2*n+1]=o,e.heap[1]=o++,j(e,i,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,o,i,a,s,l=t.dyn_tree,c=t.max_code,u=t.stat_desc.static_tree,d=t.stat_desc.has_stree,f=t.stat_desc.extra_bits,h=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(i=0;i<=15;i++)e.bl_count[i]=0;for(l[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<573;r++)p<(i=l[2*l[2*(n=e.heap[r])+1]+1]+1)&&(i=p,m++),l[2*n+1]=i,c<n||(e.bl_count[i]++,a=0,h<=n&&(a=f[n-h]),s=l[2*n],e.opt_len+=s*(i+a),d&&(e.static_len+=s*(u[2*n+1]+a)));if(0!==m){do{for(i=p-1;0===e.bl_count[i];)i--;e.bl_count[i]--,e.bl_count[i+1]+=2,e.bl_count[p]--,m-=2}while(0<m);for(i=p;0!==i;i--)for(n=e.bl_count[i];0!==n;)c<(o=e.heap[--r])||(l[2*o+1]!==i&&(e.opt_len+=(i-l[2*o+1])*l[2*o],l[2*o+1]=i),n--)}}(e,t),E(i,c,e.bl_count)}function R(e,t,r){var n,o,i=-1,a=t[1],s=0,l=7,c=4;for(0===a&&(l=138,c=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)o=a,a=t[2*(n+1)+1],++s<l&&o===a||(s<c?e.bl_tree[2*o]+=s:0!==o?(o!==i&&e.bl_tree[2*o]++,e.bl_tree[32]++):s<=10?e.bl_tree[34]++:e.bl_tree[36]++,i=o,c=(s=0)===a?(l=138,3):o===a?(l=6,3):(l=7,4))}function _(e,t,r){var n,o,i=-1,a=t[1],s=0,l=7,c=4;for(0===a&&(l=138,c=3),n=0;n<=r;n++)if(o=a,a=t[2*(n+1)+1],!(++s<l&&o===a)){if(s<c)for(;C(e,o,e.bl_tree),0!=--s;);else 0!==o?(o!==i&&(C(e,o,e.bl_tree),s--),C(e,16,e.bl_tree),S(e,s-3,2)):s<=10?(C(e,17,e.bl_tree),S(e,s-3,3)):(C(e,18,e.bl_tree),S(e,s-11,7));i=o,c=(s=0)===a?(l=138,3):o===a?(l=6,3):(l=7,4)}}o(v);var I=!1;function N(e,t,r,o){S(e,0+(o?1:0),3),function(e,t,r){A(e),x(e,r),x(e,~r),n.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}(e,t,r)}r._tr_init=function(e){I||(function(){var e,t,r,n,o,l=new Array(16);for(n=r=0;n<28;n++)for(h[n]=r,e=0;e<1<<i[n];e++)f[r++]=n;for(f[r-1]=n,n=o=0;n<16;n++)for(v[n]=o,e=0;e<1<<a[n];e++)d[o++]=n;for(o>>=7;n<30;n++)for(v[n]=o<<7,e=0;e<1<<a[n]-7;e++)d[256+o++]=n;for(t=0;t<=15;t++)l[t]=0;for(e=0;e<=143;)c[2*e+1]=8,e++,l[8]++;for(;e<=255;)c[2*e+1]=9,e++,l[9]++;for(;e<=279;)c[2*e+1]=7,e++,l[7]++;for(;e<=287;)c[2*e+1]=8,e++,l[8]++;for(E(c,287,l),e=0;e<30;e++)u[2*e+1]=5,u[2*e]=k(e,5);p=new b(c,i,257,286,15),m=new b(u,a,0,30,15),g=new b(new Array(0),s,0,19,7)}(),I=!0),e.l_desc=new y(e.dyn_ltree,p),e.d_desc=new y(e.dyn_dtree,m),e.bl_desc=new y(e.bl_tree,g),e.bi_buf=0,e.bi_valid=0,O(e)},r._tr_stored_block=N,r._tr_flush_block=function(e,t,r,n){var o,i,a=0;0<e.level?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t<256;t++)if(0!==e.dyn_ltree[2*t])return 1;return 0}(e)),M(e,e.l_desc),M(e,e.d_desc),a=function(e){var t;for(R(e,e.dyn_ltree,e.l_desc.max_code),R(e,e.dyn_dtree,e.d_desc.max_code),M(e,e.bl_desc),t=18;3<=t&&0===e.bl_tree[2*l[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),o=e.opt_len+3+7>>>3,(i=e.static_len+3+7>>>3)<=o&&(o=i)):o=i=r+5,r+4<=o&&-1!==t?N(e,t,r,n):4===e.strategy||i===o?(S(e,2+(n?1:0),3),P(e,c,u)):(S(e,4+(n?1:0),3),function(e,t,r,n){var o;for(S(e,t-257,5),S(e,r-1,5),S(e,n-4,4),o=0;o<n;o++)S(e,e.bl_tree[2*l[o]+1],3);_(e,e.dyn_ltree,t-1),_(e,e.dyn_dtree,r-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,a+1),P(e,e.dyn_ltree,e.dyn_dtree)),O(e),n&&A(e)},r._tr_tally=function(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(f[r]+256+1)]++,e.dyn_dtree[2*w(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){S(e,2,3),C(e,256,c),function(e){16===e.bi_valid?(x(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){t.exports=function(){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}},{}],54:[function(e,t,n){(function(e){!function(e){if(!e.setImmediate){var t,n,o,i,a=1,s={},l=!1,c=e.document,u=Object.getPrototypeOf&&Object.getPrototypeOf(e);u=u&&u.setTimeout?u:e,t=\"[object process]\"==={}.toString.call(e.process)?function(e){r.nextTick((function(){f(e)}))}:function(){if(e.postMessage&&!e.importScripts){var t=!0,r=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage(\"\",\"*\"),e.onmessage=r,t}}()?(i=\"setImmediate$\"+Math.random()+\"$\",e.addEventListener?e.addEventListener(\"message\",h,!1):e.attachEvent(\"onmessage\",h),function(t){e.postMessage(i+t,\"*\")}):e.MessageChannel?((o=new MessageChannel).port1.onmessage=function(e){f(e.data)},function(e){o.port2.postMessage(e)}):c&&\"onreadystatechange\"in c.createElement(\"script\")?(n=c.documentElement,function(e){var t=c.createElement(\"script\");t.onreadystatechange=function(){f(e),t.onreadystatechange=null,n.removeChild(t),t=null},n.appendChild(t)}):function(e){setTimeout(f,0,e)},u.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var r=new Array(arguments.length-1),n=0;n<r.length;n++)r[n]=arguments[n+1];var o={callback:e,args:r};return s[a]=o,t(a),a++},u.clearImmediate=d}function d(e){delete s[e]}function f(e){if(l)setTimeout(f,0,e);else{var t=s[e];if(t){l=!0;try{!function(e){var t=e.callback,r=e.args;switch(r.length){case 0:t();break;case 1:t(r[0]);break;case 2:t(r[0],r[1]);break;case 3:t(r[0],r[1],r[2]);break;default:t.apply(void 0,r)}}(t)}finally{d(e),l=!1}}}}function h(t){t.source===e&&\"string\"==typeof t.data&&0===t.data.indexOf(i)&&f(+t.data.slice(i.length))}}(\"undefined\"==typeof self?void 0===e?this:e:self)}).call(this,void 0!==o?o:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}]},{},[10])(10)}))}).call(this)}).call(this,e(\"_process\"),void 0!==r.g?r.g:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},e(\"buffer\").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],e(\"timers\").setImmediate)},{_process:467,buffer:220,timers:523}],442:[function(e,t,n){(function(e){(function(){\"use strict\";var r=/[\\\\^$.*+?()[\\]{}|]/g,n=RegExp(r.source),o=\"object\"==typeof e&&e&&e.Object===Object&&e,i=\"object\"==typeof self&&self&&self.Object===Object&&self,a=o||i||Function(\"return this\")(),s=Object.prototype.toString,l=a.Symbol,c=l?l.prototype:void 0,u=c?c.toString:void 0;t.exports=function(e){var t;return(e=null==(t=e)?\"\":function(e){if(\"string\"==typeof e)return e;if(function(e){return\"symbol\"==typeof e||function(e){return!!e&&\"object\"==typeof e}(e)&&\"[object Symbol]\"==s.call(e)}(e))return u?u.call(e):\"\";var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}(t))&&n.test(e)?e.replace(r,\"\\\\$&\"):e}}).call(this)}).call(this,void 0!==r.g?r.g:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],443:[function(e,t,n){(function(e){(function(){\"use strict\";var r=\"[object Arguments]\",o=\"[object Map]\",i=\"[object Object]\",a=\"[object Set]\",s=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,l=/^\\w*$/,c=/^\\./,u=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,d=/\\\\(\\\\)?/g,f=/^\\[object .+?Constructor\\]$/,h=/^(?:0|[1-9]\\d*)$/,p={};p[\"[object Float32Array]\"]=p[\"[object Float64Array]\"]=p[\"[object Int8Array]\"]=p[\"[object Int16Array]\"]=p[\"[object Int32Array]\"]=p[\"[object Uint8Array]\"]=p[\"[object Uint8ClampedArray]\"]=p[\"[object Uint16Array]\"]=p[\"[object Uint32Array]\"]=!0,p[r]=p[\"[object Array]\"]=p[\"[object ArrayBuffer]\"]=p[\"[object Boolean]\"]=p[\"[object DataView]\"]=p[\"[object Date]\"]=p[\"[object Error]\"]=p[\"[object Function]\"]=p[o]=p[\"[object Number]\"]=p[i]=p[\"[object RegExp]\"]=p[a]=p[\"[object String]\"]=p[\"[object WeakMap]\"]=!1;var m=\"object\"==typeof e&&e&&e.Object===Object&&e,g=\"object\"==typeof self&&self&&self.Object===Object&&self,v=m||g||Function(\"return this\")(),b=\"object\"==typeof n&&n&&!n.nodeType&&n,y=b&&\"object\"==typeof t&&t&&!t.nodeType&&t,w=y&&y.exports===b&&m.process,x=function(){try{return w&&w.binding(\"util\")}catch(e){}}(),S=x&&x.isTypedArray;function C(e,t,r,n){for(var o=-1,i=e?e.length:0;++o<i;){var a=e[o];t(n,a,r(a),e)}return n}function k(e,t){for(var r=-1,n=e?e.length:0;++r<n;)if(t(e[r],r,e))return!0;return!1}function E(e){var t=!1;if(null!=e&&\"function\"!=typeof e.toString)try{t=!!(e+\"\")}catch(e){}return t}function O(e){var t=-1,r=Array(e.size);return e.forEach((function(e,n){r[++t]=[n,e]})),r}function A(e){var t=-1,r=Array(e.size);return e.forEach((function(e){r[++t]=e})),r}var T,j,P,M=Array.prototype,R=Function.prototype,_=Object.prototype,I=v[\"__core-js_shared__\"],N=(T=/[^.]+$/.exec(I&&I.keys&&I.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+T:\"\",F=R.toString,D=_.hasOwnProperty,B=_.toString,L=RegExp(\"^\"+F.call(D).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),z=v.Symbol,H=v.Uint8Array,U=_.propertyIsEnumerable,V=M.splice,W=(j=Object.keys,P=Object,function(e){return j(P(e))}),G=xe(v,\"DataView\"),q=xe(v,\"Map\"),K=xe(v,\"Promise\"),X=xe(v,\"Set\"),Y=xe(v,\"WeakMap\"),$=xe(Object,\"create\"),Z=je(G),Q=je(q),J=je(K),ee=je(X),te=je(Y),re=z?z.prototype:void 0,ne=re?re.valueOf:void 0,oe=re?re.toString:void 0;function ie(e){var t=-1,r=e?e.length:0;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function ae(e){var t=-1,r=e?e.length:0;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function se(e){var t=-1,r=e?e.length:0;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function le(e){var t=-1,r=e?e.length:0;for(this.__data__=new se;++t<r;)this.add(e[t])}function ce(e){this.__data__=new ae(e)}function ue(e,t){for(var r=e.length;r--;)if(_e(e[r][0],t))return r;return-1}function de(e,t,r,n){return he(e,(function(e,o,i){t(n,e,r(e),i)})),n}ie.prototype.clear=function(){this.__data__=$?$(null):{}},ie.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},ie.prototype.get=function(e){var t=this.__data__;if($){var r=t[e];return\"__lodash_hash_undefined__\"===r?void 0:r}return D.call(t,e)?t[e]:void 0},ie.prototype.has=function(e){var t=this.__data__;return $?void 0!==t[e]:D.call(t,e)},ie.prototype.set=function(e,t){return this.__data__[e]=$&&void 0===t?\"__lodash_hash_undefined__\":t,this},ae.prototype.clear=function(){this.__data__=[]},ae.prototype.delete=function(e){var t=this.__data__,r=ue(t,e);return!(r<0||(r==t.length-1?t.pop():V.call(t,r,1),0))},ae.prototype.get=function(e){var t=this.__data__,r=ue(t,e);return r<0?void 0:t[r][1]},ae.prototype.has=function(e){return ue(this.__data__,e)>-1},ae.prototype.set=function(e,t){var r=this.__data__,n=ue(r,e);return n<0?r.push([e,t]):r[n][1]=t,this},se.prototype.clear=function(){this.__data__={hash:new ie,map:new(q||ae),string:new ie}},se.prototype.delete=function(e){return we(this,e).delete(e)},se.prototype.get=function(e){return we(this,e).get(e)},se.prototype.has=function(e){return we(this,e).has(e)},se.prototype.set=function(e,t){return we(this,e).set(e,t),this},le.prototype.add=le.prototype.push=function(e){return this.__data__.set(e,\"__lodash_hash_undefined__\"),this},le.prototype.has=function(e){return this.__data__.has(e)},ce.prototype.clear=function(){this.__data__=new ae},ce.prototype.delete=function(e){return this.__data__.delete(e)},ce.prototype.get=function(e){return this.__data__.get(e)},ce.prototype.has=function(e){return this.__data__.has(e)},ce.prototype.set=function(e,t){var r=this.__data__;if(r instanceof ae){var n=r.__data__;if(!q||n.length<199)return n.push([e,t]),this;r=this.__data__=new se(n)}return r.set(e,t),this};var fe,he=(fe=function(e,t){return e&&pe(e,t,Ve)},function(e,t){if(null==e)return e;if(!Fe(e))return fe(e,t);for(var r=e.length,n=-1,o=Object(e);++n<r&&!1!==t(o[n],n,o););return e}),pe=function(e,t,r){for(var n=-1,o=Object(e),i=r(e),a=i.length;a--;){var s=i[++n];if(!1===t(o[s],s,o))break}return e};function me(e,t){for(var r=0,n=(t=ke(t,e)?[t]:be(t)).length;null!=e&&r<n;)e=e[Te(t[r++])];return r&&r==n?e:void 0}function ge(e,t){return null!=e&&t in Object(e)}function ve(e,t,n,s,l){return e===t||(null==e||null==t||!Le(e)&&!ze(t)?e!=e&&t!=t:function(e,t,n,s,l,c){var u=Ne(e),d=Ne(t),f=\"[object Array]\",h=\"[object Array]\";u||(f=(f=Se(e))==r?i:f),d||(h=(h=Se(t))==r?i:h);var p=f==i&&!E(e),m=h==i&&!E(t),g=f==h;if(g&&!p)return c||(c=new ce),u||Ue(e)?ye(e,t,n,s,l,c):function(e,t,r,n,i,s,l){switch(r){case\"[object DataView]\":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case\"[object ArrayBuffer]\":return!(e.byteLength!=t.byteLength||!n(new H(e),new H(t)));case\"[object Boolean]\":case\"[object Date]\":case\"[object Number]\":return _e(+e,+t);case\"[object Error]\":return e.name==t.name&&e.message==t.message;case\"[object RegExp]\":case\"[object String]\":return e==t+\"\";case o:var c=O;case a:var u=2&s;if(c||(c=A),e.size!=t.size&&!u)return!1;var d=l.get(e);if(d)return d==t;s|=1,l.set(e,t);var f=ye(c(e),c(t),n,i,s,l);return l.delete(e),f;case\"[object Symbol]\":if(ne)return ne.call(e)==ne.call(t)}return!1}(e,t,f,n,s,l,c);if(!(2&l)){var v=p&&D.call(e,\"__wrapped__\"),b=m&&D.call(t,\"__wrapped__\");if(v||b){var y=v?e.value():e,w=b?t.value():t;return c||(c=new ce),n(y,w,s,l,c)}}return!!g&&(c||(c=new ce),function(e,t,r,n,o,i){var a=2&o,s=Ve(e),l=s.length;if(l!=Ve(t).length&&!a)return!1;for(var c=l;c--;){var u=s[c];if(!(a?u in t:D.call(t,u)))return!1}var d=i.get(e);if(d&&i.get(t))return d==t;var f=!0;i.set(e,t),i.set(t,e);for(var h=a;++c<l;){var p=e[u=s[c]],m=t[u];if(n)var g=a?n(m,p,u,t,e,i):n(p,m,u,e,t,i);if(!(void 0===g?p===m||r(p,m,n,o,i):g)){f=!1;break}h||(h=\"constructor\"==u)}if(f&&!h){var v=e.constructor,b=t.constructor;v==b||!(\"constructor\"in e)||!(\"constructor\"in t)||\"function\"==typeof v&&v instanceof v&&\"function\"==typeof b&&b instanceof b||(f=!1)}return i.delete(e),i.delete(t),f}(e,t,n,s,l,c))}(e,t,ve,n,s,l))}function be(e){return Ne(e)?e:Ae(e)}function ye(e,t,r,n,o,i){var a=2&o,s=e.length,l=t.length;if(s!=l&&!(a&&l>s))return!1;var c=i.get(e);if(c&&i.get(t))return c==t;var u=-1,d=!0,f=1&o?new le:void 0;for(i.set(e,t),i.set(t,e);++u<s;){var h=e[u],p=t[u];if(n)var m=a?n(p,h,u,t,e,i):n(h,p,u,e,t,i);if(void 0!==m){if(m)continue;d=!1;break}if(f){if(!k(t,(function(e,t){if(!f.has(t)&&(h===e||r(h,e,n,o,i)))return f.add(t)}))){d=!1;break}}else if(h!==p&&!r(h,p,n,o,i)){d=!1;break}}return i.delete(e),i.delete(t),d}function we(e,t){var r,n,o=e.__data__;return(\"string\"==(n=typeof(r=t))||\"number\"==n||\"symbol\"==n||\"boolean\"==n?\"__proto__\"!==r:null===r)?o[\"string\"==typeof t?\"string\":\"hash\"]:o.map}function xe(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){return!(!Le(e)||function(e){return!!N&&N in e}(e))&&(De(e)||E(e)?L:f).test(je(e))}(r)?r:void 0}var Se=function(e){return B.call(e)};function Ce(e,t){return!!(t=null==t?9007199254740991:t)&&(\"number\"==typeof e||h.test(e))&&e>-1&&e%1==0&&e<t}function ke(e,t){if(Ne(e))return!1;var r=typeof e;return!(\"number\"!=r&&\"symbol\"!=r&&\"boolean\"!=r&&null!=e&&!He(e))||l.test(e)||!s.test(e)||null!=t&&e in Object(t)}function Ee(e){return e==e&&!Le(e)}function Oe(e,t){return function(r){return null!=r&&r[e]===t&&(void 0!==t||e in Object(r))}}(G&&\"[object DataView]\"!=Se(new G(new ArrayBuffer(1)))||q&&Se(new q)!=o||K&&\"[object Promise]\"!=Se(K.resolve())||X&&Se(new X)!=a||Y&&\"[object WeakMap]\"!=Se(new Y))&&(Se=function(e){var t=B.call(e),r=t==i?e.constructor:void 0,n=r?je(r):void 0;if(n)switch(n){case Z:return\"[object DataView]\";case Q:return o;case J:return\"[object Promise]\";case ee:return a;case te:return\"[object WeakMap]\"}return t});var Ae=Re((function(e){var t;e=null==(t=e)?\"\":function(e){if(\"string\"==typeof e)return e;if(He(e))return oe?oe.call(e):\"\";var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}(t);var r=[];return c.test(e)&&r.push(\"\"),e.replace(u,(function(e,t,n,o){r.push(n?o.replace(d,\"$1\"):t||e)})),r}));function Te(e){if(\"string\"==typeof e||He(e))return e;var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}function je(e){if(null!=e){try{return F.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}var Pe,Me=(Pe=function(e,t,r){D.call(e,r)?e[r].push(t):e[r]=[t]},function(e,t){var r={};return(Ne(e)?C:de)(e,Pe,function(e){return\"function\"==typeof e?e:null==e?We:\"object\"==typeof e?Ne(e)?function(e,t){return ke(e)&&Ee(t)?Oe(Te(e),t):function(r){var n=function(e,t){var r=null==e?void 0:me(e,t);return void 0===r?void 0:r}(r,e);return void 0===n&&n===t?function(e,t){return null!=e&&function(e,t,r){for(var n,o=-1,i=(t=ke(t,e)?[t]:be(t)).length;++o<i;){var a=Te(t[o]);if(!(n=null!=e&&r(e,a)))break;e=e[a]}return n||!!(i=e?e.length:0)&&Be(i)&&Ce(a,i)&&(Ne(e)||Ie(e))}(e,t,ge)}(r,e):ve(t,n,void 0,3)}}(e[0],e[1]):function(e){var t=function(e){for(var t=Ve(e),r=t.length;r--;){var n=t[r],o=e[n];t[r]=[n,o,Ee(o)]}return t}(e);return 1==t.length&&t[0][2]?Oe(t[0][0],t[0][1]):function(r){return r===e||function(e,t,r,n){var o=r.length,i=o;if(null==e)return!i;for(e=Object(e);o--;){var a=r[o];if(a[2]?a[1]!==e[a[0]]:!(a[0]in e))return!1}for(;++o<i;){var s=(a=r[o])[0],l=e[s],c=a[1];if(a[2]){if(void 0===l&&!(s in e))return!1}else{var u,d=new ce;if(!(void 0===u?ve(c,l,n,3,d):u))return!1}}return!0}(r,0,t)}}(e):ke(t=e)?(r=Te(t),function(e){return null==e?void 0:e[r]}):function(e){return function(t){return me(t,e)}}(t);var t,r}(t),r)});function Re(e,t){if(\"function\"!=typeof e||t&&\"function\"!=typeof t)throw new TypeError(\"Expected a function\");var r=function(){var n=arguments,o=t?t.apply(this,n):n[0],i=r.cache;if(i.has(o))return i.get(o);var a=e.apply(this,n);return r.cache=i.set(o,a),a};return r.cache=new(Re.Cache||se),r}function _e(e,t){return e===t||e!=e&&t!=t}function Ie(e){return function(e){return ze(e)&&Fe(e)}(e)&&D.call(e,\"callee\")&&(!U.call(e,\"callee\")||B.call(e)==r)}Re.Cache=se;var Ne=Array.isArray;function Fe(e){return null!=e&&Be(e.length)&&!De(e)}function De(e){var t=Le(e)?B.call(e):\"\";return\"[object Function]\"==t||\"[object GeneratorFunction]\"==t}function Be(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}function Le(e){var t=typeof e;return!!e&&(\"object\"==t||\"function\"==t)}function ze(e){return!!e&&\"object\"==typeof e}function He(e){return\"symbol\"==typeof e||ze(e)&&\"[object Symbol]\"==B.call(e)}var Ue=S?function(e){return function(t){return e(t)}}(S):function(e){return ze(e)&&Be(e.length)&&!!p[B.call(e)]};function Ve(e){return Fe(e)?function(e,t){var r=Ne(e)||Ie(e)?function(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}(e.length,String):[],n=r.length,o=!!n;for(var i in e)!t&&!D.call(e,i)||o&&(\"length\"==i||Ce(i,n))||r.push(i);return r}(e):function(e){if(r=(t=e)&&t.constructor,t!==(\"function\"==typeof r&&r.prototype||_))return W(e);var t,r,n=[];for(var o in Object(e))D.call(e,o)&&\"constructor\"!=o&&n.push(o);return n}(e)}function We(e){return e}t.exports=Me}).call(this)}).call(this,void 0!==r.g?r.g:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],444:[function(e,t,r){\"use strict\";var n=Object.prototype.toString;t.exports=function(e){return!0===e||!1===e||function(e){return!!e&&\"object\"==typeof e}(e)&&\"[object Boolean]\"==n.call(e)}},{}],445:[function(e,t,n){(function(e){(function(){\"use strict\";var r=\"[object Arguments]\",o=\"[object Map]\",i=\"[object Object]\",a=\"[object Set]\",s=/^\\[object .+?Constructor\\]$/,l=/^(?:0|[1-9]\\d*)$/,c={};c[\"[object Float32Array]\"]=c[\"[object Float64Array]\"]=c[\"[object Int8Array]\"]=c[\"[object Int16Array]\"]=c[\"[object Int32Array]\"]=c[\"[object Uint8Array]\"]=c[\"[object Uint8ClampedArray]\"]=c[\"[object Uint16Array]\"]=c[\"[object Uint32Array]\"]=!0,c[r]=c[\"[object Array]\"]=c[\"[object ArrayBuffer]\"]=c[\"[object Boolean]\"]=c[\"[object DataView]\"]=c[\"[object Date]\"]=c[\"[object Error]\"]=c[\"[object Function]\"]=c[o]=c[\"[object Number]\"]=c[i]=c[\"[object RegExp]\"]=c[a]=c[\"[object String]\"]=c[\"[object WeakMap]\"]=!1;var u=\"object\"==typeof e&&e&&e.Object===Object&&e,d=\"object\"==typeof self&&self&&self.Object===Object&&self,f=u||d||Function(\"return this\")(),h=\"object\"==typeof n&&n&&!n.nodeType&&n,p=h&&\"object\"==typeof t&&t&&!t.nodeType&&t,m=p&&p.exports===h,g=m&&u.process,v=function(){try{return g&&g.binding&&g.binding(\"util\")}catch(e){}}(),b=v&&v.isTypedArray;function y(e,t){for(var r=-1,n=null==e?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}function w(e){var t=-1,r=Array(e.size);return e.forEach((function(e,n){r[++t]=[n,e]})),r}function x(e){var t=-1,r=Array(e.size);return e.forEach((function(e){r[++t]=e})),r}var S,C,k,E=Array.prototype,O=Function.prototype,A=Object.prototype,T=f[\"__core-js_shared__\"],j=O.toString,P=A.hasOwnProperty,M=(S=/[^.]+$/.exec(T&&T.keys&&T.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+S:\"\",R=A.toString,_=RegExp(\"^\"+j.call(P).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),I=m?f.Buffer:void 0,N=f.Symbol,F=f.Uint8Array,D=A.propertyIsEnumerable,B=E.splice,L=N?N.toStringTag:void 0,z=Object.getOwnPropertySymbols,H=I?I.isBuffer:void 0,U=(C=Object.keys,k=Object,function(e){return C(k(e))}),V=pe(f,\"DataView\"),W=pe(f,\"Map\"),G=pe(f,\"Promise\"),q=pe(f,\"Set\"),K=pe(f,\"WeakMap\"),X=pe(Object,\"create\"),Y=be(V),$=be(W),Z=be(G),Q=be(q),J=be(K),ee=N?N.prototype:void 0,te=ee?ee.valueOf:void 0;function re(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function ne(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function oe(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function ie(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new oe;++t<r;)this.add(e[t])}function ae(e){var t=this.__data__=new ne(e);this.size=t.size}function se(e,t){for(var r=e.length;r--;)if(ye(e[r][0],t))return r;return-1}function le(e){return null==e?void 0===e?\"[object Undefined]\":\"[object Null]\":L&&L in Object(e)?function(e){var t=P.call(e,L),r=e[L];try{e[L]=void 0;var n=!0}catch(e){}var o=R.call(e);return n&&(t?e[L]=r:delete e[L]),o}(e):function(e){return R.call(e)}(e)}function ce(e){return Oe(e)&&le(e)==r}function ue(e,t,n,s,l){return e===t||(null==e||null==t||!Oe(e)&&!Oe(t)?e!=e&&t!=t:function(e,t,n,s,l,c){var u=xe(e),d=xe(t),f=u?\"[object Array]\":ge(e),h=d?\"[object Array]\":ge(t),p=(f=f==r?i:f)==i,m=(h=h==r?i:h)==i,g=f==h;if(g&&Se(e)){if(!Se(t))return!1;u=!0,p=!1}if(g&&!p)return c||(c=new ae),u||Ae(e)?de(e,t,n,s,l,c):function(e,t,r,n,i,s,l){switch(r){case\"[object DataView]\":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case\"[object ArrayBuffer]\":return!(e.byteLength!=t.byteLength||!s(new F(e),new F(t)));case\"[object Boolean]\":case\"[object Date]\":case\"[object Number]\":return ye(+e,+t);case\"[object Error]\":return e.name==t.name&&e.message==t.message;case\"[object RegExp]\":case\"[object String]\":return e==t+\"\";case o:var c=w;case a:var u=1&n;if(c||(c=x),e.size!=t.size&&!u)return!1;var d=l.get(e);if(d)return d==t;n|=2,l.set(e,t);var f=de(c(e),c(t),n,i,s,l);return l.delete(e),f;case\"[object Symbol]\":if(te)return te.call(e)==te.call(t)}return!1}(e,t,f,n,s,l,c);if(!(1&n)){var v=p&&P.call(e,\"__wrapped__\"),b=m&&P.call(t,\"__wrapped__\");if(v||b){var y=v?e.value():e,S=b?t.value():t;return c||(c=new ae),l(y,S,n,s,c)}}return!!g&&(c||(c=new ae),function(e,t,r,n,o,i){var a=1&r,s=fe(e),l=s.length;if(l!=fe(t).length&&!a)return!1;for(var c=l;c--;){var u=s[c];if(!(a?u in t:P.call(t,u)))return!1}var d=i.get(e);if(d&&i.get(t))return d==t;var f=!0;i.set(e,t),i.set(t,e);for(var h=a;++c<l;){var p=e[u=s[c]],m=t[u];if(n)var g=a?n(m,p,u,t,e,i):n(p,m,u,e,t,i);if(!(void 0===g?p===m||o(p,m,r,n,i):g)){f=!1;break}h||(h=\"constructor\"==u)}if(f&&!h){var v=e.constructor,b=t.constructor;v==b||!(\"constructor\"in e)||!(\"constructor\"in t)||\"function\"==typeof v&&v instanceof v&&\"function\"==typeof b&&b instanceof b||(f=!1)}return i.delete(e),i.delete(t),f}(e,t,n,s,l,c))}(e,t,n,s,ue,l))}function de(e,t,r,n,o,i){var a=1&r,s=e.length,l=t.length;if(s!=l&&!(a&&l>s))return!1;var c=i.get(e);if(c&&i.get(t))return c==t;var u=-1,d=!0,f=2&r?new ie:void 0;for(i.set(e,t),i.set(t,e);++u<s;){var h=e[u],p=t[u];if(n)var m=a?n(p,h,u,t,e,i):n(h,p,u,e,t,i);if(void 0!==m){if(m)continue;d=!1;break}if(f){if(!y(t,(function(e,t){if(a=t,!f.has(a)&&(h===e||o(h,e,r,n,i)))return f.push(t);var a}))){d=!1;break}}else if(h!==p&&!o(h,p,r,n,i)){d=!1;break}}return i.delete(e),i.delete(t),d}function fe(e){return function(e,t,r){var n=t(e);return xe(e)?n:function(e,t){for(var r=-1,n=t.length,o=e.length;++r<n;)e[o+r]=t[r];return e}(n,r(e))}(e,Te,me)}function he(e,t){var r,n,o=e.__data__;return(\"string\"==(n=typeof(r=t))||\"number\"==n||\"symbol\"==n||\"boolean\"==n?\"__proto__\"!==r:null===r)?o[\"string\"==typeof t?\"string\":\"hash\"]:o.map}function pe(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){return!(!Ee(e)||function(e){return!!M&&M in e}(e))&&(Ce(e)?_:s).test(be(e))}(r)?r:void 0}re.prototype.clear=function(){this.__data__=X?X(null):{},this.size=0},re.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},re.prototype.get=function(e){var t=this.__data__;if(X){var r=t[e];return\"__lodash_hash_undefined__\"===r?void 0:r}return P.call(t,e)?t[e]:void 0},re.prototype.has=function(e){var t=this.__data__;return X?void 0!==t[e]:P.call(t,e)},re.prototype.set=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=X&&void 0===t?\"__lodash_hash_undefined__\":t,this},ne.prototype.clear=function(){this.__data__=[],this.size=0},ne.prototype.delete=function(e){var t=this.__data__,r=se(t,e);return!(r<0||(r==t.length-1?t.pop():B.call(t,r,1),--this.size,0))},ne.prototype.get=function(e){var t=this.__data__,r=se(t,e);return r<0?void 0:t[r][1]},ne.prototype.has=function(e){return se(this.__data__,e)>-1},ne.prototype.set=function(e,t){var r=this.__data__,n=se(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this},oe.prototype.clear=function(){this.size=0,this.__data__={hash:new re,map:new(W||ne),string:new re}},oe.prototype.delete=function(e){var t=he(this,e).delete(e);return this.size-=t?1:0,t},oe.prototype.get=function(e){return he(this,e).get(e)},oe.prototype.has=function(e){return he(this,e).has(e)},oe.prototype.set=function(e,t){var r=he(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this},ie.prototype.add=ie.prototype.push=function(e){return this.__data__.set(e,\"__lodash_hash_undefined__\"),this},ie.prototype.has=function(e){return this.__data__.has(e)},ae.prototype.clear=function(){this.__data__=new ne,this.size=0},ae.prototype.delete=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r},ae.prototype.get=function(e){return this.__data__.get(e)},ae.prototype.has=function(e){return this.__data__.has(e)},ae.prototype.set=function(e,t){var r=this.__data__;if(r instanceof ne){var n=r.__data__;if(!W||n.length<199)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new oe(n)}return r.set(e,t),this.size=r.size,this};var me=z?function(e){return null==e?[]:(e=Object(e),function(e,t){for(var r=-1,n=null==e?0:e.length,o=0,i=[];++r<n;){var a=e[r];t(a)&&(i[o++]=a)}return i}(z(e),(function(t){return D.call(e,t)})))}:function(){return[]},ge=le;function ve(e,t){return!!(t=null==t?9007199254740991:t)&&(\"number\"==typeof e||l.test(e))&&e>-1&&e%1==0&&e<t}function be(e){if(null!=e){try{return j.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}function ye(e,t){return e===t||e!=e&&t!=t}(V&&\"[object DataView]\"!=ge(new V(new ArrayBuffer(1)))||W&&ge(new W)!=o||G&&\"[object Promise]\"!=ge(G.resolve())||q&&ge(new q)!=a||K&&\"[object WeakMap]\"!=ge(new K))&&(ge=function(e){var t=le(e),r=t==i?e.constructor:void 0,n=r?be(r):\"\";if(n)switch(n){case Y:return\"[object DataView]\";case $:return o;case Z:return\"[object Promise]\";case Q:return a;case J:return\"[object WeakMap]\"}return t});var we=ce(function(){return arguments}())?ce:function(e){return Oe(e)&&P.call(e,\"callee\")&&!D.call(e,\"callee\")},xe=Array.isArray,Se=H||function(){return!1};function Ce(e){if(!Ee(e))return!1;var t=le(e);return\"[object Function]\"==t||\"[object GeneratorFunction]\"==t||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function ke(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}function Ee(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}function Oe(e){return null!=e&&\"object\"==typeof e}var Ae=b?function(e){return function(t){return e(t)}}(b):function(e){return Oe(e)&&ke(e.length)&&!!c[le(e)]};function Te(e){return null!=(t=e)&&ke(t.length)&&!Ce(t)?function(e,t){var r=xe(e),n=!r&&we(e),o=!r&&!n&&Se(e),i=!r&&!n&&!o&&Ae(e),a=r||n||o||i,s=a?function(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}(e.length,String):[],l=s.length;for(var c in e)!t&&!P.call(e,c)||a&&(\"length\"==c||o&&(\"offset\"==c||\"parent\"==c)||i&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||ve(c,l))||s.push(c);return s}(e):function(e){if(r=(t=e)&&t.constructor,t!==(\"function\"==typeof r&&r.prototype||A))return U(e);var t,r,n=[];for(var o in Object(e))P.call(e,o)&&\"constructor\"!=o&&n.push(o);return n}(e);var t}t.exports=function(e,t){return ue(e,t)}}).call(this)}).call(this,void 0!==r.g?r.g:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],446:[function(e,t,n){(function(e){(function(){\"use strict\";var r=\"object\"==typeof e&&e&&e.Object===Object&&e,n=\"object\"==typeof self&&self&&self.Object===Object&&self,o=r||n||Function(\"return this\")(),i=Object.prototype,a=i.hasOwnProperty,s=i.toString,l=o.Symbol,c=l?l.toStringTag:void 0;t.exports=function(e){if(!function(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}(e))return!1;var t=function(e){return null==e?void 0===e?\"[object Undefined]\":\"[object Null]\":c&&c in Object(e)?function(e){var t=a.call(e,c),r=e[c];try{e[c]=void 0;var n=!0}catch(e){}var o=s.call(e);return n&&(t?e[c]=r:delete e[c]),o}(e):function(e){return s.call(e)}(e)}(e);return\"[object Function]\"==t||\"[object GeneratorFunction]\"==t||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}}).call(this)}).call(this,void 0!==r.g?r.g:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],447:[function(e,t,r){\"use strict\";t.exports=function(e){return null==e}},{}],448:[function(e,t,r){\"use strict\";t.exports=function(e){return void 0===e}},{}],449:[function(e,t,n){(function(e){(function(){\"use strict\";var r=/^\\[object .+?Constructor\\]$/,n=\"object\"==typeof e&&e&&e.Object===Object&&e,o=\"object\"==typeof self&&self&&self.Object===Object&&self,i=n||o||Function(\"return this\")();function a(e,t){return!(!e||!e.length)&&function(e,t){if(t!=t)return function(e,t){for(var r=e.length,n=-1;++n<r;)if(t(e[n],n,e))return n;return-1}(e,s);for(var r=-1,n=e.length;++r<n;)if(e[r]===t)return r;return-1}(e,t)>-1}function s(e){return e!=e}function l(e,t){return e.has(t)}function c(e){var t=-1,r=Array(e.size);return e.forEach((function(e){r[++t]=e})),r}var u,d=Array.prototype,f=Function.prototype,h=Object.prototype,p=i[\"__core-js_shared__\"],m=(u=/[^.]+$/.exec(p&&p.keys&&p.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+u:\"\",g=f.toString,v=h.hasOwnProperty,b=h.toString,y=RegExp(\"^\"+g.call(v).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),w=d.splice,x=R(i,\"Map\"),S=R(i,\"Set\"),C=R(Object,\"create\");function k(e){var t=-1,r=e?e.length:0;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function E(e){var t=-1,r=e?e.length:0;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function O(e){var t=-1,r=e?e.length:0;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function A(e){var t=-1,r=e?e.length:0;for(this.__data__=new O;++t<r;)this.add(e[t])}function T(e,t){for(var r,n,o=e.length;o--;)if((r=e[o][0])===(n=t)||r!=r&&n!=n)return o;return-1}function j(e){return!(!_(e)||(t=e,m&&m in t))&&(function(e){var t=_(e)?b.call(e):\"\";return\"[object Function]\"==t||\"[object GeneratorFunction]\"==t}(e)||function(e){var t=!1;if(null!=e&&\"function\"!=typeof e.toString)try{t=!!(e+\"\")}catch(e){}return t}(e)?y:r).test(function(e){if(null!=e){try{return g.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}(e));var t}k.prototype.clear=function(){this.__data__=C?C(null):{}},k.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},k.prototype.get=function(e){var t=this.__data__;if(C){var r=t[e];return\"__lodash_hash_undefined__\"===r?void 0:r}return v.call(t,e)?t[e]:void 0},k.prototype.has=function(e){var t=this.__data__;return C?void 0!==t[e]:v.call(t,e)},k.prototype.set=function(e,t){return this.__data__[e]=C&&void 0===t?\"__lodash_hash_undefined__\":t,this},E.prototype.clear=function(){this.__data__=[]},E.prototype.delete=function(e){var t=this.__data__,r=T(t,e);return!(r<0||(r==t.length-1?t.pop():w.call(t,r,1),0))},E.prototype.get=function(e){var t=this.__data__,r=T(t,e);return r<0?void 0:t[r][1]},E.prototype.has=function(e){return T(this.__data__,e)>-1},E.prototype.set=function(e,t){var r=this.__data__,n=T(r,e);return n<0?r.push([e,t]):r[n][1]=t,this},O.prototype.clear=function(){this.__data__={hash:new k,map:new(x||E),string:new k}},O.prototype.delete=function(e){return M(this,e).delete(e)},O.prototype.get=function(e){return M(this,e).get(e)},O.prototype.has=function(e){return M(this,e).has(e)},O.prototype.set=function(e,t){return M(this,e).set(e,t),this},A.prototype.add=A.prototype.push=function(e){return this.__data__.set(e,\"__lodash_hash_undefined__\"),this},A.prototype.has=function(e){return this.__data__.has(e)};var P=S&&1/c(new S([,-0]))[1]==1/0?function(e){return new S(e)}:function(){};function M(e,t){var r,n,o=e.__data__;return(\"string\"==(n=typeof(r=t))||\"number\"==n||\"symbol\"==n||\"boolean\"==n?\"__proto__\"!==r:null===r)?o[\"string\"==typeof t?\"string\":\"hash\"]:o.map}function R(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return j(r)?r:void 0}function _(e){var t=typeof e;return!!e&&(\"object\"==t||\"function\"==t)}t.exports=function(e){return e&&e.length?function(e,t,r){var n=-1,o=a,i=e.length,s=!0,u=[],d=u;if(i>=200){var f=P(e);if(f)return c(f);s=!1,o=l,d=new A}else d=u;e:for(;++n<i;){var h=e[n],p=h;if(h=0!==h?h:0,s&&p==p){for(var m=d.length;m--;)if(d[m]===p)continue e;u.push(h)}else o(d,p,r)||(d!==u&&d.push(p),u.push(h))}return u}(e):[]}}).call(this)}).call(this,void 0!==r.g?r.g:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],450:[function(e,t,r){\"use strict\";var n=e(\"inherits\"),o=e(\"hash-base\"),i=e(\"safe-buffer\").Buffer,a=new Array(16);function s(){o.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878}function l(e,t){return e<<t|e>>>32-t}function c(e,t,r,n,o,i,a){return l(e+(t&r|~t&n)+o+i|0,a)+t|0}function u(e,t,r,n,o,i,a){return l(e+(t&n|r&~n)+o+i|0,a)+t|0}function d(e,t,r,n,o,i,a){return l(e+(t^r^n)+o+i|0,a)+t|0}function f(e,t,r,n,o,i,a){return l(e+(r^(t|~n))+o+i|0,a)+t|0}n(s,o),s.prototype._update=function(){for(var e=a,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);var r=this._a,n=this._b,o=this._c,i=this._d;r=c(r,n,o,i,e[0],3614090360,7),i=c(i,r,n,o,e[1],3905402710,12),o=c(o,i,r,n,e[2],606105819,17),n=c(n,o,i,r,e[3],3250441966,22),r=c(r,n,o,i,e[4],4118548399,7),i=c(i,r,n,o,e[5],1200080426,12),o=c(o,i,r,n,e[6],2821735955,17),n=c(n,o,i,r,e[7],4249261313,22),r=c(r,n,o,i,e[8],1770035416,7),i=c(i,r,n,o,e[9],2336552879,12),o=c(o,i,r,n,e[10],4294925233,17),n=c(n,o,i,r,e[11],2304563134,22),r=c(r,n,o,i,e[12],1804603682,7),i=c(i,r,n,o,e[13],4254626195,12),o=c(o,i,r,n,e[14],2792965006,17),r=u(r,n=c(n,o,i,r,e[15],1236535329,22),o,i,e[1],4129170786,5),i=u(i,r,n,o,e[6],3225465664,9),o=u(o,i,r,n,e[11],643717713,14),n=u(n,o,i,r,e[0],3921069994,20),r=u(r,n,o,i,e[5],3593408605,5),i=u(i,r,n,o,e[10],38016083,9),o=u(o,i,r,n,e[15],3634488961,14),n=u(n,o,i,r,e[4],3889429448,20),r=u(r,n,o,i,e[9],568446438,5),i=u(i,r,n,o,e[14],3275163606,9),o=u(o,i,r,n,e[3],4107603335,14),n=u(n,o,i,r,e[8],1163531501,20),r=u(r,n,o,i,e[13],2850285829,5),i=u(i,r,n,o,e[2],4243563512,9),o=u(o,i,r,n,e[7],1735328473,14),r=d(r,n=u(n,o,i,r,e[12],2368359562,20),o,i,e[5],4294588738,4),i=d(i,r,n,o,e[8],2272392833,11),o=d(o,i,r,n,e[11],1839030562,16),n=d(n,o,i,r,e[14],4259657740,23),r=d(r,n,o,i,e[1],2763975236,4),i=d(i,r,n,o,e[4],1272893353,11),o=d(o,i,r,n,e[7],4139469664,16),n=d(n,o,i,r,e[10],3200236656,23),r=d(r,n,o,i,e[13],681279174,4),i=d(i,r,n,o,e[0],3936430074,11),o=d(o,i,r,n,e[3],3572445317,16),n=d(n,o,i,r,e[6],76029189,23),r=d(r,n,o,i,e[9],3654602809,4),i=d(i,r,n,o,e[12],3873151461,11),o=d(o,i,r,n,e[15],530742520,16),r=f(r,n=d(n,o,i,r,e[2],3299628645,23),o,i,e[0],4096336452,6),i=f(i,r,n,o,e[7],1126891415,10),o=f(o,i,r,n,e[14],2878612391,15),n=f(n,o,i,r,e[5],4237533241,21),r=f(r,n,o,i,e[12],1700485571,6),i=f(i,r,n,o,e[3],2399980690,10),o=f(o,i,r,n,e[10],4293915773,15),n=f(n,o,i,r,e[1],2240044497,21),r=f(r,n,o,i,e[8],1873313359,6),i=f(i,r,n,o,e[15],4264355552,10),o=f(o,i,r,n,e[6],2734768916,15),n=f(n,o,i,r,e[13],1309151649,21),r=f(r,n,o,i,e[4],4149444226,6),i=f(i,r,n,o,e[11],3174756917,10),o=f(o,i,r,n,e[2],718787259,15),n=f(n,o,i,r,e[9],3951481745,21),this._a=this._a+r|0,this._b=this._b+n|0,this._c=this._c+o|0,this._d=this._d+i|0},s.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=i.allocUnsafe(16);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e},t.exports=s},{\"hash-base\":425,inherits:440,\"safe-buffer\":494}],451:[function(e,t,r){\"use strict\";var n=e(\"bn.js\"),o=e(\"brorand\");function i(e){this.rand=e||new o.Rand}t.exports=i,i.create=function(e){return new i(e)},i.prototype._randbelow=function(e){var t=e.bitLength(),r=Math.ceil(t/8);do{var o=new n(this.rand.generate(r))}while(o.cmp(e)>=0);return o},i.prototype._randrange=function(e,t){var r=t.sub(e);return e.add(this._randbelow(r))},i.prototype.test=function(e,t,r){var o=e.bitLength(),i=n.mont(e),a=new n(1).toRed(i);t||(t=Math.max(1,o/48|0));for(var s=e.subn(1),l=0;!s.testn(l);l++);for(var c=e.shrn(l),u=s.toRed(i);t>0;t--){var d=this._randrange(new n(2),s);r&&r(d);var f=d.toRed(i).redPow(c);if(0!==f.cmp(a)&&0!==f.cmp(u)){for(var h=1;h<l;h++){if(0===(f=f.redSqr()).cmp(a))return!1;if(0===f.cmp(u))break}if(h===l)return!1}}return!0},i.prototype.getDivisor=function(e,t){var r=e.bitLength(),o=n.mont(e),i=new n(1).toRed(o);t||(t=Math.max(1,r/48|0));for(var a=e.subn(1),s=0;!a.testn(s);s++);for(var l=e.shrn(s),c=a.toRed(o);t>0;t--){var u=this._randrange(new n(2),a),d=e.gcd(u);if(0!==d.cmpn(1))return d;var f=u.toRed(o).redPow(l);if(0!==f.cmp(i)&&0!==f.cmp(c)){for(var h=1;h<s;h++){if(0===(f=f.redSqr()).cmp(i))return f.fromRed().subn(1).gcd(e);if(0===f.cmp(c))break}if(h===s)return(f=f.redSqr()).fromRed().subn(1).gcd(e)}}return!1}},{\"bn.js\":452,brorand:187}],452:[function(e,t,r){arguments[4][184][0].apply(r,arguments)},{buffer:188,dup:184}],453:[function(e,t,r){\"use strict\";function n(e,t){if(!e)throw new Error(t||\"Assertion failed\")}t.exports=n,n.equal=function(e,t,r){if(e!=t)throw new Error(r||\"Assertion failed: \"+e+\" != \"+t)}},{}],454:[function(e,t,r){\"use strict\";var n=r;function o(e){return 1===e.length?\"0\"+e:e}function i(e){for(var t=\"\",r=0;r<e.length;r++)t+=o(e[r].toString(16));return t}n.toArray=function(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var r=[];if(\"string\"!=typeof e){for(var n=0;n<e.length;n++)r[n]=0|e[n];return r}if(\"hex\"===t)for((e=e.replace(/[^a-z0-9]+/gi,\"\")).length%2!=0&&(e=\"0\"+e),n=0;n<e.length;n+=2)r.push(parseInt(e[n]+e[n+1],16));else for(n=0;n<e.length;n++){var o=e.charCodeAt(n),i=o>>8,a=255&o;i?r.push(i,a):r.push(a)}return r},n.zero2=o,n.toHex=i,n.encode=function(e,t){return\"hex\"===t?i(e):e}},{}],455:[function(e,t,r){t.exports={\"2.16.840.1.101.3.4.1.1\":\"aes-128-ecb\",\"2.16.840.1.101.3.4.1.2\":\"aes-128-cbc\",\"2.16.840.1.101.3.4.1.3\":\"aes-128-ofb\",\"2.16.840.1.101.3.4.1.4\":\"aes-128-cfb\",\"2.16.840.1.101.3.4.1.21\":\"aes-192-ecb\",\"2.16.840.1.101.3.4.1.22\":\"aes-192-cbc\",\"2.16.840.1.101.3.4.1.23\":\"aes-192-ofb\",\"2.16.840.1.101.3.4.1.24\":\"aes-192-cfb\",\"2.16.840.1.101.3.4.1.41\":\"aes-256-ecb\",\"2.16.840.1.101.3.4.1.42\":\"aes-256-cbc\",\"2.16.840.1.101.3.4.1.43\":\"aes-256-ofb\",\"2.16.840.1.101.3.4.1.44\":\"aes-256-cfb\"}},{}],456:[function(e,t,r){\"use strict\";var n=e(\"asn1.js\");r.certificate=e(\"./certificate\");var o=n.define(\"RSAPrivateKey\",(function(){this.seq().obj(this.key(\"version\").int(),this.key(\"modulus\").int(),this.key(\"publicExponent\").int(),this.key(\"privateExponent\").int(),this.key(\"prime1\").int(),this.key(\"prime2\").int(),this.key(\"exponent1\").int(),this.key(\"exponent2\").int(),this.key(\"coefficient\").int())}));r.RSAPrivateKey=o;var i=n.define(\"RSAPublicKey\",(function(){this.seq().obj(this.key(\"modulus\").int(),this.key(\"publicExponent\").int())}));r.RSAPublicKey=i;var a=n.define(\"SubjectPublicKeyInfo\",(function(){this.seq().obj(this.key(\"algorithm\").use(s),this.key(\"subjectPublicKey\").bitstr())}));r.PublicKey=a;var s=n.define(\"AlgorithmIdentifier\",(function(){this.seq().obj(this.key(\"algorithm\").objid(),this.key(\"none\").null_().optional(),this.key(\"curve\").objid().optional(),this.key(\"params\").seq().obj(this.key(\"p\").int(),this.key(\"q\").int(),this.key(\"g\").int()).optional())})),l=n.define(\"PrivateKeyInfo\",(function(){this.seq().obj(this.key(\"version\").int(),this.key(\"algorithm\").use(s),this.key(\"subjectPrivateKey\").octstr())}));r.PrivateKey=l;var c=n.define(\"EncryptedPrivateKeyInfo\",(function(){this.seq().obj(this.key(\"algorithm\").seq().obj(this.key(\"id\").objid(),this.key(\"decrypt\").seq().obj(this.key(\"kde\").seq().obj(this.key(\"id\").objid(),this.key(\"kdeparams\").seq().obj(this.key(\"salt\").octstr(),this.key(\"iters\").int())),this.key(\"cipher\").seq().obj(this.key(\"algo\").objid(),this.key(\"iv\").octstr()))),this.key(\"subjectPrivateKey\").octstr())}));r.EncryptedPrivateKey=c;var u=n.define(\"DSAPrivateKey\",(function(){this.seq().obj(this.key(\"version\").int(),this.key(\"p\").int(),this.key(\"q\").int(),this.key(\"g\").int(),this.key(\"pub_key\").int(),this.key(\"priv_key\").int())}));r.DSAPrivateKey=u,r.DSAparam=n.define(\"DSAparam\",(function(){this.int()}));var d=n.define(\"ECPrivateKey\",(function(){this.seq().obj(this.key(\"version\").int(),this.key(\"privateKey\").octstr(),this.key(\"parameters\").optional().explicit(0).use(f),this.key(\"publicKey\").optional().explicit(1).bitstr())}));r.ECPrivateKey=d;var f=n.define(\"ECParameters\",(function(){this.choice({namedCurve:this.objid()})}));r.signature=n.define(\"signature\",(function(){this.seq().obj(this.key(\"r\").int(),this.key(\"s\").int())}))},{\"./certificate\":457,\"asn1.js\":170}],457:[function(e,t,r){\"use strict\";var n=e(\"asn1.js\"),o=n.define(\"Time\",(function(){this.choice({utcTime:this.utctime(),generalTime:this.gentime()})})),i=n.define(\"AttributeTypeValue\",(function(){this.seq().obj(this.key(\"type\").objid(),this.key(\"value\").any())})),a=n.define(\"AlgorithmIdentifier\",(function(){this.seq().obj(this.key(\"algorithm\").objid(),this.key(\"parameters\").optional(),this.key(\"curve\").objid().optional())})),s=n.define(\"SubjectPublicKeyInfo\",(function(){this.seq().obj(this.key(\"algorithm\").use(a),this.key(\"subjectPublicKey\").bitstr())})),l=n.define(\"RelativeDistinguishedName\",(function(){this.setof(i)})),c=n.define(\"RDNSequence\",(function(){this.seqof(l)})),u=n.define(\"Name\",(function(){this.choice({rdnSequence:this.use(c)})})),d=n.define(\"Validity\",(function(){this.seq().obj(this.key(\"notBefore\").use(o),this.key(\"notAfter\").use(o))})),f=n.define(\"Extension\",(function(){this.seq().obj(this.key(\"extnID\").objid(),this.key(\"critical\").bool().def(!1),this.key(\"extnValue\").octstr())})),h=n.define(\"TBSCertificate\",(function(){this.seq().obj(this.key(\"version\").explicit(0).int().optional(),this.key(\"serialNumber\").int(),this.key(\"signature\").use(a),this.key(\"issuer\").use(u),this.key(\"validity\").use(d),this.key(\"subject\").use(u),this.key(\"subjectPublicKeyInfo\").use(s),this.key(\"issuerUniqueID\").implicit(1).bitstr().optional(),this.key(\"subjectUniqueID\").implicit(2).bitstr().optional(),this.key(\"extensions\").explicit(3).seqof(f).optional())})),p=n.define(\"X509Certificate\",(function(){this.seq().obj(this.key(\"tbsCertificate\").use(h),this.key(\"signatureAlgorithm\").use(a),this.key(\"signatureValue\").bitstr())}));t.exports=p},{\"asn1.js\":170}],458:[function(e,t,r){\"use strict\";var n=/Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r+/=]+)[\\n\\r]+/m,o=/^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m,i=/^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r+/=]+)-----END \\1-----$/m,a=e(\"evp_bytestokey\"),s=e(\"browserify-aes\"),l=e(\"safe-buffer\").Buffer;t.exports=function(e,t){var r,c=e.toString(),u=c.match(n);if(u){var d=\"aes\"+u[1],f=l.from(u[2],\"hex\"),h=l.from(u[3].replace(/[\\r\\n]/g,\"\"),\"base64\"),p=a(t,f.slice(0,8),parseInt(u[1],10)).key,m=[],g=s.createDecipheriv(d,p,f);m.push(g.update(h)),m.push(g.final()),r=l.concat(m)}else{var v=c.match(i);r=l.from(v[2].replace(/[\\r\\n]/g,\"\"),\"base64\")}return{tag:c.match(o)[1],data:r}}},{\"browserify-aes\":191,evp_bytestokey:423,\"safe-buffer\":494}],459:[function(e,t,r){\"use strict\";var n=e(\"./asn1\"),o=e(\"./aesid.json\"),i=e(\"./fixProc\"),a=e(\"browserify-aes\"),s=e(\"pbkdf2\"),l=e(\"safe-buffer\").Buffer;function c(e){var t;\"object\"!=typeof e||l.isBuffer(e)||(t=e.passphrase,e=e.key),\"string\"==typeof e&&(e=l.from(e));var r,c,u=i(e,t),d=u.tag,f=u.data;switch(d){case\"CERTIFICATE\":c=n.certificate.decode(f,\"der\").tbsCertificate.subjectPublicKeyInfo;case\"PUBLIC KEY\":switch(c||(c=n.PublicKey.decode(f,\"der\")),r=c.algorithm.algorithm.join(\".\")){case\"1.2.840.113549.1.1.1\":return n.RSAPublicKey.decode(c.subjectPublicKey.data,\"der\");case\"1.2.840.10045.2.1\":return c.subjectPrivateKey=c.subjectPublicKey,{type:\"ec\",data:c};case\"1.2.840.10040.4.1\":return c.algorithm.params.pub_key=n.DSAparam.decode(c.subjectPublicKey.data,\"der\"),{type:\"dsa\",data:c.algorithm.params};default:throw new Error(\"unknown key id \"+r)}case\"ENCRYPTED PRIVATE KEY\":f=function(e,t){var r=e.algorithm.decrypt.kde.kdeparams.salt,n=parseInt(e.algorithm.decrypt.kde.kdeparams.iters.toString(),10),i=o[e.algorithm.decrypt.cipher.algo.join(\".\")],c=e.algorithm.decrypt.cipher.iv,u=e.subjectPrivateKey,d=parseInt(i.split(\"-\")[1],10)/8,f=s.pbkdf2Sync(t,r,n,d,\"sha1\"),h=a.createDecipheriv(i,f,c),p=[];return p.push(h.update(u)),p.push(h.final()),l.concat(p)}(f=n.EncryptedPrivateKey.decode(f,\"der\"),t);case\"PRIVATE KEY\":switch(r=(c=n.PrivateKey.decode(f,\"der\")).algorithm.algorithm.join(\".\")){case\"1.2.840.113549.1.1.1\":return n.RSAPrivateKey.decode(c.subjectPrivateKey,\"der\");case\"1.2.840.10045.2.1\":return{curve:c.algorithm.curve,privateKey:n.ECPrivateKey.decode(c.subjectPrivateKey,\"der\").privateKey};case\"1.2.840.10040.4.1\":return c.algorithm.params.priv_key=n.DSAparam.decode(c.subjectPrivateKey,\"der\"),{type:\"dsa\",params:c.algorithm.params};default:throw new Error(\"unknown key id \"+r)}case\"RSA PUBLIC KEY\":return n.RSAPublicKey.decode(f,\"der\");case\"RSA PRIVATE KEY\":return n.RSAPrivateKey.decode(f,\"der\");case\"DSA PRIVATE KEY\":return{type:\"dsa\",params:n.DSAPrivateKey.decode(f,\"der\")};case\"EC PRIVATE KEY\":return{curve:(f=n.ECPrivateKey.decode(f,\"der\")).parameters.value,privateKey:f.privateKey};default:throw new Error(\"unknown key type \"+d)}}t.exports=c,c.signature=n.signature},{\"./aesid.json\":455,\"./asn1\":456,\"./fixProc\":458,\"browserify-aes\":191,pbkdf2:460,\"safe-buffer\":494}],460:[function(e,t,r){\"use strict\";r.pbkdf2=e(\"./lib/async\"),r.pbkdf2Sync=e(\"./lib/sync\")},{\"./lib/async\":461,\"./lib/sync\":464}],461:[function(e,t,n){(function(r){(function(){\"use strict\";var n,o,i=e(\"safe-buffer\").Buffer,a=e(\"./precondition\"),s=e(\"./default-encoding\"),l=e(\"./sync\"),c=e(\"./to-buffer\"),u=r.crypto&&r.crypto.subtle,d={sha:\"SHA-1\",\"sha-1\":\"SHA-1\",sha1:\"SHA-1\",sha256:\"SHA-256\",\"sha-256\":\"SHA-256\",sha384:\"SHA-384\",\"sha-384\":\"SHA-384\",\"sha-512\":\"SHA-512\",sha512:\"SHA-512\"},f=[];function h(){return o||(o=r.process&&r.process.nextTick?r.process.nextTick:r.queueMicrotask?r.queueMicrotask:r.setImmediate?r.setImmediate:r.setTimeout)}function p(e,t,r,n,o){return u.importKey(\"raw\",e,{name:\"PBKDF2\"},!1,[\"deriveBits\"]).then((function(e){return u.deriveBits({name:\"PBKDF2\",salt:t,iterations:r,hash:{name:o}},e,n<<3)})).then((function(e){return i.from(e)}))}t.exports=function(e,t,o,m,g,v){\"function\"==typeof g&&(v=g,g=void 0);var b=d[(g=g||\"sha1\").toLowerCase()];if(b&&\"function\"==typeof r.Promise){if(a(o,m),e=c(e,s,\"Password\"),t=c(t,s,\"Salt\"),\"function\"!=typeof v)throw new Error(\"No callback provided to pbkdf2\");!function(e,t){e.then((function(e){h()((function(){t(null,e)}))}),(function(e){h()((function(){t(e)}))}))}(function(e){if(r.process&&!r.process.browser)return Promise.resolve(!1);if(!u||!u.importKey||!u.deriveBits)return Promise.resolve(!1);if(void 0!==f[e])return f[e];var t=p(n=n||i.alloc(8),n,10,128,e).then((function(){return!0})).catch((function(){return!1}));return f[e]=t,t}(b).then((function(r){return r?p(e,t,o,m,b):l(e,t,o,m,g)})),v)}else h()((function(){var r;try{r=l(e,t,o,m,g)}catch(e){return v(e)}v(null,r)}))}}).call(this)}).call(this,void 0!==r.g?r.g:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"./default-encoding\":462,\"./precondition\":463,\"./sync\":464,\"./to-buffer\":465,\"safe-buffer\":494}],462:[function(e,t,n){(function(e,r){(function(){\"use strict\";var n;n=r.process&&r.process.browser?\"utf-8\":r.process&&r.process.version?parseInt(e.version.split(\".\")[0].slice(1),10)>=6?\"utf-8\":\"binary\":\"utf-8\",t.exports=n}).call(this)}).call(this,e(\"_process\"),void 0!==r.g?r.g:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{_process:467}],463:[function(e,t,r){\"use strict\";var n=Math.pow(2,30)-1;t.exports=function(e,t){if(\"number\"!=typeof e)throw new TypeError(\"Iterations not a number\");if(e<0)throw new TypeError(\"Bad iterations\");if(\"number\"!=typeof t)throw new TypeError(\"Key length not a number\");if(t<0||t>n||t!=t)throw new TypeError(\"Bad key length\")}},{}],464:[function(e,t,r){\"use strict\";var n=e(\"create-hash/md5\"),o=e(\"ripemd160\"),i=e(\"sha.js\"),a=e(\"safe-buffer\").Buffer,s=e(\"./precondition\"),l=e(\"./default-encoding\"),c=e(\"./to-buffer\"),u=a.alloc(128),d={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20};function f(e,t,r){var s=function(e){return\"rmd160\"===e||\"ripemd160\"===e?function(e){return(new o).update(e).digest()}:\"md5\"===e?n:function(t){return i(e).update(t).digest()}}(e),l=\"sha512\"===e||\"sha384\"===e?128:64;t.length>l?t=s(t):t.length<l&&(t=a.concat([t,u],l));for(var c=a.allocUnsafe(l+d[e]),f=a.allocUnsafe(l+d[e]),h=0;h<l;h++)c[h]=54^t[h],f[h]=92^t[h];var p=a.allocUnsafe(l+r+4);c.copy(p,0,0,l),this.ipad1=p,this.ipad2=c,this.opad=f,this.alg=e,this.blocksize=l,this.hash=s,this.size=d[e]}f.prototype.run=function(e,t){return e.copy(t,this.blocksize),this.hash(t).copy(this.opad,this.blocksize),this.hash(this.opad)},t.exports=function(e,t,r,n,o){s(r,n);var i=new f(o=o||\"sha1\",e=c(e,l,\"Password\"),(t=c(t,l,\"Salt\")).length),u=a.allocUnsafe(n),h=a.allocUnsafe(t.length+4);t.copy(h,0,0,t.length);for(var p=0,m=d[o],g=Math.ceil(n/m),v=1;v<=g;v++){h.writeUInt32BE(v,t.length);for(var b=i.run(h,i.ipad1),y=b,w=1;w<r;w++){y=i.run(y,i.ipad2);for(var x=0;x<m;x++)b[x]^=y[x]}b.copy(u,p),p+=m}return u}},{\"./default-encoding\":462,\"./precondition\":463,\"./to-buffer\":465,\"create-hash/md5\":387,ripemd160:493,\"safe-buffer\":494,\"sha.js\":498}],465:[function(e,t,r){\"use strict\";var n=e(\"safe-buffer\").Buffer;t.exports=function(e,t,r){if(n.isBuffer(e))return e;if(\"string\"==typeof e)return n.from(e,t);if(ArrayBuffer.isView(e))return n.from(e.buffer);throw new TypeError(r+\" must be a string, a Buffer, a typed array or a DataView\")}},{\"safe-buffer\":494}],466:[function(e,t,r){(function(e){(function(){\"use strict\";void 0===e||!e.version||0===e.version.indexOf(\"v0.\")||0===e.version.indexOf(\"v1.\")&&0!==e.version.indexOf(\"v1.8.\")?t.exports={nextTick:function(t,r,n,o){if(\"function\"!=typeof t)throw new TypeError('\"callback\" argument must be a function');var i,a,s=arguments.length;switch(s){case 0:case 1:return e.nextTick(t);case 2:return e.nextTick((function(){t.call(null,r)}));case 3:return e.nextTick((function(){t.call(null,r,n)}));case 4:return e.nextTick((function(){t.call(null,r,n,o)}));default:for(i=new Array(s-1),a=0;a<i.length;)i[a++]=arguments[a];return e.nextTick((function(){t.apply(null,i)}))}}}:t.exports=e}).call(this)}).call(this,e(\"_process\"))},{_process:467}],467:[function(e,t,r){\"use strict\";var n,o,i=t.exports={};function a(){throw new Error(\"setTimeout has not been defined\")}function s(){throw new Error(\"clearTimeout has not been defined\")}function l(e){if(n===setTimeout)return setTimeout(e,0);if((n===a||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n=\"function\"==typeof setTimeout?setTimeout:a}catch(e){n=a}try{o=\"function\"==typeof clearTimeout?clearTimeout:s}catch(e){o=s}}();var c,u=[],d=!1,f=-1;function h(){d&&c&&(d=!1,c.length?u=c.concat(u):f=-1,u.length&&p())}function p(){if(!d){var e=l(h);d=!0;for(var t=u.length;t;){for(c=u,u=[];++f<t;)c&&c[f].run();f=-1,t=u.length}c=null,d=!1,function(e){if(o===clearTimeout)return clearTimeout(e);if((o===s||!o)&&clearTimeout)return o=clearTimeout,clearTimeout(e);try{o(e)}catch(t){try{return o.call(null,e)}catch(t){return o.call(this,e)}}}(e)}}function m(e,t){this.fun=e,this.array=t}function g(){}i.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];u.push(new m(e,t)),1!==u.length||d||l(p)},m.prototype.run=function(){this.fun.apply(null,this.array)},i.title=\"browser\",i.browser=!0,i.env={},i.argv=[],i.version=\"\",i.versions={},i.on=g,i.addListener=g,i.once=g,i.off=g,i.removeListener=g,i.removeAllListeners=g,i.emit=g,i.prependListener=g,i.prependOnceListener=g,i.listeners=function(e){return[]},i.binding=function(e){throw new Error(\"process.binding is not supported\")},i.cwd=function(){return\"/\"},i.chdir=function(e){throw new Error(\"process.chdir is not supported\")},i.umask=function(){return 0}},{}],468:[function(e,t,r){\"use strict\";r.publicEncrypt=e(\"./publicEncrypt\"),r.privateDecrypt=e(\"./privateDecrypt\"),r.privateEncrypt=function(e,t){return r.publicEncrypt(e,t,!0)},r.publicDecrypt=function(e,t){return r.privateDecrypt(e,t,!0)}},{\"./privateDecrypt\":471,\"./publicEncrypt\":472}],469:[function(e,t,r){\"use strict\";var n=e(\"create-hash\"),o=e(\"safe-buffer\").Buffer;function i(e){var t=o.allocUnsafe(4);return t.writeUInt32BE(e,0),t}t.exports=function(e,t){for(var r,a=o.alloc(0),s=0;a.length<t;)r=i(s++),a=o.concat([a,n(\"sha1\").update(e).update(r).digest()]);return a.slice(0,t)}},{\"create-hash\":386,\"safe-buffer\":494}],470:[function(e,t,r){arguments[4][184][0].apply(r,arguments)},{buffer:188,dup:184}],471:[function(e,t,r){\"use strict\";var n=e(\"parse-asn1\"),o=e(\"./mgf\"),i=e(\"./xor\"),a=e(\"bn.js\"),s=e(\"browserify-rsa\"),l=e(\"create-hash\"),c=e(\"./withPublic\"),u=e(\"safe-buffer\").Buffer;t.exports=function(e,t,r){var d;d=e.padding?e.padding:r?1:4;var f,h=n(e),p=h.modulus.byteLength();if(t.length>p||new a(t).cmp(h.modulus)>=0)throw new Error(\"decryption error\");f=r?c(new a(t),h):s(t,h);var m=u.alloc(p-f.length);if(f=u.concat([m,f],p),4===d)return function(e,t){var r=e.modulus.byteLength(),n=l(\"sha1\").update(u.alloc(0)).digest(),a=n.length;if(0!==t[0])throw new Error(\"decryption error\");var s=t.slice(1,a+1),c=t.slice(a+1),d=i(s,o(c,a)),f=i(c,o(d,r-a-1));if(function(e,t){e=u.from(e),t=u.from(t);var r=0,n=e.length;e.length!==t.length&&(r++,n=Math.min(e.length,t.length));for(var o=-1;++o<n;)r+=e[o]^t[o];return r}(n,f.slice(0,a)))throw new Error(\"decryption error\");for(var h=a;0===f[h];)h++;if(1!==f[h++])throw new Error(\"decryption error\");return f.slice(h)}(h,f);if(1===d)return function(e,t,r){for(var n=t.slice(0,2),o=2,i=0;0!==t[o++];)if(o>=t.length){i++;break}var a=t.slice(2,o-1);if((\"0002\"!==n.toString(\"hex\")&&!r||\"0001\"!==n.toString(\"hex\")&&r)&&i++,a.length<8&&i++,i)throw new Error(\"decryption error\");return t.slice(o)}(0,f,r);if(3===d)return f;throw new Error(\"unknown padding\")}},{\"./mgf\":469,\"./withPublic\":473,\"./xor\":474,\"bn.js\":470,\"browserify-rsa\":209,\"create-hash\":386,\"parse-asn1\":459,\"safe-buffer\":494}],472:[function(e,t,r){\"use strict\";var n=e(\"parse-asn1\"),o=e(\"randombytes\"),i=e(\"create-hash\"),a=e(\"./mgf\"),s=e(\"./xor\"),l=e(\"bn.js\"),c=e(\"./withPublic\"),u=e(\"browserify-rsa\"),d=e(\"safe-buffer\").Buffer;t.exports=function(e,t,r){var f;f=e.padding?e.padding:r?1:4;var h,p=n(e);if(4===f)h=function(e,t){var r=e.modulus.byteLength(),n=t.length,c=i(\"sha1\").update(d.alloc(0)).digest(),u=c.length,f=2*u;if(n>r-f-2)throw new Error(\"message too long\");var h=d.alloc(r-n-f-2),p=r-u-1,m=o(u),g=s(d.concat([c,h,d.alloc(1,1),t],p),a(m,p)),v=s(m,a(g,u));return new l(d.concat([d.alloc(1),v,g],r))}(p,t);else if(1===f)h=function(e,t,r){var n,i=t.length,a=e.modulus.byteLength();if(i>a-11)throw new Error(\"message too long\");return n=r?d.alloc(a-i-3,255):function(e){for(var t,r=d.allocUnsafe(e),n=0,i=o(2*e),a=0;n<e;)a===i.length&&(i=o(2*e),a=0),(t=i[a++])&&(r[n++]=t);return r}(a-i-3),new l(d.concat([d.from([0,r?1:2]),n,d.alloc(1),t],a))}(p,t,r);else{if(3!==f)throw new Error(\"unknown padding\");if((h=new l(t)).cmp(p.modulus)>=0)throw new Error(\"data too long for modulus\")}return r?u(h,p):c(h,p)}},{\"./mgf\":469,\"./withPublic\":473,\"./xor\":474,\"bn.js\":470,\"browserify-rsa\":209,\"create-hash\":386,\"parse-asn1\":459,randombytes:475,\"safe-buffer\":494}],473:[function(e,t,r){\"use strict\";var n=e(\"bn.js\"),o=e(\"safe-buffer\").Buffer;t.exports=function(e,t){return o.from(e.toRed(n.mont(t.modulus)).redPow(new n(t.publicExponent)).fromRed().toArray())}},{\"bn.js\":470,\"safe-buffer\":494}],474:[function(e,t,r){\"use strict\";t.exports=function(e,t){for(var r=e.length,n=-1;++n<r;)e[n]^=t[n];return e}},{}],475:[function(e,t,n){(function(r,n){(function(){\"use strict\";var o=e(\"safe-buffer\").Buffer,i=n.crypto||n.msCrypto;i&&i.getRandomValues?t.exports=function(e,t){if(e>4294967295)throw new RangeError(\"requested too many random bytes\");var n=o.allocUnsafe(e);if(e>0)if(e>65536)for(var a=0;a<e;a+=65536)i.getRandomValues(n.slice(a,a+65536));else i.getRandomValues(n);return\"function\"==typeof t?r.nextTick((function(){t(null,n)})):n}:t.exports=function(){throw new Error(\"Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11\")}}).call(this)}).call(this,e(\"_process\"),void 0!==r.g?r.g:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{_process:467,\"safe-buffer\":494}],476:[function(e,t,n){(function(t,r){(function(){\"use strict\";function o(){throw new Error(\"secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11\")}var i=e(\"safe-buffer\"),a=e(\"randombytes\"),s=i.Buffer,l=i.kMaxLength,c=r.crypto||r.msCrypto,u=Math.pow(2,32)-1;function d(e,t){if(\"number\"!=typeof e||e!=e)throw new TypeError(\"offset must be a number\");if(e>u||e<0)throw new TypeError(\"offset must be a uint32\");if(e>l||e>t)throw new RangeError(\"offset out of range\")}function f(e,t,r){if(\"number\"!=typeof e||e!=e)throw new TypeError(\"size must be a number\");if(e>u||e<0)throw new TypeError(\"size must be a uint32\");if(e+t>r||e>l)throw new RangeError(\"buffer too small\")}function h(e,r,n,o){if(t.browser){var i=e.buffer,s=new Uint8Array(i,r,n);return c.getRandomValues(s),o?void t.nextTick((function(){o(null,e)})):e}if(!o)return a(n).copy(e,r),e;a(n,(function(t,n){if(t)return o(t);n.copy(e,r),o(null,e)}))}c&&c.getRandomValues||!t.browser?(n.randomFill=function(e,t,n,o){if(!(s.isBuffer(e)||e instanceof r.Uint8Array))throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array');if(\"function\"==typeof t)o=t,t=0,n=e.length;else if(\"function\"==typeof n)o=n,n=e.length-t;else if(\"function\"!=typeof o)throw new TypeError('\"cb\" argument must be a function');return d(t,e.length),f(n,t,e.length),h(e,t,n,o)},n.randomFillSync=function(e,t,n){if(void 0===t&&(t=0),!(s.isBuffer(e)||e instanceof r.Uint8Array))throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array');return d(t,e.length),void 0===n&&(n=e.length-t),f(n,t,e.length),h(e,t,n)}):(n.randomFill=o,n.randomFillSync=o)}).call(this)}).call(this,e(\"_process\"),void 0!==r.g?r.g:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{_process:467,randombytes:475,\"safe-buffer\":494}],477:[function(e,t,r){\"use strict\";var n={};function o(e,t,r){r||(r=Error);var o=function(e){var r,n;function o(r,n,o){return e.call(this,function(e,r,n){return\"string\"==typeof t?t:t(e,r,n)}(r,n,o))||this}return n=e,(r=o).prototype=Object.create(n.prototype),r.prototype.constructor=r,r.__proto__=n,o}(r);o.prototype.name=r.name,o.prototype.code=e,n[e]=o}function i(e,t){if(Array.isArray(e)){var r=e.length;return e=e.map((function(e){return String(e)})),r>2?\"one of \".concat(t,\" \").concat(e.slice(0,r-1).join(\", \"),\", or \")+e[r-1]:2===r?\"one of \".concat(t,\" \").concat(e[0],\" or \").concat(e[1]):\"of \".concat(t,\" \").concat(e[0])}return\"of \".concat(t,\" \").concat(String(e))}o(\"ERR_INVALID_OPT_VALUE\",(function(e,t){return'The value \"'+t+'\" is invalid for option \"'+e+'\"'}),TypeError),o(\"ERR_INVALID_ARG_TYPE\",(function(e,t,r){var n,o,a;if(\"string\"==typeof t&&(o=\"not \",t.substr(0,4)===o)?(n=\"must not be\",t=t.replace(/^not /,\"\")):n=\"must be\",function(e,t,r){return(void 0===r||r>e.length)&&(r=e.length),e.substring(r-9,r)===t}(e,\" argument\"))a=\"The \".concat(e,\" \").concat(n,\" \").concat(i(t,\"type\"));else{var s=function(e,t,r){return\"number\"!=typeof r&&(r=0),!(r+1>e.length)&&-1!==e.indexOf(\".\",r)}(e)?\"property\":\"argument\";a='The \"'.concat(e,'\" ').concat(s,\" \").concat(n,\" \").concat(i(t,\"type\"))}return a+\". Received type \".concat(typeof r)}),TypeError),o(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\"),o(\"ERR_METHOD_NOT_IMPLEMENTED\",(function(e){return\"The \"+e+\" method is not implemented\"})),o(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\"),o(\"ERR_STREAM_DESTROYED\",(function(e){return\"Cannot call \"+e+\" after a stream was destroyed\"})),o(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\"),o(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\"),o(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\"),o(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError),o(\"ERR_UNKNOWN_ENCODING\",(function(e){return\"Unknown encoding: \"+e}),TypeError),o(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\"),t.exports.codes=n},{}],478:[function(e,t,r){(function(r){(function(){\"use strict\";var n=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};t.exports=c;var o=e(\"./_stream_readable\"),i=e(\"./_stream_writable\");e(\"inherits\")(c,o);for(var a=n(i.prototype),s=0;s<a.length;s++){var l=a[s];c.prototype[l]||(c.prototype[l]=i.prototype[l])}function c(e){if(!(this instanceof c))return new c(e);o.call(this,e),i.call(this,e),this.allowHalfOpen=!0,e&&(!1===e.readable&&(this.readable=!1),!1===e.writable&&(this.writable=!1),!1===e.allowHalfOpen&&(this.allowHalfOpen=!1,this.once(\"end\",u)))}function u(){this._writableState.ended||r.nextTick(d,this)}function d(e){e.end()}Object.defineProperty(c.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(c.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(c.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(c.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&this._readableState.destroyed&&this._writableState.destroyed},set:function(e){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=e,this._writableState.destroyed=e)}})}).call(this)}).call(this,e(\"_process\"))},{\"./_stream_readable\":480,\"./_stream_writable\":482,_process:467,inherits:440}],479:[function(e,t,r){\"use strict\";t.exports=o;var n=e(\"./_stream_transform\");function o(e){if(!(this instanceof o))return new o(e);n.call(this,e)}e(\"inherits\")(o,n),o.prototype._transform=function(e,t,r){r(null,e)}},{\"./_stream_transform\":481,inherits:440}],480:[function(e,t,n){(function(r,n){(function(){\"use strict\";var o;t.exports=E,E.ReadableState=k,e(\"events\").EventEmitter;var i,a=function(e,t){return e.listeners(t).length},s=e(\"./internal/streams/stream\"),l=e(\"buffer\").Buffer,c=(void 0!==n?n:\"undefined\"!=typeof window?window:\"undefined\"!=typeof self?self:{}).Uint8Array||function(){},u=e(\"util\");i=u&&u.debuglog?u.debuglog(\"stream\"):function(){};var d,f,h,p=e(\"./internal/streams/buffer_list\"),m=e(\"./internal/streams/destroy\"),g=e(\"./internal/streams/state\").getHighWaterMark,v=e(\"../errors\").codes,b=v.ERR_INVALID_ARG_TYPE,y=v.ERR_STREAM_PUSH_AFTER_EOF,w=v.ERR_METHOD_NOT_IMPLEMENTED,x=v.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;e(\"inherits\")(E,s);var S=m.errorOrDestroy,C=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function k(t,r,n){o=o||e(\"./_stream_duplex\"),t=t||{},\"boolean\"!=typeof n&&(n=r instanceof o),this.objectMode=!!t.objectMode,n&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=g(this,t,\"readableHighWaterMark\",n),this.buffer=new p,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=!1!==t.emitClose,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(d||(d=e(\"string_decoder/\").StringDecoder),this.decoder=new d(t.encoding),this.encoding=t.encoding)}function E(t){if(o=o||e(\"./_stream_duplex\"),!(this instanceof E))return new E(t);var r=this instanceof o;this._readableState=new k(t,this,r),this.readable=!0,t&&(\"function\"==typeof t.read&&(this._read=t.read),\"function\"==typeof t.destroy&&(this._destroy=t.destroy)),s.call(this)}function O(e,t,r,n,o){i(\"readableAddChunk\",t);var a,s=e._readableState;if(null===t)s.reading=!1,function(e,t){if(i(\"onEofChunk\"),!t.ended){if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,t.sync?j(e):(t.needReadable=!1,t.emittedReadable||(t.emittedReadable=!0,P(e)))}}(e,s);else if(o||(a=function(e,t){var r,n;return n=t,l.isBuffer(n)||n instanceof c||\"string\"==typeof t||void 0===t||e.objectMode||(r=new b(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],t)),r}(s,t)),a)S(e,a);else if(s.objectMode||t&&t.length>0)if(\"string\"==typeof t||s.objectMode||Object.getPrototypeOf(t)===l.prototype||(t=function(e){return l.from(e)}(t)),n)s.endEmitted?S(e,new x):A(e,s,t,!0);else if(s.ended)S(e,new y);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!r?(t=s.decoder.write(t),s.objectMode||0!==t.length?A(e,s,t,!1):M(e,s)):A(e,s,t,!1)}else n||(s.reading=!1,M(e,s));return!s.ended&&(s.length<s.highWaterMark||0===s.length)}function A(e,t,r,n){t.flowing&&0===t.length&&!t.sync?(t.awaitDrain=0,e.emit(\"data\",r)):(t.length+=t.objectMode?1:r.length,n?t.buffer.unshift(r):t.buffer.push(r),t.needReadable&&j(e)),M(e,t)}function T(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!=e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=function(e){return e>=1073741824?e=1073741824:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function j(e){var t=e._readableState;i(\"emitReadable\",t.needReadable,t.emittedReadable),t.needReadable=!1,t.emittedReadable||(i(\"emitReadable\",t.flowing),t.emittedReadable=!0,r.nextTick(P,e))}function P(e){var t=e._readableState;i(\"emitReadable_\",t.destroyed,t.length,t.ended),t.destroyed||!t.length&&!t.ended||(e.emit(\"readable\"),t.emittedReadable=!1),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,F(e)}function M(e,t){t.readingMore||(t.readingMore=!0,r.nextTick(R,e,t))}function R(e,t){for(;!t.reading&&!t.ended&&(t.length<t.highWaterMark||t.flowing&&0===t.length);){var r=t.length;if(i(\"maybeReadMore read 0\"),e.read(0),r===t.length)break}t.readingMore=!1}function _(e){var t=e._readableState;t.readableListening=e.listenerCount(\"readable\")>0,t.resumeScheduled&&!t.paused?t.flowing=!0:e.listenerCount(\"data\")>0&&e.resume()}function I(e){i(\"readable nexttick read 0\"),e.read(0)}function N(e,t){i(\"resume\",t.reading),t.reading||e.read(0),t.resumeScheduled=!1,e.emit(\"resume\"),F(e),t.flowing&&!t.reading&&e.read(0)}function F(e){var t=e._readableState;for(i(\"flow\",t.flowing);t.flowing&&null!==e.read(););}function D(e,t){return 0===t.length?null:(t.objectMode?r=t.buffer.shift():!e||e>=t.length?(r=t.decoder?t.buffer.join(\"\"):1===t.buffer.length?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):r=t.buffer.consume(e,t.decoder),r);var r}function B(e){var t=e._readableState;i(\"endReadable\",t.endEmitted),t.endEmitted||(t.ended=!0,r.nextTick(L,t,e))}function L(e,t){if(i(\"endReadableNT\",e.endEmitted,e.length),!e.endEmitted&&0===e.length&&(e.endEmitted=!0,t.readable=!1,t.emit(\"end\"),e.autoDestroy)){var r=t._writableState;(!r||r.autoDestroy&&r.finished)&&t.destroy()}}function z(e,t){for(var r=0,n=e.length;r<n;r++)if(e[r]===t)return r;return-1}Object.defineProperty(E.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(e){this._readableState&&(this._readableState.destroyed=e)}}),E.prototype.destroy=m.destroy,E.prototype._undestroy=m.undestroy,E.prototype._destroy=function(e,t){t(e)},E.prototype.push=function(e,t){var r,n=this._readableState;return n.objectMode?r=!0:\"string\"==typeof e&&((t=t||n.defaultEncoding)!==n.encoding&&(e=l.from(e,t),t=\"\"),r=!0),O(this,e,t,!1,r)},E.prototype.unshift=function(e){return O(this,e,null,!0,!1)},E.prototype.isPaused=function(){return!1===this._readableState.flowing},E.prototype.setEncoding=function(t){d||(d=e(\"string_decoder/\").StringDecoder);var r=new d(t);this._readableState.decoder=r,this._readableState.encoding=this._readableState.decoder.encoding;for(var n=this._readableState.buffer.head,o=\"\";null!==n;)o+=r.write(n.data),n=n.next;return this._readableState.buffer.clear(),\"\"!==o&&this._readableState.buffer.push(o),this._readableState.length=o.length,this},E.prototype.read=function(e){i(\"read\",e),e=parseInt(e,10);var t=this._readableState,r=e;if(0!==e&&(t.emittedReadable=!1),0===e&&t.needReadable&&((0!==t.highWaterMark?t.length>=t.highWaterMark:t.length>0)||t.ended))return i(\"read: emitReadable\",t.length,t.ended),0===t.length&&t.ended?B(this):j(this),null;if(0===(e=T(e,t))&&t.ended)return 0===t.length&&B(this),null;var n,o=t.needReadable;return i(\"need readable\",o),(0===t.length||t.length-e<t.highWaterMark)&&i(\"length less than watermark\",o=!0),t.ended||t.reading?i(\"reading or ended\",o=!1):o&&(i(\"do read\"),t.reading=!0,t.sync=!0,0===t.length&&(t.needReadable=!0),this._read(t.highWaterMark),t.sync=!1,t.reading||(e=T(r,t))),null===(n=e>0?D(e,t):null)?(t.needReadable=t.length<=t.highWaterMark,e=0):(t.length-=e,t.awaitDrain=0),0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&B(this)),null!==n&&this.emit(\"data\",n),n},E.prototype._read=function(e){S(this,new w(\"_read()\"))},E.prototype.pipe=function(e,t){var n=this,o=this._readableState;switch(o.pipesCount){case 0:o.pipes=e;break;case 1:o.pipes=[o.pipes,e];break;default:o.pipes.push(e)}o.pipesCount+=1,i(\"pipe count=%d opts=%j\",o.pipesCount,t);var s=t&&!1===t.end||e===r.stdout||e===r.stderr?m:l;function l(){i(\"onend\"),e.end()}o.endEmitted?r.nextTick(s):n.once(\"end\",s),e.on(\"unpipe\",(function t(r,a){i(\"onunpipe\"),r===n&&a&&!1===a.hasUnpiped&&(a.hasUnpiped=!0,i(\"cleanup\"),e.removeListener(\"close\",h),e.removeListener(\"finish\",p),e.removeListener(\"drain\",c),e.removeListener(\"error\",f),e.removeListener(\"unpipe\",t),n.removeListener(\"end\",l),n.removeListener(\"end\",m),n.removeListener(\"data\",d),u=!0,!o.awaitDrain||e._writableState&&!e._writableState.needDrain||c())}));var c=function(e){return function(){var t=e._readableState;i(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&a(e,\"data\")&&(t.flowing=!0,F(e))}}(n);e.on(\"drain\",c);var u=!1;function d(t){i(\"ondata\");var r=e.write(t);i(\"dest.write\",r),!1===r&&((1===o.pipesCount&&o.pipes===e||o.pipesCount>1&&-1!==z(o.pipes,e))&&!u&&(i(\"false write response, pause\",o.awaitDrain),o.awaitDrain++),n.pause())}function f(t){i(\"onerror\",t),m(),e.removeListener(\"error\",f),0===a(e,\"error\")&&S(e,t)}function h(){e.removeListener(\"finish\",p),m()}function p(){i(\"onfinish\"),e.removeListener(\"close\",h),m()}function m(){i(\"unpipe\"),n.unpipe(e)}return n.on(\"data\",d),function(e,t,r){if(\"function\"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?Array.isArray(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,\"error\",f),e.once(\"close\",h),e.once(\"finish\",p),e.emit(\"pipe\",n),o.flowing||(i(\"pipe resume\"),n.resume()),e},E.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit(\"unpipe\",this,r)),this;if(!e){var n=t.pipes,o=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i<o;i++)n[i].emit(\"unpipe\",this,{hasUnpiped:!1});return this}var a=z(t.pipes,e);return-1===a||(t.pipes.splice(a,1),t.pipesCount-=1,1===t.pipesCount&&(t.pipes=t.pipes[0]),e.emit(\"unpipe\",this,r)),this},E.prototype.on=function(e,t){var n=s.prototype.on.call(this,e,t),o=this._readableState;return\"data\"===e?(o.readableListening=this.listenerCount(\"readable\")>0,!1!==o.flowing&&this.resume()):\"readable\"===e&&(o.endEmitted||o.readableListening||(o.readableListening=o.needReadable=!0,o.flowing=!1,o.emittedReadable=!1,i(\"on readable\",o.length,o.reading),o.length?j(this):o.reading||r.nextTick(I,this))),n},E.prototype.addListener=E.prototype.on,E.prototype.removeListener=function(e,t){var n=s.prototype.removeListener.call(this,e,t);return\"readable\"===e&&r.nextTick(_,this),n},E.prototype.removeAllListeners=function(e){var t=s.prototype.removeAllListeners.apply(this,arguments);return\"readable\"!==e&&void 0!==e||r.nextTick(_,this),t},E.prototype.resume=function(){var e=this._readableState;return e.flowing||(i(\"resume\"),e.flowing=!e.readableListening,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,r.nextTick(N,e,t))}(this,e)),e.paused=!1,this},E.prototype.pause=function(){return i(\"call pause flowing=%j\",this._readableState.flowing),!1!==this._readableState.flowing&&(i(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState.paused=!0,this},E.prototype.wrap=function(e){var t=this,r=this._readableState,n=!1;for(var o in e.on(\"end\",(function(){if(i(\"wrapped end\"),r.decoder&&!r.ended){var e=r.decoder.end();e&&e.length&&t.push(e)}t.push(null)})),e.on(\"data\",(function(o){i(\"wrapped data\"),r.decoder&&(o=r.decoder.write(o)),r.objectMode&&null==o||(r.objectMode||o&&o.length)&&(t.push(o)||(n=!0,e.pause()))})),e)void 0===this[o]&&\"function\"==typeof e[o]&&(this[o]=function(t){return function(){return e[t].apply(e,arguments)}}(o));for(var a=0;a<C.length;a++)e.on(C[a],this.emit.bind(this,C[a]));return this._read=function(t){i(\"wrapped _read\",t),n&&(n=!1,e.resume())},this},\"function\"==typeof Symbol&&(E.prototype[Symbol.asyncIterator]=function(){return void 0===f&&(f=e(\"./internal/streams/async_iterator\")),f(this)}),Object.defineProperty(E.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),Object.defineProperty(E.prototype,\"readableBuffer\",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}}),Object.defineProperty(E.prototype,\"readableFlowing\",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(e){this._readableState&&(this._readableState.flowing=e)}}),E._fromList=D,Object.defineProperty(E.prototype,\"readableLength\",{enumerable:!1,get:function(){return this._readableState.length}}),\"function\"==typeof Symbol&&(E.from=function(t,r){return void 0===h&&(h=e(\"./internal/streams/from\")),h(E,t,r)})}).call(this)}).call(this,e(\"_process\"),void 0!==r.g?r.g:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"../errors\":477,\"./_stream_duplex\":478,\"./internal/streams/async_iterator\":483,\"./internal/streams/buffer_list\":484,\"./internal/streams/destroy\":485,\"./internal/streams/from\":487,\"./internal/streams/state\":489,\"./internal/streams/stream\":490,_process:467,buffer:220,events:422,inherits:440,\"string_decoder/\":522,util:188}],481:[function(e,t,r){\"use strict\";t.exports=u;var n=e(\"../errors\").codes,o=n.ERR_METHOD_NOT_IMPLEMENTED,i=n.ERR_MULTIPLE_CALLBACK,a=n.ERR_TRANSFORM_ALREADY_TRANSFORMING,s=n.ERR_TRANSFORM_WITH_LENGTH_0,l=e(\"./_stream_duplex\");function c(e,t){var r=this._transformState;r.transforming=!1;var n=r.writecb;if(null===n)return this.emit(\"error\",new i);r.writechunk=null,r.writecb=null,null!=t&&this.push(t),n(e);var o=this._readableState;o.reading=!1,(o.needReadable||o.length<o.highWaterMark)&&this._read(o.highWaterMark)}function u(e){if(!(this instanceof u))return new u(e);l.call(this,e),this._transformState={afterTransform:c.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,e&&(\"function\"==typeof e.transform&&(this._transform=e.transform),\"function\"==typeof e.flush&&(this._flush=e.flush)),this.on(\"prefinish\",d)}function d(){var e=this;\"function\"!=typeof this._flush||this._readableState.destroyed?f(this,null,null):this._flush((function(t,r){f(e,t,r)}))}function f(e,t,r){if(t)return e.emit(\"error\",t);if(null!=r&&e.push(r),e._writableState.length)throw new s;if(e._transformState.transforming)throw new a;return e.push(null)}e(\"inherits\")(u,l),u.prototype.push=function(e,t){return this._transformState.needTransform=!1,l.prototype.push.call(this,e,t)},u.prototype._transform=function(e,t,r){r(new o(\"_transform()\"))},u.prototype._write=function(e,t,r){var n=this._transformState;if(n.writecb=r,n.writechunk=e,n.writeencoding=t,!n.transforming){var o=this._readableState;(n.needTransform||o.needReadable||o.length<o.highWaterMark)&&this._read(o.highWaterMark)}},u.prototype._read=function(e){var t=this._transformState;null===t.writechunk||t.transforming?t.needTransform=!0:(t.transforming=!0,this._transform(t.writechunk,t.writeencoding,t.afterTransform))},u.prototype._destroy=function(e,t){l.prototype._destroy.call(this,e,(function(e){t(e)}))}},{\"../errors\":477,\"./_stream_duplex\":478,inherits:440}],482:[function(e,t,n){(function(r,n){(function(){\"use strict\";function o(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t){var r=e.entry;for(e.entry=null;r;){var n=r.callback;t.pendingcb--,n(undefined),r=r.next}t.corkedRequestsFree.next=e}(t,e)}}var i;t.exports=E,E.WritableState=k;var a,s={deprecate:e(\"util-deprecate\")},l=e(\"./internal/streams/stream\"),c=e(\"buffer\").Buffer,u=(void 0!==n?n:\"undefined\"!=typeof window?window:\"undefined\"!=typeof self?self:{}).Uint8Array||function(){},d=e(\"./internal/streams/destroy\"),f=e(\"./internal/streams/state\").getHighWaterMark,h=e(\"../errors\").codes,p=h.ERR_INVALID_ARG_TYPE,m=h.ERR_METHOD_NOT_IMPLEMENTED,g=h.ERR_MULTIPLE_CALLBACK,v=h.ERR_STREAM_CANNOT_PIPE,b=h.ERR_STREAM_DESTROYED,y=h.ERR_STREAM_NULL_VALUES,w=h.ERR_STREAM_WRITE_AFTER_END,x=h.ERR_UNKNOWN_ENCODING,S=d.errorOrDestroy;function C(){}function k(t,n,a){i=i||e(\"./_stream_duplex\"),t=t||{},\"boolean\"!=typeof a&&(a=n instanceof i),this.objectMode=!!t.objectMode,a&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=f(this,t,\"writableHighWaterMark\",a),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var s=!1===t.decodeStrings;this.decodeStrings=!s,this.defaultEncoding=t.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,o=n.sync,i=n.writecb;if(\"function\"!=typeof i)throw new g;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,o,i){--t.pendingcb,n?(r.nextTick(i,o),r.nextTick(M,e,t),e._writableState.errorEmitted=!0,S(e,o)):(i(o),e._writableState.errorEmitted=!0,S(e,o),M(e,t))}(e,n,o,t,i);else{var a=j(n)||e.destroyed;a||n.corked||n.bufferProcessing||!n.bufferedRequest||T(e,n),o?r.nextTick(A,e,n,a,i):A(e,n,a,i)}}(n,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!1!==t.emitClose,this.autoDestroy=!!t.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new o(this)}function E(t){var r=this instanceof(i=i||e(\"./_stream_duplex\"));if(!r&&!a.call(E,this))return new E(t);this._writableState=new k(t,this,r),this.writable=!0,t&&(\"function\"==typeof t.write&&(this._write=t.write),\"function\"==typeof t.writev&&(this._writev=t.writev),\"function\"==typeof t.destroy&&(this._destroy=t.destroy),\"function\"==typeof t.final&&(this._final=t.final)),l.call(this)}function O(e,t,r,n,o,i,a){t.writelen=n,t.writecb=a,t.writing=!0,t.sync=!0,t.destroyed?t.onwrite(new b(\"write\")):r?e._writev(o,t.onwrite):e._write(o,i,t.onwrite),t.sync=!1}function A(e,t,r,n){r||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit(\"drain\"))}(e,t),t.pendingcb--,n(),M(e,t)}function T(e,t){t.bufferProcessing=!0;var r=t.bufferedRequest;if(e._writev&&r&&r.next){var n=t.bufferedRequestCount,i=new Array(n),a=t.corkedRequestsFree;a.entry=r;for(var s=0,l=!0;r;)i[s]=r,r.isBuf||(l=!1),r=r.next,s+=1;i.allBuffers=l,O(e,t,!0,t.length,i,\"\",a.finish),t.pendingcb++,t.lastBufferedRequest=null,a.next?(t.corkedRequestsFree=a.next,a.next=null):t.corkedRequestsFree=new o(t),t.bufferedRequestCount=0}else{for(;r;){var c=r.chunk,u=r.encoding,d=r.callback;if(O(e,t,!1,t.objectMode?1:c.length,c,u,d),r=r.next,t.bufferedRequestCount--,t.writing)break}null===r&&(t.lastBufferedRequest=null)}t.bufferedRequest=r,t.bufferProcessing=!1}function j(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function P(e,t){e._final((function(r){t.pendingcb--,r&&S(e,r),t.prefinished=!0,e.emit(\"prefinish\"),M(e,t)}))}function M(e,t){var n=j(t);if(n&&(function(e,t){t.prefinished||t.finalCalled||(\"function\"!=typeof e._final||t.destroyed?(t.prefinished=!0,e.emit(\"prefinish\")):(t.pendingcb++,t.finalCalled=!0,r.nextTick(P,e,t)))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit(\"finish\"),t.autoDestroy))){var o=e._readableState;(!o||o.autoDestroy&&o.endEmitted)&&e.destroy()}return n}e(\"inherits\")(E,l),k.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(k.prototype,\"buffer\",{get:s.deprecate((function(){return this.getBuffer()}),\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch(e){}}(),\"function\"==typeof Symbol&&Symbol.hasInstance&&\"function\"==typeof Function.prototype[Symbol.hasInstance]?(a=Function.prototype[Symbol.hasInstance],Object.defineProperty(E,Symbol.hasInstance,{value:function(e){return!!a.call(this,e)||this===E&&e&&e._writableState instanceof k}})):a=function(e){return e instanceof this},E.prototype.pipe=function(){S(this,new v)},E.prototype.write=function(e,t,n){var o,i=this._writableState,a=!1,s=!i.objectMode&&(o=e,c.isBuffer(o)||o instanceof u);return s&&!c.isBuffer(e)&&(e=function(e){return c.from(e)}(e)),\"function\"==typeof t&&(n=t,t=null),s?t=\"buffer\":t||(t=i.defaultEncoding),\"function\"!=typeof n&&(n=C),i.ending?function(e,t){var n=new w;S(e,n),r.nextTick(t,n)}(this,n):(s||function(e,t,n,o){var i;return null===n?i=new y:\"string\"==typeof n||t.objectMode||(i=new p(\"chunk\",[\"string\",\"Buffer\"],n)),!i||(S(e,i),r.nextTick(o,i),!1)}(this,i,e,n))&&(i.pendingcb++,a=function(e,t,r,n,o,i){if(!r){var a=function(e,t,r){return e.objectMode||!1===e.decodeStrings||\"string\"!=typeof t||(t=c.from(t,r)),t}(t,n,o);n!==a&&(r=!0,o=\"buffer\",n=a)}var s=t.objectMode?1:n.length;t.length+=s;var l=t.length<t.highWaterMark;if(l||(t.needDrain=!0),t.writing||t.corked){var u=t.lastBufferedRequest;t.lastBufferedRequest={chunk:n,encoding:o,isBuf:r,callback:i,next:null},u?u.next=t.lastBufferedRequest:t.bufferedRequest=t.lastBufferedRequest,t.bufferedRequestCount+=1}else O(e,t,!1,s,n,o,i);return l}(this,i,s,e,t,n)),a},E.prototype.cork=function(){this._writableState.corked++},E.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,e.writing||e.corked||e.bufferProcessing||!e.bufferedRequest||T(this,e))},E.prototype.setDefaultEncoding=function(e){if(\"string\"==typeof e&&(e=e.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((e+\"\").toLowerCase())>-1))throw new x(e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(E.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(E.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),E.prototype._write=function(e,t,r){r(new m(\"_write()\"))},E.prototype._writev=null,E.prototype.end=function(e,t,n){var o=this._writableState;return\"function\"==typeof e?(n=e,e=null,t=null):\"function\"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),o.corked&&(o.corked=1,this.uncork()),o.ending||function(e,t,n){t.ending=!0,M(e,t),n&&(t.finished?r.nextTick(n):e.once(\"finish\",n)),t.ended=!0,e.writable=!1}(this,o,n),this},Object.defineProperty(E.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(E.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),E.prototype.destroy=d.destroy,E.prototype._undestroy=d.undestroy,E.prototype._destroy=function(e,t){t(e)}}).call(this)}).call(this,e(\"_process\"),void 0!==r.g?r.g:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"../errors\":477,\"./_stream_duplex\":478,\"./internal/streams/destroy\":485,\"./internal/streams/state\":489,\"./internal/streams/stream\":490,_process:467,buffer:220,inherits:440,\"util-deprecate\":524}],483:[function(e,t,r){(function(r){(function(){\"use strict\";var n;function o(e,t,r){return(t=function(e){var t=function(e){if(\"object\"!=typeof e||null===e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=typeof r)return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var i=e(\"./end-of-stream\"),a=Symbol(\"lastResolve\"),s=Symbol(\"lastReject\"),l=Symbol(\"error\"),c=Symbol(\"ended\"),u=Symbol(\"lastPromise\"),d=Symbol(\"handlePromise\"),f=Symbol(\"stream\");function h(e,t){return{value:e,done:t}}function p(e){var t=e[a];if(null!==t){var r=e[f].read();null!==r&&(e[u]=null,e[a]=null,e[s]=null,t(h(r,!1)))}}function m(e){r.nextTick(p,e)}var g=Object.getPrototypeOf((function(){})),v=Object.setPrototypeOf((o(n={get stream(){return this[f]},next:function(){var e=this,t=this[l];if(null!==t)return Promise.reject(t);if(this[c])return Promise.resolve(h(void 0,!0));if(this[f].destroyed)return new Promise((function(t,n){r.nextTick((function(){e[l]?n(e[l]):t(h(void 0,!0))}))}));var n,o=this[u];if(o)n=new Promise(function(e,t){return function(r,n){e.then((function(){t[c]?r(h(void 0,!0)):t[d](r,n)}),n)}}(o,this));else{var i=this[f].read();if(null!==i)return Promise.resolve(h(i,!1));n=new Promise(this[d])}return this[u]=n,n}},Symbol.asyncIterator,(function(){return this})),o(n,\"return\",(function(){var e=this;return new Promise((function(t,r){e[f].destroy(null,(function(e){e?r(e):t(h(void 0,!0))}))}))})),n),g);t.exports=function(e){var t,r=Object.create(v,(o(t={},f,{value:e,writable:!0}),o(t,a,{value:null,writable:!0}),o(t,s,{value:null,writable:!0}),o(t,l,{value:null,writable:!0}),o(t,c,{value:e._readableState.endEmitted,writable:!0}),o(t,d,{value:function(e,t){var n=r[f].read();n?(r[u]=null,r[a]=null,r[s]=null,e(h(n,!1))):(r[a]=e,r[s]=t)},writable:!0}),t));return r[u]=null,i(e,(function(e){if(e&&\"ERR_STREAM_PREMATURE_CLOSE\"!==e.code){var t=r[s];return null!==t&&(r[u]=null,r[a]=null,r[s]=null,t(e)),void(r[l]=e)}var n=r[a];null!==n&&(r[u]=null,r[a]=null,r[s]=null,n(h(void 0,!0))),r[c]=!0})),e.on(\"readable\",m.bind(null,r)),r}}).call(this)}).call(this,e(\"_process\"))},{\"./end-of-stream\":486,_process:467}],484:[function(e,t,r){\"use strict\";function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach((function(t){i(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t,r){return(t=s(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,s(n.key),n)}}function s(e){var t=function(e){if(\"object\"!=typeof e||null===e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=typeof r)return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==typeof t?t:String(t)}var l=e(\"buffer\").Buffer,c=e(\"util\").inspect,u=c&&c.custom||\"inspect\";t.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.head=null,this.tail=null,this.length=0}var t,r;return t=e,(r=[{key:\"push\",value:function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length}},{key:\"unshift\",value:function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length}},{key:\"shift\",value:function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}}},{key:\"clear\",value:function(){this.head=this.tail=null,this.length=0}},{key:\"join\",value:function(e){if(0===this.length)return\"\";for(var t=this.head,r=\"\"+t.data;t=t.next;)r+=e+t.data;return r}},{key:\"concat\",value:function(e){if(0===this.length)return l.alloc(0);for(var t,r,n,o=l.allocUnsafe(e>>>0),i=this.head,a=0;i;)t=i.data,r=o,n=a,l.prototype.copy.call(t,r,n),a+=i.data.length,i=i.next;return o}},{key:\"consume\",value:function(e,t){var r;return e<this.head.data.length?(r=this.head.data.slice(0,e),this.head.data=this.head.data.slice(e)):r=e===this.head.data.length?this.shift():t?this._getString(e):this._getBuffer(e),r}},{key:\"first\",value:function(){return this.head.data}},{key:\"_getString\",value:function(e){var t=this.head,r=1,n=t.data;for(e-=n.length;t=t.next;){var o=t.data,i=e>o.length?o.length:e;if(i===o.length?n+=o:n+=o.slice(0,e),0==(e-=i)){i===o.length?(++r,t.next?this.head=t.next:this.head=this.tail=null):(this.head=t,t.data=o.slice(i));break}++r}return this.length-=r,n}},{key:\"_getBuffer\",value:function(e){var t=l.allocUnsafe(e),r=this.head,n=1;for(r.data.copy(t),e-=r.data.length;r=r.next;){var o=r.data,i=e>o.length?o.length:e;if(o.copy(t,t.length-e,0,i),0==(e-=i)){i===o.length?(++n,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=o.slice(i));break}++n}return this.length-=n,t}},{key:u,value:function(e,t){return c(this,o(o({},t),{},{depth:0,customInspect:!1}))}}])&&a(t.prototype,r),Object.defineProperty(t,\"prototype\",{writable:!1}),e}()},{buffer:220,util:188}],485:[function(e,t,r){(function(e){(function(){\"use strict\";function r(e,t){o(e,t),n(e)}function n(e){e._writableState&&!e._writableState.emitClose||e._readableState&&!e._readableState.emitClose||e.emit(\"close\")}function o(e,t){e.emit(\"error\",t)}t.exports={destroy:function(t,i){var a=this,s=this._readableState&&this._readableState.destroyed,l=this._writableState&&this._writableState.destroyed;return s||l?(i?i(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,e.nextTick(o,this,t)):e.nextTick(o,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,(function(t){!i&&t?a._writableState?a._writableState.errorEmitted?e.nextTick(n,a):(a._writableState.errorEmitted=!0,e.nextTick(r,a,t)):e.nextTick(r,a,t):i?(e.nextTick(n,a),i(t)):e.nextTick(n,a)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function(e,t){var r=e._readableState,n=e._writableState;r&&r.autoDestroy||n&&n.autoDestroy?e.destroy(t):e.emit(\"error\",t)}}}).call(this)}).call(this,e(\"_process\"))},{_process:467}],486:[function(e,t,r){\"use strict\";var n=e(\"../../../errors\").codes.ERR_STREAM_PREMATURE_CLOSE;function o(){}t.exports=function e(t,r,i){if(\"function\"==typeof r)return e(t,null,r);r||(r={}),i=function(e){var t=!1;return function(){if(!t){t=!0;for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];e.apply(this,n)}}}(i||o);var a=r.readable||!1!==r.readable&&t.readable,s=r.writable||!1!==r.writable&&t.writable,l=function(){t.writable||u()},c=t._writableState&&t._writableState.finished,u=function(){s=!1,c=!0,a||i.call(t)},d=t._readableState&&t._readableState.endEmitted,f=function(){a=!1,d=!0,s||i.call(t)},h=function(e){i.call(t,e)},p=function(){var e;return a&&!d?(t._readableState&&t._readableState.ended||(e=new n),i.call(t,e)):s&&!c?(t._writableState&&t._writableState.ended||(e=new n),i.call(t,e)):void 0},m=function(){t.req.on(\"finish\",u)};return function(e){return e.setHeader&&\"function\"==typeof e.abort}(t)?(t.on(\"complete\",u),t.on(\"abort\",p),t.req?m():t.on(\"request\",m)):s&&!t._writableState&&(t.on(\"end\",l),t.on(\"close\",l)),t.on(\"end\",f),t.on(\"finish\",u),!1!==r.error&&t.on(\"error\",h),t.on(\"close\",p),function(){t.removeListener(\"complete\",u),t.removeListener(\"abort\",p),t.removeListener(\"request\",m),t.req&&t.req.removeListener(\"finish\",u),t.removeListener(\"end\",l),t.removeListener(\"close\",l),t.removeListener(\"finish\",u),t.removeListener(\"end\",f),t.removeListener(\"error\",h),t.removeListener(\"close\",p)}}},{\"../../../errors\":477}],487:[function(e,t,r){\"use strict\";t.exports=function(){throw new Error(\"Readable.from is not available in the browser\")}},{}],488:[function(e,t,r){\"use strict\";var n,o=e(\"../../../errors\").codes,i=o.ERR_MISSING_ARGS,a=o.ERR_STREAM_DESTROYED;function s(e){if(e)throw e}function l(t,r,o,i){i=function(e){var t=!1;return function(){t||(t=!0,e.apply(void 0,arguments))}}(i);var s=!1;t.on(\"close\",(function(){s=!0})),void 0===n&&(n=e(\"./end-of-stream\")),n(t,{readable:r,writable:o},(function(e){if(e)return i(e);s=!0,i()}));var l=!1;return function(e){if(!s&&!l)return l=!0,function(e){return e.setHeader&&\"function\"==typeof e.abort}(t)?t.abort():\"function\"==typeof t.destroy?t.destroy():void i(e||new a(\"pipe\"))}}function c(e){e()}function u(e,t){return e.pipe(t)}t.exports=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];var n,o=function(e){return e.length?\"function\"!=typeof e[e.length-1]?s:e.pop():s}(t);if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new i(\"streams\");var a=t.map((function(e,r){var i=r<t.length-1;return l(e,i,r>0,(function(e){n||(n=e),e&&a.forEach(c),i||(a.forEach(c),o(n))}))}));return t.reduce(u)}},{\"../../../errors\":477,\"./end-of-stream\":486}],489:[function(e,t,r){\"use strict\";var n=e(\"../../../errors\").codes.ERR_INVALID_OPT_VALUE;t.exports={getHighWaterMark:function(e,t,r,o){var i=function(e,t,r){return null!=e.highWaterMark?e.highWaterMark:t?e[r]:null}(t,o,r);if(null!=i){if(!isFinite(i)||Math.floor(i)!==i||i<0)throw new n(o?r:\"highWaterMark\",i);return Math.floor(i)}return e.objectMode?16:16384}}},{\"../../../errors\":477}],490:[function(e,t,r){\"use strict\";t.exports=e(\"events\").EventEmitter},{events:422}],491:[function(e,t,r){\"use strict\";(r=t.exports=e(\"./lib/_stream_readable.js\")).Stream=r,r.Readable=r,r.Writable=e(\"./lib/_stream_writable.js\"),r.Duplex=e(\"./lib/_stream_duplex.js\"),r.Transform=e(\"./lib/_stream_transform.js\"),r.PassThrough=e(\"./lib/_stream_passthrough.js\"),r.finished=e(\"./lib/internal/streams/end-of-stream.js\"),r.pipeline=e(\"./lib/internal/streams/pipeline.js\")},{\"./lib/_stream_duplex.js\":478,\"./lib/_stream_passthrough.js\":479,\"./lib/_stream_readable.js\":480,\"./lib/_stream_transform.js\":481,\"./lib/_stream_writable.js\":482,\"./lib/internal/streams/end-of-stream.js\":486,\"./lib/internal/streams/pipeline.js\":488}],492:[function(e,t,r){\"use strict\";var n=function(e){var t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(e,t,r,o){var i=t&&t.prototype instanceof f?t:f,a=Object.create(i.prototype),s=new E(o||[]);return n(a,\"_invoke\",{value:x(e,r,s)}),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}e.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(O([])));v&&v!==t&&r.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){var o;n(this,\"_invoke\",{value:function(n,i){function a(){return new t((function(o,a){!function n(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==typeof d&&r.call(d,\"__await\")?t.resolve(d.__await).then((function(e){n(\"next\",e,a,s)}),(function(e){n(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return n(\"throw\",e,a,s)}))}s(l.arg)}(n,i,o,a)}))}return o=o?o.then(a,a):a()}})}function x(e,t,r){var n=\"suspendedStart\";return function(o,i){if(\"executing\"===n)throw new Error(\"Generator is already running\");if(\"completed\"===n){if(\"throw\"===o)throw i;return{value:void 0,done:!0}}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var s=S(a,r);if(s){if(s===d)continue;return s}}if(\"next\"===r.method)r.sent=r._sent=r.arg;else if(\"throw\"===r.method){if(\"suspendedStart\"===n)throw n=\"completed\",r.arg;r.dispatchException(r.arg)}else\"return\"===r.method&&r.abrupt(\"return\",r.arg);n=\"executing\";var l=u(e,t,r);if(\"normal\"===l.type){if(n=r.done?\"completed\":\"suspendedYield\",l.arg===d)continue;return{value:l.arg,done:r.done}}\"throw\"===l.type&&(n=\"completed\",r.method=\"throw\",r.arg=l.arg)}}}function S(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,\"throw\"===r&&e.iterator.return&&(t.method=\"return\",t.arg=void 0,S(e,t),\"throw\"===t.method)||\"return\"!==r&&(t.method=\"throw\",t.arg=new TypeError(\"The iterator does not provide a '\"+r+\"' method\")),d;var o=u(n,e.iterator,t.arg);if(\"throw\"===o.type)return t.method=\"throw\",t.arg=o.arg,t.delegate=null,d;var i=o.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,\"return\"!==t.method&&(t.method=\"next\",t.arg=void 0),t.delegate=null,d):i:(t.method=\"throw\",t.arg=new TypeError(\"iterator result is not an object\"),t.delegate=null,d)}function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function k(e){var t=e.completion||{};t.type=\"normal\",delete t.arg,e.completion=t}function E(e){this.tryEntries=[{tryLoc:\"root\"}],e.forEach(C,this),this.reset(!0)}function O(e){if(e){var t=e[i];if(t)return t.call(e);if(\"function\"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,o=function t(){for(;++n<e.length;)if(r.call(e,n))return t.value=e[n],t.done=!1,t;return t.value=void 0,t.done=!0,t};return o.next=o}}return{next:A}}function A(){return{value:void 0,done:!0}}return h.prototype=p,n(b,\"constructor\",{value:p,configurable:!0}),n(p,\"constructor\",{value:h,configurable:!0}),h.displayName=l(p,s,\"GeneratorFunction\"),e.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},e.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),e.AsyncIterator=w,e.async=function(t,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(t,r,n,o),i);return e.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),e.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},e.values=O,E.prototype={constructor:E,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=void 0,this.tryEntries.forEach(k),!e)for(var t in this)\"t\"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(r,n){return a.type=\"throw\",a.arg=e,t.next=r,n&&(t.method=\"next\",t.arg=void 0),!!n}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if(\"root\"===i.tryLoc)return n(\"end\");if(i.tryLoc<=this.prev){var s=r.call(i,\"catchLoc\"),l=r.call(i,\"finallyLoc\");if(s&&l){if(this.prev<i.catchLoc)return n(i.catchLoc,!0);if(this.prev<i.finallyLoc)return n(i.finallyLoc)}else if(s){if(this.prev<i.catchLoc)return n(i.catchLoc,!0)}else{if(!l)throw new Error(\"try statement without catch or finally\");if(this.prev<i.finallyLoc)return n(i.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,\"finallyLoc\")&&this.prev<o.finallyLoc){var i=o;break}}i&&(\"break\"===e||\"continue\"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method=\"next\",this.next=i.finallyLoc,d):this.complete(a)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),k(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if(\"throw\"===n.type){var o=n.arg;k(r)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(e,t,r){return this.delegate={iterator:O(e),resultName:t,nextLoc:r},\"next\"===this.method&&(this.arg=void 0),d}},e}(\"object\"==typeof t?t.exports:{});try{regeneratorRuntime=n}catch(e){\"object\"==typeof globalThis?globalThis.regeneratorRuntime=n:Function(\"r\",\"regeneratorRuntime = r\")(n)}},{}],493:[function(e,t,r){\"use strict\";var n=e(\"buffer\").Buffer,o=e(\"inherits\"),i=e(\"hash-base\"),a=new Array(16),s=[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],l=[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],c=[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],u=[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],d=[0,1518500249,1859775393,2400959708,2840853838],f=[1352829926,1548603684,1836072691,2053994217,0];function h(){i.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function p(e,t){return e<<t|e>>>32-t}function m(e,t,r,n,o,i,a,s){return p(e+(t^r^n)+i+a|0,s)+o|0}function g(e,t,r,n,o,i,a,s){return p(e+(t&r|~t&n)+i+a|0,s)+o|0}function v(e,t,r,n,o,i,a,s){return p(e+((t|~r)^n)+i+a|0,s)+o|0}function b(e,t,r,n,o,i,a,s){return p(e+(t&n|r&~n)+i+a|0,s)+o|0}function y(e,t,r,n,o,i,a,s){return p(e+(t^(r|~n))+i+a|0,s)+o|0}o(h,i),h.prototype._update=function(){for(var e=a,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);for(var r=0|this._a,n=0|this._b,o=0|this._c,i=0|this._d,h=0|this._e,w=0|this._a,x=0|this._b,S=0|this._c,C=0|this._d,k=0|this._e,E=0;E<80;E+=1){var O,A;E<16?(O=m(r,n,o,i,h,e[s[E]],d[0],c[E]),A=y(w,x,S,C,k,e[l[E]],f[0],u[E])):E<32?(O=g(r,n,o,i,h,e[s[E]],d[1],c[E]),A=b(w,x,S,C,k,e[l[E]],f[1],u[E])):E<48?(O=v(r,n,o,i,h,e[s[E]],d[2],c[E]),A=v(w,x,S,C,k,e[l[E]],f[2],u[E])):E<64?(O=b(r,n,o,i,h,e[s[E]],d[3],c[E]),A=g(w,x,S,C,k,e[l[E]],f[3],u[E])):(O=y(r,n,o,i,h,e[s[E]],d[4],c[E]),A=m(w,x,S,C,k,e[l[E]],f[4],u[E])),r=h,h=i,i=p(o,10),o=n,n=O,w=k,k=C,C=p(S,10),S=x,x=A}var T=this._b+o+C|0;this._b=this._c+i+k|0,this._c=this._d+h+w|0,this._d=this._e+r+x|0,this._e=this._a+n+S|0,this._a=T},h.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=n.alloc?n.alloc(20):new n(20);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e.writeInt32LE(this._e,16),e},t.exports=h},{buffer:220,\"hash-base\":425,inherits:440}],494:[function(e,t,r){\"use strict\";var n=e(\"buffer\"),o=n.Buffer;function i(e,t){for(var r in e)t[r]=e[r]}function a(e,t,r){return o(e,t,r)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?t.exports=n:(i(n,r),r.Buffer=a),a.prototype=Object.create(o.prototype),i(o,a),a.from=function(e,t,r){if(\"number\"==typeof e)throw new TypeError(\"Argument must not be a number\");return o(e,t,r)},a.alloc=function(e,t,r){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");var n=o(e);return void 0!==t?\"string\"==typeof r?n.fill(t,r):n.fill(t):n.fill(0),n},a.allocUnsafe=function(e){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");return o(e)},a.allocUnsafeSlow=function(e){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");return n.SlowBuffer(e)}},{buffer:220}],495:[function(e,t,r){(function(r){(function(){\"use strict\";var n,o=e(\"buffer\"),i=o.Buffer,a={};for(n in o)o.hasOwnProperty(n)&&\"SlowBuffer\"!==n&&\"Buffer\"!==n&&(a[n]=o[n]);var s=a.Buffer={};for(n in i)i.hasOwnProperty(n)&&\"allocUnsafe\"!==n&&\"allocUnsafeSlow\"!==n&&(s[n]=i[n]);if(a.Buffer.prototype=i.prototype,s.from&&s.from!==Uint8Array.from||(s.from=function(e,t,r){if(\"number\"==typeof e)throw new TypeError('The \"value\" argument must not be of type number. Received type '+typeof e);if(e&&void 0===e.length)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e);return i(e,t,r)}),s.alloc||(s.alloc=function(e,t,r){if(\"number\"!=typeof e)throw new TypeError('The \"size\" argument must be of type number. Received type '+typeof e);if(e<0||e>=2*(1<<30))throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"');var n=i(e);return t&&0!==t.length?\"string\"==typeof r?n.fill(t,r):n.fill(t):n.fill(0),n}),!a.kStringMaxLength)try{a.kStringMaxLength=r.binding(\"buffer\").kStringMaxLength}catch(e){}a.constants||(a.constants={MAX_LENGTH:a.kMaxLength},a.kStringMaxLength&&(a.constants.MAX_STRING_LENGTH=a.kStringMaxLength)),t.exports=a}).call(this)}).call(this,e(\"_process\"))},{_process:467,buffer:220}],496:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0});const n=e(\"xmlchars/xml/1.0/ed5\"),o=e(\"xmlchars/xml/1.1/ed2\"),i=e(\"xmlchars/xmlns/1.0/ed3\");var a=n.isS,s=n.isChar,l=n.isNameStartChar,c=n.isNameChar,u=n.S_LIST,d=n.NAME_RE,f=o.isChar,h=i.isNCNameStartChar,p=i.isNCNameChar,m=i.NC_NAME_RE;const g=\"http://www.w3.org/XML/1998/namespace\",v=\"http://www.w3.org/2000/xmlns/\",b={__proto__:null,xml:g,xmlns:v},y={__proto__:null,amp:\"&\",gt:\">\",lt:\"<\",quot:'\"',apos:\"'\"},w=e=>34===e||39===e,x=[34,39],S=[...x,91,62],C=[...x,60,93],k=[61,63,...u],E=[...u,62,38,60];function O(e,t,r){switch(t){case\"xml\":r!==g&&e.fail(`xml prefix must be bound to ${g}.`);break;case\"xmlns\":r!==v&&e.fail(`xmlns prefix must be bound to ${v}.`)}switch(r){case v:e.fail(\"\"===t?`the default namespace may not be set to ${r}.`:`may not assign a prefix (even \"xmlns\") to the URI ${v}.`);break;case g:switch(t){case\"xml\":break;case\"\":e.fail(`the default namespace may not be set to ${r}.`);break;default:e.fail(\"may not assign the xml namespace to another prefix.\")}}}const A=e=>m.test(e),T=e=>d.test(e);r.EVENTS=[\"xmldecl\",\"text\",\"processinginstruction\",\"doctype\",\"comment\",\"opentagstart\",\"attribute\",\"opentag\",\"closetag\",\"cdata\",\"error\",\"end\",\"ready\"];const j={xmldecl:\"xmldeclHandler\",text:\"textHandler\",processinginstruction:\"piHandler\",doctype:\"doctypeHandler\",comment:\"commentHandler\",opentagstart:\"openTagStartHandler\",attribute:\"attributeHandler\",opentag:\"openTagHandler\",closetag:\"closeTagHandler\",cdata:\"cdataHandler\",error:\"errorHandler\",end:\"endHandler\",ready:\"readyHandler\"};r.SaxesParser=class{constructor(e){this.opt=null!=e?e:{},this.fragmentOpt=!!this.opt.fragment;const t=this.xmlnsOpt=!!this.opt.xmlns;if(this.trackPosition=!1!==this.opt.position,this.fileName=this.opt.fileName,t){this.nameStartCheck=h,this.nameCheck=p,this.isName=A,this.processAttribs=this.processAttribsNS,this.pushAttrib=this.pushAttribNS,this.ns=Object.assign({__proto__:null},b);const e=this.opt.additionalNamespaces;null!=e&&(function(e,t){for(const r of Object.keys(t))O(e,r,t[r])}(this,e),Object.assign(this.ns,e))}else this.nameStartCheck=l,this.nameCheck=c,this.isName=T,this.processAttribs=this.processAttribsPlain,this.pushAttrib=this.pushAttribPlain;this.stateTable=[this.sBegin,this.sBeginWhitespace,this.sDoctype,this.sDoctypeQuote,this.sDTD,this.sDTDQuoted,this.sDTDOpenWaka,this.sDTDOpenWakaBang,this.sDTDComment,this.sDTDCommentEnding,this.sDTDCommentEnded,this.sDTDPI,this.sDTDPIEnding,this.sText,this.sEntity,this.sOpenWaka,this.sOpenWakaBang,this.sComment,this.sCommentEnding,this.sCommentEnded,this.sCData,this.sCDataEnding,this.sCDataEnding2,this.sPIFirstChar,this.sPIRest,this.sPIBody,this.sPIEnding,this.sXMLDeclNameStart,this.sXMLDeclName,this.sXMLDeclEq,this.sXMLDeclValueStart,this.sXMLDeclValue,this.sXMLDeclSeparator,this.sXMLDeclEnding,this.sOpenTag,this.sOpenTagSlash,this.sAttrib,this.sAttribName,this.sAttribNameSawWhite,this.sAttribValue,this.sAttribValueQuoted,this.sAttribValueClosed,this.sAttribValueUnquoted,this.sCloseTag,this.sCloseTagSawWhite],this._init()}get closed(){return this._closed}_init(){var e;this.openWakaBang=\"\",this.text=\"\",this.name=\"\",this.piTarget=\"\",this.entity=\"\",this.q=null,this.tags=[],this.tag=null,this.topNS=null,this.chunk=\"\",this.chunkPosition=0,this.i=0,this.prevI=0,this.carriedFromPrevious=void 0,this.forbiddenState=0,this.attribList=[];const{fragmentOpt:t}=this;this.state=t?13:0,this.reportedTextBeforeRoot=this.reportedTextAfterRoot=this.closedRoot=this.sawRoot=t,this.xmlDeclPossible=!t,this.xmlDeclExpects=[\"version\"],this.entityReturnState=void 0;let{defaultXMLVersion:r}=this.opt;if(void 0===r){if(!0===this.opt.forceXMLVersion)throw new Error(\"forceXMLVersion set but defaultXMLVersion is not set\");r=\"1.0\"}this.setXMLVersion(r),this.positionAtNewLine=0,this.doctype=!1,this._closed=!1,this.xmlDecl={version:void 0,encoding:void 0,standalone:void 0},this.line=1,this.column=0,this.ENTITIES=Object.create(y),null===(e=this.readyHandler)||void 0===e||e.call(this)}get position(){return this.chunkPosition+this.i}get columnIndex(){return this.position-this.positionAtNewLine}on(e,t){this[j[e]]=t}off(e){this[j[e]]=void 0}makeError(e){var t;let r=null!==(t=this.fileName)&&void 0!==t?t:\"\";return this.trackPosition&&(r.length>0&&(r+=\":\"),r+=`${this.line}:${this.column}`),r.length>0&&(r+=\": \"),new Error(r+e)}fail(e){const t=this.makeError(e),r=this.errorHandler;if(void 0===r)throw t;return r(t),this}write(e){if(this.closed)return this.fail(\"cannot write after close; assign an onready handler.\");let t=!1;null===e?(t=!0,e=\"\"):\"object\"==typeof e&&(e=e.toString()),void 0!==this.carriedFromPrevious&&(e=`${this.carriedFromPrevious}${e}`,this.carriedFromPrevious=void 0);let r=e.length;const n=e.charCodeAt(r-1);!t&&(13===n||n>=55296&&n<=56319)&&(this.carriedFromPrevious=e[r-1],r--,e=e.slice(0,r));const{stateTable:o}=this;for(this.chunk=e,this.i=0;this.i<r;)o[this.state].call(this);return this.chunkPosition+=r,t?this.end():this}close(){return this.write(null)}getCode10(){const{chunk:e,i:t}=this;if(this.prevI=t,this.i=t+1,t>=e.length)return-1;const r=e.charCodeAt(t);if(this.column++,r<55296){if(r>=32||9===r)return r;switch(r){case 10:return this.line++,this.column=0,this.positionAtNewLine=this.position,10;case 13:return 10===e.charCodeAt(t+1)&&(this.i=t+2),this.line++,this.column=0,this.positionAtNewLine=this.position,-2;default:return this.fail(\"disallowed character.\"),r}}if(r>56319)return r>=57344&&r<=65533||this.fail(\"disallowed character.\"),r;const n=65536+1024*(r-55296)+(e.charCodeAt(t+1)-56320);return this.i=t+2,n>1114111&&this.fail(\"disallowed character.\"),n}getCode11(){const{chunk:e,i:t}=this;if(this.prevI=t,this.i=t+1,t>=e.length)return-1;const r=e.charCodeAt(t);if(this.column++,r<55296){if(r>31&&r<127||r>159&&8232!==r||9===r)return r;switch(r){case 10:return this.line++,this.column=0,this.positionAtNewLine=this.position,10;case 13:{const r=e.charCodeAt(t+1);10!==r&&133!==r||(this.i=t+2)}case 133:case 8232:return this.line++,this.column=0,this.positionAtNewLine=this.position,-2;default:return this.fail(\"disallowed character.\"),r}}if(r>56319)return r>=57344&&r<=65533||this.fail(\"disallowed character.\"),r;const n=65536+1024*(r-55296)+(e.charCodeAt(t+1)-56320);return this.i=t+2,n>1114111&&this.fail(\"disallowed character.\"),n}getCodeNorm(){const e=this.getCode();return-2===e?10:e}unget(){this.i=this.prevI,this.column--}captureTo(e){let{i:t}=this;const{chunk:r}=this;for(;;){const n=this.getCode(),o=-2===n,i=o?10:n;if(-1===i||e.includes(i))return this.text+=r.slice(t,this.prevI),i;o&&(this.text+=r.slice(t,this.prevI)+\"\\n\",t=this.i)}}captureToChar(e){let{i:t}=this;const{chunk:r}=this;for(;;){let n=this.getCode();switch(n){case-2:this.text+=r.slice(t,this.prevI)+\"\\n\",t=this.i,n=10;break;case-1:return this.text+=r.slice(t),!1}if(n===e)return this.text+=r.slice(t,this.prevI),!0}}captureNameChars(){const{chunk:e,i:t}=this;for(;;){const r=this.getCode();if(-1===r)return this.name+=e.slice(t),-1;if(!c(r))return this.name+=e.slice(t,this.prevI),-2===r?10:r}}skipSpaces(){for(;;){const e=this.getCodeNorm();if(-1===e||!a(e))return e}}setXMLVersion(e){this.currentXMLVersion=e,\"1.0\"===e?(this.isChar=s,this.getCode=this.getCode10):(this.isChar=f,this.getCode=this.getCode11)}sBegin(){65279===this.chunk.charCodeAt(0)&&(this.i++,this.column++),this.state=1}sBeginWhitespace(){const e=this.i,t=this.skipSpaces();switch(this.prevI!==e&&(this.xmlDeclPossible=!1),t){case 60:if(this.state=15,0!==this.text.length)throw new Error(\"no-empty text at start\");break;case-1:break;default:this.unget(),this.state=13,this.xmlDeclPossible=!1}}sDoctype(){var e;const t=this.captureTo(S);switch(t){case 62:null===(e=this.doctypeHandler)||void 0===e||e.call(this,this.text),this.text=\"\",this.state=13,this.doctype=!0;break;case-1:break;default:this.text+=String.fromCodePoint(t),91===t?this.state=4:w(t)&&(this.state=3,this.q=t)}}sDoctypeQuote(){const e=this.q;this.captureToChar(e)&&(this.text+=String.fromCodePoint(e),this.q=null,this.state=2)}sDTD(){const e=this.captureTo(C);-1!==e&&(this.text+=String.fromCodePoint(e),93===e?this.state=2:60===e?this.state=6:w(e)&&(this.state=5,this.q=e))}sDTDQuoted(){const e=this.q;this.captureToChar(e)&&(this.text+=String.fromCodePoint(e),this.state=4,this.q=null)}sDTDOpenWaka(){const e=this.getCodeNorm();switch(this.text+=String.fromCodePoint(e),e){case 33:this.state=7,this.openWakaBang=\"\";break;case 63:this.state=11;break;default:this.state=4}}sDTDOpenWakaBang(){const e=String.fromCodePoint(this.getCodeNorm()),t=this.openWakaBang+=e;this.text+=e,\"-\"!==t&&(this.state=\"--\"===t?8:4,this.openWakaBang=\"\")}sDTDComment(){this.captureToChar(45)&&(this.text+=\"-\",this.state=9)}sDTDCommentEnding(){const e=this.getCodeNorm();this.text+=String.fromCodePoint(e),this.state=45===e?10:8}sDTDCommentEnded(){const e=this.getCodeNorm();this.text+=String.fromCodePoint(e),62===e?this.state=4:(this.fail(\"malformed comment.\"),this.state=8)}sDTDPI(){this.captureToChar(63)&&(this.text+=\"?\",this.state=12)}sDTDPIEnding(){const e=this.getCodeNorm();this.text+=String.fromCodePoint(e),62===e&&(this.state=4)}sText(){0!==this.tags.length?this.handleTextInRoot():this.handleTextOutsideRoot()}sEntity(){let{i:e}=this;const{chunk:t}=this;e:for(;;)switch(this.getCode()){case-2:this.entity+=t.slice(e,this.prevI)+\"\\n\",e=this.i;break;case 59:{const{entityReturnState:r}=this,n=this.entity+t.slice(e,this.prevI);let o;this.state=r,\"\"===n?(this.fail(\"empty entity name.\"),o=\"&;\"):(o=this.parseEntity(n),this.entity=\"\"),13===r&&void 0===this.textHandler||(this.text+=o);break e}case-1:this.entity+=t.slice(e);break e}}sOpenWaka(){const e=this.getCode();if(l(e))this.state=34,this.unget(),this.xmlDeclPossible=!1;else switch(e){case 47:this.state=43,this.xmlDeclPossible=!1;break;case 33:this.state=16,this.openWakaBang=\"\",this.xmlDeclPossible=!1;break;case 63:this.state=23;break;default:this.fail(\"disallowed character in tag name\"),this.state=13,this.xmlDeclPossible=!1}}sOpenWakaBang(){switch(this.openWakaBang+=String.fromCodePoint(this.getCodeNorm()),this.openWakaBang){case\"[CDATA[\":this.sawRoot||this.reportedTextBeforeRoot||(this.fail(\"text data outside of root node.\"),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail(\"text data outside of root node.\"),this.reportedTextAfterRoot=!0),this.state=20,this.openWakaBang=\"\";break;case\"--\":this.state=17,this.openWakaBang=\"\";break;case\"DOCTYPE\":this.state=2,(this.doctype||this.sawRoot)&&this.fail(\"inappropriately located doctype declaration.\"),this.openWakaBang=\"\";break;default:this.openWakaBang.length>=7&&this.fail(\"incorrect syntax.\")}}sComment(){this.captureToChar(45)&&(this.state=18)}sCommentEnding(){var e;const t=this.getCodeNorm();45===t?(this.state=19,null===(e=this.commentHandler)||void 0===e||e.call(this,this.text),this.text=\"\"):(this.text+=\"-\"+String.fromCodePoint(t),this.state=17)}sCommentEnded(){const e=this.getCodeNorm();62!==e?(this.fail(\"malformed comment.\"),this.text+=\"--\"+String.fromCodePoint(e),this.state=17):this.state=13}sCData(){this.captureToChar(93)&&(this.state=21)}sCDataEnding(){const e=this.getCodeNorm();93===e?this.state=22:(this.text+=\"]\"+String.fromCodePoint(e),this.state=20)}sCDataEnding2(){var e;const t=this.getCodeNorm();switch(t){case 62:null===(e=this.cdataHandler)||void 0===e||e.call(this,this.text),this.text=\"\",this.state=13;break;case 93:this.text+=\"]\";break;default:this.text+=\"]]\"+String.fromCodePoint(t),this.state=20}}sPIFirstChar(){const e=this.getCodeNorm();this.nameStartCheck(e)?(this.piTarget+=String.fromCodePoint(e),this.state=24):63===e||a(e)?(this.fail(\"processing instruction without a target.\"),this.state=63===e?26:25):(this.fail(\"disallowed character in processing instruction name.\"),this.piTarget+=String.fromCodePoint(e),this.state=24)}sPIRest(){const{chunk:e,i:t}=this;for(;;){const r=this.getCodeNorm();if(-1===r)return void(this.piTarget+=e.slice(t));if(!this.nameCheck(r)){this.piTarget+=e.slice(t,this.prevI);const n=63===r;n||a(r)?\"xml\"===this.piTarget?(this.xmlDeclPossible||this.fail(\"an XML declaration must be at the start of the document.\"),this.state=n?33:27):this.state=n?26:25:(this.fail(\"disallowed character in processing instruction name.\"),this.piTarget+=String.fromCodePoint(r));break}}}sPIBody(){if(0===this.text.length){const e=this.getCodeNorm();63===e?this.state=26:a(e)||(this.text=String.fromCodePoint(e))}else this.captureToChar(63)&&(this.state=26)}sPIEnding(){var e;const t=this.getCodeNorm();if(62===t){const{piTarget:t}=this;\"xml\"===t.toLowerCase()&&this.fail(\"the XML declaration must appear at the start of the document.\"),null===(e=this.piHandler)||void 0===e||e.call(this,{target:t,body:this.text}),this.piTarget=this.text=\"\",this.state=13}else 63===t?this.text+=\"?\":(this.text+=\"?\"+String.fromCodePoint(t),this.state=25);this.xmlDeclPossible=!1}sXMLDeclNameStart(){const e=this.skipSpaces();63!==e?-1!==e&&(this.state=28,this.name=String.fromCodePoint(e)):this.state=33}sXMLDeclName(){const e=this.captureTo(k);if(63===e)return this.state=33,this.name+=this.text,this.text=\"\",void this.fail(\"XML declaration is incomplete.\");if(a(e)||61===e){if(this.name+=this.text,this.text=\"\",!this.xmlDeclExpects.includes(this.name))switch(this.name.length){case 0:this.fail(\"did not expect any more name/value pairs.\");break;case 1:this.fail(`expected the name ${this.xmlDeclExpects[0]}.`);break;default:this.fail(\"expected one of \"+this.xmlDeclExpects.join(\", \"))}this.state=61===e?30:29}}sXMLDeclEq(){const e=this.getCodeNorm();if(63===e)return this.state=33,void this.fail(\"XML declaration is incomplete.\");a(e)||(61!==e&&this.fail(\"value required.\"),this.state=30)}sXMLDeclValueStart(){const e=this.getCodeNorm();if(63===e)return this.state=33,void this.fail(\"XML declaration is incomplete.\");a(e)||(w(e)?this.q=e:(this.fail(\"value must be quoted.\"),this.q=32),this.state=31)}sXMLDeclValue(){const e=this.captureTo([this.q,63]);if(63===e)return this.state=33,this.text=\"\",void this.fail(\"XML declaration is incomplete.\");if(-1===e)return;const t=this.text;switch(this.text=\"\",this.name){case\"version\":{this.xmlDeclExpects=[\"encoding\",\"standalone\"];const e=t;this.xmlDecl.version=e,/^1\\.[0-9]+$/.test(e)?this.opt.forceXMLVersion||this.setXMLVersion(e):this.fail(\"version number must match /^1\\\\.[0-9]+$/.\");break}case\"encoding\":/^[A-Za-z][A-Za-z0-9._-]*$/.test(t)||this.fail(\"encoding value must match /^[A-Za-z0-9][A-Za-z0-9._-]*$/.\"),this.xmlDeclExpects=[\"standalone\"],this.xmlDecl.encoding=t;break;case\"standalone\":\"yes\"!==t&&\"no\"!==t&&this.fail('standalone value must match \"yes\" or \"no\".'),this.xmlDeclExpects=[],this.xmlDecl.standalone=t}this.name=\"\",this.state=32}sXMLDeclSeparator(){const e=this.getCodeNorm();63!==e?(a(e)||(this.fail(\"whitespace required.\"),this.unget()),this.state=27):this.state=33}sXMLDeclEnding(){var e;62===this.getCodeNorm()?(\"xml\"!==this.piTarget?this.fail(\"processing instructions are not allowed before root.\"):\"version\"!==this.name&&this.xmlDeclExpects.includes(\"version\")&&this.fail(\"XML declaration must contain a version.\"),null===(e=this.xmldeclHandler)||void 0===e||e.call(this,this.xmlDecl),this.name=\"\",this.piTarget=this.text=\"\",this.state=13):this.fail(\"The character ? is disallowed anywhere in XML declarations.\"),this.xmlDeclPossible=!1}sOpenTag(){var e;const t=this.captureNameChars();if(-1===t)return;const r=this.tag={name:this.name,attributes:Object.create(null)};switch(this.name=\"\",this.xmlnsOpt&&(this.topNS=r.ns=Object.create(null)),null===(e=this.openTagStartHandler)||void 0===e||e.call(this,r),this.sawRoot=!0,!this.fragmentOpt&&this.closedRoot&&this.fail(\"documents may contain only one root.\"),t){case 62:this.openTag();break;case 47:this.state=35;break;default:a(t)||this.fail(\"disallowed character in tag name.\"),this.state=36}}sOpenTagSlash(){62===this.getCode()?this.openSelfClosingTag():(this.fail(\"forward-slash in opening tag not followed by >.\"),this.state=36)}sAttrib(){const e=this.skipSpaces();-1!==e&&(l(e)?(this.unget(),this.state=37):62===e?this.openTag():47===e?this.state=35:this.fail(\"disallowed character in attribute name.\"))}sAttribName(){const e=this.captureNameChars();61===e?this.state=39:a(e)?this.state=38:62===e?(this.fail(\"attribute without value.\"),this.pushAttrib(this.name,this.name),this.name=this.text=\"\",this.openTag()):-1!==e&&this.fail(\"disallowed character in attribute name.\")}sAttribNameSawWhite(){const e=this.skipSpaces();switch(e){case-1:return;case 61:this.state=39;break;default:this.fail(\"attribute without value.\"),this.text=\"\",this.name=\"\",62===e?this.openTag():l(e)?(this.unget(),this.state=37):(this.fail(\"disallowed character in attribute name.\"),this.state=36)}}sAttribValue(){const e=this.getCodeNorm();w(e)?(this.q=e,this.state=40):a(e)||(this.fail(\"unquoted attribute value.\"),this.state=42,this.unget())}sAttribValueQuoted(){const{q:e,chunk:t}=this;let{i:r}=this;for(;;)switch(this.getCode()){case e:return this.pushAttrib(this.name,this.text+t.slice(r,this.prevI)),this.name=this.text=\"\",this.q=null,void(this.state=41);case 38:return this.text+=t.slice(r,this.prevI),this.state=14,void(this.entityReturnState=40);case 10:case-2:case 9:this.text+=t.slice(r,this.prevI)+\" \",r=this.i;break;case 60:return this.text+=t.slice(r,this.prevI),void this.fail(\"disallowed character.\");case-1:return void(this.text+=t.slice(r))}}sAttribValueClosed(){const e=this.getCodeNorm();a(e)?this.state=36:62===e?this.openTag():47===e?this.state=35:l(e)?(this.fail(\"no whitespace between attributes.\"),this.unget(),this.state=37):this.fail(\"disallowed character in attribute name.\")}sAttribValueUnquoted(){const e=this.captureTo(E);switch(e){case 38:this.state=14,this.entityReturnState=42;break;case 60:this.fail(\"disallowed character.\");break;case-1:break;default:this.text.includes(\"]]>\")&&this.fail('the string \"]]>\" is disallowed in char data.'),this.pushAttrib(this.name,this.text),this.name=this.text=\"\",62===e?this.openTag():this.state=36}}sCloseTag(){const e=this.captureNameChars();62===e?this.closeTag():a(e)?this.state=44:-1!==e&&this.fail(\"disallowed character in closing tag.\")}sCloseTagSawWhite(){switch(this.skipSpaces()){case 62:this.closeTag();break;case-1:break;default:this.fail(\"disallowed character in closing tag.\")}}handleTextInRoot(){let{i:e,forbiddenState:t}=this;const{chunk:r,textHandler:n}=this;e:for(;;)switch(this.getCode()){case 60:if(this.state=15,void 0!==n){const{text:t}=this,o=r.slice(e,this.prevI);0!==t.length?(n(t+o),this.text=\"\"):0!==o.length&&n(o)}t=0;break e;case 38:this.state=14,this.entityReturnState=13,void 0!==n&&(this.text+=r.slice(e,this.prevI)),t=0;break e;case 93:switch(t){case 0:t=1;break;case 1:t=2;break;case 2:break;default:throw new Error(\"impossible state\")}break;case 62:2===t&&this.fail('the string \"]]>\" is disallowed in char data.'),t=0;break;case-2:void 0!==n&&(this.text+=r.slice(e,this.prevI)+\"\\n\"),e=this.i,t=0;break;case-1:void 0!==n&&(this.text+=r.slice(e));break e;default:t=0}this.forbiddenState=t}handleTextOutsideRoot(){let{i:e}=this;const{chunk:t,textHandler:r}=this;let n=!1;e:for(;;){const o=this.getCode();switch(o){case 60:if(this.state=15,void 0!==r){const{text:n}=this,o=t.slice(e,this.prevI);0!==n.length?(r(n+o),this.text=\"\"):0!==o.length&&r(o)}break e;case 38:this.state=14,this.entityReturnState=13,void 0!==r&&(this.text+=t.slice(e,this.prevI)),n=!0;break e;case-2:void 0!==r&&(this.text+=t.slice(e,this.prevI)+\"\\n\"),e=this.i;break;case-1:void 0!==r&&(this.text+=t.slice(e));break e;default:a(o)||(n=!0)}}n&&(this.sawRoot||this.reportedTextBeforeRoot||(this.fail(\"text data outside of root node.\"),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail(\"text data outside of root node.\"),this.reportedTextAfterRoot=!0))}pushAttribNS(e,t){var r;const{prefix:n,local:o}=this.qname(e),i={name:e,prefix:n,local:o,value:t};if(this.attribList.push(i),null===(r=this.attributeHandler)||void 0===r||r.call(this,i),\"xmlns\"===n){const e=t.trim();\"1.0\"===this.currentXMLVersion&&\"\"===e&&this.fail(\"invalid attempt to undefine prefix in XML 1.0\"),this.topNS[o]=e,O(this,o,e)}else if(\"xmlns\"===e){const e=t.trim();this.topNS[\"\"]=e,O(this,\"\",e)}}pushAttribPlain(e,t){var r;const n={name:e,value:t};this.attribList.push(n),null===(r=this.attributeHandler)||void 0===r||r.call(this,n)}end(){var e,t;this.sawRoot||this.fail(\"document must contain a root element.\");const{tags:r}=this;for(;r.length>0;){const e=r.pop();this.fail(\"unclosed tag: \"+e.name)}0!==this.state&&13!==this.state&&this.fail(\"unexpected end.\");const{text:n}=this;return 0!==n.length&&(null===(e=this.textHandler)||void 0===e||e.call(this,n),this.text=\"\"),this._closed=!0,null===(t=this.endHandler)||void 0===t||t.call(this),this._init(),this}resolve(e){var t,r;let n=this.topNS[e];if(void 0!==n)return n;const{tags:o}=this;for(let t=o.length-1;t>=0;t--)if(n=o[t].ns[e],void 0!==n)return n;return n=this.ns[e],void 0!==n?n:null===(r=(t=this.opt).resolvePrefix)||void 0===r?void 0:r.call(t,e)}qname(e){const t=e.indexOf(\":\");if(-1===t)return{prefix:\"\",local:e};const r=e.slice(t+1),n=e.slice(0,t);return(\"\"===n||\"\"===r||r.includes(\":\"))&&this.fail(`malformed name: ${e}.`),{prefix:n,local:r}}processAttribsNS(){var e;const{attribList:t}=this,r=this.tag;{const{prefix:t,local:n}=this.qname(r.name);r.prefix=t,r.local=n;const o=r.uri=null!==(e=this.resolve(t))&&void 0!==e?e:\"\";\"\"!==t&&(\"xmlns\"===t&&this.fail('tags may not have \"xmlns\" as prefix.'),\"\"===o&&(this.fail(`unbound namespace prefix: ${JSON.stringify(t)}.`),r.uri=t))}if(0===t.length)return;const{attributes:n}=r,o=new Set;for(const e of t){const{name:t,prefix:r,local:i}=e;let a,s;\"\"===r?(a=\"xmlns\"===t?v:\"\",s=t):(a=this.resolve(r),void 0===a&&(this.fail(`unbound namespace prefix: ${JSON.stringify(r)}.`),a=r),s=`{${a}}${i}`),o.has(s)&&this.fail(`duplicate attribute: ${s}.`),o.add(s),e.uri=a,n[t]=e}this.attribList=[]}processAttribsPlain(){const{attribList:e}=this,t=this.tag.attributes;for(const{name:r,value:n}of e)void 0!==t[r]&&this.fail(`duplicate attribute: ${r}.`),t[r]=n;this.attribList=[]}openTag(){var e;this.processAttribs();const{tags:t}=this,r=this.tag;r.isSelfClosing=!1,null===(e=this.openTagHandler)||void 0===e||e.call(this,r),t.push(r),this.state=13,this.name=\"\"}openSelfClosingTag(){var e,t,r;this.processAttribs();const{tags:n}=this,o=this.tag;o.isSelfClosing=!0,null===(e=this.openTagHandler)||void 0===e||e.call(this,o),null===(t=this.closeTagHandler)||void 0===t||t.call(this,o),null===(this.tag=null!==(r=n[n.length-1])&&void 0!==r?r:null)&&(this.closedRoot=!0),this.state=13,this.name=\"\"}closeTag(){const{tags:e,name:t}=this;if(this.state=13,this.name=\"\",\"\"===t)return this.fail(\"weird empty close tag.\"),void(this.text+=\"</>\");const r=this.closeTagHandler;let n=e.length;for(;n-- >0;){const n=this.tag=e.pop();if(this.topNS=n.ns,null==r||r(n),n.name===t)break;this.fail(\"unexpected close tag.\")}0===n?this.closedRoot=!0:n<0&&(this.fail(`unmatched closing tag: ${t}.`),this.text+=`</${t}>`)}parseEntity(e){if(\"#\"!==e[0]){const t=this.ENTITIES[e];return void 0!==t?t:(this.fail(this.isName(e)?\"undefined entity.\":\"disallowed character in entity name.\"),`&${e};`)}let t=NaN;return\"x\"===e[1]&&/^#x[0-9a-f]+$/i.test(e)?t=parseInt(e.slice(2),16):/^#[0-9]+$/.test(e)&&(t=parseInt(e.slice(1),10)),this.isChar(t)?String.fromCodePoint(t):(this.fail(\"malformed character entity.\"),`&${e};`)}}},{\"xmlchars/xml/1.0/ed5\":543,\"xmlchars/xml/1.1/ed2\":544,\"xmlchars/xmlns/1.0/ed3\":545}],497:[function(e,t,r){\"use strict\";var n=e(\"safe-buffer\").Buffer;function o(e,t){this._block=n.alloc(e),this._finalSize=t,this._blockSize=e,this._len=0}o.prototype.update=function(e,t){\"string\"==typeof e&&(t=t||\"utf8\",e=n.from(e,t));for(var r=this._block,o=this._blockSize,i=e.length,a=this._len,s=0;s<i;){for(var l=a%o,c=Math.min(i-s,o-l),u=0;u<c;u++)r[l+u]=e[s+u];s+=c,(a+=c)%o==0&&this._update(r)}return this._len+=i,this},o.prototype.digest=function(e){var t=this._len%this._blockSize;this._block[t]=128,this._block.fill(0,t+1),t>=this._finalSize&&(this._update(this._block),this._block.fill(0));var r=8*this._len;if(r<=4294967295)this._block.writeUInt32BE(r,this._blockSize-4);else{var n=(4294967295&r)>>>0,o=(r-n)/4294967296;this._block.writeUInt32BE(o,this._blockSize-8),this._block.writeUInt32BE(n,this._blockSize-4)}this._update(this._block);var i=this._hash();return e?i.toString(e):i},o.prototype._update=function(){throw new Error(\"_update must be implemented by subclass\")},t.exports=o},{\"safe-buffer\":494}],498:[function(e,t,r){\"use strict\";var n=t.exports=function(e){e=e.toLowerCase();var t=n[e];if(!t)throw new Error(e+\" is not supported (we accept pull requests)\");return new t};n.sha=e(\"./sha\"),n.sha1=e(\"./sha1\"),n.sha224=e(\"./sha224\"),n.sha256=e(\"./sha256\"),n.sha384=e(\"./sha384\"),n.sha512=e(\"./sha512\")},{\"./sha\":499,\"./sha1\":500,\"./sha224\":501,\"./sha256\":502,\"./sha384\":503,\"./sha512\":504}],499:[function(e,t,r){\"use strict\";var n=e(\"inherits\"),o=e(\"./hash\"),i=e(\"safe-buffer\").Buffer,a=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function l(){this.init(),this._w=s,o.call(this,64,56)}function c(e){return e<<30|e>>>2}function u(e,t,r,n){return 0===e?t&r|~t&n:2===e?t&r|t&n|r&n:t^r^n}n(l,o),l.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},l.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,o=0|this._b,i=0|this._c,s=0|this._d,l=0|this._e,d=0;d<16;++d)r[d]=e.readInt32BE(4*d);for(;d<80;++d)r[d]=r[d-3]^r[d-8]^r[d-14]^r[d-16];for(var f=0;f<80;++f){var h=~~(f/20),p=0|((t=n)<<5|t>>>27)+u(h,o,i,s)+l+r[f]+a[h];l=s,s=i,i=c(o),o=n,n=p}this._a=n+this._a|0,this._b=o+this._b|0,this._c=i+this._c|0,this._d=s+this._d|0,this._e=l+this._e|0},l.prototype._hash=function(){var e=i.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},t.exports=l},{\"./hash\":497,inherits:440,\"safe-buffer\":494}],500:[function(e,t,r){\"use strict\";var n=e(\"inherits\"),o=e(\"./hash\"),i=e(\"safe-buffer\").Buffer,a=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function l(){this.init(),this._w=s,o.call(this,64,56)}function c(e){return e<<5|e>>>27}function u(e){return e<<30|e>>>2}function d(e,t,r,n){return 0===e?t&r|~t&n:2===e?t&r|t&n|r&n:t^r^n}n(l,o),l.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},l.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,o=0|this._b,i=0|this._c,s=0|this._d,l=0|this._e,f=0;f<16;++f)r[f]=e.readInt32BE(4*f);for(;f<80;++f)r[f]=(t=r[f-3]^r[f-8]^r[f-14]^r[f-16])<<1|t>>>31;for(var h=0;h<80;++h){var p=~~(h/20),m=c(n)+d(p,o,i,s)+l+r[h]+a[p]|0;l=s,s=i,i=u(o),o=n,n=m}this._a=n+this._a|0,this._b=o+this._b|0,this._c=i+this._c|0,this._d=s+this._d|0,this._e=l+this._e|0},l.prototype._hash=function(){var e=i.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},t.exports=l},{\"./hash\":497,inherits:440,\"safe-buffer\":494}],501:[function(e,t,r){\"use strict\";var n=e(\"inherits\"),o=e(\"./sha256\"),i=e(\"./hash\"),a=e(\"safe-buffer\").Buffer,s=new Array(64);function l(){this.init(),this._w=s,i.call(this,64,56)}n(l,o),l.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},l.prototype._hash=function(){var e=a.allocUnsafe(28);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e},t.exports=l},{\"./hash\":497,\"./sha256\":502,inherits:440,\"safe-buffer\":494}],502:[function(e,t,r){\"use strict\";var n=e(\"inherits\"),o=e(\"./hash\"),i=e(\"safe-buffer\").Buffer,a=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],s=new Array(64);function l(){this.init(),this._w=s,o.call(this,64,56)}function c(e,t,r){return r^e&(t^r)}function u(e,t,r){return e&t|r&(e|t)}function d(e){return(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}function f(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}function h(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}n(l,o),l.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},l.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,o=0|this._b,i=0|this._c,s=0|this._d,l=0|this._e,p=0|this._f,m=0|this._g,g=0|this._h,v=0;v<16;++v)r[v]=e.readInt32BE(4*v);for(;v<64;++v)r[v]=0|(((t=r[v-2])>>>17|t<<15)^(t>>>19|t<<13)^t>>>10)+r[v-7]+h(r[v-15])+r[v-16];for(var b=0;b<64;++b){var y=g+f(l)+c(l,p,m)+a[b]+r[b]|0,w=d(n)+u(n,o,i)|0;g=m,m=p,p=l,l=s+y|0,s=i,i=o,o=n,n=y+w|0}this._a=n+this._a|0,this._b=o+this._b|0,this._c=i+this._c|0,this._d=s+this._d|0,this._e=l+this._e|0,this._f=p+this._f|0,this._g=m+this._g|0,this._h=g+this._h|0},l.prototype._hash=function(){var e=i.allocUnsafe(32);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e.writeInt32BE(this._h,28),e},t.exports=l},{\"./hash\":497,inherits:440,\"safe-buffer\":494}],503:[function(e,t,r){\"use strict\";var n=e(\"inherits\"),o=e(\"./sha512\"),i=e(\"./hash\"),a=e(\"safe-buffer\").Buffer,s=new Array(160);function l(){this.init(),this._w=s,i.call(this,128,112)}n(l,o),l.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},l.prototype._hash=function(){var e=a.allocUnsafe(48);function t(t,r,n){e.writeInt32BE(t,n),e.writeInt32BE(r,n+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),e},t.exports=l},{\"./hash\":497,\"./sha512\":504,inherits:440,\"safe-buffer\":494}],504:[function(e,t,r){\"use strict\";var n=e(\"inherits\"),o=e(\"./hash\"),i=e(\"safe-buffer\").Buffer,a=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],s=new Array(160);function l(){this.init(),this._w=s,o.call(this,128,112)}function c(e,t,r){return r^e&(t^r)}function u(e,t,r){return e&t|r&(e|t)}function d(e,t){return(e>>>28|t<<4)^(t>>>2|e<<30)^(t>>>7|e<<25)}function f(e,t){return(e>>>14|t<<18)^(e>>>18|t<<14)^(t>>>9|e<<23)}function h(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^e>>>7}function p(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^(e>>>7|t<<25)}function m(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^e>>>6}function g(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^(e>>>6|t<<26)}function v(e,t){return e>>>0<t>>>0?1:0}n(l,o),l.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},l.prototype._update=function(e){for(var t=this._w,r=0|this._ah,n=0|this._bh,o=0|this._ch,i=0|this._dh,s=0|this._eh,l=0|this._fh,b=0|this._gh,y=0|this._hh,w=0|this._al,x=0|this._bl,S=0|this._cl,C=0|this._dl,k=0|this._el,E=0|this._fl,O=0|this._gl,A=0|this._hl,T=0;T<32;T+=2)t[T]=e.readInt32BE(4*T),t[T+1]=e.readInt32BE(4*T+4);for(;T<160;T+=2){var j=t[T-30],P=t[T-30+1],M=h(j,P),R=p(P,j),_=m(j=t[T-4],P=t[T-4+1]),I=g(P,j),N=t[T-14],F=t[T-14+1],D=t[T-32],B=t[T-32+1],L=R+F|0,z=M+N+v(L,R)|0;z=(z=z+_+v(L=L+I|0,I)|0)+D+v(L=L+B|0,B)|0,t[T]=z,t[T+1]=L}for(var H=0;H<160;H+=2){z=t[H],L=t[H+1];var U=u(r,n,o),V=u(w,x,S),W=d(r,w),G=d(w,r),q=f(s,k),K=f(k,s),X=a[H],Y=a[H+1],$=c(s,l,b),Z=c(k,E,O),Q=A+K|0,J=y+q+v(Q,A)|0;J=(J=(J=J+$+v(Q=Q+Z|0,Z)|0)+X+v(Q=Q+Y|0,Y)|0)+z+v(Q=Q+L|0,L)|0;var ee=G+V|0,te=W+U+v(ee,G)|0;y=b,A=O,b=l,O=E,l=s,E=k,s=i+J+v(k=C+Q|0,C)|0,i=o,C=S,o=n,S=x,n=r,x=w,r=J+te+v(w=Q+ee|0,Q)|0}this._al=this._al+w|0,this._bl=this._bl+x|0,this._cl=this._cl+S|0,this._dl=this._dl+C|0,this._el=this._el+k|0,this._fl=this._fl+E|0,this._gl=this._gl+O|0,this._hl=this._hl+A|0,this._ah=this._ah+r+v(this._al,w)|0,this._bh=this._bh+n+v(this._bl,x)|0,this._ch=this._ch+o+v(this._cl,S)|0,this._dh=this._dh+i+v(this._dl,C)|0,this._eh=this._eh+s+v(this._el,k)|0,this._fh=this._fh+l+v(this._fl,E)|0,this._gh=this._gh+b+v(this._gl,O)|0,this._hh=this._hh+y+v(this._hl,A)|0},l.prototype._hash=function(){var e=i.allocUnsafe(64);function t(t,r,n){e.writeInt32BE(t,n),e.writeInt32BE(r,n+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),t(this._gh,this._gl,48),t(this._hh,this._hl,56),e},t.exports=l},{\"./hash\":497,inherits:440,\"safe-buffer\":494}],505:[function(e,t,r){\"use strict\";t.exports=o;var n=e(\"events\").EventEmitter;function o(){n.call(this)}e(\"inherits\")(o,n),o.Readable=e(\"readable-stream/readable.js\"),o.Writable=e(\"readable-stream/writable.js\"),o.Duplex=e(\"readable-stream/duplex.js\"),o.Transform=e(\"readable-stream/transform.js\"),o.PassThrough=e(\"readable-stream/passthrough.js\"),o.Stream=o,o.prototype.pipe=function(e,t){var r=this;function o(t){e.writable&&!1===e.write(t)&&r.pause&&r.pause()}function i(){r.readable&&r.resume&&r.resume()}r.on(\"data\",o),e.on(\"drain\",i),e._isStdio||t&&!1===t.end||(r.on(\"end\",s),r.on(\"close\",l));var a=!1;function s(){a||(a=!0,e.end())}function l(){a||(a=!0,\"function\"==typeof e.destroy&&e.destroy())}function c(e){if(u(),0===n.listenerCount(this,\"error\"))throw e}function u(){r.removeListener(\"data\",o),e.removeListener(\"drain\",i),r.removeListener(\"end\",s),r.removeListener(\"close\",l),r.removeListener(\"error\",c),e.removeListener(\"error\",c),r.removeListener(\"end\",u),r.removeListener(\"close\",u),e.removeListener(\"close\",u)}return r.on(\"error\",c),e.on(\"error\",c),r.on(\"end\",u),r.on(\"close\",u),e.on(\"close\",u),e.emit(\"pipe\",r),e}},{events:422,inherits:440,\"readable-stream/duplex.js\":507,\"readable-stream/passthrough.js\":516,\"readable-stream/readable.js\":517,\"readable-stream/transform.js\":518,\"readable-stream/writable.js\":519}],506:[function(e,t,r){\"use strict\";var n={}.toString;t.exports=Array.isArray||function(e){return\"[object Array]\"==n.call(e)}},{}],507:[function(e,t,r){\"use strict\";t.exports=e(\"./lib/_stream_duplex.js\")},{\"./lib/_stream_duplex.js\":508}],508:[function(e,t,r){\"use strict\";var n=e(\"process-nextick-args\"),o=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};t.exports=d;var i=Object.create(e(\"core-util-is\"));i.inherits=e(\"inherits\");var a=e(\"./_stream_readable\"),s=e(\"./_stream_writable\");i.inherits(d,a);for(var l=o(s.prototype),c=0;c<l.length;c++){var u=l[c];d.prototype[u]||(d.prototype[u]=s.prototype[u])}function d(e){if(!(this instanceof d))return new d(e);a.call(this,e),s.call(this,e),e&&!1===e.readable&&(this.readable=!1),e&&!1===e.writable&&(this.writable=!1),this.allowHalfOpen=!0,e&&!1===e.allowHalfOpen&&(this.allowHalfOpen=!1),this.once(\"end\",f)}function f(){this.allowHalfOpen||this._writableState.ended||n.nextTick(h,this)}function h(e){e.end()}Object.defineProperty(d.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(d.prototype,\"destroyed\",{get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&this._readableState.destroyed&&this._writableState.destroyed},set:function(e){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=e,this._writableState.destroyed=e)}}),d.prototype._destroy=function(e,t){this.push(null),this.end(),n.nextTick(t,e)}},{\"./_stream_readable\":510,\"./_stream_writable\":512,\"core-util-is\":383,inherits:440,\"process-nextick-args\":466}],509:[function(e,t,r){\"use strict\";t.exports=i;var n=e(\"./_stream_transform\"),o=Object.create(e(\"core-util-is\"));function i(e){if(!(this instanceof i))return new i(e);n.call(this,e)}o.inherits=e(\"inherits\"),o.inherits(i,n),i.prototype._transform=function(e,t,r){r(null,e)}},{\"./_stream_transform\":511,\"core-util-is\":383,inherits:440}],510:[function(e,t,n){(function(r,n){(function(){\"use strict\";var o=e(\"process-nextick-args\");t.exports=y;var i,a=e(\"isarray\");y.ReadableState=b,e(\"events\").EventEmitter;var s=function(e,t){return e.listeners(t).length},l=e(\"./internal/streams/stream\"),c=e(\"safe-buffer\").Buffer,u=(void 0!==n?n:\"undefined\"!=typeof window?window:\"undefined\"!=typeof self?self:{}).Uint8Array||function(){},d=Object.create(e(\"core-util-is\"));d.inherits=e(\"inherits\");var f=e(\"util\"),h=void 0;h=f&&f.debuglog?f.debuglog(\"stream\"):function(){};var p,m=e(\"./internal/streams/BufferList\"),g=e(\"./internal/streams/destroy\");d.inherits(y,l);var v=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function b(t,r){t=t||{};var n=r instanceof(i=i||e(\"./_stream_duplex\"));this.objectMode=!!t.objectMode,n&&(this.objectMode=this.objectMode||!!t.readableObjectMode);var o=t.highWaterMark,a=t.readableHighWaterMark,s=this.objectMode?16:16384;this.highWaterMark=o||0===o?o:n&&(a||0===a)?a:s,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new m,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(p||(p=e(\"string_decoder/\").StringDecoder),this.decoder=new p(t.encoding),this.encoding=t.encoding)}function y(t){if(i=i||e(\"./_stream_duplex\"),!(this instanceof y))return new y(t);this._readableState=new b(t,this),this.readable=!0,t&&(\"function\"==typeof t.read&&(this._read=t.read),\"function\"==typeof t.destroy&&(this._destroy=t.destroy)),l.call(this)}function w(e,t,r,n,o){var i,a=e._readableState;return null===t?(a.reading=!1,function(e,t){if(!t.ended){if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,C(e)}}(e,a)):(o||(i=function(e,t){var r,n;return n=t,c.isBuffer(n)||n instanceof u||\"string\"==typeof t||void 0===t||e.objectMode||(r=new TypeError(\"Invalid non-string/buffer chunk\")),r}(a,t)),i?e.emit(\"error\",i):a.objectMode||t&&t.length>0?(\"string\"==typeof t||a.objectMode||Object.getPrototypeOf(t)===c.prototype||(t=function(e){return c.from(e)}(t)),n?a.endEmitted?e.emit(\"error\",new Error(\"stream.unshift() after end event\")):x(e,a,t,!0):a.ended?e.emit(\"error\",new Error(\"stream.push() after EOF\")):(a.reading=!1,a.decoder&&!r?(t=a.decoder.write(t),a.objectMode||0!==t.length?x(e,a,t,!1):E(e,a)):x(e,a,t,!1))):n||(a.reading=!1)),function(e){return!e.ended&&(e.needReadable||e.length<e.highWaterMark||0===e.length)}(a)}function x(e,t,r,n){t.flowing&&0===t.length&&!t.sync?(e.emit(\"data\",r),e.read(0)):(t.length+=t.objectMode?1:r.length,n?t.buffer.unshift(r):t.buffer.push(r),t.needReadable&&C(e)),E(e,t)}function S(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!=e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function C(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(h(\"emitReadable\",t.flowing),t.emittedReadable=!0,t.sync?o.nextTick(k,e):k(e))}function k(e){h(\"emit readable\"),e.emit(\"readable\"),j(e)}function E(e,t){t.readingMore||(t.readingMore=!0,o.nextTick(O,e,t))}function O(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length<t.highWaterMark&&(h(\"maybeReadMore read 0\"),e.read(0),r!==t.length);)r=t.length;t.readingMore=!1}function A(e){h(\"readable nexttick read 0\"),e.read(0)}function T(e,t){t.reading||(h(\"resume read 0\"),e.read(0)),t.resumeScheduled=!1,t.awaitDrain=0,e.emit(\"resume\"),j(e),t.flowing&&!t.reading&&e.read(0)}function j(e){var t=e._readableState;for(h(\"flow\",t.flowing);t.flowing&&null!==e.read(););}function P(e,t){return 0===t.length?null:(t.objectMode?r=t.buffer.shift():!e||e>=t.length?(r=t.decoder?t.buffer.join(\"\"):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=function(e,t,r){var n;return e<t.head.data.length?(n=t.head.data.slice(0,e),t.head.data=t.head.data.slice(e)):n=e===t.head.data.length?t.shift():r?function(e,t){var r=t.head,n=1,o=r.data;for(e-=o.length;r=r.next;){var i=r.data,a=e>i.length?i.length:e;if(a===i.length?o+=i:o+=i.slice(0,e),0===(e-=a)){a===i.length?(++n,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=i.slice(a));break}++n}return t.length-=n,o}(e,t):function(e,t){var r=c.allocUnsafe(e),n=t.head,o=1;for(n.data.copy(r),e-=n.data.length;n=n.next;){var i=n.data,a=e>i.length?i.length:e;if(i.copy(r,r.length-e,0,a),0===(e-=a)){a===i.length?(++o,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=i.slice(a));break}++o}return t.length-=o,r}(e,t),n}(e,t.buffer,t.decoder),r);var r}function M(e){var t=e._readableState;if(t.length>0)throw new Error('\"endReadable()\" called on non-empty stream');t.endEmitted||(t.ended=!0,o.nextTick(R,t,e))}function R(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit(\"end\"))}function _(e,t){for(var r=0,n=e.length;r<n;r++)if(e[r]===t)return r;return-1}Object.defineProperty(y.prototype,\"destroyed\",{get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(e){this._readableState&&(this._readableState.destroyed=e)}}),y.prototype.destroy=g.destroy,y.prototype._undestroy=g.undestroy,y.prototype._destroy=function(e,t){this.push(null),t(e)},y.prototype.push=function(e,t){var r,n=this._readableState;return n.objectMode?r=!0:\"string\"==typeof e&&((t=t||n.defaultEncoding)!==n.encoding&&(e=c.from(e,t),t=\"\"),r=!0),w(this,e,t,!1,r)},y.prototype.unshift=function(e){return w(this,e,null,!0,!1)},y.prototype.isPaused=function(){return!1===this._readableState.flowing},y.prototype.setEncoding=function(t){return p||(p=e(\"string_decoder/\").StringDecoder),this._readableState.decoder=new p(t),this._readableState.encoding=t,this},y.prototype.read=function(e){h(\"read\",e),e=parseInt(e,10);var t=this._readableState,r=e;if(0!==e&&(t.emittedReadable=!1),0===e&&t.needReadable&&(t.length>=t.highWaterMark||t.ended))return h(\"read: emitReadable\",t.length,t.ended),0===t.length&&t.ended?M(this):C(this),null;if(0===(e=S(e,t))&&t.ended)return 0===t.length&&M(this),null;var n,o=t.needReadable;return h(\"need readable\",o),(0===t.length||t.length-e<t.highWaterMark)&&h(\"length less than watermark\",o=!0),t.ended||t.reading?h(\"reading or ended\",o=!1):o&&(h(\"do read\"),t.reading=!0,t.sync=!0,0===t.length&&(t.needReadable=!0),this._read(t.highWaterMark),t.sync=!1,t.reading||(e=S(r,t))),null===(n=e>0?P(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&M(this)),null!==n&&this.emit(\"data\",n),n},y.prototype._read=function(e){this.emit(\"error\",new Error(\"_read() is not implemented\"))},y.prototype.pipe=function(e,t){var n=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=e;break;case 1:i.pipes=[i.pipes,e];break;default:i.pipes.push(e)}i.pipesCount+=1,h(\"pipe count=%d opts=%j\",i.pipesCount,t);var l=t&&!1===t.end||e===r.stdout||e===r.stderr?b:c;function c(){h(\"onend\"),e.end()}i.endEmitted?o.nextTick(l):n.once(\"end\",l),e.on(\"unpipe\",(function t(r,o){h(\"onunpipe\"),r===n&&o&&!1===o.hasUnpiped&&(o.hasUnpiped=!0,h(\"cleanup\"),e.removeListener(\"close\",g),e.removeListener(\"finish\",v),e.removeListener(\"drain\",u),e.removeListener(\"error\",m),e.removeListener(\"unpipe\",t),n.removeListener(\"end\",c),n.removeListener(\"end\",b),n.removeListener(\"data\",p),d=!0,!i.awaitDrain||e._writableState&&!e._writableState.needDrain||u())}));var u=function(e){return function(){var t=e._readableState;h(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,\"data\")&&(t.flowing=!0,j(e))}}(n);e.on(\"drain\",u);var d=!1,f=!1;function p(t){h(\"ondata\"),f=!1,!1!==e.write(t)||f||((1===i.pipesCount&&i.pipes===e||i.pipesCount>1&&-1!==_(i.pipes,e))&&!d&&(h(\"false write response, pause\",i.awaitDrain),i.awaitDrain++,f=!0),n.pause())}function m(t){h(\"onerror\",t),b(),e.removeListener(\"error\",m),0===s(e,\"error\")&&e.emit(\"error\",t)}function g(){e.removeListener(\"finish\",v),b()}function v(){h(\"onfinish\"),e.removeListener(\"close\",g),b()}function b(){h(\"unpipe\"),n.unpipe(e)}return n.on(\"data\",p),function(e,t,r){if(\"function\"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?a(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,\"error\",m),e.once(\"close\",g),e.once(\"finish\",v),e.emit(\"pipe\",n),i.flowing||(h(\"pipe resume\"),n.resume()),e},y.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit(\"unpipe\",this,r)),this;if(!e){var n=t.pipes,o=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i<o;i++)n[i].emit(\"unpipe\",this,{hasUnpiped:!1});return this}var a=_(t.pipes,e);return-1===a||(t.pipes.splice(a,1),t.pipesCount-=1,1===t.pipesCount&&(t.pipes=t.pipes[0]),e.emit(\"unpipe\",this,r)),this},y.prototype.on=function(e,t){var r=l.prototype.on.call(this,e,t);if(\"data\"===e)!1!==this._readableState.flowing&&this.resume();else if(\"readable\"===e){var n=this._readableState;n.endEmitted||n.readableListening||(n.readableListening=n.needReadable=!0,n.emittedReadable=!1,n.reading?n.length&&C(this):o.nextTick(A,this))}return r},y.prototype.addListener=y.prototype.on,y.prototype.resume=function(){var e=this._readableState;return e.flowing||(h(\"resume\"),e.flowing=!0,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,o.nextTick(T,e,t))}(this,e)),this},y.prototype.pause=function(){return h(\"call pause flowing=%j\",this._readableState.flowing),!1!==this._readableState.flowing&&(h(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this},y.prototype.wrap=function(e){var t=this,r=this._readableState,n=!1;for(var o in e.on(\"end\",(function(){if(h(\"wrapped end\"),r.decoder&&!r.ended){var e=r.decoder.end();e&&e.length&&t.push(e)}t.push(null)})),e.on(\"data\",(function(o){h(\"wrapped data\"),r.decoder&&(o=r.decoder.write(o)),r.objectMode&&null==o||(r.objectMode||o&&o.length)&&(t.push(o)||(n=!0,e.pause()))})),e)void 0===this[o]&&\"function\"==typeof e[o]&&(this[o]=function(t){return function(){return e[t].apply(e,arguments)}}(o));for(var i=0;i<v.length;i++)e.on(v[i],this.emit.bind(this,v[i]));return this._read=function(t){h(\"wrapped _read\",t),n&&(n=!1,e.resume())},this},Object.defineProperty(y.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),y._fromList=P}).call(this)}).call(this,e(\"_process\"),void 0!==r.g?r.g:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"./_stream_duplex\":508,\"./internal/streams/BufferList\":513,\"./internal/streams/destroy\":514,\"./internal/streams/stream\":515,_process:467,\"core-util-is\":383,events:422,inherits:440,isarray:506,\"process-nextick-args\":466,\"safe-buffer\":520,\"string_decoder/\":521,util:188}],511:[function(e,t,r){\"use strict\";t.exports=a;var n=e(\"./_stream_duplex\"),o=Object.create(e(\"core-util-is\"));function i(e,t){var r=this._transformState;r.transforming=!1;var n=r.writecb;if(!n)return this.emit(\"error\",new Error(\"write callback called multiple times\"));r.writechunk=null,r.writecb=null,null!=t&&this.push(t),n(e);var o=this._readableState;o.reading=!1,(o.needReadable||o.length<o.highWaterMark)&&this._read(o.highWaterMark)}function a(e){if(!(this instanceof a))return new a(e);n.call(this,e),this._transformState={afterTransform:i.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,e&&(\"function\"==typeof e.transform&&(this._transform=e.transform),\"function\"==typeof e.flush&&(this._flush=e.flush)),this.on(\"prefinish\",s)}function s(){var e=this;\"function\"==typeof this._flush?this._flush((function(t,r){l(e,t,r)})):l(this,null,null)}function l(e,t,r){if(t)return e.emit(\"error\",t);if(null!=r&&e.push(r),e._writableState.length)throw new Error(\"Calling transform done when ws.length != 0\");if(e._transformState.transforming)throw new Error(\"Calling transform done when still transforming\");return e.push(null)}o.inherits=e(\"inherits\"),o.inherits(a,n),a.prototype.push=function(e,t){return this._transformState.needTransform=!1,n.prototype.push.call(this,e,t)},a.prototype._transform=function(e,t,r){throw new Error(\"_transform() is not implemented\")},a.prototype._write=function(e,t,r){var n=this._transformState;if(n.writecb=r,n.writechunk=e,n.writeencoding=t,!n.transforming){var o=this._readableState;(n.needTransform||o.needReadable||o.length<o.highWaterMark)&&this._read(o.highWaterMark)}},a.prototype._read=function(e){var t=this._transformState;null!==t.writechunk&&t.writecb&&!t.transforming?(t.transforming=!0,this._transform(t.writechunk,t.writeencoding,t.afterTransform)):t.needTransform=!0},a.prototype._destroy=function(e,t){var r=this;n.prototype._destroy.call(this,e,(function(e){t(e),r.emit(\"close\")}))}},{\"./_stream_duplex\":508,\"core-util-is\":383,inherits:440}],512:[function(e,t,n){(function(r,n,o){(function(){\"use strict\";var i=e(\"process-nextick-args\");function a(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t){var r=e.entry;for(e.entry=null;r;){var n=r.callback;t.pendingcb--,n(undefined),r=r.next}t.corkedRequestsFree.next=e}(t,e)}}t.exports=b;var s,l=!r.browser&&[\"v0.10\",\"v0.9.\"].indexOf(r.version.slice(0,5))>-1?o:i.nextTick;b.WritableState=v;var c=Object.create(e(\"core-util-is\"));c.inherits=e(\"inherits\");var u,d={deprecate:e(\"util-deprecate\")},f=e(\"./internal/streams/stream\"),h=e(\"safe-buffer\").Buffer,p=(void 0!==n?n:\"undefined\"!=typeof window?window:\"undefined\"!=typeof self?self:{}).Uint8Array||function(){},m=e(\"./internal/streams/destroy\");function g(){}function v(t,r){s=s||e(\"./_stream_duplex\"),t=t||{};var n=r instanceof s;this.objectMode=!!t.objectMode,n&&(this.objectMode=this.objectMode||!!t.writableObjectMode);var o=t.highWaterMark,c=t.writableHighWaterMark,u=this.objectMode?16:16384;this.highWaterMark=o||0===o?o:n&&(c||0===c)?c:u,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var d=!1===t.decodeStrings;this.decodeStrings=!d,this.defaultEncoding=t.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var r=e._writableState,n=r.sync,o=r.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(r),t)!function(e,t,r,n,o){--t.pendingcb,r?(i.nextTick(o,n),i.nextTick(k,e,t),e._writableState.errorEmitted=!0,e.emit(\"error\",n)):(o(n),e._writableState.errorEmitted=!0,e.emit(\"error\",n),k(e,t))}(e,r,n,t,o);else{var a=S(r);a||r.corked||r.bufferProcessing||!r.bufferedRequest||x(e,r),n?l(w,e,r,a,o):w(e,r,a,o)}}(r,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function b(t){if(s=s||e(\"./_stream_duplex\"),!(u.call(b,this)||this instanceof s))return new b(t);this._writableState=new v(t,this),this.writable=!0,t&&(\"function\"==typeof t.write&&(this._write=t.write),\"function\"==typeof t.writev&&(this._writev=t.writev),\"function\"==typeof t.destroy&&(this._destroy=t.destroy),\"function\"==typeof t.final&&(this._final=t.final)),f.call(this)}function y(e,t,r,n,o,i,a){t.writelen=n,t.writecb=a,t.writing=!0,t.sync=!0,r?e._writev(o,t.onwrite):e._write(o,i,t.onwrite),t.sync=!1}function w(e,t,r,n){r||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit(\"drain\"))}(e,t),t.pendingcb--,n(),k(e,t)}function x(e,t){t.bufferProcessing=!0;var r=t.bufferedRequest;if(e._writev&&r&&r.next){var n=t.bufferedRequestCount,o=new Array(n),i=t.corkedRequestsFree;i.entry=r;for(var s=0,l=!0;r;)o[s]=r,r.isBuf||(l=!1),r=r.next,s+=1;o.allBuffers=l,y(e,t,!0,t.length,o,\"\",i.finish),t.pendingcb++,t.lastBufferedRequest=null,i.next?(t.corkedRequestsFree=i.next,i.next=null):t.corkedRequestsFree=new a(t),t.bufferedRequestCount=0}else{for(;r;){var c=r.chunk,u=r.encoding,d=r.callback;if(y(e,t,!1,t.objectMode?1:c.length,c,u,d),r=r.next,t.bufferedRequestCount--,t.writing)break}null===r&&(t.lastBufferedRequest=null)}t.bufferedRequest=r,t.bufferProcessing=!1}function S(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function C(e,t){e._final((function(r){t.pendingcb--,r&&e.emit(\"error\",r),t.prefinished=!0,e.emit(\"prefinish\"),k(e,t)}))}function k(e,t){var r=S(t);return r&&(function(e,t){t.prefinished||t.finalCalled||(\"function\"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,i.nextTick(C,e,t)):(t.prefinished=!0,e.emit(\"prefinish\")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit(\"finish\"))),r}c.inherits(b,f),v.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(v.prototype,\"buffer\",{get:d.deprecate((function(){return this.getBuffer()}),\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch(e){}}(),\"function\"==typeof Symbol&&Symbol.hasInstance&&\"function\"==typeof Function.prototype[Symbol.hasInstance]?(u=Function.prototype[Symbol.hasInstance],Object.defineProperty(b,Symbol.hasInstance,{value:function(e){return!!u.call(this,e)||this===b&&e&&e._writableState instanceof v}})):u=function(e){return e instanceof this},b.prototype.pipe=function(){this.emit(\"error\",new Error(\"Cannot pipe, not readable\"))},b.prototype.write=function(e,t,r){var n,o=this._writableState,a=!1,s=!o.objectMode&&(n=e,h.isBuffer(n)||n instanceof p);return s&&!h.isBuffer(e)&&(e=function(e){return h.from(e)}(e)),\"function\"==typeof t&&(r=t,t=null),s?t=\"buffer\":t||(t=o.defaultEncoding),\"function\"!=typeof r&&(r=g),o.ended?function(e,t){var r=new Error(\"write after end\");e.emit(\"error\",r),i.nextTick(t,r)}(this,r):(s||function(e,t,r,n){var o=!0,a=!1;return null===r?a=new TypeError(\"May not write null values to stream\"):\"string\"==typeof r||void 0===r||t.objectMode||(a=new TypeError(\"Invalid non-string/buffer chunk\")),a&&(e.emit(\"error\",a),i.nextTick(n,a),o=!1),o}(this,o,e,r))&&(o.pendingcb++,a=function(e,t,r,n,o,i){if(!r){var a=function(e,t,r){return e.objectMode||!1===e.decodeStrings||\"string\"!=typeof t||(t=h.from(t,r)),t}(t,n,o);n!==a&&(r=!0,o=\"buffer\",n=a)}var s=t.objectMode?1:n.length;t.length+=s;var l=t.length<t.highWaterMark;if(l||(t.needDrain=!0),t.writing||t.corked){var c=t.lastBufferedRequest;t.lastBufferedRequest={chunk:n,encoding:o,isBuf:r,callback:i,next:null},c?c.next=t.lastBufferedRequest:t.bufferedRequest=t.lastBufferedRequest,t.bufferedRequestCount+=1}else y(e,t,!1,s,n,o,i);return l}(this,o,s,e,t,r)),a},b.prototype.cork=function(){this._writableState.corked++},b.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,e.writing||e.corked||e.bufferProcessing||!e.bufferedRequest||x(this,e))},b.prototype.setDefaultEncoding=function(e){if(\"string\"==typeof e&&(e=e.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((e+\"\").toLowerCase())>-1))throw new TypeError(\"Unknown encoding: \"+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(b.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),b.prototype._write=function(e,t,r){r(new Error(\"_write() is not implemented\"))},b.prototype._writev=null,b.prototype.end=function(e,t,r){var n=this._writableState;\"function\"==typeof e?(r=e,e=null,t=null):\"function\"==typeof t&&(r=t,t=null),null!=e&&this.write(e,t),n.corked&&(n.corked=1,this.uncork()),n.ending||function(e,t,r){t.ending=!0,k(e,t),r&&(t.finished?i.nextTick(r):e.once(\"finish\",r)),t.ended=!0,e.writable=!1}(this,n,r)},Object.defineProperty(b.prototype,\"destroyed\",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),b.prototype.destroy=m.destroy,b.prototype._undestroy=m.undestroy,b.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this)}).call(this,e(\"_process\"),void 0!==r.g?r.g:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},e(\"timers\").setImmediate)},{\"./_stream_duplex\":508,\"./internal/streams/destroy\":514,\"./internal/streams/stream\":515,_process:467,\"core-util-is\":383,inherits:440,\"process-nextick-args\":466,\"safe-buffer\":520,timers:523,\"util-deprecate\":524}],513:[function(e,t,r){\"use strict\";var n=e(\"safe-buffer\").Buffer,o=e(\"util\");t.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.head=null,this.tail=null,this.length=0}return e.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return\"\";for(var t=this.head,r=\"\"+t.data;t=t.next;)r+=e+t.data;return r},e.prototype.concat=function(e){if(0===this.length)return n.alloc(0);for(var t,r,o=n.allocUnsafe(e>>>0),i=this.head,a=0;i;)t=o,r=a,i.data.copy(t,r),a+=i.data.length,i=i.next;return o},e}(),o&&o.inspect&&o.inspect.custom&&(t.exports.prototype[o.inspect.custom]=function(){var e=o.inspect({length:this.length});return this.constructor.name+\" \"+e})},{\"safe-buffer\":520,util:188}],514:[function(e,t,r){\"use strict\";var n=e(\"process-nextick-args\");function o(e,t){e.emit(\"error\",t)}t.exports={destroy:function(e,t){var r=this,i=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return i||a?(t?t(e):e&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,n.nextTick(o,this,e)):n.nextTick(o,this,e)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?r._writableState?r._writableState.errorEmitted||(r._writableState.errorEmitted=!0,n.nextTick(o,r,e)):n.nextTick(o,r,e):t&&t(e)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},{\"process-nextick-args\":466}],515:[function(e,t,r){arguments[4][490][0].apply(r,arguments)},{dup:490,events:422}],516:[function(e,t,r){\"use strict\";t.exports=e(\"./readable\").PassThrough},{\"./readable\":517}],517:[function(e,t,r){\"use strict\";(r=t.exports=e(\"./lib/_stream_readable.js\")).Stream=r,r.Readable=r,r.Writable=e(\"./lib/_stream_writable.js\"),r.Duplex=e(\"./lib/_stream_duplex.js\"),r.Transform=e(\"./lib/_stream_transform.js\"),r.PassThrough=e(\"./lib/_stream_passthrough.js\")},{\"./lib/_stream_duplex.js\":508,\"./lib/_stream_passthrough.js\":509,\"./lib/_stream_readable.js\":510,\"./lib/_stream_transform.js\":511,\"./lib/_stream_writable.js\":512}],518:[function(e,t,r){\"use strict\";t.exports=e(\"./readable\").Transform},{\"./readable\":517}],519:[function(e,t,r){\"use strict\";t.exports=e(\"./lib/_stream_writable.js\")},{\"./lib/_stream_writable.js\":512}],520:[function(e,t,r){arguments[4][217][0].apply(r,arguments)},{buffer:220,dup:217}],521:[function(e,t,r){arguments[4][218][0].apply(r,arguments)},{dup:218,\"safe-buffer\":520}],522:[function(e,t,r){arguments[4][218][0].apply(r,arguments)},{dup:218,\"safe-buffer\":494}],523:[function(e,t,r){(function(t,n){(function(){\"use strict\";var o=e(\"process/browser.js\").nextTick,i=Function.prototype.apply,a=Array.prototype.slice,s={},l=0;function c(e,t){this._id=e,this._clearFn=t}r.setTimeout=function(){return new c(i.call(setTimeout,window,arguments),clearTimeout)},r.setInterval=function(){return new c(i.call(setInterval,window,arguments),clearInterval)},r.clearTimeout=r.clearInterval=function(e){e.close()},c.prototype.unref=c.prototype.ref=function(){},c.prototype.close=function(){this._clearFn.call(window,this._id)},r.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},r.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},r._unrefActive=r.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},r.setImmediate=\"function\"==typeof t?t:function(e){var t=l++,n=!(arguments.length<2)&&a.call(arguments,1);return s[t]=!0,o((function(){s[t]&&(n?e.apply(null,n):e.call(null),r.clearImmediate(t))})),t},r.clearImmediate=\"function\"==typeof n?n:function(e){delete s[e]}}).call(this)}).call(this,e(\"timers\").setImmediate,e(\"timers\").clearImmediate)},{\"process/browser.js\":467,timers:523}],524:[function(e,t,n){(function(e){(function(){\"use strict\";function r(t){try{if(!e.localStorage)return!1}catch(e){return!1}var r=e.localStorage[t];return null!=r&&\"true\"===String(r).toLowerCase()}t.exports=function(e,t){if(r(\"noDeprecation\"))return e;var n=!1;return function(){if(!n){if(r(\"throwDeprecation\"))throw new Error(t);r(\"traceDeprecation\")?console.trace(t):console.warn(t),n=!0}return e.apply(this,arguments)}}}).call(this)}).call(this,void 0!==r.g?r.g:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],525:[function(e,t,r){\"use strict\";\"function\"==typeof Object.create?t.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}},{}],526:[function(e,t,r){\"use strict\";t.exports=function(e){return e&&\"object\"==typeof e&&\"function\"==typeof e.copy&&\"function\"==typeof e.fill&&\"function\"==typeof e.readUInt8}},{}],527:[function(e,t,n){(function(t,r){(function(){\"use strict\";var o=/%[sdj%]/g;n.format=function(e){if(!v(e)){for(var t=[],r=0;r<arguments.length;r++)t.push(s(arguments[r]));return t.join(\" \")}r=1;for(var n=arguments,i=n.length,a=String(e).replace(o,(function(e){if(\"%%\"===e)return\"%\";if(r>=i)return e;switch(e){case\"%s\":return String(n[r++]);case\"%d\":return Number(n[r++]);case\"%j\":try{return JSON.stringify(n[r++])}catch(e){return\"[Circular]\"}default:return e}})),l=n[r];r<i;l=n[++r])m(l)||!w(l)?a+=\" \"+l:a+=\" \"+s(l);return a},n.deprecate=function(e,o){if(b(r.process))return function(){return n.deprecate(e,o).apply(this,arguments)};if(!0===t.noDeprecation)return e;var i=!1;return function(){if(!i){if(t.throwDeprecation)throw new Error(o);t.traceDeprecation?console.trace(o):console.error(o),i=!0}return e.apply(this,arguments)}};var i,a={};function s(e,t){var r={seen:[],stylize:c};return arguments.length>=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),p(t)?r.showHidden=t:t&&n._extend(r,t),b(r.showHidden)&&(r.showHidden=!1),b(r.depth)&&(r.depth=2),b(r.colors)&&(r.colors=!1),b(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=l),u(r,e,r.depth)}function l(e,t){var r=s.styles[t];return r?\"\u001b[\"+s.colors[r][0]+\"m\"+e+\"\u001b[\"+s.colors[r][1]+\"m\":e}function c(e,t){return e}function u(e,t,r){if(e.customInspect&&t&&C(t.inspect)&&t.inspect!==n.inspect&&(!t.constructor||t.constructor.prototype!==t)){var o=t.inspect(r,e);return v(o)||(o=u(e,o,r)),o}var i=function(e,t){if(b(t))return e.stylize(\"undefined\",\"undefined\");if(v(t)){var r=\"'\"+JSON.stringify(t).replace(/^\"|\"$/g,\"\").replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"')+\"'\";return e.stylize(r,\"string\")}return g(t)?e.stylize(\"\"+t,\"number\"):p(t)?e.stylize(\"\"+t,\"boolean\"):m(t)?e.stylize(\"null\",\"null\"):void 0}(e,t);if(i)return i;var a=Object.keys(t),s=function(e){var t={};return e.forEach((function(e,r){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(t)),S(t)&&(a.indexOf(\"message\")>=0||a.indexOf(\"description\")>=0))return d(t);if(0===a.length){if(C(t)){var l=t.name?\": \"+t.name:\"\";return e.stylize(\"[Function\"+l+\"]\",\"special\")}if(y(t))return e.stylize(RegExp.prototype.toString.call(t),\"regexp\");if(x(t))return e.stylize(Date.prototype.toString.call(t),\"date\");if(S(t))return d(t)}var c,w=\"\",k=!1,E=[\"{\",\"}\"];return h(t)&&(k=!0,E=[\"[\",\"]\"]),C(t)&&(w=\" [Function\"+(t.name?\": \"+t.name:\"\")+\"]\"),y(t)&&(w=\" \"+RegExp.prototype.toString.call(t)),x(t)&&(w=\" \"+Date.prototype.toUTCString.call(t)),S(t)&&(w=\" \"+d(t)),0!==a.length||k&&0!=t.length?r<0?y(t)?e.stylize(RegExp.prototype.toString.call(t),\"regexp\"):e.stylize(\"[Object]\",\"special\"):(e.seen.push(t),c=k?function(e,t,r,n,o){for(var i=[],a=0,s=t.length;a<s;++a)A(t,String(a))?i.push(f(e,t,r,n,String(a),!0)):i.push(\"\");return o.forEach((function(o){o.match(/^\\d+$/)||i.push(f(e,t,r,n,o,!0))})),i}(e,t,r,s,a):a.map((function(n){return f(e,t,r,s,n,k)})),e.seen.pop(),function(e,t,r){return e.reduce((function(e,t){return t.indexOf(\"\\n\"),e+t.replace(/\\u001b\\[\\d\\d?m/g,\"\").length+1}),0)>60?r[0]+(\"\"===t?\"\":t+\"\\n \")+\" \"+e.join(\",\\n  \")+\" \"+r[1]:r[0]+t+\" \"+e.join(\", \")+\" \"+r[1]}(c,w,E)):E[0]+w+E[1]}function d(e){return\"[\"+Error.prototype.toString.call(e)+\"]\"}function f(e,t,r,n,o,i){var a,s,l;if((l=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]}).get?s=l.set?e.stylize(\"[Getter/Setter]\",\"special\"):e.stylize(\"[Getter]\",\"special\"):l.set&&(s=e.stylize(\"[Setter]\",\"special\")),A(n,o)||(a=\"[\"+o+\"]\"),s||(e.seen.indexOf(l.value)<0?(s=m(r)?u(e,l.value,null):u(e,l.value,r-1)).indexOf(\"\\n\")>-1&&(s=i?s.split(\"\\n\").map((function(e){return\"  \"+e})).join(\"\\n\").substr(2):\"\\n\"+s.split(\"\\n\").map((function(e){return\"   \"+e})).join(\"\\n\")):s=e.stylize(\"[Circular]\",\"special\")),b(a)){if(i&&o.match(/^\\d+$/))return s;(a=JSON.stringify(\"\"+o)).match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,\"name\")):(a=a.replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"').replace(/(^\"|\"$)/g,\"'\"),a=e.stylize(a,\"string\"))}return a+\": \"+s}function h(e){return Array.isArray(e)}function p(e){return\"boolean\"==typeof e}function m(e){return null===e}function g(e){return\"number\"==typeof e}function v(e){return\"string\"==typeof e}function b(e){return void 0===e}function y(e){return w(e)&&\"[object RegExp]\"===k(e)}function w(e){return\"object\"==typeof e&&null!==e}function x(e){return w(e)&&\"[object Date]\"===k(e)}function S(e){return w(e)&&(\"[object Error]\"===k(e)||e instanceof Error)}function C(e){return\"function\"==typeof e}function k(e){return Object.prototype.toString.call(e)}function E(e){return e<10?\"0\"+e.toString(10):e.toString(10)}n.debuglog=function(e){if(b(i)&&(i=t.env.NODE_DEBUG||\"\"),e=e.toUpperCase(),!a[e])if(new RegExp(\"\\\\b\"+e+\"\\\\b\",\"i\").test(i)){var r=t.pid;a[e]=function(){var t=n.format.apply(n,arguments);console.error(\"%s %d: %s\",e,r,t)}}else a[e]=function(){};return a[e]},n.inspect=s,s.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]},s.styles={special:\"cyan\",number:\"yellow\",boolean:\"yellow\",undefined:\"grey\",null:\"bold\",string:\"green\",date:\"magenta\",regexp:\"red\"},n.isArray=h,n.isBoolean=p,n.isNull=m,n.isNullOrUndefined=function(e){return null==e},n.isNumber=g,n.isString=v,n.isSymbol=function(e){return\"symbol\"==typeof e},n.isUndefined=b,n.isRegExp=y,n.isObject=w,n.isDate=x,n.isError=S,n.isFunction=C,n.isPrimitive=function(e){return null===e||\"boolean\"==typeof e||\"number\"==typeof e||\"string\"==typeof e||\"symbol\"==typeof e||void 0===e},n.isBuffer=e(\"./support/isBuffer\");var O=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"];function A(e,t){return Object.prototype.hasOwnProperty.call(e,t)}n.log=function(){console.log(\"%s - %s\",function(){var e=new Date,t=[E(e.getHours()),E(e.getMinutes()),E(e.getSeconds())].join(\":\");return[e.getDate(),O[e.getMonth()],t].join(\" \")}(),n.format.apply(n,arguments))},n.inherits=e(\"inherits\"),n._extend=function(e,t){if(!t||!w(t))return e;for(var r=Object.keys(t),n=r.length;n--;)e[r[n]]=t[r[n]];return e}}).call(this)}).call(this,e(\"_process\"),void 0!==r.g?r.g:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"./support/isBuffer\":526,_process:467,inherits:525}],528:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),Object.defineProperty(r,\"v1\",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(r,\"v3\",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(r,\"v4\",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(r,\"v5\",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(r,\"NIL\",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(r,\"version\",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(r,\"validate\",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(r,\"stringify\",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(r,\"parse\",{enumerable:!0,get:function(){return d.default}});var n=f(e(\"./v1.js\")),o=f(e(\"./v3.js\")),i=f(e(\"./v4.js\")),a=f(e(\"./v5.js\")),s=f(e(\"./nil.js\")),l=f(e(\"./version.js\")),c=f(e(\"./validate.js\")),u=f(e(\"./stringify.js\")),d=f(e(\"./parse.js\"));function f(e){return e&&e.__esModule?e:{default:e}}},{\"./nil.js\":530,\"./parse.js\":531,\"./stringify.js\":535,\"./v1.js\":536,\"./v3.js\":537,\"./v4.js\":539,\"./v5.js\":540,\"./validate.js\":541,\"./version.js\":542}],529:[function(e,t,r){\"use strict\";function n(e){return 14+(e+64>>>9<<4)+1}function o(e,t){const r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function i(e,t,r,n,i,a){return o((s=o(o(t,e),o(n,a)))<<(l=i)|s>>>32-l,r);var s,l}function a(e,t,r,n,o,a,s){return i(t&r|~t&n,e,t,o,a,s)}function s(e,t,r,n,o,a,s){return i(t&n|r&~n,e,t,o,a,s)}function l(e,t,r,n,o,a,s){return i(t^r^n,e,t,o,a,s)}function c(e,t,r,n,o,a,s){return i(r^(t|~n),e,t,o,a,s)}Object.defineProperty(r,\"__esModule\",{value:!0}),r.default=void 0;r.default=function(e){if(\"string\"==typeof e){const t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(let r=0;r<t.length;++r)e[r]=t.charCodeAt(r)}return function(e){const t=[],r=32*e.length;for(let n=0;n<r;n+=8){const r=e[n>>5]>>>n%32&255,o=parseInt(\"0123456789abcdef\".charAt(r>>>4&15)+\"0123456789abcdef\".charAt(15&r),16);t.push(o)}return t}(function(e,t){e[t>>5]|=128<<t%32,e[n(t)-1]=t;let r=1732584193,i=-271733879,u=-1732584194,d=271733878;for(let t=0;t<e.length;t+=16){const n=r,f=i,h=u,p=d;r=a(r,i,u,d,e[t],7,-680876936),d=a(d,r,i,u,e[t+1],12,-389564586),u=a(u,d,r,i,e[t+2],17,606105819),i=a(i,u,d,r,e[t+3],22,-1044525330),r=a(r,i,u,d,e[t+4],7,-176418897),d=a(d,r,i,u,e[t+5],12,1200080426),u=a(u,d,r,i,e[t+6],17,-1473231341),i=a(i,u,d,r,e[t+7],22,-45705983),r=a(r,i,u,d,e[t+8],7,1770035416),d=a(d,r,i,u,e[t+9],12,-1958414417),u=a(u,d,r,i,e[t+10],17,-42063),i=a(i,u,d,r,e[t+11],22,-1990404162),r=a(r,i,u,d,e[t+12],7,1804603682),d=a(d,r,i,u,e[t+13],12,-40341101),u=a(u,d,r,i,e[t+14],17,-1502002290),i=a(i,u,d,r,e[t+15],22,1236535329),r=s(r,i,u,d,e[t+1],5,-165796510),d=s(d,r,i,u,e[t+6],9,-1069501632),u=s(u,d,r,i,e[t+11],14,643717713),i=s(i,u,d,r,e[t],20,-373897302),r=s(r,i,u,d,e[t+5],5,-701558691),d=s(d,r,i,u,e[t+10],9,38016083),u=s(u,d,r,i,e[t+15],14,-660478335),i=s(i,u,d,r,e[t+4],20,-405537848),r=s(r,i,u,d,e[t+9],5,568446438),d=s(d,r,i,u,e[t+14],9,-1019803690),u=s(u,d,r,i,e[t+3],14,-187363961),i=s(i,u,d,r,e[t+8],20,1163531501),r=s(r,i,u,d,e[t+13],5,-1444681467),d=s(d,r,i,u,e[t+2],9,-51403784),u=s(u,d,r,i,e[t+7],14,1735328473),i=s(i,u,d,r,e[t+12],20,-1926607734),r=l(r,i,u,d,e[t+5],4,-378558),d=l(d,r,i,u,e[t+8],11,-2022574463),u=l(u,d,r,i,e[t+11],16,1839030562),i=l(i,u,d,r,e[t+14],23,-35309556),r=l(r,i,u,d,e[t+1],4,-1530992060),d=l(d,r,i,u,e[t+4],11,1272893353),u=l(u,d,r,i,e[t+7],16,-155497632),i=l(i,u,d,r,e[t+10],23,-1094730640),r=l(r,i,u,d,e[t+13],4,681279174),d=l(d,r,i,u,e[t],11,-358537222),u=l(u,d,r,i,e[t+3],16,-722521979),i=l(i,u,d,r,e[t+6],23,76029189),r=l(r,i,u,d,e[t+9],4,-640364487),d=l(d,r,i,u,e[t+12],11,-421815835),u=l(u,d,r,i,e[t+15],16,530742520),i=l(i,u,d,r,e[t+2],23,-995338651),r=c(r,i,u,d,e[t],6,-198630844),d=c(d,r,i,u,e[t+7],10,1126891415),u=c(u,d,r,i,e[t+14],15,-1416354905),i=c(i,u,d,r,e[t+5],21,-57434055),r=c(r,i,u,d,e[t+12],6,1700485571),d=c(d,r,i,u,e[t+3],10,-1894986606),u=c(u,d,r,i,e[t+10],15,-1051523),i=c(i,u,d,r,e[t+1],21,-2054922799),r=c(r,i,u,d,e[t+8],6,1873313359),d=c(d,r,i,u,e[t+15],10,-30611744),u=c(u,d,r,i,e[t+6],15,-1560198380),i=c(i,u,d,r,e[t+13],21,1309151649),r=c(r,i,u,d,e[t+4],6,-145523070),d=c(d,r,i,u,e[t+11],10,-1120210379),u=c(u,d,r,i,e[t+2],15,718787259),i=c(i,u,d,r,e[t+9],21,-343485551),r=o(r,n),i=o(i,f),u=o(u,h),d=o(d,p)}return[r,i,u,d]}(function(e){if(0===e.length)return[];const t=8*e.length,r=new Uint32Array(n(t));for(let n=0;n<t;n+=8)r[n>>5]|=(255&e[n/8])<<n%32;return r}(e),8*e.length))}},{}],530:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.default=void 0,r.default=\"00000000-0000-0000-0000-000000000000\"},{}],531:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.default=void 0;var n,o=(n=e(\"./validate.js\"))&&n.__esModule?n:{default:n};r.default=function(e){if(!(0,o.default)(e))throw TypeError(\"Invalid UUID\");let t;const r=new Uint8Array(16);return r[0]=(t=parseInt(e.slice(0,8),16))>>>24,r[1]=t>>>16&255,r[2]=t>>>8&255,r[3]=255&t,r[4]=(t=parseInt(e.slice(9,13),16))>>>8,r[5]=255&t,r[6]=(t=parseInt(e.slice(14,18),16))>>>8,r[7]=255&t,r[8]=(t=parseInt(e.slice(19,23),16))>>>8,r[9]=255&t,r[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,r[11]=t/4294967296&255,r[12]=t>>>24&255,r[13]=t>>>16&255,r[14]=t>>>8&255,r[15]=255&t,r}},{\"./validate.js\":541}],532:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.default=void 0,r.default=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i},{}],533:[function(e,t,r){\"use strict\";let n;Object.defineProperty(r,\"__esModule\",{value:!0}),r.default=function(){if(!n&&(n=\"undefined\"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||\"undefined\"!=typeof msCrypto&&\"function\"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto),!n))throw new Error(\"crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported\");return n(o)};const o=new Uint8Array(16)},{}],534:[function(e,t,r){\"use strict\";function n(e,t,r,n){switch(e){case 0:return t&r^~t&n;case 1:case 3:return t^r^n;case 2:return t&r^t&n^r&n}}function o(e,t){return e<<t|e>>>32-t}Object.defineProperty(r,\"__esModule\",{value:!0}),r.default=void 0;r.default=function(e){const t=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if(\"string\"==typeof e){const t=unescape(encodeURIComponent(e));e=[];for(let r=0;r<t.length;++r)e.push(t.charCodeAt(r))}else Array.isArray(e)||(e=Array.prototype.slice.call(e));e.push(128);const i=e.length/4+2,a=Math.ceil(i/16),s=new Array(a);for(let t=0;t<a;++t){const r=new Uint32Array(16);for(let n=0;n<16;++n)r[n]=e[64*t+4*n]<<24|e[64*t+4*n+1]<<16|e[64*t+4*n+2]<<8|e[64*t+4*n+3];s[t]=r}s[a-1][14]=8*(e.length-1)/Math.pow(2,32),s[a-1][14]=Math.floor(s[a-1][14]),s[a-1][15]=8*(e.length-1)&4294967295;for(let e=0;e<a;++e){const i=new Uint32Array(80);for(let t=0;t<16;++t)i[t]=s[e][t];for(let e=16;e<80;++e)i[e]=o(i[e-3]^i[e-8]^i[e-14]^i[e-16],1);let a=r[0],l=r[1],c=r[2],u=r[3],d=r[4];for(let e=0;e<80;++e){const r=Math.floor(e/20),s=o(a,5)+n(r,l,c,u)+d+t[r]+i[e]>>>0;d=u,u=c,c=o(l,30)>>>0,l=a,a=s}r[0]=r[0]+a>>>0,r[1]=r[1]+l>>>0,r[2]=r[2]+c>>>0,r[3]=r[3]+u>>>0,r[4]=r[4]+d>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,255&r[0],r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,255&r[1],r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,255&r[2],r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,255&r[3],r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,255&r[4]]}},{}],535:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.default=void 0;var n,o=(n=e(\"./validate.js\"))&&n.__esModule?n:{default:n};const i=[];for(let e=0;e<256;++e)i.push((e+256).toString(16).substr(1));r.default=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;const r=(i[e[t+0]]+i[e[t+1]]+i[e[t+2]]+i[e[t+3]]+\"-\"+i[e[t+4]]+i[e[t+5]]+\"-\"+i[e[t+6]]+i[e[t+7]]+\"-\"+i[e[t+8]]+i[e[t+9]]+\"-\"+i[e[t+10]]+i[e[t+11]]+i[e[t+12]]+i[e[t+13]]+i[e[t+14]]+i[e[t+15]]).toLowerCase();if(!(0,o.default)(r))throw TypeError(\"Stringified UUID is invalid\");return r}},{\"./validate.js\":541}],536:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.default=void 0;var n=i(e(\"./rng.js\")),o=i(e(\"./stringify.js\"));function i(e){return e&&e.__esModule?e:{default:e}}let a,s,l=0,c=0;r.default=function(e,t,r){let i=t&&r||0;const u=t||new Array(16);let d=(e=e||{}).node||a,f=void 0!==e.clockseq?e.clockseq:s;if(null==d||null==f){const t=e.random||(e.rng||n.default)();null==d&&(d=a=[1|t[0],t[1],t[2],t[3],t[4],t[5]]),null==f&&(f=s=16383&(t[6]<<8|t[7]))}let h=void 0!==e.msecs?e.msecs:Date.now(),p=void 0!==e.nsecs?e.nsecs:c+1;const m=h-l+(p-c)/1e4;if(m<0&&void 0===e.clockseq&&(f=f+1&16383),(m<0||h>l)&&void 0===e.nsecs&&(p=0),p>=1e4)throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");l=h,c=p,s=f,h+=122192928e5;const g=(1e4*(268435455&h)+p)%4294967296;u[i++]=g>>>24&255,u[i++]=g>>>16&255,u[i++]=g>>>8&255,u[i++]=255&g;const v=h/4294967296*1e4&268435455;u[i++]=v>>>8&255,u[i++]=255&v,u[i++]=v>>>24&15|16,u[i++]=v>>>16&255,u[i++]=f>>>8|128,u[i++]=255&f;for(let e=0;e<6;++e)u[i+e]=d[e];return t||(0,o.default)(u)}},{\"./rng.js\":533,\"./stringify.js\":535}],537:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.default=void 0;var n=i(e(\"./v35.js\")),o=i(e(\"./md5.js\"));function i(e){return e&&e.__esModule?e:{default:e}}var a=(0,n.default)(\"v3\",48,o.default);r.default=a},{\"./md5.js\":529,\"./v35.js\":538}],538:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.default=function(e,t,r){function i(e,i,a,s){if(\"string\"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));const t=[];for(let r=0;r<e.length;++r)t.push(e.charCodeAt(r));return t}(e)),\"string\"==typeof i&&(i=(0,o.default)(i)),16!==i.length)throw TypeError(\"Namespace must be array-like (16 iterable integer values, 0-255)\");let l=new Uint8Array(16+e.length);if(l.set(i),l.set(e,i.length),l=r(l),l[6]=15&l[6]|t,l[8]=63&l[8]|128,a){s=s||0;for(let e=0;e<16;++e)a[s+e]=l[e];return a}return(0,n.default)(l)}try{i.name=e}catch(e){}return i.DNS=a,i.URL=s,i},r.URL=r.DNS=void 0;var n=i(e(\"./stringify.js\")),o=i(e(\"./parse.js\"));function i(e){return e&&e.__esModule?e:{default:e}}const a=\"6ba7b810-9dad-11d1-80b4-00c04fd430c8\";r.DNS=a;const s=\"6ba7b811-9dad-11d1-80b4-00c04fd430c8\";r.URL=s},{\"./parse.js\":531,\"./stringify.js\":535}],539:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.default=void 0;var n=i(e(\"./rng.js\")),o=i(e(\"./stringify.js\"));function i(e){return e&&e.__esModule?e:{default:e}}r.default=function(e,t,r){const i=(e=e||{}).random||(e.rng||n.default)();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t){r=r||0;for(let e=0;e<16;++e)t[r+e]=i[e];return t}return(0,o.default)(i)}},{\"./rng.js\":533,\"./stringify.js\":535}],540:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.default=void 0;var n=i(e(\"./v35.js\")),o=i(e(\"./sha1.js\"));function i(e){return e&&e.__esModule?e:{default:e}}var a=(0,n.default)(\"v5\",80,o.default);r.default=a},{\"./sha1.js\":534,\"./v35.js\":538}],541:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.default=void 0;var n,o=(n=e(\"./regex.js\"))&&n.__esModule?n:{default:n};r.default=function(e){return\"string\"==typeof e&&o.default.test(e)}},{\"./regex.js\":532}],542:[function(e,t,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0}),r.default=void 0;var n,o=(n=e(\"./validate.js\"))&&n.__esModule?n:{default:n};r.default=function(e){if(!(0,o.default)(e))throw TypeError(\"Invalid UUID\");return parseInt(e.substr(14,1),16)}},{\"./validate.js\":541}],543:[function(e,t,r){\"use strict\";function n(e){return e>=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}Object.defineProperty(r,\"__esModule\",{value:!0}),r.CHAR=\"\\t\\n\\r -퟿-�𐀀-􏿿\",r.S=\" \\t\\r\\n\",r.NAME_START_CHAR=\":A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿\",r.NAME_CHAR=\"-\"+r.NAME_START_CHAR+\".0-9·̀-ͯ‿-⁀\",r.CHAR_RE=new RegExp(\"^[\"+r.CHAR+\"]$\",\"u\"),r.S_RE=new RegExp(\"^[\"+r.S+\"]+$\",\"u\"),r.NAME_START_CHAR_RE=new RegExp(\"^[\"+r.NAME_START_CHAR+\"]$\",\"u\"),r.NAME_CHAR_RE=new RegExp(\"^[\"+r.NAME_CHAR+\"]$\",\"u\"),r.NAME_RE=new RegExp(\"^[\"+r.NAME_START_CHAR+\"][\"+r.NAME_CHAR+\"]*$\",\"u\"),r.NMTOKEN_RE=new RegExp(\"^[\"+r.NAME_CHAR+\"]+$\",\"u\"),r.S_LIST=[32,10,13,9],r.isChar=function(e){return e>=32&&e<=55295||10===e||13===e||9===e||e>=57344&&e<=65533||e>=65536&&e<=1114111},r.isS=function(e){return 32===e||10===e||13===e||9===e},r.isNameStartChar=n,r.isNameChar=function(e){return n(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}},{}],544:[function(e,t,r){\"use strict\";function n(e){return e>=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}Object.defineProperty(r,\"__esModule\",{value:!0}),r.CHAR=\"\u0001-퟿-�𐀀-􏿿\",r.RESTRICTED_CHAR=\"\u0001-\\b\\v\\f\u000e-\u001f--\",r.S=\" \\t\\r\\n\",r.NAME_START_CHAR=\":A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿\",r.NAME_CHAR=\"-\"+r.NAME_START_CHAR+\".0-9·̀-ͯ‿-⁀\",r.CHAR_RE=new RegExp(\"^[\"+r.CHAR+\"]$\",\"u\"),r.RESTRICTED_CHAR_RE=new RegExp(\"^[\"+r.RESTRICTED_CHAR+\"]$\",\"u\"),r.S_RE=new RegExp(\"^[\"+r.S+\"]+$\",\"u\"),r.NAME_START_CHAR_RE=new RegExp(\"^[\"+r.NAME_START_CHAR+\"]$\",\"u\"),r.NAME_CHAR_RE=new RegExp(\"^[\"+r.NAME_CHAR+\"]$\",\"u\"),r.NAME_RE=new RegExp(\"^[\"+r.NAME_START_CHAR+\"][\"+r.NAME_CHAR+\"]*$\",\"u\"),r.NMTOKEN_RE=new RegExp(\"^[\"+r.NAME_CHAR+\"]+$\",\"u\"),r.S_LIST=[32,10,13,9],r.isChar=function(e){return e>=1&&e<=55295||e>=57344&&e<=65533||e>=65536&&e<=1114111},r.isRestrictedChar=function(e){return e>=1&&e<=8||11===e||12===e||e>=14&&e<=31||e>=127&&e<=132||e>=134&&e<=159},r.isCharAndNotRestricted=function(e){return 9===e||10===e||13===e||e>31&&e<127||133===e||e>159&&e<=55295||e>=57344&&e<=65533||e>=65536&&e<=1114111},r.isS=function(e){return 32===e||10===e||13===e||9===e},r.isNameStartChar=n,r.isNameChar=function(e){return n(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}},{}],545:[function(e,t,r){\"use strict\";function n(e){return e>=65&&e<=90||95===e||e>=97&&e<=122||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8204&&e<=8205||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}Object.defineProperty(r,\"__esModule\",{value:!0}),r.NC_NAME_START_CHAR=\"A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿\",r.NC_NAME_CHAR=\"-\"+r.NC_NAME_START_CHAR+\".0-9·̀-ͯ‿-⁀\",r.NC_NAME_START_CHAR_RE=new RegExp(\"^[\"+r.NC_NAME_START_CHAR+\"]$\",\"u\"),r.NC_NAME_CHAR_RE=new RegExp(\"^[\"+r.NC_NAME_CHAR+\"]$\",\"u\"),r.NC_NAME_RE=new RegExp(\"^[\"+r.NC_NAME_START_CHAR+\"][\"+r.NC_NAME_CHAR+\"]*$\",\"u\"),r.isNCNameStartChar=n,r.isNCNameChar=function(e){return n(e)||45===e||46===e||e>=48&&e<=57||183===e||e>=768&&e<=879||e>=8255&&e<=8256}},{}]},{},[15])(15)},5056:(e,t,r)=>{\"use strict\";e.exports=function(e){var t=r.nc;t&&e.setAttribute(\"nonce\",t)}},5058:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Transformer=void 0;const n=r(4060),o=r(4892),i=r(6536),a=r(4723),s=r(5155),l=r(7949),c=r(8871),u=r(5483),d=r(8871),f=\"tr-konva\",h=[\"resizeEnabledChange\",\"rotateAnchorOffsetChange\",\"rotateEnabledChange\",\"enabledAnchorsChange\",\"anchorSizeChange\",\"borderEnabledChange\",\"borderStrokeChange\",\"borderStrokeWidthChange\",\"borderDashChange\",\"anchorStrokeChange\",\"anchorStrokeWidthChange\",\"anchorFillChange\",\"anchorCornerRadiusChange\",\"ignoreStrokeChange\",\"anchorStyleFuncChange\"].map((e=>e+`.${f}`)).join(\" \"),p=\"nodesRect\",m=[\"widthChange\",\"heightChange\",\"scaleXChange\",\"scaleYChange\",\"skewXChange\",\"skewYChange\",\"rotationChange\",\"offsetXChange\",\"offsetYChange\",\"transformsEnabledChange\",\"strokeWidthChange\"],g={\"top-left\":-45,\"top-center\":0,\"top-right\":45,\"middle-right\":-90,\"middle-left\":90,\"bottom-left\":-135,\"bottom-center\":180,\"bottom-right\":135},v=\"ontouchstart\"in c.Konva._global,b=[\"top-left\",\"top-center\",\"top-right\",\"middle-right\",\"middle-left\",\"bottom-left\",\"bottom-center\",\"bottom-right\"];function y(e,t,r){const n=r.x+(e.x-r.x)*Math.cos(t)-(e.y-r.y)*Math.sin(t),o=r.y+(e.x-r.x)*Math.sin(t)+(e.y-r.y)*Math.cos(t);return{...e,rotation:e.rotation+t,x:n,y:o}}let w=0;class x extends l.Group{constructor(e){super(e),this._movingAnchorName=null,this._transforming=!1,this._createElements(),this._handleMouseMove=this._handleMouseMove.bind(this),this._handleMouseUp=this._handleMouseUp.bind(this),this.update=this.update.bind(this),this.on(h,this.update),this.getNode()&&this.update()}attachTo(e){return this.setNode(e),this}setNode(e){return n.Util.warn(\"tr.setNode(shape), tr.node(shape) and tr.attachTo(shape) methods are deprecated. Please use tr.nodes(nodesArray) instead.\"),this.setNodes([e])}getNode(){return this._nodes&&this._nodes[0]}_getEventNamespace(){return f+this._id}setNodes(e=[]){this._nodes&&this._nodes.length&&this.detach();const t=e.filter((e=>!e.isAncestorOf(this)||(n.Util.error(\"Konva.Transformer cannot be an a child of the node you are trying to attach\"),!1)));return this._nodes=e=t,1===e.length&&this.useSingleNodeRotation()?this.rotation(e[0].getAbsoluteRotation()):this.rotation(0),this._nodes.forEach((e=>{const t=()=>{1===this.nodes().length&&this.useSingleNodeRotation()&&this.rotation(this.nodes()[0].getAbsoluteRotation()),this._resetTransformCache(),this._transforming||this.isDragging()||this.update()};if(e._attrsAffectingSize.length){const r=e._attrsAffectingSize.map((e=>e+\"Change.\"+this._getEventNamespace())).join(\" \");e.on(r,t)}e.on(m.map((e=>e+`.${this._getEventNamespace()}`)).join(\" \"),t),e.on(`absoluteTransformChange.${this._getEventNamespace()}`,t),this._proxyDrag(e)})),this._resetTransformCache(),!!this.findOne(\".top-left\")&&this.update(),this}_proxyDrag(e){let t;e.on(`dragstart.${this._getEventNamespace()}`,(r=>{t=e.getAbsolutePosition(),this.isDragging()||e===this.findOne(\".back\")||this.startDrag(r,!1)})),e.on(`dragmove.${this._getEventNamespace()}`,(r=>{if(!t)return;const n=e.getAbsolutePosition(),o=n.x-t.x,i=n.y-t.y;this.nodes().forEach((t=>{if(t===e)return;if(t.isDragging())return;const n=t.getAbsolutePosition();t.setAbsolutePosition({x:n.x+o,y:n.y+i}),t.startDrag(r)})),t=null}))}getNodes(){return this._nodes||[]}getActiveAnchor(){return this._movingAnchorName}detach(){this._nodes&&this._nodes.forEach((e=>{e.off(\".\"+this._getEventNamespace())})),this._nodes=[],this._resetTransformCache()}_resetTransformCache(){this._clearCache(p),this._clearCache(\"transform\"),this._clearSelfAndDescendantCache(\"absoluteTransform\")}_getNodeRect(){return this._getCache(p,this.__getNodeRect)}__getNodeShape(e,t=this.rotation(),r){const n=e.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()}),o=e.getAbsoluteScale(r),i=e.getAbsolutePosition(r),a=n.x*o.x-e.offsetX()*o.x,s=n.y*o.y-e.offsetY()*o.y,l=(c.Konva.getAngle(e.getAbsoluteRotation())+2*Math.PI)%(2*Math.PI);return y({x:i.x+a*Math.cos(l)+s*Math.sin(-l),y:i.y+s*Math.cos(l)+a*Math.sin(l),width:n.width*o.x,height:n.height*o.y,rotation:l},-c.Konva.getAngle(t),{x:0,y:0})}__getNodeRect(){if(!this.getNode())return{x:-1e8,y:-1e8,width:0,height:0,rotation:0};const e=[];this.nodes().map((t=>{const r=t.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()}),n=[{x:r.x,y:r.y},{x:r.x+r.width,y:r.y},{x:r.x+r.width,y:r.y+r.height},{x:r.x,y:r.y+r.height}],o=t.getAbsoluteTransform();n.forEach((function(t){const r=o.point(t);e.push(r)}))}));const t=new n.Transform;t.rotate(-c.Konva.getAngle(this.rotation()));let r=1/0,o=1/0,i=-1/0,a=-1/0;e.forEach((function(e){const n=t.point(e);void 0===r&&(r=i=n.x,o=a=n.y),r=Math.min(r,n.x),o=Math.min(o,n.y),i=Math.max(i,n.x),a=Math.max(a,n.y)})),t.invert();const s=t.point({x:r,y:o});return{x:s.x,y:s.y,width:i-r,height:a-o,rotation:c.Konva.getAngle(this.rotation())}}getX(){return this._getNodeRect().x}getY(){return this._getNodeRect().y}getWidth(){return this._getNodeRect().width}getHeight(){return this._getNodeRect().height}_createElements(){this._createBack(),b.forEach((e=>{this._createAnchor(e)})),this._createAnchor(\"rotater\")}_createAnchor(e){const t=new s.Rect({stroke:\"rgb(0, 161, 255)\",fill:\"white\",strokeWidth:1,name:e+\" _anchor\",dragDistance:0,draggable:!0,hitStrokeWidth:v?10:\"auto\"}),r=this;t.on(\"mousedown touchstart\",(function(e){r._handleMouseDown(e)})),t.on(\"dragstart\",(e=>{t.stopDrag(),e.cancelBubble=!0})),t.on(\"dragend\",(e=>{e.cancelBubble=!0})),t.on(\"mouseenter\",(()=>{const r=c.Konva.getAngle(this.rotation()),o=this.rotateAnchorCursor(),i=function(e,t,r){if(\"rotater\"===e)return r;t+=n.Util.degToRad(g[e]||0);const o=(n.Util.radToDeg(t)%360+360)%360;return n.Util._inRange(o,337.5,360)||n.Util._inRange(o,0,22.5)?\"ns-resize\":n.Util._inRange(o,22.5,67.5)?\"nesw-resize\":n.Util._inRange(o,67.5,112.5)?\"ew-resize\":n.Util._inRange(o,112.5,157.5)?\"nwse-resize\":n.Util._inRange(o,157.5,202.5)?\"ns-resize\":n.Util._inRange(o,202.5,247.5)?\"nesw-resize\":n.Util._inRange(o,247.5,292.5)?\"ew-resize\":n.Util._inRange(o,292.5,337.5)?\"nwse-resize\":(n.Util.error(\"Transformer has unknown angle for cursor detection: \"+o),\"pointer\")}(e,r,o);t.getStage().content&&(t.getStage().content.style.cursor=i),this._cursorChange=!0})),t.on(\"mouseout\",(()=>{t.getStage().content&&(t.getStage().content.style.cursor=\"\"),this._cursorChange=!1})),this.add(t)}_createBack(){const e=new a.Shape({name:\"back\",width:0,height:0,draggable:!0,sceneFunc(e,t){const r=t.getParent(),o=r.padding();e.beginPath(),e.rect(-o,-o,t.width()+2*o,t.height()+2*o),e.moveTo(t.width()/2,-o),r.rotateEnabled()&&r.rotateLineVisible()&&e.lineTo(t.width()/2,-r.rotateAnchorOffset()*n.Util._sign(t.height())-o),e.fillStrokeShape(t)},hitFunc:(e,t)=>{if(!this.shouldOverdrawWholeArea())return;const r=this.padding();e.beginPath(),e.rect(-r,-r,t.width()+2*r,t.height()+2*r),e.fillStrokeShape(t)}});this.add(e),this._proxyDrag(e),e.on(\"dragstart\",(e=>{e.cancelBubble=!0})),e.on(\"dragmove\",(e=>{e.cancelBubble=!0})),e.on(\"dragend\",(e=>{e.cancelBubble=!0})),this.on(\"dragmove\",(e=>{this.update()}))}_handleMouseDown(e){if(this._transforming)return;this._movingAnchorName=e.target.name().split(\" \")[0];const t=this._getNodeRect(),r=t.width,n=t.height,o=Math.sqrt(Math.pow(r,2)+Math.pow(n,2));this.sin=Math.abs(n/o),this.cos=Math.abs(r/o),\"undefined\"!=typeof window&&(window.addEventListener(\"mousemove\",this._handleMouseMove),window.addEventListener(\"touchmove\",this._handleMouseMove),window.addEventListener(\"mouseup\",this._handleMouseUp,!0),window.addEventListener(\"touchend\",this._handleMouseUp,!0)),this._transforming=!0;const i=e.target.getAbsolutePosition(),a=e.target.getStage().getPointerPosition();this._anchorDragOffset={x:a.x-i.x,y:a.y-i.y},w++,this._fire(\"transformstart\",{evt:e.evt,target:this.getNode()}),this._nodes.forEach((t=>{t._fire(\"transformstart\",{evt:e.evt,target:t})}))}_handleMouseMove(e){let t,r,n;const o=this.findOne(\".\"+this._movingAnchorName),i=o.getStage();i.setPointersPositions(e);const a=i.getPointerPosition();let s={x:a.x-this._anchorDragOffset.x,y:a.y-this._anchorDragOffset.y};const l=o.getAbsolutePosition();this.anchorDragBoundFunc()&&(s=this.anchorDragBoundFunc()(l,s,e)),o.setAbsolutePosition(s);const u=o.getAbsolutePosition();if(l.x===u.x&&l.y===u.y)return;if(\"rotater\"===this._movingAnchorName){const n=this._getNodeRect();t=o.x()-n.width/2,r=-o.y()+n.height/2;let i=Math.atan2(-r,t)+Math.PI/2;n.height<0&&(i-=Math.PI);const a=c.Konva.getAngle(this.rotation())+i,s=c.Konva.getAngle(this.rotationSnapTolerance()),l=function(e,t,r){let n=t;for(let o=0;o<e.length;o++){const i=c.Konva.getAngle(e[o]),a=Math.abs(i-t)%(2*Math.PI);Math.min(a,2*Math.PI-a)<r&&(n=i)}return n}(this.rotationSnaps(),a,s),u=function(e,t){const r=function(e){return{x:e.x+e.width/2*Math.cos(e.rotation)+e.height/2*Math.sin(-e.rotation),y:e.y+e.height/2*Math.cos(e.rotation)+e.width/2*Math.sin(e.rotation)}}(e);return y(e,t,r)}(n,l-n.rotation);return void this._fitNodesInto(u,e)}const d=this.shiftBehavior();let f;f=\"inverted\"===d?this.keepRatio()&&!e.shiftKey:\"none\"===d?this.keepRatio():this.keepRatio()||e.shiftKey;var h=this.centeredScaling()||e.altKey;if(\"top-left\"===this._movingAnchorName){if(f){var p=h?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(\".bottom-right\").x(),y:this.findOne(\".bottom-right\").y()};n=Math.sqrt(Math.pow(p.x-o.x(),2)+Math.pow(p.y-o.y(),2));var m=this.findOne(\".top-left\").x()>p.x?-1:1,g=this.findOne(\".top-left\").y()>p.y?-1:1;t=n*this.cos*m,r=n*this.sin*g,this.findOne(\".top-left\").x(p.x-t),this.findOne(\".top-left\").y(p.y-r)}}else if(\"top-center\"===this._movingAnchorName)this.findOne(\".top-left\").y(o.y());else if(\"top-right\"===this._movingAnchorName){f&&(p=h?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(\".bottom-left\").x(),y:this.findOne(\".bottom-left\").y()},n=Math.sqrt(Math.pow(o.x()-p.x,2)+Math.pow(p.y-o.y(),2)),m=this.findOne(\".top-right\").x()<p.x?-1:1,g=this.findOne(\".top-right\").y()>p.y?-1:1,t=n*this.cos*m,r=n*this.sin*g,this.findOne(\".top-right\").x(p.x+t),this.findOne(\".top-right\").y(p.y-r));var v=o.position();this.findOne(\".top-left\").y(v.y),this.findOne(\".bottom-right\").x(v.x)}else\"middle-left\"===this._movingAnchorName?this.findOne(\".top-left\").x(o.x()):\"middle-right\"===this._movingAnchorName?this.findOne(\".bottom-right\").x(o.x()):\"bottom-left\"===this._movingAnchorName?(f&&(p=h?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(\".top-right\").x(),y:this.findOne(\".top-right\").y()},n=Math.sqrt(Math.pow(p.x-o.x(),2)+Math.pow(o.y()-p.y,2)),m=p.x<o.x()?-1:1,g=o.y()<p.y?-1:1,t=n*this.cos*m,r=n*this.sin*g,o.x(p.x-t),o.y(p.y+r)),v=o.position(),this.findOne(\".top-left\").x(v.x),this.findOne(\".bottom-right\").y(v.y)):\"bottom-center\"===this._movingAnchorName?this.findOne(\".bottom-right\").y(o.y()):\"bottom-right\"===this._movingAnchorName?f&&(p=h?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(\".top-left\").x(),y:this.findOne(\".top-left\").y()},n=Math.sqrt(Math.pow(o.x()-p.x,2)+Math.pow(o.y()-p.y,2)),m=this.findOne(\".bottom-right\").x()<p.x?-1:1,g=this.findOne(\".bottom-right\").y()<p.y?-1:1,t=n*this.cos*m,r=n*this.sin*g,this.findOne(\".bottom-right\").x(p.x+t),this.findOne(\".bottom-right\").y(p.y+r)):console.error(new Error(\"Wrong position argument of selection resizer: \"+this._movingAnchorName));if(h=this.centeredScaling()||e.altKey){const e=this.findOne(\".top-left\"),t=this.findOne(\".bottom-right\"),r=e.x(),n=e.y(),o=this.getWidth()-t.x(),i=this.getHeight()-t.y();t.move({x:-r,y:-n}),e.move({x:o,y:i})}const b=this.findOne(\".top-left\").getAbsolutePosition();t=b.x,r=b.y;const w=this.findOne(\".bottom-right\").x()-this.findOne(\".top-left\").x(),x=this.findOne(\".bottom-right\").y()-this.findOne(\".top-left\").y();this._fitNodesInto({x:t,y:r,width:w,height:x,rotation:c.Konva.getAngle(this.rotation())},e)}_handleMouseUp(e){this._removeEvents(e)}getAbsoluteTransform(){return this.getTransform()}_removeEvents(e){var t;if(this._transforming){this._transforming=!1,\"undefined\"!=typeof window&&(window.removeEventListener(\"mousemove\",this._handleMouseMove),window.removeEventListener(\"touchmove\",this._handleMouseMove),window.removeEventListener(\"mouseup\",this._handleMouseUp,!0),window.removeEventListener(\"touchend\",this._handleMouseUp,!0));const r=this.getNode();w--,this._fire(\"transformend\",{evt:e,target:r}),null===(t=this.getLayer())||void 0===t||t.batchDraw(),r&&this._nodes.forEach((t=>{var r;t._fire(\"transformend\",{evt:e,target:t}),null===(r=t.getLayer())||void 0===r||r.batchDraw()})),this._movingAnchorName=null}}_fitNodesInto(e,t){const r=this._getNodeRect();if(n.Util._inRange(e.width,2*-this.padding()-1,1))return void this.update();if(n.Util._inRange(e.height,2*-this.padding()-1,1))return void this.update();const o=new n.Transform;if(o.rotate(c.Konva.getAngle(this.rotation())),this._movingAnchorName&&e.width<0&&this._movingAnchorName.indexOf(\"left\")>=0){const t=o.point({x:2*-this.padding(),y:0});e.x+=t.x,e.y+=t.y,e.width+=2*this.padding(),this._movingAnchorName=this._movingAnchorName.replace(\"left\",\"right\"),this._anchorDragOffset.x-=t.x,this._anchorDragOffset.y-=t.y}else if(this._movingAnchorName&&e.width<0&&this._movingAnchorName.indexOf(\"right\")>=0){const t=o.point({x:2*this.padding(),y:0});this._movingAnchorName=this._movingAnchorName.replace(\"right\",\"left\"),this._anchorDragOffset.x-=t.x,this._anchorDragOffset.y-=t.y,e.width+=2*this.padding()}if(this._movingAnchorName&&e.height<0&&this._movingAnchorName.indexOf(\"top\")>=0){const t=o.point({x:0,y:2*-this.padding()});e.x+=t.x,e.y+=t.y,this._movingAnchorName=this._movingAnchorName.replace(\"top\",\"bottom\"),this._anchorDragOffset.x-=t.x,this._anchorDragOffset.y-=t.y,e.height+=2*this.padding()}else if(this._movingAnchorName&&e.height<0&&this._movingAnchorName.indexOf(\"bottom\")>=0){const t=o.point({x:0,y:2*this.padding()});this._movingAnchorName=this._movingAnchorName.replace(\"bottom\",\"top\"),this._anchorDragOffset.x-=t.x,this._anchorDragOffset.y-=t.y,e.height+=2*this.padding()}if(this.boundBoxFunc()){const t=this.boundBoxFunc()(r,e);t?e=t:n.Util.warn(\"boundBoxFunc returned falsy. You should return new bound rect from it!\")}const i=1e7,a=new n.Transform;a.translate(r.x,r.y),a.rotate(r.rotation),a.scale(r.width/i,r.height/i);const s=new n.Transform,l=e.width/i,u=e.height/i;!1===this.flipEnabled()?(s.translate(e.x,e.y),s.rotate(e.rotation),s.translate(e.width<0?e.width:0,e.height<0?e.height:0),s.scale(Math.abs(l),Math.abs(u))):(s.translate(e.x,e.y),s.rotate(e.rotation),s.scale(l,u));const d=s.multiply(a.invert());this._nodes.forEach((e=>{var t;const r=e.getParent().getAbsoluteTransform(),o=e.getTransform().copy();o.translate(e.offsetX(),e.offsetY());const i=new n.Transform;i.multiply(r.copy().invert()).multiply(d).multiply(r).multiply(o);const a=i.decompose();e.setAttrs(a),null===(t=e.getLayer())||void 0===t||t.batchDraw()})),this.rotation(n.Util._getRotation(e.rotation)),this._nodes.forEach((e=>{this._fire(\"transform\",{evt:t,target:e}),e._fire(\"transform\",{evt:t,target:e})})),this._resetTransformCache(),this.update(),this.getLayer().batchDraw()}forceUpdate(){this._resetTransformCache(),this.update()}_batchChangeChild(e,t){this.findOne(e).setAttrs(t)}update(){var e;const t=this._getNodeRect();this.rotation(n.Util._getRotation(t.rotation));const r=t.width,o=t.height,i=this.enabledAnchors(),a=this.resizeEnabled(),s=this.padding(),l=this.anchorSize(),c=this.find(\"._anchor\");c.forEach((e=>{e.setAttrs({width:l,height:l,offsetX:l/2,offsetY:l/2,stroke:this.anchorStroke(),strokeWidth:this.anchorStrokeWidth(),fill:this.anchorFill(),cornerRadius:this.anchorCornerRadius()})})),this._batchChangeChild(\".top-left\",{x:0,y:0,offsetX:l/2+s,offsetY:l/2+s,visible:a&&i.indexOf(\"top-left\")>=0}),this._batchChangeChild(\".top-center\",{x:r/2,y:0,offsetY:l/2+s,visible:a&&i.indexOf(\"top-center\")>=0}),this._batchChangeChild(\".top-right\",{x:r,y:0,offsetX:l/2-s,offsetY:l/2+s,visible:a&&i.indexOf(\"top-right\")>=0}),this._batchChangeChild(\".middle-left\",{x:0,y:o/2,offsetX:l/2+s,visible:a&&i.indexOf(\"middle-left\")>=0}),this._batchChangeChild(\".middle-right\",{x:r,y:o/2,offsetX:l/2-s,visible:a&&i.indexOf(\"middle-right\")>=0}),this._batchChangeChild(\".bottom-left\",{x:0,y:o,offsetX:l/2+s,offsetY:l/2-s,visible:a&&i.indexOf(\"bottom-left\")>=0}),this._batchChangeChild(\".bottom-center\",{x:r/2,y:o,offsetY:l/2-s,visible:a&&i.indexOf(\"bottom-center\")>=0}),this._batchChangeChild(\".bottom-right\",{x:r,y:o,offsetX:l/2-s,offsetY:l/2-s,visible:a&&i.indexOf(\"bottom-right\")>=0}),this._batchChangeChild(\".rotater\",{x:r/2,y:-this.rotateAnchorOffset()*n.Util._sign(o)-s,visible:this.rotateEnabled()}),this._batchChangeChild(\".back\",{width:r,height:o,visible:this.borderEnabled(),stroke:this.borderStroke(),strokeWidth:this.borderStrokeWidth(),dash:this.borderDash(),x:0,y:0});const u=this.anchorStyleFunc();u&&c.forEach((e=>{u(e)})),null===(e=this.getLayer())||void 0===e||e.batchDraw()}isTransforming(){return this._transforming}stopTransform(){if(this._transforming){this._removeEvents();const e=this.findOne(\".\"+this._movingAnchorName);e&&e.stopDrag()}}destroy(){return this.getStage()&&this._cursorChange&&this.getStage().content&&(this.getStage().content.style.cursor=\"\"),l.Group.prototype.destroy.call(this),this.detach(),this._removeEvents(),this}toObject(){return i.Node.prototype.toObject.call(this)}clone(e){return i.Node.prototype.clone.call(this,e)}getClientRect(){return this.nodes().length>0?super.getClientRect():{x:0,y:0,width:0,height:0}}}t.Transformer=x,x.isTransforming=()=>w>0,x.prototype.className=\"Transformer\",(0,d._registerNode)(x),o.Factory.addGetterSetter(x,\"enabledAnchors\",b,(function(e){return e instanceof Array||n.Util.warn(\"enabledAnchors value should be an array\"),e instanceof Array&&e.forEach((function(e){-1===b.indexOf(e)&&n.Util.warn(\"Unknown anchor name: \"+e+\". Available names are: \"+b.join(\", \"))})),e||[]})),o.Factory.addGetterSetter(x,\"flipEnabled\",!0,(0,u.getBooleanValidator)()),o.Factory.addGetterSetter(x,\"resizeEnabled\",!0),o.Factory.addGetterSetter(x,\"anchorSize\",10,(0,u.getNumberValidator)()),o.Factory.addGetterSetter(x,\"rotateEnabled\",!0),o.Factory.addGetterSetter(x,\"rotateLineVisible\",!0),o.Factory.addGetterSetter(x,\"rotationSnaps\",[]),o.Factory.addGetterSetter(x,\"rotateAnchorOffset\",50,(0,u.getNumberValidator)()),o.Factory.addGetterSetter(x,\"rotateAnchorCursor\",\"crosshair\"),o.Factory.addGetterSetter(x,\"rotationSnapTolerance\",5,(0,u.getNumberValidator)()),o.Factory.addGetterSetter(x,\"borderEnabled\",!0),o.Factory.addGetterSetter(x,\"anchorStroke\",\"rgb(0, 161, 255)\"),o.Factory.addGetterSetter(x,\"anchorStrokeWidth\",1,(0,u.getNumberValidator)()),o.Factory.addGetterSetter(x,\"anchorFill\",\"white\"),o.Factory.addGetterSetter(x,\"anchorCornerRadius\",0,(0,u.getNumberValidator)()),o.Factory.addGetterSetter(x,\"borderStroke\",\"rgb(0, 161, 255)\"),o.Factory.addGetterSetter(x,\"borderStrokeWidth\",1,(0,u.getNumberValidator)()),o.Factory.addGetterSetter(x,\"borderDash\"),o.Factory.addGetterSetter(x,\"keepRatio\",!0),o.Factory.addGetterSetter(x,\"shiftBehavior\",\"default\"),o.Factory.addGetterSetter(x,\"centeredScaling\",!1),o.Factory.addGetterSetter(x,\"ignoreStroke\",!1),o.Factory.addGetterSetter(x,\"padding\",0,(0,u.getNumberValidator)()),o.Factory.addGetterSetter(x,\"nodes\"),o.Factory.addGetterSetter(x,\"node\"),o.Factory.addGetterSetter(x,\"boundBoxFunc\"),o.Factory.addGetterSetter(x,\"anchorDragBoundFunc\"),o.Factory.addGetterSetter(x,\"anchorStyleFunc\"),o.Factory.addGetterSetter(x,\"shouldOverdrawWholeArea\",!1),o.Factory.addGetterSetter(x,\"useSingleNodeRotation\",!0),o.Factory.backCompat(x,{lineEnabled:\"borderEnabled\",rotateHandlerOffset:\"rotateAnchorOffset\",enabledHandlers:\"enabledAnchors\"})},5072:e=>{\"use strict\";var t=[];function r(e){for(var r=-1,n=0;n<t.length;n++)if(t[n].identifier===e){r=n;break}return r}function n(e,n){for(var i={},a=[],s=0;s<e.length;s++){var l=e[s],c=n.base?l[0]+n.base:l[0],u=i[c]||0,d=\"\".concat(c,\" \").concat(u);i[c]=u+1;var f=r(d),h={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==f)t[f].references++,t[f].updater(h);else{var p=o(h,n);n.byIndex=s,t.splice(s,0,{identifier:d,updater:p,references:1})}a.push(d)}return a}function o(e,t){var r=t.domAPI(t);return r.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;r.update(e=t)}else r.remove()}}e.exports=function(e,o){var i=n(e=e||[],o=o||{});return function(e){e=e||[];for(var a=0;a<i.length;a++){var s=r(i[a]);t[s].references--}for(var l=n(e,o),c=0;c<i.length;c++){var u=r(i[c]);0===t[u].references&&(t[u].updater(),t.splice(u,1))}i=l}}},5155:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Rect=void 0;const n=r(4892),o=r(4723),i=r(8871),a=r(4060),s=r(5483);class l extends o.Shape{_sceneFunc(e){const t=this.cornerRadius(),r=this.width(),n=this.height();e.beginPath(),t?a.Util.drawRoundedRectPath(e,r,n,t):e.rect(0,0,r,n),e.closePath(),e.fillStrokeShape(this)}}t.Rect=l,l.prototype.className=\"Rect\",(0,i._registerNode)(l),n.Factory.addGetterSetter(l,\"cornerRadius\",0,(0,s.getNumberOrArrayOfNumbersValidator)(4))},5287:(e,t)=>{\"use strict\";var r=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),o=Symbol.for(\"react.fragment\"),i=Symbol.for(\"react.strict_mode\"),a=Symbol.for(\"react.profiler\"),s=Symbol.for(\"react.provider\"),l=Symbol.for(\"react.context\"),c=Symbol.for(\"react.forward_ref\"),u=Symbol.for(\"react.suspense\"),d=Symbol.for(\"react.memo\"),f=Symbol.for(\"react.lazy\"),h=Symbol.iterator,p={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m=Object.assign,g={};function v(e,t,r){this.props=e,this.context=t,this.refs=g,this.updater=r||p}function b(){}function y(e,t,r){this.props=e,this.context=t,this.refs=g,this.updater=r||p}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(\"object\"!=typeof e&&\"function\"!=typeof e&&null!=e)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,e,t,\"setState\")},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,\"forceUpdate\")},b.prototype=v.prototype;var w=y.prototype=new b;w.constructor=y,m(w,v.prototype),w.isPureReactComponent=!0;var x=Array.isArray,S=Object.prototype.hasOwnProperty,C={current:null},k={key:!0,ref:!0,__self:!0,__source:!0};function E(e,t,n){var o,i={},a=null,s=null;if(null!=t)for(o in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(a=\"\"+t.key),t)S.call(t,o)&&!k.hasOwnProperty(o)&&(i[o]=t[o]);var l=arguments.length-2;if(1===l)i.children=n;else if(1<l){for(var c=Array(l),u=0;u<l;u++)c[u]=arguments[u+2];i.children=c}if(e&&e.defaultProps)for(o in l=e.defaultProps)void 0===i[o]&&(i[o]=l[o]);return{$$typeof:r,type:e,key:a,ref:s,props:i,_owner:C.current}}function O(e){return\"object\"==typeof e&&null!==e&&e.$$typeof===r}var A=/\\/+/g;function T(e,t){return\"object\"==typeof e&&null!==e&&null!=e.key?function(e){var t={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+e.replace(/[=:]/g,(function(e){return t[e]}))}(\"\"+e.key):t.toString(36)}function j(e,t,o,i,a){var s=typeof e;\"undefined\"!==s&&\"boolean\"!==s||(e=null);var l=!1;if(null===e)l=!0;else switch(s){case\"string\":case\"number\":l=!0;break;case\"object\":switch(e.$$typeof){case r:case n:l=!0}}if(l)return a=a(l=e),e=\"\"===i?\".\"+T(l,0):i,x(a)?(o=\"\",null!=e&&(o=e.replace(A,\"$&/\")+\"/\"),j(a,t,o,\"\",(function(e){return e}))):null!=a&&(O(a)&&(a=function(e,t){return{$$typeof:r,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(a,o+(!a.key||l&&l.key===a.key?\"\":(\"\"+a.key).replace(A,\"$&/\")+\"/\")+e)),t.push(a)),1;if(l=0,i=\"\"===i?\".\":i+\":\",x(e))for(var c=0;c<e.length;c++){var u=i+T(s=e[c],c);l+=j(s,t,o,u,a)}else if(u=function(e){return null===e||\"object\"!=typeof e?null:\"function\"==typeof(e=h&&e[h]||e[\"@@iterator\"])?e:null}(e),\"function\"==typeof u)for(e=u.call(e),c=0;!(s=e.next()).done;)l+=j(s=s.value,t,o,u=i+T(s,c++),a);else if(\"object\"===s)throw t=String(e),Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===t?\"object with keys {\"+Object.keys(e).join(\", \")+\"}\":t)+\"). If you meant to render a collection of children, use an array instead.\");return l}function P(e,t,r){if(null==e)return e;var n=[],o=0;return j(e,n,\"\",\"\",(function(e){return t.call(r,e,o++)})),n}function M(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var R={current:null},_={transition:null},I={ReactCurrentDispatcher:R,ReactCurrentBatchConfig:_,ReactCurrentOwner:C};function N(){throw Error(\"act(...) is not supported in production builds of React.\")}t.Children={map:P,forEach:function(e,t,r){P(e,(function(){t.apply(this,arguments)}),r)},count:function(e){var t=0;return P(e,(function(){t++})),t},toArray:function(e){return P(e,(function(e){return e}))||[]},only:function(e){if(!O(e))throw Error(\"React.Children.only expected to receive a single React element child.\");return e}},t.Component=v,t.Fragment=o,t.Profiler=a,t.PureComponent=y,t.StrictMode=i,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=I,t.act=N,t.cloneElement=function(e,t,n){if(null==e)throw Error(\"React.cloneElement(...): The argument must be a React element, but you passed \"+e+\".\");var o=m({},e.props),i=e.key,a=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(a=t.ref,s=C.current),void 0!==t.key&&(i=\"\"+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(c in t)S.call(t,c)&&!k.hasOwnProperty(c)&&(o[c]=void 0===t[c]&&void 0!==l?l[c]:t[c])}var c=arguments.length-2;if(1===c)o.children=n;else if(1<c){l=Array(c);for(var u=0;u<c;u++)l[u]=arguments[u+2];o.children=l}return{$$typeof:r,type:e.type,key:i,ref:a,props:o,_owner:s}},t.createContext=function(e){return(e={$$typeof:l,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:s,_context:e},e.Consumer=e},t.createElement=E,t.createFactory=function(e){var t=E.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=O,t.lazy=function(e){return{$$typeof:f,_payload:{_status:-1,_result:e},_init:M}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=_.transition;_.transition={};try{e()}finally{_.transition=t}},t.unstable_act=N,t.useCallback=function(e,t){return R.current.useCallback(e,t)},t.useContext=function(e){return R.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return R.current.useDeferredValue(e)},t.useEffect=function(e,t){return R.current.useEffect(e,t)},t.useId=function(){return R.current.useId()},t.useImperativeHandle=function(e,t,r){return R.current.useImperativeHandle(e,t,r)},t.useInsertionEffect=function(e,t){return R.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return R.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return R.current.useMemo(e,t)},t.useReducer=function(e,t,r){return R.current.useReducer(e,t,r)},t.useRef=function(e){return R.current.useRef(e)},t.useState=function(e){return R.current.useState(e)},t.useSyncExternalStore=function(e,t,r){return R.current.useSyncExternalStore(e,t,r)},t.useTransition=function(){return R.current.useTransition()},t.version=\"18.3.1\"},5338:(e,t,r)=>{\"use strict\";var n=r(961);t.H=n.createRoot,n.hydrateRoot},5451:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Ring=void 0;const n=r(4892),o=r(4723),i=r(5483),a=r(8871),s=2*Math.PI;class l extends o.Shape{_sceneFunc(e){e.beginPath(),e.arc(0,0,this.innerRadius(),0,s,!1),e.moveTo(this.outerRadius(),0),e.arc(0,0,this.outerRadius(),s,0,!0),e.closePath(),e.fillStrokeShape(this)}getWidth(){return 2*this.outerRadius()}getHeight(){return 2*this.outerRadius()}setWidth(e){this.outerRadius(e/2)}setHeight(e){this.outerRadius(e/2)}}t.Ring=l,l.prototype.className=\"Ring\",l.prototype._centroid=!0,l.prototype._attrsAffectingSize=[\"innerRadius\",\"outerRadius\"],(0,a._registerNode)(l),n.Factory.addGetterSetter(l,\"innerRadius\",0,(0,i.getNumberValidator)()),n.Factory.addGetterSetter(l,\"outerRadius\",0,(0,i.getNumberValidator)())},5461:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.HSL=void 0;const n=r(4892),o=r(6536),i=r(5483);n.Factory.addGetterSetter(o.Node,\"hue\",0,(0,i.getNumberValidator)(),n.Factory.afterSetFilter),n.Factory.addGetterSetter(o.Node,\"saturation\",0,(0,i.getNumberValidator)(),n.Factory.afterSetFilter),n.Factory.addGetterSetter(o.Node,\"luminance\",0,(0,i.getNumberValidator)(),n.Factory.afterSetFilter),t.HSL=function(e){const t=e.data,r=t.length,n=Math.pow(2,this.saturation()),o=Math.abs(this.hue()+360)%360,i=127*this.luminance(),a=1*n*Math.cos(o*Math.PI/180),s=1*n*Math.sin(o*Math.PI/180),l=.299+.701*a+.167*s,c=.587-.587*a+.33*s,u=.114-.114*a-.497*s,d=.299-.299*a-.328*s,f=.587+.413*a+.035*s,h=.114-.114*a+.293*s,p=.299-.3*a+1.25*s,m=.587-.586*a-1.05*s,g=.114+.886*a-.2*s;let v,b,y,w;for(let e=0;e<r;e+=4)v=t[e+0],b=t[e+1],y=t[e+2],w=t[e+3],t[e+0]=l*v+c*b+u*y+i,t[e+1]=d*v+f*b+h*y+i,t[e+2]=p*v+m*b+g*y+i,t[e+3]=w}},5483:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.RGBComponent=function(e){return e>255?255:e<0?0:Math.round(e)},t.alphaComponent=function(e){return e>1?1:e<1e-4?1e-4:e},t.getNumberValidator=function(){if(n.Konva.isUnminified)return function(e,t){return o.Util._isNumber(e)||o.Util.warn(i(e)+' is a not valid value for \"'+t+'\" attribute. The value should be a number.'),e}},t.getNumberOrArrayOfNumbersValidator=function(e){if(n.Konva.isUnminified)return function(t,r){let n=o.Util._isNumber(t),a=o.Util._isArray(t)&&t.length==e;return n||a||o.Util.warn(i(t)+' is a not valid value for \"'+r+'\" attribute. The value should be a number or Array<number>('+e+\")\"),t}},t.getNumberOrAutoValidator=function(){if(n.Konva.isUnminified)return function(e,t){return o.Util._isNumber(e)||\"auto\"===e||o.Util.warn(i(e)+' is a not valid value for \"'+t+'\" attribute. The value should be a number or \"auto\".'),e}},t.getStringValidator=function(){if(n.Konva.isUnminified)return function(e,t){return o.Util._isString(e)||o.Util.warn(i(e)+' is a not valid value for \"'+t+'\" attribute. The value should be a string.'),e}},t.getStringOrGradientValidator=function(){if(n.Konva.isUnminified)return function(e,t){const r=o.Util._isString(e),n=\"[object CanvasGradient]\"===Object.prototype.toString.call(e)||e&&e.addColorStop;return r||n||o.Util.warn(i(e)+' is a not valid value for \"'+t+'\" attribute. The value should be a string or a native gradient.'),e}},t.getFunctionValidator=function(){if(n.Konva.isUnminified)return function(e,t){return o.Util._isFunction(e)||o.Util.warn(i(e)+' is a not valid value for \"'+t+'\" attribute. The value should be a function.'),e}},t.getNumberArrayValidator=function(){if(n.Konva.isUnminified)return function(e,t){const r=Int8Array?Object.getPrototypeOf(Int8Array):null;return r&&e instanceof r||(o.Util._isArray(e)?e.forEach((function(e){o.Util._isNumber(e)||o.Util.warn('\"'+t+'\" attribute has non numeric element '+e+\". Make sure that all elements are numbers.\")})):o.Util.warn(i(e)+' is a not valid value for \"'+t+'\" attribute. The value should be a array of numbers.')),e}},t.getBooleanValidator=function(){if(n.Konva.isUnminified)return function(e,t){return!0===e||!1===e||o.Util.warn(i(e)+' is a not valid value for \"'+t+'\" attribute. The value should be a boolean.'),e}},t.getComponentValidator=function(e){if(n.Konva.isUnminified)return function(t,r){return null==t||o.Util.isObject(t)||o.Util.warn(i(t)+' is a not valid value for \"'+r+'\" attribute. The value should be an object with properties '+e),t}};const n=r(8871),o=r(4060);function i(e){return o.Util._isString(e)?'\"'+e+'\"':\"[object Number]\"===Object.prototype.toString.call(e)||o.Util._isBoolean(e)?e:Object.prototype.toString.call(e)}},5553:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Kaleidoscope=void 0;const n=r(4892),o=r(6536),i=r(4060),a=r(5483);t.Kaleidoscope=function(e){const t=e.width,r=e.height;let n,o,a,s,l,c,u,d,f,h,p=Math.round(this.kaleidoscopePower());const m=Math.round(this.kaleidoscopeAngle()),g=Math.floor(t*(m%360)/360);if(p<1)return;const v=i.Util.createCanvasElement();v.width=t,v.height=r;const b=v.getContext(\"2d\").getImageData(0,0,t,r);i.Util.releaseCanvas(v),function(e,t,r){const n=e.data,o=t.data,i=e.width,a=e.height,s=r.polarCenterX||i/2,l=r.polarCenterY||a/2;let c=Math.sqrt(s*s+l*l),u=i-s,d=a-l;const f=Math.sqrt(u*u+d*d);c=f>c?f:c;const h=a,p=i,m=360/p*Math.PI/180;for(let e=0;e<p;e+=1){const t=Math.sin(e*m),r=Math.cos(e*m);for(let a=0;a<h;a+=1){u=Math.floor(s+c*a/h*r),d=Math.floor(l+c*a/h*t);let f=4*(d*i+u);const p=n[f+0],m=n[f+1],g=n[f+2],v=n[f+3];f=4*(e+a*i),o[f+0]=p,o[f+1]=m,o[f+2]=g,o[f+3]=v}}}(e,b,{polarCenterX:t/2,polarCenterY:r/2});let y=t/Math.pow(2,p);for(;y<=8;)y*=2,p-=1;y=Math.ceil(y);let w=y,x=0,S=w,C=1;for(g+y>t&&(x=w,S=0,C=-1),o=0;o<r;o+=1)for(n=x;n!==S;n+=C)a=Math.round(n+g)%t,f=4*(t*o+a),l=b.data[f+0],c=b.data[f+1],u=b.data[f+2],d=b.data[f+3],h=4*(t*o+n),b.data[h+0]=l,b.data[h+1]=c,b.data[h+2]=u,b.data[h+3]=d;for(o=0;o<r;o+=1)for(w=Math.floor(y),s=0;s<p;s+=1){for(n=0;n<w+1;n+=1)f=4*(t*o+n),l=b.data[f+0],c=b.data[f+1],u=b.data[f+2],d=b.data[f+3],h=4*(t*o+2*w-n-1),b.data[h+0]=l,b.data[h+1]=c,b.data[h+2]=u,b.data[h+3]=d;w*=2}!function(e,t,r){const n=e.data,o=t.data,i=e.width,a=e.height,s=r.polarCenterX||i/2,l=r.polarCenterY||a/2;let c=Math.sqrt(s*s+l*l),u=i-s,d=a-l;const f=Math.sqrt(u*u+d*d);c=f>c?f:c;const h=a,p=i,m=r.polarRotation||0;let g,v;for(u=0;u<i;u+=1)for(d=0;d<a;d+=1){const e=u-s,t=d-l,r=Math.sqrt(e*e+t*t)*h/c;let a=(180*Math.atan2(t,e)/Math.PI+360+m)%360;a=a*p/360,g=Math.floor(a),v=Math.floor(r);let f=4*(v*i+g);const b=n[f+0],y=n[f+1],w=n[f+2],x=n[f+3];f=4*(d*i+u),o[f+0]=b,o[f+1]=y,o[f+2]=w,o[f+3]=x}}(b,e,{polarRotation:0})},n.Factory.addGetterSetter(o.Node,\"kaleidoscopePower\",2,(0,a.getNumberValidator)(),n.Factory.afterSetFilter),n.Factory.addGetterSetter(o.Node,\"kaleidoscopeAngle\",0,(0,a.getNumberValidator)(),n.Factory.afterSetFilter)},5570:(e,t)=>{\"use strict\";function r(e,t,r){const o=n(1,r,e),i=n(1,r,t),a=o*o+i*i;return Math.sqrt(a)}Object.defineProperty(t,\"__esModule\",{value:!0}),t.t2length=t.getQuadraticArcLength=t.getCubicArcLength=t.binomialCoefficients=t.cValues=t.tValues=void 0,t.tValues=[[],[],[-.5773502691896257,.5773502691896257],[0,-.7745966692414834,.7745966692414834],[-.33998104358485626,.33998104358485626,-.8611363115940526,.8611363115940526],[0,-.5384693101056831,.5384693101056831,-.906179845938664,.906179845938664],[.6612093864662645,-.6612093864662645,-.2386191860831969,.2386191860831969,-.932469514203152,.932469514203152],[0,.4058451513773972,-.4058451513773972,-.7415311855993945,.7415311855993945,-.9491079123427585,.9491079123427585],[-.1834346424956498,.1834346424956498,-.525532409916329,.525532409916329,-.7966664774136267,.7966664774136267,-.9602898564975363,.9602898564975363],[0,-.8360311073266358,.8360311073266358,-.9681602395076261,.9681602395076261,-.3242534234038089,.3242534234038089,-.6133714327005904,.6133714327005904],[-.14887433898163122,.14887433898163122,-.4333953941292472,.4333953941292472,-.6794095682990244,.6794095682990244,-.8650633666889845,.8650633666889845,-.9739065285171717,.9739065285171717],[0,-.26954315595234496,.26954315595234496,-.5190961292068118,.5190961292068118,-.7301520055740494,.7301520055740494,-.8870625997680953,.8870625997680953,-.978228658146057,.978228658146057],[-.1252334085114689,.1252334085114689,-.3678314989981802,.3678314989981802,-.5873179542866175,.5873179542866175,-.7699026741943047,.7699026741943047,-.9041172563704749,.9041172563704749,-.9815606342467192,.9815606342467192],[0,-.2304583159551348,.2304583159551348,-.44849275103644687,.44849275103644687,-.6423493394403402,.6423493394403402,-.8015780907333099,.8015780907333099,-.9175983992229779,.9175983992229779,-.9841830547185881,.9841830547185881],[-.10805494870734367,.10805494870734367,-.31911236892788974,.31911236892788974,-.5152486363581541,.5152486363581541,-.6872929048116855,.6872929048116855,-.827201315069765,.827201315069765,-.9284348836635735,.9284348836635735,-.9862838086968123,.9862838086968123],[0,-.20119409399743451,.20119409399743451,-.3941513470775634,.3941513470775634,-.5709721726085388,.5709721726085388,-.7244177313601701,.7244177313601701,-.8482065834104272,.8482065834104272,-.937273392400706,.937273392400706,-.9879925180204854,.9879925180204854],[-.09501250983763744,.09501250983763744,-.2816035507792589,.2816035507792589,-.45801677765722737,.45801677765722737,-.6178762444026438,.6178762444026438,-.755404408355003,.755404408355003,-.8656312023878318,.8656312023878318,-.9445750230732326,.9445750230732326,-.9894009349916499,.9894009349916499],[0,-.17848418149584785,.17848418149584785,-.3512317634538763,.3512317634538763,-.5126905370864769,.5126905370864769,-.6576711592166907,.6576711592166907,-.7815140038968014,.7815140038968014,-.8802391537269859,.8802391537269859,-.9506755217687678,.9506755217687678,-.9905754753144174,.9905754753144174],[-.0847750130417353,.0847750130417353,-.2518862256915055,.2518862256915055,-.41175116146284263,.41175116146284263,-.5597708310739475,.5597708310739475,-.6916870430603532,.6916870430603532,-.8037049589725231,.8037049589725231,-.8926024664975557,.8926024664975557,-.9558239495713977,.9558239495713977,-.9915651684209309,.9915651684209309],[0,-.16035864564022537,.16035864564022537,-.31656409996362983,.31656409996362983,-.46457074137596094,.46457074137596094,-.600545304661681,.600545304661681,-.7209661773352294,.7209661773352294,-.8227146565371428,.8227146565371428,-.9031559036148179,.9031559036148179,-.96020815213483,.96020815213483,-.9924068438435844,.9924068438435844],[-.07652652113349734,.07652652113349734,-.22778585114164507,.22778585114164507,-.37370608871541955,.37370608871541955,-.5108670019508271,.5108670019508271,-.636053680726515,.636053680726515,-.7463319064601508,.7463319064601508,-.8391169718222188,.8391169718222188,-.912234428251326,.912234428251326,-.9639719272779138,.9639719272779138,-.9931285991850949,.9931285991850949],[0,-.1455618541608951,.1455618541608951,-.2880213168024011,.2880213168024011,-.4243421202074388,.4243421202074388,-.5516188358872198,.5516188358872198,-.6671388041974123,.6671388041974123,-.7684399634756779,.7684399634756779,-.8533633645833173,.8533633645833173,-.9200993341504008,.9200993341504008,-.9672268385663063,.9672268385663063,-.9937521706203895,.9937521706203895],[-.06973927331972223,.06973927331972223,-.20786042668822127,.20786042668822127,-.34193582089208424,.34193582089208424,-.469355837986757,.469355837986757,-.5876404035069116,.5876404035069116,-.6944872631866827,.6944872631866827,-.7878168059792081,.7878168059792081,-.8658125777203002,.8658125777203002,-.926956772187174,.926956772187174,-.9700604978354287,.9700604978354287,-.9942945854823992,.9942945854823992],[0,-.1332568242984661,.1332568242984661,-.26413568097034495,.26413568097034495,-.3903010380302908,.3903010380302908,-.5095014778460075,.5095014778460075,-.6196098757636461,.6196098757636461,-.7186613631319502,.7186613631319502,-.8048884016188399,.8048884016188399,-.8767523582704416,.8767523582704416,-.9329710868260161,.9329710868260161,-.9725424712181152,.9725424712181152,-.9947693349975522,.9947693349975522],[-.06405689286260563,.06405689286260563,-.1911188674736163,.1911188674736163,-.3150426796961634,.3150426796961634,-.4337935076260451,.4337935076260451,-.5454214713888396,.5454214713888396,-.6480936519369755,.6480936519369755,-.7401241915785544,.7401241915785544,-.820001985973903,.820001985973903,-.8864155270044011,.8864155270044011,-.9382745520027328,.9382745520027328,-.9747285559713095,.9747285559713095,-.9951872199970213,.9951872199970213]],t.cValues=[[],[],[1,1],[.8888888888888888,.5555555555555556,.5555555555555556],[.6521451548625461,.6521451548625461,.34785484513745385,.34785484513745385],[.5688888888888889,.47862867049936647,.47862867049936647,.23692688505618908,.23692688505618908],[.3607615730481386,.3607615730481386,.46791393457269104,.46791393457269104,.17132449237917036,.17132449237917036],[.4179591836734694,.3818300505051189,.3818300505051189,.27970539148927664,.27970539148927664,.1294849661688697,.1294849661688697],[.362683783378362,.362683783378362,.31370664587788727,.31370664587788727,.22238103445337448,.22238103445337448,.10122853629037626,.10122853629037626],[.3302393550012598,.1806481606948574,.1806481606948574,.08127438836157441,.08127438836157441,.31234707704000286,.31234707704000286,.26061069640293544,.26061069640293544],[.29552422471475287,.29552422471475287,.26926671930999635,.26926671930999635,.21908636251598204,.21908636251598204,.1494513491505806,.1494513491505806,.06667134430868814,.06667134430868814],[.2729250867779006,.26280454451024665,.26280454451024665,.23319376459199048,.23319376459199048,.18629021092773426,.18629021092773426,.1255803694649046,.1255803694649046,.05566856711617366,.05566856711617366],[.24914704581340277,.24914704581340277,.2334925365383548,.2334925365383548,.20316742672306592,.20316742672306592,.16007832854334622,.16007832854334622,.10693932599531843,.10693932599531843,.04717533638651183,.04717533638651183],[.2325515532308739,.22628318026289723,.22628318026289723,.2078160475368885,.2078160475368885,.17814598076194574,.17814598076194574,.13887351021978725,.13887351021978725,.09212149983772845,.09212149983772845,.04048400476531588,.04048400476531588],[.2152638534631578,.2152638534631578,.2051984637212956,.2051984637212956,.18553839747793782,.18553839747793782,.15720316715819355,.15720316715819355,.12151857068790319,.12151857068790319,.08015808715976021,.08015808715976021,.03511946033175186,.03511946033175186],[.2025782419255613,.19843148532711158,.19843148532711158,.1861610000155622,.1861610000155622,.16626920581699392,.16626920581699392,.13957067792615432,.13957067792615432,.10715922046717194,.10715922046717194,.07036604748810812,.07036604748810812,.03075324199611727,.03075324199611727],[.1894506104550685,.1894506104550685,.18260341504492358,.18260341504492358,.16915651939500254,.16915651939500254,.14959598881657674,.14959598881657674,.12462897125553388,.12462897125553388,.09515851168249279,.09515851168249279,.062253523938647894,.062253523938647894,.027152459411754096,.027152459411754096],[.17944647035620653,.17656270536699264,.17656270536699264,.16800410215645004,.16800410215645004,.15404576107681028,.15404576107681028,.13513636846852548,.13513636846852548,.11188384719340397,.11188384719340397,.08503614831717918,.08503614831717918,.0554595293739872,.0554595293739872,.02414830286854793,.02414830286854793],[.1691423829631436,.1691423829631436,.16427648374583273,.16427648374583273,.15468467512626524,.15468467512626524,.14064291467065065,.14064291467065065,.12255520671147846,.12255520671147846,.10094204410628717,.10094204410628717,.07642573025488905,.07642573025488905,.0497145488949698,.0497145488949698,.02161601352648331,.02161601352648331],[.1610544498487837,.15896884339395434,.15896884339395434,.15276604206585967,.15276604206585967,.1426067021736066,.1426067021736066,.12875396253933621,.12875396253933621,.11156664554733399,.11156664554733399,.09149002162245,.09149002162245,.06904454273764123,.06904454273764123,.0448142267656996,.0448142267656996,.019461788229726478,.019461788229726478],[.15275338713072584,.15275338713072584,.14917298647260374,.14917298647260374,.14209610931838204,.14209610931838204,.13168863844917664,.13168863844917664,.11819453196151841,.11819453196151841,.10193011981724044,.10193011981724044,.08327674157670475,.08327674157670475,.06267204833410907,.06267204833410907,.04060142980038694,.04060142980038694,.017614007139152118,.017614007139152118],[.14608113364969041,.14452440398997005,.14452440398997005,.13988739479107315,.13988739479107315,.13226893863333747,.13226893863333747,.12183141605372853,.12183141605372853,.10879729916714838,.10879729916714838,.09344442345603386,.09344442345603386,.0761001136283793,.0761001136283793,.057134425426857205,.057134425426857205,.036953789770852494,.036953789770852494,.016017228257774335,.016017228257774335],[.13925187285563198,.13925187285563198,.13654149834601517,.13654149834601517,.13117350478706238,.13117350478706238,.12325237681051242,.12325237681051242,.11293229608053922,.11293229608053922,.10041414444288096,.10041414444288096,.08594160621706773,.08594160621706773,.06979646842452049,.06979646842452049,.052293335152683286,.052293335152683286,.03377490158481415,.03377490158481415,.0146279952982722,.0146279952982722],[.13365457218610619,.1324620394046966,.1324620394046966,.12890572218808216,.12890572218808216,.12304908430672953,.12304908430672953,.11499664022241136,.11499664022241136,.10489209146454141,.10489209146454141,.09291576606003515,.09291576606003515,.07928141177671895,.07928141177671895,.06423242140852585,.06423242140852585,.04803767173108467,.04803767173108467,.030988005856979445,.030988005856979445,.013411859487141771,.013411859487141771],[.12793819534675216,.12793819534675216,.1258374563468283,.1258374563468283,.12167047292780339,.12167047292780339,.1155056680537256,.1155056680537256,.10744427011596563,.10744427011596563,.09761865210411388,.09761865210411388,.08619016153195327,.08619016153195327,.0733464814110803,.0733464814110803,.05929858491543678,.05929858491543678,.04427743881741981,.04427743881741981,.028531388628933663,.028531388628933663,.0123412297999872,.0123412297999872]],t.binomialCoefficients=[[1],[1,1],[1,2,1],[1,3,3,1]],t.getCubicArcLength=(e,n,o)=>{let i,a;const s=o/2;i=0;for(let o=0;o<20;o++)a=s*t.tValues[20][o]+s,i+=t.cValues[20][o]*r(e,n,a);return s*i},t.getQuadraticArcLength=(e,t,r)=>{void 0===r&&(r=1);const n=e[0]-2*e[1]+e[2],o=t[0]-2*t[1]+t[2],i=2*e[1]-2*e[0],a=2*t[1]-2*t[0],s=4*(n*n+o*o),l=4*(n*i+o*a),c=i*i+a*a;if(0===s)return r*Math.sqrt(Math.pow(e[2]-e[0],2)+Math.pow(t[2]-t[0],2));const u=l/(2*s),d=r+u,f=c/s-u*u,h=d*d+f>0?Math.sqrt(d*d+f):0,p=u*u+f>0?Math.sqrt(u*u+f):0,m=u+Math.sqrt(u*u+f)!==0?f*Math.log(Math.abs((d+h)/(u+p))):0;return Math.sqrt(s)/2*(d*h-u*p+m)};const n=(e,r,o)=>{const i=o.length-1;let a,s;if(0===i)return 0;if(0===e){s=0;for(let e=0;e<=i;e++)s+=t.binomialCoefficients[i][e]*Math.pow(1-r,i-e)*Math.pow(r,e)*o[e];return s}a=new Array(i);for(let e=0;e<i;e++)a[e]=i*(o[e+1]-o[e]);return n(e-1,r,a)};t.t2length=(e,t,r)=>{let n=1,o=e/t,i=(e-r(o))/t,a=0;for(;n>.001;){const s=r(o+i),l=Math.abs(e-s)/t;if(l<n)n=l,o+=i;else{const a=r(o-i),s=Math.abs(e-a)/t;s<n?(n=s,o-=i):i/=2}if(a++,a>500)break}return o}},5778:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});const n=r(8558);e.exports=n.Konva},5992:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Noise=void 0;const n=r(4892),o=r(6536),i=r(5483);t.Noise=function(e){const t=255*this.noise(),r=e.data,n=r.length,o=t/2;for(let e=0;e<n;e+=4)r[e+0]+=o-2*o*Math.random(),r[e+1]+=o-2*o*Math.random(),r[e+2]+=o-2*o*Math.random()},n.Factory.addGetterSetter(o.Node,\"noise\",.2,(0,i.getNumberValidator)(),n.Factory.afterSetFilter)},6261:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Blur=void 0;const n=r(4892),o=r(6536),i=r(5483);function a(){this.r=0,this.g=0,this.b=0,this.a=0,this.next=null}const s=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259],l=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,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,24,24,24,24,24,24,24,24,24,24];t.Blur=function(e){const t=Math.round(this.blurRadius());t>0&&function(e,t){const r=e.data,n=e.width,o=e.height;let i,c,u,d,f,h,p,m,g,v,b,y,w,x,S,C,k,E,O,A,T,j,P,M;const R=t+t+1,_=n-1,I=o-1,N=t+1,F=N*(N+1)/2,D=new a,B=s[t],L=l[t];let z=null,H=D,U=null,V=null;for(u=1;u<R;u++)H=H.next=new a,u===N&&(z=H);for(H.next=D,p=h=0,c=0;c<o;c++){for(C=k=E=O=m=g=v=b=0,y=N*(A=r[h]),w=N*(T=r[h+1]),x=N*(j=r[h+2]),S=N*(P=r[h+3]),m+=F*A,g+=F*T,v+=F*j,b+=F*P,H=D,u=0;u<N;u++)H.r=A,H.g=T,H.b=j,H.a=P,H=H.next;for(u=1;u<N;u++)d=h+((_<u?_:u)<<2),m+=(H.r=A=r[d])*(M=N-u),g+=(H.g=T=r[d+1])*M,v+=(H.b=j=r[d+2])*M,b+=(H.a=P=r[d+3])*M,C+=A,k+=T,E+=j,O+=P,H=H.next;for(U=D,V=z,i=0;i<n;i++)r[h+3]=P=b*B>>L,0!==P?(P=255/P,r[h]=(m*B>>L)*P,r[h+1]=(g*B>>L)*P,r[h+2]=(v*B>>L)*P):r[h]=r[h+1]=r[h+2]=0,m-=y,g-=w,v-=x,b-=S,y-=U.r,w-=U.g,x-=U.b,S-=U.a,d=p+((d=i+t+1)<_?d:_)<<2,C+=U.r=r[d],k+=U.g=r[d+1],E+=U.b=r[d+2],O+=U.a=r[d+3],m+=C,g+=k,v+=E,b+=O,U=U.next,y+=A=V.r,w+=T=V.g,x+=j=V.b,S+=P=V.a,C-=A,k-=T,E-=j,O-=P,V=V.next,h+=4;p+=n}for(i=0;i<n;i++){for(k=E=O=C=g=v=b=m=0,h=i<<2,y=N*(A=r[h]),w=N*(T=r[h+1]),x=N*(j=r[h+2]),S=N*(P=r[h+3]),m+=F*A,g+=F*T,v+=F*j,b+=F*P,H=D,u=0;u<N;u++)H.r=A,H.g=T,H.b=j,H.a=P,H=H.next;for(f=n,u=1;u<=t;u++)h=f+i<<2,m+=(H.r=A=r[h])*(M=N-u),g+=(H.g=T=r[h+1])*M,v+=(H.b=j=r[h+2])*M,b+=(H.a=P=r[h+3])*M,C+=A,k+=T,E+=j,O+=P,H=H.next,u<I&&(f+=n);for(h=i,U=D,V=z,c=0;c<o;c++)d=h<<2,r[d+3]=P=b*B>>L,P>0?(P=255/P,r[d]=(m*B>>L)*P,r[d+1]=(g*B>>L)*P,r[d+2]=(v*B>>L)*P):r[d]=r[d+1]=r[d+2]=0,m-=y,g-=w,v-=x,b-=S,y-=U.r,w-=U.g,x-=U.b,S-=U.a,d=i+((d=c+N)<I?d:I)*n<<2,m+=C+=U.r=r[d],g+=k+=U.g=r[d+1],v+=E+=U.b=r[d+2],b+=O+=U.a=r[d+3],U=U.next,y+=A=V.r,w+=T=V.g,x+=j=V.b,S+=P=V.a,C-=A,k-=T,E-=j,O-=P,V=V.next,h+=n}}(e,t)},n.Factory.addGetterSetter(o.Node,\"blurRadius\",0,(0,i.getNumberValidator)(),n.Factory.afterSetFilter)},6267:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Layer=void 0;const n=r(4060),o=r(4473),i=r(6536),a=r(4892),s=r(8604),l=r(5483),c=r(4723),u=r(8871),d=[{x:0,y:0},{x:-1,y:-1},{x:1,y:-1},{x:1,y:1},{x:-1,y:1}],f=d.length;class h extends o.Container{constructor(e){super(e),this.canvas=new s.SceneCanvas,this.hitCanvas=new s.HitCanvas({pixelRatio:1}),this._waitingForDraw=!1,this.on(\"visibleChange.konva\",this._checkVisibility),this._checkVisibility(),this.on(\"imageSmoothingEnabledChange.konva\",this._setSmoothEnabled),this._setSmoothEnabled()}createPNGStream(){return this.canvas._canvas.createPNGStream()}getCanvas(){return this.canvas}getNativeCanvasElement(){return this.canvas._canvas}getHitCanvas(){return this.hitCanvas}getContext(){return this.getCanvas().getContext()}clear(e){return this.getContext().clear(e),this.getHitCanvas().getContext().clear(e),this}setZIndex(e){super.setZIndex(e);const t=this.getStage();return t&&t.content&&(t.content.removeChild(this.getNativeCanvasElement()),e<t.children.length-1?t.content.insertBefore(this.getNativeCanvasElement(),t.children[e+1].getCanvas()._canvas):t.content.appendChild(this.getNativeCanvasElement())),this}moveToTop(){i.Node.prototype.moveToTop.call(this);const e=this.getStage();return e&&e.content&&(e.content.removeChild(this.getNativeCanvasElement()),e.content.appendChild(this.getNativeCanvasElement())),!0}moveUp(){if(!i.Node.prototype.moveUp.call(this))return!1;const e=this.getStage();return!(!e||!e.content||(e.content.removeChild(this.getNativeCanvasElement()),this.index<e.children.length-1?e.content.insertBefore(this.getNativeCanvasElement(),e.children[this.index+1].getCanvas()._canvas):e.content.appendChild(this.getNativeCanvasElement()),0))}moveDown(){if(i.Node.prototype.moveDown.call(this)){const e=this.getStage();if(e){const t=e.children;e.content&&(e.content.removeChild(this.getNativeCanvasElement()),e.content.insertBefore(this.getNativeCanvasElement(),t[this.index+1].getCanvas()._canvas))}return!0}return!1}moveToBottom(){if(i.Node.prototype.moveToBottom.call(this)){const e=this.getStage();if(e){const t=e.children;e.content&&(e.content.removeChild(this.getNativeCanvasElement()),e.content.insertBefore(this.getNativeCanvasElement(),t[1].getCanvas()._canvas))}return!0}return!1}getLayer(){return this}remove(){const e=this.getNativeCanvasElement();return i.Node.prototype.remove.call(this),e&&e.parentNode&&n.Util._isInDocument(e)&&e.parentNode.removeChild(e),this}getStage(){return this.parent}setSize({width:e,height:t}){return this.canvas.setSize(e,t),this.hitCanvas.setSize(e,t),this._setSmoothEnabled(),this}_validateAdd(e){const t=e.getType();\"Group\"!==t&&\"Shape\"!==t&&n.Util.throw(\"You may only add groups and shapes to a layer.\")}_toKonvaCanvas(e){return(e=e||{}).width=e.width||this.getWidth(),e.height=e.height||this.getHeight(),e.x=void 0!==e.x?e.x:this.x(),e.y=void 0!==e.y?e.y:this.y(),i.Node.prototype._toKonvaCanvas.call(this,e)}_checkVisibility(){const e=this.visible();this.canvas._canvas.style.display=e?\"block\":\"none\"}_setSmoothEnabled(){this.getContext()._context.imageSmoothingEnabled=this.imageSmoothingEnabled()}getWidth(){if(this.parent)return this.parent.width()}setWidth(){n.Util.warn('Can not change width of layer. Use \"stage.width(value)\" function instead.')}getHeight(){if(this.parent)return this.parent.height()}setHeight(){n.Util.warn('Can not change height of layer. Use \"stage.height(value)\" function instead.')}batchDraw(){return this._waitingForDraw||(this._waitingForDraw=!0,n.Util.requestAnimFrame((()=>{this.draw(),this._waitingForDraw=!1}))),this}getIntersection(e){if(!this.isListening()||!this.isVisible())return null;let t=1,r=!1;for(;;){for(let n=0;n<f;n++){const o=d[n],i=this._getIntersection({x:e.x+o.x*t,y:e.y+o.y*t}),a=i.shape;if(a)return a;if(r=!!i.antialiased,!i.antialiased)break}if(!r)return null;t+=1}}_getIntersection(e){const t=this.hitCanvas.pixelRatio,r=this.hitCanvas.context.getImageData(Math.round(e.x*t),Math.round(e.y*t),1,1).data,o=r[3];if(255===o){const e=n.Util._rgbToHex(r[0],r[1],r[2]),t=c.shapes[\"#\"+e];return t?{shape:t}:{antialiased:!0}}return o>0?{antialiased:!0}:{}}drawScene(e,t){const r=this.getLayer(),n=e||r&&r.getCanvas();return this._fire(\"beforeDraw\",{node:this}),this.clearBeforeDraw()&&n.getContext().clear(),o.Container.prototype.drawScene.call(this,n,t),this._fire(\"draw\",{node:this}),this}drawHit(e,t){const r=this.getLayer(),n=e||r&&r.hitCanvas;return r&&r.clearBeforeDraw()&&r.getHitCanvas().getContext().clear(),o.Container.prototype.drawHit.call(this,n,t),this}enableHitGraph(){return this.hitGraphEnabled(!0),this}disableHitGraph(){return this.hitGraphEnabled(!1),this}setHitGraphEnabled(e){n.Util.warn(\"hitGraphEnabled method is deprecated. Please use layer.listening() instead.\"),this.listening(e)}getHitGraphEnabled(e){return n.Util.warn(\"hitGraphEnabled method is deprecated. Please use layer.listening() instead.\"),this.listening()}toggleHitCanvas(){if(!this.parent||!this.parent.content)return;const e=this.parent;this.hitCanvas._canvas.parentNode?e.content.removeChild(this.hitCanvas._canvas):e.content.appendChild(this.hitCanvas._canvas)}destroy(){return n.Util.releaseCanvas(this.getNativeCanvasElement(),this.getHitCanvas()._canvas),super.destroy()}}t.Layer=h,h.prototype.nodeType=\"Layer\",(0,u._registerNode)(h),a.Factory.addGetterSetter(h,\"imageSmoothingEnabled\",!0),a.Factory.addGetterSetter(h,\"clearBeforeDraw\",!0),a.Factory.addGetterSetter(h,\"hitGraphEnabled\",!0,(0,l.getBooleanValidator)())},6314:e=>{\"use strict\";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var r=\"\",n=void 0!==t[5];return t[4]&&(r+=\"@supports (\".concat(t[4],\") {\")),t[2]&&(r+=\"@media \".concat(t[2],\" {\")),n&&(r+=\"@layer\".concat(t[5].length>0?\" \".concat(t[5]):\"\",\" {\")),r+=e(t),n&&(r+=\"}\"),t[2]&&(r+=\"}\"),t[4]&&(r+=\"}\"),r})).join(\"\")},t.i=function(e,r,n,o,i){\"string\"==typeof e&&(e=[[null,e,void 0]]);var a={};if(n)for(var s=0;s<this.length;s++){var l=this[s][0];null!=l&&(a[l]=!0)}for(var c=0;c<e.length;c++){var u=[].concat(e[c]);n&&a[u[0]]||(void 0!==i&&(void 0===u[5]||(u[1]=\"@layer\".concat(u[5].length>0?\" \".concat(u[5]):\"\",\" {\").concat(u[1],\"}\")),u[5]=i),r&&(u[2]?(u[1]=\"@media \".concat(u[2],\" {\").concat(u[1],\"}\"),u[2]=r):u[2]=r),o&&(u[4]?(u[1]=\"@supports (\".concat(u[4],\") {\").concat(u[1],\"}\"),u[4]=o):u[4]=\"\".concat(o)),t.push(u))}},t}},6351:(e,t,r)=>{\"use strict\";e.exports=r(7787)},6426:e=>{e.exports=function(){var e=document.getSelection();if(!e.rangeCount)return function(){};for(var t=document.activeElement,r=[],n=0;n<e.rangeCount;n++)r.push(e.getRangeAt(n));switch(t.tagName.toUpperCase()){case\"INPUT\":case\"TEXTAREA\":t.blur();break;default:t=null}return e.removeAllRanges(),function(){\"Caret\"===e.type&&e.removeAllRanges(),e.rangeCount||r.forEach((function(t){e.addRange(t)})),t&&t.focus()}}},6536:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Node=void 0;const n=r(4060),o=r(4892),i=r(8604),a=r(8871),s=r(1268),l=r(5483),c=\"absoluteOpacity\",u=\"allEventListeners\",d=\"absoluteTransform\",f=\"absoluteScale\",h=\"canvas\",p=\"listening\",m=\"mouseenter\",g=\"mouseleave\",v=\"Shape\",b=\" \",y=\"stage\",w=\"transform\",x=\"visible\",S=[\"xChange.konva\",\"yChange.konva\",\"scaleXChange.konva\",\"scaleYChange.konva\",\"skewXChange.konva\",\"skewYChange.konva\",\"rotationChange.konva\",\"offsetXChange.konva\",\"offsetYChange.konva\",\"transformsEnabledChange.konva\"].join(b);let C=1;class k{constructor(e){this._id=C++,this.eventListeners={},this.attrs={},this.index=0,this._allEventListeners=null,this.parent=null,this._cache=new Map,this._attachedDepsListeners=new Map,this._lastPos=null,this._batchingTransformChange=!1,this._needClearTransformCache=!1,this._filterUpToDate=!1,this._isUnderCache=!1,this._dragEventId=null,this._shouldFireChangeEvents=!1,this.setAttrs(e),this._shouldFireChangeEvents=!0}hasChildren(){return!1}_clearCache(e){e!==w&&e!==d||!this._cache.get(e)?e?this._cache.delete(e):this._cache.clear():this._cache.get(e).dirty=!0}_getCache(e,t){let r=this._cache.get(e);return(void 0===r||(e===w||e===d)&&!0===r.dirty)&&(r=t.call(this),this._cache.set(e,r)),r}_calculate(e,t,r){if(!this._attachedDepsListeners.get(e)){const r=t.map((e=>e+\"Change.konva\")).join(b);this.on(r,(()=>{this._clearCache(e)})),this._attachedDepsListeners.set(e,!0)}return this._getCache(e,r)}_getCanvasCache(){return this._cache.get(h)}_clearSelfAndDescendantCache(e){this._clearCache(e),e===d&&this.fire(\"absoluteTransformChange\")}clearCache(){if(this._cache.has(h)){const{scene:e,filter:t,hit:r}=this._cache.get(h);n.Util.releaseCanvas(e,t,r),this._cache.delete(h)}return this._clearSelfAndDescendantCache(),this._requestDraw(),this}cache(e){const t=e||{};let r={};void 0!==t.x&&void 0!==t.y&&void 0!==t.width&&void 0!==t.height||(r=this.getClientRect({skipTransform:!0,relativeTo:this.getParent()||void 0}));let o=Math.ceil(t.width||r.width),a=Math.ceil(t.height||r.height),s=t.pixelRatio,l=void 0===t.x?Math.floor(r.x):t.x,u=void 0===t.y?Math.floor(r.y):t.y,d=t.offset||0,p=t.drawBorder||!1,m=t.hitCanvasPixelRatio||1;if(!o||!a)return void n.Util.error(\"Can not cache the node. Width or height of the node equals 0. Caching is skipped.\");o+=2*d+(Math.abs(Math.round(r.x)-l)>.5?1:0),a+=2*d+(Math.abs(Math.round(r.y)-u)>.5?1:0),l-=d,u-=d;const g=new i.SceneCanvas({pixelRatio:s,width:o,height:a}),v=new i.SceneCanvas({pixelRatio:s,width:0,height:0,willReadFrequently:!0}),b=new i.HitCanvas({pixelRatio:m,width:o,height:a}),y=g.getContext(),w=b.getContext();return b.isCache=!0,g.isCache=!0,this._cache.delete(h),this._filterUpToDate=!1,!1===t.imageSmoothingEnabled&&(g.getContext()._context.imageSmoothingEnabled=!1,v.getContext()._context.imageSmoothingEnabled=!1),y.save(),w.save(),y.translate(-l,-u),w.translate(-l,-u),this._isUnderCache=!0,this._clearSelfAndDescendantCache(c),this._clearSelfAndDescendantCache(f),this.drawScene(g,this),this.drawHit(b,this),this._isUnderCache=!1,y.restore(),w.restore(),p&&(y.save(),y.beginPath(),y.rect(0,0,o,a),y.closePath(),y.setAttr(\"strokeStyle\",\"red\"),y.setAttr(\"lineWidth\",5),y.stroke(),y.restore()),this._cache.set(h,{scene:g,filter:v,hit:b,x:l,y:u}),this._requestDraw(),this}isCached(){return this._cache.has(h)}getClientRect(e){throw new Error('abstract \"getClientRect\" method call')}_transformedRect(e,t){const r=[{x:e.x,y:e.y},{x:e.x+e.width,y:e.y},{x:e.x+e.width,y:e.y+e.height},{x:e.x,y:e.y+e.height}];let n=1/0,o=1/0,i=-1/0,a=-1/0;const s=this.getAbsoluteTransform(t);return r.forEach((function(e){const t=s.point(e);void 0===n&&(n=i=t.x,o=a=t.y),n=Math.min(n,t.x),o=Math.min(o,t.y),i=Math.max(i,t.x),a=Math.max(a,t.y)})),{x:n,y:o,width:i-n,height:a-o}}_drawCachedSceneCanvas(e){e.save(),e._applyOpacity(this),e._applyGlobalCompositeOperation(this);const t=this._getCanvasCache();e.translate(t.x,t.y);const r=this._getCachedSceneCanvas(),n=r.pixelRatio;e.drawImage(r._canvas,0,0,r.width/n,r.height/n),e.restore()}_drawCachedHitCanvas(e){const t=this._getCanvasCache(),r=t.hit;e.save(),e.translate(t.x,t.y),e.drawImage(r._canvas,0,0,r.width/r.pixelRatio,r.height/r.pixelRatio),e.restore()}_getCachedSceneCanvas(){let e,t,r,o,i=this.filters(),a=this._getCanvasCache(),s=a.scene,l=a.filter,c=l.getContext();if(i){if(!this._filterUpToDate){const a=s.pixelRatio;l.setSize(s.width/s.pixelRatio,s.height/s.pixelRatio);try{for(e=i.length,c.clear(),c.drawImage(s._canvas,0,0,s.getWidth()/a,s.getHeight()/a),t=c.getImageData(0,0,l.getWidth(),l.getHeight()),r=0;r<e;r++)o=i[r],\"function\"==typeof o?(o.call(this,t),c.putImageData(t,0,0)):n.Util.error(\"Filter should be type of function, but got \"+typeof o+\" instead. Please check correct filters\")}catch(e){n.Util.error(\"Unable to apply filter. \"+e.message+\" This post my help you https://konvajs.org/docs/posts/Tainted_Canvas.html.\")}this._filterUpToDate=!0}return l}return s}on(e,t){if(this._cache&&this._cache.delete(u),3===arguments.length)return this._delegate.apply(this,arguments);let r,n,o,i,a,s=e.split(b),l=s.length;for(r=0;r<l;r++)n=s[r],o=n.split(\".\"),i=o[0],a=o[1]||\"\",this.eventListeners[i]||(this.eventListeners[i]=[]),this.eventListeners[i].push({name:a,handler:t});return this}off(e,t){let r,n,o,i,a,s,l=(e||\"\").split(b),c=l.length;if(this._cache&&this._cache.delete(u),!e)for(n in this.eventListeners)this._off(n);for(r=0;r<c;r++)if(o=l[r],i=o.split(\".\"),a=i[0],s=i[1],a)this.eventListeners[a]&&this._off(a,s,t);else for(n in this.eventListeners)this._off(n,s,t);return this}dispatchEvent(e){const t={target:this,type:e.type,evt:e};return this.fire(e.type,t),this}addEventListener(e,t){return this.on(e,(function(e){t.call(this,e.evt)})),this}removeEventListener(e){return this.off(e),this}_delegate(e,t,r){const o=this;this.on(e,(function(e){const i=e.target.findAncestors(t,!0,o);for(let t=0;t<i.length;t++)(e=n.Util.cloneObject(e)).currentTarget=i[t],r.call(i[t],e)}))}remove(){return this.isDragging()&&this.stopDrag(),s.DD._dragElements.delete(this._id),this._remove(),this}_clearCaches(){this._clearSelfAndDescendantCache(d),this._clearSelfAndDescendantCache(c),this._clearSelfAndDescendantCache(f),this._clearSelfAndDescendantCache(y),this._clearSelfAndDescendantCache(x),this._clearSelfAndDescendantCache(p)}_remove(){this._clearCaches();const e=this.getParent();e&&e.children&&(e.children.splice(this.index,1),e._setChildrenIndices(),this.parent=null)}destroy(){return this.remove(),this.clearCache(),this}getAttr(e){const t=\"get\"+n.Util._capitalize(e);return n.Util._isFunction(this[t])?this[t]():this.attrs[e]}getAncestors(){let e=this.getParent(),t=[];for(;e;)t.push(e),e=e.getParent();return t}getAttrs(){return this.attrs||{}}setAttrs(e){return this._batchTransformChanges((()=>{let t,r;if(!e)return this;for(t in e)\"children\"!==t&&(r=\"set\"+n.Util._capitalize(t),n.Util._isFunction(this[r])?this[r](e[t]):this._setAttr(t,e[t]))})),this}isListening(){return this._getCache(p,this._isListening)}_isListening(e){if(!this.listening())return!1;const t=this.getParent();return!t||t===e||this===e||t._isListening(e)}isVisible(){return this._getCache(x,this._isVisible)}_isVisible(e){if(!this.visible())return!1;const t=this.getParent();return!t||t===e||this===e||t._isVisible(e)}shouldDrawHit(e,t=!1){if(e)return this._isVisible(e)&&this._isListening(e);const r=this.getLayer();let n=!1;s.DD._dragElements.forEach((e=>{\"dragging\"===e.dragStatus&&(\"Stage\"===e.node.nodeType||e.node.getLayer()===r)&&(n=!0)}));const o=!t&&!a.Konva.hitOnDragEnabled&&(n||a.Konva.isTransforming());return this.isListening()&&this.isVisible()&&!o}show(){return this.visible(!0),this}hide(){return this.visible(!1),this}getZIndex(){return this.index||0}getAbsoluteZIndex(){let e,t,r,n,o=this.getDepth(),i=this,a=0;const s=this.getStage();return\"Stage\"!==i.nodeType&&s&&function s(l){for(e=[],t=l.length,r=0;r<t;r++)n=l[r],a++,n.nodeType!==v&&(e=e.concat(n.getChildren().slice())),n._id===i._id&&(r=t);e.length>0&&e[0].getDepth()<=o&&s(e)}(s.getChildren()),a}getDepth(){let e=0,t=this.parent;for(;t;)e++,t=t.parent;return e}_batchTransformChanges(e){this._batchingTransformChange=!0,e(),this._batchingTransformChange=!1,this._needClearTransformCache&&(this._clearCache(w),this._clearSelfAndDescendantCache(d)),this._needClearTransformCache=!1}setPosition(e){return this._batchTransformChanges((()=>{this.x(e.x),this.y(e.y)})),this}getPosition(){return{x:this.x(),y:this.y()}}getRelativePointerPosition(){const e=this.getStage();if(!e)return null;const t=e.getPointerPosition();if(!t)return null;const r=this.getAbsoluteTransform().copy();return r.invert(),r.point(t)}getAbsolutePosition(e){let t=!1,r=this.parent;for(;r;){if(r.isCached()){t=!0;break}r=r.parent}t&&!e&&(e=!0);const o=this.getAbsoluteTransform(e).getMatrix(),i=new n.Transform,a=this.offset();return i.m=o.slice(),i.translate(a.x,a.y),i.getTranslation()}setAbsolutePosition(e){const{x:t,y:r,...n}=this._clearTransform();this.attrs.x=t,this.attrs.y=r,this._clearCache(w);const o=this._getAbsoluteTransform().copy();return o.invert(),o.translate(e.x,e.y),e={x:this.attrs.x+o.getTranslation().x,y:this.attrs.y+o.getTranslation().y},this._setTransform(n),this.setPosition({x:e.x,y:e.y}),this._clearCache(w),this._clearSelfAndDescendantCache(d),this}_setTransform(e){let t;for(t in e)this.attrs[t]=e[t]}_clearTransform(){const e={x:this.x(),y:this.y(),rotation:this.rotation(),scaleX:this.scaleX(),scaleY:this.scaleY(),offsetX:this.offsetX(),offsetY:this.offsetY(),skewX:this.skewX(),skewY:this.skewY()};return this.attrs.x=0,this.attrs.y=0,this.attrs.rotation=0,this.attrs.scaleX=1,this.attrs.scaleY=1,this.attrs.offsetX=0,this.attrs.offsetY=0,this.attrs.skewX=0,this.attrs.skewY=0,e}move(e){let t=e.x,r=e.y,n=this.x(),o=this.y();return void 0!==t&&(n+=t),void 0!==r&&(o+=r),this.setPosition({x:n,y:o}),this}_eachAncestorReverse(e,t){let r,n,o=[],i=this.getParent();if(!t||t._id!==this._id){for(o.unshift(this);i&&(!t||i._id!==t._id);)o.unshift(i),i=i.parent;for(r=o.length,n=0;n<r;n++)e(o[n])}}rotate(e){return this.rotation(this.rotation()+e),this}moveToTop(){if(!this.parent)return n.Util.warn(\"Node has no parent. moveToTop function is ignored.\"),!1;const e=this.index;return e<this.parent.getChildren().length-1&&(this.parent.children.splice(e,1),this.parent.children.push(this),this.parent._setChildrenIndices(),!0)}moveUp(){if(!this.parent)return n.Util.warn(\"Node has no parent. moveUp function is ignored.\"),!1;const e=this.index;return e<this.parent.getChildren().length-1&&(this.parent.children.splice(e,1),this.parent.children.splice(e+1,0,this),this.parent._setChildrenIndices(),!0)}moveDown(){if(!this.parent)return n.Util.warn(\"Node has no parent. moveDown function is ignored.\"),!1;const e=this.index;return e>0&&(this.parent.children.splice(e,1),this.parent.children.splice(e-1,0,this),this.parent._setChildrenIndices(),!0)}moveToBottom(){if(!this.parent)return n.Util.warn(\"Node has no parent. moveToBottom function is ignored.\"),!1;const e=this.index;return e>0&&(this.parent.children.splice(e,1),this.parent.children.unshift(this),this.parent._setChildrenIndices(),!0)}setZIndex(e){if(!this.parent)return n.Util.warn(\"Node has no parent. zIndex parameter is ignored.\"),this;(e<0||e>=this.parent.children.length)&&n.Util.warn(\"Unexpected value \"+e+\" for zIndex property. zIndex is just index of a node in children of its parent. Expected value is from 0 to \"+(this.parent.children.length-1)+\".\");const t=this.index;return this.parent.children.splice(t,1),this.parent.children.splice(e,0,this),this.parent._setChildrenIndices(),this}getAbsoluteOpacity(){return this._getCache(c,this._getAbsoluteOpacity)}_getAbsoluteOpacity(){let e=this.opacity();const t=this.getParent();return t&&!t._isUnderCache&&(e*=t.getAbsoluteOpacity()),e}moveTo(e){return this.getParent()!==e&&(this._remove(),e.add(this)),this}toObject(){let e,t,r,o,i,a=this.getAttrs();const s={attrs:{},className:this.getClassName()};for(e in a)t=a[e],i=n.Util.isObject(t)&&!n.Util._isPlainObject(t)&&!n.Util._isArray(t),i||(r=\"function\"==typeof this[e]&&this[e],delete a[e],o=r?r.call(this):null,a[e]=t,o!==t&&(s.attrs[e]=t));return n.Util._prepareToStringify(s)}toJSON(){return JSON.stringify(this.toObject())}getParent(){return this.parent}findAncestors(e,t,r){const n=[];t&&this._isMatch(e)&&n.push(this);let o=this.parent;for(;o;){if(o===r)return n;o._isMatch(e)&&n.push(o),o=o.parent}return n}isAncestorOf(e){return!1}findAncestor(e,t,r){return this.findAncestors(e,t,r)[0]}_isMatch(e){if(!e)return!1;if(\"function\"==typeof e)return e(this);let t,r,o=e.replace(/ /g,\"\").split(\",\"),i=o.length;for(t=0;t<i;t++)if(r=o[t],n.Util.isValidSelector(r)||(n.Util.warn('Selector \"'+r+'\" is invalid. Allowed selectors examples are \"#foo\", \".bar\" or \"Group\".'),n.Util.warn('If you have a custom shape with such className, please change it to start with upper letter like \"Triangle\".'),n.Util.warn(\"Konva is awesome, right?\")),\"#\"===r.charAt(0)){if(this.id()===r.slice(1))return!0}else if(\".\"===r.charAt(0)){if(this.hasName(r.slice(1)))return!0}else if(this.className===r||this.nodeType===r)return!0;return!1}getLayer(){const e=this.getParent();return e?e.getLayer():null}getStage(){return this._getCache(y,this._getStage)}_getStage(){const e=this.getParent();return e?e.getStage():null}fire(e,t={},r){return t.target=t.target||this,r?this._fireAndBubble(e,t):this._fire(e,t),this}getAbsoluteTransform(e){return e?this._getAbsoluteTransform(e):this._getCache(d,this._getAbsoluteTransform)}_getAbsoluteTransform(e){let t;if(e)return t=new n.Transform,this._eachAncestorReverse((function(e){const r=e.transformsEnabled();\"all\"===r?t.multiply(e.getTransform()):\"position\"===r&&t.translate(e.x()-e.offsetX(),e.y()-e.offsetY())}),e),t;{t=this._cache.get(d)||new n.Transform,this.parent?this.parent.getAbsoluteTransform().copyInto(t):t.reset();const e=this.transformsEnabled();if(\"all\"===e)t.multiply(this.getTransform());else if(\"position\"===e){const e=this.attrs.x||0,r=this.attrs.y||0,n=this.attrs.offsetX||0,o=this.attrs.offsetY||0;t.translate(e-n,r-o)}return t.dirty=!1,t}}getAbsoluteScale(e){let t=this;for(;t;)t._isUnderCache&&(e=t),t=t.getParent();const r=this.getAbsoluteTransform(e).decompose();return{x:r.scaleX,y:r.scaleY}}getAbsoluteRotation(){return this.getAbsoluteTransform().decompose().rotation}getTransform(){return this._getCache(w,this._getTransform)}_getTransform(){var e,t;const r=this._cache.get(w)||new n.Transform;r.reset();const o=this.x(),i=this.y(),s=a.Konva.getAngle(this.rotation()),l=null!==(e=this.attrs.scaleX)&&void 0!==e?e:1,c=null!==(t=this.attrs.scaleY)&&void 0!==t?t:1,u=this.attrs.skewX||0,d=this.attrs.skewY||0,f=this.attrs.offsetX||0,h=this.attrs.offsetY||0;return 0===o&&0===i||r.translate(o,i),0!==s&&r.rotate(s),0===u&&0===d||r.skew(u,d),1===l&&1===c||r.scale(l,c),0===f&&0===h||r.translate(-1*f,-1*h),r.dirty=!1,r}clone(e){let t,r,o,i,a,s=n.Util.cloneObject(this.attrs);for(t in e)s[t]=e[t];const l=new this.constructor(s);for(t in this.eventListeners)for(r=this.eventListeners[t],o=r.length,i=0;i<o;i++)a=r[i],a.name.indexOf(\"konva\")<0&&(l.eventListeners[t]||(l.eventListeners[t]=[]),l.eventListeners[t].push(a));return l}_toKonvaCanvas(e){e=e||{};const t=this.getClientRect(),r=this.getStage(),n=void 0!==e.x?e.x:Math.floor(t.x),o=void 0!==e.y?e.y:Math.floor(t.y),a=e.pixelRatio||1,s=new i.SceneCanvas({width:e.width||Math.ceil(t.width)||(r?r.width():0),height:e.height||Math.ceil(t.height)||(r?r.height():0),pixelRatio:a}),l=s.getContext(),c=new i.SceneCanvas({width:s.width/s.pixelRatio+Math.abs(n),height:s.height/s.pixelRatio+Math.abs(o),pixelRatio:s.pixelRatio});return!1===e.imageSmoothingEnabled&&(l._context.imageSmoothingEnabled=!1),l.save(),(n||o)&&l.translate(-1*n,-1*o),this.drawScene(s,void 0,c),l.restore(),s}toCanvas(e){return this._toKonvaCanvas(e)._canvas}toDataURL(e){const t=(e=e||{}).mimeType||null,r=e.quality||null,n=this._toKonvaCanvas(e).toDataURL(t,r);return e.callback&&e.callback(n),n}toImage(e){return new Promise(((t,r)=>{try{const r=null==e?void 0:e.callback;r&&delete e.callback,n.Util._urlToImage(this.toDataURL(e),(function(e){t(e),null==r||r(e)}))}catch(e){r(e)}}))}toBlob(e){return new Promise(((t,r)=>{try{const r=null==e?void 0:e.callback;r&&delete e.callback,this.toCanvas(e).toBlob((e=>{t(e),null==r||r(e)}),null==e?void 0:e.mimeType,null==e?void 0:e.quality)}catch(e){r(e)}}))}setSize(e){return this.width(e.width),this.height(e.height),this}getSize(){return{width:this.width(),height:this.height()}}getClassName(){return this.className||this.nodeType}getType(){return this.nodeType}getDragDistance(){return void 0!==this.attrs.dragDistance?this.attrs.dragDistance:this.parent?this.parent.getDragDistance():a.Konva.dragDistance}_off(e,t,r){let n,o,i,a=this.eventListeners[e];for(n=0;n<a.length;n++)if(o=a[n].name,i=a[n].handler,!(\"konva\"===o&&\"konva\"!==t||t&&o!==t||r&&r!==i)){if(a.splice(n,1),0===a.length){delete this.eventListeners[e];break}n--}}_fireChangeEvent(e,t,r){this._fire(e+\"Change\",{oldVal:t,newVal:r})}addName(e){if(!this.hasName(e)){const t=this.name(),r=t?t+\" \"+e:e;this.name(r)}return this}hasName(e){if(!e)return!1;const t=this.name();return!!t&&-1!==(t||\"\").split(/\\s/g).indexOf(e)}removeName(e){const t=(this.name()||\"\").split(/\\s/g),r=t.indexOf(e);return-1!==r&&(t.splice(r,1),this.name(t.join(\" \"))),this}setAttr(e,t){const r=this[\"set\"+n.Util._capitalize(e)];return n.Util._isFunction(r)?r.call(this,t):this._setAttr(e,t),this}_requestDraw(){if(a.Konva.autoDrawEnabled){const e=this.getLayer()||this.getStage();null==e||e.batchDraw()}}_setAttr(e,t){const r=this.attrs[e];(r!==t||n.Util.isObject(t))&&(null==t?delete this.attrs[e]:this.attrs[e]=t,this._shouldFireChangeEvents&&this._fireChangeEvent(e,r,t),this._requestDraw())}_setComponentAttr(e,t,r){let n;void 0!==r&&(n=this.attrs[e],n||(this.attrs[e]=this.getAttr(e)),this.attrs[e][t]=r,this._fireChangeEvent(e,n,r))}_fireAndBubble(e,t,r){if(t&&this.nodeType===v&&(t.target=this),e!==m&&e!==g||!(r&&(this===r||this.isAncestorOf&&this.isAncestorOf(r))||\"Stage\"===this.nodeType&&!r)){this._fire(e,t);const n=(e===m||e===g)&&r&&r.isAncestorOf&&r.isAncestorOf(this)&&!r.isAncestorOf(this.parent);(t&&!t.cancelBubble||!t)&&this.parent&&this.parent.isListening()&&!n&&(r&&r.parent?this._fireAndBubble.call(this.parent,e,t,r):this._fireAndBubble.call(this.parent,e,t))}}_getProtoListeners(e){var t,r,n;const o=null!==(t=this._cache.get(u))&&void 0!==t?t:{};let i=null==o?void 0:o[e];if(void 0===i){i=[];let t=Object.getPrototypeOf(this);for(;t;){const o=null!==(n=null===(r=t.eventListeners)||void 0===r?void 0:r[e])&&void 0!==n?n:[];i.push(...o),t=Object.getPrototypeOf(t)}o[e]=i,this._cache.set(u,o)}return i}_fire(e,t){(t=t||{}).currentTarget=this,t.type=e;const r=this._getProtoListeners(e);if(r)for(var n=0;n<r.length;n++)r[n].handler.call(this,t);const o=this.eventListeners[e];if(o)for(n=0;n<o.length;n++)o[n].handler.call(this,t)}draw(){return this.drawScene(),this.drawHit(),this}_createDragElement(e){const t=e?e.pointerId:void 0,r=this.getStage(),n=this.getAbsolutePosition();if(!r)return;const o=r._getPointerById(t)||r._changedPointerPositions[0]||n;s.DD._dragElements.set(this._id,{node:this,startPointerPos:o,offset:{x:o.x-n.x,y:o.y-n.y},dragStatus:\"ready\",pointerId:t})}startDrag(e,t=!0){s.DD._dragElements.has(this._id)||this._createDragElement(e),s.DD._dragElements.get(this._id).dragStatus=\"dragging\",this.fire(\"dragstart\",{type:\"dragstart\",target:this,evt:e&&e.evt},t)}_setDragPosition(e,t){const r=this.getStage()._getPointerById(t.pointerId);if(!r)return;let o={x:r.x-t.offset.x,y:r.y-t.offset.y};const i=this.dragBoundFunc();if(void 0!==i){const t=i.call(this,o,e);t?o=t:n.Util.warn(\"dragBoundFunc did not return any value. That is unexpected behavior. You must return new absolute position from dragBoundFunc.\")}this._lastPos&&this._lastPos.x===o.x&&this._lastPos.y===o.y||(this.setAbsolutePosition(o),this._requestDraw()),this._lastPos=o}stopDrag(e){const t=s.DD._dragElements.get(this._id);t&&(t.dragStatus=\"stopped\"),s.DD._endDragBefore(e),s.DD._endDragAfter(e)}setDraggable(e){this._setAttr(\"draggable\",e),this._dragChange()}isDragging(){const e=s.DD._dragElements.get(this._id);return!!e&&\"dragging\"===e.dragStatus}_listenDrag(){this._dragCleanup(),this.on(\"mousedown.konva touchstart.konva\",(function(e){if(!(void 0===e.evt.button||a.Konva.dragButtons.indexOf(e.evt.button)>=0))return;if(this.isDragging())return;let t=!1;s.DD._dragElements.forEach((e=>{this.isAncestorOf(e.node)&&(t=!0)})),t||this._createDragElement(e)}))}_dragChange(){if(this.attrs.draggable)this._listenDrag();else{if(this._dragCleanup(),!this.getStage())return;const e=s.DD._dragElements.get(this._id),t=e&&\"dragging\"===e.dragStatus,r=e&&\"ready\"===e.dragStatus;t?this.stopDrag():r&&s.DD._dragElements.delete(this._id)}}_dragCleanup(){this.off(\"mousedown.konva\"),this.off(\"touchstart.konva\")}isClientRectOnScreen(e={x:0,y:0}){const t=this.getStage();if(!t)return!1;const r={x:-e.x,y:-e.y,width:t.width()+2*e.x,height:t.height()+2*e.y};return n.Util.haveIntersection(r,this.getClientRect())}static create(e,t){return n.Util._isString(e)&&(e=JSON.parse(e)),this._createNode(e,t)}static _createNode(e,t){let r,o,i,s=k.prototype.getClassName.call(e),l=e.children;if(t&&(e.attrs.container=t),a.Konva[s]||(n.Util.warn('Can not find a node with class name \"'+s+'\". Fallback to \"Shape\".'),s=\"Shape\"),r=new(0,a.Konva[s])(e.attrs),l)for(o=l.length,i=0;i<o;i++)r.add(k._createNode(l[i]));return r}}t.Node=k,k.prototype.nodeType=\"Node\",k.prototype._attrsAffectingSize=[],k.prototype.eventListeners={},k.prototype.on.call(k.prototype,S,(function(){this._batchingTransformChange?this._needClearTransformCache=!0:(this._clearCache(w),this._clearSelfAndDescendantCache(d))})),k.prototype.on.call(k.prototype,\"visibleChange.konva\",(function(){this._clearSelfAndDescendantCache(x)})),k.prototype.on.call(k.prototype,\"listeningChange.konva\",(function(){this._clearSelfAndDescendantCache(p)})),k.prototype.on.call(k.prototype,\"opacityChange.konva\",(function(){this._clearSelfAndDescendantCache(c)}));const E=o.Factory.addGetterSetter;E(k,\"zIndex\"),E(k,\"absolutePosition\"),E(k,\"position\"),E(k,\"x\",0,(0,l.getNumberValidator)()),E(k,\"y\",0,(0,l.getNumberValidator)()),E(k,\"globalCompositeOperation\",\"source-over\",(0,l.getStringValidator)()),E(k,\"opacity\",1,(0,l.getNumberValidator)()),E(k,\"name\",\"\",(0,l.getStringValidator)()),E(k,\"id\",\"\",(0,l.getStringValidator)()),E(k,\"rotation\",0,(0,l.getNumberValidator)()),o.Factory.addComponentsGetterSetter(k,\"scale\",[\"x\",\"y\"]),E(k,\"scaleX\",1,(0,l.getNumberValidator)()),E(k,\"scaleY\",1,(0,l.getNumberValidator)()),o.Factory.addComponentsGetterSetter(k,\"skew\",[\"x\",\"y\"]),E(k,\"skewX\",0,(0,l.getNumberValidator)()),E(k,\"skewY\",0,(0,l.getNumberValidator)()),o.Factory.addComponentsGetterSetter(k,\"offset\",[\"x\",\"y\"]),E(k,\"offsetX\",0,(0,l.getNumberValidator)()),E(k,\"offsetY\",0,(0,l.getNumberValidator)()),E(k,\"dragDistance\",void 0,(0,l.getNumberValidator)()),E(k,\"width\",0,(0,l.getNumberValidator)()),E(k,\"height\",0,(0,l.getNumberValidator)()),E(k,\"listening\",!0,(0,l.getBooleanValidator)()),E(k,\"preventDefault\",!0,(0,l.getBooleanValidator)()),E(k,\"filters\",void 0,(function(e){return this._filterUpToDate=!1,e})),E(k,\"visible\",!0,(0,l.getBooleanValidator)()),E(k,\"transformsEnabled\",\"all\",(0,l.getStringValidator)()),E(k,\"size\"),E(k,\"dragBoundFunc\"),E(k,\"draggable\",!1,(0,l.getBooleanValidator)()),o.Factory.backCompat(k,{rotateDeg:\"rotate\",setRotationDeg:\"setRotation\",getRotationDeg:\"getRotation\"})},6540:(e,t,r)=>{\"use strict\";e.exports=r(5287)},6564:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Invert=void 0,t.Invert=function(e){const t=e.data,r=t.length;for(let e=0;e<r;e+=4)t[e]=255-t[e],t[e+1]=255-t[e+1],t[e+2]=255-t[e+2]}},6619:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Tag=t.Label=void 0;const n=r(4892),o=r(4723),i=r(7949),a=r(5483),s=r(8871),l=[\"fontFamily\",\"fontSize\",\"fontStyle\",\"padding\",\"lineHeight\",\"text\",\"width\",\"height\",\"pointerDirection\",\"pointerWidth\",\"pointerHeight\"],c=\"up\",u=\"right\",d=\"down\",f=\"left\",h=l.length;class p extends i.Group{constructor(e){super(e),this.on(\"add.konva\",(function(e){this._addListeners(e.child),this._sync()}))}getText(){return this.find(\"Text\")[0]}getTag(){return this.find(\"Tag\")[0]}_addListeners(e){let t,r=this;const n=function(){r._sync()};for(t=0;t<h;t++)e.on(l[t]+\"Change.konva\",n)}getWidth(){return this.getText().width()}getHeight(){return this.getText().height()}_sync(){let e,t,r,n,o,i,a,s=this.getText(),l=this.getTag();if(s&&l){switch(e=s.width(),t=s.height(),r=l.pointerDirection(),n=l.pointerWidth(),a=l.pointerHeight(),o=0,i=0,r){case c:o=e/2,i=-1*a;break;case u:o=e+n,i=t/2;break;case d:o=e/2,i=t+a;break;case f:o=-1*n,i=t/2}l.setAttrs({x:-1*o,y:-1*i,width:e,height:t}),s.setAttrs({x:-1*o,y:-1*i})}}}t.Label=p,p.prototype.className=\"Label\",(0,s._registerNode)(p);class m extends o.Shape{_sceneFunc(e){const t=this.width(),r=this.height(),n=this.pointerDirection(),o=this.pointerWidth(),i=this.pointerHeight(),a=this.cornerRadius();let s=0,l=0,h=0,p=0;\"number\"==typeof a?s=l=h=p=Math.min(a,t/2,r/2):(s=Math.min(a[0]||0,t/2,r/2),l=Math.min(a[1]||0,t/2,r/2),p=Math.min(a[2]||0,t/2,r/2),h=Math.min(a[3]||0,t/2,r/2)),e.beginPath(),e.moveTo(s,0),n===c&&(e.lineTo((t-o)/2,0),e.lineTo(t/2,-1*i),e.lineTo((t+o)/2,0)),e.lineTo(t-l,0),e.arc(t-l,l,l,3*Math.PI/2,0,!1),n===u&&(e.lineTo(t,(r-i)/2),e.lineTo(t+o,r/2),e.lineTo(t,(r+i)/2)),e.lineTo(t,r-p),e.arc(t-p,r-p,p,0,Math.PI/2,!1),n===d&&(e.lineTo((t+o)/2,r),e.lineTo(t/2,r+i),e.lineTo((t-o)/2,r)),e.lineTo(h,r),e.arc(h,r-h,h,Math.PI/2,Math.PI,!1),n===f&&(e.lineTo(0,(r+i)/2),e.lineTo(-1*o,r/2),e.lineTo(0,(r-i)/2)),e.lineTo(0,s),e.arc(s,s,s,Math.PI,3*Math.PI/2,!1),e.closePath(),e.fillStrokeShape(this)}getSelfRect(){let e=0,t=0,r=this.pointerWidth(),n=this.pointerHeight(),o=this.pointerDirection(),i=this.width(),a=this.height();return o===c?(t-=n,a+=n):o===d?a+=n:o===f?(e-=1.5*r,i+=r):o===u&&(i+=1.5*r),{x:e,y:t,width:i,height:a}}}t.Tag=m,m.prototype.className=\"Tag\",(0,s._registerNode)(m),n.Factory.addGetterSetter(m,\"pointerDirection\",\"none\"),n.Factory.addGetterSetter(m,\"pointerWidth\",0,(0,a.getNumberValidator)()),n.Factory.addGetterSetter(m,\"pointerHeight\",0,(0,a.getNumberValidator)()),n.Factory.addGetterSetter(m,\"cornerRadius\",0,(0,a.getNumberOrArrayOfNumbersValidator)(4))},6627:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Brighten=void 0;const n=r(4892),o=r(6536),i=r(5483);t.Brighten=function(e){const t=255*this.brightness(),r=e.data,n=r.length;for(let e=0;e<n;e+=4)r[e]+=t,r[e+1]+=t,r[e+2]+=t},n.Factory.addGetterSetter(o.Node,\"brightness\",0,(0,i.getNumberValidator)(),n.Factory.afterSetFilter)},6921:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.RGB=void 0;const n=r(4892),o=r(6536),i=r(5483);t.RGB=function(e){const t=e.data,r=t.length,n=this.red(),o=this.green(),i=this.blue();for(let e=0;e<r;e+=4){const r=(.34*t[e]+.5*t[e+1]+.16*t[e+2])/255;t[e]=r*n,t[e+1]=r*o,t[e+2]=r*i,t[e+3]=t[e+3]}},n.Factory.addGetterSetter(o.Node,\"red\",0,(function(e){return this._filterUpToDate=!1,e>255?255:e<0?0:Math.round(e)})),n.Factory.addGetterSetter(o.Node,\"green\",0,(function(e){return this._filterUpToDate=!1,e>255?255:e<0?0:Math.round(e)})),n.Factory.addGetterSetter(o.Node,\"blue\",0,i.RGBComponent,n.Factory.afterSetFilter)},6942:(e,t)=>{var r;!function(){\"use strict\";var n={}.hasOwnProperty;function o(){for(var e=\"\",t=0;t<arguments.length;t++){var r=arguments[t];r&&(e=a(e,i(r)))}return e}function i(e){if(\"string\"==typeof e||\"number\"==typeof e)return e;if(\"object\"!=typeof e)return\"\";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes(\"[native code]\"))return e.toString();var t=\"\";for(var r in e)n.call(e,r)&&e[r]&&(t=a(t,r));return t}function a(e,t){return t?e?e+\" \"+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(r=function(){return o}.apply(t,[]))||(e.exports=r)}()},6955:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Ellipse=void 0;const n=r(4892),o=r(4723),i=r(5483),a=r(8871);class s extends o.Shape{_sceneFunc(e){const t=this.radiusX(),r=this.radiusY();e.beginPath(),e.save(),t!==r&&e.scale(1,r/t),e.arc(0,0,t,0,2*Math.PI,!1),e.restore(),e.closePath(),e.fillStrokeShape(this)}getWidth(){return 2*this.radiusX()}getHeight(){return 2*this.radiusY()}setWidth(e){this.radiusX(e/2)}setHeight(e){this.radiusY(e/2)}}t.Ellipse=s,s.prototype.className=\"Ellipse\",s.prototype._centroid=!0,s.prototype._attrsAffectingSize=[\"radiusX\",\"radiusY\"],(0,a._registerNode)(s),n.Factory.addComponentsGetterSetter(s,\"radius\",[\"x\",\"y\"]),n.Factory.addGetterSetter(s,\"radiusX\",0,(0,i.getNumberValidator)()),n.Factory.addGetterSetter(s,\"radiusY\",0,(0,i.getNumberValidator)())},7019:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Posterize=void 0;const n=r(4892),o=r(6536),i=r(5483);t.Posterize=function(e){const t=Math.round(254*this.levels())+1,r=e.data,n=r.length,o=255/t;for(let e=0;e<n;e+=1)r[e]=Math.floor(r[e]/o)*o},n.Factory.addGetterSetter(o.Node,\"levels\",.5,(0,i.getNumberValidator)(),n.Factory.afterSetFilter)},7083:(e,t,r)=>{\"use strict\";var n=r(1447),o=r(9805),i=r(1996),a=r(9681),s=r(4674),l=r(4442),c=r(7414),u=Object.prototype.toString;function d(e){if(!(this instanceof d))return new d(e);this.options=o.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&&(15&t.windowBits||(t.windowBits|=15)),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var r=n.inflateInit2(this.strm,t.windowBits);if(r!==a.Z_OK)throw new Error(s[r]);if(this.header=new c,n.inflateGetHeader(this.strm,this.header),t.dictionary&&(\"string\"==typeof t.dictionary?t.dictionary=i.string2buf(t.dictionary):\"[object ArrayBuffer]\"===u.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(r=n.inflateSetDictionary(this.strm,t.dictionary))!==a.Z_OK))throw new Error(s[r])}function f(e,t){var r=new d(t);if(r.push(e,!0),r.err)throw r.msg||s[r.err];return r.result}d.prototype.push=function(e,t){var r,s,l,c,d,f=this.strm,h=this.options.chunkSize,p=this.options.dictionary,m=!1;if(this.ended)return!1;s=t===~~t?t:!0===t?a.Z_FINISH:a.Z_NO_FLUSH,\"string\"==typeof e?f.input=i.binstring2buf(e):\"[object ArrayBuffer]\"===u.call(e)?f.input=new Uint8Array(e):f.input=e,f.next_in=0,f.avail_in=f.input.length;do{if(0===f.avail_out&&(f.output=new o.Buf8(h),f.next_out=0,f.avail_out=h),(r=n.inflate(f,a.Z_NO_FLUSH))===a.Z_NEED_DICT&&p&&(r=n.inflateSetDictionary(this.strm,p)),r===a.Z_BUF_ERROR&&!0===m&&(r=a.Z_OK,m=!1),r!==a.Z_STREAM_END&&r!==a.Z_OK)return this.onEnd(r),this.ended=!0,!1;f.next_out&&(0!==f.avail_out&&r!==a.Z_STREAM_END&&(0!==f.avail_in||s!==a.Z_FINISH&&s!==a.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(l=i.utf8border(f.output,f.next_out),c=f.next_out-l,d=i.buf2string(f.output,l),f.next_out=c,f.avail_out=h-c,c&&o.arraySet(f.output,f.output,l,c,0),this.onData(d)):this.onData(o.shrinkBuf(f.output,f.next_out)))),0===f.avail_in&&0===f.avail_out&&(m=!0)}while((f.avail_in>0||0===f.avail_out)&&r!==a.Z_STREAM_END);return r===a.Z_STREAM_END&&(s=a.Z_FINISH),s===a.Z_FINISH?(r=n.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===a.Z_OK):s!==a.Z_SYNC_FLUSH||(this.onEnd(a.Z_OK),f.avail_out=0,!0)},d.prototype.onData=function(e){this.chunks.push(e)},d.prototype.onEnd=function(e){e===a.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},t.Inflate=d,t.inflate=f,t.inflateRaw=function(e,t){return(t=t||{}).raw=!0,f(e,t)},t.ungzip=f},7241:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Grayscale=void 0,t.Grayscale=function(e){const t=e.data,r=t.length;for(let e=0;e<r;e+=4){const r=.34*t[e]+.5*t[e+1]+.16*t[e+2];t[e]=r,t[e+1]=r,t[e+2]=r}}},7256:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Image=void 0;const n=r(4060),o=r(4892),i=r(4723),a=r(8871),s=r(5483);class l extends i.Shape{constructor(e){super(e),this._loadListener=()=>{this._requestDraw()},this.on(\"imageChange.konva\",(e=>{this._removeImageLoad(e.oldVal),this._setImageLoad()})),this._setImageLoad()}_setImageLoad(){const e=this.image();e&&e.complete||e&&4===e.readyState||e&&e.addEventListener&&e.addEventListener(\"load\",this._loadListener)}_removeImageLoad(e){e&&e.removeEventListener&&e.removeEventListener(\"load\",this._loadListener)}destroy(){return this._removeImageLoad(this.image()),super.destroy(),this}_useBufferCanvas(){const e=!!this.cornerRadius(),t=this.hasShadow();return!(!e||!t)||super._useBufferCanvas(!0)}_sceneFunc(e){const t=this.getWidth(),r=this.getHeight(),o=this.cornerRadius(),i=this.attrs.image;let a;if(i){const e=this.attrs.cropWidth,n=this.attrs.cropHeight;a=e&&n?[i,this.cropX(),this.cropY(),e,n,0,0,t,r]:[i,0,0,t,r]}(this.hasFill()||this.hasStroke()||o)&&(e.beginPath(),o?n.Util.drawRoundedRectPath(e,t,r,o):e.rect(0,0,t,r),e.closePath(),e.fillStrokeShape(this)),i&&(o&&e.clip(),e.drawImage.apply(e,a))}_hitFunc(e){const t=this.width(),r=this.height(),o=this.cornerRadius();e.beginPath(),o?n.Util.drawRoundedRectPath(e,t,r,o):e.rect(0,0,t,r),e.closePath(),e.fillStrokeShape(this)}getWidth(){var e,t;return null!==(e=this.attrs.width)&&void 0!==e?e:null===(t=this.image())||void 0===t?void 0:t.width}getHeight(){var e,t;return null!==(e=this.attrs.height)&&void 0!==e?e:null===(t=this.image())||void 0===t?void 0:t.height}static fromURL(e,t,r=null){const o=n.Util.createImageElement();o.onload=function(){const e=new l({image:o});t(e)},o.onerror=r,o.crossOrigin=\"Anonymous\",o.src=e}}t.Image=l,l.prototype.className=\"Image\",(0,a._registerNode)(l),o.Factory.addGetterSetter(l,\"cornerRadius\",0,(0,s.getNumberOrArrayOfNumbersValidator)(4)),o.Factory.addGetterSetter(l,\"image\"),o.Factory.addComponentsGetterSetter(l,\"crop\",[\"x\",\"y\",\"width\",\"height\"]),o.Factory.addGetterSetter(l,\"cropX\",0,(0,s.getNumberValidator)()),o.Factory.addGetterSetter(l,\"cropY\",0,(0,s.getNumberValidator)()),o.Factory.addGetterSetter(l,\"cropWidth\",0,(0,s.getNumberValidator)()),o.Factory.addGetterSetter(l,\"cropHeight\",0,(0,s.getNumberValidator)())},7293:e=>{\"use strict\";e.exports=function(e,t){var r,n,o,i,a,s,l,c,u,d,f,h,p,m,g,v,b,y,w,x,S,C,k,E,O;r=e.state,n=e.next_in,E=e.input,o=n+(e.avail_in-5),i=e.next_out,O=e.output,a=i-(t-e.avail_out),s=i+(e.avail_out-257),l=r.dmax,c=r.wsize,u=r.whave,d=r.wnext,f=r.window,h=r.hold,p=r.bits,m=r.lencode,g=r.distcode,v=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;e:do{p<15&&(h+=E[n++]<<p,p+=8,h+=E[n++]<<p,p+=8),y=m[h&v];t:for(;;){if(h>>>=w=y>>>24,p-=w,0==(w=y>>>16&255))O[i++]=65535&y;else{if(!(16&w)){if(64&w){if(32&w){r.mode=12;break e}e.msg=\"invalid literal/length code\",r.mode=30;break e}y=m[(65535&y)+(h&(1<<w)-1)];continue t}for(x=65535&y,(w&=15)&&(p<w&&(h+=E[n++]<<p,p+=8),x+=h&(1<<w)-1,h>>>=w,p-=w),p<15&&(h+=E[n++]<<p,p+=8,h+=E[n++]<<p,p+=8),y=g[h&b];;){if(h>>>=w=y>>>24,p-=w,16&(w=y>>>16&255)){if(S=65535&y,p<(w&=15)&&(h+=E[n++]<<p,(p+=8)<w&&(h+=E[n++]<<p,p+=8)),(S+=h&(1<<w)-1)>l){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(h>>>=w,p-=w,S>(w=i-a)){if((w=S-w)>u&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(C=0,k=f,0===d){if(C+=c-w,w<x){x-=w;do{O[i++]=f[C++]}while(--w);C=i-S,k=O}}else if(d<w){if(C+=c+d-w,(w-=d)<x){x-=w;do{O[i++]=f[C++]}while(--w);if(C=0,d<x){x-=w=d;do{O[i++]=f[C++]}while(--w);C=i-S,k=O}}}else if(C+=d-w,w<x){x-=w;do{O[i++]=f[C++]}while(--w);C=i-S,k=O}for(;x>2;)O[i++]=k[C++],O[i++]=k[C++],O[i++]=k[C++],x-=3;x&&(O[i++]=k[C++],x>1&&(O[i++]=k[C++]))}else{C=i-S;do{O[i++]=O[C++],O[i++]=O[C++],O[i++]=O[C++],x-=3}while(x>2);x&&(O[i++]=O[C++],x>1&&(O[i++]=O[C++]))}break}if(64&w){e.msg=\"invalid distance code\",r.mode=30;break e}y=g[(65535&y)+(h&(1<<w)-1)]}}break}}while(n<o&&i<s);n-=x=p>>3,h&=(1<<(p-=x<<3))-1,e.next_in=n,e.next_out=i,e.avail_in=n<o?o-n+5:5-(n-o),e.avail_out=i<s?s-i+257:257-(i-s),r.hold=h,r.bits=p}},7324:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Stage=t.stages=void 0;const n=r(4060),o=r(4892),i=r(4473),a=r(8871),s=r(8604),l=r(1268),c=r(8871),u=r(8722),d=\"mouseleave\",f=\"mouseover\",h=\"mouseenter\",p=\"mousemove\",m=\"mousedown\",g=\"mouseup\",v=\"pointermove\",b=\"pointerdown\",y=\"pointerup\",w=\"pointercancel\",x=\"pointerout\",S=\"pointerleave\",C=\"pointerover\",k=\"pointerenter\",E=\"contextmenu\",O=\"touchstart\",A=\"touchend\",T=\"touchmove\",j=\"touchcancel\",P=\"wheel\",M=[[h,\"_pointerenter\"],[m,\"_pointerdown\"],[p,\"_pointermove\"],[g,\"_pointerup\"],[d,\"_pointerleave\"],[O,\"_pointerdown\"],[T,\"_pointermove\"],[A,\"_pointerup\"],[j,\"_pointercancel\"],[f,\"_pointerover\"],[P,\"_wheel\"],[E,\"_contextmenu\"],[b,\"_pointerdown\"],[v,\"_pointermove\"],[y,\"_pointerup\"],[w,\"_pointercancel\"],[\"lostpointercapture\",\"_lostpointercapture\"]],R={mouse:{[x]:\"mouseout\",[S]:d,[C]:f,[k]:h,[v]:p,[b]:m,[y]:g,[w]:\"mousecancel\",pointerclick:\"click\",pointerdblclick:\"dblclick\"},touch:{[x]:\"touchout\",[S]:\"touchleave\",[C]:\"touchover\",[k]:\"touchenter\",[v]:T,[b]:O,[y]:A,[w]:j,pointerclick:\"tap\",pointerdblclick:\"dbltap\"},pointer:{[x]:x,[S]:S,[C]:C,[k]:k,[v]:v,[b]:b,[y]:y,[w]:w,pointerclick:\"pointerclick\",pointerdblclick:\"pointerdblclick\"}},_=e=>e.indexOf(\"pointer\")>=0?\"pointer\":e.indexOf(\"touch\")>=0?\"touch\":\"mouse\",I=e=>{const t=_(e);return\"pointer\"===t?a.Konva.pointerEventsEnabled&&R.pointer:\"touch\"===t?R.touch:\"mouse\"===t?R.mouse:void 0};function N(e={}){return(e.clipFunc||e.clipWidth||e.clipHeight)&&n.Util.warn(\"Stage does not support clipping. Please use clip for Layers or Groups.\"),e}t.stages=[];class F extends i.Container{constructor(e){super(N(e)),this._pointerPositions=[],this._changedPointerPositions=[],this._buildDOM(),this._bindContentEvents(),t.stages.push(this),this.on(\"widthChange.konva heightChange.konva\",this._resizeDOM),this.on(\"visibleChange.konva\",this._checkVisibility),this.on(\"clipWidthChange.konva clipHeightChange.konva clipFuncChange.konva\",(()=>{N(this.attrs)})),this._checkVisibility()}_validateAdd(e){const t=\"Layer\"===e.getType(),r=\"FastLayer\"===e.getType();t||r||n.Util.throw(\"You may only add layers to the stage.\")}_checkVisibility(){if(!this.content)return;const e=this.visible()?\"\":\"none\";this.content.style.display=e}setContainer(e){if(\"string\"==typeof e){if(\".\"===e.charAt(0)){const t=e.slice(1);e=document.getElementsByClassName(t)[0]}else{var t;t=\"#\"!==e.charAt(0)?e:e.slice(1),e=document.getElementById(t)}if(!e)throw\"Can not find container in document with id \"+t}return this._setAttr(\"container\",e),this.content&&(this.content.parentElement&&this.content.parentElement.removeChild(this.content),e.appendChild(this.content)),this}shouldDrawHit(){return!0}clear(){const e=this.children,t=e.length;for(let r=0;r<t;r++)e[r].clear();return this}clone(e){return e||(e={}),e.container=\"undefined\"!=typeof document&&document.createElement(\"div\"),i.Container.prototype.clone.call(this,e)}destroy(){super.destroy();const e=this.content;e&&n.Util._isInDocument(e)&&this.container().removeChild(e);const r=t.stages.indexOf(this);return r>-1&&t.stages.splice(r,1),n.Util.releaseCanvas(this.bufferCanvas._canvas,this.bufferHitCanvas._canvas),this}getPointerPosition(){const e=this._pointerPositions[0]||this._changedPointerPositions[0];return e?{x:e.x,y:e.y}:(n.Util.warn(\"Pointer position is missing and not registered by the stage. Looks like it is outside of the stage container. You can set it manually from event: stage.setPointersPositions(event);\"),null)}_getPointerById(e){return this._pointerPositions.find((t=>t.id===e))}getPointersPositions(){return this._pointerPositions}getStage(){return this}getContent(){return this.content}_toKonvaCanvas(e){(e=e||{}).x=e.x||0,e.y=e.y||0,e.width=e.width||this.width(),e.height=e.height||this.height();const t=new s.SceneCanvas({width:e.width,height:e.height,pixelRatio:e.pixelRatio||1}),r=t.getContext()._context,n=this.children;return(e.x||e.y)&&r.translate(-1*e.x,-1*e.y),n.forEach((function(t){if(!t.isVisible())return;const n=t._toKonvaCanvas(e);r.drawImage(n._canvas,e.x,e.y,n.getWidth()/n.getPixelRatio(),n.getHeight()/n.getPixelRatio())})),t}getIntersection(e){if(!e)return null;const t=this.children;for(let r=t.length-1;r>=0;r--){const n=t[r].getIntersection(e);if(n)return n}return null}_resizeDOM(){const e=this.width(),t=this.height();this.content&&(this.content.style.width=e+\"px\",this.content.style.height=t+\"px\"),this.bufferCanvas.setSize(e,t),this.bufferHitCanvas.setSize(e,t),this.children.forEach((r=>{r.setSize({width:e,height:t}),r.draw()}))}add(e,...t){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}super.add(e);const r=this.children.length;return r>5&&n.Util.warn(\"The stage has \"+r+\" layers. Recommended maximum number of layers is 3-5. Adding more layers into the stage may drop the performance. Rethink your tree structure, you can use Konva.Group.\"),e.setSize({width:this.width(),height:this.height()}),e.draw(),a.Konva.isBrowser&&this.content.appendChild(e.canvas._canvas),this}getParent(){return null}getLayer(){return null}hasPointerCapture(e){return u.hasPointerCapture(e,this)}setPointerCapture(e){u.setPointerCapture(e,this)}releaseCapture(e){u.releaseCapture(e,this)}getLayers(){return this.children}_bindContentEvents(){a.Konva.isBrowser&&M.forEach((([e,t])=>{this.content.addEventListener(e,(e=>{this[t](e)}),{passive:!1})}))}_pointerenter(e){this.setPointersPositions(e);const t=I(e.type);t&&this._fire(t.pointerenter,{evt:e,target:this,currentTarget:this})}_pointerover(e){this.setPointersPositions(e);const t=I(e.type);t&&this._fire(t.pointerover,{evt:e,target:this,currentTarget:this})}_getTargetShape(e){let t=this[e+\"targetShape\"];return t&&!t.getStage()&&(t=null),t}_pointerleave(e){const t=I(e.type),r=_(e.type);if(!t)return;this.setPointersPositions(e);const n=this._getTargetShape(r),o=!(a.Konva.isDragging()||a.Konva.isTransforming())||a.Konva.hitOnDragEnabled;n&&o?(n._fireAndBubble(t.pointerout,{evt:e}),n._fireAndBubble(t.pointerleave,{evt:e}),this._fire(t.pointerleave,{evt:e,target:this,currentTarget:this}),this[r+\"targetShape\"]=null):o&&(this._fire(t.pointerleave,{evt:e,target:this,currentTarget:this}),this._fire(t.pointerout,{evt:e,target:this,currentTarget:this})),this.pointerPos=null,this._pointerPositions=[]}_pointerdown(e){const t=I(e.type),r=_(e.type);if(!t)return;this.setPointersPositions(e);let n=!1;this._changedPointerPositions.forEach((o=>{const i=this.getIntersection(o);if(l.DD.justDragged=!1,a.Konva[\"_\"+r+\"ListenClick\"]=!0,!i||!i.isListening())return void(this[r+\"ClickStartShape\"]=void 0);a.Konva.capturePointerEventsEnabled&&i.setPointerCapture(o.id),this[r+\"ClickStartShape\"]=i,i._fireAndBubble(t.pointerdown,{evt:e,pointerId:o.id}),n=!0;const s=e.type.indexOf(\"touch\")>=0;i.preventDefault()&&e.cancelable&&s&&e.preventDefault()})),n||this._fire(t.pointerdown,{evt:e,target:this,currentTarget:this,pointerId:this._pointerPositions[0].id})}_pointermove(e){const t=I(e.type),r=_(e.type);if(!t)return;if(a.Konva.isDragging()&&l.DD.node.preventDefault()&&e.cancelable&&e.preventDefault(),this.setPointersPositions(e),(a.Konva.isDragging()||a.Konva.isTransforming())&&!a.Konva.hitOnDragEnabled)return;const n={};let o=!1;const i=this._getTargetShape(r);this._changedPointerPositions.forEach((a=>{const s=u.getCapturedShape(a.id)||this.getIntersection(a),l=a.id,c={evt:e,pointerId:l},d=i!==s;if(d&&i&&(i._fireAndBubble(t.pointerout,{...c},s),i._fireAndBubble(t.pointerleave,{...c},s)),s){if(n[s._id])return;n[s._id]=!0}s&&s.isListening()?(o=!0,d&&(s._fireAndBubble(t.pointerover,{...c},i),s._fireAndBubble(t.pointerenter,{...c},i),this[r+\"targetShape\"]=s),s._fireAndBubble(t.pointermove,{...c})):i&&(this._fire(t.pointerover,{evt:e,target:this,currentTarget:this,pointerId:l}),this[r+\"targetShape\"]=null)})),o||this._fire(t.pointermove,{evt:e,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id})}_pointerup(e){const t=I(e.type),r=_(e.type);if(!t)return;this.setPointersPositions(e);const n=this[r+\"ClickStartShape\"],o=this[r+\"ClickEndShape\"],i={};let s=!1;this._changedPointerPositions.forEach((c=>{const d=u.getCapturedShape(c.id)||this.getIntersection(c);if(d){if(d.releaseCapture(c.id),i[d._id])return;i[d._id]=!0}const f=c.id,h={evt:e,pointerId:f};let p=!1;a.Konva[\"_\"+r+\"InDblClickWindow\"]?(p=!0,clearTimeout(this[r+\"DblTimeout\"])):l.DD.justDragged||(a.Konva[\"_\"+r+\"InDblClickWindow\"]=!0,clearTimeout(this[r+\"DblTimeout\"])),this[r+\"DblTimeout\"]=setTimeout((function(){a.Konva[\"_\"+r+\"InDblClickWindow\"]=!1}),a.Konva.dblClickWindow),d&&d.isListening()?(s=!0,this[r+\"ClickEndShape\"]=d,d._fireAndBubble(t.pointerup,{...h}),a.Konva[\"_\"+r+\"ListenClick\"]&&n&&n===d&&(d._fireAndBubble(t.pointerclick,{...h}),p&&o&&o===d&&d._fireAndBubble(t.pointerdblclick,{...h}))):(this[r+\"ClickEndShape\"]=null,a.Konva[\"_\"+r+\"ListenClick\"]&&this._fire(t.pointerclick,{evt:e,target:this,currentTarget:this,pointerId:f}),p&&this._fire(t.pointerdblclick,{evt:e,target:this,currentTarget:this,pointerId:f}))})),s||this._fire(t.pointerup,{evt:e,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id}),a.Konva[\"_\"+r+\"ListenClick\"]=!1,e.cancelable&&\"touch\"!==r&&\"pointer\"!==r&&e.preventDefault()}_contextmenu(e){this.setPointersPositions(e);const t=this.getIntersection(this.getPointerPosition());t&&t.isListening()?t._fireAndBubble(E,{evt:e}):this._fire(E,{evt:e,target:this,currentTarget:this})}_wheel(e){this.setPointersPositions(e);const t=this.getIntersection(this.getPointerPosition());t&&t.isListening()?t._fireAndBubble(P,{evt:e}):this._fire(P,{evt:e,target:this,currentTarget:this})}_pointercancel(e){this.setPointersPositions(e);const t=u.getCapturedShape(e.pointerId)||this.getIntersection(this.getPointerPosition());t&&t._fireAndBubble(y,u.createEvent(e)),u.releaseCapture(e.pointerId)}_lostpointercapture(e){u.releaseCapture(e.pointerId)}setPointersPositions(e){const t=this._getContentPosition();let r=null,o=null;void 0!==(e=e||window.event).touches?(this._pointerPositions=[],this._changedPointerPositions=[],Array.prototype.forEach.call(e.touches,(e=>{this._pointerPositions.push({id:e.identifier,x:(e.clientX-t.left)/t.scaleX,y:(e.clientY-t.top)/t.scaleY})})),Array.prototype.forEach.call(e.changedTouches||e.touches,(e=>{this._changedPointerPositions.push({id:e.identifier,x:(e.clientX-t.left)/t.scaleX,y:(e.clientY-t.top)/t.scaleY})}))):(r=(e.clientX-t.left)/t.scaleX,o=(e.clientY-t.top)/t.scaleY,this.pointerPos={x:r,y:o},this._pointerPositions=[{x:r,y:o,id:n.Util._getFirstPointerId(e)}],this._changedPointerPositions=[{x:r,y:o,id:n.Util._getFirstPointerId(e)}])}_setPointerPosition(e){n.Util.warn('Method _setPointerPosition is deprecated. Use \"stage.setPointersPositions(event)\" instead.'),this.setPointersPositions(e)}_getContentPosition(){if(!this.content||!this.content.getBoundingClientRect)return{top:0,left:0,scaleX:1,scaleY:1};const e=this.content.getBoundingClientRect();return{top:e.top,left:e.left,scaleX:e.width/this.content.clientWidth||1,scaleY:e.height/this.content.clientHeight||1}}_buildDOM(){if(this.bufferCanvas=new s.SceneCanvas({width:this.width(),height:this.height()}),this.bufferHitCanvas=new s.HitCanvas({pixelRatio:1,width:this.width(),height:this.height()}),!a.Konva.isBrowser)return;const e=this.container();if(!e)throw\"Stage has no container. A container is required.\";e.innerHTML=\"\",this.content=document.createElement(\"div\"),this.content.style.position=\"relative\",this.content.style.userSelect=\"none\",this.content.className=\"konvajs-content\",this.content.setAttribute(\"role\",\"presentation\"),e.appendChild(this.content),this._resizeDOM()}cache(){return n.Util.warn(\"Cache function is not allowed for stage. You may use cache only for layers, groups and shapes.\"),this}clearCache(){return this}batchDraw(){return this.getChildren().forEach((function(e){e.batchDraw()})),this}}t.Stage=F,F.prototype.nodeType=\"Stage\",(0,c._registerNode)(F),o.Factory.addGetterSetter(F,\"container\"),a.Konva.isBrowser&&document.addEventListener(\"visibilitychange\",(()=>{t.stages.forEach((e=>{e.batchDraw()}))}))},7414:e=>{\"use strict\";e.exports=function(){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}},7457:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.FastLayer=void 0;const n=r(4060),o=r(6267),i=r(8871);class a extends o.Layer{constructor(e){super(e),this.listening(!1),n.Util.warn('Konva.Fast layer is deprecated. Please use \"new Konva.Layer({ listening: false })\" instead.')}}t.FastLayer=a,a.prototype.nodeType=\"FastLayer\",(0,i._registerNode)(a)},7463:(e,t)=>{\"use strict\";function r(e,t){var r=e.length;e.push(t);e:for(;0<r;){var n=r-1>>>1,o=e[n];if(!(0<i(o,t)))break e;e[n]=t,e[r]=o,r=n}}function n(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],r=e.pop();if(r!==t){e[0]=r;e:for(var n=0,o=e.length,a=o>>>1;n<a;){var s=2*(n+1)-1,l=e[s],c=s+1,u=e[c];if(0>i(l,r))c<o&&0>i(u,l)?(e[n]=u,e[c]=r,n=c):(e[n]=l,e[s]=r,n=s);else{if(!(c<o&&0>i(u,r)))break e;e[n]=u,e[c]=r,n=c}}}return t}function i(e,t){var r=e.sortIndex-t.sortIndex;return 0!==r?r:e.id-t.id}if(\"object\"==typeof performance&&\"function\"==typeof performance.now){var a=performance;t.unstable_now=function(){return a.now()}}else{var s=Date,l=s.now();t.unstable_now=function(){return s.now()-l}}var c=[],u=[],d=1,f=null,h=3,p=!1,m=!1,g=!1,v=\"function\"==typeof setTimeout?setTimeout:null,b=\"function\"==typeof clearTimeout?clearTimeout:null,y=\"undefined\"!=typeof setImmediate?setImmediate:null;function w(e){for(var t=n(u);null!==t;){if(null===t.callback)o(u);else{if(!(t.startTime<=e))break;o(u),t.sortIndex=t.expirationTime,r(c,t)}t=n(u)}}function x(e){if(g=!1,w(e),!m)if(null!==n(c))m=!0,_(S);else{var t=n(u);null!==t&&I(x,t.startTime-e)}}function S(e,r){m=!1,g&&(g=!1,b(O),O=-1),p=!0;var i=h;try{for(w(r),f=n(c);null!==f&&(!(f.expirationTime>r)||e&&!j());){var a=f.callback;if(\"function\"==typeof a){f.callback=null,h=f.priorityLevel;var s=a(f.expirationTime<=r);r=t.unstable_now(),\"function\"==typeof s?f.callback=s:f===n(c)&&o(c),w(r)}else o(c);f=n(c)}if(null!==f)var l=!0;else{var d=n(u);null!==d&&I(x,d.startTime-r),l=!1}return l}finally{f=null,h=i,p=!1}}\"undefined\"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var C,k=!1,E=null,O=-1,A=5,T=-1;function j(){return!(t.unstable_now()-T<A)}function P(){if(null!==E){var e=t.unstable_now();T=e;var r=!0;try{r=E(!0,e)}finally{r?C():(k=!1,E=null)}}else k=!1}if(\"function\"==typeof y)C=function(){y(P)};else if(\"undefined\"!=typeof MessageChannel){var M=new MessageChannel,R=M.port2;M.port1.onmessage=P,C=function(){R.postMessage(null)}}else C=function(){v(P,0)};function _(e){E=e,k||(k=!0,C())}function I(e,r){O=v((function(){e(t.unstable_now())}),r)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){m||p||(m=!0,_(S))},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"):A=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return h},t.unstable_getFirstCallbackNode=function(){return n(c)},t.unstable_next=function(e){switch(h){case 1:case 2:case 3:var t=3;break;default:t=h}var r=h;h=t;try{return e()}finally{h=r}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var r=h;h=e;try{return t()}finally{h=r}},t.unstable_scheduleCallback=function(e,o,i){var a=t.unstable_now();switch(i=\"object\"==typeof i&&null!==i&&\"number\"==typeof(i=i.delay)&&0<i?a+i:a,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:d++,callback:o,priorityLevel:e,startTime:i,expirationTime:s=i+s,sortIndex:-1},i>a?(e.sortIndex=i,r(u,e),null===n(c)&&e===n(u)&&(g?(b(O),O=-1):g=!0,I(x,i-a))):(e.sortIndex=s,r(c,e),m||p||(m=!0,_(S))),e},t.unstable_shouldYield=j,t.unstable_wrapCallback=function(e){var t=h;return function(){var r=h;h=t;try{return e.apply(this,arguments)}finally{h=r}}}},7659:e=>{\"use strict\";var t={};e.exports=function(e,r){var n=function(e){if(void 0===t[e]){var r=document.querySelector(e);if(window.HTMLIFrameElement&&r instanceof window.HTMLIFrameElement)try{r=r.contentDocument.head}catch(e){r=null}t[e]=r}return t[e]}(e);if(!n)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");n.appendChild(r)}},7787:(e,t)=>{\"use strict\";var r=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),o=Symbol.for(\"react.fragment\"),i=Symbol.for(\"react.strict_mode\"),a=Symbol.for(\"react.profiler\"),s=Symbol.for(\"react.provider\"),l=Symbol.for(\"react.context\"),c=Symbol.for(\"react.server_context\"),u=Symbol.for(\"react.forward_ref\"),d=Symbol.for(\"react.suspense\"),f=Symbol.for(\"react.suspense_list\"),h=Symbol.for(\"react.memo\"),p=Symbol.for(\"react.lazy\");Symbol.for(\"react.offscreen\");Symbol.for(\"react.module.reference\"),t.ForwardRef=u,t.isMemo=function(e){return function(e){if(\"object\"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case o:case a:case i:case d:case f:return e;default:switch(e=e&&e.$$typeof){case c:case l:case u:case p:case h:case s:return e;default:return t}}case n:return t}}}(e)===h}},7825:e=>{\"use strict\";e.exports=function(e){if(\"undefined\"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(r){!function(e,t,r){var n=\"\";r.supports&&(n+=\"@supports (\".concat(r.supports,\") {\")),r.media&&(n+=\"@media \".concat(r.media,\" {\"));var o=void 0!==r.layer;o&&(n+=\"@layer\".concat(r.layer.length>0?\" \".concat(r.layer):\"\",\" {\")),n+=r.css,o&&(n+=\"}\"),r.media&&(n+=\"}\"),r.supports&&(n+=\"}\");var i=r.sourceMap;i&&\"undefined\"!=typeof btoa&&(n+=\"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i)))),\" */\")),t.styleTagTransform(n,e,t.options)}(t,e,r)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},7830:(e,t,r)=>{\"use strict\";r.d(t,{A:()=>s});var n=r(1601),o=r.n(n),i=r(6314),a=r.n(i)()(o());a.push([e.id,\".PdfjsAnnotationExtension_Comment_hidden .CustomComment{display:none}.CustomComment_filterContent ul,.CustomComment_filterContent li{list-style:none}.CustomComment_filterContent li{padding:3px}.CustomComment_filterContent li:hover{background-color:#ddd}.CustomComment_filterContent li>label{width:100%}.CustomComment{width:330px;position:absolute;top:107px;right:0;height:calc(100vh - 107px);color:var(--main-color);border-left:1px solid var(--toolbar-border-color);overflow:auto;font:message-box;font-size:14px}.CustomComment .filters{padding:5px}.CustomComment .list{padding:5px 5px 25px 5px}.CustomComment .list .group{margin-bottom:10px}.CustomComment .list h3{font-weight:normal;font-size:14px}.CustomComment .list h3 span{float:right}.CustomComment .list .comment{border:1px solid var(--toolbar-border-color);background-color:var(--toolbar-bg-color);border-radius:8px;padding:5px 10px 10px 10px;line-height:150%}.CustomComment .list .comment .ant-typography{color:var(--main-color) !important}.CustomComment .list .comment p{white-space:pre-wrap;line-height:150%;padding:0;margin-top:5px}.CustomComment .list .comment .title{display:flex;align-items:center;cursor:default}.CustomComment .list .comment .title .username{min-width:30px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.CustomComment .list .comment .title .username span{display:block;font-size:12px;line-height:120%;opacity:.5}.CustomComment .list .comment .title .annotation-icon{margin-right:5px;align-self:flex-start}.CustomComment .list .comment .title .tool{margin-left:auto;display:flex;align-items:center}.CustomComment .list .comment .title .tool .icon{margin-left:5px;border-radius:8px;display:inline-block;padding:0 3px !important}.CustomComment .list .comment .title .tool .icon:hover{background-color:var(--dropdown-btn-bg-color)}.CustomComment .list .comment .reply{background-color:var(--dropdown-btn-bg-color);border-radius:5px;padding:5px 10px;margin-top:8px;margin-left:15px}.CustomComment .list .comment .reply .icon:hover{background-color:var(--toggled-btn-bg-color) !important}.CustomComment .list .comment:hover{background-color:var(--doorhanger-hover-bg-color)}.CustomComment .list .selected{border-color:rgba(22,119,255,.4470588235);background-color:var(--doorhanger-hover-bg-color)}.CustomComment .list h3,.CustomComment .list .comment{margin-bottom:8px}@media all and (max-width: 780px){.CustomComment{width:250px}.PdfjsAnnotationExtension #viewerContainer{right:250px}}@media all and (max-width: 690px){.CustomComment{width:150px}.PdfjsAnnotationExtension #viewerContainer{right:150px}}\",\"\"]);const s=a},7928:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Enhance=void 0;const n=r(4892),o=r(6536),i=r(5483);function a(e,t,r,n,o){const i=r-t,a=o-n;if(0===i)return n+a/2;if(0===a)return n;let s=(e-t)/i;return s=a*s+n,s}t.Enhance=function(e){const t=e.data,r=t.length;let n,o,i,s=t[0],l=s,c=t[1],u=c,d=t[2],f=d;const h=this.enhance();if(0===h)return;for(let e=0;e<r;e+=4)n=t[e+0],n<s?s=n:n>l&&(l=n),o=t[e+1],o<c?c=o:o>u&&(u=o),i=t[e+2],i<d?d=i:i>f&&(f=i);let p,m,g,v,b,y,w,x,S;l===s&&(l=255,s=0),u===c&&(u=255,c=0),f===d&&(f=255,d=0),h>0?(m=l+h*(255-l),g=s-h*(s-0),b=u+h*(255-u),y=c-h*(c-0),x=f+h*(255-f),S=d-h*(d-0)):(p=.5*(l+s),m=l+h*(l-p),g=s+h*(s-p),v=.5*(u+c),b=u+h*(u-v),y=c+h*(c-v),w=.5*(f+d),x=f+h*(f-w),S=d+h*(d-w));for(let e=0;e<r;e+=4)t[e+0]=a(t[e+0],s,l,g,m),t[e+1]=a(t[e+1],c,u,y,b),t[e+2]=a(t[e+2],d,f,S,x)},n.Factory.addGetterSetter(o.Node,\"enhance\",0,(0,i.getNumberValidator)(),n.Factory.afterSetFilter)},7949:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Group=void 0;const n=r(4060),o=r(4473),i=r(8871);class a extends o.Container{_validateAdd(e){const t=e.getType();\"Group\"!==t&&\"Shape\"!==t&&n.Util.throw(\"You may only add groups and shapes to groups.\")}}t.Group=a,a.prototype.nodeType=\"Group\",(0,i._registerNode)(a)},7965:(e,t,r)=>{\"use strict\";var n=r(6426),o={\"text/plain\":\"Text\",\"text/html\":\"Url\",default:\"Text\"};e.exports=function(e,t){var r,i,a,s,l,c,u=!1;t||(t={}),r=t.debug||!1;try{if(a=n(),s=document.createRange(),l=document.getSelection(),(c=document.createElement(\"span\")).textContent=e,c.ariaHidden=\"true\",c.style.all=\"unset\",c.style.position=\"fixed\",c.style.top=0,c.style.clip=\"rect(0, 0, 0, 0)\",c.style.whiteSpace=\"pre\",c.style.webkitUserSelect=\"text\",c.style.MozUserSelect=\"text\",c.style.msUserSelect=\"text\",c.style.userSelect=\"text\",c.addEventListener(\"copy\",(function(n){if(n.stopPropagation(),t.format)if(n.preventDefault(),void 0===n.clipboardData){r&&console.warn(\"unable to use e.clipboardData\"),r&&console.warn(\"trying IE specific stuff\"),window.clipboardData.clearData();var i=o[t.format]||o.default;window.clipboardData.setData(i,e)}else n.clipboardData.clearData(),n.clipboardData.setData(t.format,e);t.onCopy&&(n.preventDefault(),t.onCopy(n.clipboardData))})),document.body.appendChild(c),s.selectNodeContents(c),l.addRange(s),!document.execCommand(\"copy\"))throw new Error(\"copy command was unsuccessful\");u=!0}catch(n){r&&console.error(\"unable to copy using execCommand: \",n),r&&console.warn(\"trying IE specific stuff\");try{window.clipboardData.setData(t.format||\"text\",e),t.onCopy&&t.onCopy(window.clipboardData),u=!0}catch(n){r&&console.error(\"unable to copy using clipboardData: \",n),r&&console.error(\"falling back to prompt\"),i=function(e){var t=(/mac os x/i.test(navigator.userAgent)?\"⌘\":\"Ctrl\")+\"+C\";return e.replace(/#{\\s*key\\s*}/g,t)}(\"message\"in t?t.message:\"Copy to clipboard: #{key}, Enter\"),window.prompt(i,e)}}finally{l&&(\"function\"==typeof l.removeRange?l.removeRange(s):l.removeAllRanges()),c&&document.body.removeChild(c),a()}return u}},8001:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Wedge=void 0;const n=r(4892),o=r(4723),i=r(8871),a=r(5483),s=r(8871);class l extends o.Shape{_sceneFunc(e){e.beginPath(),e.arc(0,0,this.radius(),0,i.Konva.getAngle(this.angle()),this.clockwise()),e.lineTo(0,0),e.closePath(),e.fillStrokeShape(this)}getWidth(){return 2*this.radius()}getHeight(){return 2*this.radius()}setWidth(e){this.radius(e/2)}setHeight(e){this.radius(e/2)}}t.Wedge=l,l.prototype.className=\"Wedge\",l.prototype._centroid=!0,l.prototype._attrsAffectingSize=[\"radius\"],(0,s._registerNode)(l),n.Factory.addGetterSetter(l,\"radius\",0,(0,a.getNumberValidator)()),n.Factory.addGetterSetter(l,\"angle\",0,(0,a.getNumberValidator)()),n.Factory.addGetterSetter(l,\"clockwise\",!1),n.Factory.backCompat(l,{angleDeg:\"angle\",getAngleDeg:\"getAngle\",setAngleDeg:\"setAngle\"})},8137:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.TextPath=void 0;const n=r(4060),o=r(4892),i=r(4723),a=r(1486),s=r(1958),l=r(5483),c=r(8871),u=\"normal\";function d(e){e.fillText(this.partialText,0,0)}function f(e){e.strokeText(this.partialText,0,0)}class h extends i.Shape{constructor(e){super(e),this.dummyCanvas=n.Util.createCanvasElement(),this.dataArray=[],this._readDataAttribute(),this.on(\"dataChange.konva\",(function(){this._readDataAttribute(),this._setTextData()})),this.on(\"textChange.konva alignChange.konva letterSpacingChange.konva kerningFuncChange.konva fontSizeChange.konva fontFamilyChange.konva\",this._setTextData),this._setTextData()}_getTextPathLength(){return a.Path.getPathLength(this.dataArray)}_getPointAtLength(e){return this.attrs.data?e-1>this.pathLength?null:a.Path.getPointAtLengthOfDataArray(e,this.dataArray):null}_readDataAttribute(){this.dataArray=a.Path.parsePathData(this.attrs.data),this.pathLength=this._getTextPathLength()}_sceneFunc(e){e.setAttr(\"font\",this._getContextFont()),e.setAttr(\"textBaseline\",this.textBaseline()),e.setAttr(\"textAlign\",\"left\"),e.save();const t=this.textDecoration(),r=this.fill(),n=this.fontSize(),o=this.glyphInfo;\"underline\"===t&&e.beginPath();for(let r=0;r<o.length;r++){e.save();const i=o[r].p0;e.translate(i.x,i.y),e.rotate(o[r].rotation),this.partialText=o[r].text,e.fillStrokeShape(this),\"underline\"===t&&(0===r&&e.moveTo(0,n/2+1),e.lineTo(n,n/2+1)),e.restore()}\"underline\"===t&&(e.strokeStyle=r,e.lineWidth=n/20,e.stroke()),e.restore()}_hitFunc(e){e.beginPath();const t=this.glyphInfo;if(t.length>=1){const r=t[0].p0;e.moveTo(r.x,r.y)}for(let r=0;r<t.length;r++){const n=t[r].p1;e.lineTo(n.x,n.y)}e.setAttr(\"lineWidth\",this.fontSize()),e.setAttr(\"strokeStyle\",this.colorKey),e.stroke()}getTextWidth(){return this.textWidth}getTextHeight(){return n.Util.warn(\"text.getTextHeight() method is deprecated. Use text.height() - for full height and text.fontSize() - for one line height.\"),this.textHeight}setText(e){return s.Text.prototype.setText.call(this,e)}_getContextFont(){return s.Text.prototype._getContextFont.call(this)}_getTextSize(e){const t=this.dummyCanvas.getContext(\"2d\");t.save(),t.font=this._getContextFont();const r=t.measureText(e);return t.restore(),{width:r.width,height:parseInt(`${this.fontSize()}`,10)}}_setTextData(){const{width:e,height:t}=this._getTextSize(this.attrs.text);if(this.textWidth=e,this.textHeight=t,this.glyphInfo=[],!this.attrs.data)return null;const r=this.letterSpacing(),n=this.align(),o=this.kerningFunc(),i=Math.max(this.textWidth+((this.attrs.text||\"\").length-1)*r,0);let l=0;\"center\"===n&&(l=Math.max(0,this.pathLength/2-i/2)),\"right\"===n&&(l=Math.max(0,this.pathLength-i));const c=(0,s.stringToArray)(this.text());let u=l;for(let e=0;e<c.length;e++){const t=this._getPointAtLength(u);if(!t)return;let s=this._getTextSize(c[e]).width+r;if(\" \"===c[e]&&\"justify\"===n){const e=this.text().split(\" \").length-1;s+=(this.pathLength-i)/e}const l=this._getPointAtLength(u+s);if(!l)return;const d=a.Path.getLineLength(t.x,t.y,l.x,l.y);let f=0;if(o)try{f=o(c[e-1],c[e])*this.fontSize()}catch(e){f=0}t.x+=f,l.x+=f,this.textWidth+=f;const h=a.Path.getPointOnLine(f+d/2,t.x,t.y,l.x,l.y),p=Math.atan2(l.y-t.y,l.x-t.x);this.glyphInfo.push({transposeX:h.x,transposeY:h.y,text:c[e],rotation:p,p0:t,p1:l}),u+=s}}getSelfRect(){if(!this.glyphInfo.length)return{x:0,y:0,width:0,height:0};const e=[];this.glyphInfo.forEach((function(t){e.push(t.p0.x),e.push(t.p0.y),e.push(t.p1.x),e.push(t.p1.y)}));let t,r,n=e[0]||0,o=e[0]||0,i=e[1]||0,a=e[1]||0;for(let s=0;s<e.length/2;s++)t=e[2*s],r=e[2*s+1],n=Math.min(n,t),o=Math.max(o,t),i=Math.min(i,r),a=Math.max(a,r);const s=this.fontSize();return{x:n-s/2,y:i-s/2,width:o-n+s,height:a-i+s}}destroy(){return n.Util.releaseCanvas(this.dummyCanvas),super.destroy()}}t.TextPath=h,h.prototype._fillFunc=d,h.prototype._strokeFunc=f,h.prototype._fillFuncHit=d,h.prototype._strokeFuncHit=f,h.prototype.className=\"TextPath\",h.prototype._attrsAffectingSize=[\"text\",\"fontSize\",\"data\"],(0,c._registerNode)(h),o.Factory.addGetterSetter(h,\"data\"),o.Factory.addGetterSetter(h,\"fontFamily\",\"Arial\"),o.Factory.addGetterSetter(h,\"fontSize\",12,(0,l.getNumberValidator)()),o.Factory.addGetterSetter(h,\"fontStyle\",u),o.Factory.addGetterSetter(h,\"align\",\"left\"),o.Factory.addGetterSetter(h,\"letterSpacing\",0,(0,l.getNumberValidator)()),o.Factory.addGetterSetter(h,\"textBaseline\",\"middle\"),o.Factory.addGetterSetter(h,\"fontVariant\",u),o.Factory.addGetterSetter(h,\"text\",\"\"),o.Factory.addGetterSetter(h,\"textDecoration\",\"\"),o.Factory.addGetterSetter(h,\"kerningFunc\",void 0)},8307:(e,t,r)=>{\"use strict\";r.d(t,{A:()=>s});var n=r(1601),o=r.n(n),i=r(6314),a=r.n(i)()(o());a.push([e.id,\".PdfjsAnnotationExtension .toolbar{z-index:99}.PdfjsAnnotationExtension .textLayer{z-index:9 !important}.PdfjsAnnotationExtension #viewerContainer{top:107px !important;right:330px}.PdfjsAnnotationExtension #sidebarContainer{top:107px !important}.PdfjsAnnotationExtension #toolbarContainer{height:107px}.PdfjsAnnotationExtension .ant-message{z-index:9999999}.PdfjsAnnotationExtension .ant-modal-mask{backdrop-filter:blur(8px)}.PdfjsAnnotationExtension_Comment_hidden #viewerContainer{right:0 !important}.PdfjsAnnotationExtension_scalechanging .PdfjsAnnotationExtension_painter_wrapper{display:none}.pdfPresentationMode .PdfjsAnnotationExtension_painter_wrapper{display:block}\",\"\"]);const s=a},8411:(e,t,r)=>{\"use strict\";var n,o=r(9805),i=r(3665),a=r(3269),s=r(4823),l=r(4674),c=-2,u=258,d=262,f=103,h=113,p=666;function m(e,t){return e.msg=l[t],t}function g(e){return(e<<1)-(e>4?9:0)}function v(e){for(var t=e.length;--t>=0;)e[t]=0}function b(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(o.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function y(e,t){i._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,b(e.strm)}function w(e,t){e.pending_buf[e.pending++]=t}function x(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function S(e,t){var r,n,o=e.max_chain_length,i=e.strstart,a=e.prev_length,s=e.nice_match,l=e.strstart>e.w_size-d?e.strstart-(e.w_size-d):0,c=e.window,f=e.w_mask,h=e.prev,p=e.strstart+u,m=c[i+a-1],g=c[i+a];e.prev_length>=e.good_match&&(o>>=2),s>e.lookahead&&(s=e.lookahead);do{if(c[(r=t)+a]===g&&c[r+a-1]===m&&c[r]===c[i]&&c[++r]===c[i+1]){i+=2,r++;do{}while(c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&i<p);if(n=u-(p-i),i=p-u,n>a){if(e.match_start=t,a=n,n>=s)break;m=c[i+a-1],g=c[i+a]}}}while((t=h[t&f])>l&&0!==--o);return a<=e.lookahead?a:e.lookahead}function C(e){var t,r,n,i,l,c,u,f,h,p,m=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=m+(m-d)){o.arraySet(e.window,e.window,m,m,0),e.match_start-=m,e.strstart-=m,e.block_start-=m,t=r=e.hash_size;do{n=e.head[--t],e.head[t]=n>=m?n-m:0}while(--r);t=r=m;do{n=e.prev[--t],e.prev[t]=n>=m?n-m:0}while(--r);i+=m}if(0===e.strm.avail_in)break;if(c=e.strm,u=e.window,f=e.strstart+e.lookahead,h=i,p=void 0,(p=c.avail_in)>h&&(p=h),r=0===p?0:(c.avail_in-=p,o.arraySet(u,c.input,c.next_in,p,f),1===c.state.wrap?c.adler=a(c.adler,u,p,f):2===c.state.wrap&&(c.adler=s(c.adler,u,p,f)),c.next_in+=p,c.total_in+=p,p),e.lookahead+=r,e.lookahead+e.insert>=3)for(l=e.strstart-e.insert,e.ins_h=e.window[l],e.ins_h=(e.ins_h<<e.hash_shift^e.window[l+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[l+3-1])&e.hash_mask,e.prev[l&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=l,l++,e.insert--,!(e.lookahead+e.insert<3)););}while(e.lookahead<d&&0!==e.strm.avail_in)}function k(e,t){for(var r,n;;){if(e.lookahead<d){if(C(e),e.lookahead<d&&0===t)return 1;if(0===e.lookahead)break}if(r=0,e.lookahead>=3&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-d&&(e.match_length=S(e,r)),e.match_length>=3)if(n=i._tr_tally(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart}while(0!==--e.match_length);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=i._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(y(e,!1),0===e.strm.avail_out))return 1}return e.insert=e.strstart<2?e.strstart:2,4===t?(y(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(y(e,!1),0===e.strm.avail_out)?1:2}function E(e,t){for(var r,n,o;;){if(e.lookahead<d){if(C(e),e.lookahead<d&&0===t)return 1;if(0===e.lookahead)break}if(r=0,e.lookahead>=3&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=2,0!==r&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-d&&(e.match_length=S(e,r),e.match_length<=5&&(1===e.strategy||3===e.match_length&&e.strstart-e.match_start>4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){o=e.strstart+e.lookahead-3,n=i._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=o&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart)}while(0!==--e.prev_length);if(e.match_available=0,e.match_length=2,e.strstart++,n&&(y(e,!1),0===e.strm.avail_out))return 1}else if(e.match_available){if((n=i._tr_tally(e,0,e.window[e.strstart-1]))&&y(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return 1}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=i._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<2?e.strstart:2,4===t?(y(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(y(e,!1),0===e.strm.avail_out)?1:2}function O(e,t,r,n,o){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=o}function A(){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=8,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 o.Buf16(1146),this.dyn_dtree=new o.Buf16(122),this.bl_tree=new o.Buf16(78),v(this.dyn_ltree),v(this.dyn_dtree),v(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new o.Buf16(16),this.heap=new o.Buf16(573),v(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new o.Buf16(573),v(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 T(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=2,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?42:h,e.adler=2===t.wrap?0:1,t.last_flush=0,i._tr_init(t),0):m(e,c)}function j(e){var t,r=T(e);return 0===r&&((t=e.state).window_size=2*t.w_size,v(t.head),t.max_lazy_match=n[t.level].max_lazy,t.good_match=n[t.level].good_length,t.nice_match=n[t.level].nice_length,t.max_chain_length=n[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=2,t.match_available=0,t.ins_h=0),r}function P(e,t,r,n,i,a){if(!e)return c;var s=1;if(-1===t&&(t=6),n<0?(s=0,n=-n):n>15&&(s=2,n-=16),i<1||i>9||8!==r||n<8||n>15||t<0||t>9||a<0||a>4)return m(e,c);8===n&&(n=9);var l=new A;return e.state=l,l.strm=e,l.wrap=s,l.gzhead=null,l.w_bits=n,l.w_size=1<<l.w_bits,l.w_mask=l.w_size-1,l.hash_bits=i+7,l.hash_size=1<<l.hash_bits,l.hash_mask=l.hash_size-1,l.hash_shift=~~((l.hash_bits+3-1)/3),l.window=new o.Buf8(2*l.w_size),l.head=new o.Buf16(l.hash_size),l.prev=new o.Buf16(l.w_size),l.lit_bufsize=1<<i+6,l.pending_buf_size=4*l.lit_bufsize,l.pending_buf=new o.Buf8(l.pending_buf_size),l.d_buf=1*l.lit_bufsize,l.l_buf=3*l.lit_bufsize,l.level=t,l.strategy=a,l.method=r,j(e)}n=[new O(0,0,0,0,(function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(C(e),0===e.lookahead&&0===t)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,y(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-d&&(y(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(y(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(y(e,!1),e.strm.avail_out),1)})),new O(4,4,8,4,k),new O(4,5,16,8,k),new O(4,6,32,32,k),new O(4,4,16,16,E),new O(8,16,32,32,E),new O(8,16,128,128,E),new O(8,32,128,256,E),new O(32,128,258,1024,E),new O(32,258,258,4096,E)],t.deflateInit=function(e,t){return P(e,t,8,15,8,0)},t.deflateInit2=P,t.deflateReset=j,t.deflateResetKeep=T,t.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?c:(e.state.gzhead=t,0):c},t.deflate=function(e,t){var r,o,a,l;if(!e||!e.state||t>5||t<0)return e?m(e,c):c;if(o=e.state,!e.output||!e.input&&0!==e.avail_in||o.status===p&&4!==t)return m(e,0===e.avail_out?-5:c);if(o.strm=e,r=o.last_flush,o.last_flush=t,42===o.status)if(2===o.wrap)e.adler=0,w(o,31),w(o,139),w(o,8),o.gzhead?(w(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)),w(o,255&o.gzhead.time),w(o,o.gzhead.time>>8&255),w(o,o.gzhead.time>>16&255),w(o,o.gzhead.time>>24&255),w(o,9===o.level?2:o.strategy>=2||o.level<2?4:0),w(o,255&o.gzhead.os),o.gzhead.extra&&o.gzhead.extra.length&&(w(o,255&o.gzhead.extra.length),w(o,o.gzhead.extra.length>>8&255)),o.gzhead.hcrc&&(e.adler=s(e.adler,o.pending_buf,o.pending,0)),o.gzindex=0,o.status=69):(w(o,0),w(o,0),w(o,0),w(o,0),w(o,0),w(o,9===o.level?2:o.strategy>=2||o.level<2?4:0),w(o,3),o.status=h);else{var d=8+(o.w_bits-8<<4)<<8;d|=(o.strategy>=2||o.level<2?0:o.level<6?1:6===o.level?2:3)<<6,0!==o.strstart&&(d|=32),d+=31-d%31,o.status=h,x(o,d),0!==o.strstart&&(x(o,e.adler>>>16),x(o,65535&e.adler)),e.adler=1}if(69===o.status)if(o.gzhead.extra){for(a=o.pending;o.gzindex<(65535&o.gzhead.extra.length)&&(o.pending!==o.pending_buf_size||(o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),b(e),a=o.pending,o.pending!==o.pending_buf_size));)w(o,255&o.gzhead.extra[o.gzindex]),o.gzindex++;o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),o.gzindex===o.gzhead.extra.length&&(o.gzindex=0,o.status=73)}else o.status=73;if(73===o.status)if(o.gzhead.name){a=o.pending;do{if(o.pending===o.pending_buf_size&&(o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),b(e),a=o.pending,o.pending===o.pending_buf_size)){l=1;break}l=o.gzindex<o.gzhead.name.length?255&o.gzhead.name.charCodeAt(o.gzindex++):0,w(o,l)}while(0!==l);o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),0===l&&(o.gzindex=0,o.status=91)}else o.status=91;if(91===o.status)if(o.gzhead.comment){a=o.pending;do{if(o.pending===o.pending_buf_size&&(o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),b(e),a=o.pending,o.pending===o.pending_buf_size)){l=1;break}l=o.gzindex<o.gzhead.comment.length?255&o.gzhead.comment.charCodeAt(o.gzindex++):0,w(o,l)}while(0!==l);o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),0===l&&(o.status=f)}else o.status=f;if(o.status===f&&(o.gzhead.hcrc?(o.pending+2>o.pending_buf_size&&b(e),o.pending+2<=o.pending_buf_size&&(w(o,255&e.adler),w(o,e.adler>>8&255),e.adler=0,o.status=h)):o.status=h),0!==o.pending){if(b(e),0===e.avail_out)return o.last_flush=-1,0}else if(0===e.avail_in&&g(t)<=g(r)&&4!==t)return m(e,-5);if(o.status===p&&0!==e.avail_in)return m(e,-5);if(0!==e.avail_in||0!==o.lookahead||0!==t&&o.status!==p){var S=2===o.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(C(e),0===e.lookahead)){if(0===t)return 1;break}if(e.match_length=0,r=i._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(y(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(y(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(y(e,!1),0===e.strm.avail_out)?1:2}(o,t):3===o.strategy?function(e,t){for(var r,n,o,a,s=e.window;;){if(e.lookahead<=u){if(C(e),e.lookahead<=u&&0===t)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(n=s[o=e.strstart-1])===s[++o]&&n===s[++o]&&n===s[++o]){a=e.strstart+u;do{}while(n===s[++o]&&n===s[++o]&&n===s[++o]&&n===s[++o]&&n===s[++o]&&n===s[++o]&&n===s[++o]&&n===s[++o]&&o<a);e.match_length=u-(a-o),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(r=i._tr_tally(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=i._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(y(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(y(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(y(e,!1),0===e.strm.avail_out)?1:2}(o,t):n[o.level].func(o,t);if(3!==S&&4!==S||(o.status=p),1===S||3===S)return 0===e.avail_out&&(o.last_flush=-1),0;if(2===S&&(1===t?i._tr_align(o):5!==t&&(i._tr_stored_block(o,0,0,!1),3===t&&(v(o.head),0===o.lookahead&&(o.strstart=0,o.block_start=0,o.insert=0))),b(e),0===e.avail_out))return o.last_flush=-1,0}return 4!==t?0:o.wrap<=0?1:(2===o.wrap?(w(o,255&e.adler),w(o,e.adler>>8&255),w(o,e.adler>>16&255),w(o,e.adler>>24&255),w(o,255&e.total_in),w(o,e.total_in>>8&255),w(o,e.total_in>>16&255),w(o,e.total_in>>24&255)):(x(o,e.adler>>>16),x(o,65535&e.adler)),b(e),o.wrap>0&&(o.wrap=-o.wrap),0!==o.pending?0:1)},t.deflateEnd=function(e){var t;return e&&e.state?42!==(t=e.state.status)&&69!==t&&73!==t&&91!==t&&t!==f&&t!==h&&t!==p?m(e,c):(e.state=null,t===h?m(e,-3):0):c},t.deflateSetDictionary=function(e,t){var r,n,i,s,l,u,d,f,h=t.length;if(!e||!e.state)return c;if(2===(s=(r=e.state).wrap)||1===s&&42!==r.status||r.lookahead)return c;for(1===s&&(e.adler=a(e.adler,t,h,0)),r.wrap=0,h>=r.w_size&&(0===s&&(v(r.head),r.strstart=0,r.block_start=0,r.insert=0),f=new o.Buf8(r.w_size),o.arraySet(f,t,h-r.w_size,r.w_size,0),t=f,h=r.w_size),l=e.avail_in,u=e.next_in,d=e.input,e.avail_in=h,e.next_in=0,e.input=t,C(r);r.lookahead>=3;){n=r.strstart,i=r.lookahead-2;do{r.ins_h=(r.ins_h<<r.hash_shift^r.window[n+3-1])&r.hash_mask,r.prev[n&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=n,n++}while(--i);r.strstart=n,r.lookahead=2,C(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=2,r.match_available=0,e.next_in=u,e.input=d,e.avail_in=l,r.wrap=s,0},t.deflateInfo=\"pako deflate (from Nodeca project)\"},8508:(e,t,r)=>{\"use strict\";r.d(t,{A:()=>s});var n=r(1601),o=r.n(n),i=r(6314),a=r.n(i)()(o());a.push([e.id,'.PdfjsAnnotationExtension_Comment_hidden .CustomToolbar::after{display:none}.CustomToolbar{width:100%;height:72px;display:flex;justify-content:center;align-items:center;overflow-x:auto}.CustomToolbar .buttons{display:flex;padding:0;margin:0;list-style:none;gap:3px;user-select:none}.CustomToolbar .buttons li{align-items:center;height:100%;text-align:center;border:1px solid rgba(0,0,0,0);border-radius:3px;color:var(--main-color)}.CustomToolbar .buttons li .ant-upload-wrapper{line-height:normal}.CustomToolbar .buttons li .icon{font-size:18px;padding:5px 10px 3px 10px;border-bottom:1px solid rgba(0,0,0,0);opacity:.9}.CustomToolbar .buttons li .name{font-size:14px;padding:1px 10px 2px 10px}.CustomToolbar .buttons li.selected{border:1px solid var(--toolbar-border-color);background-color:var(--toolbar-border-color)}.CustomToolbar .buttons li.disabled{opacity:.5}.CustomToolbar .buttons li.disabled:hover{background-color:rgba(0,0,0,0)}.CustomToolbar .splitToolbarButtonSeparator{height:30px;margin:0 5px;min-width:1px}.CustomToolbar .right{position:absolute;right:10px}.CustomToolbar::after{content:\"\";display:block;width:330px;height:100%;flex-shrink:0}.SignatureTool{margin:0 auto}.SignatureTool .show{display:block}.SignatureTool .hide{display:none}.SignatureTool-Header{padding:10px}.SignatureTool-Container{background-color:#eee;border:1px solid #ccc;position:relative;margin:0 auto}.SignatureTool-Container input{background-color:rgba(0,0,0,0);border:none;margin:0 auto;text-align:center;display:block;width:100%;outline:none}.SignatureTool-Container input::-webkit-input-placeholder{color:#ccc}.SignatureTool-Container .konvajs-content{z-index:99;cursor:crosshair}.SignatureTool-Container-info{font-size:20px;z-index:0;color:#ccc;position:absolute;top:50%;left:0;right:0;transform:translateY(-50%);text-align:center}.SignatureTool-ImagePreview{display:flex;justify-content:center;align-items:center;width:100%;overflow:hidden;position:relative}.SignatureTool img{width:100%;height:100%;object-fit:contain;display:block}.SignatureTool-Toolbar{border:1px solid #ccc;border-top:0;display:flex;justify-content:space-between;margin:0 auto}.SignatureTool-Toolbar .colorPalette{display:flex;margin:8px}.SignatureTool-Toolbar .colorPalette .cell{cursor:pointer;width:22px;height:22px;margin-right:10px;border-radius:100px;display:flex;align-items:center;justify-content:center;border:1px solid #fff}.SignatureTool-Toolbar .colorPalette .cell span{width:12px;height:12px;display:inline-block;border-radius:100px}.SignatureTool-Toolbar .colorPalette .active{border:1px solid #bbb}.SignatureTool-Toolbar .clear{padding:8px;cursor:pointer}.SignatureTool-Toolbar .clear:hover{text-decoration:underline}.SignaturePop .ant-popover-inner{padding:5px}.SignaturePop-Container{max-height:200px;overflow:auto}.SignaturePop ul,.SignaturePop li{margin:0;list-style:none;padding:0}.SignaturePop ul li:hover,.SignaturePop li li:hover{background-color:#ccc}.SignaturePop li{display:flex;margin:5px;justify-content:center;align-items:center}.SignaturePop li img{height:48px;max-width:100px;overflow:clip;object-fit:contain}.SignaturePop li span{margin-left:5px;cursor:pointer}.SignaturePop-Toolbar{padding:5px}.StampPop{width:300px}.StampPop .ant-popover-inner{padding:10px}.StampPop-Container{max-height:200px;overflow:auto;display:flex;flex-wrap:wrap}.StampPop ul,.StampPop li{margin:0;list-style:none;padding:0}.StampPop ul li:hover,.StampPop li li:hover{background-color:#ccc}.StampPop li{display:flex;margin:5px;padding:5px;justify-content:center;align-items:center;border-radius:5px;width:120px;text-align:center}.StampPop li img{height:48px;max-width:100px;overflow:clip;object-fit:contain}.StampPop li span{margin-left:5px;cursor:pointer}.StampPop-Toolbar{padding:5px}.StampTool{margin:0 auto}.StampTool-Container{position:relative;margin:0 auto}.StampTool-Container .ant-form{margin-top:12px}.StampTool-Container .ant-form-item{margin-bottom:12px}.StampTool-Container-ImagePreview{background-color:#eee;border:1px solid #ccc;overflow:auto}.StampTool-Container-ImagePreview .konvajs-content{z-index:99;margin:0 auto}.StampTool-Container-info{font-size:20px;z-index:0;color:#ccc;position:absolute;top:50%;left:0;right:0;transform:translateY(-50%);text-align:center}.StampTool-ImagePreview{display:flex;justify-content:center;align-items:center;width:100%;overflow:hidden;position:relative}.StampTool img{width:100%;height:100%;object-fit:contain;display:block}.StampTool-Toolbar{border:1px solid #ccc;border-top:0;display:flex;justify-content:space-between;margin:0 auto}.StampTool-Toolbar .colorPalette{display:flex;margin:8px}.StampTool-Toolbar .colorPalette .cell{cursor:pointer;width:22px;height:22px;margin-right:10px;border-radius:100px;display:flex;align-items:center;justify-content:center;border:1px solid #fff}.StampTool-Toolbar .colorPalette .cell span{width:12px;height:12px;display:inline-block;border-radius:100px}.StampTool-Toolbar .colorPalette .active{border:1px solid #bbb}.StampTool-Toolbar .clear{padding:8px;cursor:pointer}.StampTool-Toolbar .clear:hover{text-decoration:underline}@media all and (max-width: 1150px){.CustomToolbar .buttons .name{display:none}.CustomToolbar::after{display:none}}@media all and (max-width: 690px){.CustomToolbar{justify-content:flex-start}.CustomToolbar .buttons{margin-left:5px;padding-right:5px}}@media(hover: hover){.CustomToolbar .buttons li:hover{background-color:var(--button-hover-color)}}@media(hover: none){.CustomToolbar .buttons li:active{background-color:var(--button-hover-color)}}',\"\"]);const s=a},8558:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Konva=void 0;const n=r(680),o=r(4821),i=r(9456),a=r(9729),s=r(6955),l=r(7256),c=r(6619),u=r(3443),d=r(1486),f=r(5155),h=r(9131),p=r(5451),m=r(9308),g=r(4481),v=r(1958),b=r(8137),y=r(5058),w=r(8001),x=r(6261),S=r(6627),C=r(2650),k=r(983),E=r(7928),O=r(7241),A=r(5461),T=r(4843),j=r(6564),P=r(5553),M=r(8624),R=r(5992),_=r(4943),I=r(7019),N=r(6921),F=r(3862),D=r(2512),B=r(517),L=r(661);t.Konva=n.Konva.Util._assign(n.Konva,{Arc:o.Arc,Arrow:i.Arrow,Circle:a.Circle,Ellipse:s.Ellipse,Image:l.Image,Label:c.Label,Tag:c.Tag,Line:u.Line,Path:d.Path,Rect:f.Rect,RegularPolygon:h.RegularPolygon,Ring:p.Ring,Sprite:m.Sprite,Star:g.Star,Text:v.Text,TextPath:b.TextPath,Transformer:y.Transformer,Wedge:w.Wedge,Filters:{Blur:x.Blur,Brighten:S.Brighten,Contrast:C.Contrast,Emboss:k.Emboss,Enhance:E.Enhance,Grayscale:O.Grayscale,HSL:A.HSL,HSV:T.HSV,Invert:j.Invert,Kaleidoscope:P.Kaleidoscope,Mask:M.Mask,Noise:R.Noise,Pixelate:_.Pixelate,Posterize:I.Posterize,RGB:N.RGB,RGBA:F.RGBA,Sepia:D.Sepia,Solarize:B.Solarize,Threshold:L.Threshold}})},8604:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.HitCanvas=t.SceneCanvas=t.Canvas=void 0;const n=r(4060),o=r(9869),i=r(8871);let a;class s{constructor(e){this.pixelRatio=1,this.width=0,this.height=0,this.isCache=!1;const t=(e||{}).pixelRatio||i.Konva.pixelRatio||function(){if(a)return a;const e=n.Util.createCanvasElement(),t=e.getContext(\"2d\");return a=(i.Konva._global.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),n.Util.releaseCanvas(e),a}();this.pixelRatio=t,this._canvas=n.Util.createCanvasElement(),this._canvas.style.padding=\"0\",this._canvas.style.margin=\"0\",this._canvas.style.border=\"0\",this._canvas.style.background=\"transparent\",this._canvas.style.position=\"absolute\",this._canvas.style.top=\"0\",this._canvas.style.left=\"0\"}getContext(){return this.context}getPixelRatio(){return this.pixelRatio}setPixelRatio(e){const t=this.pixelRatio;this.pixelRatio=e,this.setSize(this.getWidth()/t,this.getHeight()/t)}setWidth(e){this.width=this._canvas.width=e*this.pixelRatio,this._canvas.style.width=e+\"px\";const t=this.pixelRatio;this.getContext()._context.scale(t,t)}setHeight(e){this.height=this._canvas.height=e*this.pixelRatio,this._canvas.style.height=e+\"px\";const t=this.pixelRatio;this.getContext()._context.scale(t,t)}getWidth(){return this.width}getHeight(){return this.height}setSize(e,t){this.setWidth(e||0),this.setHeight(t||0)}toDataURL(e,t){try{return this._canvas.toDataURL(e,t)}catch(e){try{return this._canvas.toDataURL()}catch(e){return n.Util.error(\"Unable to get data URL. \"+e.message+\" For more info read https://konvajs.org/docs/posts/Tainted_Canvas.html.\"),\"\"}}}}t.Canvas=s,t.SceneCanvas=class extends s{constructor(e={width:0,height:0,willReadFrequently:!1}){super(e),this.context=new o.SceneContext(this,{willReadFrequently:e.willReadFrequently}),this.setSize(e.width,e.height)}},t.HitCanvas=class extends s{constructor(e={width:0,height:0}){super(e),this.hitCanvas=!0,this.context=new o.HitContext(this),this.setSize(e.width,e.height)}}},8624:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Mask=void 0;const n=r(4892),o=r(6536),i=r(5483);function a(e,t,r){let n=4*(r*e.width+t);const o=[];return o.push(e.data[n++],e.data[n++],e.data[n++],e.data[n++]),o}function s(e,t){return Math.sqrt(Math.pow(e[0]-t[0],2)+Math.pow(e[1]-t[1],2)+Math.pow(e[2]-t[2],2))}t.Mask=function(e){let t=function(e,t){const r=a(e,0,0),n=a(e,e.width-1,0),o=a(e,0,e.height-1),i=a(e,e.width-1,e.height-1),l=t||10;if(s(r,n)<l&&s(n,i)<l&&s(i,o)<l&&s(o,r)<l){const t=function(e){const t=[0,0,0];for(let r=0;r<e.length;r++)t[0]+=e[r][0],t[1]+=e[r][1],t[2]+=e[r][2];return t[0]/=e.length,t[1]/=e.length,t[2]/=e.length,t}([n,r,i,o]),a=[];for(let r=0;r<e.width*e.height;r++){const n=s(t,[e.data[4*r],e.data[4*r+1],e.data[4*r+2]]);a[r]=n<l?0:255}return a}}(e,this.threshold());return t&&(t=function(e,t,r){const n=[1,1,1,1,0,1,1,1,1],o=Math.round(Math.sqrt(n.length)),i=Math.floor(o/2),a=[];for(let s=0;s<r;s++)for(let l=0;l<t;l++){const c=s*t+l;let u=0;for(let a=0;a<o;a++)for(let c=0;c<o;c++){const d=s+a-i,f=l+c-i;if(d>=0&&d<r&&f>=0&&f<t){const r=n[a*o+c];u+=e[d*t+f]*r}}a[c]=2040===u?255:0}return a}(t,e.width,e.height),t=function(e,t,r){const n=[1,1,1,1,1,1,1,1,1],o=Math.round(Math.sqrt(n.length)),i=Math.floor(o/2),a=[];for(let s=0;s<r;s++)for(let l=0;l<t;l++){const c=s*t+l;let u=0;for(let a=0;a<o;a++)for(let c=0;c<o;c++){const d=s+a-i,f=l+c-i;if(d>=0&&d<r&&f>=0&&f<t){const r=n[a*o+c];u+=e[d*t+f]*r}}a[c]=u>=1020?255:0}return a}(t,e.width,e.height),t=function(e,t,r){const n=[1/9,1/9,1/9,1/9,1/9,1/9,1/9,1/9,1/9],o=Math.round(Math.sqrt(n.length)),i=Math.floor(o/2),a=[];for(let s=0;s<r;s++)for(let l=0;l<t;l++){const c=s*t+l;let u=0;for(let a=0;a<o;a++)for(let c=0;c<o;c++){const d=s+a-i,f=l+c-i;if(d>=0&&d<r&&f>=0&&f<t){const r=n[a*o+c];u+=e[d*t+f]*r}}a[c]=u}return a}(t,e.width,e.height),function(e,t){for(let r=0;r<e.width*e.height;r++)e.data[4*r+3]=t[r]}(e,t)),e},n.Factory.addGetterSetter(o.Node,\"threshold\",0,(0,i.getNumberValidator)(),n.Factory.afterSetFilter)},8665:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Easings=t.Tween=void 0;const n=r(4060),o=r(9696),i=r(6536),a=r(8871),s={node:1,duration:1,easing:1,onFinish:1,yoyo:1},l=[\"fill\",\"stroke\",\"shadowColor\"];let c=0;class u{constructor(e,t,r,n,o,i,a){this.prop=e,this.propFunc=t,this.begin=n,this._pos=n,this.duration=i,this._change=0,this.prevPos=0,this.yoyo=a,this._time=0,this._position=0,this._startTime=0,this._finish=0,this.func=r,this._change=o-this.begin,this.pause()}fire(e){const t=this[e];t&&t()}setTime(e){e>this.duration?this.yoyo?(this._time=this.duration,this.reverse()):this.finish():e<0?this.yoyo?(this._time=0,this.play()):this.reset():(this._time=e,this.update())}getTime(){return this._time}setPosition(e){this.prevPos=this._pos,this.propFunc(e),this._pos=e}getPosition(e){return void 0===e&&(e=this._time),this.func(e,this.begin,this._change,this.duration)}play(){this.state=2,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire(\"onPlay\")}reverse(){this.state=3,this._time=this.duration-this._time,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire(\"onReverse\")}seek(e){this.pause(),this._time=e,this.update(),this.fire(\"onSeek\")}reset(){this.pause(),this._time=0,this.update(),this.fire(\"onReset\")}finish(){this.pause(),this._time=this.duration,this.update(),this.fire(\"onFinish\")}update(){this.setPosition(this.getPosition(this._time)),this.fire(\"onUpdate\")}onEnterFrame(){const e=this.getTimer()-this._startTime;2===this.state?this.setTime(e):3===this.state&&this.setTime(this.duration-e)}pause(){this.state=1,this.fire(\"onPause\")}getTimer(){return(new Date).getTime()}}class d{constructor(e){const r=this,i=e.node,l=i._id,f=e.easing||t.Easings.Linear,h=!!e.yoyo;let p,m;p=void 0===e.duration?.3:0===e.duration?.001:e.duration,this.node=i,this._id=c++;const g=i.getLayer()||(i instanceof a.Konva.Stage?i.getLayers():null);for(m in g||n.Util.error(\"Tween constructor have `node` that is not in a layer. Please add node into layer first.\"),this.anim=new o.Animation((function(){r.tween.onEnterFrame()}),g),this.tween=new u(m,(function(e){r._tweenFunc(e)}),f,0,1,1e3*p,h),this._addListeners(),d.attrs[l]||(d.attrs[l]={}),d.attrs[l][this._id]||(d.attrs[l][this._id]={}),d.tweens[l]||(d.tweens[l]={}),e)void 0===s[m]&&this._addAttr(m,e[m]);this.reset(),this.onFinish=e.onFinish,this.onReset=e.onReset,this.onUpdate=e.onUpdate}_addAttr(e,t){const r=this.node,o=r._id;let i,a,s,c,u;const f=d.tweens[o][e];f&&delete d.attrs[o][f][e];let h=r.getAttr(e);if(n.Util._isArray(t))if(i=[],a=Math.max(t.length,h.length),\"points\"===e&&t.length!==h.length&&(t.length>h.length?(c=h,h=n.Util._prepareArrayForTween(h,t,r.closed())):(s=t,t=n.Util._prepareArrayForTween(t,h,r.closed()))),0===e.indexOf(\"fill\"))for(let e=0;e<a;e++)if(e%2==0)i.push(t[e]-h[e]);else{const r=n.Util.colorToRGBA(h[e]);u=n.Util.colorToRGBA(t[e]),h[e]=r,i.push({r:u.r-r.r,g:u.g-r.g,b:u.b-r.b,a:u.a-r.a})}else for(let e=0;e<a;e++)i.push(t[e]-h[e]);else-1!==l.indexOf(e)?(h=n.Util.colorToRGBA(h),u=n.Util.colorToRGBA(t),i={r:u.r-h.r,g:u.g-h.g,b:u.b-h.b,a:u.a-h.a}):i=t-h;d.attrs[o][this._id][e]={start:h,diff:i,end:t,trueEnd:s,trueStart:c},d.tweens[o][e]=this._id}_tweenFunc(e){const t=this.node,r=d.attrs[t._id][this._id];let o,i,a,s,c,u,f,h;for(o in r){if(i=r[o],a=i.start,s=i.diff,h=i.end,n.Util._isArray(a))if(c=[],f=Math.max(a.length,h.length),0===o.indexOf(\"fill\"))for(u=0;u<f;u++)u%2==0?c.push((a[u]||0)+s[u]*e):c.push(\"rgba(\"+Math.round(a[u].r+s[u].r*e)+\",\"+Math.round(a[u].g+s[u].g*e)+\",\"+Math.round(a[u].b+s[u].b*e)+\",\"+(a[u].a+s[u].a*e)+\")\");else for(u=0;u<f;u++)c.push((a[u]||0)+s[u]*e);else c=-1!==l.indexOf(o)?\"rgba(\"+Math.round(a.r+s.r*e)+\",\"+Math.round(a.g+s.g*e)+\",\"+Math.round(a.b+s.b*e)+\",\"+(a.a+s.a*e)+\")\":a+s*e;t.setAttr(o,c)}}_addListeners(){this.tween.onPlay=()=>{this.anim.start()},this.tween.onReverse=()=>{this.anim.start()},this.tween.onPause=()=>{this.anim.stop()},this.tween.onFinish=()=>{const e=this.node,t=d.attrs[e._id][this._id];t.points&&t.points.trueEnd&&e.setAttr(\"points\",t.points.trueEnd),this.onFinish&&this.onFinish.call(this)},this.tween.onReset=()=>{const e=this.node,t=d.attrs[e._id][this._id];t.points&&t.points.trueStart&&e.points(t.points.trueStart),this.onReset&&this.onReset()},this.tween.onUpdate=()=>{this.onUpdate&&this.onUpdate.call(this)}}play(){return this.tween.play(),this}reverse(){return this.tween.reverse(),this}reset(){return this.tween.reset(),this}seek(e){return this.tween.seek(1e3*e),this}pause(){return this.tween.pause(),this}finish(){return this.tween.finish(),this}destroy(){const e=this.node._id,t=this._id,r=d.tweens[e];this.pause();for(const t in r)delete d.tweens[e][t];delete d.attrs[e][t]}}t.Tween=d,d.attrs={},d.tweens={},i.Node.prototype.to=function(e){const t=e.onFinish;e.node=this,e.onFinish=function(){this.destroy(),t&&t()},new d(e).play()},t.Easings={BackEaseIn(e,t,r,n){const o=1.70158;return r*(e/=n)*e*((o+1)*e-o)+t},BackEaseOut(e,t,r,n){const o=1.70158;return r*((e=e/n-1)*e*((o+1)*e+o)+1)+t},BackEaseInOut(e,t,r,n){let o=1.70158;return(e/=n/2)<1?r/2*(e*e*((1+(o*=1.525))*e-o))+t:r/2*((e-=2)*e*((1+(o*=1.525))*e+o)+2)+t},ElasticEaseIn(e,t,r,n,o,i){let a=0;return 0===e?t:1===(e/=n)?t+r:(i||(i=.3*n),!o||o<Math.abs(r)?(o=r,a=i/4):a=i/(2*Math.PI)*Math.asin(r/o),-o*Math.pow(2,10*(e-=1))*Math.sin((e*n-a)*(2*Math.PI)/i)+t)},ElasticEaseOut(e,t,r,n,o,i){let a=0;return 0===e?t:1===(e/=n)?t+r:(i||(i=.3*n),!o||o<Math.abs(r)?(o=r,a=i/4):a=i/(2*Math.PI)*Math.asin(r/o),o*Math.pow(2,-10*e)*Math.sin((e*n-a)*(2*Math.PI)/i)+r+t)},ElasticEaseInOut(e,t,r,n,o,i){let a=0;return 0===e?t:2==(e/=n/2)?t+r:(i||(i=n*(.3*1.5)),!o||o<Math.abs(r)?(o=r,a=i/4):a=i/(2*Math.PI)*Math.asin(r/o),e<1?o*Math.pow(2,10*(e-=1))*Math.sin((e*n-a)*(2*Math.PI)/i)*-.5+t:o*Math.pow(2,-10*(e-=1))*Math.sin((e*n-a)*(2*Math.PI)/i)*.5+r+t)},BounceEaseOut:(e,t,r,n)=>(e/=n)<1/2.75?r*(7.5625*e*e)+t:e<2/2.75?r*(7.5625*(e-=1.5/2.75)*e+.75)+t:e<2.5/2.75?r*(7.5625*(e-=2.25/2.75)*e+.9375)+t:r*(7.5625*(e-=2.625/2.75)*e+.984375)+t,BounceEaseIn:(e,r,n,o)=>n-t.Easings.BounceEaseOut(o-e,0,n,o)+r,BounceEaseInOut:(e,r,n,o)=>e<o/2?.5*t.Easings.BounceEaseIn(2*e,0,n,o)+r:.5*t.Easings.BounceEaseOut(2*e-o,0,n,o)+.5*n+r,EaseIn:(e,t,r,n)=>r*(e/=n)*e+t,EaseOut:(e,t,r,n)=>-r*(e/=n)*(e-2)+t,EaseInOut:(e,t,r,n)=>(e/=n/2)<1?r/2*e*e+t:-r/2*(--e*(e-2)-1)+t,StrongEaseIn:(e,t,r,n)=>r*(e/=n)*e*e*e*e+t,StrongEaseOut:(e,t,r,n)=>r*((e=e/n-1)*e*e*e*e+1)+t,StrongEaseInOut:(e,t,r,n)=>(e/=n/2)<1?r/2*e*e*e*e*e+t:r/2*((e-=2)*e*e*e*e+2)+t,Linear:(e,t,r,n)=>r*e/n+t}},8722:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.getCapturedShape=function(e){return o.get(e)},t.createEvent=a,t.hasPointerCapture=function(e,t){return o.get(e)===t},t.setPointerCapture=function(e,t){s(e),t.getStage()&&(o.set(e,t),i&&t._fire(\"gotpointercapture\",a(new PointerEvent(\"gotpointercapture\"))))},t.releaseCapture=s;const n=r(8871),o=new Map,i=void 0!==n.Konva._global.PointerEvent;function a(e){return{evt:e,pointerId:e.pointerId}}function s(e,t){const r=o.get(e);if(!r)return;const n=r.getStage();n&&n.content,o.delete(e),i&&r._fire(\"lostpointercapture\",a(new PointerEvent(\"lostpointercapture\")))}},8871:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t._registerNode=t.Konva=t.glob=void 0;const n=Math.PI/180;t.glob=void 0!==r.g?r.g:\"undefined\"!=typeof window?window:\"undefined\"!=typeof WorkerGlobalScope?self:{},t.Konva={_global:t.glob,version:\"9.3.20\",isBrowser:\"undefined\"!=typeof window&&(\"[object Window]\"==={}.toString.call(window)||\"[object global]\"==={}.toString.call(window)),isUnminified:/param/.test(function(e){}.toString()),dblClickWindow:400,getAngle:e=>t.Konva.angleDeg?e*n:e,enableTrace:!1,pointerEventsEnabled:!0,autoDrawEnabled:!0,hitOnDragEnabled:!1,capturePointerEventsEnabled:!1,_mouseListenClick:!1,_touchListenClick:!1,_pointerListenClick:!1,_mouseInDblClickWindow:!1,_touchInDblClickWindow:!1,_pointerInDblClickWindow:!1,_mouseDblClickPointerId:null,_touchDblClickPointerId:null,_pointerDblClickPointerId:null,_fixTextRendering:!1,pixelRatio:\"undefined\"!=typeof window&&window.devicePixelRatio||1,dragDistance:3,angleDeg:!0,showWarnings:!0,dragButtons:[0,1],isDragging:()=>t.Konva.DD.isDragging,isTransforming(){var e;return null===(e=t.Konva.Transformer)||void 0===e?void 0:e.isTransforming()},isDragReady:()=>!!t.Konva.DD.node,releaseCanvasOnDestroy:!0,document:t.glob.document,_injectGlobal(e){t.glob.Konva=e}},t._registerNode=e=>{t.Konva[e.prototype.getClassName()]=e},t.Konva._injectGlobal(t.Konva)},9131:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.RegularPolygon=void 0;const n=r(4892),o=r(4723),i=r(5483),a=r(8871);class s extends o.Shape{_sceneFunc(e){const t=this._getPoints();e.beginPath(),e.moveTo(t[0].x,t[0].y);for(let r=1;r<t.length;r++)e.lineTo(t[r].x,t[r].y);e.closePath(),e.fillStrokeShape(this)}_getPoints(){const e=this.attrs.sides,t=this.attrs.radius||0,r=[];for(let n=0;n<e;n++)r.push({x:t*Math.sin(2*n*Math.PI/e),y:-1*t*Math.cos(2*n*Math.PI/e)});return r}getSelfRect(){const e=this._getPoints();let t=e[0].x,r=e[0].y,n=e[0].x,o=e[0].y;return e.forEach((e=>{t=Math.min(t,e.x),r=Math.max(r,e.x),n=Math.min(n,e.y),o=Math.max(o,e.y)})),{x:t,y:n,width:r-t,height:o-n}}getWidth(){return 2*this.radius()}getHeight(){return 2*this.radius()}setWidth(e){this.radius(e/2)}setHeight(e){this.radius(e/2)}}t.RegularPolygon=s,s.prototype.className=\"RegularPolygon\",s.prototype._centroid=!0,s.prototype._attrsAffectingSize=[\"radius\"],(0,a._registerNode)(s),n.Factory.addGetterSetter(s,\"radius\",0,(0,i.getNumberValidator)()),n.Factory.addGetterSetter(s,\"sides\",0,(0,i.getNumberValidator)())},9308:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Sprite=void 0;const n=r(4892),o=r(4723),i=r(9696),a=r(5483),s=r(8871);class l extends o.Shape{constructor(e){super(e),this._updated=!0,this.anim=new i.Animation((()=>{const e=this._updated;return this._updated=!1,e})),this.on(\"animationChange.konva\",(function(){this.frameIndex(0)})),this.on(\"frameIndexChange.konva\",(function(){this._updated=!0})),this.on(\"frameRateChange.konva\",(function(){this.anim.isRunning()&&(clearInterval(this.interval),this._setInterval())}))}_sceneFunc(e){const t=this.animation(),r=this.frameIndex(),n=4*r,o=this.animations()[t],i=this.frameOffsets(),a=o[n+0],s=o[n+1],l=o[n+2],c=o[n+3],u=this.image();if((this.hasFill()||this.hasStroke())&&(e.beginPath(),e.rect(0,0,l,c),e.closePath(),e.fillStrokeShape(this)),u)if(i){const n=i[t],o=2*r;e.drawImage(u,a,s,l,c,n[o+0],n[o+1],l,c)}else e.drawImage(u,a,s,l,c,0,0,l,c)}_hitFunc(e){const t=this.animation(),r=this.frameIndex(),n=4*r,o=this.animations()[t],i=this.frameOffsets(),a=o[n+2],s=o[n+3];if(e.beginPath(),i){const n=i[t],o=2*r;e.rect(n[o+0],n[o+1],a,s)}else e.rect(0,0,a,s);e.closePath(),e.fillShape(this)}_useBufferCanvas(){return super._useBufferCanvas(!0)}_setInterval(){const e=this;this.interval=setInterval((function(){e._updateIndex()}),1e3/this.frameRate())}start(){if(this.isRunning())return;const e=this.getLayer();this.anim.setLayers(e),this._setInterval(),this.anim.start()}stop(){this.anim.stop(),clearInterval(this.interval)}isRunning(){return this.anim.isRunning()}_updateIndex(){const e=this.frameIndex(),t=this.animation();e<this.animations()[t].length/4-1?this.frameIndex(e+1):this.frameIndex(0)}}t.Sprite=l,l.prototype.className=\"Sprite\",(0,s._registerNode)(l),n.Factory.addGetterSetter(l,\"animation\"),n.Factory.addGetterSetter(l,\"animations\"),n.Factory.addGetterSetter(l,\"frameOffsets\"),n.Factory.addGetterSetter(l,\"image\"),n.Factory.addGetterSetter(l,\"frameIndex\",0,(0,a.getNumberValidator)()),n.Factory.addGetterSetter(l,\"frameRate\",17,(0,a.getNumberValidator)()),n.Factory.backCompat(l,{index:\"frameIndex\",getIndex:\"getFrameIndex\",setIndex:\"setFrameIndex\"})},9456:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Arrow=void 0;const n=r(4892),o=r(3443),i=r(5483),a=r(8871),s=r(1486);class l extends o.Line{_sceneFunc(e){super._sceneFunc(e);const t=2*Math.PI,r=this.points();let n=r;const o=0!==this.tension()&&r.length>4;o&&(n=this.getTensionPoints());const i=this.pointerLength(),a=r.length;let l,c;if(o){const e=[n[n.length-4],n[n.length-3],n[n.length-2],n[n.length-1],r[a-2],r[a-1]],t=s.Path.calcLength(n[n.length-4],n[n.length-3],\"C\",e),o=s.Path.getPointOnQuadraticBezier(Math.min(1,1-i/t),e[0],e[1],e[2],e[3],e[4],e[5]);l=r[a-2]-o.x,c=r[a-1]-o.y}else l=r[a-2]-r[a-4],c=r[a-1]-r[a-3];const u=(Math.atan2(c,l)+t)%t,d=this.pointerWidth();this.pointerAtEnding()&&(e.save(),e.beginPath(),e.translate(r[a-2],r[a-1]),e.rotate(u),e.moveTo(0,0),e.lineTo(-i,d/2),e.lineTo(-i,-d/2),e.closePath(),e.restore(),this.__fillStroke(e)),this.pointerAtBeginning()&&(e.save(),e.beginPath(),e.translate(r[0],r[1]),o?(l=(n[0]+n[2])/2-r[0],c=(n[1]+n[3])/2-r[1]):(l=r[2]-r[0],c=r[3]-r[1]),e.rotate((Math.atan2(-c,-l)+t)%t),e.moveTo(0,0),e.lineTo(-i,d/2),e.lineTo(-i,-d/2),e.closePath(),e.restore(),this.__fillStroke(e))}__fillStroke(e){const t=this.dashEnabled();t&&(this.attrs.dashEnabled=!1,e.setLineDash([])),e.fillStrokeShape(this),t&&(this.attrs.dashEnabled=!0)}getSelfRect(){const e=super.getSelfRect(),t=this.pointerWidth()/2;return{x:e.x,y:e.y-t,width:e.width,height:e.height+2*t}}}t.Arrow=l,l.prototype.className=\"Arrow\",(0,a._registerNode)(l),n.Factory.addGetterSetter(l,\"pointerLength\",10,(0,i.getNumberValidator)()),n.Factory.addGetterSetter(l,\"pointerWidth\",10,(0,i.getNumberValidator)()),n.Factory.addGetterSetter(l,\"pointerAtBeginning\",!1),n.Factory.addGetterSetter(l,\"pointerAtEnding\",!0)},9616:(e,t,r)=>{\"use strict\";r.d(t,{A:()=>s});var n=r(1601),o=r.n(n),i=r(6314),a=r.n(i)()(o());a.push([e.id,\".CustomAnnotationMenu{position:absolute;top:0;left:0;z-index:999;display:none;width:max-content;background-color:var(--doorhanger-bg-color);box-shadow:0 1px 5px var(--doorhanger-border-color),0 0 0 1px var(--doorhanger-border-color);border:var(--toolbar-border-color);border-radius:6px;font:message-box;padding:4px}.CustomAnnotationMenu.show{display:block}.CustomAnnotationMenu.hide{display:none}.CustomAnnotationMenu .styleContainer .colorPalette{display:flex;flex-wrap:wrap;gap:8px 10px;margin:8px;max-width:160px}.CustomAnnotationMenu .styleContainer .colorPalette .cell{cursor:pointer;width:22px;height:22px;border-radius:100px;display:flex;align-items:center;justify-content:center;border:1px solid rgba(0,0,0,0)}.CustomAnnotationMenu .styleContainer .colorPalette .cell span{width:12px;height:12px;display:inline-block;border-radius:100px}.CustomAnnotationMenu .styleContainer .colorPalette .cell:hover{border:1px solid var(--button-hover-color)}.CustomAnnotationMenu .styleContainer .colorPalette .cell.active{border:1px solid #bbb}.CustomAnnotationMenu .styleContainer .prototypeSetting{margin:8px}.CustomAnnotationMenu .styleContainer .prototypeSetting .ant-form-item{margin-bottom:8px}.CustomAnnotationMenu .styleContainer .prototypeSetting .ant-form-item-label{padding:0}.CustomAnnotationMenu .styleContainer .prototypeSetting .ant-form-item-label label{color:var(--main-color)}.CustomAnnotationMenu .styleContainer .prototypeSetting .ant-slider:hover .ant-slider-rail{background-color:var(--toolbar-border-color)}.CustomAnnotationMenu .styleContainer .prototypeSetting .ant-slider-rail{background-color:var(--toolbar-border-color)}.CustomAnnotationMenu .buttons{display:flex;gap:4px;margin:0;padding:0;list-style:none;user-select:none}.CustomAnnotationMenu .buttons li{display:flex;align-items:center;justify-content:center;width:40px;height:32px;padding:0;color:var(--main-color);border:1px solid rgba(0,0,0,0);border-radius:4px;cursor:pointer;transition:background-color .2s ease,opacity .2s ease}.CustomAnnotationMenu .buttons li .icon{font-size:16px;line-height:1}.CustomAnnotationMenu .buttons li:hover{background-color:var(--button-hover-color)}.CustomAnnotationMenu .buttons li:active{background-color:var(--button-hover-color-active, #ccc)}\",\"\"]);const s=a},9681:e=>{\"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}},9696:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Animation=void 0;const n=r(8871),o=r(4060),i=n.glob.performance&&n.glob.performance.now?function(){return n.glob.performance.now()}:function(){return(new Date).getTime()};class a{constructor(e,t){this.id=a.animIdCounter++,this.frame={time:0,timeDiff:0,lastTime:i(),frameRate:0},this.func=e,this.setLayers(t)}setLayers(e){let t=[];return e&&(t=Array.isArray(e)?e:[e]),this.layers=t,this}getLayers(){return this.layers}addLayer(e){const t=this.layers,r=t.length;for(let n=0;n<r;n++)if(t[n]._id===e._id)return!1;return this.layers.push(e),!0}isRunning(){const e=a.animations,t=e.length;for(let r=0;r<t;r++)if(e[r].id===this.id)return!0;return!1}start(){return this.stop(),this.frame.timeDiff=0,this.frame.lastTime=i(),a._addAnimation(this),this}stop(){return a._removeAnimation(this),this}_updateFrameObject(e){this.frame.timeDiff=e-this.frame.lastTime,this.frame.lastTime=e,this.frame.time+=this.frame.timeDiff,this.frame.frameRate=1e3/this.frame.timeDiff}static _addAnimation(e){this.animations.push(e),this._handleAnimation()}static _removeAnimation(e){const t=e.id,r=this.animations,n=r.length;for(let e=0;e<n;e++)if(r[e].id===t){this.animations.splice(e,1);break}}static _runFrames(){const e={},t=this.animations;for(let r=0;r<t.length;r++){const n=t[r],o=n.layers,a=n.func;n._updateFrameObject(i());const s=o.length;let l;if(l=!a||!1!==a.call(n,n.frame),l)for(let t=0;t<s;t++){const r=o[t];void 0!==r._id&&(e[r._id]=r)}}for(const t in e)e.hasOwnProperty(t)&&e[t].batchDraw()}static _animationLoop(){const e=a;e.animations.length?(e._runFrames(),o.Util.requestAnimFrame(e._animationLoop)):e.animRunning=!1}static _handleAnimation(){this.animRunning||(this.animRunning=!0,o.Util.requestAnimFrame(this._animationLoop))}}t.Animation=a,a.animations=[],a.animIdCounter=0,a.animRunning=!1},9729:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Circle=void 0;const n=r(4892),o=r(4723),i=r(5483),a=r(8871);class s extends o.Shape{_sceneFunc(e){e.beginPath(),e.arc(0,0,this.attrs.radius||0,0,2*Math.PI,!1),e.closePath(),e.fillStrokeShape(this)}getWidth(){return 2*this.radius()}getHeight(){return 2*this.radius()}setWidth(e){this.radius()!==e/2&&this.radius(e/2)}setHeight(e){this.radius()!==e/2&&this.radius(e/2)}}t.Circle=s,s.prototype._centroid=!0,s.prototype.className=\"Circle\",s.prototype._attrsAffectingSize=[\"radius\"],(0,a._registerNode)(s),n.Factory.addGetterSetter(s,\"radius\",0,(0,i.getNumberValidator)())},9805:(e,t)=>{\"use strict\";var r=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(\"object\"!=typeof r)throw new TypeError(r+\"must be non-object\");for(var o in r)n(r,o)&&(e[o]=r[o])}}return e},t.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var o={arraySet:function(e,t,r,n,o){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),o);else for(var i=0;i<n;i++)e[o+i]=t[r+i]},flattenChunks:function(e){var t,r,n,o,i,a;for(n=0,t=0,r=e.length;t<r;t++)n+=e[t].length;for(a=new Uint8Array(n),o=0,t=0,r=e.length;t<r;t++)i=e[t],a.set(i,o),o+=i.length;return a}},i={arraySet:function(e,t,r,n,o){for(var i=0;i<n;i++)e[o+i]=t[r+i]},flattenChunks:function(e){return[].concat.apply([],e)}};t.setTyped=function(e){e?(t.Buf8=Uint8Array,t.Buf16=Uint16Array,t.Buf32=Int32Array,t.assign(t,o)):(t.Buf8=Array,t.Buf16=Array,t.Buf32=Array,t.assign(t,i))},t.setTyped(r)},9869:(e,t,r)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.HitContext=t.SceneContext=t.Context=void 0;const n=r(4060),o=r(8871),i=[\"arc\",\"arcTo\",\"beginPath\",\"bezierCurveTo\",\"clearRect\",\"clip\",\"closePath\",\"createLinearGradient\",\"createPattern\",\"createRadialGradient\",\"drawImage\",\"ellipse\",\"fill\",\"fillText\",\"getImageData\",\"createImageData\",\"lineTo\",\"moveTo\",\"putImageData\",\"quadraticCurveTo\",\"rect\",\"roundRect\",\"restore\",\"rotate\",\"save\",\"scale\",\"setLineDash\",\"setTransform\",\"stroke\",\"strokeText\",\"transform\",\"translate\"];class a{constructor(e){this.canvas=e,o.Konva.enableTrace&&(this.traceArr=[],this._enableTrace())}fillShape(e){e.fillEnabled()&&this._fill(e)}_fill(e){}strokeShape(e){e.hasStroke()&&this._stroke(e)}_stroke(e){}fillStrokeShape(e){e.attrs.fillAfterStrokeEnabled?(this.strokeShape(e),this.fillShape(e)):(this.fillShape(e),this.strokeShape(e))}getTrace(e,t){let r,o,i,a,s=this.traceArr,l=s.length,c=\"\";for(r=0;r<l;r++)o=s[r],i=o.method,i?(a=o.args,c+=i,e?c+=\"()\":n.Util._isArray(a[0])?c+=\"([\"+a.join(\",\")+\"])\":(t&&(a=a.map((e=>\"number\"==typeof e?Math.floor(e):e))),c+=\"(\"+a.join(\",\")+\")\")):(c+=o.property,e||(c+=\"=\"+o.val)),c+=\";\";return c}clearTrace(){this.traceArr=[]}_trace(e){let t,r=this.traceArr;r.push(e),t=r.length,t>=100&&r.shift()}reset(){const e=this.getCanvas().getPixelRatio();this.setTransform(1*e,0,0,1*e,0,0)}getCanvas(){return this.canvas}clear(e){const t=this.getCanvas();e?this.clearRect(e.x||0,e.y||0,e.width||0,e.height||0):this.clearRect(0,0,t.getWidth()/t.pixelRatio,t.getHeight()/t.pixelRatio)}_applyLineCap(e){const t=e.attrs.lineCap;t&&this.setAttr(\"lineCap\",t)}_applyOpacity(e){const t=e.getAbsoluteOpacity();1!==t&&this.setAttr(\"globalAlpha\",t)}_applyLineJoin(e){const t=e.attrs.lineJoin;t&&this.setAttr(\"lineJoin\",t)}setAttr(e,t){this._context[e]=t}arc(e,t,r,n,o,i){this._context.arc(e,t,r,n,o,i)}arcTo(e,t,r,n,o){this._context.arcTo(e,t,r,n,o)}beginPath(){this._context.beginPath()}bezierCurveTo(e,t,r,n,o,i){this._context.bezierCurveTo(e,t,r,n,o,i)}clearRect(e,t,r,n){this._context.clearRect(e,t,r,n)}clip(...e){this._context.clip.apply(this._context,e)}closePath(){this._context.closePath()}createImageData(e,t){const r=arguments;return 2===r.length?this._context.createImageData(e,t):1===r.length?this._context.createImageData(e):void 0}createLinearGradient(e,t,r,n){return this._context.createLinearGradient(e,t,r,n)}createPattern(e,t){return this._context.createPattern(e,t)}createRadialGradient(e,t,r,n,o,i){return this._context.createRadialGradient(e,t,r,n,o,i)}drawImage(e,t,r,n,o,i,a,s,l){const c=arguments,u=this._context;3===c.length?u.drawImage(e,t,r):5===c.length?u.drawImage(e,t,r,n,o):9===c.length&&u.drawImage(e,t,r,n,o,i,a,s,l)}ellipse(e,t,r,n,o,i,a,s){this._context.ellipse(e,t,r,n,o,i,a,s)}isPointInPath(e,t,r,n){return r?this._context.isPointInPath(r,e,t,n):this._context.isPointInPath(e,t,n)}fill(...e){this._context.fill.apply(this._context,e)}fillRect(e,t,r,n){this._context.fillRect(e,t,r,n)}strokeRect(e,t,r,n){this._context.strokeRect(e,t,r,n)}fillText(e,t,r,n){n?this._context.fillText(e,t,r,n):this._context.fillText(e,t,r)}measureText(e){return this._context.measureText(e)}getImageData(e,t,r,n){return this._context.getImageData(e,t,r,n)}lineTo(e,t){this._context.lineTo(e,t)}moveTo(e,t){this._context.moveTo(e,t)}rect(e,t,r,n){this._context.rect(e,t,r,n)}roundRect(e,t,r,n,o){this._context.roundRect(e,t,r,n,o)}putImageData(e,t,r){this._context.putImageData(e,t,r)}quadraticCurveTo(e,t,r,n){this._context.quadraticCurveTo(e,t,r,n)}restore(){this._context.restore()}rotate(e){this._context.rotate(e)}save(){this._context.save()}scale(e,t){this._context.scale(e,t)}setLineDash(e){this._context.setLineDash?this._context.setLineDash(e):\"mozDash\"in this._context?this._context.mozDash=e:\"webkitLineDash\"in this._context&&(this._context.webkitLineDash=e)}getLineDash(){return this._context.getLineDash()}setTransform(e,t,r,n,o,i){this._context.setTransform(e,t,r,n,o,i)}stroke(e){e?this._context.stroke(e):this._context.stroke()}strokeText(e,t,r,n){this._context.strokeText(e,t,r,n)}transform(e,t,r,n,o,i){this._context.transform(e,t,r,n,o,i)}translate(e,t){this._context.translate(e,t)}_enableTrace(){let e,t,r=this,o=i.length,a=this.setAttr;const s=function(e){let o,i=r[e];r[e]=function(){return t=function(e){const t=[],r=e.length,o=n.Util;for(let n=0;n<r;n++){let r=e[n];o._isNumber(r)?r=Math.round(1e3*r)/1e3:o._isString(r)||(r+=\"\"),t.push(r)}return t}(Array.prototype.slice.call(arguments,0)),o=i.apply(r,arguments),r._trace({method:e,args:t}),o}};for(e=0;e<o;e++)s(i[e]);r.setAttr=function(){a.apply(r,arguments);const e=arguments[0];let t=arguments[1];\"shadowOffsetX\"!==e&&\"shadowOffsetY\"!==e&&\"shadowBlur\"!==e||(t/=this.canvas.getPixelRatio()),r._trace({property:e,val:t})}}_applyGlobalCompositeOperation(e){const t=e.attrs.globalCompositeOperation;!t||\"source-over\"===t||this.setAttr(\"globalCompositeOperation\",t)}}t.Context=a,[\"fillStyle\",\"strokeStyle\",\"shadowColor\",\"shadowBlur\",\"shadowOffsetX\",\"shadowOffsetY\",\"letterSpacing\",\"lineCap\",\"lineDashOffset\",\"lineJoin\",\"lineWidth\",\"miterLimit\",\"direction\",\"font\",\"textAlign\",\"textBaseline\",\"globalAlpha\",\"globalCompositeOperation\",\"imageSmoothingEnabled\"].forEach((function(e){Object.defineProperty(a.prototype,e,{get(){return this._context[e]},set(t){this._context[e]=t}})})),t.SceneContext=class extends a{constructor(e,{willReadFrequently:t=!1}={}){super(e),this._context=e._canvas.getContext(\"2d\",{willReadFrequently:t})}_fillColor(e){const t=e.fill();this.setAttr(\"fillStyle\",t),e._fillFunc(this)}_fillPattern(e){this.setAttr(\"fillStyle\",e._getFillPattern()),e._fillFunc(this)}_fillLinearGradient(e){const t=e._getLinearGradient();t&&(this.setAttr(\"fillStyle\",t),e._fillFunc(this))}_fillRadialGradient(e){const t=e._getRadialGradient();t&&(this.setAttr(\"fillStyle\",t),e._fillFunc(this))}_fill(e){const t=e.fill(),r=e.getFillPriority();if(t&&\"color\"===r)return void this._fillColor(e);const n=e.getFillPatternImage();if(n&&\"pattern\"===r)return void this._fillPattern(e);const o=e.getFillLinearGradientColorStops();if(o&&\"linear-gradient\"===r)return void this._fillLinearGradient(e);const i=e.getFillRadialGradientColorStops();i&&\"radial-gradient\"===r?this._fillRadialGradient(e):t?this._fillColor(e):n?this._fillPattern(e):o?this._fillLinearGradient(e):i&&this._fillRadialGradient(e)}_strokeLinearGradient(e){const t=e.getStrokeLinearGradientStartPoint(),r=e.getStrokeLinearGradientEndPoint(),n=e.getStrokeLinearGradientColorStops(),o=this.createLinearGradient(t.x,t.y,r.x,r.y);if(n){for(let e=0;e<n.length;e+=2)o.addColorStop(n[e],n[e+1]);this.setAttr(\"strokeStyle\",o)}}_stroke(e){const t=e.dash(),r=e.getStrokeScaleEnabled();if(e.hasStroke()){if(!r){this.save();const e=this.getCanvas().getPixelRatio();this.setTransform(e,0,0,e,0,0)}this._applyLineCap(e),t&&e.dashEnabled()&&(this.setLineDash(t),this.setAttr(\"lineDashOffset\",e.dashOffset())),this.setAttr(\"lineWidth\",e.strokeWidth()),e.getShadowForStrokeEnabled()||this.setAttr(\"shadowColor\",\"rgba(0,0,0,0)\"),e.getStrokeLinearGradientColorStops()?this._strokeLinearGradient(e):this.setAttr(\"strokeStyle\",e.stroke()),e._strokeFunc(this),r||this.restore()}}_applyShadow(e){var t,r,n;const o=null!==(t=e.getShadowRGBA())&&void 0!==t?t:\"black\",i=null!==(r=e.getShadowBlur())&&void 0!==r?r:5,a=null!==(n=e.getShadowOffset())&&void 0!==n?n:{x:0,y:0},s=e.getAbsoluteScale(),l=this.canvas.getPixelRatio(),c=s.x*l,u=s.y*l;this.setAttr(\"shadowColor\",o),this.setAttr(\"shadowBlur\",i*Math.min(Math.abs(c),Math.abs(u))),this.setAttr(\"shadowOffsetX\",a.x*c),this.setAttr(\"shadowOffsetY\",a.y*u)}},t.HitContext=class extends a{constructor(e){super(e),this._context=e._canvas.getContext(\"2d\",{willReadFrequently:!0})}_fill(e){this.save(),this.setAttr(\"fillStyle\",e.colorKey),e._fillFuncHit(this),this.restore()}strokeShape(e){e.hasHitStroke()&&this._stroke(e)}_stroke(e){if(e.hasHitStroke()){const t=e.getStrokeScaleEnabled();if(!t){this.save();const e=this.getCanvas().getPixelRatio();this.setTransform(e,0,0,e,0,0)}this._applyLineCap(e);const r=e.hitStrokeWidth(),n=\"auto\"===r?e.strokeWidth():r;this.setAttr(\"lineWidth\",n),this.setAttr(\"strokeStyle\",e.colorKey),e._strokeFuncHit(this),t||this.restore()}}}},9982:(e,t,r)=>{\"use strict\";e.exports=r(7463)}},n={};function o(e){var t=n[e];if(void 0!==t)return t.exports;var i=n[e]={id:e,exports:{}};return r[e].call(i.exports,i,i.exports,o),i.exports}return o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,o.t=function(r,n){if(1&n&&(r=this(r)),8&n)return r;if(\"object\"==typeof r&&r){if(4&n&&r.__esModule)return r;if(16&n&&\"function\"==typeof r.then)return r}var i=Object.create(null);o.r(i);var a={};e=e||[null,t({}),t([]),t(t)];for(var s=2&n&&r;\"object\"==typeof s&&!~e.indexOf(s);s=t(s))Object.getOwnPropertyNames(s).forEach((e=>a[e]=()=>r[e]));return a.default=()=>r,o.d(i,a),i},o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},(()=>{var e;o.g.importScripts&&(e=o.g.location+\"\");var t=o.g.document;if(!e&&t&&(t.currentScript&&\"SCRIPT\"===t.currentScript.tagName.toUpperCase()&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName(\"script\");if(r.length)for(var n=r.length-1;n>-1&&(!e||!/^http(s?):/.test(e));)e=r[n--].src}if(!e)throw new Error(\"Automatic publicPath is not supported in this browser\");e=e.replace(/^blob:/,\"\").replace(/#.*$/,\"\").replace(/\\?.*$/,\"\").replace(/\\/[^\\/]+$/,\"/\"),o.p=e})(),o.nc=void 0,(()=>{\"use strict\";var e=o(5072),t=o.n(e),r=o(7825),n=o.n(r),i=o(7659),a=o.n(i),s=o(5056),l=o.n(s),c=o(540),u=o.n(c),d=o(1113),f=o.n(d),h=o(8307),p={};p.styleTagTransform=f(),p.setAttributes=l(),p.insert=a().bind(null,\"head\"),p.domAPI=n(),p.insertStyleElement=u(),t()(h.A,p),h.A&&h.A.locals&&h.A.locals;var m=o(6540),g=o.t(m,2),v=o(5338);const b=e=>\"string\"==typeof e,y=()=>{let e,t;const r=new Promise(((r,n)=>{e=r,t=n}));return r.resolve=e,r.reject=t,r},w=e=>null==e?\"\":\"\"+e,x=/###/g,S=e=>e&&e.indexOf(\"###\")>-1?e.replace(x,\".\"):e,C=e=>!e||b(e),k=(e,t,r)=>{const n=b(t)?t.split(\".\"):t;let o=0;for(;o<n.length-1;){if(C(e))return{};const t=S(n[o]);!e[t]&&r&&(e[t]=new r),e=Object.prototype.hasOwnProperty.call(e,t)?e[t]:{},++o}return C(e)?{}:{obj:e,k:S(n[o])}},E=(e,t,r)=>{const{obj:n,k:o}=k(e,t,Object);if(void 0!==n||1===t.length)return void(n[o]=r);let i=t[t.length-1],a=t.slice(0,t.length-1),s=k(e,a,Object);for(;void 0===s.obj&&a.length;)i=`${a[a.length-1]}.${i}`,a=a.slice(0,a.length-1),s=k(e,a,Object),s&&s.obj&&void 0!==s.obj[`${s.k}.${i}`]&&(s.obj=void 0);s.obj[`${s.k}.${i}`]=r},O=(e,t)=>{const{obj:r,k:n}=k(e,t);if(r)return r[n]},A=(e,t,r)=>{for(const n in t)\"__proto__\"!==n&&\"constructor\"!==n&&(n in e?b(e[n])||e[n]instanceof String||b(t[n])||t[n]instanceof String?r&&(e[n]=t[n]):A(e[n],t[n],r):e[n]=t[n]);return e},T=e=>e.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\"\\\\$&\");var j={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\",\"/\":\"&#x2F;\"};const P=e=>b(e)?e.replace(/[&<>\"'\\/]/g,(e=>j[e])):e,M=[\" \",\",\",\"?\",\"!\",\";\"],R=new class{constructor(e){this.capacity=e,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(e){const t=this.regExpMap.get(e);if(void 0!==t)return t;const r=new RegExp(e);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(e,r),this.regExpQueue.push(e),r}}(20),_=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\".\";if(!e)return;if(e[t])return e[t];const n=t.split(r);let o=e;for(let e=0;e<n.length;){if(!o||\"object\"!=typeof o)return;let t,i=\"\";for(let a=e;a<n.length;++a)if(a!==e&&(i+=r),i+=n[a],t=o[i],void 0!==t){if([\"string\",\"number\",\"boolean\"].indexOf(typeof t)>-1&&a<n.length-1)continue;e+=a-e+1;break}o=t}return o},I=e=>e&&e.replace(\"_\",\"-\"),N={type:\"logger\",log(e){this.output(\"log\",e)},warn(e){this.output(\"warn\",e)},error(e){this.output(\"error\",e)},output(e,t){console&&console[e]&&console[e].apply(console,t)}};class F{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.init(e,t)}init(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.prefix=t.prefix||\"i18next:\",this.logger=e||N,this.options=t,this.debug=t.debug}log(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return this.forward(t,\"log\",\"\",!0)}warn(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return this.forward(t,\"warn\",\"\",!0)}error(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return this.forward(t,\"error\",\"\")}deprecate(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return this.forward(t,\"warn\",\"WARNING DEPRECATED: \",!0)}forward(e,t,r,n){return n&&!this.debug?null:(b(e[0])&&(e[0]=`${r}${this.prefix} ${e[0]}`),this.logger[t](e))}create(e){return new F(this.logger,{prefix:`${this.prefix}:${e}:`,...this.options})}clone(e){return(e=e||this.options).prefix=e.prefix||this.prefix,new F(this.logger,e)}}var D=new F;class B{constructor(){this.observers={}}on(e,t){return e.split(\" \").forEach((e=>{this.observers[e]||(this.observers[e]=new Map);const r=this.observers[e].get(t)||0;this.observers[e].set(t,r+1)})),this}off(e,t){this.observers[e]&&(t?this.observers[e].delete(t):delete this.observers[e])}emit(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];this.observers[e]&&Array.from(this.observers[e].entries()).forEach((e=>{let[t,n]=e;for(let e=0;e<n;e++)t(...r)})),this.observers[\"*\"]&&Array.from(this.observers[\"*\"].entries()).forEach((t=>{let[n,o]=t;for(let t=0;t<o;t++)n.apply(n,[e,...r])}))}}class L extends B{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{ns:[\"translation\"],defaultNS:\"translation\"};super(),this.data=e||{},this.options=t,void 0===this.options.keySeparator&&(this.options.keySeparator=\".\"),void 0===this.options.ignoreJSONStructure&&(this.options.ignoreJSONStructure=!0)}addNamespaces(e){this.options.ns.indexOf(e)<0&&this.options.ns.push(e)}removeNamespaces(e){const t=this.options.ns.indexOf(e);t>-1&&this.options.ns.splice(t,1)}getResource(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};const o=void 0!==n.keySeparator?n.keySeparator:this.options.keySeparator,i=void 0!==n.ignoreJSONStructure?n.ignoreJSONStructure:this.options.ignoreJSONStructure;let a;e.indexOf(\".\")>-1?a=e.split(\".\"):(a=[e,t],r&&(Array.isArray(r)?a.push(...r):b(r)&&o?a.push(...r.split(o)):a.push(r)));const s=O(this.data,a);return!s&&!t&&!r&&e.indexOf(\".\")>-1&&(e=a[0],t=a[1],r=a.slice(2).join(\".\")),!s&&i&&b(r)?_(this.data&&this.data[e]&&this.data[e][t],r,o):s}addResource(e,t,r,n){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{silent:!1};const i=void 0!==o.keySeparator?o.keySeparator:this.options.keySeparator;let a=[e,t];r&&(a=a.concat(i?r.split(i):r)),e.indexOf(\".\")>-1&&(a=e.split(\".\"),n=t,t=a[1]),this.addNamespaces(t),E(this.data,a,n),o.silent||this.emit(\"added\",e,t,r,n)}addResources(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{silent:!1};for(const n in r)(b(r[n])||Array.isArray(r[n]))&&this.addResource(e,t,n,r[n],{silent:!0});n.silent||this.emit(\"added\",e,t,r)}addResourceBundle(e,t,r,n,o){let i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{silent:!1,skipCopy:!1},a=[e,t];e.indexOf(\".\")>-1&&(a=e.split(\".\"),n=r,r=t,t=a[1]),this.addNamespaces(t);let s=O(this.data,a)||{};i.skipCopy||(r=JSON.parse(JSON.stringify(r))),n?A(s,r,o):s={...s,...r},E(this.data,a,s),i.silent||this.emit(\"added\",e,t,r)}removeResourceBundle(e,t){this.hasResourceBundle(e,t)&&delete this.data[e][t],this.removeNamespaces(t),this.emit(\"removed\",e,t)}hasResourceBundle(e,t){return void 0!==this.getResource(e,t)}getResourceBundle(e,t){return t||(t=this.options.defaultNS),\"v1\"===this.options.compatibilityAPI?{...this.getResource(e,t)}:this.getResource(e,t)}getDataByLanguage(e){return this.data[e]}hasLanguageSomeTranslations(e){const t=this.getDataByLanguage(e);return!!(t&&Object.keys(t)||[]).find((e=>t[e]&&Object.keys(t[e]).length>0))}toJSON(){return this.data}}var z={processors:{},addPostProcessor(e){this.processors[e.name]=e},handle(e,t,r,n,o){return e.forEach((e=>{this.processors[e]&&(t=this.processors[e].process(t,r,n,o))})),t}};const H={};class U extends B{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(),((e,t,r)=>{[\"resourceStore\",\"languageUtils\",\"pluralResolver\",\"interpolator\",\"backendConnector\",\"i18nFormat\",\"utils\"].forEach((e=>{t[e]&&(r[e]=t[e])}))})(0,e,this),this.options=t,void 0===this.options.keySeparator&&(this.options.keySeparator=\".\"),this.logger=D.create(\"translator\")}changeLanguage(e){e&&(this.language=e)}exists(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{interpolation:{}};if(null==e)return!1;const r=this.resolve(e,t);return r&&void 0!==r.res}extractFromKey(e,t){let r=void 0!==t.nsSeparator?t.nsSeparator:this.options.nsSeparator;void 0===r&&(r=\":\");const n=void 0!==t.keySeparator?t.keySeparator:this.options.keySeparator;let o=t.ns||this.options.defaultNS||[];const i=r&&e.indexOf(r)>-1,a=!(this.options.userDefinedKeySeparator||t.keySeparator||this.options.userDefinedNsSeparator||t.nsSeparator||((e,t,r)=>{t=t||\"\",r=r||\"\";const n=M.filter((e=>t.indexOf(e)<0&&r.indexOf(e)<0));if(0===n.length)return!0;const o=R.getRegExp(`(${n.map((e=>\"?\"===e?\"\\\\?\":e)).join(\"|\")})`);let i=!o.test(e);if(!i){const t=e.indexOf(r);t>0&&!o.test(e.substring(0,t))&&(i=!0)}return i})(e,r,n));if(i&&!a){const t=e.match(this.interpolator.nestingRegexp);if(t&&t.length>0)return{key:e,namespaces:b(o)?[o]:o};const i=e.split(r);(r!==n||r===n&&this.options.ns.indexOf(i[0])>-1)&&(o=i.shift()),e=i.join(n)}return{key:e,namespaces:b(o)?[o]:o}}translate(e,t,r){if(\"object\"!=typeof t&&this.options.overloadTranslationOptionHandler&&(t=this.options.overloadTranslationOptionHandler(arguments)),\"object\"==typeof t&&(t={...t}),t||(t={}),null==e)return\"\";Array.isArray(e)||(e=[String(e)]);const n=void 0!==t.returnDetails?t.returnDetails:this.options.returnDetails,o=void 0!==t.keySeparator?t.keySeparator:this.options.keySeparator,{key:i,namespaces:a}=this.extractFromKey(e[e.length-1],t),s=a[a.length-1],l=t.lng||this.language,c=t.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(l&&\"cimode\"===l.toLowerCase()){if(c){const e=t.nsSeparator||this.options.nsSeparator;return n?{res:`${s}${e}${i}`,usedKey:i,exactUsedKey:i,usedLng:l,usedNS:s,usedParams:this.getUsedParamsDetails(t)}:`${s}${e}${i}`}return n?{res:i,usedKey:i,exactUsedKey:i,usedLng:l,usedNS:s,usedParams:this.getUsedParamsDetails(t)}:i}const u=this.resolve(e,t);let d=u&&u.res;const f=u&&u.usedKey||i,h=u&&u.exactUsedKey||i,p=Object.prototype.toString.apply(d),m=void 0!==t.joinArrays?t.joinArrays:this.options.joinArrays,g=!this.i18nFormat||this.i18nFormat.handleAsObject,v=!b(d)&&\"boolean\"!=typeof d&&\"number\"!=typeof d;if(!(g&&d&&v&&[\"[object Number]\",\"[object Function]\",\"[object RegExp]\"].indexOf(p)<0)||b(m)&&Array.isArray(d))if(g&&b(m)&&Array.isArray(d))d=d.join(m),d&&(d=this.extendTranslation(d,e,t,r));else{let n=!1,a=!1;const c=void 0!==t.count&&!b(t.count),f=U.hasDefaultValue(t),h=c?this.pluralResolver.getSuffix(l,t.count,t):\"\",p=t.ordinal&&c?this.pluralResolver.getSuffix(l,t.count,{ordinal:!1}):\"\",m=c&&!t.ordinal&&0===t.count&&this.pluralResolver.shouldUseIntlApi(),g=m&&t[`defaultValue${this.options.pluralSeparator}zero`]||t[`defaultValue${h}`]||t[`defaultValue${p}`]||t.defaultValue;!this.isValidLookup(d)&&f&&(n=!0,d=g),this.isValidLookup(d)||(a=!0,d=i);const v=(t.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&a?void 0:d,y=f&&g!==d&&this.options.updateMissing;if(a||n||y){if(this.logger.log(y?\"updateKey\":\"missingKey\",l,s,i,y?g:d),o){const e=this.resolve(i,{...t,keySeparator:!1});e&&e.res&&this.logger.warn(\"Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.\")}let e=[];const r=this.languageUtils.getFallbackCodes(this.options.fallbackLng,t.lng||this.language);if(\"fallback\"===this.options.saveMissingTo&&r&&r[0])for(let t=0;t<r.length;t++)e.push(r[t]);else\"all\"===this.options.saveMissingTo?e=this.languageUtils.toResolveHierarchy(t.lng||this.language):e.push(t.lng||this.language);const n=(e,r,n)=>{const o=f&&n!==d?n:v;this.options.missingKeyHandler?this.options.missingKeyHandler(e,s,r,o,y,t):this.backendConnector&&this.backendConnector.saveMissing&&this.backendConnector.saveMissing(e,s,r,o,y,t),this.emit(\"missingKey\",e,s,r,d)};this.options.saveMissing&&(this.options.saveMissingPlurals&&c?e.forEach((e=>{const r=this.pluralResolver.getSuffixes(e,t);m&&t[`defaultValue${this.options.pluralSeparator}zero`]&&r.indexOf(`${this.options.pluralSeparator}zero`)<0&&r.push(`${this.options.pluralSeparator}zero`),r.forEach((r=>{n([e],i+r,t[`defaultValue${r}`]||g)}))})):n(e,i,g))}d=this.extendTranslation(d,e,t,u,r),a&&d===i&&this.options.appendNamespaceToMissingKey&&(d=`${s}:${i}`),(a||n)&&this.options.parseMissingKeyHandler&&(d=\"v1\"!==this.options.compatibilityAPI?this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${s}:${i}`:i,n?d:void 0):this.options.parseMissingKeyHandler(d))}else{if(!t.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn(\"accessing an object - but returnObjects options is not enabled!\");const e=this.options.returnedObjectHandler?this.options.returnedObjectHandler(f,d,{...t,ns:a}):`key '${i} (${this.language})' returned an object instead of string.`;return n?(u.res=e,u.usedParams=this.getUsedParamsDetails(t),u):e}if(o){const e=Array.isArray(d),r=e?[]:{},n=e?h:f;for(const e in d)if(Object.prototype.hasOwnProperty.call(d,e)){const i=`${n}${o}${e}`;r[e]=this.translate(i,{...t,joinArrays:!1,ns:a}),r[e]===i&&(r[e]=d[e])}d=r}}return n?(u.res=d,u.usedParams=this.getUsedParamsDetails(t),u):d}extendTranslation(e,t,r,n,o){var i=this;if(this.i18nFormat&&this.i18nFormat.parse)e=this.i18nFormat.parse(e,{...this.options.interpolation.defaultVariables,...r},r.lng||this.language||n.usedLng,n.usedNS,n.usedKey,{resolved:n});else if(!r.skipInterpolation){r.interpolation&&this.interpolator.init({...r,interpolation:{...this.options.interpolation,...r.interpolation}});const a=b(e)&&(r&&r.interpolation&&void 0!==r.interpolation.skipOnVariables?r.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let s;if(a){const t=e.match(this.interpolator.nestingRegexp);s=t&&t.length}let l=r.replace&&!b(r.replace)?r.replace:r;if(this.options.interpolation.defaultVariables&&(l={...this.options.interpolation.defaultVariables,...l}),e=this.interpolator.interpolate(e,l,r.lng||this.language||n.usedLng,r),a){const t=e.match(this.interpolator.nestingRegexp);s<(t&&t.length)&&(r.nest=!1)}!r.lng&&\"v1\"!==this.options.compatibilityAPI&&n&&n.res&&(r.lng=this.language||n.usedLng),!1!==r.nest&&(e=this.interpolator.nest(e,(function(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];return o&&o[0]===n[0]&&!r.context?(i.logger.warn(`It seems you are nesting recursively key: ${n[0]} in key: ${t[0]}`),null):i.translate(...n,t)}),r)),r.interpolation&&this.interpolator.reset()}const a=r.postProcess||this.options.postProcess,s=b(a)?[a]:a;return null!=e&&s&&s.length&&!1!==r.applyPostProcessor&&(e=z.handle(s,e,t,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...n,usedParams:this.getUsedParamsDetails(r)},...r}:r,this)),e}resolve(e){let t,r,n,o,i,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return b(e)&&(e=[e]),e.forEach((e=>{if(this.isValidLookup(t))return;const s=this.extractFromKey(e,a),l=s.key;r=l;let c=s.namespaces;this.options.fallbackNS&&(c=c.concat(this.options.fallbackNS));const u=void 0!==a.count&&!b(a.count),d=u&&!a.ordinal&&0===a.count&&this.pluralResolver.shouldUseIntlApi(),f=void 0!==a.context&&(b(a.context)||\"number\"==typeof a.context)&&\"\"!==a.context,h=a.lngs?a.lngs:this.languageUtils.toResolveHierarchy(a.lng||this.language,a.fallbackLng);c.forEach((e=>{this.isValidLookup(t)||(i=e,!H[`${h[0]}-${e}`]&&this.utils&&this.utils.hasLoadedNamespace&&!this.utils.hasLoadedNamespace(i)&&(H[`${h[0]}-${e}`]=!0,this.logger.warn(`key \"${r}\" for languages \"${h.join(\", \")}\" won't get resolved as namespace \"${i}\" was not yet loaded`,\"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!\")),h.forEach((r=>{if(this.isValidLookup(t))return;o=r;const i=[l];if(this.i18nFormat&&this.i18nFormat.addLookupKeys)this.i18nFormat.addLookupKeys(i,l,r,e,a);else{let e;u&&(e=this.pluralResolver.getSuffix(r,a.count,a));const t=`${this.options.pluralSeparator}zero`,n=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(u&&(i.push(l+e),a.ordinal&&0===e.indexOf(n)&&i.push(l+e.replace(n,this.options.pluralSeparator)),d&&i.push(l+t)),f){const r=`${l}${this.options.contextSeparator}${a.context}`;i.push(r),u&&(i.push(r+e),a.ordinal&&0===e.indexOf(n)&&i.push(r+e.replace(n,this.options.pluralSeparator)),d&&i.push(r+t))}}let s;for(;s=i.pop();)this.isValidLookup(t)||(n=s,t=this.getResource(r,e,s,a))})))}))})),{res:t,usedKey:r,exactUsedKey:n,usedLng:o,usedNS:i}}isValidLookup(e){return!(void 0===e||!this.options.returnNull&&null===e||!this.options.returnEmptyString&&\"\"===e)}getResource(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(e,t,r,n):this.resourceStore.getResource(e,t,r,n)}getUsedParamsDetails(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=[\"defaultValue\",\"ordinal\",\"context\",\"replace\",\"lng\",\"lngs\",\"fallbackLng\",\"ns\",\"keySeparator\",\"nsSeparator\",\"returnObjects\",\"returnDetails\",\"joinArrays\",\"postProcess\",\"interpolation\"],r=e.replace&&!b(e.replace);let n=r?e.replace:e;if(r&&void 0!==e.count&&(n.count=e.count),this.options.interpolation.defaultVariables&&(n={...this.options.interpolation.defaultVariables,...n}),!r){n={...n};for(const e of t)delete n[e]}return n}static hasDefaultValue(e){for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t)&&\"defaultValue\"===t.substring(0,12)&&void 0!==e[t])return!0;return!1}}const V=e=>e.charAt(0).toUpperCase()+e.slice(1);class W{constructor(e){this.options=e,this.supportedLngs=this.options.supportedLngs||!1,this.logger=D.create(\"languageUtils\")}getScriptPartFromCode(e){if(!(e=I(e))||e.indexOf(\"-\")<0)return null;const t=e.split(\"-\");return 2===t.length?null:(t.pop(),\"x\"===t[t.length-1].toLowerCase()?null:this.formatLanguageCode(t.join(\"-\")))}getLanguagePartFromCode(e){if(!(e=I(e))||e.indexOf(\"-\")<0)return e;const t=e.split(\"-\");return this.formatLanguageCode(t[0])}formatLanguageCode(e){if(b(e)&&e.indexOf(\"-\")>-1){if(\"undefined\"!=typeof Intl&&void 0!==Intl.getCanonicalLocales)try{let t=Intl.getCanonicalLocales(e)[0];if(t&&this.options.lowerCaseLng&&(t=t.toLowerCase()),t)return t}catch(e){}const t=[\"hans\",\"hant\",\"latn\",\"cyrl\",\"cans\",\"mong\",\"arab\"];let r=e.split(\"-\");return this.options.lowerCaseLng?r=r.map((e=>e.toLowerCase())):2===r.length?(r[0]=r[0].toLowerCase(),r[1]=r[1].toUpperCase(),t.indexOf(r[1].toLowerCase())>-1&&(r[1]=V(r[1].toLowerCase()))):3===r.length&&(r[0]=r[0].toLowerCase(),2===r[1].length&&(r[1]=r[1].toUpperCase()),\"sgn\"!==r[0]&&2===r[2].length&&(r[2]=r[2].toUpperCase()),t.indexOf(r[1].toLowerCase())>-1&&(r[1]=V(r[1].toLowerCase())),t.indexOf(r[2].toLowerCase())>-1&&(r[2]=V(r[2].toLowerCase()))),r.join(\"-\")}return this.options.cleanCode||this.options.lowerCaseLng?e.toLowerCase():e}isSupportedCode(e){return(\"languageOnly\"===this.options.load||this.options.nonExplicitSupportedLngs)&&(e=this.getLanguagePartFromCode(e)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(e)>-1}getBestMatchFromCodes(e){if(!e)return null;let t;return e.forEach((e=>{if(t)return;const r=this.formatLanguageCode(e);this.options.supportedLngs&&!this.isSupportedCode(r)||(t=r)})),!t&&this.options.supportedLngs&&e.forEach((e=>{if(t)return;const r=this.getLanguagePartFromCode(e);if(this.isSupportedCode(r))return t=r;t=this.options.supportedLngs.find((e=>e===r?e:e.indexOf(\"-\")<0&&r.indexOf(\"-\")<0?void 0:e.indexOf(\"-\")>0&&r.indexOf(\"-\")<0&&e.substring(0,e.indexOf(\"-\"))===r||0===e.indexOf(r)&&r.length>1?e:void 0))})),t||(t=this.getFallbackCodes(this.options.fallbackLng)[0]),t}getFallbackCodes(e,t){if(!e)return[];if(\"function\"==typeof e&&(e=e(t)),b(e)&&(e=[e]),Array.isArray(e))return e;if(!t)return e.default||[];let r=e[t];return r||(r=e[this.getScriptPartFromCode(t)]),r||(r=e[this.formatLanguageCode(t)]),r||(r=e[this.getLanguagePartFromCode(t)]),r||(r=e.default),r||[]}toResolveHierarchy(e,t){const r=this.getFallbackCodes(t||this.options.fallbackLng||[],e),n=[],o=e=>{e&&(this.isSupportedCode(e)?n.push(e):this.logger.warn(`rejecting language code not found in supportedLngs: ${e}`))};return b(e)&&(e.indexOf(\"-\")>-1||e.indexOf(\"_\")>-1)?(\"languageOnly\"!==this.options.load&&o(this.formatLanguageCode(e)),\"languageOnly\"!==this.options.load&&\"currentOnly\"!==this.options.load&&o(this.getScriptPartFromCode(e)),\"currentOnly\"!==this.options.load&&o(this.getLanguagePartFromCode(e))):b(e)&&o(this.formatLanguageCode(e)),r.forEach((e=>{n.indexOf(e)<0&&o(this.formatLanguageCode(e))})),n}}let G=[{lngs:[\"ach\",\"ak\",\"am\",\"arn\",\"br\",\"fil\",\"gun\",\"ln\",\"mfe\",\"mg\",\"mi\",\"oc\",\"pt\",\"pt-BR\",\"tg\",\"tl\",\"ti\",\"tr\",\"uz\",\"wa\"],nr:[1,2],fc:1},{lngs:[\"af\",\"an\",\"ast\",\"az\",\"bg\",\"bn\",\"ca\",\"da\",\"de\",\"dev\",\"el\",\"en\",\"eo\",\"es\",\"et\",\"eu\",\"fi\",\"fo\",\"fur\",\"fy\",\"gl\",\"gu\",\"ha\",\"hi\",\"hu\",\"hy\",\"ia\",\"it\",\"kk\",\"kn\",\"ku\",\"lb\",\"mai\",\"ml\",\"mn\",\"mr\",\"nah\",\"nap\",\"nb\",\"ne\",\"nl\",\"nn\",\"no\",\"nso\",\"pa\",\"pap\",\"pms\",\"ps\",\"pt-PT\",\"rm\",\"sco\",\"se\",\"si\",\"so\",\"son\",\"sq\",\"sv\",\"sw\",\"ta\",\"te\",\"tk\",\"ur\",\"yo\"],nr:[1,2],fc:2},{lngs:[\"ay\",\"bo\",\"cgg\",\"fa\",\"ht\",\"id\",\"ja\",\"jbo\",\"ka\",\"km\",\"ko\",\"ky\",\"lo\",\"ms\",\"sah\",\"su\",\"th\",\"tt\",\"ug\",\"vi\",\"wo\",\"zh\"],nr:[1],fc:3},{lngs:[\"be\",\"bs\",\"cnr\",\"dz\",\"hr\",\"ru\",\"sr\",\"uk\"],nr:[1,2,5],fc:4},{lngs:[\"ar\"],nr:[0,1,2,3,11,100],fc:5},{lngs:[\"cs\",\"sk\"],nr:[1,2,5],fc:6},{lngs:[\"csb\",\"pl\"],nr:[1,2,5],fc:7},{lngs:[\"cy\"],nr:[1,2,3,8],fc:8},{lngs:[\"fr\"],nr:[1,2],fc:9},{lngs:[\"ga\"],nr:[1,2,3,7,11],fc:10},{lngs:[\"gd\"],nr:[1,2,3,20],fc:11},{lngs:[\"is\"],nr:[1,2],fc:12},{lngs:[\"jv\"],nr:[0,1],fc:13},{lngs:[\"kw\"],nr:[1,2,3,4],fc:14},{lngs:[\"lt\"],nr:[1,2,10],fc:15},{lngs:[\"lv\"],nr:[1,2,0],fc:16},{lngs:[\"mk\"],nr:[1,2],fc:17},{lngs:[\"mnk\"],nr:[0,1,2],fc:18},{lngs:[\"mt\"],nr:[1,2,11,20],fc:19},{lngs:[\"or\"],nr:[2,1],fc:2},{lngs:[\"ro\"],nr:[1,2,20],fc:20},{lngs:[\"sl\"],nr:[5,1,2,3],fc:21},{lngs:[\"he\",\"iw\"],nr:[1,2,20,21],fc:22}],q={1:e=>Number(e>1),2:e=>Number(1!=e),3:e=>0,4:e=>Number(e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2),5:e=>Number(0==e?0:1==e?1:2==e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5),6:e=>Number(1==e?0:e>=2&&e<=4?1:2),7:e=>Number(1==e?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2),8:e=>Number(1==e?0:2==e?1:8!=e&&11!=e?2:3),9:e=>Number(e>=2),10:e=>Number(1==e?0:2==e?1:e<7?2:e<11?3:4),11:e=>Number(1==e||11==e?0:2==e||12==e?1:e>2&&e<20?2:3),12:e=>Number(e%10!=1||e%100==11),13:e=>Number(0!==e),14:e=>Number(1==e?0:2==e?1:3==e?2:3),15:e=>Number(e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2),16:e=>Number(e%10==1&&e%100!=11?0:0!==e?1:2),17:e=>Number(1==e||e%10==1&&e%100!=11?0:1),18:e=>Number(0==e?0:1==e?1:2),19:e=>Number(1==e?0:0==e||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3),20:e=>Number(1==e?0:0==e||e%100>0&&e%100<20?1:2),21:e=>Number(e%100==1?1:e%100==2?2:e%100==3||e%100==4?3:0),22:e=>Number(1==e?0:2==e?1:(e<0||e>10)&&e%10==0?2:3)};const K=[\"v1\",\"v2\",\"v3\"],X=[\"v4\"],Y={zero:0,one:1,two:2,few:3,many:4,other:5};class ${constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.languageUtils=e,this.options=t,this.logger=D.create(\"pluralResolver\"),this.options.compatibilityJSON&&!X.includes(this.options.compatibilityJSON)||\"undefined\"!=typeof Intl&&Intl.PluralRules||(this.options.compatibilityJSON=\"v3\",this.logger.error(\"Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.\")),this.rules=(()=>{const e={};return G.forEach((t=>{t.lngs.forEach((r=>{e[r]={numbers:t.nr,plurals:q[t.fc]}}))})),e})(),this.pluralRulesCache={}}addRule(e,t){this.rules[e]=t}clearCache(){this.pluralRulesCache={}}getRule(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.shouldUseIntlApi()){const r=I(\"dev\"===e?\"en\":e),n=t.ordinal?\"ordinal\":\"cardinal\",o=JSON.stringify({cleanedCode:r,type:n});if(o in this.pluralRulesCache)return this.pluralRulesCache[o];let i;try{i=new Intl.PluralRules(r,{type:n})}catch(r){if(!e.match(/-|_/))return;const n=this.languageUtils.getLanguagePartFromCode(e);i=this.getRule(n,t)}return this.pluralRulesCache[o]=i,i}return this.rules[e]||this.rules[this.languageUtils.getLanguagePartFromCode(e)]}needsPlural(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=this.getRule(e,t);return this.shouldUseIntlApi()?r&&r.resolvedOptions().pluralCategories.length>1:r&&r.numbers.length>1}getPluralFormsOfKey(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.getSuffixes(e,r).map((e=>`${t}${e}`))}getSuffixes(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=this.getRule(e,t);return r?this.shouldUseIntlApi()?r.resolvedOptions().pluralCategories.sort(((e,t)=>Y[e]-Y[t])).map((e=>`${this.options.prepend}${t.ordinal?`ordinal${this.options.prepend}`:\"\"}${e}`)):r.numbers.map((r=>this.getSuffix(e,r,t))):[]}getSuffix(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const n=this.getRule(e,r);return n?this.shouldUseIntlApi()?`${this.options.prepend}${r.ordinal?`ordinal${this.options.prepend}`:\"\"}${n.select(t)}`:this.getSuffixRetroCompatible(n,t):(this.logger.warn(`no plural rule found for: ${e}`),\"\")}getSuffixRetroCompatible(e,t){const r=e.noAbs?e.plurals(t):e.plurals(Math.abs(t));let n=e.numbers[r];this.options.simplifyPluralSuffix&&2===e.numbers.length&&1===e.numbers[0]&&(2===n?n=\"plural\":1===n&&(n=\"\"));const o=()=>this.options.prepend&&n.toString()?this.options.prepend+n.toString():n.toString();return\"v1\"===this.options.compatibilityJSON?1===n?\"\":\"number\"==typeof n?`_plural_${n.toString()}`:o():\"v2\"===this.options.compatibilityJSON||this.options.simplifyPluralSuffix&&2===e.numbers.length&&1===e.numbers[0]?o():this.options.prepend&&r.toString()?this.options.prepend+r.toString():r.toString()}shouldUseIntlApi(){return!K.includes(this.options.compatibilityJSON)}}const Z=function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\".\",o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=((e,t,r)=>{const n=O(e,r);return void 0!==n?n:O(t,r)})(e,t,r);return!i&&o&&b(r)&&(i=_(e,r,n),void 0===i&&(i=_(t,r,n))),i},Q=e=>e.replace(/\\$/g,\"$$$$\");class J{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.logger=D.create(\"interpolator\"),this.options=e,this.format=e.interpolation&&e.interpolation.format||(e=>e),this.init(e)}init(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e.interpolation||(e.interpolation={escapeValue:!0});const{escape:t,escapeValue:r,useRawValueToEscape:n,prefix:o,prefixEscaped:i,suffix:a,suffixEscaped:s,formatSeparator:l,unescapeSuffix:c,unescapePrefix:u,nestingPrefix:d,nestingPrefixEscaped:f,nestingSuffix:h,nestingSuffixEscaped:p,nestingOptionsSeparator:m,maxReplaces:g,alwaysFormat:v}=e.interpolation;this.escape=void 0!==t?t:P,this.escapeValue=void 0===r||r,this.useRawValueToEscape=void 0!==n&&n,this.prefix=o?T(o):i||\"{{\",this.suffix=a?T(a):s||\"}}\",this.formatSeparator=l||\",\",this.unescapePrefix=c?\"\":u||\"-\",this.unescapeSuffix=this.unescapePrefix?\"\":c||\"\",this.nestingPrefix=d?T(d):f||T(\"$t(\"),this.nestingSuffix=h?T(h):p||T(\")\"),this.nestingOptionsSeparator=m||\",\",this.maxReplaces=g||1e3,this.alwaysFormat=void 0!==v&&v,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const e=(e,t)=>e&&e.source===t?(e.lastIndex=0,e):new RegExp(t,\"g\");this.regexp=e(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=e(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=e(this.nestingRegexp,`${this.nestingPrefix}(.+?)${this.nestingSuffix}`)}interpolate(e,t,r,n){let o,i,a;const s=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},l=e=>{if(e.indexOf(this.formatSeparator)<0){const o=Z(t,s,e,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(o,void 0,r,{...n,...t,interpolationkey:e}):o}const o=e.split(this.formatSeparator),i=o.shift().trim(),a=o.join(this.formatSeparator).trim();return this.format(Z(t,s,i,this.options.keySeparator,this.options.ignoreJSONStructure),a,r,{...n,...t,interpolationkey:i})};this.resetRegExp();const c=n&&n.missingInterpolationHandler||this.options.missingInterpolationHandler,u=n&&n.interpolation&&void 0!==n.interpolation.skipOnVariables?n.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:e=>Q(e)},{regex:this.regexp,safeValue:e=>this.escapeValue?Q(this.escape(e)):Q(e)}].forEach((t=>{for(a=0;o=t.regex.exec(e);){const r=o[1].trim();if(i=l(r),void 0===i)if(\"function\"==typeof c){const t=c(e,o,n);i=b(t)?t:\"\"}else if(n&&Object.prototype.hasOwnProperty.call(n,r))i=\"\";else{if(u){i=o[0];continue}this.logger.warn(`missed to pass in variable ${r} for interpolating ${e}`),i=\"\"}else b(i)||this.useRawValueToEscape||(i=w(i));const s=t.safeValue(i);if(e=e.replace(o[0],s),u?(t.regex.lastIndex+=i.length,t.regex.lastIndex-=o[0].length):t.regex.lastIndex=0,a++,a>=this.maxReplaces)break}})),e}nest(e,t){let r,n,o,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const a=(e,t)=>{const r=this.nestingOptionsSeparator;if(e.indexOf(r)<0)return e;const n=e.split(new RegExp(`${r}[ ]*{`));let i=`{${n[1]}`;e=n[0],i=this.interpolate(i,o);const a=i.match(/'/g),s=i.match(/\"/g);(a&&a.length%2==0&&!s||s.length%2!=0)&&(i=i.replace(/'/g,'\"'));try{o=JSON.parse(i),t&&(o={...t,...o})}catch(t){return this.logger.warn(`failed parsing options string in nesting for key ${e}`,t),`${e}${r}${i}`}return o.defaultValue&&o.defaultValue.indexOf(this.prefix)>-1&&delete o.defaultValue,e};for(;r=this.nestingRegexp.exec(e);){let s=[];o={...i},o=o.replace&&!b(o.replace)?o.replace:o,o.applyPostProcessor=!1,delete o.defaultValue;let l=!1;if(-1!==r[0].indexOf(this.formatSeparator)&&!/{.*}/.test(r[1])){const e=r[1].split(this.formatSeparator).map((e=>e.trim()));r[1]=e.shift(),s=e,l=!0}if(n=t(a.call(this,r[1].trim(),o),o),n&&r[0]===e&&!b(n))return n;b(n)||(n=w(n)),n||(this.logger.warn(`missed to resolve ${r[1]} for nesting ${e}`),n=\"\"),l&&(n=s.reduce(((e,t)=>this.format(e,t,i.lng,{...i,interpolationkey:r[1].trim()})),n.trim())),e=e.replace(r[0],n),this.regexp.lastIndex=0}return e}}const ee=e=>{const t={};return(r,n,o)=>{let i=o;o&&o.interpolationkey&&o.formatParams&&o.formatParams[o.interpolationkey]&&o[o.interpolationkey]&&(i={...i,[o.interpolationkey]:void 0});const a=n+JSON.stringify(i);let s=t[a];return s||(s=e(I(n),o),t[a]=s),s(r)}};class te{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.logger=D.create(\"formatter\"),this.options=e,this.formats={number:ee(((e,t)=>{const r=new Intl.NumberFormat(e,{...t});return e=>r.format(e)})),currency:ee(((e,t)=>{const r=new Intl.NumberFormat(e,{...t,style:\"currency\"});return e=>r.format(e)})),datetime:ee(((e,t)=>{const r=new Intl.DateTimeFormat(e,{...t});return e=>r.format(e)})),relativetime:ee(((e,t)=>{const r=new Intl.RelativeTimeFormat(e,{...t});return e=>r.format(e,t.range||\"day\")})),list:ee(((e,t)=>{const r=new Intl.ListFormat(e,{...t});return e=>r.format(e)}))},this.init(e)}init(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{interpolation:{}};this.formatSeparator=t.interpolation.formatSeparator||\",\"}add(e,t){this.formats[e.toLowerCase().trim()]=t}addCached(e,t){this.formats[e.toLowerCase().trim()]=ee(t)}format(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};const o=t.split(this.formatSeparator);if(o.length>1&&o[0].indexOf(\"(\")>1&&o[0].indexOf(\")\")<0&&o.find((e=>e.indexOf(\")\")>-1))){const e=o.findIndex((e=>e.indexOf(\")\")>-1));o[0]=[o[0],...o.splice(1,e)].join(this.formatSeparator)}const i=o.reduce(((e,t)=>{const{formatName:o,formatOptions:i}=(e=>{let t=e.toLowerCase().trim();const r={};if(e.indexOf(\"(\")>-1){const n=e.split(\"(\");t=n[0].toLowerCase().trim();const o=n[1].substring(0,n[1].length-1);\"currency\"===t&&o.indexOf(\":\")<0?r.currency||(r.currency=o.trim()):\"relativetime\"===t&&o.indexOf(\":\")<0?r.range||(r.range=o.trim()):o.split(\";\").forEach((e=>{if(e){const[t,...n]=e.split(\":\"),o=n.join(\":\").trim().replace(/^'+|'+$/g,\"\"),i=t.trim();r[i]||(r[i]=o),\"false\"===o&&(r[i]=!1),\"true\"===o&&(r[i]=!0),isNaN(o)||(r[i]=parseInt(o,10))}}))}return{formatName:t,formatOptions:r}})(t);if(this.formats[o]){let t=e;try{const a=n&&n.formatParams&&n.formatParams[n.interpolationkey]||{},s=a.locale||a.lng||n.locale||n.lng||r;t=this.formats[o](e,s,{...i,...n,...a})}catch(e){this.logger.warn(e)}return t}return this.logger.warn(`there was no format function for ${o}`),e}),e);return i}}class re extends B{constructor(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};super(),this.backend=e,this.store=t,this.services=r,this.languageUtils=r.languageUtils,this.options=n,this.logger=D.create(\"backendConnector\"),this.waitingReads=[],this.maxParallelReads=n.maxParallelReads||10,this.readingCalls=0,this.maxRetries=n.maxRetries>=0?n.maxRetries:5,this.retryTimeout=n.retryTimeout>=1?n.retryTimeout:350,this.state={},this.queue=[],this.backend&&this.backend.init&&this.backend.init(r,n.backend,n)}queueLoad(e,t,r,n){const o={},i={},a={},s={};return e.forEach((e=>{let n=!0;t.forEach((t=>{const a=`${e}|${t}`;!r.reload&&this.store.hasResourceBundle(e,t)?this.state[a]=2:this.state[a]<0||(1===this.state[a]?void 0===i[a]&&(i[a]=!0):(this.state[a]=1,n=!1,void 0===i[a]&&(i[a]=!0),void 0===o[a]&&(o[a]=!0),void 0===s[t]&&(s[t]=!0)))})),n||(a[e]=!0)})),(Object.keys(o).length||Object.keys(i).length)&&this.queue.push({pending:i,pendingCount:Object.keys(i).length,loaded:{},errors:[],callback:n}),{toLoad:Object.keys(o),pending:Object.keys(i),toLoadLanguages:Object.keys(a),toLoadNamespaces:Object.keys(s)}}loaded(e,t,r){const n=e.split(\"|\"),o=n[0],i=n[1];t&&this.emit(\"failedLoading\",o,i,t),!t&&r&&this.store.addResourceBundle(o,i,r,void 0,void 0,{skipCopy:!0}),this.state[e]=t?-1:2,t&&r&&(this.state[e]=0);const a={};this.queue.forEach((r=>{((e,t,r)=>{const{obj:n,k:o}=k(e,t,Object);n[o]=n[o]||[],n[o].push(r)})(r.loaded,[o],i),((e,t)=>{void 0!==e.pending[t]&&(delete e.pending[t],e.pendingCount--)})(r,e),t&&r.errors.push(t),0!==r.pendingCount||r.done||(Object.keys(r.loaded).forEach((e=>{a[e]||(a[e]={});const t=r.loaded[e];t.length&&t.forEach((t=>{void 0===a[e][t]&&(a[e][t]=!0)}))})),r.done=!0,r.errors.length?r.callback(r.errors):r.callback())})),this.emit(\"loaded\",a),this.queue=this.queue.filter((e=>!e.done))}read(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:this.retryTimeout,i=arguments.length>5?arguments[5]:void 0;if(!e.length)return i(null,{});if(this.readingCalls>=this.maxParallelReads)return void this.waitingReads.push({lng:e,ns:t,fcName:r,tried:n,wait:o,callback:i});this.readingCalls++;const a=(a,s)=>{if(this.readingCalls--,this.waitingReads.length>0){const e=this.waitingReads.shift();this.read(e.lng,e.ns,e.fcName,e.tried,e.wait,e.callback)}a&&s&&n<this.maxRetries?setTimeout((()=>{this.read.call(this,e,t,r,n+1,2*o,i)}),o):i(a,s)},s=this.backend[r].bind(this.backend);if(2!==s.length)return s(e,t,a);try{const r=s(e,t);r&&\"function\"==typeof r.then?r.then((e=>a(null,e))).catch(a):a(null,r)}catch(e){a(e)}}prepareLoading(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn(\"No backend was added via i18next.use. Will not load resources.\"),n&&n();b(e)&&(e=this.languageUtils.toResolveHierarchy(e)),b(t)&&(t=[t]);const o=this.queueLoad(e,t,r,n);if(!o.toLoad.length)return o.pending.length||n(),null;o.toLoad.forEach((e=>{this.loadOne(e)}))}load(e,t,r){this.prepareLoading(e,t,{},r)}reload(e,t,r){this.prepareLoading(e,t,{reload:!0},r)}loadOne(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";const r=e.split(\"|\"),n=r[0],o=r[1];this.read(n,o,\"read\",void 0,void 0,((r,i)=>{r&&this.logger.warn(`${t}loading namespace ${o} for language ${n} failed`,r),!r&&i&&this.logger.log(`${t}loaded namespace ${o} for language ${n}`,i),this.loaded(e,r,i)}))}saveMissing(e,t,r,n,o){let i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:()=>{};if(this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(t))this.logger.warn(`did not save key \"${r}\" as the namespace \"${t}\" was not yet loaded`,\"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!\");else if(null!=r&&\"\"!==r){if(this.backend&&this.backend.create){const s={...i,isUpdate:o},l=this.backend.create.bind(this.backend);if(l.length<6)try{let o;o=5===l.length?l(e,t,r,n,s):l(e,t,r,n),o&&\"function\"==typeof o.then?o.then((e=>a(null,e))).catch(a):a(null,o)}catch(e){a(e)}else l(e,t,r,n,a,s)}e&&e[0]&&this.store.addResource(e[0],t,r,n)}}}const ne=()=>({debug:!1,initImmediate:!0,ns:[\"translation\"],defaultNS:[\"translation\"],fallbackLng:[\"dev\"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:\"all\",preload:!1,simplifyPluralSuffix:!0,keySeparator:\".\",nsSeparator:\":\",pluralSeparator:\"_\",contextSeparator:\"_\",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:\"fallback\",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:e=>{let t={};if(\"object\"==typeof e[1]&&(t=e[1]),b(e[1])&&(t.defaultValue=e[1]),b(e[2])&&(t.tDescription=e[2]),\"object\"==typeof e[2]||\"object\"==typeof e[3]){const r=e[3]||e[2];Object.keys(r).forEach((e=>{t[e]=r[e]}))}return t},interpolation:{escapeValue:!0,format:e=>e,prefix:\"{{\",suffix:\"}}\",formatSeparator:\",\",unescapePrefix:\"-\",nestingPrefix:\"$t(\",nestingSuffix:\")\",nestingOptionsSeparator:\",\",maxReplaces:1e3,skipOnVariables:!0}}),oe=e=>(b(e.ns)&&(e.ns=[e.ns]),b(e.fallbackLng)&&(e.fallbackLng=[e.fallbackLng]),b(e.fallbackNS)&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&e.supportedLngs.indexOf(\"cimode\")<0&&(e.supportedLngs=e.supportedLngs.concat([\"cimode\"])),e),ie=()=>{};class ae extends B{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;var r;if(super(),this.options=oe(e),this.services={},this.logger=D,this.modules={external:[]},r=this,Object.getOwnPropertyNames(Object.getPrototypeOf(r)).forEach((e=>{\"function\"==typeof r[e]&&(r[e]=r[e].bind(r))})),t&&!this.isInitialized&&!e.isClone){if(!this.options.initImmediate)return this.init(e,t),this;setTimeout((()=>{this.init(e,t)}),0)}}init(){var e=this;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0;this.isInitializing=!0,\"function\"==typeof t&&(r=t,t={}),!t.defaultNS&&!1!==t.defaultNS&&t.ns&&(b(t.ns)?t.defaultNS=t.ns:t.ns.indexOf(\"translation\")<0&&(t.defaultNS=t.ns[0]));const n=ne();this.options={...n,...this.options,...oe(t)},\"v1\"!==this.options.compatibilityAPI&&(this.options.interpolation={...n.interpolation,...this.options.interpolation}),void 0!==t.keySeparator&&(this.options.userDefinedKeySeparator=t.keySeparator),void 0!==t.nsSeparator&&(this.options.userDefinedNsSeparator=t.nsSeparator);const o=e=>e?\"function\"==typeof e?new e:e:null;if(!this.options.isClone){let t;this.modules.logger?D.init(o(this.modules.logger),this.options):D.init(null,this.options),this.modules.formatter?t=this.modules.formatter:\"undefined\"!=typeof Intl&&(t=te);const r=new W(this.options);this.store=new L(this.options.resources,this.options);const i=this.services;i.logger=D,i.resourceStore=this.store,i.languageUtils=r,i.pluralResolver=new $(r,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),!t||this.options.interpolation.format&&this.options.interpolation.format!==n.interpolation.format||(i.formatter=o(t),i.formatter.init(i,this.options),this.options.interpolation.format=i.formatter.format.bind(i.formatter)),i.interpolator=new J(this.options),i.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},i.backendConnector=new re(o(this.modules.backend),i.resourceStore,i,this.options),i.backendConnector.on(\"*\",(function(t){for(var r=arguments.length,n=new Array(r>1?r-1:0),o=1;o<r;o++)n[o-1]=arguments[o];e.emit(t,...n)})),this.modules.languageDetector&&(i.languageDetector=o(this.modules.languageDetector),i.languageDetector.init&&i.languageDetector.init(i,this.options.detection,this.options)),this.modules.i18nFormat&&(i.i18nFormat=o(this.modules.i18nFormat),i.i18nFormat.init&&i.i18nFormat.init(this)),this.translator=new U(this.services,this.options),this.translator.on(\"*\",(function(t){for(var r=arguments.length,n=new Array(r>1?r-1:0),o=1;o<r;o++)n[o-1]=arguments[o];e.emit(t,...n)})),this.modules.external.forEach((e=>{e.init&&e.init(this)}))}if(this.format=this.options.interpolation.format,r||(r=ie),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const e=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);e.length>0&&\"dev\"!==e[0]&&(this.options.lng=e[0])}this.services.languageDetector||this.options.lng||this.logger.warn(\"init: no languageDetector is used and no lng is defined\"),[\"getResource\",\"hasResourceBundle\",\"getResourceBundle\",\"getDataByLanguage\"].forEach((t=>{this[t]=function(){return e.store[t](...arguments)}})),[\"addResource\",\"addResources\",\"addResourceBundle\",\"removeResourceBundle\"].forEach((t=>{this[t]=function(){return e.store[t](...arguments),e}}));const i=y(),a=()=>{const e=(e,t)=>{this.isInitializing=!1,this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn(\"init: i18next is already initialized. You should call init just once!\"),this.isInitialized=!0,this.options.isClone||this.logger.log(\"initialized\",this.options),this.emit(\"initialized\",this.options),i.resolve(t),r(e,t)};if(this.languages&&\"v1\"!==this.options.compatibilityAPI&&!this.isInitialized)return e(null,this.t.bind(this));this.changeLanguage(this.options.lng,e)};return this.options.resources||!this.options.initImmediate?a():setTimeout(a,0),i}loadResources(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ie;const r=b(e)?e:this.language;if(\"function\"==typeof e&&(t=e),!this.options.resources||this.options.partialBundledLanguages){if(r&&\"cimode\"===r.toLowerCase()&&(!this.options.preload||0===this.options.preload.length))return t();const e=[],n=t=>{t&&\"cimode\"!==t&&this.services.languageUtils.toResolveHierarchy(t).forEach((t=>{\"cimode\"!==t&&e.indexOf(t)<0&&e.push(t)}))};r?n(r):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach((e=>n(e))),this.options.preload&&this.options.preload.forEach((e=>n(e))),this.services.backendConnector.load(e,this.options.ns,(e=>{e||this.resolvedLanguage||!this.language||this.setResolvedLanguage(this.language),t(e)}))}else t(null)}reloadResources(e,t,r){const n=y();return\"function\"==typeof e&&(r=e,e=void 0),\"function\"==typeof t&&(r=t,t=void 0),e||(e=this.languages),t||(t=this.options.ns),r||(r=ie),this.services.backendConnector.reload(e,t,(e=>{n.resolve(),r(e)})),n}use(e){if(!e)throw new Error(\"You are passing an undefined module! Please check the object you are passing to i18next.use()\");if(!e.type)throw new Error(\"You are passing a wrong module! Please check the object you are passing to i18next.use()\");return\"backend\"===e.type&&(this.modules.backend=e),(\"logger\"===e.type||e.log&&e.warn&&e.error)&&(this.modules.logger=e),\"languageDetector\"===e.type&&(this.modules.languageDetector=e),\"i18nFormat\"===e.type&&(this.modules.i18nFormat=e),\"postProcessor\"===e.type&&z.addPostProcessor(e),\"formatter\"===e.type&&(this.modules.formatter=e),\"3rdParty\"===e.type&&this.modules.external.push(e),this}setResolvedLanguage(e){if(e&&this.languages&&!([\"cimode\",\"dev\"].indexOf(e)>-1))for(let e=0;e<this.languages.length;e++){const t=this.languages[e];if(!([\"cimode\",\"dev\"].indexOf(t)>-1)&&this.store.hasLanguageSomeTranslations(t)){this.resolvedLanguage=t;break}}}changeLanguage(e,t){var r=this;this.isLanguageChangingTo=e;const n=y();this.emit(\"languageChanging\",e);const o=e=>{this.language=e,this.languages=this.services.languageUtils.toResolveHierarchy(e),this.resolvedLanguage=void 0,this.setResolvedLanguage(e)},i=(e,i)=>{i?(o(i),this.translator.changeLanguage(i),this.isLanguageChangingTo=void 0,this.emit(\"languageChanged\",i),this.logger.log(\"languageChanged\",i)):this.isLanguageChangingTo=void 0,n.resolve((function(){return r.t(...arguments)})),t&&t(e,(function(){return r.t(...arguments)}))},a=t=>{e||t||!this.services.languageDetector||(t=[]);const r=b(t)?t:this.services.languageUtils.getBestMatchFromCodes(t);r&&(this.language||o(r),this.translator.language||this.translator.changeLanguage(r),this.services.languageDetector&&this.services.languageDetector.cacheUserLanguage&&this.services.languageDetector.cacheUserLanguage(r)),this.loadResources(r,(e=>{i(e,r)}))};return e||!this.services.languageDetector||this.services.languageDetector.async?!e&&this.services.languageDetector&&this.services.languageDetector.async?0===this.services.languageDetector.detect.length?this.services.languageDetector.detect().then(a):this.services.languageDetector.detect(a):a(e):a(this.services.languageDetector.detect()),n}getFixedT(e,t,r){var n=this;const o=function(e,t){let i;if(\"object\"!=typeof t){for(var a=arguments.length,s=new Array(a>2?a-2:0),l=2;l<a;l++)s[l-2]=arguments[l];i=n.options.overloadTranslationOptionHandler([e,t].concat(s))}else i={...t};i.lng=i.lng||o.lng,i.lngs=i.lngs||o.lngs,i.ns=i.ns||o.ns,\"\"!==i.keyPrefix&&(i.keyPrefix=i.keyPrefix||r||o.keyPrefix);const c=n.options.keySeparator||\".\";let u;return u=i.keyPrefix&&Array.isArray(e)?e.map((e=>`${i.keyPrefix}${c}${e}`)):i.keyPrefix?`${i.keyPrefix}${c}${e}`:e,n.t(u,i)};return b(e)?o.lng=e:o.lngs=e,o.ns=t,o.keyPrefix=r,o}t(){return this.translator&&this.translator.translate(...arguments)}exists(){return this.translator&&this.translator.exists(...arguments)}setDefaultNamespace(e){this.options.defaultNS=e}hasLoadedNamespace(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!this.isInitialized)return this.logger.warn(\"hasLoadedNamespace: i18next was not initialized\",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn(\"hasLoadedNamespace: i18n.languages were undefined or empty\",this.languages),!1;const r=t.lng||this.resolvedLanguage||this.languages[0],n=!!this.options&&this.options.fallbackLng,o=this.languages[this.languages.length-1];if(\"cimode\"===r.toLowerCase())return!0;const i=(e,t)=>{const r=this.services.backendConnector.state[`${e}|${t}`];return-1===r||0===r||2===r};if(t.precheck){const e=t.precheck(this,i);if(void 0!==e)return e}return!(!this.hasResourceBundle(r,e)&&this.services.backendConnector.backend&&(!this.options.resources||this.options.partialBundledLanguages)&&(!i(r,e)||n&&!i(o,e)))}loadNamespaces(e,t){const r=y();return this.options.ns?(b(e)&&(e=[e]),e.forEach((e=>{this.options.ns.indexOf(e)<0&&this.options.ns.push(e)})),this.loadResources((e=>{r.resolve(),t&&t(e)})),r):(t&&t(),Promise.resolve())}loadLanguages(e,t){const r=y();b(e)&&(e=[e]);const n=this.options.preload||[],o=e.filter((e=>n.indexOf(e)<0&&this.services.languageUtils.isSupportedCode(e)));return o.length?(this.options.preload=n.concat(o),this.loadResources((e=>{r.resolve(),t&&t(e)})),r):(t&&t(),Promise.resolve())}dir(e){if(e||(e=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!e)return\"rtl\";const t=this.services&&this.services.languageUtils||new W(ne());return[\"ar\",\"shu\",\"sqr\",\"ssh\",\"xaa\",\"yhd\",\"yud\",\"aao\",\"abh\",\"abv\",\"acm\",\"acq\",\"acw\",\"acx\",\"acy\",\"adf\",\"ads\",\"aeb\",\"aec\",\"afb\",\"ajp\",\"apc\",\"apd\",\"arb\",\"arq\",\"ars\",\"ary\",\"arz\",\"auz\",\"avl\",\"ayh\",\"ayl\",\"ayn\",\"ayp\",\"bbz\",\"pga\",\"he\",\"iw\",\"ps\",\"pbt\",\"pbu\",\"pst\",\"prp\",\"prd\",\"ug\",\"ur\",\"ydd\",\"yds\",\"yih\",\"ji\",\"yi\",\"hbo\",\"men\",\"xmn\",\"fa\",\"jpr\",\"peo\",\"pes\",\"prs\",\"dv\",\"sam\",\"ckb\"].indexOf(t.getLanguagePartFromCode(e))>-1||e.toLowerCase().indexOf(\"-arab\")>1?\"rtl\":\"ltr\"}static createInstance(){return new ae(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1?arguments[1]:void 0)}cloneInstance(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ie;const r=e.forkResourceStore;r&&delete e.forkResourceStore;const n={...this.options,...e,isClone:!0},o=new ae(n);return void 0===e.debug&&void 0===e.prefix||(o.logger=o.logger.clone(e)),[\"store\",\"services\",\"language\"].forEach((e=>{o[e]=this[e]})),o.services={...this.services},o.services.utils={hasLoadedNamespace:o.hasLoadedNamespace.bind(o)},r&&(o.store=new L(this.store.data,n),o.services.resourceStore=o.store),o.translator=new U(o.services,n),o.translator.on(\"*\",(function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];o.emit(e,...r)})),o.init(n,t),o.translator.options=n,o.translator.backendConnector.services.utils={hasLoadedNamespace:o.hasLoadedNamespace.bind(o)},o}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}}const se=ae.createInstance();se.createInstance=ae.createInstance,se.createInstance,se.dir,se.init,se.loadResources,se.reloadResources,se.use,se.changeLanguage,se.getFixedT;const le=se.t;se.exists,se.setDefaultNamespace,se.hasLoadedNamespace,se.loadNamespaces,se.loadLanguages,o(4915),Object.create(null);const ce={},ue=(e,t,r,n)=>{pe(r)&&ce[r]||(pe(r)&&(ce[r]=new Date),((e,t,r,n)=>{const o=[r,{code:t,...n||{}}];if(e?.services?.logger?.forward)return e.services.logger.forward(o,\"warn\",\"react-i18next::\",!0);pe(o[0])&&(o[0]=`react-i18next:: ${o[0]}`),e?.services?.logger?.warn?e.services.logger.warn(...o):console?.warn&&console.warn(...o)})(e,t,r,n))},de=(e,t)=>()=>{if(e.isInitialized)t();else{const r=()=>{setTimeout((()=>{e.off(\"initialized\",r)}),0),t()};e.on(\"initialized\",r)}},fe=(e,t,r)=>{e.loadNamespaces(t,de(e,r))},he=(e,t,r,n)=>{if(pe(r)&&(r=[r]),e.options.preload&&e.options.preload.indexOf(t)>-1)return fe(e,r,n);r.forEach((t=>{e.options.ns.indexOf(t)<0&&e.options.ns.push(t)})),e.loadLanguages(t,de(e,n))},pe=e=>\"string\"==typeof e,me=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,ge={\"&amp;\":\"&\",\"&#38;\":\"&\",\"&lt;\":\"<\",\"&#60;\":\"<\",\"&gt;\":\">\",\"&#62;\":\">\",\"&apos;\":\"'\",\"&#39;\":\"'\",\"&quot;\":'\"',\"&#34;\":'\"',\"&nbsp;\":\" \",\"&#160;\":\" \",\"&copy;\":\"©\",\"&#169;\":\"©\",\"&reg;\":\"®\",\"&#174;\":\"®\",\"&hellip;\":\"…\",\"&#8230;\":\"…\",\"&#x2F;\":\"/\",\"&#47;\":\"/\"},ve=e=>ge[e];let be,ye={bindI18n:\"languageChanged\",bindI18nStore:\"\",transEmptyNodeValue:\"\",transSupportBasicHtmlNodes:!0,transWrapTextNodes:\"\",transKeepBasicHtmlNodesFor:[\"br\",\"strong\",\"i\",\"p\"],useSuspense:!0,unescape:e=>e.replace(me,ve)};const we={type:\"3rdParty\",init(e){((e={})=>{ye={...ye,...e}})(e.options.react),(e=>{be=e})(e)}},xe=(0,m.createContext)();class Se{constructor(){this.usedNamespaces={}}addUsedNamespaces(e){e.forEach((e=>{this.usedNamespaces[e]||(this.usedNamespaces[e]=!0)}))}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}}const Ce=(e,t,r,n)=>e.getFixedT(t,r,n),ke=(e,t={})=>{const{i18n:r}=t,{i18n:n,defaultNS:o}=(0,m.useContext)(xe)||{},i=r||n||be;if(i&&!i.reportNamespaces&&(i.reportNamespaces=new Se),!i){ue(i,\"NO_I18NEXT_INSTANCE\",\"useTranslation: You will need to pass in an i18next instance by using initReactI18next\");const e=(e,t)=>{return pe(t)?t:\"object\"==typeof(r=t)&&null!==r&&pe(t.defaultValue)?t.defaultValue:Array.isArray(e)?e[e.length-1]:e;var r},t=[e,{},!1];return t.t=e,t.i18n={},t.ready=!1,t}i.options.react?.wait&&ue(i,\"DEPRECATED_OPTION\",\"useTranslation: It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.\");const a={...ye,...i.options.react,...t},{useSuspense:s,keyPrefix:l}=a;let c=e||o||i.options?.defaultNS;c=pe(c)?[c]:c||[\"translation\"],i.reportNamespaces.addUsedNamespaces?.(c);const u=(i.isInitialized||i.initializedStoreOnce)&&c.every((e=>((e,t,r={})=>t.languages&&t.languages.length?t.hasLoadedNamespace(e,{lng:r.lng,precheck:(t,n)=>{if(r.bindI18n?.indexOf(\"languageChanging\")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!n(t.isLanguageChangingTo,e))return!1}}):(ue(t,\"NO_LANGUAGES\",\"i18n.languages were undefined or empty\",{languages:t.languages}),!0))(e,i,a))),d=((e,t,r,n)=>(0,m.useCallback)(Ce(e,t,r,n),[e,t,r,n]))(i,t.lng||null,\"fallback\"===a.nsMode?c:c[0],l),f=()=>d,h=()=>Ce(i,t.lng||null,\"fallback\"===a.nsMode?c:c[0],l),[p,g]=(0,m.useState)(f);let v=c.join();t.lng&&(v=`${t.lng}${v}`);const b=((e,t)=>{const r=(0,m.useRef)();return(0,m.useEffect)((()=>{r.current=e}),[e,t]),r.current})(v),y=(0,m.useRef)(!0);(0,m.useEffect)((()=>{const{bindI18n:e,bindI18nStore:r}=a;y.current=!0,u||s||(t.lng?he(i,t.lng,c,(()=>{y.current&&g(h)})):fe(i,c,(()=>{y.current&&g(h)}))),u&&b&&b!==v&&y.current&&g(h);const n=()=>{y.current&&g(h)};return e&&i?.on(e,n),r&&i?.store.on(r,n),()=>{y.current=!1,i&&e?.split(\" \").forEach((e=>i.off(e,n))),r&&i&&r.split(\" \").forEach((e=>i.store.off(e,n)))}}),[i,v]),(0,m.useEffect)((()=>{y.current&&u&&g(f)}),[i,l,u]);const w=[p,i,u];if(w.t=p,w.i18n=i,w.ready=u,u)return w;if(!u&&!s)return w;throw new Promise((e=>{t.lng?he(i,t.lng,c,(()=>e())):fe(i,c,(()=>e()))}))},Ee=JSON.parse('{\"anno\":\"批注\",\"annotations\":{\"select\":\"选择\",\"highlight\":\"高亮\",\"strikeout\":\"删除线\",\"underline\":\"下划线\",\"rectangle\":\"矩形\",\"circle\":\"圆形\",\"freehand\":\"自由绘制\",\"freeHighlight\":\"自由高亮\",\"freeText\":\"文字\",\"signature\":\"签名\",\"stamp\":\"盖章\",\"note\":\"注解\",\"arrow\":\"箭头\",\"cloud\":\"云线\"},\"toolbar\":{\"buttons\":{\"createSignature\":\"创建签名\",\"uploadImages\":\"上传图片\",\"createStamp\":\"创建印章\"},\"message\":{\"selectPosition\":\"请选择放置位置\",\"signatureArea\":\"签名处\",\"uploadArea\":\"上传区域\",\"uploadHint\":\"点击上传或请将图片拖拽到此处，支持格式{{format}}, 最大 {{maxSize}}\"}},\"editor\":{\"text\":{\"startTyping\":\"开始输入...\"},\"stamp\":{\"stampText\":\"印章内容\",\"fontStyle\":\"字体样式\",\"fontFamily\":\"字体\",\"textColor\":\"文字颜色\",\"backgroundColor\":\"背景颜色\",\"borderColor\":\"边框颜色\",\"borderStyle\":\"边框样式\",\"timestampText\":\"时间戳\",\"customTimestamp\":\"自定义\",\"username\":\"用户名\",\"date\":\"日期\",\"time\":\"时间\",\"dateFormat\":\"日期格式\",\"solid\":\"实线\",\"dashed\":\"虚线\",\"defaultText\":\"草稿\"}},\"normal\":{\"ok\":\"确定\",\"cancel\":\"取消\",\"clear\":\"清空\",\"fileSizeLimit\":\"文件大小超出 {{value}} 限制\",\"deleteConfirm\":\"是否删除\",\"yes\":\"是\",\"no\":\"否\",\"example\":\"例如：\",\"color\":\"颜色\",\"export\":\"导出\",\"save\":\"保存\",\"reply\":\"回复\",\"edit\":\"编辑\",\"delete\":\"删除\",\"confirm\":\"确认\",\"unknownUser\":\"不具名用户\",\"processing\":\"处理中，请稍候...\",\"filter\":\"过滤\",\"author\":\"作者\",\"type\":\"类型\",\"selectAll\":\"全选\",\"more\":\"更多\",\"draw\":\"绘制\",\"enter\":\"输入\",\"upload\":\"上传\",\"default\":\"默认\",\"custom\":\"自定义\",\"strokeWidth\":\"笔触宽度\",\"opacity\":\"透明度\"},\"comment\":{\"total\":\" {{value}} 条批注\",\"page\":\"第{{value}}页\",\"status\":{\"accepted\":\"接受\",\"rejected\":\"拒绝\",\"cancelled\":\"取消\",\"completed\":\"完成\",\"none\":\"无\",\"closed\":\"关闭\"},\"statusText\":\"将状态设置为 “{{value}}”\"},\"pdf\":{\"generationSuccess\":\"文件已生成！\"},\"dateFormat\":{\"full\":\"{{year}}-{{month}}-{{day}} {{hour}}:{{minute}}\",\"dayMonth\":\"{{month}}-{{day}}\",\"dayMonthYear\":\"{{year}}-{{month}}-{{day}}\"},\"save\":{\"start\":\"正在保存...\",\"success\":\"保存成功！\",\"fail\":\"保存失败，错误代码： {{value}}\",\"noPostUrl\":\"未找到参数: {{value}}\"},\"load\":{\"fail\":\"外部批注加载失败，{{value}}\"},\"export\":{\"fields\":{\"id\":\"ID\",\"page\":\"页码\",\"author\":\"用户\",\"date\":\"日期\",\"content\":\"内容\",\"status\":\"状态\",\"annotationType\":\"批注类型\",\"recordType\":\"类型\"},\"recordType\":{\"annotation\":\"批注\",\"reply\":\"回复\"}}}');var Oe={en:{translation:JSON.parse('{\"anno\":\"Comment\",\"annotations\":{\"select\":\"Select\",\"highlight\":\"Highlight\",\"strikeout\":\"Strikeout\",\"underline\":\"Underline\",\"rectangle\":\"Rectangle\",\"circle\":\"Circle\",\"freehand\":\"Free Hand\",\"freeHighlight\":\"Free Highlight\",\"freeText\":\"Text\",\"signature\":\"Signature\",\"stamp\":\"Stamp\",\"note\":\"Note\",\"arrow\":\"Arrow\",\"cloud\":\"Cloud\"},\"toolbar\":{\"buttons\":{\"createSignature\":\"Create signature\",\"uploadImage\":\"Upload Image\",\"createStamp\":\"Create Stamp\"},\"message\":{\"selectPosition\":\"Please select a position\",\"signatureArea\":\"Signature\",\"uploadArea\":\"Upload Area\",\"uploadHint\":\"Click to upload or drag and drop to here {{format}}, maxSize {{maxSize}}\"}},\"editor\":{\"text\":{\"startTyping\":\"Start typing…\"},\"stamp\":{\"stampText\":\"Stamp Text\",\"fontStyle\":\"Font Style\",\"fontFamily\":\"Font Family\",\"textColor\":\"Text Color\",\"backgroundColor\":\"Background Color\",\"borderColor\":\"Border Color\",\"borderStyle\":\"Border Style\",\"timestampText\":\"Timestamp Text\",\"customTimestamp\":\"Custom Text\",\"username\":\"Username\",\"date\":\"Date\",\"time\":\"Time\",\"dateFormat\":\"Date Format\",\"solid\":\"Solid\",\"dashed\":\"Dashed\",\"defaultText\":\"Draft\"}},\"normal\":{\"ok\":\"OK\",\"cancel\":\"Cancel\",\"clear\":\"Clear\",\"fileSizeLimit\":\"The file size exceeds the {{value}} limit\",\"deleteConfirm\":\"Are you sure you want to delete?\",\"yes\":\"Yes\",\"no\":\"No\",\"example\":\"e.g. \",\"color\":\"Color\",\"export\":\"Export\",\"save\":\"Save\",\"reply\":\"Reply\",\"edit\":\"Edit\",\"delete\":\"Delete\",\"confirm\":\"Confirm\",\"unknownUser\":\"Unknown User\",\"processing\":\"Processing, please wait...\",\"filter\":\"Filter\",\"author\":\"Author\",\"type\":\"Type\",\"selectAll\":\"Select All\",\"more\":\"More\",\"draw\":\"Draw\",\"enter\":\"Enter\",\"upload\":\"Upload\",\"default\":\"Default\",\"custom\":\"Custom\",\"strokeWidth\":\"Stroke\",\"opacity\":\"Opacity\"},\"comment\":{\"total\":\"Comment {{value}}\",\"page\":\"Page {{value}}\",\"status\":{\"accepted\":\"Accepted\",\"rejected\":\"Rejected\",\"cancelled\":\"Cancelled\",\"completed\":\"Completed\",\"none\":\"None\",\"closed\":\"Closed\"},\"statusText\":\"Set Status: {{value}}\"},\"pdf\":{\"generationSuccess\":\"File has been successfully generated and downloaded\"},\"dateFormat\":{\"full\":\"{{month}}/{{day}}/{{year}} {{hour}}:{{minute}}\",\"dayMonth\":\"{{month}}/{{day}}\",\"dayMonthYear\":\"{{month}}/{{day}}/{{year}}\"},\"save\":{\"start\":\"Saving...\",\"success\":\"Saved successfully!\",\"fail\":\"Failed to save. {{value}}\",\"noPostUrl\":\"{{value}} not found.\"},\"load\":{\"fail\":\"Annotation Data Load Fail: {{value}}\"},\"export\":{\"fields\":{\"id\":\"ID\",\"page\":\"Page\",\"author\":\"Author\",\"date\":\"Date\",\"content\":\"Content\",\"status\":\"Status\",\"annotationType\":\"Annotation Type\",\"recordType\":\"Type\"},\"recordType\":{\"annotation\":\"Annotation\",\"reply\":\"Reply\"}}}')},zh:{translation:Ee},de:{translation:JSON.parse('{\"anno\":\"Kommentare\",\"annotations\":{\"select\":\"Auswählen\",\"highlight\":\"Hervorheben\",\"strikeout\":\"Durchstreichen\",\"underline\":\"Unterstreichen\",\"rectangle\":\"Rechteck\",\"circle\":\"Kreis\",\"freehand\":\"Freihand\",\"freeHighlight\":\"Hervorheben\",\"freeText\":\"Text\",\"signature\":\"Unterschrift\",\"stamp\":\"Stempel\",\"note\":\"Notiz\",\"arrow\":\"Pfeil\",\"cloud\":\"Wolke\"},\"toolbar\":{\"buttons\":{\"createSignature\":\"Unterschrift erstellen\",\"uploadImage\":\"Bild hochladen\",\"createStamp\":\"Stempel erstellen\"},\"message\":{\"selectPosition\":\"Bitte wählen Sie eine Position\",\"signatureArea\":\"Unterschriftbereich\",\"uploadArea\":\"Hochladebereich\",\"uploadHint\":\"Klicken Sie zum Hochladen oder ziehen Sie die Bilddatei in diese Zone {{format}} {{maxSize}}\"}},\"editor\":{\"text\":{\"startTyping\":\"Tippen beginnen…\"},\"stamp\":{\"stampText\":\"Stempelinhalt\",\"fontStyle\":\"Schriftart\",\"fontFamily\":\"Schriftfamilie\",\"textColor\":\"Textfarbe\",\"backgroundColor\":\"Hintergrundfarbe\",\"borderColor\":\"Randfarbe\",\"borderStyle\":\"Randstil\",\"timestampText\":\"Zeitstempel\",\"customTimestamp\":\"Benutzerdefiniert\",\"username\":\"Benutzername\",\"date\":\"Datum\",\"time\":\"Zeit\",\"dateFormat\":\"Datumsformat\",\"solid\":\"Solide\",\"dashed\":\"Gestrichelt\",\"defaultText\":\"Entwurf\"}},\"normal\":{\"ok\":\"OK\",\"cancel\":\"Abbrechen\",\"clear\":\"Löschen\",\"fileSizeLimit\":\"Die Dateigröße überschreitet die {{value}}-Grenze\",\"deleteConfirm\":\"Sind Sie sicher, dass Sie Folgendes löschen möchten?\",\"yes\":\"Ja\",\"no\":\"Nein\",\"example\":\"z.B. \",\"color\":\"Farbe\",\"export\":\"Export\",\"save\":\"Speichern\",\"reply\":\"Antworten\",\"edit\":\"Bearbeiten\",\"delete\":\"Löschen\",\"confirm\":\"Bestätigen\",\"unknownUser\":\"Unbekannter Benutzer\",\"processing\":\"Bearbeitung, bitte warten...\",\"filter\":\"Filter\",\"author\":\"Autor\",\"type\":\"Typ\",\"selectAll\":\"Alle auswählen\",\"more\":\"Mehr\",\"draw\":\"Zeichnen\",\"enter\":\"Eingeben\",\"upload\":\"Hochladen\",\"default\":\"Standard\",\"custom\":\"Benutzerdefiniert\",\"strokeWidth\":\"Strichbreite\",\"opacity\":\"Deckkraft\"},\"comment\":{\"total\":\"Kommentare: {{value}}\",\"page\":\"Seite {{value}}\",\"status\":{\"accepted\":\"Akzeptiert\",\"rejected\":\"Abgelehnt\",\"cancelled\":\"Abgebrochen\",\"completed\":\"Abgeschlossen\",\"none\":\"Keine\",\"closed\":\"Geschlossen\"},\"statusText\":\"Status festlegen: {{value}}\"},\"pdf\":{\"generationSuccess\":\"Datei wurde erfolgreich generiert und heruntergeladen\"},\"dateFormat\":{\"full\":\"{{day}}.{{month}}.{{year}} {{hour}}:{{minute}}\",\"dayMonth\":\"{{day}}.{{month}}\",\"dayMonthYear\":\"{{day}}.{{month}}.{{year}}\"},\"save\":{\"start\":\"Speichern...\",\"success\":\"Erfolgreich gespeichert!\",\"fail\":\"Speichern fehlgeschlagen. {{value}}\",\"noPostUrl\":\"{{value}} nicht gefunden.\"},\"export\":{\"fields\":{\"id\":\"ID\",\"page\":\"Seite\",\"author\":\"Autor\",\"date\":\"Datum\",\"content\":\"Inhalt\",\"status\":\"Status\",\"annotationType\":\"Anmerkungstyp\",\"recordType\":\"Typ\"},\"recordType\":{\"annotation\":\"Anmerkung\",\"reply\":\"Antwort\"}}}')}},Ae={\"zh-cn\":\"zh\",\"en-us\":\"en\",\"de-de\":\"de\"};function Te(){return Te=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Te.apply(null,arguments)}const je={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M168 504.2c1-43.7 10-86.1 26.9-126 17.3-41 42.1-77.7 73.7-109.4S337 212.3 378 195c42.4-17.9 87.4-27 133.9-27s91.5 9.1 133.8 27A341.5 341.5 0 01755 268.8c9.9 9.9 19.2 20.4 27.8 31.4l-60.2 47a8 8 0 003 14.1l175.7 43c5 1.2 9.9-2.6 9.9-7.7l.8-180.9c0-6.7-7.7-10.5-12.9-6.3l-56.4 44.1C765.8 155.1 646.2 92 511.8 92 282.7 92 96.3 275.6 92 503.8a8 8 0 008 8.2h60c4.4 0 7.9-3.5 8-7.8zm756 7.8h-60c-4.4 0-7.9 3.5-8 7.8-1 43.7-10 86.1-26.9 126-17.3 41-42.1 77.8-73.7 109.4A342.45 342.45 0 01512.1 856a342.24 342.24 0 01-243.2-100.8c-9.9-9.9-19.2-20.4-27.8-31.4l60.2-47a8 8 0 00-3-14.1l-175.7-43c-5-1.2-9.9 2.6-9.9 7.7l-.7 181c0 6.7 7.7 10.5 12.9 6.3l56.4-44.1C258.2 868.9 377.8 932 512.2 932c229.2 0 415.5-183.7 419.8-411.8a8 8 0 00-8-8.2z\"}}]},name:\"sync\",theme:\"outlined\"};function Pe(e){if(Array.isArray(e))return e}function Me(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function Re(e,t){if(e){if(\"string\"==typeof e)return Me(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Me(e,t):void 0}}function _e(){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 Ie(e,t){return Pe(e)||function(e,t){var r=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=r){var n,o,i,a,s=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return s}}(e,t)||Re(e,t)||_e()}function Ne(e){return Ne=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},Ne(e)}function Fe(e){var t=function(e){if(\"object\"!=Ne(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=Ne(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==Ne(t)?t:t+\"\"}function De(e,t,r){return(t=Fe(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Be(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var Le=o(6942),ze=o.n(Le);const He=Math.round;function Ue(e,t){const r=e.replace(/^[^(]*\\((.*)/,\"$1\").replace(/\\).*/,\"\").match(/\\d*\\.?\\d+%?/g)||[],n=r.map((e=>parseFloat(e)));for(let e=0;e<3;e+=1)n[e]=t(n[e]||0,r[e]||\"\",e);return r[3]?n[3]=r[3].includes(\"%\")?n[3]/100:n[3]:n[3]=1,n}const Ve=(e,t,r)=>0===r?e:e/100;function We(e,t){const r=t||255;return e>r?r:e<0?0:e}class Ge{constructor(e){function t(t){return t[0]in e&&t[1]in e&&t[2]in e}if(De(this,\"isValid\",!0),De(this,\"r\",0),De(this,\"g\",0),De(this,\"b\",0),De(this,\"a\",1),De(this,\"_h\",void 0),De(this,\"_s\",void 0),De(this,\"_l\",void 0),De(this,\"_v\",void 0),De(this,\"_max\",void 0),De(this,\"_min\",void 0),De(this,\"_brightness\",void 0),e)if(\"string\"==typeof e){const r=e.trim();function n(e){return r.startsWith(e)}/^#?[A-F\\d]{3,8}$/i.test(r)?this.fromHexString(r):n(\"rgb\")?this.fromRgbString(r):n(\"hsl\")?this.fromHslString(r):(n(\"hsv\")||n(\"hsb\"))&&this.fromHsvString(r)}else if(e instanceof Ge)this.r=e.r,this.g=e.g,this.b=e.b,this.a=e.a,this._h=e._h,this._s=e._s,this._l=e._l,this._v=e._v;else if(t(\"rgb\"))this.r=We(e.r),this.g=We(e.g),this.b=We(e.b),this.a=\"number\"==typeof e.a?We(e.a,1):1;else if(t(\"hsl\"))this.fromHsl(e);else{if(!t(\"hsv\"))throw new Error(\"@ant-design/fast-color: unsupported input \"+JSON.stringify(e));this.fromHsv(e)}}setR(e){return this._sc(\"r\",e)}setG(e){return this._sc(\"g\",e)}setB(e){return this._sc(\"b\",e)}setA(e){return this._sc(\"a\",e,1)}setHue(e){const t=this.toHsv();return t.h=e,this._c(t)}getLuminance(){function e(e){const t=e/255;return t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4)}return.2126*e(this.r)+.7152*e(this.g)+.0722*e(this.b)}getHue(){if(void 0===this._h){const e=this.getMax()-this.getMin();this._h=0===e?0:He(60*(this.r===this.getMax()?(this.g-this.b)/e+(this.g<this.b?6:0):this.g===this.getMax()?(this.b-this.r)/e+2:(this.r-this.g)/e+4))}return this._h}getSaturation(){if(void 0===this._s){const e=this.getMax()-this.getMin();this._s=0===e?0:e/this.getMax()}return this._s}getLightness(){return void 0===this._l&&(this._l=(this.getMax()+this.getMin())/510),this._l}getValue(){return void 0===this._v&&(this._v=this.getMax()/255),this._v}getBrightness(){return void 0===this._brightness&&(this._brightness=(299*this.r+587*this.g+114*this.b)/1e3),this._brightness}darken(e=10){const t=this.getHue(),r=this.getSaturation();let n=this.getLightness()-e/100;return n<0&&(n=0),this._c({h:t,s:r,l:n,a:this.a})}lighten(e=10){const t=this.getHue(),r=this.getSaturation();let n=this.getLightness()+e/100;return n>1&&(n=1),this._c({h:t,s:r,l:n,a:this.a})}mix(e,t=50){const r=this._c(e),n=t/100,o=e=>(r[e]-this[e])*n+this[e],i={r:He(o(\"r\")),g:He(o(\"g\")),b:He(o(\"b\")),a:He(100*o(\"a\"))/100};return this._c(i)}tint(e=10){return this.mix({r:255,g:255,b:255,a:1},e)}shade(e=10){return this.mix({r:0,g:0,b:0,a:1},e)}onBackground(e){const t=this._c(e),r=this.a+t.a*(1-this.a),n=e=>He((this[e]*this.a+t[e]*t.a*(1-this.a))/r);return this._c({r:n(\"r\"),g:n(\"g\"),b:n(\"b\"),a:r})}isDark(){return this.getBrightness()<128}isLight(){return this.getBrightness()>=128}equals(e){return this.r===e.r&&this.g===e.g&&this.b===e.b&&this.a===e.a}clone(){return this._c(this)}toHexString(){let e=\"#\";const t=(this.r||0).toString(16);e+=2===t.length?t:\"0\"+t;const r=(this.g||0).toString(16);e+=2===r.length?r:\"0\"+r;const n=(this.b||0).toString(16);if(e+=2===n.length?n:\"0\"+n,\"number\"==typeof this.a&&this.a>=0&&this.a<1){const t=He(255*this.a).toString(16);e+=2===t.length?t:\"0\"+t}return e}toHsl(){return{h:this.getHue(),s:this.getSaturation(),l:this.getLightness(),a:this.a}}toHslString(){const e=this.getHue(),t=He(100*this.getSaturation()),r=He(100*this.getLightness());return 1!==this.a?`hsla(${e},${t}%,${r}%,${this.a})`:`hsl(${e},${t}%,${r}%)`}toHsv(){return{h:this.getHue(),s:this.getSaturation(),v:this.getValue(),a:this.a}}toRgb(){return{r:this.r,g:this.g,b:this.b,a:this.a}}toRgbString(){return 1!==this.a?`rgba(${this.r},${this.g},${this.b},${this.a})`:`rgb(${this.r},${this.g},${this.b})`}toString(){return this.toRgbString()}_sc(e,t,r){const n=this.clone();return n[e]=We(t,r),n}_c(e){return new this.constructor(e)}getMax(){return void 0===this._max&&(this._max=Math.max(this.r,this.g,this.b)),this._max}getMin(){return void 0===this._min&&(this._min=Math.min(this.r,this.g,this.b)),this._min}fromHexString(e){const t=e.replace(\"#\",\"\");function r(e,r){return parseInt(t[e]+t[r||e],16)}t.length<6?(this.r=r(0),this.g=r(1),this.b=r(2),this.a=t[3]?r(3)/255:1):(this.r=r(0,1),this.g=r(2,3),this.b=r(4,5),this.a=t[6]?r(6,7)/255:1)}fromHsl({h:e,s:t,l:r,a:n}){if(this._h=e%360,this._s=t,this._l=r,this.a=\"number\"==typeof n?n:1,t<=0){const e=He(255*r);this.r=e,this.g=e,this.b=e}let o=0,i=0,a=0;const s=e/60,l=(1-Math.abs(2*r-1))*t,c=l*(1-Math.abs(s%2-1));s>=0&&s<1?(o=l,i=c):s>=1&&s<2?(o=c,i=l):s>=2&&s<3?(i=l,a=c):s>=3&&s<4?(i=c,a=l):s>=4&&s<5?(o=c,a=l):s>=5&&s<6&&(o=l,a=c);const u=r-l/2;this.r=He(255*(o+u)),this.g=He(255*(i+u)),this.b=He(255*(a+u))}fromHsv({h:e,s:t,v:r,a:n}){this._h=e%360,this._s=t,this._v=r,this.a=\"number\"==typeof n?n:1;const o=He(255*r);if(this.r=o,this.g=o,this.b=o,t<=0)return;const i=e/60,a=Math.floor(i),s=i-a,l=He(r*(1-t)*255),c=He(r*(1-t*s)*255),u=He(r*(1-t*(1-s))*255);switch(a){case 0:this.g=u,this.b=l;break;case 1:this.r=c,this.b=l;break;case 2:this.r=l,this.b=u;break;case 3:this.r=l,this.g=c;break;case 4:this.r=u,this.g=l;break;default:this.g=l,this.b=c}}fromHsvString(e){const t=Ue(e,Ve);this.fromHsv({h:t[0],s:t[1],v:t[2],a:t[3]})}fromHslString(e){const t=Ue(e,Ve);this.fromHsl({h:t[0],s:t[1],l:t[2],a:t[3]})}fromRgbString(e){const t=Ue(e,((e,t)=>t.includes(\"%\")?He(e/100*255):e));this.r=t[0],this.g=t[1],this.b=t[2],this.a=t[3]}}var qe=[{index:7,amount:15},{index:6,amount:25},{index:5,amount:30},{index:5,amount:45},{index:5,amount:65},{index:5,amount:85},{index:4,amount:90},{index:3,amount:95},{index:2,amount:97},{index:1,amount:98}];function Ke(e,t,r){var n;return(n=Math.round(e.h)>=60&&Math.round(e.h)<=240?r?Math.round(e.h)-2*t:Math.round(e.h)+2*t:r?Math.round(e.h)+2*t:Math.round(e.h)-2*t)<0?n+=360:n>=360&&(n-=360),n}function Xe(e,t,r){return 0===e.h&&0===e.s?e.s:((n=r?e.s-.16*t:4===t?e.s+.16:e.s+.05*t)>1&&(n=1),r&&5===t&&n>.1&&(n=.1),n<.06&&(n=.06),Math.round(100*n)/100);var n}function Ye(e,t,r){var n;return n=r?e.v+.05*t:e.v-.15*t,n=Math.max(0,Math.min(1,n)),Math.round(100*n)/100}function $e(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=[],n=new Ge(e),o=n.toHsv(),i=5;i>0;i-=1){var a=new Ge({h:Ke(o,i,!0),s:Xe(o,i,!0),v:Ye(o,i,!0)});r.push(a)}r.push(n);for(var s=1;s<=4;s+=1){var l=new Ge({h:Ke(o,s),s:Xe(o,s),v:Ye(o,s)});r.push(l)}return\"dark\"===t.theme?qe.map((function(e){var n=e.index,o=e.amount;return new Ge(t.backgroundColor||\"#141414\").mix(r[n],o).toHexString()})):r.map((function(e){return e.toHexString()}))}var Ze={red:\"#F5222D\",volcano:\"#FA541C\",orange:\"#FA8C16\",gold:\"#FAAD14\",yellow:\"#FADB14\",lime:\"#A0D911\",green:\"#52C41A\",cyan:\"#13C2C2\",blue:\"#1677FF\",geekblue:\"#2F54EB\",purple:\"#722ED1\",magenta:\"#EB2F96\",grey:\"#666666\"},Qe=[\"#fff1f0\",\"#ffccc7\",\"#ffa39e\",\"#ff7875\",\"#ff4d4f\",\"#f5222d\",\"#cf1322\",\"#a8071a\",\"#820014\",\"#5c0011\"];Qe.primary=Qe[5];var Je=[\"#fff2e8\",\"#ffd8bf\",\"#ffbb96\",\"#ff9c6e\",\"#ff7a45\",\"#fa541c\",\"#d4380d\",\"#ad2102\",\"#871400\",\"#610b00\"];Je.primary=Je[5];var et=[\"#fff7e6\",\"#ffe7ba\",\"#ffd591\",\"#ffc069\",\"#ffa940\",\"#fa8c16\",\"#d46b08\",\"#ad4e00\",\"#873800\",\"#612500\"];et.primary=et[5];var tt=[\"#fffbe6\",\"#fff1b8\",\"#ffe58f\",\"#ffd666\",\"#ffc53d\",\"#faad14\",\"#d48806\",\"#ad6800\",\"#874d00\",\"#613400\"];tt.primary=tt[5];var rt=[\"#feffe6\",\"#ffffb8\",\"#fffb8f\",\"#fff566\",\"#ffec3d\",\"#fadb14\",\"#d4b106\",\"#ad8b00\",\"#876800\",\"#614700\"];rt.primary=rt[5];var nt=[\"#fcffe6\",\"#f4ffb8\",\"#eaff8f\",\"#d3f261\",\"#bae637\",\"#a0d911\",\"#7cb305\",\"#5b8c00\",\"#3f6600\",\"#254000\"];nt.primary=nt[5];var ot=[\"#f6ffed\",\"#d9f7be\",\"#b7eb8f\",\"#95de64\",\"#73d13d\",\"#52c41a\",\"#389e0d\",\"#237804\",\"#135200\",\"#092b00\"];ot.primary=ot[5];var it=[\"#e6fffb\",\"#b5f5ec\",\"#87e8de\",\"#5cdbd3\",\"#36cfc9\",\"#13c2c2\",\"#08979c\",\"#006d75\",\"#00474f\",\"#002329\"];it.primary=it[5];var at=[\"#e6f4ff\",\"#bae0ff\",\"#91caff\",\"#69b1ff\",\"#4096ff\",\"#1677ff\",\"#0958d9\",\"#003eb3\",\"#002c8c\",\"#001d66\"];at.primary=at[5];var st=[\"#f0f5ff\",\"#d6e4ff\",\"#adc6ff\",\"#85a5ff\",\"#597ef7\",\"#2f54eb\",\"#1d39c4\",\"#10239e\",\"#061178\",\"#030852\"];st.primary=st[5];var lt=[\"#f9f0ff\",\"#efdbff\",\"#d3adf7\",\"#b37feb\",\"#9254de\",\"#722ed1\",\"#531dab\",\"#391085\",\"#22075e\",\"#120338\"];lt.primary=lt[5];var ct=[\"#fff0f6\",\"#ffd6e7\",\"#ffadd2\",\"#ff85c0\",\"#f759ab\",\"#eb2f96\",\"#c41d7f\",\"#9e1068\",\"#780650\",\"#520339\"];ct.primary=ct[5];var ut=[\"#a6a6a6\",\"#999999\",\"#8c8c8c\",\"#808080\",\"#737373\",\"#666666\",\"#404040\",\"#1a1a1a\",\"#000000\",\"#000000\"];ut.primary=ut[5];var dt={red:Qe,volcano:Je,orange:et,gold:tt,yellow:rt,lime:nt,green:ot,cyan:it,blue:at,geekblue:st,purple:lt,magenta:ct,grey:ut},ft=[\"#2a1215\",\"#431418\",\"#58181c\",\"#791a1f\",\"#a61d24\",\"#d32029\",\"#e84749\",\"#f37370\",\"#f89f9a\",\"#fac8c3\"];ft.primary=ft[5];var ht=[\"#2b1611\",\"#441d12\",\"#592716\",\"#7c3118\",\"#aa3e19\",\"#d84a1b\",\"#e87040\",\"#f3956a\",\"#f8b692\",\"#fad4bc\"];ht.primary=ht[5];var pt=[\"#2b1d11\",\"#442a11\",\"#593815\",\"#7c4a15\",\"#aa6215\",\"#d87a16\",\"#e89a3c\",\"#f3b765\",\"#f8cf8d\",\"#fae3b7\"];pt.primary=pt[5];var mt=[\"#2b2111\",\"#443111\",\"#594214\",\"#7c5914\",\"#aa7714\",\"#d89614\",\"#e8b339\",\"#f3cc62\",\"#f8df8b\",\"#faedb5\"];mt.primary=mt[5];var gt=[\"#2b2611\",\"#443b11\",\"#595014\",\"#7c6e14\",\"#aa9514\",\"#d8bd14\",\"#e8d639\",\"#f3ea62\",\"#f8f48b\",\"#fafab5\"];gt.primary=gt[5];var vt=[\"#1f2611\",\"#2e3c10\",\"#3e4f13\",\"#536d13\",\"#6f9412\",\"#8bbb11\",\"#a9d134\",\"#c9e75d\",\"#e4f88b\",\"#f0fab5\"];vt.primary=vt[5];var bt=[\"#162312\",\"#1d3712\",\"#274916\",\"#306317\",\"#3c8618\",\"#49aa19\",\"#6abe39\",\"#8fd460\",\"#b2e58b\",\"#d5f2bb\"];bt.primary=bt[5];var yt=[\"#112123\",\"#113536\",\"#144848\",\"#146262\",\"#138585\",\"#13a8a8\",\"#33bcb7\",\"#58d1c9\",\"#84e2d8\",\"#b2f1e8\"];yt.primary=yt[5];var wt=[\"#111a2c\",\"#112545\",\"#15325b\",\"#15417e\",\"#1554ad\",\"#1668dc\",\"#3c89e8\",\"#65a9f3\",\"#8dc5f8\",\"#b7dcfa\"];wt.primary=wt[5];var xt=[\"#131629\",\"#161d40\",\"#1c2755\",\"#203175\",\"#263ea0\",\"#2b4acb\",\"#5273e0\",\"#7f9ef3\",\"#a8c1f8\",\"#d2e0fa\"];xt.primary=xt[5];var St=[\"#1a1325\",\"#24163a\",\"#301c4d\",\"#3e2069\",\"#51258f\",\"#642ab5\",\"#854eca\",\"#ab7ae0\",\"#cda8f0\",\"#ebd7fa\"];St.primary=St[5];var Ct=[\"#291321\",\"#40162f\",\"#551c3b\",\"#75204f\",\"#a02669\",\"#cb2b83\",\"#e0529c\",\"#f37fb7\",\"#f8a8cc\",\"#fad2e3\"];Ct.primary=Ct[5];var kt=[\"#151515\",\"#1f1f1f\",\"#2d2d2d\",\"#393939\",\"#494949\",\"#5a5a5a\",\"#6a6a6a\",\"#7b7b7b\",\"#888888\",\"#969696\"];kt.primary=kt[5];const Et=(0,m.createContext)({});function Ot(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function At(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Ot(Object(r),!0).forEach((function(t){De(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Ot(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Tt(){return!(\"undefined\"==typeof window||!window.document||!window.document.createElement)}function jt(e,t){if(!e)return!1;if(e.contains)return e.contains(t);for(var r=t;r;){if(r===e)return!0;r=r.parentNode}return!1}var Pt=\"data-rc-order\",Mt=\"data-rc-priority\",Rt=new Map;function _t(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).mark;return e?e.startsWith(\"data-\")?e:\"data-\".concat(e):\"rc-util-key\"}function It(e){return e.attachTo?e.attachTo:document.querySelector(\"head\")||document.body}function Nt(e){return Array.from((Rt.get(e)||e).children).filter((function(e){return\"STYLE\"===e.tagName}))}function Ft(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!Tt())return null;var r=t.csp,n=t.prepend,o=t.priority,i=void 0===o?0:o,a=function(e){return\"queue\"===e?\"prependQueue\":e?\"prepend\":\"append\"}(n),s=\"prependQueue\"===a,l=document.createElement(\"style\");l.setAttribute(Pt,a),s&&i&&l.setAttribute(Mt,\"\".concat(i)),null!=r&&r.nonce&&(l.nonce=null==r?void 0:r.nonce),l.innerHTML=e;var c=It(t),u=c.firstChild;if(n){if(s){var d=(t.styles||Nt(c)).filter((function(e){if(![\"prepend\",\"prependQueue\"].includes(e.getAttribute(Pt)))return!1;var t=Number(e.getAttribute(Mt)||0);return i>=t}));if(d.length)return c.insertBefore(l,d[d.length-1].nextSibling),l}c.insertBefore(l,u)}else c.appendChild(l);return l}function Dt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=It(t);return(t.styles||Nt(r)).find((function(r){return r.getAttribute(_t(t))===e}))}function Bt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=Dt(e,t);r&&It(t).removeChild(r)}function Lt(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=It(r),o=Nt(n),i=At(At({},r),{},{styles:o});!function(e,t){var r=Rt.get(e);if(!r||!jt(document,r)){var n=Ft(\"\",t),o=n.parentNode;Rt.set(e,o),e.removeChild(n)}}(n,i);var a,s,l,c=Dt(t,i);if(c)return null!==(a=i.csp)&&void 0!==a&&a.nonce&&c.nonce!==(null===(s=i.csp)||void 0===s?void 0:s.nonce)&&(c.nonce=null===(l=i.csp)||void 0===l?void 0:l.nonce),c.innerHTML!==e&&(c.innerHTML=e),c;var u=Ft(e,i);return u.setAttribute(_t(i),t),u}function zt(e){var t;return null==e||null===(t=e.getRootNode)||void 0===t?void 0:t.call(e)}function Ht(e){return function(e){return zt(e)instanceof ShadowRoot}(e)?zt(e):null}var Ut={},Vt=[];function Wt(e,t){}function Gt(e,t){}function qt(e,t,r){t||Ut[r]||(e(!1,r),Ut[r]=!0)}function Kt(e,t){qt(Wt,e,t)}Kt.preMessage=function(e){Vt.push(e)},Kt.resetWarned=function(){Ut={}},Kt.noteOnce=function(e,t){qt(Gt,e,t)};const Xt=Kt;function Yt(e,t){Xt(e,\"[@ant-design/icons] \".concat(t))}function $t(e){return\"object\"===Ne(e)&&\"string\"==typeof e.name&&\"string\"==typeof e.theme&&(\"object\"===Ne(e.icon)||\"function\"==typeof e.icon)}function Zt(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object.keys(e).reduce((function(t,r){var n=e[r];return\"class\"===r?(t.className=n,delete t.class):(delete t[r],t[function(e){return e.replace(/-(.)/g,(function(e,t){return t.toUpperCase()}))}(r)]=n),t}),{})}function Qt(e,t,r){return r?m.createElement(e.tag,At(At({key:t},Zt(e.attrs)),r),(e.children||[]).map((function(r,n){return Qt(r,\"\".concat(t,\"-\").concat(e.tag,\"-\").concat(n))}))):m.createElement(e.tag,At({key:t},Zt(e.attrs)),(e.children||[]).map((function(r,n){return Qt(r,\"\".concat(t,\"-\").concat(e.tag,\"-\").concat(n))})))}function Jt(e){return $e(e)[0]}function er(e){return e?Array.isArray(e)?e:[e]:[]}var tr={width:\"1em\",height:\"1em\",fill:\"currentColor\",\"aria-hidden\":\"true\",focusable:\"false\"},rr=function(e){var t=(0,m.useContext)(Et),r=t.csp,n=t.prefixCls,o=t.layer,i=\"\\n.anticon {\\n  display: inline-flex;\\n  align-items: center;\\n  color: inherit;\\n  font-style: normal;\\n  line-height: 0;\\n  text-align: center;\\n  text-transform: none;\\n  vertical-align: -0.125em;\\n  text-rendering: optimizeLegibility;\\n  -webkit-font-smoothing: antialiased;\\n  -moz-osx-font-smoothing: grayscale;\\n}\\n\\n.anticon > * {\\n  line-height: 1;\\n}\\n\\n.anticon svg {\\n  display: inline-block;\\n}\\n\\n.anticon::before {\\n  display: none;\\n}\\n\\n.anticon .anticon-icon {\\n  display: block;\\n}\\n\\n.anticon[tabindex] {\\n  cursor: pointer;\\n}\\n\\n.anticon-spin::before,\\n.anticon-spin {\\n  display: inline-block;\\n  -webkit-animation: loadingCircle 1s infinite linear;\\n  animation: loadingCircle 1s infinite linear;\\n}\\n\\n@-webkit-keyframes loadingCircle {\\n  100% {\\n    -webkit-transform: rotate(360deg);\\n    transform: rotate(360deg);\\n  }\\n}\\n\\n@keyframes loadingCircle {\\n  100% {\\n    -webkit-transform: rotate(360deg);\\n    transform: rotate(360deg);\\n  }\\n}\\n\";n&&(i=i.replace(/anticon/g,n)),o&&(i=\"@layer \".concat(o,\" {\\n\").concat(i,\"\\n}\")),(0,m.useEffect)((function(){var t=Ht(e.current);Lt(i,\"@ant-design-icons\",{prepend:!o,csp:r,attachTo:t})}),[])},nr=[\"icon\",\"className\",\"onClick\",\"style\",\"primaryColor\",\"secondaryColor\"],or={primaryColor:\"#333\",secondaryColor:\"#E6E6E6\",calculated:!1},ir=function(e){var t=e.icon,r=e.className,n=e.onClick,o=e.style,i=e.primaryColor,a=e.secondaryColor,s=Be(e,nr),l=m.useRef(),c=or;if(i&&(c={primaryColor:i,secondaryColor:a||Jt(i)}),rr(l),Yt($t(t),\"icon should be icon definiton, but got \".concat(t)),!$t(t))return null;var u=t;return u&&\"function\"==typeof u.icon&&(u=At(At({},u),{},{icon:u.icon(c.primaryColor,c.secondaryColor)})),Qt(u.icon,\"svg-\".concat(u.name),At(At({className:r,onClick:n,style:o,\"data-icon\":u.name,width:\"1em\",height:\"1em\",fill:\"currentColor\",\"aria-hidden\":\"true\"},s),{},{ref:l}))};ir.displayName=\"IconReact\",ir.getTwoToneColors=function(){return At({},or)},ir.setTwoToneColors=function(e){var t=e.primaryColor,r=e.secondaryColor;or.primaryColor=t,or.secondaryColor=r||Jt(t),or.calculated=!!r};const ar=ir;function sr(e){var t=Ie(er(e),2),r=t[0],n=t[1];return ar.setTwoToneColors({primaryColor:r,secondaryColor:n})}var lr=[\"className\",\"icon\",\"spin\",\"rotate\",\"tabIndex\",\"onClick\",\"twoToneColor\"];sr(at.primary);var cr=m.forwardRef((function(e,t){var r=e.className,n=e.icon,o=e.spin,i=e.rotate,a=e.tabIndex,s=e.onClick,l=e.twoToneColor,c=Be(e,lr),u=m.useContext(Et),d=u.prefixCls,f=void 0===d?\"anticon\":d,h=u.rootClassName,p=ze()(h,f,De(De({},\"\".concat(f,\"-\").concat(n.name),!!n.name),\"\".concat(f,\"-spin\"),!!o||\"loading\"===n.name),r),g=a;void 0===g&&s&&(g=-1);var v=i?{msTransform:\"rotate(\".concat(i,\"deg)\"),transform:\"rotate(\".concat(i,\"deg)\")}:void 0,b=Ie(er(l),2),y=b[0],w=b[1];return m.createElement(\"span\",Te({role:\"img\",\"aria-label\":n.name},c,{ref:t,tabIndex:g,onClick:s,className:p}),m.createElement(ar,{icon:n,primaryColor:y,secondaryColor:w,style:v}))}));cr.displayName=\"AntdIcon\",cr.getTwoToneColor=function(){var e=ar.getTwoToneColors();return e.calculated?[e.primaryColor,e.secondaryColor]:e.primaryColor},cr.setTwoToneColor=sr;const ur=cr;var dr=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:je}))};const fr=m.forwardRef(dr);var hr=o(4619),pr={};pr.styleTagTransform=f(),pr.setAttributes=l(),pr.insert=a().bind(null,\"head\"),pr.domAPI=n(),pr.insertStyleElement=u(),t()(hr.A,pr),hr.A&&hr.A.locals&&hr.A.locals;const mr=Math.min,gr=Math.max,vr=Math.round,br=(Math.floor,e=>({x:e,y:e})),yr={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"},wr={start:\"end\",end:\"start\"};function xr(e,t){return\"function\"==typeof e?e(t):e}function Sr(e){return e.split(\"-\")[0]}function Cr(e){return e.split(\"-\")[1]}function kr(e){return\"y\"===e?\"height\":\"width\"}function Er(e){return[\"top\",\"bottom\"].includes(Sr(e))?\"y\":\"x\"}function Or(e){return\"x\"===Er(e)?\"y\":\"x\"}function Ar(e){return e.replace(/start|end/g,(e=>wr[e]))}function Tr(e){return e.replace(/left|right|bottom|top/g,(e=>yr[e]))}function jr(e){const{x:t,y:r,width:n,height:o}=e;return{width:n,height:o,top:r,left:t,right:t+n,bottom:r+o,x:t,y:r}}function Pr(e,t,r){let{reference:n,floating:o}=e;const i=Er(t),a=Or(t),s=kr(a),l=Sr(t),c=\"y\"===i,u=n.x+n.width/2-o.width/2,d=n.y+n.height/2-o.height/2,f=n[s]/2-o[s]/2;let h;switch(l){case\"top\":h={x:u,y:n.y-o.height};break;case\"bottom\":h={x:u,y:n.y+n.height};break;case\"right\":h={x:n.x+n.width,y:d};break;case\"left\":h={x:n.x-o.width,y:d};break;default:h={x:n.x,y:n.y}}switch(Cr(t)){case\"start\":h[a]-=f*(r&&c?-1:1);break;case\"end\":h[a]+=f*(r&&c?-1:1)}return h}function Mr(){return\"undefined\"!=typeof window}function Rr(e){return Nr(e)?(e.nodeName||\"\").toLowerCase():\"#document\"}function _r(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function Ir(e){var t;return null==(t=(Nr(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function Nr(e){return!!Mr()&&(e instanceof Node||e instanceof _r(e).Node)}function Fr(e){return!!Mr()&&(e instanceof Element||e instanceof _r(e).Element)}function Dr(e){return!!Mr()&&(e instanceof HTMLElement||e instanceof _r(e).HTMLElement)}function Br(e){return!(!Mr()||\"undefined\"==typeof ShadowRoot)&&(e instanceof ShadowRoot||e instanceof _r(e).ShadowRoot)}function Lr(e){const{overflow:t,overflowX:r,overflowY:n,display:o}=Gr(e);return/auto|scroll|overlay|hidden|clip/.test(t+n+r)&&![\"inline\",\"contents\"].includes(o)}function zr(e){return[\"table\",\"td\",\"th\"].includes(Rr(e))}function Hr(e){return[\":popover-open\",\":modal\"].some((t=>{try{return e.matches(t)}catch(e){return!1}}))}function Ur(e){const t=Vr(),r=Fr(e)?Gr(e):e;return[\"transform\",\"translate\",\"scale\",\"rotate\",\"perspective\"].some((e=>!!r[e]&&\"none\"!==r[e]))||!!r.containerType&&\"normal\"!==r.containerType||!t&&!!r.backdropFilter&&\"none\"!==r.backdropFilter||!t&&!!r.filter&&\"none\"!==r.filter||[\"transform\",\"translate\",\"scale\",\"rotate\",\"perspective\",\"filter\"].some((e=>(r.willChange||\"\").includes(e)))||[\"paint\",\"layout\",\"strict\",\"content\"].some((e=>(r.contain||\"\").includes(e)))}function Vr(){return!(\"undefined\"==typeof CSS||!CSS.supports)&&CSS.supports(\"-webkit-backdrop-filter\",\"none\")}function Wr(e){return[\"html\",\"body\",\"#document\"].includes(Rr(e))}function Gr(e){return _r(e).getComputedStyle(e)}function qr(e){return Fr(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Kr(e){if(\"html\"===Rr(e))return e;const t=e.assignedSlot||e.parentNode||Br(e)&&e.host||Ir(e);return Br(t)?t.host:t}function Xr(e){const t=Kr(e);return Wr(t)?e.ownerDocument?e.ownerDocument.body:e.body:Dr(t)&&Lr(t)?t:Xr(t)}function Yr(e,t,r){var n;void 0===t&&(t=[]),void 0===r&&(r=!0);const o=Xr(e),i=o===(null==(n=e.ownerDocument)?void 0:n.body),a=_r(o);if(i){const e=$r(a);return t.concat(a,a.visualViewport||[],Lr(o)?o:[],e&&r?Yr(e):[])}return t.concat(o,Yr(o,[],r))}function $r(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function Zr(e){const t=Gr(e);let r=parseFloat(t.width)||0,n=parseFloat(t.height)||0;const o=Dr(e),i=o?e.offsetWidth:r,a=o?e.offsetHeight:n,s=vr(r)!==i||vr(n)!==a;return s&&(r=i,n=a),{width:r,height:n,$:s}}function Qr(e){return Fr(e)?e:e.contextElement}function Jr(e){const t=Qr(e);if(!Dr(t))return br(1);const r=t.getBoundingClientRect(),{width:n,height:o,$:i}=Zr(t);let a=(i?vr(r.width):r.width)/n,s=(i?vr(r.height):r.height)/o;return a&&Number.isFinite(a)||(a=1),s&&Number.isFinite(s)||(s=1),{x:a,y:s}}const en=br(0);function tn(e){const t=_r(e);return Vr()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:en}function rn(e,t,r,n){void 0===t&&(t=!1),void 0===r&&(r=!1);const o=e.getBoundingClientRect(),i=Qr(e);let a=br(1);t&&(n?Fr(n)&&(a=Jr(n)):a=Jr(e));const s=function(e,t,r){return void 0===t&&(t=!1),!(!r||t&&r!==_r(e))&&t}(i,r,n)?tn(i):br(0);let l=(o.left+s.x)/a.x,c=(o.top+s.y)/a.y,u=o.width/a.x,d=o.height/a.y;if(i){const e=_r(i),t=n&&Fr(n)?_r(n):n;let r=e,o=$r(r);for(;o&&n&&t!==r;){const e=Jr(o),t=o.getBoundingClientRect(),n=Gr(o),i=t.left+(o.clientLeft+parseFloat(n.paddingLeft))*e.x,a=t.top+(o.clientTop+parseFloat(n.paddingTop))*e.y;l*=e.x,c*=e.y,u*=e.x,d*=e.y,l+=i,c+=a,r=_r(o),o=$r(r)}}return jr({width:u,height:d,x:l,y:c})}function nn(e,t){const r=qr(e).scrollLeft;return t?t.left+r:rn(Ir(e)).left+r}function on(e,t,r){void 0===r&&(r=!1);const n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-(r?0:nn(e,n)),y:n.top+t.scrollTop}}function an(e,t,r){let n;if(\"viewport\"===t)n=function(e,t){const r=_r(e),n=Ir(e),o=r.visualViewport;let i=n.clientWidth,a=n.clientHeight,s=0,l=0;if(o){i=o.width,a=o.height;const e=Vr();(!e||e&&\"fixed\"===t)&&(s=o.offsetLeft,l=o.offsetTop)}return{width:i,height:a,x:s,y:l}}(e,r);else if(\"document\"===t)n=function(e){const t=Ir(e),r=qr(e),n=e.ownerDocument.body,o=gr(t.scrollWidth,t.clientWidth,n.scrollWidth,n.clientWidth),i=gr(t.scrollHeight,t.clientHeight,n.scrollHeight,n.clientHeight);let a=-r.scrollLeft+nn(e);const s=-r.scrollTop;return\"rtl\"===Gr(n).direction&&(a+=gr(t.clientWidth,n.clientWidth)-o),{width:o,height:i,x:a,y:s}}(Ir(e));else if(Fr(t))n=function(e,t){const r=rn(e,!0,\"fixed\"===t),n=r.top+e.clientTop,o=r.left+e.clientLeft,i=Dr(e)?Jr(e):br(1);return{width:e.clientWidth*i.x,height:e.clientHeight*i.y,x:o*i.x,y:n*i.y}}(t,r);else{const r=tn(e);n={x:t.x-r.x,y:t.y-r.y,width:t.width,height:t.height}}return jr(n)}function sn(e,t){const r=Kr(e);return!(r===t||!Fr(r)||Wr(r))&&(\"fixed\"===Gr(r).position||sn(r,t))}function ln(e,t,r){const n=Dr(t),o=Ir(t),i=\"fixed\"===r,a=rn(e,!0,i,t);let s={scrollLeft:0,scrollTop:0};const l=br(0);function c(){l.x=nn(o)}if(n||!n&&!i)if((\"body\"!==Rr(t)||Lr(o))&&(s=qr(t)),n){const e=rn(t,!0,i,t);l.x=e.x+t.clientLeft,l.y=e.y+t.clientTop}else o&&c();i&&!n&&o&&c();const u=!o||n||i?br(0):on(o,s);return{x:a.left+s.scrollLeft-l.x-u.x,y:a.top+s.scrollTop-l.y-u.y,width:a.width,height:a.height}}function cn(e){return\"static\"===Gr(e).position}function un(e,t){if(!Dr(e)||\"fixed\"===Gr(e).position)return null;if(t)return t(e);let r=e.offsetParent;return Ir(e)===r&&(r=r.ownerDocument.body),r}function dn(e,t){const r=_r(e);if(Hr(e))return r;if(!Dr(e)){let t=Kr(e);for(;t&&!Wr(t);){if(Fr(t)&&!cn(t))return t;t=Kr(t)}return r}let n=un(e,t);for(;n&&zr(n)&&cn(n);)n=un(n,t);return n&&Wr(n)&&cn(n)&&!Ur(n)?r:n||function(e){let t=Kr(e);for(;Dr(t)&&!Wr(t);){if(Ur(t))return t;if(Hr(t))return null;t=Kr(t)}return null}(e)||r}const fn={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{elements:t,rect:r,offsetParent:n,strategy:o}=e;const i=\"fixed\"===o,a=Ir(n),s=!!t&&Hr(t.floating);if(n===a||s&&i)return r;let l={scrollLeft:0,scrollTop:0},c=br(1);const u=br(0),d=Dr(n);if((d||!d&&!i)&&((\"body\"!==Rr(n)||Lr(a))&&(l=qr(n)),Dr(n))){const e=rn(n);c=Jr(n),u.x=e.x+n.clientLeft,u.y=e.y+n.clientTop}const f=!a||d||i?br(0):on(a,l,!0);return{width:r.width*c.x,height:r.height*c.y,x:r.x*c.x-l.scrollLeft*c.x+u.x+f.x,y:r.y*c.y-l.scrollTop*c.y+u.y+f.y}},getDocumentElement:Ir,getClippingRect:function(e){let{element:t,boundary:r,rootBoundary:n,strategy:o}=e;const i=[...\"clippingAncestors\"===r?Hr(t)?[]:function(e,t){const r=t.get(e);if(r)return r;let n=Yr(e,[],!1).filter((e=>Fr(e)&&\"body\"!==Rr(e))),o=null;const i=\"fixed\"===Gr(e).position;let a=i?Kr(e):e;for(;Fr(a)&&!Wr(a);){const t=Gr(a),r=Ur(a);r||\"fixed\"!==t.position||(o=null),(i?!r&&!o:!r&&\"static\"===t.position&&o&&[\"absolute\",\"fixed\"].includes(o.position)||Lr(a)&&!r&&sn(e,a))?n=n.filter((e=>e!==a)):o=t,a=Kr(a)}return t.set(e,n),n}(t,this._c):[].concat(r),n],a=i[0],s=i.reduce(((e,r)=>{const n=an(t,r,o);return e.top=gr(n.top,e.top),e.right=mr(n.right,e.right),e.bottom=mr(n.bottom,e.bottom),e.left=gr(n.left,e.left),e}),an(t,a,o));return{width:s.right-s.left,height:s.bottom-s.top,x:s.left,y:s.top}},getOffsetParent:dn,getElementRects:async function(e){const t=this.getOffsetParent||dn,r=this.getDimensions,n=await r(e.floating);return{reference:ln(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:n.width,height:n.height}}},getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){const{width:t,height:r}=Zr(e);return{width:t,height:r}},getScale:Jr,isElement:Fr,isRTL:function(e){return\"rtl\"===Gr(e).direction}},hn=function(e){return void 0===e&&(e={}),{name:\"flip\",options:e,async fn(t){var r,n;const{placement:o,middlewareData:i,rects:a,initialPlacement:s,platform:l,elements:c}=t,{mainAxis:u=!0,crossAxis:d=!0,fallbackPlacements:f,fallbackStrategy:h=\"bestFit\",fallbackAxisSideDirection:p=\"none\",flipAlignment:m=!0,...g}=xr(e,t);if(null!=(r=i.arrow)&&r.alignmentOffset)return{};const v=Sr(o),b=Er(s),y=Sr(s)===s,w=await(null==l.isRTL?void 0:l.isRTL(c.floating)),x=f||(y||!m?[Tr(s)]:function(e){const t=Tr(e);return[Ar(e),t,Ar(t)]}(s)),S=\"none\"!==p;!f&&S&&x.push(...function(e,t,r,n){const o=Cr(e);let i=function(e,t,r){const n=[\"left\",\"right\"],o=[\"right\",\"left\"],i=[\"top\",\"bottom\"],a=[\"bottom\",\"top\"];switch(e){case\"top\":case\"bottom\":return r?t?o:n:t?n:o;case\"left\":case\"right\":return t?i:a;default:return[]}}(Sr(e),\"start\"===r,n);return o&&(i=i.map((e=>e+\"-\"+o)),t&&(i=i.concat(i.map(Ar)))),i}(s,m,p,w));const C=[s,...x],k=await async function(e,t){var r;void 0===t&&(t={});const{x:n,y:o,platform:i,rects:a,elements:s,strategy:l}=e,{boundary:c=\"clippingAncestors\",rootBoundary:u=\"viewport\",elementContext:d=\"floating\",altBoundary:f=!1,padding:h=0}=xr(t,e),p=function(e){return\"number\"!=typeof e?function(e){return{top:0,right:0,bottom:0,left:0,...e}}(e):{top:e,right:e,bottom:e,left:e}}(h),m=s[f?\"floating\"===d?\"reference\":\"floating\":d],g=jr(await i.getClippingRect({element:null==(r=await(null==i.isElement?void 0:i.isElement(m)))||r?m:m.contextElement||await(null==i.getDocumentElement?void 0:i.getDocumentElement(s.floating)),boundary:c,rootBoundary:u,strategy:l})),v=\"floating\"===d?{x:n,y:o,width:a.floating.width,height:a.floating.height}:a.reference,b=await(null==i.getOffsetParent?void 0:i.getOffsetParent(s.floating)),y=await(null==i.isElement?void 0:i.isElement(b))&&await(null==i.getScale?void 0:i.getScale(b))||{x:1,y:1},w=jr(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:s,rect:v,offsetParent:b,strategy:l}):v);return{top:(g.top-w.top+p.top)/y.y,bottom:(w.bottom-g.bottom+p.bottom)/y.y,left:(g.left-w.left+p.left)/y.x,right:(w.right-g.right+p.right)/y.x}}(t,g),E=[];let O=(null==(n=i.flip)?void 0:n.overflows)||[];if(u&&E.push(k[v]),d){const e=function(e,t,r){void 0===r&&(r=!1);const n=Cr(e),o=Or(e),i=kr(o);let a=\"x\"===o?n===(r?\"end\":\"start\")?\"right\":\"left\":\"start\"===n?\"bottom\":\"top\";return t.reference[i]>t.floating[i]&&(a=Tr(a)),[a,Tr(a)]}(o,a,w);E.push(k[e[0]],k[e[1]])}if(O=[...O,{placement:o,overflows:E}],!E.every((e=>e<=0))){var A,T;const e=((null==(A=i.flip)?void 0:A.index)||0)+1,t=C[e];if(t){var j;const r=\"alignment\"===d&&b!==Er(t),n=(null==(j=O[0])?void 0:j.overflows[0])>0;if(!r||n)return{data:{index:e,overflows:O},reset:{placement:t}}}let r=null==(T=O.filter((e=>e.overflows[0]<=0)).sort(((e,t)=>e.overflows[1]-t.overflows[1]))[0])?void 0:T.placement;if(!r)switch(h){case\"bestFit\":{var P;const e=null==(P=O.filter((e=>{if(S){const t=Er(e.placement);return t===b||\"y\"===t}return!0})).map((e=>[e.placement,e.overflows.filter((e=>e>0)).reduce(((e,t)=>e+t),0)])).sort(((e,t)=>e[1]-t[1]))[0])?void 0:P[0];e&&(r=e);break}case\"initialPlacement\":r=s}if(o!==r)return{reset:{placement:r}}}return{}}}},pn=(e,t,r)=>{const n=new Map,o={platform:fn,...r},i={...o.platform,_c:n};return(async(e,t,r)=>{const{placement:n=\"bottom\",strategy:o=\"absolute\",middleware:i=[],platform:a}=r,s=i.filter(Boolean),l=await(null==a.isRTL?void 0:a.isRTL(t));let c=await a.getElementRects({reference:e,floating:t,strategy:o}),{x:u,y:d}=Pr(c,n,l),f=n,h={},p=0;for(let r=0;r<s.length;r++){const{name:i,fn:m}=s[r],{x:g,y:v,data:b,reset:y}=await m({x:u,y:d,initialPlacement:n,placement:f,strategy:o,middlewareData:h,rects:c,platform:a,elements:{reference:e,floating:t}});u=null!=g?g:u,d=null!=v?v:d,h={...h,[i]:{...h[i],...b}},y&&p<=50&&(p++,\"object\"==typeof y&&(y.placement&&(f=y.placement),y.rects&&(c=!0===y.rects?await a.getElementRects({reference:e,floating:t,strategy:o}):y.rects),({x:u,y:d}=Pr(c,f,l))),r=-1)}return{x:u,y:d,placement:f,strategy:o,middlewareData:h}})(e,t,{...o,platform:i})};var mn=o(6351);function gn(e,t,r){var n=m.useRef({});return\"value\"in n.current&&!r(n.current.condition,t)||(n.current.value=e(),n.current.condition=t),n.current.value}var vn=Symbol.for(\"react.element\"),bn=Symbol.for(\"react.transitional.element\"),yn=Symbol.for(\"react.fragment\");function wn(e){return e&&\"object\"===Ne(e)&&(e.$$typeof===vn||e.$$typeof===bn)&&e.type===yn}var xn=Number(m.version.split(\".\")[0]),Sn=function(e,t){\"function\"==typeof e?e(t):\"object\"===Ne(e)&&e&&\"current\"in e&&(e.current=t)},Cn=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];var n=t.filter(Boolean);return n.length<=1?n[0]:function(e){t.forEach((function(t){Sn(t,e)}))}},kn=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return gn((function(){return Cn.apply(void 0,t)}),t,(function(e,t){return e.length!==t.length||e.every((function(e,r){return e!==t[r]}))}))},En=function(e){var t,r;if(!e)return!1;if(On(e)&&xn>=19)return!0;var n=(0,mn.isMemo)(e)?e.type.type:e.type;return!!(\"function\"!=typeof n||null!==(t=n.prototype)&&void 0!==t&&t.render||n.$$typeof===mn.ForwardRef)&&!!(\"function\"!=typeof e||null!==(r=e.prototype)&&void 0!==r&&r.render||e.$$typeof===mn.ForwardRef)};function On(e){return(0,m.isValidElement)(e)&&!wn(e)}var An=function(e){if(e&&On(e)){var t=e;return t.props.propertyIsEnumerable(\"ref\")?t.props.ref:t.ref}return null},Tn=[\"className\",\"component\",\"viewBox\",\"spin\",\"rotate\",\"tabIndex\",\"onClick\",\"children\"],jn=m.forwardRef((function(e,t){var r=e.className,n=e.component,o=e.viewBox,i=e.spin,a=e.rotate,s=e.tabIndex,l=e.onClick,c=e.children,u=Be(e,Tn),d=m.useRef(),f=kn(d,t);Yt(Boolean(n||c),\"Should have `component` prop or `children`.\"),rr(d);var h=m.useContext(Et),p=h.prefixCls,g=void 0===p?\"anticon\":p,v=h.rootClassName,b=ze()(v,g,De({},\"\".concat(g,\"-spin\"),!!i&&!!n),r),y=ze()(De({},\"\".concat(g,\"-spin\"),!!i)),w=a?{msTransform:\"rotate(\".concat(a,\"deg)\"),transform:\"rotate(\".concat(a,\"deg)\")}:void 0,x=At(At({},tr),{},{className:y,style:w,viewBox:o});o||delete x.viewBox;var S=s;return void 0===S&&l&&(S=-1),m.createElement(\"span\",Te({role:\"img\"},u,{ref:f,tabIndex:S,onClick:l,className:b}),n?m.createElement(n,x,c):c?(Yt(Boolean(o)||1===m.Children.count(c)&&m.isValidElement(c)&&\"use\"===m.Children.only(c).type,\"Make sure that you provide correct `viewBox` prop (default `0 0 1024 1024`) to the icon.\"),m.createElement(\"svg\",Te({},x,{viewBox:o}),c)):null)}));jn.displayName=\"AntdIcon\";const Pn=jn;var Mn=o(4848);function Rn(e){return Rn=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},Rn(e)}function _n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function In(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?_n(Object(r),!0).forEach((function(t){Nn(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):_n(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Nn(e,t,r){return(t=function(e){var t=function(e){if(\"object\"!=Rn(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=Rn(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==Rn(t)?t:t+\"\"}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var Fn=function(){return(0,Mn.jsx)(\"svg\",{height:\"1em\",fill:\"currentColor\",viewBox:\"0 0 320 512\",children:(0,Mn.jsx)(\"path\",{fill:\"currentColor\",d:\"M0 55.2V426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320H297.9c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z\"})})},Dn=function(){return(0,Mn.jsx)(\"svg\",{height:\"1em\",fill:\"currentColor\",viewBox:\"0 0 576 512\",children:(0,Mn.jsx)(\"path\",{fill:\"currentColor\",d:\"M315 315l158.4-215L444.1 70.6 229 229 315 315zm-187 5l0 0V248.3c0-15.3 7.2-29.6 19.5-38.6L420.6 8.4C428 2.9 437 0 446.2 0c11.4 0 22.4 4.5 30.5 12.6l54.8 54.8c8.1 8.1 12.6 19 12.6 30.5c0 9.2-2.9 18.2-8.4 25.6L334.4 396.5c-9 12.3-23.4 19.5-38.6 19.5H224l-25.4 25.4c-12.5 12.5-32.8 12.5-45.3 0l-50.7-50.7c-12.5-12.5-12.5-32.8 0-45.3L128 320zM7 466.3l63-63 70.6 70.6-31 31c-4.5 4.5-10.6 7-17 7H24c-13.3 0-24-10.7-24-24v-4.7c0-6.4 2.5-12.5 7-17z\"})})},Bn=function(){return(0,Mn.jsx)(\"svg\",{height:\"1em\",fill:\"currentColor\",viewBox:\"0 0 512 512\",children:(0,Mn.jsx)(\"path\",{fill:\"currentColor\",d:\"M161.3 144c3.2-17.2 14-30.1 33.7-38.6c21.1-9 51.8-12.3 88.6-6.5c11.9 1.9 48.8 9.1 60.1 12c17.1 4.5 34.6-5.6 39.2-22.7s-5.6-34.6-22.7-39.2c-14.3-3.8-53.6-11.4-66.6-13.4c-44.7-7-88.3-4.2-123.7 10.9c-36.5 15.6-64.4 44.8-71.8 87.3c-.1 .6-.2 1.1-.2 1.7c-2.8 23.9 .5 45.6 10.1 64.6c4.5 9 10.2 16.9 16.7 23.9H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H270.1c-.1 0-.3-.1-.4-.1l-1.1-.3c-36-10.8-65.2-19.6-85.2-33.1c-9.3-6.3-15-12.6-18.2-19.1c-3.1-6.1-5.2-14.6-3.8-27.4zM348.9 337.2c2.7 6.5 4.4 15.8 1.9 30.1c-3 17.6-13.8 30.8-33.9 39.4c-21.1 9-51.7 12.3-88.5 6.5c-18-2.9-49.1-13.5-74.4-22.1c-5.6-1.9-11-3.7-15.9-5.4c-16.8-5.6-34.9 3.5-40.5 20.3s3.5 34.9 20.3 40.5c3.6 1.2 7.9 2.7 12.7 4.3l0 0 0 0c24.9 8.5 63.6 21.7 87.6 25.6l0 0 .2 0c44.7 7 88.3 4.2 123.7-10.9c36.5-15.6 64.4-44.8 71.8-87.3c3.6-21 2.7-40.4-3.1-58.1H335.1c7 5.6 11.4 11.2 13.9 17.2z\"})})},Ln=function(){return(0,Mn.jsx)(\"svg\",{height:\"1em\",fill:\"currentColor\",viewBox:\"0 0 448 512\",children:(0,Mn.jsx)(\"path\",{fill:\"currentColor\",d:\"M16 64c0-17.7 14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H128V224c0 53 43 96 96 96s96-43 96-96V96H304c-17.7 0-32-14.3-32-32s14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H384V224c0 88.4-71.6 160-160 160s-160-71.6-160-160V96H48C30.3 96 16 81.7 16 64zM0 448c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32z\"})})},zn=function(){return(0,Mn.jsx)(\"svg\",{height:\"1em\",fill:\"currentColor\",viewBox:\"0 0 384 512\",children:(0,Mn.jsx)(\"path\",{fill:\"currentColor\",d:\"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96H160V448c0 17.7 14.3 32 32 32s32-14.3 32-32V96H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H192 32z\"})})},Hn=function(){return(0,Mn.jsx)(\"svg\",{height:\"1em\",fill:\"currentColor\",viewBox:\"0 0 512 512\",children:(0,Mn.jsx)(\"path\",{fill:\"currentColor\",d:\"M384 80c8.8 0 16 7.2 16 16V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V96c0-8.8 7.2-16 16-16H384zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z\"})})},Un=function(){return(0,Mn.jsx)(\"svg\",{height:\"1em\",fill:\"currentColor\",viewBox:\"0 0 512 512\",children:(0,Mn.jsx)(\"path\",{fill:\"currentColor\",d:\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"})})},Vn=function(){return(0,Mn.jsx)(\"svg\",{height:\"1em\",fill:\"currentColor\",viewBox:\"0 0 512 512\",children:(0,Mn.jsx)(\"path\",{fill:\"currentColor\",d:\"M410.3 231l11.3-11.3-33.9-33.9-62.1-62.1L291.7 89.8l-11.3 11.3-22.6 22.6L58.6 322.9c-10.4 10.4-18 23.3-22.2 37.4L1 480.7c-2.5 8.4-.2 17.5 6.1 23.7s15.3 8.5 23.7 6.1l120.3-35.4c14.1-4.2 27-11.8 37.4-22.2L387.7 253.7 410.3 231zM160 399.4l-9.1 22.7c-4 3.1-8.5 5.4-13.3 6.9L59.4 452l23-78.1c1.4-4.9 3.8-9.4 6.9-13.3l22.7-9.1v32c0 8.8 7.2 16 16 16h32zM362.7 18.7L348.3 33.2 325.7 55.8 314.3 67.1l33.9 33.9 62.1 62.1 33.9 33.9 11.3-11.3 22.6-22.6 14.5-14.5c25-25 25-65.5 0-90.5L453.3 18.7c-25-25-65.5-25-90.5 0zm-47.4 168l-144 144c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l144-144c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"})})},Wn=function(){return(0,Mn.jsx)(\"svg\",{height:\"1em\",fill:\"currentColor\",viewBox:\"0 0 576 512\",children:(0,Mn.jsx)(\"path\",{fill:\"currentColor\",d:\"M315 315l158.4-215L444.1 70.6 229 229 315 315zm-187 5l0 0V248.3c0-15.3 7.2-29.6 19.5-38.6L420.6 8.4C428 2.9 437 0 446.2 0c11.4 0 22.4 4.5 30.5 12.6l54.8 54.8c8.1 8.1 12.6 19 12.6 30.5c0 9.2-2.9 18.2-8.4 25.6L334.4 396.5c-9 12.3-23.4 19.5-38.6 19.5H224l-25.4 25.4c-12.5 12.5-32.8 12.5-45.3 0l-50.7-50.7c-12.5-12.5-12.5-32.8 0-45.3L128 320zM7 466.3l63-63 70.6 70.6-31 31c-4.5 4.5-10.6 7-17 7H24c-13.3 0-24-10.7-24-24v-4.7c0-6.4 2.5-12.5 7-17z\"})})},Gn=function(){return(0,Mn.jsx)(\"svg\",{height:\"1em\",fill:\"currentColor\",viewBox:\"0 0 640 512\",children:(0,Mn.jsx)(\"path\",{fill:\"currentColor\",d:\"M192 128c0-17.7 14.3-32 32-32s32 14.3 32 32v7.8c0 27.7-2.4 55.3-7.1 82.5l-84.4 25.3c-40.6 12.2-68.4 49.6-68.4 92v71.9c0 40 32.5 72.5 72.5 72.5c26 0 50-13.9 62.9-36.5l13.9-24.3c26.8-47 46.5-97.7 58.4-150.5l94.4-28.3-12.5 37.5c-3.3 9.8-1.6 20.5 4.4 28.8s15.7 13.3 26 13.3H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H460.4l18-53.9c3.8-11.3 .9-23.8-7.4-32.4s-20.7-11.8-32.2-8.4L316.4 198.1c2.4-20.7 3.6-41.4 3.6-62.3V128c0-53-43-96-96-96s-96 43-96 96v32c0 17.7 14.3 32 32 32s32-14.3 32-32V128zm-9.2 177l49-14.7c-10.4 33.8-24.5 66.4-42.1 97.2l-13.9 24.3c-1.5 2.6-4.3 4.3-7.4 4.3c-4.7 0-8.5-3.8-8.5-8.5V335.6c0-14.1 9.3-26.6 22.8-30.7zM24 368c-13.3 0-24 10.7-24 24s10.7 24 24 24H64.3c-.2-2.8-.3-5.6-.3-8.5V368H24zm592 48c13.3 0 24-10.7 24-24s-10.7-24-24-24H305.9c-6.7 16.3-14.2 32.3-22.3 48H616z\"})})},qn=function(){return(0,Mn.jsx)(\"svg\",{height:\"1em\",fill:\"currentColor\",viewBox:\"0 0 512 512\",children:(0,Mn.jsx)(\"path\",{fill:\"currentColor\",d:\"M312 201.8c0-17.4 9.2-33.2 19.9-47C344.5 138.5 352 118.1 352 96c0-53-43-96-96-96s-96 43-96 96c0 22.1 7.5 42.5 20.1 58.8c10.7 13.8 19.9 29.6 19.9 47c0 29.9-24.3 54.2-54.2 54.2H112C50.1 256 0 306.1 0 368c0 20.9 13.4 38.7 32 45.3V464c0 26.5 21.5 48 48 48H432c26.5 0 48-21.5 48-48V413.3c18.6-6.6 32-24.4 32-45.3c0-61.9-50.1-112-112-112H366.2c-29.9 0-54.2-24.3-54.2-54.2zM416 416v32H96V416H416z\"})})},Kn=function(){return(0,Mn.jsxs)(\"svg\",{height:\"1em\",viewBox:\"0 0 1024 1024\",children:[(0,Mn.jsx)(\"path\",{fill:\"currentColor\",d:\"M614.4 375.46666667a68.26666667 68.26666667 0 1 0 0-136.53333334 68.26666667 68.26666667 0 0 0 0 136.53333334zM409.6 375.46666667a68.26666667 68.26666667 0 1 1-136.53333333 0 68.26666667 68.26666667 0 0 1 136.53333333 0zM375.46666667 716.8a68.26666667 68.26666667 0 1 0 0-136.53333333 68.26666667 68.26666667 0 0 0 0 136.53333333z\"}),(0,Mn.jsx)(\"path\",{fill:\"currentColor\",d:\"M34.13333333 512a477.86666667 477.86666667 0 0 1 955.73333334 0c0 43.07626667-18.97813333 73.728-48.67413334 93.73013333-26.8288 18.15893333-61.37173333 26.8288-92.43306666 33.1776-11.40053333 2.32106667-22.45973333 4.36906667-33.10933334 6.3488-21.02613333 3.82293333-40.89173333 7.50933333-60.6208 12.83413334-29.14986667 7.91893333-51.06346667 17.8176-65.67253333 32.08533333-8.26026667 7.91893333-15.22346667 18.8416-21.2992 32.768a213.33333333 213.33333333 0 0 0-10.4448 29.96906667 427.34933333 427.34933333 0 0 0-4.77866667 18.50026666c-3.41333333 14.06293333-6.21226667 28.4672-9.14773333 43.34933334l-0.06826667 0.4096-0.2048 1.024-0.34133333 1.77493333-3.4816 17.33973333-2.38933333 11.4688c-6.69013333 31.40266667-15.70133333 66.1504-33.24586667 93.11573334-19.31946667 29.696-49.152 49.9712-91.9552 49.9712a477.86666667 477.86666667 0 0 1-477.86666667-477.86666667z m477.86666667-409.6a409.6 409.6 0 1 0 0 819.2 36.864 36.864 0 0 0 34.74773333-18.97813333c9.96693333-15.29173333 16.9984-38.63893333 23.68853334-70.10986667 1.8432-8.46506667 3.61813333-17.68106667 5.46133333-27.17013333 4.57386667-23.07413333 9.55733333-48.3328 16.04266667-71.13386667 9.28426667-32.768 23.41546667-67.51573333 49.90293333-93.11573333 27.0336-26.14613333 62.2592-39.936 95.36853333-48.87893334 22.39146667-6.07573333 47.104-10.6496 69.632-14.81386666 10.0352-1.8432 19.52426667-3.54986667 28.2624-5.39306667 30.99306667-6.28053333 53.38453333-13.03893333 67.92533334-22.86933333a47.104 47.104 0 0 0 9.48906666-8.192 34.33813333 34.33813333 0 0 0 4.64213334-6.82666667A47.85493333 47.85493333 0 0 0 921.6 512a409.6 409.6 0 0 0-409.6-409.6z\"})]})},Xn=function(){return(0,Mn.jsx)(\"svg\",{height:\"1em\",fill:\"currentColor\",viewBox:\"0 0 576 512\",children:(0,Mn.jsx)(\"path\",{fill:\"currentColor\",d:\"M64 128V96h64l0 320H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H224c17.7 0 32-14.3 32-32s-14.3-32-32-32H192l0-320h64v32c0 17.7 14.3 32 32 32s32-14.3 32-32V80c0-26.5-21.5-48-48-48H160 48C21.5 32 0 53.5 0 80v48c0 17.7 14.3 32 32 32s32-14.3 32-32zM502.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8h32V352H416c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H512V160h32c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64z\"})})},Yn=function(){return(0,Mn.jsx)(\"svg\",{height:\"1em\",fill:\"currentColor\",viewBox:\"0 0 448 512\",children:(0,Mn.jsx)(\"path\",{fill:\"currentColor\",d:\"M48 96l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-245.5c0-4.2-1.7-8.3-4.7-11.3l33.9-33.9c12 12 18.7 28.3 18.7 45.3L448 416c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l245.5 0c17 0 33.3 6.7 45.3 18.7l74.5 74.5-33.9 33.9L320.8 84.7c-.3-.3-.5-.5-.8-.8L320 184c0 13.3-10.7 24-24 24l-192 0c-13.3 0-24-10.7-24-24L80 80 64 80c-8.8 0-16 7.2-16 16zm80-16l0 80 144 0 0-80L128 80zm32 240a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\"})})},$n=function(){return(0,Mn.jsxs)(\"svg\",{height:\"1em\",fill:\"currentColor\",viewBox:\"0 0 1024 1024\",children:[(0,Mn.jsx)(\"path\",{d:\"M915.62666667 287.46666667h-0.32M915.30666667 632.10666667h0.32\",fill:\"currentColor\",\"p-id\":\"1372\"}),(0,Mn.jsx)(\"path\",{d:\"M968.85333333 732.05333333L831.36 595.30666667v102.4H638.93333333v68.8h192.42666667v102.29333333l137.49333333-136.74666667\",fill:\"currentColor\",\"p-id\":\"1373\"}),(0,Mn.jsx)(\"path\",{d:\"M55.14666667 134.72v753.38666667c0 0.53333333 0.10666667 0.96 0.10666666 1.49333333V133.22666667c0 0.53333333-0.10666667 0.96-0.10666666 1.49333333z\",\"p-id\":\"1374\"}),(0,Mn.jsx)(\"path\",{d:\"M808.96 512.64h-0.42666667M808.53333333 857.28h0.42666667\",fill:\"currentColor\",\"p-id\":\"1375\"}),(0,Mn.jsx)(\"path\",{d:\"M157.86666667 990.82666667h547.94666666c58.24 0 102.72-44.48 102.72-102.72v-30.82666667h-68.48v30.82666667c0 20.58666667-13.65333333 34.24-34.24 34.24H157.86666667c-20.58666667 0-34.24-13.65333333-34.24-34.24V134.72c0-20.58666667 13.65333333-34.24 34.24-34.24h308.26666666v205.44c0.10666667 37.76 30.72 68.37333333 68.48 68.48h205.44v138.24H808.53333333V305.92c0-10.24-3.41333333-17.17333333-10.24-24L558.50666667 42.24c-6.82666667-6.82666667-13.65333333-10.24-24-10.24H157.86666667c-57.70666667 0-101.86666667 43.73333333-102.61333334 101.22666667V889.6c0.85333333 57.49333333 44.90666667 101.22666667 102.61333334 101.22666667z m376.74666666-876.58666667L726.4 305.92H534.61333333V114.24z\",fill:\"currentColor\",\"p-id\":\"1376\"}),(0,Mn.jsx)(\"path\",{d:\"M391.36 793.38666667h-79.57333333V416.10666667h116.26666666c103.36-1.38666667 154.34666667 37.44 152.96 116.26666666-2.77333333 73.38666667-46.18666667 112.21333333-130.56 116.26666667h-59.09333333v144.74666667z m0-314.02666667v106.02666667h24.42666667c54.4 5.44 80.85333333-12.26666667 79.57333333-53.01333334 0-36.69333333-26.56-54.4-79.57333333-53.01333333h-24.42666667z\",fill:\"currentColor\",\"p-id\":\"1377\"})]})},Zn=function(){return(0,Mn.jsxs)(\"svg\",{height:\"1em\",viewBox:\"0 0 1024 1024\",children:[(0,Mn.jsx)(\"path\",{d:\"M66.782609 772.541217h196.051478a58.835478 58.835478 0 0 1 58.768696 58.768696v117.359304l235.78713-165.442782c9.928348-6.989913 21.615304-10.685217 33.747478-10.685218H957.217391V89.043478H66.782609v683.475479zM313.61113 1022.886957a58.768696 58.768696 0 0 1-58.768695-58.768696v-124.794435H58.724174A58.813217 58.813217 0 0 1 0 780.55513V81.029565A58.835478 58.835478 0 0 1 58.768696 22.26087h906.462608A58.835478 58.835478 0 0 1 1024 81.029565v699.503305a58.835478 58.835478 0 0 1-58.768696 58.768695H593.697391L347.336348 1012.201739c-10.106435 7.101217-21.904696 10.685217-33.725218 10.685218z\",fill:\"currentColor\"}),(0,Mn.jsx)(\"path\",{d:\"M761.878261 326.032696h-499.756522a33.391304 33.391304 0 0 1 0-66.782609h499.756522a33.391304 33.391304 0 1 1 0 66.782609M761.878261 567.652174h-499.756522a33.391304 33.391304 0 0 1 0-66.782609h499.756522a33.391304 33.391304 0 1 1 0 66.782609\",fill:\"currentColor\"})]})},Qn=function(){return(0,Mn.jsxs)(\"svg\",{height:\"1em\",viewBox:\"0 0 1024 1024\",children:[(0,Mn.jsx)(\"path\",{d:\"M658.02666667 432.85333333H347.30666667c-18.77333333 0-34.13333333 15.36-34.13333334 34.13333334s15.36 34.13333333 34.13333334 34.13333333h310.72c18.77333333 0 34.13333333-15.36 34.13333333-34.13333333s-15.36-34.13333333-34.13333333-34.13333334zM571.30666667 557.22666667h-224c-18.77333333 0-34.13333333 15.36-34.13333334 34.13333333s15.36 34.13333333 34.13333334 34.13333333h224c18.77333333 0 34.13333333-15.36 34.13333333-34.13333333s-15.36-34.13333333-34.13333333-34.13333333zM894.29333333 61.12l-621.76-0.10666667c-18.88 0-34.13333333 15.25333333-34.13333333 34.13333334s15.25333333 34.13333333 34.13333333 34.13333333l621.76 0.10666667c15.25333333 0 27.73333333 12.48 27.73333334 27.73333333v431.36c0 18.88 15.25333333 34.13333333 34.13333333 34.13333333s34.13333333-15.25333333 34.13333333-34.13333333V157.12c0-52.8-43.2-96-96-96z\",fill:\"currentColor\"}),(0,Mn.jsx)(\"path\",{d:\"M734.4 229.54666667H157.54666667c-67.52 0-122.66666667 55.25333333-122.66666667 122.66666666v368.74666667c0 66.77333333 54.08 121.49333333 120.53333333 122.66666667l0.42666667 66.98666666c8.64 38.4 50.98666667 84.37333333 121.81333333 36.05333334L389.54666667 843.73333333h344.64c67.52 0 122.66666667-55.25333333 122.66666666-122.66666666V352.21333333c0.21333333-67.52-55.04-122.66666667-122.45333333-122.66666666z m54.4 491.30666666c0 14.4-5.65333333 28.05333333-16 38.4s-24 16-38.4 16h-340.26666667v0.10666667H373.33333333l-72.85333333 68.05333333-60.37333333 56.32c-26.88 17.6-24.96-26.66666667-24.96-26.66666666l-0.10666667-29.76v-68.05333334h-58.45333333v-0.21333333c-14.08-0.21333333-27.30666667-5.86666667-37.44-16-10.34666667-10.34666667-16-24-16-38.4V352.21333333c0-14.4 5.65333333-28.05333333 16-38.4s24-16 38.4-16h576.85333333c14.4 0 28.05333333 5.65333333 38.4 16s16 24 16 38.4v368.64z\",fill:\"currentColor\"}),(0,Mn.jsx)(\"path\",{d:\"M249.06666667 432.42666667c-18.77333333 0-34.13333333 15.36-34.13333334 34.13333333s15.36 34.13333333 34.13333334 34.13333333 34.13333333-15.36 34.13333333-34.13333333-15.36-34.13333333-34.13333333-34.13333333zM249.06666667 557.22666667c-18.77333333 0-34.13333333 15.36-34.13333334 34.13333333s15.36 34.13333333 34.13333334 34.13333333 34.13333333-15.36 34.13333333-34.13333333-15.36-34.13333333-34.13333333-34.13333333z\",fill:\"currentColor\"})]})},Jn=function(){return(0,Mn.jsx)(\"svg\",{viewBox:\"0 0 1024 1024\",height:\"1em\",children:(0,Mn.jsx)(\"path\",{d:\"M820.35259846 337.71374951V646.0663464h134.06634641V109.8009592h-536.2653872v134.06634641h308.35259689L109.8009592 860.57250255l93.84644234 93.84644232 616.70519692-616.70519536z\",fill:\"currentColor\"})})},eo=function(){return(0,Mn.jsx)(\"svg\",{viewBox:\"0 0 1365 1024\",height:\"1em\",children:(0,Mn.jsx)(\"path\",{d:\"M992 992H392v-2.71999969A319.75999969 319.75999969 0 0 1 193.92000031 393.99999969a400.00000031 400.00000031 0 0 1 790.11999938-41.47999969c2.68000031 0 5.28-0.52000031 8.00000062-0.52000031A319.99999969 319.99999969 0 0 1 992 992z m0-480h-7.99999969a247.99999969 247.99999969 0 0 1-77.28 0H831.99999969v-79.99999969a240 240 0 0 0-480 0v79.99999969a202.87999969 202.87999969 0 0 0-79.99999969 22.56L247.23999969 552.00000031a157.39999969 157.39999969 0 0 0-15.24 15.31999969 54.28000031 54.28000031 0 0 0-9.96 12.48A157.44 157.44 0 0 0 192.00000031 672.00000031a166.36000031 166.36000031 0 0 0 120 159.99999938h679.99999969a160.00000031 160.00000031 0 0 0 0-319.99999969z\",fill:\"currentColor\"})})},to=function(){return(0,Mn.jsxs)(\"svg\",{viewBox:\"0 0 1024 1024\",height:\"1em\",children:[(0,Mn.jsx)(\"path\",{d:\"M64.79816853 182.94087573h894.40366294v47.08331307H64.79816853zM653.22925227 88.78804053v47.06952214h47.06952213V88.78804053c0-26.01028907-21.073024-47.06952213-46.9316096-47.06952213h-282.72053867a46.91092267 46.91092267 0 0 0-33.25069333 13.77745493 46.84610347 46.84610347 0 0 0-13.68091627 33.2920672v47.06952214h47.06952214V88.78804053h282.4447136z m0 0\",fill:\"currentColor\"}),(0,Mn.jsx)(\"path\",{d:\"M182.47886827 936.12218133v-706.11178453H135.4093472V936.08080853c0 26.037872 20.9489024 47.12468693 47.12468693 47.12468694h658.94572374c26.037872 0 47.12468693-20.9489024 47.12468693-47.12468694V230.0103968H841.52113173v706.11178453H182.47886827z m0 0\",fill:\"currentColor\"}),(0,Mn.jsx)(\"path\",{d:\"M300.17336 324.163232h47.06952213V747.83030293h-47.06952213V324.163232z m188.29187947 0h47.06952106V747.83030293H488.46523947V324.163232z m188.2918784 0h47.06952213V747.83030293h-47.06952213V324.163232z m0 0\",fill:\"currentColor\"})]})},ro=function(e){return(0,Mn.jsx)(Pn,In({component:Fn},e))},no=function(e){return(0,Mn.jsx)(Pn,In({component:Dn},e))},oo=function(e){return(0,Mn.jsx)(Pn,In({component:Bn},e))},io=function(e){return(0,Mn.jsx)(Pn,In({component:Ln},e))},ao=function(e){return(0,Mn.jsx)(Pn,In({component:zn},e))},so=function(e){return(0,Mn.jsx)(Pn,In({component:Hn},e))},lo=function(e){return(0,Mn.jsx)(Pn,In({component:Un},e))},co=function(e){return(0,Mn.jsx)(Pn,In({component:Vn},e))},uo=function(e){return(0,Mn.jsx)(Pn,In({component:Wn},e))},fo=function(e){return(0,Mn.jsx)(Pn,In({component:Gn},e))},ho=function(e){return(0,Mn.jsx)(Pn,In({component:qn},e))},po=function(e){return(0,Mn.jsx)(Pn,In({component:Kn},e))},mo=function(e){return(0,Mn.jsx)(Pn,In({component:Xn},e))},go=function(e){return(0,Mn.jsx)(Pn,In({component:Yn},e))},vo=function(e){return(0,Mn.jsx)(Pn,In({component:$n},e))},bo=function(e){return(0,Mn.jsx)(Pn,In({component:Zn},e))},yo=function(e){return(0,Mn.jsx)(Pn,In({component:Qn},e))},wo=function(e){return(0,Mn.jsx)(Pn,In({component:Jn},e))},xo=function(e){return(0,Mn.jsx)(Pn,In({component:eo},e))},So=function(e){return(0,Mn.jsx)(Pn,In({component:to},e))},Co=[\"#ff0000\",\"#ffbe00\",\"#ffff00\",\"#83d33c\",\"#00b445\",\"#00b2f4\",\"#1677ff\",\"#001f63\",\"#7828a4\",\"#ff00ff\"],ko=[14,16,18,20,22,24],Eo={colors:Co,fontSize:ko,defaultFontList:[{label:\"Arial\",value:\"Arial\"},{label:\"Times New Roman\",value:\"Times New Roman\"},{label:\"Georgia\",value:\"Georgia\"},{label:\"Verdana\",value:\"Verdana\"},{label:\"Tahoma\",value:\"Tahoma, Geneva, sans-serif\"},{label:\"Trebuchet MS\",value:'\"Trebuchet MS\", sans-serif'},{label:\"Courier New\",value:'\"Courier New\", Courier, monospace'},{label:\"Lucida Console\",value:'\"Lucida Console\", Monaco, monospace'},{label:\"宋体\",value:'SimSun, Songti SC, STSong, 宋体, \"Noto Serif SC\", serif'},{label:\"黑体\",value:\"Microsoft YaHei, PingFang SC, Heiti SC, SimHei, 黑体, sans-serif\"},{label:\"楷体\",value:'KaiTi, KaiTi_GB2312, STFangsong, 楷体, \"AR PL UKai CN\", serif'}],handwritingFontList:[{label:\"平方长安体\",value:\"PingFangChangAnTi-2\",external:!0,url:o.p+\"font/PingFangChangAnTi-2.c4a81d.ttf\"},{label:\"千图笔锋手写体\",value:\"qiantubifengshouxieti\",external:!0,url:o.p+\"font/qiantubifengshouxieti.0cd35d.ttf\"}],signature:{COLORS:[\"#000000\",\"#ff0000\",\"#1677ff\"],WIDTH:366,HEIGHT:200,TYPE:\"Draw\",MAX_SIZE:5242880,ACCEPT:\".png,.jpg,.jpeg,.bmp\"},stamp:{MAX_SIZE:5242880,ACCEPT:\".png,.jpg,.jpeg,.bmp\",DEFAULT_STAMP:[\"data:image/png;base64,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\",\"data:image/png;base64,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\",\"data:image/png;base64,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\",\"data:image/png;base64,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\",\"data:image/png;base64,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\",\"data:image/png;base64,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\"],editor:{DEFAULT_BACKGROUND_COLOR:\"#00b445\",DEFAULT_BORDER_COLOR:null,DEFAULT_TEXT_COLOR:\"#fff\"}},chooseSetting:{COLOR:\"#1677ff\",STROKEWIDTH:2,OPACITY:.7},connectorLine:{ENABLED:!0,COLOR:\"#1677ff\",WIDTH:2,OPACITY:.7},setting:{COLOR:Co[0],FONT_SIZE:ko[2],HIGHLIGHT_COLOR:Co[2],STRIKEOUT_COLOR:Co[0],UNDERLINE_COLOR:Co[6],STROKE_WIDTH:2,OPACITY:1,MAX_CURSOR_SIZE:96,MAX_UPLOAD_IMAGE_SIZE:800,SAVE_BUTTON:!0,EXPORT_PDF:!0,EXPORT_EXCEL:!0,LOAD_PDF_ANNOTATION:!0,DB_CLICK_DELETE:!1,HIDE_PDFJS_ELEMENT:[\"#editorModeButtons\",\"#editorModeSeparator\",\"#pageRotateCw\",\"#pageRotateCcw\",\"#download\"]}},Oo=function(e){return e[e.NONE=0]=\"NONE\",e[e.TEXT=1]=\"TEXT\",e[e.LINK=2]=\"LINK\",e[e.FREETEXT=3]=\"FREETEXT\",e[e.LINE=4]=\"LINE\",e[e.SQUARE=5]=\"SQUARE\",e[e.CIRCLE=6]=\"CIRCLE\",e[e.POLYGON=7]=\"POLYGON\",e[e.POLYLINE=8]=\"POLYLINE\",e[e.HIGHLIGHT=9]=\"HIGHLIGHT\",e[e.UNDERLINE=10]=\"UNDERLINE\",e[e.SQUIGGLY=11]=\"SQUIGGLY\",e[e.STRIKEOUT=12]=\"STRIKEOUT\",e[e.STAMP=13]=\"STAMP\",e[e.CARET=14]=\"CARET\",e[e.INK=15]=\"INK\",e[e.POPUP=16]=\"POPUP\",e[e.FILEATTACHMENT=17]=\"FILEATTACHMENT\",e[e.SOUND=18]=\"SOUND\",e[e.MOVIE=19]=\"MOVIE\",e[e.WIDGET=20]=\"WIDGET\",e[e.SCREEN=21]=\"SCREEN\",e[e.PRINTERMARK=22]=\"PRINTERMARK\",e[e.TRAPNET=23]=\"TRAPNET\",e[e.WATERMARK=24]=\"WATERMARK\",e[e.THREED=25]=\"THREED\",e[e.REDACT=26]=\"REDACT\",e[e.NOTE=27]=\"NOTE\",e}({}),Ao=function(e){return e[e.DISABLE=-1]=\"DISABLE\",e[e.NONE=0]=\"NONE\",e[e.FREETEXT=3]=\"FREETEXT\",e[e.HIGHLIGHT=9]=\"HIGHLIGHT\",e[e.STAMP=13]=\"STAMP\",e[e.INK=15]=\"INK\",e}({}),To=function(e){return e[e.NONE=-1]=\"NONE\",e[e.SELECT=0]=\"SELECT\",e[e.HIGHLIGHT=1]=\"HIGHLIGHT\",e[e.STRIKEOUT=2]=\"STRIKEOUT\",e[e.UNDERLINE=3]=\"UNDERLINE\",e[e.FREETEXT=4]=\"FREETEXT\",e[e.RECTANGLE=5]=\"RECTANGLE\",e[e.CIRCLE=6]=\"CIRCLE\",e[e.FREEHAND=7]=\"FREEHAND\",e[e.FREE_HIGHLIGHT=8]=\"FREE_HIGHLIGHT\",e[e.SIGNATURE=9]=\"SIGNATURE\",e[e.STAMP=10]=\"STAMP\",e[e.NOTE=11]=\"NOTE\",e[e.ARROW=12]=\"ARROW\",e[e.CLOUD=13]=\"CLOUD\",e}({}),jo=function(e){return e.Accepted=\"Accepted\",e.Rejected=\"Rejected\",e.Cancelled=\"Cancelled\",e.Completed=\"Completed\",e.None=\"None\",e.Closed=\"Closed\",e}({}),Po=[{name:\"select\",type:To.SELECT,pdfjsEditorType:Ao.NONE,pdfjsAnnotationType:Oo.NONE,isOnce:!1,resizable:!1,draggable:!1,icon:(0,Mn.jsx)(ro,{})},{name:\"highlight\",type:To.HIGHLIGHT,pdfjsEditorType:Ao.HIGHLIGHT,pdfjsAnnotationType:Oo.HIGHLIGHT,subtype:\"Highlight\",isOnce:!1,resizable:!1,draggable:!1,icon:(0,Mn.jsx)(no,{}),style:{color:Eo.setting.HIGHLIGHT_COLOR},styleEditable:{color:!0,strokeWidth:!1,opacity:!1}},{name:\"strikeout\",type:To.STRIKEOUT,pdfjsEditorType:Ao.HIGHLIGHT,pdfjsAnnotationType:Oo.STRIKEOUT,subtype:\"StrikeOut\",isOnce:!1,resizable:!1,draggable:!1,icon:(0,Mn.jsx)(oo,{}),style:{color:Eo.setting.STRIKEOUT_COLOR},styleEditable:{color:!0,opacity:!1,strokeWidth:!1}},{name:\"underline\",type:To.UNDERLINE,pdfjsEditorType:Ao.HIGHLIGHT,pdfjsAnnotationType:Oo.UNDERLINE,subtype:\"Underline\",isOnce:!1,resizable:!1,draggable:!1,icon:(0,Mn.jsx)(io,{}),style:{color:Eo.setting.UNDERLINE_COLOR},styleEditable:{color:!0,opacity:!1,strokeWidth:!1}},{name:\"rectangle\",type:To.RECTANGLE,pdfjsEditorType:Ao.INK,pdfjsAnnotationType:Oo.SQUARE,subtype:\"Square\",isOnce:!0,resizable:!0,draggable:!0,icon:(0,Mn.jsx)(so,{}),style:{color:Eo.setting.COLOR,strokeWidth:Eo.setting.STROKE_WIDTH,opacity:Eo.setting.OPACITY},styleEditable:{color:!0,opacity:!0,strokeWidth:!0}},{name:\"circle\",type:To.CIRCLE,pdfjsEditorType:Ao.INK,pdfjsAnnotationType:Oo.CIRCLE,subtype:\"Circle\",isOnce:!0,resizable:!0,draggable:!0,icon:(0,Mn.jsx)(lo,{}),style:{color:Eo.setting.COLOR,strokeWidth:Eo.setting.STROKE_WIDTH,opacity:Eo.setting.OPACITY},styleEditable:{color:!0,opacity:!0,strokeWidth:!0}},{name:\"note\",type:To.NOTE,pdfjsEditorType:Ao.INK,pdfjsAnnotationType:Oo.TEXT,subtype:\"Text\",isOnce:!0,resizable:!1,draggable:!0,icon:(0,Mn.jsx)(bo,{})},{name:\"arrow\",type:To.ARROW,pdfjsEditorType:Ao.INK,pdfjsAnnotationType:Oo.LINE,subtype:\"Arrow\",isOnce:!0,resizable:!0,draggable:!0,icon:(0,Mn.jsx)(wo,{}),style:{color:Eo.setting.COLOR,strokeWidth:Eo.setting.STROKE_WIDTH,opacity:Eo.setting.OPACITY},styleEditable:{color:!0,opacity:!0,strokeWidth:!0}},{name:\"cloud\",type:To.CLOUD,pdfjsEditorType:Ao.INK,pdfjsAnnotationType:Oo.POLYLINE,subtype:\"PolyLine\",isOnce:!0,resizable:!0,draggable:!0,icon:(0,Mn.jsx)(xo,{}),style:{color:Eo.setting.COLOR,strokeWidth:Eo.setting.STROKE_WIDTH,opacity:Eo.setting.OPACITY},styleEditable:{color:!0,opacity:!0,strokeWidth:!0}},{name:\"freehand\",type:To.FREEHAND,pdfjsEditorType:Ao.INK,pdfjsAnnotationType:Oo.INK,subtype:\"Ink\",isOnce:!0,resizable:!0,draggable:!0,icon:(0,Mn.jsx)(co,{}),style:{color:Eo.setting.COLOR,strokeWidth:Eo.setting.STROKE_WIDTH,opacity:Eo.setting.OPACITY},styleEditable:{color:!0,opacity:!0,strokeWidth:!0}},{name:\"freeHighlight\",type:To.FREE_HIGHLIGHT,pdfjsEditorType:Ao.INK,pdfjsAnnotationType:Oo.INK,subtype:\"Highlight\",isOnce:!0,resizable:!0,draggable:!0,icon:(0,Mn.jsx)(uo,{}),style:{color:Eo.setting.COLOR,strokeWidth:10,opacity:.5},styleEditable:{color:!0,opacity:!0,strokeWidth:!1}},{name:\"freeText\",type:To.FREETEXT,pdfjsEditorType:Ao.STAMP,pdfjsAnnotationType:Oo.FREETEXT,subtype:\"FreeText\",isOnce:!0,resizable:!0,draggable:!0,icon:(0,Mn.jsx)(ao,{}),style:{color:Eo.setting.COLOR,fontSize:Eo.setting.FONT_SIZE},styleEditable:{color:!0,opacity:!0,strokeWidth:!1}},{name:\"signature\",type:To.SIGNATURE,pdfjsEditorType:Ao.STAMP,pdfjsAnnotationType:Oo.STAMP,subtype:\"Caret\",isOnce:!0,resizable:!0,draggable:!0,icon:(0,Mn.jsx)(fo,{})},{name:\"stamp\",type:To.STAMP,pdfjsEditorType:Ao.STAMP,pdfjsAnnotationType:Oo.STAMP,subtype:\"Stamp\",isOnce:!0,resizable:!0,draggable:!0,icon:(0,Mn.jsx)(ho,{})}],Mo=\"ae\",Ro=\"\".concat(Mo,\"_username\"),_o=\"\".concat(Mo,\"_get_url\"),Io=\"\".concat(Mo,\"_post_url\"),No=\"\".concat(Mo,\"_default_editor_active\"),Fo=\"\".concat(Mo,\"_default_sidebar_open\");function Do(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=r){var n,o,i,a,s=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return s}}(e,t)||function(e,t){if(e){if(\"string\"==typeof e)return Bo(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Bo(e,t):void 0}}(e,t)||function(){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 Bo(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var Lo=(0,m.forwardRef)((function(e,t){var r=Do((0,m.useState)(!1),2),n=r[0],o=r[1],i=Do((0,m.useState)(Po.filter((function(e){return e.pdfjsEditorType===Ao.HIGHLIGHT}))),1)[0],a=Do((0,m.useState)(null),2),s=a[0],l=a[1],c=(0,m.useRef)(null);ke().t,(0,m.useImperativeHandle)(t,(function(){return{open:u,close:d}}));var u=function(e){if(l(e),!e||3!==e.endContainer.nodeType&&3!==e.startContainer.nodeType)o(!1);else{o(!0);var t=3===e.endContainer.nodeType?e.endContainer.parentElement.getBoundingClientRect():e.startContainer.parentElement.getBoundingClientRect(),r=t.bottom,n=t.height,i=t.left,a=t.right,s=t.top,u=t.width,d=t.x,f=t.y;pn({getBoundingClientRect:function(){return{width:u,height:n,x:d,y:f,left:i,right:a,top:s,bottom:r}}},c.current,{placement:\"bottom\",middleware:[hn()]}).then((function(e){var t=e.x,r=e.y;Object.assign(c.current.style,{left:\"\".concat(t,\"px\"),top:\"\".concat(r,\"px\")})}))}},d=function(){o(!1),l(null)},f=i.map((function(t,r){return(0,Mn.jsx)(\"li\",{onClick:function(){return function(t){o(!1),e.onChange(t,s)}(t)},children:(0,Mn.jsx)(\"div\",{className:\"icon\",children:t.icon})},r)}));return(0,Mn.jsx)(Mn.Fragment,{children:(0,Mn.jsx)(\"div\",{className:\"CustomPopbar \".concat(n?\"show\":\"hide\"),ref:c,children:(0,Mn.jsx)(\"ul\",{className:\"buttons\",children:f})})})})),zo=o(8508),Ho={};function Uo(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}function Vo(e){return function(e){if(Array.isArray(e))return Me(e)}(e)||Uo(e)||Re(e)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}Ho.styleTagTransform=f(),Ho.setAttributes=l(),Ho.insert=a().bind(null,\"head\"),Ho.domAPI=n(),Ho.insertStyleElement=u(),t()(zo.A,Ho),zo.A&&zo.A.locals&&zo.A.locals;const Wo=m.createContext({}),Go=\"ant\",qo=\"anticon\",Ko=[\"outlined\",\"borderless\",\"filled\",\"underlined\"],Xo=m.createContext({getPrefixCls:(e,t)=>t||(e?`${Go}-${e}`:Go),iconPrefixCls:qo}),{Consumer:Yo}=Xo,$o={};function Zo(e){const t=m.useContext(Xo),{getPrefixCls:r,direction:n,getPopupContainer:o}=t,i=t[e];return Object.assign(Object.assign({classNames:$o,styles:$o},i),{getPrefixCls:r,direction:n,getPopupContainer:o})}const Qo=function(e){for(var t,r=0,n=0,o=e.length;o>=4;++n,o-=4)t=1540483477*(65535&(t=255&e.charCodeAt(n)|(255&e.charCodeAt(++n))<<8|(255&e.charCodeAt(++n))<<16|(255&e.charCodeAt(++n))<<24))+(59797*(t>>>16)<<16),r=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&r)+(59797*(r>>>16)<<16);switch(o){case 3:r^=(255&e.charCodeAt(n+2))<<16;case 2:r^=(255&e.charCodeAt(n+1))<<8;case 1:r=1540483477*(65535&(r^=255&e.charCodeAt(n)))+(59797*(r>>>16)<<16)}return(((r=1540483477*(65535&(r^=r>>>13))+(59797*(r>>>16)<<16))^r>>>15)>>>0).toString(36)},Jo=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=new Set;return function e(t,o){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,a=n.has(t);if(Xt(!a,\"Warning: There may be circular references\"),a)return!1;if(t===o)return!0;if(r&&i>1)return!1;n.add(t);var s=i+1;if(Array.isArray(t)){if(!Array.isArray(o)||t.length!==o.length)return!1;for(var l=0;l<t.length;l++)if(!e(t[l],o[l],s))return!1;return!0}if(t&&o&&\"object\"===Ne(t)&&\"object\"===Ne(o)){var c=Object.keys(t);return c.length===Object.keys(o).length&&c.every((function(r){return e(t[r],o[r],s)}))}return!1}(e,t)};function ei(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function ti(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,Fe(n.key),n)}}function ri(e,t,r){return t&&ti(e.prototype,t),r&&ti(e,r),Object.defineProperty(e,\"prototype\",{writable:!1}),e}function ni(e){return e.join(\"%\")}var oi=function(){function e(t){ei(this,e),De(this,\"instanceId\",void 0),De(this,\"cache\",new Map),this.instanceId=t}return ri(e,[{key:\"get\",value:function(e){return this.opGet(ni(e))}},{key:\"opGet\",value:function(e){return this.cache.get(e)||null}},{key:\"update\",value:function(e,t){return this.opUpdate(ni(e),t)}},{key:\"opUpdate\",value:function(e,t){var r=t(this.cache.get(e));null===r?this.cache.delete(e):this.cache.set(e,r)}}]),e}();const ii=oi;var ai=\"data-token-hash\",si=\"data-css-hash\",li=\"__cssinjs_instance__\";var ci=m.createContext({hashPriority:\"low\",cache:function(){var e=Math.random().toString(12).slice(2);if(\"undefined\"!=typeof document&&document.head&&document.body){var t=document.body.querySelectorAll(\"style[\".concat(si,\"]\"))||[],r=document.head.firstChild;Array.from(t).forEach((function(t){t[li]=t[li]||e,t[li]===e&&document.head.insertBefore(t,r)}));var n={};Array.from(document.querySelectorAll(\"style[\".concat(si,\"]\"))).forEach((function(t){var r,o=t.getAttribute(si);n[o]?t[li]===e&&(null===(r=t.parentNode)||void 0===r||r.removeChild(t)):n[o]=!0}))}return new ii(e)}(),defaultCache:!0});const ui=ci;new RegExp(\"CALC_UNIT\",\"g\");var di=function(){function e(){ei(this,e),De(this,\"cache\",void 0),De(this,\"keys\",void 0),De(this,\"cacheCallTimes\",void 0),this.cache=new Map,this.keys=[],this.cacheCallTimes=0}return ri(e,[{key:\"size\",value:function(){return this.keys.length}},{key:\"internalGet\",value:function(e){var t,r,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o={map:this.cache};return e.forEach((function(e){var t;o=o?null===(t=o)||void 0===t||null===(t=t.map)||void 0===t?void 0:t.get(e):void 0})),null!==(t=o)&&void 0!==t&&t.value&&n&&(o.value[1]=this.cacheCallTimes++),null===(r=o)||void 0===r?void 0:r.value}},{key:\"get\",value:function(e){var t;return null===(t=this.internalGet(e,!0))||void 0===t?void 0:t[0]}},{key:\"has\",value:function(e){return!!this.internalGet(e)}},{key:\"set\",value:function(t,r){var n=this;if(!this.has(t)){if(this.size()+1>e.MAX_CACHE_SIZE+e.MAX_CACHE_OFFSET){var o=this.keys.reduce((function(e,t){var r=Ie(e,2)[1];return n.internalGet(t)[1]<r?[t,n.internalGet(t)[1]]:e}),[this.keys[0],this.cacheCallTimes]),i=Ie(o,1)[0];this.delete(i)}this.keys.push(t)}var a=this.cache;t.forEach((function(e,o){if(o===t.length-1)a.set(e,{value:[r,n.cacheCallTimes++]});else{var i=a.get(e);i?i.map||(i.map=new Map):a.set(e,{map:new Map}),a=a.get(e).map}}))}},{key:\"deleteByPath\",value:function(e,t){var r,n=e.get(t[0]);if(1===t.length)return n.map?e.set(t[0],{map:n.map}):e.delete(t[0]),null===(r=n.value)||void 0===r?void 0:r[0];var o=this.deleteByPath(n.map,t.slice(1));return n.map&&0!==n.map.size||n.value||e.delete(t[0]),o}},{key:\"delete\",value:function(e){if(this.has(e))return this.keys=this.keys.filter((function(t){return!function(e,t){if(e.length!==t.length)return!1;for(var r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}(t,e)})),this.deleteByPath(this.cache,e)}}]),e}();De(di,\"MAX_CACHE_SIZE\",20),De(di,\"MAX_CACHE_OFFSET\",5);var fi=0,hi=function(){function e(t){ei(this,e),De(this,\"derivatives\",void 0),De(this,\"id\",void 0),this.derivatives=Array.isArray(t)?t:[t],this.id=fi,0===t.length&&t.length,fi+=1}return ri(e,[{key:\"getDerivativeToken\",value:function(e){return this.derivatives.reduce((function(t,r){return r(e,t)}),void 0)}}]),e}(),pi=new di;function mi(e){var t=Array.isArray(e)?e:[e];return pi.has(t)||pi.set(t,new hi(t)),pi.get(t)}var gi=new WeakMap,vi={},bi=new WeakMap;function yi(e){var t=bi.get(e)||\"\";return t||(Object.keys(e).forEach((function(r){var n=e[r];t+=r,n instanceof hi?t+=n.id:n&&\"object\"===Ne(n)?t+=yi(n):t+=n})),t=Qo(t),bi.set(e,t)),t}function wi(e,t){return Qo(\"\".concat(t,\"_\").concat(yi(e)))}\"random-\".concat(Date.now(),\"-\").concat(Math.random()).replace(/\\./g,\"\");var xi=Tt();function Si(e){return\"number\"==typeof e?\"\".concat(e,\"px\"):e}function Ci(e,t,r){var n;if(arguments.length>4&&void 0!==arguments[4]&&arguments[4])return e;var o=At(At({},arguments.length>3&&void 0!==arguments[3]?arguments[3]:{}),{},(De(n={},ai,t),De(n,si,r),n)),i=Object.keys(o).map((function(e){var t=o[e];return t?\"\".concat(e,'=\"').concat(t,'\"'):null})).filter((function(e){return e})).join(\" \");return\"<style \".concat(i,\">\").concat(e,\"</style>\")}var ki=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";return\"--\".concat(t?\"\".concat(t,\"-\"):\"\").concat(e).replace(/([a-z0-9])([A-Z])/g,\"$1-$2\").replace(/([A-Z]+)([A-Z][a-z0-9]+)/g,\"$1-$2\").replace(/([a-z])([A-Z0-9])/g,\"$1-$2\").toLowerCase()},Ei=function(e,t,r){return Object.keys(e).length?\".\".concat(t).concat(null!=r&&r.scope?\".\".concat(r.scope):\"\",\"{\").concat(Object.entries(e).map((function(e){var t=Ie(e,2),r=t[0],n=t[1];return\"\".concat(r,\":\").concat(n,\";\")})).join(\"\"),\"}\"):\"\"},Oi=function(e,t,r){var n={},o={};return Object.entries(e).forEach((function(e){var t,i,a=Ie(e,2),s=a[0],l=a[1];if(null!=r&&null!==(t=r.preserve)&&void 0!==t&&t[s])o[s]=l;else if(!(\"string\"!=typeof l&&\"number\"!=typeof l||null!=r&&null!==(i=r.ignore)&&void 0!==i&&i[s])){var c,u=ki(s,null==r?void 0:r.prefix);n[u]=\"number\"!=typeof l||null!=r&&null!==(c=r.unitless)&&void 0!==c&&c[s]?String(l):\"\".concat(l,\"px\"),o[s]=\"var(\".concat(u,\")\")}})),[o,Ei(n,t,{scope:null==r?void 0:r.scope})]},Ai=Tt()?m.useLayoutEffect:m.useEffect,Ti=function(e,t){var r=m.useRef(!0);Ai((function(){return e(r.current)}),t),Ai((function(){return r.current=!1,function(){r.current=!0}}),[])},ji=function(e,t){Ti((function(t){if(!t)return e()}),t)};const Pi=Ti;var Mi=At({},g).useInsertionEffect;const Ri=Mi?function(e,t,r){return Mi((function(){return e(),t()}),r)}:function(e,t,r){m.useMemo(e,r),Pi((function(){return t(!0)}),r)},_i=void 0!==At({},g).useInsertionEffect?function(e){var t=[],r=!1;return m.useEffect((function(){return r=!1,function(){r=!0,t.length&&t.forEach((function(e){return e()}))}}),e),function(e){r||t.push(e)}}:function(){return function(e){e()}};function Ii(e,t,r,n,o){var i=m.useContext(ui).cache,a=ni([e].concat(Vo(t))),s=_i([a]),l=function(e){i.opUpdate(a,(function(t){var n=Ie(t||[void 0,void 0],2),o=n[0],i=[void 0===o?0:o,n[1]||r()];return e?e(i):i}))};m.useMemo((function(){l()}),[a]);var c=i.opGet(a)[1];return Ri((function(){null==o||o(c)}),(function(e){return l((function(t){var r=Ie(t,2),n=r[0],i=r[1];return e&&0===n&&(null==o||o(c)),[n+1,i]})),function(){i.opUpdate(a,(function(t){var r=Ie(t||[],2),o=r[0],l=void 0===o?0:o,c=r[1];return 0==l-1?(s((function(){!e&&i.opGet(a)||null==n||n(c,!1)})),null):[l-1,c]}))}}),[a]),c}var Ni={},Fi=new Map;var Di=\"token\";function Bi(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=(0,m.useContext)(ui),o=n.cache.instanceId,i=n.container,a=r.salt,s=void 0===a?\"\":a,l=r.override,c=void 0===l?Ni:l,u=r.formatToken,d=r.getComputedToken,f=r.cssVar,h=function(e,r){for(var n=gi,o=0;o<r.length;o+=1){var i=r[o];n.has(i)||n.set(i,new WeakMap),n=n.get(i)}return n.has(vi)||n.set(vi,Object.assign.apply(Object,[{}].concat(Vo(t)))),n.get(vi)}(0,t),p=yi(h),g=yi(c),v=f?yi(f):\"\",b=Ii(Di,[s,e.id,p,g,v],(function(){var t,r=d?d(h,c,e):function(e,t,r,n){var o=At(At({},r.getDerivativeToken(e)),t);return n&&(o=n(o)),o}(h,c,e,u),n=At({},r),o=\"\";if(f){var i=Ie(Oi(r,f.key,{prefix:f.prefix,ignore:f.ignore,unitless:f.unitless,preserve:f.preserve}),2);r=i[0],o=i[1]}var a=wi(r,s);r._tokenKey=a,n._tokenKey=wi(n,s);var l=null!==(t=null==f?void 0:f.key)&&void 0!==t?t:a;r._themeKey=l,function(e){Fi.set(e,(Fi.get(e)||0)+1)}(l);var p=\"\".concat(\"css\",\"-\").concat(Qo(a));return r._hashId=p,[r,p,n,o,(null==f?void 0:f.key)||\"\"]}),(function(e){!function(e,t){Fi.set(e,(Fi.get(e)||0)-1);var r=Array.from(Fi.keys()),n=r.filter((function(e){return(Fi.get(e)||0)<=0}));r.length-n.length>0&&n.forEach((function(e){!function(e,t){\"undefined\"!=typeof document&&document.querySelectorAll(\"style[\".concat(ai,'=\"').concat(e,'\"]')).forEach((function(e){var r;e[li]===t&&(null===(r=e.parentNode)||void 0===r||r.removeChild(e))}))}(e,t),Fi.delete(e)}))}(e[0]._themeKey,o)}),(function(e){var t=Ie(e,4),r=t[0],n=t[3];if(f&&n){var a=Lt(n,Qo(\"css-variables-\".concat(r._themeKey)),{mark:si,prepend:\"queue\",attachTo:i,priority:-999});a[li]=o,a.setAttribute(ai,r._themeKey)}}));return b}const Li={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var zi=\"comm\",Hi=\"rule\",Ui=\"decl\",Vi=Math.abs,Wi=String.fromCharCode;function Gi(e){return e.trim()}function qi(e,t,r){return e.replace(t,r)}function Ki(e,t,r){return e.indexOf(t,r)}function Xi(e,t){return 0|e.charCodeAt(t)}function Yi(e,t,r){return e.slice(t,r)}function $i(e){return e.length}function Zi(e,t){return t.push(e),e}function Qi(e,t){for(var r=\"\",n=0;n<e.length;n++)r+=t(e[n],n,e,t)||\"\";return r}function Ji(e,t,r,n){switch(e.type){case\"@layer\":if(e.children.length)break;case\"@import\":case\"@namespace\":case Ui:return e.return=e.return||e.value;case zi:return\"\";case\"@keyframes\":return e.return=e.value+\"{\"+Qi(e.children,n)+\"}\";case Hi:if(!$i(e.value=e.props.join(\",\")))return\"\"}return $i(r=Qi(e.children,n))?e.return=e.value+\"{\"+r+\"}\":\"\"}Object.assign;var ea=1,ta=1,ra=0,na=0,oa=0,ia=\"\";function aa(e,t,r,n,o,i,a,s){return{value:e,root:t,parent:r,type:n,props:o,children:i,line:ea,column:ta,length:a,return:\"\",siblings:s}}function sa(){return oa=na>0?Xi(ia,--na):0,ta--,10===oa&&(ta=1,ea--),oa}function la(){return oa=na<ra?Xi(ia,na++):0,ta++,10===oa&&(ta=1,ea++),oa}function ca(){return Xi(ia,na)}function ua(){return na}function da(e,t){return Yi(ia,e,t)}function fa(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function ha(e){return Gi(da(na-1,ga(91===e?e+2:40===e?e+1:e)))}function pa(e){for(;(oa=ca())&&oa<33;)la();return fa(e)>2||fa(oa)>3?\"\":\" \"}function ma(e,t){for(;--t&&la()&&!(oa<48||oa>102||oa>57&&oa<65||oa>70&&oa<97););return da(e,ua()+(t<6&&32==ca()&&32==la()))}function ga(e){for(;la();)switch(oa){case e:return na;case 34:case 39:34!==e&&39!==e&&ga(oa);break;case 40:41===e&&ga(e);break;case 92:la()}return na}function va(e,t){for(;la()&&e+oa!==57&&(e+oa!==84||47!==ca()););return\"/*\"+da(t,na-1)+\"*\"+Wi(47===e?e:la())}function ba(e){for(;!fa(ca());)la();return da(e,na)}function ya(e){return function(e){return ia=\"\",e}(wa(\"\",null,null,null,[\"\"],e=function(e){return ea=ta=1,ra=$i(ia=e),na=0,[]}(e),0,[0],e))}function wa(e,t,r,n,o,i,a,s,l){for(var c=0,u=0,d=a,f=0,h=0,p=0,m=1,g=1,v=1,b=0,y=\"\",w=o,x=i,S=n,C=y;g;)switch(p=b,b=la()){case 40:if(108!=p&&58==Xi(C,d-1)){-1!=Ki(C+=qi(ha(b),\"&\",\"&\\f\"),\"&\\f\",Vi(c?s[c-1]:0))&&(v=-1);break}case 34:case 39:case 91:C+=ha(b);break;case 9:case 10:case 13:case 32:C+=pa(p);break;case 92:C+=ma(ua()-1,7);continue;case 47:switch(ca()){case 42:case 47:Zi(Sa(va(la(),ua()),t,r,l),l),5!=fa(p||1)&&5!=fa(ca()||1)||!$i(C)||\" \"===Yi(C,-1,void 0)||(C+=\" \");break;default:C+=\"/\"}break;case 123*m:s[c++]=$i(C)*v;case 125*m:case 59:case 0:switch(b){case 0:case 125:g=0;case 59+u:-1==v&&(C=qi(C,/\\f/g,\"\")),h>0&&($i(C)-d||0===m&&47===p)&&Zi(h>32?Ca(C+\";\",n,r,d-1,l):Ca(qi(C,\" \",\"\")+\";\",n,r,d-2,l),l);break;case 59:C+=\";\";default:if(Zi(S=xa(C,t,r,c,u,o,s,y,w=[],x=[],d,i),i),123===b)if(0===u)wa(C,t,S,S,w,i,d,s,x);else{switch(f){case 99:if(110===Xi(C,3))break;case 108:if(97===Xi(C,2))break;default:u=0;case 100:case 109:case 115:}u?wa(e,S,S,n&&Zi(xa(e,S,S,0,0,o,s,y,o,w=[],d,x),x),o,x,d,s,n?w:x):wa(C,S,S,S,[\"\"],x,0,s,x)}}c=u=h=0,m=v=1,y=C=\"\",d=a;break;case 58:d=1+$i(C),h=p;default:if(m<1)if(123==b)--m;else if(125==b&&0==m++&&125==sa())continue;switch(C+=Wi(b),b*m){case 38:v=u>0?1:(C+=\"\\f\",-1);break;case 44:s[c++]=($i(C)-1)*v,v=1;break;case 64:45===ca()&&(C+=ha(la())),f=ca(),u=d=$i(y=C+=ba(ua())),b++;break;case 45:45===p&&2==$i(C)&&(m=0)}}return i}function xa(e,t,r,n,o,i,a,s,l,c,u,d){for(var f=o-1,h=0===o?i:[\"\"],p=function(e){return e.length}(h),m=0,g=0,v=0;m<n;++m)for(var b=0,y=Yi(e,f+1,f=Vi(g=a[m])),w=e;b<p;++b)(w=Gi(g>0?h[b]+\" \"+y:qi(y,/&\\f/g,h[b])))&&(l[v++]=w);return aa(e,t,r,0===o?Hi:s,l,c,u,d)}function Sa(e,t,r,n){return aa(e,t,r,zi,Wi(oa),Yi(e,2,-2),0,n)}function Ca(e,t,r,n,o){return aa(e,t,r,Ui,Yi(e,0,n),Yi(e,n+1,-1),n,o)}var ka,Ea=\"data-ant-cssinjs-cache-path\",Oa=\"_FILE_STYLE__\",Aa=!0;var Ta=\"_multi_value_\";function ja(e){return Qi(ya(e),Ji).replace(/\\{%%%\\:[^;];}/g,\";\")}var Pa=function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{root:!0,parentSelectors:[]},o=n.root,i=n.injectHash,a=n.parentSelectors,s=r.hashId,l=r.layer,c=(r.path,r.hashPriority),u=r.transformers,d=void 0===u?[]:u,f=(r.linters,\"\"),h={};function p(t){var n=t.getName(s);if(!h[n]){var o=Ie(e(t.style,r,{root:!1,parentSelectors:a}),1)[0];h[n]=\"@keyframes \".concat(t.getName(s)).concat(o)}}var m=function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return t.forEach((function(t){Array.isArray(t)?e(t,r):t&&r.push(t)})),r}(Array.isArray(t)?t:[t]);return m.forEach((function(t){var n=\"string\"!=typeof t||o?t:{};if(\"string\"==typeof n)f+=\"\".concat(n,\"\\n\");else if(n._keyframe)p(n);else{var l=d.reduce((function(e,t){var r;return(null==t||null===(r=t.visit)||void 0===r?void 0:r.call(t,e))||e}),n);Object.keys(l).forEach((function(t){var n=l[t];if(\"object\"!==Ne(n)||!n||\"animationName\"===t&&n._keyframe||function(e){return\"object\"===Ne(e)&&e&&(\"_skip_check_\"in e||Ta in e)}(n)){var u;function x(e,t){var r=e.replace(/[A-Z]/g,(function(e){return\"-\".concat(e.toLowerCase())})),n=t;Li[e]||\"number\"!=typeof n||0===n||(n=\"\".concat(n,\"px\")),\"animationName\"===e&&null!=t&&t._keyframe&&(p(t),n=t.getName(s)),f+=\"\".concat(r,\":\").concat(n,\";\")}var d=null!==(u=null==n?void 0:n.value)&&void 0!==u?u:n;\"object\"===Ne(n)&&null!=n&&n[Ta]&&Array.isArray(d)?d.forEach((function(e){x(t,e)})):x(t,d)}else{var m=!1,g=t.trim(),v=!1;(o||i)&&s?g.startsWith(\"@\")?m=!0:g=function(e,t,r){if(!t)return e;var n=\".\".concat(t),o=\"low\"===r?\":where(\".concat(n,\")\"):n;return e.split(\",\").map((function(e){var t,r=e.trim().split(/\\s+/),n=r[0]||\"\",i=(null===(t=n.match(/^\\w+/))||void 0===t?void 0:t[0])||\"\";return[n=\"\".concat(i).concat(o).concat(n.slice(i.length))].concat(Vo(r.slice(1))).join(\" \")})).join(\",\")}(\"&\"===g?\"\":t,s,c):!o||s||\"&\"!==g&&\"\"!==g||(g=\"\",v=!0);var b=Ie(e(n,r,{root:v,injectHash:m,parentSelectors:[].concat(Vo(a),[g])}),2),y=b[0],w=b[1];h=At(At({},h),w),f+=\"\".concat(g).concat(y)}}))}})),o?l&&(f&&(f=\"@layer \".concat(l.name,\" {\").concat(f,\"}\")),l.dependencies&&(h[\"@layer \".concat(l.name)]=l.dependencies.map((function(e){return\"@layer \".concat(e,\", \").concat(l.name,\";\")})).join(\"\\n\"))):f=\"{\".concat(f,\"}\"),[f,h]};function Ma(e,t){return Qo(\"\".concat(e.join(\"%\")).concat(t))}function Ra(){return null}var _a=\"style\";function Ia(e,t){var r=e.token,n=e.path,o=e.hashId,i=e.layer,a=e.nonce,s=e.clientOnly,l=e.order,c=void 0===l?0:l,u=m.useContext(ui),d=u.autoClear,f=(u.mock,u.defaultCache),h=u.hashPriority,p=u.container,g=u.ssrInline,v=u.transformers,b=u.linters,y=u.cache,w=u.layer,x=r._tokenKey,S=[x];w&&S.push(\"layer\"),S.push.apply(S,Vo(n));var C=xi,k=Ii(_a,S,(function(){var e=S.join(\"|\");if(function(e){return function(){if(!ka&&(ka={},Tt())){var e=document.createElement(\"div\");e.className=Ea,e.style.position=\"fixed\",e.style.visibility=\"hidden\",e.style.top=\"-9999px\",document.body.appendChild(e);var t=getComputedStyle(e).content||\"\";(t=t.replace(/^\"/,\"\").replace(/\"$/,\"\")).split(\";\").forEach((function(e){var t=Ie(e.split(\":\"),2),r=t[0],n=t[1];ka[r]=n}));var r,n=document.querySelector(\"style[\".concat(Ea,\"]\"));n&&(Aa=!1,null===(r=n.parentNode)||void 0===r||r.removeChild(n)),document.body.removeChild(e)}}(),!!ka[e]}(e)){var r=function(e){var t=ka[e],r=null;if(t&&Tt())if(Aa)r=Oa;else{var n=document.querySelector(\"style[\".concat(si,'=\"').concat(ka[e],'\"]'));n?r=n.innerHTML:delete ka[e]}return[r,t]}(e),a=Ie(r,2),l=a[0],u=a[1];if(l)return[l,x,u,{},s,c]}var d=t(),f=Ie(Pa(d,{hashId:o,hashPriority:h,layer:w?i:void 0,path:n.join(\"-\"),transformers:v,linters:b}),2),p=f[0],m=f[1],g=ja(p),y=Ma(S,g);return[g,x,y,m,s,c]}),(function(e,t){var r=Ie(e,3)[2];(t||d)&&xi&&Bt(r,{mark:si})}),(function(e){var t=Ie(e,4),r=t[0],n=(t[1],t[2]),o=t[3];if(C&&r!==Oa){var i={mark:si,prepend:!w&&\"queue\",attachTo:p,priority:c},s=\"function\"==typeof a?a():a;s&&(i.csp={nonce:s});var l=[],u=[];Object.keys(o).forEach((function(e){e.startsWith(\"@layer\")?l.push(e):u.push(e)})),l.forEach((function(e){Lt(ja(o[e]),\"_layer-\".concat(e),At(At({},i),{},{prepend:!0}))}));var d=Lt(r,n,i);d[li]=y.instanceId,d.setAttribute(ai,x),u.forEach((function(e){Lt(ja(o[e]),\"_effect-\".concat(e),i)}))}})),E=Ie(k,3),O=E[0],A=E[1],T=E[2];return function(e){var t,r;return t=g&&!C&&f?m.createElement(\"style\",Te({},(De(r={},ai,A),De(r,si,T),r),{dangerouslySetInnerHTML:{__html:O}})):m.createElement(Ra,null),m.createElement(m.Fragment,null,t,e)}}var Na=\"cssVar\";var Fa;De(Fa={},_a,(function(e,t,r){var n=Ie(e,6),o=n[0],i=n[1],a=n[2],s=n[3],l=n[4],c=n[5],u=(r||{}).plain;if(l)return null;var d=o,f={\"data-rc-order\":\"prependQueue\",\"data-rc-priority\":\"\".concat(c)};return d=Ci(o,i,a,f,u),s&&Object.keys(s).forEach((function(e){if(!t[e]){t[e]=!0;var r=Ci(ja(s[e]),i,\"_effect-\".concat(e),f,u);e.startsWith(\"@layer\")?d=r+d:d+=r}})),[c,a,d]})),De(Fa,Di,(function(e,t,r){var n=Ie(e,5),o=n[2],i=n[3],a=n[4],s=(r||{}).plain;if(!i)return null;var l=o._tokenKey;return[-999,l,Ci(i,a,l,{\"data-rc-order\":\"prependQueue\",\"data-rc-priority\":\"\".concat(-999)},s)]})),De(Fa,Na,(function(e,t,r){var n=Ie(e,4),o=n[1],i=n[2],a=n[3],s=(r||{}).plain;return o?[-999,i,Ci(o,a,i,{\"data-rc-order\":\"prependQueue\",\"data-rc-priority\":\"\".concat(-999)},s)]:null}));var Da=function(){function e(t,r){ei(this,e),De(this,\"name\",void 0),De(this,\"style\",void 0),De(this,\"_keyframe\",!0),this.name=t,this.style=r}return ri(e,[{key:\"getName\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\";return e?\"\".concat(e,\"-\").concat(this.name):this.name}}]),e}();const Ba=Da;function La(e){return e.notSplit=!0,e}function za(e){return Pe(e)||Uo(e)||Re(e)||_e()}function Ha(e,t){for(var r=e,n=0;n<t.length;n+=1){if(null==r)return;r=r[t[n]]}return r}function Ua(e,t,r,n){if(!t.length)return r;var o,i=za(t),a=i[0],s=i.slice(1);return o=e||\"number\"!=typeof a?Array.isArray(e)?Vo(e):At({},e):[],n&&void 0===r&&1===s.length?delete o[a][s[0]]:o[a]=Ua(o[a],s,r,n),o}function Va(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return t.length&&n&&void 0===r&&!Ha(e,t.slice(0,-1))?e:Ua(e,t,r,n)}function Wa(e){return Array.isArray(e)?[]:{}}La([\"borderTop\",\"borderBottom\"]),La([\"borderTop\"]),La([\"borderBottom\"]),La([\"borderLeft\",\"borderRight\"]),La([\"borderLeft\"]),La([\"borderRight\"]);var Ga=\"undefined\"==typeof Reflect?Object.keys:Reflect.ownKeys;function qa(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];var n=Wa(t[0]);return t.forEach((function(e){!function t(r,o){var i,a=new Set(o),s=Ha(e,r),l=Array.isArray(s);if(l||\"object\"===Ne(i=s)&&null!==i&&Object.getPrototypeOf(i)===Object.prototype){if(!a.has(s)){a.add(s);var c=Ha(n,r);l?n=Va(n,r,[]):c&&\"object\"===Ne(c)||(n=Va(n,r,Wa(s))),Ga(s).forEach((function(e){t([].concat(Vo(r),[e]),a)}))}}else n=Va(n,r,s)}([])})),n}function Ka(){}const Xa=m.createContext({}),Ya=()=>{const e=()=>{};return e.deprecated=Ka,e},$a=(0,m.createContext)(void 0),Za=At(At({},{yearFormat:\"YYYY\",dayFormat:\"D\",cellMeridiemFormat:\"A\",monthBeforeYear:!0}),{},{locale:\"en_US\",today:\"Today\",now:\"Now\",backToToday:\"Back to today\",ok:\"OK\",clear:\"Clear\",week:\"Week\",month:\"Month\",year:\"Year\",timeSelect:\"select time\",dateSelect:\"select date\",weekSelect:\"Choose a week\",monthSelect:\"Choose a month\",yearSelect:\"Choose a year\",decadeSelect:\"Choose a decade\",dateFormat:\"M/D/YYYY\",dateTimeFormat:\"M/D/YYYY HH:mm:ss\",previousMonth:\"Previous month (PageUp)\",nextMonth:\"Next month (PageDown)\",previousYear:\"Last year (Control + left)\",nextYear:\"Next year (Control + right)\",previousDecade:\"Last decade\",nextDecade:\"Next decade\",previousCentury:\"Last century\",nextCentury:\"Next century\"}),Qa={placeholder:\"Select time\",rangePlaceholder:[\"Start time\",\"End time\"]},Ja={lang:Object.assign({placeholder:\"Select date\",yearPlaceholder:\"Select year\",quarterPlaceholder:\"Select quarter\",monthPlaceholder:\"Select month\",weekPlaceholder:\"Select week\",rangePlaceholder:[\"Start date\",\"End date\"],rangeYearPlaceholder:[\"Start year\",\"End year\"],rangeQuarterPlaceholder:[\"Start quarter\",\"End quarter\"],rangeMonthPlaceholder:[\"Start month\",\"End month\"],rangeWeekPlaceholder:[\"Start week\",\"End week\"]},Za),timePickerLocale:Object.assign({},Qa)},es=\"${label} is not a valid ${type}\",ts={locale:\"en\",Pagination:{items_per_page:\"/ page\",jump_to:\"Go to\",jump_to_confirm:\"confirm\",page:\"Page\",prev_page:\"Previous Page\",next_page:\"Next Page\",prev_5:\"Previous 5 Pages\",next_5:\"Next 5 Pages\",prev_3:\"Previous 3 Pages\",next_3:\"Next 3 Pages\",page_size:\"Page Size\"},DatePicker:Ja,TimePicker:Qa,Calendar:Ja,global:{placeholder:\"Please select\",close:\"Close\"},Table:{filterTitle:\"Filter menu\",filterConfirm:\"OK\",filterReset:\"Reset\",filterEmptyText:\"No filters\",filterCheckAll:\"Select all items\",filterSearchPlaceholder:\"Search in filters\",emptyText:\"No data\",selectAll:\"Select current page\",selectInvert:\"Invert current page\",selectNone:\"Clear all data\",selectionAll:\"Select all data\",sortTitle:\"Sort\",expand:\"Expand row\",collapse:\"Collapse row\",triggerDesc:\"Click to sort descending\",triggerAsc:\"Click to sort ascending\",cancelSort:\"Click to cancel sorting\"},Tour:{Next:\"Next\",Previous:\"Previous\",Finish:\"Finish\"},Modal:{okText:\"OK\",cancelText:\"Cancel\",justOkText:\"OK\"},Popconfirm:{okText:\"OK\",cancelText:\"Cancel\"},Transfer:{titles:[\"\",\"\"],searchPlaceholder:\"Search here\",itemUnit:\"item\",itemsUnit:\"items\",remove:\"Remove\",selectCurrent:\"Select current page\",removeCurrent:\"Remove current page\",selectAll:\"Select all data\",deselectAll:\"Deselect all data\",removeAll:\"Remove all data\",selectInvert:\"Invert current page\"},Upload:{uploading:\"Uploading...\",removeFile:\"Remove file\",uploadError:\"Upload error\",previewFile:\"Preview file\",downloadFile:\"Download file\"},Empty:{description:\"No data\"},Icon:{icon:\"icon\"},Text:{edit:\"Edit\",copy:\"Copy\",copied:\"Copied\",expand:\"Expand\",collapse:\"Collapse\"},Form:{optional:\"(optional)\",defaultValidateMessages:{default:\"Field validation error for ${label}\",required:\"Please enter ${label}\",enum:\"${label} must be one of [${enum}]\",whitespace:\"${label} cannot be a blank character\",date:{format:\"${label} date format is invalid\",parse:\"${label} cannot be converted to a date\",invalid:\"${label} is an invalid date\"},types:{string:es,method:es,array:es,object:es,number:es,date:es,boolean:es,integer:es,float:es,regexp:es,email:es,url:es,hex:es},string:{len:\"${label} must be ${len} characters\",min:\"${label} must be at least ${min} characters\",max:\"${label} must be up to ${max} characters\",range:\"${label} must be between ${min}-${max} characters\"},number:{len:\"${label} must be equal to ${len}\",min:\"${label} must be minimum ${min}\",max:\"${label} must be maximum ${max}\",range:\"${label} must be between ${min}-${max}\"},array:{len:\"Must be ${len} ${label}\",min:\"At least ${min} ${label}\",max:\"At most ${max} ${label}\",range:\"The amount of ${label} must be between ${min}-${max}\"},pattern:{mismatch:\"${label} does not match the pattern ${pattern}\"}}},Image:{preview:\"Preview\"},QRCode:{expired:\"QR code expired\",refresh:\"Refresh\",scanned:\"Scanned\"},ColorPicker:{presetEmpty:\"Empty\",transparent:\"Transparent\",singleColor:\"Single\",gradientColor:\"Gradient\"}};let rs=Object.assign({},ts.Modal),ns=[];const os=()=>ns.reduce(((e,t)=>Object.assign(Object.assign({},e),t)),ts.Modal);function is(){return rs}const as=(0,m.createContext)(void 0),ss=e=>{const{locale:t={},children:r,_ANT_MARK__:n}=e;m.useEffect((()=>{const e=function(e){if(e){const t=Object.assign({},e);return ns.push(t),rs=os(),()=>{ns=ns.filter((e=>e!==t)),rs=os()}}rs=Object.assign({},ts.Modal)}(null==t?void 0:t.Modal);return e}),[t]);const o=m.useMemo((()=>Object.assign(Object.assign({},t),{exist:!0})),[t]);return m.createElement(as.Provider,{value:o},r)},ls={blue:\"#1677FF\",purple:\"#722ED1\",cyan:\"#13C2C2\",green:\"#52C41A\",magenta:\"#EB2F96\",pink:\"#EB2F96\",red:\"#F5222D\",orange:\"#FA8C16\",yellow:\"#FADB14\",volcano:\"#FA541C\",geekblue:\"#2F54EB\",gold:\"#FAAD14\",lime:\"#A0D911\"},cs=Object.assign(Object.assign({},ls),{colorPrimary:\"#1677ff\",colorSuccess:\"#52c41a\",colorWarning:\"#faad14\",colorError:\"#ff4d4f\",colorInfo:\"#1677ff\",colorLink:\"\",colorTextBase:\"\",colorBgBase:\"\",fontFamily:\"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,\\n'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\\n'Noto Color Emoji'\",fontFamilyCode:\"'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace\",fontSize:14,lineWidth:1,lineType:\"solid\",motionUnit:.1,motionBase:0,motionEaseOutCirc:\"cubic-bezier(0.08, 0.82, 0.17, 1)\",motionEaseInOutCirc:\"cubic-bezier(0.78, 0.14, 0.15, 0.86)\",motionEaseOut:\"cubic-bezier(0.215, 0.61, 0.355, 1)\",motionEaseInOut:\"cubic-bezier(0.645, 0.045, 0.355, 1)\",motionEaseOutBack:\"cubic-bezier(0.12, 0.4, 0.29, 1.46)\",motionEaseInBack:\"cubic-bezier(0.71, -0.46, 0.88, 0.6)\",motionEaseInQuint:\"cubic-bezier(0.755, 0.05, 0.855, 0.06)\",motionEaseOutQuint:\"cubic-bezier(0.23, 1, 0.32, 1)\",borderRadius:6,sizeUnit:4,sizeStep:4,sizePopupArrow:16,controlHeight:32,zIndexBase:0,zIndexPopupBase:1e3,opacityImage:1,wireframe:!1,motion:!0});function us(e){return(e+8)/e}const ds=(e,t)=>new Ge(e).setA(t).toRgbString(),fs=(e,t)=>new Ge(e).darken(t).toHexString(),hs=e=>{const t=$e(e);return{1:t[0],2:t[1],3:t[2],4:t[3],5:t[4],6:t[5],7:t[6],8:t[4],9:t[5],10:t[6]}},ps=(e,t)=>{const r=e||\"#fff\",n=t||\"#000\";return{colorBgBase:r,colorTextBase:n,colorText:ds(n,.88),colorTextSecondary:ds(n,.65),colorTextTertiary:ds(n,.45),colorTextQuaternary:ds(n,.25),colorFill:ds(n,.15),colorFillSecondary:ds(n,.06),colorFillTertiary:ds(n,.04),colorFillQuaternary:ds(n,.02),colorBgSolid:ds(n,1),colorBgSolidHover:ds(n,.75),colorBgSolidActive:ds(n,.95),colorBgLayout:fs(r,4),colorBgContainer:fs(r,0),colorBgElevated:fs(r,0),colorBgSpotlight:ds(n,.85),colorBgBlur:\"transparent\",colorBorder:fs(r,15),colorBorderSecondary:fs(r,6)}},ms=mi((function(e){Ze.pink=Ze.magenta,dt.pink=dt.magenta;const t=Object.keys(ls).map((t=>{const r=e[t]===Ze[t]?dt[t]:$e(e[t]);return Array.from({length:10},(()=>1)).reduce(((e,n,o)=>(e[`${t}-${o+1}`]=r[o],e[`${t}${o+1}`]=r[o],e)),{})})).reduce(((e,t)=>Object.assign(Object.assign({},e),t)),{});return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},e),t),function(e,t){let{generateColorPalettes:r,generateNeutralColorPalettes:n}=t;const{colorSuccess:o,colorWarning:i,colorError:a,colorInfo:s,colorPrimary:l,colorBgBase:c,colorTextBase:u}=e,d=r(l),f=r(o),h=r(i),p=r(a),m=r(s),g=n(c,u),v=r(e.colorLink||e.colorInfo),b=new Ge(p[1]).mix(new Ge(p[3]),50).toHexString();return Object.assign(Object.assign({},g),{colorPrimaryBg:d[1],colorPrimaryBgHover:d[2],colorPrimaryBorder:d[3],colorPrimaryBorderHover:d[4],colorPrimaryHover:d[5],colorPrimary:d[6],colorPrimaryActive:d[7],colorPrimaryTextHover:d[8],colorPrimaryText:d[9],colorPrimaryTextActive:d[10],colorSuccessBg:f[1],colorSuccessBgHover:f[2],colorSuccessBorder:f[3],colorSuccessBorderHover:f[4],colorSuccessHover:f[4],colorSuccess:f[6],colorSuccessActive:f[7],colorSuccessTextHover:f[8],colorSuccessText:f[9],colorSuccessTextActive:f[10],colorErrorBg:p[1],colorErrorBgHover:p[2],colorErrorBgFilledHover:b,colorErrorBgActive:p[3],colorErrorBorder:p[3],colorErrorBorderHover:p[4],colorErrorHover:p[5],colorError:p[6],colorErrorActive:p[7],colorErrorTextHover:p[8],colorErrorText:p[9],colorErrorTextActive:p[10],colorWarningBg:h[1],colorWarningBgHover:h[2],colorWarningBorder:h[3],colorWarningBorderHover:h[4],colorWarningHover:h[4],colorWarning:h[6],colorWarningActive:h[7],colorWarningTextHover:h[8],colorWarningText:h[9],colorWarningTextActive:h[10],colorInfoBg:m[1],colorInfoBgHover:m[2],colorInfoBorder:m[3],colorInfoBorderHover:m[4],colorInfoHover:m[4],colorInfo:m[6],colorInfoActive:m[7],colorInfoTextHover:m[8],colorInfoText:m[9],colorInfoTextActive:m[10],colorLinkHover:v[4],colorLink:v[6],colorLinkActive:v[7],colorBgMask:new Ge(\"#000\").setA(.45).toRgbString(),colorWhite:\"#fff\"})}(e,{generateColorPalettes:hs,generateNeutralColorPalettes:ps})),(e=>{const t=function(e){const t=Array.from({length:10}).map(((t,r)=>{const n=r-1,o=e*Math.pow(Math.E,n/5),i=r>1?Math.floor(o):Math.ceil(o);return 2*Math.floor(i/2)}));return t[1]=e,t.map((e=>({size:e,lineHeight:us(e)})))}(e),r=t.map((e=>e.size)),n=t.map((e=>e.lineHeight)),o=r[1],i=r[0],a=r[2],s=n[1],l=n[0],c=n[2];return{fontSizeSM:i,fontSize:o,fontSizeLG:a,fontSizeXL:r[3],fontSizeHeading1:r[6],fontSizeHeading2:r[5],fontSizeHeading3:r[4],fontSizeHeading4:r[3],fontSizeHeading5:r[2],lineHeight:s,lineHeightLG:c,lineHeightSM:l,fontHeight:Math.round(s*o),fontHeightLG:Math.round(c*a),fontHeightSM:Math.round(l*i),lineHeightHeading1:n[6],lineHeightHeading2:n[5],lineHeightHeading3:n[4],lineHeightHeading4:n[3],lineHeightHeading5:n[2]}})(e.fontSize)),function(e){const{sizeUnit:t,sizeStep:r}=e;return{sizeXXL:t*(r+8),sizeXL:t*(r+4),sizeLG:t*(r+2),sizeMD:t*(r+1),sizeMS:t*r,size:t*r,sizeSM:t*(r-1),sizeXS:t*(r-2),sizeXXS:t*(r-3)}}(e)),(e=>{const{controlHeight:t}=e;return{controlHeightSM:.75*t,controlHeightXS:.5*t,controlHeightLG:1.25*t}})(e)),function(e){const{motionUnit:t,motionBase:r,borderRadius:n,lineWidth:o}=e;return Object.assign({motionDurationFast:`${(r+t).toFixed(1)}s`,motionDurationMid:`${(r+2*t).toFixed(1)}s`,motionDurationSlow:`${(r+3*t).toFixed(1)}s`,lineWidthBold:o+1},(e=>{let t=e,r=e,n=e,o=e;return e<6&&e>=5?t=e+1:e<16&&e>=6?t=e+2:e>=16&&(t=16),e<7&&e>=5?r=4:e<8&&e>=7?r=5:e<14&&e>=8?r=6:e<16&&e>=14?r=7:e>=16&&(r=8),e<6&&e>=2?n=1:e>=6&&(n=2),e>4&&e<8?o=4:e>=8&&(o=6),{borderRadius:e,borderRadiusXS:n,borderRadiusSM:r,borderRadiusLG:t,borderRadiusOuter:o}})(n))}(e))})),gs=ms,vs={token:cs,override:{override:cs},hashed:!0},bs=m.createContext(vs),ys=`-ant-${Date.now()}-${Math.random()}`;const ws=m.createContext(!1),xs=e=>{let{children:t,disabled:r}=e;const n=m.useContext(ws);return m.createElement(ws.Provider,{value:null!=r?r:n},t)},Ss=ws,Cs=m.createContext(void 0),ks=e=>{let{children:t,size:r}=e;const n=m.useContext(Cs);return m.createElement(Cs.Provider,{value:r||n},t)},Es=Cs,Os=Object.assign({},g),{useId:As}=Os,Ts=void 0===As?()=>\"\":As;var js=o(961),Ps=o.t(js,2);function Ms(e){return e instanceof HTMLElement||e instanceof SVGElement}function Rs(e){return e&&\"object\"===Ne(e)&&Ms(e.nativeElement)?e.nativeElement:Ms(e)?e:null}function _s(e){var t;return Rs(e)||(e instanceof m.Component?null===(t=js.findDOMNode)||void 0===t?void 0:t.call(js,e):null)}var Is=[\"children\"],Ns=m.createContext({});function Fs(e){var t=e.children,r=Be(e,Is);return m.createElement(Ns.Provider,{value:r},t)}function Ds(e,t){return Ds=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Ds(e,t)}function Bs(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&Ds(e,t)}function Ls(e){return Ls=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Ls(e)}function zs(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(zs=function(){return!!e})()}function Hs(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}function Us(e){var t=zs();return function(){var r,n=Ls(e);if(t){var o=Ls(this).constructor;r=Reflect.construct(n,arguments,o)}else r=n.apply(this,arguments);return function(e,t){if(t&&(\"object\"==Ne(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return Hs(e)}(this,r)}}const Vs=function(e){Bs(r,e);var t=Us(r);function r(){return ei(this,r),t.apply(this,arguments)}return ri(r,[{key:\"render\",value:function(){return this.props.children}}]),r}(m.Component);function Ws(e){var t=m.useRef();t.current=e;var r=m.useCallback((function(){for(var e,r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];return null===(e=t.current)||void 0===e?void 0:e.call.apply(e,[t].concat(n))}),[]);return r}function Gs(e){var t=m.useRef(!1),r=Ie(m.useState(e),2),n=r[0],o=r[1];return m.useEffect((function(){return t.current=!1,function(){t.current=!0}}),[]),[n,function(e,r){r&&t.current||o(e)}]}function qs(e){return void 0!==e}function Ks(e,t){var r=t||{},n=r.defaultValue,o=r.value,i=r.onChange,a=r.postState,s=Ie(Gs((function(){return qs(o)?o:qs(n)?\"function\"==typeof n?n():n:\"function\"==typeof e?e():e})),2),l=s[0],c=s[1],u=void 0!==o?o:l,d=a?a(u):u,f=Ws(i),h=Ie(Gs([u]),2),p=h[0],m=h[1];return ji((function(){var e=p[0];l!==e&&f(l,e)}),[p]),ji((function(){qs(o)||c(o)}),[o]),[d,Ws((function(e,t){c(e,t),m([u],t)}))]}var Xs=\"none\",Ys=\"appear\",$s=\"enter\",Zs=\"leave\",Qs=\"none\",Js=\"prepare\",el=\"start\",tl=\"active\",rl=\"end\",nl=\"prepared\";function ol(e,t){var r={};return r[e.toLowerCase()]=t.toLowerCase(),r[\"Webkit\".concat(e)]=\"webkit\".concat(t),r[\"Moz\".concat(e)]=\"moz\".concat(t),r[\"ms\".concat(e)]=\"MS\".concat(t),r[\"O\".concat(e)]=\"o\".concat(t.toLowerCase()),r}var il,al,sl,ll=(il=Tt(),al=\"undefined\"!=typeof window?window:{},sl={animationend:ol(\"Animation\",\"AnimationEnd\"),transitionend:ol(\"Transition\",\"TransitionEnd\")},il&&(\"AnimationEvent\"in al||delete sl.animationend.animation,\"TransitionEvent\"in al||delete sl.transitionend.transition),sl),cl={};if(Tt()){var ul=document.createElement(\"div\");cl=ul.style}var dl={};function fl(e){if(dl[e])return dl[e];var t=ll[e];if(t)for(var r=Object.keys(t),n=r.length,o=0;o<n;o+=1){var i=r[o];if(Object.prototype.hasOwnProperty.call(t,i)&&i in cl)return dl[e]=t[i],dl[e]}return\"\"}var hl=fl(\"animationend\"),pl=fl(\"transitionend\"),ml=!(!hl||!pl),gl=hl||\"animationend\",vl=pl||\"transitionend\";function bl(e,t){return e?\"object\"===Ne(e)?e[t.replace(/-\\w/g,(function(e){return e[1].toUpperCase()}))]:\"\".concat(e,\"-\").concat(t):null}const yl=Tt()?m.useLayoutEffect:m.useEffect;var wl=function(e){return+setTimeout(e,16)},xl=function(e){return clearTimeout(e)};\"undefined\"!=typeof window&&\"requestAnimationFrame\"in window&&(wl=function(e){return window.requestAnimationFrame(e)},xl=function(e){return window.cancelAnimationFrame(e)});var Sl=0,Cl=new Map;function kl(e){Cl.delete(e)}var El=function(e){var t=Sl+=1;return function r(n){if(0===n)kl(t),e();else{var o=wl((function(){r(n-1)}));Cl.set(t,o)}}(arguments.length>1&&void 0!==arguments[1]?arguments[1]:1),t};El.cancel=function(e){var t=Cl.get(e);return kl(e),xl(t)};const Ol=El;var Al=[Js,el,tl,rl],Tl=[Js,nl],jl=!1;function Pl(e){return e===tl||e===rl}function Ml(e,t,r,n){var o,i,a,s=n.motionEnter,l=void 0===s||s,c=n.motionAppear,u=void 0===c||c,d=n.motionLeave,f=void 0===d||d,h=n.motionDeadline,p=n.motionLeaveImmediately,g=n.onAppearPrepare,v=n.onEnterPrepare,b=n.onLeavePrepare,y=n.onAppearStart,w=n.onEnterStart,x=n.onLeaveStart,S=n.onAppearActive,C=n.onEnterActive,k=n.onLeaveActive,E=n.onAppearEnd,O=n.onEnterEnd,A=n.onLeaveEnd,T=n.onVisibleChanged,j=Ie(Gs(),2),P=j[0],M=j[1],R=(o=Xs,i=Ie(m.useReducer((function(e){return e+1}),0),2)[1],a=m.useRef(o),[Ws((function(){return a.current})),Ws((function(e){a.current=\"function\"==typeof e?e(a.current):e,i()}))]),_=Ie(R,2),I=_[0],N=_[1],F=Ie(Gs(null),2),D=F[0],B=F[1],L=I(),z=(0,m.useRef)(!1),H=(0,m.useRef)(null);function U(){return r()}var V=(0,m.useRef)(!1);function W(){N(Xs),B(null,!0)}var G=Ws((function(e){var t=I();if(t!==Xs){var r=U();if(!e||e.deadline||e.target===r){var n,o=V.current;t===Ys&&o?n=null==E?void 0:E(r,e):t===$s&&o?n=null==O?void 0:O(r,e):t===Zs&&o&&(n=null==A?void 0:A(r,e)),o&&!1!==n&&W()}}})),q=function(e){var t=(0,m.useRef)();function r(t){t&&(t.removeEventListener(vl,e),t.removeEventListener(gl,e))}return m.useEffect((function(){return function(){r(t.current)}}),[]),[function(n){t.current&&t.current!==n&&r(t.current),n&&n!==t.current&&(n.addEventListener(vl,e),n.addEventListener(gl,e),t.current=n)},r]}(G),K=Ie(q,1)[0],X=function(e){switch(e){case Ys:return De(De(De({},Js,g),el,y),tl,S);case $s:return De(De(De({},Js,v),el,w),tl,C);case Zs:return De(De(De({},Js,b),el,x),tl,k);default:return{}}},Y=m.useMemo((function(){return X(L)}),[L]),$=Ie(function(e,t,r){var n=Ie(Gs(Qs),2),o=n[0],i=n[1],a=function(){var e=m.useRef(null);function t(){Ol.cancel(e.current)}return m.useEffect((function(){return function(){t()}}),[]),[function r(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;t();var i=Ol((function(){o<=1?n({isCanceled:function(){return i!==e.current}}):r(n,o-1)}));e.current=i},t]}(),s=Ie(a,2),l=s[0],c=s[1],u=t?Tl:Al;return yl((function(){if(o!==Qs&&o!==rl){var e=u.indexOf(o),t=u[e+1],n=r(o);n===jl?i(t,!0):t&&l((function(e){function r(){e.isCanceled()||i(t,!0)}!0===n?r():Promise.resolve(n).then(r)}))}}),[e,o]),m.useEffect((function(){return function(){c()}}),[]),[function(){i(Js,!0)},o]}(L,!e,(function(e){if(e===Js){var t=Y[Js];return t?t(U()):jl}var r;return Q in Y&&B((null===(r=Y[Q])||void 0===r?void 0:r.call(Y,U(),null))||null),Q===tl&&L!==Xs&&(K(U()),h>0&&(clearTimeout(H.current),H.current=setTimeout((function(){G({deadline:!0})}),h))),Q===nl&&W(),!0})),2),Z=$[0],Q=$[1],J=Pl(Q);V.current=J;var ee=(0,m.useRef)(null);yl((function(){if(!z.current||ee.current!==t){M(t);var r,n=z.current;z.current=!0,!n&&t&&u&&(r=Ys),n&&t&&l&&(r=$s),(n&&!t&&f||!n&&p&&!t&&f)&&(r=Zs);var o=X(r);r&&(e||o[Js])?(N(r),Z()):N(Xs),ee.current=t}}),[t]),(0,m.useEffect)((function(){(L===Ys&&!u||L===$s&&!l||L===Zs&&!f)&&N(Xs)}),[u,l,f]),(0,m.useEffect)((function(){return function(){z.current=!1,clearTimeout(H.current)}}),[]);var te=m.useRef(!1);(0,m.useEffect)((function(){P&&(te.current=!0),void 0!==P&&L===Xs&&((te.current||P)&&(null==T||T(P)),te.current=!0)}),[P,L]);var re=D;return Y[Js]&&Q===el&&(re=At({transition:\"none\"},re)),[L,Q,re,null!=P?P:t]}const Rl=function(e){var t=e;\"object\"===Ne(e)&&(t=e.transitionSupport);var r=m.forwardRef((function(e,r){var n=e.visible,o=void 0===n||n,i=e.removeOnLeave,a=void 0===i||i,s=e.forceRender,l=e.children,c=e.motionName,u=e.leavedClassName,d=e.eventProps,f=function(e,r){return!(!e.motionName||!t||!1===r)}(e,m.useContext(Ns).motion),h=(0,m.useRef)(),p=(0,m.useRef)(),g=Ie(Ml(f,o,(function(){try{return h.current instanceof HTMLElement?h.current:_s(p.current)}catch(e){return null}}),e),4),v=g[0],b=g[1],y=g[2],w=g[3],x=m.useRef(w);w&&(x.current=!0);var S,C=m.useCallback((function(e){h.current=e,Sn(r,e)}),[r]),k=At(At({},d),{},{visible:o});if(l)if(v===Xs)S=w?l(At({},k),C):!a&&x.current&&u?l(At(At({},k),{},{className:u}),C):s||!a&&!u?l(At(At({},k),{},{style:{display:\"none\"}}),C):null;else{var E;b===Js?E=\"prepare\":Pl(b)?E=\"active\":b===el&&(E=\"start\");var O=bl(c,\"\".concat(v,\"-\").concat(E));S=l(At(At({},k),{},{className:ze()(bl(c,v),De(De({},O,O&&E),c,\"string\"==typeof c)),style:y}),C)}else S=null;return m.isValidElement(S)&&En(S)&&(An(S)||(S=m.cloneElement(S,{ref:C}))),m.createElement(Vs,{ref:p},S)}));return r.displayName=\"CSSMotion\",r}(ml);var _l=\"add\",Il=\"keep\",Nl=\"remove\",Fl=\"removed\";function Dl(e){var t;return At(At({},t=e&&\"object\"===Ne(e)&&\"key\"in e?e:{key:e}),{},{key:String(t.key)})}function Bl(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).map(Dl)}var Ll=[\"component\",\"children\",\"onVisibleChanged\",\"onAllRemoved\"],zl=[\"status\"],Hl=[\"eventProps\",\"visible\",\"children\",\"motionName\",\"motionAppear\",\"motionEnter\",\"motionLeave\",\"motionLeaveImmediately\",\"motionDeadline\",\"removeOnLeave\",\"leavedClassName\",\"onAppearPrepare\",\"onAppearStart\",\"onAppearActive\",\"onAppearEnd\",\"onEnterStart\",\"onEnterActive\",\"onEnterEnd\",\"onLeaveStart\",\"onLeaveActive\",\"onLeaveEnd\"];const Ul=function(){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Rl,t=function(t){Bs(n,t);var r=Us(n);function n(){var e;ei(this,n);for(var t=arguments.length,o=new Array(t),i=0;i<t;i++)o[i]=arguments[i];return De(Hs(e=r.call.apply(r,[this].concat(o))),\"state\",{keyEntities:[]}),De(Hs(e),\"removeKey\",(function(t){e.setState((function(e){return{keyEntities:e.keyEntities.map((function(e){return e.key!==t?e:At(At({},e),{},{status:Fl})}))}}),(function(){0===e.state.keyEntities.filter((function(e){return e.status!==Fl})).length&&e.props.onAllRemoved&&e.props.onAllRemoved()}))})),e}return ri(n,[{key:\"render\",value:function(){var t=this,r=this.state.keyEntities,n=this.props,o=n.component,i=n.children,a=n.onVisibleChanged,s=(n.onAllRemoved,Be(n,Ll)),l=o||m.Fragment,c={};return Hl.forEach((function(e){c[e]=s[e],delete s[e]})),delete s.keys,m.createElement(l,s,r.map((function(r,n){var o=r.status,s=Be(r,zl),l=o===_l||o===Il;return m.createElement(e,Te({},c,{key:s.key,visible:l,eventProps:s,onVisibleChanged:function(e){null==a||a(e,{key:s.key}),e||t.removeKey(s.key)}}),(function(e,t){return i(At(At({},e),{},{index:n}),t)}))})))}}],[{key:\"getDerivedStateFromProps\",value:function(e,t){var r=e.keys,n=t.keyEntities,o=Bl(r),i=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=[],n=0,o=t.length,i=Bl(e),a=Bl(t);i.forEach((function(e){for(var t=!1,i=n;i<o;i+=1){var s=a[i];if(s.key===e.key){n<i&&(r=r.concat(a.slice(n,i).map((function(e){return At(At({},e),{},{status:_l})}))),n=i),r.push(At(At({},s),{},{status:Il})),n+=1,t=!0;break}}t||r.push(At(At({},e),{},{status:Nl}))})),n<o&&(r=r.concat(a.slice(n).map((function(e){return At(At({},e),{},{status:_l})}))));var s={};return r.forEach((function(e){var t=e.key;s[t]=(s[t]||0)+1})),Object.keys(s).filter((function(e){return s[e]>1})).forEach((function(e){(r=r.filter((function(t){var r=t.key,n=t.status;return r!==e||n!==Nl}))).forEach((function(t){t.key===e&&(t.status=Il)}))})),r}(n,o);return{keyEntities:i.filter((function(e){var t=n.find((function(t){var r=t.key;return e.key===r}));return!t||t.status!==Fl||e.status!==Nl}))}}}]),n}(m.Component);return De(t,\"defaultProps\",{component:\"div\"}),t}(ml),Vl=Rl;function Wl(e){return e>=0&&e<=255}const Gl=function(e,t){const{r,g:n,b:o,a:i}=new Ge(e).toRgb();if(i<1)return e;const{r:a,g:s,b:l}=new Ge(t).toRgb();for(let e=.01;e<=1;e+=.01){const t=Math.round((r-a*(1-e))/e),i=Math.round((n-s*(1-e))/e),c=Math.round((o-l*(1-e))/e);if(Wl(t)&&Wl(i)&&Wl(c))return new Ge({r:t,g:i,b:c,a:Math.round(100*e)/100}).toRgbString()}return new Ge({r,g:n,b:o,a:1}).toRgbString()};function ql(e){const{override:t}=e,r=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"override\"]),n=Object.assign({},t);Object.keys(cs).forEach((e=>{delete n[e]}));const o=Object.assign(Object.assign({},r),n);if(!1===o.motion){const e=\"0s\";o.motionDurationFast=e,o.motionDurationMid=e,o.motionDurationSlow=e}return Object.assign(Object.assign(Object.assign({},o),{colorFillContent:o.colorFillSecondary,colorFillContentHover:o.colorFill,colorFillAlter:o.colorFillQuaternary,colorBgContainerDisabled:o.colorFillTertiary,colorBorderBg:o.colorBgContainer,colorSplit:Gl(o.colorBorderSecondary,o.colorBgContainer),colorTextPlaceholder:o.colorTextQuaternary,colorTextDisabled:o.colorTextQuaternary,colorTextHeading:o.colorText,colorTextLabel:o.colorTextSecondary,colorTextDescription:o.colorTextTertiary,colorTextLightSolid:o.colorWhite,colorHighlight:o.colorError,colorBgTextHover:o.colorFillSecondary,colorBgTextActive:o.colorFill,colorIcon:o.colorTextTertiary,colorIconHover:o.colorText,colorErrorOutline:Gl(o.colorErrorBg,o.colorBgContainer),colorWarningOutline:Gl(o.colorWarningBg,o.colorBgContainer),fontSizeIcon:o.fontSizeSM,lineWidthFocus:3*o.lineWidth,lineWidth:o.lineWidth,controlOutlineWidth:2*o.lineWidth,controlInteractiveSize:o.controlHeight/2,controlItemBgHover:o.colorFillTertiary,controlItemBgActive:o.colorPrimaryBg,controlItemBgActiveHover:o.colorPrimaryBgHover,controlItemBgActiveDisabled:o.colorFill,controlTmpOutline:o.colorFillQuaternary,controlOutline:Gl(o.colorPrimaryBg,o.colorBgContainer),lineType:o.lineType,borderRadius:o.borderRadius,borderRadiusXS:o.borderRadiusXS,borderRadiusSM:o.borderRadiusSM,borderRadiusLG:o.borderRadiusLG,fontWeightStrong:600,opacityLoading:.65,linkDecoration:\"none\",linkHoverDecoration:\"none\",linkFocusDecoration:\"none\",controlPaddingHorizontal:12,controlPaddingHorizontalSM:8,paddingXXS:o.sizeXXS,paddingXS:o.sizeXS,paddingSM:o.sizeSM,padding:o.size,paddingMD:o.sizeMD,paddingLG:o.sizeLG,paddingXL:o.sizeXL,paddingContentHorizontalLG:o.sizeLG,paddingContentVerticalLG:o.sizeMS,paddingContentHorizontal:o.sizeMS,paddingContentVertical:o.sizeSM,paddingContentHorizontalSM:o.size,paddingContentVerticalSM:o.sizeXS,marginXXS:o.sizeXXS,marginXS:o.sizeXS,marginSM:o.sizeSM,margin:o.size,marginMD:o.sizeMD,marginLG:o.sizeLG,marginXL:o.sizeXL,marginXXL:o.sizeXXL,boxShadow:\"\\n      0 6px 16px 0 rgba(0, 0, 0, 0.08),\\n      0 3px 6px -4px rgba(0, 0, 0, 0.12),\\n      0 9px 28px 8px rgba(0, 0, 0, 0.05)\\n    \",boxShadowSecondary:\"\\n      0 6px 16px 0 rgba(0, 0, 0, 0.08),\\n      0 3px 6px -4px rgba(0, 0, 0, 0.12),\\n      0 9px 28px 8px rgba(0, 0, 0, 0.05)\\n    \",boxShadowTertiary:\"\\n      0 1px 2px 0 rgba(0, 0, 0, 0.03),\\n      0 1px 6px -1px rgba(0, 0, 0, 0.02),\\n      0 2px 4px 0 rgba(0, 0, 0, 0.02)\\n    \",screenXS:480,screenXSMin:480,screenXSMax:575,screenSM:576,screenSMMin:576,screenSMMax:767,screenMD:768,screenMDMin:768,screenMDMax:991,screenLG:992,screenLGMin:992,screenLGMax:1199,screenXL:1200,screenXLMin:1200,screenXLMax:1599,screenXXL:1600,screenXXLMin:1600,boxShadowPopoverArrow:\"2px 2px 5px rgba(0, 0, 0, 0.05)\",boxShadowCard:`\\n      0 1px 2px -2px ${new Ge(\"rgba(0, 0, 0, 0.16)\").toRgbString()},\\n      0 3px 6px 0 ${new Ge(\"rgba(0, 0, 0, 0.12)\").toRgbString()},\\n      0 5px 12px 4px ${new Ge(\"rgba(0, 0, 0, 0.09)\").toRgbString()}\\n    `,boxShadowDrawerRight:\"\\n      -6px 0 16px 0 rgba(0, 0, 0, 0.08),\\n      -3px 0 6px -4px rgba(0, 0, 0, 0.12),\\n      -9px 0 28px 8px rgba(0, 0, 0, 0.05)\\n    \",boxShadowDrawerLeft:\"\\n      6px 0 16px 0 rgba(0, 0, 0, 0.08),\\n      3px 0 6px -4px rgba(0, 0, 0, 0.12),\\n      9px 0 28px 8px rgba(0, 0, 0, 0.05)\\n    \",boxShadowDrawerUp:\"\\n      0 6px 16px 0 rgba(0, 0, 0, 0.08),\\n      0 3px 6px -4px rgba(0, 0, 0, 0.12),\\n      0 9px 28px 8px rgba(0, 0, 0, 0.05)\\n    \",boxShadowDrawerDown:\"\\n      0 -6px 16px 0 rgba(0, 0, 0, 0.08),\\n      0 -3px 6px -4px rgba(0, 0, 0, 0.12),\\n      0 -9px 28px 8px rgba(0, 0, 0, 0.05)\\n    \",boxShadowTabsOverflowLeft:\"inset 10px 0 8px -8px rgba(0, 0, 0, 0.08)\",boxShadowTabsOverflowRight:\"inset -10px 0 8px -8px rgba(0, 0, 0, 0.08)\",boxShadowTabsOverflowTop:\"inset 0 10px 8px -8px rgba(0, 0, 0, 0.08)\",boxShadowTabsOverflowBottom:\"inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08)\"}),n)}var Kl=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r};const Xl={lineHeight:!0,lineHeightSM:!0,lineHeightLG:!0,lineHeightHeading1:!0,lineHeightHeading2:!0,lineHeightHeading3:!0,lineHeightHeading4:!0,lineHeightHeading5:!0,opacityLoading:!0,fontWeightStrong:!0,zIndexPopupBase:!0,zIndexBase:!0,opacityImage:!0},Yl={size:!0,sizeSM:!0,sizeLG:!0,sizeMD:!0,sizeXS:!0,sizeXXS:!0,sizeMS:!0,sizeXL:!0,sizeXXL:!0,sizeUnit:!0,sizeStep:!0,motionBase:!0,motionUnit:!0},$l={screenXS:!0,screenXSMin:!0,screenXSMax:!0,screenSM:!0,screenSMMin:!0,screenSMMax:!0,screenMD:!0,screenMDMin:!0,screenMDMax:!0,screenLG:!0,screenLGMin:!0,screenLGMax:!0,screenXL:!0,screenXLMin:!0,screenXLMax:!0,screenXXL:!0,screenXXLMin:!0},Zl=(e,t,r)=>{const n=r.getDerivativeToken(e),{override:o}=t,i=Kl(t,[\"override\"]);let a=Object.assign(Object.assign({},n),{override:o});return a=ql(a),i&&Object.entries(i).forEach((e=>{let[t,r]=e;const{theme:n}=r,o=Kl(r,[\"theme\"]);let i=o;n&&(i=Zl(Object.assign(Object.assign({},a),o),{override:o},n)),a[t]=i})),a};function Ql(){const{token:e,hashed:t,theme:r,override:n,cssVar:o}=m.useContext(bs),i=`5.25.1-${t||\"\"}`,a=r||gs,[s,l,c]=Bi(a,[cs,e],{salt:i,override:n,getComputedToken:Zl,formatToken:ql,cssVar:o&&{prefix:o.prefix,key:o.key,unitless:Xl,ignore:Yl,preserve:$l}});return[a,c,t?l:\"\",s,o]}function Jl(e){const{children:t}=e,[,r]=Ql(),{motion:n}=r,o=m.useRef(!1);return o.current=o.current||!1===n,o.current?m.createElement(Fs,{motion:n},t):t}const ec=()=>null,tc={overflow:\"hidden\",whiteSpace:\"nowrap\",textOverflow:\"ellipsis\"},rc=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return{boxSizing:\"border-box\",margin:0,padding:0,color:e.colorText,fontSize:e.fontSize,lineHeight:e.lineHeight,listStyle:\"none\",fontFamily:t?\"inherit\":e.fontFamily}},nc=(e,t)=>({outline:`${Si(e.lineWidthFocus)} solid ${e.colorPrimaryBorder}`,outlineOffset:null!=t?t:1,transition:\"outline-offset 0s, outline 0s\"}),oc=(e,t)=>({\"&:focus-visible\":Object.assign({},nc(e,t))}),ic=e=>({[`.${e}`]:Object.assign(Object.assign({},{display:\"inline-flex\",alignItems:\"center\",color:\"inherit\",fontStyle:\"normal\",lineHeight:0,textAlign:\"center\",textTransform:\"none\",verticalAlign:\"-0.125em\",textRendering:\"optimizeLegibility\",\"-webkit-font-smoothing\":\"antialiased\",\"-moz-osx-font-smoothing\":\"grayscale\",\"> *\":{lineHeight:1},svg:{display:\"inline-block\"}}),{[`.${e} .${e}-icon`]:{display:\"block\"}})}),ac=e=>Object.assign(Object.assign({color:e.colorLink,textDecoration:e.linkDecoration,outline:\"none\",cursor:\"pointer\",transition:`all ${e.motionDurationSlow}`,border:0,padding:0,background:\"none\",userSelect:\"none\"},oc(e)),{\"&:focus, &:hover\":{color:e.colorLinkHover},\"&:active\":{color:e.colorLinkActive}});const sc=[\"getTargetContainer\",\"getPopupContainer\",\"renderEmpty\",\"input\",\"pagination\",\"form\",\"select\",\"button\"];let lc,cc,uc,dc;function fc(){return lc||Go}function hc(){return cc||qo}const pc=()=>({getPrefixCls:(e,t)=>t||(e?`${fc()}-${e}`:fc()),getIconPrefixCls:hc,getRootPrefixCls:()=>lc||fc(),getTheme:()=>uc,holderRender:dc}),mc=e=>{const{children:t,csp:r,autoInsertSpaceInButton:n,alert:o,anchor:i,form:a,locale:s,componentSize:l,direction:c,space:u,splitter:d,virtual:f,dropdownMatchSelectWidth:h,popupMatchSelectWidth:p,popupOverflow:g,legacyLocale:v,parentContext:b,iconPrefixCls:y,theme:w,componentDisabled:x,segmented:S,statistic:C,spin:k,calendar:E,carousel:O,cascader:A,collapse:T,typography:j,checkbox:P,descriptions:M,divider:R,drawer:_,skeleton:I,steps:N,image:F,layout:D,list:B,mentions:L,modal:z,progress:H,result:U,slider:V,breadcrumb:W,menu:G,pagination:q,input:K,textArea:X,empty:Y,badge:$,radio:Z,rate:Q,switch:J,transfer:ee,avatar:te,message:re,tag:ne,table:oe,card:ie,tabs:ae,timeline:se,timePicker:le,upload:ce,notification:ue,tree:de,colorPicker:fe,datePicker:he,rangePicker:pe,flex:me,wave:ge,dropdown:ve,warning:be,tour:ye,tooltip:we,popover:xe,popconfirm:Se,floatButtonGroup:Ce,variant:ke,inputNumber:Ee,treeSelect:Oe}=e,Ae=m.useCallback(((t,r)=>{const{prefixCls:n}=e;if(r)return r;const o=n||b.getPrefixCls(\"\");return t?`${o}-${t}`:o}),[b.getPrefixCls,e.prefixCls]),Te=y||b.iconPrefixCls||qo,je=r||b.csp;((e,t)=>{const[r,n]=Ql();Ia({theme:r,token:n,hashId:\"\",path:[\"ant-design-icons\",e],nonce:()=>null==t?void 0:t.nonce,layer:{name:\"antd\"}},(()=>[ic(e)]))})(Te,je);const Pe=function(e,t,r){var n;Ya();const o=e||{},i=!1!==o.inherit&&t?t:Object.assign(Object.assign({},vs),{hashed:null!==(n=null==t?void 0:t.hashed)&&void 0!==n?n:vs.hashed,cssVar:null==t?void 0:t.cssVar}),a=Ts();return gn((()=>{var n,s;if(!e)return t;const l=Object.assign({},i.components);Object.keys(e.components||{}).forEach((t=>{l[t]=Object.assign(Object.assign({},l[t]),e.components[t])}));const c=`css-var-${a.replace(/:/g,\"\")}`,u=(null!==(n=o.cssVar)&&void 0!==n?n:i.cssVar)&&Object.assign(Object.assign(Object.assign({prefix:null==r?void 0:r.prefixCls},\"object\"==typeof i.cssVar?i.cssVar:{}),\"object\"==typeof o.cssVar?o.cssVar:{}),{key:\"object\"==typeof o.cssVar&&(null===(s=o.cssVar)||void 0===s?void 0:s.key)||c});return Object.assign(Object.assign(Object.assign({},i),o),{token:Object.assign(Object.assign({},i.token),o.token),components:l,cssVar:u})}),[o,i],((e,t)=>e.some(((e,r)=>{const n=t[r];return!Jo(e,n,!0)}))))}(w,b.theme,{prefixCls:Ae(\"\")}),Me={csp:je,autoInsertSpaceInButton:n,alert:o,anchor:i,locale:s||v,direction:c,space:u,splitter:d,virtual:f,popupMatchSelectWidth:null!=p?p:h,popupOverflow:g,getPrefixCls:Ae,iconPrefixCls:Te,theme:Pe,segmented:S,statistic:C,spin:k,calendar:E,carousel:O,cascader:A,collapse:T,typography:j,checkbox:P,descriptions:M,divider:R,drawer:_,skeleton:I,steps:N,image:F,input:K,textArea:X,layout:D,list:B,mentions:L,modal:z,progress:H,result:U,slider:V,breadcrumb:W,menu:G,pagination:q,empty:Y,badge:$,radio:Z,rate:Q,switch:J,transfer:ee,avatar:te,message:re,tag:ne,table:oe,card:ie,tabs:ae,timeline:se,timePicker:le,upload:ce,notification:ue,tree:de,colorPicker:fe,datePicker:he,rangePicker:pe,flex:me,wave:ge,dropdown:ve,warning:be,tour:ye,tooltip:we,popover:xe,popconfirm:Se,floatButtonGroup:Ce,variant:ke,inputNumber:Ee,treeSelect:Oe},Re=Object.assign({},b);Object.keys(Me).forEach((e=>{void 0!==Me[e]&&(Re[e]=Me[e])})),sc.forEach((t=>{const r=e[t];r&&(Re[t]=r)})),void 0!==n&&(Re.button=Object.assign({autoInsertSpace:n},Re.button));const _e=gn((()=>Re),Re,((e,t)=>{const r=Object.keys(e),n=Object.keys(t);return r.length!==n.length||r.some((r=>e[r]!==t[r]))})),{layer:Ie}=m.useContext(ui),Ne=m.useMemo((()=>({prefixCls:Te,csp:je,layer:Ie?\"antd\":void 0})),[Te,je,Ie]);let Fe=m.createElement(m.Fragment,null,m.createElement(ec,{dropdownMatchSelectWidth:h}),t);const De=m.useMemo((()=>{var e,t,r,n;return qa((null===(e=ts.Form)||void 0===e?void 0:e.defaultValidateMessages)||{},(null===(r=null===(t=_e.locale)||void 0===t?void 0:t.Form)||void 0===r?void 0:r.defaultValidateMessages)||{},(null===(n=_e.form)||void 0===n?void 0:n.validateMessages)||{},(null==a?void 0:a.validateMessages)||{})}),[_e,null==a?void 0:a.validateMessages]);Object.keys(De).length>0&&(Fe=m.createElement($a.Provider,{value:De},Fe)),s&&(Fe=m.createElement(ss,{locale:s,_ANT_MARK__:\"internalMark\"},Fe)),(Te||je)&&(Fe=m.createElement(Et.Provider,{value:Ne},Fe)),l&&(Fe=m.createElement(ks,{size:l},Fe)),Fe=m.createElement(Jl,null,Fe);const Be=m.useMemo((()=>{const e=Pe||{},{algorithm:t,token:r,components:n,cssVar:o}=e,i=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"algorithm\",\"token\",\"components\",\"cssVar\"]),a=t&&(!Array.isArray(t)||t.length>0)?mi(t):gs,s={};Object.entries(n||{}).forEach((e=>{let[t,r]=e;const n=Object.assign({},r);\"algorithm\"in n&&(!0===n.algorithm?n.theme=a:(Array.isArray(n.algorithm)||\"function\"==typeof n.algorithm)&&(n.theme=mi(n.algorithm)),delete n.algorithm),s[t]=n}));const l=Object.assign(Object.assign({},cs),r);return Object.assign(Object.assign({},i),{theme:a,token:l,components:s,override:Object.assign({override:l},s),cssVar:o})}),[Pe]);return w&&(Fe=m.createElement(bs.Provider,{value:Be},Fe)),_e.warning&&(Fe=m.createElement(Xa.Provider,{value:_e.warning},Fe)),void 0!==x&&(Fe=m.createElement(xs,{disabled:x},Fe)),m.createElement(Xo.Provider,{value:_e},Fe)},gc=e=>{const t=m.useContext(Xo),r=m.useContext(as);return m.createElement(mc,Object.assign({parentContext:t,legacyLocale:r},e))};gc.ConfigContext=Xo,gc.SizeContext=Es,gc.config=e=>{const{prefixCls:t,iconPrefixCls:r,theme:n,holderRender:o}=e;void 0!==t&&(lc=t),void 0!==r&&(cc=r),\"holderRender\"in e&&(dc=o),n&&(function(e){return Object.keys(e).some((e=>e.endsWith(\"Color\")))}(n)?function(e,t){const r=function(e,t){const r={},n=(e,t)=>{let r=e.clone();return r=(null==t?void 0:t(r))||r,r.toRgbString()},o=(e,t)=>{const o=new Ge(e),i=$e(o.toRgbString());r[`${t}-color`]=n(o),r[`${t}-color-disabled`]=i[1],r[`${t}-color-hover`]=i[4],r[`${t}-color-active`]=i[6],r[`${t}-color-outline`]=o.clone().setA(.2).toRgbString(),r[`${t}-color-deprecated-bg`]=i[0],r[`${t}-color-deprecated-border`]=i[2]};if(t.primaryColor){o(t.primaryColor,\"primary\");const e=new Ge(t.primaryColor),i=$e(e.toRgbString());i.forEach(((e,t)=>{r[`primary-${t+1}`]=e})),r[\"primary-color-deprecated-l-35\"]=n(e,(e=>e.lighten(35))),r[\"primary-color-deprecated-l-20\"]=n(e,(e=>e.lighten(20))),r[\"primary-color-deprecated-t-20\"]=n(e,(e=>e.tint(20))),r[\"primary-color-deprecated-t-50\"]=n(e,(e=>e.tint(50))),r[\"primary-color-deprecated-f-12\"]=n(e,(e=>e.setA(.12*e.a)));const a=new Ge(i[0]);r[\"primary-color-active-deprecated-f-30\"]=n(a,(e=>e.setA(.3*e.a))),r[\"primary-color-active-deprecated-d-02\"]=n(a,(e=>e.darken(2)))}return t.successColor&&o(t.successColor,\"success\"),t.warningColor&&o(t.warningColor,\"warning\"),t.errorColor&&o(t.errorColor,\"error\"),t.infoColor&&o(t.infoColor,\"info\"),`\\n  :root {\\n    ${Object.keys(r).map((t=>`--${e}-${t}: ${r[t]};`)).join(\"\\n\")}\\n  }\\n  `.trim()}(e,t);Tt()&&Lt(r,`${ys}-dynamic-theme`)}(fc(),n):uc=n)},gc.useConfig=function(){return{componentDisabled:(0,m.useContext)(Ss),componentSize:(0,m.useContext)(Es)}},Object.defineProperty(gc,\"SizeContext\",{get:()=>Es});const vc=gc;function bc(){bc=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==Ne(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(Ne(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function yc(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function wc(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){yc(i,n,o,a,s,\"next\",e)}function s(e){yc(i,n,o,a,s,\"throw\",e)}a(void 0)}))}}var xc,Sc=At({},Ps),Cc=Sc.version,kc=Sc.render,Ec=Sc.unmountComponentAtNode;try{Number((Cc||\"\").split(\".\")[0])>=18&&(xc=Sc.createRoot)}catch(zF){}function Oc(e){var t=Sc.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;t&&\"object\"===Ne(t)&&(t.usingClientEntryPoint=e)}var Ac=\"__rc_react_root__\";function Tc(e){return jc.apply(this,arguments)}function jc(){return(jc=wc(bc().mark((function e(t){return bc().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt(\"return\",Promise.resolve().then((function(){var e;null===(e=t[Ac])||void 0===e||e.unmount(),delete t[Ac]})));case 1:case\"end\":return e.stop()}}),e)})))).apply(this,arguments)}function Pc(e){Ec(e)}function Mc(){return(Mc=wc(bc().mark((function e(t){return bc().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(void 0===xc){e.next=2;break}return e.abrupt(\"return\",Tc(t));case 2:Pc(t);case 3:case\"end\":return e.stop()}}),e)})))).apply(this,arguments)}let Rc=(e,t)=>(function(e,t){xc?function(e,t){Oc(!0);var r=t[Ac]||xc(t);Oc(!1),r.render(e),t[Ac]=r}(e,t):function(e,t){null==kc||kc(e,t)}(e,t)}(e,t),()=>function(e){return Mc.apply(this,arguments)}(t));function _c(e){return e&&(Rc=e),Rc}const Ic={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm193.5 301.7l-210.6 292a31.8 31.8 0 01-51.7 0L318.5 484.9c-3.8-5.3 0-12.7 6.5-12.7h46.9c10.2 0 19.9 4.9 25.9 13.3l71.2 98.8 157.2-218c6-8.3 15.6-13.3 25.9-13.3H699c6.5 0 10.3 7.4 6.5 12.7z\"}}]},name:\"check-circle\",theme:\"filled\"};var Nc=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:Ic}))};const Fc=m.forwardRef(Nc),Dc={icon:{tag:\"svg\",attrs:{\"fill-rule\":\"evenodd\",viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm127.98 274.82h-.04l-.08.06L512 466.75 384.14 338.88c-.04-.05-.06-.06-.08-.06a.12.12 0 00-.07 0c-.03 0-.05.01-.09.05l-45.02 45.02a.2.2 0 00-.05.09.12.12 0 000 .07v.02a.27.27 0 00.06.06L466.75 512 338.88 639.86c-.05.04-.06.06-.06.08a.12.12 0 000 .07c0 .03.01.05.05.09l45.02 45.02a.2.2 0 00.09.05.12.12 0 00.07 0c.02 0 .04-.01.08-.05L512 557.25l127.86 127.87c.04.04.06.05.08.05a.12.12 0 00.07 0c.03 0 .05-.01.09-.05l45.02-45.02a.2.2 0 00.05-.09.12.12 0 000-.07v-.02a.27.27 0 00-.05-.06L557.25 512l127.87-127.86c.04-.04.05-.06.05-.08a.12.12 0 000-.07c0-.03-.01-.05-.05-.09l-45.02-45.02a.2.2 0 00-.09-.05.12.12 0 00-.07 0z\"}}]},name:\"close-circle\",theme:\"filled\"};var Bc=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:Dc}))};const Lc=m.forwardRef(Bc),zc={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 232c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V296zm32 440a48.01 48.01 0 010-96 48.01 48.01 0 010 96z\"}}]},name:\"exclamation-circle\",theme:\"filled\"};var Hc=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:zc}))};const Uc=m.forwardRef(Hc),Vc={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm32 664c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V456c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272zm-32-344a48.01 48.01 0 010-96 48.01 48.01 0 010 96z\"}}]},name:\"info-circle\",theme:\"filled\"};var Wc=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:Vc}))};const Gc=m.forwardRef(Wc),qc={icon:{tag:\"svg\",attrs:{viewBox:\"0 0 1024 1024\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z\"}}]},name:\"loading\",theme:\"outlined\"};var Kc=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:qc}))};const Xc=m.forwardRef(Kc);var Yc={MAC_ENTER:3,BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,QUESTION_MARK:63,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,META:91,WIN_KEY_RIGHT:92,CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,NUMLOCK:144,SEMICOLON:186,DASH:189,EQUALS:187,COMMA:188,PERIOD:190,SLASH:191,APOSTROPHE:192,SINGLE_QUOTE:222,OPEN_SQUARE_BRACKET:219,BACKSLASH:220,CLOSE_SQUARE_BRACKET:221,WIN_KEY:224,MAC_FF_META:224,WIN_IME:229,isTextModifyingKeyEvent:function(e){var t=e.keyCode;if(e.altKey&&!e.ctrlKey||e.metaKey||t>=Yc.F1&&t<=Yc.F12)return!1;switch(t){case Yc.ALT:case Yc.CAPS_LOCK:case Yc.CONTEXT_MENU:case Yc.CTRL:case Yc.DOWN:case Yc.END:case Yc.ESC:case Yc.HOME:case Yc.INSERT:case Yc.LEFT:case Yc.MAC_FF_META:case Yc.META:case Yc.NUMLOCK:case Yc.NUM_CENTER:case Yc.PAGE_DOWN:case Yc.PAGE_UP:case Yc.PAUSE:case Yc.PRINT_SCREEN:case Yc.RIGHT:case Yc.SHIFT:case Yc.UP:case Yc.WIN_KEY:case Yc.WIN_KEY_RIGHT:return!1;default:return!0}},isCharacterKey:function(e){if(e>=Yc.ZERO&&e<=Yc.NINE)return!0;if(e>=Yc.NUM_ZERO&&e<=Yc.NUM_MULTIPLY)return!0;if(e>=Yc.A&&e<=Yc.Z)return!0;if(-1!==window.navigator.userAgent.indexOf(\"WebKit\")&&0===e)return!0;switch(e){case Yc.SPACE:case Yc.QUESTION_MARK:case Yc.NUM_PLUS:case Yc.NUM_MINUS:case Yc.NUM_PERIOD:case Yc.NUM_DIVISION:case Yc.SEMICOLON:case Yc.DASH:case Yc.EQUALS:case Yc.COMMA:case Yc.PERIOD:case Yc.SLASH:case Yc.APOSTROPHE:case Yc.SINGLE_QUOTE:case Yc.OPEN_SQUARE_BRACKET:case Yc.BACKSLASH:case Yc.CLOSE_SQUARE_BRACKET:return!0;default:return!1}}};const $c=Yc;var Zc=\"\".concat(\"accept acceptCharset accessKey action allowFullScreen allowTransparency\\n    alt async autoComplete autoFocus autoPlay capture cellPadding cellSpacing challenge\\n    charSet checked classID className colSpan cols content contentEditable contextMenu\\n    controls coords crossOrigin data dateTime default defer dir disabled download draggable\\n    encType form formAction formEncType formMethod formNoValidate formTarget frameBorder\\n    headers height hidden high href hrefLang htmlFor httpEquiv icon id inputMode integrity\\n    is keyParams keyType kind label lang list loop low manifest marginHeight marginWidth max maxLength media\\n    mediaGroup method min minLength multiple muted name noValidate nonce open\\n    optimum pattern placeholder poster preload radioGroup readOnly rel required\\n    reversed role rowSpan rows sandbox scope scoped scrolling seamless selected\\n    shape size sizes span spellCheck src srcDoc srcLang srcSet start step style\\n    summary tabIndex target title type useMap value width wmode wrap\",\" \").concat(\"onCopy onCut onPaste onCompositionEnd onCompositionStart onCompositionUpdate onKeyDown\\n    onKeyPress onKeyUp onFocus onBlur onChange onInput onSubmit onClick onContextMenu onDoubleClick\\n    onDrag onDragEnd onDragEnter onDragExit onDragLeave onDragOver onDragStart onDrop onMouseDown\\n    onMouseEnter onMouseLeave onMouseMove onMouseOut onMouseOver onMouseUp onSelect onTouchCancel\\n    onTouchEnd onTouchMove onTouchStart onScroll onWheel onAbort onCanPlay onCanPlayThrough\\n    onDurationChange onEmptied onEncrypted onEnded onError onLoadedData onLoadedMetadata\\n    onLoadStart onPause onPlay onPlaying onProgress onRateChange onSeeked onSeeking onStalled onSuspend onTimeUpdate onVolumeChange onWaiting onLoad onError\").split(/[\\s\\n]+/);function Qc(e,t){return 0===e.indexOf(t)}function Jc(e){var t,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];t=!1===r?{aria:!0,data:!0,attr:!0}:!0===r?{aria:!0}:At({},r);var n={};return Object.keys(e).forEach((function(r){(t.aria&&(\"role\"===r||Qc(r,\"aria-\"))||t.data&&Qc(r,\"data-\")||t.attr&&Zc.includes(r))&&(n[r]=e[r])})),n}var eu=m.forwardRef((function(e,t){var r=e.prefixCls,n=e.style,o=e.className,i=e.duration,a=void 0===i?4.5:i,s=e.showProgress,l=e.pauseOnHover,c=void 0===l||l,u=e.eventKey,d=e.content,f=e.closable,h=e.closeIcon,p=void 0===h?\"x\":h,g=e.props,v=e.onClick,b=e.onNoticeClose,y=e.times,w=e.hovering,x=Ie(m.useState(!1),2),S=x[0],C=x[1],k=Ie(m.useState(0),2),E=k[0],O=k[1],A=Ie(m.useState(0),2),T=A[0],j=A[1],P=w||S,M=a>0&&s,R=function(){b(u)};m.useEffect((function(){if(!P&&a>0){var e=Date.now()-T,t=setTimeout((function(){R()}),1e3*a-T);return function(){c&&clearTimeout(t),j(Date.now()-e)}}}),[a,P,y]),m.useEffect((function(){if(!P&&M&&(c||0===T)){var e,t=performance.now();return function r(){cancelAnimationFrame(e),e=requestAnimationFrame((function(e){var n=e+T-t,o=Math.min(n/(1e3*a),1);O(100*o),o<1&&r()}))}(),function(){c&&cancelAnimationFrame(e)}}}),[a,T,P,M,y]);var _=m.useMemo((function(){return\"object\"===Ne(f)&&null!==f?f:f?{closeIcon:p}:{}}),[f,p]),I=Jc(_,!0),N=100-(!E||E<0?0:E>100?100:E),F=\"\".concat(r,\"-notice\");return m.createElement(\"div\",Te({},g,{ref:t,className:ze()(F,o,De({},\"\".concat(F,\"-closable\"),f)),style:n,onMouseEnter:function(e){var t;C(!0),null==g||null===(t=g.onMouseEnter)||void 0===t||t.call(g,e)},onMouseLeave:function(e){var t;C(!1),null==g||null===(t=g.onMouseLeave)||void 0===t||t.call(g,e)},onClick:v}),m.createElement(\"div\",{className:\"\".concat(F,\"-content\")},d),f&&m.createElement(\"a\",Te({tabIndex:0,className:\"\".concat(F,\"-close\"),onKeyDown:function(e){\"Enter\"!==e.key&&\"Enter\"!==e.code&&e.keyCode!==$c.ENTER||R()},\"aria-label\":\"Close\"},I,{onClick:function(e){e.preventDefault(),e.stopPropagation(),R()}}),_.closeIcon),M&&m.createElement(\"progress\",{className:\"\".concat(F,\"-progress\"),max:\"100\",value:N},N+\"%\"))}));const tu=eu;var ru=m.createContext({});const nu=function(e){var t=e.children,r=e.classNames;return m.createElement(ru.Provider,{value:{classNames:r}},t)};var ou=[\"className\",\"style\",\"classNames\",\"styles\"];const iu=function(e){var t,r,n,o,i,a=e.configList,s=e.placement,l=e.prefixCls,c=e.className,u=e.style,d=e.motion,f=e.onAllNoticeRemoved,h=e.onNoticeClose,p=e.stack,g=(0,m.useContext)(ru).classNames,v=(0,m.useRef)({}),b=Ie((0,m.useState)(null),2),y=b[0],w=b[1],x=Ie((0,m.useState)([]),2),S=x[0],C=x[1],k=a.map((function(e){return{config:e,key:String(e.key)}})),E=Ie((i={offset:8,threshold:3,gap:16},(t=p)&&\"object\"===Ne(t)&&(i.offset=null!==(r=t.offset)&&void 0!==r?r:8,i.threshold=null!==(n=t.threshold)&&void 0!==n?n:3,i.gap=null!==(o=t.gap)&&void 0!==o?o:16),[!!t,i]),2),O=E[0],A=E[1],T=A.offset,j=A.threshold,P=A.gap,M=O&&(S.length>0||k.length<=j),R=\"function\"==typeof d?d(s):d;return(0,m.useEffect)((function(){O&&S.length>1&&C((function(e){return e.filter((function(e){return k.some((function(t){var r=t.key;return e===r}))}))}))}),[S,k,O]),(0,m.useEffect)((function(){var e,t;O&&v.current[null===(e=k[k.length-1])||void 0===e?void 0:e.key]&&w(v.current[null===(t=k[k.length-1])||void 0===t?void 0:t.key])}),[k,O]),m.createElement(Ul,Te({key:s,className:ze()(l,\"\".concat(l,\"-\").concat(s),null==g?void 0:g.list,c,De(De({},\"\".concat(l,\"-stack\"),!!O),\"\".concat(l,\"-stack-expanded\"),M)),style:u,keys:k,motionAppear:!0},R,{onAllRemoved:function(){f(s)}}),(function(e,t){var r=e.config,n=e.className,o=e.style,i=e.index,a=r,c=a.key,u=a.times,d=String(c),f=r,p=f.className,b=f.style,w=f.classNames,x=f.styles,E=Be(f,ou),A=k.findIndex((function(e){return e.key===d})),j={};if(O){var R=k.length-1-(A>-1?A:i-1),_=\"top\"===s||\"bottom\"===s?\"-50%\":\"0\";if(R>0){var I,N,F;j.height=M?null===(I=v.current[d])||void 0===I?void 0:I.offsetHeight:null==y?void 0:y.offsetHeight;for(var D=0,B=0;B<R;B++){var L;D+=(null===(L=v.current[k[k.length-1-B].key])||void 0===L?void 0:L.offsetHeight)+P}var z=(M?D:R*T)*(s.startsWith(\"top\")?1:-1),H=!M&&null!=y&&y.offsetWidth&&null!==(N=v.current[d])&&void 0!==N&&N.offsetWidth?((null==y?void 0:y.offsetWidth)-2*T*(R<3?R:3))/(null===(F=v.current[d])||void 0===F?void 0:F.offsetWidth):1;j.transform=\"translate3d(\".concat(_,\", \").concat(z,\"px, 0) scaleX(\").concat(H,\")\")}else j.transform=\"translate3d(\".concat(_,\", 0, 0)\")}return m.createElement(\"div\",{ref:t,className:ze()(\"\".concat(l,\"-notice-wrapper\"),n,null==w?void 0:w.wrapper),style:At(At(At({},o),j),null==x?void 0:x.wrapper),onMouseEnter:function(){return C((function(e){return e.includes(d)?e:[].concat(Vo(e),[d])}))},onMouseLeave:function(){return C((function(e){return e.filter((function(e){return e!==d}))}))}},m.createElement(tu,Te({},E,{ref:function(e){A>-1?v.current[d]=e:delete v.current[d]},prefixCls:l,classNames:w,styles:x,className:ze()(p,null==g?void 0:g.notice),style:b,times:u,key:c,eventKey:c,onNoticeClose:h,hovering:O&&S.length>0})))}))};var au=m.forwardRef((function(e,t){var r=e.prefixCls,n=void 0===r?\"rc-notification\":r,o=e.container,i=e.motion,a=e.maxCount,s=e.className,l=e.style,c=e.onAllRemoved,u=e.stack,d=e.renderNotifications,f=Ie(m.useState([]),2),h=f[0],p=f[1],g=function(e){var t,r=h.find((function(t){return t.key===e}));null==r||null===(t=r.onClose)||void 0===t||t.call(r),p((function(t){return t.filter((function(t){return t.key!==e}))}))};m.useImperativeHandle(t,(function(){return{open:function(e){p((function(t){var r,n=Vo(t),o=n.findIndex((function(t){return t.key===e.key})),i=At({},e);return o>=0?(i.times=((null===(r=t[o])||void 0===r?void 0:r.times)||0)+1,n[o]=i):(i.times=0,n.push(i)),a>0&&n.length>a&&(n=n.slice(-a)),n}))},close:function(e){g(e)},destroy:function(){p([])}}}));var v=Ie(m.useState({}),2),b=v[0],y=v[1];m.useEffect((function(){var e={};h.forEach((function(t){var r=t.placement,n=void 0===r?\"topRight\":r;n&&(e[n]=e[n]||[],e[n].push(t))})),Object.keys(b).forEach((function(t){e[t]=e[t]||[]})),y(e)}),[h]);var w=function(e){y((function(t){var r=At({},t);return(r[e]||[]).length||delete r[e],r}))},x=m.useRef(!1);if(m.useEffect((function(){Object.keys(b).length>0?x.current=!0:x.current&&(null==c||c(),x.current=!1)}),[b]),!o)return null;var S=Object.keys(b);return(0,js.createPortal)(m.createElement(m.Fragment,null,S.map((function(e){var t=b[e],r=m.createElement(iu,{key:e,configList:t,placement:e,prefixCls:n,className:null==s?void 0:s(e),style:null==l?void 0:l(e),motion:i,onNoticeClose:g,onAllNoticeRemoved:w,stack:u});return d?d(r,{prefixCls:n,key:e}):r}))),o)}));const su=au;var lu=[\"getContainer\",\"motion\",\"prefixCls\",\"maxCount\",\"className\",\"style\",\"onAllRemoved\",\"stack\",\"renderNotifications\"],cu=function(){return document.body},uu=0;const du=e=>{const[,,,,t]=Ql();return t?`${e}-css-var`:\"\"},fu=m.createContext(void 0),hu=100,pu={Modal:hu,Drawer:hu,Popover:hu,Popconfirm:hu,Tooltip:hu,Tour:hu,FloatButton:hu},mu={SelectLike:50,Dropdown:50,DatePicker:50,Menu:50,ImagePreview:1},gu=(e,t)=>{const[,r]=Ql(),n=m.useContext(fu),o=e in pu;let i;if(void 0!==t)i=[t,t];else{let a=null!=n?n:0;a+=o?(n?0:r.zIndexPopupBase)+pu[e]:mu[e],i=[void 0===n?t:a,a]}return i},vu=ri((function e(){ei(this,e)}));var bu=\"CALC_UNIT\",yu=new RegExp(bu,\"g\");function wu(e){return\"number\"==typeof e?\"\".concat(e).concat(bu):e}var xu=function(e){Bs(r,e);var t=Us(r);function r(e,n){var o;ei(this,r),De(Hs(o=t.call(this)),\"result\",\"\"),De(Hs(o),\"unitlessCssVar\",void 0),De(Hs(o),\"lowPriority\",void 0);var i=Ne(e);return o.unitlessCssVar=n,e instanceof r?o.result=\"(\".concat(e.result,\")\"):\"number\"===i?o.result=wu(e):\"string\"===i&&(o.result=e),o}return ri(r,[{key:\"add\",value:function(e){return e instanceof r?this.result=\"\".concat(this.result,\" + \").concat(e.getResult()):\"number\"!=typeof e&&\"string\"!=typeof e||(this.result=\"\".concat(this.result,\" + \").concat(wu(e))),this.lowPriority=!0,this}},{key:\"sub\",value:function(e){return e instanceof r?this.result=\"\".concat(this.result,\" - \").concat(e.getResult()):\"number\"!=typeof e&&\"string\"!=typeof e||(this.result=\"\".concat(this.result,\" - \").concat(wu(e))),this.lowPriority=!0,this}},{key:\"mul\",value:function(e){return this.lowPriority&&(this.result=\"(\".concat(this.result,\")\")),e instanceof r?this.result=\"\".concat(this.result,\" * \").concat(e.getResult(!0)):\"number\"!=typeof e&&\"string\"!=typeof e||(this.result=\"\".concat(this.result,\" * \").concat(e)),this.lowPriority=!1,this}},{key:\"div\",value:function(e){return this.lowPriority&&(this.result=\"(\".concat(this.result,\")\")),e instanceof r?this.result=\"\".concat(this.result,\" / \").concat(e.getResult(!0)):\"number\"!=typeof e&&\"string\"!=typeof e||(this.result=\"\".concat(this.result,\" / \").concat(e)),this.lowPriority=!1,this}},{key:\"getResult\",value:function(e){return this.lowPriority||e?\"(\".concat(this.result,\")\"):this.result}},{key:\"equal\",value:function(e){var t=this,r=(e||{}).unit,n=!0;return\"boolean\"==typeof r?n=r:Array.from(this.unitlessCssVar).some((function(e){return t.result.includes(e)}))&&(n=!1),this.result=this.result.replace(yu,n?\"px\":\"\"),void 0!==this.lowPriority?\"calc(\".concat(this.result,\")\"):this.result}}]),r}(vu);const Su=function(e){Bs(r,e);var t=Us(r);function r(e){var n;return ei(this,r),De(Hs(n=t.call(this)),\"result\",0),e instanceof r?n.result=e.result:\"number\"==typeof e&&(n.result=e),n}return ri(r,[{key:\"add\",value:function(e){return e instanceof r?this.result+=e.result:\"number\"==typeof e&&(this.result+=e),this}},{key:\"sub\",value:function(e){return e instanceof r?this.result-=e.result:\"number\"==typeof e&&(this.result-=e),this}},{key:\"mul\",value:function(e){return e instanceof r?this.result*=e.result:\"number\"==typeof e&&(this.result*=e),this}},{key:\"div\",value:function(e){return e instanceof r?this.result/=e.result:\"number\"==typeof e&&(this.result/=e),this}},{key:\"equal\",value:function(){return this.result}}]),r}(vu),Cu=function(e,t){return\"\".concat([t,e.replace(/([A-Z]+)([A-Z][a-z]+)/g,\"$1-$2\").replace(/([a-z])([A-Z])/g,\"$1-$2\")].filter(Boolean).join(\"-\"))},ku=function(e,t,r,n){var o=At({},t[e]);null!=n&&n.deprecatedTokens&&n.deprecatedTokens.forEach((function(e){var t,r=Ie(e,2),n=r[0],i=r[1];(null!=o&&o[n]||null!=o&&o[i])&&(null!==(t=o[i])&&void 0!==t||(o[i]=null==o?void 0:o[n]))}));var i=At(At({},r),o);return Object.keys(i).forEach((function(e){i[e]===t[e]&&delete i[e]})),i};var Eu=\"undefined\"!=typeof CSSINJS_STATISTIC,Ou=!0;function Au(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];if(!Eu)return Object.assign.apply(Object,[{}].concat(t));Ou=!1;var n={};return t.forEach((function(e){\"object\"===Ne(e)&&Object.keys(e).forEach((function(t){Object.defineProperty(n,t,{configurable:!0,enumerable:!0,get:function(){return e[t]}})}))})),Ou=!0,n}var Tu={};function ju(){}const Pu=function(e,t,r){var n;return\"function\"==typeof r?r(Au(t,null!==(n=t[e])&&void 0!==n?n:{})):null!=r?r:{}};var Mu=function(){function e(){ei(this,e),De(this,\"map\",new Map),De(this,\"objectIDMap\",new WeakMap),De(this,\"nextID\",0),De(this,\"lastAccessBeat\",new Map),De(this,\"accessBeat\",0)}return ri(e,[{key:\"set\",value:function(e,t){this.clear();var r=this.getCompositeKey(e);this.map.set(r,t),this.lastAccessBeat.set(r,Date.now())}},{key:\"get\",value:function(e){var t=this.getCompositeKey(e),r=this.map.get(t);return this.lastAccessBeat.set(t,Date.now()),this.accessBeat+=1,r}},{key:\"getCompositeKey\",value:function(e){var t=this;return e.map((function(e){return e&&\"object\"===Ne(e)?\"obj_\".concat(t.getObjectID(e)):\"\".concat(Ne(e),\"_\").concat(e)})).join(\"|\")}},{key:\"getObjectID\",value:function(e){if(this.objectIDMap.has(e))return this.objectIDMap.get(e);var t=this.nextID;return this.objectIDMap.set(e,t),this.nextID+=1,t}},{key:\"clear\",value:function(){var e=this;if(this.accessBeat>1e4){var t=Date.now();this.lastAccessBeat.forEach((function(r,n){t-r>6e5&&(e.map.delete(n),e.lastAccessBeat.delete(n))})),this.accessBeat=0}}}]),e}(),Ru=new Mu;const _u=function(){return{}},{genStyleHooks:Iu,genComponentStyleHook:Nu,genSubStyleComponent:Fu}=function(e){var t=e.useCSP,r=void 0===t?_u:t,n=e.useToken,o=e.usePrefix,i=e.getResetStyles,a=e.getCommonStyle,s=e.getCompUnitless;function l(t,s,l){var c=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},u=Array.isArray(t)?t:[t,t],d=Ie(u,1)[0],f=u.join(\"-\"),h=e.layer||{name:\"antd\"};return function(e){var t,u,p=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,g=n(),v=g.theme,b=g.realToken,y=g.hashId,w=g.token,x=g.cssVar,S=o(),C=S.rootPrefixCls,k=S.iconPrefixCls,E=r(),O=x?\"css\":\"js\",A=(t=function(){var e=new Set;return x&&Object.keys(c.unitless||{}).forEach((function(t){e.add(ki(t,x.prefix)),e.add(ki(t,Cu(d,x.prefix)))})),function(e,t){var r=\"css\"===e?xu:Su;return function(e){return new r(e,t)}}(O,e)},u=[O,d,null==x?void 0:x.prefix],m.useMemo((function(){var e=Ru.get(u);if(e)return e;var r=t();return Ru.set(u,r),r}),u)),T=function(e){return\"js\"===e?{max:Math.max,min:Math.min}:{max:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return\"max(\".concat(t.map((function(e){return Si(e)})).join(\",\"),\")\")},min:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return\"min(\".concat(t.map((function(e){return Si(e)})).join(\",\"),\")\")}}}(O),j=T.max,P=T.min,M={theme:v,token:w,hashId:y,nonce:function(){return E.nonce},clientOnly:c.clientOnly,layer:h,order:c.order||-999};return\"function\"==typeof i&&Ia(At(At({},M),{},{clientOnly:!1,path:[\"Shared\",C]}),(function(){return i(w,{prefix:{rootPrefixCls:C,iconPrefixCls:k},csp:E})})),[Ia(At(At({},M),{},{path:[f,e,k]}),(function(){if(!1===c.injectStyle)return[];var t=function(e){var t,r=e,n=ju;return Eu&&\"undefined\"!=typeof Proxy&&(t=new Set,r=new Proxy(e,{get:function(e,r){var n;return Ou&&(null===(n=t)||void 0===n||n.add(r)),e[r]}}),n=function(e,r){var n;Tu[e]={global:Array.from(t),component:At(At({},null===(n=Tu[e])||void 0===n?void 0:n.component),r)}}),{token:r,keys:t,flush:n}}(w),r=t.token,n=t.flush,o=Pu(d,b,l),i=\".\".concat(e),u=ku(d,b,o,{deprecatedTokens:c.deprecatedTokens});x&&o&&\"object\"===Ne(o)&&Object.keys(o).forEach((function(e){o[e]=\"var(\".concat(ki(e,Cu(d,x.prefix)),\")\")}));var f=Au(r,{componentCls:i,prefixCls:e,iconCls:\".\".concat(k),antCls:\".\".concat(C),calc:A,max:j,min:P},x?o:u),h=s(f,{hashId:y,prefixCls:e,rootPrefixCls:C,iconPrefixCls:k});n(d,u);var m=\"function\"==typeof a?a(f,e,p,c.resetFont):null;return[!1===c.resetStyle?null:m,h]})),y]}}return{genStyleHooks:function(e,t,r,o){var i=Array.isArray(e)?e[0]:e;function a(e){return\"\".concat(String(i)).concat(e.slice(0,1).toUpperCase()).concat(e.slice(1))}var c=(null==o?void 0:o.unitless)||{},u=At(At({},\"function\"==typeof s?s(e):{}),{},De({},a(\"zIndexPopup\"),!0));Object.keys(c).forEach((function(e){u[a(e)]=c[e]}));var d=At(At({},o),{},{unitless:u,prefixToken:a}),f=l(e,t,r,d),h=function(e,t,r){var o=r.unitless,i=r.injectStyle,a=void 0===i||i,s=r.prefixToken,l=r.ignore,c=function(i){var a=i.rootCls,c=i.cssVar,u=void 0===c?{}:c,d=n().realToken;return function(e,t){var r=e.key,n=e.prefix,o=e.unitless,i=e.ignore,a=e.token,s=e.scope,l=void 0===s?\"\":s,c=(0,m.useContext)(ui),u=c.cache.instanceId,d=c.container,f=a._tokenKey,h=[].concat(Vo(e.path),[r,l,f]),p=Ii(Na,h,(function(){var e=t(),a=Ie(Oi(e,r,{prefix:n,unitless:o,ignore:i,scope:l}),2),s=a[0],c=a[1];return[s,c,Ma(h,c),r]}),(function(e){var t=Ie(e,3)[2];xi&&Bt(t,{mark:si})}),(function(e){var t=Ie(e,3),n=t[1],o=t[2];if(n){var i=Lt(n,o,{mark:si,prepend:\"queue\",attachTo:d,priority:-999});i[li]=u,i.setAttribute(ai,r)}}))}({path:[e],prefix:u.prefix,key:u.key,unitless:o,ignore:l,token:d,scope:a},(function(){var n=Pu(e,d,t),o=ku(e,d,n,{deprecatedTokens:null==r?void 0:r.deprecatedTokens});return Object.keys(n).forEach((function(e){o[s(e)]=o[e],delete o[e]})),o})),null};return function(t){var r=n().cssVar;return[function(n){return a&&r?m.createElement(m.Fragment,null,m.createElement(c,{rootCls:t,cssVar:r,component:e}),n):n},null==r?void 0:r.key]}}(i,r,d);return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,r=Ie(f(e,t),2)[1],n=Ie(h(t),2);return[n[0],r,n[1]]}},genSubStyleComponent:function(e,t,r){var n=l(e,t,r,At({resetStyle:!1,order:-998},arguments.length>3&&void 0!==arguments[3]?arguments[3]:{}));return function(e){var t=e.prefixCls,r=e.rootCls;return n(t,void 0===r?t:r),null}},genComponentStyleHook:l}}({usePrefix:()=>{const{getPrefixCls:e,iconPrefixCls:t}=(0,m.useContext)(Xo);return{rootPrefixCls:e(),iconPrefixCls:t}},useToken:()=>{const[e,t,r,n,o]=Ql();return{theme:e,realToken:t,hashId:r,token:n,cssVar:o}},useCSP:()=>{const{csp:e}=(0,m.useContext)(Xo);return null!=e?e:{}},getResetStyles:(e,t)=>{var r;const n=(e=>({a:{color:e.colorLink,textDecoration:e.linkDecoration,backgroundColor:\"transparent\",outline:\"none\",cursor:\"pointer\",transition:`color ${e.motionDurationSlow}`,\"-webkit-text-decoration-skip\":\"objects\",\"&:hover\":{color:e.colorLinkHover},\"&:active\":{color:e.colorLinkActive},\"&:active, &:hover\":{textDecoration:e.linkHoverDecoration,outline:0},\"&:focus\":{textDecoration:e.linkFocusDecoration,outline:0},\"&[disabled]\":{color:e.colorTextDisabled,cursor:\"not-allowed\"}}}))(e);return[n,{\"&\":n},ic(null!==(r=null==t?void 0:t.prefix.iconPrefixCls)&&void 0!==r?r:qo)]},getCommonStyle:(e,t,r,n)=>{const o=`[class^=\"${t}\"], [class*=\" ${t}\"]`,i=r?`.${r}`:o,a={boxSizing:\"border-box\",\"&::before, &::after\":{boxSizing:\"border-box\"}};let s={};return!1!==n&&(s={fontFamily:e.fontFamily,fontSize:e.fontSize}),{[i]:Object.assign(Object.assign(Object.assign({},s),a),{[o]:a})}},getCompUnitless:()=>Xl}),Du=e=>{const{componentCls:t,iconCls:r,boxShadow:n,colorText:o,colorSuccess:i,colorError:a,colorWarning:s,colorInfo:l,fontSizeLG:c,motionEaseInOutCirc:u,motionDurationSlow:d,marginXS:f,paddingXS:h,borderRadiusLG:p,zIndexPopup:m,contentPadding:g,contentBg:v}=e,b=`${t}-notice`,y=new Ba(\"MessageMoveIn\",{\"0%\":{padding:0,transform:\"translateY(-100%)\",opacity:0},\"100%\":{padding:h,transform:\"translateY(0)\",opacity:1}}),w=new Ba(\"MessageMoveOut\",{\"0%\":{maxHeight:e.height,padding:h,opacity:1},\"100%\":{maxHeight:0,padding:0,opacity:0}}),x={padding:h,textAlign:\"center\",[`${t}-custom-content`]:{display:\"flex\",alignItems:\"center\"},[`${t}-custom-content > ${r}`]:{marginInlineEnd:f,fontSize:c},[`${b}-content`]:{display:\"inline-block\",padding:g,background:v,borderRadius:p,boxShadow:n,pointerEvents:\"all\"},[`${t}-success > ${r}`]:{color:i},[`${t}-error > ${r}`]:{color:a},[`${t}-warning > ${r}`]:{color:s},[`${t}-info > ${r},\\n      ${t}-loading > ${r}`]:{color:l}};return[{[t]:Object.assign(Object.assign({},rc(e)),{color:o,position:\"fixed\",top:f,width:\"100%\",pointerEvents:\"none\",zIndex:m,[`${t}-move-up`]:{animationFillMode:\"forwards\"},[`\\n        ${t}-move-up-appear,\\n        ${t}-move-up-enter\\n      `]:{animationName:y,animationDuration:d,animationPlayState:\"paused\",animationTimingFunction:u},[`\\n        ${t}-move-up-appear${t}-move-up-appear-active,\\n        ${t}-move-up-enter${t}-move-up-enter-active\\n      `]:{animationPlayState:\"running\"},[`${t}-move-up-leave`]:{animationName:w,animationDuration:d,animationPlayState:\"paused\",animationTimingFunction:u},[`${t}-move-up-leave${t}-move-up-leave-active`]:{animationPlayState:\"running\"},\"&-rtl\":{direction:\"rtl\",span:{direction:\"rtl\"}}})},{[t]:{[`${b}-wrapper`]:Object.assign({},x)}},{[`${t}-notice-pure-panel`]:Object.assign(Object.assign({},x),{padding:0,textAlign:\"start\"})}]},Bu=Iu(\"Message\",(e=>{const t=Au(e,{height:150});return[Du(t)]}),(e=>({zIndexPopup:e.zIndexPopupBase+1e3+10,contentBg:e.colorBgElevated,contentPadding:`${(e.controlHeightLG-e.fontSize*e.lineHeight)/2}px ${e.paddingSM}px`})));const Lu={info:m.createElement(Gc,null),success:m.createElement(Fc,null),error:m.createElement(Lc,null),warning:m.createElement(Uc,null),loading:m.createElement(Xc,null)},zu=e=>{let{prefixCls:t,type:r,icon:n,children:o}=e;return m.createElement(\"div\",{className:ze()(`${t}-custom-content`,`${t}-${r}`)},n||Lu[r],m.createElement(\"span\",null,o))},Hu={icon:{tag:\"svg\",attrs:{\"fill-rule\":\"evenodd\",viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 010 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 010 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 01-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 01-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7c-.04-.03-.05-.05-.06-.07a.12.12 0 010-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7c-.04-.04-.05-.06-.06-.09a.12.12 0 010-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 01.07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 01.07 0z\"}}]},name:\"close\",theme:\"outlined\"};var Uu=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:Hu}))};const Vu=m.forwardRef(Uu);function Wu(e){let t;const r=new Promise((r=>{t=e((()=>{r(!0)}))})),n=()=>{null==t||t()};return n.then=(e,t)=>r.then(e,t),n.promise=r,n}const Gu=3,qu=e=>{let{children:t,prefixCls:r}=e;const n=du(r),[o,i,a]=Bu(r,n);return o(m.createElement(nu,{classNames:{list:ze()(i,a,n)}},t))},Ku=(e,t)=>{let{prefixCls:r,key:n}=t;return m.createElement(qu,{prefixCls:r,key:n},e)},Xu=m.forwardRef(((e,t)=>{const{top:r,prefixCls:n,getContainer:o,maxCount:i,duration:a=Gu,rtl:s,transitionName:l,onAllRemoved:c}=e,{getPrefixCls:u,getPopupContainer:d,message:f,direction:h}=m.useContext(Xo),p=n||u(\"message\"),g=m.createElement(\"span\",{className:`${p}-close-x`},m.createElement(Vu,{className:`${p}-close-icon`})),[v,b]=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.getContainer,r=void 0===t?cu:t,n=e.motion,o=e.prefixCls,i=e.maxCount,a=e.className,s=e.style,l=e.onAllRemoved,c=e.stack,u=e.renderNotifications,d=Be(e,lu),f=Ie(m.useState(),2),h=f[0],p=f[1],g=m.useRef(),v=m.createElement(su,{container:h,ref:g,prefixCls:o,motion:n,maxCount:i,className:a,style:s,onAllRemoved:l,stack:c,renderNotifications:u}),b=Ie(m.useState([]),2),y=b[0],w=b[1],x=Ws((function(e){var t=function(){for(var e={},t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];return r.forEach((function(t){t&&Object.keys(t).forEach((function(r){var n=t[r];void 0!==n&&(e[r]=n)}))})),e}(d,e);null!==t.key&&void 0!==t.key||(t.key=\"rc-notification-\".concat(uu),uu+=1),w((function(e){return[].concat(Vo(e),[{type:\"open\",config:t}])}))})),S=m.useMemo((function(){return{open:x,close:function(e){w((function(t){return[].concat(Vo(t),[{type:\"close\",key:e}])}))},destroy:function(){w((function(e){return[].concat(Vo(e),[{type:\"destroy\"}])}))}}}),[]);return m.useEffect((function(){p(r())})),m.useEffect((function(){var e,t;g.current&&y.length&&(y.forEach((function(e){switch(e.type){case\"open\":g.current.open(e.config);break;case\"close\":g.current.close(e.key);break;case\"destroy\":g.current.destroy()}})),w((function(r){return e===r&&t||(e=r,t=r.filter((function(e){return!y.includes(e)}))),t})))}),[y]),[S,v]}({prefixCls:p,style:()=>({left:\"50%\",transform:\"translateX(-50%)\",top:null!=r?r:8}),className:()=>ze()({[`${p}-rtl`]:null!=s?s:\"rtl\"===h}),motion:()=>function(e,t){return{motionName:null!=t?t:`${e}-move-up`}}(p,l),closable:!1,closeIcon:g,duration:a,getContainer:()=>(null==o?void 0:o())||(null==d?void 0:d())||document.body,maxCount:i,onAllRemoved:c,renderNotifications:Ku});return m.useImperativeHandle(t,(()=>Object.assign(Object.assign({},v),{prefixCls:p,message:f}))),b}));let Yu=0;function $u(e){const t=m.useRef(null),r=(Ya(),m.useMemo((()=>{const e=e=>{var r;null===(r=t.current)||void 0===r||r.close(e)},r=r=>{if(!t.current){const e=()=>{};return e.then=()=>{},e}const{open:n,prefixCls:o,message:i}=t.current,a=`${o}-notice`,{content:s,icon:l,type:c,key:u,className:d,style:f,onClose:h}=r,p=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(r,[\"content\",\"icon\",\"type\",\"key\",\"className\",\"style\",\"onClose\"]);let g=u;return null==g&&(Yu+=1,g=`antd-message-${Yu}`),Wu((t=>(n(Object.assign(Object.assign({},p),{key:g,content:m.createElement(zu,{prefixCls:o,type:c,icon:l},s),placement:\"top\",className:ze()(c&&`${a}-${c}`,d,null==i?void 0:i.className),style:Object.assign(Object.assign({},null==i?void 0:i.style),f),onClose:()=>{null==h||h(),t()}})),()=>{e(g)})))},n={open:r,destroy:r=>{var n;void 0!==r?e(r):null===(n=t.current)||void 0===n||n.destroy()}};return[\"info\",\"success\",\"warning\",\"error\",\"loading\"].forEach((e=>{n[e]=(t,n,o)=>{let i,a,s;i=t&&\"object\"==typeof t&&\"content\"in t?t:{content:t},\"function\"==typeof n?s=n:(a=n,s=o);const l=Object.assign(Object.assign({onClose:s,duration:a},i),{type:e});return r(l)}})),n}),[]));return[r,m.createElement(Xu,Object.assign({key:\"message-holder\"},e,{ref:t}))]}let Zu=null,Qu=e=>e(),Ju=[],ed={};function td(){const{getContainer:e,duration:t,rtl:r,maxCount:n,top:o}=ed,i=(null==e?void 0:e())||document.body;return{getContainer:()=>i,duration:t,rtl:r,maxCount:n,top:o}}const rd=m.forwardRef(((e,t)=>{const{messageConfig:r,sync:n}=e,{getPrefixCls:o}=(0,m.useContext)(Xo),i=ed.prefixCls||o(\"message\"),a=(0,m.useContext)(Wo),[s,l]=$u(Object.assign(Object.assign(Object.assign({},r),{prefixCls:i}),a.message));return m.useImperativeHandle(t,(()=>{const e=Object.assign({},s);return Object.keys(e).forEach((t=>{e[t]=function(){return n(),s[t].apply(s,arguments)}})),{instance:e,sync:n}})),l})),nd=m.forwardRef(((e,t)=>{const[r,n]=m.useState(td),o=()=>{n(td)};m.useEffect(o,[]);const i=pc(),a=i.getRootPrefixCls(),s=i.getIconPrefixCls(),l=i.getTheme(),c=m.createElement(rd,{ref:t,sync:o,messageConfig:r});return m.createElement(vc,{prefixCls:a,iconPrefixCls:s,theme:l},i.holderRender?i.holderRender(c):c)}));function od(){if(!Zu){const e=document.createDocumentFragment(),t={fragment:e};return Zu=t,void Qu((()=>{_c()(m.createElement(nd,{ref:e=>{const{instance:r,sync:n}=e||{};Promise.resolve().then((()=>{!t.instance&&r&&(t.instance=r,t.sync=n,od())}))}}),e)}))}Zu.instance&&(Ju.forEach((e=>{const{type:t,skipped:r}=e;if(!r)switch(t){case\"open\":Qu((()=>{const t=Zu.instance.open(Object.assign(Object.assign({},ed),e.config));null==t||t.then(e.resolve),e.setCloseFn(t)}));break;case\"destroy\":Qu((()=>{null==Zu||Zu.instance.destroy(e.key)}));break;default:Qu((()=>{var r;const n=(r=Zu.instance)[t].apply(r,Vo(e.args));null==n||n.then(e.resolve),e.setCloseFn(n)}))}})),Ju=[])}const id={open:function(e){const t=Wu((t=>{let r;const n={type:\"open\",config:e,resolve:t,setCloseFn:e=>{r=e}};return Ju.push(n),()=>{r?Qu((()=>{r()})):n.skipped=!0}}));return od(),t},destroy:e=>{Ju.push({type:\"destroy\",key:e}),od()},config:function(e){ed=Object.assign(Object.assign({},ed),e),Qu((()=>{var e;null===(e=null==Zu?void 0:Zu.sync)||void 0===e||e.call(Zu)}))},useMessage:function(e){return $u(e)},_InternalPanelDoNotUseOrYouWillBeFired:e=>{const{prefixCls:t,className:r,type:n,icon:o,content:i}=e,a=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"className\",\"type\",\"icon\",\"content\"]),{getPrefixCls:s}=m.useContext(Xo),l=t||s(\"message\"),c=du(l),[u,d,f]=Bu(l,c);return u(m.createElement(tu,Object.assign({},a,{prefixCls:l,className:ze()(r,d,`${l}-notice-pure-panel`,f,c),eventKey:\"pure\",duration:null,content:m.createElement(zu,{prefixCls:l,type:n,icon:o},i)})))}};[\"success\",\"info\",\"warning\",\"error\",\"loading\"].forEach((e=>{id[e]=function(){for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];return function(e,t){pc();const r=Wu((r=>{let n;const o={type:e,args:t,resolve:r,setCloseFn:e=>{n=e}};return Ju.push(o),()=>{n?Qu((()=>{n()})):o.skipped=!0}}));return od(),r}(e,r)}}));const ad=id;function sd(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=[];return m.Children.forEach(e,(function(e){(null!=e||t.keepEmpty)&&(Array.isArray(e)?r=r.concat(sd(e)):wn(e)&&e.props?r=r.concat(sd(e.props.children,t)):r.push(e))})),r}var ld=\"RC_FORM_INTERNAL_HOOKS\",cd=function(){Xt(!1,\"Can not find FormContext. Please make sure you wrap Field under Form.\")};const ud=m.createContext({getFieldValue:cd,getFieldsValue:cd,getFieldError:cd,getFieldWarning:cd,getFieldsError:cd,isFieldsTouched:cd,isFieldTouched:cd,isFieldValidating:cd,isFieldsValidating:cd,resetFields:cd,setFields:cd,setFieldValue:cd,setFieldsValue:cd,validateFields:cd,submit:cd,getInternalHooks:function(){return cd(),{dispatch:cd,initEntityValue:cd,registerField:cd,useSubscribe:cd,setInitialValues:cd,destroyForm:cd,setCallbacks:cd,registerWatch:cd,getFields:cd,setValidateMessages:cd,setPreserve:cd,getInitialValue:cd}}}),dd=m.createContext(null);function fd(e){return null==e?[]:Array.isArray(e)?e:[e]}function hd(){return{default:\"Validation error on field %s\",required:\"%s is required\",enum:\"%s must be one of %s\",whitespace:\"%s cannot be empty\",date:{format:\"%s date %s is invalid for format %s\",parse:\"%s date could not be parsed, %s is invalid \",invalid:\"%s date %s is invalid\"},types:{string:\"%s is not a %s\",method:\"%s is not a %s (function)\",array:\"%s is not an %s\",object:\"%s is not an %s\",number:\"%s is not a %s\",date:\"%s is not a %s\",boolean:\"%s is not a %s\",integer:\"%s is not an %s\",float:\"%s is not a %s\",regexp:\"%s is not a valid %s\",email:\"%s is not a valid %s\",url:\"%s is not a valid %s\",hex:\"%s is not a valid %s\"},string:{len:\"%s must be exactly %s characters\",min:\"%s must be at least %s characters\",max:\"%s cannot be longer than %s characters\",range:\"%s must be between %s and %s characters\"},number:{len:\"%s must equal %s\",min:\"%s cannot be less than %s\",max:\"%s cannot be greater than %s\",range:\"%s must be between %s and %s\"},array:{len:\"%s must be exactly %s in length\",min:\"%s cannot be less than %s in length\",max:\"%s cannot be greater than %s in length\",range:\"%s must be between %s and %s in length\"},pattern:{mismatch:\"%s value %s does not match pattern %s\"},clone:function(){var e=JSON.parse(JSON.stringify(this));return e.clone=this.clone,e}}}var pd=hd();function md(e){var t=\"function\"==typeof Map?new Map:void 0;return md=function(e){if(null===e||!function(e){try{return-1!==Function.toString.call(e).indexOf(\"[native code]\")}catch(t){return\"function\"==typeof e}}(e))return e;if(\"function\"!=typeof e)throw new TypeError(\"Super expression must either be null or a function\");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return function(e,t,r){if(zs())return Reflect.construct.apply(null,arguments);var n=[null];n.push.apply(n,t);var o=new(e.bind.apply(e,n));return r&&Ds(o,r.prototype),o}(e,arguments,Ls(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),Ds(r,e)},md(e)}var gd=/%[sdj%]/g;function vd(e){if(!e||!e.length)return null;var t={};return e.forEach((function(e){var r=e.field;t[r]=t[r]||[],t[r].push(e)})),t}function bd(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];var o=0,i=r.length;return\"function\"==typeof e?e.apply(null,r):\"string\"==typeof e?e.replace(gd,(function(e){if(\"%%\"===e)return\"%\";if(o>=i)return e;switch(e){case\"%s\":return String(r[o++]);case\"%d\":return Number(r[o++]);case\"%j\":try{return JSON.stringify(r[o++])}catch(e){return\"[Circular]\"}break;default:return e}})):e}function yd(e,t){return null==e||!(\"array\"!==t||!Array.isArray(e)||e.length)||!(!function(e){return\"string\"===e||\"url\"===e||\"hex\"===e||\"email\"===e||\"date\"===e||\"pattern\"===e}(t)||\"string\"!=typeof e||e)}function wd(e,t,r){var n=0,o=e.length;!function i(a){if(a&&a.length)r(a);else{var s=n;n+=1,s<o?t(e[s],i):r([])}}([])}\"undefined\"!=typeof process&&process.env;var xd=function(e){Bs(r,e);var t=Us(r);function r(e,n){var o;return ei(this,r),De(Hs(o=t.call(this,\"Async Validation Error\")),\"errors\",void 0),De(Hs(o),\"fields\",void 0),o.errors=e,o.fields=n,o}return ri(r)}(md(Error));function Sd(e,t){return function(r){var n,o;return n=e.fullFields?function(e,t){for(var r=e,n=0;n<t.length;n++){if(null==r)return r;r=r[t[n]]}return r}(t,e.fullFields):t[r.field||e.fullField],(o=r)&&void 0!==o.message?(r.field=r.field||e.fullField,r.fieldValue=n,r):{message:\"function\"==typeof r?r():r,fieldValue:n,field:r.field||e.fullField}}}function Cd(e,t){if(t)for(var r in t)if(t.hasOwnProperty(r)){var n=t[r];\"object\"===Ne(n)&&\"object\"===Ne(e[r])?e[r]=At(At({},e[r]),n):e[r]=n}return e}var kd=\"enum\";const Ed=function(e,t,r,n,o,i){!e.required||r.hasOwnProperty(e.field)&&!yd(t,i||e.type)||n.push(bd(o.messages.required,e.fullField))};var Od,Ad=/^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+\\.)+[a-zA-Z\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]{2,}))$/,Td=/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i,jd={integer:function(e){return jd.number(e)&&parseInt(e,10)===e},float:function(e){return jd.number(e)&&!jd.integer(e)},array:function(e){return Array.isArray(e)},regexp:function(e){if(e instanceof RegExp)return!0;try{return!!new RegExp(e)}catch(e){return!1}},date:function(e){return\"function\"==typeof e.getTime&&\"function\"==typeof e.getMonth&&\"function\"==typeof e.getYear&&!isNaN(e.getTime())},number:function(e){return!isNaN(e)&&\"number\"==typeof e},object:function(e){return\"object\"===Ne(e)&&!jd.array(e)},method:function(e){return\"function\"==typeof e},email:function(e){return\"string\"==typeof e&&e.length<=320&&!!e.match(Ad)},url:function(e){return\"string\"==typeof e&&e.length<=2048&&!!e.match(function(){if(Od)return Od;var e=\"[a-fA-F\\\\d:]\",t=function(t){return t&&t.includeBoundaries?\"(?:(?<=\\\\s|^)(?=\".concat(e,\")|(?<=\").concat(e,\")(?=\\\\s|$))\"):\"\"},r=\"(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}\",n=\"[a-fA-F\\\\d]{1,4}\",o=[\"(?:\".concat(n,\":){7}(?:\").concat(n,\"|:)\"),\"(?:\".concat(n,\":){6}(?:\").concat(r,\"|:\").concat(n,\"|:)\"),\"(?:\".concat(n,\":){5}(?::\").concat(r,\"|(?::\").concat(n,\"){1,2}|:)\"),\"(?:\".concat(n,\":){4}(?:(?::\").concat(n,\"){0,1}:\").concat(r,\"|(?::\").concat(n,\"){1,3}|:)\"),\"(?:\".concat(n,\":){3}(?:(?::\").concat(n,\"){0,2}:\").concat(r,\"|(?::\").concat(n,\"){1,4}|:)\"),\"(?:\".concat(n,\":){2}(?:(?::\").concat(n,\"){0,3}:\").concat(r,\"|(?::\").concat(n,\"){1,5}|:)\"),\"(?:\".concat(n,\":){1}(?:(?::\").concat(n,\"){0,4}:\").concat(r,\"|(?::\").concat(n,\"){1,6}|:)\"),\"(?::(?:(?::\".concat(n,\"){0,5}:\").concat(r,\"|(?::\").concat(n,\"){1,7}|:))\")],i=\"(?:\".concat(o.join(\"|\"),\")\").concat(\"(?:%[0-9a-zA-Z]{1,})?\"),a=new RegExp(\"(?:^\".concat(r,\"$)|(?:^\").concat(i,\"$)\")),s=new RegExp(\"^\".concat(r,\"$\")),l=new RegExp(\"^\".concat(i,\"$\")),c=function(e){return e&&e.exact?a:new RegExp(\"(?:\".concat(t(e)).concat(r).concat(t(e),\")|(?:\").concat(t(e)).concat(i).concat(t(e),\")\"),\"g\")};c.v4=function(e){return e&&e.exact?s:new RegExp(\"\".concat(t(e)).concat(r).concat(t(e)),\"g\")},c.v6=function(e){return e&&e.exact?l:new RegExp(\"\".concat(t(e)).concat(i).concat(t(e)),\"g\")};var u=c.v4().source,d=c.v6().source,f=\"(?:\".concat(\"(?:(?:[a-z]+:)?//)\",\"|www\\\\.)\").concat(\"(?:\\\\S+(?::\\\\S*)?@)?\",\"(?:localhost|\").concat(u,\"|\").concat(d,\"|\").concat(\"(?:(?:[a-z\\\\u00a1-\\\\uffff0-9][-_]*)*[a-z\\\\u00a1-\\\\uffff0-9]+)\").concat(\"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*\").concat(\"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))\",\")\").concat(\"(?::\\\\d{2,5})?\").concat('(?:[/?#][^\\\\s\"]*)?');return Od=new RegExp(\"(?:^\".concat(f,\"$)\"),\"i\")}())},hex:function(e){return\"string\"==typeof e&&!!e.match(Td)}};const Pd=Ed,Md=function(e,t,r,n,o){(/^\\s+$/.test(t)||\"\"===t)&&n.push(bd(o.messages.whitespace,e.fullField))},Rd=function(e,t,r,n,o){if(e.required&&void 0===t)Ed(e,t,r,n,o);else{var i=e.type;[\"integer\",\"float\",\"array\",\"regexp\",\"object\",\"method\",\"email\",\"number\",\"date\",\"url\",\"hex\"].indexOf(i)>-1?jd[i](t)||n.push(bd(o.messages.types[i],e.fullField,e.type)):i&&Ne(t)!==e.type&&n.push(bd(o.messages.types[i],e.fullField,e.type))}},_d=function(e,t,r,n,o){var i=\"number\"==typeof e.len,a=\"number\"==typeof e.min,s=\"number\"==typeof e.max,l=t,c=null,u=\"number\"==typeof t,d=\"string\"==typeof t,f=Array.isArray(t);if(u?c=\"number\":d?c=\"string\":f&&(c=\"array\"),!c)return!1;f&&(l=t.length),d&&(l=t.replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,\"_\").length),i?l!==e.len&&n.push(bd(o.messages[c].len,e.fullField,e.len)):a&&!s&&l<e.min?n.push(bd(o.messages[c].min,e.fullField,e.min)):s&&!a&&l>e.max?n.push(bd(o.messages[c].max,e.fullField,e.max)):a&&s&&(l<e.min||l>e.max)&&n.push(bd(o.messages[c].range,e.fullField,e.min,e.max))},Id=function(e,t,r,n,o){e[kd]=Array.isArray(e[kd])?e[kd]:[],-1===e[kd].indexOf(t)&&n.push(bd(o.messages[kd],e.fullField,e[kd].join(\", \")))},Nd=function(e,t,r,n,o){e.pattern&&(e.pattern instanceof RegExp?(e.pattern.lastIndex=0,e.pattern.test(t)||n.push(bd(o.messages.pattern.mismatch,e.fullField,t,e.pattern))):\"string\"==typeof e.pattern&&(new RegExp(e.pattern).test(t)||n.push(bd(o.messages.pattern.mismatch,e.fullField,t,e.pattern))))},Fd=function(e,t,r,n,o){var i=e.type,a=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(yd(t,i)&&!e.required)return r();Pd(e,t,n,a,o,i),yd(t,i)||Rd(e,t,n,a,o)}r(a)},Dd={string:function(e,t,r,n,o){var i=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(yd(t,\"string\")&&!e.required)return r();Pd(e,t,n,i,o,\"string\"),yd(t,\"string\")||(Rd(e,t,n,i,o),_d(e,t,n,i,o),Nd(e,t,n,i,o),!0===e.whitespace&&Md(e,t,n,i,o))}r(i)},method:function(e,t,r,n,o){var i=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(yd(t)&&!e.required)return r();Pd(e,t,n,i,o),void 0!==t&&Rd(e,t,n,i,o)}r(i)},number:function(e,t,r,n,o){var i=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(\"\"===t&&(t=void 0),yd(t)&&!e.required)return r();Pd(e,t,n,i,o),void 0!==t&&(Rd(e,t,n,i,o),_d(e,t,n,i,o))}r(i)},boolean:function(e,t,r,n,o){var i=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(yd(t)&&!e.required)return r();Pd(e,t,n,i,o),void 0!==t&&Rd(e,t,n,i,o)}r(i)},regexp:function(e,t,r,n,o){var i=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(yd(t)&&!e.required)return r();Pd(e,t,n,i,o),yd(t)||Rd(e,t,n,i,o)}r(i)},integer:function(e,t,r,n,o){var i=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(yd(t)&&!e.required)return r();Pd(e,t,n,i,o),void 0!==t&&(Rd(e,t,n,i,o),_d(e,t,n,i,o))}r(i)},float:function(e,t,r,n,o){var i=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(yd(t)&&!e.required)return r();Pd(e,t,n,i,o),void 0!==t&&(Rd(e,t,n,i,o),_d(e,t,n,i,o))}r(i)},array:function(e,t,r,n,o){var i=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(null==t&&!e.required)return r();Pd(e,t,n,i,o,\"array\"),null!=t&&(Rd(e,t,n,i,o),_d(e,t,n,i,o))}r(i)},object:function(e,t,r,n,o){var i=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(yd(t)&&!e.required)return r();Pd(e,t,n,i,o),void 0!==t&&Rd(e,t,n,i,o)}r(i)},enum:function(e,t,r,n,o){var i=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(yd(t)&&!e.required)return r();Pd(e,t,n,i,o),void 0!==t&&Id(e,t,n,i,o)}r(i)},pattern:function(e,t,r,n,o){var i=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(yd(t,\"string\")&&!e.required)return r();Pd(e,t,n,i,o),yd(t,\"string\")||Nd(e,t,n,i,o)}r(i)},date:function(e,t,r,n,o){var i=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(yd(t,\"date\")&&!e.required)return r();var a;Pd(e,t,n,i,o),yd(t,\"date\")||(a=t instanceof Date?t:new Date(t),Rd(e,a,n,i,o),a&&_d(e,a.getTime(),n,i,o))}r(i)},url:Fd,hex:Fd,email:Fd,required:function(e,t,r,n,o){var i=[],a=Array.isArray(t)?\"array\":Ne(t);Pd(e,t,n,i,o,a),r(i)},any:function(e,t,r,n,o){var i=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(yd(t)&&!e.required)return r();Pd(e,t,n,i,o)}r(i)}};var Bd=function(){function e(t){ei(this,e),De(this,\"rules\",null),De(this,\"_messages\",pd),this.define(t)}return ri(e,[{key:\"define\",value:function(e){var t=this;if(!e)throw new Error(\"Cannot configure a schema with no rules\");if(\"object\"!==Ne(e)||Array.isArray(e))throw new Error(\"Rules must be an object\");this.rules={},Object.keys(e).forEach((function(r){var n=e[r];t.rules[r]=Array.isArray(n)?n:[n]}))}},{key:\"messages\",value:function(e){return e&&(this._messages=Cd(hd(),e)),this._messages}},{key:\"validate\",value:function(t){var r=this,n=t,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){};if(\"function\"==typeof o&&(i=o,o={}),!this.rules||0===Object.keys(this.rules).length)return i&&i(null,n),Promise.resolve(n);if(o.messages){var a=this.messages();a===pd&&(a=hd()),Cd(a,o.messages),o.messages=a}else o.messages=this.messages();var s={};(o.keys||Object.keys(this.rules)).forEach((function(e){var o=r.rules[e],i=n[e];o.forEach((function(o){var a=o;\"function\"==typeof a.transform&&(n===t&&(n=At({},n)),null!=(i=n[e]=a.transform(i))&&(a.type=a.type||(Array.isArray(i)?\"array\":Ne(i)))),(a=\"function\"==typeof a?{validator:a}:At({},a)).validator=r.getValidationMethod(a),a.validator&&(a.field=e,a.fullField=a.fullField||e,a.type=r.getType(a),s[e]=s[e]||[],s[e].push({rule:a,value:i,source:n,field:e}))}))}));var l={};return function(e,t,r,n,o){if(t.first){var i=new Promise((function(t,i){var a=function(e){var t=[];return Object.keys(e).forEach((function(r){t.push.apply(t,Vo(e[r]||[]))})),t}(e);wd(a,r,(function(e){return n(e),e.length?i(new xd(e,vd(e))):t(o)}))}));return i.catch((function(e){return e})),i}var a=!0===t.firstFields?Object.keys(e):t.firstFields||[],s=Object.keys(e),l=s.length,c=0,u=[],d=new Promise((function(t,i){var d=function(e){if(u.push.apply(u,e),++c===l)return n(u),u.length?i(new xd(u,vd(u))):t(o)};s.length||(n(u),t(o)),s.forEach((function(t){var n=e[t];-1!==a.indexOf(t)?wd(n,r,d):function(e,t,r){var n=[],o=0,i=e.length;function a(e){n.push.apply(n,Vo(e||[])),++o===i&&r(n)}e.forEach((function(e){t(e,a)}))}(n,r,d)}))}));return d.catch((function(e){return e})),d}(s,o,(function(t,r){var i,a=t.rule,s=!(\"object\"!==a.type&&\"array\"!==a.type||\"object\"!==Ne(a.fields)&&\"object\"!==Ne(a.defaultField));function c(e,t){return At(At({},t),{},{fullField:\"\".concat(a.fullField,\".\").concat(e),fullFields:a.fullFields?[].concat(Vo(a.fullFields),[e]):[e]})}function u(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],u=Array.isArray(i)?i:[i];!o.suppressWarning&&u.length&&e.warning(\"async-validator:\",u),u.length&&void 0!==a.message&&(u=[].concat(a.message));var d=u.map(Sd(a,n));if(o.first&&d.length)return l[a.field]=1,r(d);if(s){if(a.required&&!t.value)return void 0!==a.message?d=[].concat(a.message).map(Sd(a,n)):o.error&&(d=[o.error(a,bd(o.messages.required,a.field))]),r(d);var f={};a.defaultField&&Object.keys(t.value).map((function(e){f[e]=a.defaultField})),f=At(At({},f),t.rule.fields);var h={};Object.keys(f).forEach((function(e){var t=f[e],r=Array.isArray(t)?t:[t];h[e]=r.map(c.bind(null,e))}));var p=new e(h);p.messages(o.messages),t.rule.options&&(t.rule.options.messages=o.messages,t.rule.options.error=o.error),p.validate(t.value,t.rule.options||o,(function(e){var t=[];d&&d.length&&t.push.apply(t,Vo(d)),e&&e.length&&t.push.apply(t,Vo(e)),r(t.length?t:null)}))}else r(d)}if(s=s&&(a.required||!a.required&&t.value),a.field=t.field,a.asyncValidator)i=a.asyncValidator(a,t.value,u,t.source,o);else if(a.validator){try{i=a.validator(a,t.value,u,t.source,o)}catch(e){var d,f;null===(d=(f=console).error)||void 0===d||d.call(f,e),o.suppressValidatorError||setTimeout((function(){throw e}),0),u(e.message)}!0===i?u():!1===i?u(\"function\"==typeof a.message?a.message(a.fullField||a.field):a.message||\"\".concat(a.fullField||a.field,\" fails\")):i instanceof Array?u(i):i instanceof Error&&u(i.message)}i&&i.then&&i.then((function(){return u()}),(function(e){return u(e)}))}),(function(e){!function(e){var t=[],r={};function o(e){var r;Array.isArray(e)?t=(r=t).concat.apply(r,Vo(e)):t.push(e)}for(var a=0;a<e.length;a++)o(e[a]);t.length?(r=vd(t),i(t,r)):i(null,n)}(e)}),n)}},{key:\"getType\",value:function(e){if(void 0===e.type&&e.pattern instanceof RegExp&&(e.type=\"pattern\"),\"function\"!=typeof e.validator&&e.type&&!Dd.hasOwnProperty(e.type))throw new Error(bd(\"Unknown rule type %s\",e.type));return e.type||\"string\"}},{key:\"getValidationMethod\",value:function(e){if(\"function\"==typeof e.validator)return e.validator;var t=Object.keys(e),r=t.indexOf(\"message\");return-1!==r&&t.splice(r,1),1===t.length&&\"required\"===t[0]?Dd.required:Dd[this.getType(e)]||void 0}}]),e}();De(Bd,\"register\",(function(e,t){if(\"function\"!=typeof t)throw new Error(\"Cannot register a validator by type, validator is not a function\");Dd[e]=t})),De(Bd,\"warning\",(function(){})),De(Bd,\"messages\",pd),De(Bd,\"validators\",Dd);var Ld=\"'${name}' is not a valid ${type}\",zd={default:\"Validation error on field '${name}'\",required:\"'${name}' is required\",enum:\"'${name}' must be one of [${enum}]\",whitespace:\"'${name}' cannot be empty\",date:{format:\"'${name}' is invalid for format date\",parse:\"'${name}' could not be parsed as date\",invalid:\"'${name}' is invalid date\"},types:{string:Ld,method:Ld,array:Ld,object:Ld,number:Ld,date:Ld,boolean:Ld,integer:Ld,float:Ld,regexp:Ld,email:Ld,url:Ld,hex:Ld},string:{len:\"'${name}' must be exactly ${len} characters\",min:\"'${name}' must be at least ${min} characters\",max:\"'${name}' cannot be longer than ${max} characters\",range:\"'${name}' must be between ${min} and ${max} characters\"},number:{len:\"'${name}' must equal ${len}\",min:\"'${name}' cannot be less than ${min}\",max:\"'${name}' cannot be greater than ${max}\",range:\"'${name}' must be between ${min} and ${max}\"},array:{len:\"'${name}' must be exactly ${len} in length\",min:\"'${name}' cannot be less than ${min} in length\",max:\"'${name}' cannot be greater than ${max} in length\",range:\"'${name}' must be between ${min} and ${max} in length\"},pattern:{mismatch:\"'${name}' does not match pattern ${pattern}\"}},Hd=Bd;function Ud(e,t){return e.replace(/\\\\?\\$\\{\\w+\\}/g,(function(e){if(e.startsWith(\"\\\\\"))return e.slice(1);var r=e.slice(2,-1);return t[r]}))}var Vd=\"CODE_LOGIC_ERROR\";function Wd(e,t,r,n,o){return Gd.apply(this,arguments)}function Gd(){return Gd=wc(bc().mark((function e(t,r,n,o,i){var a,s,l,c,u,d,f,h,p;return bc().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return delete(a=At({},n)).ruleIndex,Hd.warning=function(){},a.validator&&(s=a.validator,a.validator=function(){try{return s.apply(void 0,arguments)}catch(e){return console.error(e),Promise.reject(Vd)}}),l=null,a&&\"array\"===a.type&&a.defaultField&&(l=a.defaultField,delete a.defaultField),c=new Hd(De({},t,[a])),u=qa(zd,o.validateMessages),c.messages(u),d=[],e.prev=10,e.next=13,Promise.resolve(c.validate(De({},t,r),At({},o)));case 13:e.next=18;break;case 15:e.prev=15,e.t0=e.catch(10),e.t0.errors&&(d=e.t0.errors.map((function(e,t){var r=e.message,n=r===Vd?u.default:r;return m.isValidElement(n)?m.cloneElement(n,{key:\"error_\".concat(t)}):n})));case 18:if(d.length||!l){e.next=23;break}return e.next=21,Promise.all(r.map((function(e,r){return Wd(\"\".concat(t,\".\").concat(r),e,l,o,i)})));case 21:return f=e.sent,e.abrupt(\"return\",f.reduce((function(e,t){return[].concat(Vo(e),Vo(t))}),[]));case 23:return h=At(At({},n),{},{name:t,enum:(n.enum||[]).join(\", \")},i),p=d.map((function(e){return\"string\"==typeof e?Ud(e,h):e})),e.abrupt(\"return\",p);case 26:case\"end\":return e.stop()}}),e,null,[[10,15]])}))),Gd.apply(this,arguments)}function qd(e,t,r,n,o,i){var a,s=e.join(\".\"),l=r.map((function(e,t){var r=e.validator,n=At(At({},e),{},{ruleIndex:t});return r&&(n.validator=function(e,t,n){var o=!1,i=r(e,t,(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];Promise.resolve().then((function(){Xt(!o,\"Your validator function has already return a promise. `callback` will be ignored.\"),o||n.apply(void 0,t)}))}));o=i&&\"function\"==typeof i.then&&\"function\"==typeof i.catch,Xt(o,\"`callback` is deprecated. Please return a promise instead.\"),o&&i.then((function(){n()})).catch((function(e){n(e||\" \")}))}),n})).sort((function(e,t){var r=e.warningOnly,n=e.ruleIndex,o=t.warningOnly,i=t.ruleIndex;return!!r==!!o?n-i:r?1:-1}));if(!0===o)a=new Promise(function(){var e=wc(bc().mark((function e(r,o){var a,c,u;return bc().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:a=0;case 1:if(!(a<l.length)){e.next=12;break}return c=l[a],e.next=5,Wd(s,t,c,n,i);case 5:if(!(u=e.sent).length){e.next=9;break}return o([{errors:u,rule:c}]),e.abrupt(\"return\");case 9:a+=1,e.next=1;break;case 12:r([]);case 13:case\"end\":return e.stop()}}),e)})));return function(t,r){return e.apply(this,arguments)}}());else{var c=l.map((function(e){return Wd(s,t,e,n,i).then((function(t){return{errors:t,rule:e}}))}));a=(o?function(e){return Xd.apply(this,arguments)}(c):function(e){return Kd.apply(this,arguments)}(c)).then((function(e){return Promise.reject(e)}))}return a.catch((function(e){return e})),a}function Kd(){return(Kd=wc(bc().mark((function e(t){return bc().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt(\"return\",Promise.all(t).then((function(e){var t;return(t=[]).concat.apply(t,Vo(e))})));case 1:case\"end\":return e.stop()}}),e)})))).apply(this,arguments)}function Xd(){return(Xd=wc(bc().mark((function e(t){var r;return bc().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=0,e.abrupt(\"return\",new Promise((function(e){t.forEach((function(n){n.then((function(n){n.errors.length&&e([n]),(r+=1)===t.length&&e([])}))}))})));case 2:case\"end\":return e.stop()}}),e)})))).apply(this,arguments)}function Yd(e){return fd(e)}function $d(e,t){var r={};return t.forEach((function(t){var n=Ha(e,t);r=Va(r,t,n)})),r}function Zd(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return e&&e.some((function(e){return Qd(t,e,r)}))}function Qd(e,t){return!(!e||!t)&&!(!(arguments.length>2&&void 0!==arguments[2]&&arguments[2])&&e.length!==t.length)&&t.every((function(t,r){return e[r]===t}))}function Jd(e){var t=arguments.length<=1?void 0:arguments[1];return t&&t.target&&\"object\"===Ne(t.target)&&e in t.target?t.target[e]:t}function ef(e,t,r){var n=e.length;if(t<0||t>=n||r<0||r>=n)return e;var o=e[t],i=t-r;return i>0?[].concat(Vo(e.slice(0,r)),[o],Vo(e.slice(r,t)),Vo(e.slice(t+1,n))):i<0?[].concat(Vo(e.slice(0,t)),Vo(e.slice(t+1,r+1)),[o],Vo(e.slice(r+1,n))):e}var tf=[\"name\"],rf=[];function nf(e,t,r,n,o,i){return\"function\"==typeof e?e(t,r,\"source\"in i?{source:i.source}:{}):n!==o}var of=function(e){Bs(r,e);var t=Us(r);function r(e){var n;return ei(this,r),De(Hs(n=t.call(this,e)),\"state\",{resetCount:0}),De(Hs(n),\"cancelRegisterFunc\",null),De(Hs(n),\"mounted\",!1),De(Hs(n),\"touched\",!1),De(Hs(n),\"dirty\",!1),De(Hs(n),\"validatePromise\",void 0),De(Hs(n),\"prevValidating\",void 0),De(Hs(n),\"errors\",rf),De(Hs(n),\"warnings\",rf),De(Hs(n),\"cancelRegister\",(function(){var e=n.props,t=e.preserve,r=e.isListField,o=e.name;n.cancelRegisterFunc&&n.cancelRegisterFunc(r,t,Yd(o)),n.cancelRegisterFunc=null})),De(Hs(n),\"getNamePath\",(function(){var e=n.props,t=e.name,r=e.fieldContext.prefixName;return void 0!==t?[].concat(Vo(void 0===r?[]:r),Vo(t)):[]})),De(Hs(n),\"getRules\",(function(){var e=n.props,t=e.rules,r=void 0===t?[]:t,o=e.fieldContext;return r.map((function(e){return\"function\"==typeof e?e(o):e}))})),De(Hs(n),\"refresh\",(function(){n.mounted&&n.setState((function(e){return{resetCount:e.resetCount+1}}))})),De(Hs(n),\"metaCache\",null),De(Hs(n),\"triggerMetaEvent\",(function(e){var t=n.props.onMetaChange;if(t){var r=At(At({},n.getMeta()),{},{destroy:e});Jo(n.metaCache,r)||t(r),n.metaCache=r}else n.metaCache=null})),De(Hs(n),\"onStoreChange\",(function(e,t,r){var o=n.props,i=o.shouldUpdate,a=o.dependencies,s=void 0===a?[]:a,l=o.onReset,c=r.store,u=n.getNamePath(),d=n.getValue(e),f=n.getValue(c),h=t&&Zd(t,u);switch(\"valueUpdate\"!==r.type||\"external\"!==r.source||Jo(d,f)||(n.touched=!0,n.dirty=!0,n.validatePromise=null,n.errors=rf,n.warnings=rf,n.triggerMetaEvent()),r.type){case\"reset\":if(!t||h)return n.touched=!1,n.dirty=!1,n.validatePromise=void 0,n.errors=rf,n.warnings=rf,n.triggerMetaEvent(),null==l||l(),void n.refresh();break;case\"remove\":if(i&&nf(i,e,c,d,f,r))return void n.reRender();break;case\"setField\":var p=r.data;if(h)return\"touched\"in p&&(n.touched=p.touched),\"validating\"in p&&!(\"originRCField\"in p)&&(n.validatePromise=p.validating?Promise.resolve([]):null),\"errors\"in p&&(n.errors=p.errors||rf),\"warnings\"in p&&(n.warnings=p.warnings||rf),n.dirty=!0,n.triggerMetaEvent(),void n.reRender();if(\"value\"in p&&Zd(t,u,!0))return void n.reRender();if(i&&!u.length&&nf(i,e,c,d,f,r))return void n.reRender();break;case\"dependenciesUpdate\":if(s.map(Yd).some((function(e){return Zd(r.relatedFields,e)})))return void n.reRender();break;default:if(h||(!s.length||u.length||i)&&nf(i,e,c,d,f,r))return void n.reRender()}!0===i&&n.reRender()})),De(Hs(n),\"validateRules\",(function(e){var t=n.getNamePath(),r=n.getValue(),o=e||{},i=o.triggerName,a=o.validateOnly,s=void 0!==a&&a,l=Promise.resolve().then(wc(bc().mark((function o(){var a,s,c,u,d,f,h;return bc().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:if(n.mounted){o.next=2;break}return o.abrupt(\"return\",[]);case 2:if(a=n.props,s=a.validateFirst,c=void 0!==s&&s,u=a.messageVariables,d=a.validateDebounce,f=n.getRules(),i&&(f=f.filter((function(e){return e})).filter((function(e){var t=e.validateTrigger;return!t||fd(t).includes(i)}))),!d||!i){o.next=10;break}return o.next=8,new Promise((function(e){setTimeout(e,d)}));case 8:if(n.validatePromise===l){o.next=10;break}return o.abrupt(\"return\",[]);case 10:return(h=qd(t,r,f,e,c,u)).catch((function(e){return e})).then((function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:rf;if(n.validatePromise===l){var t;n.validatePromise=null;var r=[],o=[];null===(t=e.forEach)||void 0===t||t.call(e,(function(e){var t=e.rule.warningOnly,n=e.errors,i=void 0===n?rf:n;t?o.push.apply(o,Vo(i)):r.push.apply(r,Vo(i))})),n.errors=r,n.warnings=o,n.triggerMetaEvent(),n.reRender()}})),o.abrupt(\"return\",h);case 13:case\"end\":return o.stop()}}),o)}))));return s||(n.validatePromise=l,n.dirty=!0,n.errors=rf,n.warnings=rf,n.triggerMetaEvent(),n.reRender()),l})),De(Hs(n),\"isFieldValidating\",(function(){return!!n.validatePromise})),De(Hs(n),\"isFieldTouched\",(function(){return n.touched})),De(Hs(n),\"isFieldDirty\",(function(){return!(!n.dirty&&void 0===n.props.initialValue)||void 0!==(0,n.props.fieldContext.getInternalHooks(ld).getInitialValue)(n.getNamePath())})),De(Hs(n),\"getErrors\",(function(){return n.errors})),De(Hs(n),\"getWarnings\",(function(){return n.warnings})),De(Hs(n),\"isListField\",(function(){return n.props.isListField})),De(Hs(n),\"isList\",(function(){return n.props.isList})),De(Hs(n),\"isPreserve\",(function(){return n.props.preserve})),De(Hs(n),\"getMeta\",(function(){return n.prevValidating=n.isFieldValidating(),{touched:n.isFieldTouched(),validating:n.prevValidating,errors:n.errors,warnings:n.warnings,name:n.getNamePath(),validated:null===n.validatePromise}})),De(Hs(n),\"getOnlyChild\",(function(e){if(\"function\"==typeof e){var t=n.getMeta();return At(At({},n.getOnlyChild(e(n.getControlled(),t,n.props.fieldContext))),{},{isFunction:!0})}var r=sd(e);return 1===r.length&&m.isValidElement(r[0])?{child:r[0],isFunction:!1}:{child:r,isFunction:!1}})),De(Hs(n),\"getValue\",(function(e){var t=n.props.fieldContext.getFieldsValue,r=n.getNamePath();return Ha(e||t(!0),r)})),De(Hs(n),\"getControlled\",(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=n.props,r=t.name,o=t.trigger,i=t.validateTrigger,a=t.getValueFromEvent,s=t.normalize,l=t.valuePropName,c=t.getValueProps,u=t.fieldContext,d=void 0!==i?i:u.validateTrigger,f=n.getNamePath(),h=u.getInternalHooks,p=u.getFieldsValue,m=h(ld).dispatch,g=n.getValue(),v=c||function(e){return De({},l,e)},b=e[o],y=void 0!==r?v(g):{},w=At(At({},e),y);return w[o]=function(){var e;n.touched=!0,n.dirty=!0,n.triggerMetaEvent();for(var t=arguments.length,r=new Array(t),o=0;o<t;o++)r[o]=arguments[o];e=a?a.apply(void 0,r):Jd.apply(void 0,[l].concat(r)),s&&(e=s(e,g,p(!0))),e!==g&&m({type:\"updateValue\",namePath:f,value:e}),b&&b.apply(void 0,r)},fd(d||[]).forEach((function(e){var t=w[e];w[e]=function(){t&&t.apply(void 0,arguments);var r=n.props.rules;r&&r.length&&m({type:\"validateField\",namePath:f,triggerName:e})}})),w})),e.fieldContext&&(0,(0,e.fieldContext.getInternalHooks)(ld).initEntityValue)(Hs(n)),n}return ri(r,[{key:\"componentDidMount\",value:function(){var e=this.props,t=e.shouldUpdate,r=e.fieldContext;if(this.mounted=!0,r){var n=(0,r.getInternalHooks)(ld).registerField;this.cancelRegisterFunc=n(this)}!0===t&&this.reRender()}},{key:\"componentWillUnmount\",value:function(){this.cancelRegister(),this.triggerMetaEvent(!0),this.mounted=!1}},{key:\"reRender\",value:function(){this.mounted&&this.forceUpdate()}},{key:\"render\",value:function(){var e,t=this.state.resetCount,r=this.props.children,n=this.getOnlyChild(r),o=n.child;return n.isFunction?e=o:m.isValidElement(o)?e=m.cloneElement(o,this.getControlled(o.props)):(Xt(!o,\"`children` of Field is not validate ReactElement.\"),e=o),m.createElement(m.Fragment,{key:t},e)}}]),r}(m.Component);De(of,\"contextType\",ud),De(of,\"defaultProps\",{trigger:\"onChange\",valuePropName:\"value\"});const af=function(e){var t,r=e.name,n=Be(e,tf),o=m.useContext(ud),i=m.useContext(dd),a=void 0!==r?Yd(r):void 0,s=null!==(t=n.isListField)&&void 0!==t?t:!!i,l=\"keep\";return s||(l=\"_\".concat((a||[]).join(\"_\"))),m.createElement(of,Te({key:l,name:a,isListField:s},n,{fieldContext:o}))},sf=function(e){var t=e.name,r=e.initialValue,n=e.children,o=e.rules,i=e.validateTrigger,a=e.isListField,s=m.useContext(ud),l=m.useContext(dd),c=m.useRef({keys:[],id:0}).current,u=m.useMemo((function(){var e=Yd(s.prefixName)||[];return[].concat(Vo(e),Vo(Yd(t)))}),[s.prefixName,t]),d=m.useMemo((function(){return At(At({},s),{},{prefixName:u})}),[s,u]),f=m.useMemo((function(){return{getKey:function(e){var t=u.length,r=e[t];return[c.keys[r],e.slice(t+1)]}}}),[u]);return\"function\"!=typeof n?(Xt(!1,\"Form.List only accepts function as children.\"),null):m.createElement(dd.Provider,{value:f},m.createElement(ud.Provider,{value:d},m.createElement(af,{name:[],shouldUpdate:function(e,t,r){return\"internal\"!==r.source&&e!==t},rules:o,validateTrigger:i,initialValue:r,isList:!0,isListField:null!=a?a:!!l},(function(e,t){var r=e.value,o=void 0===r?[]:r,i=e.onChange,a=s.getFieldValue,l=function(){return a(u||[])||[]},d={add:function(e,t){var r=l();t>=0&&t<=r.length?(c.keys=[].concat(Vo(c.keys.slice(0,t)),[c.id],Vo(c.keys.slice(t))),i([].concat(Vo(r.slice(0,t)),[e],Vo(r.slice(t))))):(c.keys=[].concat(Vo(c.keys),[c.id]),i([].concat(Vo(r),[e]))),c.id+=1},remove:function(e){var t=l(),r=new Set(Array.isArray(e)?e:[e]);r.size<=0||(c.keys=c.keys.filter((function(e,t){return!r.has(t)})),i(t.filter((function(e,t){return!r.has(t)}))))},move:function(e,t){if(e!==t){var r=l();e<0||e>=r.length||t<0||t>=r.length||(c.keys=ef(c.keys,e,t),i(ef(r,e,t)))}}},f=o||[];return Array.isArray(f)||(f=[]),n(f.map((function(e,t){var r=c.keys[t];return void 0===r&&(c.keys[t]=c.id,r=c.keys[t],c.id+=1),{name:t,key:r,isListField:!0}})),d,t)}))))};var lf=\"__@field_split__\";function cf(e){return e.map((function(e){return\"\".concat(Ne(e),\":\").concat(e)})).join(lf)}var uf=function(){function e(){ei(this,e),De(this,\"kvs\",new Map)}return ri(e,[{key:\"set\",value:function(e,t){this.kvs.set(cf(e),t)}},{key:\"get\",value:function(e){return this.kvs.get(cf(e))}},{key:\"update\",value:function(e,t){var r=t(this.get(e));r?this.set(e,r):this.delete(e)}},{key:\"delete\",value:function(e){this.kvs.delete(cf(e))}},{key:\"map\",value:function(e){return Vo(this.kvs.entries()).map((function(t){var r=Ie(t,2),n=r[0],o=r[1],i=n.split(lf);return e({key:i.map((function(e){var t=Ie(e.match(/^([^:]*):(.*)$/),3),r=t[1],n=t[2];return\"number\"===r?Number(n):n})),value:o})}))}},{key:\"toJSON\",value:function(){var e={};return this.map((function(t){var r=t.key,n=t.value;return e[r.join(\".\")]=n,null})),e}}]),e}();const df=uf;var ff=[\"name\"],hf=ri((function e(t){var r=this;ei(this,e),De(this,\"formHooked\",!1),De(this,\"forceRootUpdate\",void 0),De(this,\"subscribable\",!0),De(this,\"store\",{}),De(this,\"fieldEntities\",[]),De(this,\"initialValues\",{}),De(this,\"callbacks\",{}),De(this,\"validateMessages\",null),De(this,\"preserve\",null),De(this,\"lastValidatePromise\",null),De(this,\"getForm\",(function(){return{getFieldValue:r.getFieldValue,getFieldsValue:r.getFieldsValue,getFieldError:r.getFieldError,getFieldWarning:r.getFieldWarning,getFieldsError:r.getFieldsError,isFieldsTouched:r.isFieldsTouched,isFieldTouched:r.isFieldTouched,isFieldValidating:r.isFieldValidating,isFieldsValidating:r.isFieldsValidating,resetFields:r.resetFields,setFields:r.setFields,setFieldValue:r.setFieldValue,setFieldsValue:r.setFieldsValue,validateFields:r.validateFields,submit:r.submit,_init:!0,getInternalHooks:r.getInternalHooks}})),De(this,\"getInternalHooks\",(function(e){return e===ld?(r.formHooked=!0,{dispatch:r.dispatch,initEntityValue:r.initEntityValue,registerField:r.registerField,useSubscribe:r.useSubscribe,setInitialValues:r.setInitialValues,destroyForm:r.destroyForm,setCallbacks:r.setCallbacks,setValidateMessages:r.setValidateMessages,getFields:r.getFields,setPreserve:r.setPreserve,getInitialValue:r.getInitialValue,registerWatch:r.registerWatch}):(Xt(!1,\"`getInternalHooks` is internal usage. Should not call directly.\"),null)})),De(this,\"useSubscribe\",(function(e){r.subscribable=e})),De(this,\"prevWithoutPreserves\",null),De(this,\"setInitialValues\",(function(e,t){if(r.initialValues=e||{},t){var n,o=qa(e,r.store);null===(n=r.prevWithoutPreserves)||void 0===n||n.map((function(t){var r=t.key;o=Va(o,r,Ha(e,r))})),r.prevWithoutPreserves=null,r.updateStore(o)}})),De(this,\"destroyForm\",(function(e){if(e)r.updateStore({});else{var t=new df;r.getFieldEntities(!0).forEach((function(e){r.isMergedPreserve(e.isPreserve())||t.set(e.getNamePath(),!0)})),r.prevWithoutPreserves=t}})),De(this,\"getInitialValue\",(function(e){var t=Ha(r.initialValues,e);return e.length?qa(t):t})),De(this,\"setCallbacks\",(function(e){r.callbacks=e})),De(this,\"setValidateMessages\",(function(e){r.validateMessages=e})),De(this,\"setPreserve\",(function(e){r.preserve=e})),De(this,\"watchList\",[]),De(this,\"registerWatch\",(function(e){return r.watchList.push(e),function(){r.watchList=r.watchList.filter((function(t){return t!==e}))}})),De(this,\"notifyWatch\",(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(r.watchList.length){var t=r.getFieldsValue(),n=r.getFieldsValue(!0);r.watchList.forEach((function(r){r(t,n,e)}))}})),De(this,\"timeoutId\",null),De(this,\"warningUnhooked\",(function(){})),De(this,\"updateStore\",(function(e){r.store=e})),De(this,\"getFieldEntities\",(function(){return arguments.length>0&&void 0!==arguments[0]&&arguments[0]?r.fieldEntities.filter((function(e){return e.getNamePath().length})):r.fieldEntities})),De(this,\"getFieldsMap\",(function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=new df;return r.getFieldEntities(e).forEach((function(e){var r=e.getNamePath();t.set(r,e)})),t})),De(this,\"getFieldEntitiesForNamePathList\",(function(e){if(!e)return r.getFieldEntities(!0);var t=r.getFieldsMap(!0);return e.map((function(e){var r=Yd(e);return t.get(r)||{INVALIDATE_NAME_PATH:Yd(e)}}))})),De(this,\"getFieldsValue\",(function(e,t){var n,o,i;if(r.warningUnhooked(),!0===e||Array.isArray(e)?(n=e,o=t):e&&\"object\"===Ne(e)&&(i=e.strict,o=e.filter),!0===n&&!o)return r.store;var a=r.getFieldEntitiesForNamePathList(Array.isArray(n)?n:null),s=[];return a.forEach((function(e){var t,r,a,l,c=\"INVALIDATE_NAME_PATH\"in e?e.INVALIDATE_NAME_PATH:e.getNamePath();if(i){if(null!==(a=(l=e).isList)&&void 0!==a&&a.call(l))return}else if(!n&&null!==(t=(r=e).isListField)&&void 0!==t&&t.call(r))return;if(o){var u=\"getMeta\"in e?e.getMeta():null;o(u)&&s.push(c)}else s.push(c)})),$d(r.store,s.map(Yd))})),De(this,\"getFieldValue\",(function(e){r.warningUnhooked();var t=Yd(e);return Ha(r.store,t)})),De(this,\"getFieldsError\",(function(e){return r.warningUnhooked(),r.getFieldEntitiesForNamePathList(e).map((function(t,r){return t&&!(\"INVALIDATE_NAME_PATH\"in t)?{name:t.getNamePath(),errors:t.getErrors(),warnings:t.getWarnings()}:{name:Yd(e[r]),errors:[],warnings:[]}}))})),De(this,\"getFieldError\",(function(e){r.warningUnhooked();var t=Yd(e);return r.getFieldsError([t])[0].errors})),De(this,\"getFieldWarning\",(function(e){r.warningUnhooked();var t=Yd(e);return r.getFieldsError([t])[0].warnings})),De(this,\"isFieldsTouched\",(function(){r.warningUnhooked();for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var o,i=t[0],a=t[1],s=!1;0===t.length?o=null:1===t.length?Array.isArray(i)?(o=i.map(Yd),s=!1):(o=null,s=i):(o=i.map(Yd),s=a);var l=r.getFieldEntities(!0),c=function(e){return e.isFieldTouched()};if(!o)return s?l.every((function(e){return c(e)||e.isList()})):l.some(c);var u=new df;o.forEach((function(e){u.set(e,[])})),l.forEach((function(e){var t=e.getNamePath();o.forEach((function(r){r.every((function(e,r){return t[r]===e}))&&u.update(r,(function(t){return[].concat(Vo(t),[e])}))}))}));var d=function(e){return e.some(c)},f=u.map((function(e){return e.value}));return s?f.every(d):f.some(d)})),De(this,\"isFieldTouched\",(function(e){return r.warningUnhooked(),r.isFieldsTouched([e])})),De(this,\"isFieldsValidating\",(function(e){r.warningUnhooked();var t=r.getFieldEntities();if(!e)return t.some((function(e){return e.isFieldValidating()}));var n=e.map(Yd);return t.some((function(e){var t=e.getNamePath();return Zd(n,t)&&e.isFieldValidating()}))})),De(this,\"isFieldValidating\",(function(e){return r.warningUnhooked(),r.isFieldsValidating([e])})),De(this,\"resetWithFieldInitialValue\",(function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=new df,o=r.getFieldEntities(!0);o.forEach((function(e){var t=e.props.initialValue,r=e.getNamePath();if(void 0!==t){var o=n.get(r)||new Set;o.add({entity:e,value:t}),n.set(r,o)}})),t.entities?e=t.entities:t.namePathList?(e=[],t.namePathList.forEach((function(t){var r,o=n.get(t);o&&(r=e).push.apply(r,Vo(Vo(o).map((function(e){return e.entity}))))}))):e=o,e.forEach((function(e){if(void 0!==e.props.initialValue){var o=e.getNamePath();if(void 0!==r.getInitialValue(o))Xt(!1,\"Form already set 'initialValues' with path '\".concat(o.join(\".\"),\"'. Field can not overwrite it.\"));else{var i=n.get(o);if(i&&i.size>1)Xt(!1,\"Multiple Field with path '\".concat(o.join(\".\"),\"' set 'initialValue'. Can not decide which one to pick.\"));else if(i){var a=r.getFieldValue(o);e.isListField()||t.skipExist&&void 0!==a||r.updateStore(Va(r.store,o,Vo(i)[0].value))}}}}))})),De(this,\"resetFields\",(function(e){r.warningUnhooked();var t=r.store;if(!e)return r.updateStore(qa(r.initialValues)),r.resetWithFieldInitialValue(),r.notifyObservers(t,null,{type:\"reset\"}),void r.notifyWatch();var n=e.map(Yd);n.forEach((function(e){var t=r.getInitialValue(e);r.updateStore(Va(r.store,e,t))})),r.resetWithFieldInitialValue({namePathList:n}),r.notifyObservers(t,n,{type:\"reset\"}),r.notifyWatch(n)})),De(this,\"setFields\",(function(e){r.warningUnhooked();var t=r.store,n=[];e.forEach((function(e){var o=e.name,i=Be(e,ff),a=Yd(o);n.push(a),\"value\"in i&&r.updateStore(Va(r.store,a,i.value)),r.notifyObservers(t,[a],{type:\"setField\",data:e})})),r.notifyWatch(n)})),De(this,\"getFields\",(function(){return r.getFieldEntities(!0).map((function(e){var t=e.getNamePath(),n=At(At({},e.getMeta()),{},{name:t,value:r.getFieldValue(t)});return Object.defineProperty(n,\"originRCField\",{value:!0}),n}))})),De(this,\"initEntityValue\",(function(e){var t=e.props.initialValue;if(void 0!==t){var n=e.getNamePath();void 0===Ha(r.store,n)&&r.updateStore(Va(r.store,n,t))}})),De(this,\"isMergedPreserve\",(function(e){var t=void 0!==e?e:r.preserve;return null==t||t})),De(this,\"registerField\",(function(e){r.fieldEntities.push(e);var t=e.getNamePath();if(r.notifyWatch([t]),void 0!==e.props.initialValue){var n=r.store;r.resetWithFieldInitialValue({entities:[e],skipExist:!0}),r.notifyObservers(n,[e.getNamePath()],{type:\"valueUpdate\",source:\"internal\"})}return function(n,o){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];if(r.fieldEntities=r.fieldEntities.filter((function(t){return t!==e})),!r.isMergedPreserve(o)&&(!n||i.length>1)){var a=n?void 0:r.getInitialValue(t);if(t.length&&r.getFieldValue(t)!==a&&r.fieldEntities.every((function(e){return!Qd(e.getNamePath(),t)}))){var s=r.store;r.updateStore(Va(s,t,a,!0)),r.notifyObservers(s,[t],{type:\"remove\"}),r.triggerDependenciesUpdate(s,t)}}r.notifyWatch([t])}})),De(this,\"dispatch\",(function(e){switch(e.type){case\"updateValue\":var t=e.namePath,n=e.value;r.updateValue(t,n);break;case\"validateField\":var o=e.namePath,i=e.triggerName;r.validateFields([o],{triggerName:i})}})),De(this,\"notifyObservers\",(function(e,t,n){if(r.subscribable){var o=At(At({},n),{},{store:r.getFieldsValue(!0)});r.getFieldEntities().forEach((function(r){(0,r.onStoreChange)(e,t,o)}))}else r.forceRootUpdate()})),De(this,\"triggerDependenciesUpdate\",(function(e,t){var n=r.getDependencyChildrenFields(t);return n.length&&r.validateFields(n),r.notifyObservers(e,n,{type:\"dependenciesUpdate\",relatedFields:[t].concat(Vo(n))}),n})),De(this,\"updateValue\",(function(e,t){var n=Yd(e),o=r.store;r.updateStore(Va(r.store,n,t)),r.notifyObservers(o,[n],{type:\"valueUpdate\",source:\"internal\"}),r.notifyWatch([n]);var i=r.triggerDependenciesUpdate(o,n),a=r.callbacks.onValuesChange;a&&a($d(r.store,[n]),r.getFieldsValue()),r.triggerOnFieldsChange([n].concat(Vo(i)))})),De(this,\"setFieldsValue\",(function(e){r.warningUnhooked();var t=r.store;if(e){var n=qa(r.store,e);r.updateStore(n)}r.notifyObservers(t,null,{type:\"valueUpdate\",source:\"external\"}),r.notifyWatch()})),De(this,\"setFieldValue\",(function(e,t){r.setFields([{name:e,value:t,errors:[],warnings:[]}])})),De(this,\"getDependencyChildrenFields\",(function(e){var t=new Set,n=[],o=new df;return r.getFieldEntities().forEach((function(e){(e.props.dependencies||[]).forEach((function(t){var r=Yd(t);o.update(r,(function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new Set;return t.add(e),t}))}))})),function e(r){(o.get(r)||new Set).forEach((function(r){if(!t.has(r)){t.add(r);var o=r.getNamePath();r.isFieldDirty()&&o.length&&(n.push(o),e(o))}}))}(e),n})),De(this,\"triggerOnFieldsChange\",(function(e,t){var n=r.callbacks.onFieldsChange;if(n){var o=r.getFields();if(t){var i=new df;t.forEach((function(e){var t=e.name,r=e.errors;i.set(t,r)})),o.forEach((function(e){e.errors=i.get(e.name)||e.errors}))}var a=o.filter((function(t){var r=t.name;return Zd(e,r)}));a.length&&n(a,o)}})),De(this,\"validateFields\",(function(e,t){var n,o;r.warningUnhooked(),Array.isArray(e)||\"string\"==typeof e||\"string\"==typeof t?(n=e,o=t):o=e;var i=!!n,a=i?n.map(Yd):[],s=[],l=String(Date.now()),c=new Set,u=o||{},d=u.recursive,f=u.dirty;r.getFieldEntities(!0).forEach((function(e){if(i||a.push(e.getNamePath()),e.props.rules&&e.props.rules.length&&(!f||e.isFieldDirty())){var t=e.getNamePath();if(c.add(t.join(l)),!i||Zd(a,t,d)){var n=e.validateRules(At({validateMessages:At(At({},zd),r.validateMessages)},o));s.push(n.then((function(){return{name:t,errors:[],warnings:[]}})).catch((function(e){var r,n=[],o=[];return null===(r=e.forEach)||void 0===r||r.call(e,(function(e){var t=e.rule.warningOnly,r=e.errors;t?o.push.apply(o,Vo(r)):n.push.apply(n,Vo(r))})),n.length?Promise.reject({name:t,errors:n,warnings:o}):{name:t,errors:n,warnings:o}})))}}}));var h=function(e){var t=!1,r=e.length,n=[];return e.length?new Promise((function(o,i){e.forEach((function(e,a){e.catch((function(e){return t=!0,e})).then((function(e){r-=1,n[a]=e,r>0||(t&&i(n),o(n))}))}))})):Promise.resolve([])}(s);r.lastValidatePromise=h,h.catch((function(e){return e})).then((function(e){var t=e.map((function(e){return e.name}));r.notifyObservers(r.store,t,{type:\"validateFinish\"}),r.triggerOnFieldsChange(t,e)}));var p=h.then((function(){return r.lastValidatePromise===h?Promise.resolve(r.getFieldsValue(a)):Promise.reject([])})).catch((function(e){var t=e.filter((function(e){return e&&e.errors.length}));return Promise.reject({values:r.getFieldsValue(a),errorFields:t,outOfDate:r.lastValidatePromise!==h})}));p.catch((function(e){return e}));var m=a.filter((function(e){return c.has(e.join(l))}));return r.triggerOnFieldsChange(m),p})),De(this,\"submit\",(function(){r.warningUnhooked(),r.validateFields().then((function(e){var t=r.callbacks.onFinish;if(t)try{t(e)}catch(e){console.error(e)}})).catch((function(e){var t=r.callbacks.onFinishFailed;t&&t(e)}))})),this.forceRootUpdate=t}));const pf=function(e){var t=m.useRef(),r=Ie(m.useState({}),2)[1];if(!t.current)if(e)t.current=e;else{var n=new hf((function(){r({})}));t.current=n.getForm()}return[t.current]};var mf=m.createContext({triggerFormChange:function(){},triggerFormFinish:function(){},registerForm:function(){},unregisterForm:function(){}}),gf=function(e){var t=e.validateMessages,r=e.onFormChange,n=e.onFormFinish,o=e.children,i=m.useContext(mf),a=m.useRef({});return m.createElement(mf.Provider,{value:At(At({},i),{},{validateMessages:At(At({},i.validateMessages),t),triggerFormChange:function(e,t){r&&r(e,{changedFields:t,forms:a.current}),i.triggerFormChange(e,t)},triggerFormFinish:function(e,t){n&&n(e,{values:t,forms:a.current}),i.triggerFormFinish(e,t)},registerForm:function(e,t){e&&(a.current=At(At({},a.current),{},De({},e,t))),i.registerForm(e,t)},unregisterForm:function(e){var t=At({},a.current);delete t[e],a.current=t,i.unregisterForm(e)}})},o)};const vf=mf;var bf=[\"name\",\"initialValues\",\"fields\",\"form\",\"preserve\",\"children\",\"component\",\"validateMessages\",\"validateTrigger\",\"onValuesChange\",\"onFieldsChange\",\"onFinish\",\"onFinishFailed\",\"clearOnDestroy\"];const yf=function(e,t){var r=e.name,n=e.initialValues,o=e.fields,i=e.form,a=e.preserve,s=e.children,l=e.component,c=void 0===l?\"form\":l,u=e.validateMessages,d=e.validateTrigger,f=void 0===d?\"onChange\":d,h=e.onValuesChange,p=e.onFieldsChange,g=e.onFinish,v=e.onFinishFailed,b=e.clearOnDestroy,y=Be(e,bf),w=m.useRef(null),x=m.useContext(vf),S=Ie(pf(i),1)[0],C=S.getInternalHooks(ld),k=C.useSubscribe,E=C.setInitialValues,O=C.setCallbacks,A=C.setValidateMessages,T=C.setPreserve,j=C.destroyForm;m.useImperativeHandle(t,(function(){return At(At({},S),{},{nativeElement:w.current})})),m.useEffect((function(){return x.registerForm(r,S),function(){x.unregisterForm(r)}}),[x,S,r]),A(At(At({},x.validateMessages),u)),O({onValuesChange:h,onFieldsChange:function(e){if(x.triggerFormChange(r,e),p){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];p.apply(void 0,[e].concat(n))}},onFinish:function(e){x.triggerFormFinish(r,e),g&&g(e)},onFinishFailed:v}),T(a);var P,M=m.useRef(null);E(n,!M.current),M.current||(M.current=!0),m.useEffect((function(){return function(){return j(b)}}),[]);var R=\"function\"==typeof s;P=R?s(S.getFieldsValue(!0),S):s,k(!R);var _=m.useRef();m.useEffect((function(){(function(e,t){if(e===t)return!0;if(!e&&t||e&&!t)return!1;if(!e||!t||\"object\"!==Ne(e)||\"object\"!==Ne(t))return!1;var r=Object.keys(e),n=Object.keys(t);return Vo(new Set([].concat(r,n))).every((function(r){var n=e[r],o=t[r];return\"function\"==typeof n&&\"function\"==typeof o||n===o}))})(_.current||[],o||[])||S.setFields(o||[]),_.current=o}),[o,S]);var I=m.useMemo((function(){return At(At({},S),{},{validateTrigger:f})}),[S,f]),N=m.createElement(dd.Provider,{value:null},m.createElement(ud.Provider,{value:I},P));return!1===c?N:m.createElement(c,Te({},y,{ref:w,onSubmit:function(e){e.preventDefault(),e.stopPropagation(),S.submit()},onReset:function(e){var t;e.preventDefault(),S.resetFields(),null===(t=y.onReset)||void 0===t||t.call(y,e)}}),N)};function wf(e){try{return JSON.stringify(e)}catch(e){return Math.random()}}const xf=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];var n=t[0],o=t[1],i=void 0===o?{}:o,a=function(e){return e&&!!e._init}(i)?{form:i}:i,s=a.form,l=Ie((0,m.useState)(),2),c=l[0],u=l[1],d=(0,m.useMemo)((function(){return wf(c)}),[c]),f=(0,m.useRef)(d);f.current=d;var h=(0,m.useContext)(ud),p=s||h,g=p&&p._init,v=Yd(n),b=(0,m.useRef)(v);return b.current=v,(0,m.useEffect)((function(){if(g){var e=p.getFieldsValue,t=(0,p.getInternalHooks)(ld).registerWatch,r=function(e,t){var r=a.preserve?t:e;return\"function\"==typeof n?n(r):Ha(r,b.current)},o=t((function(e,t){var n=r(e,t),o=wf(n);f.current!==o&&(f.current=o,u(n))})),i=r(e(),e(!0));return c!==i&&u(i),o}}),[g]),c};var Sf=m.forwardRef(yf);Sf.FormProvider=gf,Sf.Field=af,Sf.List=sf,Sf.useForm=pf,Sf.useWatch=xf;const Cf=Sf;function kf(e,t){var r=Object.assign({},e);return Array.isArray(t)&&t.forEach((function(e){delete r[e]})),r}const Ef=m.createContext({labelAlign:\"right\",vertical:!1,itemRef:()=>{}}),Of=m.createContext(null),Af=e=>{const t=kf(e,[\"prefixCls\"]);return m.createElement(gf,Object.assign({},t))},Tf=m.createContext({prefixCls:\"\"}),jf=m.createContext({}),Pf=e=>{let{children:t,status:r,override:n}=e;const o=m.useContext(jf),i=m.useMemo((()=>{const e=Object.assign({},o);return n&&delete e.isFormItemInput,r&&(delete e.status,delete e.hasFeedback,delete e.feedbackIcon),e}),[r,n,o]);return m.createElement(jf.Provider,{value:i},t)},Mf=m.createContext(void 0),Rf=e=>{const t=m.useContext(Es);return m.useMemo((()=>e?\"string\"==typeof e?null!=e?e:t:\"function\"==typeof e?e(t):t:t),[e,t])},_f=e=>{const{componentCls:t}=e;return{[t]:{\"&-block\":{display:\"flex\",width:\"100%\"},\"&-vertical\":{flexDirection:\"column\"}}}},If=e=>{const{componentCls:t,antCls:r}=e;return{[t]:{display:\"inline-flex\",\"&-rtl\":{direction:\"rtl\"},\"&-vertical\":{flexDirection:\"column\"},\"&-align\":{flexDirection:\"column\",\"&-center\":{alignItems:\"center\"},\"&-start\":{alignItems:\"flex-start\"},\"&-end\":{alignItems:\"flex-end\"},\"&-baseline\":{alignItems:\"baseline\"}},[`${t}-item:empty`]:{display:\"none\"},[`${t}-item > ${r}-badge-not-a-wrapper:only-child`]:{display:\"block\"}}}},Nf=e=>{const{componentCls:t}=e;return{[t]:{\"&-gap-row-small\":{rowGap:e.spaceGapSmallSize},\"&-gap-row-middle\":{rowGap:e.spaceGapMiddleSize},\"&-gap-row-large\":{rowGap:e.spaceGapLargeSize},\"&-gap-col-small\":{columnGap:e.spaceGapSmallSize},\"&-gap-col-middle\":{columnGap:e.spaceGapMiddleSize},\"&-gap-col-large\":{columnGap:e.spaceGapLargeSize}}}},Ff=Iu(\"Space\",(e=>{const t=Au(e,{spaceGapSmallSize:e.paddingXS,spaceGapMiddleSize:e.padding,spaceGapLargeSize:e.paddingLG});return[If(t),Nf(t),_f(t)]}),(()=>({})),{resetStyle:!1});var Df=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r};const Bf=m.createContext(null),Lf=(e,t)=>{const r=m.useContext(Bf),n=m.useMemo((()=>{if(!r)return\"\";const{compactDirection:n,isFirstItem:o,isLastItem:i}=r,a=\"vertical\"===n?\"-vertical-\":\"-\";return ze()(`${e}-compact${a}item`,{[`${e}-compact${a}first-item`]:o,[`${e}-compact${a}last-item`]:i,[`${e}-compact${a}item-rtl`]:\"rtl\"===t})}),[e,t,r]);return{compactSize:null==r?void 0:r.compactSize,compactDirection:null==r?void 0:r.compactDirection,compactItemClassnames:n}},zf=e=>{const{children:t}=e;return m.createElement(Bf.Provider,{value:null},t)},Hf=e=>{const{children:t}=e,r=Df(e,[\"children\"]);return m.createElement(Bf.Provider,{value:m.useMemo((()=>r),[r])},t)},Uf=e=>{const{space:t,form:r,children:n}=e;if(null==n)return null;let o=n;return r&&(o=m.createElement(Pf,{override:!0,status:!0},o)),t&&(o=m.createElement(zf,null,o)),o};function Vf(e){return t=>m.createElement(vc,{theme:{token:{motion:!1,zIndexPopupBase:0}}},m.createElement(e,Object.assign({},t)))}const Wf=(e,t,r,n,o)=>Vf((i=>{const{prefixCls:a,style:s}=i,l=m.useRef(null),[c,u]=m.useState(0),[d,f]=m.useState(0),[h,p]=Ks(!1,{value:i.open}),{getPrefixCls:g}=m.useContext(Xo),v=g(n||\"select\",a);m.useEffect((()=>{if(p(!0),\"undefined\"!=typeof ResizeObserver){const e=new ResizeObserver((e=>{const t=e[0].target;u(t.offsetHeight+8),f(t.offsetWidth)})),t=setInterval((()=>{var r;const n=o?`.${o(v)}`:`.${v}-dropdown`,i=null===(r=l.current)||void 0===r?void 0:r.querySelector(n);i&&(clearInterval(t),e.observe(i))}),10);return()=>{clearInterval(t),e.disconnect()}}}),[]);let b=Object.assign(Object.assign({},i),{style:Object.assign(Object.assign({},s),{margin:0}),open:h,visible:h,getPopupContainer:()=>l.current});r&&(b=r(b)),t&&Object.assign(b,{[t]:{overflow:{adjustX:!1,adjustY:!1}}});const y={paddingBottom:c,position:\"relative\",minWidth:d};return m.createElement(\"div\",{ref:l,style:y},m.createElement(e,Object.assign({},b)))}));function Gf(e,t,r){return ze()({[`${e}-status-success`]:\"success\"===t,[`${e}-status-warning`]:\"warning\"===t,[`${e}-status-error`]:\"error\"===t,[`${e}-status-validating`]:\"validating\"===t,[`${e}-has-feedback`]:r})}const qf=(e,t)=>t||e,Kf=e=>e?\"function\"==typeof e?e():e:null,Xf=()=>({height:0,opacity:0}),Yf=e=>{const{scrollHeight:t}=e;return{height:t,opacity:1}},$f=e=>({height:e?e.offsetHeight:0}),Zf=(e,t)=>!0===(null==t?void 0:t.deadline)||\"height\"===t.propertyName,Qf=(e,t,r)=>void 0!==r?r:`${e}-${t}`,Jf=function(){return{motionName:`${arguments.length>0&&void 0!==arguments[0]?arguments[0]:Go}-motion-collapse`,onAppearStart:Xf,onEnterStart:Xf,onAppearActive:Yf,onEnterActive:Yf,onLeaveStart:$f,onLeaveActive:Xf,onAppearEnd:Zf,onEnterEnd:Zf,onLeaveEnd:Zf,motionDeadline:500}};function eh(e){return e&&m.isValidElement(e)&&e.type===m.Fragment}function th(e,t){return((e,t,r)=>m.isValidElement(e)?m.cloneElement(e,\"function\"==typeof r?r(e.props||{}):r):t)(e,e,t)}function rh(e){var t=e.children,r=e.prefixCls,n=e.id,o=e.overlayInnerStyle,i=e.bodyClassName,a=e.className,s=e.style;return m.createElement(\"div\",{className:ze()(\"\".concat(r,\"-content\"),a),style:s},m.createElement(\"div\",{className:ze()(\"\".concat(r,\"-inner\"),i),id:n,role:\"tooltip\",style:o},\"function\"==typeof t?t():t))}const nh=m.createContext(null);var oh=[];var ih=\"rc-util-locker-\".concat(Date.now()),ah=0;function sh(e){var t=!!e,r=Ie(m.useState((function(){return ah+=1,\"\".concat(ih,\"_\").concat(ah)})),1)[0];Pi((function(){if(t){var e=(o=document.body,\"undefined\"!=typeof document&&o&&o instanceof Element?function(e){var t=\"rc-scrollbar-measure-\".concat(Math.random().toString(36).substring(7)),r=document.createElement(\"div\");r.id=t;var n,o,i=r.style;if(i.position=\"absolute\",i.left=\"0\",i.top=\"0\",i.width=\"100px\",i.height=\"100px\",i.overflow=\"scroll\",e){var a=getComputedStyle(e);i.scrollbarColor=a.scrollbarColor,i.scrollbarWidth=a.scrollbarWidth;var s=getComputedStyle(e,\"::-webkit-scrollbar\"),l=parseInt(s.width,10),c=parseInt(s.height,10);try{var u=l?\"width: \".concat(s.width,\";\"):\"\",d=c?\"height: \".concat(s.height,\";\"):\"\";Lt(\"\\n#\".concat(t,\"::-webkit-scrollbar {\\n\").concat(u,\"\\n\").concat(d,\"\\n}\"),t)}catch(e){console.error(e),n=l,o=c}}document.body.appendChild(r);var f=e&&n&&!isNaN(n)?n:r.offsetWidth-r.clientWidth,h=e&&o&&!isNaN(o)?o:r.offsetHeight-r.clientHeight;return document.body.removeChild(r),Bt(t),{width:f,height:h}}(o):{width:0,height:0}).width,n=document.body.scrollHeight>(window.innerHeight||document.documentElement.clientHeight)&&window.innerWidth>document.body.offsetWidth;Lt(\"\\nhtml body {\\n  overflow-y: hidden;\\n  \".concat(n?\"width: calc(100% - \".concat(e,\"px);\"):\"\",\"\\n}\"),r)}else Bt(r);var o;return function(){Bt(r)}}),[t,r])}var lh=!1,ch=function(e){return!1!==e&&(Tt()&&e?\"string\"==typeof e?document.querySelector(e):\"function\"==typeof e?e():e:null)},uh=m.forwardRef((function(e,t){var r=e.open,n=e.autoLock,o=e.getContainer,i=(e.debug,e.autoDestroy),a=void 0===i||i,s=e.children,l=Ie(m.useState(r),2),c=l[0],u=l[1],d=c||r;m.useEffect((function(){(a||r)&&u(r)}),[r,a]);var f=Ie(m.useState((function(){return ch(o)})),2),h=f[0],p=f[1];m.useEffect((function(){var e=ch(o);p(null!=e?e:null)}));var g=function(e){var t=Ie(m.useState((function(){return Tt()?document.createElement(\"div\"):null})),1)[0],r=m.useRef(!1),n=m.useContext(nh),o=Ie(m.useState(oh),2),i=o[0],a=o[1],s=n||(r.current?void 0:function(e){a((function(t){return[e].concat(Vo(t))}))});function l(){t.parentElement||document.body.appendChild(t),r.current=!0}function c(){var e;null===(e=t.parentElement)||void 0===e||e.removeChild(t),r.current=!1}return Pi((function(){return e?n?n(l):l():c(),c}),[e]),Pi((function(){i.length&&(i.forEach((function(e){return e()})),a(oh))}),[i]),[t,s]}(d&&!h),v=Ie(g,2),b=v[0],y=v[1],w=null!=h?h:b;sh(n&&r&&Tt()&&(w===b||w===document.body));var x=null;s&&En(s)&&t&&(x=s.ref);var S=kn(x,t);if(!d||!Tt()||void 0===h)return null;var C=!1===w||lh,k=s;return t&&(k=m.cloneElement(s,{ref:S})),m.createElement(nh.Provider,{value:y},C?k:(0,js.createPortal)(k,w))}));const dh=uh;var fh=m.createContext(null),hh=function(){if(\"undefined\"!=typeof Map)return Map;function e(e,t){var r=-1;return e.some((function(e,n){return e[0]===t&&(r=n,!0)})),r}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,\"size\",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(t){var r=e(this.__entries__,t),n=this.__entries__[r];return n&&n[1]},t.prototype.set=function(t,r){var n=e(this.__entries__,t);~n?this.__entries__[n][1]=r:this.__entries__.push([t,r])},t.prototype.delete=function(t){var r=this.__entries__,n=e(r,t);~n&&r.splice(n,1)},t.prototype.has=function(t){return!!~e(this.__entries__,t)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(e,t){void 0===t&&(t=null);for(var r=0,n=this.__entries__;r<n.length;r++){var o=n[r];e.call(t,o[1],o[0])}},t}()}(),ph=\"undefined\"!=typeof window&&\"undefined\"!=typeof document&&window.document===document,mh=void 0!==o.g&&o.g.Math===Math?o.g:\"undefined\"!=typeof self&&self.Math===Math?self:\"undefined\"!=typeof window&&window.Math===Math?window:Function(\"return this\")(),gh=\"function\"==typeof requestAnimationFrame?requestAnimationFrame.bind(mh):function(e){return setTimeout((function(){return e(Date.now())}),1e3/60)},vh=[\"top\",\"right\",\"bottom\",\"left\",\"width\",\"height\",\"size\",\"weight\"],bh=\"undefined\"!=typeof MutationObserver,yh=function(){function e(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=function(e){var t=!1,r=!1,n=0;function o(){t&&(t=!1,e()),r&&a()}function i(){gh(o)}function a(){var e=Date.now();if(t){if(e-n<2)return;r=!0}else t=!0,r=!1,setTimeout(i,20);n=e}return a}(this.refresh.bind(this))}return e.prototype.addObserver=function(e){~this.observers_.indexOf(e)||this.observers_.push(e),this.connected_||this.connect_()},e.prototype.removeObserver=function(e){var t=this.observers_,r=t.indexOf(e);~r&&t.splice(r,1),!t.length&&this.connected_&&this.disconnect_()},e.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},e.prototype.updateObservers_=function(){var e=this.observers_.filter((function(e){return e.gatherActive(),e.hasActive()}));return e.forEach((function(e){return e.broadcastActive()})),e.length>0},e.prototype.connect_=function(){ph&&!this.connected_&&(document.addEventListener(\"transitionend\",this.onTransitionEnd_),window.addEventListener(\"resize\",this.refresh),bh?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener(\"DOMSubtreeModified\",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){ph&&this.connected_&&(document.removeEventListener(\"transitionend\",this.onTransitionEnd_),window.removeEventListener(\"resize\",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener(\"DOMSubtreeModified\",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(e){var t=e.propertyName,r=void 0===t?\"\":t;vh.some((function(e){return!!~r.indexOf(e)}))&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),wh=function(e,t){for(var r=0,n=Object.keys(t);r<n.length;r++){var o=n[r];Object.defineProperty(e,o,{value:t[o],enumerable:!1,writable:!1,configurable:!0})}return e},xh=function(e){return e&&e.ownerDocument&&e.ownerDocument.defaultView||mh},Sh=Ah(0,0,0,0);function Ch(e){return parseFloat(e)||0}function kh(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return t.reduce((function(t,r){return t+Ch(e[\"border-\"+r+\"-width\"])}),0)}var Eh=\"undefined\"!=typeof SVGGraphicsElement?function(e){return e instanceof xh(e).SVGGraphicsElement}:function(e){return e instanceof xh(e).SVGElement&&\"function\"==typeof e.getBBox};function Oh(e){return ph?Eh(e)?function(e){var t=e.getBBox();return Ah(0,0,t.width,t.height)}(e):function(e){var t=e.clientWidth,r=e.clientHeight;if(!t&&!r)return Sh;var n=xh(e).getComputedStyle(e),o=function(e){for(var t={},r=0,n=[\"top\",\"right\",\"bottom\",\"left\"];r<n.length;r++){var o=n[r],i=e[\"padding-\"+o];t[o]=Ch(i)}return t}(n),i=o.left+o.right,a=o.top+o.bottom,s=Ch(n.width),l=Ch(n.height);if(\"border-box\"===n.boxSizing&&(Math.round(s+i)!==t&&(s-=kh(n,\"left\",\"right\")+i),Math.round(l+a)!==r&&(l-=kh(n,\"top\",\"bottom\")+a)),!function(e){return e===xh(e).document.documentElement}(e)){var c=Math.round(s+i)-t,u=Math.round(l+a)-r;1!==Math.abs(c)&&(s-=c),1!==Math.abs(u)&&(l-=u)}return Ah(o.left,o.top,s,l)}(e):Sh}function Ah(e,t,r,n){return{x:e,y:t,width:r,height:n}}var Th=function(){function e(e){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=Ah(0,0,0,0),this.target=e}return e.prototype.isActive=function(){var e=Oh(this.target);return this.contentRect_=e,e.width!==this.broadcastWidth||e.height!==this.broadcastHeight},e.prototype.broadcastRect=function(){var e=this.contentRect_;return this.broadcastWidth=e.width,this.broadcastHeight=e.height,e},e}(),jh=function(e,t){var r,n,o,i,a,s,l,c=(n=(r=t).x,o=r.y,i=r.width,a=r.height,s=\"undefined\"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,l=Object.create(s.prototype),wh(l,{x:n,y:o,width:i,height:a,top:o,right:n+i,bottom:a+o,left:n}),l);wh(this,{target:e,contentRect:c})},Ph=function(){function e(e,t,r){if(this.activeObservations_=[],this.observations_=new hh,\"function\"!=typeof e)throw new TypeError(\"The callback provided as parameter 1 is not a function.\");this.callback_=e,this.controller_=t,this.callbackCtx_=r}return e.prototype.observe=function(e){if(!arguments.length)throw new TypeError(\"1 argument required, but only 0 present.\");if(\"undefined\"!=typeof Element&&Element instanceof Object){if(!(e instanceof xh(e).Element))throw new TypeError('parameter 1 is not of type \"Element\".');var t=this.observations_;t.has(e)||(t.set(e,new Th(e)),this.controller_.addObserver(this),this.controller_.refresh())}},e.prototype.unobserve=function(e){if(!arguments.length)throw new TypeError(\"1 argument required, but only 0 present.\");if(\"undefined\"!=typeof Element&&Element instanceof Object){if(!(e instanceof xh(e).Element))throw new TypeError('parameter 1 is not of type \"Element\".');var t=this.observations_;t.has(e)&&(t.delete(e),t.size||this.controller_.removeObserver(this))}},e.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},e.prototype.gatherActive=function(){var e=this;this.clearActive(),this.observations_.forEach((function(t){t.isActive()&&e.activeObservations_.push(t)}))},e.prototype.broadcastActive=function(){if(this.hasActive()){var e=this.callbackCtx_,t=this.activeObservations_.map((function(e){return new jh(e.target,e.broadcastRect())}));this.callback_.call(e,t,e),this.clearActive()}},e.prototype.clearActive=function(){this.activeObservations_.splice(0)},e.prototype.hasActive=function(){return this.activeObservations_.length>0},e}(),Mh=\"undefined\"!=typeof WeakMap?new WeakMap:new hh,Rh=function e(t){if(!(this instanceof e))throw new TypeError(\"Cannot call a class as a function.\");if(!arguments.length)throw new TypeError(\"1 argument required, but only 0 present.\");var r=yh.getInstance(),n=new Ph(t,r,this);Mh.set(this,n)};[\"observe\",\"unobserve\",\"disconnect\"].forEach((function(e){Rh.prototype[e]=function(){var t;return(t=Mh.get(this))[e].apply(t,arguments)}}));const _h=void 0!==mh.ResizeObserver?mh.ResizeObserver:Rh;var Ih=new Map,Nh=new _h((function(e){e.forEach((function(e){var t,r=e.target;null===(t=Ih.get(r))||void 0===t||t.forEach((function(e){return e(r)}))}))})),Fh=function(e){Bs(r,e);var t=Us(r);function r(){return ei(this,r),t.apply(this,arguments)}return ri(r,[{key:\"render\",value:function(){return this.props.children}}]),r}(m.Component);function Dh(e,t){var r=e.children,n=e.disabled,o=m.useRef(null),i=m.useRef(null),a=m.useContext(fh),s=\"function\"==typeof r,l=s?r(o):r,c=m.useRef({width:-1,height:-1,offsetWidth:-1,offsetHeight:-1}),u=!s&&m.isValidElement(l)&&En(l),d=u?An(l):null,f=kn(d,o),h=function(){var e;return _s(o.current)||(o.current&&\"object\"===Ne(o.current)?_s(null===(e=o.current)||void 0===e?void 0:e.nativeElement):null)||_s(i.current)};m.useImperativeHandle(t,(function(){return h()}));var p=m.useRef(e);p.current=e;var g=m.useCallback((function(e){var t=p.current,r=t.onResize,n=t.data,o=e.getBoundingClientRect(),i=o.width,s=o.height,l=e.offsetWidth,u=e.offsetHeight,d=Math.floor(i),f=Math.floor(s);if(c.current.width!==d||c.current.height!==f||c.current.offsetWidth!==l||c.current.offsetHeight!==u){var h={width:d,height:f,offsetWidth:l,offsetHeight:u};c.current=h;var m=l===Math.round(i)?i:l,g=u===Math.round(s)?s:u,v=At(At({},h),{},{offsetWidth:m,offsetHeight:g});null==a||a(v,e,n),r&&Promise.resolve().then((function(){r(v,e)}))}}),[]);return m.useEffect((function(){var e,t,r=h();return r&&!n&&(e=r,t=g,Ih.has(e)||(Ih.set(e,new Set),Nh.observe(e)),Ih.get(e).add(t)),function(){return function(e,t){Ih.has(e)&&(Ih.get(e).delete(t),Ih.get(e).size||(Nh.unobserve(e),Ih.delete(e)))}(r,g)}}),[o.current,n]),m.createElement(Fh,{ref:i},u?m.cloneElement(l,{ref:f}):l)}const Bh=m.forwardRef(Dh);function Lh(e,t){var r=e.children;return(\"function\"==typeof r?[r]:sd(r)).map((function(r,n){var o=(null==r?void 0:r.key)||\"\".concat(\"rc-observer-key\",\"-\").concat(n);return m.createElement(Bh,Te({},e,{key:o,ref:0===n?t:void 0}),r)}))}var zh=m.forwardRef(Lh);zh.Collection=function(e){var t=e.children,r=e.onBatchResize,n=m.useRef(0),o=m.useRef([]),i=m.useContext(fh),a=m.useCallback((function(e,t,a){n.current+=1;var s=n.current;o.current.push({size:e,element:t,data:a}),Promise.resolve().then((function(){s===n.current&&(null==r||r(o.current),o.current=[])})),null==i||i(e,t,a)}),[r,i]);return m.createElement(fh.Provider,{value:a},t)};const Hh=zh;var Uh=0,Vh=At({},g).useId;const Wh=Vh?function(e){var t=Vh();return e||t}:function(e){var t=Ie(m.useState(\"ssr-id\"),2),r=t[0],n=t[1];return m.useEffect((function(){var e=Uh;Uh+=1,n(\"rc_unique_\".concat(e))}),[]),e||r},Gh=function(){if(\"undefined\"==typeof navigator||\"undefined\"==typeof window)return!1;var e=navigator.userAgent||navigator.vendor||window.opera;return/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(null==e?void 0:e.substr(0,4))};function qh(e){var t=e.prefixCls,r=e.align,n=e.arrow,o=e.arrowPos,i=n||{},a=i.className,s=i.content,l=o.x,c=void 0===l?0:l,u=o.y,d=void 0===u?0:u,f=m.useRef();if(!r||!r.points)return null;var h={position:\"absolute\"};if(!1!==r.autoArrow){var p=r.points[0],g=r.points[1],v=p[0],b=p[1],y=g[0],w=g[1];v!==y&&[\"t\",\"b\"].includes(v)?\"t\"===v?h.top=0:h.bottom=0:h.top=d,b!==w&&[\"l\",\"r\"].includes(b)?\"l\"===b?h.left=0:h.right=0:h.left=c}return m.createElement(\"div\",{ref:f,className:ze()(\"\".concat(t,\"-arrow\"),a),style:h},s)}function Kh(e){var t=e.prefixCls,r=e.open,n=e.zIndex,o=e.mask,i=e.motion;return o?m.createElement(Vl,Te({},i,{motionAppear:!0,visible:r,removeOnLeave:!0}),(function(e){var r=e.className;return m.createElement(\"div\",{style:{zIndex:n},className:ze()(\"\".concat(t,\"-mask\"),r)})})):null}var Xh=m.memo((function(e){return e.children}),(function(e,t){return t.cache}));const Yh=Xh;var $h=m.forwardRef((function(e,t){var r=e.popup,n=e.className,o=e.prefixCls,i=e.style,a=e.target,s=e.onVisibleChanged,l=e.open,c=e.keepDom,u=e.fresh,d=e.onClick,f=e.mask,h=e.arrow,p=e.arrowPos,g=e.align,v=e.motion,b=e.maskMotion,y=e.forceRender,w=e.getPopupContainer,x=e.autoDestroy,S=e.portal,C=e.zIndex,k=e.onMouseEnter,E=e.onMouseLeave,O=e.onPointerEnter,A=e.onPointerDownCapture,T=e.ready,j=e.offsetX,P=e.offsetY,M=e.offsetR,R=e.offsetB,_=e.onAlign,I=e.onPrepare,N=e.stretch,F=e.targetWidth,D=e.targetHeight,B=\"function\"==typeof r?r():r,L=l||c,z=(null==w?void 0:w.length)>0,H=Ie(m.useState(!w||!z),2),U=H[0],V=H[1];if(Pi((function(){!U&&z&&a&&V(!0)}),[U,z,a]),!U)return null;var W=\"auto\",G={left:\"-1000vw\",top:\"-1000vh\",right:W,bottom:W};if(T||!l){var q,K=g.points,X=g.dynamicInset||(null===(q=g._experimental)||void 0===q?void 0:q.dynamicInset),Y=X&&\"r\"===K[0][1],$=X&&\"b\"===K[0][0];Y?(G.right=M,G.left=W):(G.left=j,G.right=W),$?(G.bottom=R,G.top=W):(G.top=P,G.bottom=W)}var Z={};return N&&(N.includes(\"height\")&&D?Z.height=D:N.includes(\"minHeight\")&&D&&(Z.minHeight=D),N.includes(\"width\")&&F?Z.width=F:N.includes(\"minWidth\")&&F&&(Z.minWidth=F)),l||(Z.pointerEvents=\"none\"),m.createElement(S,{open:y||L,getContainer:w&&function(){return w(a)},autoDestroy:x},m.createElement(Kh,{prefixCls:o,open:l,zIndex:C,mask:f,motion:b}),m.createElement(Hh,{onResize:_,disabled:!l},(function(e){return m.createElement(Vl,Te({motionAppear:!0,motionEnter:!0,motionLeave:!0,removeOnLeave:!1,forceRender:y,leavedClassName:\"\".concat(o,\"-hidden\")},v,{onAppearPrepare:I,onEnterPrepare:I,visible:l,onVisibleChanged:function(e){var t;null==v||null===(t=v.onVisibleChanged)||void 0===t||t.call(v,e),s(e)}}),(function(r,a){var s=r.className,c=r.style,f=ze()(o,s,n);return m.createElement(\"div\",{ref:Cn(e,t,a),className:f,style:At(At(At(At({\"--arrow-x\":\"\".concat(p.x||0,\"px\"),\"--arrow-y\":\"\".concat(p.y||0,\"px\")},G),Z),c),{},{boxSizing:\"border-box\",zIndex:C},i),onMouseEnter:k,onMouseLeave:E,onPointerEnter:O,onClick:d,onPointerDownCapture:A},h&&m.createElement(qh,{prefixCls:o,arrow:h,arrowPos:p,align:g}),m.createElement(Yh,{cache:!l&&!u},B))}))})))}));const Zh=$h;var Qh=m.forwardRef((function(e,t){var r=e.children,n=e.getTriggerDOMNode,o=En(r),i=m.useCallback((function(e){Sn(t,n?n(e):e)}),[n]),a=kn(i,An(r));return o?m.cloneElement(r,{ref:a}):r}));const Jh=Qh,ep=m.createContext(null);function tp(e){return e?Array.isArray(e)?e:[e]:[]}const rp=function(e){if(!e)return!1;if(e instanceof Element){if(e.offsetParent)return!0;if(e.getBBox){var t=e.getBBox(),r=t.width,n=t.height;if(r||n)return!0}if(e.getBoundingClientRect){var o=e.getBoundingClientRect(),i=o.width,a=o.height;if(i||a)return!0}}return!1};function np(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return(arguments.length>2?arguments[2]:void 0)?e[0]===t[0]:e[0]===t[0]&&e[1]===t[1]}function op(e,t,r,n){return t||(r?{motionName:\"\".concat(e,\"-\").concat(r)}:n?{motionName:n}:null)}function ip(e){return e.ownerDocument.defaultView}function ap(e){for(var t=[],r=null==e?void 0:e.parentElement,n=[\"hidden\",\"scroll\",\"clip\",\"auto\"];r;){var o=ip(r).getComputedStyle(r);[o.overflowX,o.overflowY,o.overflow].some((function(e){return n.includes(e)}))&&t.push(r),r=r.parentElement}return t}function sp(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return Number.isNaN(e)?t:e}function lp(e){return sp(parseFloat(e),0)}function cp(e,t){var r=At({},e);return(t||[]).forEach((function(e){if(!(e instanceof HTMLBodyElement||e instanceof HTMLHtmlElement)){var t=ip(e).getComputedStyle(e),n=t.overflow,o=t.overflowClipMargin,i=t.borderTopWidth,a=t.borderBottomWidth,s=t.borderLeftWidth,l=t.borderRightWidth,c=e.getBoundingClientRect(),u=e.offsetHeight,d=e.clientHeight,f=e.offsetWidth,h=e.clientWidth,p=lp(i),m=lp(a),g=lp(s),v=lp(l),b=sp(Math.round(c.width/f*1e3)/1e3),y=sp(Math.round(c.height/u*1e3)/1e3),w=(f-h-g-v)*b,x=(u-d-p-m)*y,S=p*y,C=m*y,k=g*b,E=v*b,O=0,A=0;if(\"clip\"===n){var T=lp(o);O=T*b,A=T*y}var j=c.x+k-O,P=c.y+S-A,M=j+c.width+2*O-k-E-w,R=P+c.height+2*A-S-C-x;r.left=Math.max(r.left,j),r.top=Math.max(r.top,P),r.right=Math.min(r.right,M),r.bottom=Math.min(r.bottom,R)}})),r}function up(e){var t=\"\".concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:0),r=t.match(/^(.*)\\%$/);return r?e*(parseFloat(r[1])/100):parseFloat(t)}function dp(e,t){var r=Ie(t||[],2),n=r[0],o=r[1];return[up(e.width,n),up(e.height,o)]}function fp(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\";return[e[0],e[1]]}function hp(e,t){var r,n=t[0],o=t[1];return r=\"t\"===n?e.y:\"b\"===n?e.y+e.height:e.y+e.height/2,{x:\"l\"===o?e.x:\"r\"===o?e.x+e.width:e.x+e.width/2,y:r}}function pp(e,t){var r={t:\"b\",b:\"t\",l:\"r\",r:\"l\"};return e.map((function(e,n){return n===t?r[e]||\"c\":e})).join(\"\")}var mp=[\"prefixCls\",\"children\",\"action\",\"showAction\",\"hideAction\",\"popupVisible\",\"defaultPopupVisible\",\"onPopupVisibleChange\",\"afterPopupVisibleChange\",\"mouseEnterDelay\",\"mouseLeaveDelay\",\"focusDelay\",\"blurDelay\",\"mask\",\"maskClosable\",\"getPopupContainer\",\"forceRender\",\"autoDestroy\",\"destroyPopupOnHide\",\"popup\",\"popupClassName\",\"popupStyle\",\"popupPlacement\",\"builtinPlacements\",\"popupAlign\",\"zIndex\",\"stretch\",\"getPopupClassNameFromAlign\",\"fresh\",\"alignPoint\",\"onPopupClick\",\"onPopupAlign\",\"arrow\",\"popupMotion\",\"maskMotion\",\"popupTransitionName\",\"popupAnimation\",\"maskTransitionName\",\"maskAnimation\",\"className\",\"getTriggerDOMNode\"];const gp=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:dh,t=m.forwardRef((function(t,r){var n=t.prefixCls,o=void 0===n?\"rc-trigger-popup\":n,i=t.children,a=t.action,s=void 0===a?\"hover\":a,l=t.showAction,c=t.hideAction,u=t.popupVisible,d=t.defaultPopupVisible,f=t.onPopupVisibleChange,h=t.afterPopupVisibleChange,p=t.mouseEnterDelay,g=t.mouseLeaveDelay,v=void 0===g?.1:g,b=t.focusDelay,y=t.blurDelay,w=t.mask,x=t.maskClosable,S=void 0===x||x,C=t.getPopupContainer,k=t.forceRender,E=t.autoDestroy,O=t.destroyPopupOnHide,A=t.popup,T=t.popupClassName,j=t.popupStyle,P=t.popupPlacement,M=t.builtinPlacements,R=void 0===M?{}:M,_=t.popupAlign,I=t.zIndex,N=t.stretch,F=t.getPopupClassNameFromAlign,D=t.fresh,B=t.alignPoint,L=t.onPopupClick,z=t.onPopupAlign,H=t.arrow,U=t.popupMotion,V=t.maskMotion,W=t.popupTransitionName,G=t.popupAnimation,q=t.maskTransitionName,K=t.maskAnimation,X=t.className,Y=t.getTriggerDOMNode,$=Be(t,mp),Z=E||O||!1,Q=Ie(m.useState(!1),2),J=Q[0],ee=Q[1];Pi((function(){ee(Gh())}),[]);var te=m.useRef({}),re=m.useContext(ep),ne=m.useMemo((function(){return{registerSubPopup:function(e,t){te.current[e]=t,null==re||re.registerSubPopup(e,t)}}}),[re]),oe=Wh(),ie=Ie(m.useState(null),2),ae=ie[0],se=ie[1],le=m.useRef(null),ce=Ws((function(e){le.current=e,Ms(e)&&ae!==e&&se(e),null==re||re.registerSubPopup(oe,e)})),ue=Ie(m.useState(null),2),de=ue[0],fe=ue[1],he=m.useRef(null),pe=Ws((function(e){Ms(e)&&de!==e&&(fe(e),he.current=e)})),me=m.Children.only(i),ge=(null==me?void 0:me.props)||{},ve={},be=Ws((function(e){var t,r,n=de;return(null==n?void 0:n.contains(e))||(null===(t=Ht(n))||void 0===t?void 0:t.host)===e||e===n||(null==ae?void 0:ae.contains(e))||(null===(r=Ht(ae))||void 0===r?void 0:r.host)===e||e===ae||Object.values(te.current).some((function(t){return(null==t?void 0:t.contains(e))||e===t}))})),ye=op(o,U,G,W),we=op(o,V,K,q),xe=Ie(m.useState(d||!1),2),Se=xe[0],Ce=xe[1],ke=null!=u?u:Se,Ee=Ws((function(e){void 0===u&&Ce(e)}));Pi((function(){Ce(u||!1)}),[u]);var Oe=m.useRef(ke);Oe.current=ke;var Ae=m.useRef([]);Ae.current=[];var Te=Ws((function(e){var t;Ee(e),(null!==(t=Ae.current[Ae.current.length-1])&&void 0!==t?t:ke)!==e&&(Ae.current.push(e),null==f||f(e))})),je=m.useRef(),Pe=function(){clearTimeout(je.current)},Me=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;Pe(),0===t?Te(e):je.current=setTimeout((function(){Te(e)}),1e3*t)};m.useEffect((function(){return Pe}),[]);var Re=Ie(m.useState(!1),2),_e=Re[0],Ne=Re[1];Pi((function(e){e&&!ke||Ne(!0)}),[ke]);var Fe=Ie(m.useState(null),2),De=Fe[0],Le=Fe[1],He=Ie(m.useState(null),2),Ue=He[0],Ve=He[1],We=function(e){Ve([e.clientX,e.clientY])},Ge=function(e,t,r,n,o,i,a){var s=Ie(m.useState({ready:!1,offsetX:0,offsetY:0,offsetR:0,offsetB:0,arrowX:0,arrowY:0,scaleX:1,scaleY:1,align:o[n]||{}}),2),l=s[0],c=s[1],u=m.useRef(0),d=m.useMemo((function(){return t?ap(t):[]}),[t]),f=m.useRef({});e||(f.current={});var h=Ws((function(){if(t&&r&&e){var s,l,u,h,p,m=t,g=m.ownerDocument,v=ip(m).getComputedStyle(m),b=v.width,y=v.height,w=v.position,x=m.style.left,S=m.style.top,C=m.style.right,k=m.style.bottom,E=m.style.overflow,O=At(At({},o[n]),i),A=g.createElement(\"div\");if(null===(s=m.parentElement)||void 0===s||s.appendChild(A),A.style.left=\"\".concat(m.offsetLeft,\"px\"),A.style.top=\"\".concat(m.offsetTop,\"px\"),A.style.position=w,A.style.height=\"\".concat(m.offsetHeight,\"px\"),A.style.width=\"\".concat(m.offsetWidth,\"px\"),m.style.left=\"0\",m.style.top=\"0\",m.style.right=\"auto\",m.style.bottom=\"auto\",m.style.overflow=\"hidden\",Array.isArray(r))p={x:r[0],y:r[1],width:0,height:0};else{var T,j,P=r.getBoundingClientRect();P.x=null!==(T=P.x)&&void 0!==T?T:P.left,P.y=null!==(j=P.y)&&void 0!==j?j:P.top,p={x:P.x,y:P.y,width:P.width,height:P.height}}var M=m.getBoundingClientRect();M.x=null!==(l=M.x)&&void 0!==l?l:M.left,M.y=null!==(u=M.y)&&void 0!==u?u:M.top;var R=g.documentElement,_=R.clientWidth,I=R.clientHeight,N=R.scrollWidth,F=R.scrollHeight,D=R.scrollTop,B=R.scrollLeft,L=M.height,z=M.width,H=p.height,U=p.width,V={left:0,top:0,right:_,bottom:I},W={left:-B,top:-D,right:N-B,bottom:F-D},G=O.htmlRegion,q=\"visible\",K=\"visibleFirst\";\"scroll\"!==G&&G!==K&&(G=q);var X=G===K,Y=cp(W,d),$=cp(V,d),Z=G===q?$:Y,Q=X?$:Z;m.style.left=\"auto\",m.style.top=\"auto\",m.style.right=\"0\",m.style.bottom=\"0\";var J=m.getBoundingClientRect();m.style.left=x,m.style.top=S,m.style.right=C,m.style.bottom=k,m.style.overflow=E,null===(h=m.parentElement)||void 0===h||h.removeChild(A);var ee=sp(Math.round(z/parseFloat(b)*1e3)/1e3),te=sp(Math.round(L/parseFloat(y)*1e3)/1e3);if(0===ee||0===te||Ms(r)&&!rp(r))return;var re=O.offset,ne=O.targetOffset,oe=Ie(dp(M,re),2),ie=oe[0],ae=oe[1],se=Ie(dp(p,ne),2),le=se[0],ce=se[1];p.x-=le,p.y-=ce;var ue=Ie(O.points||[],2),de=ue[0],fe=fp(ue[1]),he=fp(de),pe=hp(p,fe),me=hp(M,he),ge=At({},O),ve=pe.x-me.x+ie,be=pe.y-me.y+ae;function ft(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Z,n=M.x+e,o=M.y+t,i=n+z,a=o+L,s=Math.max(n,r.left),l=Math.max(o,r.top),c=Math.min(i,r.right),u=Math.min(a,r.bottom);return Math.max(0,(c-s)*(u-l))}var ye,we,xe,Se,Ce=ft(ve,be),ke=ft(ve,be,$),Ee=hp(p,[\"t\",\"l\"]),Oe=hp(M,[\"t\",\"l\"]),Ae=hp(p,[\"b\",\"r\"]),Te=hp(M,[\"b\",\"r\"]),je=O.overflow||{},Pe=je.adjustX,Me=je.adjustY,Re=je.shiftX,_e=je.shiftY,Ne=function(e){return\"boolean\"==typeof e?e:e>=0};function ht(){ye=M.y+be,we=ye+L,xe=M.x+ve,Se=xe+z}ht();var Fe=Ne(Me),De=he[0]===fe[0];if(Fe&&\"t\"===he[0]&&(we>Q.bottom||f.current.bt)){var Be=be;De?Be-=L-H:Be=Ee.y-Te.y-ae;var Le=ft(ve,Be),ze=ft(ve,Be,$);Le>Ce||Le===Ce&&(!X||ze>=ke)?(f.current.bt=!0,be=Be,ae=-ae,ge.points=[pp(he,0),pp(fe,0)]):f.current.bt=!1}if(Fe&&\"b\"===he[0]&&(ye<Q.top||f.current.tb)){var He=be;De?He+=L-H:He=Ae.y-Oe.y-ae;var Ue=ft(ve,He),Ve=ft(ve,He,$);Ue>Ce||Ue===Ce&&(!X||Ve>=ke)?(f.current.tb=!0,be=He,ae=-ae,ge.points=[pp(he,0),pp(fe,0)]):f.current.tb=!1}var We=Ne(Pe),Ge=he[1]===fe[1];if(We&&\"l\"===he[1]&&(Se>Q.right||f.current.rl)){var qe=ve;Ge?qe-=z-U:qe=Ee.x-Te.x-ie;var Ke=ft(qe,be),Xe=ft(qe,be,$);Ke>Ce||Ke===Ce&&(!X||Xe>=ke)?(f.current.rl=!0,ve=qe,ie=-ie,ge.points=[pp(he,1),pp(fe,1)]):f.current.rl=!1}if(We&&\"r\"===he[1]&&(xe<Q.left||f.current.lr)){var Ye=ve;Ge?Ye+=z-U:Ye=Ae.x-Oe.x-ie;var $e=ft(Ye,be),Ze=ft(Ye,be,$);$e>Ce||$e===Ce&&(!X||Ze>=ke)?(f.current.lr=!0,ve=Ye,ie=-ie,ge.points=[pp(he,1),pp(fe,1)]):f.current.lr=!1}ht();var Qe=!0===Re?0:Re;\"number\"==typeof Qe&&(xe<$.left&&(ve-=xe-$.left-ie,p.x+U<$.left+Qe&&(ve+=p.x-$.left+U-Qe)),Se>$.right&&(ve-=Se-$.right-ie,p.x>$.right-Qe&&(ve+=p.x-$.right+Qe)));var Je=!0===_e?0:_e;\"number\"==typeof Je&&(ye<$.top&&(be-=ye-$.top-ae,p.y+H<$.top+Je&&(be+=p.y-$.top+H-Je)),we>$.bottom&&(be-=we-$.bottom-ae,p.y>$.bottom-Je&&(be+=p.y-$.bottom+Je)));var et=M.x+ve,tt=et+z,rt=M.y+be,nt=rt+L,ot=p.x,it=ot+U,at=p.y,st=at+H,lt=(Math.max(et,ot)+Math.min(tt,it))/2-et,ct=(Math.max(rt,at)+Math.min(nt,st))/2-rt;null==a||a(t,ge);var ut=J.right-M.x-(ve+M.width),dt=J.bottom-M.y-(be+M.height);1===ee&&(ve=Math.round(ve),ut=Math.round(ut)),1===te&&(be=Math.round(be),dt=Math.round(dt)),c({ready:!0,offsetX:ve/ee,offsetY:be/te,offsetR:ut/ee,offsetB:dt/te,arrowX:lt/ee,arrowY:ct/te,scaleX:ee,scaleY:te,align:ge})}})),p=function(){c((function(e){return At(At({},e),{},{ready:!1})}))};return Pi(p,[n]),Pi((function(){e||p()}),[e]),[l.ready,l.offsetX,l.offsetY,l.offsetR,l.offsetB,l.arrowX,l.arrowY,l.scaleX,l.scaleY,l.align,function(){u.current+=1;var e=u.current;Promise.resolve().then((function(){u.current===e&&h()}))}]}(ke,ae,B&&null!==Ue?Ue:de,P,R,_,z),qe=Ie(Ge,11),Ke=qe[0],Xe=qe[1],Ye=qe[2],$e=qe[3],Ze=qe[4],Qe=qe[5],Je=qe[6],et=qe[7],tt=qe[8],rt=qe[9],nt=qe[10],ot=function(e,t,r,n){return m.useMemo((function(){var o=tp(null!=r?r:t),i=tp(null!=n?n:t),a=new Set(o),s=new Set(i);return e&&(a.has(\"hover\")&&(a.delete(\"hover\"),a.add(\"click\")),s.has(\"hover\")&&(s.delete(\"hover\"),s.add(\"click\"))),[a,s]}),[e,t,r,n])}(J,s,l,c),it=Ie(ot,2),at=it[0],st=it[1],lt=at.has(\"click\"),ct=st.has(\"click\")||st.has(\"contextMenu\"),ut=Ws((function(){_e||nt()}));!function(e,t,r,n){Pi((function(){if(e&&t&&r){var o=r,i=ap(t),a=ap(o),s=ip(o),l=new Set([s].concat(Vo(i),Vo(a)));function c(){n(),Oe.current&&B&&ct&&Me(!1)}return l.forEach((function(e){e.addEventListener(\"scroll\",c,{passive:!0})})),s.addEventListener(\"resize\",c,{passive:!0}),n(),function(){l.forEach((function(e){e.removeEventListener(\"scroll\",c),s.removeEventListener(\"resize\",c)}))}}}),[e,t,r])}(ke,de,ae,ut),Pi((function(){ut()}),[Ue,P]),Pi((function(){!ke||null!=R&&R[P]||ut()}),[JSON.stringify(_)]);var dt=m.useMemo((function(){var e=function(e,t,r,n){for(var o=r.points,i=Object.keys(e),a=0;a<i.length;a+=1){var s,l=i[a];if(np(null===(s=e[l])||void 0===s?void 0:s.points,o,n))return\"\".concat(t,\"-placement-\").concat(l)}return\"\"}(R,o,rt,B);return ze()(e,null==F?void 0:F(rt))}),[rt,F,R,o,B]);m.useImperativeHandle(r,(function(){return{nativeElement:he.current,popupElement:le.current,forceAlign:ut}}));var ft=Ie(m.useState(0),2),ht=ft[0],pt=ft[1],mt=Ie(m.useState(0),2),gt=mt[0],vt=mt[1],bt=function(){if(N&&de){var e=de.getBoundingClientRect();pt(e.width),vt(e.height)}};function yt(e,t,r,n){ve[e]=function(o){var i;null==n||n(o),Me(t,r);for(var a=arguments.length,s=new Array(a>1?a-1:0),l=1;l<a;l++)s[l-1]=arguments[l];null===(i=ge[e])||void 0===i||i.call.apply(i,[ge,o].concat(s))}}Pi((function(){De&&(nt(),De(),Le(null))}),[De]),(lt||ct)&&(ve.onClick=function(e){var t;Oe.current&&ct?Me(!1):!Oe.current&&lt&&(We(e),Me(!0));for(var r=arguments.length,n=new Array(r>1?r-1:0),o=1;o<r;o++)n[o-1]=arguments[o];null===(t=ge.onClick)||void 0===t||t.call.apply(t,[ge,e].concat(n))});var wt,xt,St=function(e,t,r,n,o,i,a,s){var l=m.useRef(e);l.current=e;var c=m.useRef(!1);return m.useEffect((function(){if(t&&n&&(!o||i)){var e=function(){c.current=!1},u=function(e){var t;!l.current||a((null===(t=e.composedPath)||void 0===t||null===(t=t.call(e))||void 0===t?void 0:t[0])||e.target)||c.current||s(!1)},d=ip(n);d.addEventListener(\"pointerdown\",e,!0),d.addEventListener(\"mousedown\",u,!0),d.addEventListener(\"contextmenu\",u,!0);var f=Ht(r);return f&&(f.addEventListener(\"mousedown\",u,!0),f.addEventListener(\"contextmenu\",u,!0)),function(){d.removeEventListener(\"pointerdown\",e,!0),d.removeEventListener(\"mousedown\",u,!0),d.removeEventListener(\"contextmenu\",u,!0),f&&(f.removeEventListener(\"mousedown\",u,!0),f.removeEventListener(\"contextmenu\",u,!0))}}}),[t,r,n,o,i]),function(){c.current=!0}}(ke,ct,de,ae,w,S,be,Me),Ct=at.has(\"hover\"),kt=st.has(\"hover\");Ct&&(yt(\"onMouseEnter\",!0,p,(function(e){We(e)})),yt(\"onPointerEnter\",!0,p,(function(e){We(e)})),wt=function(e){(ke||_e)&&null!=ae&&ae.contains(e.target)&&Me(!0,p)},B&&(ve.onMouseMove=function(e){var t;null===(t=ge.onMouseMove)||void 0===t||t.call(ge,e)})),kt&&(yt(\"onMouseLeave\",!1,v),yt(\"onPointerLeave\",!1,v),xt=function(){Me(!1,v)}),at.has(\"focus\")&&yt(\"onFocus\",!0,b),st.has(\"focus\")&&yt(\"onBlur\",!1,y),at.has(\"contextMenu\")&&(ve.onContextMenu=function(e){var t;Oe.current&&st.has(\"contextMenu\")?Me(!1):(We(e),Me(!0)),e.preventDefault();for(var r=arguments.length,n=new Array(r>1?r-1:0),o=1;o<r;o++)n[o-1]=arguments[o];null===(t=ge.onContextMenu)||void 0===t||t.call.apply(t,[ge,e].concat(n))}),X&&(ve.className=ze()(ge.className,X));var Et=At(At({},ge),ve),Ot={};[\"onContextMenu\",\"onClick\",\"onMouseDown\",\"onTouchStart\",\"onMouseEnter\",\"onMouseLeave\",\"onFocus\",\"onBlur\"].forEach((function(e){$[e]&&(Ot[e]=function(){for(var t,r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];null===(t=Et[e])||void 0===t||t.call.apply(t,[Et].concat(n)),$[e].apply($,n)})}));var Tt=m.cloneElement(me,At(At({},Et),Ot)),jt={x:Qe,y:Je},Pt=H?At({},!0!==H?H:{}):null;return m.createElement(m.Fragment,null,m.createElement(Hh,{disabled:!ke,ref:pe,onResize:function(){bt(),ut()}},m.createElement(Jh,{getTriggerDOMNode:Y},Tt)),m.createElement(ep.Provider,{value:ne},m.createElement(Zh,{portal:e,ref:ce,prefixCls:o,popup:A,className:ze()(T,dt),style:j,target:de,onMouseEnter:wt,onMouseLeave:xt,onPointerEnter:wt,zIndex:I,open:ke,keepDom:_e,fresh:D,onClick:L,onPointerDownCapture:St,mask:w,motion:ye,maskMotion:we,onVisibleChanged:function(e){Ne(!1),nt(),null==h||h(e)},onPrepare:function(){return new Promise((function(e){bt(),Le((function(){return e}))}))},forceRender:k,autoDestroy:Z,getPopupContainer:C,align:rt,arrow:Pt,arrowPos:jt,ready:Ke,offsetX:Xe,offsetY:Ye,offsetR:$e,offsetB:Ze,onAlign:ut,stretch:N,targetWidth:ht/et,targetHeight:gt/tt})))}));return t}(dh);var vp={shiftX:64,adjustY:1},bp={adjustX:1,shiftY:!0},yp=[0,0],wp={left:{points:[\"cr\",\"cl\"],overflow:bp,offset:[-4,0],targetOffset:yp},right:{points:[\"cl\",\"cr\"],overflow:bp,offset:[4,0],targetOffset:yp},top:{points:[\"bc\",\"tc\"],overflow:vp,offset:[0,-4],targetOffset:yp},bottom:{points:[\"tc\",\"bc\"],overflow:vp,offset:[0,4],targetOffset:yp},topLeft:{points:[\"bl\",\"tl\"],overflow:vp,offset:[0,-4],targetOffset:yp},leftTop:{points:[\"tr\",\"tl\"],overflow:bp,offset:[-4,0],targetOffset:yp},topRight:{points:[\"br\",\"tr\"],overflow:vp,offset:[0,-4],targetOffset:yp},rightTop:{points:[\"tl\",\"tr\"],overflow:bp,offset:[4,0],targetOffset:yp},bottomRight:{points:[\"tr\",\"br\"],overflow:vp,offset:[0,4],targetOffset:yp},rightBottom:{points:[\"bl\",\"br\"],overflow:bp,offset:[4,0],targetOffset:yp},bottomLeft:{points:[\"tl\",\"bl\"],overflow:vp,offset:[0,4],targetOffset:yp},leftBottom:{points:[\"br\",\"bl\"],overflow:bp,offset:[-4,0],targetOffset:yp}},xp=[\"overlayClassName\",\"trigger\",\"mouseEnterDelay\",\"mouseLeaveDelay\",\"overlayStyle\",\"prefixCls\",\"children\",\"onVisibleChange\",\"afterVisibleChange\",\"transitionName\",\"animation\",\"motion\",\"placement\",\"align\",\"destroyTooltipOnHide\",\"defaultVisible\",\"getTooltipContainer\",\"overlayInnerStyle\",\"arrowContent\",\"overlay\",\"id\",\"showArrow\",\"classNames\",\"styles\"],Sp=function(e,t){var r=e.overlayClassName,n=e.trigger,o=void 0===n?[\"hover\"]:n,i=e.mouseEnterDelay,a=void 0===i?0:i,s=e.mouseLeaveDelay,l=void 0===s?.1:s,c=e.overlayStyle,u=e.prefixCls,d=void 0===u?\"rc-tooltip\":u,f=e.children,h=e.onVisibleChange,p=e.afterVisibleChange,g=e.transitionName,v=e.animation,b=e.motion,y=e.placement,w=void 0===y?\"right\":y,x=e.align,S=void 0===x?{}:x,C=e.destroyTooltipOnHide,k=void 0!==C&&C,E=e.defaultVisible,O=e.getTooltipContainer,A=e.overlayInnerStyle,T=(e.arrowContent,e.overlay),j=e.id,P=e.showArrow,M=void 0===P||P,R=e.classNames,_=e.styles,I=Be(e,xp),N=Wh(j),F=(0,m.useRef)(null);(0,m.useImperativeHandle)(t,(function(){return F.current}));var D,B,L=At({},I);return\"visible\"in e&&(L.popupVisible=e.visible),m.createElement(gp,Te({popupClassName:ze()(r,null==R?void 0:R.root),prefixCls:d,popup:function(){return m.createElement(rh,{key:\"content\",prefixCls:d,id:N,bodyClassName:null==R?void 0:R.body,overlayInnerStyle:At(At({},A),null==_?void 0:_.body)},T)},action:o,builtinPlacements:wp,popupPlacement:w,ref:F,popupAlign:S,getPopupContainer:O,onPopupVisibleChange:h,afterPopupVisibleChange:p,popupTransitionName:g,popupAnimation:v,popupMotion:b,defaultPopupVisible:E,autoDestroy:k,mouseLeaveDelay:l,popupStyle:At(At({},c),null==_?void 0:_.root),mouseEnterDelay:a,arrow:M},L),(B=At(At({},(null==(D=m.Children.only(f))?void 0:D.props)||{}),{},{\"aria-describedby\":T?N:null}),m.cloneElement(f,B)))};const Cp=(0,m.forwardRef)(Sp);function kp(e){const{sizePopupArrow:t,borderRadiusXS:r,borderRadiusOuter:n}=e,o=t/2,i=o,a=1*n/Math.sqrt(2),s=o-n*(1-1/Math.sqrt(2)),l=o-r*(1/Math.sqrt(2)),c=n*(Math.sqrt(2)-1)+r*(1/Math.sqrt(2)),u=2*o-l,d=c,f=2*o-a,h=s,p=2*o-0,m=i,g=o*Math.sqrt(2)+n*(Math.sqrt(2)-2),v=n*(Math.sqrt(2)-1);return{arrowShadowWidth:g,arrowPath:`path('M 0 ${i} A ${n} ${n} 0 0 0 ${a} ${s} L ${l} ${c} A ${r} ${r} 0 0 1 ${u} ${d} L ${f} ${h} A ${n} ${n} 0 0 0 ${p} ${m} Z')`,arrowPolygon:`polygon(${v}px 100%, 50% ${v}px, ${2*o-v}px 100%, ${v}px 100%)`}}const Ep=(e,t,r)=>{const{sizePopupArrow:n,arrowPolygon:o,arrowPath:i,arrowShadowWidth:a,borderRadiusXS:s,calc:l}=e;return{pointerEvents:\"none\",width:n,height:n,overflow:\"hidden\",\"&::before\":{position:\"absolute\",bottom:0,insetInlineStart:0,width:n,height:l(n).div(2).equal(),background:t,clipPath:{_multi_value_:!0,value:[o,i]},content:'\"\"'},\"&::after\":{content:'\"\"',position:\"absolute\",width:a,height:a,bottom:0,insetInline:0,margin:\"auto\",borderRadius:{_skip_check_:!0,value:`0 0 ${Si(s)} 0`},transform:\"translateY(50%) rotate(-135deg)\",boxShadow:r,zIndex:0,background:\"transparent\"}}};function Op(e){const{contentRadius:t,limitVerticalRadius:r}=e,n=t>12?t+2:12;return{arrowOffsetHorizontal:n,arrowOffsetVertical:r?8:n}}function Ap(e,t){return e?t:{}}function Tp(e,t,r){const{componentCls:n,boxShadowPopoverArrow:o,arrowOffsetVertical:i,arrowOffsetHorizontal:a}=e,{arrowDistance:s=0,arrowPlacement:l={left:!0,right:!0,top:!0,bottom:!0}}=r||{};return{[n]:Object.assign(Object.assign(Object.assign(Object.assign({[`${n}-arrow`]:[Object.assign(Object.assign({position:\"absolute\",zIndex:1,display:\"block\"},Ep(e,t,o)),{\"&:before\":{background:t}})]},Ap(!!l.top,{[[`&-placement-top > ${n}-arrow`,`&-placement-topLeft > ${n}-arrow`,`&-placement-topRight > ${n}-arrow`].join(\",\")]:{bottom:s,transform:\"translateY(100%) rotate(180deg)\"},[`&-placement-top > ${n}-arrow`]:{left:{_skip_check_:!0,value:\"50%\"},transform:\"translateX(-50%) translateY(100%) rotate(180deg)\"},\"&-placement-topLeft\":{\"--arrow-offset-horizontal\":a,[`> ${n}-arrow`]:{left:{_skip_check_:!0,value:a}}},\"&-placement-topRight\":{\"--arrow-offset-horizontal\":`calc(100% - ${Si(a)})`,[`> ${n}-arrow`]:{right:{_skip_check_:!0,value:a}}}})),Ap(!!l.bottom,{[[`&-placement-bottom > ${n}-arrow`,`&-placement-bottomLeft > ${n}-arrow`,`&-placement-bottomRight > ${n}-arrow`].join(\",\")]:{top:s,transform:\"translateY(-100%)\"},[`&-placement-bottom > ${n}-arrow`]:{left:{_skip_check_:!0,value:\"50%\"},transform:\"translateX(-50%) translateY(-100%)\"},\"&-placement-bottomLeft\":{\"--arrow-offset-horizontal\":a,[`> ${n}-arrow`]:{left:{_skip_check_:!0,value:a}}},\"&-placement-bottomRight\":{\"--arrow-offset-horizontal\":`calc(100% - ${Si(a)})`,[`> ${n}-arrow`]:{right:{_skip_check_:!0,value:a}}}})),Ap(!!l.left,{[[`&-placement-left > ${n}-arrow`,`&-placement-leftTop > ${n}-arrow`,`&-placement-leftBottom > ${n}-arrow`].join(\",\")]:{right:{_skip_check_:!0,value:s},transform:\"translateX(100%) rotate(90deg)\"},[`&-placement-left > ${n}-arrow`]:{top:{_skip_check_:!0,value:\"50%\"},transform:\"translateY(-50%) translateX(100%) rotate(90deg)\"},[`&-placement-leftTop > ${n}-arrow`]:{top:i},[`&-placement-leftBottom > ${n}-arrow`]:{bottom:i}})),Ap(!!l.right,{[[`&-placement-right > ${n}-arrow`,`&-placement-rightTop > ${n}-arrow`,`&-placement-rightBottom > ${n}-arrow`].join(\",\")]:{left:{_skip_check_:!0,value:s},transform:\"translateX(-100%) rotate(-90deg)\"},[`&-placement-right > ${n}-arrow`]:{top:{_skip_check_:!0,value:\"50%\"},transform:\"translateY(-50%) translateX(-100%) rotate(-90deg)\"},[`&-placement-rightTop > ${n}-arrow`]:{top:i},[`&-placement-rightBottom > ${n}-arrow`]:{bottom:i}}))}}const jp={left:{points:[\"cr\",\"cl\"]},right:{points:[\"cl\",\"cr\"]},top:{points:[\"bc\",\"tc\"]},bottom:{points:[\"tc\",\"bc\"]},topLeft:{points:[\"bl\",\"tl\"]},leftTop:{points:[\"tr\",\"tl\"]},topRight:{points:[\"br\",\"tr\"]},rightTop:{points:[\"tl\",\"tr\"]},bottomRight:{points:[\"tr\",\"br\"]},rightBottom:{points:[\"bl\",\"br\"]},bottomLeft:{points:[\"tl\",\"bl\"]},leftBottom:{points:[\"br\",\"bl\"]}},Pp={topLeft:{points:[\"bl\",\"tc\"]},leftTop:{points:[\"tr\",\"cl\"]},topRight:{points:[\"br\",\"tc\"]},rightTop:{points:[\"tl\",\"cr\"]},bottomRight:{points:[\"tr\",\"bc\"]},rightBottom:{points:[\"bl\",\"cr\"]},bottomLeft:{points:[\"tl\",\"bc\"]},leftBottom:{points:[\"br\",\"cl\"]}},Mp=new Set([\"topLeft\",\"topRight\",\"bottomLeft\",\"bottomRight\",\"leftTop\",\"leftBottom\",\"rightTop\",\"rightBottom\"]);function Rp(e){const{arrowWidth:t,autoAdjustOverflow:r,arrowPointAtCenter:n,offset:o,borderRadius:i,visibleFirst:a}=e,s=t/2,l={};return Object.keys(jp).forEach((e=>{const c=n&&Pp[e]||jp[e],u=Object.assign(Object.assign({},c),{offset:[0,0],dynamicInset:!0});switch(l[e]=u,Mp.has(e)&&(u.autoArrow=!1),e){case\"top\":case\"topLeft\":case\"topRight\":u.offset[1]=-s-o;break;case\"bottom\":case\"bottomLeft\":case\"bottomRight\":u.offset[1]=s+o;break;case\"left\":case\"leftTop\":case\"leftBottom\":u.offset[0]=-s-o;break;case\"right\":case\"rightTop\":case\"rightBottom\":u.offset[0]=s+o}const d=Op({contentRadius:i,limitVerticalRadius:!0});if(n)switch(e){case\"topLeft\":case\"bottomLeft\":u.offset[0]=-d.arrowOffsetHorizontal-s;break;case\"topRight\":case\"bottomRight\":u.offset[0]=d.arrowOffsetHorizontal+s;break;case\"leftTop\":case\"rightTop\":u.offset[1]=2*-d.arrowOffsetHorizontal+s;break;case\"leftBottom\":case\"rightBottom\":u.offset[1]=2*d.arrowOffsetHorizontal-s}u.overflow=function(e,t,r,n){if(!1===n)return{adjustX:!1,adjustY:!1};const o=n&&\"object\"==typeof n?n:{},i={};switch(e){case\"top\":case\"bottom\":i.shiftX=2*t.arrowOffsetHorizontal+r,i.shiftY=!0,i.adjustY=!0;break;case\"left\":case\"right\":i.shiftY=2*t.arrowOffsetVertical+r,i.shiftX=!0,i.adjustX=!0}const a=Object.assign(Object.assign({},i),o);return a.shiftX||(a.adjustX=!0),a.shiftY||(a.adjustY=!0),a}(e,d,t,r),a&&(u.htmlRegion=\"visibleFirst\")})),l}const _p=e=>({animationDuration:e,animationFillMode:\"both\"}),Ip=e=>({animationDuration:e,animationFillMode:\"both\"}),Np=function(e,t,r,n){const o=arguments.length>4&&void 0!==arguments[4]&&arguments[4]?\"&\":\"\";return{[`\\n      ${o}${e}-enter,\\n      ${o}${e}-appear\\n    `]:Object.assign(Object.assign({},_p(n)),{animationPlayState:\"paused\"}),[`${o}${e}-leave`]:Object.assign(Object.assign({},Ip(n)),{animationPlayState:\"paused\"}),[`\\n      ${o}${e}-enter${e}-enter-active,\\n      ${o}${e}-appear${e}-appear-active\\n    `]:{animationName:t,animationPlayState:\"running\"},[`${o}${e}-leave${e}-leave-active`]:{animationName:r,animationPlayState:\"running\",pointerEvents:\"none\"}}},Fp=new Ba(\"antZoomIn\",{\"0%\":{transform:\"scale(0.2)\",opacity:0},\"100%\":{transform:\"scale(1)\",opacity:1}}),Dp=new Ba(\"antZoomOut\",{\"0%\":{transform:\"scale(1)\"},\"100%\":{transform:\"scale(0.2)\",opacity:0}}),Bp=new Ba(\"antZoomBigIn\",{\"0%\":{transform:\"scale(0.8)\",opacity:0},\"100%\":{transform:\"scale(1)\",opacity:1}}),Lp=new Ba(\"antZoomBigOut\",{\"0%\":{transform:\"scale(1)\"},\"100%\":{transform:\"scale(0.8)\",opacity:0}}),zp=new Ba(\"antZoomUpIn\",{\"0%\":{transform:\"scale(0.8)\",transformOrigin:\"50% 0%\",opacity:0},\"100%\":{transform:\"scale(1)\",transformOrigin:\"50% 0%\"}}),Hp=new Ba(\"antZoomUpOut\",{\"0%\":{transform:\"scale(1)\",transformOrigin:\"50% 0%\"},\"100%\":{transform:\"scale(0.8)\",transformOrigin:\"50% 0%\",opacity:0}}),Up=new Ba(\"antZoomLeftIn\",{\"0%\":{transform:\"scale(0.8)\",transformOrigin:\"0% 50%\",opacity:0},\"100%\":{transform:\"scale(1)\",transformOrigin:\"0% 50%\"}}),Vp=new Ba(\"antZoomLeftOut\",{\"0%\":{transform:\"scale(1)\",transformOrigin:\"0% 50%\"},\"100%\":{transform:\"scale(0.8)\",transformOrigin:\"0% 50%\",opacity:0}}),Wp=new Ba(\"antZoomRightIn\",{\"0%\":{transform:\"scale(0.8)\",transformOrigin:\"100% 50%\",opacity:0},\"100%\":{transform:\"scale(1)\",transformOrigin:\"100% 50%\"}}),Gp=new Ba(\"antZoomRightOut\",{\"0%\":{transform:\"scale(1)\",transformOrigin:\"100% 50%\"},\"100%\":{transform:\"scale(0.8)\",transformOrigin:\"100% 50%\",opacity:0}}),qp=new Ba(\"antZoomDownIn\",{\"0%\":{transform:\"scale(0.8)\",transformOrigin:\"50% 100%\",opacity:0},\"100%\":{transform:\"scale(1)\",transformOrigin:\"50% 100%\"}}),Kp=new Ba(\"antZoomDownOut\",{\"0%\":{transform:\"scale(1)\",transformOrigin:\"50% 100%\"},\"100%\":{transform:\"scale(0.8)\",transformOrigin:\"50% 100%\",opacity:0}}),Xp={zoom:{inKeyframes:Fp,outKeyframes:Dp},\"zoom-big\":{inKeyframes:Bp,outKeyframes:Lp},\"zoom-big-fast\":{inKeyframes:Bp,outKeyframes:Lp},\"zoom-left\":{inKeyframes:Up,outKeyframes:Vp},\"zoom-right\":{inKeyframes:Wp,outKeyframes:Gp},\"zoom-up\":{inKeyframes:zp,outKeyframes:Hp},\"zoom-down\":{inKeyframes:qp,outKeyframes:Kp}},Yp=(e,t)=>{const{antCls:r}=e,n=`${r}-${t}`,{inKeyframes:o,outKeyframes:i}=Xp[t];return[Np(n,o,i,\"zoom-big-fast\"===t?e.motionDurationFast:e.motionDurationMid),{[`\\n        ${n}-enter,\\n        ${n}-appear\\n      `]:{transform:\"scale(0)\",opacity:0,animationTimingFunction:e.motionEaseOutCirc,\"&-prepare\":{transform:\"none\"}},[`${n}-leave`]:{animationTimingFunction:e.motionEaseInOutCirc}}]},$p=[\"blue\",\"purple\",\"cyan\",\"green\",\"magenta\",\"pink\",\"red\",\"orange\",\"yellow\",\"volcano\",\"geekblue\",\"lime\",\"gold\"];function Zp(e,t){return $p.reduce(((r,n)=>{const o=e[`${n}1`],i=e[`${n}3`],a=e[`${n}6`],s=e[`${n}7`];return Object.assign(Object.assign({},r),t(n,{lightColor:o,lightBorderColor:i,darkColor:a,textColor:s}))}),{})}const Qp=e=>{const{calc:t,componentCls:r,tooltipMaxWidth:n,tooltipColor:o,tooltipBg:i,tooltipBorderRadius:a,zIndexPopup:s,controlHeight:l,boxShadowSecondary:c,paddingSM:u,paddingXS:d,arrowOffsetHorizontal:f,sizePopupArrow:h}=e,p=t(a).add(h).add(f).equal(),m=t(a).mul(2).add(h).equal();return[{[r]:Object.assign(Object.assign(Object.assign(Object.assign({},rc(e)),{position:\"absolute\",zIndex:s,display:\"block\",width:\"max-content\",maxWidth:n,visibility:\"visible\",\"--valid-offset-x\":\"var(--arrow-offset-horizontal, var(--arrow-x))\",transformOrigin:[\"var(--valid-offset-x, 50%)\",\"var(--arrow-y, 50%)\"].join(\" \"),\"&-hidden\":{display:\"none\"},\"--antd-arrow-background-color\":i,[`${r}-inner`]:{minWidth:m,minHeight:l,padding:`${Si(e.calc(u).div(2).equal())} ${Si(d)}`,color:o,textAlign:\"start\",textDecoration:\"none\",wordWrap:\"break-word\",backgroundColor:i,borderRadius:a,boxShadow:c,boxSizing:\"border-box\"},[[\"&-placement-topLeft\",\"&-placement-topRight\",\"&-placement-bottomLeft\",\"&-placement-bottomRight\"].join(\",\")]:{minWidth:p},[[\"&-placement-left\",\"&-placement-leftTop\",\"&-placement-leftBottom\",\"&-placement-right\",\"&-placement-rightTop\",\"&-placement-rightBottom\"].join(\",\")]:{[`${r}-inner`]:{borderRadius:e.min(a,8)}},[`${r}-content`]:{position:\"relative\"}}),Zp(e,((e,t)=>{let{darkColor:n}=t;return{[`&${r}-${e}`]:{[`${r}-inner`]:{backgroundColor:n},[`${r}-arrow`]:{\"--antd-arrow-background-color\":n}}}}))),{\"&-rtl\":{direction:\"rtl\"}})},Tp(e,\"var(--antd-arrow-background-color)\"),{[`${r}-pure`]:{position:\"relative\",maxWidth:\"none\",margin:e.sizePopupArrow}}]},Jp=e=>Object.assign(Object.assign({zIndexPopup:e.zIndexPopupBase+70},Op({contentRadius:e.borderRadius,limitVerticalRadius:!0})),kp(Au(e,{borderRadiusOuter:Math.min(e.borderRadiusOuter,4)}))),em=function(e){const t=Iu(\"Tooltip\",(e=>{const{borderRadius:t,colorTextLightSolid:r,colorBgSpotlight:n}=e,o=Au(e,{tooltipMaxWidth:250,tooltipColor:r,tooltipBorderRadius:t,tooltipBg:n});return[Qp(o),Yp(e,\"zoom-big-fast\")]}),Jp,{resetStyle:!1,injectStyle:!(arguments.length>1&&void 0!==arguments[1])||arguments[1]});return t(e)},tm=$p.map((e=>`${e}-inverse`));function rm(e,t){const r=function(e){return arguments.length>1&&void 0!==arguments[1]&&!arguments[1]?$p.includes(e):[].concat(Vo(tm),Vo($p)).includes(e)}(t),n=ze()({[`${e}-${t}`]:t&&r}),o={},i={};return t&&!r&&(o.background=t,i[\"--antd-arrow-background-color\"]=t),{className:n,overlayStyle:o,arrowStyle:i}}const nm=m.forwardRef(((e,t)=>{var r,n;const{prefixCls:o,openClassName:i,getTooltipContainer:a,color:s,overlayInnerStyle:l,children:c,afterOpenChange:u,afterVisibleChange:d,destroyTooltipOnHide:f,destroyOnHidden:h,arrow:p=!0,title:g,overlay:v,builtinPlacements:b,arrowPointAtCenter:y=!1,autoAdjustOverflow:w=!0,motion:x,getPopupContainer:S,placement:C=\"top\",mouseEnterDelay:k=.1,mouseLeaveDelay:E=.1,overlayStyle:O,rootClassName:A,overlayClassName:T,styles:j,classNames:P}=e,M=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"openClassName\",\"getTooltipContainer\",\"color\",\"overlayInnerStyle\",\"children\",\"afterOpenChange\",\"afterVisibleChange\",\"destroyTooltipOnHide\",\"destroyOnHidden\",\"arrow\",\"title\",\"overlay\",\"builtinPlacements\",\"arrowPointAtCenter\",\"autoAdjustOverflow\",\"motion\",\"getPopupContainer\",\"placement\",\"mouseEnterDelay\",\"mouseLeaveDelay\",\"overlayStyle\",\"rootClassName\",\"overlayClassName\",\"styles\",\"classNames\"]),R=!!p,[,_]=Ql(),{getPopupContainer:I,getPrefixCls:N,direction:F,className:D,style:B,classNames:L,styles:z}=Zo(\"tooltip\"),H=Ya(),U=m.useRef(null),V=()=>{var e;null===(e=U.current)||void 0===e||e.forceAlign()};m.useImperativeHandle(t,(()=>{var e,t;return{forceAlign:V,forcePopupAlign:()=>{H.deprecated(!1,\"forcePopupAlign\",\"forceAlign\"),V()},nativeElement:null===(e=U.current)||void 0===e?void 0:e.nativeElement,popupElement:null===(t=U.current)||void 0===t?void 0:t.popupElement}}));const[W,G]=Ks(!1,{value:null!==(r=e.open)&&void 0!==r?r:e.visible,defaultValue:null!==(n=e.defaultOpen)&&void 0!==n?n:e.defaultVisible}),q=!g&&!v&&0!==g,K=m.useMemo((()=>{var e,t;let r=y;return\"object\"==typeof p&&(r=null!==(t=null!==(e=p.pointAtCenter)&&void 0!==e?e:p.arrowPointAtCenter)&&void 0!==t?t:y),b||Rp({arrowPointAtCenter:r,autoAdjustOverflow:w,arrowWidth:R?_.sizePopupArrow:0,borderRadius:_.borderRadius,offset:_.marginXXS,visibleFirst:!0})}),[y,p,b,_]),X=m.useMemo((()=>0===g?g:v||g||\"\"),[v,g]),Y=m.createElement(Uf,{space:!0},\"function\"==typeof X?X():X),$=N(\"tooltip\",o),Z=N(),Q=e[\"data-popover-inject\"];let J=W;\"open\"in e||\"visible\"in e||!q||(J=!1);const ee=m.isValidElement(c)&&!eh(c)?c:m.createElement(\"span\",null,c),te=ee.props,re=te.className&&\"string\"!=typeof te.className?te.className:ze()(te.className,i||`${$}-open`),[ne,oe,ie]=em($,!Q),ae=rm($,s),se=ae.arrowStyle,le=ze()(T,{[`${$}-rtl`]:\"rtl\"===F},ae.className,A,oe,ie,D,L.root,null==P?void 0:P.root),ce=ze()(L.body,null==P?void 0:P.body),[ue,de]=gu(\"Tooltip\",M.zIndex),fe=m.createElement(Cp,Object.assign({},M,{zIndex:ue,showArrow:R,placement:C,mouseEnterDelay:k,mouseLeaveDelay:E,prefixCls:$,classNames:{root:le,body:ce},styles:{root:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},se),z.root),B),O),null==j?void 0:j.root),body:Object.assign(Object.assign(Object.assign(Object.assign({},z.body),l),null==j?void 0:j.body),ae.overlayStyle)},getTooltipContainer:S||a||I,ref:U,builtinPlacements:K,overlay:Y,visible:J,onVisibleChange:t=>{var r,n;G(!q&&t),q||(null===(r=e.onOpenChange)||void 0===r||r.call(e,t),null===(n=e.onVisibleChange)||void 0===n||n.call(e,t))},afterVisibleChange:null!=u?u:d,arrowContent:m.createElement(\"span\",{className:`${$}-arrow-content`}),motion:{motionName:Qf(Z,\"zoom-big-fast\",e.transitionName),motionDeadline:1e3},destroyTooltipOnHide:null!=h?h:!!f}),J?th(ee,{className:re}):ee);return ne(m.createElement(fu.Provider,{value:de},fe))})),om=nm;om._InternalPanelDoNotUseOrYouWillBeFired=e=>{const{prefixCls:t,className:r,placement:n=\"top\",title:o,color:i,overlayInnerStyle:a}=e,{getPrefixCls:s}=m.useContext(Xo),l=s(\"tooltip\",t),[c,u,d]=em(l),f=rm(l,i),h=f.arrowStyle,p=Object.assign(Object.assign({},a),f.overlayStyle),g=ze()(u,d,l,`${l}-pure`,`${l}-placement-${n}`,r,f.className);return c(m.createElement(\"div\",{className:g,style:h},m.createElement(\"div\",{className:`${l}-arrow`}),m.createElement(rh,Object.assign({},e,{className:u,prefixCls:l,overlayInnerStyle:p}),o)))};const im=om,am=e=>{const{componentCls:t,popoverColor:r,titleMinWidth:n,fontWeightStrong:o,innerPadding:i,boxShadowSecondary:a,colorTextHeading:s,borderRadiusLG:l,zIndexPopup:c,titleMarginBottom:u,colorBgElevated:d,popoverBg:f,titleBorderBottom:h,innerContentPadding:p,titlePadding:m}=e;return[{[t]:Object.assign(Object.assign({},rc(e)),{position:\"absolute\",top:0,left:{_skip_check_:!0,value:0},zIndex:c,fontWeight:\"normal\",whiteSpace:\"normal\",textAlign:\"start\",cursor:\"auto\",userSelect:\"text\",\"--valid-offset-x\":\"var(--arrow-offset-horizontal, var(--arrow-x))\",transformOrigin:[\"var(--valid-offset-x, 50%)\",\"var(--arrow-y, 50%)\"].join(\" \"),\"--antd-arrow-background-color\":d,width:\"max-content\",maxWidth:\"100vw\",\"&-rtl\":{direction:\"rtl\"},\"&-hidden\":{display:\"none\"},[`${t}-content`]:{position:\"relative\"},[`${t}-inner`]:{backgroundColor:f,backgroundClip:\"padding-box\",borderRadius:l,boxShadow:a,padding:i},[`${t}-title`]:{minWidth:n,marginBottom:u,color:s,fontWeight:o,borderBottom:h,padding:m},[`${t}-inner-content`]:{color:r,padding:p}})},Tp(e,\"var(--antd-arrow-background-color)\"),{[`${t}-pure`]:{position:\"relative\",maxWidth:\"none\",margin:e.sizePopupArrow,display:\"inline-block\",[`${t}-content`]:{display:\"inline-block\"}}}]},sm=e=>{const{componentCls:t}=e;return{[t]:$p.map((r=>{const n=e[`${r}6`];return{[`&${t}-${r}`]:{\"--antd-arrow-background-color\":n,[`${t}-inner`]:{backgroundColor:n},[`${t}-arrow`]:{background:\"transparent\"}}}}))}},lm=Iu(\"Popover\",(e=>{const{colorBgElevated:t,colorText:r}=e,n=Au(e,{popoverBg:t,popoverColor:r});return[am(n),sm(n),Yp(n,\"zoom-big\")]}),(e=>{const{lineWidth:t,controlHeight:r,fontHeight:n,padding:o,wireframe:i,zIndexPopupBase:a,borderRadiusLG:s,marginXS:l,lineType:c,colorSplit:u,paddingSM:d}=e,f=r-n,h=f/2,p=f/2-t,m=o;return Object.assign(Object.assign(Object.assign({titleMinWidth:177,zIndexPopup:a+30},kp(e)),Op({contentRadius:s,limitVerticalRadius:!0})),{innerPadding:i?0:12,titleMarginBottom:i?0:l,titlePadding:i?`${h}px ${m}px ${p}px`:0,titleBorderBottom:i?`${t}px ${c} ${u}`:\"none\",innerContentPadding:i?`${d}px ${m}px`:0})}),{resetStyle:!1,deprecatedTokens:[[\"width\",\"titleMinWidth\"],[\"minWidth\",\"titleMinWidth\"]]});const cm=e=>{let{title:t,content:r,prefixCls:n}=e;return t||r?m.createElement(m.Fragment,null,t&&m.createElement(\"div\",{className:`${n}-title`},t),r&&m.createElement(\"div\",{className:`${n}-inner-content`},r)):null},um=e=>{const{hashId:t,prefixCls:r,className:n,style:o,placement:i=\"top\",title:a,content:s,children:l}=e,c=Kf(a),u=Kf(s),d=ze()(t,r,`${r}-pure`,`${r}-placement-${i}`,n);return m.createElement(\"div\",{className:d,style:o},m.createElement(\"div\",{className:`${r}-arrow`}),m.createElement(rh,Object.assign({},e,{className:t,prefixCls:r}),l||m.createElement(cm,{prefixCls:r,title:c,content:u})))};const dm=m.forwardRef(((e,t)=>{var r,n;const{prefixCls:o,title:i,content:a,overlayClassName:s,placement:l=\"top\",trigger:c=\"hover\",children:u,mouseEnterDelay:d=.1,mouseLeaveDelay:f=.1,onOpenChange:h,overlayStyle:p={},styles:g,classNames:v}=e,b=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"title\",\"content\",\"overlayClassName\",\"placement\",\"trigger\",\"children\",\"mouseEnterDelay\",\"mouseLeaveDelay\",\"onOpenChange\",\"overlayStyle\",\"styles\",\"classNames\"]),{getPrefixCls:y,className:w,style:x,classNames:S,styles:C}=Zo(\"popover\"),k=y(\"popover\",o),[E,O,A]=lm(k),T=y(),j=ze()(s,O,A,w,S.root,null==v?void 0:v.root),P=ze()(S.body,null==v?void 0:v.body),[M,R]=Ks(!1,{value:null!==(r=e.open)&&void 0!==r?r:e.visible,defaultValue:null!==(n=e.defaultOpen)&&void 0!==n?n:e.defaultVisible}),_=(e,t)=>{R(e,!0),null==h||h(e,t)},I=Kf(i),N=Kf(a);return E(m.createElement(im,Object.assign({placement:l,trigger:c,mouseEnterDelay:d,mouseLeaveDelay:f},b,{prefixCls:k,classNames:{root:j,body:P},styles:{root:Object.assign(Object.assign(Object.assign(Object.assign({},C.root),x),p),null==g?void 0:g.root),body:Object.assign(Object.assign({},C.body),null==g?void 0:g.body)},ref:t,open:M,onOpenChange:e=>{_(e)},overlay:I||N?m.createElement(cm,{prefixCls:k,title:I,content:N}):null,transitionName:Qf(T,\"zoom-big\",b.transitionName),\"data-popover-inject\":!0}),th(u,{onKeyDown:e=>{var t,r;m.isValidElement(u)&&(null===(r=null==u?void 0:(t=u.props).onKeyDown)||void 0===r||r.call(t,e)),(e=>{e.keyCode===$c.ESC&&_(!1,e)})(e)}})))})),fm=dm;fm._InternalPanelDoNotUseOrYouWillBeFired=e=>{const{prefixCls:t,className:r}=e,n=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"className\"]),{getPrefixCls:o}=m.useContext(Xo),i=o(\"popover\",t),[a,s,l]=lm(i);return a(m.createElement(um,Object.assign({},n,{prefixCls:i,hashId:s,className:ze()(r,l)})))};const hm=fm;var pm=[\"b\"],mm=[\"v\"],gm=function(e){return Math.round(Number(e||0))},vm=function(e){Bs(r,e);var t=Us(r);function r(e){return ei(this,r),t.call(this,function(e){if(e instanceof Ge)return e;if(e&&\"object\"===Ne(e)&&\"h\"in e&&\"b\"in e){var t=e,r=t.b;return At(At({},Be(t,pm)),{},{v:r})}return\"string\"==typeof e&&/hsb/.test(e)?e.replace(/hsb/,\"hsv\"):e}(e))}return ri(r,[{key:\"toHsbString\",value:function(){var e=this.toHsb(),t=gm(100*e.s),r=gm(100*e.b),n=gm(e.h),o=e.a,i=\"hsb(\".concat(n,\", \").concat(t,\"%, \").concat(r,\"%)\"),a=\"hsba(\".concat(n,\", \").concat(t,\"%, \").concat(r,\"%, \").concat(o.toFixed(0===o?0:2),\")\");return 1===o?i:a}},{key:\"toHsb\",value:function(){var e=this.toHsv(),t=e.v;return At(At({},Be(e,mm)),{},{b:t,a:this.a})}}]),r}(Ge),bm=function(e){return e instanceof vm?e:new vm(e)},ym=bm(\"#1677ff\"),wm=function(e){var t=e.offset,r=e.targetRef,n=e.containerRef,o=e.color,i=e.type,a=n.current.getBoundingClientRect(),s=a.width,l=a.height,c=r.current.getBoundingClientRect(),u=c.width/2,d=c.height/2,f=(t.x+u)/s,h=1-(t.y+d)/l,p=o.toHsb(),m=f,g=(t.x+u)/s*360;if(i)switch(i){case\"hue\":return bm(At(At({},p),{},{h:g<=0?0:g}));case\"alpha\":return bm(At(At({},p),{},{a:m<=0?0:m}))}return bm({h:p.h,s:f<=0?0:f,b:h>=1?1:h,a:p.a})},xm=function(e,t){var r=e.toHsb();switch(t){case\"hue\":return{x:r.h/360*100,y:50};case\"alpha\":return{x:100*e.a,y:50};default:return{x:100*r.s,y:100*(1-r.b)}}};const Sm=function(e){var t=e.color,r=e.prefixCls,n=e.className,o=e.style,i=e.onClick,a=\"\".concat(r,\"-color-block\");return m.createElement(\"div\",{className:ze()(a,n),style:o,onClick:i},m.createElement(\"div\",{className:\"\".concat(a,\"-inner\"),style:{background:t}}))},Cm=function(e){var t=e.targetRef,r=e.containerRef,n=e.direction,o=e.onDragChange,i=e.onDragChangeComplete,a=e.calculate,s=e.color,l=e.disabledDrag,c=Ie((0,m.useState)({x:0,y:0}),2),u=c[0],d=c[1],f=(0,m.useRef)(null),h=(0,m.useRef)(null);(0,m.useEffect)((function(){d(a())}),[s]),(0,m.useEffect)((function(){return function(){document.removeEventListener(\"mousemove\",f.current),document.removeEventListener(\"mouseup\",h.current),document.removeEventListener(\"touchmove\",f.current),document.removeEventListener(\"touchend\",h.current),f.current=null,h.current=null}}),[]);var p=function(e){var i=function(e){var t=\"touches\"in e?e.touches[0]:e,r=document.documentElement.scrollLeft||document.body.scrollLeft||window.pageXOffset,n=document.documentElement.scrollTop||document.body.scrollTop||window.pageYOffset;return{pageX:t.pageX-r,pageY:t.pageY-n}}(e),a=i.pageX,s=i.pageY,l=r.current.getBoundingClientRect(),c=l.x,d=l.y,f=l.width,h=l.height,p=t.current.getBoundingClientRect(),m=p.width,g=p.height,v=m/2,b=g/2,y=Math.max(0,Math.min(a-c,f))-v,w=Math.max(0,Math.min(s-d,h))-b,x={x:y,y:\"x\"===n?u.y:w};if(0===m&&0===g||m!==g)return!1;null==o||o(x)},g=function(e){e.preventDefault(),p(e)},v=function(e){e.preventDefault(),document.removeEventListener(\"mousemove\",f.current),document.removeEventListener(\"mouseup\",h.current),document.removeEventListener(\"touchmove\",f.current),document.removeEventListener(\"touchend\",h.current),f.current=null,h.current=null,null==i||i()};return[u,function(e){document.removeEventListener(\"mousemove\",f.current),document.removeEventListener(\"mouseup\",h.current),l||(p(e),document.addEventListener(\"mousemove\",g),document.addEventListener(\"mouseup\",v),document.addEventListener(\"touchmove\",g),document.addEventListener(\"touchend\",v),f.current=g,h.current=v)}]},km=function(e){var t=e.size,r=void 0===t?\"default\":t,n=e.color,o=e.prefixCls;return m.createElement(\"div\",{className:ze()(\"\".concat(o,\"-handler\"),De({},\"\".concat(o,\"-handler-sm\"),\"small\"===r)),style:{backgroundColor:n}})},Em=function(e){var t=e.children,r=e.style,n=e.prefixCls;return m.createElement(\"div\",{className:\"\".concat(n,\"-palette\"),style:At({position:\"relative\"},r)},t)},Om=(0,m.forwardRef)((function(e,t){var r=e.children,n=e.x,o=e.y;return m.createElement(\"div\",{ref:t,style:{position:\"absolute\",left:\"\".concat(n,\"%\"),top:\"\".concat(o,\"%\"),zIndex:1,transform:\"translate(-50%, -50%)\"}},r)})),Am=function(e){var t=e.color,r=e.onChange,n=e.prefixCls,o=e.onChangeComplete,i=e.disabled,a=(0,m.useRef)(),s=(0,m.useRef)(),l=(0,m.useRef)(t),c=Ws((function(e){var n=wm({offset:e,targetRef:s,containerRef:a,color:t});l.current=n,r(n)})),u=Ie(Cm({color:t,containerRef:a,targetRef:s,calculate:function(){return xm(t)},onDragChange:c,onDragChangeComplete:function(){return null==o?void 0:o(l.current)},disabledDrag:i}),2),d=u[0],f=u[1];return m.createElement(\"div\",{ref:a,className:\"\".concat(n,\"-select\"),onMouseDown:f,onTouchStart:f},m.createElement(Em,{prefixCls:n},m.createElement(Om,{x:d.x,y:d.y,ref:s},m.createElement(km,{color:t.toRgbString(),prefixCls:n})),m.createElement(\"div\",{className:\"\".concat(n,\"-saturation\"),style:{backgroundColor:\"hsl(\".concat(t.toHsb().h,\",100%, 50%)\"),backgroundImage:\"linear-gradient(0deg, #000, transparent),linear-gradient(90deg, #fff, hsla(0, 0%, 100%, 0))\"}})))},Tm=function(e){var t=e.colors,r=e.children,n=e.direction,o=void 0===n?\"to right\":n,i=e.type,a=e.prefixCls,s=(0,m.useMemo)((function(){return t.map((function(e,r){var n=bm(e);return\"alpha\"===i&&r===t.length-1&&(n=new vm(n.setA(1))),n.toRgbString()})).join(\",\")}),[t,i]);return m.createElement(\"div\",{className:\"\".concat(a,\"-gradient\"),style:{position:\"absolute\",inset:0,background:\"linear-gradient(\".concat(o,\", \").concat(s,\")\")}},r)},jm=function(e){var t=e.prefixCls,r=e.colors,n=e.disabled,o=e.onChange,i=e.onChangeComplete,a=e.color,s=e.type,l=(0,m.useRef)(),c=(0,m.useRef)(),u=(0,m.useRef)(a),d=function(e){return\"hue\"===s?e.getHue():100*e.a},f=Ws((function(e){var t=wm({offset:e,targetRef:c,containerRef:l,color:a,type:s});u.current=t,o(d(t))})),h=Ie(Cm({color:a,targetRef:c,containerRef:l,calculate:function(){return xm(a,s)},onDragChange:f,onDragChangeComplete:function(){i(d(u.current))},direction:\"x\",disabledDrag:n}),2),p=h[0],g=h[1],v=m.useMemo((function(){if(\"hue\"===s){var e=a.toHsb();return e.s=1,e.b=1,e.a=1,new vm(e)}return a}),[a,s]),b=m.useMemo((function(){return r.map((function(e){return\"\".concat(e.color,\" \").concat(e.percent,\"%\")}))}),[r]);return m.createElement(\"div\",{ref:l,className:ze()(\"\".concat(t,\"-slider\"),\"\".concat(t,\"-slider-\").concat(s)),onMouseDown:g,onTouchStart:g},m.createElement(Em,{prefixCls:t},m.createElement(Om,{x:p.x,y:p.y,ref:c},m.createElement(km,{size:\"small\",color:v.toHexString(),prefixCls:t})),m.createElement(Tm,{colors:b,type:s,prefixCls:t})))};var Pm=[{color:\"rgb(255, 0, 0)\",percent:0},{color:\"rgb(255, 255, 0)\",percent:17},{color:\"rgb(0, 255, 0)\",percent:33},{color:\"rgb(0, 255, 255)\",percent:50},{color:\"rgb(0, 0, 255)\",percent:67},{color:\"rgb(255, 0, 255)\",percent:83},{color:\"rgb(255, 0, 0)\",percent:100}],Mm=(0,m.forwardRef)((function(e,t){var r=e.value,n=e.defaultValue,o=e.prefixCls,i=void 0===o?\"rc-color-picker\":o,a=e.onChange,s=e.onChangeComplete,l=e.className,c=e.style,u=e.panelRender,d=e.disabledAlpha,f=void 0!==d&&d,h=e.disabled,p=void 0!==h&&h,g=function(e){return m.useMemo((function(){return[(e||{}).slider||jm]}),[e])}(e.components),v=Ie(g,1)[0],b=Ie(function(e,t){var r=Ie(Ks(e,{value:t}),2),n=r[0],o=r[1];return[(0,m.useMemo)((function(){return bm(n)}),[n]),o]}(n||ym,r),2),y=b[0],w=b[1],x=(0,m.useMemo)((function(){return y.setA(1).toRgbString()}),[y]),S=function(e,t){r||w(e),null==a||a(e,t)},C=function(e){return new vm(y.setHue(e))},k=function(e){return new vm(y.setA(e/100))},E=ze()(\"\".concat(i,\"-panel\"),l,De({},\"\".concat(i,\"-panel-disabled\"),p)),O={prefixCls:i,disabled:p,color:y},A=m.createElement(m.Fragment,null,m.createElement(Am,Te({onChange:S},O,{onChangeComplete:s})),m.createElement(\"div\",{className:\"\".concat(i,\"-slider-container\")},m.createElement(\"div\",{className:ze()(\"\".concat(i,\"-slider-group\"),De({},\"\".concat(i,\"-slider-group-disabled-alpha\"),f))},m.createElement(v,Te({},O,{type:\"hue\",colors:Pm,min:0,max:359,value:y.getHue(),onChange:function(e){S(C(e),{type:\"hue\",value:e})},onChangeComplete:function(e){s&&s(C(e))}})),!f&&m.createElement(v,Te({},O,{type:\"alpha\",colors:[{percent:0,color:\"rgba(255, 0, 4, 0)\"},{percent:100,color:x}],min:0,max:100,value:100*y.a,onChange:function(e){S(k(e),{type:\"alpha\",value:e})},onChangeComplete:function(e){s&&s(k(e))}}))),m.createElement(Sm,{color:y.toRgbString(),prefixCls:i})));return m.createElement(\"div\",{className:E,style:c,ref:t},\"function\"==typeof u?u(A):A)}));const Rm=Mm,_m=(e,t)=>(null==e?void 0:e.replace(/[^\\w/]/g,\"\").slice(0,t?8:6))||\"\";let Im=function(){return ri((function e(t){var r;if(ei(this,e),this.cleared=!1,t instanceof e)return this.metaColor=t.metaColor.clone(),this.colors=null===(r=t.colors)||void 0===r?void 0:r.map((t=>({color:new e(t.color),percent:t.percent}))),void(this.cleared=t.cleared);const n=Array.isArray(t);n&&t.length?(this.colors=t.map((t=>{let{color:r,percent:n}=t;return{color:new e(r),percent:n}})),this.metaColor=new vm(this.colors[0].color.metaColor)):this.metaColor=new vm(n?\"\":t),(!t||n&&!this.colors)&&(this.metaColor=this.metaColor.setA(0),this.cleared=!0)}),[{key:\"toHsb\",value:function(){return this.metaColor.toHsb()}},{key:\"toHsbString\",value:function(){return this.metaColor.toHsbString()}},{key:\"toHex\",value:function(){return e=this.toHexString(),t=this.metaColor.a<1,e?_m(e,t):\"\";var e,t}},{key:\"toHexString\",value:function(){return this.metaColor.toHexString()}},{key:\"toRgb\",value:function(){return this.metaColor.toRgb()}},{key:\"toRgbString\",value:function(){return this.metaColor.toRgbString()}},{key:\"isGradient\",value:function(){return!!this.colors&&!this.cleared}},{key:\"getColors\",value:function(){return this.colors||[{color:this,percent:0}]}},{key:\"toCssString\",value:function(){const{colors:e}=this;if(e){return`linear-gradient(90deg, ${e.map((e=>`${e.color.toRgbString()} ${e.percent}%`)).join(\", \")})`}return this.metaColor.toRgbString()}},{key:\"equals\",value:function(e){return!(!e||this.isGradient()!==e.isGradient())&&(this.isGradient()?this.colors.length===e.colors.length&&this.colors.every(((t,r)=>{const n=e.colors[r];return t.percent===n.percent&&t.color.equals(n.color)})):this.toHexString()===e.toHexString())}}])}();const Nm=e=>{const{componentCls:t}=e;return{[t]:{\"&-horizontal\":{[`&${t}`]:{\"&-sm\":{marginBlock:e.marginXS},\"&-md\":{marginBlock:e.margin}}}}}},Fm=e=>{const{componentCls:t,sizePaddingEdgeHorizontal:r,colorSplit:n,lineWidth:o,textPaddingInline:i,orientationMargin:a,verticalMarginInline:s}=e;return{[t]:Object.assign(Object.assign({},rc(e)),{borderBlockStart:`${Si(o)} solid ${n}`,\"&-vertical\":{position:\"relative\",top:\"-0.06em\",display:\"inline-block\",height:\"0.9em\",marginInline:s,marginBlock:0,verticalAlign:\"middle\",borderTop:0,borderInlineStart:`${Si(o)} solid ${n}`},\"&-horizontal\":{display:\"flex\",clear:\"both\",width:\"100%\",minWidth:\"100%\",margin:`${Si(e.marginLG)} 0`},[`&-horizontal${t}-with-text`]:{display:\"flex\",alignItems:\"center\",margin:`${Si(e.dividerHorizontalWithTextGutterMargin)} 0`,color:e.colorTextHeading,fontWeight:500,fontSize:e.fontSizeLG,whiteSpace:\"nowrap\",textAlign:\"center\",borderBlockStart:`0 ${n}`,\"&::before, &::after\":{position:\"relative\",width:\"50%\",borderBlockStart:`${Si(o)} solid transparent`,borderBlockStartColor:\"inherit\",borderBlockEnd:0,transform:\"translateY(50%)\",content:\"''\"}},[`&-horizontal${t}-with-text-start`]:{\"&::before\":{width:`calc(${a} * 100%)`},\"&::after\":{width:`calc(100% - ${a} * 100%)`}},[`&-horizontal${t}-with-text-end`]:{\"&::before\":{width:`calc(100% - ${a} * 100%)`},\"&::after\":{width:`calc(${a} * 100%)`}},[`${t}-inner-text`]:{display:\"inline-block\",paddingBlock:0,paddingInline:i},\"&-dashed\":{background:\"none\",borderColor:n,borderStyle:\"dashed\",borderWidth:`${Si(o)} 0 0`},[`&-horizontal${t}-with-text${t}-dashed`]:{\"&::before, &::after\":{borderStyle:\"dashed none none\"}},[`&-vertical${t}-dashed`]:{borderInlineStartWidth:o,borderInlineEnd:0,borderBlockStart:0,borderBlockEnd:0},\"&-dotted\":{background:\"none\",borderColor:n,borderStyle:\"dotted\",borderWidth:`${Si(o)} 0 0`},[`&-horizontal${t}-with-text${t}-dotted`]:{\"&::before, &::after\":{borderStyle:\"dotted none none\"}},[`&-vertical${t}-dotted`]:{borderInlineStartWidth:o,borderInlineEnd:0,borderBlockStart:0,borderBlockEnd:0},[`&-plain${t}-with-text`]:{color:e.colorText,fontWeight:\"normal\",fontSize:e.fontSize},[`&-horizontal${t}-with-text-start${t}-no-default-orientation-margin-start`]:{\"&::before\":{width:0},\"&::after\":{width:\"100%\"},[`${t}-inner-text`]:{paddingInlineStart:r}},[`&-horizontal${t}-with-text-end${t}-no-default-orientation-margin-end`]:{\"&::before\":{width:\"100%\"},\"&::after\":{width:0},[`${t}-inner-text`]:{paddingInlineEnd:r}}})}},Dm=Iu(\"Divider\",(e=>{const t=Au(e,{dividerHorizontalWithTextGutterMargin:e.margin,sizePaddingEdgeHorizontal:0});return[Fm(t),Nm(t)]}),(e=>({textPaddingInline:\"1em\",orientationMargin:.05,verticalMarginInline:e.marginXS})),{unitless:{orientationMargin:!0}});const Bm={small:\"sm\",middle:\"md\"},Lm=e=>{const{getPrefixCls:t,direction:r,className:n,style:o}=Zo(\"divider\"),{prefixCls:i,type:a=\"horizontal\",orientation:s=\"center\",orientationMargin:l,className:c,rootClassName:u,children:d,dashed:f,variant:h=\"solid\",plain:p,style:g,size:v}=e,b=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"type\",\"orientation\",\"orientationMargin\",\"className\",\"rootClassName\",\"children\",\"dashed\",\"variant\",\"plain\",\"style\",\"size\"]),y=t(\"divider\",i),[w,x,S]=Dm(y),C=Rf(v),k=Bm[C],E=!!d,O=m.useMemo((()=>\"left\"===s?\"rtl\"===r?\"end\":\"start\":\"right\"===s?\"rtl\"===r?\"start\":\"end\":s),[r,s]),A=\"start\"===O&&null!=l,T=\"end\"===O&&null!=l,j=ze()(y,n,x,S,`${y}-${a}`,{[`${y}-with-text`]:E,[`${y}-with-text-${O}`]:E,[`${y}-dashed`]:!!f,[`${y}-${h}`]:\"solid\"!==h,[`${y}-plain`]:!!p,[`${y}-rtl`]:\"rtl\"===r,[`${y}-no-default-orientation-margin-start`]:A,[`${y}-no-default-orientation-margin-end`]:T,[`${y}-${k}`]:!!k},c,u),P=m.useMemo((()=>\"number\"==typeof l?l:/^\\d+$/.test(l)?Number(l):l),[l]),M={marginInlineStart:A?P:void 0,marginInlineEnd:T?P:void 0};return w(m.createElement(\"div\",Object.assign({className:j,style:Object.assign(Object.assign({},o),g)},b,{role:\"separator\"}),d&&\"vertical\"!==a&&m.createElement(\"span\",{className:`${y}-inner-text`,style:M},d)))};var zm=function(e,t){if(!e)return null;var r={left:e.offsetLeft,right:e.parentElement.clientWidth-e.clientWidth-e.offsetLeft,width:e.clientWidth,top:e.offsetTop,bottom:e.parentElement.clientHeight-e.clientHeight-e.offsetTop,height:e.clientHeight};return t?{left:0,right:0,width:0,top:r.top,bottom:r.bottom,height:r.height}:{left:r.left,right:r.right,width:r.width,top:0,bottom:0,height:0}},Hm=function(e){return void 0!==e?\"\".concat(e,\"px\"):void 0};function Um(e){var t=e.prefixCls,r=e.containerRef,n=e.value,o=e.getValueIndex,i=e.motionName,a=e.onMotionStart,s=e.onMotionEnd,l=e.direction,c=e.vertical,u=void 0!==c&&c,d=m.useRef(null),f=Ie(m.useState(n),2),h=f[0],p=f[1],g=function(e){var n,i=o(e),a=null===(n=r.current)||void 0===n?void 0:n.querySelectorAll(\".\".concat(t,\"-item\"))[i];return(null==a?void 0:a.offsetParent)&&a},v=Ie(m.useState(null),2),b=v[0],y=v[1],w=Ie(m.useState(null),2),x=w[0],S=w[1];Pi((function(){if(h!==n){var e=g(h),t=g(n),r=zm(e,u),o=zm(t,u);p(n),y(r),S(o),e&&t?a():s()}}),[n]);var C=m.useMemo((function(){var e;return Hm(u?null!==(e=null==b?void 0:b.top)&&void 0!==e?e:0:\"rtl\"===l?-(null==b?void 0:b.right):null==b?void 0:b.left)}),[u,l,b]),k=m.useMemo((function(){var e;return Hm(u?null!==(e=null==x?void 0:x.top)&&void 0!==e?e:0:\"rtl\"===l?-(null==x?void 0:x.right):null==x?void 0:x.left)}),[u,l,x]);return b&&x?m.createElement(Vl,{visible:!0,motionName:i,motionAppear:!0,onAppearStart:function(){return u?{transform:\"translateY(var(--thumb-start-top))\",height:\"var(--thumb-start-height)\"}:{transform:\"translateX(var(--thumb-start-left))\",width:\"var(--thumb-start-width)\"}},onAppearActive:function(){return u?{transform:\"translateY(var(--thumb-active-top))\",height:\"var(--thumb-active-height)\"}:{transform:\"translateX(var(--thumb-active-left))\",width:\"var(--thumb-active-width)\"}},onVisibleChanged:function(){y(null),S(null),s()}},(function(e,r){var n=e.className,o=At(At({},e.style),{},{\"--thumb-start-left\":C,\"--thumb-start-width\":Hm(null==b?void 0:b.width),\"--thumb-active-left\":k,\"--thumb-active-width\":Hm(null==x?void 0:x.width),\"--thumb-start-top\":C,\"--thumb-start-height\":Hm(null==b?void 0:b.height),\"--thumb-active-top\":k,\"--thumb-active-height\":Hm(null==x?void 0:x.height)}),i={ref:Cn(d,r),style:o,className:ze()(\"\".concat(t,\"-thumb\"),n)};return m.createElement(\"div\",i)})):null}var Vm=[\"prefixCls\",\"direction\",\"vertical\",\"options\",\"disabled\",\"defaultValue\",\"value\",\"name\",\"onChange\",\"className\",\"motionName\"];var Wm=function(e){var t=e.prefixCls,r=e.className,n=e.disabled,o=e.checked,i=e.label,a=e.title,s=e.value,l=e.name,c=e.onChange,u=e.onFocus,d=e.onBlur,f=e.onKeyDown,h=e.onKeyUp,p=e.onMouseDown;return m.createElement(\"label\",{className:ze()(r,De({},\"\".concat(t,\"-item-disabled\"),n)),onMouseDown:p},m.createElement(\"input\",{name:l,className:\"\".concat(t,\"-item-input\"),type:\"radio\",disabled:n,checked:o,onChange:function(e){n||c(e,s)},onFocus:u,onBlur:d,onKeyDown:f,onKeyUp:h}),m.createElement(\"div\",{className:\"\".concat(t,\"-item-label\"),title:a,\"aria-selected\":o},i))},Gm=m.forwardRef((function(e,t){var r,n,o=e.prefixCls,i=void 0===o?\"rc-segmented\":o,a=e.direction,s=e.vertical,l=e.options,c=void 0===l?[]:l,u=e.disabled,d=e.defaultValue,f=e.value,h=e.name,p=e.onChange,g=e.className,v=void 0===g?\"\":g,b=e.motionName,y=void 0===b?\"thumb-motion\":b,w=Be(e,Vm),x=m.useRef(null),S=m.useMemo((function(){return Cn(x,t)}),[x,t]),C=m.useMemo((function(){return function(e){return e.map((function(e){if(\"object\"===Ne(e)&&null!==e){var t=function(e){return void 0!==e.title?e.title:\"object\"!==Ne(e.label)?null===(t=e.label)||void 0===t?void 0:t.toString():void 0;var t}(e);return At(At({},e),{},{title:t})}return{label:null==e?void 0:e.toString(),title:null==e?void 0:e.toString(),value:e}}))}(c)}),[c]),k=Ie(Ks(null===(r=C[0])||void 0===r?void 0:r.value,{value:f,defaultValue:d}),2),E=k[0],O=k[1],A=Ie(m.useState(!1),2),T=A[0],j=A[1],P=function(e,t){O(t),null==p||p(t)},M=kf(w,[\"children\"]),R=Ie(m.useState(!1),2),_=R[0],I=R[1],N=Ie(m.useState(!1),2),F=N[0],D=N[1],B=function(){D(!0)},L=function(){D(!1)},z=function(){I(!1)},H=function(e){\"Tab\"===e.key&&I(!0)},U=function(e){var t=C.findIndex((function(e){return e.value===E})),r=C.length,n=C[(t+e+r)%r];n&&(O(n.value),null==p||p(n.value))},V=function(e){switch(e.key){case\"ArrowLeft\":case\"ArrowUp\":U(-1);break;case\"ArrowRight\":case\"ArrowDown\":U(1)}};return m.createElement(\"div\",Te({role:\"radiogroup\",\"aria-label\":\"segmented control\",tabIndex:u?void 0:0},M,{className:ze()(i,(n={},De(n,\"\".concat(i,\"-rtl\"),\"rtl\"===a),De(n,\"\".concat(i,\"-disabled\"),u),De(n,\"\".concat(i,\"-vertical\"),s),n),v),ref:S}),m.createElement(\"div\",{className:\"\".concat(i,\"-group\")},m.createElement(Um,{vertical:s,prefixCls:i,value:E,containerRef:x,motionName:\"\".concat(i,\"-\").concat(y),direction:a,getValueIndex:function(e){return C.findIndex((function(t){return t.value===e}))},onMotionStart:function(){j(!0)},onMotionEnd:function(){j(!1)}}),C.map((function(e){var t;return m.createElement(Wm,Te({},e,{name:h,key:e.value,prefixCls:i,className:ze()(e.className,\"\".concat(i,\"-item\"),(t={},De(t,\"\".concat(i,\"-item-selected\"),e.value===E&&!T),De(t,\"\".concat(i,\"-item-focused\"),F&&_&&e.value===E),t)),checked:e.value===E,onChange:P,onFocus:B,onBlur:L,onKeyDown:V,onKeyUp:H,onMouseDown:z,disabled:!!u||!!e.disabled}))}))))}));const qm=Gm;function Km(e,t){return{[`${e}, ${e}:hover, ${e}:focus`]:{color:t.colorTextDisabled,cursor:\"not-allowed\"}}}function Xm(e){return{backgroundColor:e.itemSelectedBg,boxShadow:e.boxShadowTertiary}}const Ym=Object.assign({overflow:\"hidden\"},tc),$m=e=>{const{componentCls:t}=e,r=e.calc(e.controlHeight).sub(e.calc(e.trackPadding).mul(2)).equal(),n=e.calc(e.controlHeightLG).sub(e.calc(e.trackPadding).mul(2)).equal(),o=e.calc(e.controlHeightSM).sub(e.calc(e.trackPadding).mul(2)).equal();return{[t]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},rc(e)),{display:\"inline-block\",padding:e.trackPadding,color:e.itemColor,background:e.trackBg,borderRadius:e.borderRadius,transition:`all ${e.motionDurationMid} ${e.motionEaseInOut}`}),oc(e)),{[`${t}-group`]:{position:\"relative\",display:\"flex\",alignItems:\"stretch\",justifyItems:\"flex-start\",flexDirection:\"row\",width:\"100%\"},[`&${t}-rtl`]:{direction:\"rtl\"},[`&${t}-vertical`]:{[`${t}-group`]:{flexDirection:\"column\"},[`${t}-thumb`]:{width:\"100%\",height:0,padding:`0 ${Si(e.paddingXXS)}`}},[`&${t}-block`]:{display:\"flex\"},[`&${t}-block ${t}-item`]:{flex:1,minWidth:0},[`${t}-item`]:{position:\"relative\",textAlign:\"center\",cursor:\"pointer\",transition:`color ${e.motionDurationMid} ${e.motionEaseInOut}`,borderRadius:e.borderRadiusSM,transform:\"translateZ(0)\",\"&-selected\":Object.assign(Object.assign({},Xm(e)),{color:e.itemSelectedColor}),\"&-focused\":Object.assign({},nc(e)),\"&::after\":{content:'\"\"',position:\"absolute\",zIndex:-1,width:\"100%\",height:\"100%\",top:0,insetInlineStart:0,borderRadius:\"inherit\",opacity:0,transition:`opacity ${e.motionDurationMid}`,pointerEvents:\"none\"},[`&:hover:not(${t}-item-selected):not(${t}-item-disabled)`]:{color:e.itemHoverColor,\"&::after\":{opacity:1,backgroundColor:e.itemHoverBg}},[`&:active:not(${t}-item-selected):not(${t}-item-disabled)`]:{color:e.itemHoverColor,\"&::after\":{opacity:1,backgroundColor:e.itemActiveBg}},\"&-label\":Object.assign({minHeight:r,lineHeight:Si(r),padding:`0 ${Si(e.segmentedPaddingHorizontal)}`},Ym),\"&-icon + *\":{marginInlineStart:e.calc(e.marginSM).div(2).equal()},\"&-input\":{position:\"absolute\",insetBlockStart:0,insetInlineStart:0,width:0,height:0,opacity:0,pointerEvents:\"none\"}},[`${t}-thumb`]:Object.assign(Object.assign({},Xm(e)),{position:\"absolute\",insetBlockStart:0,insetInlineStart:0,width:0,height:\"100%\",padding:`${Si(e.paddingXXS)} 0`,borderRadius:e.borderRadiusSM,transition:`transform ${e.motionDurationSlow} ${e.motionEaseInOut}, height ${e.motionDurationSlow} ${e.motionEaseInOut}`,[`& ~ ${t}-item:not(${t}-item-selected):not(${t}-item-disabled)::after`]:{backgroundColor:\"transparent\"}}),[`&${t}-lg`]:{borderRadius:e.borderRadiusLG,[`${t}-item-label`]:{minHeight:n,lineHeight:Si(n),padding:`0 ${Si(e.segmentedPaddingHorizontal)}`,fontSize:e.fontSizeLG},[`${t}-item, ${t}-thumb`]:{borderRadius:e.borderRadius}},[`&${t}-sm`]:{borderRadius:e.borderRadiusSM,[`${t}-item-label`]:{minHeight:o,lineHeight:Si(o),padding:`0 ${Si(e.segmentedPaddingHorizontalSM)}`},[`${t}-item, ${t}-thumb`]:{borderRadius:e.borderRadiusXS}}}),Km(`&-disabled ${t}-item`,e)),Km(`${t}-item-disabled`,e)),{[`${t}-thumb-motion-appear-active`]:{transition:`transform ${e.motionDurationSlow} ${e.motionEaseInOut}, width ${e.motionDurationSlow} ${e.motionEaseInOut}`,willChange:\"transform, width\"},[`&${t}-shape-round`]:{borderRadius:9999,[`${t}-item, ${t}-thumb`]:{borderRadius:9999}}})}},Zm=Iu(\"Segmented\",(e=>{const{lineWidth:t,calc:r}=e,n=Au(e,{segmentedPaddingHorizontal:r(e.controlPaddingHorizontal).sub(t).equal(),segmentedPaddingHorizontalSM:r(e.controlPaddingHorizontalSM).sub(t).equal()});return[$m(n)]}),(e=>{const{colorTextLabel:t,colorText:r,colorFillSecondary:n,colorBgElevated:o,colorFill:i,lineWidthBold:a,colorBgLayout:s}=e;return{trackPadding:a,trackBg:s,itemColor:t,itemHoverColor:r,itemHoverBg:n,itemSelectedBg:o,itemActiveBg:i,itemSelectedColor:r}}));var Qm=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r};const Jm=m.forwardRef(((e,t)=>{const r=Wh(),{prefixCls:n,className:o,rootClassName:i,block:a,options:s=[],size:l=\"middle\",style:c,vertical:u,shape:d=\"default\",name:f=r}=e,h=Qm(e,[\"prefixCls\",\"className\",\"rootClassName\",\"block\",\"options\",\"size\",\"style\",\"vertical\",\"shape\",\"name\"]),{getPrefixCls:p,direction:g,className:v,style:b}=Zo(\"segmented\"),y=p(\"segmented\",n),[w,x,S]=Zm(y),C=Rf(l),k=m.useMemo((()=>s.map((e=>{if(function(e){return\"object\"==typeof e&&!!(null==e?void 0:e.icon)}(e)){const{icon:t,label:r}=e,n=Qm(e,[\"icon\",\"label\"]);return Object.assign(Object.assign({},n),{label:m.createElement(m.Fragment,null,m.createElement(\"span\",{className:`${y}-item-icon`},t),r&&m.createElement(\"span\",null,r))})}return e}))),[s,y]),E=ze()(o,i,v,{[`${y}-block`]:a,[`${y}-sm`]:\"small\"===C,[`${y}-lg`]:\"large\"===C,[`${y}-vertical`]:u,[`${y}-shape-${d}`]:\"round\"===d},x,S),O=Object.assign(Object.assign({},b),c);return w(m.createElement(qm,Object.assign({},h,{name:f,className:E,style:O,options:k,ref:t,prefixCls:y,direction:g,vertical:u})))})),eg=Jm,tg=m.createContext({}),rg=m.createContext({}),ng=e=>e instanceof Im?e:new Im(e),og=e=>Math.round(Number(e||0)),ig=e=>og(100*e.toHsb().a),ag=(e,t)=>{const r=e.toRgb();if(!r.r&&!r.g&&!r.b){const r=e.toHsb();return r.a=t||1,ng(r)}return r.a=t||1,ng(r)},sg=(e,t)=>{const r=[{percent:0,color:e[0].color}].concat(Vo(e),[{percent:100,color:e[e.length-1].color}]);for(let e=0;e<r.length-1;e+=1){const n=r[e].percent,o=r[e+1].percent,i=r[e].color,a=r[e+1].color;if(n<=t&&t<=o){const e=o-n;if(0===e)return i;const r=(t-n)/e*100,s=new vm(i),l=new vm(a);return s.mix(l,r).toRgbString()}}return\"\"},lg=e=>{let{prefixCls:t,value:r,onChange:n}=e;return m.createElement(\"div\",{className:`${t}-clear`,onClick:()=>{if(n&&r&&!r.cleared){const e=r.toHsb();e.a=0;const t=ng(e);t.cleared=!0,n(t)}}})},cg=function(e){var t=e.className,r=e.customizeIcon,n=e.customizeIconProps,o=e.children,i=e.onMouseDown,a=e.onClick,s=\"function\"==typeof r?r(n):r;return m.createElement(\"span\",{className:t,onMouseDown:function(e){e.preventDefault(),null==i||i(e)},style:{userSelect:\"none\",WebkitUserSelect:\"none\"},unselectable:\"on\",onClick:a,\"aria-hidden\":!0},void 0!==s?s:m.createElement(\"span\",{className:ze()(t.split(/\\s+/).map((function(e){return\"\".concat(e,\"-icon\")})))},o))};var ug=m.createContext(null);function dg(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:250,t=m.useRef(null),r=m.useRef(null);return m.useEffect((function(){return function(){window.clearTimeout(r.current)}}),[]),[function(){return t.current},function(n){(n||null===t.current)&&(t.current=n),window.clearTimeout(r.current),r.current=window.setTimeout((function(){t.current=null}),e)}]}var fg=[\"prefixCls\",\"invalidate\",\"item\",\"renderItem\",\"responsive\",\"responsiveDisabled\",\"registerSize\",\"itemKey\",\"className\",\"style\",\"children\",\"display\",\"order\",\"component\"],hg=void 0;function pg(e,t){var r=e.prefixCls,n=e.invalidate,o=e.item,i=e.renderItem,a=e.responsive,s=e.responsiveDisabled,l=e.registerSize,c=e.itemKey,u=e.className,d=e.style,f=e.children,h=e.display,p=e.order,g=e.component,v=void 0===g?\"div\":g,b=Be(e,fg),y=a&&!h;function w(e){l(c,e)}m.useEffect((function(){return function(){w(null)}}),[]);var x,S=i&&o!==hg?i(o,{index:p}):f;n||(x={opacity:y?0:1,height:y?0:hg,overflowY:y?\"hidden\":hg,order:a?p:hg,pointerEvents:y?\"none\":hg,position:y?\"absolute\":hg});var C={};y&&(C[\"aria-hidden\"]=!0);var k=m.createElement(v,Te({className:ze()(!n&&r,u),style:At(At({},x),d)},C,b,{ref:t}),S);return a&&(k=m.createElement(Hh,{onResize:function(e){w(e.offsetWidth)},disabled:s},k)),k}var mg=m.forwardRef(pg);mg.displayName=\"Item\";const gg=mg;function vg(e,t){var r=Ie(m.useState(t),2),n=r[0],o=r[1];return[n,Ws((function(t){e((function(){o(t)}))}))]}var bg=m.createContext(null),yg=[\"component\"],wg=[\"className\"],xg=[\"className\"],Sg=function(e,t){var r=m.useContext(bg);if(!r){var n=e.component,o=void 0===n?\"div\":n,i=Be(e,yg);return m.createElement(o,Te({},i,{ref:t}))}var a=r.className,s=Be(r,wg),l=e.className,c=Be(e,xg);return m.createElement(bg.Provider,{value:null},m.createElement(gg,Te({ref:t,className:ze()(a,l)},s,c)))},Cg=m.forwardRef(Sg);Cg.displayName=\"RawItem\";const kg=Cg;var Eg=[\"prefixCls\",\"data\",\"renderItem\",\"renderRawItem\",\"itemKey\",\"itemWidth\",\"ssr\",\"style\",\"className\",\"maxCount\",\"renderRest\",\"renderRawRest\",\"suffix\",\"component\",\"itemComponent\",\"onVisibleChange\"],Og=\"responsive\",Ag=\"invalidate\";function Tg(e){return\"+ \".concat(e.length,\" ...\")}function jg(e,t){var r,n=e.prefixCls,o=void 0===n?\"rc-overflow\":n,i=e.data,a=void 0===i?[]:i,s=e.renderItem,l=e.renderRawItem,c=e.itemKey,u=e.itemWidth,d=void 0===u?10:u,f=e.ssr,h=e.style,p=e.className,g=e.maxCount,v=e.renderRest,b=e.renderRawRest,y=e.suffix,w=e.component,x=void 0===w?\"div\":w,S=e.itemComponent,C=e.onVisibleChange,k=Be(e,Eg),E=\"full\"===f,O=(r=m.useRef(null),function(e){r.current||(r.current=[],function(e){if(\"undefined\"==typeof MessageChannel)Ol(e);else{var t=new MessageChannel;t.port1.onmessage=function(){return e()},t.port2.postMessage(void 0)}}((function(){(0,js.unstable_batchedUpdates)((function(){r.current.forEach((function(e){e()})),r.current=null}))}))),r.current.push(e)}),A=Ie(vg(O,null),2),T=A[0],j=A[1],P=T||0,M=Ie(vg(O,new Map),2),R=M[0],_=M[1],I=Ie(vg(O,0),2),N=I[0],F=I[1],D=Ie(vg(O,0),2),B=D[0],L=D[1],z=Ie(vg(O,0),2),H=z[0],U=z[1],V=Ie((0,m.useState)(null),2),W=V[0],G=V[1],q=Ie((0,m.useState)(null),2),K=q[0],X=q[1],Y=m.useMemo((function(){return null===K&&E?Number.MAX_SAFE_INTEGER:K||0}),[K,T]),$=Ie((0,m.useState)(!1),2),Z=$[0],Q=$[1],J=\"\".concat(o,\"-item\"),ee=Math.max(N,B),te=g===Og,re=a.length&&te,ne=g===Ag,oe=re||\"number\"==typeof g&&a.length>g,ie=(0,m.useMemo)((function(){var e=a;return re?e=null===T&&E?a:a.slice(0,Math.min(a.length,P/d)):\"number\"==typeof g&&(e=a.slice(0,g)),e}),[a,d,T,g,re]),ae=(0,m.useMemo)((function(){return re?a.slice(Y+1):a.slice(ie.length)}),[a,ie,re,Y]),se=(0,m.useCallback)((function(e,t){var r;return\"function\"==typeof c?c(e):null!==(r=c&&(null==e?void 0:e[c]))&&void 0!==r?r:t}),[c]),le=(0,m.useCallback)(s||function(e){return e},[s]);function ce(e,t,r){(K!==e||void 0!==t&&t!==W)&&(X(e),r||(Q(e<a.length-1),null==C||C(e)),void 0!==t&&G(t))}function ue(e,t){_((function(r){var n=new Map(r);return null===t?n.delete(e):n.set(e,t),n}))}function de(e){return R.get(se(ie[e],e))}Pi((function(){if(P&&\"number\"==typeof ee&&ie){var e=H,t=ie.length,r=t-1;if(!t)return void ce(0,null);for(var n=0;n<t;n+=1){var o=de(n);if(E&&(o=o||0),void 0===o){ce(n-1,void 0,!0);break}if(e+=o,0===r&&e<=P||n===r-1&&e+de(r)<=P){ce(r,null);break}if(e+ee>P){ce(n-1,e-o-H+B);break}}y&&de(0)+H>P&&G(null)}}),[P,R,B,H,se,ie]);var fe=Z&&!!ae.length,he={};null!==W&&re&&(he={position:\"absolute\",left:W,top:0});var pe={prefixCls:J,responsive:re,component:S,invalidate:ne},me=l?function(e,t){var r=se(e,t);return m.createElement(bg.Provider,{key:r,value:At(At({},pe),{},{order:t,item:e,itemKey:r,registerSize:ue,display:t<=Y})},l(e,t))}:function(e,t){var r=se(e,t);return m.createElement(gg,Te({},pe,{order:t,key:r,item:e,renderItem:le,itemKey:r,registerSize:ue,display:t<=Y}))},ge={order:fe?Y:Number.MAX_SAFE_INTEGER,className:\"\".concat(J,\"-rest\"),registerSize:function(e,t){L(t),F(B)},display:fe},ve=v||Tg,be=b?m.createElement(bg.Provider,{value:At(At({},pe),ge)},b(ae)):m.createElement(gg,Te({},pe,ge),\"function\"==typeof ve?ve(ae):ve),ye=m.createElement(x,Te({className:ze()(!ne&&o,p),style:h,ref:t},k),ie.map(me),oe?be:null,y&&m.createElement(gg,Te({},pe,{responsive:te,responsiveDisabled:!re,order:Y,className:\"\".concat(J,\"-suffix\"),registerSize:function(e,t){U(t)},display:!0,style:he}),y));return te?m.createElement(Hh,{onResize:function(e,t){j(t.clientWidth)},disabled:!re},ye):ye}var Pg=m.forwardRef(jg);Pg.displayName=\"Overflow\",Pg.Item=kg,Pg.RESPONSIVE=Og,Pg.INVALIDATE=Ag;const Mg=Pg;var Rg=[\"prefixCls\",\"id\",\"inputElement\",\"autoFocus\",\"autoComplete\",\"editable\",\"activeDescendantId\",\"value\",\"open\",\"attrs\"],_g=function(e,t){var r=e.prefixCls,n=e.id,o=e.inputElement,i=e.autoFocus,a=e.autoComplete,s=e.editable,l=e.activeDescendantId,c=e.value,u=e.open,d=e.attrs,f=Be(e,Rg),h=o||m.createElement(\"input\",null),p=h,g=p.ref,v=p.props;return h.props,m.cloneElement(h,At(At(At({type:\"search\"},function(e,t,r){var n=At(At({},e),r?t:{});return Object.keys(t).forEach((function(r){var o=t[r];\"function\"==typeof o&&(n[r]=function(){for(var t,n=arguments.length,i=new Array(n),a=0;a<n;a++)i[a]=arguments[a];return o.apply(void 0,i),null===(t=e[r])||void 0===t?void 0:t.call.apply(t,[e].concat(i))})})),n}(f,v,!0)),{},{id:n,ref:Cn(t,g),autoComplete:a||\"off\",autoFocus:i,className:ze()(\"\".concat(r,\"-selection-search-input\"),null==v?void 0:v.className),role:\"combobox\",\"aria-expanded\":u||!1,\"aria-haspopup\":\"listbox\",\"aria-owns\":\"\".concat(n,\"_list\"),\"aria-autocomplete\":\"list\",\"aria-controls\":\"\".concat(n,\"_list\"),\"aria-activedescendant\":u?l:void 0},d),{},{value:s?c:\"\",readOnly:!s,unselectable:s?null:\"on\",style:At(At({},v.style),{},{opacity:s?null:0})}))};const Ig=m.forwardRef(_g);function Ng(e){return Array.isArray(e)?e:void 0!==e?[e]:[]}var Fg=\"undefined\"!=typeof window&&window.document&&window.document.documentElement;function Dg(e){return[\"string\",\"number\"].includes(Ne(e))}function Bg(e){var t=void 0;return e&&(Dg(e.title)?t=e.title.toString():Dg(e.label)&&(t=e.label.toString())),t}function Lg(e){var t;return null!==(t=e.key)&&void 0!==t?t:e.value}var zg=function(e){e.preventDefault(),e.stopPropagation()};const Hg=function(e){var t,r,n=e.id,o=e.prefixCls,i=e.values,a=e.open,s=e.searchValue,l=e.autoClearSearchValue,c=e.inputRef,u=e.placeholder,d=e.disabled,f=e.mode,h=e.showSearch,p=e.autoFocus,g=e.autoComplete,v=e.activeDescendantId,b=e.tabIndex,y=e.removeIcon,w=e.maxTagCount,x=e.maxTagTextLength,S=e.maxTagPlaceholder,C=void 0===S?function(e){return\"+ \".concat(e.length,\" ...\")}:S,k=e.tagRender,E=e.onToggleOpen,O=e.onRemove,A=e.onInputChange,T=e.onInputPaste,j=e.onInputKeyDown,P=e.onInputMouseDown,M=e.onInputCompositionStart,R=e.onInputCompositionEnd,_=e.onInputBlur,I=m.useRef(null),N=Ie((0,m.useState)(0),2),F=N[0],D=N[1],B=Ie((0,m.useState)(!1),2),L=B[0],z=B[1],H=\"\".concat(o,\"-selection\"),U=a||\"multiple\"===f&&!1===l||\"tags\"===f?s:\"\",V=\"tags\"===f||\"multiple\"===f&&!1===l||h&&(a||L);t=function(){D(I.current.scrollWidth)},r=[U],Fg?m.useLayoutEffect(t,r):m.useEffect(t,r);var W=function(e,t,r,n,o){return m.createElement(\"span\",{title:Bg(e),className:ze()(\"\".concat(H,\"-item\"),De({},\"\".concat(H,\"-item-disabled\"),r))},m.createElement(\"span\",{className:\"\".concat(H,\"-item-content\")},t),n&&m.createElement(cg,{className:\"\".concat(H,\"-item-remove\"),onMouseDown:zg,onClick:o,customizeIcon:y},\"×\"))},G=function(e,t,r,n,o,i){return m.createElement(\"span\",{onMouseDown:function(e){zg(e),E(!a)}},k({label:t,value:e,disabled:r,closable:n,onClose:o,isMaxTag:!!i}))},q=m.createElement(\"div\",{className:\"\".concat(H,\"-search\"),style:{width:F},onFocus:function(){z(!0)},onBlur:function(){z(!1)}},m.createElement(Ig,{ref:c,open:a,prefixCls:o,id:n,inputElement:null,disabled:d,autoFocus:p,autoComplete:g,editable:V,activeDescendantId:v,value:U,onKeyDown:j,onMouseDown:P,onChange:A,onPaste:T,onCompositionStart:M,onCompositionEnd:R,onBlur:_,tabIndex:b,attrs:Jc(e,!0)}),m.createElement(\"span\",{ref:I,className:\"\".concat(H,\"-search-mirror\"),\"aria-hidden\":!0},U,\" \")),K=m.createElement(Mg,{prefixCls:\"\".concat(H,\"-overflow\"),data:i,renderItem:function(e){var t=e.disabled,r=e.label,n=e.value,o=!d&&!t,i=r;if(\"number\"==typeof x&&(\"string\"==typeof r||\"number\"==typeof r)){var a=String(i);a.length>x&&(i=\"\".concat(a.slice(0,x),\"...\"))}var s=function(t){t&&t.stopPropagation(),O(e)};return\"function\"==typeof k?G(n,i,t,o,s):W(e,i,t,o,s)},renderRest:function(e){if(!i.length)return null;var t=\"function\"==typeof C?C(e):C;return\"function\"==typeof k?G(void 0,t,!1,!1,void 0,!0):W({title:t},t,!1)},suffix:q,itemKey:Lg,maxCount:w});return m.createElement(\"span\",{className:\"\".concat(H,\"-wrap\")},K,!i.length&&!U&&m.createElement(\"span\",{className:\"\".concat(H,\"-placeholder\")},u))},Ug=function(e){var t=e.inputElement,r=e.prefixCls,n=e.id,o=e.inputRef,i=e.disabled,a=e.autoFocus,s=e.autoComplete,l=e.activeDescendantId,c=e.mode,u=e.open,d=e.values,f=e.placeholder,h=e.tabIndex,p=e.showSearch,g=e.searchValue,v=e.activeValue,b=e.maxLength,y=e.onInputKeyDown,w=e.onInputMouseDown,x=e.onInputChange,S=e.onInputPaste,C=e.onInputCompositionStart,k=e.onInputCompositionEnd,E=e.onInputBlur,O=e.title,A=Ie(m.useState(!1),2),T=A[0],j=A[1],P=\"combobox\"===c,M=P||p,R=d[0],_=g||\"\";P&&v&&!T&&(_=v),m.useEffect((function(){P&&j(!1)}),[P,v]);var I=!(\"combobox\"!==c&&!u&&!p||!_),N=void 0===O?Bg(R):O,F=m.useMemo((function(){return R?null:m.createElement(\"span\",{className:\"\".concat(r,\"-selection-placeholder\"),style:I?{visibility:\"hidden\"}:void 0},f)}),[R,I,f,r]);return m.createElement(\"span\",{className:\"\".concat(r,\"-selection-wrap\")},m.createElement(\"span\",{className:\"\".concat(r,\"-selection-search\")},m.createElement(Ig,{ref:o,prefixCls:r,id:n,open:u,inputElement:t,disabled:i,autoFocus:a,autoComplete:s,editable:M,activeDescendantId:l,value:_,onKeyDown:y,onMouseDown:w,onChange:function(e){j(!0),x(e)},onPaste:S,onCompositionStart:C,onCompositionEnd:k,onBlur:E,tabIndex:h,attrs:Jc(e,!0),maxLength:P?b:void 0})),!P&&R?m.createElement(\"span\",{className:\"\".concat(r,\"-selection-item\"),title:N,style:I?{visibility:\"hidden\"}:void 0},R.label):null,F)};var Vg=function(e,t){var r=(0,m.useRef)(null),n=(0,m.useRef)(!1),o=e.prefixCls,i=e.open,a=e.mode,s=e.showSearch,l=e.tokenWithEnter,c=e.disabled,u=e.prefix,d=e.autoClearSearchValue,f=e.onSearch,h=e.onSearchSubmit,p=e.onToggleOpen,g=e.onInputKeyDown,v=e.onInputBlur,b=e.domRef;m.useImperativeHandle(t,(function(){return{focus:function(e){r.current.focus(e)},blur:function(){r.current.blur()}}}));var y=Ie(dg(0),2),w=y[0],x=y[1],S=(0,m.useRef)(null),C=function(e){!1!==f(e,!0,n.current)&&p(!0)},k={inputRef:r,onInputKeyDown:function(e){var t,o=e.which,s=r.current instanceof HTMLTextAreaElement;s||!i||o!==$c.UP&&o!==$c.DOWN||e.preventDefault(),g&&g(e),o!==$c.ENTER||\"tags\"!==a||n.current||i||null==h||h(e.target.value),s&&!i&&~[$c.UP,$c.DOWN,$c.LEFT,$c.RIGHT].indexOf(o)||(t=o)&&![$c.ESC,$c.SHIFT,$c.BACKSPACE,$c.TAB,$c.WIN_KEY,$c.ALT,$c.META,$c.WIN_KEY_RIGHT,$c.CTRL,$c.SEMICOLON,$c.EQUALS,$c.CAPS_LOCK,$c.CONTEXT_MENU,$c.F1,$c.F2,$c.F3,$c.F4,$c.F5,$c.F6,$c.F7,$c.F8,$c.F9,$c.F10,$c.F11,$c.F12].includes(t)&&p(!0)},onInputMouseDown:function(){x(!0)},onInputChange:function(e){var t=e.target.value;if(l&&S.current&&/[\\r\\n]/.test(S.current)){var r=S.current.replace(/[\\r\\n]+$/,\"\").replace(/\\r\\n/g,\" \").replace(/[\\r\\n]/g,\" \");t=t.replace(r,S.current)}S.current=null,C(t)},onInputPaste:function(e){var t=e.clipboardData,r=null==t?void 0:t.getData(\"text\");S.current=r||\"\"},onInputCompositionStart:function(){n.current=!0},onInputCompositionEnd:function(e){n.current=!1,\"combobox\"!==a&&C(e.target.value)},onInputBlur:v},E=\"multiple\"===a||\"tags\"===a?m.createElement(Hg,Te({},e,k)):m.createElement(Ug,Te({},e,k));return m.createElement(\"div\",{ref:b,className:\"\".concat(o,\"-selector\"),onClick:function(e){e.target!==r.current&&(void 0!==document.body.style.msTouchAction?setTimeout((function(){r.current.focus()})):r.current.focus())},onMouseDown:function(e){var t=w();e.target===r.current||t||\"combobox\"===a&&c||e.preventDefault(),(\"combobox\"===a||s&&t)&&i||(i&&!1!==d&&f(\"\",!0,!1),p())}},u&&m.createElement(\"div\",{className:\"\".concat(o,\"-prefix\")},u),E)};const Wg=m.forwardRef(Vg);var Gg=[\"prefixCls\",\"disabled\",\"visible\",\"children\",\"popupElement\",\"animation\",\"transitionName\",\"dropdownStyle\",\"dropdownClassName\",\"direction\",\"placement\",\"builtinPlacements\",\"dropdownMatchSelectWidth\",\"dropdownRender\",\"dropdownAlign\",\"getPopupContainer\",\"empty\",\"getTriggerDOMNode\",\"onPopupVisibleChange\",\"onPopupMouseEnter\"],qg=function(e,t){var r=e.prefixCls,n=(e.disabled,e.visible),o=e.children,i=e.popupElement,a=e.animation,s=e.transitionName,l=e.dropdownStyle,c=e.dropdownClassName,u=e.direction,d=void 0===u?\"ltr\":u,f=e.placement,h=e.builtinPlacements,p=e.dropdownMatchSelectWidth,g=e.dropdownRender,v=e.dropdownAlign,b=e.getPopupContainer,y=e.empty,w=e.getTriggerDOMNode,x=e.onPopupVisibleChange,S=e.onPopupMouseEnter,C=Be(e,Gg),k=\"\".concat(r,\"-dropdown\"),E=i;g&&(E=g(i));var O=m.useMemo((function(){return h||function(e){var t=!0===e?0:1;return{bottomLeft:{points:[\"tl\",\"bl\"],offset:[0,4],overflow:{adjustX:t,adjustY:1},htmlRegion:\"scroll\"},bottomRight:{points:[\"tr\",\"br\"],offset:[0,4],overflow:{adjustX:t,adjustY:1},htmlRegion:\"scroll\"},topLeft:{points:[\"bl\",\"tl\"],offset:[0,-4],overflow:{adjustX:t,adjustY:1},htmlRegion:\"scroll\"},topRight:{points:[\"br\",\"tr\"],offset:[0,-4],overflow:{adjustX:t,adjustY:1},htmlRegion:\"scroll\"}}}(p)}),[h,p]),A=a?\"\".concat(k,\"-\").concat(a):s,T=\"number\"==typeof p,j=m.useMemo((function(){return T?null:!1===p?\"minWidth\":\"width\"}),[p,T]),P=l;T&&(P=At(At({},P),{},{width:p}));var M=m.useRef(null);return m.useImperativeHandle(t,(function(){return{getPopupElement:function(){var e;return null===(e=M.current)||void 0===e?void 0:e.popupElement}}})),m.createElement(gp,Te({},C,{showAction:x?[\"click\"]:[],hideAction:x?[\"click\"]:[],popupPlacement:f||(\"rtl\"===d?\"bottomRight\":\"bottomLeft\"),builtinPlacements:O,prefixCls:k,popupTransitionName:A,popup:m.createElement(\"div\",{onMouseEnter:S},E),ref:M,stretch:j,popupAlign:v,popupVisible:n,getPopupContainer:b,popupClassName:ze()(c,De({},\"\".concat(k,\"-empty\"),y)),popupStyle:P,getTriggerDOMNode:w,onPopupVisibleChange:x}),o)};const Kg=m.forwardRef(qg);function Xg(e,t){var r,n=e.key;return\"value\"in e&&(r=e.value),null!=n?n:void 0!==r?r:\"rc-index-key-\".concat(t)}function Yg(e){return void 0!==e&&!Number.isNaN(e)}function $g(e,t){var r=e||{},n=r.label||(t?\"children\":\"label\");return{label:n,value:r.value||\"value\",options:r.options||\"options\",groupLabel:r.groupLabel||n}}function Zg(e){var t=At({},e);return\"props\"in t||Object.defineProperty(t,\"props\",{get:function(){return Xt(!1,\"Return type is option instead of Option instance. Please read value directly instead of reading from `props`.\"),t}}),t}const Qg=m.createContext(null);function Jg(e){var t=e.visible,r=e.values;return t?m.createElement(\"span\",{\"aria-live\":\"polite\",style:{width:0,height:0,position:\"absolute\",overflow:\"hidden\",opacity:0}},\"\".concat(r.slice(0,50).map((function(e){var t=e.label,r=e.value;return[\"number\",\"string\"].includes(Ne(t))?t:r})).join(\", \")),r.length>50?\", ...\":null):null}var ev=[\"id\",\"prefixCls\",\"className\",\"showSearch\",\"tagRender\",\"direction\",\"omitDomProps\",\"displayValues\",\"onDisplayValuesChange\",\"emptyOptions\",\"notFoundContent\",\"onClear\",\"mode\",\"disabled\",\"loading\",\"getInputElement\",\"getRawInputElement\",\"open\",\"defaultOpen\",\"onDropdownVisibleChange\",\"activeValue\",\"onActiveValueChange\",\"activeDescendantId\",\"searchValue\",\"autoClearSearchValue\",\"onSearch\",\"onSearchSplit\",\"tokenSeparators\",\"allowClear\",\"prefix\",\"suffixIcon\",\"clearIcon\",\"OptionList\",\"animation\",\"transitionName\",\"dropdownStyle\",\"dropdownClassName\",\"dropdownMatchSelectWidth\",\"dropdownRender\",\"dropdownAlign\",\"placement\",\"builtinPlacements\",\"getPopupContainer\",\"showAction\",\"onFocus\",\"onBlur\",\"onKeyUp\",\"onKeyDown\",\"onMouseDown\"],tv=[\"value\",\"onChange\",\"removeIcon\",\"placeholder\",\"autoFocus\",\"maxTagCount\",\"maxTagTextLength\",\"maxTagPlaceholder\",\"choiceTransitionName\",\"onInputKeyDown\",\"onPopupScroll\",\"tabIndex\"],rv=function(e){return\"tags\"===e||\"multiple\"===e},nv=m.forwardRef((function(e,t){var r,n=e.id,o=e.prefixCls,i=e.className,a=e.showSearch,s=e.tagRender,l=e.direction,c=e.omitDomProps,u=e.displayValues,d=e.onDisplayValuesChange,f=e.emptyOptions,h=e.notFoundContent,p=void 0===h?\"Not Found\":h,g=e.onClear,v=e.mode,b=e.disabled,y=e.loading,w=e.getInputElement,x=e.getRawInputElement,S=e.open,C=e.defaultOpen,k=e.onDropdownVisibleChange,E=e.activeValue,O=e.onActiveValueChange,A=e.activeDescendantId,T=e.searchValue,j=e.autoClearSearchValue,P=e.onSearch,M=e.onSearchSplit,R=e.tokenSeparators,_=e.allowClear,I=e.prefix,N=e.suffixIcon,F=e.clearIcon,D=e.OptionList,B=e.animation,L=e.transitionName,z=e.dropdownStyle,H=e.dropdownClassName,U=e.dropdownMatchSelectWidth,V=e.dropdownRender,W=e.dropdownAlign,G=e.placement,q=e.builtinPlacements,K=e.getPopupContainer,X=e.showAction,Y=void 0===X?[]:X,$=e.onFocus,Z=e.onBlur,Q=e.onKeyUp,J=e.onKeyDown,ee=e.onMouseDown,te=Be(e,ev),re=rv(v),ne=(void 0!==a?a:re)||\"combobox\"===v,oe=At({},te);tv.forEach((function(e){delete oe[e]})),null==c||c.forEach((function(e){delete oe[e]}));var ie=Ie(m.useState(!1),2),ae=ie[0],se=ie[1];m.useEffect((function(){se(Gh())}),[]);var le=m.useRef(null),ce=m.useRef(null),ue=m.useRef(null),de=m.useRef(null),fe=m.useRef(null),he=m.useRef(!1),pe=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,t=Ie(m.useState(!1),2),r=t[0],n=t[1],o=m.useRef(null),i=function(){window.clearTimeout(o.current)};return m.useEffect((function(){return i}),[]),[r,function(t,r){i(),o.current=window.setTimeout((function(){n(t),r&&r()}),e)},i]}(),me=Ie(pe,3),ge=me[0],ve=me[1],be=me[2];m.useImperativeHandle(t,(function(){var e,t;return{focus:null===(e=de.current)||void 0===e?void 0:e.focus,blur:null===(t=de.current)||void 0===t?void 0:t.blur,scrollTo:function(e){var t;return null===(t=fe.current)||void 0===t?void 0:t.scrollTo(e)},nativeElement:le.current||ce.current}}));var ye=m.useMemo((function(){var e;if(\"combobox\"!==v)return T;var t=null===(e=u[0])||void 0===e?void 0:e.value;return\"string\"==typeof t||\"number\"==typeof t?String(t):\"\"}),[T,v,u]),we=\"combobox\"===v&&\"function\"==typeof w&&w()||null,xe=\"function\"==typeof x&&x(),Se=kn(ce,null==xe||null===(r=xe.props)||void 0===r?void 0:r.ref),Ce=Ie(m.useState(!1),2),ke=Ce[0],Ee=Ce[1];Pi((function(){Ee(!0)}),[]);var Oe=Ie(Ks(!1,{defaultValue:C,value:S}),2),Ae=Oe[0],je=Oe[1],Pe=!!ke&&Ae,Me=!p&&f;(b||Me&&Pe&&\"combobox\"===v)&&(Pe=!1);var Re=!Me&&Pe,_e=m.useCallback((function(e){var t=void 0!==e?e:!Pe;b||(je(t),Pe!==t&&(null==k||k(t)))}),[b,Pe,je,k]),Fe=m.useMemo((function(){return(R||[]).some((function(e){return[\"\\n\",\"\\r\\n\"].includes(e)}))}),[R]),Le=m.useContext(Qg)||{},He=Le.maxCount,Ue=Le.rawValues,Ve=function(e,t,r){if(!(re&&Yg(He)&&(null==Ue?void 0:Ue.size)>=He)){var n=!0,o=e;null==O||O(null);var i=function(e,t,r){if(!t||!t.length)return null;var n=!1,o=function e(t,r){var o=za(r),i=o[0],a=o.slice(1);if(!i)return[t];var s=t.split(i);return n=n||s.length>1,s.reduce((function(t,r){return[].concat(Vo(t),Vo(e(r,a)))}),[]).filter(Boolean)}(e,t);return n?void 0!==r?o.slice(0,r):o:null}(e,R,Yg(He)?He-Ue.size:void 0),a=r?null:i;return\"combobox\"!==v&&a&&(o=\"\",null==M||M(a),_e(!1),n=!1),P&&ye!==o&&P(o,{source:t?\"typing\":\"effect\"}),n}};m.useEffect((function(){Pe||re||\"combobox\"===v||Ve(\"\",!1,!1)}),[Pe]),m.useEffect((function(){Ae&&b&&je(!1),b&&!he.current&&ve(!1)}),[b]);var We=Ie(dg(),2),Ge=We[0],qe=We[1],Ke=m.useRef(!1),Xe=m.useRef(!1),Ye=[];m.useEffect((function(){return function(){Ye.forEach((function(e){return clearTimeout(e)})),Ye.splice(0,Ye.length)}}),[]);var $e,Ze=Ie(m.useState({}),2)[1];xe&&($e=function(e){_e(e)}),function(e,t,r,n){var o=m.useRef(null);o.current={open:t,triggerOpen:r,customizedTrigger:n},m.useEffect((function(){function e(e){var t,r;if(null===(t=o.current)||void 0===t||!t.customizedTrigger){var n=e.target;n.shadowRoot&&e.composed&&(n=e.composedPath()[0]||n),o.current.open&&[le.current,null===(r=ue.current)||void 0===r?void 0:r.getPopupElement()].filter((function(e){return e})).every((function(e){return!e.contains(n)&&e!==n}))&&o.current.triggerOpen(!1)}}return window.addEventListener(\"mousedown\",e),function(){return window.removeEventListener(\"mousedown\",e)}}),[])}(0,Re,_e,!!xe);var Qe,Je=m.useMemo((function(){return At(At({},e),{},{notFoundContent:p,open:Pe,triggerOpen:Re,id:n,showSearch:ne,multiple:re,toggleOpen:_e})}),[e,p,Re,Pe,n,ne,re,_e]),et=!!N||y;et&&(Qe=m.createElement(cg,{className:ze()(\"\".concat(o,\"-arrow\"),De({},\"\".concat(o,\"-arrow-loading\"),y)),customizeIcon:N,customizeIconProps:{loading:y,searchValue:ye,open:Pe,focused:ge,showSearch:ne}}));var tt,rt=function(e,t,r,n,o){var i=arguments.length>5&&void 0!==arguments[5]&&arguments[5],a=arguments.length>6?arguments[6]:void 0,s=arguments.length>7?arguments[7]:void 0,l=m.useMemo((function(){return\"object\"===Ne(n)?n.clearIcon:o||void 0}),[n,o]);return{allowClear:m.useMemo((function(){return!(i||!n||!r.length&&!a||\"combobox\"===s&&\"\"===a)}),[n,i,r.length,a,s]),clearIcon:m.createElement(cg,{className:\"\".concat(e,\"-clear\"),onMouseDown:t,customizeIcon:l},\"×\")}}(o,(function(){var e;null==g||g(),null===(e=de.current)||void 0===e||e.focus(),d([],{type:\"clear\",values:u}),Ve(\"\",!1,!1)}),u,_,F,b,ye,v),nt=rt.allowClear,ot=rt.clearIcon,it=m.createElement(D,{ref:fe}),at=ze()(o,i,De(De(De(De(De(De(De(De(De(De({},\"\".concat(o,\"-focused\"),ge),\"\".concat(o,\"-multiple\"),re),\"\".concat(o,\"-single\"),!re),\"\".concat(o,\"-allow-clear\"),_),\"\".concat(o,\"-show-arrow\"),et),\"\".concat(o,\"-disabled\"),b),\"\".concat(o,\"-loading\"),y),\"\".concat(o,\"-open\"),Pe),\"\".concat(o,\"-customize-input\"),we),\"\".concat(o,\"-show-search\"),ne)),st=m.createElement(Kg,{ref:ue,disabled:b,prefixCls:o,visible:Re,popupElement:it,animation:B,transitionName:L,dropdownStyle:z,dropdownClassName:H,direction:l,dropdownMatchSelectWidth:U,dropdownRender:V,dropdownAlign:W,placement:G,builtinPlacements:q,getPopupContainer:K,empty:f,getTriggerDOMNode:function(e){return ce.current||e},onPopupVisibleChange:$e,onPopupMouseEnter:function(){Ze({})}},xe?m.cloneElement(xe,{ref:Se}):m.createElement(Wg,Te({},e,{domRef:ce,prefixCls:o,inputElement:we,ref:de,id:n,prefix:I,showSearch:ne,autoClearSearchValue:j,mode:v,activeDescendantId:A,tagRender:s,values:u,open:Pe,onToggleOpen:_e,activeValue:E,searchValue:ye,onSearch:Ve,onSearchSubmit:function(e){e&&e.trim()&&P(e,{source:\"submit\"})},onRemove:function(e){var t=u.filter((function(t){return t!==e}));d(t,{type:\"remove\",values:[e]})},tokenWithEnter:Fe,onInputBlur:function(){Ke.current=!1}})));return tt=xe?st:m.createElement(\"div\",Te({className:at},oe,{ref:le,onMouseDown:function(e){var t,r=e.target,n=null===(t=ue.current)||void 0===t?void 0:t.getPopupElement();if(n&&n.contains(r)){var o=setTimeout((function(){var e,t=Ye.indexOf(o);-1!==t&&Ye.splice(t,1),be(),ae||n.contains(document.activeElement)||null===(e=de.current)||void 0===e||e.focus()}));Ye.push(o)}for(var i=arguments.length,a=new Array(i>1?i-1:0),s=1;s<i;s++)a[s-1]=arguments[s];null==ee||ee.apply(void 0,[e].concat(a))},onKeyDown:function(e){var t,r=Ge(),n=e.key,o=\"Enter\"===n;if(o&&(\"combobox\"!==v&&e.preventDefault(),Pe||_e(!0)),qe(!!ye),\"Backspace\"===n&&!r&&re&&!ye&&u.length){for(var i=Vo(u),a=null,s=i.length-1;s>=0;s-=1){var l=i[s];if(!l.disabled){i.splice(s,1),a=l;break}}a&&d(i,{type:\"remove\",values:[a]})}for(var c=arguments.length,f=new Array(c>1?c-1:0),h=1;h<c;h++)f[h-1]=arguments[h];!Pe||o&&Ke.current||(o&&(Ke.current=!0),null===(t=fe.current)||void 0===t||t.onKeyDown.apply(t,[e].concat(f))),null==J||J.apply(void 0,[e].concat(f))},onKeyUp:function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];var o;Pe&&(null===(o=fe.current)||void 0===o||o.onKeyUp.apply(o,[e].concat(r))),\"Enter\"===e.key&&(Ke.current=!1),null==Q||Q.apply(void 0,[e].concat(r))},onFocus:function(){ve(!0),b||($&&!Xe.current&&$.apply(void 0,arguments),Y.includes(\"focus\")&&_e(!0)),Xe.current=!0},onBlur:function(){he.current=!0,ve(!1,(function(){Xe.current=!1,he.current=!1,_e(!1)})),b||(ye&&(\"tags\"===v?P(ye,{source:\"submit\"}):\"multiple\"===v&&P(\"\",{source:\"blur\"})),Z&&Z.apply(void 0,arguments))}}),m.createElement(Jg,{visible:ge&&!Pe,values:u}),st,Qe,nt&&ot),m.createElement(ug.Provider,{value:Je},tt)}));const ov=nv;var iv=function(){return null};iv.isSelectOptGroup=!0;const av=iv;var sv=function(){return null};sv.isSelectOption=!0;const lv=sv;var cv=m.forwardRef((function(e,t){var r=e.height,n=e.offsetY,o=e.offsetX,i=e.children,a=e.prefixCls,s=e.onInnerResize,l=e.innerProps,c=e.rtl,u=e.extra,d={},f={display:\"flex\",flexDirection:\"column\"};return void 0!==n&&(d={height:r,position:\"relative\",overflow:\"hidden\"},f=At(At({},f),{},De(De(De(De(De({transform:\"translateY(\".concat(n,\"px)\")},c?\"marginRight\":\"marginLeft\",-o),\"position\",\"absolute\"),\"left\",0),\"right\",0),\"top\",0))),m.createElement(\"div\",{style:d},m.createElement(Hh,{onResize:function(e){e.offsetHeight&&s&&s()}},m.createElement(\"div\",Te({style:f,className:ze()(De({},\"\".concat(a,\"-holder-inner\"),a)),ref:t},l),i,u)))}));cv.displayName=\"Filler\";const uv=cv;function dv(e){var t=e.children,r=e.setRef,n=m.useCallback((function(e){r(e)}),[]);return m.cloneElement(t,{ref:n})}const fv=\"object\"===(\"undefined\"==typeof navigator?\"undefined\":Ne(navigator))&&/Firefox/i.test(navigator.userAgent),hv=function(e,t,r,n){var o=(0,m.useRef)(!1),i=(0,m.useRef)(null),a=(0,m.useRef)({top:e,bottom:t,left:r,right:n});return a.current.top=e,a.current.bottom=t,a.current.left=r,a.current.right=n,function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=e?t<0&&a.current.left||t>0&&a.current.right:t<0&&a.current.top||t>0&&a.current.bottom;return r&&n?(clearTimeout(i.current),o.current=!1):n&&!o.current||(clearTimeout(i.current),o.current=!0,i.current=setTimeout((function(){o.current=!1}),50)),!o.current&&n}};const pv=function(){function e(){ei(this,e),De(this,\"maps\",void 0),De(this,\"id\",0),De(this,\"diffRecords\",new Map),this.maps=Object.create(null)}return ri(e,[{key:\"set\",value:function(e,t){this.diffRecords.set(e,this.maps[e]),this.maps[e]=t,this.id+=1}},{key:\"get\",value:function(e){return this.maps[e]}},{key:\"resetRecord\",value:function(){this.diffRecords.clear()}},{key:\"getRecord\",value:function(){return this.diffRecords}}]),e}();function mv(e){var t=parseFloat(e);return isNaN(t)?0:t}var gv=14/15;function vv(e){return Math.floor(Math.pow(e,.5))}function bv(e,t){return(\"touches\"in e?e.touches[0]:e)[t?\"pageX\":\"pageY\"]-window[t?\"scrollX\":\"scrollY\"]}var yv=m.forwardRef((function(e,t){var r=e.prefixCls,n=e.rtl,o=e.scrollOffset,i=e.scrollRange,a=e.onStartMove,s=e.onStopMove,l=e.onScroll,c=e.horizontal,u=e.spinSize,d=e.containerSize,f=e.style,h=e.thumbStyle,p=e.showScrollBar,g=Ie(m.useState(!1),2),v=g[0],b=g[1],y=Ie(m.useState(null),2),w=y[0],x=y[1],S=Ie(m.useState(null),2),C=S[0],k=S[1],E=!n,O=m.useRef(),A=m.useRef(),T=Ie(m.useState(p),2),j=T[0],P=T[1],M=m.useRef(),R=function(){!0!==p&&!1!==p&&(clearTimeout(M.current),P(!0),M.current=setTimeout((function(){P(!1)}),3e3))},_=i-d||0,I=d-u||0,N=m.useMemo((function(){return 0===o||0===_?0:o/_*I}),[o,_,I]),F=m.useRef({top:N,dragging:v,pageY:w,startTop:C});F.current={top:N,dragging:v,pageY:w,startTop:C};var D=function(e){b(!0),x(bv(e,c)),k(F.current.top),a(),e.stopPropagation(),e.preventDefault()};m.useEffect((function(){var e=function(e){e.preventDefault()},t=O.current,r=A.current;return t.addEventListener(\"touchstart\",e,{passive:!1}),r.addEventListener(\"touchstart\",D,{passive:!1}),function(){t.removeEventListener(\"touchstart\",e),r.removeEventListener(\"touchstart\",D)}}),[]);var B=m.useRef();B.current=_;var L=m.useRef();L.current=I,m.useEffect((function(){if(v){var e,t=function(t){var r=F.current,n=r.dragging,o=r.pageY,i=r.startTop;Ol.cancel(e);var a=O.current.getBoundingClientRect(),s=d/(c?a.width:a.height);if(n){var u=(bv(t,c)-o)*s,f=i;!E&&c?f-=u:f+=u;var h=B.current,p=L.current,m=p?f/p:0,g=Math.ceil(m*h);g=Math.max(g,0),g=Math.min(g,h),e=Ol((function(){l(g,c)}))}},r=function(){b(!1),s()};return window.addEventListener(\"mousemove\",t,{passive:!0}),window.addEventListener(\"touchmove\",t,{passive:!0}),window.addEventListener(\"mouseup\",r,{passive:!0}),window.addEventListener(\"touchend\",r,{passive:!0}),function(){window.removeEventListener(\"mousemove\",t),window.removeEventListener(\"touchmove\",t),window.removeEventListener(\"mouseup\",r),window.removeEventListener(\"touchend\",r),Ol.cancel(e)}}}),[v]),m.useEffect((function(){return R(),function(){clearTimeout(M.current)}}),[o]),m.useImperativeHandle(t,(function(){return{delayHidden:R}}));var z=\"\".concat(r,\"-scrollbar\"),H={position:\"absolute\",visibility:j?null:\"hidden\"},U={position:\"absolute\",background:\"rgba(0, 0, 0, 0.5)\",borderRadius:99,cursor:\"pointer\",userSelect:\"none\"};return c?(H.height=8,H.left=0,H.right=0,H.bottom=0,U.height=\"100%\",U.width=u,E?U.left=N:U.right=N):(H.width=8,H.top=0,H.bottom=0,E?H.right=0:H.left=0,U.width=\"100%\",U.height=u,U.top=N),m.createElement(\"div\",{ref:O,className:ze()(z,De(De(De({},\"\".concat(z,\"-horizontal\"),c),\"\".concat(z,\"-vertical\"),!c),\"\".concat(z,\"-visible\"),j)),style:At(At({},H),f),onMouseDown:function(e){e.stopPropagation(),e.preventDefault()},onMouseMove:R},m.createElement(\"div\",{ref:A,className:ze()(\"\".concat(z,\"-thumb\"),De({},\"\".concat(z,\"-thumb-moving\"),v)),style:At(At({},U),h),onMouseDown:D}))}));const wv=yv;function xv(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=e/(arguments.length>1&&void 0!==arguments[1]?arguments[1]:0)*e;return isNaN(t)&&(t=0),t=Math.max(t,20),Math.floor(t)}var Sv=[\"prefixCls\",\"className\",\"height\",\"itemHeight\",\"fullHeight\",\"style\",\"data\",\"children\",\"itemKey\",\"virtual\",\"direction\",\"scrollWidth\",\"component\",\"onScroll\",\"onVirtualScroll\",\"onVisibleChange\",\"innerProps\",\"extraRender\",\"styles\",\"showScrollBar\"],Cv=[],kv={overflowY:\"auto\",overflowAnchor:\"none\"};function Ev(e,t){var r=e.prefixCls,n=void 0===r?\"rc-virtual-list\":r,o=e.className,i=e.height,a=e.itemHeight,s=e.fullHeight,l=void 0===s||s,c=e.style,u=e.data,d=e.children,f=e.itemKey,h=e.virtual,p=e.direction,g=e.scrollWidth,v=e.component,b=void 0===v?\"div\":v,y=e.onScroll,w=e.onVirtualScroll,x=e.onVisibleChange,S=e.innerProps,C=e.extraRender,k=e.styles,E=e.showScrollBar,O=void 0===E?\"optional\":E,A=Be(e,Sv),T=m.useCallback((function(e){return\"function\"==typeof f?f(e):null==e?void 0:e[f]}),[f]),j=function(e){var t=Ie(m.useState(0),2),r=t[0],n=t[1],o=(0,m.useRef)(new Map),i=(0,m.useRef)(new pv),a=(0,m.useRef)(0);function s(){a.current+=1}function l(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];s();var t=function(){var e=!1;o.current.forEach((function(t,r){if(t&&t.offsetParent){var n=t.offsetHeight,o=getComputedStyle(t),a=o.marginTop,s=o.marginBottom,l=n+mv(a)+mv(s);i.current.get(r)!==l&&(i.current.set(r,l),e=!0)}})),e&&n((function(e){return e+1}))};if(e)t();else{a.current+=1;var r=a.current;Promise.resolve().then((function(){r===a.current&&t()}))}}return(0,m.useEffect)((function(){return s}),[]),[function(t,r){var n=e(t);o.current.get(n);r?(o.current.set(n,r),l()):o.current.delete(n)},l,i.current,r]}(T),P=Ie(j,4),M=P[0],R=P[1],_=P[2],I=P[3],N=!(!1===h||!i||!a),F=m.useMemo((function(){return Object.values(_.maps).reduce((function(e,t){return e+t}),0)}),[_.id,_.maps]),D=N&&u&&(Math.max(a*u.length,F)>i||!!g),B=\"rtl\"===p,L=ze()(n,De({},\"\".concat(n,\"-rtl\"),B),o),z=u||Cv,H=(0,m.useRef)(),U=(0,m.useRef)(),V=(0,m.useRef)(),W=Ie((0,m.useState)(0),2),G=W[0],q=W[1],K=Ie((0,m.useState)(0),2),X=K[0],Y=K[1],$=Ie((0,m.useState)(!1),2),Z=$[0],Q=$[1],J=function(){Q(!0)},ee=function(){Q(!1)},te={getKey:T};function re(e){q((function(t){var r=function(e){var t=e;return Number.isNaN(ye.current)||(t=Math.min(t,ye.current)),t=Math.max(t,0)}(\"function\"==typeof e?e(t):e);return H.current.scrollTop=r,r}))}var ne=(0,m.useRef)({start:0,end:z.length}),oe=(0,m.useRef)(),ie=Ie(function(e,t,r){var n=Ie(m.useState(e),2),o=n[0],i=n[1],a=Ie(m.useState(null),2),s=a[0],l=a[1];return m.useEffect((function(){var n=function(e,t,r){var n,o,i=e.length,a=t.length;if(0===i&&0===a)return null;i<a?(n=e,o=t):(n=t,o=e);var s={__EMPTY_ITEM__:!0};function l(e){return void 0!==e?r(e):s}for(var c=null,u=1!==Math.abs(i-a),d=0;d<o.length;d+=1){var f=l(n[d]);if(f!==l(o[d])){c=d,u=u||f!==l(o[d+1]);break}}return null===c?null:{index:c,multiple:u}}(o||[],e||[],t);void 0!==(null==n?void 0:n.index)&&(null==r||r(n.index),l(e[n.index])),i(e)}),[e]),[s]}(z,T),1)[0];oe.current=ie;var ae=m.useMemo((function(){if(!N)return{scrollHeight:void 0,start:0,end:z.length-1,offset:void 0};var e;if(!D)return{scrollHeight:(null===(e=U.current)||void 0===e?void 0:e.offsetHeight)||0,start:0,end:z.length-1,offset:void 0};for(var t,r,n,o=0,s=z.length,l=0;l<s;l+=1){var c=z[l],u=T(c),d=_.get(u),f=o+(void 0===d?a:d);f>=G&&void 0===t&&(t=l,r=o),f>G+i&&void 0===n&&(n=l),o=f}return void 0===t&&(t=0,r=0,n=Math.ceil(i/a)),void 0===n&&(n=z.length-1),{scrollHeight:o,start:t,end:n=Math.min(n+1,z.length-1),offset:r}}),[D,N,G,z,I,i]),se=ae.scrollHeight,le=ae.start,ce=ae.end,ue=ae.offset;ne.current.start=le,ne.current.end=ce,m.useLayoutEffect((function(){var e=_.getRecord();if(1===e.size){var t=Array.from(e.keys())[0],r=e.get(t),n=z[le];if(n&&void 0===r&&T(n)===t){var o=_.get(t)-a;re((function(e){return e+o}))}}_.resetRecord()}),[se]);var de=Ie(m.useState({width:0,height:i}),2),fe=de[0],he=de[1],pe=(0,m.useRef)(),me=(0,m.useRef)(),ge=m.useMemo((function(){return xv(fe.width,g)}),[fe.width,g]),ve=m.useMemo((function(){return xv(fe.height,se)}),[fe.height,se]),be=se-i,ye=(0,m.useRef)(be);ye.current=be;var we=G<=0,xe=G>=be,Se=X<=0,Ce=X>=g,ke=hv(we,xe,Se,Ce),Ee=function(){return{x:B?-X:X,y:G}},Oe=(0,m.useRef)(Ee()),Ae=Ws((function(e){if(w){var t=At(At({},Ee()),e);Oe.current.x===t.x&&Oe.current.y===t.y||(w(t),Oe.current=t)}}));function je(e,t){var r=e;t?((0,js.flushSync)((function(){Y(r)})),Ae()):re(r)}var Pe=function(e){var t=e,r=g?g-fe.width:0;return t=Math.max(t,0),Math.min(t,r)},Me=Ws((function(e,t){t?((0,js.flushSync)((function(){Y((function(t){return Pe(t+(B?-e:e))}))})),Ae()):re((function(t){return t+e}))})),Re=Ie(function(e,t,r,n,o,i,a){var s=(0,m.useRef)(0),l=(0,m.useRef)(null),c=(0,m.useRef)(null),u=(0,m.useRef)(!1),d=hv(t,r,n,o),f=(0,m.useRef)(null),h=(0,m.useRef)(null);return[function(t){if(e){Ol.cancel(h.current),h.current=Ol((function(){f.current=null}),2);var r=t.deltaX,n=t.deltaY,o=t.shiftKey,p=r,m=n;(\"sx\"===f.current||!f.current&&o&&n&&!r)&&(p=n,m=0,f.current=\"sx\");var g=Math.abs(p),v=Math.abs(m);null===f.current&&(f.current=i&&g>v?\"x\":\"y\"),\"y\"===f.current?function(e,t){if(Ol.cancel(l.current),!d(!1,t)){var r=e;r._virtualHandled||(r._virtualHandled=!0,s.current+=t,c.current=t,fv||r.preventDefault(),l.current=Ol((function(){var e=u.current?10:1;a(s.current*e,!1),s.current=0})))}}(t,m):function(e,t){a(t,!0),fv||e.preventDefault()}(t,p)}},function(t){e&&(u.current=t.detail===c.current)}]}(N,we,xe,Se,Ce,!!g,Me),2),_e=Re[0],Fe=Re[1];!function(e,t,r){var n,o=(0,m.useRef)(!1),i=(0,m.useRef)(0),a=(0,m.useRef)(0),s=(0,m.useRef)(null),l=(0,m.useRef)(null),c=function(e){if(o.current){var t=Math.ceil(e.touches[0].pageX),n=Math.ceil(e.touches[0].pageY),s=i.current-t,c=a.current-n,u=Math.abs(s)>Math.abs(c);u?i.current=t:a.current=n;var d=r(u,u?s:c,!1,e);d&&e.preventDefault(),clearInterval(l.current),d&&(l.current=setInterval((function(){u?s*=gv:c*=gv;var e=Math.floor(u?s:c);(!r(u,e,!0)||Math.abs(e)<=.1)&&clearInterval(l.current)}),16))}},u=function(){o.current=!1,n()},d=function(e){n(),1!==e.touches.length||o.current||(o.current=!0,i.current=Math.ceil(e.touches[0].pageX),a.current=Math.ceil(e.touches[0].pageY),s.current=e.target,s.current.addEventListener(\"touchmove\",c,{passive:!1}),s.current.addEventListener(\"touchend\",u,{passive:!0}))};n=function(){s.current&&(s.current.removeEventListener(\"touchmove\",c),s.current.removeEventListener(\"touchend\",u))},Pi((function(){return e&&t.current.addEventListener(\"touchstart\",d,{passive:!0}),function(){var e;null===(e=t.current)||void 0===e||e.removeEventListener(\"touchstart\",d),n(),clearInterval(l.current)}}),[e])}(N,H,(function(e,t,r,n){var o=n;return!(ke(e,t,r)||o&&o._virtualHandled||(o&&(o._virtualHandled=!0),_e({preventDefault:function(){},deltaX:e?t:0,deltaY:e?0:t}),0))})),function(e,t){m.useEffect((function(){var r=t.current;if(e&&r){var n,o,i=!1,a=function(){Ol.cancel(n)},s=function e(){a(),n=Ol((function(){var t;t=o,re((function(e){return e+t})),e()}))},l=function(e){if(!e.target.draggable&&0===e.button){var t=e;t._virtualHandled||(t._virtualHandled=!0,i=!0)}},c=function(){i=!1,a()},u=function(e){if(i){var t=bv(e,!1),n=r.getBoundingClientRect(),l=n.top,c=n.bottom;t<=l?(o=-vv(l-t),s()):t>=c?(o=vv(t-c),s()):a()}};return r.addEventListener(\"mousedown\",l),r.ownerDocument.addEventListener(\"mouseup\",c),r.ownerDocument.addEventListener(\"mousemove\",u),function(){r.removeEventListener(\"mousedown\",l),r.ownerDocument.removeEventListener(\"mouseup\",c),r.ownerDocument.removeEventListener(\"mousemove\",u),a()}}}),[e])}(D,H),Pi((function(){function e(e){var t=we&&e.detail<0,r=xe&&e.detail>0;!N||t||r||e.preventDefault()}var t=H.current;return t.addEventListener(\"wheel\",_e,{passive:!1}),t.addEventListener(\"DOMMouseScroll\",Fe,{passive:!0}),t.addEventListener(\"MozMousePixelScroll\",e,{passive:!1}),function(){t.removeEventListener(\"wheel\",_e),t.removeEventListener(\"DOMMouseScroll\",Fe),t.removeEventListener(\"MozMousePixelScroll\",e)}}),[N,we,xe]),Pi((function(){if(g){var e=Pe(X);Y(e),Ae({x:e})}}),[fe.width,g]);var Le=function(){var e,t;null===(e=pe.current)||void 0===e||e.delayHidden(),null===(t=me.current)||void 0===t||t.delayHidden()},He=function(e,t,r,n,o,i,a,s){var l=m.useRef(),c=Ie(m.useState(null),2),u=c[0],d=c[1];return Pi((function(){if(u&&u.times<10){if(!e.current)return void d((function(e){return At({},e)}));i();var s=u.targetAlign,l=u.originAlign,c=u.index,f=u.offset,h=e.current.clientHeight,p=!1,m=s,g=null;if(h){for(var v=s||l,b=0,y=0,w=0,x=Math.min(t.length-1,c),S=0;S<=x;S+=1){var C=o(t[S]);y=b;var k=r.get(C);b=w=y+(void 0===k?n:k)}for(var E=\"top\"===v?f:h-f,O=x;O>=0;O-=1){var A=o(t[O]),T=r.get(A);if(void 0===T){p=!0;break}if((E-=T)<=0)break}switch(v){case\"top\":g=y-f;break;case\"bottom\":g=w-h+f;break;default:var j=e.current.scrollTop;y<j?m=\"top\":w>j+h&&(m=\"bottom\")}null!==g&&a(g),g!==u.lastTop&&(p=!0)}p&&d(At(At({},u),{},{times:u.times+1,targetAlign:m,lastTop:g}))}}),[u,e.current]),function(e){if(null!=e){if(Ol.cancel(l.current),\"number\"==typeof e)a(e);else if(e&&\"object\"===Ne(e)){var r,n=e.align;r=\"index\"in e?e.index:t.findIndex((function(t){return o(t)===e.key}));var i=e.offset;d({times:0,index:r,offset:void 0===i?0:i,originAlign:n})}}else s()}}(H,z,_,a,T,(function(){return R(!0)}),re,Le);m.useImperativeHandle(t,(function(){return{nativeElement:V.current,getScrollInfo:Ee,scrollTo:function(e){var t;(t=e)&&\"object\"===Ne(t)&&(\"left\"in t||\"top\"in t)?(void 0!==e.left&&Y(Pe(e.left)),He(e.top)):He(e)}}})),Pi((function(){if(x){var e=z.slice(le,ce+1);x(e,z)}}),[le,ce,z]);var Ue=function(e,t,r,n){var o=Ie(m.useMemo((function(){return[new Map,[]]}),[e,r.id,n]),2),i=o[0],a=o[1];return function(o){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o,l=i.get(o),c=i.get(s);if(void 0===l||void 0===c)for(var u=e.length,d=a.length;d<u;d+=1){var f,h=e[d],p=t(h);i.set(p,d);var m=null!==(f=r.get(p))&&void 0!==f?f:n;if(a[d]=(a[d-1]||0)+m,p===o&&(l=d),p===s&&(c=d),void 0!==l&&void 0!==c)break}return{top:a[l-1]||0,bottom:a[c]}}}(z,T,_,a),Ve=null==C?void 0:C({start:le,end:ce,virtual:D,offsetX:X,offsetY:ue,rtl:B,getSize:Ue}),We=function(e,t,r,n,o,i,a,s){var l=s.getKey;return e.slice(t,r+1).map((function(e,r){var s=a(e,t+r,{style:{width:n},offsetX:o}),c=l(e);return m.createElement(dv,{key:c,setRef:function(t){return i(e,t)}},s)}))}(z,le,ce,g,X,M,d,te),Ge=null;i&&(Ge=At(De({},l?\"height\":\"maxHeight\",i),kv),N&&(Ge.overflowY=\"hidden\",g&&(Ge.overflowX=\"hidden\"),Z&&(Ge.pointerEvents=\"none\")));var qe={};return B&&(qe.dir=\"rtl\"),m.createElement(\"div\",Te({ref:V,style:At(At({},c),{},{position:\"relative\"}),className:L},qe,A),m.createElement(Hh,{onResize:function(e){he({width:e.offsetWidth,height:e.offsetHeight})}},m.createElement(b,{className:\"\".concat(n,\"-holder\"),style:Ge,ref:H,onScroll:function(e){var t=e.currentTarget.scrollTop;t!==G&&re(t),null==y||y(e),Ae()},onMouseEnter:Le},m.createElement(uv,{prefixCls:n,height:se,offsetX:X,offsetY:ue,scrollWidth:g,onInnerResize:R,ref:U,innerProps:S,rtl:B,extra:Ve},We))),D&&se>i&&m.createElement(wv,{ref:pe,prefixCls:n,scrollOffset:G,scrollRange:se,rtl:B,onScroll:je,onStartMove:J,onStopMove:ee,spinSize:ve,containerSize:fe.height,style:null==k?void 0:k.verticalScrollBar,thumbStyle:null==k?void 0:k.verticalScrollBarThumb,showScrollBar:O}),D&&g>fe.width&&m.createElement(wv,{ref:me,prefixCls:n,scrollOffset:X,scrollRange:g,rtl:B,onScroll:je,onStartMove:J,onStopMove:ee,spinSize:ge,containerSize:fe.width,horizontal:!0,style:null==k?void 0:k.horizontalScrollBar,thumbStyle:null==k?void 0:k.horizontalScrollBarThumb,showScrollBar:O}))}var Ov=m.forwardRef(Ev);Ov.displayName=\"List\";const Av=Ov;var Tv=[\"disabled\",\"title\",\"children\",\"style\",\"className\"];function jv(e){return\"string\"==typeof e||\"number\"==typeof e}var Pv=function(e,t){var r=m.useContext(ug),n=r.prefixCls,o=r.id,i=r.open,a=r.multiple,s=r.mode,l=r.searchValue,c=r.toggleOpen,u=r.notFoundContent,d=r.onPopupScroll,f=m.useContext(Qg),h=f.maxCount,p=f.flattenOptions,g=f.onActiveValue,v=f.defaultActiveFirstOption,b=f.onSelect,y=f.menuItemSelectedIcon,w=f.rawValues,x=f.fieldNames,S=f.virtual,C=f.direction,k=f.listHeight,E=f.listItemHeight,O=f.optionRender,A=\"\".concat(n,\"-item\"),T=gn((function(){return p}),[i,p],(function(e,t){return t[0]&&e[1]!==t[1]})),j=m.useRef(null),P=m.useMemo((function(){return a&&Yg(h)&&(null==w?void 0:w.size)>=h}),[a,h,null==w?void 0:w.size]),M=function(e){e.preventDefault()},R=function(e){var t;null===(t=j.current)||void 0===t||t.scrollTo(\"number\"==typeof e?{index:e}:e)},_=m.useCallback((function(e){return\"combobox\"!==s&&w.has(e)}),[s,Vo(w).toString(),w.size]),I=function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=T.length,n=0;n<r;n+=1){var o=(e+n*t+r)%r,i=T[o]||{},a=i.group,s=i.data;if(!a&&(null==s||!s.disabled)&&(_(s.value)||!P))return o}return-1},N=Ie(m.useState((function(){return I(0)})),2),F=N[0],D=N[1],B=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];D(e);var r={source:t?\"keyboard\":\"mouse\"},n=T[e];n?g(n.value,e,r):g(null,-1,r)};(0,m.useEffect)((function(){B(!1!==v?I(0):-1)}),[T.length,l]);var L=m.useCallback((function(e){return\"combobox\"===s?String(e).toLowerCase()===l.toLowerCase():w.has(e)}),[s,l,Vo(w).toString(),w.size]);(0,m.useEffect)((function(){var e,t=setTimeout((function(){if(!a&&i&&1===w.size){var e=Array.from(w)[0],t=T.findIndex((function(t){var r=t.data;return l?String(r.value).startsWith(l):r.value===e}));-1!==t&&(B(t),R(t))}}));return i&&(null===(e=j.current)||void 0===e||e.scrollTo(void 0)),function(){return clearTimeout(t)}}),[i,l]);var z=function(e){void 0!==e&&b(e,{selected:!w.has(e)}),a||c(!1)};if(m.useImperativeHandle(t,(function(){return{onKeyDown:function(e){var t=e.which,r=e.ctrlKey;switch(t){case $c.N:case $c.P:case $c.UP:case $c.DOWN:var n=0;if(t===$c.UP?n=-1:t===$c.DOWN?n=1:/(mac\\sos|macintosh)/i.test(navigator.appVersion)&&r&&(t===$c.N?n=1:t===$c.P&&(n=-1)),0!==n){var o=I(F+n,n);R(o),B(o,!0)}break;case $c.TAB:case $c.ENTER:var a,s=T[F];!s||null!=s&&null!==(a=s.data)&&void 0!==a&&a.disabled||P?z(void 0):z(s.value),i&&e.preventDefault();break;case $c.ESC:c(!1),i&&e.stopPropagation()}},onKeyUp:function(){},scrollTo:function(e){R(e)}}})),0===T.length)return m.createElement(\"div\",{role:\"listbox\",id:\"\".concat(o,\"_list\"),className:\"\".concat(A,\"-empty\"),onMouseDown:M},u);var H=Object.keys(x).map((function(e){return x[e]})),U=function(e){return e.label};function V(e,t){return{role:e.group?\"presentation\":\"option\",id:\"\".concat(o,\"_list_\").concat(t)}}var W=function(e){var t=T[e];if(!t)return null;var r=t.data||{},n=r.value,o=t.group,i=Jc(r,!0),a=U(t);return t?m.createElement(\"div\",Te({\"aria-label\":\"string\"!=typeof a||o?null:a},i,{key:e},V(t,e),{\"aria-selected\":L(n)}),n):null},G={role:\"listbox\",id:\"\".concat(o,\"_list\")};return m.createElement(m.Fragment,null,S&&m.createElement(\"div\",Te({},G,{style:{height:0,width:0,overflow:\"hidden\"}}),W(F-1),W(F),W(F+1)),m.createElement(Av,{itemKey:\"key\",ref:j,data:T,height:k,itemHeight:E,fullHeight:!1,onMouseDown:M,onScroll:d,virtual:S,direction:C,innerProps:S?null:G},(function(e,t){var r=e.group,n=e.groupOption,o=e.data,i=e.label,a=e.value,s=o.key;if(r){var l,c=null!==(l=o.title)&&void 0!==l?l:jv(i)?i.toString():void 0;return m.createElement(\"div\",{className:ze()(A,\"\".concat(A,\"-group\"),o.className),title:c},void 0!==i?i:s)}var u=o.disabled,d=o.title,f=(o.children,o.style),h=o.className,p=kf(Be(o,Tv),H),g=_(a),v=u||!g&&P,b=\"\".concat(A,\"-option\"),w=ze()(A,b,h,De(De(De(De({},\"\".concat(b,\"-grouped\"),n),\"\".concat(b,\"-active\"),F===t&&!v),\"\".concat(b,\"-disabled\"),v),\"\".concat(b,\"-selected\"),g)),x=U(e),C=!y||\"function\"==typeof y||g,k=\"number\"==typeof x?x:x||a,E=jv(k)?k.toString():void 0;return void 0!==d&&(E=d),m.createElement(\"div\",Te({},Jc(p),S?{}:V(e,t),{\"aria-selected\":L(a),className:w,title:E,onMouseMove:function(){F===t||v||B(t)},onClick:function(){v||z(a)},style:f}),m.createElement(\"div\",{className:\"\".concat(b,\"-content\")},\"function\"==typeof O?O(e,{index:t}):k),m.isValidElement(y)||g,C&&m.createElement(cg,{className:\"\".concat(A,\"-option-state\"),customizeIcon:y,customizeIconProps:{value:a,disabled:v,isSelected:g}},g?\"✓\":null))})))};const Mv=m.forwardRef(Pv);function Rv(e,t){return Ng(e).join(\"\").toUpperCase().includes(t)}var _v=0,Iv=Tt();var Nv=[\"children\",\"value\"],Fv=[\"children\"];function Dv(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return sd(e).map((function(e,r){if(!m.isValidElement(e)||!e.type)return null;var n=e,o=n.type.isSelectOptGroup,i=n.key,a=n.props,s=a.children,l=Be(a,Fv);return t||!o?function(e){var t=e,r=t.key,n=t.props,o=n.children,i=n.value;return At({key:r,value:void 0!==i?i:r,children:o},Be(n,Nv))}(e):At(At({key:\"__RC_SELECT_GRP__\".concat(null===i?r:i,\"__\"),label:i},l),{},{options:Dv(s)})})).filter((function(e){return e}))}const Bv=function(e,t,r,n,o){return m.useMemo((function(){var i=e;!e&&(i=Dv(t));var a=new Map,s=new Map,l=function(e,t,r){r&&\"string\"==typeof r&&e.set(t[r],t)};return function e(t){for(var i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],c=0;c<t.length;c+=1){var u=t[c];!u[r.options]||i?(a.set(u[r.value],u),l(s,u,r.label),l(s,u,n),l(s,u,o)):e(u[r.options],!0)}}(i),{options:i,valueOptions:a,labelOptions:s}}),[e,t,r,n,o])};function Lv(e){var t=m.useRef();t.current=e;var r=m.useCallback((function(){return t.current.apply(t,arguments)}),[]);return r}var zv=[\"id\",\"mode\",\"prefixCls\",\"backfill\",\"fieldNames\",\"inputValue\",\"searchValue\",\"onSearch\",\"autoClearSearchValue\",\"onSelect\",\"onDeselect\",\"dropdownMatchSelectWidth\",\"filterOption\",\"filterSort\",\"optionFilterProp\",\"optionLabelProp\",\"options\",\"optionRender\",\"children\",\"defaultActiveFirstOption\",\"menuItemSelectedIcon\",\"virtual\",\"direction\",\"listHeight\",\"listItemHeight\",\"labelRender\",\"value\",\"defaultValue\",\"labelInValue\",\"onChange\",\"maxCount\"],Hv=[\"inputValue\"],Uv=m.forwardRef((function(e,t){var r=e.id,n=e.mode,o=e.prefixCls,i=void 0===o?\"rc-select\":o,a=e.backfill,s=e.fieldNames,l=e.inputValue,c=e.searchValue,u=e.onSearch,d=e.autoClearSearchValue,f=void 0===d||d,h=e.onSelect,p=e.onDeselect,g=e.dropdownMatchSelectWidth,v=void 0===g||g,b=e.filterOption,y=e.filterSort,w=e.optionFilterProp,x=e.optionLabelProp,S=e.options,C=e.optionRender,k=e.children,E=e.defaultActiveFirstOption,O=e.menuItemSelectedIcon,A=e.virtual,T=e.direction,j=e.listHeight,P=void 0===j?200:j,M=e.listItemHeight,R=void 0===M?20:M,_=e.labelRender,I=e.value,N=e.defaultValue,F=e.labelInValue,D=e.onChange,B=e.maxCount,L=Be(e,zv),z=function(e){var t=Ie(m.useState(),2),r=t[0],n=t[1];return m.useEffect((function(){var e;n(\"rc_select_\".concat((Iv?(e=_v,_v+=1):e=\"TEST_OR_SSR\",e)))}),[]),e||r}(r),H=rv(n),U=!(S||!k),V=m.useMemo((function(){return(void 0!==b||\"combobox\"!==n)&&b}),[b,n]),W=m.useMemo((function(){return $g(s,U)}),[JSON.stringify(s),U]),G=Ie(Ks(\"\",{value:void 0!==c?c:l,postState:function(e){return e||\"\"}}),2),q=G[0],K=G[1],X=Bv(S,k,W,w,x),Y=X.valueOptions,$=X.labelOptions,Z=X.options,Q=m.useCallback((function(e){return Ng(e).map((function(e){var t,r,n,o,i,a;!function(e){return!e||\"object\"!==Ne(e)}(e)?(n=e.key,r=e.label,t=null!==(a=e.value)&&void 0!==a?a:n):t=e;var s,l=Y.get(t);return l&&(void 0===r&&(r=null==l?void 0:l[x||W.label]),void 0===n&&(n=null!==(s=null==l?void 0:l.key)&&void 0!==s?s:t),o=null==l?void 0:l.disabled,i=null==l?void 0:l.title),{label:r,value:t,key:n,disabled:o,title:i}}))}),[W,x,Y]),J=Ie(Ks(N,{value:I}),2),ee=J[0],te=J[1],re=m.useMemo((function(){var e,t=Q(H&&null===ee?[]:ee);return\"combobox\"===n&&function(e){return!e&&0!==e}(null===(e=t[0])||void 0===e?void 0:e.value)?[]:t}),[ee,Q,n,H]),ne=function(e,t){var r=m.useRef({values:new Map,options:new Map});return[m.useMemo((function(){var n=r.current,o=n.values,i=n.options,a=e.map((function(e){var t;return void 0===e.label?At(At({},e),{},{label:null===(t=o.get(e.value))||void 0===t?void 0:t.label}):e})),s=new Map,l=new Map;return a.forEach((function(e){s.set(e.value,e),l.set(e.value,t.get(e.value)||i.get(e.value))})),r.current.values=s,r.current.options=l,a}),[e,t]),m.useCallback((function(e){return t.get(e)||r.current.options.get(e)}),[t])]}(re,Y),oe=Ie(ne,2),ie=oe[0],ae=oe[1],se=m.useMemo((function(){if(!n&&1===ie.length){var e=ie[0];if(null===e.value&&(null===e.label||void 0===e.label))return[]}return ie.map((function(e){var t;return At(At({},e),{},{label:null!==(t=\"function\"==typeof _?_(e):e.label)&&void 0!==t?t:e.value})}))}),[n,ie,_]),le=m.useMemo((function(){return new Set(ie.map((function(e){return e.value})))}),[ie]);m.useEffect((function(){if(\"combobox\"===n){var e,t=null===(e=ie[0])||void 0===e?void 0:e.value;K(function(e){return null!=e}(t)?String(t):\"\")}}),[ie]);var ce=Lv((function(e,t){var r=null!=t?t:e;return De(De({},W.value,e),W.label,r)})),ue=function(e,t,r,n,o){return m.useMemo((function(){if(!r||!1===n)return e;var i=t.options,a=t.label,s=t.value,l=[],c=\"function\"==typeof n,u=r.toUpperCase(),d=c?n:function(e,t){return o?Rv(t[o],u):t[i]?Rv(t[\"children\"!==a?a:\"label\"],u):Rv(t[s],u)},f=c?function(e){return Zg(e)}:function(e){return e};return e.forEach((function(e){if(e[i])if(d(r,f(e)))l.push(e);else{var t=e[i].filter((function(e){return d(r,f(e))}));t.length&&l.push(At(At({},e),{},De({},i,t)))}else d(r,f(e))&&l.push(e)})),l}),[e,n,o,r,t])}(m.useMemo((function(){if(\"tags\"!==n)return Z;var e=Vo(Z);return Vo(ie).sort((function(e,t){return e.value<t.value?-1:1})).forEach((function(t){var r=t.value;(function(e){return Y.has(e)})(r)||e.push(ce(r,t.label))})),e}),[ce,Z,Y,ie,n]),W,q,V,w),de=m.useMemo((function(){return\"tags\"!==n||!q||ue.some((function(e){return e[w||\"value\"]===q}))||ue.some((function(e){return e[W.value]===q}))?ue:[ce(q)].concat(Vo(ue))}),[ce,w,n,ue,q,W]),fe=function e(t){return Vo(t).sort((function(e,t){return y(e,t,{searchValue:q})})).map((function(t){return Array.isArray(t.options)?At(At({},t),{},{options:t.options.length>0?e(t.options):t.options}):t}))},he=m.useMemo((function(){return y?fe(de):de}),[de,y,q]),pe=m.useMemo((function(){return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.fieldNames,n=t.childrenAsData,o=[],i=$g(r,!1),a=i.label,s=i.value,l=i.options,c=i.groupLabel;return function e(t,r){Array.isArray(t)&&t.forEach((function(t){if(r||!(l in t)){var i=t[s];o.push({key:Xg(t,o.length),groupOption:r,data:t,label:t[a],value:i})}else{var u=t[c];void 0===u&&n&&(u=t.label),o.push({key:Xg(t,o.length),group:!0,data:t,label:u}),e(t[l],!0)}}))}(e,!1),o}(he,{fieldNames:W,childrenAsData:U})}),[he,W,U]),me=function(e){var t=Q(e);if(te(t),D&&(t.length!==ie.length||t.some((function(e,t){var r;return(null===(r=ie[t])||void 0===r?void 0:r.value)!==(null==e?void 0:e.value)})))){var r=F?t:t.map((function(e){return e.value})),n=t.map((function(e){return Zg(ae(e.value))}));D(H?r:r[0],H?n:n[0])}},ge=Ie(m.useState(null),2),ve=ge[0],be=ge[1],ye=Ie(m.useState(0),2),we=ye[0],xe=ye[1],Se=void 0!==E?E:\"combobox\"!==n,Ce=m.useCallback((function(e,t){var r=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).source,o=void 0===r?\"keyboard\":r;xe(t),a&&\"combobox\"===n&&null!==e&&\"keyboard\"===o&&be(String(e))}),[a,n]),ke=function(e,t,r){var n=function(){var t,r=ae(e);return[F?{label:null==r?void 0:r[W.label],value:e,key:null!==(t=null==r?void 0:r.key)&&void 0!==t?t:e}:e,Zg(r)]};if(t&&h){var o=Ie(n(),2),i=o[0],a=o[1];h(i,a)}else if(!t&&p&&\"clear\"!==r){var s=Ie(n(),2),l=s[0],c=s[1];p(l,c)}},Ee=Lv((function(e,t){var r,o=!H||t.selected;r=o?H?[].concat(Vo(ie),[e]):[e]:ie.filter((function(t){return t.value!==e})),me(r),ke(e,o),\"combobox\"===n?be(\"\"):rv&&!f||(K(\"\"),be(\"\"))})),Oe=m.useMemo((function(){var e=!1!==A&&!1!==v;return At(At({},X),{},{flattenOptions:pe,onActiveValue:Ce,defaultActiveFirstOption:Se,onSelect:Ee,menuItemSelectedIcon:O,rawValues:le,fieldNames:W,virtual:e,direction:T,listHeight:P,listItemHeight:R,childrenAsData:U,maxCount:B,optionRender:C})}),[B,X,pe,Ce,Se,Ee,O,le,W,A,v,T,P,R,U,C]);return m.createElement(Qg.Provider,{value:Oe},m.createElement(ov,Te({},L,{id:z,prefixCls:i,ref:t,omitDomProps:Hv,mode:n,displayValues:se,onDisplayValuesChange:function(e,t){me(e);var r=t.type,n=t.values;\"remove\"!==r&&\"clear\"!==r||n.forEach((function(e){ke(e.value,!1,r)}))},direction:T,searchValue:q,onSearch:function(e,t){if(K(e),be(null),\"submit\"!==t.source)\"blur\"!==t.source&&(\"combobox\"===n&&me(e),null==u||u(e));else{var r=(e||\"\").trim();if(r){var o=Array.from(new Set([].concat(Vo(le),[r])));me(o),ke(r,!0),K(\"\")}}},autoClearSearchValue:f,onSearchSplit:function(e){var t=e;\"tags\"!==n&&(t=e.map((function(e){var t=$.get(e);return null==t?void 0:t.value})).filter((function(e){return void 0!==e})));var r=Array.from(new Set([].concat(Vo(le),Vo(t))));me(r),r.forEach((function(e){ke(e,!0)}))},dropdownMatchSelectWidth:v,OptionList:Mv,emptyOptions:!pe.length,activeValue:ve,activeDescendantId:\"\".concat(z,\"_list_\").concat(we)})))})),Vv=Uv;Vv.Option=lv,Vv.OptGroup=av;const Wv=Vv,Gv=(e,t)=>{const r=m.useContext(as);return[m.useMemo((()=>{var n;const o=t||ts[e],i=null!==(n=null==r?void 0:r[e])&&void 0!==n?n:{};return Object.assign(Object.assign({},\"function\"==typeof o?o():o),i||{})}),[e,t,r]),m.useMemo((()=>{const e=null==r?void 0:r.locale;return(null==r?void 0:r.exist)&&!e?ts.locale:e}),[r])]},qv=()=>{const[,e]=Ql(),[t]=Gv(\"Empty\"),r=new Ge(e.colorBgBase).toHsl().l<.5?{opacity:.65}:{};return m.createElement(\"svg\",{style:r,width:\"184\",height:\"152\",viewBox:\"0 0 184 152\",xmlns:\"http://www.w3.org/2000/svg\"},m.createElement(\"title\",null,(null==t?void 0:t.description)||\"Empty\"),m.createElement(\"g\",{fill:\"none\",fillRule:\"evenodd\"},m.createElement(\"g\",{transform:\"translate(24 31.67)\"},m.createElement(\"ellipse\",{fillOpacity:\".8\",fill:\"#F5F5F7\",cx:\"67.797\",cy:\"106.89\",rx:\"67.797\",ry:\"12.668\"}),m.createElement(\"path\",{d:\"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z\",fill:\"#AEB8C2\"}),m.createElement(\"path\",{d:\"M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z\",fill:\"url(#linearGradient-1)\",transform:\"translate(13.56)\"}),m.createElement(\"path\",{d:\"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z\",fill:\"#F5F5F7\"}),m.createElement(\"path\",{d:\"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z\",fill:\"#DCE0E6\"})),m.createElement(\"path\",{d:\"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z\",fill:\"#DCE0E6\"}),m.createElement(\"g\",{transform:\"translate(149.65 15.383)\",fill:\"#FFF\"},m.createElement(\"ellipse\",{cx:\"20.654\",cy:\"3.167\",rx:\"2.849\",ry:\"2.815\"}),m.createElement(\"path\",{d:\"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z\"}))))},Kv=()=>{const[,e]=Ql(),[t]=Gv(\"Empty\"),{colorFill:r,colorFillTertiary:n,colorFillQuaternary:o,colorBgContainer:i}=e,{borderColor:a,shadowColor:s,contentColor:l}=(0,m.useMemo)((()=>({borderColor:new Ge(r).onBackground(i).toHexString(),shadowColor:new Ge(n).onBackground(i).toHexString(),contentColor:new Ge(o).onBackground(i).toHexString()})),[r,n,o,i]);return m.createElement(\"svg\",{width:\"64\",height:\"41\",viewBox:\"0 0 64 41\",xmlns:\"http://www.w3.org/2000/svg\"},m.createElement(\"title\",null,(null==t?void 0:t.description)||\"Empty\"),m.createElement(\"g\",{transform:\"translate(0 1)\",fill:\"none\",fillRule:\"evenodd\"},m.createElement(\"ellipse\",{fill:s,cx:\"32\",cy:\"33\",rx:\"32\",ry:\"7\"}),m.createElement(\"g\",{fillRule:\"nonzero\",stroke:a},m.createElement(\"path\",{d:\"M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z\"}),m.createElement(\"path\",{d:\"M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z\",fill:l}))))},Xv=e=>{const{componentCls:t,margin:r,marginXS:n,marginXL:o,fontSize:i,lineHeight:a}=e;return{[t]:{marginInline:n,fontSize:i,lineHeight:a,textAlign:\"center\",[`${t}-image`]:{height:e.emptyImgHeight,marginBottom:n,opacity:e.opacityImage,img:{height:\"100%\"},svg:{maxWidth:\"100%\",height:\"100%\",margin:\"auto\"}},[`${t}-description`]:{color:e.colorTextDescription},[`${t}-footer`]:{marginTop:r},\"&-normal\":{marginBlock:o,color:e.colorTextDescription,[`${t}-description`]:{color:e.colorTextDescription},[`${t}-image`]:{height:e.emptyImgHeightMD}},\"&-small\":{marginBlock:n,color:e.colorTextDescription,[`${t}-image`]:{height:e.emptyImgHeightSM}}}}},Yv=Iu(\"Empty\",(e=>{const{componentCls:t,controlHeightLG:r,calc:n}=e,o=Au(e,{emptyImgCls:`${t}-img`,emptyImgHeight:n(r).mul(2.5).equal(),emptyImgHeightMD:r,emptyImgHeightSM:n(r).mul(.875).equal()});return[Xv(o)]}));const $v=m.createElement(qv,null),Zv=m.createElement(Kv,null),Qv=e=>{const{className:t,rootClassName:r,prefixCls:n,image:o=$v,description:i,children:a,imageStyle:s,style:l,classNames:c,styles:u}=e,d=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"className\",\"rootClassName\",\"prefixCls\",\"image\",\"description\",\"children\",\"imageStyle\",\"style\",\"classNames\",\"styles\"]),{getPrefixCls:f,direction:h,className:p,style:g,classNames:v,styles:b}=Zo(\"empty\"),y=f(\"empty\",n),[w,x,S]=Yv(y),[C]=Gv(\"Empty\"),k=void 0!==i?i:null==C?void 0:C.description,E=\"string\"==typeof k?k:\"empty\";let O=null;return O=\"string\"==typeof o?m.createElement(\"img\",{alt:E,src:o}):o,w(m.createElement(\"div\",Object.assign({className:ze()(x,S,y,p,{[`${y}-normal`]:o===Zv,[`${y}-rtl`]:\"rtl\"===h},t,r,v.root,null==c?void 0:c.root),style:Object.assign(Object.assign(Object.assign(Object.assign({},b.root),g),null==u?void 0:u.root),l)},d),m.createElement(\"div\",{className:ze()(`${y}-image`,v.image,null==c?void 0:c.image),style:Object.assign(Object.assign(Object.assign({},s),b.image),null==u?void 0:u.image)},O),k&&m.createElement(\"div\",{className:ze()(`${y}-description`,v.description,null==c?void 0:c.description),style:Object.assign(Object.assign({},b.description),null==u?void 0:u.description)},k),a&&m.createElement(\"div\",{className:ze()(`${y}-footer`,v.footer,null==c?void 0:c.footer),style:Object.assign(Object.assign({},b.footer),null==u?void 0:u.footer)},a)))};Qv.PRESENTED_IMAGE_DEFAULT=$v,Qv.PRESENTED_IMAGE_SIMPLE=Zv;const Jv=Qv,eb=e=>{const{componentName:t}=e,{getPrefixCls:r}=(0,m.useContext)(Xo),n=r(\"empty\");switch(t){case\"Table\":case\"List\":return m.createElement(Jv,{image:Jv.PRESENTED_IMAGE_SIMPLE});case\"Select\":case\"TreeSelect\":case\"Cascader\":case\"Transfer\":case\"Mentions\":return m.createElement(Jv,{image:Jv.PRESENTED_IMAGE_SIMPLE,className:`${n}-small`});case\"Table.filter\":return null;default:return m.createElement(Jv,null)}},tb=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;var n,o;const{variant:i,[e]:a}=m.useContext(Xo),s=m.useContext(Mf),l=null==a?void 0:a.variant;let c;return c=void 0!==t?t:!1===r?\"borderless\":null!==(o=null!==(n=null!=s?s:l)&&void 0!==n?n:i)&&void 0!==o?o:\"outlined\",[c,Ko.includes(c)]},rb=function(e,t){return e||(e=>{const t={overflow:{adjustX:!0,adjustY:!0,shiftY:!0},htmlRegion:\"scroll\"===e?\"scroll\":\"visible\",dynamicInset:!0};return{bottomLeft:Object.assign(Object.assign({},t),{points:[\"tl\",\"bl\"],offset:[0,4]}),bottomRight:Object.assign(Object.assign({},t),{points:[\"tr\",\"br\"],offset:[0,4]}),topLeft:Object.assign(Object.assign({},t),{points:[\"bl\",\"tl\"],offset:[0,-4]}),topRight:Object.assign(Object.assign({},t),{points:[\"br\",\"tr\"],offset:[0,-4]})}})(t)};function nb(e,t,r){const{focusElCls:n,focus:o,borderElCls:i}=r,a=i?\"> *\":\"\",s=[\"hover\",o?\"focus\":null,\"active\"].filter(Boolean).map((e=>`&:${e} ${a}`)).join(\",\");return{[`&-item:not(${t}-last-item)`]:{marginInlineEnd:e.calc(e.lineWidth).mul(-1).equal()},\"&-item\":Object.assign(Object.assign({[s]:{zIndex:2}},n?{[`&${n}`]:{zIndex:2}}:{}),{[`&[disabled] ${a}`]:{zIndex:0}})}}function ob(e,t,r){const{borderElCls:n}=r,o=n?`> ${n}`:\"\";return{[`&-item:not(${t}-first-item):not(${t}-last-item) ${o}`]:{borderRadius:0},[`&-item:not(${t}-last-item)${t}-first-item`]:{[`& ${o}, &${e}-sm ${o}, &${e}-lg ${o}`]:{borderStartEndRadius:0,borderEndEndRadius:0}},[`&-item:not(${t}-first-item)${t}-last-item`]:{[`& ${o}, &${e}-sm ${o}, &${e}-lg ${o}`]:{borderStartStartRadius:0,borderEndStartRadius:0}}}}function ib(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{focus:!0};const{componentCls:r}=e,n=`${r}-compact`;return{[n]:Object.assign(Object.assign({},nb(e,n,t)),ob(r,n,t))}}const ab=new Ba(\"antSlideUpIn\",{\"0%\":{transform:\"scaleY(0.8)\",transformOrigin:\"0% 0%\",opacity:0},\"100%\":{transform:\"scaleY(1)\",transformOrigin:\"0% 0%\",opacity:1}}),sb=new Ba(\"antSlideUpOut\",{\"0%\":{transform:\"scaleY(1)\",transformOrigin:\"0% 0%\",opacity:1},\"100%\":{transform:\"scaleY(0.8)\",transformOrigin:\"0% 0%\",opacity:0}}),lb=new Ba(\"antSlideDownIn\",{\"0%\":{transform:\"scaleY(0.8)\",transformOrigin:\"100% 100%\",opacity:0},\"100%\":{transform:\"scaleY(1)\",transformOrigin:\"100% 100%\",opacity:1}}),cb=new Ba(\"antSlideDownOut\",{\"0%\":{transform:\"scaleY(1)\",transformOrigin:\"100% 100%\",opacity:1},\"100%\":{transform:\"scaleY(0.8)\",transformOrigin:\"100% 100%\",opacity:0}}),ub=new Ba(\"antSlideLeftIn\",{\"0%\":{transform:\"scaleX(0.8)\",transformOrigin:\"0% 0%\",opacity:0},\"100%\":{transform:\"scaleX(1)\",transformOrigin:\"0% 0%\",opacity:1}}),db=new Ba(\"antSlideLeftOut\",{\"0%\":{transform:\"scaleX(1)\",transformOrigin:\"0% 0%\",opacity:1},\"100%\":{transform:\"scaleX(0.8)\",transformOrigin:\"0% 0%\",opacity:0}}),fb=new Ba(\"antSlideRightIn\",{\"0%\":{transform:\"scaleX(0.8)\",transformOrigin:\"100% 0%\",opacity:0},\"100%\":{transform:\"scaleX(1)\",transformOrigin:\"100% 0%\",opacity:1}}),hb=new Ba(\"antSlideRightOut\",{\"0%\":{transform:\"scaleX(1)\",transformOrigin:\"100% 0%\",opacity:1},\"100%\":{transform:\"scaleX(0.8)\",transformOrigin:\"100% 0%\",opacity:0}}),pb={\"slide-up\":{inKeyframes:ab,outKeyframes:sb},\"slide-down\":{inKeyframes:lb,outKeyframes:cb},\"slide-left\":{inKeyframes:ub,outKeyframes:db},\"slide-right\":{inKeyframes:fb,outKeyframes:hb}},mb=(e,t)=>{const{antCls:r}=e,n=`${r}-${t}`,{inKeyframes:o,outKeyframes:i}=pb[t];return[Np(n,o,i,e.motionDurationMid),{[`\\n      ${n}-enter,\\n      ${n}-appear\\n    `]:{transform:\"scale(0)\",transformOrigin:\"0% 0%\",opacity:0,animationTimingFunction:e.motionEaseOutQuint,\"&-prepare\":{transform:\"scale(1)\"}},[`${n}-leave`]:{animationTimingFunction:e.motionEaseInQuint}}]},gb=new Ba(\"antMoveDownIn\",{\"0%\":{transform:\"translate3d(0, 100%, 0)\",transformOrigin:\"0 0\",opacity:0},\"100%\":{transform:\"translate3d(0, 0, 0)\",transformOrigin:\"0 0\",opacity:1}}),vb=new Ba(\"antMoveDownOut\",{\"0%\":{transform:\"translate3d(0, 0, 0)\",transformOrigin:\"0 0\",opacity:1},\"100%\":{transform:\"translate3d(0, 100%, 0)\",transformOrigin:\"0 0\",opacity:0}}),bb=new Ba(\"antMoveLeftIn\",{\"0%\":{transform:\"translate3d(-100%, 0, 0)\",transformOrigin:\"0 0\",opacity:0},\"100%\":{transform:\"translate3d(0, 0, 0)\",transformOrigin:\"0 0\",opacity:1}}),yb=new Ba(\"antMoveLeftOut\",{\"0%\":{transform:\"translate3d(0, 0, 0)\",transformOrigin:\"0 0\",opacity:1},\"100%\":{transform:\"translate3d(-100%, 0, 0)\",transformOrigin:\"0 0\",opacity:0}}),wb=new Ba(\"antMoveRightIn\",{\"0%\":{transform:\"translate3d(100%, 0, 0)\",transformOrigin:\"0 0\",opacity:0},\"100%\":{transform:\"translate3d(0, 0, 0)\",transformOrigin:\"0 0\",opacity:1}}),xb=new Ba(\"antMoveRightOut\",{\"0%\":{transform:\"translate3d(0, 0, 0)\",transformOrigin:\"0 0\",opacity:1},\"100%\":{transform:\"translate3d(100%, 0, 0)\",transformOrigin:\"0 0\",opacity:0}}),Sb={\"move-up\":{inKeyframes:new Ba(\"antMoveUpIn\",{\"0%\":{transform:\"translate3d(0, -100%, 0)\",transformOrigin:\"0 0\",opacity:0},\"100%\":{transform:\"translate3d(0, 0, 0)\",transformOrigin:\"0 0\",opacity:1}}),outKeyframes:new Ba(\"antMoveUpOut\",{\"0%\":{transform:\"translate3d(0, 0, 0)\",transformOrigin:\"0 0\",opacity:1},\"100%\":{transform:\"translate3d(0, -100%, 0)\",transformOrigin:\"0 0\",opacity:0}})},\"move-down\":{inKeyframes:gb,outKeyframes:vb},\"move-left\":{inKeyframes:bb,outKeyframes:yb},\"move-right\":{inKeyframes:wb,outKeyframes:xb}},Cb=(e,t)=>{const{antCls:r}=e,n=`${r}-${t}`,{inKeyframes:o,outKeyframes:i}=Sb[t];return[Np(n,o,i,e.motionDurationMid),{[`\\n        ${n}-enter,\\n        ${n}-appear\\n      `]:{opacity:0,animationTimingFunction:e.motionEaseOutCirc},[`${n}-leave`]:{animationTimingFunction:e.motionEaseInOutCirc}}]},kb=e=>{const{optionHeight:t,optionFontSize:r,optionLineHeight:n,optionPadding:o}=e;return{position:\"relative\",display:\"block\",minHeight:t,padding:o,color:e.colorText,fontWeight:\"normal\",fontSize:r,lineHeight:n,boxSizing:\"border-box\"}},Eb=e=>{const{antCls:t,componentCls:r}=e,n=`${r}-item`,o=`&${t}-slide-up-enter${t}-slide-up-enter-active`,i=`&${t}-slide-up-appear${t}-slide-up-appear-active`,a=`&${t}-slide-up-leave${t}-slide-up-leave-active`,s=`${r}-dropdown-placement-`,l=`${n}-option-selected`;return[{[`${r}-dropdown`]:Object.assign(Object.assign({},rc(e)),{position:\"absolute\",top:-9999,zIndex:e.zIndexPopup,boxSizing:\"border-box\",padding:e.paddingXXS,overflow:\"hidden\",fontSize:e.fontSize,fontVariant:\"initial\",backgroundColor:e.colorBgElevated,borderRadius:e.borderRadiusLG,outline:\"none\",boxShadow:e.boxShadowSecondary,[`\\n          ${o}${s}bottomLeft,\\n          ${i}${s}bottomLeft\\n        `]:{animationName:ab},[`\\n          ${o}${s}topLeft,\\n          ${i}${s}topLeft,\\n          ${o}${s}topRight,\\n          ${i}${s}topRight\\n        `]:{animationName:lb},[`${a}${s}bottomLeft`]:{animationName:sb},[`\\n          ${a}${s}topLeft,\\n          ${a}${s}topRight\\n        `]:{animationName:cb},\"&-hidden\":{display:\"none\"},[n]:Object.assign(Object.assign({},kb(e)),{cursor:\"pointer\",transition:`background ${e.motionDurationSlow} ease`,borderRadius:e.borderRadiusSM,\"&-group\":{color:e.colorTextDescription,fontSize:e.fontSizeSM,cursor:\"default\"},\"&-option\":{display:\"flex\",\"&-content\":Object.assign({flex:\"auto\"},tc),\"&-state\":{flex:\"none\",display:\"flex\",alignItems:\"center\"},[`&-active:not(${n}-option-disabled)`]:{backgroundColor:e.optionActiveBg},[`&-selected:not(${n}-option-disabled)`]:{color:e.optionSelectedColor,fontWeight:e.optionSelectedFontWeight,backgroundColor:e.optionSelectedBg,[`${n}-option-state`]:{color:e.colorPrimary}},\"&-disabled\":{[`&${n}-option-selected`]:{backgroundColor:e.colorBgContainerDisabled},color:e.colorTextDisabled,cursor:\"not-allowed\"},\"&-grouped\":{paddingInlineStart:e.calc(e.controlPaddingHorizontal).mul(2).equal()}},\"&-empty\":Object.assign(Object.assign({},kb(e)),{color:e.colorTextDisabled})}),[`${l}:has(+ ${l})`]:{borderEndStartRadius:0,borderEndEndRadius:0,[`& + ${l}`]:{borderStartStartRadius:0,borderStartEndRadius:0}},\"&-rtl\":{direction:\"rtl\"}})},mb(e,\"slide-up\"),mb(e,\"slide-down\"),Cb(e,\"move-up\"),Cb(e,\"move-down\")]},Ob=e=>{const{componentCls:t,iconCls:r,borderRadiusSM:n,motionDurationSlow:o,paddingXS:i,multipleItemColorDisabled:a,multipleItemBorderColorDisabled:s,colorIcon:l,colorIconHover:c,INTERNAL_FIXED_ITEM_MARGIN:u}=e,d=`${t}-selection-overflow`;return{[d]:{position:\"relative\",display:\"flex\",flex:\"auto\",flexWrap:\"wrap\",maxWidth:\"100%\",\"&-item\":{flex:\"none\",alignSelf:\"center\",maxWidth:\"100%\",display:\"inline-flex\"},[`${t}-selection-item`]:{display:\"flex\",alignSelf:\"center\",flex:\"none\",boxSizing:\"border-box\",maxWidth:\"100%\",marginBlock:u,borderRadius:n,cursor:\"default\",transition:`font-size ${o}, line-height ${o}, height ${o}`,marginInlineEnd:e.calc(u).mul(2).equal(),paddingInlineStart:i,paddingInlineEnd:e.calc(i).div(2).equal(),[`${t}-disabled&`]:{color:a,borderColor:s,cursor:\"not-allowed\"},\"&-content\":{display:\"inline-block\",marginInlineEnd:e.calc(i).div(2).equal(),overflow:\"hidden\",whiteSpace:\"pre\",textOverflow:\"ellipsis\"},\"&-remove\":Object.assign(Object.assign({},{display:\"inline-flex\",alignItems:\"center\",color:\"inherit\",fontStyle:\"normal\",lineHeight:0,textAlign:\"center\",textTransform:\"none\",verticalAlign:\"-0.125em\",textRendering:\"optimizeLegibility\",\"-webkit-font-smoothing\":\"antialiased\",\"-moz-osx-font-smoothing\":\"grayscale\",\"> *\":{lineHeight:1},svg:{display:\"inline-block\"}}),{display:\"inline-flex\",alignItems:\"center\",color:l,fontWeight:\"bold\",fontSize:10,lineHeight:\"inherit\",cursor:\"pointer\",[`> ${r}`]:{verticalAlign:\"-0.2em\"},\"&:hover\":{color:c}})}}}},Ab=(e,t)=>{const{componentCls:r,INTERNAL_FIXED_ITEM_MARGIN:n}=e,o=`${r}-selection-overflow`,i=e.multipleSelectItemHeight,a=(e=>{const{multipleSelectItemHeight:t,selectHeight:r,lineWidth:n}=e;return e.calc(r).sub(t).div(2).sub(n).equal()})(e),s=t?`${r}-${t}`:\"\",l=(e=>{const{multipleSelectItemHeight:t,paddingXXS:r,lineWidth:n,INTERNAL_FIXED_ITEM_MARGIN:o}=e,i=e.max(e.calc(r).sub(n).equal(),0);return{basePadding:i,containerPadding:e.max(e.calc(i).sub(o).equal(),0),itemHeight:Si(t),itemLineHeight:Si(e.calc(t).sub(e.calc(e.lineWidth).mul(2)).equal())}})(e);return{[`${r}-multiple${s}`]:Object.assign(Object.assign({},Ob(e)),{[`${r}-selector`]:{display:\"flex\",alignItems:\"center\",width:\"100%\",height:\"100%\",paddingInline:l.basePadding,paddingBlock:l.containerPadding,borderRadius:e.borderRadius,[`${r}-disabled&`]:{background:e.multipleSelectorBgDisabled,cursor:\"not-allowed\"},\"&:after\":{display:\"inline-block\",width:0,margin:`${Si(n)} 0`,lineHeight:Si(i),visibility:\"hidden\",content:'\"\\\\a0\"'}},[`${r}-selection-item`]:{height:l.itemHeight,lineHeight:Si(l.itemLineHeight)},[`${r}-selection-wrap`]:{alignSelf:\"flex-start\",\"&:after\":{lineHeight:Si(i),marginBlock:n}},[`${r}-prefix`]:{marginInlineStart:e.calc(e.inputPaddingHorizontalBase).sub(l.basePadding).equal()},[`${o}-item + ${o}-item,\\n        ${r}-prefix + ${r}-selection-wrap\\n      `]:{[`${r}-selection-search`]:{marginInlineStart:0},[`${r}-selection-placeholder`]:{insetInlineStart:0}},[`${o}-item-suffix`]:{minHeight:l.itemHeight,marginBlock:n},[`${r}-selection-search`]:{display:\"inline-flex\",position:\"relative\",maxWidth:\"100%\",marginInlineStart:e.calc(e.inputPaddingHorizontalBase).sub(a).equal(),\"\\n          &-input,\\n          &-mirror\\n        \":{height:i,fontFamily:e.fontFamily,lineHeight:Si(i),transition:`all ${e.motionDurationSlow}`},\"&-input\":{width:\"100%\",minWidth:4.1},\"&-mirror\":{position:\"absolute\",top:0,insetInlineStart:0,insetInlineEnd:\"auto\",zIndex:999,whiteSpace:\"pre\",visibility:\"hidden\"}},[`${r}-selection-placeholder`]:{position:\"absolute\",top:\"50%\",insetInlineStart:e.calc(e.inputPaddingHorizontalBase).sub(l.basePadding).equal(),insetInlineEnd:e.inputPaddingHorizontalBase,transform:\"translateY(-50%)\",transition:`all ${e.motionDurationSlow}`}})}};function Tb(e,t){const{componentCls:r}=e,n=t?`${r}-${t}`:\"\",o={[`${r}-multiple${n}`]:{fontSize:e.fontSize,[`${r}-selector`]:{[`${r}-show-search&`]:{cursor:\"text\"}},[`\\n        &${r}-show-arrow ${r}-selector,\\n        &${r}-allow-clear ${r}-selector\\n      `]:{paddingInlineEnd:e.calc(e.fontSizeIcon).add(e.controlPaddingHorizontal).equal()}}};return[Ab(e,t),o]}const jb=e=>{const{componentCls:t}=e,r=Au(e,{selectHeight:e.controlHeightSM,multipleSelectItemHeight:e.multipleItemHeightSM,borderRadius:e.borderRadiusSM,borderRadiusSM:e.borderRadiusXS}),n=Au(e,{fontSize:e.fontSizeLG,selectHeight:e.controlHeightLG,multipleSelectItemHeight:e.multipleItemHeightLG,borderRadius:e.borderRadiusLG,borderRadiusSM:e.borderRadius});return[Tb(e),Tb(r,\"sm\"),{[`${t}-multiple${t}-sm`]:{[`${t}-selection-placeholder`]:{insetInline:e.calc(e.controlPaddingHorizontalSM).sub(e.lineWidth).equal()},[`${t}-selection-search`]:{marginInlineStart:2}}},Tb(n,\"lg\")]};function Pb(e,t){const{componentCls:r,inputPaddingHorizontalBase:n,borderRadius:o}=e,i=e.calc(e.controlHeight).sub(e.calc(e.lineWidth).mul(2)).equal(),a=t?`${r}-${t}`:\"\";return{[`${r}-single${a}`]:{fontSize:e.fontSize,height:e.controlHeight,[`${r}-selector`]:Object.assign(Object.assign({},rc(e,!0)),{display:\"flex\",borderRadius:o,flex:\"1 1 auto\",[`${r}-selection-wrap:after`]:{lineHeight:Si(i)},[`${r}-selection-search`]:{position:\"absolute\",inset:0,width:\"100%\",\"&-input\":{width:\"100%\",WebkitAppearance:\"textfield\"}},[`\\n          ${r}-selection-item,\\n          ${r}-selection-placeholder\\n        `]:{display:\"block\",padding:0,lineHeight:Si(i),transition:`all ${e.motionDurationSlow}, visibility 0s`,alignSelf:\"center\"},[`${r}-selection-placeholder`]:{transition:\"none\",pointerEvents:\"none\"},[[\"&:after\",`${r}-selection-item:empty:after`,`${r}-selection-placeholder:empty:after`].join(\",\")]:{display:\"inline-block\",width:0,visibility:\"hidden\",content:'\"\\\\a0\"'}}),[`\\n        &${r}-show-arrow ${r}-selection-item,\\n        &${r}-show-arrow ${r}-selection-search,\\n        &${r}-show-arrow ${r}-selection-placeholder\\n      `]:{paddingInlineEnd:e.showArrowPaddingInlineEnd},[`&${r}-open ${r}-selection-item`]:{color:e.colorTextPlaceholder},[`&:not(${r}-customize-input)`]:{[`${r}-selector`]:{width:\"100%\",height:\"100%\",alignItems:\"center\",padding:`0 ${Si(n)}`,[`${r}-selection-search-input`]:{height:i,fontSize:e.fontSize},\"&:after\":{lineHeight:Si(i)}}},[`&${r}-customize-input`]:{[`${r}-selector`]:{\"&:after\":{display:\"none\"},[`${r}-selection-search`]:{position:\"static\",width:\"100%\"},[`${r}-selection-placeholder`]:{position:\"absolute\",insetInlineStart:0,insetInlineEnd:0,padding:`0 ${Si(n)}`,\"&:after\":{display:\"none\"}}}}}}}function Mb(e){const{componentCls:t}=e,r=e.calc(e.controlPaddingHorizontalSM).sub(e.lineWidth).equal();return[Pb(e),Pb(Au(e,{controlHeight:e.controlHeightSM,borderRadius:e.borderRadiusSM}),\"sm\"),{[`${t}-single${t}-sm`]:{[`&:not(${t}-customize-input)`]:{[`${t}-selector`]:{padding:`0 ${Si(r)}`},[`&${t}-show-arrow ${t}-selection-search`]:{insetInlineEnd:e.calc(r).add(e.calc(e.fontSize).mul(1.5)).equal()},[`\\n            &${t}-show-arrow ${t}-selection-item,\\n            &${t}-show-arrow ${t}-selection-placeholder\\n          `]:{paddingInlineEnd:e.calc(e.fontSize).mul(1.5).equal()}}}},Pb(Au(e,{controlHeight:e.singleItemHeightLG,fontSize:e.fontSizeLG,borderRadius:e.borderRadiusLG}),\"lg\")]}const Rb=(e,t)=>{const{componentCls:r,antCls:n,controlOutlineWidth:o}=e;return{[`&:not(${r}-customize-input) ${r}-selector`]:{border:`${Si(e.lineWidth)} ${e.lineType} ${t.borderColor}`,background:e.selectorBg},[`&:not(${r}-disabled):not(${r}-customize-input):not(${n}-pagination-size-changer)`]:{[`&:hover ${r}-selector`]:{borderColor:t.hoverBorderHover},[`${r}-focused& ${r}-selector`]:{borderColor:t.activeBorderColor,boxShadow:`0 0 0 ${Si(o)} ${t.activeOutlineColor}`,outline:0},[`${r}-prefix`]:{color:t.color}}}},_b=(e,t)=>({[`&${e.componentCls}-status-${t.status}`]:Object.assign({},Rb(e,t))}),Ib=e=>({\"&-outlined\":Object.assign(Object.assign(Object.assign(Object.assign({},Rb(e,{borderColor:e.colorBorder,hoverBorderHover:e.hoverBorderColor,activeBorderColor:e.activeBorderColor,activeOutlineColor:e.activeOutlineColor,color:e.colorText})),_b(e,{status:\"error\",borderColor:e.colorError,hoverBorderHover:e.colorErrorHover,activeBorderColor:e.colorError,activeOutlineColor:e.colorErrorOutline,color:e.colorError})),_b(e,{status:\"warning\",borderColor:e.colorWarning,hoverBorderHover:e.colorWarningHover,activeBorderColor:e.colorWarning,activeOutlineColor:e.colorWarningOutline,color:e.colorWarning})),{[`&${e.componentCls}-disabled`]:{[`&:not(${e.componentCls}-customize-input) ${e.componentCls}-selector`]:{background:e.colorBgContainerDisabled,color:e.colorTextDisabled}},[`&${e.componentCls}-multiple ${e.componentCls}-selection-item`]:{background:e.multipleItemBg,border:`${Si(e.lineWidth)} ${e.lineType} ${e.multipleItemBorderColor}`}})}),Nb=(e,t)=>{const{componentCls:r,antCls:n}=e;return{[`&:not(${r}-customize-input) ${r}-selector`]:{background:t.bg,border:`${Si(e.lineWidth)} ${e.lineType} transparent`,color:t.color},[`&:not(${r}-disabled):not(${r}-customize-input):not(${n}-pagination-size-changer)`]:{[`&:hover ${r}-selector`]:{background:t.hoverBg},[`${r}-focused& ${r}-selector`]:{background:e.selectorBg,borderColor:t.activeBorderColor,outline:0}}}},Fb=(e,t)=>({[`&${e.componentCls}-status-${t.status}`]:Object.assign({},Nb(e,t))}),Db=e=>({\"&-filled\":Object.assign(Object.assign(Object.assign(Object.assign({},Nb(e,{bg:e.colorFillTertiary,hoverBg:e.colorFillSecondary,activeBorderColor:e.activeBorderColor,color:e.colorText})),Fb(e,{status:\"error\",bg:e.colorErrorBg,hoverBg:e.colorErrorBgHover,activeBorderColor:e.colorError,color:e.colorError})),Fb(e,{status:\"warning\",bg:e.colorWarningBg,hoverBg:e.colorWarningBgHover,activeBorderColor:e.colorWarning,color:e.colorWarning})),{[`&${e.componentCls}-disabled`]:{[`&:not(${e.componentCls}-customize-input) ${e.componentCls}-selector`]:{borderColor:e.colorBorder,background:e.colorBgContainerDisabled,color:e.colorTextDisabled}},[`&${e.componentCls}-multiple ${e.componentCls}-selection-item`]:{background:e.colorBgContainer,border:`${Si(e.lineWidth)} ${e.lineType} ${e.colorSplit}`}})}),Bb=e=>({\"&-borderless\":{[`${e.componentCls}-selector`]:{background:\"transparent\",border:`${Si(e.lineWidth)} ${e.lineType} transparent`},[`&${e.componentCls}-disabled`]:{[`&:not(${e.componentCls}-customize-input) ${e.componentCls}-selector`]:{color:e.colorTextDisabled}},[`&${e.componentCls}-multiple ${e.componentCls}-selection-item`]:{background:e.multipleItemBg,border:`${Si(e.lineWidth)} ${e.lineType} ${e.multipleItemBorderColor}`},[`&${e.componentCls}-status-error`]:{[`${e.componentCls}-prefix, ${e.componentCls}-selection-item`]:{color:e.colorError}},[`&${e.componentCls}-status-warning`]:{[`${e.componentCls}-prefix, ${e.componentCls}-selection-item`]:{color:e.colorWarning}}}}),Lb=(e,t)=>{const{componentCls:r,antCls:n}=e;return{[`&:not(${r}-customize-input) ${r}-selector`]:{borderWidth:`0 0 ${Si(e.lineWidth)} 0`,borderStyle:`none none ${e.lineType} none`,borderColor:t.borderColor,background:e.selectorBg,borderRadius:0},[`&:not(${r}-disabled):not(${r}-customize-input):not(${n}-pagination-size-changer)`]:{[`&:hover ${r}-selector`]:{borderColor:t.hoverBorderHover},[`${r}-focused& ${r}-selector`]:{borderColor:t.activeBorderColor,outline:0},[`${r}-prefix`]:{color:t.color}}}},zb=(e,t)=>({[`&${e.componentCls}-status-${t.status}`]:Object.assign({},Lb(e,t))}),Hb=e=>({\"&-underlined\":Object.assign(Object.assign(Object.assign(Object.assign({},Lb(e,{borderColor:e.colorBorder,hoverBorderHover:e.hoverBorderColor,activeBorderColor:e.activeBorderColor,activeOutlineColor:e.activeOutlineColor,color:e.colorText})),zb(e,{status:\"error\",borderColor:e.colorError,hoverBorderHover:e.colorErrorHover,activeBorderColor:e.colorError,activeOutlineColor:e.colorErrorOutline,color:e.colorError})),zb(e,{status:\"warning\",borderColor:e.colorWarning,hoverBorderHover:e.colorWarningHover,activeBorderColor:e.colorWarning,activeOutlineColor:e.colorWarningOutline,color:e.colorWarning})),{[`&${e.componentCls}-disabled`]:{[`&:not(${e.componentCls}-customize-input) ${e.componentCls}-selector`]:{color:e.colorTextDisabled}},[`&${e.componentCls}-multiple ${e.componentCls}-selection-item`]:{background:e.multipleItemBg,border:`${Si(e.lineWidth)} ${e.lineType} ${e.multipleItemBorderColor}`}})}),Ub=e=>({[e.componentCls]:Object.assign(Object.assign(Object.assign(Object.assign({},Ib(e)),Db(e)),Bb(e)),Hb(e))}),Vb=e=>{const{componentCls:t}=e;return{position:\"relative\",transition:`all ${e.motionDurationMid} ${e.motionEaseInOut}`,input:{cursor:\"pointer\"},[`${t}-show-search&`]:{cursor:\"text\",input:{cursor:\"auto\",color:\"inherit\",height:\"100%\"}},[`${t}-disabled&`]:{cursor:\"not-allowed\",input:{cursor:\"not-allowed\"}}}},Wb=e=>{const{componentCls:t}=e;return{[`${t}-selection-search-input`]:{margin:0,padding:0,background:\"transparent\",border:\"none\",outline:\"none\",appearance:\"none\",fontFamily:\"inherit\",\"&::-webkit-search-cancel-button\":{display:\"none\",appearance:\"none\"}}}},Gb=e=>{const{antCls:t,componentCls:r,inputPaddingHorizontalBase:n,iconCls:o}=e,i={[`${r}-clear`]:{opacity:1,background:e.colorBgBase,borderRadius:\"50%\"}};return{[r]:Object.assign(Object.assign({},rc(e)),{position:\"relative\",display:\"inline-flex\",cursor:\"pointer\",[`&:not(${r}-customize-input) ${r}-selector`]:Object.assign(Object.assign({},Vb(e)),Wb(e)),[`${r}-selection-item`]:Object.assign(Object.assign({flex:1,fontWeight:\"normal\",position:\"relative\",userSelect:\"none\"},tc),{[`> ${t}-typography`]:{display:\"inline\"}}),[`${r}-selection-placeholder`]:Object.assign(Object.assign({},tc),{flex:1,color:e.colorTextPlaceholder,pointerEvents:\"none\"}),[`${r}-arrow`]:Object.assign(Object.assign({},{display:\"inline-flex\",alignItems:\"center\",color:\"inherit\",fontStyle:\"normal\",lineHeight:0,textAlign:\"center\",textTransform:\"none\",verticalAlign:\"-0.125em\",textRendering:\"optimizeLegibility\",\"-webkit-font-smoothing\":\"antialiased\",\"-moz-osx-font-smoothing\":\"grayscale\",\"> *\":{lineHeight:1},svg:{display:\"inline-block\"}}),{position:\"absolute\",top:\"50%\",insetInlineStart:\"auto\",insetInlineEnd:n,height:e.fontSizeIcon,marginTop:e.calc(e.fontSizeIcon).mul(-1).div(2).equal(),color:e.colorTextQuaternary,fontSize:e.fontSizeIcon,lineHeight:1,textAlign:\"center\",pointerEvents:\"none\",display:\"flex\",alignItems:\"center\",transition:`opacity ${e.motionDurationSlow} ease`,[o]:{verticalAlign:\"top\",transition:`transform ${e.motionDurationSlow}`,\"> svg\":{verticalAlign:\"top\"},[`&:not(${r}-suffix)`]:{pointerEvents:\"auto\"}},[`${r}-disabled &`]:{cursor:\"not-allowed\"},\"> *:not(:last-child)\":{marginInlineEnd:8}}),[`${r}-selection-wrap`]:{display:\"flex\",width:\"100%\",position:\"relative\",minWidth:0,\"&:after\":{content:'\"\\\\a0\"',width:0,overflow:\"hidden\"}},[`${r}-prefix`]:{flex:\"none\",marginInlineEnd:e.selectAffixPadding},[`${r}-clear`]:{position:\"absolute\",top:\"50%\",insetInlineStart:\"auto\",insetInlineEnd:n,zIndex:1,display:\"inline-block\",width:e.fontSizeIcon,height:e.fontSizeIcon,marginTop:e.calc(e.fontSizeIcon).mul(-1).div(2).equal(),color:e.colorTextQuaternary,fontSize:e.fontSizeIcon,fontStyle:\"normal\",lineHeight:1,textAlign:\"center\",textTransform:\"none\",cursor:\"pointer\",opacity:0,transition:`color ${e.motionDurationMid} ease, opacity ${e.motionDurationSlow} ease`,textRendering:\"auto\",\"&:before\":{display:\"block\"},\"&:hover\":{color:e.colorIcon}},\"@media(hover:none)\":i,\"&:hover\":i}),[`${r}-status`]:{\"&-error, &-warning, &-success, &-validating\":{[`&${r}-has-feedback`]:{[`${r}-clear`]:{insetInlineEnd:e.calc(n).add(e.fontSize).add(e.paddingXS).equal()}}}}}},qb=e=>{const{componentCls:t}=e;return[{[t]:{[`&${t}-in-form-item`]:{width:\"100%\"}}},Gb(e),Mb(e),jb(e),Eb(e),{[`${t}-rtl`]:{direction:\"rtl\"}},ib(e,{borderElCls:`${t}-selector`,focusElCls:`${t}-focused`})]},Kb=Iu(\"Select\",((e,t)=>{let{rootPrefixCls:r}=t;const n=Au(e,{rootPrefixCls:r,inputPaddingHorizontalBase:e.calc(e.paddingSM).sub(1).equal(),multipleSelectItemHeight:e.multipleItemHeight,selectHeight:e.controlHeight});return[qb(n),Ub(n)]}),(e=>{const{fontSize:t,lineHeight:r,lineWidth:n,controlHeight:o,controlHeightSM:i,controlHeightLG:a,paddingXXS:s,controlPaddingHorizontal:l,zIndexPopupBase:c,colorText:u,fontWeightStrong:d,controlItemBgActive:f,controlItemBgHover:h,colorBgContainer:p,colorFillSecondary:m,colorBgContainerDisabled:g,colorTextDisabled:v,colorPrimaryHover:b,colorPrimary:y,controlOutline:w}=e,x=2*s,S=2*n,C=Math.min(o-x,o-S),k=Math.min(i-x,i-S),E=Math.min(a-x,a-S);return{INTERNAL_FIXED_ITEM_MARGIN:Math.floor(s/2),zIndexPopup:c+50,optionSelectedColor:u,optionSelectedFontWeight:d,optionSelectedBg:f,optionActiveBg:h,optionPadding:`${(o-t*r)/2}px ${l}px`,optionFontSize:t,optionLineHeight:r,optionHeight:o,selectorBg:p,clearBg:p,singleItemHeightLG:a,multipleItemBg:m,multipleItemBorderColor:\"transparent\",multipleItemHeight:C,multipleItemHeightSM:k,multipleItemHeightLG:E,multipleSelectorBgDisabled:g,multipleItemColorDisabled:v,multipleItemBorderColorDisabled:\"transparent\",showArrowPaddingInlineEnd:Math.ceil(1.25*e.fontSize),hoverBorderColor:b,activeBorderColor:y,activeOutlineColor:w,selectAffixPadding:s}}),{unitless:{optionLineHeight:!0,optionSelectedFontWeight:!0}}),Xb={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 00-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z\"}}]},name:\"check\",theme:\"outlined\"};var Yb=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:Xb}))};const $b=m.forwardRef(Yb),Zb={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z\"}}]},name:\"down\",theme:\"outlined\"};var Qb=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:Zb}))};const Jb=m.forwardRef(Qb),ey={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M909.6 854.5L649.9 594.8C690.2 542.7 712 479 712 412c0-80.2-31.3-155.4-87.9-212.1-56.6-56.7-132-87.9-212.1-87.9s-155.5 31.3-212.1 87.9C143.2 256.5 112 331.8 112 412c0 80.1 31.3 155.5 87.9 212.1C256.5 680.8 331.8 712 412 712c67 0 130.6-21.8 182.7-62l259.7 259.6a8.2 8.2 0 0011.6 0l43.6-43.5a8.2 8.2 0 000-11.6zM570.4 570.4C528 612.7 471.8 636 412 636s-116-23.3-158.4-65.6C211.3 528 188 471.8 188 412s23.3-116.1 65.6-158.4C296 211.3 352.2 188 412 188s116.1 23.2 158.4 65.6S636 352.2 636 412s-23.3 116.1-65.6 158.4z\"}}]},name:\"search\",theme:\"outlined\"};var ty=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:ey}))};const ry=m.forwardRef(ty);const ny=\"SECRET_COMBOBOX_MODE_DO_NOT_USE\",oy=(e,t)=>{var r,n,o,i,a;const{prefixCls:s,bordered:l,className:c,rootClassName:u,getPopupContainer:d,popupClassName:f,dropdownClassName:h,listHeight:p=256,placement:g,listItemHeight:v,size:b,disabled:y,notFoundContent:w,status:x,builtinPlacements:S,dropdownMatchSelectWidth:C,popupMatchSelectWidth:k,direction:E,style:O,allowClear:A,variant:T,dropdownStyle:j,transitionName:P,tagRender:M,maxCount:R,prefix:_,dropdownRender:I,popupRender:N,onDropdownVisibleChange:F,onOpenChange:D,styles:B,classNames:L}=e,z=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"bordered\",\"className\",\"rootClassName\",\"getPopupContainer\",\"popupClassName\",\"dropdownClassName\",\"listHeight\",\"placement\",\"listItemHeight\",\"size\",\"disabled\",\"notFoundContent\",\"status\",\"builtinPlacements\",\"dropdownMatchSelectWidth\",\"popupMatchSelectWidth\",\"direction\",\"style\",\"allowClear\",\"variant\",\"dropdownStyle\",\"transitionName\",\"tagRender\",\"maxCount\",\"prefix\",\"dropdownRender\",\"popupRender\",\"onDropdownVisibleChange\",\"onOpenChange\",\"styles\",\"classNames\"]),{getPopupContainer:H,getPrefixCls:U,renderEmpty:V,direction:W,virtual:G,popupMatchSelectWidth:q,popupOverflow:K}=m.useContext(Xo),{showSearch:X,style:Y,styles:$,className:Z,classNames:Q}=Zo(\"select\"),[,J]=Ql(),ee=null!=v?v:null==J?void 0:J.controlHeight,te=U(\"select\",s),re=U(),ne=null!=E?E:W,{compactSize:oe,compactItemClassnames:ie}=Lf(te,ne),[ae,se]=tb(\"select\",T,l),le=du(te),[ce,ue,de]=Kb(te,le),fe=m.useMemo((()=>{const{mode:t}=e;if(\"combobox\"!==t)return t===ny?\"combobox\":t}),[e.mode]),he=\"multiple\"===fe||\"tags\"===fe,pe=function(e,t){return void 0!==t?t:null!==e}(e.suffixIcon,e.showArrow),me=null!==(r=null!=k?k:C)&&void 0!==r?r:q,ge=(null===(n=null==B?void 0:B.popup)||void 0===n?void 0:n.root)||(null===(o=$.popup)||void 0===o?void 0:o.root)||j,ve=N||I,be=D||F,{status:ye,hasFeedback:we,isFormItemInput:xe,feedbackIcon:Se}=m.useContext(jf),Ce=qf(ye,x);let ke;ke=void 0!==w?w:\"combobox\"===fe?null:(null==V?void 0:V(\"Select\"))||m.createElement(eb,{componentName:\"Select\"});const{suffixIcon:Ee,itemIcon:Oe,removeIcon:Ae,clearIcon:Te}=function(e){let{suffixIcon:t,clearIcon:r,menuItemSelectedIcon:n,removeIcon:o,loading:i,multiple:a,hasFeedback:s,prefixCls:l,showSuffixIcon:c,feedbackIcon:u,showArrow:d,componentName:f}=e;const h=null!=r?r:m.createElement(Lc,null),p=e=>null!==t||s||d?m.createElement(m.Fragment,null,!1!==c&&e,s&&u):null;let g=null;if(void 0!==t)g=p(t);else if(i)g=p(m.createElement(Xc,{spin:!0}));else{const e=`${l}-suffix`;g=t=>{let{open:r,showSearch:n}=t;return p(r&&n?m.createElement(ry,{className:e}):m.createElement(Jb,{className:e}))}}let v=null;v=void 0!==n?n:a?m.createElement($b,null):null;let b=null;return b=void 0!==o?o:m.createElement(Vu,null),{clearIcon:h,suffixIcon:g,itemIcon:v,removeIcon:b}}(Object.assign(Object.assign({},z),{multiple:he,hasFeedback:we,feedbackIcon:Se,showSuffixIcon:pe,prefixCls:te,componentName:\"Select\"})),je=!0===A?{clearIcon:Te}:A,Pe=kf(z,[\"suffixIcon\",\"itemIcon\"]),Me=ze()((null===(i=null==L?void 0:L.popup)||void 0===i?void 0:i.root)||(null===(a=null==Q?void 0:Q.popup)||void 0===a?void 0:a.root)||f||h,{[`${te}-dropdown-${ne}`]:\"rtl\"===ne},u,Q.root,null==L?void 0:L.root,de,le,ue),Re=Rf((e=>{var t;return null!==(t=null!=b?b:oe)&&void 0!==t?t:e})),_e=m.useContext(Ss),Ie=null!=y?y:_e,Ne=ze()({[`${te}-lg`]:\"large\"===Re,[`${te}-sm`]:\"small\"===Re,[`${te}-rtl`]:\"rtl\"===ne,[`${te}-${ae}`]:se,[`${te}-in-form-item`]:xe},Gf(te,Ce,we),ie,Z,c,Q.root,null==L?void 0:L.root,u,de,le,ue),Fe=m.useMemo((()=>void 0!==g?g:\"rtl\"===ne?\"bottomRight\":\"bottomLeft\"),[g,ne]),[De]=gu(\"SelectLike\",null==ge?void 0:ge.zIndex);return ce(m.createElement(Wv,Object.assign({ref:t,virtual:G,showSearch:X},Pe,{style:Object.assign(Object.assign(Object.assign(Object.assign({},$.root),null==B?void 0:B.root),Y),O),dropdownMatchSelectWidth:me,transitionName:Qf(re,\"slide-up\",P),builtinPlacements:rb(S,K),listHeight:p,listItemHeight:ee,mode:fe,prefixCls:te,placement:Fe,direction:ne,prefix:_,suffixIcon:Ee,menuItemSelectedIcon:Oe,removeIcon:Ae,allowClear:je,notFoundContent:ke,className:Ne,getPopupContainer:d||H,dropdownClassName:Me,disabled:Ie,dropdownStyle:Object.assign(Object.assign({},ge),{zIndex:De}),maxCount:he?R:void 0,tagRender:he?M:void 0,dropdownRender:ve,onDropdownVisibleChange:be})))},iy=m.forwardRef(oy),ay=Wf(iy,\"dropdownAlign\");iy.SECRET_COMBOBOX_MODE_DO_NOT_USE=ny,iy.Option=lv,iy.OptGroup=av,iy._InternalPanelDoNotUseOrYouWillBeFired=ay;const sy=iy,ly=\"hex\",cy=\"rgb\",uy=\"hsb\",dy={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z\"}}]},name:\"up\",theme:\"outlined\"};var fy=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:dy}))};const hy=m.forwardRef(fy);function py(){return\"function\"==typeof BigInt}function my(e){return!e&&0!==e&&!Number.isNaN(e)||!String(e).trim()}function gy(e){var t=e.trim(),r=t.startsWith(\"-\");r&&(t=t.slice(1)),(t=t.replace(/(\\.\\d*[^0])0*$/,\"$1\").replace(/\\.0*$/,\"\").replace(/^0+/,\"\")).startsWith(\".\")&&(t=\"0\".concat(t));var n=t||\"0\",o=n.split(\".\"),i=o[0]||\"0\",a=o[1]||\"0\";\"0\"===i&&\"0\"===a&&(r=!1);var s=r?\"-\":\"\";return{negative:r,negativeStr:s,trimStr:n,integerStr:i,decimalStr:a,fullStr:\"\".concat(s).concat(n)}}function vy(e){var t=String(e);return!Number.isNaN(Number(t))&&t.includes(\"e\")}function by(e){var t=String(e);if(vy(e)){var r=Number(t.slice(t.indexOf(\"e-\")+2)),n=t.match(/\\.(\\d+)/);return null!=n&&n[1]&&(r+=n[1].length),r}return t.includes(\".\")&&wy(t)?t.length-t.indexOf(\".\")-1:0}function yy(e){var t=String(e);if(vy(e)){if(e>Number.MAX_SAFE_INTEGER)return String(py()?BigInt(e).toString():Number.MAX_SAFE_INTEGER);if(e<Number.MIN_SAFE_INTEGER)return String(py()?BigInt(e).toString():Number.MIN_SAFE_INTEGER);t=e.toFixed(by(t))}return gy(t).fullStr}function wy(e){return\"number\"==typeof e?!Number.isNaN(e):!!e&&(/^\\s*-?\\d+(\\.\\d+)?\\s*$/.test(e)||/^\\s*-?\\d+\\.\\s*$/.test(e)||/^\\s*-?\\.\\d+\\s*$/.test(e))}var xy=function(){function e(t){if(ei(this,e),De(this,\"origin\",\"\"),De(this,\"negative\",void 0),De(this,\"integer\",void 0),De(this,\"decimal\",void 0),De(this,\"decimalLen\",void 0),De(this,\"empty\",void 0),De(this,\"nan\",void 0),my(t))this.empty=!0;else if(this.origin=String(t),\"-\"===t||Number.isNaN(t))this.nan=!0;else{var r=t;if(vy(r)&&(r=Number(r)),wy(r=\"string\"==typeof r?r:yy(r))){var n=gy(r);this.negative=n.negative;var o=n.trimStr.split(\".\");this.integer=BigInt(o[0]);var i=o[1]||\"0\";this.decimal=BigInt(i),this.decimalLen=i.length}else this.nan=!0}}return ri(e,[{key:\"getMark\",value:function(){return this.negative?\"-\":\"\"}},{key:\"getIntegerStr\",value:function(){return this.integer.toString()}},{key:\"getDecimalStr\",value:function(){return this.decimal.toString().padStart(this.decimalLen,\"0\")}},{key:\"alignDecimal\",value:function(e){var t=\"\".concat(this.getMark()).concat(this.getIntegerStr()).concat(this.getDecimalStr().padEnd(e,\"0\"));return BigInt(t)}},{key:\"negate\",value:function(){var t=new e(this.toString());return t.negative=!t.negative,t}},{key:\"cal\",value:function(t,r,n){var o=Math.max(this.getDecimalStr().length,t.getDecimalStr().length),i=r(this.alignDecimal(o),t.alignDecimal(o)).toString(),a=n(o),s=gy(i),l=s.negativeStr,c=s.trimStr,u=\"\".concat(l).concat(c.padStart(a+1,\"0\"));return new e(\"\".concat(u.slice(0,-a),\".\").concat(u.slice(-a)))}},{key:\"add\",value:function(t){if(this.isInvalidate())return new e(t);var r=new e(t);return r.isInvalidate()?this:this.cal(r,(function(e,t){return e+t}),(function(e){return e}))}},{key:\"multi\",value:function(t){var r=new e(t);return this.isInvalidate()||r.isInvalidate()?new e(NaN):this.cal(r,(function(e,t){return e*t}),(function(e){return 2*e}))}},{key:\"isEmpty\",value:function(){return this.empty}},{key:\"isNaN\",value:function(){return this.nan}},{key:\"isInvalidate\",value:function(){return this.isEmpty()||this.isNaN()}},{key:\"equals\",value:function(e){return this.toString()===(null==e?void 0:e.toString())}},{key:\"lessEquals\",value:function(e){return this.add(e.negate().toString()).toNumber()<=0}},{key:\"toNumber\",value:function(){return this.isNaN()?NaN:Number(this.toString())}},{key:\"toString\",value:function(){return arguments.length>0&&void 0!==arguments[0]&&!arguments[0]?this.origin:this.isInvalidate()?\"\":gy(\"\".concat(this.getMark()).concat(this.getIntegerStr(),\".\").concat(this.getDecimalStr())).fullStr}}]),e}(),Sy=function(){function e(t){ei(this,e),De(this,\"origin\",\"\"),De(this,\"number\",void 0),De(this,\"empty\",void 0),my(t)?this.empty=!0:(this.origin=String(t),this.number=Number(t))}return ri(e,[{key:\"negate\",value:function(){return new e(-this.toNumber())}},{key:\"add\",value:function(t){if(this.isInvalidate())return new e(t);var r=Number(t);if(Number.isNaN(r))return this;var n=this.number+r;if(n>Number.MAX_SAFE_INTEGER)return new e(Number.MAX_SAFE_INTEGER);if(n<Number.MIN_SAFE_INTEGER)return new e(Number.MIN_SAFE_INTEGER);var o=Math.max(by(this.number),by(r));return new e(n.toFixed(o))}},{key:\"multi\",value:function(t){var r=Number(t);if(this.isInvalidate()||Number.isNaN(r))return new e(NaN);var n=this.number*r;if(n>Number.MAX_SAFE_INTEGER)return new e(Number.MAX_SAFE_INTEGER);if(n<Number.MIN_SAFE_INTEGER)return new e(Number.MIN_SAFE_INTEGER);var o=Math.max(by(this.number),by(r));return new e(n.toFixed(o))}},{key:\"isEmpty\",value:function(){return this.empty}},{key:\"isNaN\",value:function(){return Number.isNaN(this.number)}},{key:\"isInvalidate\",value:function(){return this.isEmpty()||this.isNaN()}},{key:\"equals\",value:function(e){return this.toNumber()===(null==e?void 0:e.toNumber())}},{key:\"lessEquals\",value:function(e){return this.add(e.negate().toString()).toNumber()<=0}},{key:\"toNumber\",value:function(){return this.number}},{key:\"toString\",value:function(){return arguments.length>0&&void 0!==arguments[0]&&!arguments[0]?this.origin:this.isInvalidate()?\"\":yy(this.number)}}]),e}();function Cy(e){return py()?new xy(e):new Sy(e)}function ky(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(\"\"===e)return\"\";var o=gy(e),i=o.negativeStr,a=o.integerStr,s=o.decimalStr,l=\"\".concat(t).concat(s),c=\"\".concat(i).concat(a);if(r>=0){var u=Number(s[r]);return u>=5&&!n?ky(Cy(e).add(\"\".concat(i,\"0.\").concat(\"0\".repeat(r)).concat(10-u)).toString(),t,r,n):0===r?c:\"\".concat(c).concat(t).concat(s.padEnd(r,\"0\").slice(0,r))}return\".0\"===l?c:\"\".concat(c).concat(l)}const Ey=Cy;function Oy(e,t,r){var n=t.cloneNode(!0),o=Object.create(e,{target:{value:n},currentTarget:{value:n}});return n.value=r,\"number\"==typeof t.selectionStart&&\"number\"==typeof t.selectionEnd&&(n.selectionStart=t.selectionStart,n.selectionEnd=t.selectionEnd),n.setSelectionRange=function(){t.setSelectionRange.apply(t,arguments)},o}function Ay(e,t,r,n){if(r){var o=t;\"click\"!==t.type?\"file\"===e.type||void 0===n?r(o):r(o=Oy(t,e,n)):r(o=Oy(t,e,\"\"))}}function Ty(e,t){if(e){e.focus(t);var r=(t||{}).cursor;if(r){var n=e.value.length;switch(r){case\"start\":e.setSelectionRange(0,0);break;case\"end\":e.setSelectionRange(n,n);break;default:e.setSelectionRange(0,n)}}}}var jy=m.forwardRef((function(e,t){var r,n,o,i=e.inputElement,a=e.children,s=e.prefixCls,l=e.prefix,c=e.suffix,u=e.addonBefore,d=e.addonAfter,f=e.className,h=e.style,p=e.disabled,g=e.readOnly,v=e.focused,b=e.triggerFocus,y=e.allowClear,w=e.value,x=e.handleReset,S=e.hidden,C=e.classes,k=e.classNames,E=e.dataAttrs,O=e.styles,A=e.components,T=e.onClear,j=null!=a?a:i,P=(null==A?void 0:A.affixWrapper)||\"span\",M=(null==A?void 0:A.groupWrapper)||\"span\",R=(null==A?void 0:A.wrapper)||\"span\",_=(null==A?void 0:A.groupAddon)||\"span\",I=(0,m.useRef)(null),N=function(e){return!!(e.prefix||e.suffix||e.allowClear)}(e),F=(0,m.cloneElement)(j,{value:w,className:ze()(null===(r=j.props)||void 0===r?void 0:r.className,!N&&(null==k?void 0:k.variant))||null}),D=(0,m.useRef)(null);if(m.useImperativeHandle(t,(function(){return{nativeElement:D.current||I.current}})),N){var B=null;if(y){var L=!p&&!g&&w,z=\"\".concat(s,\"-clear-icon\"),H=\"object\"===Ne(y)&&null!=y&&y.clearIcon?y.clearIcon:\"✖\";B=m.createElement(\"button\",{type:\"button\",tabIndex:-1,onClick:function(e){null==x||x(e),null==T||T()},onMouseDown:function(e){return e.preventDefault()},className:ze()(z,De(De({},\"\".concat(z,\"-hidden\"),!L),\"\".concat(z,\"-has-suffix\"),!!c))},H)}var U=\"\".concat(s,\"-affix-wrapper\"),V=ze()(U,De(De(De(De(De({},\"\".concat(s,\"-disabled\"),p),\"\".concat(U,\"-disabled\"),p),\"\".concat(U,\"-focused\"),v),\"\".concat(U,\"-readonly\"),g),\"\".concat(U,\"-input-with-clear-btn\"),c&&y&&w),null==C?void 0:C.affixWrapper,null==k?void 0:k.affixWrapper,null==k?void 0:k.variant),W=(c||y)&&m.createElement(\"span\",{className:ze()(\"\".concat(s,\"-suffix\"),null==k?void 0:k.suffix),style:null==O?void 0:O.suffix},B,c);F=m.createElement(P,Te({className:V,style:null==O?void 0:O.affixWrapper,onClick:function(e){var t;null!==(t=I.current)&&void 0!==t&&t.contains(e.target)&&(null==b||b())}},null==E?void 0:E.affixWrapper,{ref:I}),l&&m.createElement(\"span\",{className:ze()(\"\".concat(s,\"-prefix\"),null==k?void 0:k.prefix),style:null==O?void 0:O.prefix},l),F,W)}if(function(e){return!(!e.addonBefore&&!e.addonAfter)}(e)){var G=\"\".concat(s,\"-group\"),q=\"\".concat(G,\"-addon\"),K=\"\".concat(G,\"-wrapper\"),X=ze()(\"\".concat(s,\"-wrapper\"),G,null==C?void 0:C.wrapper,null==k?void 0:k.wrapper),Y=ze()(K,De({},\"\".concat(K,\"-disabled\"),p),null==C?void 0:C.group,null==k?void 0:k.groupWrapper);F=m.createElement(M,{className:Y,ref:D},m.createElement(R,{className:X},u&&m.createElement(_,{className:q},u),F,d&&m.createElement(_,{className:q},d)))}return m.cloneElement(F,{className:ze()(null===(n=F.props)||void 0===n?void 0:n.className,f)||null,style:At(At({},null===(o=F.props)||void 0===o?void 0:o.style),h),hidden:S})}));const Py=jy;var My=[\"show\"];function Ry(e,t){return m.useMemo((function(){var r={};t&&(r.show=\"object\"===Ne(t)&&t.formatter?t.formatter:!!t);var n=r=At(At({},r),e),o=n.show,i=Be(n,My);return At(At({},i),{},{show:!!o,showFormatter:\"function\"==typeof o?o:void 0,strategy:i.strategy||function(e){return e.length}})}),[e,t])}var _y=[\"autoComplete\",\"onChange\",\"onFocus\",\"onBlur\",\"onPressEnter\",\"onKeyDown\",\"onKeyUp\",\"prefixCls\",\"disabled\",\"htmlSize\",\"className\",\"maxLength\",\"suffix\",\"showCount\",\"count\",\"type\",\"classes\",\"classNames\",\"styles\",\"onCompositionStart\",\"onCompositionEnd\"],Iy=(0,m.forwardRef)((function(e,t){var r=e.autoComplete,n=e.onChange,o=e.onFocus,i=e.onBlur,a=e.onPressEnter,s=e.onKeyDown,l=e.onKeyUp,c=e.prefixCls,u=void 0===c?\"rc-input\":c,d=e.disabled,f=e.htmlSize,h=e.className,p=e.maxLength,g=e.suffix,v=e.showCount,b=e.count,y=e.type,w=void 0===y?\"text\":y,x=e.classes,S=e.classNames,C=e.styles,k=e.onCompositionStart,E=e.onCompositionEnd,O=Be(e,_y),A=Ie((0,m.useState)(!1),2),T=A[0],j=A[1],P=(0,m.useRef)(!1),M=(0,m.useRef)(!1),R=(0,m.useRef)(null),_=(0,m.useRef)(null),I=function(e){R.current&&Ty(R.current,e)},N=Ie(Ks(e.defaultValue,{value:e.value}),2),F=N[0],D=N[1],B=null==F?\"\":String(F),L=Ie((0,m.useState)(null),2),z=L[0],H=L[1],U=Ry(b,v),V=U.max||p,W=U.strategy(B),G=!!V&&W>V;(0,m.useImperativeHandle)(t,(function(){var e;return{focus:I,blur:function(){var e;null===(e=R.current)||void 0===e||e.blur()},setSelectionRange:function(e,t,r){var n;null===(n=R.current)||void 0===n||n.setSelectionRange(e,t,r)},select:function(){var e;null===(e=R.current)||void 0===e||e.select()},input:R.current,nativeElement:(null===(e=_.current)||void 0===e?void 0:e.nativeElement)||R.current}})),(0,m.useEffect)((function(){M.current&&(M.current=!1),j((function(e){return(!e||!d)&&e}))}),[d]);var q=function(e,t,r){var o,i,a=t;if(!P.current&&U.exceedFormatter&&U.max&&U.strategy(t)>U.max)t!==(a=U.exceedFormatter(t,{max:U.max}))&&H([(null===(o=R.current)||void 0===o?void 0:o.selectionStart)||0,(null===(i=R.current)||void 0===i?void 0:i.selectionEnd)||0]);else if(\"compositionEnd\"===r.source)return;D(a),R.current&&Ay(R.current,e,n,a)};(0,m.useEffect)((function(){var e;z&&(null===(e=R.current)||void 0===e||e.setSelectionRange.apply(e,Vo(z)))}),[z]);var K,X=G&&\"\".concat(u,\"-out-of-range\");return m.createElement(Py,Te({},O,{prefixCls:u,className:ze()(h,X),handleReset:function(e){D(\"\"),I(),R.current&&Ay(R.current,e,n)},value:B,focused:T,triggerFocus:I,suffix:function(){var e=Number(V)>0;if(g||U.show){var t=U.showFormatter?U.showFormatter({value:B,count:W,maxLength:V}):\"\".concat(W).concat(e?\" / \".concat(V):\"\");return m.createElement(m.Fragment,null,U.show&&m.createElement(\"span\",{className:ze()(\"\".concat(u,\"-show-count-suffix\"),De({},\"\".concat(u,\"-show-count-has-suffix\"),!!g),null==S?void 0:S.count),style:At({},null==C?void 0:C.count)},t),g)}return null}(),disabled:d,classes:x,classNames:S,styles:C,ref:_}),(K=kf(e,[\"prefixCls\",\"onPressEnter\",\"addonBefore\",\"addonAfter\",\"prefix\",\"suffix\",\"allowClear\",\"defaultValue\",\"showCount\",\"count\",\"classes\",\"htmlSize\",\"styles\",\"classNames\",\"onClear\"]),m.createElement(\"input\",Te({autoComplete:r},K,{onChange:function(e){q(e,e.target.value,{source:\"change\"})},onFocus:function(e){j(!0),null==o||o(e)},onBlur:function(e){M.current&&(M.current=!1),j(!1),null==i||i(e)},onKeyDown:function(e){a&&\"Enter\"===e.key&&!M.current&&(M.current=!0,a(e)),null==s||s(e)},onKeyUp:function(e){\"Enter\"===e.key&&(M.current=!1),null==l||l(e)},className:ze()(u,De({},\"\".concat(u,\"-disabled\"),d),null==S?void 0:S.input),style:null==C?void 0:C.input,ref:R,size:f,type:w,onCompositionStart:function(e){P.current=!0,null==k||k(e)},onCompositionEnd:function(e){P.current=!1,q(e,e.currentTarget.value,{source:\"compositionEnd\"}),null==E||E(e)}}))))}));const Ny=Iy;function Fy(e){var t=e.prefixCls,r=e.upNode,n=e.downNode,o=e.upDisabled,i=e.downDisabled,a=e.onStep,s=m.useRef(),l=m.useRef([]),c=m.useRef();c.current=a;var u,d,f,h=function(){clearTimeout(s.current)},p=function(e,t){e.preventDefault(),h(),c.current(t),s.current=setTimeout((function e(){c.current(t),s.current=setTimeout(e,200)}),600)};if(m.useEffect((function(){return function(){h(),l.current.forEach((function(e){return Ol.cancel(e)}))}}),[]),u=Ie((0,m.useState)(!1),2),d=u[0],f=u[1],Pi((function(){f(Gh())}),[]),d)return null;var g=\"\".concat(t,\"-handler\"),v=ze()(g,\"\".concat(g,\"-up\"),De({},\"\".concat(g,\"-up-disabled\"),o)),b=ze()(g,\"\".concat(g,\"-down\"),De({},\"\".concat(g,\"-down-disabled\"),i)),y=function(){return l.current.push(Ol(h))},w={unselectable:\"on\",role:\"button\",onMouseUp:y,onMouseLeave:y};return m.createElement(\"div\",{className:\"\".concat(g,\"-wrap\")},m.createElement(\"span\",Te({},w,{onMouseDown:function(e){p(e,!0)},\"aria-label\":\"Increase Value\",\"aria-disabled\":o,className:v}),r||m.createElement(\"span\",{unselectable:\"on\",className:\"\".concat(t,\"-handler-up-inner\")})),m.createElement(\"span\",Te({},w,{onMouseDown:function(e){p(e,!1)},\"aria-label\":\"Decrease Value\",\"aria-disabled\":i,className:b}),n||m.createElement(\"span\",{unselectable:\"on\",className:\"\".concat(t,\"-handler-down-inner\")})))}function Dy(e){var t=\"number\"==typeof e?yy(e):gy(e).fullStr;return t.includes(\".\")?gy(t.replace(/(\\d)\\.(\\d)/g,\"$1$2.\")).fullStr:e+\"0\"}var By=[\"prefixCls\",\"className\",\"style\",\"min\",\"max\",\"step\",\"defaultValue\",\"value\",\"disabled\",\"readOnly\",\"upHandler\",\"downHandler\",\"keyboard\",\"changeOnWheel\",\"controls\",\"classNames\",\"stringMode\",\"parser\",\"formatter\",\"precision\",\"decimalSeparator\",\"onChange\",\"onInput\",\"onPressEnter\",\"onStep\",\"changeOnBlur\",\"domRef\"],Ly=[\"disabled\",\"style\",\"prefixCls\",\"value\",\"prefix\",\"suffix\",\"addonBefore\",\"addonAfter\",\"className\",\"classNames\"],zy=function(e,t){return e||t.isEmpty()?t.toString():t.toNumber()},Hy=function(e){var t=Ey(e);return t.isInvalidate()?null:t},Uy=m.forwardRef((function(e,t){var r=e.prefixCls,n=e.className,o=e.style,i=e.min,a=e.max,s=e.step,l=void 0===s?1:s,c=e.defaultValue,u=e.value,d=e.disabled,f=e.readOnly,h=e.upHandler,p=e.downHandler,g=e.keyboard,v=e.changeOnWheel,b=void 0!==v&&v,y=e.controls,w=void 0===y||y,x=(e.classNames,e.stringMode),S=e.parser,C=e.formatter,k=e.precision,E=e.decimalSeparator,O=e.onChange,A=e.onInput,T=e.onPressEnter,j=e.onStep,P=e.changeOnBlur,M=void 0===P||P,R=e.domRef,_=Be(e,By),I=\"\".concat(r,\"-input\"),N=m.useRef(null),F=Ie(m.useState(!1),2),D=F[0],B=F[1],L=m.useRef(!1),z=m.useRef(!1),H=m.useRef(!1),U=Ie(m.useState((function(){return Ey(null!=u?u:c)})),2),V=U[0],W=U[1],G=m.useCallback((function(e,t){if(!t)return k>=0?k:Math.max(by(e),by(l))}),[k,l]),q=m.useCallback((function(e){var t=String(e);if(S)return S(t);var r=t;return E&&(r=r.replace(E,\".\")),r.replace(/[^\\w.-]+/g,\"\")}),[S,E]),K=m.useRef(\"\"),X=m.useCallback((function(e,t){if(C)return C(e,{userTyping:t,input:String(K.current)});var r=\"number\"==typeof e?yy(e):e;if(!t){var n=G(r,t);wy(r)&&(E||n>=0)&&(r=ky(r,E||\".\",n))}return r}),[C,G,E]),Y=Ie(m.useState((function(){var e=null!=c?c:u;return V.isInvalidate()&&[\"string\",\"number\"].includes(Ne(e))?Number.isNaN(e)?\"\":e:X(V.toString(),!1)})),2),$=Y[0],Z=Y[1];function Q(e,t){Z(X(e.isInvalidate()?e.toString(!1):e.toString(!t),t))}K.current=$;var J,ee,te=m.useMemo((function(){return Hy(a)}),[a,k]),re=m.useMemo((function(){return Hy(i)}),[i,k]),ne=m.useMemo((function(){return!(!te||!V||V.isInvalidate())&&te.lessEquals(V)}),[te,V]),oe=m.useMemo((function(){return!(!re||!V||V.isInvalidate())&&V.lessEquals(re)}),[re,V]),ie=function(e,t){var r=(0,m.useRef)(null);return[function(){try{var t=e.selectionStart,n=e.selectionEnd,o=e.value,i=o.substring(0,t),a=o.substring(n);r.current={start:t,end:n,value:o,beforeTxt:i,afterTxt:a}}catch(e){}},function(){if(e&&r.current&&t)try{var n=e.value,o=r.current,i=o.beforeTxt,a=o.afterTxt,s=o.start,l=n.length;if(n.startsWith(i))l=i.length;else if(n.endsWith(a))l=n.length-r.current.afterTxt.length;else{var c=i[s-1],u=n.indexOf(c,s-1);-1!==u&&(l=u+1)}e.setSelectionRange(l,l)}catch(e){Xt(!1,\"Something warning of cursor restore. Please fire issue about this: \".concat(e.message))}}]}(N.current,D),ae=Ie(ie,2),se=ae[0],le=ae[1],ce=function(e){return te&&!e.lessEquals(te)?te:re&&!re.lessEquals(e)?re:null},ue=function(e){return!ce(e)},de=function(e,t){var r=e,n=ue(r)||r.isEmpty();if(r.isEmpty()||t||(r=ce(r)||r,n=!0),!f&&!d&&n){var o=r.toString(),i=G(o,t);return i>=0&&(r=Ey(ky(o,\".\",i)),ue(r)||(r=Ey(ky(o,\".\",i,!0)))),r.equals(V)||(void 0===u&&W(r),null==O||O(r.isEmpty()?null:zy(x,r)),void 0===u&&Q(r,t)),r}return V},fe=(J=(0,m.useRef)(0),ee=function(){Ol.cancel(J.current)},(0,m.useEffect)((function(){return ee}),[]),function(e){ee(),J.current=Ol((function(){e()}))}),he=function e(t){if(se(),K.current=t,Z(t),!z.current){var r=q(t),n=Ey(r);n.isNaN()||de(n,!0)}null==A||A(t),fe((function(){var r=t;S||(r=t.replace(/。/g,\".\")),r!==t&&e(r)}))},pe=function(e){var t;if(!(e&&ne||!e&&oe)){L.current=!1;var r=Ey(H.current?Dy(l):l);e||(r=r.negate());var n=(V||Ey(0)).add(r.toString()),o=de(n,!1);null==j||j(zy(x,o),{offset:H.current?Dy(l):l,type:e?\"up\":\"down\"}),null===(t=N.current)||void 0===t||t.focus()}},me=function(e){var t,r=Ey(q($));t=r.isNaN()?de(V,e):de(r,e),void 0!==u?Q(V,!1):t.isNaN()||Q(t,!1)};return m.useEffect((function(){if(b&&D){var e=function(e){pe(e.deltaY<0),e.preventDefault()},t=N.current;if(t)return t.addEventListener(\"wheel\",e,{passive:!1}),function(){return t.removeEventListener(\"wheel\",e)}}})),ji((function(){V.isInvalidate()||Q(V,!1)}),[k,C]),ji((function(){var e=Ey(u);W(e);var t=Ey(q($));e.equals(t)&&L.current&&!C||Q(e,L.current)}),[u]),ji((function(){C&&le()}),[$]),m.createElement(\"div\",{ref:R,className:ze()(r,n,De(De(De(De(De({},\"\".concat(r,\"-focused\"),D),\"\".concat(r,\"-disabled\"),d),\"\".concat(r,\"-readonly\"),f),\"\".concat(r,\"-not-a-number\"),V.isNaN()),\"\".concat(r,\"-out-of-range\"),!V.isInvalidate()&&!ue(V))),style:o,onFocus:function(){B(!0)},onBlur:function(){M&&me(!1),B(!1),L.current=!1},onKeyDown:function(e){var t=e.key,r=e.shiftKey;L.current=!0,H.current=r,\"Enter\"===t&&(z.current||(L.current=!1),me(!1),null==T||T(e)),!1!==g&&!z.current&&[\"Up\",\"ArrowUp\",\"Down\",\"ArrowDown\"].includes(t)&&(pe(\"Up\"===t||\"ArrowUp\"===t),e.preventDefault())},onKeyUp:function(){L.current=!1,H.current=!1},onCompositionStart:function(){z.current=!0},onCompositionEnd:function(){z.current=!1,he(N.current.value)},onBeforeInput:function(){L.current=!0}},w&&m.createElement(Fy,{prefixCls:r,upNode:h,downNode:p,upDisabled:ne,downDisabled:oe,onStep:pe}),m.createElement(\"div\",{className:\"\".concat(I,\"-wrap\")},m.createElement(\"input\",Te({autoComplete:\"off\",role:\"spinbutton\",\"aria-valuemin\":i,\"aria-valuemax\":a,\"aria-valuenow\":V.isInvalidate()?null:V.toString(),step:l},_,{ref:Cn(N,t),className:I,value:$,onChange:function(e){he(e.target.value)},disabled:d,readOnly:f}))))})),Vy=m.forwardRef((function(e,t){var r=e.disabled,n=e.style,o=e.prefixCls,i=void 0===o?\"rc-input-number\":o,a=e.value,s=e.prefix,l=e.suffix,c=e.addonBefore,u=e.addonAfter,d=e.className,f=e.classNames,h=Be(e,Ly),p=m.useRef(null),g=m.useRef(null),v=m.useRef(null),b=function(e){v.current&&Ty(v.current,e)};return m.useImperativeHandle(t,(function(){return e=v.current,t={focus:b,nativeElement:p.current.nativeElement||g.current},\"undefined\"!=typeof Proxy&&e?new Proxy(e,{get:function(e,r){if(t[r])return t[r];var n=e[r];return\"function\"==typeof n?n.bind(e):n}}):e;var e,t})),m.createElement(Py,{className:d,triggerFocus:b,prefixCls:i,value:a,disabled:r,style:n,prefix:s,suffix:l,addonAfter:u,addonBefore:c,classNames:f,components:{affixWrapper:\"div\",groupWrapper:\"div\",wrapper:\"div\",groupAddon:\"div\"},ref:p},m.createElement(Uy,Te({prefixCls:i,disabled:r,ref:v,domRef:g,className:null==f?void 0:f.input},h)))}));const Wy=Vy;function Gy(e){return Au(e,{inputAffixPadding:e.paddingXXS})}const qy=e=>{const{controlHeight:t,fontSize:r,lineHeight:n,lineWidth:o,controlHeightSM:i,controlHeightLG:a,fontSizeLG:s,lineHeightLG:l,paddingSM:c,controlPaddingHorizontalSM:u,controlPaddingHorizontal:d,colorFillAlter:f,colorPrimaryHover:h,colorPrimary:p,controlOutlineWidth:m,controlOutline:g,colorErrorOutline:v,colorWarningOutline:b,colorBgContainer:y,inputFontSize:w,inputFontSizeLG:x,inputFontSizeSM:S}=e,C=w||r,k=S||C,E=x||s,O=Math.round((t-C*n)/2*10)/10-o,A=Math.round((i-k*n)/2*10)/10-o,T=Math.ceil((a-E*l)/2*10)/10-o;return{paddingBlock:Math.max(O,0),paddingBlockSM:Math.max(A,0),paddingBlockLG:Math.max(T,0),paddingInline:c-o,paddingInlineSM:u-o,paddingInlineLG:d-o,addonBg:f,activeBorderColor:p,hoverBorderColor:h,activeShadow:`0 0 0 ${m}px ${g}`,errorActiveShadow:`0 0 0 ${m}px ${v}`,warningActiveShadow:`0 0 0 ${m}px ${b}`,hoverBg:y,activeBg:y,inputFontSize:C,inputFontSizeLG:E,inputFontSizeSM:k}},Ky=e=>({borderColor:e.hoverBorderColor,backgroundColor:e.hoverBg}),Xy=e=>({color:e.colorTextDisabled,backgroundColor:e.colorBgContainerDisabled,borderColor:e.colorBorder,boxShadow:\"none\",cursor:\"not-allowed\",opacity:1,\"input[disabled], textarea[disabled]\":{cursor:\"not-allowed\"},\"&:hover:not([disabled])\":Object.assign({},Ky(Au(e,{hoverBorderColor:e.colorBorder,hoverBg:e.colorBgContainerDisabled})))}),Yy=(e,t)=>({background:e.colorBgContainer,borderWidth:e.lineWidth,borderStyle:e.lineType,borderColor:t.borderColor,\"&:hover\":{borderColor:t.hoverBorderColor,backgroundColor:e.hoverBg},\"&:focus, &:focus-within\":{borderColor:t.activeBorderColor,boxShadow:t.activeShadow,outline:0,backgroundColor:e.activeBg}}),$y=(e,t)=>({[`&${e.componentCls}-status-${t.status}:not(${e.componentCls}-disabled)`]:Object.assign(Object.assign({},Yy(e,t)),{[`${e.componentCls}-prefix, ${e.componentCls}-suffix`]:{color:t.affixColor}}),[`&${e.componentCls}-status-${t.status}${e.componentCls}-disabled`]:{borderColor:t.borderColor}}),Zy=(e,t)=>({\"&-outlined\":Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},Yy(e,{borderColor:e.colorBorder,hoverBorderColor:e.hoverBorderColor,activeBorderColor:e.activeBorderColor,activeShadow:e.activeShadow})),{[`&${e.componentCls}-disabled, &[disabled]`]:Object.assign({},Xy(e))}),$y(e,{status:\"error\",borderColor:e.colorError,hoverBorderColor:e.colorErrorBorderHover,activeBorderColor:e.colorError,activeShadow:e.errorActiveShadow,affixColor:e.colorError})),$y(e,{status:\"warning\",borderColor:e.colorWarning,hoverBorderColor:e.colorWarningBorderHover,activeBorderColor:e.colorWarning,activeShadow:e.warningActiveShadow,affixColor:e.colorWarning})),t)}),Qy=(e,t)=>({[`&${e.componentCls}-group-wrapper-status-${t.status}`]:{[`${e.componentCls}-group-addon`]:{borderColor:t.addonBorderColor,color:t.addonColor}}}),Jy=e=>({\"&-outlined\":Object.assign(Object.assign(Object.assign({[`${e.componentCls}-group`]:{\"&-addon\":{background:e.addonBg,border:`${Si(e.lineWidth)} ${e.lineType} ${e.colorBorder}`},\"&-addon:first-child\":{borderInlineEnd:0},\"&-addon:last-child\":{borderInlineStart:0}}},Qy(e,{status:\"error\",addonBorderColor:e.colorError,addonColor:e.colorErrorText})),Qy(e,{status:\"warning\",addonBorderColor:e.colorWarning,addonColor:e.colorWarningText})),{[`&${e.componentCls}-group-wrapper-disabled`]:{[`${e.componentCls}-group-addon`]:Object.assign({},Xy(e))}})}),ew=(e,t)=>{const{componentCls:r}=e;return{\"&-borderless\":Object.assign({background:\"transparent\",border:\"none\",\"&:focus, &:focus-within\":{outline:\"none\"},[`&${r}-disabled, &[disabled]`]:{color:e.colorTextDisabled,cursor:\"not-allowed\"},[`&${r}-status-error`]:{\"&, & input, & textarea\":{color:e.colorError}},[`&${r}-status-warning`]:{\"&, & input, & textarea\":{color:e.colorWarning}}},t)}},tw=(e,t)=>{var r;return{background:t.bg,borderWidth:e.lineWidth,borderStyle:e.lineType,borderColor:\"transparent\",\"input&, & input, textarea&, & textarea\":{color:null!==(r=null==t?void 0:t.inputColor)&&void 0!==r?r:\"unset\"},\"&:hover\":{background:t.hoverBg},\"&:focus, &:focus-within\":{outline:0,borderColor:t.activeBorderColor,backgroundColor:e.activeBg}}},rw=(e,t)=>({[`&${e.componentCls}-status-${t.status}:not(${e.componentCls}-disabled)`]:Object.assign(Object.assign({},tw(e,t)),{[`${e.componentCls}-prefix, ${e.componentCls}-suffix`]:{color:t.affixColor}})}),nw=(e,t)=>({\"&-filled\":Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},tw(e,{bg:e.colorFillTertiary,hoverBg:e.colorFillSecondary,activeBorderColor:e.activeBorderColor})),{[`&${e.componentCls}-disabled, &[disabled]`]:Object.assign({},Xy(e))}),rw(e,{status:\"error\",bg:e.colorErrorBg,hoverBg:e.colorErrorBgHover,activeBorderColor:e.colorError,inputColor:e.colorErrorText,affixColor:e.colorError})),rw(e,{status:\"warning\",bg:e.colorWarningBg,hoverBg:e.colorWarningBgHover,activeBorderColor:e.colorWarning,inputColor:e.colorWarningText,affixColor:e.colorWarning})),t)}),ow=(e,t)=>({[`&${e.componentCls}-group-wrapper-status-${t.status}`]:{[`${e.componentCls}-group-addon`]:{background:t.addonBg,color:t.addonColor}}}),iw=e=>({\"&-filled\":Object.assign(Object.assign(Object.assign({[`${e.componentCls}-group`]:{\"&-addon\":{background:e.colorFillTertiary},[`${e.componentCls}-filled:not(:focus):not(:focus-within)`]:{\"&:not(:first-child)\":{borderInlineStart:`${Si(e.lineWidth)} ${e.lineType} ${e.colorSplit}`},\"&:not(:last-child)\":{borderInlineEnd:`${Si(e.lineWidth)} ${e.lineType} ${e.colorSplit}`}}}},ow(e,{status:\"error\",addonBg:e.colorErrorBg,addonColor:e.colorErrorText})),ow(e,{status:\"warning\",addonBg:e.colorWarningBg,addonColor:e.colorWarningText})),{[`&${e.componentCls}-group-wrapper-disabled`]:{[`${e.componentCls}-group`]:{\"&-addon\":{background:e.colorFillTertiary,color:e.colorTextDisabled},\"&-addon:first-child\":{borderInlineStart:`${Si(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderTop:`${Si(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderBottom:`${Si(e.lineWidth)} ${e.lineType} ${e.colorBorder}`},\"&-addon:last-child\":{borderInlineEnd:`${Si(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderTop:`${Si(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderBottom:`${Si(e.lineWidth)} ${e.lineType} ${e.colorBorder}`}}}})}),aw=(e,t)=>({background:e.colorBgContainer,borderWidth:`${Si(e.lineWidth)} 0`,borderStyle:`${e.lineType} none`,borderColor:`transparent transparent ${t.borderColor} transparent`,borderRadius:0,\"&:hover\":{borderColor:`transparent transparent ${t.borderColor} transparent`,backgroundColor:e.hoverBg},\"&:focus, &:focus-within\":{borderColor:`transparent transparent ${t.borderColor} transparent`,outline:0,backgroundColor:e.activeBg}}),sw=(e,t)=>({[`&${e.componentCls}-status-${t.status}:not(${e.componentCls}-disabled)`]:Object.assign(Object.assign({},aw(e,t)),{[`${e.componentCls}-prefix, ${e.componentCls}-suffix`]:{color:t.affixColor}}),[`&${e.componentCls}-status-${t.status}${e.componentCls}-disabled`]:{borderColor:`transparent transparent ${t.borderColor} transparent`}}),lw=(e,t)=>({\"&-underlined\":Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},aw(e,{borderColor:e.colorBorder,hoverBorderColor:e.hoverBorderColor,activeBorderColor:e.activeBorderColor,activeShadow:e.activeShadow})),{[`&${e.componentCls}-disabled, &[disabled]`]:{color:e.colorTextDisabled,boxShadow:\"none\",cursor:\"not-allowed\",\"&:hover\":{borderColor:`transparent transparent ${e.colorBorder} transparent`}},\"input[disabled], textarea[disabled]\":{cursor:\"not-allowed\"}}),sw(e,{status:\"error\",borderColor:e.colorError,hoverBorderColor:e.colorErrorBorderHover,activeBorderColor:e.colorError,activeShadow:e.errorActiveShadow,affixColor:e.colorError})),sw(e,{status:\"warning\",borderColor:e.colorWarning,hoverBorderColor:e.colorWarningBorderHover,activeBorderColor:e.colorWarning,activeShadow:e.warningActiveShadow,affixColor:e.colorWarning})),t)}),cw=e=>({\"&::-moz-placeholder\":{opacity:1},\"&::placeholder\":{color:e,userSelect:\"none\"},\"&:placeholder-shown\":{textOverflow:\"ellipsis\"}}),uw=e=>{const{paddingBlockLG:t,lineHeightLG:r,borderRadiusLG:n,paddingInlineLG:o}=e;return{padding:`${Si(t)} ${Si(o)}`,fontSize:e.inputFontSizeLG,lineHeight:r,borderRadius:n}},dw=e=>({padding:`${Si(e.paddingBlockSM)} ${Si(e.paddingInlineSM)}`,fontSize:e.inputFontSizeSM,borderRadius:e.borderRadiusSM}),fw=e=>Object.assign(Object.assign({position:\"relative\",display:\"inline-block\",width:\"100%\",minWidth:0,padding:`${Si(e.paddingBlock)} ${Si(e.paddingInline)}`,color:e.colorText,fontSize:e.inputFontSize,lineHeight:e.lineHeight,borderRadius:e.borderRadius,transition:`all ${e.motionDurationMid}`},cw(e.colorTextPlaceholder)),{\"&-lg\":Object.assign({},uw(e)),\"&-sm\":Object.assign({},dw(e)),\"&-rtl, &-textarea-rtl\":{direction:\"rtl\"}}),hw=e=>{const{componentCls:t,antCls:r}=e;return{position:\"relative\",display:\"table\",width:\"100%\",borderCollapse:\"separate\",borderSpacing:0,\"&[class*='col-']\":{paddingInlineEnd:e.paddingXS,\"&:last-child\":{paddingInlineEnd:0}},[`&-lg ${t}, &-lg > ${t}-group-addon`]:Object.assign({},uw(e)),[`&-sm ${t}, &-sm > ${t}-group-addon`]:Object.assign({},dw(e)),[`&-lg ${r}-select-single ${r}-select-selector`]:{height:e.controlHeightLG},[`&-sm ${r}-select-single ${r}-select-selector`]:{height:e.controlHeightSM},[`> ${t}`]:{display:\"table-cell\",\"&:not(:first-child):not(:last-child)\":{borderRadius:0}},[`${t}-group`]:{\"&-addon, &-wrap\":{display:\"table-cell\",width:1,whiteSpace:\"nowrap\",verticalAlign:\"middle\",\"&:not(:first-child):not(:last-child)\":{borderRadius:0}},\"&-wrap > *\":{display:\"block !important\"},\"&-addon\":{position:\"relative\",padding:`0 ${Si(e.paddingInline)}`,color:e.colorText,fontWeight:\"normal\",fontSize:e.inputFontSize,textAlign:\"center\",borderRadius:e.borderRadius,transition:`all ${e.motionDurationSlow}`,lineHeight:1,[`${r}-select`]:{margin:`${Si(e.calc(e.paddingBlock).add(1).mul(-1).equal())} ${Si(e.calc(e.paddingInline).mul(-1).equal())}`,[`&${r}-select-single:not(${r}-select-customize-input):not(${r}-pagination-size-changer)`]:{[`${r}-select-selector`]:{backgroundColor:\"inherit\",border:`${Si(e.lineWidth)} ${e.lineType} transparent`,boxShadow:\"none\"}}},[`${r}-cascader-picker`]:{margin:`-9px ${Si(e.calc(e.paddingInline).mul(-1).equal())}`,backgroundColor:\"transparent\",[`${r}-cascader-input`]:{textAlign:\"start\",border:0,boxShadow:\"none\"}}}},[t]:{width:\"100%\",marginBottom:0,textAlign:\"inherit\",\"&:focus\":{zIndex:1,borderInlineEndWidth:1},\"&:hover\":{zIndex:1,borderInlineEndWidth:1,[`${t}-search-with-button &`]:{zIndex:0}}},[`> ${t}:first-child, ${t}-group-addon:first-child`]:{borderStartEndRadius:0,borderEndEndRadius:0,[`${r}-select ${r}-select-selector`]:{borderStartEndRadius:0,borderEndEndRadius:0}},[`> ${t}-affix-wrapper`]:{[`&:not(:first-child) ${t}`]:{borderStartStartRadius:0,borderEndStartRadius:0},[`&:not(:last-child) ${t}`]:{borderStartEndRadius:0,borderEndEndRadius:0}},[`> ${t}:last-child, ${t}-group-addon:last-child`]:{borderStartStartRadius:0,borderEndStartRadius:0,[`${r}-select ${r}-select-selector`]:{borderStartStartRadius:0,borderEndStartRadius:0}},[`${t}-affix-wrapper`]:{\"&:not(:last-child)\":{borderStartEndRadius:0,borderEndEndRadius:0,[`${t}-search &`]:{borderStartStartRadius:e.borderRadius,borderEndStartRadius:e.borderRadius}},[`&:not(:first-child), ${t}-search &:not(:first-child)`]:{borderStartStartRadius:0,borderEndStartRadius:0}},[`&${t}-group-compact`]:Object.assign(Object.assign({display:\"block\"},{\"&::before\":{display:\"table\",content:'\"\"'},\"&::after\":{display:\"table\",clear:\"both\",content:'\"\"'}}),{[`${t}-group-addon, ${t}-group-wrap, > ${t}`]:{\"&:not(:first-child):not(:last-child)\":{borderInlineEndWidth:e.lineWidth,\"&:hover, &:focus\":{zIndex:1}}},\"& > *\":{display:\"inline-flex\",float:\"none\",verticalAlign:\"top\",borderRadius:0},[`\\n        & > ${t}-affix-wrapper,\\n        & > ${t}-number-affix-wrapper,\\n        & > ${r}-picker-range\\n      `]:{display:\"inline-flex\"},\"& > *:not(:last-child)\":{marginInlineEnd:e.calc(e.lineWidth).mul(-1).equal(),borderInlineEndWidth:e.lineWidth},[t]:{float:\"none\"},[`& > ${r}-select > ${r}-select-selector,\\n      & > ${r}-select-auto-complete ${t},\\n      & > ${r}-cascader-picker ${t},\\n      & > ${t}-group-wrapper ${t}`]:{borderInlineEndWidth:e.lineWidth,borderRadius:0,\"&:hover, &:focus\":{zIndex:1}},[`& > ${r}-select-focused`]:{zIndex:1},[`& > ${r}-select > ${r}-select-arrow`]:{zIndex:1},[`& > *:first-child,\\n      & > ${r}-select:first-child > ${r}-select-selector,\\n      & > ${r}-select-auto-complete:first-child ${t},\\n      & > ${r}-cascader-picker:first-child ${t}`]:{borderStartStartRadius:e.borderRadius,borderEndStartRadius:e.borderRadius},[`& > *:last-child,\\n      & > ${r}-select:last-child > ${r}-select-selector,\\n      & > ${r}-cascader-picker:last-child ${t},\\n      & > ${r}-cascader-picker-focused:last-child ${t}`]:{borderInlineEndWidth:e.lineWidth,borderStartEndRadius:e.borderRadius,borderEndEndRadius:e.borderRadius},[`& > ${r}-select-auto-complete ${t}`]:{verticalAlign:\"top\"},[`${t}-group-wrapper + ${t}-group-wrapper`]:{marginInlineStart:e.calc(e.lineWidth).mul(-1).equal(),[`${t}-affix-wrapper`]:{borderRadius:0}},[`${t}-group-wrapper:not(:last-child)`]:{[`&${t}-search > ${t}-group`]:{[`& > ${t}-group-addon > ${t}-search-button`]:{borderRadius:0},[`& > ${t}`]:{borderStartStartRadius:e.borderRadius,borderStartEndRadius:0,borderEndEndRadius:0,borderEndStartRadius:e.borderRadius}}}})}},pw=e=>{const{componentCls:t,controlHeightSM:r,lineWidth:n,calc:o}=e,i=o(r).sub(o(n).mul(2)).sub(16).div(2).equal();return{[t]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},rc(e)),fw(e)),Zy(e)),nw(e)),ew(e)),lw(e)),{'&[type=\"color\"]':{height:e.controlHeight,[`&${t}-lg`]:{height:e.controlHeightLG},[`&${t}-sm`]:{height:r,paddingTop:i,paddingBottom:i}},'&[type=\"search\"]::-webkit-search-cancel-button, &[type=\"search\"]::-webkit-search-decoration':{appearance:\"none\"}})}},mw=e=>{const{componentCls:t}=e;return{[`${t}-clear-icon`]:{margin:0,padding:0,lineHeight:0,color:e.colorTextQuaternary,fontSize:e.fontSizeIcon,verticalAlign:-1,cursor:\"pointer\",transition:`color ${e.motionDurationSlow}`,border:\"none\",outline:\"none\",backgroundColor:\"transparent\",\"&:hover\":{color:e.colorIcon},\"&:active\":{color:e.colorText},\"&-hidden\":{visibility:\"hidden\"},\"&-has-suffix\":{margin:`0 ${Si(e.inputAffixPadding)}`}}}},gw=e=>{const{componentCls:t,inputAffixPadding:r,colorTextDescription:n,motionDurationSlow:o,colorIcon:i,colorIconHover:a,iconCls:s}=e,l=`${t}-affix-wrapper`,c=`${t}-affix-wrapper-disabled`;return{[l]:Object.assign(Object.assign(Object.assign(Object.assign({},fw(e)),{display:\"inline-flex\",[`&:not(${t}-disabled):hover`]:{zIndex:1,[`${t}-search-with-button &`]:{zIndex:0}},\"&-focused, &:focus\":{zIndex:1},[`> input${t}`]:{padding:0},[`> input${t}, > textarea${t}`]:{fontSize:\"inherit\",border:\"none\",borderRadius:0,outline:\"none\",background:\"transparent\",color:\"inherit\",\"&::-ms-reveal\":{display:\"none\"},\"&:focus\":{boxShadow:\"none !important\"}},\"&::before\":{display:\"inline-block\",width:0,visibility:\"hidden\",content:'\"\\\\a0\"'},[t]:{\"&-prefix, &-suffix\":{display:\"flex\",flex:\"none\",alignItems:\"center\",\"> *:not(:last-child)\":{marginInlineEnd:e.paddingXS}},\"&-show-count-suffix\":{color:n,direction:\"ltr\"},\"&-show-count-has-suffix\":{marginInlineEnd:e.paddingXXS},\"&-prefix\":{marginInlineEnd:r},\"&-suffix\":{marginInlineStart:r}}}),mw(e)),{[`${s}${t}-password-icon`]:{color:i,cursor:\"pointer\",transition:`all ${o}`,\"&:hover\":{color:a}}}),[`${t}-underlined`]:{borderRadius:0},[c]:{[`${s}${t}-password-icon`]:{color:i,cursor:\"not-allowed\",\"&:hover\":{color:i}}}}},vw=e=>{const{componentCls:t,borderRadiusLG:r,borderRadiusSM:n}=e;return{[`${t}-group`]:Object.assign(Object.assign(Object.assign({},rc(e)),hw(e)),{\"&-rtl\":{direction:\"rtl\"},\"&-wrapper\":Object.assign(Object.assign(Object.assign({display:\"inline-block\",width:\"100%\",textAlign:\"start\",verticalAlign:\"top\",\"&-rtl\":{direction:\"rtl\"},\"&-lg\":{[`${t}-group-addon`]:{borderRadius:r,fontSize:e.inputFontSizeLG}},\"&-sm\":{[`${t}-group-addon`]:{borderRadius:n}}},Jy(e)),iw(e)),{[`&:not(${t}-compact-first-item):not(${t}-compact-last-item)${t}-compact-item`]:{[`${t}, ${t}-group-addon`]:{borderRadius:0}},[`&:not(${t}-compact-last-item)${t}-compact-first-item`]:{[`${t}, ${t}-group-addon`]:{borderStartEndRadius:0,borderEndEndRadius:0}},[`&:not(${t}-compact-first-item)${t}-compact-last-item`]:{[`${t}, ${t}-group-addon`]:{borderStartStartRadius:0,borderEndStartRadius:0}},[`&:not(${t}-compact-last-item)${t}-compact-item`]:{[`${t}-affix-wrapper`]:{borderStartEndRadius:0,borderEndEndRadius:0}},[`&:not(${t}-compact-first-item)${t}-compact-item`]:{[`${t}-affix-wrapper`]:{borderStartStartRadius:0,borderEndStartRadius:0}}})})}},bw=e=>{const{componentCls:t,antCls:r}=e,n=`${t}-search`;return{[n]:{[t]:{\"&:hover, &:focus\":{[`+ ${t}-group-addon ${n}-button:not(${r}-btn-primary)`]:{borderInlineStartColor:e.colorPrimaryHover}}},[`${t}-affix-wrapper`]:{height:e.controlHeight,borderRadius:0},[`${t}-lg`]:{lineHeight:e.calc(e.lineHeightLG).sub(2e-4).equal()},[`> ${t}-group`]:{[`> ${t}-group-addon:last-child`]:{insetInlineStart:-1,padding:0,border:0,[`${n}-button`]:{marginInlineEnd:-1,borderStartStartRadius:0,borderEndStartRadius:0,boxShadow:\"none\"},[`${n}-button:not(${r}-btn-primary)`]:{color:e.colorTextDescription,\"&:hover\":{color:e.colorPrimaryHover},\"&:active\":{color:e.colorPrimaryActive},[`&${r}-btn-loading::before`]:{insetInlineStart:0,insetInlineEnd:0,insetBlockStart:0,insetBlockEnd:0}}}},[`${n}-button`]:{height:e.controlHeight,\"&:hover, &:focus\":{zIndex:1}},\"&-large\":{[`${t}-affix-wrapper, ${n}-button`]:{height:e.controlHeightLG}},\"&-small\":{[`${t}-affix-wrapper, ${n}-button`]:{height:e.controlHeightSM}},\"&-rtl\":{direction:\"rtl\"},[`&${t}-compact-item`]:{[`&:not(${t}-compact-last-item)`]:{[`${t}-group-addon`]:{[`${t}-search-button`]:{marginInlineEnd:e.calc(e.lineWidth).mul(-1).equal(),borderRadius:0}}},[`&:not(${t}-compact-first-item)`]:{[`${t},${t}-affix-wrapper`]:{borderRadius:0}},[`> ${t}-group-addon ${t}-search-button,\\n        > ${t},\\n        ${t}-affix-wrapper`]:{\"&:hover, &:focus, &:active\":{zIndex:2}},[`> ${t}-affix-wrapper-focused`]:{zIndex:2}}}}},yw=e=>{const{componentCls:t}=e;return{[`${t}-out-of-range`]:{[`&, & input, & textarea, ${t}-show-count-suffix, ${t}-data-count`]:{color:e.colorError}}}},ww=Iu([\"Input\",\"Shared\"],(e=>{const t=Au(e,Gy(e));return[pw(t),gw(t)]}),qy,{resetFont:!1}),xw=Iu([\"Input\",\"Component\"],(e=>{const t=Au(e,Gy(e));return[vw(t),bw(t),yw(t),ib(t)]}),qy,{resetFont:!1}),Sw=(e,t)=>{let{componentCls:r,borderRadiusSM:n,borderRadiusLG:o}=e;const i=\"lg\"===t?o:n;return{[`&-${t}`]:{[`${r}-handler-wrap`]:{borderStartEndRadius:i,borderEndEndRadius:i},[`${r}-handler-up`]:{borderStartEndRadius:i},[`${r}-handler-down`]:{borderEndEndRadius:i}}}},Cw=e=>{const{componentCls:t,lineWidth:r,lineType:n,borderRadius:o,inputFontSizeSM:i,inputFontSizeLG:a,controlHeightLG:s,controlHeightSM:l,colorError:c,paddingInlineSM:u,paddingBlockSM:d,paddingBlockLG:f,paddingInlineLG:h,colorIcon:p,motionDurationMid:m,handleHoverColor:g,handleOpacity:v,paddingInline:b,paddingBlock:y,handleBg:w,handleActiveBg:x,colorTextDisabled:S,borderRadiusSM:C,borderRadiusLG:k,controlWidth:E,handleBorderColor:O,filledHandleBg:A,lineHeightLG:T,calc:j}=e;return[{[t]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},rc(e)),fw(e)),{display:\"inline-block\",width:E,margin:0,padding:0,borderRadius:o}),Zy(e,{[`${t}-handler-wrap`]:{background:w,[`${t}-handler-down`]:{borderBlockStart:`${Si(r)} ${n} ${O}`}}})),nw(e,{[`${t}-handler-wrap`]:{background:A,[`${t}-handler-down`]:{borderBlockStart:`${Si(r)} ${n} ${O}`}},\"&:focus-within\":{[`${t}-handler-wrap`]:{background:w}}})),lw(e,{[`${t}-handler-wrap`]:{background:w,[`${t}-handler-down`]:{borderBlockStart:`${Si(r)} ${n} ${O}`}}})),ew(e)),{\"&-rtl\":{direction:\"rtl\",[`${t}-input`]:{direction:\"rtl\"}},\"&-lg\":{padding:0,fontSize:a,lineHeight:T,borderRadius:k,[`input${t}-input`]:{height:j(s).sub(j(r).mul(2)).equal(),padding:`${Si(f)} ${Si(h)}`}},\"&-sm\":{padding:0,fontSize:i,borderRadius:C,[`input${t}-input`]:{height:j(l).sub(j(r).mul(2)).equal(),padding:`${Si(d)} ${Si(u)}`}},\"&-out-of-range\":{[`${t}-input-wrap`]:{input:{color:c}}},\"&-group\":Object.assign(Object.assign(Object.assign({},rc(e)),hw(e)),{\"&-wrapper\":Object.assign(Object.assign(Object.assign({display:\"inline-block\",textAlign:\"start\",verticalAlign:\"top\",[`${t}-affix-wrapper`]:{width:\"100%\"},\"&-lg\":{[`${t}-group-addon`]:{borderRadius:k,fontSize:e.fontSizeLG}},\"&-sm\":{[`${t}-group-addon`]:{borderRadius:C}}},Jy(e)),iw(e)),{[`&:not(${t}-compact-first-item):not(${t}-compact-last-item)${t}-compact-item`]:{[`${t}, ${t}-group-addon`]:{borderRadius:0}},[`&:not(${t}-compact-last-item)${t}-compact-first-item`]:{[`${t}, ${t}-group-addon`]:{borderStartEndRadius:0,borderEndEndRadius:0}},[`&:not(${t}-compact-first-item)${t}-compact-last-item`]:{[`${t}, ${t}-group-addon`]:{borderStartStartRadius:0,borderEndStartRadius:0}}})}),[`&-disabled ${t}-input`]:{cursor:\"not-allowed\"},[t]:{\"&-input\":Object.assign(Object.assign(Object.assign(Object.assign({},rc(e)),{width:\"100%\",padding:`${Si(y)} ${Si(b)}`,textAlign:\"start\",backgroundColor:\"transparent\",border:0,borderRadius:o,outline:0,transition:`all ${m} linear`,appearance:\"textfield\",fontSize:\"inherit\"}),cw(e.colorTextPlaceholder)),{'&[type=\"number\"]::-webkit-inner-spin-button, &[type=\"number\"]::-webkit-outer-spin-button':{margin:0,appearance:\"none\"}})},[`&:hover ${t}-handler-wrap, &-focused ${t}-handler-wrap`]:{width:e.handleWidth,opacity:1}})},{[t]:Object.assign(Object.assign(Object.assign({[`${t}-handler-wrap`]:{position:\"absolute\",insetBlockStart:0,insetInlineEnd:0,width:e.handleVisibleWidth,opacity:v,height:\"100%\",borderStartStartRadius:0,borderStartEndRadius:o,borderEndEndRadius:o,borderEndStartRadius:0,display:\"flex\",flexDirection:\"column\",alignItems:\"stretch\",transition:`all ${m}`,overflow:\"hidden\",[`${t}-handler`]:{display:\"flex\",alignItems:\"center\",justifyContent:\"center\",flex:\"auto\",height:\"40%\",[`\\n              ${t}-handler-up-inner,\\n              ${t}-handler-down-inner\\n            `]:{marginInlineEnd:0,fontSize:e.handleFontSize}}},[`${t}-handler`]:{height:\"50%\",overflow:\"hidden\",color:p,fontWeight:\"bold\",lineHeight:0,textAlign:\"center\",cursor:\"pointer\",borderInlineStart:`${Si(r)} ${n} ${O}`,transition:`all ${m} linear`,\"&:active\":{background:x},\"&:hover\":{height:\"60%\",[`\\n              ${t}-handler-up-inner,\\n              ${t}-handler-down-inner\\n            `]:{color:g}},\"&-up-inner, &-down-inner\":Object.assign(Object.assign({},{display:\"inline-flex\",alignItems:\"center\",color:\"inherit\",fontStyle:\"normal\",lineHeight:0,textAlign:\"center\",textTransform:\"none\",verticalAlign:\"-0.125em\",textRendering:\"optimizeLegibility\",\"-webkit-font-smoothing\":\"antialiased\",\"-moz-osx-font-smoothing\":\"grayscale\",\"> *\":{lineHeight:1},svg:{display:\"inline-block\"}}),{color:p,transition:`all ${m} linear`,userSelect:\"none\"})},[`${t}-handler-up`]:{borderStartEndRadius:o},[`${t}-handler-down`]:{borderEndEndRadius:o}},Sw(e,\"lg\")),Sw(e,\"sm\")),{\"&-disabled, &-readonly\":{[`${t}-handler-wrap`]:{display:\"none\"},[`${t}-input`]:{color:\"inherit\"}},[`\\n          ${t}-handler-up-disabled,\\n          ${t}-handler-down-disabled\\n        `]:{cursor:\"not-allowed\"},[`\\n          ${t}-handler-up-disabled:hover &-handler-up-inner,\\n          ${t}-handler-down-disabled:hover &-handler-down-inner\\n        `]:{color:S}})}]},kw=e=>{const{componentCls:t,paddingBlock:r,paddingInline:n,inputAffixPadding:o,controlWidth:i,borderRadiusLG:a,borderRadiusSM:s,paddingInlineLG:l,paddingInlineSM:c,paddingBlockLG:u,paddingBlockSM:d,motionDurationMid:f}=e;return{[`${t}-affix-wrapper`]:Object.assign(Object.assign({[`input${t}-input`]:{padding:`${Si(r)} 0`}},fw(e)),{position:\"relative\",display:\"inline-flex\",alignItems:\"center\",width:i,padding:0,paddingInlineStart:n,\"&-lg\":{borderRadius:a,paddingInlineStart:l,[`input${t}-input`]:{padding:`${Si(u)} 0`}},\"&-sm\":{borderRadius:s,paddingInlineStart:c,[`input${t}-input`]:{padding:`${Si(d)} 0`}},[`&:not(${t}-disabled):hover`]:{zIndex:1},\"&-focused, &:focus\":{zIndex:1},[`&-disabled > ${t}-disabled`]:{background:\"transparent\"},[`> div${t}`]:{width:\"100%\",border:\"none\",outline:\"none\",[`&${t}-focused`]:{boxShadow:\"none !important\"}},\"&::before\":{display:\"inline-block\",width:0,visibility:\"hidden\",content:'\"\\\\a0\"'},[`${t}-handler-wrap`]:{zIndex:2},[t]:{position:\"static\",color:\"inherit\",\"&-prefix, &-suffix\":{display:\"flex\",flex:\"none\",alignItems:\"center\",pointerEvents:\"none\"},\"&-prefix\":{marginInlineEnd:o},\"&-suffix\":{insetBlockStart:0,insetInlineEnd:0,height:\"100%\",marginInlineEnd:n,marginInlineStart:o,transition:`margin ${f}`}},[`&:hover ${t}-handler-wrap, &-focused ${t}-handler-wrap`]:{width:e.handleWidth,opacity:1},[`&:not(${t}-affix-wrapper-without-controls):hover ${t}-suffix`]:{marginInlineEnd:e.calc(e.handleWidth).add(n).equal()}})}},Ew=Iu(\"InputNumber\",(e=>{const t=Au(e,Gy(e));return[Cw(t),kw(t),ib(t)]}),(e=>{var t;const r=null!==(t=e.handleVisible)&&void 0!==t?t:\"auto\",n=e.controlHeightSM-2*e.lineWidth;return Object.assign(Object.assign({},qy(e)),{controlWidth:90,handleWidth:n,handleFontSize:e.fontSize/2,handleVisible:r,handleActiveBg:e.colorFillAlter,handleBg:e.colorBgContainer,filledHandleBg:new Ge(e.colorFillSecondary).onBackground(e.colorBgContainer).toHexString(),handleHoverColor:e.colorPrimary,handleBorderColor:e.colorBorder,handleOpacity:!0===r?1:0,handleVisibleWidth:!0===r?n:0})}),{unitless:{handleOpacity:!0}});const Ow=m.forwardRef(((e,t)=>{const{getPrefixCls:r,direction:n}=m.useContext(Xo),o=m.useRef(null);m.useImperativeHandle(t,(()=>o.current));const{className:i,rootClassName:a,size:s,disabled:l,prefixCls:c,addonBefore:u,addonAfter:d,prefix:f,suffix:h,bordered:p,readOnly:g,status:v,controls:b,variant:y}=e,w=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"className\",\"rootClassName\",\"size\",\"disabled\",\"prefixCls\",\"addonBefore\",\"addonAfter\",\"prefix\",\"suffix\",\"bordered\",\"readOnly\",\"status\",\"controls\",\"variant\"]),x=r(\"input-number\",c),S=du(x),[C,k,E]=Ew(x,S),{compactSize:O,compactItemClassnames:A}=Lf(x,n);let T=m.createElement(hy,{className:`${x}-handler-up-inner`}),j=m.createElement(Jb,{className:`${x}-handler-down-inner`});const P=\"boolean\"==typeof b?b:void 0;\"object\"==typeof b&&(T=void 0===b.upIcon?T:m.createElement(\"span\",{className:`${x}-handler-up-inner`},b.upIcon),j=void 0===b.downIcon?j:m.createElement(\"span\",{className:`${x}-handler-down-inner`},b.downIcon));const{hasFeedback:M,status:R,isFormItemInput:_,feedbackIcon:I}=m.useContext(jf),N=qf(R,v),F=Rf((e=>{var t;return null!==(t=null!=s?s:O)&&void 0!==t?t:e})),D=m.useContext(Ss),B=null!=l?l:D,[L,z]=tb(\"inputNumber\",y,p),H=M&&m.createElement(m.Fragment,null,I),U=ze()({[`${x}-lg`]:\"large\"===F,[`${x}-sm`]:\"small\"===F,[`${x}-rtl`]:\"rtl\"===n,[`${x}-in-form-item`]:_},k),V=`${x}-group`;return C(m.createElement(Wy,Object.assign({ref:o,disabled:B,className:ze()(E,S,i,a,A),upHandler:T,downHandler:j,prefixCls:x,readOnly:g,controls:P,prefix:f,suffix:H||h,addonBefore:u&&m.createElement(Uf,{form:!0,space:!0},u),addonAfter:d&&m.createElement(Uf,{form:!0,space:!0},d),classNames:{input:U,variant:ze()({[`${x}-${L}`]:z},Gf(x,N,M)),affixWrapper:ze()({[`${x}-affix-wrapper-sm`]:\"small\"===F,[`${x}-affix-wrapper-lg`]:\"large\"===F,[`${x}-affix-wrapper-rtl`]:\"rtl\"===n,[`${x}-affix-wrapper-without-controls`]:!1===b||B},k),wrapper:ze()({[`${V}-rtl`]:\"rtl\"===n},k),groupWrapper:ze()({[`${x}-group-wrapper-sm`]:\"small\"===F,[`${x}-group-wrapper-lg`]:\"large\"===F,[`${x}-group-wrapper-rtl`]:\"rtl\"===n,[`${x}-group-wrapper-${L}`]:z},Gf(`${x}-group-wrapper`,N,M),k)}},w)))})),Aw=Ow;Aw._InternalPanelDoNotUseOrYouWillBeFired=e=>m.createElement(vc,{theme:{components:{InputNumber:{handleVisible:!0}}}},m.createElement(Ow,Object.assign({},e)));const Tw=Aw,jw=e=>{let{prefixCls:t,min:r=0,max:n=100,value:o,onChange:i,className:a,formatter:s}=e;const l=`${t}-steppers`,[c,u]=(0,m.useState)(0),d=Number.isNaN(o)?c:o;return m.createElement(Tw,{className:ze()(l,a),min:r,max:n,value:d,formatter:s,size:\"small\",onChange:e=>{u(e||0),null==i||i(e)}})},Pw=e=>{let{prefixCls:t,value:r,onChange:n}=e;const o=`${t}-alpha-input`,[i,a]=(0,m.useState)((()=>ng(r||\"#000\"))),s=r||i;return m.createElement(jw,{value:ig(s),prefixCls:t,formatter:e=>`${e}%`,className:o,onChange:e=>{const t=s.toHsb();t.a=(e||0)/100;const r=ng(t);a(r),null==n||n(r)}})},Mw=e=>{let t;return\"object\"==typeof e&&(null==e?void 0:e.clearIcon)?t=e:e&&(t={clearIcon:m.createElement(Lc,null)}),t};function Rw(e,t){const r=(0,m.useRef)([]),n=()=>{r.current.push(setTimeout((()=>{var t,r,n,o;(null===(t=e.current)||void 0===t?void 0:t.input)&&\"password\"===(null===(r=e.current)||void 0===r?void 0:r.input.getAttribute(\"type\"))&&(null===(n=e.current)||void 0===n?void 0:n.input.hasAttribute(\"value\"))&&(null===(o=e.current)||void 0===o||o.input.removeAttribute(\"value\"))})))};return(0,m.useEffect)((()=>(t&&n(),()=>r.current.forEach((e=>{e&&clearTimeout(e)})))),[]),n}const _w=(0,m.forwardRef)(((e,t)=>{const{prefixCls:r,bordered:n=!0,status:o,size:i,disabled:a,onBlur:s,onFocus:l,suffix:c,allowClear:u,addonAfter:d,addonBefore:f,className:h,style:p,styles:g,rootClassName:v,onChange:b,classNames:y,variant:w}=e,x=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"bordered\",\"status\",\"size\",\"disabled\",\"onBlur\",\"onFocus\",\"suffix\",\"allowClear\",\"addonAfter\",\"addonBefore\",\"className\",\"style\",\"styles\",\"rootClassName\",\"onChange\",\"classNames\",\"variant\"]),{getPrefixCls:S,direction:C,allowClear:k,autoComplete:E,className:O,style:A,classNames:T,styles:j}=Zo(\"input\"),P=S(\"input\",r),M=(0,m.useRef)(null),R=du(P),[_,I,N]=ww(P,v),[F]=xw(P,R),{compactSize:D,compactItemClassnames:B}=Lf(P,C),L=Rf((e=>{var t;return null!==(t=null!=i?i:D)&&void 0!==t?t:e})),z=m.useContext(Ss),H=null!=a?a:z,{status:U,hasFeedback:V,feedbackIcon:W}=(0,m.useContext)(jf),G=qf(U,o),q=function(e){return!!(e.prefix||e.suffix||e.allowClear||e.showCount)}(e)||!!V;(0,m.useRef)(q);const K=Rw(M,!0),X=(V||c)&&m.createElement(m.Fragment,null,c,V&&W),Y=Mw(null!=u?u:k),[$,Z]=tb(\"input\",w,n);return _(F(m.createElement(Ny,Object.assign({ref:Cn(t,M),prefixCls:P,autoComplete:E},x,{disabled:H,onBlur:e=>{K(),null==s||s(e)},onFocus:e=>{K(),null==l||l(e)},style:Object.assign(Object.assign({},A),p),styles:Object.assign(Object.assign({},j),g),suffix:X,allowClear:Y,className:ze()(h,v,N,R,B,O),onChange:e=>{K(),null==b||b(e)},addonBefore:f&&m.createElement(Uf,{form:!0,space:!0},f),addonAfter:d&&m.createElement(Uf,{form:!0,space:!0},d),classNames:Object.assign(Object.assign(Object.assign({},y),T),{input:ze()({[`${P}-sm`]:\"small\"===L,[`${P}-lg`]:\"large\"===L,[`${P}-rtl`]:\"rtl\"===C},null==y?void 0:y.input,T.input,I),variant:ze()({[`${P}-${$}`]:Z},Gf(P,G)),affixWrapper:ze()({[`${P}-affix-wrapper-sm`]:\"small\"===L,[`${P}-affix-wrapper-lg`]:\"large\"===L,[`${P}-affix-wrapper-rtl`]:\"rtl\"===C},I),wrapper:ze()({[`${P}-group-rtl`]:\"rtl\"===C},I),groupWrapper:ze()({[`${P}-group-wrapper-sm`]:\"small\"===L,[`${P}-group-wrapper-lg`]:\"large\"===L,[`${P}-group-wrapper-rtl`]:\"rtl\"===C,[`${P}-group-wrapper-${$}`]:Z},Gf(`${P}-group-wrapper`,G,V),I)})}))))})),Iw=_w,Nw=/(^#[\\da-f]{6}$)|(^#[\\da-f]{8}$)/i,Fw=e=>{let{prefixCls:t,value:r,onChange:n}=e;const o=`${t}-hex-input`,[i,a]=(0,m.useState)(\"\"),s=r?_m(r.toHexString()):i;return m.createElement(Iw,{className:o,value:s,prefix:\"#\",onChange:e=>{const t=e.target.value;var r;a(_m(t)),r=_m(t,!0),Nw.test(`#${r}`)&&(null==n||n(ng(t)))},size:\"small\"})},Dw=e=>{let{prefixCls:t,value:r,onChange:n}=e;const o=`${t}-hsb-input`,[i,a]=(0,m.useState)((()=>ng(r||\"#000\"))),s=r||i,l=(e,t)=>{const r=s.toHsb();r[t]=\"h\"===t?e:(e||0)/100;const o=ng(r);a(o),null==n||n(o)};return m.createElement(\"div\",{className:o},m.createElement(jw,{max:360,min:0,value:Number(s.toHsb().h),prefixCls:t,className:o,formatter:e=>og(e||0).toString(),onChange:e=>l(Number(e),\"h\")}),m.createElement(jw,{max:100,min:0,value:100*Number(s.toHsb().s),prefixCls:t,className:o,formatter:e=>`${og(e||0)}%`,onChange:e=>l(Number(e),\"s\")}),m.createElement(jw,{max:100,min:0,value:100*Number(s.toHsb().b),prefixCls:t,className:o,formatter:e=>`${og(e||0)}%`,onChange:e=>l(Number(e),\"b\")}))},Bw=e=>{let{prefixCls:t,value:r,onChange:n}=e;const o=`${t}-rgb-input`,[i,a]=(0,m.useState)((()=>ng(r||\"#000\"))),s=r||i,l=(e,t)=>{const r=s.toRgb();r[t]=e||0;const o=ng(r);a(o),null==n||n(o)};return m.createElement(\"div\",{className:o},m.createElement(jw,{max:255,min:0,value:Number(s.toRgb().r),prefixCls:t,className:o,onChange:e=>l(Number(e),\"r\")}),m.createElement(jw,{max:255,min:0,value:Number(s.toRgb().g),prefixCls:t,className:o,onChange:e=>l(Number(e),\"g\")}),m.createElement(jw,{max:255,min:0,value:Number(s.toRgb().b),prefixCls:t,className:o,onChange:e=>l(Number(e),\"b\")}))},Lw=[ly,uy,cy].map((e=>({value:e,label:e.toUpperCase()}))),zw=e=>{const{prefixCls:t,format:r,value:n,disabledAlpha:o,onFormatChange:i,onChange:a,disabledFormat:s}=e,[l,c]=Ks(ly,{value:r,onChange:i}),u=`${t}-input`,d=(0,m.useMemo)((()=>{const e={value:n,prefixCls:t,onChange:a};switch(l){case uy:return m.createElement(Dw,Object.assign({},e));case cy:return m.createElement(Bw,Object.assign({},e));default:return m.createElement(Fw,Object.assign({},e))}}),[l,t,n,a]);return m.createElement(\"div\",{className:`${u}-container`},!s&&m.createElement(sy,{value:l,variant:\"borderless\",getPopupContainer:e=>e,popupMatchSelectWidth:68,placement:\"bottomRight\",onChange:e=>{c(e)},className:`${t}-format-select`,size:\"small\",options:Lw}),m.createElement(\"div\",{className:u},d),!o&&m.createElement(Pw,{prefixCls:t,value:n,onChange:a}))};function Hw(e,t,r){return(e-t)/(r-t)}function Uw(e,t,r,n){var o=Hw(t,r,n),i={};switch(e){case\"rtl\":i.right=\"\".concat(100*o,\"%\"),i.transform=\"translateX(50%)\";break;case\"btt\":i.bottom=\"\".concat(100*o,\"%\"),i.transform=\"translateY(50%)\";break;case\"ttb\":i.top=\"\".concat(100*o,\"%\"),i.transform=\"translateY(-50%)\";break;default:i.left=\"\".concat(100*o,\"%\"),i.transform=\"translateX(-50%)\"}return i}function Vw(e,t){return Array.isArray(e)?e[t]:e}const Ww=m.createContext({min:0,max:0,direction:\"ltr\",step:1,includedStart:0,includedEnd:0,tabIndex:0,keyboard:!0,styles:{},classNames:{}});var Gw=m.createContext({}),qw=[\"prefixCls\",\"value\",\"valueIndex\",\"onStartMove\",\"onDelete\",\"style\",\"render\",\"dragging\",\"draggingDelete\",\"onOffsetChange\",\"onChangeComplete\",\"onFocus\",\"onMouseEnter\"],Kw=m.forwardRef((function(e,t){var r,n=e.prefixCls,o=e.value,i=e.valueIndex,a=e.onStartMove,s=e.onDelete,l=e.style,c=e.render,u=e.dragging,d=e.draggingDelete,f=e.onOffsetChange,h=e.onChangeComplete,p=e.onFocus,g=e.onMouseEnter,v=Be(e,qw),b=m.useContext(Ww),y=b.min,w=b.max,x=b.direction,S=b.disabled,C=b.keyboard,k=b.range,E=b.tabIndex,O=b.ariaLabelForHandle,A=b.ariaLabelledByForHandle,T=b.ariaRequired,j=b.ariaValueTextFormatterForHandle,P=b.styles,M=b.classNames,R=\"\".concat(n,\"-handle\"),_=function(e){S||a(e,i)},I=Uw(x,o,y,w),N={};null!==i&&(N={tabIndex:S?null:Vw(E,i),role:\"slider\",\"aria-valuemin\":y,\"aria-valuemax\":w,\"aria-valuenow\":o,\"aria-disabled\":S,\"aria-label\":Vw(O,i),\"aria-labelledby\":Vw(A,i),\"aria-required\":Vw(T,i),\"aria-valuetext\":null===(r=Vw(j,i))||void 0===r?void 0:r(o),\"aria-orientation\":\"ltr\"===x||\"rtl\"===x?\"horizontal\":\"vertical\",onMouseDown:_,onTouchStart:_,onFocus:function(e){null==p||p(e,i)},onMouseEnter:function(e){g(e,i)},onKeyDown:function(e){if(!S&&C){var t=null;switch(e.which||e.keyCode){case $c.LEFT:t=\"ltr\"===x||\"btt\"===x?-1:1;break;case $c.RIGHT:t=\"ltr\"===x||\"btt\"===x?1:-1;break;case $c.UP:t=\"ttb\"!==x?1:-1;break;case $c.DOWN:t=\"ttb\"!==x?-1:1;break;case $c.HOME:t=\"min\";break;case $c.END:t=\"max\";break;case $c.PAGE_UP:t=2;break;case $c.PAGE_DOWN:t=-2;break;case $c.BACKSPACE:case $c.DELETE:s(i)}null!==t&&(e.preventDefault(),f(t,i))}},onKeyUp:function(e){switch(e.which||e.keyCode){case $c.LEFT:case $c.RIGHT:case $c.UP:case $c.DOWN:case $c.HOME:case $c.END:case $c.PAGE_UP:case $c.PAGE_DOWN:null==h||h()}}});var F=m.createElement(\"div\",Te({ref:t,className:ze()(R,De(De(De({},\"\".concat(R,\"-\").concat(i+1),null!==i&&k),\"\".concat(R,\"-dragging\"),u),\"\".concat(R,\"-dragging-delete\"),d),M.handle),style:At(At(At({},I),l),P.handle)},N,v));return c&&(F=c(F,{index:i,prefixCls:n,value:o,dragging:u,draggingDelete:d})),F}));const Xw=Kw;var Yw=[\"prefixCls\",\"style\",\"onStartMove\",\"onOffsetChange\",\"values\",\"handleRender\",\"activeHandleRender\",\"draggingIndex\",\"draggingDelete\",\"onFocus\"],$w=m.forwardRef((function(e,t){var r=e.prefixCls,n=e.style,o=e.onStartMove,i=e.onOffsetChange,a=e.values,s=e.handleRender,l=e.activeHandleRender,c=e.draggingIndex,u=e.draggingDelete,d=e.onFocus,f=Be(e,Yw),h=m.useRef({}),p=Ie(m.useState(!1),2),g=p[0],v=p[1],b=Ie(m.useState(-1),2),y=b[0],w=b[1],x=function(e){w(e),v(!0)};m.useImperativeHandle(t,(function(){return{focus:function(e){var t;null===(t=h.current[e])||void 0===t||t.focus()},hideHelp:function(){(0,js.flushSync)((function(){v(!1)}))}}}));var S=At({prefixCls:r,onStartMove:o,onOffsetChange:i,render:s,onFocus:function(e,t){x(t),null==d||d(e)},onMouseEnter:function(e,t){x(t)}},f);return m.createElement(m.Fragment,null,a.map((function(e,t){var r=c===t;return m.createElement(Xw,Te({ref:function(e){e?h.current[t]=e:delete h.current[t]},dragging:r,draggingDelete:r&&u,style:Vw(n,t),key:t,value:e,valueIndex:t},S))})),l&&g&&m.createElement(Xw,Te({key:\"a11y\"},S,{value:a[y],valueIndex:null,dragging:-1!==c,draggingDelete:u,render:l,style:{pointerEvents:\"none\"},tabIndex:null,\"aria-hidden\":!0})))}));const Zw=$w,Qw=function(e){var t=e.prefixCls,r=e.style,n=e.children,o=e.value,i=e.onClick,a=m.useContext(Ww),s=a.min,l=a.max,c=a.direction,u=a.includedStart,d=a.includedEnd,f=a.included,h=\"\".concat(t,\"-text\"),p=Uw(c,o,s,l);return m.createElement(\"span\",{className:ze()(h,De({},\"\".concat(h,\"-active\"),f&&u<=o&&o<=d)),style:At(At({},p),r),onMouseDown:function(e){e.stopPropagation()},onClick:function(){i(o)}},n)},Jw=function(e){var t=e.prefixCls,r=e.marks,n=e.onClick,o=\"\".concat(t,\"-mark\");return r.length?m.createElement(\"div\",{className:o},r.map((function(e){var t=e.value,r=e.style,i=e.label;return m.createElement(Qw,{key:t,prefixCls:o,style:r,value:t,onClick:n},i)}))):null},ex=function(e){var t=e.prefixCls,r=e.value,n=e.style,o=e.activeStyle,i=m.useContext(Ww),a=i.min,s=i.max,l=i.direction,c=i.included,u=i.includedStart,d=i.includedEnd,f=\"\".concat(t,\"-dot\"),h=c&&u<=r&&r<=d,p=At(At({},Uw(l,r,a,s)),\"function\"==typeof n?n(r):n);return h&&(p=At(At({},p),\"function\"==typeof o?o(r):o)),m.createElement(\"span\",{className:ze()(f,De({},\"\".concat(f,\"-active\"),h)),style:p})},tx=function(e){var t=e.prefixCls,r=e.marks,n=e.dots,o=e.style,i=e.activeStyle,a=m.useContext(Ww),s=a.min,l=a.max,c=a.step,u=m.useMemo((function(){var e=new Set;if(r.forEach((function(t){e.add(t.value)})),n&&null!==c)for(var t=s;t<=l;)e.add(t),t+=c;return Array.from(e)}),[s,l,c,n,r]);return m.createElement(\"div\",{className:\"\".concat(t,\"-step\")},u.map((function(e){return m.createElement(ex,{prefixCls:t,key:e,value:e,style:o,activeStyle:i})})))},rx=function(e){var t=e.prefixCls,r=e.style,n=e.start,o=e.end,i=e.index,a=e.onStartMove,s=e.replaceCls,l=m.useContext(Ww),c=l.direction,u=l.min,d=l.max,f=l.disabled,h=l.range,p=l.classNames,g=\"\".concat(t,\"-track\"),v=Hw(n,u,d),b=Hw(o,u,d),y=function(e){!f&&a&&a(e,-1)},w={};switch(c){case\"rtl\":w.right=\"\".concat(100*v,\"%\"),w.width=\"\".concat(100*b-100*v,\"%\");break;case\"btt\":w.bottom=\"\".concat(100*v,\"%\"),w.height=\"\".concat(100*b-100*v,\"%\");break;case\"ttb\":w.top=\"\".concat(100*v,\"%\"),w.height=\"\".concat(100*b-100*v,\"%\");break;default:w.left=\"\".concat(100*v,\"%\"),w.width=\"\".concat(100*b-100*v,\"%\")}var x=s||ze()(g,De(De({},\"\".concat(g,\"-\").concat(i+1),null!==i&&h),\"\".concat(t,\"-track-draggable\"),a),p.track);return m.createElement(\"div\",{className:x,style:At(At({},w),r),onMouseDown:y,onTouchStart:y})},nx=function(e){var t=e.prefixCls,r=e.style,n=e.values,o=e.startPoint,i=e.onStartMove,a=m.useContext(Ww),s=a.included,l=a.range,c=a.min,u=a.styles,d=a.classNames,f=m.useMemo((function(){if(!l){if(0===n.length)return[];var e=null!=o?o:c,t=n[0];return[{start:Math.min(e,t),end:Math.max(e,t)}]}for(var r=[],i=0;i<n.length-1;i+=1)r.push({start:n[i],end:n[i+1]});return r}),[n,l,o,c]);if(!s)return null;var h=null!=f&&f.length&&(d.tracks||u.tracks)?m.createElement(rx,{index:null,prefixCls:t,start:f[0].start,end:f[f.length-1].end,replaceCls:ze()(d.tracks,\"\".concat(t,\"-tracks\")),style:u.tracks}):null;return m.createElement(m.Fragment,null,h,f.map((function(e,n){var o=e.start,a=e.end;return m.createElement(rx,{index:n,prefixCls:t,style:At(At({},Vw(r,n)),u.track),start:o,end:a,key:n,onStartMove:i})})))};function ox(e){var t=\"targetTouches\"in e?e.targetTouches[0]:e;return{pageX:t.pageX,pageY:t.pageY}}var ix=m.forwardRef((function(e,t){var r=e.prefixCls,n=void 0===r?\"rc-slider\":r,o=e.className,i=e.style,a=e.classNames,s=e.styles,l=e.id,c=e.disabled,u=void 0!==c&&c,d=e.keyboard,f=void 0===d||d,h=e.autoFocus,p=e.onFocus,g=e.onBlur,v=e.min,b=void 0===v?0:v,y=e.max,w=void 0===y?100:y,x=e.step,S=void 0===x?1:x,C=e.value,k=e.defaultValue,E=e.range,O=e.count,A=e.onChange,T=e.onBeforeChange,j=e.onAfterChange,P=e.onChangeComplete,M=e.allowCross,R=void 0===M||M,_=e.pushable,I=void 0!==_&&_,N=e.reverse,F=e.vertical,D=e.included,B=void 0===D||D,L=e.startPoint,z=e.trackStyle,H=e.handleStyle,U=e.railStyle,V=e.dotStyle,W=e.activeDotStyle,G=e.marks,q=e.dots,K=e.handleRender,X=e.activeHandleRender,Y=e.track,$=e.tabIndex,Z=void 0===$?0:$,Q=e.ariaLabelForHandle,J=e.ariaLabelledByForHandle,ee=e.ariaRequired,te=e.ariaValueTextFormatterForHandle,re=m.useRef(null),ne=m.useRef(null),oe=m.useMemo((function(){return F?N?\"ttb\":\"btt\":N?\"rtl\":\"ltr\"}),[N,F]),ie=function(e){return(0,m.useMemo)((function(){if(!0===e||!e)return[!!e,!1,!1,0];var t=e.editable,r=e.draggableTrack;return[!0,t,!t&&r,e.minCount||0,e.maxCount]}),[e])}(E),ae=Ie(ie,5),se=ae[0],le=ae[1],ce=ae[2],ue=ae[3],de=ae[4],fe=m.useMemo((function(){return isFinite(b)?b:0}),[b]),he=m.useMemo((function(){return isFinite(w)?w:100}),[w]),pe=m.useMemo((function(){return null!==S&&S<=0?1:S}),[S]),me=m.useMemo((function(){return\"boolean\"==typeof I?!!I&&pe:I>=0&&I}),[I,pe]),ge=m.useMemo((function(){return Object.keys(G||{}).map((function(e){var t=G[e],r={value:Number(e)};return t&&\"object\"===Ne(t)&&!m.isValidElement(t)&&(\"label\"in t||\"style\"in t)?(r.style=t.style,r.label=t.label):r.label=t,r})).filter((function(e){var t=e.label;return t||\"number\"==typeof t})).sort((function(e,t){return e.value-t.value}))}),[G]),ve=function(e,t,r,n,o,i){var a=m.useCallback((function(r){return Math.max(e,Math.min(t,r))}),[e,t]),s=m.useCallback((function(n){if(null!==r){var o=e+Math.round((a(n)-e)/r)*r,i=function(e){return(String(e).split(\".\")[1]||\"\").length},s=Math.max(i(r),i(t),i(e)),l=Number(o.toFixed(s));return e<=l&&l<=t?l:null}return null}),[r,e,t,a]),l=m.useCallback((function(o){var i=a(o),l=n.map((function(e){return e.value}));null!==r&&l.push(s(o)),l.push(e,t);var c=l[0],u=t-e;return l.forEach((function(e){var t=Math.abs(i-e);t<=u&&(c=e,u=t)})),c}),[e,t,n,r,a,s]),c=function o(i,a,l){var c=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"unit\";if(\"number\"==typeof a){var u,d=i[l],f=d+a,h=[];n.forEach((function(e){h.push(e.value)})),h.push(e,t),h.push(s(d));var p=a>0?1:-1;\"unit\"===c?h.push(s(d+p*r)):h.push(s(f)),h=h.filter((function(e){return null!==e})).filter((function(e){return a<0?e<=d:e>=d})),\"unit\"===c&&(h=h.filter((function(e){return e!==d})));var m=\"unit\"===c?d:f;u=h[0];var g=Math.abs(u-m);if(h.forEach((function(e){var t=Math.abs(e-m);t<g&&(u=e,g=t)})),void 0===u)return a<0?e:t;if(\"dist\"===c)return u;if(Math.abs(a)>1){var v=Vo(i);return v[l]=u,o(v,a-p,l,c)}return u}return\"min\"===a?e:\"max\"===a?t:void 0},u=function(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"unit\",o=e[r],i=c(e,t,r,n);return{value:i,changed:i!==o}},d=function(e){return null===i&&0===e||\"number\"==typeof i&&e<i};return[l,function(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"unit\",a=e.map(l),s=a[r],f=c(a,t,r,n);if(a[r]=f,!1===o){var h=i||0;r>0&&a[r-1]!==s&&(a[r]=Math.max(a[r],a[r-1]+h)),r<a.length-1&&a[r+1]!==s&&(a[r]=Math.min(a[r],a[r+1]-h))}else if(\"number\"==typeof i||null===i){for(var p=r+1;p<a.length;p+=1)for(var m=!0;d(a[p]-a[p-1])&&m;){var g=u(a,1,p);a[p]=g.value,m=g.changed}for(var v=r;v>0;v-=1)for(var b=!0;d(a[v]-a[v-1])&&b;){var y=u(a,-1,v-1);a[v-1]=y.value,b=y.changed}for(var w=a.length-1;w>0;w-=1)for(var x=!0;d(a[w]-a[w-1])&&x;){var S=u(a,-1,w-1);a[w-1]=S.value,x=S.changed}for(var C=0;C<a.length-1;C+=1)for(var k=!0;d(a[C+1]-a[C])&&k;){var E=u(a,1,C+1);a[C+1]=E.value,k=E.changed}}return{value:a[r],values:a}}]}(fe,he,pe,ge,R,me),be=Ie(ve,2),ye=be[0],we=be[1],xe=Ie(Ks(k,{value:C}),2),Se=xe[0],Ce=xe[1],ke=m.useMemo((function(){var e=null==Se?[]:Array.isArray(Se)?Se:[Se],t=Ie(e,1)[0],r=null===Se?[]:[void 0===t?fe:t];if(se){if(r=Vo(e),O||void 0===Se){var n=O>=0?O+1:2;for(r=r.slice(0,n);r.length<n;){var o;r.push(null!==(o=r[r.length-1])&&void 0!==o?o:fe)}}r.sort((function(e,t){return e-t}))}return r.forEach((function(e,t){r[t]=ye(e)})),r}),[Se,se,fe,O,ye]),Ee=function(e){return se?e:e[0]},Oe=Ws((function(e){var t=Vo(e).sort((function(e,t){return e-t}));A&&!Jo(t,ke,!0)&&A(Ee(t)),Ce(t)})),Ae=Ws((function(e){e&&re.current.hideHelp();var t=Ee(ke);null==j||j(t),Xt(!j,\"[rc-slider] `onAfterChange` is deprecated. Please use `onChangeComplete` instead.\"),null==P||P(t)})),Te=Ie(function(e,t,r,n,o,i,a,s,l,c,u){var d=Ie(m.useState(null),2),f=d[0],h=d[1],p=Ie(m.useState(-1),2),g=p[0],v=p[1],b=Ie(m.useState(!1),2),y=b[0],w=b[1],x=Ie(m.useState(r),2),S=x[0],C=x[1],k=Ie(m.useState(r),2),E=k[0],O=k[1],A=m.useRef(null),T=m.useRef(null),j=m.useRef(null),P=m.useContext(Gw),M=P.onDragStart,R=P.onDragChange;Pi((function(){-1===g&&C(r)}),[r,g]),m.useEffect((function(){return function(){document.removeEventListener(\"mousemove\",A.current),document.removeEventListener(\"mouseup\",T.current),j.current&&(j.current.removeEventListener(\"touchmove\",A.current),j.current.removeEventListener(\"touchend\",T.current))}}),[]);var _=function(e,t,r){void 0!==t&&h(t),C(e);var n=e;r&&(n=e.filter((function(e,t){return t!==g}))),a(n),R&&R({rawValues:e,deleteIndex:r?g:-1,draggingIndex:g,draggingValue:t})},I=Ws((function(e,t,r){if(-1===e){var a=E[0],s=E[E.length-1],c=n-a,u=o-s,d=t*(o-n);d=Math.max(d,c),d=Math.min(d,u);var f=i(a+d);d=f-a;var h=E.map((function(e){return e+d}));_(h)}else{var p=(o-n)*t,m=Vo(S);m[e]=E[e];var g=l(m,p,e,\"dist\");_(g.values,g.value,r)}})),N=m.useMemo((function(){var e=Vo(r).sort((function(e,t){return e-t})),t=Vo(S).sort((function(e,t){return e-t})),n={};t.forEach((function(e){n[e]=(n[e]||0)+1})),e.forEach((function(e){n[e]=(n[e]||0)-1}));var o=c?1:0,i=Object.values(n).reduce((function(e,t){return e+Math.abs(t)}),0);return i<=o?S:r}),[r,S,c]);return[g,f,y,N,function(n,o,i){n.stopPropagation();var a=i||r,l=a[o];v(o),h(l),O(a),C(a),w(!1);var d=ox(n),f=d.pageX,p=d.pageY,m=!1;M&&M({rawValues:a,draggingIndex:o,draggingValue:l});var g=function(r){r.preventDefault();var n,i,a=ox(r),s=a.pageX,l=a.pageY,d=s-f,h=l-p,g=e.current.getBoundingClientRect(),v=g.width,b=g.height;switch(t){case\"btt\":n=-h/b,i=d;break;case\"ttb\":n=h/b,i=d;break;case\"rtl\":n=-d/v,i=h;break;default:n=d/v,i=h}m=!!c&&Math.abs(i)>130&&u<S.length,w(m),I(o,n,m)},b=function e(t){t.preventDefault(),document.removeEventListener(\"mouseup\",e),document.removeEventListener(\"mousemove\",g),j.current&&(j.current.removeEventListener(\"touchmove\",A.current),j.current.removeEventListener(\"touchend\",T.current)),A.current=null,T.current=null,j.current=null,s(m),v(-1),w(!1)};document.addEventListener(\"mouseup\",b),document.addEventListener(\"mousemove\",g),n.currentTarget.addEventListener(\"touchend\",b),n.currentTarget.addEventListener(\"touchmove\",g),A.current=g,T.current=b,j.current=n.currentTarget}]}(ne,oe,ke,fe,he,ye,Oe,Ae,we,le,ue),5),je=Te[0],Pe=Te[1],Me=Te[2],Re=Te[3],_e=Te[4],Fe=function(e,t){if(!u){var r=Vo(ke),n=0,o=0,i=he-fe;ke.forEach((function(t,r){var a=Math.abs(e-t);a<=i&&(i=a,n=r),t<e&&(o=r)}));var a=n;le&&0!==i&&(!de||ke.length<de)?(r.splice(o+1,0,e),a=o+1):r[n]=e,se&&!ke.length&&void 0===O&&r.push(e);var s,l,c=Ee(r);null==T||T(c),Oe(r),t?(null===(s=document.activeElement)||void 0===s||null===(l=s.blur)||void 0===l||l.call(s),re.current.focus(a),_e(t,a,r)):(null==j||j(c),Xt(!j,\"[rc-slider] `onAfterChange` is deprecated. Please use `onChangeComplete` instead.\"),null==P||P(c))}},Be=Ie(m.useState(null),2),Le=Be[0],He=Be[1];m.useEffect((function(){if(null!==Le){var e=ke.indexOf(Le);e>=0&&re.current.focus(e)}He(null)}),[Le]);var Ue=m.useMemo((function(){return(!ce||null!==pe)&&ce}),[ce,pe]),Ve=Ws((function(e,t){_e(e,t),null==T||T(Ee(ke))})),We=-1!==je;m.useEffect((function(){if(!We){var e=ke.lastIndexOf(Pe);re.current.focus(e)}}),[We]);var Ge=m.useMemo((function(){return Vo(Re).sort((function(e,t){return e-t}))}),[Re]),qe=Ie(m.useMemo((function(){return se?[Ge[0],Ge[Ge.length-1]]:[fe,Ge[0]]}),[Ge,se,fe]),2),Ke=qe[0],Xe=qe[1];m.useImperativeHandle(t,(function(){return{focus:function(){re.current.focus(0)},blur:function(){var e,t=document.activeElement;null!==(e=ne.current)&&void 0!==e&&e.contains(t)&&(null==t||t.blur())}}})),m.useEffect((function(){h&&re.current.focus(0)}),[]);var Ye=m.useMemo((function(){return{min:fe,max:he,direction:oe,disabled:u,keyboard:f,step:pe,included:B,includedStart:Ke,includedEnd:Xe,range:se,tabIndex:Z,ariaLabelForHandle:Q,ariaLabelledByForHandle:J,ariaRequired:ee,ariaValueTextFormatterForHandle:te,styles:s||{},classNames:a||{}}}),[fe,he,oe,u,f,pe,B,Ke,Xe,se,Z,Q,J,ee,te,s,a]);return m.createElement(Ww.Provider,{value:Ye},m.createElement(\"div\",{ref:ne,className:ze()(n,o,De(De(De(De({},\"\".concat(n,\"-disabled\"),u),\"\".concat(n,\"-vertical\"),F),\"\".concat(n,\"-horizontal\"),!F),\"\".concat(n,\"-with-marks\"),ge.length)),style:i,onMouseDown:function(e){e.preventDefault();var t,r=ne.current.getBoundingClientRect(),n=r.width,o=r.height,i=r.left,a=r.top,s=r.bottom,l=r.right,c=e.clientX,u=e.clientY;switch(oe){case\"btt\":t=(s-u)/o;break;case\"ttb\":t=(u-a)/o;break;case\"rtl\":t=(l-c)/n;break;default:t=(c-i)/n}Fe(ye(fe+t*(he-fe)),e)},id:l},m.createElement(\"div\",{className:ze()(\"\".concat(n,\"-rail\"),null==a?void 0:a.rail),style:At(At({},U),null==s?void 0:s.rail)}),!1!==Y&&m.createElement(nx,{prefixCls:n,style:z,values:ke,startPoint:L,onStartMove:Ue?Ve:void 0}),m.createElement(tx,{prefixCls:n,marks:ge,dots:q,style:V,activeStyle:W}),m.createElement(Zw,{ref:re,prefixCls:n,style:H,values:Re,draggingIndex:je,draggingDelete:Me,onStartMove:Ve,onOffsetChange:function(e,t){if(!u){var r=we(ke,e,t);null==T||T(Ee(ke)),Oe(r.values),He(r.value)}},onFocus:p,onBlur:g,handleRender:K,activeHandleRender:X,onChangeComplete:Ae,onDelete:le?function(e){if(!(u||!le||ke.length<=ue)){var t=Vo(ke);t.splice(e,1),null==T||T(Ee(t)),Oe(t);var r=Math.max(0,e-1);re.current.hideHelp(),re.current.focus(r)}}:void 0}),m.createElement(Jw,{prefixCls:n,marks:ge,onClick:Fe})))}));const ax=ix,sx=(0,m.createContext)({}),lx=m.forwardRef(((e,t)=>{const{open:r,draggingDelete:n,value:o}=e,i=(0,m.useRef)(null),a=r&&!n,s=(0,m.useRef)(null);function l(){Ol.cancel(s.current),s.current=null}return m.useEffect((()=>(a?s.current=Ol((()=>{var e;null===(e=i.current)||void 0===e||e.forceAlign(),s.current=null})):l(),l)),[a,e.title,o]),m.createElement(im,Object.assign({ref:Cn(i,t)},e,{open:a}))})),cx=e=>{const{componentCls:t,antCls:r,controlSize:n,dotSize:o,marginFull:i,marginPart:a,colorFillContentHover:s,handleColorDisabled:l,calc:c,handleSize:u,handleSizeHover:d,handleActiveColor:f,handleActiveOutlineColor:h,handleLineWidth:p,handleLineWidthHover:m,motionDurationMid:g}=e;return{[t]:Object.assign(Object.assign({},rc(e)),{position:\"relative\",height:n,margin:`${Si(a)} ${Si(i)}`,padding:0,cursor:\"pointer\",touchAction:\"none\",\"&-vertical\":{margin:`${Si(i)} ${Si(a)}`},[`${t}-rail`]:{position:\"absolute\",backgroundColor:e.railBg,borderRadius:e.borderRadiusXS,transition:`background-color ${g}`},[`${t}-track,${t}-tracks`]:{position:\"absolute\",transition:`background-color ${g}`},[`${t}-track`]:{backgroundColor:e.trackBg,borderRadius:e.borderRadiusXS},[`${t}-track-draggable`]:{boxSizing:\"content-box\",backgroundClip:\"content-box\",border:\"solid rgba(0,0,0,0)\"},\"&:hover\":{[`${t}-rail`]:{backgroundColor:e.railHoverBg},[`${t}-track`]:{backgroundColor:e.trackHoverBg},[`${t}-dot`]:{borderColor:s},[`${t}-handle::after`]:{boxShadow:`0 0 0 ${Si(p)} ${e.colorPrimaryBorderHover}`},[`${t}-dot-active`]:{borderColor:e.dotActiveBorderColor}},[`${t}-handle`]:{position:\"absolute\",width:u,height:u,outline:\"none\",userSelect:\"none\",\"&-dragging-delete\":{opacity:0},\"&::before\":{content:'\"\"',position:\"absolute\",insetInlineStart:c(p).mul(-1).equal(),insetBlockStart:c(p).mul(-1).equal(),width:c(u).add(c(p).mul(2)).equal(),height:c(u).add(c(p).mul(2)).equal(),backgroundColor:\"transparent\"},\"&::after\":{content:'\"\"',position:\"absolute\",insetBlockStart:0,insetInlineStart:0,width:u,height:u,backgroundColor:e.colorBgElevated,boxShadow:`0 0 0 ${Si(p)} ${e.handleColor}`,outline:\"0px solid transparent\",borderRadius:\"50%\",cursor:\"pointer\",transition:`\\n            inset-inline-start ${g},\\n            inset-block-start ${g},\\n            width ${g},\\n            height ${g},\\n            box-shadow ${g},\\n            outline ${g}\\n          `},\"&:hover, &:active, &:focus\":{\"&::before\":{insetInlineStart:c(d).sub(u).div(2).add(m).mul(-1).equal(),insetBlockStart:c(d).sub(u).div(2).add(m).mul(-1).equal(),width:c(d).add(c(m).mul(2)).equal(),height:c(d).add(c(m).mul(2)).equal()},\"&::after\":{boxShadow:`0 0 0 ${Si(m)} ${f}`,outline:`6px solid ${h}`,width:d,height:d,insetInlineStart:e.calc(u).sub(d).div(2).equal(),insetBlockStart:e.calc(u).sub(d).div(2).equal()}}},[`&-lock ${t}-handle`]:{\"&::before, &::after\":{transition:\"none\"}},[`${t}-mark`]:{position:\"absolute\",fontSize:e.fontSize},[`${t}-mark-text`]:{position:\"absolute\",display:\"inline-block\",color:e.colorTextDescription,textAlign:\"center\",wordBreak:\"keep-all\",cursor:\"pointer\",userSelect:\"none\",\"&-active\":{color:e.colorText}},[`${t}-step`]:{position:\"absolute\",background:\"transparent\",pointerEvents:\"none\"},[`${t}-dot`]:{position:\"absolute\",width:o,height:o,backgroundColor:e.colorBgElevated,border:`${Si(p)} solid ${e.dotBorderColor}`,borderRadius:\"50%\",cursor:\"pointer\",transition:`border-color ${e.motionDurationSlow}`,pointerEvents:\"auto\",\"&-active\":{borderColor:e.dotActiveBorderColor}},[`&${t}-disabled`]:{cursor:\"not-allowed\",[`${t}-rail`]:{backgroundColor:`${e.railBg} !important`},[`${t}-track`]:{backgroundColor:`${e.trackBgDisabled} !important`},[`\\n          ${t}-dot\\n        `]:{backgroundColor:e.colorBgElevated,borderColor:e.trackBgDisabled,boxShadow:\"none\",cursor:\"not-allowed\"},[`${t}-handle::after`]:{backgroundColor:e.colorBgElevated,cursor:\"not-allowed\",width:u,height:u,boxShadow:`0 0 0 ${Si(p)} ${l}`,insetInlineStart:0,insetBlockStart:0},[`\\n          ${t}-mark-text,\\n          ${t}-dot\\n        `]:{cursor:\"not-allowed !important\"}},[`&-tooltip ${r}-tooltip-inner`]:{minWidth:\"unset\"}})}},ux=(e,t)=>{const{componentCls:r,railSize:n,handleSize:o,dotSize:i,marginFull:a,calc:s}=e,l=t?\"paddingBlock\":\"paddingInline\",c=t?\"width\":\"height\",u=t?\"height\":\"width\",d=t?\"insetBlockStart\":\"insetInlineStart\",f=t?\"top\":\"insetInlineStart\",h=s(n).mul(3).sub(o).div(2).equal(),p=s(o).sub(n).div(2).equal(),m=t?{borderWidth:`${Si(p)} 0`,transform:`translateY(${Si(s(p).mul(-1).equal())})`}:{borderWidth:`0 ${Si(p)}`,transform:`translateX(${Si(e.calc(p).mul(-1).equal())})`};return{[l]:n,[u]:s(n).mul(3).equal(),[`${r}-rail`]:{[c]:\"100%\",[u]:n},[`${r}-track,${r}-tracks`]:{[u]:n},[`${r}-track-draggable`]:Object.assign({},m),[`${r}-handle`]:{[d]:h},[`${r}-mark`]:{insetInlineStart:0,top:0,[f]:s(n).mul(3).add(t?0:a).equal(),[c]:\"100%\"},[`${r}-step`]:{insetInlineStart:0,top:0,[f]:n,[c]:\"100%\",[u]:n},[`${r}-dot`]:{position:\"absolute\",[d]:s(n).sub(i).div(2).equal()}}},dx=e=>{const{componentCls:t,marginPartWithMark:r}=e;return{[`${t}-horizontal`]:Object.assign(Object.assign({},ux(e,!0)),{[`&${t}-with-marks`]:{marginBottom:r}})}},fx=e=>{const{componentCls:t}=e;return{[`${t}-vertical`]:Object.assign(Object.assign({},ux(e,!1)),{height:\"100%\"})}},hx=Iu(\"Slider\",(e=>{const t=Au(e,{marginPart:e.calc(e.controlHeight).sub(e.controlSize).div(2).equal(),marginFull:e.calc(e.controlSize).div(2).equal(),marginPartWithMark:e.calc(e.controlHeightLG).sub(e.controlSize).equal()});return[cx(t),dx(t),fx(t)]}),(e=>{const t=e.controlHeightLG/4,r=e.controlHeightSM/2,n=e.lineWidth+1,o=e.lineWidth+1.5,i=e.colorPrimary,a=new Ge(i).setA(.2).toRgbString();return{controlSize:t,railSize:4,handleSize:t,handleSizeHover:r,dotSize:8,handleLineWidth:n,handleLineWidthHover:o,railBg:e.colorFillTertiary,railHoverBg:e.colorFillSecondary,trackBg:e.colorPrimaryBorder,trackHoverBg:e.colorPrimaryBorderHover,handleColor:e.colorPrimaryBorder,handleActiveColor:i,handleActiveOutlineColor:a,handleColorDisabled:new Ge(e.colorTextDisabled).onBackground(e.colorBgContainer).toHexString(),dotBorderColor:e.colorBorderSecondary,dotActiveBorderColor:e.colorPrimaryBorder,trackBgDisabled:e.colorBgContainerDisabled}}));function px(){const[e,t]=m.useState(!1),r=m.useRef(null),n=()=>{Ol.cancel(r.current)};return m.useEffect((()=>n),[]),[e,e=>{n(),e?t(e):r.current=Ol((()=>{t(e)}))}]}const mx=m.forwardRef(((e,t)=>{const{prefixCls:r,range:n,className:o,rootClassName:i,style:a,disabled:s,tooltipPrefixCls:l,tipFormatter:c,tooltipVisible:u,getTooltipPopupContainer:d,tooltipPlacement:f,tooltip:h={},onChangeComplete:p,classNames:g,styles:v}=e,b=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"range\",\"className\",\"rootClassName\",\"style\",\"disabled\",\"tooltipPrefixCls\",\"tipFormatter\",\"tooltipVisible\",\"getTooltipPopupContainer\",\"tooltipPlacement\",\"tooltip\",\"onChangeComplete\",\"classNames\",\"styles\"]),{vertical:y}=e,{getPrefixCls:w,direction:x,className:S,style:C,classNames:k,styles:E,getPopupContainer:O}=Zo(\"slider\"),A=m.useContext(Ss),T=null!=s?s:A,{handleRender:j,direction:P}=m.useContext(sx),M=\"rtl\"===(P||x),[R,_]=px(),[I,N]=px(),F=Object.assign({},h),{open:D,placement:B,getPopupContainer:L,prefixCls:z,formatter:H}=F,U=null!=D?D:u,V=(R||I)&&!1!==U,W=function(e,t){return e||null===e?e:t||null===t?t:e=>\"number\"==typeof e?e.toString():\"\"}(H,c),[G,q]=px(),K=(e,t)=>e||(t?M?\"left\":\"right\":\"top\"),X=w(\"slider\",r),[Y,$,Z]=hx(X),Q=ze()(o,S,k.root,null==g?void 0:g.root,i,{[`${X}-rtl`]:M,[`${X}-lock`]:G},$,Z);M&&!b.vertical&&(b.reverse=!b.reverse),m.useEffect((()=>{const e=()=>{Ol((()=>{N(!1)}),1)};return document.addEventListener(\"mouseup\",e),()=>{document.removeEventListener(\"mouseup\",e)}}),[]);const J=n&&!U,ee=j||((e,t)=>{const{index:r}=t,n=e.props;function o(e,t,r){var o,i,a,s;r&&(null===(i=(o=b)[e])||void 0===i||i.call(o,t)),null===(s=(a=n)[e])||void 0===s||s.call(a,t)}const i=Object.assign(Object.assign({},n),{onMouseEnter:e=>{_(!0),o(\"onMouseEnter\",e)},onMouseLeave:e=>{_(!1),o(\"onMouseLeave\",e)},onMouseDown:e=>{N(!0),q(!0),o(\"onMouseDown\",e)},onFocus:e=>{var t;N(!0),null===(t=b.onFocus)||void 0===t||t.call(b,e),o(\"onFocus\",e,!0)},onBlur:e=>{var t;N(!1),null===(t=b.onBlur)||void 0===t||t.call(b,e),o(\"onBlur\",e,!0)}}),a=m.cloneElement(e,i),s=(!!U||V)&&null!==W;return J?a:m.createElement(lx,Object.assign({},F,{prefixCls:w(\"tooltip\",null!=z?z:l),title:W?W(t.value):\"\",value:t.value,open:s,placement:K(null!=B?B:f,y),key:r,classNames:{root:`${X}-tooltip`},getPopupContainer:L||d||O}),a)}),te=J?(e,t)=>{const r=m.cloneElement(e,{style:Object.assign(Object.assign({},e.props.style),{visibility:\"hidden\"})});return m.createElement(lx,Object.assign({},F,{prefixCls:w(\"tooltip\",null!=z?z:l),title:W?W(t.value):\"\",open:null!==W&&V,placement:K(null!=B?B:f,y),key:\"tooltip\",classNames:{root:`${X}-tooltip`},getPopupContainer:L||d||O,draggingDelete:t.draggingDelete}),r)}:void 0,re=Object.assign(Object.assign(Object.assign(Object.assign({},E.root),C),null==v?void 0:v.root),a),ne=Object.assign(Object.assign({},E.tracks),null==v?void 0:v.tracks),oe=ze()(k.tracks,null==g?void 0:g.tracks);return Y(m.createElement(ax,Object.assign({},b,{classNames:Object.assign({handle:ze()(k.handle,null==g?void 0:g.handle),rail:ze()(k.rail,null==g?void 0:g.rail),track:ze()(k.track,null==g?void 0:g.track)},oe?{tracks:oe}:{}),styles:Object.assign({handle:Object.assign(Object.assign({},E.handle),null==v?void 0:v.handle),rail:Object.assign(Object.assign({},E.rail),null==v?void 0:v.rail),track:Object.assign(Object.assign({},E.track),null==v?void 0:v.track)},Object.keys(ne).length?{tracks:ne}:{}),step:b.step,range:n,className:Q,style:re,disabled:T,ref:t,prefixCls:X,handleRender:ee,activeHandleRender:te,onChangeComplete:e=>{null==p||p(e),q(!1)}})))})),gx=mx;const vx=e=>{const{prefixCls:t,colors:r,type:n,color:o,range:i=!1,className:a,activeIndex:s,onActive:l,onDragStart:c,onDragChange:u,onKeyDelete:d}=e,f=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"colors\",\"type\",\"color\",\"range\",\"className\",\"activeIndex\",\"onActive\",\"onDragStart\",\"onDragChange\",\"onKeyDelete\"]),h=Object.assign(Object.assign({},f),{track:!1}),p=m.useMemo((()=>`linear-gradient(90deg, ${r.map((e=>`${e.color} ${e.percent}%`)).join(\", \")})`),[r]),g=m.useMemo((()=>o&&n?\"alpha\"===n?o.toRgbString():`hsl(${o.toHsb().h}, 100%, 50%)`:null),[o,n]),v=Ws(c),b=Ws(u),y=m.useMemo((()=>({onDragStart:v,onDragChange:b})),[]),w=Ws(((e,o)=>{const{onFocus:i,style:a,className:c,onKeyDown:u}=e.props,f=Object.assign({},a);return\"gradient\"===n&&(f.background=sg(r,o.value)),m.cloneElement(e,{onFocus:e=>{null==l||l(o.index),null==i||i(e)},style:f,className:ze()(c,{[`${t}-slider-handle-active`]:s===o.index}),onKeyDown:e=>{\"Delete\"!==e.key&&\"Backspace\"!==e.key||!d||d(o.index),null==u||u(e)}})})),x=m.useMemo((()=>({direction:\"ltr\",handleRender:w})),[]);return m.createElement(sx.Provider,{value:x},m.createElement(Gw.Provider,{value:y},m.createElement(gx,Object.assign({},h,{className:ze()(a,`${t}-slider`),tooltip:{open:!1},range:{editable:i,minCount:2},styles:{rail:{background:p},handle:g?{background:g}:{}},classNames:{rail:`${t}-slider-rail`,handle:`${t}-slider-handle`}}))))};function bx(e){return Vo(e).sort(((e,t)=>e.percent-t.percent))}const yx=e=>{const{prefixCls:t,mode:r,onChange:n,onChangeComplete:o,onActive:i,activeIndex:a,onGradientDragging:s,colors:l}=e,c=\"gradient\"===r,u=m.useMemo((()=>l.map((e=>({percent:e.percent,color:e.color.toRgbString()})))),[l]),d=m.useMemo((()=>u.map((e=>e.percent))),[u]),f=m.useRef(u);return c?m.createElement(vx,{min:0,max:100,prefixCls:t,className:`${t}-gradient-slider`,colors:u,color:null,value:d,range:!0,onChangeComplete:e=>{o(new Im(u)),a>=e.length&&i(e.length-1),s(!1)},disabled:!1,type:\"gradient\",activeIndex:a,onActive:i,onDragStart:e=>{let{rawValues:t,draggingIndex:r,draggingValue:o}=e;if(t.length>u.length){const e=sg(u,o),t=Vo(u);t.splice(r,0,{percent:o,color:e}),f.current=t}else f.current=u;s(!0),n(new Im(bx(f.current)),!0)},onDragChange:e=>{let{deleteIndex:t,draggingIndex:r,draggingValue:o}=e,i=Vo(f.current);-1!==t?i.splice(t,1):(i[r]=Object.assign(Object.assign({},i[r]),{percent:o}),i=bx(i)),n(new Im(i),!0)},onKeyDelete:e=>{const t=Vo(u);t.splice(e,1);const r=new Im(t);n(r),o(r)}}):null},wx=m.memo(yx);const xx={slider:e=>{const{value:t,onChange:r,onChangeComplete:n}=e;return m.createElement(vx,Object.assign({},e,{value:[t],onChange:e=>r(e[0]),onChangeComplete:e=>n(e[0])}))}},Sx=()=>{const e=(0,m.useContext)(tg),{mode:t,onModeChange:r,modeOptions:n,prefixCls:o,allowClear:i,value:a,disabledAlpha:s,onChange:l,onClear:c,onChangeComplete:u,activeIndex:d,gradientDragging:f}=e,h=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"mode\",\"onModeChange\",\"modeOptions\",\"prefixCls\",\"allowClear\",\"value\",\"disabledAlpha\",\"onChange\",\"onClear\",\"onChangeComplete\",\"activeIndex\",\"gradientDragging\"]),p=m.useMemo((()=>a.cleared?[{percent:0,color:new Im(\"\")},{percent:100,color:new Im(\"\")}]:a.getColors()),[a]),g=!a.isGradient(),[v,b]=m.useState(a);Pi((()=>{var e;g||b(null===(e=p[d])||void 0===e?void 0:e.color)}),[f,d]);const y=m.useMemo((()=>{var e;return g?a:f?v:null===(e=p[d])||void 0===e?void 0:e.color}),[a,d,g,v,f]),[w,x]=m.useState(y),[S,C]=m.useState(0),k=(null==w?void 0:w.equals(y))?y:w;Pi((()=>{x(y)}),[S,null==y?void 0:y.toHexString()]);const E=(e,r)=>{let n=ng(e);if(a.cleared){const e=n.toRgb();if(e.r||e.g||e.b||!r)n=ag(n);else{const{type:e,value:t=0}=r;n=new Im({h:\"hue\"===e?t:0,s:1,b:1,a:\"alpha\"===e?t/100:1})}}if(\"single\"===t)return n;const o=Vo(p);return o[d]=Object.assign(Object.assign({},o[d]),{color:n}),new Im(o)};let O=null;const A=n.length>1;return(i||A)&&(O=m.createElement(\"div\",{className:`${o}-operation`},A&&m.createElement(eg,{size:\"small\",options:n,value:t,onChange:r}),m.createElement(lg,Object.assign({prefixCls:o,value:a,onChange:e=>{l(e),null==c||c()}},h)))),m.createElement(m.Fragment,null,O,m.createElement(wx,Object.assign({},e,{colors:p})),m.createElement(Rm,{prefixCls:o,value:null==k?void 0:k.toHsb(),disabledAlpha:s,onChange:(e,t)=>{((e,t,r)=>{const n=E(e,r);x(n.isGradient()?n.getColors()[d].color:n),l(n,!0)})(e,0,t)},onChangeComplete:(e,t)=>{((e,t)=>{u(E(e,t)),C((e=>e+1))})(e,t)},components:xx}),m.createElement(zw,Object.assign({value:y,onChange:e=>{l(E(e))},prefixCls:o,disabledAlpha:s},h)))},Cx={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M765.7 486.8L314.9 134.7A7.97 7.97 0 00302 141v77.3c0 4.9 2.3 9.6 6.1 12.6l360 281.1-360 281.1c-3.9 3-6.1 7.7-6.1 12.6V883c0 6.7 7.7 10.4 12.9 6.3l450.8-352.1a31.96 31.96 0 000-50.4z\"}}]},name:\"right\",theme:\"outlined\"};var kx=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:Cx}))};const Ex=m.forwardRef(kx);var Ox=m.forwardRef((function(e,t){var r=e.prefixCls,n=e.forceRender,o=e.className,i=e.style,a=e.children,s=e.isActive,l=e.role,c=e.classNames,u=e.styles,d=Ie(m.useState(s||n),2),f=d[0],h=d[1];return m.useEffect((function(){(n||s)&&h(!0)}),[n,s]),f?m.createElement(\"div\",{ref:t,className:ze()(\"\".concat(r,\"-content\"),De(De({},\"\".concat(r,\"-content-active\"),s),\"\".concat(r,\"-content-inactive\"),!s),o),style:i,role:l},m.createElement(\"div\",{className:ze()(\"\".concat(r,\"-content-box\"),null==c?void 0:c.body),style:null==u?void 0:u.body},a)):null}));Ox.displayName=\"PanelContent\";const Ax=Ox;var Tx=[\"showArrow\",\"headerClass\",\"isActive\",\"onItemClick\",\"forceRender\",\"className\",\"classNames\",\"styles\",\"prefixCls\",\"collapsible\",\"accordion\",\"panelKey\",\"extra\",\"header\",\"expandIcon\",\"openMotion\",\"destroyInactivePanel\",\"children\"],jx=m.forwardRef((function(e,t){var r=e.showArrow,n=void 0===r||r,o=e.headerClass,i=e.isActive,a=e.onItemClick,s=e.forceRender,l=e.className,c=e.classNames,u=void 0===c?{}:c,d=e.styles,f=void 0===d?{}:d,h=e.prefixCls,p=e.collapsible,g=e.accordion,v=e.panelKey,b=e.extra,y=e.header,w=e.expandIcon,x=e.openMotion,S=e.destroyInactivePanel,C=e.children,k=Be(e,Tx),E=\"disabled\"===p,O=null!=b&&\"boolean\"!=typeof b,A=De(De(De({onClick:function(){null==a||a(v)},onKeyDown:function(e){\"Enter\"!==e.key&&e.keyCode!==$c.ENTER&&e.which!==$c.ENTER||null==a||a(v)},role:g?\"tab\":\"button\"},\"aria-expanded\",i),\"aria-disabled\",E),\"tabIndex\",E?-1:0),T=\"function\"==typeof w?w(e):m.createElement(\"i\",{className:\"arrow\"}),j=T&&m.createElement(\"div\",Te({className:\"\".concat(h,\"-expand-icon\")},[\"header\",\"icon\"].includes(p)?A:{}),T),P=ze()(\"\".concat(h,\"-item\"),De(De({},\"\".concat(h,\"-item-active\"),i),\"\".concat(h,\"-item-disabled\"),E),l),M=At({className:ze()(o,\"\".concat(h,\"-header\"),De({},\"\".concat(h,\"-collapsible-\").concat(p),!!p),u.header),style:f.header},[\"header\",\"icon\"].includes(p)?{}:A);return m.createElement(\"div\",Te({},k,{ref:t,className:P}),m.createElement(\"div\",M,n&&j,m.createElement(\"span\",Te({className:\"\".concat(h,\"-header-text\")},\"header\"===p?A:{}),y),O&&m.createElement(\"div\",{className:\"\".concat(h,\"-extra\")},b)),m.createElement(Vl,Te({visible:i,leavedClassName:\"\".concat(h,\"-content-hidden\")},x,{forceRender:s,removeOnLeave:S}),(function(e,t){var r=e.className,n=e.style;return m.createElement(Ax,{ref:t,prefixCls:h,className:r,classNames:u,style:n,styles:f,isActive:i,forceRender:s,role:g?\"tabpanel\":void 0},C)})))}));const Px=jx;var Mx=[\"children\",\"label\",\"key\",\"collapsible\",\"onItemClick\",\"destroyInactivePanel\"];function Rx(e){var t=e;if(!Array.isArray(t)){var r=Ne(t);t=\"number\"===r||\"string\"===r?[t]:[]}return t.map((function(e){return String(e)}))}var _x=m.forwardRef((function(e,t){var r=e.prefixCls,n=void 0===r?\"rc-collapse\":r,o=e.destroyInactivePanel,i=void 0!==o&&o,a=e.style,s=e.accordion,l=e.className,c=e.children,u=e.collapsible,d=e.openMotion,f=e.expandIcon,h=e.activeKey,p=e.defaultActiveKey,g=e.onChange,v=e.items,b=ze()(n,l),y=Ie(Ks([],{value:h,onChange:function(e){return null==g?void 0:g(e)},defaultValue:p,postState:Rx}),2),w=y[0],x=y[1];Xt(!c,\"[rc-collapse] `children` will be removed in next major version. Please use `items` instead.\");var S=function(e,t,r){return Array.isArray(e)?function(e,t){var r=t.prefixCls,n=t.accordion,o=t.collapsible,i=t.destroyInactivePanel,a=t.onItemClick,s=t.activeKey,l=t.openMotion,c=t.expandIcon;return e.map((function(e,t){var u,d=e.children,f=e.label,h=e.key,p=e.collapsible,g=e.onItemClick,v=e.destroyInactivePanel,b=Be(e,Mx),y=String(null!=h?h:t),w=null!=p?p:o,x=null!=v?v:i;return u=n?s[0]===y:s.indexOf(y)>-1,m.createElement(Px,Te({},b,{prefixCls:r,key:y,panelKey:y,isActive:u,accordion:n,openMotion:l,expandIcon:c,header:f,collapsible:w,onItemClick:function(e){\"disabled\"!==w&&(a(e),null==g||g(e))},destroyInactivePanel:x}),d)}))}(e,r):sd(t).map((function(e,t){return function(e,t,r){if(!e)return null;var n,o=r.prefixCls,i=r.accordion,a=r.collapsible,s=r.destroyInactivePanel,l=r.onItemClick,c=r.activeKey,u=r.openMotion,d=r.expandIcon,f=e.key||String(t),h=e.props,p=h.header,g=h.headerClass,v=h.destroyInactivePanel,b=h.collapsible,y=h.onItemClick;n=i?c[0]===f:c.indexOf(f)>-1;var w=null!=b?b:a,x={key:f,panelKey:f,header:p,headerClass:g,isActive:n,prefixCls:o,destroyInactivePanel:null!=v?v:s,openMotion:u,accordion:i,children:e.props.children,onItemClick:function(e){\"disabled\"!==w&&(l(e),null==y||y(e))},expandIcon:d,collapsible:w};return\"string\"==typeof e.type?e:(Object.keys(x).forEach((function(e){void 0===x[e]&&delete x[e]})),m.cloneElement(e,x))}(e,t,r)}))}(v,c,{prefixCls:n,accordion:s,openMotion:d,expandIcon:f,collapsible:u,destroyInactivePanel:i,onItemClick:function(e){return x((function(){return s?w[0]===e?[]:[e]:w.indexOf(e)>-1?w.filter((function(t){return t!==e})):[].concat(Vo(w),[e])}))},activeKey:w});return m.createElement(\"div\",Te({ref:t,className:b,style:a,role:s?\"tablist\":void 0},Jc(e,{aria:!0,data:!0})),S)}));const Ix=Object.assign(_x,{Panel:Px}),Nx=Ix;Ix.Panel;const Fx=m.forwardRef(((e,t)=>{const{getPrefixCls:r}=m.useContext(Xo),{prefixCls:n,className:o,showArrow:i=!0}=e,a=r(\"collapse\",n),s=ze()({[`${a}-no-arrow`]:!i},o);return m.createElement(Nx.Panel,Object.assign({ref:t},e,{prefixCls:a,className:s}))})),Dx=e=>({[e.componentCls]:{[`${e.antCls}-motion-collapse-legacy`]:{overflow:\"hidden\",\"&-active\":{transition:`height ${e.motionDurationMid} ${e.motionEaseInOut},\\n        opacity ${e.motionDurationMid} ${e.motionEaseInOut} !important`}},[`${e.antCls}-motion-collapse`]:{overflow:\"hidden\",transition:`height ${e.motionDurationMid} ${e.motionEaseInOut},\\n        opacity ${e.motionDurationMid} ${e.motionEaseInOut} !important`}}}),Bx=e=>{const{componentCls:t,contentBg:r,padding:n,headerBg:o,headerPadding:i,collapseHeaderPaddingSM:a,collapseHeaderPaddingLG:s,collapsePanelBorderRadius:l,lineWidth:c,lineType:u,colorBorder:d,colorText:f,colorTextHeading:h,colorTextDisabled:p,fontSizeLG:m,lineHeight:g,lineHeightLG:v,marginSM:b,paddingSM:y,paddingLG:w,paddingXS:x,motionDurationSlow:S,fontSizeIcon:C,contentPadding:k,fontHeight:E,fontHeightLG:O}=e,A=`${Si(c)} ${u} ${d}`;return{[t]:Object.assign(Object.assign({},rc(e)),{backgroundColor:o,border:A,borderRadius:l,\"&-rtl\":{direction:\"rtl\"},[`& > ${t}-item`]:{borderBottom:A,\"&:first-child\":{[`\\n            &,\\n            & > ${t}-header`]:{borderRadius:`${Si(l)} ${Si(l)} 0 0`}},\"&:last-child\":{[`\\n            &,\\n            & > ${t}-header`]:{borderRadius:`0 0 ${Si(l)} ${Si(l)}`}},[`> ${t}-header`]:Object.assign(Object.assign({position:\"relative\",display:\"flex\",flexWrap:\"nowrap\",alignItems:\"flex-start\",padding:i,color:h,lineHeight:g,cursor:\"pointer\",transition:`all ${S}, visibility 0s`},oc(e)),{[`> ${t}-header-text`]:{flex:\"auto\"},[`${t}-expand-icon`]:{height:E,display:\"flex\",alignItems:\"center\",paddingInlineEnd:b},[`${t}-arrow`]:Object.assign(Object.assign({},{display:\"inline-flex\",alignItems:\"center\",color:\"inherit\",fontStyle:\"normal\",lineHeight:0,textAlign:\"center\",textTransform:\"none\",verticalAlign:\"-0.125em\",textRendering:\"optimizeLegibility\",\"-webkit-font-smoothing\":\"antialiased\",\"-moz-osx-font-smoothing\":\"grayscale\",\"> *\":{lineHeight:1},svg:{display:\"inline-block\"}}),{fontSize:C,transition:`transform ${S}`,svg:{transition:`transform ${S}`}}),[`${t}-header-text`]:{marginInlineEnd:\"auto\"}}),[`${t}-collapsible-header`]:{cursor:\"default\",[`${t}-header-text`]:{flex:\"none\",cursor:\"pointer\"}},[`${t}-collapsible-icon`]:{cursor:\"unset\",[`${t}-expand-icon`]:{cursor:\"pointer\"}}},[`${t}-content`]:{color:f,backgroundColor:r,borderTop:A,[`& > ${t}-content-box`]:{padding:k},\"&-hidden\":{display:\"none\"}},\"&-small\":{[`> ${t}-item`]:{[`> ${t}-header`]:{padding:a,paddingInlineStart:x,[`> ${t}-expand-icon`]:{marginInlineStart:e.calc(y).sub(x).equal()}},[`> ${t}-content > ${t}-content-box`]:{padding:y}}},\"&-large\":{[`> ${t}-item`]:{fontSize:m,lineHeight:v,[`> ${t}-header`]:{padding:s,paddingInlineStart:n,[`> ${t}-expand-icon`]:{height:O,marginInlineStart:e.calc(w).sub(n).equal()}},[`> ${t}-content > ${t}-content-box`]:{padding:w}}},[`${t}-item:last-child`]:{borderBottom:0,[`> ${t}-content`]:{borderRadius:`0 0 ${Si(l)} ${Si(l)}`}},[`& ${t}-item-disabled > ${t}-header`]:{\"\\n          &,\\n          & > .arrow\\n        \":{color:p,cursor:\"not-allowed\"}},[`&${t}-icon-position-end`]:{[`& > ${t}-item`]:{[`> ${t}-header`]:{[`${t}-expand-icon`]:{order:1,paddingInlineEnd:0,paddingInlineStart:b}}}}})}},Lx=e=>{const{componentCls:t}=e,r=`> ${t}-item > ${t}-header ${t}-arrow`;return{[`${t}-rtl`]:{[r]:{transform:\"rotate(180deg)\"}}}},zx=e=>{const{componentCls:t,headerBg:r,borderlessContentPadding:n,borderlessContentBg:o,colorBorder:i}=e;return{[`${t}-borderless`]:{backgroundColor:r,border:0,[`> ${t}-item`]:{borderBottom:`1px solid ${i}`},[`\\n        > ${t}-item:last-child,\\n        > ${t}-item:last-child ${t}-header\\n      `]:{borderRadius:0},[`> ${t}-item:last-child`]:{borderBottom:0},[`> ${t}-item > ${t}-content`]:{backgroundColor:o,borderTop:0},[`> ${t}-item > ${t}-content > ${t}-content-box`]:{padding:n}}}},Hx=e=>{const{componentCls:t,paddingSM:r}=e;return{[`${t}-ghost`]:{backgroundColor:\"transparent\",border:0,[`> ${t}-item`]:{borderBottom:0,[`> ${t}-content`]:{backgroundColor:\"transparent\",border:0,[`> ${t}-content-box`]:{paddingBlock:r}}}}}},Ux=Iu(\"Collapse\",(e=>{const t=Au(e,{collapseHeaderPaddingSM:`${Si(e.paddingXS)} ${Si(e.paddingSM)}`,collapseHeaderPaddingLG:`${Si(e.padding)} ${Si(e.paddingLG)}`,collapsePanelBorderRadius:e.borderRadiusLG});return[Bx(t),zx(t),Hx(t),Lx(t),Dx(t)]}),(e=>({headerPadding:`${e.paddingSM}px ${e.padding}px`,headerBg:e.colorFillAlter,contentPadding:`${e.padding}px 16px`,contentBg:e.colorBgContainer,borderlessContentPadding:`${e.paddingXXS}px 16px ${e.padding}px`,borderlessContentBg:\"transparent\"}))),Vx=m.forwardRef(((e,t)=>{const{getPrefixCls:r,direction:n,expandIcon:o,className:i,style:a}=Zo(\"collapse\"),{prefixCls:s,className:l,rootClassName:c,style:u,bordered:d=!0,ghost:f,size:h,expandIconPosition:p=\"start\",children:g,destroyInactivePanel:v,destroyOnHidden:b,expandIcon:y}=e,w=Rf((e=>{var t;return null!==(t=null!=h?h:e)&&void 0!==t?t:\"middle\"})),x=r(\"collapse\",s),S=r(),[C,k,E]=Ux(x),O=m.useMemo((()=>\"left\"===p?\"start\":\"right\"===p?\"end\":p),[p]),A=null!=y?y:o,T=m.useCallback((function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=\"function\"==typeof A?A(e):m.createElement(Ex,{rotate:e.isActive?\"rtl\"===n?-90:90:void 0,\"aria-label\":e.isActive?\"expanded\":\"collapsed\"});return th(t,(()=>{var e;return{className:ze()(null===(e=null==t?void 0:t.props)||void 0===e?void 0:e.className,`${x}-arrow`)}}))}),[A,x]),j=ze()(`${x}-icon-position-${O}`,{[`${x}-borderless`]:!d,[`${x}-rtl`]:\"rtl\"===n,[`${x}-ghost`]:!!f,[`${x}-${w}`]:\"middle\"!==w},i,l,c,k,E),P=Object.assign(Object.assign({},Jf(S)),{motionAppear:!1,leavedClassName:`${x}-content-hidden`}),M=m.useMemo((()=>g?sd(g).map(((e,t)=>{var r,n;const o=e.props;if(null==o?void 0:o.disabled){const i=null!==(r=e.key)&&void 0!==r?r:String(t);return th(e,Object.assign(Object.assign({},kf(e.props,[\"disabled\"])),{key:i,collapsible:null!==(n=o.collapsible)&&void 0!==n?n:\"disabled\"}))}return e})):null),[g]);return C(m.createElement(Nx,Object.assign({ref:t,openMotion:P},kf(e,[\"rootClassName\"]),{expandIcon:T,prefixCls:x,className:j,style:Object.assign(Object.assign({},a),u),destroyInactivePanel:null!=b?b:v}),M))})),Wx=Object.assign(Vx,{Panel:Fx}),Gx=e=>e.map((e=>(e.colors=e.colors.map(ng),e))),qx=(e,t)=>{const{r,g:n,b:o,a:i}=e.toRgb(),a=new vm(e.toRgbString()).onBackground(t).toHsv();return i<=.5?a.v>.5:.299*r+.587*n+.114*o>192},Kx=(e,t)=>{var r;return`panel-${null!==(r=e.key)&&void 0!==r?r:t}`},Xx=e=>{let{prefixCls:t,presets:r,value:n,onChange:o}=e;const[i]=Gv(\"ColorPicker\"),[,a]=Ql(),[s]=Ks(Gx(r),{value:Gx(r),postState:Gx}),l=`${t}-presets`,c=(0,m.useMemo)((()=>s.reduce(((e,t,r)=>{const{defaultOpen:n=!0}=t;return n&&e.push(Kx(t,r)),e}),[])),[s]),u=s.map(((e,r)=>{var s;return{key:Kx(e,r),label:m.createElement(\"div\",{className:`${l}-label`},null==e?void 0:e.label),children:m.createElement(\"div\",{className:`${l}-items`},Array.isArray(null==e?void 0:e.colors)&&(null===(s=e.colors)||void 0===s?void 0:s.length)>0?e.colors.map(((e,r)=>m.createElement(Sm,{key:`preset-${r}-${e.toHexString()}`,color:ng(e).toRgbString(),prefixCls:t,className:ze()(`${l}-color`,{[`${l}-color-checked`]:e.toHexString()===(null==n?void 0:n.toHexString()),[`${l}-color-bright`]:qx(e,a.colorBgElevated)}),onClick:()=>{null==o||o(e)}}))):m.createElement(\"span\",{className:`${l}-empty`},i.presetEmpty))}}));return m.createElement(\"div\",{className:l},m.createElement(Wx,{defaultActiveKey:c,ghost:!0,items:u}))},Yx=()=>{const{prefixCls:e,value:t,presets:r,onChange:n}=(0,m.useContext)(rg);return Array.isArray(r)?m.createElement(Xx,{value:t,presets:r,prefixCls:e,onChange:n}):null},$x=e=>{const{prefixCls:t,presets:r,panelRender:n,value:o,onChange:i,onClear:a,allowClear:s,disabledAlpha:l,mode:c,onModeChange:u,modeOptions:d,onChangeComplete:f,activeIndex:h,onActive:p,format:g,onFormatChange:v,gradientDragging:b,onGradientDragging:y,disabledFormat:w}=e,x=`${t}-inner`,S=m.useMemo((()=>({prefixCls:t,value:o,onChange:i,onClear:a,allowClear:s,disabledAlpha:l,mode:c,onModeChange:u,modeOptions:d,onChangeComplete:f,activeIndex:h,onActive:p,format:g,onFormatChange:v,gradientDragging:b,onGradientDragging:y,disabledFormat:w})),[t,o,i,a,s,l,c,u,d,f,h,p,g,v,b,y,w]),C=m.useMemo((()=>({prefixCls:t,value:o,presets:r,onChange:i})),[t,o,r,i]),k=m.createElement(\"div\",{className:`${x}-content`},m.createElement(Sx,null),Array.isArray(r)&&m.createElement(Lm,null),m.createElement(Yx,null));return m.createElement(tg.Provider,{value:S},m.createElement(rg.Provider,{value:C},m.createElement(\"div\",{className:x},\"function\"==typeof n?n(k,{components:{Picker:Sx,Presets:Yx}}):k)))};const Zx=(0,m.forwardRef)(((e,t)=>{const{color:r,prefixCls:n,open:o,disabled:i,format:a,className:s,showText:l,activeIndex:c}=e,u=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"color\",\"prefixCls\",\"open\",\"disabled\",\"format\",\"className\",\"showText\",\"activeIndex\"]),d=`${n}-trigger`,f=`${d}-text`,h=`${f}-cell`,[p]=Gv(\"ColorPicker\"),g=m.useMemo((()=>{if(!l)return\"\";if(\"function\"==typeof l)return l(r);if(r.cleared)return p.transparent;if(r.isGradient())return r.getColors().map(((e,t)=>{const r=-1!==c&&c!==t;return m.createElement(\"span\",{key:t,className:ze()(h,r&&`${h}-inactive`)},e.color.toRgbString(),\" \",e.percent,\"%\")}));const e=r.toHexString().toUpperCase(),t=ig(r);switch(a){case\"rgb\":return r.toRgbString();case\"hsb\":return r.toHsbString();default:return t<100?`${e.slice(0,7)},${t}%`:e}}),[r,a,l,c]),v=(0,m.useMemo)((()=>r.cleared?m.createElement(lg,{prefixCls:n}):m.createElement(Sm,{prefixCls:n,color:r.toCssString()})),[r,n]);return m.createElement(\"div\",Object.assign({ref:t,className:ze()(d,s,{[`${d}-active`]:o,[`${d}-disabled`]:i})},Jc(u)),v,l&&m.createElement(\"div\",{className:f},g))})),Qx=Zx,Jx=(e,t)=>({backgroundImage:`conic-gradient(${t} 25%, transparent 25% 50%, ${t} 50% 75%, transparent 75% 100%)`,backgroundSize:`${e} ${e}`}),eS=(e,t)=>{const{componentCls:r,borderRadiusSM:n,colorPickerInsetShadow:o,lineWidth:i,colorFillSecondary:a}=e;return{[`${r}-color-block`]:Object.assign(Object.assign({position:\"relative\",borderRadius:n,width:t,height:t,boxShadow:o,flex:\"none\"},Jx(\"50%\",e.colorFillSecondary)),{[`${r}-color-block-inner`]:{width:\"100%\",height:\"100%\",boxShadow:`inset 0 0 0 ${Si(i)} ${a}`,borderRadius:\"inherit\"}})}},tS=e=>{const{componentCls:t,antCls:r,fontSizeSM:n,lineHeightSM:o,colorPickerAlphaInputWidth:i,marginXXS:a,paddingXXS:s,controlHeightSM:l,marginXS:c,fontSizeIcon:u,paddingXS:d,colorTextPlaceholder:f,colorPickerInputNumberHandleWidth:h,lineWidth:p}=e;return{[`${t}-input-container`]:{display:\"flex\",[`${t}-steppers${r}-input-number`]:{fontSize:n,lineHeight:o,[`${r}-input-number-input`]:{paddingInlineStart:s,paddingInlineEnd:0},[`${r}-input-number-handler-wrap`]:{width:h}},[`${t}-steppers${t}-alpha-input`]:{flex:`0 0 ${Si(i)}`,marginInlineStart:a},[`${t}-format-select${r}-select`]:{marginInlineEnd:c,width:\"auto\",\"&-single\":{[`${r}-select-selector`]:{padding:0,border:0},[`${r}-select-arrow`]:{insetInlineEnd:0},[`${r}-select-selection-item`]:{paddingInlineEnd:e.calc(u).add(a).equal(),fontSize:n,lineHeight:Si(l)},[`${r}-select-item-option-content`]:{fontSize:n,lineHeight:o},[`${r}-select-dropdown`]:{[`${r}-select-item`]:{minHeight:\"auto\"}}}},[`${t}-input`]:{gap:a,alignItems:\"center\",flex:1,width:0,[`${t}-hsb-input,${t}-rgb-input`]:{display:\"flex\",gap:a,alignItems:\"center\"},[`${t}-steppers`]:{flex:1},[`${t}-hex-input${r}-input-affix-wrapper`]:{flex:1,padding:`0 ${Si(d)}`,[`${r}-input`]:{fontSize:n,textTransform:\"uppercase\",lineHeight:Si(e.calc(l).sub(e.calc(p).mul(2)).equal())},[`${r}-input-prefix`]:{color:f}}}}}},rS=e=>{const{componentCls:t,controlHeightLG:r,borderRadiusSM:n,colorPickerInsetShadow:o,marginSM:i,colorBgElevated:a,colorFillSecondary:s,lineWidthBold:l,colorPickerHandlerSize:c}=e;return{userSelect:\"none\",[`${t}-select`]:{[`${t}-palette`]:{minHeight:e.calc(r).mul(4).equal(),overflow:\"hidden\",borderRadius:n},[`${t}-saturation`]:{position:\"absolute\",borderRadius:\"inherit\",boxShadow:o,inset:0},marginBottom:i},[`${t}-handler`]:{width:c,height:c,border:`${Si(l)} solid ${a}`,position:\"relative\",borderRadius:\"50%\",cursor:\"pointer\",boxShadow:`${o}, 0 0 0 1px ${s}`}}},nS=e=>{const{componentCls:t,antCls:r,colorTextQuaternary:n,paddingXXS:o,colorPickerPresetColorSize:i,fontSizeSM:a,colorText:s,lineHeightSM:l,lineWidth:c,borderRadius:u,colorFill:d,colorWhite:f,marginXXS:h,paddingXS:p,fontHeightSM:m}=e;return{[`${t}-presets`]:{[`${r}-collapse-item > ${r}-collapse-header`]:{padding:0,[`${r}-collapse-expand-icon`]:{height:m,color:n,paddingInlineEnd:o}},[`${r}-collapse`]:{display:\"flex\",flexDirection:\"column\",gap:h},[`${r}-collapse-item > ${r}-collapse-content > ${r}-collapse-content-box`]:{padding:`${Si(p)} 0`},\"&-label\":{fontSize:a,color:s,lineHeight:l},\"&-items\":{display:\"flex\",flexWrap:\"wrap\",gap:e.calc(h).mul(1.5).equal(),[`${t}-presets-color`]:{position:\"relative\",cursor:\"pointer\",width:i,height:i,\"&::before\":{content:'\"\"',pointerEvents:\"none\",width:e.calc(i).add(e.calc(c).mul(4)).equal(),height:e.calc(i).add(e.calc(c).mul(4)).equal(),position:\"absolute\",top:e.calc(c).mul(-2).equal(),insetInlineStart:e.calc(c).mul(-2).equal(),borderRadius:u,border:`${Si(c)} solid transparent`,transition:`border-color ${e.motionDurationMid} ${e.motionEaseInBack}`},\"&:hover::before\":{borderColor:d},\"&::after\":{boxSizing:\"border-box\",position:\"absolute\",top:\"50%\",insetInlineStart:\"21.5%\",display:\"table\",width:e.calc(i).div(13).mul(5).equal(),height:e.calc(i).div(13).mul(8).equal(),border:`${Si(e.lineWidthBold)} solid ${e.colorWhite}`,borderTop:0,borderInlineStart:0,transform:\"rotate(45deg) scale(0) translate(-50%,-50%)\",opacity:0,content:'\"\"',transition:`all ${e.motionDurationFast} ${e.motionEaseInBack}, opacity ${e.motionDurationFast}`},[`&${t}-presets-color-checked`]:{\"&::after\":{opacity:1,borderColor:f,transform:\"rotate(45deg) scale(1) translate(-50%,-50%)\",transition:`transform ${e.motionDurationMid} ${e.motionEaseOutBack} ${e.motionDurationFast}`},[`&${t}-presets-color-bright`]:{\"&::after\":{borderColor:\"rgba(0, 0, 0, 0.45)\"}}}}},\"&-empty\":{fontSize:a,color:n}}}},oS=e=>{const{componentCls:t,colorPickerInsetShadow:r,colorBgElevated:n,colorFillSecondary:o,lineWidthBold:i,colorPickerHandlerSizeSM:a,colorPickerSliderHeight:s,marginSM:l,marginXS:c}=e,u=e.calc(a).sub(e.calc(i).mul(2).equal()).equal(),d=e.calc(a).add(e.calc(i).mul(2).equal()).equal(),f={\"&:after\":{transform:\"scale(1)\",boxShadow:`${r}, 0 0 0 1px ${e.colorPrimaryActive}`}};return{[`${t}-slider`]:[Jx(Si(s),e.colorFillSecondary),{margin:0,padding:0,height:s,borderRadius:e.calc(s).div(2).equal(),\"&-rail\":{height:s,borderRadius:e.calc(s).div(2).equal(),boxShadow:r},[`& ${t}-slider-handle`]:{width:u,height:u,top:0,borderRadius:\"100%\",\"&:before\":{display:\"block\",position:\"absolute\",background:\"transparent\",left:{_skip_check_:!0,value:\"50%\"},top:\"50%\",transform:\"translate(-50%, -50%)\",width:d,height:d,borderRadius:\"100%\"},\"&:after\":{width:a,height:a,border:`${Si(i)} solid ${n}`,boxShadow:`${r}, 0 0 0 1px ${o}`,outline:\"none\",insetInlineStart:e.calc(i).mul(-1).equal(),top:e.calc(i).mul(-1).equal(),background:\"transparent\",transition:\"none\"},\"&:focus\":f}}],[`${t}-slider-container`]:{display:\"flex\",gap:l,marginBottom:l,[`${t}-slider-group`]:{flex:1,flexDirection:\"column\",justifyContent:\"space-between\",display:\"flex\",\"&-disabled-alpha\":{justifyContent:\"center\"}}},[`${t}-gradient-slider`]:{marginBottom:c,[`& ${t}-slider-handle`]:{\"&:after\":{transform:\"scale(0.8)\"},\"&-active, &:focus\":f}}}},iS=(e,t,r)=>({borderInlineEndWidth:e.lineWidth,borderColor:t,boxShadow:`0 0 0 ${Si(e.controlOutlineWidth)} ${r}`,outline:0}),aS=e=>{const{componentCls:t}=e;return{\"&-rtl\":{[`${t}-presets-color`]:{\"&::after\":{direction:\"ltr\"}},[`${t}-clear`]:{\"&::after\":{direction:\"ltr\"}}}}},sS=(e,t,r)=>{const{componentCls:n,borderRadiusSM:o,lineWidth:i,colorSplit:a,colorBorder:s,red6:l}=e;return{[`${n}-clear`]:Object.assign(Object.assign({width:t,height:t,borderRadius:o,border:`${Si(i)} solid ${a}`,position:\"relative\",overflow:\"hidden\",cursor:\"inherit\",transition:`all ${e.motionDurationFast}`},r),{\"&::after\":{content:'\"\"',position:\"absolute\",insetInlineEnd:e.calc(i).mul(-1).equal(),top:e.calc(i).mul(-1).equal(),display:\"block\",width:40,height:2,transformOrigin:\"calc(100% - 1px) 1px\",transform:\"rotate(-45deg)\",backgroundColor:l},\"&:hover\":{borderColor:s}})}},lS=e=>{const{componentCls:t,colorError:r,colorWarning:n,colorErrorHover:o,colorWarningHover:i,colorErrorOutline:a,colorWarningOutline:s}=e;return{[`&${t}-status-error`]:{borderColor:r,\"&:hover\":{borderColor:o},[`&${t}-trigger-active`]:Object.assign({},iS(e,r,a))},[`&${t}-status-warning`]:{borderColor:n,\"&:hover\":{borderColor:i},[`&${t}-trigger-active`]:Object.assign({},iS(e,n,s))}}},cS=e=>{const{componentCls:t,controlHeightLG:r,controlHeightSM:n,controlHeight:o,controlHeightXS:i,borderRadius:a,borderRadiusSM:s,borderRadiusXS:l,borderRadiusLG:c,fontSizeLG:u}=e;return{[`&${t}-lg`]:{minWidth:r,minHeight:r,borderRadius:c,[`${t}-color-block, ${t}-clear`]:{width:o,height:o,borderRadius:a},[`${t}-trigger-text`]:{fontSize:u}},[`&${t}-sm`]:{minWidth:n,minHeight:n,borderRadius:s,[`${t}-color-block, ${t}-clear`]:{width:i,height:i,borderRadius:l},[`${t}-trigger-text`]:{lineHeight:Si(i)}}}},uS=e=>{const{antCls:t,componentCls:r,colorPickerWidth:n,colorPrimary:o,motionDurationMid:i,colorBgElevated:a,colorTextDisabled:s,colorText:l,colorBgContainerDisabled:c,borderRadius:u,marginXS:d,marginSM:f,controlHeight:h,controlHeightSM:p,colorBgTextActive:m,colorPickerPresetColorSize:g,colorPickerPreviewSize:v,lineWidth:b,colorBorder:y,paddingXXS:w,fontSize:x,colorPrimaryHover:S,controlOutline:C}=e;return[{[r]:Object.assign({[`${r}-inner`]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({\"&-content\":{display:\"flex\",flexDirection:\"column\",width:n,[`& > ${t}-divider`]:{margin:`${Si(f)} 0 ${Si(d)}`}},[`${r}-panel`]:Object.assign({},rS(e))},oS(e)),eS(e,v)),tS(e)),nS(e)),sS(e,g,{marginInlineStart:\"auto\"})),{[`${r}-operation`]:{display:\"flex\",justifyContent:\"space-between\",marginBottom:d}}),\"&-trigger\":Object.assign(Object.assign(Object.assign(Object.assign({minWidth:h,minHeight:h,borderRadius:u,border:`${Si(b)} solid ${y}`,cursor:\"pointer\",display:\"inline-flex\",alignItems:\"flex-start\",justifyContent:\"center\",transition:`all ${i}`,background:a,padding:e.calc(w).sub(b).equal(),[`${r}-trigger-text`]:{marginInlineStart:d,marginInlineEnd:e.calc(d).sub(e.calc(w).sub(b)).equal(),fontSize:x,color:l,alignSelf:\"center\",\"&-cell\":{\"&:not(:last-child):after\":{content:'\", \"'},\"&-inactive\":{color:s}}},\"&:hover\":{borderColor:S},[`&${r}-trigger-active`]:Object.assign({},iS(e,o,C)),\"&-disabled\":{color:s,background:c,cursor:\"not-allowed\",\"&:hover\":{borderColor:m},[`${r}-trigger-text`]:{color:s}}},sS(e,p)),eS(e,p)),lS(e)),cS(e))},aS(e))},ib(e,{focusElCls:`${r}-trigger-active`})]},dS=Iu(\"ColorPicker\",(e=>{const{colorTextQuaternary:t,marginSM:r}=e,n=Au(e,{colorPickerWidth:234,colorPickerHandlerSize:16,colorPickerHandlerSizeSM:12,colorPickerAlphaInputWidth:44,colorPickerInputNumberHandleWidth:16,colorPickerPresetColorSize:24,colorPickerInsetShadow:`inset 0 0 1px 0 ${t}`,colorPickerSliderHeight:8,colorPickerPreviewSize:e.calc(8).mul(2).add(r).equal()});return[uS(n)]}));const fS=e=>{const{mode:t,value:r,defaultValue:n,format:o,defaultFormat:i,allowClear:a=!1,presets:s,children:l,trigger:c=\"click\",open:u,disabled:d,placement:f=\"bottomLeft\",arrow:h=!0,panelRender:p,showText:g,style:v,className:b,size:y,rootClassName:w,prefixCls:x,styles:S,disabledAlpha:C=!1,onFormatChange:k,onChange:E,onClear:O,onOpenChange:A,onChangeComplete:T,getPopupContainer:j,autoAdjustOverflow:P=!0,destroyTooltipOnHide:M,destroyOnHidden:R,disabledFormat:_}=e,I=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"mode\",\"value\",\"defaultValue\",\"format\",\"defaultFormat\",\"allowClear\",\"presets\",\"children\",\"trigger\",\"open\",\"disabled\",\"placement\",\"arrow\",\"panelRender\",\"showText\",\"style\",\"className\",\"size\",\"rootClassName\",\"prefixCls\",\"styles\",\"disabledAlpha\",\"onFormatChange\",\"onChange\",\"onClear\",\"onOpenChange\",\"onChangeComplete\",\"getPopupContainer\",\"autoAdjustOverflow\",\"destroyTooltipOnHide\",\"destroyOnHidden\",\"disabledFormat\"]),{getPrefixCls:N,direction:F,colorPicker:D}=(0,m.useContext)(Xo),B=(0,m.useContext)(Ss),L=null!=d?d:B,[z,H]=Ks(!1,{value:u,postState:e=>!L&&e,onChange:A}),[U,V]=Ks(o,{value:o,defaultValue:i,onChange:k}),W=N(\"color-picker\",x),[G,q,K,X,Y]=function(e,t,r){const[n]=Gv(\"ColorPicker\"),[o,i]=Ks(e,{value:t}),[a,s]=m.useState(\"single\"),[l,c]=m.useMemo((()=>{const e=(Array.isArray(r)?r:[r]).filter((e=>e));e.length||e.push(\"single\");const t=new Set(e),o=[],i=(e,r)=>{t.has(e)&&o.push({label:r,value:e})};return i(\"single\",n.singleColor),i(\"gradient\",n.gradientColor),[o,t]}),[r]),[u,d]=m.useState(null),f=Ws((e=>{d(e),i(e)})),h=m.useMemo((()=>{const e=ng(o||\"\");return e.equals(u)?u:e}),[o,u]),p=m.useMemo((()=>{var e;return c.has(a)?a:null===(e=l[0])||void 0===e?void 0:e.value}),[c,a,l]);return m.useEffect((()=>{s(h.isGradient()?\"gradient\":\"single\")}),[h]),[h,f,p,s,l]}(n,r,t),$=(0,m.useMemo)((()=>ig(G)<100),[G]),[Z,Q]=m.useState(null),J=e=>{if(T){let t=ng(e);C&&$&&(t=ag(e)),T(t)}},ee=(e,t)=>{let r=ng(e);C&&$&&(r=ag(r)),q(r),Q(null),E&&E(r,r.toCssString()),t||J(r)},[te,re]=m.useState(0),[ne,oe]=m.useState(!1),{status:ie}=m.useContext(jf),{compactSize:ae,compactItemClassnames:se}=Lf(W,F),le=Rf((e=>{var t;return null!==(t=null!=y?y:ae)&&void 0!==t?t:e})),ce=du(W),[ue,de,fe]=dS(W,ce),he={[`${W}-rtl`]:F},pe=ze()(w,fe,ce,he),me=ze()(Gf(W,ie),{[`${W}-sm`]:\"small\"===le,[`${W}-lg`]:\"large\"===le},se,null==D?void 0:D.className,pe,b,de),ge=ze()(W,pe),ve={open:z,trigger:c,placement:f,arrow:h,rootClassName:w,getPopupContainer:j,autoAdjustOverflow:P,destroyOnHidden:null!=R?R:!!M},be=Object.assign(Object.assign({},null==D?void 0:D.style),v);return ue(m.createElement(hm,Object.assign({style:null==S?void 0:S.popup,styles:{body:null==S?void 0:S.popupOverlayInner},onOpenChange:e=>{e&&L||H(e)},content:m.createElement(Uf,{form:!0},m.createElement($x,{mode:K,onModeChange:e=>{if(X(e),\"single\"===e&&G.isGradient())re(0),ee(new Im(G.getColors()[0].color)),Q(G);else if(\"gradient\"===e&&!G.isGradient()){const e=$?ag(G):G;ee(new Im(Z||[{percent:0,color:e},{percent:100,color:e}]))}},modeOptions:Y,prefixCls:W,value:G,allowClear:a,disabled:L,disabledAlpha:C,presets:s,panelRender:p,format:U,onFormatChange:V,onChange:ee,onChangeComplete:J,onClear:O,activeIndex:te,onActive:re,gradientDragging:ne,onGradientDragging:oe,disabledFormat:_})),classNames:{root:ge}},ve),l||m.createElement(Qx,Object.assign({activeIndex:z?te:-1,open:z,className:me,style:be,prefixCls:W,disabled:L,showText:g,format:U},I,{color:G}))))},hS=Wf(fS,void 0,(e=>Object.assign(Object.assign({},e),{placement:\"bottom\",autoAdjustOverflow:!1})),\"color-picker\",(e=>e));fS._InternalPanelDoNotUseOrYouWillBeFired=hS;const pS=fS;function mS(e){return[\"small\",\"middle\",\"large\"].includes(e)}function gS(e){return!!e&&\"number\"==typeof e&&!Number.isNaN(e)}const vS=m.createContext({latestIndex:0}),bS=vS.Provider,yS=e=>{let{className:t,index:r,children:n,split:o,style:i}=e;const{latestIndex:a}=m.useContext(vS);return null==n?null:m.createElement(m.Fragment,null,m.createElement(\"div\",{className:t,style:i},n),r<a&&o&&m.createElement(\"span\",{className:`${t}-split`},o))};const wS=m.forwardRef(((e,t)=>{var r;const{getPrefixCls:n,direction:o,size:i,className:a,style:s,classNames:l,styles:c}=Zo(\"space\"),{size:u=(null!=i?i:\"small\"),align:d,className:f,rootClassName:h,children:p,direction:g=\"horizontal\",prefixCls:v,split:b,style:y,wrap:w=!1,classNames:x,styles:S}=e,C=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"size\",\"align\",\"className\",\"rootClassName\",\"children\",\"direction\",\"prefixCls\",\"split\",\"style\",\"wrap\",\"classNames\",\"styles\"]),[k,E]=Array.isArray(u)?u:[u,u],O=mS(E),A=mS(k),T=gS(E),j=gS(k),P=sd(p,{keepEmpty:!0}),M=void 0===d&&\"horizontal\"===g?\"center\":d,R=n(\"space\",v),[_,I,N]=Ff(R),F=ze()(R,a,I,`${R}-${g}`,{[`${R}-rtl`]:\"rtl\"===o,[`${R}-align-${M}`]:M,[`${R}-gap-row-${E}`]:O,[`${R}-gap-col-${k}`]:A},f,h,N),D=ze()(`${R}-item`,null!==(r=null==x?void 0:x.item)&&void 0!==r?r:l.item);let B=0;const L=P.map(((e,t)=>{var r;null!=e&&(B=t);const n=(null==e?void 0:e.key)||`${D}-${t}`;return m.createElement(yS,{className:D,key:n,index:t,split:b,style:null!==(r=null==S?void 0:S.item)&&void 0!==r?r:c.item},e)})),z=m.useMemo((()=>({latestIndex:B})),[B]);if(0===P.length)return null;const H={};return w&&(H.flexWrap=\"wrap\"),!A&&j&&(H.columnGap=k),!O&&T&&(H.rowGap=E),_(m.createElement(\"div\",Object.assign({ref:t,className:F,style:Object.assign(Object.assign(Object.assign({},H),s),y)},C),m.createElement(bS,{value:z},L)))})),xS=wS;xS.Compact=e=>{const{getPrefixCls:t,direction:r}=m.useContext(Xo),{size:n,direction:o,block:i,prefixCls:a,className:s,rootClassName:l,children:c}=e,u=Df(e,[\"size\",\"direction\",\"block\",\"prefixCls\",\"className\",\"rootClassName\",\"children\"]),d=Rf((e=>null!=n?n:e)),f=t(\"space-compact\",a),[h,p]=Ff(f),g=ze()(f,p,{[`${f}-rtl`]:\"rtl\"===r,[`${f}-block`]:i,[`${f}-vertical`]:\"vertical\"===o},s,l),v=m.useContext(Bf),b=sd(c),y=m.useMemo((()=>b.map(((e,t)=>{const r=(null==e?void 0:e.key)||`${f}-item-${t}`;return m.createElement(Hf,{key:r,compactSize:d,compactDirection:o,isFirstItem:0===t&&(!v||(null==v?void 0:v.isFirstItem)),isLastItem:t===b.length-1&&(!v||(null==v?void 0:v.isLastItem))},e)}))),[n,b,v]);return 0===b.length?null:h(m.createElement(\"div\",Object.assign({className:g},u),y))};const SS=xS,CS=e=>{const{componentCls:t,colorPrimary:r}=e;return{[t]:{position:\"absolute\",background:\"transparent\",pointerEvents:\"none\",boxSizing:\"border-box\",color:`var(--wave-color, ${r})`,boxShadow:\"0 0 0 0 currentcolor\",opacity:.2,\"&.wave-motion-appear\":{transition:[`box-shadow 0.4s ${e.motionEaseOutCirc}`,`opacity 2s ${e.motionEaseOutCirc}`].join(\",\"),\"&-active\":{boxShadow:\"0 0 0 6px currentcolor\",opacity:0},\"&.wave-quick\":{transition:[`box-shadow ${e.motionDurationSlow} ${e.motionEaseInOut}`,`opacity ${e.motionDurationSlow} ${e.motionEaseInOut}`].join(\",\")}}}}},kS=Nu(\"Wave\",(e=>[CS(e)])),ES=`${Go}-wave-target`;function OS(e){return e&&\"#fff\"!==e&&\"#ffffff\"!==e&&\"rgb(255, 255, 255)\"!==e&&\"rgba(255, 255, 255, 1)\"!==e&&!/rgba\\((?:\\d*, ){3}0\\)/.test(e)&&\"transparent\"!==e}function AS(e){return Number.isNaN(e)?0:e}const TS=e=>{const{className:t,target:r,component:n,registerUnmount:o}=e,i=m.useRef(null),a=m.useRef(null);m.useEffect((()=>{a.current=o()}),[]);const[s,l]=m.useState(null),[c,u]=m.useState([]),[d,f]=m.useState(0),[h,p]=m.useState(0),[g,v]=m.useState(0),[b,y]=m.useState(0),[w,x]=m.useState(!1),S={left:d,top:h,width:g,height:b,borderRadius:c.map((e=>`${e}px`)).join(\" \")};function C(){const e=getComputedStyle(r);l(function(e){const{borderTopColor:t,borderColor:r,backgroundColor:n}=getComputedStyle(e);return OS(t)?t:OS(r)?r:OS(n)?n:null}(r));const t=\"static\"===e.position,{borderLeftWidth:n,borderTopWidth:o}=e;f(t?r.offsetLeft:AS(-parseFloat(n))),p(t?r.offsetTop:AS(-parseFloat(o))),v(r.offsetWidth),y(r.offsetHeight);const{borderTopLeftRadius:i,borderTopRightRadius:a,borderBottomLeftRadius:s,borderBottomRightRadius:c}=e;u([i,a,c,s].map((e=>AS(parseFloat(e)))))}if(s&&(S[\"--wave-color\"]=s),m.useEffect((()=>{if(r){const e=Ol((()=>{C(),x(!0)}));let t;return\"undefined\"!=typeof ResizeObserver&&(t=new ResizeObserver(C),t.observe(r)),()=>{Ol.cancel(e),null==t||t.disconnect()}}}),[]),!w)return null;const k=(\"Checkbox\"===n||\"Radio\"===n)&&(null==r?void 0:r.classList.contains(ES));return m.createElement(Vl,{visible:!0,motionAppear:!0,motionName:\"wave-motion\",motionDeadline:5e3,onAppearEnd:(e,t)=>{var r,n;if(t.deadline||\"opacity\"===t.propertyName){const e=null===(r=i.current)||void 0===r?void 0:r.parentElement;null===(n=a.current)||void 0===n||n.call(a).then((()=>{null==e||e.remove()}))}return!1}},((e,r)=>{let{className:n}=e;return m.createElement(\"div\",{ref:Cn(i,r),className:ze()(t,n,{\"wave-quick\":k}),style:S})}))},jS=(e,t)=>{var r;const{component:n}=t;if(\"Checkbox\"===n&&!(null===(r=e.querySelector(\"input\"))||void 0===r?void 0:r.checked))return;const o=document.createElement(\"div\");o.style.position=\"absolute\",o.style.left=\"0px\",o.style.top=\"0px\",null==e||e.insertBefore(o,null==e?void 0:e.firstChild);const i=_c();let a=null;a=i(m.createElement(TS,Object.assign({},t,{target:e,registerUnmount:function(){return a}})),o)},PS=(e,t,r)=>{const{wave:n}=m.useContext(Xo),[,o,i]=Ql(),a=Ws((a=>{const s=e.current;if((null==n?void 0:n.disabled)||!s)return;const l=s.querySelector(`.${ES}`)||s,{showEffect:c}=n||{};(c||jS)(l,{className:t,token:o,component:r,event:a,hashId:i})})),s=m.useRef(null);return e=>{Ol.cancel(s.current),s.current=Ol((()=>{a(e)}))}},MS=e=>{const{children:t,disabled:r,component:n}=e,{getPrefixCls:o}=(0,m.useContext)(Xo),i=(0,m.useRef)(null),a=o(\"wave\"),[,s]=kS(a),l=PS(i,ze()(a,s),n);return m.useEffect((()=>{const e=i.current;if(!e||1!==e.nodeType||r)return;const t=t=>{!rp(t.target)||!e.getAttribute||e.getAttribute(\"disabled\")||e.disabled||e.className.includes(\"disabled\")||e.className.includes(\"-leave\")||l(t)};return e.addEventListener(\"click\",t,!0),()=>{e.removeEventListener(\"click\",t,!0)}}),[r]),m.isValidElement(t)?th(t,{ref:En(t)?Cn(An(t),i):i}):null!=t?t:null};const RS=m.createContext(void 0),_S=/^[\\u4E00-\\u9FA5]{2}$/,IS=_S.test.bind(_S);function NS(e){return\"danger\"===e?{danger:!0}:{type:e}}function FS(e){return\"string\"==typeof e}function DS(e){return\"text\"===e||\"link\"===e}[\"default\",\"primary\",\"danger\"].concat(Vo($p));const BS=(0,m.forwardRef)(((e,t)=>{const{className:r,style:n,children:o,prefixCls:i}=e,a=ze()(`${i}-icon`,r);return m.createElement(\"span\",{ref:t,className:a,style:n},o)})),LS=BS,zS=(0,m.forwardRef)(((e,t)=>{const{prefixCls:r,className:n,style:o,iconClassName:i}=e,a=ze()(`${r}-loading-icon`,n);return m.createElement(LS,{prefixCls:r,className:a,style:o,ref:t},m.createElement(Xc,{className:i}))})),HS=()=>({width:0,opacity:0,transform:\"scale(0)\"}),US=e=>({width:e.scrollWidth,opacity:1,transform:\"scale(1)\"}),VS=e=>{const{prefixCls:t,loading:r,existIcon:n,className:o,style:i,mount:a}=e,s=!!r;return n?m.createElement(zS,{prefixCls:t,className:o,style:i}):m.createElement(Vl,{visible:s,motionName:`${t}-loading-icon-motion`,motionAppear:!a,motionEnter:!a,motionLeave:!a,removeOnLeave:!0,onAppearStart:HS,onAppearActive:US,onEnterStart:HS,onEnterActive:US,onLeaveStart:US,onLeaveActive:HS},((e,r)=>{let{className:n,style:a}=e;const s=Object.assign(Object.assign({},i),a);return m.createElement(zS,{prefixCls:t,className:ze()(o,n),style:s,ref:r})}))},WS=(e,t)=>({[`> span, > ${e}`]:{\"&:not(:last-child)\":{[`&, & > ${e}`]:{\"&:not(:disabled)\":{borderInlineEndColor:t}}},\"&:not(:first-child)\":{[`&, & > ${e}`]:{\"&:not(:disabled)\":{borderInlineStartColor:t}}}}}),GS=e=>{const{componentCls:t,fontSize:r,lineWidth:n,groupBorderColor:o,colorErrorHover:i}=e;return{[`${t}-group`]:[{position:\"relative\",display:\"inline-flex\",[`> span, > ${t}`]:{\"&:not(:last-child)\":{[`&, & > ${t}`]:{borderStartEndRadius:0,borderEndEndRadius:0}},\"&:not(:first-child)\":{marginInlineStart:e.calc(n).mul(-1).equal(),[`&, & > ${t}`]:{borderStartStartRadius:0,borderEndStartRadius:0}}},[t]:{position:\"relative\",zIndex:1,\"&:hover, &:focus, &:active\":{zIndex:2},\"&[disabled]\":{zIndex:0}},[`${t}-icon-only`]:{fontSize:r}},WS(`${t}-primary`,o),WS(`${t}-danger`,i)]}},qS=e=>{const{paddingInline:t,onlyIconSize:r}=e;return Au(e,{buttonPaddingHorizontal:t,buttonPaddingVertical:0,buttonIconOnlyFontSize:r})},KS=e=>{var t,r,n,o,i,a;const s=null!==(t=e.contentFontSize)&&void 0!==t?t:e.fontSize,l=null!==(r=e.contentFontSizeSM)&&void 0!==r?r:e.fontSize,c=null!==(n=e.contentFontSizeLG)&&void 0!==n?n:e.fontSizeLG,u=null!==(o=e.contentLineHeight)&&void 0!==o?o:us(s),d=null!==(i=e.contentLineHeightSM)&&void 0!==i?i:us(l),f=null!==(a=e.contentLineHeightLG)&&void 0!==a?a:us(c),h=qx(new Im(e.colorBgSolid),\"#fff\")?\"#000\":\"#fff\",p=$p.reduce(((t,r)=>Object.assign(Object.assign({},t),{[`${r}ShadowColor`]:`0 ${Si(e.controlOutlineWidth)} 0 ${Gl(e[`${r}1`],e.colorBgContainer)}`})),{});return Object.assign(Object.assign({},p),{fontWeight:400,defaultShadow:`0 ${e.controlOutlineWidth}px 0 ${e.controlTmpOutline}`,primaryShadow:`0 ${e.controlOutlineWidth}px 0 ${e.controlOutline}`,dangerShadow:`0 ${e.controlOutlineWidth}px 0 ${e.colorErrorOutline}`,primaryColor:e.colorTextLightSolid,dangerColor:e.colorTextLightSolid,borderColorDisabled:e.colorBorder,defaultGhostColor:e.colorBgContainer,ghostBg:\"transparent\",defaultGhostBorderColor:e.colorBgContainer,paddingInline:e.paddingContentHorizontal-e.lineWidth,paddingInlineLG:e.paddingContentHorizontal-e.lineWidth,paddingInlineSM:8-e.lineWidth,onlyIconSize:\"inherit\",onlyIconSizeSM:\"inherit\",onlyIconSizeLG:\"inherit\",groupBorderColor:e.colorPrimaryHover,linkHoverBg:\"transparent\",textTextColor:e.colorText,textTextHoverColor:e.colorText,textTextActiveColor:e.colorText,textHoverBg:e.colorFillTertiary,defaultColor:e.colorText,defaultBg:e.colorBgContainer,defaultBorderColor:e.colorBorder,defaultBorderColorDisabled:e.colorBorder,defaultHoverBg:e.colorBgContainer,defaultHoverColor:e.colorPrimaryHover,defaultHoverBorderColor:e.colorPrimaryHover,defaultActiveBg:e.colorBgContainer,defaultActiveColor:e.colorPrimaryActive,defaultActiveBorderColor:e.colorPrimaryActive,solidTextColor:h,contentFontSize:s,contentFontSizeSM:l,contentFontSizeLG:c,contentLineHeight:u,contentLineHeightSM:d,contentLineHeightLG:f,paddingBlock:Math.max((e.controlHeight-s*u)/2-e.lineWidth,0),paddingBlockSM:Math.max((e.controlHeightSM-l*d)/2-e.lineWidth,0),paddingBlockLG:Math.max((e.controlHeightLG-c*f)/2-e.lineWidth,0)})},XS=e=>{const{componentCls:t,iconCls:r,fontWeight:n,opacityLoading:o,motionDurationSlow:i,motionEaseInOut:a,marginXS:s,calc:l}=e;return{[t]:{outline:\"none\",position:\"relative\",display:\"inline-flex\",gap:e.marginXS,alignItems:\"center\",justifyContent:\"center\",fontWeight:n,whiteSpace:\"nowrap\",textAlign:\"center\",backgroundImage:\"none\",background:\"transparent\",border:`${Si(e.lineWidth)} ${e.lineType} transparent`,cursor:\"pointer\",transition:`all ${e.motionDurationMid} ${e.motionEaseInOut}`,userSelect:\"none\",touchAction:\"manipulation\",color:e.colorText,\"&:disabled > *\":{pointerEvents:\"none\"},[`${t}-icon > svg`]:{display:\"inline-flex\",alignItems:\"center\",color:\"inherit\",fontStyle:\"normal\",lineHeight:0,textAlign:\"center\",textTransform:\"none\",verticalAlign:\"-0.125em\",textRendering:\"optimizeLegibility\",\"-webkit-font-smoothing\":\"antialiased\",\"-moz-osx-font-smoothing\":\"grayscale\",\"> *\":{lineHeight:1},svg:{display:\"inline-block\"}},\"> a\":{color:\"currentColor\"},\"&:not(:disabled)\":oc(e),[`&${t}-two-chinese-chars::first-letter`]:{letterSpacing:\"0.34em\"},[`&${t}-two-chinese-chars > *:not(${r})`]:{marginInlineEnd:\"-0.34em\",letterSpacing:\"0.34em\"},[`&${t}-icon-only`]:{paddingInline:0,[`&${t}-compact-item`]:{flex:\"none\"},[`&${t}-round`]:{width:\"auto\"}},[`&${t}-loading`]:{opacity:o,cursor:\"default\"},[`${t}-loading-icon`]:{transition:[\"width\",\"opacity\",\"margin\"].map((e=>`${e} ${i} ${a}`)).join(\",\")},[`&:not(${t}-icon-end)`]:{[`${t}-loading-icon-motion`]:{\"&-appear-start, &-enter-start\":{marginInlineEnd:l(s).mul(-1).equal()},\"&-appear-active, &-enter-active\":{marginInlineEnd:0},\"&-leave-start\":{marginInlineEnd:0},\"&-leave-active\":{marginInlineEnd:l(s).mul(-1).equal()}}},\"&-icon-end\":{flexDirection:\"row-reverse\",[`${t}-loading-icon-motion`]:{\"&-appear-start, &-enter-start\":{marginInlineStart:l(s).mul(-1).equal()},\"&-appear-active, &-enter-active\":{marginInlineStart:0},\"&-leave-start\":{marginInlineStart:0},\"&-leave-active\":{marginInlineStart:l(s).mul(-1).equal()}}}}}},YS=(e,t,r)=>({[`&:not(:disabled):not(${e}-disabled)`]:{\"&:hover\":t,\"&:active\":r}}),$S=e=>({minWidth:e.controlHeight,paddingInlineStart:0,paddingInlineEnd:0,borderRadius:\"50%\"}),ZS=e=>({borderRadius:e.controlHeight,paddingInlineStart:e.calc(e.controlHeight).div(2).equal(),paddingInlineEnd:e.calc(e.controlHeight).div(2).equal()}),QS=e=>({cursor:\"not-allowed\",borderColor:e.borderColorDisabled,color:e.colorTextDisabled,background:e.colorBgContainerDisabled,boxShadow:\"none\"}),JS=(e,t,r,n,o,i,a,s)=>({[`&${e}-background-ghost`]:Object.assign(Object.assign({color:r||void 0,background:t,borderColor:n||void 0,boxShadow:\"none\"},YS(e,Object.assign({background:t},a),Object.assign({background:t},s))),{\"&:disabled\":{cursor:\"not-allowed\",color:o||void 0,borderColor:i||void 0}})}),eC=e=>({[`&:disabled, &${e.componentCls}-disabled`]:Object.assign({},QS(e))}),tC=e=>({[`&:disabled, &${e.componentCls}-disabled`]:{cursor:\"not-allowed\",color:e.colorTextDisabled}}),rC=(e,t,r,n)=>{const o=n&&[\"link\",\"text\"].includes(n)?tC:eC;return Object.assign(Object.assign({},o(e)),YS(e.componentCls,t,r))},nC=(e,t,r,n,o)=>({[`&${e.componentCls}-variant-solid`]:Object.assign({color:t,background:r},rC(e,n,o))}),oC=(e,t,r,n,o)=>({[`&${e.componentCls}-variant-outlined, &${e.componentCls}-variant-dashed`]:Object.assign({borderColor:t,background:r},rC(e,n,o))}),iC=e=>({[`&${e.componentCls}-variant-dashed`]:{borderStyle:\"dashed\"}}),aC=(e,t,r,n)=>({[`&${e.componentCls}-variant-filled`]:Object.assign({boxShadow:\"none\",background:t},rC(e,r,n))}),sC=(e,t,r,n,o)=>({[`&${e.componentCls}-variant-${r}`]:Object.assign({color:t,boxShadow:\"none\"},rC(e,n,o,r))}),lC=e=>Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({color:e.defaultColor,boxShadow:e.defaultShadow},nC(e,e.solidTextColor,e.colorBgSolid,{color:e.solidTextColor,background:e.colorBgSolidHover},{color:e.solidTextColor,background:e.colorBgSolidActive})),iC(e)),aC(e,e.colorFillTertiary,{background:e.colorFillSecondary},{background:e.colorFill})),JS(e.componentCls,e.ghostBg,e.defaultGhostColor,e.defaultGhostBorderColor,e.colorTextDisabled,e.colorBorder)),sC(e,e.textTextColor,\"link\",{color:e.colorLinkHover,background:e.linkHoverBg},{color:e.colorLinkActive})),cC=e=>Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({color:e.colorPrimary,boxShadow:e.primaryShadow},oC(e,e.colorPrimary,e.colorBgContainer,{color:e.colorPrimaryTextHover,borderColor:e.colorPrimaryHover,background:e.colorBgContainer},{color:e.colorPrimaryTextActive,borderColor:e.colorPrimaryActive,background:e.colorBgContainer})),iC(e)),aC(e,e.colorPrimaryBg,{background:e.colorPrimaryBgHover},{background:e.colorPrimaryBorder})),sC(e,e.colorPrimaryText,\"text\",{color:e.colorPrimaryTextHover,background:e.colorPrimaryBg},{color:e.colorPrimaryTextActive,background:e.colorPrimaryBorder})),sC(e,e.colorPrimaryText,\"link\",{color:e.colorPrimaryTextHover,background:e.linkHoverBg},{color:e.colorPrimaryTextActive})),JS(e.componentCls,e.ghostBg,e.colorPrimary,e.colorPrimary,e.colorTextDisabled,e.colorBorder,{color:e.colorPrimaryHover,borderColor:e.colorPrimaryHover},{color:e.colorPrimaryActive,borderColor:e.colorPrimaryActive})),uC=e=>Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({color:e.colorError,boxShadow:e.dangerShadow},nC(e,e.dangerColor,e.colorError,{background:e.colorErrorHover},{background:e.colorErrorActive})),oC(e,e.colorError,e.colorBgContainer,{color:e.colorErrorHover,borderColor:e.colorErrorBorderHover},{color:e.colorErrorActive,borderColor:e.colorErrorActive})),iC(e)),aC(e,e.colorErrorBg,{background:e.colorErrorBgFilledHover},{background:e.colorErrorBgActive})),sC(e,e.colorError,\"text\",{color:e.colorErrorHover,background:e.colorErrorBg},{color:e.colorErrorHover,background:e.colorErrorBgActive})),sC(e,e.colorError,\"link\",{color:e.colorErrorHover},{color:e.colorErrorActive})),JS(e.componentCls,e.ghostBg,e.colorError,e.colorError,e.colorTextDisabled,e.colorBorder,{color:e.colorErrorHover,borderColor:e.colorErrorHover},{color:e.colorErrorActive,borderColor:e.colorErrorActive})),dC=e=>Object.assign(Object.assign({},sC(e,e.colorLink,\"link\",{color:e.colorLinkHover},{color:e.colorLinkActive})),JS(e.componentCls,e.ghostBg,e.colorInfo,e.colorInfo,e.colorTextDisabled,e.colorBorder,{color:e.colorInfoHover,borderColor:e.colorInfoHover},{color:e.colorInfoActive,borderColor:e.colorInfoActive})),fC=e=>{const{componentCls:t}=e;return Object.assign({[`${t}-color-default`]:lC(e),[`${t}-color-primary`]:cC(e),[`${t}-color-dangerous`]:uC(e),[`${t}-color-link`]:dC(e)},(e=>{const{componentCls:t}=e;return $p.reduce(((r,n)=>{const o=e[`${n}6`],i=e[`${n}1`],a=e[`${n}5`],s=e[`${n}2`],l=e[`${n}3`],c=e[`${n}7`];return Object.assign(Object.assign({},r),{[`&${t}-color-${n}`]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({color:o,boxShadow:e[`${n}ShadowColor`]},nC(e,e.colorTextLightSolid,o,{background:a},{background:c})),oC(e,o,e.colorBgContainer,{color:a,borderColor:a,background:e.colorBgContainer},{color:c,borderColor:c,background:e.colorBgContainer})),iC(e)),aC(e,i,{background:s},{background:l})),sC(e,o,\"link\",{color:a},{color:c})),sC(e,o,\"text\",{color:a,background:i},{color:c,background:l}))})}),{})})(e))},hC=e=>Object.assign(Object.assign(Object.assign(Object.assign({},oC(e,e.defaultBorderColor,e.defaultBg,{color:e.defaultHoverColor,borderColor:e.defaultHoverBorderColor,background:e.defaultHoverBg},{color:e.defaultActiveColor,borderColor:e.defaultActiveBorderColor,background:e.defaultActiveBg})),sC(e,e.textTextColor,\"text\",{color:e.textTextHoverColor,background:e.textHoverBg},{color:e.textTextActiveColor,background:e.colorBgTextActive})),nC(e,e.primaryColor,e.colorPrimary,{background:e.colorPrimaryHover,color:e.primaryColor},{background:e.colorPrimaryActive,color:e.primaryColor})),sC(e,e.colorLink,\"link\",{color:e.colorLinkHover,background:e.linkHoverBg},{color:e.colorLinkActive})),pC=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";const{componentCls:r,controlHeight:n,fontSize:o,borderRadius:i,buttonPaddingHorizontal:a,iconCls:s,buttonPaddingVertical:l,buttonIconOnlyFontSize:c}=e;return[{[t]:{fontSize:o,height:n,padding:`${Si(l)} ${Si(a)}`,borderRadius:i,[`&${r}-icon-only`]:{width:n,[s]:{fontSize:c}}}},{[`${r}${r}-circle${t}`]:$S(e)},{[`${r}${r}-round${t}`]:ZS(e)}]},mC=e=>{const t=Au(e,{fontSize:e.contentFontSize});return pC(t,e.componentCls)},gC=e=>{const t=Au(e,{controlHeight:e.controlHeightSM,fontSize:e.contentFontSizeSM,padding:e.paddingXS,buttonPaddingHorizontal:e.paddingInlineSM,buttonPaddingVertical:0,borderRadius:e.borderRadiusSM,buttonIconOnlyFontSize:e.onlyIconSizeSM});return pC(t,`${e.componentCls}-sm`)},vC=e=>{const t=Au(e,{controlHeight:e.controlHeightLG,fontSize:e.contentFontSizeLG,buttonPaddingHorizontal:e.paddingInlineLG,buttonPaddingVertical:0,borderRadius:e.borderRadiusLG,buttonIconOnlyFontSize:e.onlyIconSizeLG});return pC(t,`${e.componentCls}-lg`)},bC=e=>{const{componentCls:t}=e;return{[t]:{[`&${t}-block`]:{width:\"100%\"}}}},yC=Iu(\"Button\",(e=>{const t=qS(e);return[XS(t),mC(t),gC(t),vC(t),bC(t),fC(t),hC(t),GS(t)]}),KS,{unitless:{fontWeight:!0,contentLineHeight:!0,contentLineHeightSM:!0,contentLineHeightLG:!0}});function wC(e,t){return{[`&-item:not(${t}-last-item)`]:{marginBottom:e.calc(e.lineWidth).mul(-1).equal()},\"&-item\":{\"&:hover,&:focus,&:active\":{zIndex:2},\"&[disabled]\":{zIndex:0}}}}function xC(e){const t=`${e.componentCls}-compact-vertical`;return{[t]:Object.assign(Object.assign({},wC(e,t)),(r=e.componentCls,n=t,{[`&-item:not(${n}-first-item):not(${n}-last-item)`]:{borderRadius:0},[`&-item${n}-first-item:not(${n}-last-item)`]:{[`&, &${r}-sm, &${r}-lg`]:{borderEndEndRadius:0,borderEndStartRadius:0}},[`&-item${n}-last-item:not(${n}-first-item)`]:{[`&, &${r}-sm, &${r}-lg`]:{borderStartStartRadius:0,borderStartEndRadius:0}}}))};var r,n}const SC=e=>{const{componentCls:t,colorPrimaryHover:r,lineWidth:n,calc:o}=e,i=o(n).mul(-1).equal(),a=e=>{const o=`${t}-compact${e?\"-vertical\":\"\"}-item${t}-primary:not([disabled])`;return{[`${o} + ${o}::before`]:{position:\"absolute\",top:e?i:0,insetInlineStart:e?0:i,backgroundColor:r,content:'\"\"',width:e?\"100%\":n,height:e?n:\"100%\"}}};return Object.assign(Object.assign({},a()),a(!0))},CC=Fu([\"Button\",\"compact\"],(e=>{const t=qS(e);return[ib(t),xC(t),SC(t)]}),KS);const kC={default:[\"default\",\"outlined\"],primary:[\"primary\",\"solid\"],dashed:[\"default\",\"dashed\"],link:[\"link\",\"link\"],text:[\"default\",\"text\"]},EC=m.forwardRef(((e,t)=>{var r,n;const{loading:o=!1,prefixCls:i,color:a,variant:s,type:l,danger:c=!1,shape:u=\"default\",size:d,styles:f,disabled:h,className:p,rootClassName:g,children:v,icon:b,iconPosition:y=\"start\",ghost:w=!1,block:x=!1,htmlType:S=\"button\",classNames:C,style:k={},autoInsertSpace:E,autoFocus:O}=e,A=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"loading\",\"prefixCls\",\"color\",\"variant\",\"type\",\"danger\",\"shape\",\"size\",\"styles\",\"disabled\",\"className\",\"rootClassName\",\"children\",\"icon\",\"iconPosition\",\"ghost\",\"block\",\"htmlType\",\"classNames\",\"style\",\"autoInsertSpace\",\"autoFocus\"]),T=l||\"default\",{button:j}=m.useContext(Xo),[P,M]=(0,m.useMemo)((()=>{if(a&&s)return[a,s];if(l||c){const e=kC[T]||[];return c?[\"danger\",e[1]]:e}return(null==j?void 0:j.color)&&(null==j?void 0:j.variant)?[j.color,j.variant]:[\"default\",\"outlined\"]}),[l,a,s,c,null==j?void 0:j.variant,null==j?void 0:j.color]),R=\"danger\"===P?\"dangerous\":P,{getPrefixCls:_,direction:I,autoInsertSpace:N,className:F,style:D,classNames:B,styles:L}=Zo(\"button\"),z=null===(r=null!=E?E:N)||void 0===r||r,H=_(\"btn\",i),[U,V,W]=yC(H),G=(0,m.useContext)(Ss),q=null!=h?h:G,K=(0,m.useContext)(RS),X=(0,m.useMemo)((()=>function(e){if(\"object\"==typeof e&&e){let t=null==e?void 0:e.delay;return t=Number.isNaN(t)||\"number\"!=typeof t?0:t,{loading:t<=0,delay:t}}return{loading:!!e,delay:0}}(o)),[o]),[Y,$]=(0,m.useState)(X.loading),[Z,Q]=(0,m.useState)(!1),J=(0,m.useRef)(null),ee=kn(t,J),te=1===m.Children.count(v)&&!b&&!DS(M),re=(0,m.useRef)(!0);m.useEffect((()=>(re.current=!1,()=>{re.current=!0})),[]),(0,m.useEffect)((()=>{let e=null;return X.delay>0?e=setTimeout((()=>{e=null,$(!0)}),X.delay):$(X.loading),function(){e&&(clearTimeout(e),e=null)}}),[X]),(0,m.useEffect)((()=>{if(!J.current||!z)return;const e=J.current.textContent||\"\";te&&IS(e)?Z||Q(!0):Z&&Q(!1)})),(0,m.useEffect)((()=>{O&&J.current&&J.current.focus()}),[]);const ne=m.useCallback((t=>{var r;Y||q?t.preventDefault():null===(r=e.onClick)||void 0===r||r.call(e,t)}),[e.onClick,Y,q]),{compactSize:oe,compactItemClassnames:ie}=Lf(H,I),ae=Rf((e=>{var t,r;return null!==(r=null!==(t=null!=d?d:oe)&&void 0!==t?t:K)&&void 0!==r?r:e})),se=ae&&null!==(n={large:\"lg\",small:\"sm\",middle:void 0}[ae])&&void 0!==n?n:\"\",le=Y?\"loading\":b,ce=kf(A,[\"navigate\"]),ue=ze()(H,V,W,{[`${H}-${u}`]:\"default\"!==u&&u,[`${H}-${T}`]:T,[`${H}-dangerous`]:c,[`${H}-color-${R}`]:R,[`${H}-variant-${M}`]:M,[`${H}-${se}`]:se,[`${H}-icon-only`]:!v&&0!==v&&!!le,[`${H}-background-ghost`]:w&&!DS(M),[`${H}-loading`]:Y,[`${H}-two-chinese-chars`]:Z&&z&&!Y,[`${H}-block`]:x,[`${H}-rtl`]:\"rtl\"===I,[`${H}-icon-end`]:\"end\"===y},ie,p,g,F),de=Object.assign(Object.assign({},D),k),fe=ze()(null==C?void 0:C.icon,B.icon),he=Object.assign(Object.assign({},(null==f?void 0:f.icon)||{}),L.icon||{}),pe=b&&!Y?m.createElement(LS,{prefixCls:H,className:fe,style:he},b):o&&\"object\"==typeof o&&o.icon?m.createElement(LS,{prefixCls:H,className:fe,style:he},o.icon):m.createElement(VS,{existIcon:!!b,prefixCls:H,loading:Y,mount:re.current}),me=v||0===v?function(e,t){let r=!1;const n=[];return m.Children.forEach(e,(e=>{const t=typeof e,o=\"string\"===t||\"number\"===t;if(r&&o){const t=n.length-1,r=n[t];n[t]=`${r}${e}`}else n.push(e);r=o})),m.Children.map(n,(e=>function(e,t){if(null==e)return;const r=t?\" \":\"\";return\"string\"!=typeof e&&\"number\"!=typeof e&&FS(e.type)&&IS(e.props.children)?th(e,{children:e.props.children.split(\"\").join(r)}):FS(e)?IS(e)?m.createElement(\"span\",null,e.split(\"\").join(r)):m.createElement(\"span\",null,e):eh(e)?m.createElement(\"span\",null,e):e}(e,t)))}(v,te&&z):null;if(void 0!==ce.href)return U(m.createElement(\"a\",Object.assign({},ce,{className:ze()(ue,{[`${H}-disabled`]:q}),href:q?void 0:ce.href,style:de,onClick:ne,ref:ee,tabIndex:q?-1:0}),pe,me));let ge=m.createElement(\"button\",Object.assign({},A,{type:S,className:ue,style:de,onClick:ne,disabled:q,ref:ee}),pe,me,ie&&m.createElement(CC,{prefixCls:H}));return DS(M)||(ge=m.createElement(MS,{component:\"Button\",disabled:Y},ge)),U(ge)})),OC=EC;OC.Group=e=>{const{getPrefixCls:t,direction:r}=m.useContext(Xo),{prefixCls:n,size:o,className:i}=e,a=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"size\",\"className\"]),s=t(\"btn-group\",n),[,,l]=Ql(),c=m.useMemo((()=>{switch(o){case\"large\":return\"lg\";case\"small\":return\"sm\";default:return\"\"}}),[o]),u=ze()(s,{[`${s}-${c}`]:c,[`${s}-rtl`]:\"rtl\"===r},i,l);return m.createElement(RS.Provider,{value:o},m.createElement(\"div\",Object.assign({},a,{className:u})))},OC.__ANT_BUTTON=!0;const AC=OC;function TC(e){return!!(null==e?void 0:e.then)}const jC=e=>{const{type:t,children:r,prefixCls:n,buttonProps:o,close:i,autoFocus:a,emitEvent:s,isSilent:l,quitOnNullishReturnValue:c,actionFn:u}=e,d=m.useRef(!1),f=m.useRef(null),[h,p]=Gs(!1),g=function(){null==i||i.apply(void 0,arguments)};return m.useEffect((()=>{let e=null;return a&&(e=setTimeout((()=>{var e;null===(e=f.current)||void 0===e||e.focus({preventScroll:!0})}))),()=>{e&&clearTimeout(e)}}),[]),m.createElement(AC,Object.assign({},NS(t),{onClick:e=>{if(d.current)return;if(d.current=!0,!u)return void g();let t;if(s){if(t=u(e),c&&!TC(t))return d.current=!1,void g(e)}else if(u.length)t=u(i),d.current=!1;else if(t=u(),!TC(t))return void g();(e=>{TC(e)&&(p(!0),e.then((function(){p(!1,!0),g.apply(void 0,arguments),d.current=!1}),(e=>{if(p(!1,!0),d.current=!1,!(null==l?void 0:l()))return Promise.reject(e)})))})(t)},loading:h,prefixCls:n},o,{ref:f}),r)},PC=m.createContext({}),{Provider:MC}=PC,RC=()=>{const{autoFocusButton:e,cancelButtonProps:t,cancelTextLocale:r,isSilent:n,mergedOkCancel:o,rootPrefixCls:i,close:a,onCancel:s,onConfirm:l}=(0,m.useContext)(PC);return o?m.createElement(jC,{isSilent:n,actionFn:s,close:function(){null==a||a.apply(void 0,arguments),null==l||l(!1)},autoFocus:\"cancel\"===e,buttonProps:t,prefixCls:`${i}-btn`},r):null},_C=()=>{const{autoFocusButton:e,close:t,isSilent:r,okButtonProps:n,rootPrefixCls:o,okTextLocale:i,okType:a,onConfirm:s,onOk:l}=(0,m.useContext)(PC);return m.createElement(jC,{isSilent:r,type:a||\"primary\",actionFn:l,close:function(){null==t||t.apply(void 0,arguments),null==s||s(!0)},autoFocus:\"ok\"===e,buttonProps:n,prefixCls:`${o}-btn`},i)};var IC=m.createContext({});function NC(e,t,r){var n=t;return!n&&r&&(n=\"\".concat(e,\"-\").concat(r)),n}function FC(e,t){var r=e[\"page\".concat(t?\"Y\":\"X\",\"Offset\")],n=\"scroll\".concat(t?\"Top\":\"Left\");if(\"number\"!=typeof r){var o=e.document;\"number\"!=typeof(r=o.documentElement[n])&&(r=o.body[n])}return r}const DC=m.memo((function(e){return e.children}),(function(e,t){return!t.shouldUpdate}));var BC={width:0,height:0,overflow:\"hidden\",outline:\"none\"},LC={outline:\"none\"},zC=m.forwardRef((function(e,t){var r=e.prefixCls,n=e.className,o=e.style,i=e.title,a=e.ariaId,s=e.footer,l=e.closable,c=e.closeIcon,u=e.onClose,d=e.children,f=e.bodyStyle,h=e.bodyProps,p=e.modalRender,g=e.onMouseDown,v=e.onMouseUp,b=e.holderRef,y=e.visible,w=e.forceRender,x=e.width,S=e.height,C=e.classNames,k=e.styles,E=m.useContext(IC).panel,O=kn(b,E),A=(0,m.useRef)(),T=(0,m.useRef)();m.useImperativeHandle(t,(function(){return{focus:function(){var e;null===(e=A.current)||void 0===e||e.focus({preventScroll:!0})},changeActive:function(e){var t=document.activeElement;e&&t===T.current?A.current.focus({preventScroll:!0}):e||t!==A.current||T.current.focus({preventScroll:!0})}}}));var j={};void 0!==x&&(j.width=x),void 0!==S&&(j.height=S);var P=s?m.createElement(\"div\",{className:ze()(\"\".concat(r,\"-footer\"),null==C?void 0:C.footer),style:At({},null==k?void 0:k.footer)},s):null,M=i?m.createElement(\"div\",{className:ze()(\"\".concat(r,\"-header\"),null==C?void 0:C.header),style:At({},null==k?void 0:k.header)},m.createElement(\"div\",{className:\"\".concat(r,\"-title\"),id:a},i)):null,R=(0,m.useMemo)((function(){return\"object\"===Ne(l)&&null!==l?l:l?{closeIcon:null!=c?c:m.createElement(\"span\",{className:\"\".concat(r,\"-close-x\")})}:{}}),[l,c,r]),_=Jc(R,!0),I=\"object\"===Ne(l)&&l.disabled,N=l?m.createElement(\"button\",Te({type:\"button\",onClick:u,\"aria-label\":\"Close\"},_,{className:\"\".concat(r,\"-close\"),disabled:I}),R.closeIcon):null,F=m.createElement(\"div\",{className:ze()(\"\".concat(r,\"-content\"),null==C?void 0:C.content),style:null==k?void 0:k.content},N,M,m.createElement(\"div\",Te({className:ze()(\"\".concat(r,\"-body\"),null==C?void 0:C.body),style:At(At({},f),null==k?void 0:k.body)},h),d),P);return m.createElement(\"div\",{key:\"dialog-element\",role:\"dialog\",\"aria-labelledby\":i?a:null,\"aria-modal\":\"true\",ref:O,style:At(At({},o),j),className:ze()(r,n),onMouseDown:g,onMouseUp:v},m.createElement(\"div\",{ref:A,tabIndex:0,style:LC},m.createElement(DC,{shouldUpdate:y||w},p?p(F):F)),m.createElement(\"div\",{tabIndex:0,ref:T,style:BC}))}));const HC=zC;var UC=m.forwardRef((function(e,t){var r=e.prefixCls,n=e.title,o=e.style,i=e.className,a=e.visible,s=e.forceRender,l=e.destroyOnClose,c=e.motionName,u=e.ariaId,d=e.onVisibleChanged,f=e.mousePosition,h=(0,m.useRef)(),p=Ie(m.useState(),2),g=p[0],v=p[1],b={};function y(){var e,t,r,n,o,i=(r={left:(t=(e=h.current).getBoundingClientRect()).left,top:t.top},o=(n=e.ownerDocument).defaultView||n.parentWindow,r.left+=FC(o),r.top+=FC(o,!0),r);v(f&&(f.x||f.y)?\"\".concat(f.x-i.left,\"px \").concat(f.y-i.top,\"px\"):\"\")}return g&&(b.transformOrigin=g),m.createElement(Vl,{visible:a,onVisibleChanged:d,onAppearPrepare:y,onEnterPrepare:y,forceRender:s,motionName:c,removeOnLeave:l,ref:h},(function(a,s){var l=a.className,c=a.style;return m.createElement(HC,Te({},e,{ref:t,title:n,ariaId:u,prefixCls:r,holderRef:s,style:At(At(At({},c),o),b),className:ze()(i,l)}))}))}));UC.displayName=\"Content\";const VC=UC,WC=function(e){var t=e.prefixCls,r=e.style,n=e.visible,o=e.maskProps,i=e.motionName,a=e.className;return m.createElement(Vl,{key:\"mask\",visible:n,motionName:i,leavedClassName:\"\".concat(t,\"-mask-hidden\")},(function(e,n){var i=e.className,s=e.style;return m.createElement(\"div\",Te({ref:n,style:At(At({},s),r),className:ze()(\"\".concat(t,\"-mask\"),i,a)},o))}))},GC=function(e){var t=e.prefixCls,r=void 0===t?\"rc-dialog\":t,n=e.zIndex,o=e.visible,i=void 0!==o&&o,a=e.keyboard,s=void 0===a||a,l=e.focusTriggerAfterClose,c=void 0===l||l,u=e.wrapStyle,d=e.wrapClassName,f=e.wrapProps,h=e.onClose,p=e.afterOpenChange,g=e.afterClose,v=e.transitionName,b=e.animation,y=e.closable,w=void 0===y||y,x=e.mask,S=void 0===x||x,C=e.maskTransitionName,k=e.maskAnimation,E=e.maskClosable,O=void 0===E||E,A=e.maskStyle,T=e.maskProps,j=e.rootClassName,P=e.classNames,M=e.styles,R=(0,m.useRef)(),_=(0,m.useRef)(),I=(0,m.useRef)(),N=Ie(m.useState(i),2),F=N[0],D=N[1],B=Wh();function L(e){null==h||h(e)}var z=(0,m.useRef)(!1),H=(0,m.useRef)(),U=null;O&&(U=function(e){z.current?z.current=!1:_.current===e.target&&L(e)}),(0,m.useEffect)((function(){i&&(D(!0),jt(_.current,document.activeElement)||(R.current=document.activeElement))}),[i]),(0,m.useEffect)((function(){return function(){clearTimeout(H.current)}}),[]);var V=At(At(At({zIndex:n},u),null==M?void 0:M.wrapper),{},{display:F?null:\"none\"});return m.createElement(\"div\",Te({className:ze()(\"\".concat(r,\"-root\"),j)},Jc(e,{data:!0})),m.createElement(WC,{prefixCls:r,visible:S&&i,motionName:NC(r,C,k),style:At(At({zIndex:n},A),null==M?void 0:M.mask),maskProps:T,className:null==P?void 0:P.mask}),m.createElement(\"div\",Te({tabIndex:-1,onKeyDown:function(e){if(s&&e.keyCode===$c.ESC)return e.stopPropagation(),void L(e);i&&e.keyCode===$c.TAB&&I.current.changeActive(!e.shiftKey)},className:ze()(\"\".concat(r,\"-wrap\"),d,null==P?void 0:P.wrapper),ref:_,onClick:U,style:V},f),m.createElement(VC,Te({},e,{onMouseDown:function(){clearTimeout(H.current),z.current=!0},onMouseUp:function(){H.current=setTimeout((function(){z.current=!1}))},ref:I,closable:w,ariaId:B,prefixCls:r,visible:i&&F,onClose:L,onVisibleChanged:function(e){if(e)jt(_.current,document.activeElement)||null===(t=I.current)||void 0===t||t.focus();else{if(D(!1),S&&R.current&&c){try{R.current.focus({preventScroll:!0})}catch(e){}R.current=null}F&&(null==g||g())}var t;null==p||p(e)},motionName:NC(r,v,b)}))))};var qC=function(e){var t=e.visible,r=e.getContainer,n=e.forceRender,o=e.destroyOnClose,i=void 0!==o&&o,a=e.afterClose,s=e.panelRef,l=Ie(m.useState(t),2),c=l[0],u=l[1],d=m.useMemo((function(){return{panel:s}}),[s]);return m.useEffect((function(){t&&u(!0)}),[t]),n||!i||c?m.createElement(IC.Provider,{value:d},m.createElement(dh,{open:t||n||c,autoDestroy:!1,getContainer:r,autoLock:t||c},m.createElement(GC,Te({},e,{destroyOnClose:i,afterClose:function(){null==a||a(),u(!1)}})))):null};qC.displayName=\"Dialog\";const KC=qC,XC=function(){const e={};for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];return r.forEach((t=>{t&&Object.keys(t).forEach((r=>{void 0!==t[r]&&(e[r]=t[r])}))})),e};function YC(e){if(e)return{closable:e.closable,closeIcon:e.closeIcon}}function $C(e){const{closable:t,closeIcon:r}=e||{};return m.useMemo((()=>{if(!t&&(!1===t||!1===r||null===r))return!1;if(void 0===t&&void 0===r)return null;let e={closeIcon:\"boolean\"!=typeof r&&null!==r?r:void 0};return t&&\"object\"==typeof t&&(e=Object.assign(Object.assign({},e),t)),e}),[t,r])}const ZC={},QC=e=>{const{prefixCls:t,className:r,style:n,size:o,shape:i}=e,a=ze()({[`${t}-lg`]:\"large\"===o,[`${t}-sm`]:\"small\"===o}),s=ze()({[`${t}-circle`]:\"circle\"===i,[`${t}-square`]:\"square\"===i,[`${t}-round`]:\"round\"===i}),l=m.useMemo((()=>\"number\"==typeof o?{width:o,height:o,lineHeight:`${o}px`}:{}),[o]);return m.createElement(\"span\",{className:ze()(t,a,s,r),style:Object.assign(Object.assign({},l),n)})},JC=new Ba(\"ant-skeleton-loading\",{\"0%\":{backgroundPosition:\"100% 50%\"},\"100%\":{backgroundPosition:\"0 50%\"}}),ek=e=>({height:e,lineHeight:Si(e)}),tk=e=>Object.assign({width:e},ek(e)),rk=e=>({background:e.skeletonLoadingBackground,backgroundSize:\"400% 100%\",animationName:JC,animationDuration:e.skeletonLoadingMotionDuration,animationTimingFunction:\"ease\",animationIterationCount:\"infinite\"}),nk=(e,t)=>Object.assign({width:t(e).mul(5).equal(),minWidth:t(e).mul(5).equal()},ek(e)),ok=e=>{const{skeletonAvatarCls:t,gradientFromColor:r,controlHeight:n,controlHeightLG:o,controlHeightSM:i}=e;return{[t]:Object.assign({display:\"inline-block\",verticalAlign:\"top\",background:r},tk(n)),[`${t}${t}-circle`]:{borderRadius:\"50%\"},[`${t}${t}-lg`]:Object.assign({},tk(o)),[`${t}${t}-sm`]:Object.assign({},tk(i))}},ik=e=>{const{controlHeight:t,borderRadiusSM:r,skeletonInputCls:n,controlHeightLG:o,controlHeightSM:i,gradientFromColor:a,calc:s}=e;return{[n]:Object.assign({display:\"inline-block\",verticalAlign:\"top\",background:a,borderRadius:r},nk(t,s)),[`${n}-lg`]:Object.assign({},nk(o,s)),[`${n}-sm`]:Object.assign({},nk(i,s))}},ak=e=>Object.assign({width:e},ek(e)),sk=e=>{const{skeletonImageCls:t,imageSizeBase:r,gradientFromColor:n,borderRadiusSM:o,calc:i}=e;return{[t]:Object.assign(Object.assign({display:\"inline-flex\",alignItems:\"center\",justifyContent:\"center\",verticalAlign:\"middle\",background:n,borderRadius:o},ak(i(r).mul(2).equal())),{[`${t}-path`]:{fill:\"#bfbfbf\"},[`${t}-svg`]:Object.assign(Object.assign({},ak(r)),{maxWidth:i(r).mul(4).equal(),maxHeight:i(r).mul(4).equal()}),[`${t}-svg${t}-svg-circle`]:{borderRadius:\"50%\"}}),[`${t}${t}-circle`]:{borderRadius:\"50%\"}}},lk=(e,t,r)=>{const{skeletonButtonCls:n}=e;return{[`${r}${n}-circle`]:{width:t,minWidth:t,borderRadius:\"50%\"},[`${r}${n}-round`]:{borderRadius:t}}},ck=(e,t)=>Object.assign({width:t(e).mul(2).equal(),minWidth:t(e).mul(2).equal()},ek(e)),uk=e=>{const{borderRadiusSM:t,skeletonButtonCls:r,controlHeight:n,controlHeightLG:o,controlHeightSM:i,gradientFromColor:a,calc:s}=e;return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({[r]:Object.assign({display:\"inline-block\",verticalAlign:\"top\",background:a,borderRadius:t,width:s(n).mul(2).equal(),minWidth:s(n).mul(2).equal()},ck(n,s))},lk(e,n,r)),{[`${r}-lg`]:Object.assign({},ck(o,s))}),lk(e,o,`${r}-lg`)),{[`${r}-sm`]:Object.assign({},ck(i,s))}),lk(e,i,`${r}-sm`))},dk=e=>{const{componentCls:t,skeletonAvatarCls:r,skeletonTitleCls:n,skeletonParagraphCls:o,skeletonButtonCls:i,skeletonInputCls:a,skeletonImageCls:s,controlHeight:l,controlHeightLG:c,controlHeightSM:u,gradientFromColor:d,padding:f,marginSM:h,borderRadius:p,titleHeight:m,blockRadius:g,paragraphLiHeight:v,controlHeightXS:b,paragraphMarginTop:y}=e;return{[t]:{display:\"table\",width:\"100%\",[`${t}-header`]:{display:\"table-cell\",paddingInlineEnd:f,verticalAlign:\"top\",[r]:Object.assign({display:\"inline-block\",verticalAlign:\"top\",background:d},tk(l)),[`${r}-circle`]:{borderRadius:\"50%\"},[`${r}-lg`]:Object.assign({},tk(c)),[`${r}-sm`]:Object.assign({},tk(u))},[`${t}-content`]:{display:\"table-cell\",width:\"100%\",verticalAlign:\"top\",[n]:{width:\"100%\",height:m,background:d,borderRadius:g,[`+ ${o}`]:{marginBlockStart:u}},[o]:{padding:0,\"> li\":{width:\"100%\",height:v,listStyle:\"none\",background:d,borderRadius:g,\"+ li\":{marginBlockStart:b}}},[`${o}> li:last-child:not(:first-child):not(:nth-child(2))`]:{width:\"61%\"}},[`&-round ${t}-content`]:{[`${n}, ${o} > li`]:{borderRadius:p}}},[`${t}-with-avatar ${t}-content`]:{[n]:{marginBlockStart:h,[`+ ${o}`]:{marginBlockStart:y}}},[`${t}${t}-element`]:Object.assign(Object.assign(Object.assign(Object.assign({display:\"inline-block\",width:\"auto\"},uk(e)),ok(e)),ik(e)),sk(e)),[`${t}${t}-block`]:{width:\"100%\",[i]:{width:\"100%\"},[a]:{width:\"100%\"}},[`${t}${t}-active`]:{[`\\n        ${n},\\n        ${o} > li,\\n        ${r},\\n        ${i},\\n        ${a},\\n        ${s}\\n      `]:Object.assign({},rk(e))}}},fk=Iu(\"Skeleton\",(e=>{const{componentCls:t,calc:r}=e,n=Au(e,{skeletonAvatarCls:`${t}-avatar`,skeletonTitleCls:`${t}-title`,skeletonParagraphCls:`${t}-paragraph`,skeletonButtonCls:`${t}-button`,skeletonInputCls:`${t}-input`,skeletonImageCls:`${t}-image`,imageSizeBase:r(e.controlHeight).mul(1.5).equal(),borderRadius:100,skeletonLoadingBackground:`linear-gradient(90deg, ${e.gradientFromColor} 25%, ${e.gradientToColor} 37%, ${e.gradientFromColor} 63%)`,skeletonLoadingMotionDuration:\"1.4s\"});return[dk(n)]}),(e=>{const{colorFillContent:t,colorFill:r}=e;return{color:t,colorGradientEnd:r,gradientFromColor:t,gradientToColor:r,titleHeight:e.controlHeight/2,blockRadius:e.borderRadiusSM,paragraphMarginTop:e.marginLG+e.marginXXS,paragraphLiHeight:e.controlHeight/2}}),{deprecatedTokens:[[\"color\",\"gradientFromColor\"],[\"colorGradientEnd\",\"gradientToColor\"]]}),hk=(e,t)=>{const{width:r,rows:n=2}=t;return Array.isArray(r)?r[e]:n-1===e?r:void 0},pk=e=>{const{prefixCls:t,className:r,style:n,rows:o=0}=e,i=Array.from({length:o}).map(((t,r)=>m.createElement(\"li\",{key:r,style:{width:hk(r,e)}})));return m.createElement(\"ul\",{className:ze()(t,r),style:n},i)},mk=e=>{let{prefixCls:t,className:r,width:n,style:o}=e;return m.createElement(\"h3\",{className:ze()(t,r),style:Object.assign({width:n},o)})};function gk(e){return e&&\"object\"==typeof e?e:{}}const vk=e=>{const{prefixCls:t,loading:r,className:n,rootClassName:o,style:i,children:a,avatar:s=!1,title:l=!0,paragraph:c=!0,active:u,round:d}=e,{getPrefixCls:f,direction:h,className:p,style:g}=Zo(\"skeleton\"),v=f(\"skeleton\",t),[b,y,w]=fk(v);if(r||!(\"loading\"in e)){const e=!!s,t=!!l,r=!!c;let a,f;if(e){const e=Object.assign(Object.assign({prefixCls:`${v}-avatar`},function(e,t){return e&&!t?{size:\"large\",shape:\"square\"}:{size:\"large\",shape:\"circle\"}}(t,r)),gk(s));a=m.createElement(\"div\",{className:`${v}-header`},m.createElement(QC,Object.assign({},e)))}if(t||r){let n,o;if(t){const t=Object.assign(Object.assign({prefixCls:`${v}-title`},function(e,t){return!e&&t?{width:\"38%\"}:e&&t?{width:\"50%\"}:{}}(e,r)),gk(l));n=m.createElement(mk,Object.assign({},t))}if(r){const r=Object.assign(Object.assign({prefixCls:`${v}-paragraph`},function(e,t){const r={};return e&&t||(r.width=\"61%\"),r.rows=!e&&t?3:2,r}(e,t)),gk(c));o=m.createElement(pk,Object.assign({},r))}f=m.createElement(\"div\",{className:`${v}-content`},n,o)}const x=ze()(v,{[`${v}-with-avatar`]:e,[`${v}-active`]:u,[`${v}-rtl`]:\"rtl\"===h,[`${v}-round`]:d},p,n,o,y,w);return b(m.createElement(\"div\",{className:x,style:Object.assign(Object.assign({},g),i)},a,f))}return null!=a?a:null};vk.Button=e=>{const{prefixCls:t,className:r,rootClassName:n,active:o,block:i=!1,size:a=\"default\"}=e,{getPrefixCls:s}=m.useContext(Xo),l=s(\"skeleton\",t),[c,u,d]=fk(l),f=kf(e,[\"prefixCls\"]),h=ze()(l,`${l}-element`,{[`${l}-active`]:o,[`${l}-block`]:i},r,n,u,d);return c(m.createElement(\"div\",{className:h},m.createElement(QC,Object.assign({prefixCls:`${l}-button`,size:a},f))))},vk.Avatar=e=>{const{prefixCls:t,className:r,rootClassName:n,active:o,shape:i=\"circle\",size:a=\"default\"}=e,{getPrefixCls:s}=m.useContext(Xo),l=s(\"skeleton\",t),[c,u,d]=fk(l),f=kf(e,[\"prefixCls\",\"className\"]),h=ze()(l,`${l}-element`,{[`${l}-active`]:o},r,n,u,d);return c(m.createElement(\"div\",{className:h},m.createElement(QC,Object.assign({prefixCls:`${l}-avatar`,shape:i,size:a},f))))},vk.Input=e=>{const{prefixCls:t,className:r,rootClassName:n,active:o,block:i,size:a=\"default\"}=e,{getPrefixCls:s}=m.useContext(Xo),l=s(\"skeleton\",t),[c,u,d]=fk(l),f=kf(e,[\"prefixCls\"]),h=ze()(l,`${l}-element`,{[`${l}-active`]:o,[`${l}-block`]:i},r,n,u,d);return c(m.createElement(\"div\",{className:h},m.createElement(QC,Object.assign({prefixCls:`${l}-input`,size:a},f))))},vk.Image=e=>{const{prefixCls:t,className:r,rootClassName:n,style:o,active:i}=e,{getPrefixCls:a}=m.useContext(Xo),s=a(\"skeleton\",t),[l,c,u]=fk(s),d=ze()(s,`${s}-element`,{[`${s}-active`]:i},r,n,c,u);return l(m.createElement(\"div\",{className:d},m.createElement(\"div\",{className:ze()(`${s}-image`,r),style:o},m.createElement(\"svg\",{viewBox:\"0 0 1098 1024\",xmlns:\"http://www.w3.org/2000/svg\",className:`${s}-image-svg`},m.createElement(\"title\",null,\"Image placeholder\"),m.createElement(\"path\",{d:\"M365.714286 329.142857q0 45.714286-32.036571 77.677714t-77.677714 32.036571-77.677714-32.036571-32.036571-77.677714 32.036571-77.677714 77.677714-32.036571 77.677714 32.036571 32.036571 77.677714zM950.857143 548.571429l0 256-804.571429 0 0-109.714286 182.857143-182.857143 91.428571 91.428571 292.571429-292.571429zM1005.714286 146.285714l-914.285714 0q-7.460571 0-12.873143 5.412571t-5.412571 12.873143l0 694.857143q0 7.460571 5.412571 12.873143t12.873143 5.412571l914.285714 0q7.460571 0 12.873143-5.412571t5.412571-12.873143l0-694.857143q0-7.460571-5.412571-12.873143t-12.873143-5.412571zM1097.142857 164.571429l0 694.857143q0 37.741714-26.843429 64.585143t-64.585143 26.843429l-914.285714 0q-37.741714 0-64.585143-26.843429t-26.843429-64.585143l0-694.857143q0-37.741714 26.843429-64.585143t64.585143-26.843429l914.285714 0q37.741714 0 64.585143 26.843429t26.843429 64.585143z\",className:`${s}-image-path`})))))},vk.Node=e=>{const{prefixCls:t,className:r,rootClassName:n,style:o,active:i,children:a}=e,{getPrefixCls:s}=m.useContext(Xo),l=s(\"skeleton\",t),[c,u,d]=fk(l),f=ze()(l,`${l}-element`,{[`${l}-active`]:i},u,r,n,d);return c(m.createElement(\"div\",{className:f},m.createElement(\"div\",{className:ze()(`${l}-image`,r),style:o},a)))};const bk=vk;function yk(){}const wk=m.createContext({add:yk,remove:yk}),xk=()=>{const{cancelButtonProps:e,cancelTextLocale:t,onCancel:r}=(0,m.useContext)(PC);return m.createElement(AC,Object.assign({onClick:r},e),t)},Sk=()=>{const{confirmLoading:e,okButtonProps:t,okType:r,okTextLocale:n,onOk:o}=(0,m.useContext)(PC);return m.createElement(AC,Object.assign({},NS(r),{loading:e,onClick:o},t),n)};function Ck(e,t){return m.createElement(\"span\",{className:`${e}-close-x`},t||m.createElement(Vu,{className:`${e}-close-icon`}))}const kk=e=>{const{okText:t,okType:r=\"primary\",cancelText:n,confirmLoading:o,onOk:i,onCancel:a,okButtonProps:s,cancelButtonProps:l,footer:c}=e,[u]=Gv(\"Modal\",is()),d={confirmLoading:o,okButtonProps:s,cancelButtonProps:l,okTextLocale:t||(null==u?void 0:u.okText),cancelTextLocale:n||(null==u?void 0:u.cancelText),okType:r,onOk:i,onCancel:a},f=m.useMemo((()=>d),Vo(Object.values(d)));let h;return\"function\"==typeof c||void 0===c?(h=m.createElement(m.Fragment,null,m.createElement(xk,null),m.createElement(Sk,null)),\"function\"==typeof c&&(h=c(h,{OkBtn:Sk,CancelBtn:xk})),h=m.createElement(MC,{value:f},h)):h=c,m.createElement(xs,{disabled:!1},h)},Ek=e=>{const{componentCls:t}=e;return{[t]:{position:\"relative\",maxWidth:\"100%\",minHeight:1}}},Ok=(e,t)=>((e,t)=>{const{prefixCls:r,componentCls:n,gridColumns:o}=e,i={};for(let e=o;e>=0;e--)0===e?(i[`${n}${t}-${e}`]={display:\"none\"},i[`${n}-push-${e}`]={insetInlineStart:\"auto\"},i[`${n}-pull-${e}`]={insetInlineEnd:\"auto\"},i[`${n}${t}-push-${e}`]={insetInlineStart:\"auto\"},i[`${n}${t}-pull-${e}`]={insetInlineEnd:\"auto\"},i[`${n}${t}-offset-${e}`]={marginInlineStart:0},i[`${n}${t}-order-${e}`]={order:0}):(i[`${n}${t}-${e}`]=[{\"--ant-display\":\"block\",display:\"block\"},{display:\"var(--ant-display)\",flex:`0 0 ${e/o*100}%`,maxWidth:e/o*100+\"%\"}],i[`${n}${t}-push-${e}`]={insetInlineStart:e/o*100+\"%\"},i[`${n}${t}-pull-${e}`]={insetInlineEnd:e/o*100+\"%\"},i[`${n}${t}-offset-${e}`]={marginInlineStart:e/o*100+\"%\"},i[`${n}${t}-order-${e}`]={order:e});return i[`${n}${t}-flex`]={flex:`var(--${r}${t}-flex)`},i})(e,t),Ak=Iu(\"Grid\",(e=>{const{componentCls:t}=e;return{[t]:{display:\"flex\",flexFlow:\"row wrap\",minWidth:0,\"&::before, &::after\":{display:\"flex\"},\"&-no-wrap\":{flexWrap:\"nowrap\"},\"&-start\":{justifyContent:\"flex-start\"},\"&-center\":{justifyContent:\"center\"},\"&-end\":{justifyContent:\"flex-end\"},\"&-space-between\":{justifyContent:\"space-between\"},\"&-space-around\":{justifyContent:\"space-around\"},\"&-space-evenly\":{justifyContent:\"space-evenly\"},\"&-top\":{alignItems:\"flex-start\"},\"&-middle\":{alignItems:\"center\"},\"&-bottom\":{alignItems:\"flex-end\"}}}}),(()=>({}))),Tk=e=>({xs:e.screenXSMin,sm:e.screenSMMin,md:e.screenMDMin,lg:e.screenLGMin,xl:e.screenXLMin,xxl:e.screenXXLMin}),jk=Iu(\"Grid\",(e=>{const t=Au(e,{gridColumns:24}),r=Tk(t);return delete r.xs,[Ek(t),Ok(t,\"\"),Ok(t,\"-xs\"),Object.keys(r).map((e=>((e,t,r)=>({[`@media (min-width: ${Si(t)})`]:Object.assign({},Ok(e,r))}))(t,r[e],`-${e}`))).reduce(((e,t)=>Object.assign(Object.assign({},e),t)),{})]}),(()=>({}))),Pk=new Ba(\"antFadeIn\",{\"0%\":{opacity:0},\"100%\":{opacity:1}}),Mk=new Ba(\"antFadeOut\",{\"0%\":{opacity:1},\"100%\":{opacity:0}}),Rk=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const{antCls:r}=e,n=`${r}-fade`,o=t?\"&\":\"\";return[Np(n,Pk,Mk,e.motionDurationMid,t),{[`\\n        ${o}${n}-enter,\\n        ${o}${n}-appear\\n      `]:{opacity:0,animationTimingFunction:\"linear\"},[`${o}${n}-leave`]:{animationTimingFunction:\"linear\"}}]};function _k(e){return{position:e,inset:0}}const Ik=e=>{const{componentCls:t,antCls:r}=e;return[{[`${t}-root`]:{[`${t}${r}-zoom-enter, ${t}${r}-zoom-appear`]:{transform:\"none\",opacity:0,animationDuration:e.motionDurationSlow,userSelect:\"none\"},[`${t}${r}-zoom-leave ${t}-content`]:{pointerEvents:\"none\"},[`${t}-mask`]:Object.assign(Object.assign({},_k(\"fixed\")),{zIndex:e.zIndexPopupBase,height:\"100%\",backgroundColor:e.colorBgMask,pointerEvents:\"none\",[`${t}-hidden`]:{display:\"none\"}}),[`${t}-wrap`]:Object.assign(Object.assign({},_k(\"fixed\")),{zIndex:e.zIndexPopupBase,overflow:\"auto\",outline:0,WebkitOverflowScrolling:\"touch\"})}},{[`${t}-root`]:Rk(e)}]},Nk=e=>{const{componentCls:t}=e;return[{[`${t}-root`]:{[`${t}-wrap-rtl`]:{direction:\"rtl\"},[`${t}-centered`]:{textAlign:\"center\",\"&::before\":{display:\"inline-block\",width:0,height:\"100%\",verticalAlign:\"middle\",content:'\"\"'},[t]:{top:0,display:\"inline-block\",paddingBottom:0,textAlign:\"start\",verticalAlign:\"middle\"}},[`@media (max-width: ${e.screenSMMax}px)`]:{[t]:{maxWidth:\"calc(100vw - 16px)\",margin:`${Si(e.marginXS)} auto`},[`${t}-centered`]:{[t]:{flex:1}}}}},{[t]:Object.assign(Object.assign({},rc(e)),{pointerEvents:\"none\",position:\"relative\",top:100,width:\"auto\",maxWidth:`calc(100vw - ${Si(e.calc(e.margin).mul(2).equal())})`,margin:\"0 auto\",paddingBottom:e.paddingLG,[`${t}-title`]:{margin:0,color:e.titleColor,fontWeight:e.fontWeightStrong,fontSize:e.titleFontSize,lineHeight:e.titleLineHeight,wordWrap:\"break-word\"},[`${t}-content`]:{position:\"relative\",backgroundColor:e.contentBg,backgroundClip:\"padding-box\",border:0,borderRadius:e.borderRadiusLG,boxShadow:e.boxShadow,pointerEvents:\"auto\",padding:e.contentPadding},[`${t}-close`]:Object.assign({position:\"absolute\",top:e.calc(e.modalHeaderHeight).sub(e.modalCloseBtnSize).div(2).equal(),insetInlineEnd:e.calc(e.modalHeaderHeight).sub(e.modalCloseBtnSize).div(2).equal(),zIndex:e.calc(e.zIndexPopupBase).add(10).equal(),padding:0,color:e.modalCloseIconColor,fontWeight:e.fontWeightStrong,lineHeight:1,textDecoration:\"none\",background:\"transparent\",borderRadius:e.borderRadiusSM,width:e.modalCloseBtnSize,height:e.modalCloseBtnSize,border:0,outline:0,cursor:\"pointer\",transition:`color ${e.motionDurationMid}, background-color ${e.motionDurationMid}`,\"&-x\":{display:\"flex\",fontSize:e.fontSizeLG,fontStyle:\"normal\",lineHeight:Si(e.modalCloseBtnSize),justifyContent:\"center\",textTransform:\"none\",textRendering:\"auto\"},\"&:disabled\":{pointerEvents:\"none\"},\"&:hover\":{color:e.modalCloseIconHoverColor,backgroundColor:e.colorBgTextHover,textDecoration:\"none\"},\"&:active\":{backgroundColor:e.colorBgTextActive}},oc(e)),[`${t}-header`]:{color:e.colorText,background:e.headerBg,borderRadius:`${Si(e.borderRadiusLG)} ${Si(e.borderRadiusLG)} 0 0`,marginBottom:e.headerMarginBottom,padding:e.headerPadding,borderBottom:e.headerBorderBottom},[`${t}-body`]:{fontSize:e.fontSize,lineHeight:e.lineHeight,wordWrap:\"break-word\",padding:e.bodyPadding,[`${t}-body-skeleton`]:{width:\"100%\",height:\"100%\",display:\"flex\",justifyContent:\"center\",alignItems:\"center\",margin:`${Si(e.margin)} auto`}},[`${t}-footer`]:{textAlign:\"end\",background:e.footerBg,marginTop:e.footerMarginTop,padding:e.footerPadding,borderTop:e.footerBorderTop,borderRadius:e.footerBorderRadius,[`> ${e.antCls}-btn + ${e.antCls}-btn`]:{marginInlineStart:e.marginXS}},[`${t}-open`]:{overflow:\"hidden\"}})},{[`${t}-pure-panel`]:{top:\"auto\",padding:0,display:\"flex\",flexDirection:\"column\",[`${t}-content,\\n          ${t}-body,\\n          ${t}-confirm-body-wrapper`]:{display:\"flex\",flexDirection:\"column\",flex:\"auto\"},[`${t}-confirm-body`]:{marginBottom:\"auto\"}}}]},Fk=e=>{const{componentCls:t}=e;return{[`${t}-root`]:{[`${t}-wrap-rtl`]:{direction:\"rtl\",[`${t}-confirm-body`]:{direction:\"rtl\"}}}}},Dk=e=>{const{componentCls:t}=e,r=Tk(e);delete r.xs;const n=Object.keys(r).map((e=>({[`@media (min-width: ${Si(r[e])})`]:{width:`var(--${t.replace(\".\",\"\")}-${e}-width)`}})));return{[`${t}-root`]:{[t]:[{width:`var(--${t.replace(\".\",\"\")}-xs-width)`}].concat(Vo(n))}}},Bk=e=>{const t=e.padding,r=e.fontSizeHeading5,n=e.lineHeightHeading5;return Au(e,{modalHeaderHeight:e.calc(e.calc(n).mul(r).equal()).add(e.calc(t).mul(2).equal()).equal(),modalFooterBorderColorSplit:e.colorSplit,modalFooterBorderStyle:e.lineType,modalFooterBorderWidth:e.lineWidth,modalCloseIconColor:e.colorIcon,modalCloseIconHoverColor:e.colorIconHover,modalCloseBtnSize:e.controlHeight,modalConfirmIconSize:e.fontHeight,modalTitleHeight:e.calc(e.titleFontSize).mul(e.titleLineHeight).equal()})},Lk=e=>({footerBg:\"transparent\",headerBg:e.colorBgElevated,titleLineHeight:e.lineHeightHeading5,titleFontSize:e.fontSizeHeading5,contentBg:e.colorBgElevated,titleColor:e.colorTextHeading,contentPadding:e.wireframe?0:`${Si(e.paddingMD)} ${Si(e.paddingContentHorizontalLG)}`,headerPadding:e.wireframe?`${Si(e.padding)} ${Si(e.paddingLG)}`:0,headerBorderBottom:e.wireframe?`${Si(e.lineWidth)} ${e.lineType} ${e.colorSplit}`:\"none\",headerMarginBottom:e.wireframe?0:e.marginXS,bodyPadding:e.wireframe?e.paddingLG:0,footerPadding:e.wireframe?`${Si(e.paddingXS)} ${Si(e.padding)}`:0,footerBorderTop:e.wireframe?`${Si(e.lineWidth)} ${e.lineType} ${e.colorSplit}`:\"none\",footerBorderRadius:e.wireframe?`0 0 ${Si(e.borderRadiusLG)} ${Si(e.borderRadiusLG)}`:0,footerMarginTop:e.wireframe?0:e.marginSM,confirmBodyPadding:e.wireframe?`${Si(2*e.padding)} ${Si(2*e.padding)} ${Si(e.paddingLG)}`:0,confirmIconMarginInlineEnd:e.wireframe?e.margin:e.marginSM,confirmBtnsMarginTop:e.wireframe?e.marginLG:e.marginSM}),zk=Iu(\"Modal\",(e=>{const t=Bk(e);return[Nk(t),Fk(t),Ik(t),Yp(t,\"zoom\"),Dk(t)]}),Lk,{unitless:{titleLineHeight:!0}});let Hk;Tt()&&window.document.documentElement&&document.documentElement.addEventListener(\"click\",(e=>{Hk={x:e.pageX,y:e.pageY},setTimeout((()=>{Hk=null}),100)}),!0);const Uk=e=>{const{prefixCls:t,className:r,rootClassName:n,open:o,wrapClassName:i,centered:a,getContainer:s,focusTriggerAfterClose:l=!0,style:c,visible:u,width:d=520,footer:f,classNames:h,styles:p,children:g,loading:v,confirmLoading:b,zIndex:y,mousePosition:w,onOk:x,onCancel:S,destroyOnHidden:C,destroyOnClose:k}=e,E=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"className\",\"rootClassName\",\"open\",\"wrapClassName\",\"centered\",\"getContainer\",\"focusTriggerAfterClose\",\"style\",\"visible\",\"width\",\"footer\",\"classNames\",\"styles\",\"children\",\"loading\",\"confirmLoading\",\"zIndex\",\"mousePosition\",\"onOk\",\"onCancel\",\"destroyOnHidden\",\"destroyOnClose\"]),{getPopupContainer:O,getPrefixCls:A,direction:T,modal:j}=m.useContext(Xo),P=e=>{b||null==S||S(e)},M=A(\"modal\",t),R=A(),_=du(M),[I,N,F]=zk(M,_),D=ze()(i,{[`${M}-centered`]:null!=a?a:null==j?void 0:j.centered,[`${M}-wrap-rtl`]:\"rtl\"===T}),B=null===f||v?null:m.createElement(kk,Object.assign({},e,{onOk:e=>{null==x||x(e)},onCancel:P})),[L,z,H,U]=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:ZC;const n=$C(e),o=$C(t),[i]=Gv(\"global\",ts.global),a=\"boolean\"!=typeof n&&!!(null==n?void 0:n.disabled),s=m.useMemo((()=>Object.assign({closeIcon:m.createElement(Vu,null)},r)),[r]),l=m.useMemo((()=>!1!==n&&(n?XC(s,o,n):!1!==o&&(o?XC(s,o):!!s.closable&&s))),[n,o,s]);return m.useMemo((()=>{if(!1===l)return[!1,null,a,{}];const{closeIconRender:e}=s,{closeIcon:t}=l;let r=t;const n=Jc(l,!0);return null!=r&&(e&&(r=e(t)),r=m.isValidElement(r)?m.cloneElement(r,Object.assign({\"aria-label\":i.close},n)):m.createElement(\"span\",Object.assign({\"aria-label\":i.close},n),r)),[!0,r,a,n]}),[l,s])}(YC(e),YC(j),{closable:!0,closeIcon:m.createElement(Vu,{className:`${M}-close-icon`}),closeIconRender:e=>Ck(M,e)}),V=function(e){const t=m.useContext(wk),r=m.useRef(null);return Ws((n=>{if(n){const o=e?n.querySelector(e):n;t.add(o),r.current=o}else t.remove(r.current)}))}(`.${M}-content`),[W,G]=gu(\"Modal\",y),[q,K]=m.useMemo((()=>d&&\"object\"==typeof d?[void 0,d]:[d,void 0]),[d]),X=m.useMemo((()=>{const e={};return K&&Object.keys(K).forEach((t=>{const r=K[t];void 0!==r&&(e[`--${M}-${t}-width`]=\"number\"==typeof r?`${r}px`:r)})),e}),[K]);return I(m.createElement(Uf,{form:!0,space:!0},m.createElement(fu.Provider,{value:G},m.createElement(KC,Object.assign({width:q},E,{zIndex:W,getContainer:void 0===s?O:s,prefixCls:M,rootClassName:ze()(N,n,F,_),footer:B,visible:null!=o?o:u,mousePosition:null!=w?w:Hk,onClose:P,closable:L?Object.assign({disabled:H,closeIcon:z},U):L,closeIcon:z,focusTriggerAfterClose:l,transitionName:Qf(R,\"zoom\",e.transitionName),maskTransitionName:Qf(R,\"fade\",e.maskTransitionName),className:ze()(N,r,null==j?void 0:j.className),style:Object.assign(Object.assign(Object.assign({},null==j?void 0:j.style),c),X),classNames:Object.assign(Object.assign(Object.assign({},null==j?void 0:j.classNames),h),{wrapper:ze()(D,null==h?void 0:h.wrapper)}),styles:Object.assign(Object.assign({},null==j?void 0:j.styles),p),panelRef:V,destroyOnClose:null!=C?C:k}),v?m.createElement(bk,{active:!0,title:!1,paragraph:{rows:4},className:`${M}-body-skeleton`}):g))))},Vk=e=>{const{componentCls:t,titleFontSize:r,titleLineHeight:n,modalConfirmIconSize:o,fontSize:i,lineHeight:a,modalTitleHeight:s,fontHeight:l,confirmBodyPadding:c}=e,u=`${t}-confirm`;return{[u]:{\"&-rtl\":{direction:\"rtl\"},[`${e.antCls}-modal-header`]:{display:\"none\"},[`${u}-body-wrapper`]:Object.assign({},{\"&::before\":{display:\"table\",content:'\"\"'},\"&::after\":{display:\"table\",clear:\"both\",content:'\"\"'}}),[`&${t} ${t}-body`]:{padding:c},[`${u}-body`]:{display:\"flex\",flexWrap:\"nowrap\",alignItems:\"start\",[`> ${e.iconCls}`]:{flex:\"none\",fontSize:o,marginInlineEnd:e.confirmIconMarginInlineEnd,marginTop:e.calc(e.calc(l).sub(o).equal()).div(2).equal()},[`&-has-title > ${e.iconCls}`]:{marginTop:e.calc(e.calc(s).sub(o).equal()).div(2).equal()}},[`${u}-paragraph`]:{display:\"flex\",flexDirection:\"column\",flex:\"auto\",rowGap:e.marginXS,maxWidth:`calc(100% - ${Si(e.marginSM)})`},[`${e.iconCls} + ${u}-paragraph`]:{maxWidth:`calc(100% - ${Si(e.calc(e.modalConfirmIconSize).add(e.marginSM).equal())})`},[`${u}-title`]:{color:e.colorTextHeading,fontWeight:e.fontWeightStrong,fontSize:r,lineHeight:n},[`${u}-content`]:{color:e.colorText,fontSize:i,lineHeight:a},[`${u}-btns`]:{textAlign:\"end\",marginTop:e.confirmBtnsMarginTop,[`${e.antCls}-btn + ${e.antCls}-btn`]:{marginBottom:0,marginInlineStart:e.marginXS}}},[`${u}-error ${u}-body > ${e.iconCls}`]:{color:e.colorError},[`${u}-warning ${u}-body > ${e.iconCls},\\n        ${u}-confirm ${u}-body > ${e.iconCls}`]:{color:e.colorWarning},[`${u}-info ${u}-body > ${e.iconCls}`]:{color:e.colorInfo},[`${u}-success ${u}-body > ${e.iconCls}`]:{color:e.colorSuccess}}},Wk=Fu([\"Modal\",\"confirm\"],(e=>{const t=Bk(e);return[Vk(t)]}),Lk,{order:-1e3});function Gk(e){const{prefixCls:t,icon:r,okText:n,cancelText:o,confirmPrefixCls:i,type:a,okCancel:s,footer:l,locale:c}=e,u=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"icon\",\"okText\",\"cancelText\",\"confirmPrefixCls\",\"type\",\"okCancel\",\"footer\",\"locale\"]);let d=r;if(!r&&null!==r)switch(a){case\"info\":d=m.createElement(Gc,null);break;case\"success\":d=m.createElement(Fc,null);break;case\"error\":d=m.createElement(Lc,null);break;default:d=m.createElement(Uc,null)}const f=null!=s?s:\"confirm\"===a,h=null!==e.autoFocusButton&&(e.autoFocusButton||\"ok\"),[p]=Gv(\"Modal\"),g=c||p,v=n||(f?null==g?void 0:g.okText:null==g?void 0:g.justOkText),b=o||(null==g?void 0:g.cancelText),y=Object.assign({autoFocusButton:h,cancelTextLocale:b,okTextLocale:v,mergedOkCancel:f},u),w=m.useMemo((()=>y),Vo(Object.values(y))),x=m.createElement(m.Fragment,null,m.createElement(RC,null),m.createElement(_C,null)),S=void 0!==e.title&&null!==e.title,C=`${i}-body`;return m.createElement(\"div\",{className:`${i}-body-wrapper`},m.createElement(\"div\",{className:ze()(C,{[`${C}-has-title`]:S})},d,m.createElement(\"div\",{className:`${i}-paragraph`},S&&m.createElement(\"span\",{className:`${i}-title`},e.title),m.createElement(\"div\",{className:`${i}-content`},e.content))),void 0===l||\"function\"==typeof l?m.createElement(MC,{value:w},m.createElement(\"div\",{className:`${i}-btns`},\"function\"==typeof l?l(x,{OkBtn:_C,CancelBtn:RC}):x)):l,m.createElement(Wk,{prefixCls:t}))}const qk=e=>{const{close:t,zIndex:r,maskStyle:n,direction:o,prefixCls:i,wrapClassName:a,rootPrefixCls:s,bodyStyle:l,closable:c=!1,onConfirm:u,styles:d}=e,f=`${i}-confirm`,h=e.width||416,p=e.style||{},g=void 0===e.mask||e.mask,v=void 0!==e.maskClosable&&e.maskClosable,b=ze()(f,`${f}-${e.type}`,{[`${f}-rtl`]:\"rtl\"===o},e.className),[,y]=Ql(),w=m.useMemo((()=>void 0!==r?r:y.zIndexPopupBase+1e3),[r,y]);return m.createElement(Uk,Object.assign({},e,{className:b,wrapClassName:ze()({[`${f}-centered`]:!!e.centered},a),onCancel:()=>{null==t||t({triggerCancel:!0}),null==u||u(!1)},title:\"\",footer:null,transitionName:Qf(s||\"\",\"zoom\",e.transitionName),maskTransitionName:Qf(s||\"\",\"fade\",e.maskTransitionName),mask:g,maskClosable:v,style:p,styles:Object.assign({body:l,mask:n},d),width:h,zIndex:w,closable:c}),m.createElement(Gk,Object.assign({},e,{confirmPrefixCls:f})))},Kk=e=>{const{rootPrefixCls:t,iconPrefixCls:r,direction:n,theme:o}=e;return m.createElement(vc,{prefixCls:t,iconPrefixCls:r,direction:n,theme:o},m.createElement(qk,Object.assign({},e)))},Xk=[];let Yk=\"\";function $k(){return Yk}const Zk=e=>{var t,r;const{prefixCls:n,getContainer:o,direction:i}=e,a=is(),s=(0,m.useContext)(Xo),l=$k()||s.getPrefixCls(),c=n||`${l}-modal`;let u=o;return!1===u&&(u=void 0),m.createElement(Kk,Object.assign({},e,{rootPrefixCls:l,prefixCls:c,iconPrefixCls:s.iconPrefixCls,theme:s.theme,direction:null!=i?i:s.direction,locale:null!==(r=null===(t=s.locale)||void 0===t?void 0:t.Modal)&&void 0!==r?r:a,getContainer:u}))};function Qk(e){const t=pc(),r=document.createDocumentFragment();let n,o,i=Object.assign(Object.assign({},e),{close:l,open:!0});function a(){for(var t,r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];var a;n.some((e=>null==e?void 0:e.triggerCancel))&&(null===(t=e.onCancel)||void 0===t||(a=t).call.apply(a,[e,()=>{}].concat(Vo(n.slice(1)))));for(let e=0;e<Xk.length;e++)if(Xk[e]===l){Xk.splice(e,1);break}o()}function s(e){clearTimeout(n),n=setTimeout((()=>{const n=t.getPrefixCls(void 0,$k()),i=t.getIconPrefixCls(),a=t.getTheme(),s=m.createElement(Zk,Object.assign({},e)),l=_c();o=l(m.createElement(vc,{prefixCls:n,iconPrefixCls:i,theme:a},t.holderRender?t.holderRender(s):s),r)}))}function l(){for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];i=Object.assign(Object.assign({},i),{open:!1,afterClose:()=>{\"function\"==typeof e.afterClose&&e.afterClose(),a.apply(this,r)}}),i.visible&&delete i.visible,s(i)}return s(i),Xk.push(l),{destroy:l,update:function(e){i=\"function\"==typeof e?e(i):Object.assign(Object.assign({},i),e),s(i)}}}function Jk(e){return Object.assign(Object.assign({},e),{type:\"warning\"})}function eE(e){return Object.assign(Object.assign({},e),{type:\"info\"})}function tE(e){return Object.assign(Object.assign({},e),{type:\"success\"})}function rE(e){return Object.assign(Object.assign({},e),{type:\"error\"})}function nE(e){return Object.assign(Object.assign({},e),{type:\"confirm\"})}const oE=Vf((e=>{const{prefixCls:t,className:r,closeIcon:n,closable:o,type:i,title:a,children:s,footer:l}=e,c=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"className\",\"closeIcon\",\"closable\",\"type\",\"title\",\"children\",\"footer\"]),{getPrefixCls:u}=m.useContext(Xo),d=u(),f=t||u(\"modal\"),h=du(d),[p,g,v]=zk(f,h),b=`${f}-confirm`;let y={};return y=i?{closable:null!=o&&o,title:\"\",footer:\"\",children:m.createElement(Gk,Object.assign({},e,{prefixCls:f,confirmPrefixCls:b,rootPrefixCls:d,content:s}))}:{closable:null==o||o,title:a,footer:null!==l&&m.createElement(kk,Object.assign({},e)),children:s},p(m.createElement(HC,Object.assign({prefixCls:f,className:ze()(g,`${f}-pure-panel`,i&&b,i&&`${b}-${i}`,r,v,h)},c,{closeIcon:Ck(f,n),closable:o},y)))}));const iE=(e,t)=>{var r,{afterClose:n,config:o}=e,i=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"afterClose\",\"config\"]);const[a,s]=m.useState(!0),[l,c]=m.useState(o),{direction:u,getPrefixCls:d}=m.useContext(Xo),f=d(\"modal\"),h=d(),p=function(){var e,t;s(!1);for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];n.some((e=>null==e?void 0:e.triggerCancel))&&(null===(e=l.onCancel)||void 0===e||(t=e).call.apply(t,[l,()=>{}].concat(Vo(n.slice(1)))))};m.useImperativeHandle(t,(()=>({destroy:p,update:e=>{c((t=>Object.assign(Object.assign({},t),e)))}})));const g=null!==(r=l.okCancel)&&void 0!==r?r:\"confirm\"===l.type,[v]=Gv(\"Modal\",ts.Modal);return m.createElement(Kk,Object.assign({prefixCls:f,rootPrefixCls:h},l,{close:p,open:a,afterClose:()=>{var e;n(),null===(e=l.afterClose)||void 0===e||e.call(l)},okText:l.okText||(g?null==v?void 0:v.okText:null==v?void 0:v.justOkText),direction:l.direction||u,cancelText:l.cancelText||(null==v?void 0:v.cancelText)},i))},aE=m.forwardRef(iE);let sE=0;const lE=m.memo(m.forwardRef(((e,t)=>{const[r,n]=function(){const[e,t]=m.useState([]);return[e,m.useCallback((e=>(t((t=>[].concat(Vo(t),[e]))),()=>{t((t=>t.filter((t=>t!==e))))})),[])]}();return m.useImperativeHandle(t,(()=>({patchElement:n})),[]),m.createElement(m.Fragment,null,r)})));function cE(e){return Qk(Jk(e))}const uE=Uk;uE.useModal=function(){const e=m.useRef(null),[t,r]=m.useState([]);m.useEffect((()=>{t.length&&(Vo(t).forEach((e=>{e()})),r([]))}),[t]);const n=m.useCallback((t=>function(n){var o;sE+=1;const i=m.createRef();let a;const s=new Promise((e=>{a=e}));let l,c=!1;const u=m.createElement(aE,{key:`modal-${sE}`,config:t(n),ref:i,afterClose:()=>{null==l||l()},isSilent:()=>c,onConfirm:e=>{a(e)}});l=null===(o=e.current)||void 0===o?void 0:o.patchElement(u),l&&Xk.push(l);const d={destroy:()=>{function e(){var e;null===(e=i.current)||void 0===e||e.destroy()}i.current?e():r((t=>[].concat(Vo(t),[e])))},update:e=>{function t(){var t;null===(t=i.current)||void 0===t||t.update(e)}i.current?t():r((e=>[].concat(Vo(e),[t])))},then:e=>(c=!0,s.then(e))};return d}),[]);return[m.useMemo((()=>({info:n(eE),success:n(tE),error:n(rE),warning:n(Jk),confirm:n(nE)})),[]),m.createElement(lE,{key:\"modal-holder\",ref:e})]},uE.info=function(e){return Qk(eE(e))},uE.success=function(e){return Qk(tE(e))},uE.error=function(e){return Qk(rE(e))},uE.warning=cE,uE.warn=cE,uE.confirm=function(e){return Qk(nE(e))},uE.destroyAll=function(){for(;Xk.length;){const e=Xk.pop();e&&e()}},uE.config=function(e){let{rootPrefixCls:t}=e;Yk=t},uE._InternalPanelDoNotUseOrYouWillBeFired=oE;const dE=uE,fE=m.createContext(null),hE=fE.Provider,pE=fE,mE=m.createContext(null),gE=mE.Provider;var vE=[\"prefixCls\",\"className\",\"style\",\"checked\",\"disabled\",\"defaultChecked\",\"type\",\"title\",\"onChange\"],bE=(0,m.forwardRef)((function(e,t){var r=e.prefixCls,n=void 0===r?\"rc-checkbox\":r,o=e.className,i=e.style,a=e.checked,s=e.disabled,l=e.defaultChecked,c=void 0!==l&&l,u=e.type,d=void 0===u?\"checkbox\":u,f=e.title,h=e.onChange,p=Be(e,vE),g=(0,m.useRef)(null),v=(0,m.useRef)(null),b=Ie(Ks(c,{value:a}),2),y=b[0],w=b[1];(0,m.useImperativeHandle)(t,(function(){return{focus:function(e){var t;null===(t=g.current)||void 0===t||t.focus(e)},blur:function(){var e;null===(e=g.current)||void 0===e||e.blur()},input:g.current,nativeElement:v.current}}));var x=ze()(n,o,De(De({},\"\".concat(n,\"-checked\"),y),\"\".concat(n,\"-disabled\"),s));return m.createElement(\"span\",{className:x,title:f,style:i,ref:v},m.createElement(\"input\",Te({},p,{className:\"\".concat(n,\"-input\"),ref:g,onChange:function(t){s||(\"checked\"in e||w(t.target.checked),null==h||h({target:At(At({},e),{},{type:d,checked:t.target.checked}),stopPropagation:function(){t.stopPropagation()},preventDefault:function(){t.preventDefault()},nativeEvent:t.nativeEvent}))},disabled:s,checked:!!y,type:d})),m.createElement(\"span\",{className:\"\".concat(n,\"-inner\")}))}));const yE=bE;function wE(e){const t=m.useRef(null),r=()=>{Ol.cancel(t.current),t.current=null};return[()=>{r(),t.current=Ol((()=>{t.current=null}))},n=>{t.current&&(n.stopPropagation(),r()),null==e||e(n)}]}const xE=e=>{const{componentCls:t,antCls:r}=e,n=`${t}-group`;return{[n]:Object.assign(Object.assign({},rc(e)),{display:\"inline-block\",fontSize:0,[`&${n}-rtl`]:{direction:\"rtl\"},[`&${n}-block`]:{display:\"flex\"},[`${r}-badge ${r}-badge-count`]:{zIndex:1},[`> ${r}-badge:not(:first-child) > ${r}-button-wrapper`]:{borderInlineStart:\"none\"}})}},SE=e=>{const{componentCls:t,wrapperMarginInlineEnd:r,colorPrimary:n,radioSize:o,motionDurationSlow:i,motionDurationMid:a,motionEaseInOutCirc:s,colorBgContainer:l,colorBorder:c,lineWidth:u,colorBgContainerDisabled:d,colorTextDisabled:f,paddingXS:h,dotColorDisabled:p,lineType:m,radioColor:g,radioBgColor:v,calc:b}=e,y=`${t}-inner`,w=b(o).sub(b(4).mul(2)),x=b(1).mul(o).equal({unit:!0});return{[`${t}-wrapper`]:Object.assign(Object.assign({},rc(e)),{display:\"inline-flex\",alignItems:\"baseline\",marginInlineStart:0,marginInlineEnd:r,cursor:\"pointer\",\"&:last-child\":{marginInlineEnd:0},[`&${t}-wrapper-rtl`]:{direction:\"rtl\"},\"&-disabled\":{cursor:\"not-allowed\",color:e.colorTextDisabled},\"&::after\":{display:\"inline-block\",width:0,overflow:\"hidden\",content:'\"\\\\a0\"'},\"&-block\":{flex:1,justifyContent:\"center\"},[`${t}-checked::after`]:{position:\"absolute\",insetBlockStart:0,insetInlineStart:0,width:\"100%\",height:\"100%\",border:`${Si(u)} ${m} ${n}`,borderRadius:\"50%\",visibility:\"hidden\",opacity:0,content:'\"\"'},[t]:Object.assign(Object.assign({},rc(e)),{position:\"relative\",display:\"inline-block\",outline:\"none\",cursor:\"pointer\",alignSelf:\"center\",borderRadius:\"50%\"}),[`${t}-wrapper:hover &,\\n        &:hover ${y}`]:{borderColor:n},[`${t}-input:focus-visible + ${y}`]:Object.assign({},nc(e)),[`${t}:hover::after, ${t}-wrapper:hover &::after`]:{visibility:\"visible\"},[`${t}-inner`]:{\"&::after\":{boxSizing:\"border-box\",position:\"absolute\",insetBlockStart:\"50%\",insetInlineStart:\"50%\",display:\"block\",width:x,height:x,marginBlockStart:b(1).mul(o).div(-2).equal({unit:!0}),marginInlineStart:b(1).mul(o).div(-2).equal({unit:!0}),backgroundColor:g,borderBlockStart:0,borderInlineStart:0,borderRadius:x,transform:\"scale(0)\",opacity:0,transition:`all ${i} ${s}`,content:'\"\"'},boxSizing:\"border-box\",position:\"relative\",insetBlockStart:0,insetInlineStart:0,display:\"block\",width:x,height:x,backgroundColor:l,borderColor:c,borderStyle:\"solid\",borderWidth:u,borderRadius:\"50%\",transition:`all ${a}`},[`${t}-input`]:{position:\"absolute\",inset:0,zIndex:1,cursor:\"pointer\",opacity:0},[`${t}-checked`]:{[y]:{borderColor:n,backgroundColor:v,\"&::after\":{transform:`scale(${e.calc(e.dotSize).div(o).equal()})`,opacity:1,transition:`all ${i} ${s}`}}},[`${t}-disabled`]:{cursor:\"not-allowed\",[y]:{backgroundColor:d,borderColor:c,cursor:\"not-allowed\",\"&::after\":{backgroundColor:p}},[`${t}-input`]:{cursor:\"not-allowed\"},[`${t}-disabled + span`]:{color:f,cursor:\"not-allowed\"},[`&${t}-checked`]:{[y]:{\"&::after\":{transform:`scale(${b(w).div(o).equal()})`}}}},[`span${t} + *`]:{paddingInlineStart:h,paddingInlineEnd:h}})}},CE=e=>{const{buttonColor:t,controlHeight:r,componentCls:n,lineWidth:o,lineType:i,colorBorder:a,motionDurationSlow:s,motionDurationMid:l,buttonPaddingInline:c,fontSize:u,buttonBg:d,fontSizeLG:f,controlHeightLG:h,controlHeightSM:p,paddingXS:m,borderRadius:g,borderRadiusSM:v,borderRadiusLG:b,buttonCheckedBg:y,buttonSolidCheckedColor:w,colorTextDisabled:x,colorBgContainerDisabled:S,buttonCheckedBgDisabled:C,buttonCheckedColorDisabled:k,colorPrimary:E,colorPrimaryHover:O,colorPrimaryActive:A,buttonSolidCheckedBg:T,buttonSolidCheckedHoverBg:j,buttonSolidCheckedActiveBg:P,calc:M}=e;return{[`${n}-button-wrapper`]:{position:\"relative\",display:\"inline-block\",height:r,margin:0,paddingInline:c,paddingBlock:0,color:t,fontSize:u,lineHeight:Si(M(r).sub(M(o).mul(2)).equal()),background:d,border:`${Si(o)} ${i} ${a}`,borderBlockStartWidth:M(o).add(.02).equal(),borderInlineStartWidth:0,borderInlineEndWidth:o,cursor:\"pointer\",transition:[`color ${l}`,`background ${l}`,`box-shadow ${l}`].join(\",\"),a:{color:t},[`> ${n}-button`]:{position:\"absolute\",insetBlockStart:0,insetInlineStart:0,zIndex:-1,width:\"100%\",height:\"100%\"},\"&:not(:first-child)\":{\"&::before\":{position:\"absolute\",insetBlockStart:M(o).mul(-1).equal(),insetInlineStart:M(o).mul(-1).equal(),display:\"block\",boxSizing:\"content-box\",width:1,height:\"100%\",paddingBlock:o,paddingInline:0,backgroundColor:a,transition:`background-color ${s}`,content:'\"\"'}},\"&:first-child\":{borderInlineStart:`${Si(o)} ${i} ${a}`,borderStartStartRadius:g,borderEndStartRadius:g},\"&:last-child\":{borderStartEndRadius:g,borderEndEndRadius:g},\"&:first-child:last-child\":{borderRadius:g},[`${n}-group-large &`]:{height:h,fontSize:f,lineHeight:Si(M(h).sub(M(o).mul(2)).equal()),\"&:first-child\":{borderStartStartRadius:b,borderEndStartRadius:b},\"&:last-child\":{borderStartEndRadius:b,borderEndEndRadius:b}},[`${n}-group-small &`]:{height:p,paddingInline:M(m).sub(o).equal(),paddingBlock:0,lineHeight:Si(M(p).sub(M(o).mul(2)).equal()),\"&:first-child\":{borderStartStartRadius:v,borderEndStartRadius:v},\"&:last-child\":{borderStartEndRadius:v,borderEndEndRadius:v}},\"&:hover\":{position:\"relative\",color:E},\"&:has(:focus-visible)\":Object.assign({},nc(e)),[`${n}-inner, input[type='checkbox'], input[type='radio']`]:{width:0,height:0,opacity:0,pointerEvents:\"none\"},[`&-checked:not(${n}-button-wrapper-disabled)`]:{zIndex:1,color:E,background:y,borderColor:E,\"&::before\":{backgroundColor:E},\"&:first-child\":{borderColor:E},\"&:hover\":{color:O,borderColor:O,\"&::before\":{backgroundColor:O}},\"&:active\":{color:A,borderColor:A,\"&::before\":{backgroundColor:A}}},[`${n}-group-solid &-checked:not(${n}-button-wrapper-disabled)`]:{color:w,background:T,borderColor:T,\"&:hover\":{color:w,background:j,borderColor:j},\"&:active\":{color:w,background:P,borderColor:P}},\"&-disabled\":{color:x,backgroundColor:S,borderColor:a,cursor:\"not-allowed\",\"&:first-child, &:hover\":{color:x,backgroundColor:S,borderColor:a}},[`&-disabled${n}-button-wrapper-checked`]:{color:k,backgroundColor:C,borderColor:a,boxShadow:\"none\"},\"&-block\":{flex:1,textAlign:\"center\"}}}},kE=Iu(\"Radio\",(e=>{const{controlOutline:t,controlOutlineWidth:r}=e,n=`0 0 0 ${Si(r)} ${t}`,o=Au(e,{radioFocusShadow:n,radioButtonFocusShadow:n});return[xE(o),SE(o),CE(o)]}),(e=>{const{wireframe:t,padding:r,marginXS:n,lineWidth:o,fontSizeLG:i,colorText:a,colorBgContainer:s,colorTextDisabled:l,controlItemBgActiveDisabled:c,colorTextLightSolid:u,colorPrimary:d,colorPrimaryHover:f,colorPrimaryActive:h,colorWhite:p}=e;return{radioSize:i,dotSize:t?i-8:i-2*(4+o),dotColorDisabled:l,buttonSolidCheckedColor:u,buttonSolidCheckedBg:d,buttonSolidCheckedHoverBg:f,buttonSolidCheckedActiveBg:h,buttonBg:s,buttonCheckedBg:s,buttonColor:a,buttonCheckedBgDisabled:c,buttonCheckedColorDisabled:l,buttonPaddingInline:r-o,wrapperMarginInlineEnd:n,radioColor:t?d:p,radioBgColor:t?s:d}}),{unitless:{radioSize:!0,dotSize:!0}});const EE=(e,t)=>{var r,n;const o=m.useContext(pE),i=m.useContext(mE),{getPrefixCls:a,direction:s,radio:l}=m.useContext(Xo),c=m.useRef(null),u=Cn(t,c),{isFormItemInput:d}=m.useContext(jf),{prefixCls:f,className:h,rootClassName:p,children:g,style:v,title:b}=e,y=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"className\",\"rootClassName\",\"children\",\"style\",\"title\"]),w=a(\"radio\",f),x=\"button\"===((null==o?void 0:o.optionType)||i),S=x?`${w}-button`:w,C=du(w),[k,E,O]=kE(w,C),A=Object.assign({},y),T=m.useContext(Ss);o&&(A.name=o.name,A.onChange=t=>{var r,n;null===(r=e.onChange)||void 0===r||r.call(e,t),null===(n=null==o?void 0:o.onChange)||void 0===n||n.call(o,t)},A.checked=e.value===o.value,A.disabled=null!==(r=A.disabled)&&void 0!==r?r:o.disabled),A.disabled=null!==(n=A.disabled)&&void 0!==n?n:T;const j=ze()(`${S}-wrapper`,{[`${S}-wrapper-checked`]:A.checked,[`${S}-wrapper-disabled`]:A.disabled,[`${S}-wrapper-rtl`]:\"rtl\"===s,[`${S}-wrapper-in-form-item`]:d,[`${S}-wrapper-block`]:!!(null==o?void 0:o.block)},null==l?void 0:l.className,h,p,E,O,C),[P,M]=wE(A.onClick);return k(m.createElement(MS,{component:\"Radio\",disabled:A.disabled},m.createElement(\"label\",{className:j,style:Object.assign(Object.assign({},null==l?void 0:l.style),v),onMouseEnter:e.onMouseEnter,onMouseLeave:e.onMouseLeave,title:b,onClick:P},m.createElement(yE,Object.assign({},A,{className:ze()(A.className,{[ES]:!x}),type:\"radio\",prefixCls:S,ref:u,onClick:M})),void 0!==g?m.createElement(\"span\",{className:`${S}-label`},g):null)))},OE=m.forwardRef(EE),AE=m.forwardRef(((e,t)=>{const{getPrefixCls:r,direction:n}=m.useContext(Xo),o=Wh(),{prefixCls:i,className:a,rootClassName:s,options:l,buttonStyle:c=\"outline\",disabled:u,children:d,size:f,style:h,id:p,optionType:g,name:v=o,defaultValue:b,value:y,block:w=!1,onChange:x,onMouseEnter:S,onMouseLeave:C,onFocus:k,onBlur:E}=e,[O,A]=Ks(b,{value:y}),T=m.useCallback((t=>{const r=O,n=t.target.value;\"value\"in e||A(n),n!==r&&(null==x||x(t))}),[O,A,x]),j=r(\"radio\",i),P=`${j}-group`,M=du(j),[R,_,I]=kE(j,M);let N=d;l&&l.length>0&&(N=l.map((e=>\"string\"==typeof e||\"number\"==typeof e?m.createElement(OE,{key:e.toString(),prefixCls:j,disabled:u,value:e,checked:O===e},e):m.createElement(OE,{key:`radio-group-value-options-${e.value}`,prefixCls:j,disabled:e.disabled||u,value:e.value,checked:O===e.value,title:e.title,style:e.style,className:e.className,id:e.id,required:e.required},e.label))));const F=Rf(f),D=ze()(P,`${P}-${c}`,{[`${P}-${F}`]:F,[`${P}-rtl`]:\"rtl\"===n,[`${P}-block`]:w},a,s,_,I,M),B=m.useMemo((()=>({onChange:T,value:O,disabled:u,name:v,optionType:g,block:w})),[T,O,u,v,g,w]);return R(m.createElement(\"div\",Object.assign({},Jc(e,{aria:!0,data:!0}),{className:D,style:h,onMouseEnter:S,onMouseLeave:C,onFocus:k,onBlur:E,id:p,ref:t}),m.createElement(hE,{value:B},N)))})),TE=m.memo(AE);const jE=(e,t)=>{const{getPrefixCls:r}=m.useContext(Xo),{prefixCls:n}=e,o=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\"]),i=r(\"radio\",n);return m.createElement(gE,{value:\"button\"},m.createElement(OE,Object.assign({prefixCls:i},o,{type:\"radio\",ref:t})))},PE=m.forwardRef(jE),ME=OE;ME.Button=PE,ME.Group=TE,ME.__ANT_RADIO=!0;const RE=ME;var _E=o(5778),IE=o.n(_E);const NE={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z\"}},{tag:\"path\",attrs:{d:\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z\"}}]},name:\"plus-circle\",theme:\"outlined\"};var FE=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:NE}))};const DE=m.forwardRef(FE),BE=function(e,t){if(e&&t){var r=Array.isArray(t)?t:t.split(\",\"),n=e.name||\"\",o=e.type||\"\",i=o.replace(/\\/.*$/,\"\");return r.some((function(e){var t=e.trim();if(/^\\*(\\/\\*)?$/.test(e))return!0;if(\".\"===t.charAt(0)){var r=n.toLowerCase(),a=t.toLowerCase(),s=[a];return\".jpg\"!==a&&\".jpeg\"!==a||(s=[\".jpg\",\".jpeg\"]),s.some((function(e){return r.endsWith(e)}))}return/\\/\\*$/.test(t)?i===t.replace(/\\/.*$/,\"\"):o===t||!!/^\\w+$/.test(t)&&(Xt(!1,\"Upload takes an invalidate 'accept' type '\".concat(t,\"'.Skip for check.\")),!0)}))}return!0};function LE(e){var t=e.responseText||e.response;if(!t)return t;try{return JSON.parse(t)}catch(e){return t}}function zE(e){var t=new XMLHttpRequest;e.onProgress&&t.upload&&(t.upload.onprogress=function(t){t.total>0&&(t.percent=t.loaded/t.total*100),e.onProgress(t)});var r=new FormData;e.data&&Object.keys(e.data).forEach((function(t){var n=e.data[t];Array.isArray(n)?n.forEach((function(e){r.append(\"\".concat(t,\"[]\"),e)})):r.append(t,n)})),e.file instanceof Blob?r.append(e.filename,e.file,e.file.name):r.append(e.filename,e.file),t.onerror=function(t){e.onError(t)},t.onload=function(){return t.status<200||t.status>=300?e.onError(function(e,t){var r=\"cannot \".concat(e.method,\" \").concat(e.action,\" \").concat(t.status,\"'\"),n=new Error(r);return n.status=t.status,n.method=e.method,n.url=e.action,n}(e,t),LE(t)):e.onSuccess(LE(t),t)},t.open(e.method,e.action,!0),e.withCredentials&&\"withCredentials\"in t&&(t.withCredentials=!0);var n=e.headers||{};return null!==n[\"X-Requested-With\"]&&t.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\"),Object.keys(n).forEach((function(e){null!==n[e]&&t.setRequestHeader(e,n[e])})),t.send(r),{abort:function(){t.abort()}}}const HE=function(){var e=wc(bc().mark((function e(t,r){var n,o,i,a,s,l,c,u;return bc().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:l=function(){return(l=wc(bc().mark((function e(t){return bc().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt(\"return\",new Promise((function(e){t.file((function(n){r(n)?(t.fullPath&&!n.webkitRelativePath&&(Object.defineProperties(n,{webkitRelativePath:{writable:!0}}),n.webkitRelativePath=t.fullPath.replace(/^\\//,\"\"),Object.defineProperties(n,{webkitRelativePath:{writable:!1}})),e(n)):e(null)}))})));case 1:case\"end\":return e.stop()}}),e)})))).apply(this,arguments)},s=function(e){return l.apply(this,arguments)},a=function(){return(a=wc(bc().mark((function e(t){var r,n,o,i,a;return bc().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=t.createReader(),n=[];case 2:return e.next=5,new Promise((function(e){r.readEntries(e,(function(){return e([])}))}));case 5:if(o=e.sent,i=o.length){e.next=9;break}return e.abrupt(\"break\",12);case 9:for(a=0;a<i;a++)n.push(o[a]);e.next=2;break;case 12:return e.abrupt(\"return\",n);case 13:case\"end\":return e.stop()}}),e)})))).apply(this,arguments)},i=function(e){return a.apply(this,arguments)},n=[],o=[],t.forEach((function(e){return o.push(e.webkitGetAsEntry())})),c=function(){var e=wc(bc().mark((function e(t,r){var a,l;return bc().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t){e.next=2;break}return e.abrupt(\"return\");case 2:if(t.path=r||\"\",!t.isFile){e.next=10;break}return e.next=6,s(t);case 6:(a=e.sent)&&n.push(a),e.next=15;break;case 10:if(!t.isDirectory){e.next=15;break}return e.next=13,i(t);case 13:l=e.sent,o.push.apply(o,Vo(l));case 15:case\"end\":return e.stop()}}),e)})));return function(t,r){return e.apply(this,arguments)}}(),u=0;case 9:if(!(u<o.length)){e.next=15;break}return e.next=12,c(o[u]);case 12:u++,e.next=9;break;case 15:return e.abrupt(\"return\",n);case 16:case\"end\":return e.stop()}}),e)})));return function(t,r){return e.apply(this,arguments)}}();var UE=+new Date,VE=0;function WE(){return\"rc-upload-\".concat(UE,\"-\").concat(++VE)}var GE=[\"component\",\"prefixCls\",\"className\",\"classNames\",\"disabled\",\"id\",\"name\",\"style\",\"styles\",\"multiple\",\"accept\",\"capture\",\"children\",\"directory\",\"openFileDialogOnClick\",\"onMouseEnter\",\"onMouseLeave\",\"hasControlInside\"],qE=function(e){Bs(r,e);var t=Us(r);function r(){var e;ei(this,r);for(var n=arguments.length,o=new Array(n),i=0;i<n;i++)o[i]=arguments[i];return De(Hs(e=t.call.apply(t,[this].concat(o))),\"state\",{uid:WE()}),De(Hs(e),\"reqs\",{}),De(Hs(e),\"fileInput\",void 0),De(Hs(e),\"_isMounted\",void 0),De(Hs(e),\"onChange\",(function(t){var r=e.props,n=r.accept,o=r.directory,i=Vo(t.target.files).filter((function(e){return!o||BE(e,n)}));e.uploadFiles(i),e.reset()})),De(Hs(e),\"onClick\",(function(t){var r=e.fileInput;if(r){var n=t.target,o=e.props.onClick;n&&\"BUTTON\"===n.tagName&&(r.parentNode.focus(),n.blur()),r.click(),o&&o(t)}})),De(Hs(e),\"onKeyDown\",(function(t){\"Enter\"===t.key&&e.onClick(t)})),De(Hs(e),\"onFileDropOrPaste\",function(){var t=wc(bc().mark((function t(r){var n,o,i,a,s,l,c,u,d;return bc().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r.preventDefault(),\"dragover\"!==r.type){t.next=3;break}return t.abrupt(\"return\");case 3:if(n=e.props,o=n.multiple,i=n.accept,a=n.directory,s=[],l=[],\"drop\"===r.type?(c=r.dataTransfer,s=Vo(c.items||[]),l=Vo(c.files||[])):\"paste\"===r.type&&(u=r.clipboardData,s=Vo(u.items||[]),l=Vo(u.files||[])),!a){t.next=14;break}return t.next=10,HE(Array.prototype.slice.call(s),(function(t){return BE(t,e.props.accept)}));case 10:l=t.sent,e.uploadFiles(l),t.next=17;break;case 14:d=Vo(l).filter((function(e){return BE(e,i)})),!1===o&&(d=l.slice(0,1)),e.uploadFiles(d);case 17:case\"end\":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}()),De(Hs(e),\"onPrePaste\",(function(t){e.props.pastable&&e.onFileDropOrPaste(t)})),De(Hs(e),\"uploadFiles\",(function(t){var r=Vo(t),n=r.map((function(t){return t.uid=WE(),e.processFile(t,r)}));Promise.all(n).then((function(t){var r=e.props.onBatchStart;null==r||r(t.map((function(e){return{file:e.origin,parsedFile:e.parsedFile}}))),t.filter((function(e){return null!==e.parsedFile})).forEach((function(t){e.post(t)}))}))})),De(Hs(e),\"processFile\",function(){var t=wc(bc().mark((function t(r,n){var o,i,a,s,l,c,u,d,f;return bc().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(o=e.props.beforeUpload,i=r,!o){t.next=14;break}return t.prev=3,t.next=6,o(r,n);case 6:i=t.sent,t.next=12;break;case 9:t.prev=9,t.t0=t.catch(3),i=!1;case 12:if(!1!==i){t.next=14;break}return t.abrupt(\"return\",{origin:r,parsedFile:null,action:null,data:null});case 14:if(\"function\"!=typeof(a=e.props.action)){t.next=21;break}return t.next=18,a(r);case 18:s=t.sent,t.next=22;break;case 21:s=a;case 22:if(\"function\"!=typeof(l=e.props.data)){t.next=29;break}return t.next=26,l(r);case 26:c=t.sent,t.next=30;break;case 29:c=l;case 30:return u=\"object\"!==Ne(i)&&\"string\"!=typeof i||!i?r:i,d=u instanceof File?u:new File([u],r.name,{type:r.type}),(f=d).uid=r.uid,t.abrupt(\"return\",{origin:r,data:c,parsedFile:f,action:s});case 35:case\"end\":return t.stop()}}),t,null,[[3,9]])})));return function(e,r){return t.apply(this,arguments)}}()),De(Hs(e),\"saveFileInput\",(function(t){e.fileInput=t})),e}return ri(r,[{key:\"componentDidMount\",value:function(){this._isMounted=!0,this.props.pastable&&document.addEventListener(\"paste\",this.onPrePaste)}},{key:\"componentWillUnmount\",value:function(){this._isMounted=!1,this.abort(),document.removeEventListener(\"paste\",this.onPrePaste)}},{key:\"componentDidUpdate\",value:function(e){var t=this.props.pastable;t&&!e.pastable?document.addEventListener(\"paste\",this.onPrePaste):!t&&e.pastable&&document.removeEventListener(\"paste\",this.onPrePaste)}},{key:\"post\",value:function(e){var t=this,r=e.data,n=e.origin,o=e.action,i=e.parsedFile;if(this._isMounted){var a=this.props,s=a.onStart,l=a.customRequest,c=a.name,u=a.headers,d=a.withCredentials,f=a.method,h=n.uid,p=l||zE,m={action:o,filename:c,data:r,file:i,headers:u,withCredentials:d,method:f||\"post\",onProgress:function(e){var r=t.props.onProgress;null==r||r(e,i)},onSuccess:function(e,r){var n=t.props.onSuccess;null==n||n(e,i,r),delete t.reqs[h]},onError:function(e,r){var n=t.props.onError;null==n||n(e,r,i),delete t.reqs[h]}};s(n),this.reqs[h]=p(m)}}},{key:\"reset\",value:function(){this.setState({uid:WE()})}},{key:\"abort\",value:function(e){var t=this.reqs;if(e){var r=e.uid?e.uid:e;t[r]&&t[r].abort&&t[r].abort(),delete t[r]}else Object.keys(t).forEach((function(e){t[e]&&t[e].abort&&t[e].abort(),delete t[e]}))}},{key:\"render\",value:function(){var e=this.props,t=e.component,r=e.prefixCls,n=e.className,o=e.classNames,i=void 0===o?{}:o,a=e.disabled,s=e.id,l=e.name,c=e.style,u=e.styles,d=void 0===u?{}:u,f=e.multiple,h=e.accept,p=e.capture,g=e.children,v=e.directory,b=e.openFileDialogOnClick,y=e.onMouseEnter,w=e.onMouseLeave,x=e.hasControlInside,S=Be(e,GE),C=ze()(De(De(De({},r,!0),\"\".concat(r,\"-disabled\"),a),n,n)),k=v?{directory:\"directory\",webkitdirectory:\"webkitdirectory\"}:{},E=a?{}:{onClick:b?this.onClick:function(){},onKeyDown:b?this.onKeyDown:function(){},onMouseEnter:y,onMouseLeave:w,onDrop:this.onFileDropOrPaste,onDragOver:this.onFileDropOrPaste,tabIndex:x?void 0:\"0\"};return m.createElement(t,Te({},E,{className:C,role:x?void 0:\"button\",style:c}),m.createElement(\"input\",Te({},Jc(S,{aria:!0,data:!0}),{id:s,name:l,disabled:a,type:\"file\",ref:this.saveFileInput,onClick:function(e){return e.stopPropagation()},key:this.state.uid,style:At({display:\"none\"},d.input),className:i.input,accept:h},k,{multiple:f,onChange:this.onChange},null!=p?{capture:p}:{})),g)}}]),r}(m.Component);const KE=qE;function XE(){}var YE=function(e){Bs(r,e);var t=Us(r);function r(){var e;ei(this,r);for(var n=arguments.length,o=new Array(n),i=0;i<n;i++)o[i]=arguments[i];return De(Hs(e=t.call.apply(t,[this].concat(o))),\"uploader\",void 0),De(Hs(e),\"saveUploader\",(function(t){e.uploader=t})),e}return ri(r,[{key:\"abort\",value:function(e){this.uploader.abort(e)}},{key:\"render\",value:function(){return m.createElement(KE,Te({},this.props,{ref:this.saveUploader}))}}]),r}(m.Component);De(YE,\"defaultProps\",{component:\"span\",prefixCls:\"rc-upload\",data:{},headers:{},name:\"file\",multipart:!1,onStart:XE,onError:XE,onSuccess:XE,multiple:!1,beforeUpload:null,customRequest:null,withCredentials:!1,openFileDialogOnClick:!0,hasControlInside:!1});const $E=YE,ZE=e=>{const{componentCls:t,iconCls:r}=e;return{[`${t}-wrapper`]:{[`${t}-drag`]:{position:\"relative\",width:\"100%\",height:\"100%\",textAlign:\"center\",background:e.colorFillAlter,border:`${Si(e.lineWidth)} dashed ${e.colorBorder}`,borderRadius:e.borderRadiusLG,cursor:\"pointer\",transition:`border-color ${e.motionDurationSlow}`,[t]:{padding:e.padding},[`${t}-btn`]:{display:\"table\",width:\"100%\",height:\"100%\",outline:\"none\",borderRadius:e.borderRadiusLG,\"&:focus-visible\":{outline:`${Si(e.lineWidthFocus)} solid ${e.colorPrimaryBorder}`}},[`${t}-drag-container`]:{display:\"table-cell\",verticalAlign:\"middle\"},[`\\n          &:not(${t}-disabled):hover,\\n          &-hover:not(${t}-disabled)\\n        `]:{borderColor:e.colorPrimaryHover},[`p${t}-drag-icon`]:{marginBottom:e.margin,[r]:{color:e.colorPrimary,fontSize:e.uploadThumbnailSize}},[`p${t}-text`]:{margin:`0 0 ${Si(e.marginXXS)}`,color:e.colorTextHeading,fontSize:e.fontSizeLG},[`p${t}-hint`]:{color:e.colorTextDescription,fontSize:e.fontSize},[`&${t}-disabled`]:{[`p${t}-drag-icon ${r},\\n            p${t}-text,\\n            p${t}-hint\\n          `]:{color:e.colorTextDisabled}}}}}},QE=e=>{const{componentCls:t,iconCls:r,fontSize:n,lineHeight:o,calc:i}=e,a=`${t}-list-item`,s=`${a}-actions`,l=`${a}-action`;return{[`${t}-wrapper`]:{[`${t}-list`]:Object.assign(Object.assign({},{\"&::before\":{display:\"table\",content:'\"\"'},\"&::after\":{display:\"table\",clear:\"both\",content:'\"\"'}}),{lineHeight:e.lineHeight,[a]:{position:\"relative\",height:i(e.lineHeight).mul(n).equal(),marginTop:e.marginXS,fontSize:n,display:\"flex\",alignItems:\"center\",transition:`background-color ${e.motionDurationSlow}`,borderRadius:e.borderRadiusSM,\"&:hover\":{backgroundColor:e.controlItemBgHover},[`${a}-name`]:Object.assign(Object.assign({},tc),{padding:`0 ${Si(e.paddingXS)}`,lineHeight:o,flex:\"auto\",transition:`all ${e.motionDurationSlow}`}),[s]:{whiteSpace:\"nowrap\",[l]:{opacity:0},[r]:{color:e.actionsColor,transition:`all ${e.motionDurationSlow}`},[`\\n              ${l}:focus-visible,\\n              &.picture ${l}\\n            `]:{opacity:1}},[`${t}-icon ${r}`]:{color:e.colorIcon,fontSize:n},[`${a}-progress`]:{position:\"absolute\",bottom:e.calc(e.uploadProgressOffset).mul(-1).equal(),width:\"100%\",paddingInlineStart:i(n).add(e.paddingXS).equal(),fontSize:n,lineHeight:0,pointerEvents:\"none\",\"> div\":{margin:0}}},[`${a}:hover ${l}`]:{opacity:1},[`${a}-error`]:{color:e.colorError,[`${a}-name, ${t}-icon ${r}`]:{color:e.colorError},[s]:{[`${r}, ${r}:hover`]:{color:e.colorError},[l]:{opacity:1}}},[`${t}-list-item-container`]:{transition:`opacity ${e.motionDurationSlow}, height ${e.motionDurationSlow}`,\"&::before\":{display:\"table\",width:0,height:0,content:'\"\"'}}})}}},JE=e=>{const{componentCls:t}=e,r=new Ba(\"uploadAnimateInlineIn\",{from:{width:0,height:0,padding:0,opacity:0,margin:e.calc(e.marginXS).div(-2).equal()}}),n=new Ba(\"uploadAnimateInlineOut\",{to:{width:0,height:0,padding:0,opacity:0,margin:e.calc(e.marginXS).div(-2).equal()}}),o=`${t}-animate-inline`;return[{[`${t}-wrapper`]:{[`${o}-appear, ${o}-enter, ${o}-leave`]:{animationDuration:e.motionDurationSlow,animationTimingFunction:e.motionEaseInOutCirc,animationFillMode:\"forwards\"},[`${o}-appear, ${o}-enter`]:{animationName:r},[`${o}-leave`]:{animationName:n}}},{[`${t}-wrapper`]:Rk(e)},r,n]},eO=e=>{const{componentCls:t,iconCls:r,uploadThumbnailSize:n,uploadProgressOffset:o,calc:i}=e,a=`${t}-list`,s=`${a}-item`;return{[`${t}-wrapper`]:{[`\\n        ${a}${a}-picture,\\n        ${a}${a}-picture-card,\\n        ${a}${a}-picture-circle\\n      `]:{[s]:{position:\"relative\",height:i(n).add(i(e.lineWidth).mul(2)).add(i(e.paddingXS).mul(2)).equal(),padding:e.paddingXS,border:`${Si(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderRadius:e.borderRadiusLG,\"&:hover\":{background:\"transparent\"},[`${s}-thumbnail`]:Object.assign(Object.assign({},tc),{width:n,height:n,lineHeight:Si(i(n).add(e.paddingSM).equal()),textAlign:\"center\",flex:\"none\",[r]:{fontSize:e.fontSizeHeading2,color:e.colorPrimary},img:{display:\"block\",width:\"100%\",height:\"100%\",overflow:\"hidden\"}}),[`${s}-progress`]:{bottom:o,width:`calc(100% - ${Si(i(e.paddingSM).mul(2).equal())})`,marginTop:0,paddingInlineStart:i(n).add(e.paddingXS).equal()}},[`${s}-error`]:{borderColor:e.colorError,[`${s}-thumbnail ${r}`]:{[`svg path[fill='${at[0]}']`]:{fill:e.colorErrorBg},[`svg path[fill='${at.primary}']`]:{fill:e.colorError}}},[`${s}-uploading`]:{borderStyle:\"dashed\",[`${s}-name`]:{marginBottom:o}}},[`${a}${a}-picture-circle ${s}`]:{[`&, &::before, ${s}-thumbnail`]:{borderRadius:\"50%\"}}}}},tO=e=>{const{componentCls:t,iconCls:r,fontSizeLG:n,colorTextLightSolid:o,calc:i}=e,a=`${t}-list`,s=`${a}-item`,l=e.uploadPicCardSize;return{[`\\n      ${t}-wrapper${t}-picture-card-wrapper,\\n      ${t}-wrapper${t}-picture-circle-wrapper\\n    `]:Object.assign(Object.assign({},{\"&::before\":{display:\"table\",content:'\"\"'},\"&::after\":{display:\"table\",clear:\"both\",content:'\"\"'}}),{display:\"block\",[`${t}${t}-select`]:{width:l,height:l,textAlign:\"center\",verticalAlign:\"top\",backgroundColor:e.colorFillAlter,border:`${Si(e.lineWidth)} dashed ${e.colorBorder}`,borderRadius:e.borderRadiusLG,cursor:\"pointer\",transition:`border-color ${e.motionDurationSlow}`,[`> ${t}`]:{display:\"flex\",alignItems:\"center\",justifyContent:\"center\",height:\"100%\",textAlign:\"center\"},[`&:not(${t}-disabled):hover`]:{borderColor:e.colorPrimary}},[`${a}${a}-picture-card, ${a}${a}-picture-circle`]:{display:\"flex\",flexWrap:\"wrap\",\"@supports not (gap: 1px)\":{\"& > *\":{marginBlockEnd:e.marginXS,marginInlineEnd:e.marginXS}},\"@supports (gap: 1px)\":{gap:e.marginXS},[`${a}-item-container`]:{display:\"inline-block\",width:l,height:l,verticalAlign:\"top\"},\"&::after\":{display:\"none\"},\"&::before\":{display:\"none\"},[s]:{height:\"100%\",margin:0,\"&::before\":{position:\"absolute\",zIndex:1,width:`calc(100% - ${Si(i(e.paddingXS).mul(2).equal())})`,height:`calc(100% - ${Si(i(e.paddingXS).mul(2).equal())})`,backgroundColor:e.colorBgMask,opacity:0,transition:`all ${e.motionDurationSlow}`,content:'\" \"'}},[`${s}:hover`]:{[`&::before, ${s}-actions`]:{opacity:1}},[`${s}-actions`]:{position:\"absolute\",insetInlineStart:0,zIndex:10,width:\"100%\",whiteSpace:\"nowrap\",textAlign:\"center\",opacity:0,transition:`all ${e.motionDurationSlow}`,[`\\n            ${r}-eye,\\n            ${r}-download,\\n            ${r}-delete\\n          `]:{zIndex:10,width:n,margin:`0 ${Si(e.marginXXS)}`,fontSize:n,cursor:\"pointer\",transition:`all ${e.motionDurationSlow}`,color:o,\"&:hover\":{color:o},svg:{verticalAlign:\"baseline\"}}},[`${s}-thumbnail, ${s}-thumbnail img`]:{position:\"static\",display:\"block\",width:\"100%\",height:\"100%\",objectFit:\"contain\"},[`${s}-name`]:{display:\"none\",textAlign:\"center\"},[`${s}-file + ${s}-name`]:{position:\"absolute\",bottom:e.margin,display:\"block\",width:`calc(100% - ${Si(i(e.paddingXS).mul(2).equal())})`},[`${s}-uploading`]:{[`&${s}`]:{backgroundColor:e.colorFillAlter},[`&::before, ${r}-eye, ${r}-download, ${r}-delete`]:{display:\"none\"}},[`${s}-progress`]:{bottom:e.marginXL,width:`calc(100% - ${Si(i(e.paddingXS).mul(2).equal())})`,paddingInlineStart:0}}}),[`${t}-wrapper${t}-picture-circle-wrapper`]:{[`${t}${t}-select`]:{borderRadius:\"50%\"}}}},rO=e=>{const{componentCls:t}=e;return{[`${t}-rtl`]:{direction:\"rtl\"}}},nO=e=>{const{componentCls:t,colorTextDisabled:r}=e;return{[`${t}-wrapper`]:Object.assign(Object.assign({},rc(e)),{[t]:{outline:0,\"input[type='file']\":{cursor:\"pointer\"}},[`${t}-select`]:{display:\"inline-block\"},[`${t}-hidden`]:{display:\"none\"},[`${t}-disabled`]:{color:r,cursor:\"not-allowed\"}})}},oO=Iu(\"Upload\",(e=>{const{fontSizeHeading3:t,fontHeight:r,lineWidth:n,controlHeightLG:o,calc:i}=e,a=Au(e,{uploadThumbnailSize:i(t).mul(2).equal(),uploadProgressOffset:i(i(r).div(2)).add(n).equal(),uploadPicCardSize:i(o).mul(2.55).equal()});return[nO(a),ZE(a),eO(a),tO(a),QE(a),JE(a),rO(a),Dx(a)]}),(e=>({actionsColor:e.colorIcon}))),iO={icon:function(e,t){return{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M534 352V136H232v752h560V394H576a42 42 0 01-42-42z\",fill:t}},{tag:\"path\",attrs:{d:\"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM602 137.8L790.2 326H602V137.8zM792 888H232V136h302v216a42 42 0 0042 42h216v494z\",fill:e}}]}},name:\"file\",theme:\"twotone\"};var aO=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:iO}))};const sO=m.forwardRef(aO),lO={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M779.3 196.6c-94.2-94.2-247.6-94.2-341.7 0l-261 260.8c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l261-260.8c32.4-32.4 75.5-50.2 121.3-50.2s88.9 17.8 121.2 50.2c32.4 32.4 50.2 75.5 50.2 121.2 0 45.8-17.8 88.8-50.2 121.2l-266 265.9-43.1 43.1c-40.3 40.3-105.8 40.3-146.1 0-19.5-19.5-30.2-45.4-30.2-73s10.7-53.5 30.2-73l263.9-263.8c6.7-6.6 15.5-10.3 24.9-10.3h.1c9.4 0 18.1 3.7 24.7 10.3 6.7 6.7 10.3 15.5 10.3 24.9 0 9.3-3.7 18.1-10.3 24.7L372.4 653c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l215.6-215.6c19.9-19.9 30.8-46.3 30.8-74.4s-11-54.6-30.8-74.4c-41.1-41.1-107.9-41-149 0L463 364 224.8 602.1A172.22 172.22 0 00174 724.8c0 46.3 18.1 89.8 50.8 122.5 33.9 33.8 78.3 50.7 122.7 50.7 44.4 0 88.8-16.9 122.6-50.7l309.2-309C824.8 492.7 850 432 850 367.5c.1-64.6-25.1-125.3-70.7-170.9z\"}}]},name:\"paper-clip\",theme:\"outlined\"};var cO=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:lO}))};const uO=m.forwardRef(cO),dO={icon:function(e,t){return{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M928 160H96c-17.7 0-32 14.3-32 32v640c0 17.7 14.3 32 32 32h832c17.7 0 32-14.3 32-32V192c0-17.7-14.3-32-32-32zm-40 632H136v-39.9l138.5-164.3 150.1 178L658.1 489 888 761.6V792zm0-129.8L664.2 396.8c-3.2-3.8-9-3.8-12.2 0L424.6 666.4l-144-170.7c-3.2-3.8-9-3.8-12.2 0L136 652.7V232h752v430.2z\",fill:e}},{tag:\"path\",attrs:{d:\"M424.6 765.8l-150.1-178L136 752.1V792h752v-30.4L658.1 489z\",fill:t}},{tag:\"path\",attrs:{d:\"M136 652.7l132.4-157c3.2-3.8 9-3.8 12.2 0l144 170.7L652 396.8c3.2-3.8 9-3.8 12.2 0L888 662.2V232H136v420.7zM304 280a88 88 0 110 176 88 88 0 010-176z\",fill:t}},{tag:\"path\",attrs:{d:\"M276 368a28 28 0 1056 0 28 28 0 10-56 0z\",fill:t}},{tag:\"path\",attrs:{d:\"M304 456a88 88 0 100-176 88 88 0 000 176zm0-116c15.5 0 28 12.5 28 28s-12.5 28-28 28-28-12.5-28-28 12.5-28 28-28z\",fill:e}}]}},name:\"picture\",theme:\"twotone\"};var fO=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:dO}))};const hO=m.forwardRef(fO);function pO(){const[,e]=m.useReducer((e=>e+1),0);return e}function mO(e){return Object.assign(Object.assign({},e),{lastModified:e.lastModified,lastModifiedDate:e.lastModifiedDate,name:e.name,size:e.size,type:e.type,uid:e.uid,percent:0,originFileObj:e})}function gO(e,t){const r=Vo(t),n=r.findIndex((t=>{let{uid:r}=t;return r===e.uid}));return-1===n?r.push(e):r[n]=e,r}function vO(e,t){const r=void 0!==e.uid?\"uid\":\"name\";return t.filter((t=>t[r]===e[r]))[0]}const bO=e=>0===e.indexOf(\"image/\"),yO=e=>{if(e.type&&!e.thumbUrl)return bO(e.type);const t=e.thumbUrl||e.url||\"\",r=function(){const e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\").split(\"/\"),t=e[e.length-1].split(/#|\\?/)[0];return(/\\.[^./\\\\]*$/.exec(t)||[\"\"])[0]}(t);return!(!/^data:image\\//.test(t)&&!/(webp|svg|png|gif|jpg|jpeg|jfif|bmp|dpg|ico|heic|heif)$/i.test(r))||!/^data:/.test(t)&&!r},wO=200;function xO(e){return new Promise((t=>{if(!e.type||!bO(e.type))return void t(\"\");const r=document.createElement(\"canvas\");r.width=wO,r.height=wO,r.style.cssText=\"position: fixed; left: 0; top: 0; width: 200px; height: 200px; z-index: 9999; display: none;\",document.body.appendChild(r);const n=r.getContext(\"2d\"),o=new Image;if(o.onload=()=>{const{width:e,height:i}=o;let a=wO,s=wO,l=0,c=0;e>i?(s=i*(wO/e),c=-(s-a)/2):(a=e*(wO/i),l=-(a-s)/2),n.drawImage(o,l,c,a,s);const u=r.toDataURL();document.body.removeChild(r),window.URL.revokeObjectURL(o.src),t(u)},o.crossOrigin=\"anonymous\",e.type.startsWith(\"image/svg+xml\")){const t=new FileReader;t.onload=()=>{t.result&&\"string\"==typeof t.result&&(o.src=t.result)},t.readAsDataURL(e)}else if(e.type.startsWith(\"image/gif\")){const r=new FileReader;r.onload=()=>{r.result&&t(r.result)},r.readAsDataURL(e)}else o.src=window.URL.createObjectURL(e)}))}const SO={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z\"}}]},name:\"delete\",theme:\"outlined\"};var CO=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:SO}))};const kO=m.forwardRef(CO),EO={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z\"}}]},name:\"download\",theme:\"outlined\"};var OO=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:EO}))};const AO=m.forwardRef(OO),TO={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z\"}}]},name:\"eye\",theme:\"outlined\"};var jO=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:TO}))};const PO=m.forwardRef(jO);var MO={percent:0,prefixCls:\"rc-progress\",strokeColor:\"#2db7f5\",strokeLinecap:\"round\",strokeWidth:1,trailColor:\"#D9D9D9\",trailWidth:1,gapPosition:\"bottom\"},RO=0,_O=Tt();var IO=function(e){var t=e.bg,r=e.children;return m.createElement(\"div\",{style:{width:\"100%\",height:\"100%\",background:t}},r)};function NO(e,t){return Object.keys(e).map((function(r){var n=parseFloat(r),o=\"\".concat(Math.floor(n*t),\"%\");return\"\".concat(e[r],\" \").concat(o)}))}var FO=m.forwardRef((function(e,t){var r=e.prefixCls,n=e.color,o=e.gradientId,i=e.radius,a=e.style,s=e.ptg,l=e.strokeLinecap,c=e.strokeWidth,u=e.size,d=e.gapDegree,f=n&&\"object\"===Ne(n),h=f?\"#FFF\":void 0,p=u/2,g=m.createElement(\"circle\",{className:\"\".concat(r,\"-circle-path\"),r:i,cx:p,cy:p,stroke:h,strokeLinecap:l,strokeWidth:c,opacity:0===s?0:1,style:a,ref:t});if(!f)return g;var v=\"\".concat(o,\"-conic\"),b=d?\"\".concat(180+d/2,\"deg\"):\"0deg\",y=NO(n,(360-d)/360),w=NO(n,1),x=\"conic-gradient(from \".concat(b,\", \").concat(y.join(\", \"),\")\"),S=\"linear-gradient(to \".concat(d?\"bottom\":\"top\",\", \").concat(w.join(\", \"),\")\");return m.createElement(m.Fragment,null,m.createElement(\"mask\",{id:v},g),m.createElement(\"foreignObject\",{x:0,y:0,width:u,height:u,mask:\"url(#\".concat(v,\")\")},m.createElement(IO,{bg:S},m.createElement(IO,{bg:x}))))}));const DO=FO;var BO=function(e,t,r,n,o,i,a,s,l,c){var u=arguments.length>10&&void 0!==arguments[10]?arguments[10]:0,d=r/100*360*((360-i)/360),f=0===i?0:{bottom:0,top:180,left:90,right:-90}[a],h=(100-n)/100*t;return\"round\"===l&&100!==n&&(h+=c/2)>=t&&(h=t-.01),{stroke:\"string\"==typeof s?s:void 0,strokeDasharray:\"\".concat(t,\"px \").concat(e),strokeDashoffset:h+u,transform:\"rotate(\".concat(o+d+f,\"deg)\"),transformOrigin:\"\".concat(50,\"px \").concat(50,\"px\"),transition:\"stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s, opacity .3s ease 0s\",fillOpacity:0}},LO=[\"id\",\"prefixCls\",\"steps\",\"strokeWidth\",\"trailWidth\",\"gapDegree\",\"gapPosition\",\"trailColor\",\"strokeLinecap\",\"style\",\"className\",\"strokeColor\",\"percent\"];function zO(e){var t=null!=e?e:[];return Array.isArray(t)?t:[t]}const HO=function(e){var t,r,n,o,i,a=At(At({},MO),e),s=a.id,l=a.prefixCls,c=a.steps,u=a.strokeWidth,d=a.trailWidth,f=a.gapDegree,h=void 0===f?0:f,p=a.gapPosition,g=a.trailColor,v=a.strokeLinecap,b=a.style,y=a.className,w=a.strokeColor,x=a.percent,S=Be(a,LO),C=function(e){var t=Ie(m.useState(),2),r=t[0],n=t[1];return m.useEffect((function(){var e;n(\"rc_progress_\".concat((_O?(e=RO,RO+=1):e=\"TEST_OR_SSR\",e)))}),[]),e||r}(s),k=\"\".concat(C,\"-gradient\"),E=50-u/2,O=2*Math.PI*E,A=h>0?90+h/2:-90,T=O*((360-h)/360),j=\"object\"===Ne(c)?c:{count:c,gap:2},P=j.count,M=j.gap,R=zO(x),_=zO(w),I=_.find((function(e){return e&&\"object\"===Ne(e)})),N=I&&\"object\"===Ne(I)?\"butt\":v,F=BO(O,T,0,100,A,h,p,g,N,u),D=(o=(0,m.useRef)([]),i=(0,m.useRef)(null),(0,m.useEffect)((function(){var e=Date.now(),t=!1;o.current.forEach((function(r){if(r){t=!0;var n=r.style;n.transitionDuration=\".3s, .3s, .3s, .06s\",i.current&&e-i.current<100&&(n.transitionDuration=\"0s, 0s\")}})),t&&(i.current=Date.now())})),o.current);return m.createElement(\"svg\",Te({className:ze()(\"\".concat(l,\"-circle\"),y),viewBox:\"0 0 \".concat(100,\" \").concat(100),style:b,id:s,role:\"presentation\"},S),!P&&m.createElement(\"circle\",{className:\"\".concat(l,\"-circle-trail\"),r:E,cx:50,cy:50,stroke:g,strokeLinecap:N,strokeWidth:d||u,style:F}),P?(t=Math.round(P*(R[0]/100)),r=100/P,n=0,new Array(P).fill(null).map((function(e,o){var i=o<=t-1?_[0]:g,a=i&&\"object\"===Ne(i)?\"url(#\".concat(k,\")\"):void 0,s=BO(O,T,n,r,A,h,p,i,\"butt\",u,M);return n+=100*(T-s.strokeDashoffset+M)/T,m.createElement(\"circle\",{key:o,className:\"\".concat(l,\"-circle-path\"),r:E,cx:50,cy:50,stroke:a,strokeWidth:u,opacity:1,style:s,ref:function(e){D[o]=e}})}))):function(){var e=0;return R.map((function(t,r){var n=_[r]||_[_.length-1],o=BO(O,T,e,t,A,h,p,n,N,u);return e+=t,m.createElement(DO,{key:r,color:n,ptg:t,radius:E,prefixCls:l,gradientId:k,style:o,strokeLinecap:N,strokeWidth:u,gapDegree:h,ref:function(e){D[r]=e},size:100})})).reverse()}())};function UO(e){return!e||e<0?0:e>100?100:e}function VO(e){let{success:t,successPercent:r}=e,n=r;return t&&\"progress\"in t&&(n=t.progress),t&&\"percent\"in t&&(n=t.percent),n}const WO=(e,t,r)=>{var n,o,i,a;let s=-1,l=-1;if(\"step\"===t){const t=r.steps,n=r.strokeWidth;\"string\"==typeof e||void 0===e?(s=\"small\"===e?2:14,l=null!=n?n:8):\"number\"==typeof e?[s,l]=[e,e]:[s=14,l=8]=Array.isArray(e)?e:[e.width,e.height],s*=t}else if(\"line\"===t){const t=null==r?void 0:r.strokeWidth;\"string\"==typeof e||void 0===e?l=t||(\"small\"===e?6:8):\"number\"==typeof e?[s,l]=[e,e]:[s=-1,l=8]=Array.isArray(e)?e:[e.width,e.height]}else\"circle\"!==t&&\"dashboard\"!==t||(\"string\"==typeof e||void 0===e?[s,l]=\"small\"===e?[60,60]:[120,120]:\"number\"==typeof e?[s,l]=[e,e]:Array.isArray(e)&&(s=null!==(o=null!==(n=e[0])&&void 0!==n?n:e[1])&&void 0!==o?o:120,l=null!==(a=null!==(i=e[0])&&void 0!==i?i:e[1])&&void 0!==a?a:120));return[s,l]},GO=e=>{const{prefixCls:t,trailColor:r=null,strokeLinecap:n=\"round\",gapPosition:o,gapDegree:i,width:a=120,type:s,children:l,success:c,size:u=a,steps:d}=e,[f,h]=WO(u,\"circle\");let{strokeWidth:p}=e;void 0===p&&(p=Math.max((e=>3/e*100)(f),6));const g={width:f,height:h,fontSize:.15*f+6},v=m.useMemo((()=>i||0===i?i:\"dashboard\"===s?75:void 0),[i,s]),b=(e=>{let{percent:t,success:r,successPercent:n}=e;const o=UO(VO({success:r,successPercent:n}));return[o,UO(UO(t)-o)]})(e),y=o||\"dashboard\"===s&&\"bottom\"||void 0,w=\"[object Object]\"===Object.prototype.toString.call(e.strokeColor),x=(e=>{let{success:t={},strokeColor:r}=e;const{strokeColor:n}=t;return[n||Ze.green,r||null]})({success:c,strokeColor:e.strokeColor}),S=ze()(`${t}-inner`,{[`${t}-circle-gradient`]:w}),C=m.createElement(HO,{steps:d,percent:d?b[1]:b,strokeWidth:p,trailWidth:p,strokeColor:d?x[1]:x,strokeLinecap:n,trailColor:r,prefixCls:t,gapDegree:v,gapPosition:y}),k=f<=20,E=m.createElement(\"div\",{className:S,style:g},C,!k&&l);return k?m.createElement(im,{title:l},E):E},qO=\"--progress-line-stroke-color\",KO=\"--progress-percent\",XO=e=>{const t=e?\"100%\":\"-100%\";return new Ba(`antProgress${e?\"RTL\":\"LTR\"}Active`,{\"0%\":{transform:`translateX(${t}) scaleX(0)`,opacity:.1},\"20%\":{transform:`translateX(${t}) scaleX(0)`,opacity:.5},to:{transform:\"translateX(0) scaleX(1)\",opacity:0}})},YO=e=>{const{componentCls:t,iconCls:r}=e;return{[t]:Object.assign(Object.assign({},rc(e)),{display:\"inline-block\",\"&-rtl\":{direction:\"rtl\"},\"&-line\":{position:\"relative\",width:\"100%\",fontSize:e.fontSize},[`${t}-outer`]:{display:\"inline-flex\",alignItems:\"center\",width:\"100%\"},[`${t}-inner`]:{position:\"relative\",display:\"inline-block\",width:\"100%\",flex:1,overflow:\"hidden\",verticalAlign:\"middle\",backgroundColor:e.remainingColor,borderRadius:e.lineBorderRadius},[`${t}-inner:not(${t}-circle-gradient)`]:{[`${t}-circle-path`]:{stroke:e.defaultColor}},[`${t}-success-bg, ${t}-bg`]:{position:\"relative\",background:e.defaultColor,borderRadius:e.lineBorderRadius,transition:`all ${e.motionDurationSlow} ${e.motionEaseInOutCirc}`},[`${t}-layout-bottom`]:{display:\"flex\",flexDirection:\"column\",alignItems:\"center\",justifyContent:\"center\",[`${t}-text`]:{width:\"max-content\",marginInlineStart:0,marginTop:e.marginXXS}},[`${t}-bg`]:{overflow:\"hidden\",\"&::after\":{content:'\"\"',background:{_multi_value_:!0,value:[\"inherit\",`var(${qO})`]},height:\"100%\",width:`calc(1 / var(${KO}) * 100%)`,display:\"block\"},[`&${t}-bg-inner`]:{minWidth:\"max-content\",\"&::after\":{content:\"none\"},[`${t}-text-inner`]:{color:e.colorWhite,[`&${t}-text-bright`]:{color:\"rgba(0, 0, 0, 0.45)\"}}}},[`${t}-success-bg`]:{position:\"absolute\",insetBlockStart:0,insetInlineStart:0,backgroundColor:e.colorSuccess},[`${t}-text`]:{display:\"inline-block\",marginInlineStart:e.marginXS,color:e.colorText,lineHeight:1,width:\"2em\",whiteSpace:\"nowrap\",textAlign:\"start\",verticalAlign:\"middle\",wordBreak:\"normal\",[r]:{fontSize:e.fontSize},[`&${t}-text-outer`]:{width:\"max-content\"},[`&${t}-text-outer${t}-text-start`]:{width:\"max-content\",marginInlineStart:0,marginInlineEnd:e.marginXS}},[`${t}-text-inner`]:{display:\"flex\",justifyContent:\"center\",alignItems:\"center\",width:\"100%\",height:\"100%\",marginInlineStart:0,padding:`0 ${Si(e.paddingXXS)}`,[`&${t}-text-start`]:{justifyContent:\"start\"},[`&${t}-text-end`]:{justifyContent:\"end\"}},[`&${t}-status-active`]:{[`${t}-bg::before`]:{position:\"absolute\",inset:0,backgroundColor:e.colorBgContainer,borderRadius:e.lineBorderRadius,opacity:0,animationName:XO(),animationDuration:e.progressActiveMotionDuration,animationTimingFunction:e.motionEaseOutQuint,animationIterationCount:\"infinite\",content:'\"\"'}},[`&${t}-rtl${t}-status-active`]:{[`${t}-bg::before`]:{animationName:XO(!0)}},[`&${t}-status-exception`]:{[`${t}-bg`]:{backgroundColor:e.colorError},[`${t}-text`]:{color:e.colorError}},[`&${t}-status-exception ${t}-inner:not(${t}-circle-gradient)`]:{[`${t}-circle-path`]:{stroke:e.colorError}},[`&${t}-status-success`]:{[`${t}-bg`]:{backgroundColor:e.colorSuccess},[`${t}-text`]:{color:e.colorSuccess}},[`&${t}-status-success ${t}-inner:not(${t}-circle-gradient)`]:{[`${t}-circle-path`]:{stroke:e.colorSuccess}}})}},$O=e=>{const{componentCls:t,iconCls:r}=e;return{[t]:{[`${t}-circle-trail`]:{stroke:e.remainingColor},[`&${t}-circle ${t}-inner`]:{position:\"relative\",lineHeight:1,backgroundColor:\"transparent\"},[`&${t}-circle ${t}-text`]:{position:\"absolute\",insetBlockStart:\"50%\",insetInlineStart:0,width:\"100%\",margin:0,padding:0,color:e.circleTextColor,fontSize:e.circleTextFontSize,lineHeight:1,whiteSpace:\"normal\",textAlign:\"center\",transform:\"translateY(-50%)\",[r]:{fontSize:e.circleIconFontSize}},[`${t}-circle&-status-exception`]:{[`${t}-text`]:{color:e.colorError}},[`${t}-circle&-status-success`]:{[`${t}-text`]:{color:e.colorSuccess}}},[`${t}-inline-circle`]:{lineHeight:1,[`${t}-inner`]:{verticalAlign:\"bottom\"}}}},ZO=e=>{const{componentCls:t}=e;return{[t]:{[`${t}-steps`]:{display:\"inline-block\",\"&-outer\":{display:\"flex\",flexDirection:\"row\",alignItems:\"center\"},\"&-item\":{flexShrink:0,minWidth:e.progressStepMinWidth,marginInlineEnd:e.progressStepMarginInlineEnd,backgroundColor:e.remainingColor,transition:`all ${e.motionDurationSlow}`,\"&-active\":{backgroundColor:e.defaultColor}}}}}},QO=e=>{const{componentCls:t,iconCls:r}=e;return{[t]:{[`${t}-small&-line, ${t}-small&-line ${t}-text ${r}`]:{fontSize:e.fontSizeSM}}}},JO=Iu(\"Progress\",(e=>{const t=e.calc(e.marginXXS).div(2).equal(),r=Au(e,{progressStepMarginInlineEnd:t,progressStepMinWidth:t,progressActiveMotionDuration:\"2.4s\"});return[YO(r),$O(r),ZO(r),QO(r)]}),(e=>({circleTextColor:e.colorText,defaultColor:e.colorInfo,remainingColor:e.colorFillSecondary,lineBorderRadius:100,circleTextFontSize:\"1em\",circleIconFontSize:e.fontSize/e.fontSizeSM+\"em\"})));const eA=(e,t)=>{const{from:r=Ze.blue,to:n=Ze.blue,direction:o=(\"rtl\"===t?\"to left\":\"to right\")}=e,i=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"from\",\"to\",\"direction\"]);if(0!==Object.keys(i).length){const e=`linear-gradient(${o}, ${(e=>{let t=[];return Object.keys(e).forEach((r=>{const n=parseFloat(r.replace(/%/g,\"\"));Number.isNaN(n)||t.push({key:n,value:e[r]})})),t=t.sort(((e,t)=>e.key-t.key)),t.map((e=>{let{key:t,value:r}=e;return`${r} ${t}%`})).join(\", \")})(i)})`;return{background:e,[qO]:e}}const a=`linear-gradient(${o}, ${r}, ${n})`;return{background:a,[qO]:a}},tA=e=>{const{prefixCls:t,direction:r,percent:n,size:o,strokeWidth:i,strokeColor:a,strokeLinecap:s=\"round\",children:l,trailColor:c=null,percentPosition:u,success:d}=e,{align:f,type:h}=u,p=a&&\"string\"!=typeof a?eA(a,r):{[qO]:a,background:a},g=\"square\"===s||\"butt\"===s?0:void 0,v=null!=o?o:[-1,i||(\"small\"===o?6:8)],[b,y]=WO(v,\"line\",{strokeWidth:i}),w={backgroundColor:c||void 0,borderRadius:g},x=Object.assign(Object.assign({width:`${UO(n)}%`,height:y,borderRadius:g},p),{[KO]:UO(n)/100}),S=VO(e),C={width:`${UO(S)}%`,height:y,borderRadius:g,backgroundColor:null==d?void 0:d.strokeColor},k={width:b<0?\"100%\":b},E=m.createElement(\"div\",{className:`${t}-inner`,style:w},m.createElement(\"div\",{className:ze()(`${t}-bg`,`${t}-bg-${h}`),style:x},\"inner\"===h&&l),void 0!==S&&m.createElement(\"div\",{className:`${t}-success-bg`,style:C})),O=\"outer\"===h&&\"start\"===f,A=\"outer\"===h&&\"end\"===f;return\"outer\"===h&&\"center\"===f?m.createElement(\"div\",{className:`${t}-layout-bottom`},E,l):m.createElement(\"div\",{className:`${t}-outer`,style:k},O&&l,E,A&&l)},rA=e=>{const{size:t,steps:r,rounding:n=Math.round,percent:o=0,strokeWidth:i=8,strokeColor:a,trailColor:s=null,prefixCls:l,children:c}=e,u=n(r*(o/100)),d=null!=t?t:[\"small\"===t?2:14,i],[f,h]=WO(d,\"step\",{steps:r,strokeWidth:i}),p=f/r,g=Array.from({length:r});for(let e=0;e<r;e++){const t=Array.isArray(a)?a[e]:a;g[e]=m.createElement(\"div\",{key:e,className:ze()(`${l}-steps-item`,{[`${l}-steps-item-active`]:e<=u-1}),style:{backgroundColor:e<=u-1?t:s,width:p,height:h}})}return m.createElement(\"div\",{className:`${l}-steps-outer`},g,c)};const nA=[\"normal\",\"exception\",\"active\",\"success\"],oA=m.forwardRef(((e,t)=>{const{prefixCls:r,className:n,rootClassName:o,steps:i,strokeColor:a,percent:s=0,size:l=\"default\",showInfo:c=!0,type:u=\"line\",status:d,format:f,style:h,percentPosition:p={}}=e,g=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"className\",\"rootClassName\",\"steps\",\"strokeColor\",\"percent\",\"size\",\"showInfo\",\"type\",\"status\",\"format\",\"style\",\"percentPosition\"]),{align:v=\"end\",type:b=\"outer\"}=p,y=Array.isArray(a)?a[0]:a,w=\"string\"==typeof a||Array.isArray(a)?a:void 0,x=m.useMemo((()=>{if(y){const e=\"string\"==typeof y?y:Object.values(y)[0];return new Ge(e).isLight()}return!1}),[a]),S=m.useMemo((()=>{var t,r;const n=VO(e);return parseInt(void 0!==n?null===(t=null!=n?n:0)||void 0===t?void 0:t.toString():null===(r=null!=s?s:0)||void 0===r?void 0:r.toString(),10)}),[s,e.success,e.successPercent]),C=m.useMemo((()=>!nA.includes(d)&&S>=100?\"success\":d||\"normal\"),[d,S]),{getPrefixCls:k,direction:E,progress:O}=m.useContext(Xo),A=k(\"progress\",r),[T,j,P]=JO(A),M=\"line\"===u,R=M&&!i,_=m.useMemo((()=>{if(!c)return null;const t=VO(e);let r;const n=M&&x&&\"inner\"===b;return\"inner\"===b||f||\"exception\"!==C&&\"success\"!==C?r=(f||(e=>`${e}%`))(UO(s),UO(t)):\"exception\"===C?r=M?m.createElement(Lc,null):m.createElement(Vu,null):\"success\"===C&&(r=M?m.createElement(Fc,null):m.createElement($b,null)),m.createElement(\"span\",{className:ze()(`${A}-text`,{[`${A}-text-bright`]:n,[`${A}-text-${v}`]:R,[`${A}-text-${b}`]:R}),title:\"string\"==typeof r?r:void 0},r)}),[c,s,S,C,u,A,f]);let I;\"line\"===u?I=i?m.createElement(rA,Object.assign({},e,{strokeColor:w,prefixCls:A,steps:\"object\"==typeof i?i.count:i}),_):m.createElement(tA,Object.assign({},e,{strokeColor:y,prefixCls:A,direction:E,percentPosition:{align:v,type:b}}),_):\"circle\"!==u&&\"dashboard\"!==u||(I=m.createElement(GO,Object.assign({},e,{strokeColor:y,prefixCls:A,progressStatus:C}),_));const N=ze()(A,`${A}-status-${C}`,{[`${A}-${\"dashboard\"===u?\"circle\":u}`]:\"line\"!==u,[`${A}-inline-circle`]:\"circle\"===u&&WO(l,\"circle\")[0]<=20,[`${A}-line`]:R,[`${A}-line-align-${v}`]:R,[`${A}-line-position-${b}`]:R,[`${A}-steps`]:i,[`${A}-show-info`]:c,[`${A}-${l}`]:\"string\"==typeof l,[`${A}-rtl`]:\"rtl\"===E},null==O?void 0:O.className,n,o,j,P);return T(m.createElement(\"div\",Object.assign({ref:t,style:Object.assign(Object.assign({},null==O?void 0:O.style),h),className:N,role:\"progressbar\",\"aria-valuenow\":S,\"aria-valuemin\":0,\"aria-valuemax\":100},kf(g,[\"trailColor\",\"strokeWidth\",\"width\",\"gapDegree\",\"gapPosition\",\"strokeLinecap\",\"success\",\"successPercent\"])),I))})),iA=oA,aA=m.forwardRef(((e,t)=>{let{prefixCls:r,className:n,style:o,locale:i,listType:a,file:s,items:l,progress:c,iconRender:u,actionIconRender:d,itemRender:f,isImgUrl:h,showPreviewIcon:p,showRemoveIcon:g,showDownloadIcon:v,previewIcon:b,removeIcon:y,downloadIcon:w,extra:x,onPreview:S,onDownload:C,onClose:k}=e;var E,O;const{status:A}=s,[T,j]=m.useState(A);m.useEffect((()=>{\"removed\"!==A&&j(A)}),[A]);const[P,M]=m.useState(!1);m.useEffect((()=>{const e=setTimeout((()=>{M(!0)}),300);return()=>{clearTimeout(e)}}),[]);const R=u(s);let _=m.createElement(\"div\",{className:`${r}-icon`},R);if(\"picture\"===a||\"picture-card\"===a||\"picture-circle\"===a)if(\"uploading\"===T||!s.thumbUrl&&!s.url){const e=ze()(`${r}-list-item-thumbnail`,{[`${r}-list-item-file`]:\"uploading\"!==T});_=m.createElement(\"div\",{className:e},R)}else{const e=(null==h?void 0:h(s))?m.createElement(\"img\",{src:s.thumbUrl||s.url,alt:s.name,className:`${r}-list-item-image`,crossOrigin:s.crossOrigin}):R,t=ze()(`${r}-list-item-thumbnail`,{[`${r}-list-item-file`]:h&&!h(s)});_=m.createElement(\"a\",{className:t,onClick:e=>S(s,e),href:s.url||s.thumbUrl,target:\"_blank\",rel:\"noopener noreferrer\"},e)}const I=ze()(`${r}-list-item`,`${r}-list-item-${T}`),N=\"string\"==typeof s.linkProps?JSON.parse(s.linkProps):s.linkProps,F=(\"function\"==typeof g?g(s):g)?d((\"function\"==typeof y?y(s):y)||m.createElement(kO,null),(()=>k(s)),r,i.removeFile,!0):null,D=(\"function\"==typeof v?v(s):v)&&\"done\"===T?d((\"function\"==typeof w?w(s):w)||m.createElement(AO,null),(()=>C(s)),r,i.downloadFile):null,B=\"picture-card\"!==a&&\"picture-circle\"!==a&&m.createElement(\"span\",{key:\"download-delete\",className:ze()(`${r}-list-item-actions`,{picture:\"picture\"===a})},D,F),L=\"function\"==typeof x?x(s):x,z=L&&m.createElement(\"span\",{className:`${r}-list-item-extra`},L),H=ze()(`${r}-list-item-name`),U=s.url?m.createElement(\"a\",Object.assign({key:\"view\",target:\"_blank\",rel:\"noopener noreferrer\",className:H,title:s.name},N,{href:s.url,onClick:e=>S(s,e)}),s.name,z):m.createElement(\"span\",{key:\"view\",className:H,onClick:e=>S(s,e),title:s.name},s.name,z),V=(\"function\"==typeof p?p(s):p)&&(s.url||s.thumbUrl)?m.createElement(\"a\",{href:s.url||s.thumbUrl,target:\"_blank\",rel:\"noopener noreferrer\",onClick:e=>S(s,e),title:i.previewFile},\"function\"==typeof b?b(s):b||m.createElement(PO,null)):null,W=(\"picture-card\"===a||\"picture-circle\"===a)&&\"uploading\"!==T&&m.createElement(\"span\",{className:`${r}-list-item-actions`},V,\"done\"===T&&D,F),{getPrefixCls:G}=m.useContext(Xo),q=G(),K=m.createElement(\"div\",{className:I},_,U,B,W,P&&m.createElement(Vl,{motionName:`${q}-fade`,visible:\"uploading\"===T,motionDeadline:2e3},(e=>{let{className:t}=e;const n=\"percent\"in s?m.createElement(iA,Object.assign({},c,{type:\"line\",percent:s.percent,\"aria-label\":s[\"aria-label\"],\"aria-labelledby\":s[\"aria-labelledby\"]})):null;return m.createElement(\"div\",{className:ze()(`${r}-list-item-progress`,t)},n)}))),X=s.response&&\"string\"==typeof s.response?s.response:(null===(E=s.error)||void 0===E?void 0:E.statusText)||(null===(O=s.error)||void 0===O?void 0:O.message)||i.uploadError,Y=\"error\"===T?m.createElement(im,{title:X,getPopupContainer:e=>e.parentNode},K):K;return m.createElement(\"div\",{className:ze()(`${r}-list-item-container`,n),style:o,ref:t},f?f(Y,s,l,{download:C.bind(null,s),preview:S.bind(null,s),remove:k.bind(null,s)}):Y)})),sA=aA,lA=(e,t)=>{const{listType:r=\"text\",previewFile:n=xO,onPreview:o,onDownload:i,onRemove:a,locale:s,iconRender:l,isImageUrl:c=yO,prefixCls:u,items:d=[],showPreviewIcon:f=!0,showRemoveIcon:h=!0,showDownloadIcon:p=!1,removeIcon:g,previewIcon:v,downloadIcon:b,extra:y,progress:w={size:[-1,2],showInfo:!1},appendAction:x,appendActionVisible:S=!0,itemRender:C,disabled:k}=e,E=pO(),[O,A]=m.useState(!1),T=[\"picture-card\",\"picture-circle\"].includes(r);m.useEffect((()=>{r.startsWith(\"picture\")&&(d||[]).forEach((e=>{(e.originFileObj instanceof File||e.originFileObj instanceof Blob)&&void 0===e.thumbUrl&&(e.thumbUrl=\"\",null==n||n(e.originFileObj).then((t=>{e.thumbUrl=t||\"\",E()})))}))}),[r,d,n]),m.useEffect((()=>{A(!0)}),[]);const j=(e,t)=>{if(o)return null==t||t.preventDefault(),o(e)},P=e=>{\"function\"==typeof i?i(e):e.url&&window.open(e.url)},M=e=>{null==a||a(e)},R=e=>{if(l)return l(e,r);const t=\"uploading\"===e.status;if(r.startsWith(\"picture\")){const n=\"picture\"===r?m.createElement(Xc,null):s.uploading,o=(null==c?void 0:c(e))?m.createElement(hO,null):m.createElement(sO,null);return t?n:o}return t?m.createElement(Xc,null):m.createElement(uO,null)},_=(e,t,r,n,o)=>{const i={type:\"text\",size:\"small\",title:n,onClick:r=>{var n,o;t(),m.isValidElement(e)&&(null===(o=(n=e.props).onClick)||void 0===o||o.call(n,r))},className:`${r}-list-item-action`,disabled:!!o&&k};return m.isValidElement(e)?m.createElement(AC,Object.assign({},i,{icon:th(e,Object.assign(Object.assign({},e.props),{onClick:()=>{}}))})):m.createElement(AC,Object.assign({},i),m.createElement(\"span\",null,e))};m.useImperativeHandle(t,(()=>({handlePreview:j,handleDownload:P})));const{getPrefixCls:I}=m.useContext(Xo),N=I(\"upload\",u),F=I(),D=ze()(`${N}-list`,`${N}-list-${r}`),B=m.useMemo((()=>kf(Jf(F),[\"onAppearEnd\",\"onEnterEnd\",\"onLeaveEnd\"])),[F]),L=Object.assign(Object.assign({},T?{}:B),{motionDeadline:2e3,motionName:`${N}-${T?\"animate-inline\":\"animate\"}`,keys:Vo(d.map((e=>({key:e.uid,file:e})))),motionAppear:O});return m.createElement(\"div\",{className:D},m.createElement(Ul,Object.assign({},L,{component:!1}),(e=>{let{key:t,file:n,className:o,style:i}=e;return m.createElement(sA,{key:t,locale:s,prefixCls:N,className:o,style:i,file:n,items:d,progress:w,listType:r,isImgUrl:c,showPreviewIcon:f,showRemoveIcon:h,showDownloadIcon:p,removeIcon:g,previewIcon:v,downloadIcon:b,extra:y,iconRender:R,actionIconRender:_,itemRender:C,onPreview:j,onDownload:P,onClose:M})})),x&&m.createElement(Vl,Object.assign({},L,{visible:S,forceRender:!0}),(e=>{let{className:t,style:r}=e;return th(x,(e=>({className:ze()(e.className,t),style:Object.assign(Object.assign(Object.assign({},r),{pointerEvents:t?\"none\":void 0}),e.style)})))})))},cA=m.forwardRef(lA);const uA=`__LIST_IGNORE_${Date.now()}__`,dA=(e,t)=>{const{fileList:r,defaultFileList:n,onRemove:o,showUploadList:i=!0,listType:a=\"text\",onPreview:s,onDownload:l,onChange:c,onDrop:u,previewFile:d,disabled:f,locale:h,iconRender:p,isImageUrl:g,progress:v,prefixCls:b,className:y,type:w=\"select\",children:x,style:S,itemRender:C,maxCount:k,data:E={},multiple:O=!1,hasControlInside:A=!0,action:T=\"\",accept:j=\"\",supportServerRender:P=!0,rootClassName:M}=e,R=m.useContext(Ss),_=null!=f?f:R,[I,N]=Ks(n||[],{value:r,postState:e=>null!=e?e:[]}),[F,D]=m.useState(\"drop\"),B=m.useRef(null),L=m.useRef(null);m.useMemo((()=>{const e=Date.now();(r||[]).forEach(((t,r)=>{t.uid||Object.isFrozen(t)||(t.uid=`__AUTO__${e}_${r}__`)}))}),[r]);const z=(e,t,r)=>{let n=Vo(t),o=!1;1===k?n=n.slice(-1):k&&(o=n.length>k,n=n.slice(0,k)),(0,js.flushSync)((()=>{N(n)}));const i={file:e,fileList:n};r&&(i.event=r),o&&\"removed\"!==e.status&&!n.some((t=>t.uid===e.uid))||(0,js.flushSync)((()=>{null==c||c(i)}))},H=e=>{const t=e.filter((e=>!e.file[uA]));if(!t.length)return;const r=t.map((e=>mO(e.file)));let n=Vo(I);r.forEach((e=>{n=gO(e,n)})),r.forEach(((e,r)=>{let o=e;if(t[r].parsedFile)e.status=\"uploading\";else{const{originFileObj:t}=e;let r;try{r=new File([t],t.name,{type:t.type})}catch(e){r=new Blob([t],{type:t.type}),r.name=t.name,r.lastModifiedDate=new Date,r.lastModified=(new Date).getTime()}r.uid=e.uid,o=r}z(o,n)}))},U=(e,t,r)=>{try{\"string\"==typeof e&&(e=JSON.parse(e))}catch(e){}if(!vO(t,I))return;const n=mO(t);n.status=\"done\",n.percent=100,n.response=e,n.xhr=r;const o=gO(n,I);z(n,o)},V=(e,t)=>{if(!vO(t,I))return;const r=mO(t);r.status=\"uploading\",r.percent=e.percent;const n=gO(r,I);z(r,n,e)},W=(e,t,r)=>{if(!vO(r,I))return;const n=mO(r);n.error=e,n.response=t,n.status=\"error\";const o=gO(n,I);z(n,o)},G=e=>{let t;Promise.resolve(\"function\"==typeof o?o(e):o).then((r=>{var n;if(!1===r)return;const o=function(e,t){const r=void 0!==e.uid?\"uid\":\"name\",n=t.filter((t=>t[r]!==e[r]));return n.length===t.length?null:n}(e,I);o&&(t=Object.assign(Object.assign({},e),{status:\"removed\"}),null==I||I.forEach((e=>{const r=void 0!==t.uid?\"uid\":\"name\";e[r]!==t[r]||Object.isFrozen(e)||(e.status=\"removed\")})),null===(n=B.current)||void 0===n||n.abort(t),z(t,o))}))},q=e=>{D(e.type),\"drop\"===e.type&&(null==u||u(e))};m.useImperativeHandle(t,(()=>({onBatchStart:H,onSuccess:U,onProgress:V,onError:W,fileList:I,upload:B.current,nativeElement:L.current})));const{getPrefixCls:K,direction:X,upload:Y}=m.useContext(Xo),$=K(\"upload\",b),Z=Object.assign(Object.assign({onBatchStart:H,onError:W,onProgress:V,onSuccess:U},e),{data:E,multiple:O,action:T,accept:j,supportServerRender:P,prefixCls:$,disabled:_,beforeUpload:(t,r)=>{return n=void 0,o=void 0,a=function*(){const{beforeUpload:n,transformFile:o}=e;let i=t;if(n){const e=yield n(t,r);if(!1===e)return!1;if(delete t[uA],e===uA)return Object.defineProperty(t,uA,{value:!0,configurable:!0}),!1;\"object\"==typeof e&&e&&(i=e)}return o&&(i=yield o(i)),i},new((i=void 0)||(i=Promise))((function(e,t){function r(e){try{l(a.next(e))}catch(e){t(e)}}function s(e){try{l(a.throw(e))}catch(e){t(e)}}function l(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i((function(e){e(n)}))).then(r,s)}l((a=a.apply(n,o||[])).next())}));var n,o,i,a},onChange:void 0,hasControlInside:A});delete Z.className,delete Z.style,x&&!_||delete Z.id;const Q=`${$}-wrapper`,[J,ee,te]=oO($,Q),[re]=Gv(\"Upload\",ts.Upload),{showRemoveIcon:ne,showPreviewIcon:oe,showDownloadIcon:ie,removeIcon:ae,previewIcon:se,downloadIcon:le,extra:ce}=\"boolean\"==typeof i?{}:i,ue=void 0===ne?!_:ne,de=(e,t)=>i?m.createElement(cA,{prefixCls:$,listType:a,items:I,previewFile:d,onPreview:s,onDownload:l,onRemove:G,showRemoveIcon:ue,showPreviewIcon:oe,showDownloadIcon:ie,removeIcon:ae,previewIcon:se,downloadIcon:le,iconRender:p,extra:ce,locale:Object.assign(Object.assign({},re),h),isImageUrl:g,progress:v,appendAction:e,appendActionVisible:t,itemRender:C,disabled:_}):e,fe=ze()(Q,y,M,ee,te,null==Y?void 0:Y.className,{[`${$}-rtl`]:\"rtl\"===X,[`${$}-picture-card-wrapper`]:\"picture-card\"===a,[`${$}-picture-circle-wrapper`]:\"picture-circle\"===a}),he=Object.assign(Object.assign({},null==Y?void 0:Y.style),S);if(\"drag\"===w){const e=ze()(ee,$,`${$}-drag`,{[`${$}-drag-uploading`]:I.some((e=>\"uploading\"===e.status)),[`${$}-drag-hover`]:\"dragover\"===F,[`${$}-disabled`]:_,[`${$}-rtl`]:\"rtl\"===X});return J(m.createElement(\"span\",{className:fe,ref:L},m.createElement(\"div\",{className:e,style:he,onDrop:q,onDragOver:q,onDragLeave:q},m.createElement($E,Object.assign({},Z,{ref:B,className:`${$}-btn`}),m.createElement(\"div\",{className:`${$}-drag-container`},x))),de()))}const pe=ze()($,`${$}-select`,{[`${$}-disabled`]:_,[`${$}-hidden`]:!x}),me=m.createElement(\"div\",{className:pe},m.createElement($E,Object.assign({},Z,{ref:B})));return J(\"picture-card\"===a||\"picture-circle\"===a?m.createElement(\"span\",{className:fe,ref:L},de(me,!!x)):m.createElement(\"span\",{className:fe,ref:L},me,de()))},fA=m.forwardRef(dA);const hA=m.forwardRef(((e,t)=>{var{style:r,height:n,hasControlInside:o=!1}=e,i=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"style\",\"height\",\"hasControlInside\"]);return m.createElement(fA,Object.assign({ref:t,hasControlInside:o},i,{type:\"drag\",style:Object.assign(Object.assign({},r),{height:n})}))})),pA=hA;var mA=function(e,t){return mA=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])},mA(e,t)};function gA(e,t){function r(){this.constructor=e}mA(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var vA=function(){return vA=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},vA.apply(this,arguments)};function bA(e,t,r,n){return new(r||(r=Promise))((function(o,i){function a(e){try{l(n.next(e))}catch(e){i(e)}}function s(e){try{l(n.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,s)}l((n=n.apply(e,t||[])).next())}))}function yA(e,t){var r,n,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},\"function\"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(r)throw new TypeError(\"Generator is already executing.\");for(;a;)try{if(r=1,n&&(o=2&i[0]?n.return:i[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,i[1])).done)return o;switch(n=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,n=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],n=0}finally{r=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,s])}}}function wA(){for(var e=0,t=0,r=arguments.length;t<r;t++)e+=arguments[t].length;var n=Array(e),o=0;for(t=0;t<r;t++)for(var i=arguments[t],a=0,s=i.length;a<s;a++,o++)n[o]=i[a];return n}for(var xA=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",SA=new Uint8Array(256),CA=0;CA<64;CA++)SA[xA.charCodeAt(CA)]=CA;var kA,EA=function(e){var t,r,n,o,i,a=.75*e.length,s=e.length,l=0;\"=\"===e[e.length-1]&&(a--,\"=\"===e[e.length-2]&&a--);var c=new Uint8Array(a);for(t=0;t<s;t+=4)r=SA[e.charCodeAt(t)],n=SA[e.charCodeAt(t+1)],o=SA[e.charCodeAt(t+2)],i=SA[e.charCodeAt(t+3)],c[l++]=r<<2|n>>4,c[l++]=(15&n)<<4|o>>2,c[l++]=(3&o)<<6|63&i;return c},OA=/^(data)?:?([\\w\\/\\+]+)?;?(charset=[\\w-]+|base64)?.*,/i,AA=function(e){return e.charCodeAt(0)},TA=function(e){return e.codePointAt(0)},jA=function(e,t){return RA(e.toString(16),t,\"0\").toUpperCase()},PA=function(e){return jA(e,2)},MA=function(e){return String.fromCharCode(e)},RA=function(e,t,r){for(var n=\"\",o=0,i=t-e.length;o<i;o++)n+=r;return n+e},_A=function(e,t,r){for(var n=e.length,o=0;o<n;o++)t[r++]=e.charCodeAt(o);return n},IA=function(e){return e.replace(/\\t|\\u0085|\\u2028|\\u2029/g,\"    \").replace(/[\\b\\v]/g,\"\")},NA=[\"\\\\n\",\"\\\\f\",\"\\\\r\",\"\\\\u000B\"],FA=function(e){return/^[\\n\\f\\r\\u000B]$/.test(e)},DA=function(e){return e.split(/[\\n\\f\\r\\u000B]/)},BA=function(e){return e.replace(/[\\n\\f\\r\\u000B]/g,\" \")},LA=function(e,t){var r,n=e.charCodeAt(t),o=t+1,i=1;return n>=55296&&n<=56319&&e.length>o&&(r=e.charCodeAt(o))>=56320&&r<=57343&&(i=2),[e.slice(t,t+i),i]},zA=/^D:(\\d\\d\\d\\d)(\\d\\d)?(\\d\\d)?(\\d\\d)?(\\d\\d)?(\\d\\d)?([+\\-Z])?(\\d\\d)?'?(\\d\\d)?'?$/,HA=function(e){var t=e.match(zA);if(t){var r=t[1],n=t[2],o=void 0===n?\"01\":n,i=t[3],a=void 0===i?\"01\":i,s=t[4],l=void 0===s?\"00\":s,c=t[5],u=void 0===c?\"00\":c,d=t[6],f=void 0===d?\"00\":d,h=t[7],p=void 0===h?\"Z\":h,m=t[8],g=void 0===m?\"00\":m,v=t[9];return new Date(r+\"-\"+o+\"-\"+a+\"T\"+l+\":\"+u+\":\"+f+(\"Z\"===p?\"Z\":\"\"+p+g+\":\"+(void 0===v?\"00\":v)))}},UA=function(e,t){for(var r,n,o=0;o<e.length;){var i=e.substring(o).match(t);if(!i)return{match:n,pos:o};n=i,o+=(null!==(r=i.index)&&void 0!==r?r:0)+i[0].length}return{match:n,pos:o}},VA=function(e){return e[e.length-1]},WA=function(e){if(e instanceof Uint8Array)return e;for(var t=e.length,r=new Uint8Array(t),n=0;n<t;n++)r[n]=e.charCodeAt(n);return r},GA=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var r=e.length,n=[],o=0;o<r;o++){var i=e[o];n[o]=i instanceof Uint8Array?i:WA(i)}var a=0;for(o=0;o<r;o++)a+=e[o].length;for(var s=new Uint8Array(a),l=0,c=0;c<r;c++)for(var u=n[c],d=0,f=u.length;d<f;d++)s[l++]=u[d];return s},qA=function(e){for(var t=\"\",r=0,n=e.length;r<n;r++)t+=MA(e[r]);return t},KA=function(e,t){return e.id-t.id},XA=function(e){for(var t=e.length,r=0,n=Math.floor(t/2);r<n;r++){var o=r,i=t-r-1,a=e[r];e[o]=e[i],e[i]=a}return e},YA=function(e){if(\"string\"==typeof e)return function(e){var t=e.trim(),r=t.substring(0,100).match(OA);if(!r)return EA(t);var n=r[0],o=t.substring(n.length);return EA(o)}(e);if(e instanceof ArrayBuffer)return new Uint8Array(e);if(e instanceof Uint8Array)return e;throw new TypeError(\"`input` must be one of `string | ArrayBuffer | Uint8Array`\")},$A=function(){return new Promise((function(e){setTimeout((function(){return e()}),0)}))},ZA=function(e){return Math.floor((e-65536)/1024)+55296},QA=function(e){return(e-65536)%1024+56320};!function(e){e.BigEndian=\"BigEndian\",e.LittleEndian=\"LittleEndian\"}(kA||(kA={}));for(var JA=\"�\".codePointAt(0),eT=function(e,t){if(void 0===t&&(t=!0),e.length<=1)return String.fromCodePoint(JA);for(var r=t?oT(e):kA.BigEndian,n=t?2:0,o=[];e.length-n>=2;){var i=nT(e[n++],e[n++],r);if(tT(i))if(e.length-n<2)o.push(JA);else{var a=nT(e[n++],e[n++],r);rT(a)?o.push(i,a):o.push(JA)}else rT(i)?(n+=2,o.push(JA)):o.push(i)}return n<e.length&&o.push(JA),String.fromCodePoint.apply(String,o)},tT=function(e){return e>=55296&&e<=56319},rT=function(e){return e>=56320&&e<=57343},nT=function(e,t,r){if(r===kA.LittleEndian)return t<<8|e;if(r===kA.BigEndian)return e<<8|t;throw new Error(\"Invalid byteOrder: \"+r)},oT=function(e){return iT(e)?kA.BigEndian:aT(e)?kA.LittleEndian:kA.BigEndian},iT=function(e){return 254===e[0]&&255===e[1]},aT=function(e){return 255===e[0]&&254===e[1]},sT=function(e){return iT(e)||aT(e)},lT=function(e){return Math.ceil(e.toString(2).length/8)},cT=function(e){for(var t=new Uint8Array(lT(e)),r=1;r<=t.length;r++)t[r-1]=e>>8*(t.length-r);return t},uT=function(e){throw new Error(e)},dT=o(1668),fT=o.n(dT),hT=new Uint8Array(256),pT=0;pT<64;pT++)hT[\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\".charCodeAt(pT)]=pT;var mT,gT=function(e){return function(e){for(var t=\"\",r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return t}(fT().inflate(function(e){var t,r,n,o,i,a=.75*e.length,s=e.length,l=0;\"=\"===e[e.length-1]&&(a--,\"=\"===e[e.length-2]&&a--);var c=new Uint8Array(a);for(t=0;t<s;t+=4)r=hT[e.charCodeAt(t)],n=hT[e.charCodeAt(t+1)],o=hT[e.charCodeAt(t+2)],i=hT[e.charCodeAt(t+3)],c[l++]=r<<2|n>>4,c[l++]=(15&n)<<4|o>>2,c[l++]=(3&o)<<6|63&i;return c}(e)))},vT={Courier:\"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\",\"Courier-Bold\":\"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\",\"Courier-Oblique\":\"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\",\"Courier-BoldOblique\":\"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\",Helvetica:\"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\",\"Helvetica-Bold\":\"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\",\"Helvetica-Oblique\":\"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\",\"Helvetica-BoldOblique\":\"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\",\"Times-Roman\":\"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\",\"Times-Bold\":\"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\",\"Times-Italic\":\"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\",\"Times-BoldItalic\":\"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\",Symbol:\"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\",ZapfDingbats:\"eJxtmNtu20YQhl+F4FULyMGeD7pz3AY1ChtG7NpFA18w1NomIlECSRcxgrx7SVk7+wOdG8H5OJydf2Z2d5gf9cV+t0v9VK/r+6vXsXlOlbHe28paq229qj/t++m62aXZ4J/m8PRb1z9/baZxefK63Z6eXN5dVMvTCh83u277xr/6kLrnl2XNq7TpXnczuZyabdee98/b2VzM/x4/dd/T5qab2pd6PQ2vaVVfvDRD005puE3Lu7eH1HbN9hTjx4/77/X6y5lcnUmjVzHIVVDicVX/1W/SsO36dLMfu6nb9/X6TAoBD+5euvZbn8axXtuZ36dhPJrVQqgPQoh5hev91LWLkIv94W1Ygq9+aX+tZAx2tfz64284/sblN/rqfLP/mqrbt3FKu7G67Nv9cNgPzZQ2H6rz7bb6vLgZq89pTMO/M/xfEqturJpqSM/d7GJIm2oamk3aNcO3av80O5xh3yyKmm1193ZIT02bqovTKjP+MAf++7zsZvZ3276kYyWWXB0z99S18/PbafPHQ71W4fjn/fxnFO+ZvkrT0LVzTr78qB/+nk38bHM9exgP8zr1z9U7jt6840YW5uSJKcZOCaBBnKgm5mU8MVNYyMwWFvO7Ukagkmgg6sDWQ5yFFqjzUrLEaQ3BEmiwNsMSaZS0vgWfOkPHWQowNeTUc0kumnxZvsgPxlGai6VTGUqAVCTQ6QkWnc77DKEiLktSUBJKqHIQZ86d8gCpHYoiEzMsb1ubYy8vW50DChB5ZhGqrijD0EqUIeiaEHIfCg5Kpuu0ApiToaGPSY0uaQsyr65L2oKi1yFt1PLaQ3lzfXTgXodGoJYzglndSLDMPg1sTPJpQJHJigw0QrGERqD9YhyTOgONQDUyuF1zaxuokc/BW2ztXCMrGZ9WMW1oQZHIXWNBkSCfRZEL5BMUiZw6CzVSFCfUSGZFNjIldoKDkonTKQiJIGzWmFd3BizJJ9SINoLDriOfUCOZS+zg+KGD1qGiLNMLxtJD1/ns00ON6EzyUCM6vbxhoBKaqbG3DFQCNiL1iHccBPV0DHhQH/JW8EW90dkyFKGywCJU0WkVSvSGeiSUODWFFD0HYdPQVoiRgfPMA+/nnRgiAyNYSjpWNQcNSMrtFCUH4ZIRpSCWocFCSuhCEY6hoUClc0WC52BJlCYYLQdhN+hygRRRlo5BKRRLS6oihSqh+ZzzRGG1Mo4Iz1LoP0qsxDGFzk0JE42ji0jCPejomJKCuwil4m5CiRMEUMVSzVLDUstSx1Juc0oVWMpqY295qVltmtWmWW2a1aZZbZrVplltmtWmWW2G1WZYbYbVZlhthtVmWG2G1WZYbYbVZlhtltVmWW2W1WZZbZbVZlltltVmWW2W1QYjQCh7E2aAQHeGhCFgPoNoy8KNb2wxBhmGKBxoUZXlLGsLI6AsftEDHV0wIURVbANLcTKlGGBIKPOAxCmhePCKUwFzAmpDFRQvjA9R06Hq8TONvshgKDCuRAZTXigUxjxNFfKRo3CLhnIJBMFRvMZpqpNBMlQJzGT5WFQMVQI/AikPMIhEU1aDjqJvQwmjSHB05cC9jbYwc5UtAHNLhDw41ha+lEqF4JaH3gmB61SYcqInxTDmQK8v08vjqv4zDf1N0w3Lf4A8/vwPpfK11w==\"};!function(e){e.Courier=\"Courier\",e.CourierBold=\"Courier-Bold\",e.CourierOblique=\"Courier-Oblique\",e.CourierBoldOblique=\"Courier-BoldOblique\",e.Helvetica=\"Helvetica\",e.HelveticaBold=\"Helvetica-Bold\",e.HelveticaOblique=\"Helvetica-Oblique\",e.HelveticaBoldOblique=\"Helvetica-BoldOblique\",e.TimesRoman=\"Times-Roman\",e.TimesRomanBold=\"Times-Bold\",e.TimesRomanItalic=\"Times-Italic\",e.TimesRomanBoldItalic=\"Times-BoldItalic\",e.Symbol=\"Symbol\",e.ZapfDingbats=\"ZapfDingbats\"}(mT||(mT={}));for(var bT={},yT=function(){function e(){var e=this;this.getWidthOfGlyph=function(t){return e.CharWidths[t]},this.getXAxisKerningForPair=function(t,r){return(e.KernPairXAmounts[t]||{})[r]}}return e.load=function(t){var r=bT[t];if(r)return r;var n=gT(vT[t]),o=Object.assign(new e,JSON.parse(n));return o.CharWidths=o.CharMetrics.reduce((function(e,t){return e[t.N]=t.WX,e}),{}),o.KernPairXAmounts=o.KernPairs.reduce((function(e,t){var r=t[0],n=t[1],o=t[2];return e[r]||(e[r]={}),e[r][n]=o,e}),{}),bT[t]=o,o},e}(),wT=gT(\"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\"),xT=JSON.parse(wT),ST=function(e,t){var r=this;this.canEncodeUnicodeCodePoint=function(e){return e in r.unicodeMappings},this.encodeUnicodeCodePoint=function(e){var t=r.unicodeMappings[e];if(!t){var n=String.fromCharCode(e),o=\"0x\"+function(e){for(var t=\"\",r=0,n=4-e.length;r<n;r++)t+=\"0\";return t+e}(e.toString(16)),i=r.name+' cannot encode \"'+n+'\" ('+o+\")\";throw new Error(i)}return{code:t[0],name:t[1]}},this.name=e,this.supportedCodePoints=Object.keys(t).map(Number).sort((function(e,t){return e-t})),this.unicodeMappings=t},CT={Symbol:new ST(\"Symbol\",xT.symbol),ZapfDingbats:new ST(\"ZapfDingbats\",xT.zapfdingbats),WinAnsi:new ST(\"WinAnsi\",xT.win1252)},kT=function(e){return Object.keys(e).map((function(t){return e[t]}))},ET=kT(mT),OT=function(e){return ET.includes(e)},AT=function(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height},TT=function(e){return\"`\"+e+\"`\"},jT=function(e){var t=typeof e;return\"string\"===t?\"'\"+e+\"'\":\"undefined\"===t?TT(e):e},PT=function(e,t,r){Array.isArray(r)||(r=kT(r));for(var n=0,o=r.length;n<o;n++)if(e===r[n])return;throw new TypeError(function(e,t,r){for(var n=new Array(r.length),o=0,i=r.length;o<i;o++){var a=r[o];n[o]=jT(a)}var s=n.join(\" or \");return TT(t)+\" must be one of \"+s+\", but was actually \"+jT(e)}(e,t,r))},MT=function(e,t,r){Array.isArray(r)||(r=kT(r)),PT(e,t,r.concat(void 0))},RT=function(e,t){return\"null\"===t?null===e:\"undefined\"===t?void 0===e:\"string\"===t?\"string\"==typeof e:\"number\"===t?\"number\"==typeof e&&!isNaN(e):\"boolean\"===t?\"boolean\"==typeof e:\"symbol\"===t?\"symbol\"==typeof e:\"bigint\"===t?\"bigint\"==typeof e:t===Date?e instanceof Date:t===Array?e instanceof Array:t===Uint8Array?e instanceof Uint8Array:t===ArrayBuffer?e instanceof ArrayBuffer:t===Function?e instanceof Function:e instanceof t[0]},_T=function(e,t,r){for(var n=0,o=r.length;n<o;n++)if(RT(e,r[n]))return;throw new TypeError(function(e,t,r){for(var n=new Array(r.length),o=0,i=r.length;o<i;o++){var a=r[o];\"null\"===a&&(n[o]=TT(\"null\")),\"undefined\"===a&&(n[o]=TT(\"undefined\")),\"string\"===a?n[o]=TT(\"string\"):\"number\"===a?n[o]=TT(\"number\"):\"boolean\"===a?n[o]=TT(\"boolean\"):\"symbol\"===a?n[o]=TT(\"symbol\"):\"bigint\"===a?n[o]=TT(\"bigint\"):a===Array?n[o]=TT(\"Array\"):a===Uint8Array?n[o]=TT(\"Uint8Array\"):a===ArrayBuffer?n[o]=TT(\"ArrayBuffer\"):n[o]=TT(a[1])}var s,l=n.join(\" or \");return TT(t)+\" must be of type \"+l+\", but was actually of type \"+TT(null===(s=e)?\"null\":void 0===s?\"undefined\":\"string\"==typeof s?\"string\":isNaN(s)?\"NaN\":\"number\"==typeof s?\"number\":\"boolean\"==typeof s?\"boolean\":\"symbol\"==typeof s?\"symbol\":\"bigint\"==typeof s?\"bigint\":s.constructor&&s.constructor.name?s.constructor.name:s.name?s.name:s.constructor?String(s.constructor):String(s))}(e,t,r))},IT=function(e,t,r){_T(e,t,r.concat(\"undefined\"))},NT=function(e,t,r){for(var n=0,o=e.length;n<o;n++)_T(e[n],t,r)},FT=function(e,t,r,n){if(_T(e,t,[\"number\"]),_T(r,\"min\",[\"number\"]),_T(n,\"max\",[\"number\"]),n=Math.max(r,n),e<r||e>n)throw new Error(TT(t)+\" must be at least \"+r+\" and at most \"+n+\", but was actually \"+e)},DT=function(e,t,r,n){_T(e,t,[\"number\",\"undefined\"]),\"number\"==typeof e&&FT(e,t,r,n)},BT=function(e,t,r){if(_T(e,t,[\"number\"]),e%r!==0)throw new Error(TT(t)+\" must be a multiple of \"+r+\", but was actually \"+e)},LT=function(e,t){if(![1,0].includes(Math.sign(e)))throw new Error(TT(t)+\" must be a positive number or 0, but was actually \"+e)},zT=new Uint16Array(256),HT=0;HT<256;HT++)zT[HT]=HT;zT[22]=AA(\"\u0017\"),zT[24]=AA(\"˘\"),zT[25]=AA(\"ˇ\"),zT[26]=AA(\"ˆ\"),zT[27]=AA(\"˙\"),zT[28]=AA(\"˝\"),zT[29]=AA(\"˛\"),zT[30]=AA(\"˚\"),zT[31]=AA(\"˜\"),zT[127]=AA(\"�\"),zT[128]=AA(\"•\"),zT[129]=AA(\"†\"),zT[130]=AA(\"‡\"),zT[131]=AA(\"…\"),zT[132]=AA(\"—\"),zT[133]=AA(\"–\"),zT[134]=AA(\"ƒ\"),zT[135]=AA(\"⁄\"),zT[136]=AA(\"‹\"),zT[137]=AA(\"›\"),zT[138]=AA(\"−\"),zT[139]=AA(\"‰\"),zT[140]=AA(\"„\"),zT[141]=AA(\"“\"),zT[142]=AA(\"”\"),zT[143]=AA(\"‘\"),zT[144]=AA(\"’\"),zT[145]=AA(\"‚\"),zT[146]=AA(\"™\"),zT[147]=AA(\"ﬁ\"),zT[148]=AA(\"ﬂ\"),zT[149]=AA(\"Ł\"),zT[150]=AA(\"Œ\"),zT[151]=AA(\"Š\"),zT[152]=AA(\"Ÿ\"),zT[153]=AA(\"Ž\"),zT[154]=AA(\"ı\"),zT[155]=AA(\"ł\"),zT[156]=AA(\"œ\"),zT[157]=AA(\"š\"),zT[158]=AA(\"ž\"),zT[159]=AA(\"�\"),zT[160]=AA(\"€\"),zT[173]=AA(\"�\");var UT=function(e){for(var t=new Array(e.length),r=0,n=e.length;r<n;r++)t[r]=zT[e[r]];return String.fromCodePoint.apply(String,t)},VT=function(){function e(e){this.populate=e,this.value=void 0}return e.prototype.getValue=function(){return this.value},e.prototype.access=function(){return this.value||(this.value=this.populate()),this.value},e.prototype.invalidate=function(){this.value=void 0},e.populatedBy=function(t){return new e(t)},e}();const WT=VT;var GT,qT,KT=function(e){function t(t,r){var n=\"Method \"+t+\".\"+r+\"() not implemented\";return e.call(this,n)||this}return gA(t,e),t}(Error),XT=function(e){function t(t){var r=\"Cannot construct \"+t+\" - it has a private constructor\";return e.call(this,r)||this}return gA(t,e),t}(Error),YT=function(e){function t(t,r){var n=function(e){var t,r;return null!==(t=null==e?void 0:e.name)&&void 0!==t?t:null===(r=null==e?void 0:e.constructor)||void 0===r?void 0:r.name},o=\"Expected instance of \"+(Array.isArray(t)?t.map(n):[n(t)]).join(\" or \")+\", but got instance of \"+(r?n(r):r);return e.call(this,o)||this}return gA(t,e),t}(Error),$T=function(e){function t(t){var r=t+\" stream encoding not supported\";return e.call(this,r)||this}return gA(t,e),t}(Error),ZT=function(e){function t(t,r){var n=\"Cannot call \"+t+\".\"+r+\"() more than once\";return e.call(this,n)||this}return gA(t,e),t}(Error),QT=(gA((function(e){var t=\"Missing catalog (ref=\"+e+\")\";return qT.call(this,t)||this}),qT=Error),function(e){function t(){return e.call(this,\"Can't embed page with missing Contents\")||this}return gA(t,e),t}(Error)),JT=function(e){function t(t){var r,n,o,i=\"Unrecognized stream type: \"+(null!==(o=null!==(n=null===(r=null==t?void 0:t.contructor)||void 0===r?void 0:r.name)&&void 0!==n?n:null==t?void 0:t.name)&&void 0!==o?o:t);return e.call(this,i)||this}return gA(t,e),t}(Error),ej=function(e){function t(){return e.call(this,\"Found mismatched contexts while embedding pages. All pages in the array passed to `PDFDocument.embedPages()` must be from the same document.\")||this}return gA(t,e),t}(Error),tj=function(e){function t(t){var r=\"Attempted to convert PDFArray with \"+t+\" elements to rectangle, but must have exactly 4 elements.\";return e.call(this,r)||this}return gA(t,e),t}(Error),rj=function(e){function t(t){var r='Attempted to convert \"'+t+'\" to a date, but it does not match the PDF date string format.';return e.call(this,r)||this}return gA(t,e),t}(Error),nj=function(e){function t(t,r){var n=\"Invalid targetIndex specified: targetIndex=\"+t+\" must be less than Count=\"+r;return e.call(this,n)||this}return gA(t,e),t}(Error),oj=function(e){function t(t,r){var n=\"Failed to \"+r+\" at targetIndex=\"+t+\" due to corrupt page tree: It is likely that one or more 'Count' entries are invalid\";return e.call(this,n)||this}return gA(t,e),t}(Error),ij=function(e){function t(t,r,n){var o=\"index should be at least \"+r+\" and at most \"+n+\", but was actually \"+t;return e.call(this,o)||this}return gA(t,e),t}(Error),aj=function(e){function t(){return e.call(this,\"Attempted to set invalid field value\")||this}return gA(t,e),t}(Error),sj=function(e){function t(){return e.call(this,\"Attempted to select multiple values for single-select field\")||this}return gA(t,e),t}(Error),lj=function(e){function t(t){var r=\"No /DA (default appearance) entry found for field: \"+t;return e.call(this,r)||this}return gA(t,e),t}(Error),cj=function(e){function t(t){var r=\"No Tf operator found for DA of field: \"+t;return e.call(this,r)||this}return gA(t,e),t}(Error),uj=function(e){function t(t,r){var n=\"Failed to parse number (line:\"+t.line+\" col:\"+t.column+\" offset=\"+t.offset+'): \"'+r+'\"';return e.call(this,n)||this}return gA(t,e),t}(Error),dj=function(e){function t(t,r){var n=\"Failed to parse PDF document (line:\"+t.line+\" col:\"+t.column+\" offset=\"+t.offset+\"): \"+r;return e.call(this,n)||this}return gA(t,e),t}(Error),fj=function(e){function t(t,r,n){var o=\"Expected next byte to be \"+r+\" but it was actually \"+n;return e.call(this,t,o)||this}return gA(t,e),t}(dj),hj=function(e){function t(t,r){var n=\"Failed to parse PDF object starting with the following byte: \"+r;return e.call(this,t,n)||this}return gA(t,e),t}(dj),pj=function(e){function t(t){return e.call(this,t,\"Failed to parse invalid PDF object\")||this}return gA(t,e),t}(dj),mj=function(e){function t(t){return e.call(this,t,\"Failed to parse PDF stream\")||this}return gA(t,e),t}(dj),gj=function(e){function t(t){return e.call(this,t,\"Failed to parse PDF literal string due to unbalanced parenthesis\")||this}return gA(t,e),t}(dj),vj=function(e){function t(t){return e.call(this,t,\"Parser stalled\")||this}return gA(t,e),t}(dj),bj=function(e){function t(t){return e.call(this,t,\"No PDF header found\")||this}return gA(t,e),t}(dj),yj=function(e){function t(t,r){var n=\"Did not find expected keyword '\"+qA(r)+\"'\";return e.call(this,t,n)||this}return gA(t,e),t}(dj);!function(e){e[e.Null=0]=\"Null\",e[e.Backspace=8]=\"Backspace\",e[e.Tab=9]=\"Tab\",e[e.Newline=10]=\"Newline\",e[e.FormFeed=12]=\"FormFeed\",e[e.CarriageReturn=13]=\"CarriageReturn\",e[e.Space=32]=\"Space\",e[e.ExclamationPoint=33]=\"ExclamationPoint\",e[e.Hash=35]=\"Hash\",e[e.Percent=37]=\"Percent\",e[e.LeftParen=40]=\"LeftParen\",e[e.RightParen=41]=\"RightParen\",e[e.Plus=43]=\"Plus\",e[e.Minus=45]=\"Minus\",e[e.Dash=45]=\"Dash\",e[e.Period=46]=\"Period\",e[e.ForwardSlash=47]=\"ForwardSlash\",e[e.Zero=48]=\"Zero\",e[e.One=49]=\"One\",e[e.Two=50]=\"Two\",e[e.Three=51]=\"Three\",e[e.Four=52]=\"Four\",e[e.Five=53]=\"Five\",e[e.Six=54]=\"Six\",e[e.Seven=55]=\"Seven\",e[e.Eight=56]=\"Eight\",e[e.Nine=57]=\"Nine\",e[e.LessThan=60]=\"LessThan\",e[e.GreaterThan=62]=\"GreaterThan\",e[e.A=65]=\"A\",e[e.D=68]=\"D\",e[e.E=69]=\"E\",e[e.F=70]=\"F\",e[e.O=79]=\"O\",e[e.P=80]=\"P\",e[e.R=82]=\"R\",e[e.LeftSquareBracket=91]=\"LeftSquareBracket\",e[e.BackSlash=92]=\"BackSlash\",e[e.RightSquareBracket=93]=\"RightSquareBracket\",e[e.a=97]=\"a\",e[e.b=98]=\"b\",e[e.d=100]=\"d\",e[e.e=101]=\"e\",e[e.f=102]=\"f\",e[e.i=105]=\"i\",e[e.j=106]=\"j\",e[e.l=108]=\"l\",e[e.m=109]=\"m\",e[e.n=110]=\"n\",e[e.o=111]=\"o\",e[e.r=114]=\"r\",e[e.s=115]=\"s\",e[e.t=116]=\"t\",e[e.u=117]=\"u\",e[e.x=120]=\"x\",e[e.LeftCurly=123]=\"LeftCurly\",e[e.RightCurly=125]=\"RightCurly\",e[e.Tilde=126]=\"Tilde\"}(GT||(GT={}));const wj=GT;const xj=function(){function e(e,t){this.major=String(e),this.minor=String(t)}return e.prototype.toString=function(){var e=MA(129);return\"%PDF-\"+this.major+\".\"+this.minor+\"\\n%\"+e+e+e+e},e.prototype.sizeInBytes=function(){return 12+this.major.length+this.minor.length},e.prototype.copyBytesInto=function(e,t){var r=t;return e[t++]=wj.Percent,e[t++]=wj.P,e[t++]=wj.D,e[t++]=wj.F,e[t++]=wj.Dash,t+=_A(this.major,e,t),e[t++]=wj.Period,t+=_A(this.minor,e,t),e[t++]=wj.Newline,e[t++]=wj.Percent,e[t++]=129,e[t++]=129,e[t++]=129,e[t++]=129,t-r},e.forVersion=function(t,r){return new e(t,r)},e}(),Sj=function(){function e(){}return e.prototype.clone=function(e){throw new KT(this.constructor.name,\"clone\")},e.prototype.toString=function(){throw new KT(this.constructor.name,\"toString\")},e.prototype.sizeInBytes=function(){throw new KT(this.constructor.name,\"sizeInBytes\")},e.prototype.copyBytesInto=function(e,t){throw new KT(this.constructor.name,\"copyBytesInto\")},e}();var Cj=function(e){function t(t){var r=e.call(this)||this;return r.numberValue=t,r.stringValue=function(e){var t,r=String(e);if(Math.abs(e)<1){if(t=parseInt(e.toString().split(\"e-\")[1])){var n=e<0;n&&(e*=-1),e*=Math.pow(10,t-1),r=\"0.\"+new Array(t).join(\"0\")+e.toString().substring(2),n&&(r=\"-\"+r)}}else(t=parseInt(e.toString().split(\"+\")[1]))>20&&(t-=20,r=(e/=Math.pow(10,t)).toString()+new Array(t+1).join(\"0\"));return r}(t),r}return gA(t,e),t.prototype.asNumber=function(){return this.numberValue},t.prototype.value=function(){return this.numberValue},t.prototype.clone=function(){return t.of(this.numberValue)},t.prototype.toString=function(){return this.stringValue},t.prototype.sizeInBytes=function(){return this.stringValue.length},t.prototype.copyBytesInto=function(e,t){return t+=_A(this.stringValue,e,t),this.stringValue.length},t.of=function(e){return new t(e)},t}(Sj);const kj=Cj;var Ej=function(e){function t(t){var r=e.call(this)||this;return r.array=[],r.context=t,r}return gA(t,e),t.prototype.size=function(){return this.array.length},t.prototype.push=function(e){this.array.push(e)},t.prototype.insert=function(e,t){this.array.splice(e,0,t)},t.prototype.indexOf=function(e){var t=this.array.indexOf(e);return-1===t?void 0:t},t.prototype.remove=function(e){this.array.splice(e,1)},t.prototype.set=function(e,t){this.array[e]=t},t.prototype.get=function(e){return this.array[e]},t.prototype.lookupMaybe=function(e){for(var t,r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];return(t=this.context).lookupMaybe.apply(t,wA([this.get(e)],r))},t.prototype.lookup=function(e){for(var t,r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];return(t=this.context).lookup.apply(t,wA([this.get(e)],r))},t.prototype.asRectangle=function(){if(4!==this.size())throw new tj(this.size());var e=this.lookup(0,kj).asNumber(),t=this.lookup(1,kj).asNumber();return{x:e,y:t,width:this.lookup(2,kj).asNumber()-e,height:this.lookup(3,kj).asNumber()-t}},t.prototype.asArray=function(){return this.array.slice()},t.prototype.clone=function(e){for(var r=t.withContext(e||this.context),n=0,o=this.size();n<o;n++)r.push(this.array[n]);return r},t.prototype.toString=function(){for(var e=\"[ \",t=0,r=this.size();t<r;t++)e+=this.get(t).toString(),e+=\" \";return e+\"]\"},t.prototype.sizeInBytes=function(){for(var e=3,t=0,r=this.size();t<r;t++)e+=this.get(t).sizeInBytes()+1;return e},t.prototype.copyBytesInto=function(e,t){var r=t;e[t++]=wj.LeftSquareBracket,e[t++]=wj.Space;for(var n=0,o=this.size();n<o;n++)t+=this.get(n).copyBytesInto(e,t),e[t++]=wj.Space;return e[t++]=wj.RightSquareBracket,t-r},t.prototype.scalePDFNumbers=function(e,t){for(var r=0,n=this.size();r<n;r++){var o=this.lookup(r);if(o instanceof kj){var i=r%2==0?e:t;this.set(r,kj.of(o.asNumber()*i))}}},t.withContext=function(e){return new t(e)},t}(Sj);const Oj=Ej;var Aj={},Tj=function(e){function t(t,r){var n=this;if(t!==Aj)throw new XT(\"PDFBool\");return(n=e.call(this)||this).value=r,n}return gA(t,e),t.prototype.asBoolean=function(){return this.value},t.prototype.clone=function(){return this},t.prototype.toString=function(){return String(this.value)},t.prototype.sizeInBytes=function(){return this.value?4:5},t.prototype.copyBytesInto=function(e,t){return this.value?(e[t++]=wj.t,e[t++]=wj.r,e[t++]=wj.u,e[t++]=wj.e,4):(e[t++]=wj.f,e[t++]=wj.a,e[t++]=wj.l,e[t++]=wj.s,e[t++]=wj.e,5)},t.True=new t(Aj,!0),t.False=new t(Aj,!1),t}(Sj);const jj=Tj;var Pj=new Uint8Array(256);Pj[wj.LeftParen]=1,Pj[wj.RightParen]=1,Pj[wj.LessThan]=1,Pj[wj.GreaterThan]=1,Pj[wj.LeftSquareBracket]=1,Pj[wj.RightSquareBracket]=1,Pj[wj.LeftCurly]=1,Pj[wj.RightCurly]=1,Pj[wj.ForwardSlash]=1,Pj[wj.Percent]=1;var Mj=new Uint8Array(256);Mj[wj.Null]=1,Mj[wj.Tab]=1,Mj[wj.Newline]=1,Mj[wj.FormFeed]=1,Mj[wj.CarriageReturn]=1,Mj[wj.Space]=1;for(var Rj=new Uint8Array(256),_j=0;_j<256;_j++)Rj[_j]=Mj[_j]||Pj[_j]?1:0;Rj[wj.Hash]=1;var Ij={},Nj=new Map,Fj=function(e){function t(t,r){var n=this;if(t!==Ij)throw new XT(\"PDFName\");n=e.call(this)||this;for(var o,i=\"/\",a=0,s=r.length;a<s;a++){var l=r[a],c=AA(l);i+=(o=c)>=wj.ExclamationPoint&&o<=wj.Tilde&&!Rj[o]?l:\"#\"+PA(c)}return n.encodedName=i,n}return gA(t,e),t.prototype.asBytes=function(){for(var e=[],t=\"\",r=!1,n=function(t){void 0!==t&&e.push(t),r=!1},o=1,i=this.encodedName.length;o<i;o++){var a=this.encodedName[o],s=AA(a),l=this.encodedName[o+1];r?s>=wj.Zero&&s<=wj.Nine||s>=wj.a&&s<=wj.f||s>=wj.A&&s<=wj.F?2!==(t+=a).length&&(l>=\"0\"&&l<=\"9\"||l>=\"a\"&&l<=\"f\"||l>=\"A\"&&l<=\"F\")||(n(parseInt(t,16)),t=\"\"):n(s):s===wj.Hash?r=!0:n(s)}return new Uint8Array(e)},t.prototype.decodeText=function(){var e=this.asBytes();return String.fromCharCode.apply(String,Array.from(e))},t.prototype.asString=function(){return this.encodedName},t.prototype.value=function(){return this.encodedName},t.prototype.clone=function(){return this},t.prototype.toString=function(){return this.encodedName},t.prototype.sizeInBytes=function(){return this.encodedName.length},t.prototype.copyBytesInto=function(e,t){return t+=_A(this.encodedName,e,t),this.encodedName.length},t.of=function(e){var r=function(e){return e.replace(/#([\\dABCDEF]{2})/g,(function(e,t){return function(e){return MA(parseInt(e,16))}(t)}))}(e),n=Nj.get(r);return n||(n=new t(Ij,r),Nj.set(r,n)),n},t.Length=t.of(\"Length\"),t.FlateDecode=t.of(\"FlateDecode\"),t.Resources=t.of(\"Resources\"),t.Font=t.of(\"Font\"),t.XObject=t.of(\"XObject\"),t.ExtGState=t.of(\"ExtGState\"),t.Contents=t.of(\"Contents\"),t.Type=t.of(\"Type\"),t.Parent=t.of(\"Parent\"),t.MediaBox=t.of(\"MediaBox\"),t.Page=t.of(\"Page\"),t.Annots=t.of(\"Annots\"),t.TrimBox=t.of(\"TrimBox\"),t.ArtBox=t.of(\"ArtBox\"),t.BleedBox=t.of(\"BleedBox\"),t.CropBox=t.of(\"CropBox\"),t.Rotate=t.of(\"Rotate\"),t.Title=t.of(\"Title\"),t.Author=t.of(\"Author\"),t.Subject=t.of(\"Subject\"),t.Creator=t.of(\"Creator\"),t.Keywords=t.of(\"Keywords\"),t.Producer=t.of(\"Producer\"),t.CreationDate=t.of(\"CreationDate\"),t.ModDate=t.of(\"ModDate\"),t}(Sj);const Dj=Fj;var Bj=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gA(t,e),t.prototype.asNull=function(){return null},t.prototype.clone=function(){return this},t.prototype.toString=function(){return\"null\"},t.prototype.sizeInBytes=function(){return 4},t.prototype.copyBytesInto=function(e,t){return e[t++]=wj.n,e[t++]=wj.u,e[t++]=wj.l,e[t++]=wj.l,4},t}(Sj);const Lj=new Bj;var zj=function(e){function t(t,r){var n=e.call(this)||this;return n.dict=t,n.context=r,n}return gA(t,e),t.prototype.keys=function(){return Array.from(this.dict.keys())},t.prototype.values=function(){return Array.from(this.dict.values())},t.prototype.entries=function(){return Array.from(this.dict.entries())},t.prototype.set=function(e,t){this.dict.set(e,t)},t.prototype.get=function(e,t){void 0===t&&(t=!1);var r=this.dict.get(e);if(r!==Lj||t)return r},t.prototype.has=function(e){var t=this.dict.get(e);return void 0!==t&&t!==Lj},t.prototype.lookupMaybe=function(e){for(var t,r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var o=r.includes(Lj),i=(t=this.context).lookupMaybe.apply(t,wA([this.get(e,o)],r));if(i!==Lj||o)return i},t.prototype.lookup=function(e){for(var t,r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var o=r.includes(Lj),i=(t=this.context).lookup.apply(t,wA([this.get(e,o)],r));if(i!==Lj||o)return i},t.prototype.delete=function(e){return this.dict.delete(e)},t.prototype.asMap=function(){return new Map(this.dict)},t.prototype.uniqueKey=function(e){void 0===e&&(e=\"\");for(var t=this.keys(),r=Dj.of(this.context.addRandomSuffix(e,10));t.includes(r);)r=Dj.of(this.context.addRandomSuffix(e,10));return r},t.prototype.clone=function(e){for(var r=t.withContext(e||this.context),n=this.entries(),o=0,i=n.length;o<i;o++){var a=n[o],s=a[0],l=a[1];r.set(s,l)}return r},t.prototype.toString=function(){for(var e=\"<<\\n\",t=this.entries(),r=0,n=t.length;r<n;r++){var o=t[r],i=o[0],a=o[1];e+=i.toString()+\" \"+a.toString()+\"\\n\"}return e+\">>\"},t.prototype.sizeInBytes=function(){for(var e=5,t=this.entries(),r=0,n=t.length;r<n;r++){var o=t[r],i=o[0],a=o[1];e+=i.sizeInBytes()+a.sizeInBytes()+2}return e},t.prototype.copyBytesInto=function(e,t){var r=t;e[t++]=wj.LessThan,e[t++]=wj.LessThan,e[t++]=wj.Newline;for(var n=this.entries(),o=0,i=n.length;o<i;o++){var a=n[o],s=a[0],l=a[1];t+=s.copyBytesInto(e,t),e[t++]=wj.Space,t+=l.copyBytesInto(e,t),e[t++]=wj.Newline}return e[t++]=wj.GreaterThan,e[t++]=wj.GreaterThan,t-r},t.withContext=function(e){return new t(new Map,e)},t.fromMapWithContext=function(e,r){return new t(e,r)},t}(Sj);const Hj=zj;var Uj=function(e){function t(t){var r=e.call(this)||this;return r.dict=t,r}return gA(t,e),t.prototype.clone=function(e){throw new KT(this.constructor.name,\"clone\")},t.prototype.getContentsString=function(){throw new KT(this.constructor.name,\"getContentsString\")},t.prototype.getContents=function(){throw new KT(this.constructor.name,\"getContents\")},t.prototype.getContentsSize=function(){throw new KT(this.constructor.name,\"getContentsSize\")},t.prototype.updateDict=function(){var e=this.getContentsSize();this.dict.set(Dj.Length,kj.of(e))},t.prototype.sizeInBytes=function(){return this.updateDict(),this.dict.sizeInBytes()+this.getContentsSize()+18},t.prototype.toString=function(){this.updateDict();var e=this.dict.toString();return e+=\"\\nstream\\n\",(e+=this.getContentsString())+\"\\nendstream\"},t.prototype.copyBytesInto=function(e,t){this.updateDict();var r=t;t+=this.dict.copyBytesInto(e,t),e[t++]=wj.Newline,e[t++]=wj.s,e[t++]=wj.t,e[t++]=wj.r,e[t++]=wj.e,e[t++]=wj.a,e[t++]=wj.m,e[t++]=wj.Newline;for(var n=this.getContents(),o=0,i=n.length;o<i;o++)e[t++]=n[o];return e[t++]=wj.Newline,e[t++]=wj.e,e[t++]=wj.n,e[t++]=wj.d,e[t++]=wj.s,e[t++]=wj.t,e[t++]=wj.r,e[t++]=wj.e,e[t++]=wj.a,e[t++]=wj.m,t-r},t}(Sj);const Vj=Uj;var Wj=function(e){function t(t,r){var n=e.call(this,t)||this;return n.contents=r,n}return gA(t,e),t.prototype.asUint8Array=function(){return this.contents.slice()},t.prototype.clone=function(e){return t.of(this.dict.clone(e),this.contents.slice())},t.prototype.getContentsString=function(){return qA(this.contents)},t.prototype.getContents=function(){return this.contents},t.prototype.getContentsSize=function(){return this.contents.length},t.of=function(e,r){return new t(e,r)},t}(Vj);const Gj=Wj;var qj={},Kj=new Map,Xj=function(e){function t(t,r,n){var o=this;if(t!==qj)throw new XT(\"PDFRef\");return(o=e.call(this)||this).objectNumber=r,o.generationNumber=n,o.tag=r+\" \"+n+\" R\",o}return gA(t,e),t.prototype.clone=function(){return this},t.prototype.toString=function(){return this.tag},t.prototype.sizeInBytes=function(){return this.tag.length},t.prototype.copyBytesInto=function(e,t){return t+=_A(this.tag,e,t),this.tag.length},t.of=function(e,r){void 0===r&&(r=0);var n=e+\" \"+r+\" R\",o=Kj.get(n);return o||(o=new t(qj,e,r),Kj.set(n,o)),o},t}(Sj);const Yj=Xj;var $j=function(){function e(e,t){this.name=e,this.args=t||[]}return e.prototype.clone=function(t){for(var r=new Array(this.args.length),n=0,o=r.length;n<o;n++){var i=this.args[n];r[n]=i instanceof Sj?i.clone(t):i}return e.of(this.name,r)},e.prototype.toString=function(){for(var e=\"\",t=0,r=this.args.length;t<r;t++)e+=String(this.args[t])+\" \";return e+this.name},e.prototype.sizeInBytes=function(){for(var e=0,t=0,r=this.args.length;t<r;t++){var n=this.args[t];e+=(n instanceof Sj?n.sizeInBytes():n.length)+1}return e+this.name.length},e.prototype.copyBytesInto=function(e,t){for(var r=t,n=0,o=this.args.length;n<o;n++){var i=this.args[n];t+=i instanceof Sj?i.copyBytesInto(e,t):_A(i,e,t),e[t++]=wj.Space}return(t+=_A(this.name,e,t))-r},e.of=function(t,r){return new e(t,r)},e}();const Zj=$j;var Qj;!function(e){e.NonStrokingColor=\"sc\",e.NonStrokingColorN=\"scn\",e.NonStrokingColorRgb=\"rg\",e.NonStrokingColorGray=\"g\",e.NonStrokingColorCmyk=\"k\",e.NonStrokingColorspace=\"cs\",e.StrokingColor=\"SC\",e.StrokingColorN=\"SCN\",e.StrokingColorRgb=\"RG\",e.StrokingColorGray=\"G\",e.StrokingColorCmyk=\"K\",e.StrokingColorspace=\"CS\",e.BeginMarkedContentSequence=\"BDC\",e.BeginMarkedContent=\"BMC\",e.EndMarkedContent=\"EMC\",e.MarkedContentPointWithProps=\"DP\",e.MarkedContentPoint=\"MP\",e.DrawObject=\"Do\",e.ConcatTransformationMatrix=\"cm\",e.PopGraphicsState=\"Q\",e.PushGraphicsState=\"q\",e.SetFlatness=\"i\",e.SetGraphicsStateParams=\"gs\",e.SetLineCapStyle=\"J\",e.SetLineDashPattern=\"d\",e.SetLineJoinStyle=\"j\",e.SetLineMiterLimit=\"M\",e.SetLineWidth=\"w\",e.SetTextMatrix=\"Tm\",e.SetRenderingIntent=\"ri\",e.AppendRectangle=\"re\",e.BeginInlineImage=\"BI\",e.BeginInlineImageData=\"ID\",e.EndInlineImage=\"EI\",e.ClipEvenOdd=\"W*\",e.ClipNonZero=\"W\",e.CloseAndStroke=\"s\",e.CloseFillEvenOddAndStroke=\"b*\",e.CloseFillNonZeroAndStroke=\"b\",e.ClosePath=\"h\",e.AppendBezierCurve=\"c\",e.CurveToReplicateFinalPoint=\"y\",e.CurveToReplicateInitialPoint=\"v\",e.EndPath=\"n\",e.FillEvenOddAndStroke=\"B*\",e.FillEvenOdd=\"f*\",e.FillNonZeroAndStroke=\"B\",e.FillNonZero=\"f\",e.LegacyFillNonZero=\"F\",e.LineTo=\"l\",e.MoveTo=\"m\",e.ShadingFill=\"sh\",e.StrokePath=\"S\",e.BeginText=\"BT\",e.EndText=\"ET\",e.MoveText=\"Td\",e.MoveTextSetLeading=\"TD\",e.NextLine=\"T*\",e.SetCharacterSpacing=\"Tc\",e.SetFontAndSize=\"Tf\",e.SetTextHorizontalScaling=\"Tz\",e.SetTextLineHeight=\"TL\",e.SetTextRenderingMode=\"Tr\",e.SetTextRise=\"Ts\",e.SetWordSpacing=\"Tw\",e.ShowText=\"Tj\",e.ShowTextAdjusted=\"TJ\",e.ShowTextLine=\"'\",e.ShowTextLineAndSpace='\"',e.Type3D0=\"d0\",e.Type3D1=\"d1\",e.BeginCompatibilitySection=\"BX\",e.EndCompatibilitySection=\"EX\"}(Qj||(Qj={}));const Jj=Qj,eP=function(e){function t(t,r){var n=e.call(this,t)||this;return n.computeContents=function(){var e=n.getUnencodedContents();return n.encode?fT().deflate(e):e},n.encode=r,r&&t.set(Dj.of(\"Filter\"),Dj.of(\"FlateDecode\")),n.contentsCache=WT.populatedBy(n.computeContents),n}return gA(t,e),t.prototype.getContents=function(){return this.contentsCache.access()},t.prototype.getContentsSize=function(){return this.contentsCache.access().length},t.prototype.getUnencodedContents=function(){throw new KT(this.constructor.name,\"getUnencodedContents\")},t}(Vj);var tP=function(e){function t(t,r,n){void 0===n&&(n=!0);var o=e.call(this,t,n)||this;return o.operators=r,o}return gA(t,e),t.prototype.push=function(){for(var e,t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];(e=this.operators).push.apply(e,t)},t.prototype.clone=function(e){for(var r=new Array(this.operators.length),n=0,o=this.operators.length;n<o;n++)r[n]=this.operators[n].clone(e);var i=this.dict,a=this.encode;return t.of(i.clone(e),r,a)},t.prototype.getContentsString=function(){for(var e=\"\",t=0,r=this.operators.length;t<r;t++)e+=this.operators[t]+\"\\n\";return e},t.prototype.getUnencodedContents=function(){for(var e=new Uint8Array(this.getUnencodedContentsSize()),t=0,r=0,n=this.operators.length;r<n;r++)t+=this.operators[r].copyBytesInto(e,t),e[t++]=wj.Newline;return e},t.prototype.getUnencodedContentsSize=function(){for(var e=0,t=0,r=this.operators.length;t<r;t++)e+=this.operators[t].sizeInBytes()+1;return e},t.of=function(e,r,n){return void 0===n&&(n=!0),new t(e,r,n)},t}(eP);const rP=tP;var nP=function(){function e(e){this.seed=e}return e.prototype.nextInt=function(){var e=1e4*Math.sin(this.seed++);return e-Math.floor(e)},e.withSeed=function(t){return new e(t)},e}(),oP=function(e,t){var r=e[0],n=t[0];return r.objectNumber-n.objectNumber},iP=function(){function e(){this.largestObjectNumber=0,this.header=xj.forVersion(1,7),this.trailerInfo={},this.indirectObjects=new Map,this.rng=nP.withSeed(1)}return e.prototype.assign=function(e,t){this.indirectObjects.set(e,t),e.objectNumber>this.largestObjectNumber&&(this.largestObjectNumber=e.objectNumber)},e.prototype.nextRef=function(){return this.largestObjectNumber+=1,Yj.of(this.largestObjectNumber)},e.prototype.register=function(e){var t=this.nextRef();return this.assign(t,e),t},e.prototype.delete=function(e){return this.indirectObjects.delete(e)},e.prototype.lookupMaybe=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];var n=t.includes(Lj),o=e instanceof Yj?this.indirectObjects.get(e):e;if(o&&(o!==Lj||n)){for(var i=0,a=t.length;i<a;i++){var s=t[i];if(s===Lj){if(o===Lj)return o}else if(o instanceof s)return o}throw new YT(t,o)}},e.prototype.lookup=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];var n=e instanceof Yj?this.indirectObjects.get(e):e;if(0===t.length)return n;for(var o=0,i=t.length;o<i;o++){var a=t[o];if(a===Lj){if(n===Lj)return n}else if(n instanceof a)return n}throw new YT(t,n)},e.prototype.getObjectRef=function(e){for(var t=Array.from(this.indirectObjects.entries()),r=0,n=t.length;r<n;r++){var o=t[r],i=o[0];if(o[1]===e)return i}},e.prototype.enumerateIndirectObjects=function(){return Array.from(this.indirectObjects.entries()).sort(oP)},e.prototype.obj=function(e){if(e instanceof Sj)return e;if(null==e)return Lj;if(\"string\"==typeof e)return Dj.of(e);if(\"number\"==typeof e)return kj.of(e);if(\"boolean\"==typeof e)return e?jj.True:jj.False;if(Array.isArray(e)){for(var t=Oj.withContext(this),r=0,n=e.length;r<n;r++)t.push(this.obj(e[r]));return t}var o=Hj.withContext(this),i=Object.keys(e);for(r=0,n=i.length;r<n;r++){var a=i[r],s=e[a];void 0!==s&&o.set(Dj.of(a),this.obj(s))}return o},e.prototype.stream=function(e,t){return void 0===t&&(t={}),Gj.of(this.obj(t),WA(e))},e.prototype.flateStream=function(e,t){return void 0===t&&(t={}),this.stream(fT().deflate(WA(e)),vA(vA({},t),{Filter:\"FlateDecode\"}))},e.prototype.contentStream=function(e,t){return void 0===t&&(t={}),rP.of(this.obj(t),e)},e.prototype.formXObject=function(e,t){return void 0===t&&(t={}),this.contentStream(e,vA(vA({BBox:this.obj([0,0,0,0]),Matrix:this.obj([1,0,0,1,0,0])},t),{Type:\"XObject\",Subtype:\"Form\"}))},e.prototype.getPushGraphicsStateContentStream=function(){if(this.pushGraphicsStateContentStreamRef)return this.pushGraphicsStateContentStreamRef;var e=this.obj({}),t=Zj.of(Jj.PushGraphicsState),r=rP.of(e,[t]);return this.pushGraphicsStateContentStreamRef=this.register(r),this.pushGraphicsStateContentStreamRef},e.prototype.getPopGraphicsStateContentStream=function(){if(this.popGraphicsStateContentStreamRef)return this.popGraphicsStateContentStreamRef;var e=this.obj({}),t=Zj.of(Jj.PopGraphicsState),r=rP.of(e,[t]);return this.popGraphicsStateContentStreamRef=this.register(r),this.popGraphicsStateContentStreamRef},e.prototype.addRandomSuffix=function(e,t){return void 0===t&&(t=4),e+\"-\"+Math.floor(this.rng.nextInt()*Math.pow(10,t))},e.create=function(){return new e},e}();const aP=iP;var sP=function(e){function t(t,r,n){void 0===n&&(n=!0);var o=e.call(this,t,r)||this;return o.normalized=!1,o.autoNormalizeCTM=n,o}return gA(t,e),t.prototype.clone=function(e){for(var r=t.fromMapWithContext(new Map,e||this.context,this.autoNormalizeCTM),n=this.entries(),o=0,i=n.length;o<i;o++){var a=n[o],s=a[0],l=a[1];r.set(s,l)}return r},t.prototype.Parent=function(){return this.lookupMaybe(Dj.Parent,Hj)},t.prototype.Contents=function(){return this.lookup(Dj.of(\"Contents\"))},t.prototype.Annots=function(){return this.lookupMaybe(Dj.Annots,Oj)},t.prototype.BleedBox=function(){return this.lookupMaybe(Dj.BleedBox,Oj)},t.prototype.TrimBox=function(){return this.lookupMaybe(Dj.TrimBox,Oj)},t.prototype.ArtBox=function(){return this.lookupMaybe(Dj.ArtBox,Oj)},t.prototype.Resources=function(){var e=this.getInheritableAttribute(Dj.Resources);return this.context.lookupMaybe(e,Hj)},t.prototype.MediaBox=function(){var e=this.getInheritableAttribute(Dj.MediaBox);return this.context.lookup(e,Oj)},t.prototype.CropBox=function(){var e=this.getInheritableAttribute(Dj.CropBox);return this.context.lookupMaybe(e,Oj)},t.prototype.Rotate=function(){var e=this.getInheritableAttribute(Dj.Rotate);return this.context.lookupMaybe(e,kj)},t.prototype.getInheritableAttribute=function(e){var t;return this.ascend((function(r){t||(t=r.get(e))})),t},t.prototype.setParent=function(e){this.set(Dj.Parent,e)},t.prototype.addContentStream=function(e){var t=this.normalizedEntries().Contents||this.context.obj([]);this.set(Dj.Contents,t),t.push(e)},t.prototype.wrapContentStreams=function(e,t){var r=this.Contents();return r instanceof Oj&&(r.insert(0,e),r.push(t),!0)},t.prototype.addAnnot=function(e){this.normalizedEntries().Annots.push(e)},t.prototype.removeAnnot=function(e){var t=this.normalizedEntries().Annots,r=t.indexOf(e);void 0!==r&&t.remove(r)},t.prototype.setFontDictionary=function(e,t){this.normalizedEntries().Font.set(e,t)},t.prototype.newFontDictionaryKey=function(e){return this.normalizedEntries().Font.uniqueKey(e)},t.prototype.newFontDictionary=function(e,t){var r=this.newFontDictionaryKey(e);return this.setFontDictionary(r,t),r},t.prototype.setXObject=function(e,t){this.normalizedEntries().XObject.set(e,t)},t.prototype.newXObjectKey=function(e){return this.normalizedEntries().XObject.uniqueKey(e)},t.prototype.newXObject=function(e,t){var r=this.newXObjectKey(e);return this.setXObject(r,t),r},t.prototype.setExtGState=function(e,t){this.normalizedEntries().ExtGState.set(e,t)},t.prototype.newExtGStateKey=function(e){return this.normalizedEntries().ExtGState.uniqueKey(e)},t.prototype.newExtGState=function(e,t){var r=this.newExtGStateKey(e);return this.setExtGState(r,t),r},t.prototype.ascend=function(e){e(this);var t=this.Parent();t&&t.ascend(e)},t.prototype.normalize=function(){if(!this.normalized){var e=this.context,t=this.get(Dj.Contents);this.context.lookup(t)instanceof Vj&&this.set(Dj.Contents,e.obj([t])),this.autoNormalizeCTM&&this.wrapContentStreams(this.context.getPushGraphicsStateContentStream(),this.context.getPopGraphicsStateContentStream());var r=this.getInheritableAttribute(Dj.Resources),n=e.lookupMaybe(r,Hj)||e.obj({});this.set(Dj.Resources,n);var o=n.lookupMaybe(Dj.Font,Hj)||e.obj({});n.set(Dj.Font,o);var i=n.lookupMaybe(Dj.XObject,Hj)||e.obj({});n.set(Dj.XObject,i);var a=n.lookupMaybe(Dj.ExtGState,Hj)||e.obj({});n.set(Dj.ExtGState,a);var s=this.Annots()||e.obj([]);this.set(Dj.Annots,s),this.normalized=!0}},t.prototype.normalizedEntries=function(){this.normalize();var e=this.Annots(),t=this.Resources();return{Annots:e,Resources:t,Contents:this.Contents(),Font:t.lookup(Dj.Font,Hj),XObject:t.lookup(Dj.XObject,Hj),ExtGState:t.lookup(Dj.ExtGState,Hj)}},t.InheritableEntries=[\"Resources\",\"MediaBox\",\"CropBox\",\"Rotate\"],t.withContextAndParent=function(e,r){var n=new Map;return n.set(Dj.Type,Dj.Page),n.set(Dj.Parent,r),n.set(Dj.Resources,e.obj({})),n.set(Dj.MediaBox,e.obj([0,0,612,792])),new t(n,e,!1)},t.fromMapWithContext=function(e,r,n){return void 0===n&&(n=!0),new t(e,r,n)},t}(Hj);const lP=sP;var cP=function(){function e(e,t){var r=this;this.traversedObjects=new Map,this.copy=function(e){return e instanceof lP?r.copyPDFPage(e):e instanceof Hj?r.copyPDFDict(e):e instanceof Oj?r.copyPDFArray(e):e instanceof Vj?r.copyPDFStream(e):e instanceof Yj?r.copyPDFIndirectObject(e):e.clone()},this.copyPDFPage=function(e){for(var t=e.clone(),n=lP.InheritableEntries,o=0,i=n.length;o<i;o++){var a=Dj.of(n[o]),s=t.getInheritableAttribute(a);!t.get(a)&&s&&t.set(a,s)}return t.delete(Dj.of(\"Parent\")),r.copyPDFDict(t)},this.copyPDFDict=function(e){if(r.traversedObjects.has(e))return r.traversedObjects.get(e);var t=e.clone(r.dest);r.traversedObjects.set(e,t);for(var n=e.entries(),o=0,i=n.length;o<i;o++){var a=n[o],s=a[0],l=a[1];t.set(s,r.copy(l))}return t},this.copyPDFArray=function(e){if(r.traversedObjects.has(e))return r.traversedObjects.get(e);var t=e.clone(r.dest);r.traversedObjects.set(e,t);for(var n=0,o=e.size();n<o;n++){var i=e.get(n);t.set(n,r.copy(i))}return t},this.copyPDFStream=function(e){if(r.traversedObjects.has(e))return r.traversedObjects.get(e);var t=e.clone(r.dest);r.traversedObjects.set(e,t);for(var n=e.dict.entries(),o=0,i=n.length;o<i;o++){var a=n[o],s=a[0],l=a[1];t.dict.set(s,r.copy(l))}return t},this.copyPDFIndirectObject=function(e){if(!r.traversedObjects.has(e)){var t=r.dest.nextRef();r.traversedObjects.set(e,t);var n=r.src.lookup(e);if(n){var o=r.copy(n);r.dest.assign(t,o)}}return r.traversedObjects.get(e)},this.src=e,this.dest=t}return e.for=function(t,r){return new e(t,r)},e}();const uP=cP;var dP=function(){function e(e){this.subsections=e?[[e]]:[],this.chunkIdx=0,this.chunkLength=e?1:0}return e.prototype.addEntry=function(e,t){this.append({ref:e,offset:t,deleted:!1})},e.prototype.addDeletedEntry=function(e,t){this.append({ref:e,offset:t,deleted:!0})},e.prototype.toString=function(){for(var e=\"xref\\n\",t=0,r=this.subsections.length;t<r;t++){var n=this.subsections[t];e+=n[0].ref.objectNumber+\" \"+n.length+\"\\n\";for(var o=0,i=n.length;o<i;o++){var a=n[o];e+=RA(String(a.offset),10,\"0\"),e+=\" \",e+=RA(String(a.ref.generationNumber),5,\"0\"),e+=\" \",e+=a.deleted?\"f\":\"n\",e+=\" \\n\"}}return e},e.prototype.sizeInBytes=function(){for(var e=5,t=0,r=this.subsections.length;t<r;t++){var n=this.subsections[t],o=n.length,i=n[0];e+=2,e+=String(i.ref.objectNumber).length,e+=String(o).length,e+=20*o}return e},e.prototype.copyBytesInto=function(e,t){var r=t;return e[t++]=wj.x,e[t++]=wj.r,e[t++]=wj.e,e[t++]=wj.f,e[t++]=wj.Newline,(t+=this.copySubsectionsIntoBuffer(this.subsections,e,t))-r},e.prototype.copySubsectionsIntoBuffer=function(e,t,r){for(var n=r,o=e.length,i=0;i<o;i++){var a=this.subsections[i],s=String(a[0].ref.objectNumber);r+=_A(s,t,r),t[r++]=wj.Space;var l=String(a.length);r+=_A(l,t,r),t[r++]=wj.Newline,r+=this.copyEntriesIntoBuffer(a,t,r)}return r-n},e.prototype.copyEntriesIntoBuffer=function(e,t,r){for(var n=e.length,o=0;o<n;o++){var i=e[o],a=RA(String(i.offset),10,\"0\");r+=_A(a,t,r),t[r++]=wj.Space;var s=RA(String(i.ref.generationNumber),5,\"0\");r+=_A(s,t,r),t[r++]=wj.Space,t[r++]=i.deleted?wj.f:wj.n,t[r++]=wj.Space,t[r++]=wj.Newline}return 20*n},e.prototype.append=function(e){if(0===this.chunkLength)return this.subsections.push([e]),this.chunkIdx=0,void(this.chunkLength=1);var t=this.subsections[this.chunkIdx],r=t[this.chunkLength-1];e.ref.objectNumber-r.ref.objectNumber>1?(this.subsections.push([e]),this.chunkIdx+=1,this.chunkLength=1):(t.push(e),this.chunkLength+=1)},e.create=function(){return new e({ref:Yj.of(0,65535),offset:0,deleted:!0})},e.createEmpty=function(){return new e},e}();const fP=dP;const hP=function(){function e(e){this.lastXRefOffset=String(e)}return e.prototype.toString=function(){return\"startxref\\n\"+this.lastXRefOffset+\"\\n%%EOF\"},e.prototype.sizeInBytes=function(){return 16+this.lastXRefOffset.length},e.prototype.copyBytesInto=function(e,t){var r=t;return e[t++]=wj.s,e[t++]=wj.t,e[t++]=wj.a,e[t++]=wj.r,e[t++]=wj.t,e[t++]=wj.x,e[t++]=wj.r,e[t++]=wj.e,e[t++]=wj.f,e[t++]=wj.Newline,t+=_A(this.lastXRefOffset,e,t),e[t++]=wj.Newline,e[t++]=wj.Percent,e[t++]=wj.Percent,e[t++]=wj.E,e[t++]=wj.O,e[t++]=wj.F,t-r},e.forLastCrossRefSectionOffset=function(t){return new e(t)},e}();const pP=function(){function e(e){this.dict=e}return e.prototype.toString=function(){return\"trailer\\n\"+this.dict.toString()},e.prototype.sizeInBytes=function(){return 8+this.dict.sizeInBytes()},e.prototype.copyBytesInto=function(e,t){var r=t;return e[t++]=wj.t,e[t++]=wj.r,e[t++]=wj.a,e[t++]=wj.i,e[t++]=wj.l,e[t++]=wj.e,e[t++]=wj.r,e[t++]=wj.Newline,(t+=this.dict.copyBytesInto(e,t))-r},e.of=function(t){return new e(t)},e}();var mP=function(e){function t(t,r,n){void 0===n&&(n=!0);var o=e.call(this,t.obj({}),n)||this;return o.objects=r,o.offsets=o.computeObjectOffsets(),o.offsetsString=o.computeOffsetsString(),o.dict.set(Dj.of(\"Type\"),Dj.of(\"ObjStm\")),o.dict.set(Dj.of(\"N\"),kj.of(o.objects.length)),o.dict.set(Dj.of(\"First\"),kj.of(o.offsetsString.length)),o}return gA(t,e),t.prototype.getObjectsCount=function(){return this.objects.length},t.prototype.clone=function(e){return t.withContextAndObjects(e||this.dict.context,this.objects.slice(),this.encode)},t.prototype.getContentsString=function(){for(var e=this.offsetsString,t=0,r=this.objects.length;t<r;t++)e+=this.objects[t][1]+\"\\n\";return e},t.prototype.getUnencodedContents=function(){for(var e=new Uint8Array(this.getUnencodedContentsSize()),t=_A(this.offsetsString,e,0),r=0,n=this.objects.length;r<n;r++)t+=this.objects[r][1].copyBytesInto(e,t),e[t++]=wj.Newline;return e},t.prototype.getUnencodedContentsSize=function(){return this.offsetsString.length+VA(this.offsets)[1]+VA(this.objects)[1].sizeInBytes()+1},t.prototype.computeOffsetsString=function(){for(var e=\"\",t=0,r=this.offsets.length;t<r;t++){var n=this.offsets[t];e+=n[0]+\" \"+n[1]+\" \"}return e},t.prototype.computeObjectOffsets=function(){for(var e=0,t=new Array(this.objects.length),r=0,n=this.objects.length;r<n;r++){var o=this.objects[r],i=o[0],a=o[1];t[r]=[i.objectNumber,e],e+=a.sizeInBytes()+1}return t},t.withContextAndObjects=function(e,r,n){return void 0===n&&(n=!0),new t(e,r,n)},t}(eP);const gP=mP;var vP=function(){function e(e,t){var r=this;this.parsedObjects=0,this.shouldWaitForTick=function(e){return r.parsedObjects+=e,r.parsedObjects%r.objectsPerTick===0},this.context=e,this.objectsPerTick=t}return e.prototype.serializeToBuffer=function(){return bA(this,void 0,void 0,(function(){var e,t,r,n,o,i,a,s,l,c,u,d,f,h,p,m,g;return yA(this,(function(v){switch(v.label){case 0:return[4,this.computeBufferSize()];case 1:e=v.sent(),t=e.size,r=e.header,n=e.indirectObjects,o=e.xref,i=e.trailerDict,a=e.trailer,s=0,l=new Uint8Array(t),s+=r.copyBytesInto(l,s),l[s++]=wj.Newline,l[s++]=wj.Newline,c=0,u=n.length,v.label=2;case 2:return c<u?(d=n[c],f=d[0],h=d[1],p=String(f.objectNumber),s+=_A(p,l,s),l[s++]=wj.Space,m=String(f.generationNumber),s+=_A(m,l,s),l[s++]=wj.Space,l[s++]=wj.o,l[s++]=wj.b,l[s++]=wj.j,l[s++]=wj.Newline,s+=h.copyBytesInto(l,s),l[s++]=wj.Newline,l[s++]=wj.e,l[s++]=wj.n,l[s++]=wj.d,l[s++]=wj.o,l[s++]=wj.b,l[s++]=wj.j,l[s++]=wj.Newline,l[s++]=wj.Newline,g=h instanceof gP?h.getObjectsCount():1,this.shouldWaitForTick(g)?[4,$A()]:[3,4]):[3,5];case 3:v.sent(),v.label=4;case 4:return c++,[3,2];case 5:return o&&(s+=o.copyBytesInto(l,s),l[s++]=wj.Newline),i&&(s+=i.copyBytesInto(l,s),l[s++]=wj.Newline,l[s++]=wj.Newline),s+=a.copyBytesInto(l,s),[2,l]}}))}))},e.prototype.computeIndirectObjectSize=function(e){var t=e[0],r=e[1];return t.sizeInBytes()+3+(r.sizeInBytes()+9)},e.prototype.createTrailerDict=function(){return this.context.obj({Size:this.context.largestObjectNumber+1,Root:this.context.trailerInfo.Root,Encrypt:this.context.trailerInfo.Encrypt,Info:this.context.trailerInfo.Info,ID:this.context.trailerInfo.ID})},e.prototype.computeBufferSize=function(){return bA(this,void 0,void 0,(function(){var e,t,r,n,o,i,a,s,l,c,u;return yA(this,(function(d){switch(d.label){case 0:e=xj.forVersion(1,7),t=e.sizeInBytes()+2,r=fP.create(),n=this.context.enumerateIndirectObjects(),o=0,i=n.length,d.label=1;case 1:return o<i?(a=n[o],s=a[0],r.addEntry(s,t),t+=this.computeIndirectObjectSize(a),this.shouldWaitForTick(1)?[4,$A()]:[3,3]):[3,4];case 2:d.sent(),d.label=3;case 3:return o++,[3,1];case 4:return l=t,t+=r.sizeInBytes()+1,c=pP.of(this.createTrailerDict()),t+=c.sizeInBytes()+2,u=hP.forLastCrossRefSectionOffset(l),[2,{size:t+=u.sizeInBytes(),header:e,indirectObjects:n,xref:r,trailerDict:c,trailer:u}]}}))}))},e.forContext=function(t,r){return new e(t,r)},e}();const bP=vP;var yP=function(e){function t(t){var r=e.call(this)||this;return r.data=t,r}return gA(t,e),t.prototype.clone=function(){return t.of(this.data.slice())},t.prototype.toString=function(){return\"PDFInvalidObject(\"+this.data.length+\" bytes)\"},t.prototype.sizeInBytes=function(){return this.data.length},t.prototype.copyBytesInto=function(e,t){for(var r=this.data.length,n=0;n<r;n++)e[t++]=this.data[n];return r},t.of=function(e){return new t(e)},t}(Sj);const wP=yP;var xP;!function(e){e[e.Deleted=0]=\"Deleted\",e[e.Uncompressed=1]=\"Uncompressed\",e[e.Compressed=2]=\"Compressed\"}(xP||(xP={}));var SP=function(e){function t(t,r,n){void 0===n&&(n=!0);var o=e.call(this,t,n)||this;return o.computeIndex=function(){for(var e=[],t=0,r=0,n=o.entries.length;r<n;r++){var i=o.entries[r],a=o.entries[r-1];0===r?e.push(i.ref.objectNumber):i.ref.objectNumber-a.ref.objectNumber>1&&(e.push(t),e.push(i.ref.objectNumber),t=0),t+=1}return e.push(t),e},o.computeEntryTuples=function(){for(var e=new Array(o.entries.length),t=0,r=o.entries.length;t<r;t++){var n=o.entries[t];if(n.type===xP.Deleted){var i=n.type,a=n.nextFreeObjectNumber,s=n.ref;e[t]=[i,a,s.generationNumber]}if(n.type===xP.Uncompressed){i=n.type;var l=n.offset;s=n.ref,e[t]=[i,l,s.generationNumber]}if(n.type===xP.Compressed){i=n.type;var c=n.objectStreamRef,u=n.index;e[t]=[i,c.objectNumber,u]}}return e},o.computeMaxEntryByteWidths=function(){for(var e=o.entryTuplesCache.access(),t=[0,0,0],r=0,n=e.length;r<n;r++){var i=e[r],a=i[0],s=i[1],l=i[2],c=lT(a),u=lT(s),d=lT(l);c>t[0]&&(t[0]=c),u>t[1]&&(t[1]=u),d>t[2]&&(t[2]=d)}return t},o.entries=r||[],o.entryTuplesCache=WT.populatedBy(o.computeEntryTuples),o.maxByteWidthsCache=WT.populatedBy(o.computeMaxEntryByteWidths),o.indexCache=WT.populatedBy(o.computeIndex),t.set(Dj.of(\"Type\"),Dj.of(\"XRef\")),o}return gA(t,e),t.prototype.addDeletedEntry=function(e,t){var r=xP.Deleted;this.entries.push({type:r,ref:e,nextFreeObjectNumber:t}),this.entryTuplesCache.invalidate(),this.maxByteWidthsCache.invalidate(),this.indexCache.invalidate(),this.contentsCache.invalidate()},t.prototype.addUncompressedEntry=function(e,t){var r=xP.Uncompressed;this.entries.push({type:r,ref:e,offset:t}),this.entryTuplesCache.invalidate(),this.maxByteWidthsCache.invalidate(),this.indexCache.invalidate(),this.contentsCache.invalidate()},t.prototype.addCompressedEntry=function(e,t,r){var n=xP.Compressed;this.entries.push({type:n,ref:e,objectStreamRef:t,index:r}),this.entryTuplesCache.invalidate(),this.maxByteWidthsCache.invalidate(),this.indexCache.invalidate(),this.contentsCache.invalidate()},t.prototype.clone=function(e){var r=this,n=r.dict,o=r.entries,i=r.encode;return t.of(n.clone(e),o.slice(),i)},t.prototype.getContentsString=function(){for(var e=this.entryTuplesCache.access(),t=this.maxByteWidthsCache.access(),r=\"\",n=0,o=e.length;n<o;n++){for(var i=e[n],a=i[0],s=i[1],l=i[2],c=XA(cT(a)),u=XA(cT(s)),d=XA(cT(l)),f=t[0]-1;f>=0;f--)r+=(c[f]||0).toString(2);for(f=t[1]-1;f>=0;f--)r+=(u[f]||0).toString(2);for(f=t[2]-1;f>=0;f--)r+=(d[f]||0).toString(2)}return r},t.prototype.getUnencodedContents=function(){for(var e=this.entryTuplesCache.access(),t=this.maxByteWidthsCache.access(),r=new Uint8Array(this.getUnencodedContentsSize()),n=0,o=0,i=e.length;o<i;o++){for(var a=e[o],s=a[0],l=a[1],c=a[2],u=XA(cT(s)),d=XA(cT(l)),f=XA(cT(c)),h=t[0]-1;h>=0;h--)r[n++]=u[h]||0;for(h=t[1]-1;h>=0;h--)r[n++]=d[h]||0;for(h=t[2]-1;h>=0;h--)r[n++]=f[h]||0}return r},t.prototype.getUnencodedContentsSize=function(){var e=function(e){for(var t=0,r=0,n=e.length;r<n;r++)t+=e[r];return t}(this.maxByteWidthsCache.access());return e*this.entries.length},t.prototype.updateDict=function(){e.prototype.updateDict.call(this);var t=this.maxByteWidthsCache.access(),r=this.indexCache.access(),n=this.dict.context;this.dict.set(Dj.of(\"W\"),n.obj(t)),this.dict.set(Dj.of(\"Index\"),n.obj(r))},t.create=function(e,r){void 0===r&&(r=!0);var n=new t(e,[],r);return n.addDeletedEntry(Yj.of(0,65535),0),n},t.of=function(e,r,n){return void 0===n&&(n=!0),new t(e,r,n)},t}(eP);const CP=SP;var kP=function(e){function t(t,r,n,o){var i=e.call(this,t,r)||this;return i.encodeStreams=n,i.objectsPerStream=o,i}return gA(t,e),t.prototype.computeBufferSize=function(){return bA(this,void 0,void 0,(function(){var e,t,r,n,o,i,a,s,l,c,u,d,f,h,p,m,g,v,b;return yA(this,(function(y){switch(y.label){case 0:e=this.context.largestObjectNumber+1,t=xj.forVersion(1,7),r=t.sizeInBytes()+2,n=CP.create(this.createTrailerDict(),this.encodeStreams),o=[],i=[],a=[],s=this.context.enumerateIndirectObjects(),d=0,f=s.length,y.label=1;case 1:return d<f?(l=s[d],p=l[0],c=l[1],p===this.context.trailerInfo.Encrypt||c instanceof Vj||c instanceof wP||0!==p.generationNumber?(o.push(l),n.addUncompressedEntry(p,r),r+=this.computeIndirectObjectSize(l),this.shouldWaitForTick(1)?[4,$A()]:[3,3]):[3,4]):[3,6];case 2:y.sent(),y.label=3;case 3:return[3,5];case 4:h=VA(i),u=VA(a),h&&h.length%this.objectsPerStream!==0||(h=[],i.push(h),u=Yj.of(e++),a.push(u)),n.addCompressedEntry(p,u,h.length),h.push(l),y.label=5;case 5:return d++,[3,1];case 6:d=0,f=i.length,y.label=7;case 7:return d<f?(h=i[d],p=a[d],m=gP.withContextAndObjects(this.context,h,this.encodeStreams),n.addUncompressedEntry(p,r),r+=this.computeIndirectObjectSize([p,m]),o.push([p,m]),this.shouldWaitForTick(h.length)?[4,$A()]:[3,9]):[3,10];case 8:y.sent(),y.label=9;case 9:return d++,[3,7];case 10:return g=Yj.of(e++),n.dict.set(Dj.of(\"Size\"),kj.of(e)),n.addUncompressedEntry(g,r),v=r,r+=this.computeIndirectObjectSize([g,n]),o.push([g,n]),b=hP.forLastCrossRefSectionOffset(v),[2,{size:r+=b.sizeInBytes(),header:t,indirectObjects:o,trailer:b}]}}))}))},t.forContext=function(e,r,n,o){return void 0===n&&(n=!0),void 0===o&&(o=50),new t(e,r,n,o)},t}(bP);const EP=kP;var OP=function(e){function t(t){var r=e.call(this)||this;return r.value=t,r}return gA(t,e),t.prototype.asBytes=function(){for(var e=this.value+(this.value.length%2==1?\"0\":\"\"),t=e.length,r=new Uint8Array(e.length/2),n=0,o=0;n<t;){var i=parseInt(e.substring(n,n+2),16);r[o]=i,n+=2,o+=1}return r},t.prototype.decodeText=function(){var e=this.asBytes();return sT(e)?eT(e):UT(e)},t.prototype.decodeDate=function(){var e=this.decodeText(),t=HA(e);if(!t)throw new rj(e);return t},t.prototype.asString=function(){return this.value},t.prototype.clone=function(){return t.of(this.value)},t.prototype.toString=function(){return\"<\"+this.value+\">\"},t.prototype.sizeInBytes=function(){return this.value.length+2},t.prototype.copyBytesInto=function(e,t){return e[t++]=wj.LessThan,t+=_A(this.value,e,t),e[t++]=wj.GreaterThan,this.value.length+2},t.of=function(e){return new t(e)},t.fromText=function(e){for(var r=function(e,t){void 0===t&&(t=!0);var r=[];t&&r.push(65279);for(var n=0,o=e.length;n<o;){var i=e.codePointAt(n);if(i<65536)r.push(i),n+=1;else{if(!(i<1114112))throw new Error(\"Invalid code point: 0x\"+PA(i));r.push(ZA(i),QA(i)),n+=2}}return new Uint16Array(r)}(e),n=\"\",o=0,i=r.length;o<i;o++)n+=jA(r[o],4);return new t(n)},t}(Sj);const AP=OP;var TP=function(){function e(e,t){this.encoding=e===mT.ZapfDingbats?CT.ZapfDingbats:e===mT.Symbol?CT.Symbol:CT.WinAnsi,this.font=yT.load(e),this.fontName=this.font.FontName,this.customName=t}return e.prototype.encodeText=function(e){for(var t=this.encodeTextAsGlyphs(e),r=new Array(t.length),n=0,o=t.length;n<o;n++)r[n]=PA(t[n].code);return AP.of(r.join(\"\"))},e.prototype.widthOfTextAtSize=function(e,t){for(var r=this.encodeTextAsGlyphs(e),n=0,o=0,i=r.length;o<i;o++){var a=r[o].name,s=(r[o+1]||{}).name,l=this.font.getXAxisKerningForPair(a,s)||0;n+=this.widthOfGlyph(a)+l}return n*(t/1e3)},e.prototype.heightOfFontAtSize=function(e,t){void 0===t&&(t={});var r=t.descender,n=void 0===r||r,o=this.font,i=o.Ascender,a=o.Descender,s=o.FontBBox,l=(i||s[3])-(a||s[1]);return n||(l+=a||0),l/1e3*e},e.prototype.sizeOfFontAtHeight=function(e){var t=this.font,r=t.Ascender,n=t.Descender,o=t.FontBBox;return 1e3*e/((r||o[3])-(n||o[1]))},e.prototype.embedIntoContext=function(e,t){var r=e.obj({Type:\"Font\",Subtype:\"Type1\",BaseFont:this.customName||this.fontName,Encoding:this.encoding===CT.WinAnsi?\"WinAnsiEncoding\":void 0});return t?(e.assign(t,r),t):e.register(r)},e.prototype.widthOfGlyph=function(e){return this.font.getWidthOfGlyph(e)||250},e.prototype.encodeTextAsGlyphs=function(e){for(var t=Array.from(e),r=new Array(t.length),n=0,o=t.length;n<o;n++){var i=TA(t[n]);r[n]=this.encoding.encodeUnicodeCodePoint(i)}return r},e.for=function(t,r){return new e(t,r)},e}();const jP=TP;var PP=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return\"<\"+e.join(\"\")+\">\"},MP=function(e){return jA(e,4)},RP=function(e){if(function(e){return e>=0&&e<=65535}(e))return MP(e);if(function(e){return e>=65536&&e<=1114111}(e)){var t=ZA(e),r=QA(e);return\"\"+MP(t)+MP(r)}var n=PA(e);throw new Error(\"0x\"+n+\" is not a valid UTF-8 or UTF-16 codepoint.\")},_P=function(e){function t(t){var r=e.call(this)||this;return r.value=t,r}return gA(t,e),t.prototype.asBytes=function(){for(var e=[],t=\"\",r=!1,n=function(t){void 0!==t&&e.push(t),r=!1},o=0,i=this.value.length;o<i;o++){var a=this.value[o],s=AA(a),l=this.value[o+1];r?s===wj.Newline||s===wj.CarriageReturn?n():s===wj.n?n(wj.Newline):s===wj.r?n(wj.CarriageReturn):s===wj.t?n(wj.Tab):s===wj.b?n(wj.Backspace):s===wj.f?n(wj.FormFeed):s===wj.LeftParen?n(wj.LeftParen):s===wj.RightParen?n(wj.RightParen):s===wj.Backspace?n(wj.BackSlash):s>=wj.Zero&&s<=wj.Seven?3!==(t+=a).length&&l>=\"0\"&&l<=\"7\"||(n(parseInt(t,8)),t=\"\"):n(s):s===wj.BackSlash?r=!0:n(s)}return new Uint8Array(e)},t.prototype.decodeText=function(){var e=this.asBytes();return sT(e)?eT(e):UT(e)},t.prototype.decodeDate=function(){var e=this.decodeText(),t=HA(e);if(!t)throw new rj(e);return t},t.prototype.asString=function(){return this.value},t.prototype.clone=function(){return t.of(this.value)},t.prototype.toString=function(){return\"(\"+this.value+\")\"},t.prototype.sizeInBytes=function(){return this.value.length+2},t.prototype.copyBytesInto=function(e,t){return e[t++]=wj.LeftParen,t+=_A(this.value,e,t),e[t++]=wj.RightParen,this.value.length+2},t.of=function(e){return new t(e)},t.fromDate=function(e){return new t(\"D:\"+RA(String(e.getUTCFullYear()),4,\"0\")+RA(String(e.getUTCMonth()+1),2,\"0\")+RA(String(e.getUTCDate()),2,\"0\")+RA(String(e.getUTCHours()),2,\"0\")+RA(String(e.getUTCMinutes()),2,\"0\")+RA(String(e.getUTCSeconds()),2,\"0\")+\"Z\")},t}(Sj);const IP=_P;var NP=function(){function e(e,t,r,n){var o=this;this.allGlyphsInFontSortedById=function(){for(var e=new Array(o.font.characterSet.length),t=0,r=e.length;t<r;t++){var n=o.font.characterSet[t];e[t]=o.font.glyphForCodePoint(n)}return function(e,t){for(var r=[],n=0,o=e.length;n<o;n++){var i=e[n],a=e[n-1];0!==n&&t(i)===t(a)||r.push(i)}return r}(e.sort(KA),(function(e){return e.id}))},this.font=e,this.scale=1e3/this.font.unitsPerEm,this.fontData=t,this.fontName=this.font.postscriptName||\"Font\",this.customName=r,this.fontFeatures=n,this.baseFontName=\"\",this.glyphCache=WT.populatedBy(this.allGlyphsInFontSortedById)}return e.for=function(t,r,n,o){return bA(this,void 0,void 0,(function(){return yA(this,(function(i){switch(i.label){case 0:return[4,t.create(r)];case 1:return[2,new e(i.sent(),r,n,o)]}}))}))},e.prototype.encodeText=function(e){for(var t=this.font.layout(e,this.fontFeatures).glyphs,r=new Array(t.length),n=0,o=t.length;n<o;n++)r[n]=jA(t[n].id,4);return AP.of(r.join(\"\"))},e.prototype.widthOfTextAtSize=function(e,t){for(var r=this.font.layout(e,this.fontFeatures).glyphs,n=0,o=0,i=r.length;o<i;o++)n+=r[o].advanceWidth*this.scale;return n*(t/1e3)},e.prototype.heightOfFontAtSize=function(e,t){void 0===t&&(t={});var r=t.descender,n=void 0===r||r,o=this.font,i=o.ascent,a=o.descent,s=o.bbox,l=(i||s.maxY)*this.scale-(a||s.minY)*this.scale;return n||(l-=Math.abs(a)||0),l/1e3*e},e.prototype.sizeOfFontAtHeight=function(e){var t=this.font,r=t.ascent,n=t.descent,o=t.bbox;return 1e3*e/((r||o.maxY)*this.scale-(n||o.minY)*this.scale)},e.prototype.embedIntoContext=function(e,t){return this.baseFontName=this.customName||e.addRandomSuffix(this.fontName),this.embedFontDict(e,t)},e.prototype.embedFontDict=function(e,t){return bA(this,void 0,void 0,(function(){var r,n,o;return yA(this,(function(i){switch(i.label){case 0:return[4,this.embedCIDFontDict(e)];case 1:return r=i.sent(),n=this.embedUnicodeCmap(e),o=e.obj({Type:\"Font\",Subtype:\"Type0\",BaseFont:this.baseFontName,Encoding:\"Identity-H\",DescendantFonts:[r],ToUnicode:n}),t?(e.assign(t,o),[2,t]):[2,e.register(o)]}}))}))},e.prototype.isCFF=function(){return this.font.cff},e.prototype.embedCIDFontDict=function(e){return bA(this,void 0,void 0,(function(){var t,r;return yA(this,(function(n){switch(n.label){case 0:return[4,this.embedFontDescriptor(e)];case 1:return t=n.sent(),r=e.obj({Type:\"Font\",Subtype:this.isCFF()?\"CIDFontType0\":\"CIDFontType2\",CIDToGIDMap:\"Identity\",BaseFont:this.baseFontName,CIDSystemInfo:{Registry:IP.of(\"Adobe\"),Ordering:IP.of(\"Identity\"),Supplement:0},FontDescriptor:t,W:this.computeWidths()}),[2,e.register(r)]}}))}))},e.prototype.embedFontDescriptor=function(e){return bA(this,void 0,void 0,(function(){var t,r,n,o,i,a,s,l,c,u,d,f,h,p,m;return yA(this,(function(g){switch(g.label){case 0:return[4,this.embedFontStream(e)];case 1:return t=g.sent(),r=this.scale,n=this.font,o=n.italicAngle,i=n.ascent,a=n.descent,s=n.capHeight,l=n.xHeight,c=this.font.bbox,u=c.minX,d=c.minY,f=c.maxX,h=c.maxY,p=e.obj((m={Type:\"FontDescriptor\",FontName:this.baseFontName,Flags:(v=this.font,b=v[\"OS/2\"]?v[\"OS/2\"].sFamilyClass:0,y=function(e){var t=0,r=function(e){t|=1<<e-1};return e.fixedPitch&&r(1),e.serif&&r(2),e.symbolic&&r(3),e.script&&r(4),e.nonsymbolic&&r(6),e.italic&&r(7),e.allCap&&r(17),e.smallCap&&r(18),e.forceBold&&r(19),t}({fixedPitch:v.post.isFixedPitch,serif:1<=b&&b<=7,symbolic:!0,script:10===b,italic:v.head.macStyle.italic}),y),FontBBox:[u*r,d*r,f*r,h*r],ItalicAngle:o,Ascent:i*r,Descent:a*r,CapHeight:(s||i)*r,XHeight:(l||0)*r,StemV:0},m[this.isCFF()?\"FontFile3\":\"FontFile2\"]=t,m)),[2,e.register(p)]}var v,b,y}))}))},e.prototype.serializeFont=function(){return bA(this,void 0,void 0,(function(){return yA(this,(function(e){return[2,this.fontData]}))}))},e.prototype.embedFontStream=function(e){return bA(this,void 0,void 0,(function(){var t,r,n;return yA(this,(function(o){switch(o.label){case 0:return n=(r=e).flateStream,[4,this.serializeFont()];case 1:return t=n.apply(r,[o.sent(),{Subtype:this.isCFF()?\"CIDFontType0C\":void 0}]),[2,e.register(t)]}}))}))},e.prototype.embedUnicodeCmap=function(e){var t=function(e,t){for(var r=new Array(e.length),n=0,o=e.length;n<o;n++){var i=e[n],a=PP(MP(t(i))),s=PP.apply(void 0,i.codePoints.map(RP));r[n]=[a,s]}return function(e){return\"/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><ffff>\\nendcodespacerange\\n\"+e.length+\" beginbfchar\\n\"+e.map((function(e){return e[0]+\" \"+e[1]})).join(\"\\n\")+\"\\nendbfchar\\nendcmap\\nCMapName currentdict /CMap defineresource pop\\nend\\nend\"}(r)}(this.glyphCache.access(),this.glyphId.bind(this)),r=e.flateStream(t);return e.register(r)},e.prototype.glyphId=function(e){return e?e.id:-1},e.prototype.computeWidths=function(){for(var e=this.glyphCache.access(),t=[],r=[],n=0,o=e.length;n<o;n++){var i=e[n],a=e[n-1],s=this.glyphId(i),l=this.glyphId(a);0===n?t.push(s):s-l!==1&&(t.push(r),t.push(s),r=[]),r.push(i.advanceWidth*this.scale)}return t.push(r),t},e}();const FP=NP;var DP=function(e){function t(t,r,n,o){var i=e.call(this,t,r,n,o)||this;return i.subset=i.font.createSubset(),i.glyphs=[],i.glyphCache=WT.populatedBy((function(){return i.glyphs})),i.glyphIdMap=new Map,i}return gA(t,e),t.for=function(e,r,n,o){return bA(this,void 0,void 0,(function(){return yA(this,(function(i){switch(i.label){case 0:return[4,e.create(r)];case 1:return[2,new t(i.sent(),r,n,o)]}}))}))},t.prototype.encodeText=function(e){for(var t=this.font.layout(e,this.fontFeatures).glyphs,r=new Array(t.length),n=0,o=t.length;n<o;n++){var i=t[n],a=this.subset.includeGlyph(i);this.glyphs[a-1]=i,this.glyphIdMap.set(i.id,a),r[n]=jA(a,4)}return this.glyphCache.invalidate(),AP.of(r.join(\"\"))},t.prototype.isCFF=function(){return this.subset.cff},t.prototype.glyphId=function(e){return e?this.glyphIdMap.get(e.id):-1},t.prototype.serializeFont=function(){var e=this;return new Promise((function(t,r){var n=[];e.subset.encodeStream().on(\"data\",(function(e){return n.push(e)})).on(\"end\",(function(){return t(function(e){for(var t=0,r=0,n=e.length;r<n;r++)t+=e[r].length;var o=new Uint8Array(t),i=0;for(r=0,n=e.length;r<n;r++){var a=e[r];o.set(a,i),i+=a.length}return o}(n))})).on(\"error\",(function(e){return r(e)}))}))},t}(FP);const BP=DP;var LP;!function(e){e.Source=\"Source\",e.Data=\"Data\",e.Alternative=\"Alternative\",e.Supplement=\"Supplement\",e.EncryptedPayload=\"EncryptedPayload\",e.FormData=\"EncryptedPayload\",e.Schema=\"Schema\",e.Unspecified=\"Unspecified\"}(LP||(LP={}));var zP=function(){function e(e,t,r){void 0===r&&(r={}),this.fileData=e,this.fileName=t,this.options=r}return e.for=function(t,r,n){return void 0===n&&(n={}),new e(t,r,n)},e.prototype.embedIntoContext=function(e,t){return bA(this,void 0,void 0,(function(){var r,n,o,i,a,s,l,c,u;return yA(this,(function(d){return r=this.options,n=r.mimeType,o=r.description,i=r.creationDate,a=r.modificationDate,s=r.afRelationship,l=e.flateStream(this.fileData,{Type:\"EmbeddedFile\",Subtype:null!=n?n:void 0,Params:{Size:this.fileData.length,CreationDate:i?IP.fromDate(i):void 0,ModDate:a?IP.fromDate(a):void 0}}),c=e.register(l),u=e.obj({Type:\"Filespec\",F:IP.of(this.fileName),UF:AP.fromText(this.fileName),EF:{F:c},Desc:o?AP.fromText(o):void 0,AFRelationship:null!=s?s:void 0}),t?(e.assign(t,u),[2,t]):[2,e.register(u)]}))}))},e}();const HP=zP;var UP,VP=[65472,65473,65474,65475,65477,65478,65479,65480,65481,65482,65483,65484,65485,65486,65487];!function(e){e.DeviceGray=\"DeviceGray\",e.DeviceRGB=\"DeviceRGB\",e.DeviceCMYK=\"DeviceCMYK\"}(UP||(UP={}));var WP={1:UP.DeviceGray,3:UP.DeviceRGB,4:UP.DeviceCMYK};const GP=function(){function e(e,t,r,n,o){this.imageData=e,this.bitsPerComponent=t,this.width=r,this.height=n,this.colorSpace=o}return e.for=function(t){return bA(this,void 0,void 0,(function(){var r,n,o,i,a,s,l,c;return yA(this,(function(u){if(65496!==(r=new DataView(t.buffer)).getUint16(0))throw new Error(\"SOI not found in JPEG\");for(n=2;n<r.byteLength&&(o=r.getUint16(n),n+=2,!VP.includes(o));)n+=r.getUint16(n);if(!VP.includes(o))throw new Error(\"Invalid JPEG\");if(n+=2,i=r.getUint8(n++),a=r.getUint16(n),n+=2,s=r.getUint16(n),n+=2,l=r.getUint8(n++),!(c=WP[l]))throw new Error(\"Unknown JPEG channel.\");return[2,new e(t,i,s,a,c)]}))}))},e.prototype.embedIntoContext=function(e,t){return bA(this,void 0,void 0,(function(){var r;return yA(this,(function(n){return r=e.stream(this.imageData,{Type:\"XObject\",Subtype:\"Image\",BitsPerComponent:this.bitsPerComponent,Width:this.width,Height:this.height,ColorSpace:this.colorSpace,Filter:\"DCTDecode\",Decode:this.colorSpace===UP.DeviceCMYK?[1,0,1,0,1,0,1,0]:void 0}),t?(e.assign(t,r),[2,t]):[2,e.register(r)]}))}))},e}();var qP,KP,XP,YP={toRGBA8:function(e){var t=e.width,r=e.height;if(null==e.tabs.acTL)return[YP.toRGBA8.decodeImage(e.data,t,r,e).buffer];var n=[];null==e.frames[0].data&&(e.frames[0].data=e.data);for(var o=t*r*4,i=new Uint8Array(o),a=new Uint8Array(o),s=new Uint8Array(o),l=0;l<e.frames.length;l++){var c=e.frames[l],u=c.rect.x,d=c.rect.y,f=c.rect.width,h=c.rect.height,p=YP.toRGBA8.decodeImage(c.data,f,h,e);if(0!=l)for(var m=0;m<o;m++)s[m]=i[m];if(0==c.blend?YP._copyTile(p,f,h,i,t,r,u,d,0):1==c.blend&&YP._copyTile(p,f,h,i,t,r,u,d,1),n.push(i.buffer.slice(0)),0==c.dispose);else if(1==c.dispose)YP._copyTile(a,f,h,i,t,r,u,d,0);else if(2==c.dispose)for(m=0;m<o;m++)i[m]=s[m]}return n}};YP.toRGBA8.decodeImage=function(e,t,r,n){var o=t*r,i=YP.decode._getBPP(n),a=Math.ceil(t*i/8),s=new Uint8Array(4*o),l=new Uint32Array(s.buffer),c=n.ctype,u=n.depth,d=YP._bin.readUshort;if(Date.now(),6==c){var f=o<<2;if(8==u)for(var h=0;h<f;h+=4)s[h]=e[h],s[h+1]=e[h+1],s[h+2]=e[h+2],s[h+3]=e[h+3];if(16==u)for(h=0;h<f;h++)s[h]=e[h<<1]}else if(2==c){var p=n.tabs.tRNS;if(null==p){if(8==u)for(h=0;h<o;h++){var m=3*h;l[h]=255<<24|e[m+2]<<16|e[m+1]<<8|e[m]}if(16==u)for(h=0;h<o;h++)m=6*h,l[h]=255<<24|e[m+4]<<16|e[m+2]<<8|e[m]}else{var g=p[0],v=p[1],b=p[2];if(8==u)for(h=0;h<o;h++){var y=h<<2;m=3*h,l[h]=255<<24|e[m+2]<<16|e[m+1]<<8|e[m],e[m]==g&&e[m+1]==v&&e[m+2]==b&&(s[y+3]=0)}if(16==u)for(h=0;h<o;h++)y=h<<2,m=6*h,l[h]=255<<24|e[m+4]<<16|e[m+2]<<8|e[m],d(e,m)==g&&d(e,m+2)==v&&d(e,m+4)==b&&(s[y+3]=0)}}else if(3==c){var w=n.tabs.PLTE,x=n.tabs.tRNS,S=x?x.length:0;if(1==u)for(var C=0;C<r;C++){var k=C*a,E=C*t;for(h=0;h<t;h++){y=E+h<<2;var O=3*(A=e[k+(h>>3)]>>7-(7&h)&1);s[y]=w[O],s[y+1]=w[O+1],s[y+2]=w[O+2],s[y+3]=A<S?x[A]:255}}if(2==u)for(C=0;C<r;C++)for(k=C*a,E=C*t,h=0;h<t;h++)y=E+h<<2,O=3*(A=e[k+(h>>2)]>>6-((3&h)<<1)&3),s[y]=w[O],s[y+1]=w[O+1],s[y+2]=w[O+2],s[y+3]=A<S?x[A]:255;if(4==u)for(C=0;C<r;C++)for(k=C*a,E=C*t,h=0;h<t;h++)y=E+h<<2,O=3*(A=e[k+(h>>1)]>>4-((1&h)<<2)&15),s[y]=w[O],s[y+1]=w[O+1],s[y+2]=w[O+2],s[y+3]=A<S?x[A]:255;if(8==u)for(h=0;h<o;h++){var A;y=h<<2,O=3*(A=e[h]),s[y]=w[O],s[y+1]=w[O+1],s[y+2]=w[O+2],s[y+3]=A<S?x[A]:255}}else if(4==c){if(8==u)for(h=0;h<o;h++){y=h<<2;var T=e[j=h<<1];s[y]=T,s[y+1]=T,s[y+2]=T,s[y+3]=e[j+1]}if(16==u)for(h=0;h<o;h++){var j;y=h<<2,T=e[j=h<<2],s[y]=T,s[y+1]=T,s[y+2]=T,s[y+3]=e[j+2]}}else if(0==c)for(g=n.tabs.tRNS?n.tabs.tRNS:-1,C=0;C<r;C++){var P=C*a,M=C*t;if(1==u)for(var R=0;R<t;R++){var _=(T=255*(e[P+(R>>>3)]>>>7-(7&R)&1))==255*g?0:255;l[M+R]=_<<24|T<<16|T<<8|T}else if(2==u)for(R=0;R<t;R++)_=(T=85*(e[P+(R>>>2)]>>>6-((3&R)<<1)&3))==85*g?0:255,l[M+R]=_<<24|T<<16|T<<8|T;else if(4==u)for(R=0;R<t;R++)_=(T=17*(e[P+(R>>>1)]>>>4-((1&R)<<2)&15))==17*g?0:255,l[M+R]=_<<24|T<<16|T<<8|T;else if(8==u)for(R=0;R<t;R++)_=(T=e[P+R])==g?0:255,l[M+R]=_<<24|T<<16|T<<8|T;else if(16==u)for(R=0;R<t;R++)T=e[P+(R<<1)],_=d(e,P+(R<<h))==g?0:255,l[M+R]=_<<24|T<<16|T<<8|T}return s},YP.decode=function(e){for(var t,r=new Uint8Array(e),n=8,o=YP._bin,i=o.readUshort,a=o.readUint,s={tabs:{},frames:[]},l=new Uint8Array(r.length),c=0,u=0,d=[137,80,78,71,13,10,26,10],f=0;f<8;f++)if(r[f]!=d[f])throw\"The input is not a PNG file!\";for(;n<r.length;){var h=o.readUint(r,n);n+=4;var p=o.readASCII(r,n,4);if(n+=4,\"IHDR\"==p)YP.decode._IHDR(r,n,s);else if(\"IDAT\"==p){for(f=0;f<h;f++)l[c+f]=r[n+f];c+=h}else if(\"acTL\"==p)s.tabs[p]={num_frames:a(r,n),num_plays:a(r,n+4)},t=new Uint8Array(r.length);else if(\"fcTL\"==p){var m;0!=u&&((m=s.frames[s.frames.length-1]).data=YP.decode._decompress(s,t.slice(0,u),m.rect.width,m.rect.height),u=0);var g={x:a(r,n+12),y:a(r,n+16),width:a(r,n+4),height:a(r,n+8)},v=i(r,n+22);v=i(r,n+20)/(0==v?100:v);var b={rect:g,delay:Math.round(1e3*v),dispose:r[n+24],blend:r[n+25]};s.frames.push(b)}else if(\"fdAT\"==p){for(f=0;f<h-4;f++)t[u+f]=r[n+f+4];u+=h-4}else if(\"pHYs\"==p)s.tabs[p]=[o.readUint(r,n),o.readUint(r,n+4),r[n+8]];else if(\"cHRM\"==p)for(s.tabs[p]=[],f=0;f<8;f++)s.tabs[p].push(o.readUint(r,n+4*f));else if(\"tEXt\"==p){null==s.tabs[p]&&(s.tabs[p]={});var y=o.nextZero(r,n),w=o.readASCII(r,n,y-n),x=o.readASCII(r,y+1,n+h-y-1);s.tabs[p][w]=x}else if(\"iTXt\"==p){null==s.tabs[p]&&(s.tabs[p]={}),y=0;var S=n;y=o.nextZero(r,S),w=o.readASCII(r,S,y-S),r[S=y+1],r[S+1],S+=2,y=o.nextZero(r,S),o.readASCII(r,S,y-S),S=y+1,y=o.nextZero(r,S),o.readUTF8(r,S,y-S),S=y+1,x=o.readUTF8(r,S,h-(S-n)),s.tabs[p][w]=x}else if(\"PLTE\"==p)s.tabs[p]=o.readBytes(r,n,h);else if(\"hIST\"==p){var C=s.tabs.PLTE.length/3;for(s.tabs[p]=[],f=0;f<C;f++)s.tabs[p].push(i(r,n+2*f))}else if(\"tRNS\"==p)3==s.ctype?s.tabs[p]=o.readBytes(r,n,h):0==s.ctype?s.tabs[p]=i(r,n):2==s.ctype&&(s.tabs[p]=[i(r,n),i(r,n+2),i(r,n+4)]);else if(\"gAMA\"==p)s.tabs[p]=o.readUint(r,n)/1e5;else if(\"sRGB\"==p)s.tabs[p]=r[n];else if(\"bKGD\"==p)0==s.ctype||4==s.ctype?s.tabs[p]=[i(r,n)]:2==s.ctype||6==s.ctype?s.tabs[p]=[i(r,n),i(r,n+2),i(r,n+4)]:3==s.ctype&&(s.tabs[p]=r[n]);else if(\"IEND\"==p)break;n+=h,o.readUint(r,n),n+=4}return 0!=u&&((m=s.frames[s.frames.length-1]).data=YP.decode._decompress(s,t.slice(0,u),m.rect.width,m.rect.height),u=0),s.data=YP.decode._decompress(s,l,s.width,s.height),delete s.compress,delete s.interlace,delete s.filter,s},YP.decode._decompress=function(e,t,r,n){Date.now();var o=YP.decode._getBPP(e),i=Math.ceil(r*o/8),a=new Uint8Array((i+1+e.interlace)*n);return t=YP.decode._inflate(t,a),Date.now(),0==e.interlace?t=YP.decode._filterZero(t,e,0,r,n):1==e.interlace&&(t=YP.decode._readInterlace(t,e)),t},YP.decode._inflate=function(e,t){return YP.inflateRaw(new Uint8Array(e.buffer,2,e.length-6),t)},YP.inflateRaw=((XP={}).H={},XP.H.N=function(e,t){var r,n,o=Uint8Array,i=0,a=0,s=0,l=0,c=0,u=0,d=0,f=0,h=0;if(3==e[0]&&0==e[1])return t||new o(0);var p=XP.H,m=p.b,g=p.e,v=p.R,b=p.n,y=p.A,w=p.Z,x=p.m,S=null==t;for(S&&(t=new o(e.length>>>2<<3));0==i;)if(i=m(e,h,1),a=m(e,h+1,2),h+=3,0!=a){if(S&&(t=XP.H.W(t,f+(1<<17))),1==a&&(r=x.J,n=x.h,u=511,d=31),2==a){s=g(e,h,5)+257,l=g(e,h+5,5)+1,c=g(e,h+10,4)+4,h+=14;for(var C=1,k=0;k<38;k+=2)x.Q[k]=0,x.Q[k+1]=0;for(k=0;k<c;k++){var E=g(e,h+3*k,3);x.Q[1+(x.X[k]<<1)]=E,E>C&&(C=E)}h+=3*c,b(x.Q,C),y(x.Q,C,x.u),r=x.w,n=x.d,h=v(x.u,(1<<C)-1,s+l,e,h,x.v);var O=p.V(x.v,0,s,x.C);u=(1<<O)-1;var A=p.V(x.v,s,l,x.D);d=(1<<A)-1,b(x.C,O),y(x.C,O,r),b(x.D,A),y(x.D,A,n)}for(;;){var T=r[w(e,h)&u];h+=15&T;var j=T>>>4;if(j>>>8==0)t[f++]=j;else{if(256==j)break;var P=f+j-254;if(j>264){var M=x.q[j-257];P=f+(M>>>3)+g(e,h,7&M),h+=7&M}var R=n[w(e,h)&d];h+=15&R;var _=R>>>4,I=x.c[_],N=(I>>>4)+m(e,h,15&I);for(h+=15&I;f<P;)t[f]=t[f++-N],t[f]=t[f++-N],t[f]=t[f++-N],t[f]=t[f++-N];f=P}}}else{7&h&&(h+=8-(7&h));var F=(h>>>3)+4,D=e[F-4]|e[F-3]<<8;S&&(t=XP.H.W(t,f+D)),t.set(new o(e.buffer,e.byteOffset+F,D),f),h=F+D<<3,f+=D}return t.length==f?t:t.slice(0,f)},XP.H.W=function(e,t){var r=e.length;if(t<=r)return e;var n=new Uint8Array(r<<1);return n.set(e,0),n},XP.H.R=function(e,t,r,n,o,i){for(var a=XP.H.e,s=XP.H.Z,l=0;l<r;){var c=e[s(n,o)&t];o+=15&c;var u=c>>>4;if(u<=15)i[l]=u,l++;else{var d=0,f=0;16==u?(f=3+a(n,o,2),o+=2,d=i[l-1]):17==u?(f=3+a(n,o,3),o+=3):18==u&&(f=11+a(n,o,7),o+=7);for(var h=l+f;l<h;)i[l]=d,l++}}return o},XP.H.V=function(e,t,r,n){for(var o=0,i=0,a=n.length>>>1;i<r;){var s=e[i+t];n[i<<1]=0,n[1+(i<<1)]=s,s>o&&(o=s),i++}for(;i<a;)n[i<<1]=0,n[1+(i<<1)]=0,i++;return o},XP.H.n=function(e,t){for(var r,n,o,i,a=XP.H.m,s=e.length,l=a.j,c=0;c<=t;c++)l[c]=0;for(c=1;c<s;c+=2)l[e[c]]++;var u=a.K;for(r=0,l[0]=0,n=1;n<=t;n++)r=r+l[n-1]<<1,u[n]=r;for(o=0;o<s;o+=2)0!=(i=e[o+1])&&(e[o]=u[i],u[i]++)},XP.H.A=function(e,t,r){for(var n=e.length,o=XP.H.m.r,i=0;i<n;i+=2)if(0!=e[i+1])for(var a=i>>1,s=e[i+1],l=a<<4|s,c=t-s,u=e[i]<<c,d=u+(1<<c);u!=d;)r[o[u]>>>15-t]=l,u++},XP.H.l=function(e,t){for(var r=XP.H.m.r,n=15-t,o=0;o<e.length;o+=2){var i=e[o]<<t-e[o+1];e[o]=r[i]>>>n}},XP.H.M=function(e,t,r){r<<=7&t;var n=t>>>3;e[n]|=r,e[n+1]|=r>>>8},XP.H.I=function(e,t,r){r<<=7&t;var n=t>>>3;e[n]|=r,e[n+1]|=r>>>8,e[n+2]|=r>>>16},XP.H.e=function(e,t,r){return(e[t>>>3]|e[(t>>>3)+1]<<8)>>>(7&t)&(1<<r)-1},XP.H.b=function(e,t,r){return(e[t>>>3]|e[(t>>>3)+1]<<8|e[(t>>>3)+2]<<16)>>>(7&t)&(1<<r)-1},XP.H.Z=function(e,t){return(e[t>>>3]|e[(t>>>3)+1]<<8|e[(t>>>3)+2]<<16)>>>(7&t)},XP.H.i=function(e,t){return(e[t>>>3]|e[(t>>>3)+1]<<8|e[(t>>>3)+2]<<16|e[(t>>>3)+3]<<24)>>>(7&t)},XP.H.m=(qP=Uint16Array,KP=Uint32Array,{K:new qP(16),j:new qP(16),X:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],S:[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,999,999,999],T:[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,0,0,0],q:new qP(32),p:[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,65535,65535],z:[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,0,0],c:new KP(32),J:new qP(512),_:[],h:new qP(32),$:[],w:new qP(32768),C:[],v:[],d:new qP(32768),D:[],u:new qP(512),Q:[],r:new qP(32768),s:new KP(286),Y:new KP(30),a:new KP(19),t:new KP(15e3),k:new qP(65536),g:new qP(32768)}),function(){for(var e=XP.H.m,t=0;t<32768;t++){var r=t;r=(4278255360&(r=(4042322160&(r=(3435973836&(r=(2863311530&r)>>>1|(1431655765&r)<<1))>>>2|(858993459&r)<<2))>>>4|(252645135&r)<<4))>>>8|(16711935&r)<<8,e.r[t]=(r>>>16|r<<16)>>>17}function n(e,t,r){for(;0!=t--;)e.push(0,r)}for(t=0;t<32;t++)e.q[t]=e.S[t]<<3|e.T[t],e.c[t]=e.p[t]<<4|e.z[t];n(e._,144,8),n(e._,112,9),n(e._,24,7),n(e._,8,8),XP.H.n(e._,9),XP.H.A(e._,9,e.J),XP.H.l(e._,9),n(e.$,32,5),XP.H.n(e.$,5),XP.H.A(e.$,5,e.h),XP.H.l(e.$,5),n(e.Q,19,0),n(e.C,286,0),n(e.D,30,0),n(e.v,320,0)}(),XP.H.N),YP.decode._readInterlace=function(e,t){for(var r=t.width,n=t.height,o=YP.decode._getBPP(t),i=o>>3,a=Math.ceil(r*o/8),s=new Uint8Array(n*a),l=0,c=[0,0,4,0,2,0,1],u=[0,4,0,2,0,1,0],d=[8,8,8,4,4,2,2],f=[8,8,4,4,2,2,1],h=0;h<7;){for(var p=d[h],m=f[h],g=0,v=0,b=c[h];b<n;)b+=p,v++;for(var y=u[h];y<r;)y+=m,g++;var w=Math.ceil(g*o/8);YP.decode._filterZero(e,t,l,g,v);for(var x=0,S=c[h];S<n;){for(var C=u[h],k=l+x*w<<3;C<r;){var E;if(1==o&&(E=(E=e[k>>3])>>7-(7&k)&1,s[S*a+(C>>3)]|=E<<7-(7&C)),2==o&&(E=(E=e[k>>3])>>6-(7&k)&3,s[S*a+(C>>2)]|=E<<6-((3&C)<<1)),4==o&&(E=(E=e[k>>3])>>4-(7&k)&15,s[S*a+(C>>1)]|=E<<4-((1&C)<<2)),o>=8)for(var O=S*a+C*i,A=0;A<i;A++)s[O+A]=e[(k>>3)+A];k+=o,C+=m}x++,S+=p}g*v!=0&&(l+=v*(1+w)),h+=1}return s},YP.decode._getBPP=function(e){return[1,null,3,1,2,null,4][e.ctype]*e.depth},YP.decode._filterZero=function(e,t,r,n,o){var i=YP.decode._getBPP(t),a=Math.ceil(n*i/8),s=YP.decode._paeth;i=Math.ceil(i/8);var l=0,c=1,u=e[r],d=0;if(u>1&&(e[r]=[0,0,1][u-2]),3==u)for(d=i;d<a;d++)e[d+1]=e[d+1]+(e[d+1-i]>>>1)&255;for(var f=0;f<o;f++)if(d=0,0==(u=e[(c=(l=r+f*a)+f+1)-1]))for(;d<a;d++)e[l+d]=e[c+d];else if(1==u){for(;d<i;d++)e[l+d]=e[c+d];for(;d<a;d++)e[l+d]=e[c+d]+e[l+d-i]}else if(2==u)for(;d<a;d++)e[l+d]=e[c+d]+e[l+d-a];else if(3==u){for(;d<i;d++)e[l+d]=e[c+d]+(e[l+d-a]>>>1);for(;d<a;d++)e[l+d]=e[c+d]+(e[l+d-a]+e[l+d-i]>>>1)}else{for(;d<i;d++)e[l+d]=e[c+d]+s(0,e[l+d-a],0);for(;d<a;d++)e[l+d]=e[c+d]+s(e[l+d-i],e[l+d-a],e[l+d-i-a])}return e},YP.decode._paeth=function(e,t,r){var n=e+t-r,o=n-e,i=n-t,a=n-r;return o*o<=i*i&&o*o<=a*a?e:i*i<=a*a?t:r},YP.decode._IHDR=function(e,t,r){var n=YP._bin;r.width=n.readUint(e,t),t+=4,r.height=n.readUint(e,t),t+=4,r.depth=e[t],t++,r.ctype=e[t],t++,r.compress=e[t],t++,r.filter=e[t],t++,r.interlace=e[t],t++},YP._bin={nextZero:function(e,t){for(;0!=e[t];)t++;return t},readUshort:function(e,t){return e[t]<<8|e[t+1]},writeUshort:function(e,t,r){e[t]=r>>8&255,e[t+1]=255&r},readUint:function(e,t){return 16777216*e[t]+(e[t+1]<<16|e[t+2]<<8|e[t+3])},writeUint:function(e,t,r){e[t]=r>>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=255&r},readASCII:function(e,t,r){for(var n=\"\",o=0;o<r;o++)n+=String.fromCharCode(e[t+o]);return n},writeASCII:function(e,t,r){for(var n=0;n<r.length;n++)e[t+n]=r.charCodeAt(n)},readBytes:function(e,t,r){for(var n=[],o=0;o<r;o++)n.push(e[t+o]);return n},pad:function(e){return e.length<2?\"0\"+e:e},readUTF8:function(e,t,r){for(var n,o=\"\",i=0;i<r;i++)o+=\"%\"+YP._bin.pad(e[t+i].toString(16));try{n=decodeURIComponent(o)}catch(n){return YP._bin.readASCII(e,t,r)}return n}},YP._copyTile=function(e,t,r,n,o,i,a,s,l){for(var c=Math.min(t,o),u=Math.min(r,i),d=0,f=0,h=0;h<u;h++)for(var p=0;p<c;p++)if(a>=0&&s>=0?(d=h*t+p<<2,f=(s+h)*o+a+p<<2):(d=(-s+h)*t-a+p<<2,f=h*o+p<<2),0==l)n[f]=e[d],n[f+1]=e[d+1],n[f+2]=e[d+2],n[f+3]=e[d+3];else if(1==l){var m=e[d+3]*(1/255),g=e[d]*m,v=e[d+1]*m,b=e[d+2]*m,y=n[f+3]*(1/255),w=n[f]*y,x=n[f+1]*y,S=n[f+2]*y,C=1-m,k=m+y*C,E=0==k?0:1/k;n[f+3]=255*k,n[f+0]=(g+w*C)*E,n[f+1]=(v+x*C)*E,n[f+2]=(b+S*C)*E}else if(2==l)m=e[d+3],g=e[d],v=e[d+1],b=e[d+2],y=n[f+3],w=n[f],x=n[f+1],S=n[f+2],m==y&&g==w&&v==x&&b==S?(n[f]=0,n[f+1]=0,n[f+2]=0,n[f+3]=0):(n[f]=g,n[f+1]=v,n[f+2]=b,n[f+3]=m);else if(3==l){if(m=e[d+3],g=e[d],v=e[d+1],b=e[d+2],y=n[f+3],w=n[f],x=n[f+1],S=n[f+2],m==y&&g==w&&v==x&&b==S)continue;if(m<220&&y>20)return!1}return!0},YP.encode=function(e,t,r,n,o,i,a){null==n&&(n=0),null==a&&(a=!1);var s=YP.encode.compress(e,t,r,n,[!1,!1,!1,0,a]);return YP.encode.compressPNG(s,-1),YP.encode._main(s,t,r,o,i)},YP.encodeLL=function(e,t,r,n,o,i,a,s){for(var l={ctype:0+(1==n?0:2)+(0==o?0:4),depth:i,frames:[]},c=(Date.now(),(n+o)*i),u=c*t,d=0;d<e.length;d++)l.frames.push({rect:{x:0,y:0,width:t,height:r},img:new Uint8Array(e[d]),blend:0,dispose:1,bpp:Math.ceil(c/8),bpl:Math.ceil(u/8)});return YP.encode.compressPNG(l,0,!0),YP.encode._main(l,t,r,a,s)},YP.encode._main=function(e,t,r,n,o){null==o&&(o={});var i=YP.crc.crc,a=YP._bin.writeUint,s=YP._bin.writeUshort,l=YP._bin.writeASCII,c=8,u=e.frames.length>1,d=!1,f=33+(u?20:0);if(null!=o.sRGB&&(f+=13),null!=o.pHYs&&(f+=21),3==e.ctype){for(var h=e.plte.length,p=0;p<h;p++)e.plte[p]>>>24!=255&&(d=!0);f+=8+3*h+4+(d?8+1*h+4:0)}for(var m=0;m<e.frames.length;m++)u&&(f+=38),f+=(k=e.frames[m]).cimg.length+12,0!=m&&(f+=4);f+=12;var g=new Uint8Array(f),v=[137,80,78,71,13,10,26,10];for(p=0;p<8;p++)g[p]=v[p];if(a(g,c,13),l(g,c+=4,\"IHDR\"),a(g,c+=4,t),a(g,c+=4,r),g[c+=4]=e.depth,g[++c]=e.ctype,g[++c]=0,g[++c]=0,g[++c]=0,a(g,++c,i(g,c-17,17)),c+=4,null!=o.sRGB&&(a(g,c,1),l(g,c+=4,\"sRGB\"),g[c+=4]=o.sRGB,a(g,++c,i(g,c-5,5)),c+=4),null!=o.pHYs&&(a(g,c,9),l(g,c+=4,\"pHYs\"),a(g,c+=4,o.pHYs[0]),a(g,c+=4,o.pHYs[1]),g[c+=4]=o.pHYs[2],a(g,++c,i(g,c-13,13)),c+=4),u&&(a(g,c,8),l(g,c+=4,\"acTL\"),a(g,c+=4,e.frames.length),a(g,c+=4,null!=o.loop?o.loop:0),a(g,c+=4,i(g,c-12,12)),c+=4),3==e.ctype){for(a(g,c,3*(h=e.plte.length)),l(g,c+=4,\"PLTE\"),c+=4,p=0;p<h;p++){var b=3*p,y=e.plte[p],w=255&y,x=y>>>8&255,S=y>>>16&255;g[c+b+0]=w,g[c+b+1]=x,g[c+b+2]=S}if(a(g,c+=3*h,i(g,c-3*h-4,3*h+4)),c+=4,d){for(a(g,c,h),l(g,c+=4,\"tRNS\"),c+=4,p=0;p<h;p++)g[c+p]=e.plte[p]>>>24&255;a(g,c+=h,i(g,c-h-4,h+4)),c+=4}}var C=0;for(m=0;m<e.frames.length;m++){var k=e.frames[m];u&&(a(g,c,26),l(g,c+=4,\"fcTL\"),a(g,c+=4,C++),a(g,c+=4,k.rect.width),a(g,c+=4,k.rect.height),a(g,c+=4,k.rect.x),a(g,c+=4,k.rect.y),s(g,c+=4,n[m]),s(g,c+=2,1e3),g[c+=2]=k.dispose,g[++c]=k.blend,a(g,++c,i(g,c-30,30)),c+=4);var E=k.cimg;a(g,c,(h=E.length)+(0==m?0:4));var O=c+=4;l(g,c,0==m?\"IDAT\":\"fdAT\"),c+=4,0!=m&&(a(g,c,C++),c+=4),g.set(E,c),a(g,c+=h,i(g,O,c-O)),c+=4}return a(g,c,0),l(g,c+=4,\"IEND\"),a(g,c+=4,i(g,c-4,4)),c+=4,g.buffer},YP.encode.compressPNG=function(e,t,r){for(var n=0;n<e.frames.length;n++){var o=e.frames[n],i=(o.rect.width,o.rect.height),a=new Uint8Array(i*o.bpl+i);o.cimg=YP.encode._filterZero(o.img,i,o.bpp,o.bpl,a,t,r)}},YP.encode.compress=function(e,t,r,n,o){for(var i=o[0],a=o[1],s=o[2],l=o[3],c=o[4],u=6,d=8,f=255,h=0;h<e.length;h++)for(var p=new Uint8Array(e[h]),m=p.length,g=0;g<m;g+=4)f&=p[g+3];var v=255!=f,b=YP.encode.framize(e,t,r,i,a,s),y={},w=[],x=[];if(0!=n){var S=[];for(g=0;g<b.length;g++)S.push(b[g].img.buffer);var C=YP.encode.concatRGBA(S),k=YP.quantize(C,n),E=0,O=new Uint8Array(k.abuf);for(g=0;g<b.length;g++){var A=(G=b[g].img).length;for(x.push(new Uint8Array(k.inds.buffer,E>>2,A>>2)),h=0;h<A;h+=4)G[h]=O[E+h],G[h+1]=O[E+h+1],G[h+2]=O[E+h+2],G[h+3]=O[E+h+3];E+=A}for(g=0;g<k.plte.length;g++)w.push(k.plte[g].est.rgba)}else for(h=0;h<b.length;h++){var T=b[h],j=new Uint32Array(T.img.buffer),P=T.rect.width,M=(m=j.length,new Uint8Array(m));for(x.push(M),g=0;g<m;g++){var R=j[g];if(0!=g&&R==j[g-1])M[g]=M[g-1];else if(g>P&&R==j[g-P])M[g]=M[g-P];else{var _=y[R];if(null==_&&(y[R]=_=w.length,w.push(R),w.length>=300))break;M[g]=_}}}var I=w.length;for(I<=256&&0==c&&(d=I<=2?1:I<=4?2:I<=16?4:8,d=Math.max(d,l)),h=0;h<b.length;h++){(T=b[h]).rect.x,T.rect.y,P=T.rect.width;var N=T.rect.height,F=T.img,D=(new Uint32Array(F.buffer),4*P),B=4;if(I<=256&&0==c){D=Math.ceil(d*P/8);for(var L=new Uint8Array(D*N),z=x[h],H=0;H<N;H++){g=H*D;var U=H*P;if(8==d)for(var V=0;V<P;V++)L[g+V]=z[U+V];else if(4==d)for(V=0;V<P;V++)L[g+(V>>1)]|=z[U+V]<<4-4*(1&V);else if(2==d)for(V=0;V<P;V++)L[g+(V>>2)]|=z[U+V]<<6-2*(3&V);else if(1==d)for(V=0;V<P;V++)L[g+(V>>3)]|=z[U+V]<<7-1*(7&V)}F=L,u=3,B=1}else if(0==v&&1==b.length){L=new Uint8Array(P*N*3);var W=P*N;for(g=0;g<W;g++){var G,q=4*g;L[G=3*g]=F[q],L[G+1]=F[q+1],L[G+2]=F[q+2]}F=L,u=2,B=3,D=3*P}T.img=F,T.bpl=D,T.bpp=B}return{ctype:u,depth:d,plte:w,frames:b}},YP.encode.framize=function(e,t,r,n,o,i){for(var a=[],s=0;s<e.length;s++){var l,c=new Uint8Array(e[s]),u=new Uint32Array(c.buffer),d=0,f=0,h=t,p=r,m=n?1:0;if(0!=s){for(var g=i||n||1==s||0!=a[s-2].dispose?1:2,v=0,b=1e9,y=0;y<g;y++){for(var w=new Uint8Array(e[s-1-y]),x=new Uint32Array(e[s-1-y]),S=t,C=r,k=-1,E=-1,O=0;O<r;O++)for(var A=0;A<t;A++)u[I=O*t+A]!=x[I]&&(A<S&&(S=A),A>k&&(k=A),O<C&&(C=O),O>E&&(E=O));-1==k&&(S=C=k=E=0),o&&(1&~S||S--,1&~C||C--);var T=(k-S+1)*(E-C+1);T<b&&(b=T,v=y,d=S,f=C,h=k-S+1,p=E-C+1)}w=new Uint8Array(e[s-1-v]),1==v&&(a[s-1].dispose=2),l=new Uint8Array(h*p*4),YP._copyTile(w,t,r,l,h,p,-d,-f,0),1==(m=YP._copyTile(c,t,r,l,h,p,-d,-f,3)?1:0)?YP.encode._prepareDiff(c,t,r,l,{x:d,y:f,width:h,height:p}):YP._copyTile(c,t,r,l,h,p,-d,-f,0)}else l=c.slice(0);a.push({rect:{x:d,y:f,width:h,height:p},img:l,blend:m,dispose:0})}if(n)for(s=0;s<a.length;s++)if(1!=(N=a[s]).blend){var j=N.rect,P=a[s-1].rect,M=Math.min(j.x,P.x),R=Math.min(j.y,P.y),_={x:M,y:R,width:Math.max(j.x+j.width,P.x+P.width)-M,height:Math.max(j.y+j.height,P.y+P.height)-R};a[s-1].dispose=1,s-1!=0&&YP.encode._updateFrame(e,t,r,a,s-1,_,o),YP.encode._updateFrame(e,t,r,a,s,_,o)}if(1!=e.length)for(var I=0;I<a.length;I++){var N;(N=a[I]).rect.width,N.rect.height}return a},YP.encode._updateFrame=function(e,t,r,n,o,i,a){for(var s=Uint8Array,l=Uint32Array,c=new s(e[o-1]),u=new l(e[o-1]),d=o+1<e.length?new s(e[o+1]):null,f=new s(e[o]),h=new l(f.buffer),p=t,m=r,g=-1,v=-1,b=0;b<i.height;b++)for(var y=0;y<i.width;y++){var w=i.x+y,x=i.y+b,S=x*t+w,C=h[S];0==C||0==n[o-1].dispose&&u[S]==C&&(null==d||0!=d[4*S+3])||(w<p&&(p=w),w>g&&(g=w),x<m&&(m=x),x>v&&(v=x))}-1==g&&(p=m=g=v=0),a&&(1&~p||p--,1&~m||m--),i={x:p,y:m,width:g-p+1,height:v-m+1};var k=n[o];k.rect=i,k.blend=1,k.img=new Uint8Array(i.width*i.height*4),0==n[o-1].dispose?(YP._copyTile(c,t,r,k.img,i.width,i.height,-i.x,-i.y,0),YP.encode._prepareDiff(f,t,r,k.img,i)):YP._copyTile(f,t,r,k.img,i.width,i.height,-i.x,-i.y,0)},YP.encode._prepareDiff=function(e,t,r,n,o){YP._copyTile(e,t,r,n,o.width,o.height,-o.x,-o.y,2)},YP.encode._filterZero=function(e,t,r,n,o,i,a){var s,l=[],c=[0,1,2,3,4];-1!=i?c=[i]:(t*n>5e5||1==r)&&(c=[0]),a&&(s={level:0});for(var u=a&&null!=UZIP?UZIP:fT(),d=0;d<c.length;d++){for(var f=0;f<t;f++)YP.encode._filterLine(o,e,f,n,r,c[d]);l.push(u.deflate(o,s))}var h,p=1e9;for(d=0;d<l.length;d++)l[d].length<p&&(h=d,p=l[d].length);return l[h]},YP.encode._filterLine=function(e,t,r,n,o,i){var a=r*n,s=a+r,l=YP.decode._paeth;if(e[s]=i,s++,0==i)if(n<500)for(var c=0;c<n;c++)e[s+c]=t[a+c];else e.set(new Uint8Array(t.buffer,a,n),s);else if(1==i){for(c=0;c<o;c++)e[s+c]=t[a+c];for(c=o;c<n;c++)e[s+c]=t[a+c]-t[a+c-o]+256&255}else if(0==r){for(c=0;c<o;c++)e[s+c]=t[a+c];if(2==i)for(c=o;c<n;c++)e[s+c]=t[a+c];if(3==i)for(c=o;c<n;c++)e[s+c]=t[a+c]-(t[a+c-o]>>1)+256&255;if(4==i)for(c=o;c<n;c++)e[s+c]=t[a+c]-l(t[a+c-o],0,0)+256&255}else{if(2==i)for(c=0;c<n;c++)e[s+c]=t[a+c]+256-t[a+c-n]&255;if(3==i){for(c=0;c<o;c++)e[s+c]=t[a+c]+256-(t[a+c-n]>>1)&255;for(c=o;c<n;c++)e[s+c]=t[a+c]+256-(t[a+c-n]+t[a+c-o]>>1)&255}if(4==i){for(c=0;c<o;c++)e[s+c]=t[a+c]+256-l(0,t[a+c-n],0)&255;for(c=o;c<n;c++)e[s+c]=t[a+c]+256-l(t[a+c-o],t[a+c-n],t[a+c-o-n])&255}}},YP.crc={table:function(){for(var e=new Uint32Array(256),t=0;t<256;t++){for(var r=t,n=0;n<8;n++)1&r?r=3988292384^r>>>1:r>>>=1;e[t]=r}return e}(),update:function(e,t,r,n){for(var o=0;o<n;o++)e=YP.crc.table[255&(e^t[r+o])]^e>>>8;return e},crc:function(e,t,r){return 4294967295^YP.crc.update(4294967295,e,t,r)}},YP.quantize=function(e,t){for(var r=new Uint8Array(e),n=r.slice(0),o=new Uint32Array(n.buffer),i=YP.quantize.getKDtree(n,t),a=i[0],s=i[1],l=(YP.quantize.planeDst,r),c=o,u=l.length,d=new Uint8Array(r.length>>2),f=0;f<u;f+=4){var h=l[f]*(1/255),p=l[f+1]*(1/255),m=l[f+2]*(1/255),g=l[f+3]*(1/255),v=YP.quantize.getNearest(a,h,p,m,g);d[f>>2]=v.ind,c[f>>2]=v.est.rgba}return{abuf:n.buffer,inds:d,plte:s}},YP.quantize.getKDtree=function(e,t,r){null==r&&(r=1e-4);var n=new Uint32Array(e.buffer),o={i0:0,i1:e.length,bst:null,est:null,tdst:0,left:null,right:null};o.bst=YP.quantize.stats(e,o.i0,o.i1),o.est=YP.quantize.estats(o.bst);for(var i=[o];i.length<t;){for(var a=0,s=0,l=0;l<i.length;l++)i[l].est.L>a&&(a=i[l].est.L,s=l);if(a<r)break;var c=i[s],u=YP.quantize.splitPixels(e,n,c.i0,c.i1,c.est.e,c.est.eMq255);if(c.i0>=u||c.i1<=u)c.est.L=0;else{var d={i0:c.i0,i1:u,bst:null,est:null,tdst:0,left:null,right:null};d.bst=YP.quantize.stats(e,d.i0,d.i1),d.est=YP.quantize.estats(d.bst);var f={i0:u,i1:c.i1,bst:null,est:null,tdst:0,left:null,right:null};for(f.bst={R:[],m:[],N:c.bst.N-d.bst.N},l=0;l<16;l++)f.bst.R[l]=c.bst.R[l]-d.bst.R[l];for(l=0;l<4;l++)f.bst.m[l]=c.bst.m[l]-d.bst.m[l];f.est=YP.quantize.estats(f.bst),c.left=d,c.right=f,i[s]=d,i.push(f)}}for(i.sort((function(e,t){return t.bst.N-e.bst.N})),l=0;l<i.length;l++)i[l].ind=l;return[o,i]},YP.quantize.getNearest=function(e,t,r,n,o){if(null==e.left)return e.tdst=YP.quantize.dist(e.est.q,t,r,n,o),e;var i=YP.quantize.planeDst(e.est,t,r,n,o),a=e.left,s=e.right;i>0&&(a=e.right,s=e.left);var l=YP.quantize.getNearest(a,t,r,n,o);if(l.tdst<=i*i)return l;var c=YP.quantize.getNearest(s,t,r,n,o);return c.tdst<l.tdst?c:l},YP.quantize.planeDst=function(e,t,r,n,o){var i=e.e;return i[0]*t+i[1]*r+i[2]*n+i[3]*o-e.eMq},YP.quantize.dist=function(e,t,r,n,o){var i=t-e[0],a=r-e[1],s=n-e[2],l=o-e[3];return i*i+a*a+s*s+l*l},YP.quantize.splitPixels=function(e,t,r,n,o,i){var a=YP.quantize.vecDot;for(n-=4;r<n;){for(;a(e,r,o)<=i;)r+=4;for(;a(e,n,o)>i;)n-=4;if(r>=n)break;var s=t[r>>2];t[r>>2]=t[n>>2],t[n>>2]=s,r+=4,n-=4}for(;a(e,r,o)>i;)r-=4;return r+4},YP.quantize.vecDot=function(e,t,r){return e[t]*r[0]+e[t+1]*r[1]+e[t+2]*r[2]+e[t+3]*r[3]},YP.quantize.stats=function(e,t,r){for(var n=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],o=[0,0,0,0],i=r-t>>2,a=t;a<r;a+=4){var s=e[a]*(1/255),l=e[a+1]*(1/255),c=e[a+2]*(1/255),u=e[a+3]*(1/255);o[0]+=s,o[1]+=l,o[2]+=c,o[3]+=u,n[0]+=s*s,n[1]+=s*l,n[2]+=s*c,n[3]+=s*u,n[5]+=l*l,n[6]+=l*c,n[7]+=l*u,n[10]+=c*c,n[11]+=c*u,n[15]+=u*u}return n[4]=n[1],n[8]=n[2],n[9]=n[6],n[12]=n[3],n[13]=n[7],n[14]=n[11],{R:n,m:o,N:i}},YP.quantize.estats=function(e){var t=e.R,r=e.m,n=e.N,o=r[0],i=r[1],a=r[2],s=r[3],l=0==n?0:1/n,c=[t[0]-o*o*l,t[1]-o*i*l,t[2]-o*a*l,t[3]-o*s*l,t[4]-i*o*l,t[5]-i*i*l,t[6]-i*a*l,t[7]-i*s*l,t[8]-a*o*l,t[9]-a*i*l,t[10]-a*a*l,t[11]-a*s*l,t[12]-s*o*l,t[13]-s*i*l,t[14]-s*a*l,t[15]-s*s*l],u=c,d=YP.M4,f=[.5,.5,.5,.5],h=0,p=0;if(0!=n)for(var m=0;m<10&&(f=d.multVec(u,f),p=Math.sqrt(d.dot(f,f)),f=d.sml(1/p,f),!(Math.abs(p-h)<1e-9));m++)h=p;var g=[o*l,i*l,a*l,s*l];return{Cov:c,q:g,e:f,L:h,eMq255:d.dot(d.sml(255,g),f),eMq:d.dot(f,g),rgba:(Math.round(255*g[3])<<24|Math.round(255*g[2])<<16|Math.round(255*g[1])<<8|Math.round(255*g[0]))>>>0}},YP.M4={multVec:function(e,t){return[e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3],e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7]*t[3],e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11]*t[3],e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]*t[3]]},dot:function(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3]},sml:function(e,t){return[e*t[0],e*t[1],e*t[2],e*t[3]]}},YP.encode.concatRGBA=function(e){for(var t=0,r=0;r<e.length;r++)t+=e[r].byteLength;var n=new Uint8Array(t),o=0;for(r=0;r<e.length;r++){for(var i=new Uint8Array(e[r]),a=i.length,s=0;s<a;s+=4){var l=i[s],c=i[s+1],u=i[s+2],d=i[s+3];0==d&&(l=c=u=0),n[o+s]=l,n[o+s+1]=c,n[o+s+2]=u,n[o+s+3]=d}o+=a}return n.buffer};const $P=YP;var ZP;!function(e){e.Greyscale=\"Greyscale\",e.Truecolour=\"Truecolour\",e.IndexedColour=\"IndexedColour\",e.GreyscaleWithAlpha=\"GreyscaleWithAlpha\",e.TruecolourWithAlpha=\"TruecolourWithAlpha\"}(ZP||(ZP={}));var QP=function(){function e(e){var t=$P.decode(e),r=$P.toRGBA8(t);if(r.length>1)throw new Error(\"Animated PNGs are not supported\");var n=function(e){for(var t=Math.floor(e.length/4),r=new Uint8Array(3*t),n=new Uint8Array(1*t),o=0,i=0,a=0;o<e.length;)r[i++]=e[o++],r[i++]=e[o++],r[i++]=e[o++],n[a++]=e[o++];return{rgbChannel:r,alphaChannel:n}}(new Uint8Array(r[0])),o=n.rgbChannel,i=n.alphaChannel;this.rgbChannel=o,i.some((function(e){return e<255}))&&(this.alphaChannel=i),this.type=function(e){if(0===e)return ZP.Greyscale;if(2===e)return ZP.Truecolour;if(3===e)return ZP.IndexedColour;if(4===e)return ZP.GreyscaleWithAlpha;if(6===e)return ZP.TruecolourWithAlpha;throw new Error(\"Unknown color type: \"+e)}(t.ctype),this.width=t.width,this.height=t.height,this.bitsPerComponent=8}return e.load=function(t){return new e(t)},e}();const JP=function(){function e(e){this.image=e,this.bitsPerComponent=e.bitsPerComponent,this.width=e.width,this.height=e.height,this.colorSpace=\"DeviceRGB\"}return e.for=function(t){return bA(this,void 0,void 0,(function(){return yA(this,(function(r){return[2,new e(QP.load(t))]}))}))},e.prototype.embedIntoContext=function(e,t){return bA(this,void 0,void 0,(function(){var r,n;return yA(this,(function(o){return r=this.embedAlphaChannel(e),n=e.flateStream(this.image.rgbChannel,{Type:\"XObject\",Subtype:\"Image\",BitsPerComponent:this.image.bitsPerComponent,Width:this.image.width,Height:this.image.height,ColorSpace:this.colorSpace,SMask:r}),t?(e.assign(t,n),[2,t]):[2,e.register(n)]}))}))},e.prototype.embedAlphaChannel=function(e){if(this.image.alphaChannel){var t=e.flateStream(this.image.alphaChannel,{Type:\"XObject\",Subtype:\"Image\",Height:this.image.height,Width:this.image.width,BitsPerComponent:this.image.bitsPerComponent,ColorSpace:\"DeviceGray\",Decode:[0,1]});return e.register(t)}},e}();const eM=function(){function e(e,t,r){this.bytes=e,this.start=t||0,this.pos=this.start,this.end=t&&r?t+r:this.bytes.length}return Object.defineProperty(e.prototype,\"length\",{get:function(){return this.end-this.start},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isEmpty\",{get:function(){return 0===this.length},enumerable:!1,configurable:!0}),e.prototype.getByte=function(){return this.pos>=this.end?-1:this.bytes[this.pos++]},e.prototype.getUint16=function(){var e=this.getByte(),t=this.getByte();return-1===e||-1===t?-1:(e<<8)+t},e.prototype.getInt32=function(){return(this.getByte()<<24)+(this.getByte()<<16)+(this.getByte()<<8)+this.getByte()},e.prototype.getBytes=function(e,t){void 0===t&&(t=!1);var r=this.bytes,n=this.pos,o=this.end;if(e){var i=n+e;return i>o&&(i=o),this.pos=i,a=r.subarray(n,i),t?new Uint8ClampedArray(a):a}var a=r.subarray(n,o);return t?new Uint8ClampedArray(a):a},e.prototype.peekByte=function(){var e=this.getByte();return this.pos--,e},e.prototype.peekBytes=function(e,t){void 0===t&&(t=!1);var r=this.getBytes(e,t);return this.pos-=r.length,r},e.prototype.skip=function(e){e||(e=1),this.pos+=e},e.prototype.reset=function(){this.pos=this.start},e.prototype.moveStart=function(){this.start=this.pos},e.prototype.makeSubStream=function(t,r){return new e(this.bytes,t,r)},e.prototype.decode=function(){return this.bytes},e}();var tM=new Uint8Array(0);const rM=function(){function e(e){if(this.pos=0,this.bufferLength=0,this.eof=!1,this.buffer=tM,this.minBufferLength=512,e)for(;this.minBufferLength<e;)this.minBufferLength*=2}return Object.defineProperty(e.prototype,\"isEmpty\",{get:function(){for(;!this.eof&&0===this.bufferLength;)this.readBlock();return 0===this.bufferLength},enumerable:!1,configurable:!0}),e.prototype.getByte=function(){for(var e=this.pos;this.bufferLength<=e;){if(this.eof)return-1;this.readBlock()}return this.buffer[this.pos++]},e.prototype.getUint16=function(){var e=this.getByte(),t=this.getByte();return-1===e||-1===t?-1:(e<<8)+t},e.prototype.getInt32=function(){return(this.getByte()<<24)+(this.getByte()<<16)+(this.getByte()<<8)+this.getByte()},e.prototype.getBytes=function(e,t){var r;void 0===t&&(t=!1);var n=this.pos;if(e){for(this.ensureBuffer(n+e),r=n+e;!this.eof&&this.bufferLength<r;)this.readBlock();var o=this.bufferLength;r>o&&(r=o)}else{for(;!this.eof;)this.readBlock();r=this.bufferLength}this.pos=r;var i=this.buffer.subarray(n,r);return!t||i instanceof Uint8ClampedArray?i:new Uint8ClampedArray(i)},e.prototype.peekByte=function(){var e=this.getByte();return this.pos--,e},e.prototype.peekBytes=function(e,t){void 0===t&&(t=!1);var r=this.getBytes(e,t);return this.pos-=r.length,r},e.prototype.skip=function(e){e||(e=1),this.pos+=e},e.prototype.reset=function(){this.pos=0},e.prototype.makeSubStream=function(e,t){for(var r=e+t;this.bufferLength<=r&&!this.eof;)this.readBlock();return new eM(this.buffer,e,t)},e.prototype.decode=function(){for(;!this.eof;)this.readBlock();return this.buffer.subarray(0,this.bufferLength)},e.prototype.readBlock=function(){throw new KT(this.constructor.name,\"readBlock\")},e.prototype.ensureBuffer=function(e){var t=this.buffer;if(e<=t.byteLength)return t;for(var r=this.minBufferLength;r<e;)r*=2;var n=new Uint8Array(r);return n.set(t),this.buffer=n},e}();var nM=function(e){return 32===e||9===e||13===e||10===e},oM=function(e){function t(t,r){var n=e.call(this,r)||this;return n.stream=t,n.input=new Uint8Array(5),r&&(r*=.8),n}return gA(t,e),t.prototype.readBlock=function(){for(var e=this.stream,t=e.getByte();nM(t);)t=e.getByte();if(-1!==t&&126!==t){var r,n,o=this.bufferLength;if(122===t){for(r=this.ensureBuffer(o+4),n=0;n<4;++n)r[o+n]=0;this.bufferLength+=4}else{var i=this.input;for(i[0]=t,n=1;n<5;++n){for(t=e.getByte();nM(t);)t=e.getByte();if(i[n]=t,-1===t||126===t)break}if(r=this.ensureBuffer(o+n-1),this.bufferLength+=n-1,n<5){for(;n<5;++n)i[n]=117;this.eof=!0}var a=0;for(n=0;n<5;++n)a=85*a+(i[n]-33);for(n=3;n>=0;--n)r[o+n]=255&a,a>>=8}}else this.eof=!0},t}(rM);const iM=oM;var aM=function(e){function t(t,r){var n=e.call(this,r)||this;return n.stream=t,n.firstDigit=-1,r&&(r*=.5),n}return gA(t,e),t.prototype.readBlock=function(){var e=this.stream.getBytes(8e3);if(e.length){for(var t=e.length+1>>1,r=this.ensureBuffer(this.bufferLength+t),n=this.bufferLength,o=this.firstDigit,i=0,a=e.length;i<a;i++){var s=e[i],l=void 0;if(s>=48&&s<=57)l=15&s;else{if(!(s>=65&&s<=70||s>=97&&s<=102)){if(62===s){this.eof=!0;break}continue}l=9+(15&s)}o<0?o=l:(r[n++]=o<<4|l,o=-1)}o>=0&&this.eof&&(r[n++]=o<<4,o=-1),this.firstDigit=o,this.bufferLength=n}else this.eof=!0},t}(rM);const sM=aM;var lM=new Int32Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),cM=new Int32Array([3,4,5,6,7,8,9,10,65547,65549,65551,65553,131091,131095,131099,131103,196643,196651,196659,196667,262211,262227,262243,262259,327811,327843,327875,327907,258,258,258]),uM=new Int32Array([1,2,3,4,65541,65543,131081,131085,196625,196633,262177,262193,327745,327777,393345,393409,459009,459137,524801,525057,590849,591361,657409,658433,724993,727041,794625,798721,868353,876545]),dM=[new Int32Array([459008,524368,524304,524568,459024,524400,524336,590016,459016,524384,524320,589984,524288,524416,524352,590048,459012,524376,524312,589968,459028,524408,524344,590032,459020,524392,524328,59e4,524296,524424,524360,590064,459010,524372,524308,524572,459026,524404,524340,590024,459018,524388,524324,589992,524292,524420,524356,590056,459014,524380,524316,589976,459030,524412,524348,590040,459022,524396,524332,590008,524300,524428,524364,590072,459009,524370,524306,524570,459025,524402,524338,590020,459017,524386,524322,589988,524290,524418,524354,590052,459013,524378,524314,589972,459029,524410,524346,590036,459021,524394,524330,590004,524298,524426,524362,590068,459011,524374,524310,524574,459027,524406,524342,590028,459019,524390,524326,589996,524294,524422,524358,590060,459015,524382,524318,589980,459031,524414,524350,590044,459023,524398,524334,590012,524302,524430,524366,590076,459008,524369,524305,524569,459024,524401,524337,590018,459016,524385,524321,589986,524289,524417,524353,590050,459012,524377,524313,589970,459028,524409,524345,590034,459020,524393,524329,590002,524297,524425,524361,590066,459010,524373,524309,524573,459026,524405,524341,590026,459018,524389,524325,589994,524293,524421,524357,590058,459014,524381,524317,589978,459030,524413,524349,590042,459022,524397,524333,590010,524301,524429,524365,590074,459009,524371,524307,524571,459025,524403,524339,590022,459017,524387,524323,589990,524291,524419,524355,590054,459013,524379,524315,589974,459029,524411,524347,590038,459021,524395,524331,590006,524299,524427,524363,590070,459011,524375,524311,524575,459027,524407,524343,590030,459019,524391,524327,589998,524295,524423,524359,590062,459015,524383,524319,589982,459031,524415,524351,590046,459023,524399,524335,590014,524303,524431,524367,590078,459008,524368,524304,524568,459024,524400,524336,590017,459016,524384,524320,589985,524288,524416,524352,590049,459012,524376,524312,589969,459028,524408,524344,590033,459020,524392,524328,590001,524296,524424,524360,590065,459010,524372,524308,524572,459026,524404,524340,590025,459018,524388,524324,589993,524292,524420,524356,590057,459014,524380,524316,589977,459030,524412,524348,590041,459022,524396,524332,590009,524300,524428,524364,590073,459009,524370,524306,524570,459025,524402,524338,590021,459017,524386,524322,589989,524290,524418,524354,590053,459013,524378,524314,589973,459029,524410,524346,590037,459021,524394,524330,590005,524298,524426,524362,590069,459011,524374,524310,524574,459027,524406,524342,590029,459019,524390,524326,589997,524294,524422,524358,590061,459015,524382,524318,589981,459031,524414,524350,590045,459023,524398,524334,590013,524302,524430,524366,590077,459008,524369,524305,524569,459024,524401,524337,590019,459016,524385,524321,589987,524289,524417,524353,590051,459012,524377,524313,589971,459028,524409,524345,590035,459020,524393,524329,590003,524297,524425,524361,590067,459010,524373,524309,524573,459026,524405,524341,590027,459018,524389,524325,589995,524293,524421,524357,590059,459014,524381,524317,589979,459030,524413,524349,590043,459022,524397,524333,590011,524301,524429,524365,590075,459009,524371,524307,524571,459025,524403,524339,590023,459017,524387,524323,589991,524291,524419,524355,590055,459013,524379,524315,589975,459029,524411,524347,590039,459021,524395,524331,590007,524299,524427,524363,590071,459011,524375,524311,524575,459027,524407,524343,590031,459019,524391,524327,589999,524295,524423,524359,590063,459015,524383,524319,589983,459031,524415,524351,590047,459023,524399,524335,590015,524303,524431,524367,590079]),9],fM=[new Int32Array([327680,327696,327688,327704,327684,327700,327692,327708,327682,327698,327690,327706,327686,327702,327694,0,327681,327697,327689,327705,327685,327701,327693,327709,327683,327699,327691,327707,327687,327703,327695,0]),5],hM=function(e){function t(t,r){var n=e.call(this,r)||this;n.stream=t;var o=t.getByte(),i=t.getByte();if(-1===o||-1===i)throw new Error(\"Invalid header in flate stream: \"+o+\", \"+i);if(8!=(15&o))throw new Error(\"Unknown compression method in flate stream: \"+o+\", \"+i);if(((o<<8)+i)%31!=0)throw new Error(\"Bad FCHECK in flate stream: \"+o+\", \"+i);if(32&i)throw new Error(\"FDICT bit set in flate stream: \"+o+\", \"+i);return n.codeSize=0,n.codeBuf=0,n}return gA(t,e),t.prototype.readBlock=function(){var e,t,r=this.stream,n=this.getBits(3);if(1&n&&(this.eof=!0),0!=(n>>=1)){var o,i;if(1===n)o=dM,i=fM;else{if(2!==n)throw new Error(\"Unknown block type in flate stream\");var a=this.getBits(5)+257,s=this.getBits(5)+1,l=this.getBits(4)+4,c=new Uint8Array(lM.length),u=void 0;for(u=0;u<l;++u)c[lM[u]]=this.getBits(3);var d=this.generateHuffmanTable(c);t=0,u=0;for(var f=a+s,h=new Uint8Array(f),p=void 0,m=void 0,g=void 0;u<f;){var v=this.getCode(d);if(16===v)p=2,m=3,g=t;else if(17===v)p=3,m=3,g=t=0;else{if(18!==v){h[u++]=t=v;continue}p=7,m=11,g=t=0}for(var b=this.getBits(p)+m;b-- >0;)h[u++]=g}o=this.generateHuffmanTable(h.subarray(0,a)),i=this.generateHuffmanTable(h.subarray(a,f))}for(var y=(e=this.buffer)?e.length:0,w=this.bufferLength;;){var x=this.getCode(o);if(x<256)w+1>=y&&(y=(e=this.ensureBuffer(w+1)).length),e[w++]=x;else{if(256===x)return void(this.bufferLength=w);var S=(x=cM[x-=257])>>16;S>0&&(S=this.getBits(S)),t=(65535&x)+S,x=this.getCode(i),(S=(x=uM[x])>>16)>0&&(S=this.getBits(S));var C=(65535&x)+S;w+t>=y&&(y=(e=this.ensureBuffer(w+t)).length);for(var k=0;k<t;++k,++w)e[w]=e[w-C]}}}else{var E=void 0;if(-1===(E=r.getByte()))throw new Error(\"Bad block header in flate stream\");var O=E;if(-1===(E=r.getByte()))throw new Error(\"Bad block header in flate stream\");if(O|=E<<8,-1===(E=r.getByte()))throw new Error(\"Bad block header in flate stream\");var A=E;if(-1===(E=r.getByte()))throw new Error(\"Bad block header in flate stream\");if((A|=E<<8)!=(65535&~O)&&(0!==O||0!==A))throw new Error(\"Bad uncompressed block length in flate stream\");this.codeBuf=0,this.codeSize=0;var T=this.bufferLength;e=this.ensureBuffer(T+O);var j=T+O;if(this.bufferLength=j,0===O)-1===r.peekByte()&&(this.eof=!0);else for(var P=T;P<j;++P){if(-1===(E=r.getByte())){this.eof=!0;break}e[P]=E}}},t.prototype.getBits=function(e){for(var t,r=this.stream,n=this.codeSize,o=this.codeBuf;n<e;){if(-1===(t=r.getByte()))throw new Error(\"Bad encoding in flate stream\");o|=t<<n,n+=8}return t=o&(1<<e)-1,this.codeBuf=o>>e,this.codeSize=n-=e,t},t.prototype.getCode=function(e){for(var t,r=this.stream,n=e[0],o=e[1],i=this.codeSize,a=this.codeBuf;i<o&&-1!==(t=r.getByte());)a|=t<<i,i+=8;var s=n[a&(1<<o)-1];\"number\"==typeof n&&console.log(\"FLATE:\",s);var l=s>>16,c=65535&s;if(l<1||i<l)throw new Error(\"Bad encoding in flate stream\");return this.codeBuf=a>>l,this.codeSize=i-l,c},t.prototype.generateHuffmanTable=function(e){var t,r=e.length,n=0;for(t=0;t<r;++t)e[t]>n&&(n=e[t]);for(var o=1<<n,i=new Int32Array(o),a=1,s=0,l=2;a<=n;++a,s<<=1,l<<=1)for(var c=0;c<r;++c)if(e[c]===a){var u=0,d=s;for(t=0;t<a;++t)u=u<<1|1&d,d>>=1;for(t=u;t<o;t+=l)i[t]=a<<16|c;++s}return[i,n]},t}(rM);const pM=hM;var mM=function(e){function t(t,r,n){var o=e.call(this,r)||this;o.stream=t,o.cachedData=0,o.bitsCached=0;for(var i=4096,a={earlyChange:n,codeLength:9,nextCode:258,dictionaryValues:new Uint8Array(i),dictionaryLengths:new Uint16Array(i),dictionaryPrevCodes:new Uint16Array(i),currentSequence:new Uint8Array(i),currentSequenceLength:0},s=0;s<256;++s)a.dictionaryValues[s]=s,a.dictionaryLengths[s]=1;return o.lzwState=a,o}return gA(t,e),t.prototype.readBlock=function(){var e,t,r,n=1024,o=this.lzwState;if(o){var i=o.earlyChange,a=o.nextCode,s=o.dictionaryValues,l=o.dictionaryLengths,c=o.dictionaryPrevCodes,u=o.codeLength,d=o.prevCode,f=o.currentSequence,h=o.currentSequenceLength,p=0,m=this.bufferLength,g=this.ensureBuffer(this.bufferLength+n);for(e=0;e<512;e++){var v=this.readBits(u),b=h>0;if(!v||v<256)f[0]=v,h=1;else{if(!(v>=258)){if(256===v){u=9,a=258,h=0;continue}this.eof=!0,delete this.lzwState;break}if(v<a)for(t=(h=l[v])-1,r=v;t>=0;t--)f[t]=s[r],r=c[r];else f[h++]=f[0]}if(b&&(c[a]=d,l[a]=l[d]+1,s[a]=f[0],u=++a+i&a+i-1?u:0|Math.min(Math.log(a+i)/.6931471805599453+1,12)),d=v,n<(p+=h)){do{n+=512}while(n<p);g=this.ensureBuffer(this.bufferLength+n)}for(t=0;t<h;t++)g[m++]=f[t]}o.nextCode=a,o.codeLength=u,o.prevCode=d,o.currentSequenceLength=h,this.bufferLength=m}},t.prototype.readBits=function(e){for(var t=this.bitsCached,r=this.cachedData;t<e;){var n=this.stream.getByte();if(-1===n)return this.eof=!0,null;r=r<<8|n,t+=8}return this.bitsCached=t-=e,this.cachedData=r,r>>>t&(1<<e)-1},t}(rM);const gM=mM;var vM=function(e){function t(t,r){var n=e.call(this,r)||this;return n.stream=t,n}return gA(t,e),t.prototype.readBlock=function(){var e=this.stream.getBytes(2);if(!e||e.length<2||128===e[0])this.eof=!0;else{var t,r=this.bufferLength,n=e[0];if(n<128){if((t=this.ensureBuffer(r+n+1))[r++]=e[1],n>0){var o=this.stream.getBytes(n);t.set(o,r),r+=n}}else{n=257-n;var i=e[1];t=this.ensureBuffer(r+n+1);for(var a=0;a<n;a++)t[r++]=i}this.bufferLength=r}},t}(rM);const bM=vM;var yM=function(e,t,r){if(t===Dj.of(\"FlateDecode\"))return new pM(e);if(t===Dj.of(\"LZWDecode\")){var n=1;if(r instanceof Hj){var o=r.lookup(Dj.of(\"EarlyChange\"));o instanceof kj&&(n=o.asNumber())}return new gM(e,void 0,n)}if(t===Dj.of(\"ASCII85Decode\"))return new iM(e);if(t===Dj.of(\"ASCIIHexDecode\"))return new sM(e);if(t===Dj.of(\"RunLengthDecode\"))return new bM(e);throw new $T(t.asString())},wM=function(e){var t=e.dict,r=e.contents,n=new eM(r),o=t.lookup(Dj.of(\"Filter\")),i=t.lookup(Dj.of(\"DecodeParms\"));if(o instanceof Dj)n=yM(n,o,i);else if(o instanceof Oj)for(var a=0,s=o.size();a<s;a++)n=yM(n,o.lookup(a,Dj),i&&i.lookupMaybe(a,Hj));else if(o)throw new YT([Dj,Oj],o);return n},xM=function(){function e(e,t,r){this.page=e;var n=null!=t?t:function(e){var t=e.MediaBox();return{left:0,bottom:0,right:t.lookup(2,kj).asNumber()-t.lookup(0,kj).asNumber(),top:t.lookup(3,kj).asNumber()-t.lookup(1,kj).asNumber()}}(e);this.width=n.right-n.left,this.height=n.top-n.bottom,this.boundingBox=n,this.transformationMatrix=null!=r?r:function(e){return[1,0,0,1,-e.left,-e.bottom]}(n)}return e.for=function(t,r,n){return bA(this,void 0,void 0,(function(){return yA(this,(function(o){return[2,new e(t,r,n)]}))}))},e.prototype.embedIntoContext=function(e,t){return bA(this,void 0,void 0,(function(){var r,n,o,i,a,s,l,c,u,d;return yA(this,(function(f){if(r=this.page.normalizedEntries(),n=r.Contents,o=r.Resources,!n)throw new QT;return i=this.decodeContents(n),a=this.boundingBox,s=a.left,l=a.bottom,c=a.right,u=a.top,d=e.flateStream(i,{Type:\"XObject\",Subtype:\"Form\",FormType:1,BBox:[s,l,c,u],Matrix:this.transformationMatrix,Resources:o}),t?(e.assign(t,d),[2,t]):[2,e.register(d)]}))}))},e.prototype.decodeContents=function(e){for(var t=Uint8Array.of(wj.Newline),r=[],n=0,o=e.size();n<o;n++){var i=e.lookup(n,Vj),a=void 0;if(i instanceof Gj)a=wM(i).decode();else{if(!(i instanceof rP))throw new JT(i);a=i.getUnencodedContents()}r.push(a,t)}return GA.apply(void 0,r)},e}();const SM=xM;var CM,kM,EM,OM,AM=function(e,t){if(void 0!==e)return t[e]};!function(e){e.UseNone=\"UseNone\",e.UseOutlines=\"UseOutlines\",e.UseThumbs=\"UseThumbs\",e.UseOC=\"UseOC\"}(CM||(CM={})),function(e){e.L2R=\"L2R\",e.R2L=\"R2L\"}(kM||(kM={})),function(e){e.None=\"None\",e.AppDefault=\"AppDefault\"}(EM||(EM={})),function(e){e.Simplex=\"Simplex\",e.DuplexFlipShortEdge=\"DuplexFlipShortEdge\",e.DuplexFlipLongEdge=\"DuplexFlipLongEdge\"}(OM||(OM={}));var TM=function(){function e(e){this.dict=e}return e.prototype.lookupBool=function(e){var t=this.dict.lookup(Dj.of(e));if(t instanceof jj)return t},e.prototype.lookupName=function(e){var t=this.dict.lookup(Dj.of(e));if(t instanceof Dj)return t},e.prototype.HideToolbar=function(){return this.lookupBool(\"HideToolbar\")},e.prototype.HideMenubar=function(){return this.lookupBool(\"HideMenubar\")},e.prototype.HideWindowUI=function(){return this.lookupBool(\"HideWindowUI\")},e.prototype.FitWindow=function(){return this.lookupBool(\"FitWindow\")},e.prototype.CenterWindow=function(){return this.lookupBool(\"CenterWindow\")},e.prototype.DisplayDocTitle=function(){return this.lookupBool(\"DisplayDocTitle\")},e.prototype.NonFullScreenPageMode=function(){return this.lookupName(\"NonFullScreenPageMode\")},e.prototype.Direction=function(){return this.lookupName(\"Direction\")},e.prototype.PrintScaling=function(){return this.lookupName(\"PrintScaling\")},e.prototype.Duplex=function(){return this.lookupName(\"Duplex\")},e.prototype.PickTrayByPDFSize=function(){return this.lookupBool(\"PickTrayByPDFSize\")},e.prototype.PrintPageRange=function(){var e=this.dict.lookup(Dj.of(\"PrintPageRange\"));if(e instanceof Oj)return e},e.prototype.NumCopies=function(){var e=this.dict.lookup(Dj.of(\"NumCopies\"));if(e instanceof kj)return e},e.prototype.getHideToolbar=function(){var e,t;return null!==(t=null===(e=this.HideToolbar())||void 0===e?void 0:e.asBoolean())&&void 0!==t&&t},e.prototype.getHideMenubar=function(){var e,t;return null!==(t=null===(e=this.HideMenubar())||void 0===e?void 0:e.asBoolean())&&void 0!==t&&t},e.prototype.getHideWindowUI=function(){var e,t;return null!==(t=null===(e=this.HideWindowUI())||void 0===e?void 0:e.asBoolean())&&void 0!==t&&t},e.prototype.getFitWindow=function(){var e,t;return null!==(t=null===(e=this.FitWindow())||void 0===e?void 0:e.asBoolean())&&void 0!==t&&t},e.prototype.getCenterWindow=function(){var e,t;return null!==(t=null===(e=this.CenterWindow())||void 0===e?void 0:e.asBoolean())&&void 0!==t&&t},e.prototype.getDisplayDocTitle=function(){var e,t;return null!==(t=null===(e=this.DisplayDocTitle())||void 0===e?void 0:e.asBoolean())&&void 0!==t&&t},e.prototype.getNonFullScreenPageMode=function(){var e,t,r=null===(e=this.NonFullScreenPageMode())||void 0===e?void 0:e.decodeText();return null!==(t=AM(r,CM))&&void 0!==t?t:CM.UseNone},e.prototype.getReadingDirection=function(){var e,t,r=null===(e=this.Direction())||void 0===e?void 0:e.decodeText();return null!==(t=AM(r,kM))&&void 0!==t?t:kM.L2R},e.prototype.getPrintScaling=function(){var e,t,r=null===(e=this.PrintScaling())||void 0===e?void 0:e.decodeText();return null!==(t=AM(r,EM))&&void 0!==t?t:EM.AppDefault},e.prototype.getDuplex=function(){var e,t=null===(e=this.Duplex())||void 0===e?void 0:e.decodeText();return AM(t,OM)},e.prototype.getPickTrayByPDFSize=function(){var e;return null===(e=this.PickTrayByPDFSize())||void 0===e?void 0:e.asBoolean()},e.prototype.getPrintPageRange=function(){var e=this.PrintPageRange();if(!e)return[];for(var t=[],r=0;r<e.size();r+=2){var n=e.lookup(r,kj).asNumber(),o=e.lookup(r+1,kj).asNumber();t.push({start:n,end:o})}return t},e.prototype.getNumCopies=function(){var e,t;return null!==(t=null===(e=this.NumCopies())||void 0===e?void 0:e.asNumber())&&void 0!==t?t:1},e.prototype.setHideToolbar=function(e){var t=this.dict.context.obj(e);this.dict.set(Dj.of(\"HideToolbar\"),t)},e.prototype.setHideMenubar=function(e){var t=this.dict.context.obj(e);this.dict.set(Dj.of(\"HideMenubar\"),t)},e.prototype.setHideWindowUI=function(e){var t=this.dict.context.obj(e);this.dict.set(Dj.of(\"HideWindowUI\"),t)},e.prototype.setFitWindow=function(e){var t=this.dict.context.obj(e);this.dict.set(Dj.of(\"FitWindow\"),t)},e.prototype.setCenterWindow=function(e){var t=this.dict.context.obj(e);this.dict.set(Dj.of(\"CenterWindow\"),t)},e.prototype.setDisplayDocTitle=function(e){var t=this.dict.context.obj(e);this.dict.set(Dj.of(\"DisplayDocTitle\"),t)},e.prototype.setNonFullScreenPageMode=function(e){PT(e,\"nonFullScreenPageMode\",CM);var t=Dj.of(e);this.dict.set(Dj.of(\"NonFullScreenPageMode\"),t)},e.prototype.setReadingDirection=function(e){PT(e,\"readingDirection\",kM);var t=Dj.of(e);this.dict.set(Dj.of(\"Direction\"),t)},e.prototype.setPrintScaling=function(e){PT(e,\"printScaling\",EM);var t=Dj.of(e);this.dict.set(Dj.of(\"PrintScaling\"),t)},e.prototype.setDuplex=function(e){PT(e,\"duplex\",OM);var t=Dj.of(e);this.dict.set(Dj.of(\"Duplex\"),t)},e.prototype.setPickTrayByPDFSize=function(e){var t=this.dict.context.obj(e);this.dict.set(Dj.of(\"PickTrayByPDFSize\"),t)},e.prototype.setPrintPageRange=function(e){Array.isArray(e)||(e=[e]);for(var t=[],r=0,n=e.length;r<n;r++)t.push(e[r].start),t.push(e[r].end);NT(t,\"printPageRange\",[\"number\"]);var o=this.dict.context.obj(t);this.dict.set(Dj.of(\"PrintPageRange\"),o)},e.prototype.setNumCopies=function(e){FT(e,\"numCopies\",1,Number.MAX_VALUE),function(e){if(!Number.isInteger(e))throw new Error(TT(\"numCopies\")+\" must be an integer, but was actually \"+e)}(e);var t=this.dict.context.obj(e);this.dict.set(Dj.of(\"NumCopies\"),t)},e.fromDict=function(t){return new e(t)},e.create=function(t){return new e(t.obj({}))},e}();const jM=TM;var PM=/\\/([^\\0\\t\\n\\f\\r\\ ]+)[\\0\\t\\n\\f\\r\\ ]*(\\d*\\.\\d+|\\d+)?[\\0\\t\\n\\f\\r\\ ]+Tf/,MM=function(){function e(e,t){this.dict=e,this.ref=t}return e.prototype.T=function(){return this.dict.lookupMaybe(Dj.of(\"T\"),IP,AP)},e.prototype.Ff=function(){var e=this.getInheritableAttribute(Dj.of(\"Ff\"));return this.dict.context.lookupMaybe(e,kj)},e.prototype.V=function(){var e=this.getInheritableAttribute(Dj.of(\"V\"));return this.dict.context.lookup(e)},e.prototype.Kids=function(){return this.dict.lookupMaybe(Dj.of(\"Kids\"),Oj)},e.prototype.DA=function(){var e=this.dict.lookup(Dj.of(\"DA\"));if(e instanceof IP||e instanceof AP)return e},e.prototype.setKids=function(e){this.dict.set(Dj.of(\"Kids\"),this.dict.context.obj(e))},e.prototype.getParent=function(){var t=this.dict.get(Dj.of(\"Parent\"));if(t instanceof Yj)return new e(this.dict.lookup(Dj.of(\"Parent\"),Hj),t)},e.prototype.setParent=function(e){e?this.dict.set(Dj.of(\"Parent\"),e):this.dict.delete(Dj.of(\"Parent\"))},e.prototype.getFullyQualifiedName=function(){var e=this.getParent();return e?e.getFullyQualifiedName()+\".\"+this.getPartialName():this.getPartialName()},e.prototype.getPartialName=function(){var e;return null===(e=this.T())||void 0===e?void 0:e.decodeText()},e.prototype.setPartialName=function(e){e?this.dict.set(Dj.of(\"T\"),AP.fromText(e)):this.dict.delete(Dj.of(\"T\"))},e.prototype.setDefaultAppearance=function(e){this.dict.set(Dj.of(\"DA\"),IP.of(e))},e.prototype.getDefaultAppearance=function(){var e=this.DA();return e instanceof AP?e.decodeText():null==e?void 0:e.asString()},e.prototype.setFontSize=function(e){var t,r=null!==(t=this.getFullyQualifiedName())&&void 0!==t?t:\"\",n=this.getDefaultAppearance();if(!n)throw new lj(r);var o=UA(n,PM);if(!o.match)throw new cj(r);var i=n.slice(0,o.pos-o.match[0].length),a=o.pos<=n.length?n.slice(o.pos):\"\",s=i+\" /\"+o.match[1]+\" \"+e+\" Tf \"+a;this.setDefaultAppearance(s)},e.prototype.getFlags=function(){var e,t;return null!==(t=null===(e=this.Ff())||void 0===e?void 0:e.asNumber())&&void 0!==t?t:0},e.prototype.setFlags=function(e){this.dict.set(Dj.of(\"Ff\"),kj.of(e))},e.prototype.hasFlag=function(e){return 0!==(this.getFlags()&e)},e.prototype.setFlag=function(e){var t=this.getFlags();this.setFlags(t|e)},e.prototype.clearFlag=function(e){var t=this.getFlags();this.setFlags(t&~e)},e.prototype.setFlagTo=function(e,t){t?this.setFlag(e):this.clearFlag(e)},e.prototype.getInheritableAttribute=function(e){var t;return this.ascend((function(r){t||(t=r.dict.get(e))})),t},e.prototype.ascend=function(e){e(this);var t=this.getParent();t&&t.ascend(e)},e}();const RM=MM;var _M=function(){function e(e){this.dict=e}return e.prototype.W=function(){var e=this.dict.lookup(Dj.of(\"W\"));if(e instanceof kj)return e},e.prototype.getWidth=function(){var e,t;return null!==(t=null===(e=this.W())||void 0===e?void 0:e.asNumber())&&void 0!==t?t:1},e.prototype.setWidth=function(e){var t=this.dict.context.obj(e);this.dict.set(Dj.of(\"W\"),t)},e.fromDict=function(t){return new e(t)},e}();const IM=_M;var NM=function(){function e(e){this.dict=e}return e.prototype.Rect=function(){return this.dict.lookup(Dj.of(\"Rect\"),Oj)},e.prototype.AP=function(){return this.dict.lookupMaybe(Dj.of(\"AP\"),Hj)},e.prototype.F=function(){var e=this.dict.lookup(Dj.of(\"F\"));return this.dict.context.lookupMaybe(e,kj)},e.prototype.getRectangle=function(){var e,t=this.Rect();return null!==(e=null==t?void 0:t.asRectangle())&&void 0!==e?e:{x:0,y:0,width:0,height:0}},e.prototype.setRectangle=function(e){var t=e.x,r=e.y,n=e.width,o=e.height,i=this.dict.context.obj([t,r,t+n,r+o]);this.dict.set(Dj.of(\"Rect\"),i)},e.prototype.getAppearanceState=function(){var e=this.dict.lookup(Dj.of(\"AS\"));if(e instanceof Dj)return e},e.prototype.setAppearanceState=function(e){this.dict.set(Dj.of(\"AS\"),e)},e.prototype.setAppearances=function(e){this.dict.set(Dj.of(\"AP\"),e)},e.prototype.ensureAP=function(){var e=this.AP();return e||(e=this.dict.context.obj({}),this.dict.set(Dj.of(\"AP\"),e)),e},e.prototype.getNormalAppearance=function(){var e=this.ensureAP().get(Dj.of(\"N\"));if(e instanceof Yj||e instanceof Hj)return e;throw new Error(\"Unexpected N type: \"+(null==e?void 0:e.constructor.name))},e.prototype.setNormalAppearance=function(e){this.ensureAP().set(Dj.of(\"N\"),e)},e.prototype.setRolloverAppearance=function(e){this.ensureAP().set(Dj.of(\"R\"),e)},e.prototype.setDownAppearance=function(e){this.ensureAP().set(Dj.of(\"D\"),e)},e.prototype.removeRolloverAppearance=function(){var e=this.AP();null==e||e.delete(Dj.of(\"R\"))},e.prototype.removeDownAppearance=function(){var e=this.AP();null==e||e.delete(Dj.of(\"D\"))},e.prototype.getAppearances=function(){var e=this.AP();if(e)return{normal:e.lookup(Dj.of(\"N\"),Hj,Vj),rollover:e.lookupMaybe(Dj.of(\"R\"),Hj,Vj),down:e.lookupMaybe(Dj.of(\"D\"),Hj,Vj)}},e.prototype.getFlags=function(){var e,t;return null!==(t=null===(e=this.F())||void 0===e?void 0:e.asNumber())&&void 0!==t?t:0},e.prototype.setFlags=function(e){this.dict.set(Dj.of(\"F\"),kj.of(e))},e.prototype.hasFlag=function(e){return 0!==(this.getFlags()&e)},e.prototype.setFlag=function(e){var t=this.getFlags();this.setFlags(t|e)},e.prototype.clearFlag=function(e){var t=this.getFlags();this.setFlags(t&~e)},e.prototype.setFlagTo=function(e,t){t?this.setFlag(e):this.clearFlag(e)},e.fromDict=function(t){return new e(t)},e}();const FM=NM;var DM=function(){function e(e){this.dict=e}return e.prototype.R=function(){var e=this.dict.lookup(Dj.of(\"R\"));if(e instanceof kj)return e},e.prototype.BC=function(){var e=this.dict.lookup(Dj.of(\"BC\"));if(e instanceof Oj)return e},e.prototype.BG=function(){var e=this.dict.lookup(Dj.of(\"BG\"));if(e instanceof Oj)return e},e.prototype.CA=function(){var e=this.dict.lookup(Dj.of(\"CA\"));if(e instanceof AP||e instanceof IP)return e},e.prototype.RC=function(){var e=this.dict.lookup(Dj.of(\"RC\"));if(e instanceof AP||e instanceof IP)return e},e.prototype.AC=function(){var e=this.dict.lookup(Dj.of(\"AC\"));if(e instanceof AP||e instanceof IP)return e},e.prototype.getRotation=function(){var e;return null===(e=this.R())||void 0===e?void 0:e.asNumber()},e.prototype.getBorderColor=function(){var e=this.BC();if(e){for(var t=[],r=0,n=null==e?void 0:e.size();r<n;r++){var o=e.get(r);o instanceof kj&&t.push(o.asNumber())}return t}},e.prototype.getBackgroundColor=function(){var e=this.BG();if(e){for(var t=[],r=0,n=null==e?void 0:e.size();r<n;r++){var o=e.get(r);o instanceof kj&&t.push(o.asNumber())}return t}},e.prototype.getCaptions=function(){var e=this.CA(),t=this.RC(),r=this.AC();return{normal:null==e?void 0:e.decodeText(),rollover:null==t?void 0:t.decodeText(),down:null==r?void 0:r.decodeText()}},e.prototype.setRotation=function(e){var t=this.dict.context.obj(e);this.dict.set(Dj.of(\"R\"),t)},e.prototype.setBorderColor=function(e){var t=this.dict.context.obj(e);this.dict.set(Dj.of(\"BC\"),t)},e.prototype.setBackgroundColor=function(e){var t=this.dict.context.obj(e);this.dict.set(Dj.of(\"BG\"),t)},e.prototype.setCaptions=function(e){var t=AP.fromText(e.normal);if(this.dict.set(Dj.of(\"CA\"),t),e.rollover){var r=AP.fromText(e.rollover);this.dict.set(Dj.of(\"RC\"),r)}else this.dict.delete(Dj.of(\"RC\"));if(e.down){var n=AP.fromText(e.down);this.dict.set(Dj.of(\"AC\"),n)}else this.dict.delete(Dj.of(\"AC\"))},e.fromDict=function(t){return new e(t)},e}();const BM=DM;var LM=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gA(t,e),t.prototype.MK=function(){var e=this.dict.lookup(Dj.of(\"MK\"));if(e instanceof Hj)return e},t.prototype.BS=function(){var e=this.dict.lookup(Dj.of(\"BS\"));if(e instanceof Hj)return e},t.prototype.DA=function(){var e=this.dict.lookup(Dj.of(\"DA\"));if(e instanceof IP||e instanceof AP)return e},t.prototype.P=function(){var e=this.dict.get(Dj.of(\"P\"));if(e instanceof Yj)return e},t.prototype.setP=function(e){this.dict.set(Dj.of(\"P\"),e)},t.prototype.setDefaultAppearance=function(e){this.dict.set(Dj.of(\"DA\"),IP.of(e))},t.prototype.getDefaultAppearance=function(){var e=this.DA();return e instanceof AP?e.decodeText():null==e?void 0:e.asString()},t.prototype.getAppearanceCharacteristics=function(){var e=this.MK();if(e)return BM.fromDict(e)},t.prototype.getOrCreateAppearanceCharacteristics=function(){var e=this.MK();if(e)return BM.fromDict(e);var t=BM.fromDict(this.dict.context.obj({}));return this.dict.set(Dj.of(\"MK\"),t.dict),t},t.prototype.getBorderStyle=function(){var e=this.BS();if(e)return IM.fromDict(e)},t.prototype.getOrCreateBorderStyle=function(){var e=this.BS();if(e)return IM.fromDict(e);var t=IM.fromDict(this.dict.context.obj({}));return this.dict.set(Dj.of(\"BS\"),t.dict),t},t.prototype.getOnValue=function(){var e,t=null===(e=this.getAppearances())||void 0===e?void 0:e.normal;if(t instanceof Hj)for(var r=t.keys(),n=0,o=r.length;n<o;n++){var i=r[n];if(i!==Dj.of(\"Off\"))return i}},t.fromDict=function(e){return new t(e)},t.create=function(e,r){return new t(e.obj({Type:\"Annot\",Subtype:\"Widget\",Rect:[0,0,0,0],Parent:r}))},t}(FM);const zM=LM;var HM=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gA(t,e),t.prototype.FT=function(){var e=this.getInheritableAttribute(Dj.of(\"FT\"));return this.dict.context.lookup(e,Dj)},t.prototype.getWidgets=function(){var e=this.Kids();if(!e)return[zM.fromDict(this.dict)];for(var t=new Array(e.size()),r=0,n=e.size();r<n;r++){var o=e.lookup(r,Hj);t[r]=zM.fromDict(o)}return t},t.prototype.addWidget=function(e){this.normalizedEntries().Kids.push(e)},t.prototype.removeWidget=function(e){var t=this.Kids();if(t){if(e<0||e>t.size())throw new ij(e,0,t.size());t.remove(e)}else{if(0!==e)throw new ij(e,0,0);this.setKids([])}},t.prototype.normalizedEntries=function(){var e=this.Kids();return e||(e=this.dict.context.obj([this.ref]),this.dict.set(Dj.of(\"Kids\"),e)),{Kids:e}},t.fromDict=function(e,r){return new t(e,r)},t}(RM);const UM=HM;var VM=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gA(t,e),t.prototype.Opt=function(){return this.dict.lookupMaybe(Dj.of(\"Opt\"),IP,AP,Oj)},t.prototype.setOpt=function(e){this.dict.set(Dj.of(\"Opt\"),this.dict.context.obj(e))},t.prototype.getExportValues=function(){var e=this.Opt();if(e){if(e instanceof IP||e instanceof AP)return[e];for(var t=[],r=0,n=e.size();r<n;r++){var o=e.lookup(r);(o instanceof IP||o instanceof AP)&&t.push(o)}return t}},t.prototype.removeExportValue=function(e){var t=this.Opt();if(t)if(t instanceof IP||t instanceof AP){if(0!==e)throw new ij(e,0,0);this.setOpt([])}else{if(e<0||e>t.size())throw new ij(e,0,t.size());t.remove(e)}},t.prototype.normalizeExportValues=function(){for(var e,t,r,n,o=null!==(e=this.getExportValues())&&void 0!==e?e:[],i=[],a=this.getWidgets(),s=0,l=a.length;s<l;s++){var c=a[s],u=null!==(t=o[s])&&void 0!==t?t:AP.fromText(null!==(n=null===(r=c.getOnValue())||void 0===r?void 0:r.decodeText())&&void 0!==n?n:\"\");i.push(u)}this.setOpt(i)},t.prototype.addOpt=function(e,t){var r;this.normalizeExportValues();var n,o=e.decodeText();if(t)for(var i=null!==(r=this.getExportValues())&&void 0!==r?r:[],a=0,s=i.length;a<s;a++)i[a].decodeText()===o&&(n=a);var l=this.Opt();return l.push(e),null!=n?n:l.size()-1},t.prototype.addWidgetWithOpt=function(e,t,r){var n=this.addOpt(t,r),o=Dj.of(String(n));return this.addWidget(e),o},t}(UM);const WM=VM;var GM=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gA(t,e),t.prototype.setValue=function(e){var t;if(e!==(null!==(t=this.getOnValue())&&void 0!==t?t:Dj.of(\"Yes\"))&&e!==Dj.of(\"Off\"))throw new aj;this.dict.set(Dj.of(\"V\"),e);for(var r=this.getWidgets(),n=0,o=r.length;n<o;n++){var i=r[n],a=i.getOnValue()===e?e:Dj.of(\"Off\");i.setAppearanceState(a)}},t.prototype.getValue=function(){var e=this.V();return e instanceof Dj?e:Dj.of(\"Off\")},t.prototype.getOnValue=function(){var e=this.getWidgets()[0];return null==e?void 0:e.getOnValue()},t.fromDict=function(e,r){return new t(e,r)},t.create=function(e){var r=e.obj({FT:\"Btn\",Kids:[]});return new t(r,e.register(r))},t}(WM);const qM=GM;var KM,XM,YM,$M,ZM=function(e){return 1<<e};!function(e){e[e.ReadOnly=ZM(0)]=\"ReadOnly\",e[e.Required=ZM(1)]=\"Required\",e[e.NoExport=ZM(2)]=\"NoExport\"}(KM||(KM={})),function(e){e[e.NoToggleToOff=ZM(14)]=\"NoToggleToOff\",e[e.Radio=ZM(15)]=\"Radio\",e[e.PushButton=ZM(16)]=\"PushButton\",e[e.RadiosInUnison=ZM(25)]=\"RadiosInUnison\"}(XM||(XM={})),function(e){e[e.Multiline=ZM(12)]=\"Multiline\",e[e.Password=ZM(13)]=\"Password\",e[e.FileSelect=ZM(20)]=\"FileSelect\",e[e.DoNotSpellCheck=ZM(22)]=\"DoNotSpellCheck\",e[e.DoNotScroll=ZM(23)]=\"DoNotScroll\",e[e.Comb=ZM(24)]=\"Comb\",e[e.RichText=ZM(25)]=\"RichText\"}(YM||(YM={})),function(e){e[e.Combo=ZM(17)]=\"Combo\",e[e.Edit=ZM(18)]=\"Edit\",e[e.Sort=ZM(19)]=\"Sort\",e[e.MultiSelect=ZM(21)]=\"MultiSelect\",e[e.DoNotSpellCheck=ZM(22)]=\"DoNotSpellCheck\",e[e.CommitOnSelChange=ZM(26)]=\"CommitOnSelChange\"}($M||($M={}));var QM=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gA(t,e),t.prototype.setValues=function(e){if(this.hasFlag($M.Combo)&&!this.hasFlag($M.Edit)&&!this.valuesAreValid(e))throw new aj;if(0===e.length&&this.dict.delete(Dj.of(\"V\")),1===e.length&&this.dict.set(Dj.of(\"V\"),e[0]),e.length>1){if(!this.hasFlag($M.MultiSelect))throw new sj;this.dict.set(Dj.of(\"V\"),this.dict.context.obj(e))}this.updateSelectedIndices(e)},t.prototype.valuesAreValid=function(e){for(var t=this.getOptions(),r=function(r,n){var o=e[r].decodeText();if(!t.find((function(e){return o===(e.display||e.value).decodeText()})))return{value:!1}},n=0,o=e.length;n<o;n++){var i=r(n);if(\"object\"==typeof i)return i.value}return!0},t.prototype.updateSelectedIndices=function(e){if(e.length>1){for(var t=new Array(e.length),r=this.getOptions(),n=function(n,o){var i=e[n].decodeText();t[n]=r.findIndex((function(e){return i===(e.display||e.value).decodeText()}))},o=0,i=e.length;o<i;o++)n(o);this.dict.set(Dj.of(\"I\"),this.dict.context.obj(t.sort()))}else this.dict.delete(Dj.of(\"I\"))},t.prototype.getValues=function(){var e=this.V();if(e instanceof IP||e instanceof AP)return[e];if(e instanceof Oj){for(var t=[],r=0,n=e.size();r<n;r++){var o=e.lookup(r);(o instanceof IP||o instanceof AP)&&t.push(o)}return t}return[]},t.prototype.Opt=function(){return this.dict.lookupMaybe(Dj.of(\"Opt\"),IP,AP,Oj)},t.prototype.setOptions=function(e){for(var t=new Array(e.length),r=0,n=e.length;r<n;r++){var o=e[r],i=o.value,a=o.display;t[r]=this.dict.context.obj([i,a||i])}this.dict.set(Dj.of(\"Opt\"),this.dict.context.obj(t))},t.prototype.getOptions=function(){var e=this.Opt();if(e instanceof IP||e instanceof AP)return[{value:e,display:e}];if(e instanceof Oj){for(var t=[],r=0,n=e.size();r<n;r++){var o=e.lookup(r);if((o instanceof IP||o instanceof AP)&&t.push({value:o,display:o}),o instanceof Oj&&o.size()>0){var i=o.lookup(0,IP,AP),a=o.lookupMaybe(1,IP,AP);t.push({value:i,display:a||i})}}return t}return[]},t}(UM);const JM=QM;var eR=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gA(t,e),t.fromDict=function(e,r){return new t(e,r)},t.create=function(e){var r=e.obj({FT:\"Ch\",Ff:$M.Combo,Kids:[]});return new t(r,e.register(r))},t}(JM);const tR=eR;var rR=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gA(t,e),t.prototype.addField=function(e){var t=this.normalizedEntries().Kids;null==t||t.push(e)},t.prototype.normalizedEntries=function(){var e=this.Kids();return e||(e=this.dict.context.obj([]),this.dict.set(Dj.of(\"Kids\"),e)),{Kids:e}},t.fromDict=function(e,r){return new t(e,r)},t.create=function(e){var r=e.obj({});return new t(r,e.register(r))},t}(RM);const nR=rR,oR=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gA(t,e),t.fromDict=function(e,r){return new t(e,r)},t}(UM);var iR=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gA(t,e),t.prototype.MaxLen=function(){var e=this.dict.lookup(Dj.of(\"MaxLen\"));if(e instanceof kj)return e},t.prototype.Q=function(){var e=this.dict.lookup(Dj.of(\"Q\"));if(e instanceof kj)return e},t.prototype.setMaxLength=function(e){this.dict.set(Dj.of(\"MaxLen\"),kj.of(e))},t.prototype.removeMaxLength=function(){this.dict.delete(Dj.of(\"MaxLen\"))},t.prototype.getMaxLength=function(){var e;return null===(e=this.MaxLen())||void 0===e?void 0:e.asNumber()},t.prototype.setQuadding=function(e){this.dict.set(Dj.of(\"Q\"),kj.of(e))},t.prototype.getQuadding=function(){var e;return null===(e=this.Q())||void 0===e?void 0:e.asNumber()},t.prototype.setValue=function(e){this.dict.set(Dj.of(\"V\"),e)},t.prototype.removeValue=function(){this.dict.delete(Dj.of(\"V\"))},t.prototype.getValue=function(){var e=this.V();if(e instanceof IP||e instanceof AP)return e},t.fromDict=function(e,r){return new t(e,r)},t.create=function(e){var r=e.obj({FT:\"Tx\",Kids:[]});return new t(r,e.register(r))},t}(UM);const aR=iR;var sR=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gA(t,e),t.fromDict=function(e,r){return new t(e,r)},t.create=function(e){var r=e.obj({FT:\"Btn\",Ff:XM.PushButton,Kids:[]});return new t(r,e.register(r))},t}(WM);const lR=sR;var cR=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gA(t,e),t.prototype.setValue=function(e){if(!this.getOnValues().includes(e)&&e!==Dj.of(\"Off\"))throw new aj;this.dict.set(Dj.of(\"V\"),e);for(var t=this.getWidgets(),r=0,n=t.length;r<n;r++){var o=t[r],i=o.getOnValue()===e?e:Dj.of(\"Off\");o.setAppearanceState(i)}},t.prototype.getValue=function(){var e=this.V();return e instanceof Dj?e:Dj.of(\"Off\")},t.prototype.getOnValues=function(){for(var e=this.getWidgets(),t=[],r=0,n=e.length;r<n;r++){var o=e[r].getOnValue();o&&t.push(o)}return t},t.fromDict=function(e,r){return new t(e,r)},t.create=function(e){var r=e.obj({FT:\"Btn\",Ff:XM.Radio,Kids:[]});return new t(r,e.register(r))},t}(WM);const uR=cR;var dR=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gA(t,e),t.fromDict=function(e,r){return new t(e,r)},t.create=function(e){var r=e.obj({FT:\"Ch\",Kids:[]});return new t(r,e.register(r))},t}(JM);const fR=dR;var hR=function(e){if(!e)return[];for(var t=[],r=0,n=e.size();r<n;r++){var o=e.get(r),i=e.lookup(r);o instanceof Yj&&i instanceof Hj&&t.push([pR(i,o),o])}return t},pR=function(e,t){return mR(e)?nR.fromDict(e,t):gR(e,t)},mR=function(e){var t=e.lookup(Dj.of(\"Kids\"));if(t instanceof Oj)for(var r=0,n=t.size();r<n;r++){var o=t.lookup(r);if(o instanceof Hj&&o.has(Dj.of(\"T\")))return!0}return!1},gR=function(e,t){var r=wR(e,Dj.of(\"FT\")),n=e.context.lookup(r,Dj);return n===Dj.of(\"Btn\")?vR(e,t):n===Dj.of(\"Ch\")?bR(e,t):n===Dj.of(\"Tx\")?aR.fromDict(e,t):n===Dj.of(\"Sig\")?oR.fromDict(e,t):UM.fromDict(e,t)},vR=function(e,t){var r,n=wR(e,Dj.of(\"Ff\")),o=e.context.lookupMaybe(n,kj),i=null!==(r=null==o?void 0:o.asNumber())&&void 0!==r?r:0;return yR(i,XM.PushButton)?lR.fromDict(e,t):yR(i,XM.Radio)?uR.fromDict(e,t):qM.fromDict(e,t)},bR=function(e,t){var r,n=wR(e,Dj.of(\"Ff\")),o=e.context.lookupMaybe(n,kj),i=null!==(r=null==o?void 0:o.asNumber())&&void 0!==r?r:0;return yR(i,$M.Combo)?tR.fromDict(e,t):fR.fromDict(e,t)},yR=function(e,t){return 0!==(e&t)},wR=function(e,t){var r;return xR(e,(function(e){r||(r=e.get(t))})),r},xR=function(e,t){t(e);var r=e.lookupMaybe(Dj.of(\"Parent\"),Hj);r&&xR(r,t)},SR=function(){function e(e){this.dict=e}return e.prototype.Fields=function(){var e=this.dict.lookup(Dj.of(\"Fields\"));if(e instanceof Oj)return e},e.prototype.getFields=function(){for(var e=this.normalizedEntries().Fields,t=new Array(e.size()),r=0,n=e.size();r<n;r++){var o=e.get(r),i=e.lookup(r,Hj);t[r]=[pR(i,o),o]}return t},e.prototype.getAllFields=function(){var e=[],t=function(r){if(r)for(var n=0,o=r.length;n<o;n++){var i=r[n];e.push(i);var a=i[0];a instanceof nR&&t(hR(a.Kids()))}};return t(this.getFields()),e},e.prototype.addField=function(e){var t=this.normalizedEntries().Fields;null==t||t.push(e)},e.prototype.removeField=function(e){var t=e.getParent(),r=void 0===t?this.normalizedEntries().Fields:t.Kids(),n=null==r?void 0:r.indexOf(e.ref);if(void 0===r||void 0===n)throw new Error(\"Tried to remove inexistent field \"+e.getFullyQualifiedName());r.remove(n),void 0!==t&&0===r.size()&&this.removeField(t)},e.prototype.normalizedEntries=function(){var e=this.Fields();return e||(e=this.dict.context.obj([]),this.dict.set(Dj.of(\"Fields\"),e)),{Fields:e}},e.fromDict=function(t){return new e(t)},e.create=function(t){return new e(t.obj({Fields:[]}))},e}();const CR=SR;var kR=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gA(t,e),t.prototype.Pages=function(){return this.lookup(Dj.of(\"Pages\"),Hj)},t.prototype.AcroForm=function(){return this.lookupMaybe(Dj.of(\"AcroForm\"),Hj)},t.prototype.getAcroForm=function(){var e=this.AcroForm();if(e)return CR.fromDict(e)},t.prototype.getOrCreateAcroForm=function(){var e=this.getAcroForm();if(!e){e=CR.create(this.context);var t=this.context.register(e.dict);this.set(Dj.of(\"AcroForm\"),t)}return e},t.prototype.ViewerPreferences=function(){return this.lookupMaybe(Dj.of(\"ViewerPreferences\"),Hj)},t.prototype.getViewerPreferences=function(){var e=this.ViewerPreferences();if(e)return jM.fromDict(e)},t.prototype.getOrCreateViewerPreferences=function(){var e=this.getViewerPreferences();if(!e){e=jM.create(this.context);var t=this.context.register(e.dict);this.set(Dj.of(\"ViewerPreferences\"),t)}return e},t.prototype.insertLeafNode=function(e,t){var r=this.get(Dj.of(\"Pages\"));return this.Pages().insertLeafNode(e,t)||r},t.prototype.removeLeafNode=function(e){this.Pages().removeLeafNode(e)},t.withContextAndPages=function(e,r){var n=new Map;return n.set(Dj.of(\"Type\"),Dj.of(\"Catalog\")),n.set(Dj.of(\"Pages\"),r),new t(n,e)},t.fromMapWithContext=function(e,r){return new t(e,r)},t}(Hj);const ER=kR;var OR=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gA(t,e),t.prototype.Parent=function(){return this.lookup(Dj.of(\"Parent\"))},t.prototype.Kids=function(){return this.lookup(Dj.of(\"Kids\"),Oj)},t.prototype.Count=function(){return this.lookup(Dj.of(\"Count\"),kj)},t.prototype.pushTreeNode=function(e){this.Kids().push(e)},t.prototype.pushLeafNode=function(e){var t=this.Kids();this.insertLeafKid(t.size(),e)},t.prototype.insertLeafNode=function(e,r){var n=this.Kids(),o=this.Count().asNumber();if(r>o)throw new nj(r,o);for(var i=r,a=0,s=n.size();a<s;a++){if(0===i)return void this.insertLeafKid(a,e);var l=n.get(a),c=this.context.lookup(l);if(c instanceof t){if(c.Count().asNumber()>i)return c.insertLeafNode(e,i)||l;i-=c.Count().asNumber()}c instanceof lP&&(i-=1)}if(0!==i)throw new oj(r,\"insertLeafNode\");this.insertLeafKid(n.size(),e)},t.prototype.removeLeafNode=function(e,r){void 0===r&&(r=!0);var n=this.Kids(),o=this.Count().asNumber();if(e>=o)throw new nj(e,o);for(var i=e,a=0,s=n.size();a<s;a++){var l=n.get(a),c=this.context.lookup(l);if(c instanceof t){if(c.Count().asNumber()>i)return c.removeLeafNode(i,r),void(r&&0===c.Kids().size()&&n.remove(a));i-=c.Count().asNumber()}if(c instanceof lP){if(0===i)return void this.removeKid(a);i-=1}}throw new oj(e,\"removeLeafNode\")},t.prototype.ascend=function(e){e(this);var t=this.Parent();t&&t.ascend(e)},t.prototype.traverse=function(e){for(var r=this.Kids(),n=0,o=r.size();n<o;n++){var i=r.get(n),a=this.context.lookup(i);a instanceof t&&a.traverse(e),e(a,i)}},t.prototype.insertLeafKid=function(e,t){var r=this.Kids();this.ascend((function(e){var t=e.Count().asNumber()+1;e.set(Dj.of(\"Count\"),kj.of(t))})),r.insert(e,t)},t.prototype.removeKid=function(e){var t=this.Kids();t.lookup(e)instanceof lP&&this.ascend((function(e){var t=e.Count().asNumber()-1;e.set(Dj.of(\"Count\"),kj.of(t))})),t.remove(e)},t.withContext=function(e,r){var n=new Map;return n.set(Dj.of(\"Type\"),Dj.of(\"Pages\")),n.set(Dj.of(\"Kids\"),e.obj([])),n.set(Dj.of(\"Count\"),e.obj(0)),r&&n.set(Dj.of(\"Parent\"),r),new t(n,e)},t.fromMapWithContext=function(e,r){return new t(e,r)},t}(Hj);const AR=OR;var TR=new Uint8Array(256);TR[wj.Zero]=1,TR[wj.One]=1,TR[wj.Two]=1,TR[wj.Three]=1,TR[wj.Four]=1,TR[wj.Five]=1,TR[wj.Six]=1,TR[wj.Seven]=1,TR[wj.Eight]=1,TR[wj.Nine]=1;var jR=new Uint8Array(256);jR[wj.Period]=1,jR[wj.Plus]=1,jR[wj.Minus]=1;for(var PR=new Uint8Array(256),MR=0;MR<256;MR++)PR[MR]=TR[MR]||jR[MR]?1:0;var RR=wj.Newline,_R=wj.CarriageReturn,IR=function(){function e(e,t){void 0===t&&(t=!1),this.bytes=e,this.capNumbers=t}return e.prototype.parseRawInt=function(){for(var e=\"\";!this.bytes.done();){var t=this.bytes.peek();if(!TR[t])break;e+=MA(this.bytes.next())}var r=Number(e);if(!e||!isFinite(r))throw new uj(this.bytes.position(),e);return r},e.prototype.parseRawNumber=function(){for(var e=\"\";!this.bytes.done();){var t=this.bytes.peek();if(!PR[t])break;if(e+=MA(this.bytes.next()),t===wj.Period)break}for(;!this.bytes.done()&&(t=this.bytes.peek(),TR[t]);)e+=MA(this.bytes.next());var r=Number(e);if(!e||!isFinite(r))throw new uj(this.bytes.position(),e);if(r>Number.MAX_SAFE_INTEGER){if(this.capNumbers){var n=\"Parsed number that is too large for some PDF readers: \"+e+\", using Number.MAX_SAFE_INTEGER instead.\";return console.warn(n),Number.MAX_SAFE_INTEGER}n=\"Parsed number that is too large for some PDF readers: \"+e+\", not capping.\",console.warn(n)}return r},e.prototype.skipWhitespace=function(){for(;!this.bytes.done()&&Mj[this.bytes.peek()];)this.bytes.next()},e.prototype.skipLine=function(){for(;!this.bytes.done();){var e=this.bytes.peek();if(e===RR||e===_R)return;this.bytes.next()}},e.prototype.skipComment=function(){if(this.bytes.peek()!==wj.Percent)return!1;for(;!this.bytes.done();){var e=this.bytes.peek();if(e===RR||e===_R)return!0;this.bytes.next()}return!0},e.prototype.skipWhitespaceAndComments=function(){for(this.skipWhitespace();this.skipComment();)this.skipWhitespace()},e.prototype.matchKeyword=function(e){for(var t=this.bytes.offset(),r=0,n=e.length;r<n;r++)if(this.bytes.done()||this.bytes.next()!==e[r])return this.bytes.moveTo(t),!1;return!0},e}();const NR=IR;const FR=function(){function e(e){this.idx=0,this.line=0,this.column=0,this.bytes=e,this.length=this.bytes.length}return e.prototype.moveTo=function(e){this.idx=e},e.prototype.next=function(){var e=this.bytes[this.idx++];return e===wj.Newline?(this.line+=1,this.column=0):this.column+=1,e},e.prototype.assertNext=function(e){if(this.peek()!==e)throw new fj(this.position(),e,this.peek());return this.next()},e.prototype.peek=function(){return this.bytes[this.idx]},e.prototype.peekAhead=function(e){return this.bytes[this.idx+e]},e.prototype.peekAt=function(e){return this.bytes[e]},e.prototype.done=function(){return this.idx>=this.length},e.prototype.offset=function(){return this.idx},e.prototype.slice=function(e,t){return this.bytes.slice(e,t)},e.prototype.position=function(){return{line:this.line,column:this.column,offset:this.idx}},e.of=function(t){return new e(t)},e.fromPDFRawStream=function(t){return e.of(wM(t).decode())},e}();var DR=wj.Space,BR=wj.CarriageReturn,LR=wj.Newline,zR=[wj.s,wj.t,wj.r,wj.e,wj.a,wj.m],HR=[wj.e,wj.n,wj.d,wj.s,wj.t,wj.r,wj.e,wj.a,wj.m],UR={header:[wj.Percent,wj.P,wj.D,wj.F,wj.Dash],eof:[wj.Percent,wj.Percent,wj.E,wj.O,wj.F],obj:[wj.o,wj.b,wj.j],endobj:[wj.e,wj.n,wj.d,wj.o,wj.b,wj.j],xref:[wj.x,wj.r,wj.e,wj.f],trailer:[wj.t,wj.r,wj.a,wj.i,wj.l,wj.e,wj.r],startxref:[wj.s,wj.t,wj.a,wj.r,wj.t,wj.x,wj.r,wj.e,wj.f],true:[wj.t,wj.r,wj.u,wj.e],false:[wj.f,wj.a,wj.l,wj.s,wj.e],null:[wj.n,wj.u,wj.l,wj.l],stream:zR,streamEOF1:wA(zR,[DR,BR,LR]),streamEOF2:wA(zR,[BR,LR]),streamEOF3:wA(zR,[BR]),streamEOF4:wA(zR,[LR]),endstream:HR,EOF1endstream:wA([BR,LR],HR),EOF2endstream:wA([BR],HR),EOF3endstream:wA([LR],HR)},VR=function(e){function t(t,r,n){void 0===n&&(n=!1);var o=e.call(this,t,n)||this;return o.context=r,o}return gA(t,e),t.prototype.parseObject=function(){if(this.skipWhitespaceAndComments(),this.matchKeyword(UR.true))return jj.True;if(this.matchKeyword(UR.false))return jj.False;if(this.matchKeyword(UR.null))return Lj;var e=this.bytes.peek();if(e===wj.LessThan&&this.bytes.peekAhead(1)===wj.LessThan)return this.parseDictOrStream();if(e===wj.LessThan)return this.parseHexString();if(e===wj.LeftParen)return this.parseString();if(e===wj.ForwardSlash)return this.parseName();if(e===wj.LeftSquareBracket)return this.parseArray();if(PR[e])return this.parseNumberOrRef();throw new hj(this.bytes.position(),e)},t.prototype.parseNumberOrRef=function(){var e=this.parseRawNumber();this.skipWhitespaceAndComments();var t=this.bytes.offset();if(TR[this.bytes.peek()]){var r=this.parseRawNumber();if(this.skipWhitespaceAndComments(),this.bytes.peek()===wj.R)return this.bytes.assertNext(wj.R),Yj.of(e,r)}return this.bytes.moveTo(t),kj.of(e)},t.prototype.parseHexString=function(){var e=\"\";for(this.bytes.assertNext(wj.LessThan);!this.bytes.done()&&this.bytes.peek()!==wj.GreaterThan;)e+=MA(this.bytes.next());return this.bytes.assertNext(wj.GreaterThan),AP.of(e)},t.prototype.parseString=function(){for(var e=0,t=!1,r=\"\";!this.bytes.done();){var n=this.bytes.next();if(r+=MA(n),t||(n===wj.LeftParen&&(e+=1),n===wj.RightParen&&(e-=1)),n===wj.BackSlash?t=!t:t&&(t=!1),0===e)return IP.of(r.substring(1,r.length-1))}throw new gj(this.bytes.position())},t.prototype.parseName=function(){this.bytes.assertNext(wj.ForwardSlash);for(var e=\"\";!this.bytes.done();){var t=this.bytes.peek();if(Mj[t]||Pj[t])break;e+=MA(t),this.bytes.next()}return Dj.of(e)},t.prototype.parseArray=function(){this.bytes.assertNext(wj.LeftSquareBracket),this.skipWhitespaceAndComments();for(var e=Oj.withContext(this.context);this.bytes.peek()!==wj.RightSquareBracket;){var t=this.parseObject();e.push(t),this.skipWhitespaceAndComments()}return this.bytes.assertNext(wj.RightSquareBracket),e},t.prototype.parseDict=function(){this.bytes.assertNext(wj.LessThan),this.bytes.assertNext(wj.LessThan),this.skipWhitespaceAndComments();for(var e=new Map;!this.bytes.done()&&this.bytes.peek()!==wj.GreaterThan&&this.bytes.peekAhead(1)!==wj.GreaterThan;){var t=this.parseName(),r=this.parseObject();e.set(t,r),this.skipWhitespaceAndComments()}this.skipWhitespaceAndComments(),this.bytes.assertNext(wj.GreaterThan),this.bytes.assertNext(wj.GreaterThan);var n=e.get(Dj.of(\"Type\"));return n===Dj.of(\"Catalog\")?ER.fromMapWithContext(e,this.context):n===Dj.of(\"Pages\")?AR.fromMapWithContext(e,this.context):n===Dj.of(\"Page\")?lP.fromMapWithContext(e,this.context):Hj.fromMapWithContext(e,this.context)},t.prototype.parseDictOrStream=function(){var e=this.bytes.position(),t=this.parseDict();if(this.skipWhitespaceAndComments(),!(this.matchKeyword(UR.streamEOF1)||this.matchKeyword(UR.streamEOF2)||this.matchKeyword(UR.streamEOF3)||this.matchKeyword(UR.streamEOF4)||this.matchKeyword(UR.stream)))return t;var r,n=this.bytes.offset(),o=t.get(Dj.of(\"Length\"));o instanceof kj?(r=n+o.asNumber(),this.bytes.moveTo(r),this.skipWhitespaceAndComments(),this.matchKeyword(UR.endstream)||(this.bytes.moveTo(n),r=this.findEndOfStreamFallback(e))):r=this.findEndOfStreamFallback(e);var i=this.bytes.slice(n,r);return Gj.of(t,i)},t.prototype.findEndOfStreamFallback=function(e){for(var t=1,r=this.bytes.offset();!this.bytes.done()&&(r=this.bytes.offset(),this.matchKeyword(UR.stream)?t+=1:this.matchKeyword(UR.EOF1endstream)||this.matchKeyword(UR.EOF2endstream)||this.matchKeyword(UR.EOF3endstream)||this.matchKeyword(UR.endstream)?t-=1:this.bytes.next(),0!==t););if(0!==t)throw new mj(e);return r},t.forBytes=function(e,r,n){return new t(FR.of(e),r,n)},t.forByteStream=function(e,r,n){return void 0===n&&(n=!1),new t(e,r,n)},t}(NR);const WR=VR;var GR=function(e){function t(t,r){var n=e.call(this,FR.fromPDFRawStream(t),t.dict.context)||this,o=t.dict;return n.alreadyParsed=!1,n.shouldWaitForTick=r||function(){return!1},n.firstOffset=o.lookup(Dj.of(\"First\"),kj).asNumber(),n.objectCount=o.lookup(Dj.of(\"N\"),kj).asNumber(),n}return gA(t,e),t.prototype.parseIntoContext=function(){return bA(this,void 0,void 0,(function(){var e,t,r,n,o,i,a,s;return yA(this,(function(l){switch(l.label){case 0:if(this.alreadyParsed)throw new ZT(\"PDFObjectStreamParser\",\"parseIntoContext\");this.alreadyParsed=!0,e=this.parseOffsetsAndObjectNumbers(),t=0,r=e.length,l.label=1;case 1:return t<r?(n=e[t],o=n.objectNumber,i=n.offset,this.bytes.moveTo(this.firstOffset+i),a=this.parseObject(),s=Yj.of(o,0),this.context.assign(s,a),this.shouldWaitForTick()?[4,$A()]:[3,3]):[3,4];case 2:l.sent(),l.label=3;case 3:return t++,[3,1];case 4:return[2]}}))}))},t.prototype.parseOffsetsAndObjectNumbers=function(){for(var e=[],t=0,r=this.objectCount;t<r;t++){this.skipWhitespaceAndComments();var n=this.parseRawInt();this.skipWhitespaceAndComments();var o=this.parseRawInt();e.push({objectNumber:n,offset:o})}return e},t.forStream=function(e,r){return new t(e,r)},t}(WR);const qR=GR;var KR=function(){function e(e){this.alreadyParsed=!1,this.dict=e.dict,this.bytes=FR.fromPDFRawStream(e),this.context=this.dict.context;var t=this.dict.lookup(Dj.of(\"Size\"),kj),r=this.dict.lookup(Dj.of(\"Index\"));if(r instanceof Oj){this.subsections=[];for(var n=0,o=r.size();n<o;n+=2){var i=r.lookup(n+0,kj).asNumber(),a=r.lookup(n+1,kj).asNumber();this.subsections.push({firstObjectNumber:i,length:a})}}else this.subsections=[{firstObjectNumber:0,length:t.asNumber()}];var s=this.dict.lookup(Dj.of(\"W\"),Oj);for(this.byteWidths=[-1,-1,-1],n=0,o=s.size();n<o;n++)this.byteWidths[n]=s.lookup(n,kj).asNumber()}return e.prototype.parseIntoContext=function(){if(this.alreadyParsed)throw new ZT(\"PDFXRefStreamParser\",\"parseIntoContext\");return this.alreadyParsed=!0,this.context.trailerInfo={Root:this.dict.get(Dj.of(\"Root\")),Encrypt:this.dict.get(Dj.of(\"Encrypt\")),Info:this.dict.get(Dj.of(\"Info\")),ID:this.dict.get(Dj.of(\"ID\"))},this.parseEntries()},e.prototype.parseEntries=function(){for(var e=[],t=this.byteWidths,r=t[0],n=t[1],o=t[2],i=0,a=this.subsections.length;i<a;i++)for(var s=this.subsections[i],l=s.firstObjectNumber,c=s.length,u=0;u<c;u++){for(var d=0,f=0,h=r;f<h;f++)d=d<<8|this.bytes.next();var p=0;for(f=0,h=n;f<h;f++)p=p<<8|this.bytes.next();var m=0;for(f=0,h=o;f<h;f++)m=m<<8|this.bytes.next();0===r&&(d=1);var g=l+u,v={ref:Yj.of(g,m),offset:p,deleted:0===d,inObjectStream:2===d};e.push(v)}return e},e.forStream=function(t){return new e(t)},e}();const XR=KR;var YR=function(e){function t(t,r,n,o){void 0===r&&(r=1/0),void 0===n&&(n=!1),void 0===o&&(o=!1);var i=e.call(this,FR.of(t),aP.create(),o)||this;return i.alreadyParsed=!1,i.parsedObjects=0,i.shouldWaitForTick=function(){return i.parsedObjects+=1,i.parsedObjects%i.objectsPerTick===0},i.objectsPerTick=r,i.throwOnInvalidObject=n,i}return gA(t,e),t.prototype.parseDocument=function(){return bA(this,void 0,void 0,(function(){var e,t;return yA(this,(function(r){switch(r.label){case 0:if(this.alreadyParsed)throw new ZT(\"PDFParser\",\"parseDocument\");this.alreadyParsed=!0,this.context.header=this.parseHeader(),r.label=1;case 1:return this.bytes.done()?[3,3]:[4,this.parseDocumentSection()];case 2:if(r.sent(),(t=this.bytes.offset())===e)throw new vj(this.bytes.position());return e=t,[3,1];case 3:return this.maybeRecoverRoot(),this.context.lookup(Yj.of(0))&&(console.warn(\"Removing parsed object: 0 0 R\"),this.context.delete(Yj.of(0))),[2,this.context]}}))}))},t.prototype.maybeRecoverRoot=function(){var e=function(e){return e instanceof Hj&&e.lookup(Dj.of(\"Type\"))===Dj.of(\"Catalog\")};if(!e(this.context.lookup(this.context.trailerInfo.Root)))for(var t=this.context.enumerateIndirectObjects(),r=0,n=t.length;r<n;r++){var o=t[r],i=o[0];e(o[1])&&(this.context.trailerInfo.Root=i)}},t.prototype.parseHeader=function(){for(;!this.bytes.done();){if(this.matchKeyword(UR.header)){var e=this.parseRawInt();this.bytes.assertNext(wj.Period);var t=this.parseRawInt(),r=xj.forVersion(e,t);return this.skipBinaryHeaderComment(),r}this.bytes.next()}throw new bj(this.bytes.position())},t.prototype.parseIndirectObjectHeader=function(){this.skipWhitespaceAndComments();var e=this.parseRawInt();this.skipWhitespaceAndComments();var t=this.parseRawInt();if(this.skipWhitespaceAndComments(),!this.matchKeyword(UR.obj))throw new yj(this.bytes.position(),UR.obj);return Yj.of(e,t)},t.prototype.matchIndirectObjectHeader=function(){var e=this.bytes.offset();try{return this.parseIndirectObjectHeader(),!0}catch(t){return this.bytes.moveTo(e),!1}},t.prototype.parseIndirectObject=function(){return bA(this,void 0,void 0,(function(){var e,t;return yA(this,(function(r){switch(r.label){case 0:return e=this.parseIndirectObjectHeader(),this.skipWhitespaceAndComments(),t=this.parseObject(),this.skipWhitespaceAndComments(),this.matchKeyword(UR.endobj),t instanceof Gj&&t.dict.lookup(Dj.of(\"Type\"))===Dj.of(\"ObjStm\")?[4,qR.forStream(t,this.shouldWaitForTick).parseIntoContext()]:[3,2];case 1:return r.sent(),[3,3];case 2:t instanceof Gj&&t.dict.lookup(Dj.of(\"Type\"))===Dj.of(\"XRef\")?XR.forStream(t).parseIntoContext():this.context.assign(e,t),r.label=3;case 3:return[2,e]}}))}))},t.prototype.tryToParseInvalidIndirectObject=function(){var e=this.bytes.position(),t=\"Trying to parse invalid object: \"+JSON.stringify(e)+\")\";if(this.throwOnInvalidObject)throw new Error(t);console.warn(t);var r=this.parseIndirectObjectHeader();console.warn(\"Invalid object ref: \"+r),this.skipWhitespaceAndComments();for(var n=this.bytes.offset(),o=!0;!this.bytes.done()&&(this.matchKeyword(UR.endobj)&&(o=!1),o);)this.bytes.next();if(o)throw new pj(e);var i=this.bytes.offset()-UR.endobj.length,a=wP.of(this.bytes.slice(n,i));return this.context.assign(r,a),r},t.prototype.parseIndirectObjects=function(){return bA(this,void 0,void 0,(function(){var e;return yA(this,(function(t){switch(t.label){case 0:this.skipWhitespaceAndComments(),t.label=1;case 1:if(this.bytes.done()||!TR[this.bytes.peek()])return[3,8];e=this.bytes.offset(),t.label=2;case 2:return t.trys.push([2,4,,5]),[4,this.parseIndirectObject()];case 3:return t.sent(),[3,5];case 4:return t.sent(),this.bytes.moveTo(e),this.tryToParseInvalidIndirectObject(),[3,5];case 5:return this.skipWhitespaceAndComments(),this.skipJibberish(),this.shouldWaitForTick()?[4,$A()]:[3,7];case 6:t.sent(),t.label=7;case 7:return[3,1];case 8:return[2]}}))}))},t.prototype.maybeParseCrossRefSection=function(){if(this.skipWhitespaceAndComments(),this.matchKeyword(UR.xref)){this.skipWhitespaceAndComments();for(var e=-1,t=fP.createEmpty();!this.bytes.done()&&TR[this.bytes.peek()];){var r=this.parseRawInt();this.skipWhitespaceAndComments();var n=this.parseRawInt();this.skipWhitespaceAndComments();var o=this.bytes.peek();if(o===wj.n||o===wj.f){var i=Yj.of(e,n);this.bytes.next()===wj.n?t.addEntry(i,r):t.addDeletedEntry(i,r),e+=1}else e=r;this.skipWhitespaceAndComments()}return t}},t.prototype.maybeParseTrailerDict=function(){if(this.skipWhitespaceAndComments(),this.matchKeyword(UR.trailer)){this.skipWhitespaceAndComments();var e=this.parseDict(),t=this.context;t.trailerInfo={Root:e.get(Dj.of(\"Root\"))||t.trailerInfo.Root,Encrypt:e.get(Dj.of(\"Encrypt\"))||t.trailerInfo.Encrypt,Info:e.get(Dj.of(\"Info\"))||t.trailerInfo.Info,ID:e.get(Dj.of(\"ID\"))||t.trailerInfo.ID}}},t.prototype.maybeParseTrailer=function(){if(this.skipWhitespaceAndComments(),this.matchKeyword(UR.startxref)){this.skipWhitespaceAndComments();var e=this.parseRawInt();return this.skipWhitespace(),this.matchKeyword(UR.eof),this.skipWhitespaceAndComments(),this.matchKeyword(UR.eof),this.skipWhitespaceAndComments(),hP.forLastCrossRefSectionOffset(e)}},t.prototype.parseDocumentSection=function(){return bA(this,void 0,void 0,(function(){return yA(this,(function(e){switch(e.label){case 0:return[4,this.parseIndirectObjects()];case 1:return e.sent(),this.maybeParseCrossRefSection(),this.maybeParseTrailerDict(),this.maybeParseTrailer(),this.skipJibberish(),[2]}}))}))},t.prototype.skipJibberish=function(){for(this.skipWhitespaceAndComments();!this.bytes.done();){var e=this.bytes.offset(),t=this.bytes.peek();if(t>=wj.Space&&t<=wj.Tilde&&(this.matchKeyword(UR.xref)||this.matchKeyword(UR.trailer)||this.matchKeyword(UR.startxref)||this.matchIndirectObjectHeader())){this.bytes.moveTo(e);break}this.bytes.next()}},t.prototype.skipBinaryHeaderComment=function(){this.skipWhitespaceAndComments();try{var e=this.bytes.offset();this.parseIndirectObjectHeader(),this.bytes.moveTo(e)}catch(e){this.bytes.next(),this.skipWhitespaceAndComments()}},t.forBytesWithOptions=function(e,r,n,o){return new t(e,r,n,o)},t}(WR);const $R=YR;var ZR,QR=function(e){return 1<<e};!function(e){e[e.Invisible=QR(0)]=\"Invisible\",e[e.Hidden=QR(1)]=\"Hidden\",e[e.Print=QR(2)]=\"Print\",e[e.NoZoom=QR(3)]=\"NoZoom\",e[e.NoRotate=QR(4)]=\"NoRotate\",e[e.NoView=QR(5)]=\"NoView\",e[e.ReadOnly=QR(6)]=\"ReadOnly\",e[e.Locked=QR(7)]=\"Locked\",e[e.ToggleNoView=QR(8)]=\"ToggleNoView\",e[e.LockedContents=QR(9)]=\"LockedContents\"}(ZR||(ZR={}));var JR,e_=function(e){return e instanceof Dj?e:Dj.of(e)},t_=function(e){return e instanceof kj?e:kj.of(e)},r_=function(e){return e instanceof kj?e.asNumber():e};!function(e){e.Degrees=\"degrees\",e.Radians=\"radians\"}(JR||(JR={}));var n_,o_=function(e){return _T(e,\"degreeAngle\",[\"number\"]),{type:JR.Degrees,angle:e}},i_=JR.Radians,a_=JR.Degrees,s_=function(e){return e*Math.PI/180},l_=function(e){return e.type===i_?e.angle:e.type===a_?s_(e.angle):uT(\"Invalid rotation: \"+JSON.stringify(e))},c_=function(e){return e.type===i_?180*e.angle/Math.PI:e.type===a_?e.angle:uT(\"Invalid rotation: \"+JSON.stringify(e))},u_=function(e){void 0===e&&(e=0);var t=e/90%4;return 0===t?0:1===t?90:2===t?180:3===t?270:0},d_=function(e,t){void 0===t&&(t=0);var r=u_(t);return 90===r||270===r?{width:e.height,height:e.width}:{width:e.width,height:e.height}},f_=function(){return Zj.of(Jj.ClipNonZero)},h_=Math.cos,p_=Math.sin,m_=Math.tan,g_=function(e,t,r,n,o,i){return Zj.of(Jj.ConcatTransformationMatrix,[t_(e),t_(t),t_(r),t_(n),t_(o),t_(i)])},v_=function(e,t){return g_(1,0,0,1,e,t)},b_=function(e,t){return g_(e,0,0,t,0,0)},y_=function(e){return g_(h_(r_(e)),p_(r_(e)),-p_(r_(e)),h_(r_(e)),0,0)},w_=function(e){return y_(s_(r_(e)))},x_=function(e,t){return g_(1,m_(r_(e)),m_(r_(t)),1,0,0)},S_=function(e,t){return Zj.of(Jj.SetLineDashPattern,[\"[\"+e.map(t_).join(\" \")+\"]\",t_(t)])};!function(e){e[e.Butt=0]=\"Butt\",e[e.Round=1]=\"Round\",e[e.Projecting=2]=\"Projecting\"}(n_||(n_={}));var C_,k_=function(e){return Zj.of(Jj.SetLineCapStyle,[t_(e)])};!function(e){e[e.Miter=0]=\"Miter\",e[e.Round=1]=\"Round\",e[e.Bevel=2]=\"Bevel\"}(C_||(C_={}));var E_,O_=function(e){return Zj.of(Jj.SetGraphicsStateParams,[e_(e)])},A_=function(){return Zj.of(Jj.PushGraphicsState)},T_=function(){return Zj.of(Jj.PopGraphicsState)},j_=function(e){return Zj.of(Jj.SetLineWidth,[t_(e)])},P_=function(e,t,r,n,o,i){return Zj.of(Jj.AppendBezierCurve,[t_(e),t_(t),t_(r),t_(n),t_(o),t_(i)])},M_=function(e,t,r,n){return Zj.of(Jj.CurveToReplicateInitialPoint,[t_(e),t_(t),t_(r),t_(n)])},R_=function(){return Zj.of(Jj.ClosePath)},__=function(e,t){return Zj.of(Jj.MoveTo,[t_(e),t_(t)])},I_=function(e,t){return Zj.of(Jj.LineTo,[t_(e),t_(t)])},N_=function(){return Zj.of(Jj.StrokePath)},F_=function(){return Zj.of(Jj.FillNonZero)},D_=function(){return Zj.of(Jj.FillNonZeroAndStroke)},B_=function(){return Zj.of(Jj.EndPath)},L_=function(e){return Zj.of(Jj.ShowText,[e])},z_=function(){return Zj.of(Jj.BeginText)},H_=function(){return Zj.of(Jj.EndText)},U_=function(e,t){return Zj.of(Jj.SetFontAndSize,[e_(e),t_(t)])};!function(e){e[e.Fill=0]=\"Fill\",e[e.Outline=1]=\"Outline\",e[e.FillAndOutline=2]=\"FillAndOutline\",e[e.Invisible=3]=\"Invisible\",e[e.FillAndClip=4]=\"FillAndClip\",e[e.OutlineAndClip=5]=\"OutlineAndClip\",e[e.FillAndOutlineAndClip=6]=\"FillAndOutlineAndClip\",e[e.Clip=7]=\"Clip\"}(E_||(E_={}));var V_,W_=function(e,t,r,n,o){return function(e,t,r,n,o,i){return Zj.of(Jj.SetTextMatrix,[t_(e),t_(t),t_(r),t_(n),t_(o),t_(i)])}(h_(r_(e)),p_(r_(e))+m_(r_(t)),-p_(r_(e))+m_(r_(r)),h_(r_(e)),n,o)},G_=function(e){return Zj.of(Jj.DrawObject,[e_(e)])},q_=function(e){return Zj.of(Jj.BeginMarkedContent,[e_(e)])},K_=function(){return Zj.of(Jj.EndMarkedContent)};!function(e){e.Grayscale=\"Grayscale\",e.RGB=\"RGB\",e.CMYK=\"CMYK\"}(V_||(V_={}));var X_,Y_=function(e){return FT(e,\"gray\",0,1),{type:V_.Grayscale,gray:e}},$_=function(e,t,r){return FT(e,\"red\",0,1),FT(t,\"green\",0,1),FT(r,\"blue\",0,1),{type:V_.RGB,red:e,green:t,blue:r}},Z_=function(e,t,r,n){return FT(e,\"cyan\",0,1),FT(t,\"magenta\",0,1),FT(r,\"yellow\",0,1),FT(n,\"key\",0,1),{type:V_.CMYK,cyan:e,magenta:t,yellow:r,key:n}},Q_=V_.Grayscale,J_=V_.RGB,eI=V_.CMYK,tI=function(e){return e.type===Q_?(t=e.gray,Zj.of(Jj.NonStrokingColorGray,[t_(t)])):e.type===J_?function(e,t,r){return Zj.of(Jj.NonStrokingColorRgb,[t_(e),t_(t),t_(r)])}(e.red,e.green,e.blue):e.type===eI?function(e,t,r,n){return Zj.of(Jj.NonStrokingColorCmyk,[t_(e),t_(t),t_(r),t_(n)])}(e.cyan,e.magenta,e.yellow,e.key):uT(\"Invalid color: \"+JSON.stringify(e));var t},rI=function(e){return e.type===Q_?(t=e.gray,Zj.of(Jj.StrokingColorGray,[t_(t)])):e.type===J_?function(e,t,r){return Zj.of(Jj.StrokingColorRgb,[t_(e),t_(t),t_(r)])}(e.red,e.green,e.blue):e.type===eI?function(e,t,r,n){return Zj.of(Jj.StrokingColorCmyk,[t_(e),t_(t),t_(r),t_(n)])}(e.cyan,e.magenta,e.yellow,e.key):uT(\"Invalid color: \"+JSON.stringify(e));var t},nI=function(e,t){return void 0===t&&(t=1),1===(null==e?void 0:e.length)?Y_(e[0]*t):3===(null==e?void 0:e.length)?$_(e[0]*t,e[1]*t,e[2]*t):4===(null==e?void 0:e.length)?Z_(e[0]*t,e[1]*t,e[2]*t,e[3]*t):void 0},oI=function(e){return e.type===Q_?[e.gray]:e.type===J_?[e.red,e.green,e.blue]:e.type===eI?[e.cyan,e.magenta,e.yellow,e.key]:uT(\"Invalid color: \"+JSON.stringify(e))},iI=0,aI=0,sI=0,lI=0,cI=0,uI=0,dI=new Map([[\"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]]),fI={M:function(e){return iI=e[0],aI=e[1],sI=lI=null,cI=iI,uI=aI,__(iI,aI)},m:function(e){return iI+=e[0],aI+=e[1],sI=lI=null,cI=iI,uI=aI,__(iI,aI)},C:function(e){return iI=e[4],aI=e[5],sI=e[2],lI=e[3],P_(e[0],e[1],e[2],e[3],e[4],e[5])},c:function(e){var t=P_(e[0]+iI,e[1]+aI,e[2]+iI,e[3]+aI,e[4]+iI,e[5]+aI);return sI=iI+e[2],lI=aI+e[3],iI+=e[4],aI+=e[5],t},S:function(e){null!==sI&&null!==lI||(sI=iI,lI=aI);var t=P_(iI-(sI-iI),aI-(lI-aI),e[0],e[1],e[2],e[3]);return sI=e[0],lI=e[1],iI=e[2],aI=e[3],t},s:function(e){null!==sI&&null!==lI||(sI=iI,lI=aI);var t=P_(iI-(sI-iI),aI-(lI-aI),iI+e[0],aI+e[1],iI+e[2],aI+e[3]);return sI=iI+e[0],lI=aI+e[1],iI+=e[2],aI+=e[3],t},Q:function(e){return sI=e[0],lI=e[1],iI=e[2],aI=e[3],M_(e[0],e[1],iI,aI)},q:function(e){var t=M_(e[0]+iI,e[1]+aI,e[2]+iI,e[3]+aI);return sI=iI+e[0],lI=aI+e[1],iI+=e[2],aI+=e[3],t},T:function(e){null===sI||null===lI?(sI=iI,lI=aI):(sI=iI-(sI-iI),lI=aI-(lI-aI));var t=M_(sI,lI,e[0],e[1]);return sI=iI-(sI-iI),lI=aI-(lI-aI),iI=e[0],aI=e[1],t},t:function(e){null===sI||null===lI?(sI=iI,lI=aI):(sI=iI-(sI-iI),lI=aI-(lI-aI));var t=M_(sI,lI,iI+e[0],aI+e[1]);return iI+=e[0],aI+=e[1],t},A:function(e){var t=hI(iI,aI,e);return iI=e[5],aI=e[6],t},a:function(e){e[5]+=iI,e[6]+=aI;var t=hI(iI,aI,e);return iI=e[5],aI=e[6],t},L:function(e){return iI=e[0],aI=e[1],sI=lI=null,I_(iI,aI)},l:function(e){return iI+=e[0],aI+=e[1],sI=lI=null,I_(iI,aI)},H:function(e){return iI=e[0],sI=lI=null,I_(iI,aI)},h:function(e){return iI+=e[0],sI=lI=null,I_(iI,aI)},V:function(e){return aI=e[0],sI=lI=null,I_(iI,aI)},v:function(e){return aI+=e[0],sI=lI=null,I_(iI,aI)},Z:function(){var e=R_();return iI=cI,aI=uI,e},z:function(){var e=R_();return iI=cI,aI=uI,e}},hI=function(e,t,r){for(var n=r[0],o=r[1],i=r[2],a=r[3],s=r[4],l=r[5],c=r[6],u=[],d=0,f=pI(l,c,n,o,a,s,i,e,t);d<f.length;d++){var h=f[d],p=mI.apply(void 0,h);u.push(P_.apply(void 0,p))}return u},pI=function(e,t,r,n,o,i,a,s,l){var c=a*(Math.PI/180),u=Math.sin(c),d=Math.cos(c);r=Math.abs(r),n=Math.abs(n);var f=(sI=d*(s-e)*.5+u*(l-t)*.5)*sI/(r*r)+(lI=d*(l-t)*.5-u*(s-e)*.5)*lI/(n*n);f>1&&(r*=f=Math.sqrt(f),n*=f);var h=d/r,p=u/r,m=-u/n,g=d/n,v=h*s+p*l,b=m*s+g*l,y=h*e+p*t,w=m*e+g*t,x=1/((y-v)*(y-v)+(w-b)*(w-b))-.25;x<0&&(x=0);var S=Math.sqrt(x);i===o&&(S=-S);var C=.5*(v+y)-S*(w-b),k=.5*(b+w)+S*(y-v),E=Math.atan2(b-k,v-C),O=Math.atan2(w-k,y-C)-E;O<0&&1===i?O+=2*Math.PI:O>0&&0===i&&(O-=2*Math.PI);for(var A=Math.ceil(Math.abs(O/(.5*Math.PI+.001))),T=[],j=0;j<A;j++){var P=E+j*O/A,M=E+(j+1)*O/A;T[j]=[C,k,P,M,r,n,u,d]}return T},mI=function(e,t,r,n,o,i,a,s){var l=s*o,c=-a*i,u=a*o,d=s*i,f=.5*(n-r),h=8/3*Math.sin(.5*f)*Math.sin(.5*f)/Math.sin(f),p=e+Math.cos(r)-h*Math.sin(r),m=t+Math.sin(r)+h*Math.cos(r),g=e+Math.cos(n),v=t+Math.sin(n),b=g+h*Math.sin(n),y=v-h*Math.cos(n);return[l*p+c*m,u*p+d*m,l*b+c*y,u*b+d*y,l*g+c*v,u*g+d*v]},gI=function(e,t){return[A_(),t.graphicsState&&O_(t.graphicsState),v_(t.x,t.y),y_(l_(t.rotate)),b_(t.width,t.height),x_(l_(t.xSkew),l_(t.ySkew)),G_(e),T_()].filter(Boolean)},vI=function(e){var t,r;return[A_(),e.graphicsState&&O_(e.graphicsState),e.color&&tI(e.color),e.borderColor&&rI(e.borderColor),j_(e.borderWidth),e.borderLineCap&&k_(e.borderLineCap),S_(null!==(t=e.borderDashArray)&&void 0!==t?t:[],null!==(r=e.borderDashPhase)&&void 0!==r?r:0),v_(e.x,e.y),y_(l_(e.rotate)),x_(l_(e.xSkew),l_(e.ySkew)),__(0,0),I_(0,e.height),I_(e.width,e.height),I_(e.width,0),R_(),e.color&&e.borderWidth?D_():e.color?F_():e.borderColor?N_():R_(),T_()].filter(Boolean)},bI=(Math.sqrt(2)-1)/3*4,yI=function(e){var t,r,n,o,i,a,s,l,c,u,d,f,h,p;return wA([A_(),e.graphicsState&&O_(e.graphicsState),e.color&&tI(e.color),e.borderColor&&rI(e.borderColor),j_(e.borderWidth),e.borderLineCap&&k_(e.borderLineCap),S_(null!==(t=e.borderDashArray)&&void 0!==t?t:[],null!==(r=e.borderDashPhase)&&void 0!==r?r:0)],void 0===e.rotate?(o={x:e.x,y:e.y,xScale:e.xScale,yScale:e.yScale},i=r_(o.x),a=r_(o.y),s=r_(o.xScale),l=r_(o.yScale),c=s*bI,u=l*bI,d=(i-=s)+2*s,f=(a-=l)+2*l,h=i+s,p=a+l,[A_(),__(i,p),P_(i,p-u,h-c,a,h,a),P_(h+c,a,d,p-u,d,p),P_(d,p+u,h+c,f,h,f),P_(h-c,f,i,p+u,i,p),T_()]):function(e){var t=r_(e.x),r=r_(e.y),n=r_(e.xScale),o=r_(e.yScale),i=-n,a=-o,s=n*bI,l=o*bI,c=i+2*n,u=a+2*o,d=i+n,f=a+o;return[v_(t,r),y_(l_(e.rotate)),__(i,f),P_(i,f-l,d-s,a,d,a),P_(d+s,a,c,f-l,c,f),P_(c,f+l,d+s,u,d,u),P_(d-s,u,i,f+l,i,f)]}({x:e.x,y:e.y,xScale:e.xScale,yScale:e.yScale,rotate:null!==(n=e.rotate)&&void 0!==n?n:o_(0)}),[e.color&&e.borderWidth?D_():e.color?F_():e.borderColor?N_():R_(),T_()]).filter(Boolean)},wI=function(e){return 0===e.rotation?[v_(0,0),w_(0)]:90===e.rotation?[v_(e.width,0),w_(90)]:180===e.rotation?[v_(e.width,e.height),w_(180)]:270===e.rotation?[v_(0,e.height),w_(270)]:[]},xI=function(e){var t=vI({x:e.x,y:e.y,width:e.width,height:e.height,borderWidth:e.borderWidth,color:e.color,borderColor:e.borderColor,rotate:o_(0),xSkew:o_(0),ySkew:o_(0)});if(!e.filled)return t;var r=r_(e.width),n=r_(e.height),o=function(e){var t=r_(e.size);return[A_(),e.color&&rI(e.color),j_(e.thickness),v_(e.x,e.y),__(-.675*t,-.07601036269430045*t),I_(-.25*t,-.49*t),I_(.69*t,.475*t),N_(),T_()].filter(Boolean)}({x:r/2,y:n/2,size:Math.min(r,n)/2,thickness:e.thickness,color:e.markColor});return wA([A_()],t,o,[T_()])},SI=function(e){var t=r_(e.width),r=r_(e.height),n=Math.min(t,r)/2,o=yI({x:e.x,y:e.y,xScale:n,yScale:n,color:e.color,borderColor:e.borderColor,borderWidth:e.borderWidth});if(!e.filled)return o;var i=yI({x:e.x,y:e.y,xScale:.45*n,yScale:.45*n,color:e.dotColor,borderColor:void 0,borderWidth:0});return wA([A_()],o,i,[T_()])},CI=function(e){var t=r_(e.x),r=r_(e.y),n=r_(e.width),o=r_(e.height),i=vI({x:t,y:r,width:n,height:o,borderWidth:e.borderWidth,color:e.color,borderColor:e.borderColor,rotate:o_(0),xSkew:o_(0),ySkew:o_(0)}),a=kI(e.textLines,{color:e.textColor,font:e.font,size:e.fontSize,rotate:o_(0),xSkew:o_(0),ySkew:o_(0)});return wA([A_()],i,a,[T_()])},kI=function(e,t){for(var r=[z_(),tI(t.color),U_(t.font,t.size)],n=0,o=e.length;n<o;n++){var i=e[n],a=i.encoded,s=i.x,l=i.y;r.push(W_(l_(t.rotate),l_(t.xSkew),l_(t.ySkew),s,l),L_(a))}return r.push(H_()),r},EI=function(e){var t=r_(e.x),r=r_(e.y),n=r_(e.width),o=r_(e.height),i=r_(e.borderWidth),a=r_(e.padding),s=t+i/2+a,l=r+i/2+a,c=n-2*(i/2+a),u=o-2*(i/2+a),d=[__(s,l),I_(s,l+u),I_(s+c,l+u),I_(s+c,l),R_(),f_(),B_()],f=vI({x:t,y:r,width:n,height:o,borderWidth:e.borderWidth,color:e.color,borderColor:e.borderColor,rotate:o_(0),xSkew:o_(0),ySkew:o_(0)}),h=kI(e.textLines,{color:e.textColor,font:e.font,size:e.fontSize,rotate:o_(0),xSkew:o_(0),ySkew:o_(0)}),p=wA([q_(\"Tx\"),A_()],h,[T_(),K_()]);return wA([A_()],f,d,p,[T_()])},OI=function(e){function t(){return e.call(this,\"Input document to `PDFDocument.load` is encrypted. You can use `PDFDocument.load(..., { ignoreEncryption: true })` if you wish to load the document anyways.\")||this}return gA(t,e),t}(Error),AI=function(e){function t(){return e.call(this,\"Input to `PDFDocument.embedFont` was a custom font, but no `fontkit` instance was found. You must register a `fontkit` instance with `PDFDocument.registerFontkit(...)` before embedding custom fonts.\")||this}return gA(t,e),t}(Error),TI=function(e){function t(){return e.call(this,\"A `page` passed to `PDFDocument.addPage` or `PDFDocument.insertPage` was from a different (foreign) PDF document. If you want to copy pages from one PDFDocument to another, you must use `PDFDocument.copyPages(...)` to copy the pages before adding or inserting them.\")||this}return gA(t,e),t}(Error),jI=function(e){function t(){return e.call(this,\"PDFDocument has no pages so `PDFDocument.removePage` cannot be called\")||this}return gA(t,e),t}(Error),PI=function(e){function t(t){var r='PDFDocument has no form field with the name \"'+t+'\"';return e.call(this,r)||this}return gA(t,e),t}(Error),MI=function(e){function t(t,r,n){var o,i,a='Expected field \"'+t+'\" to be of type '+(null==r?void 0:r.name)+\", but it is actually of type \"+(null!==(i=null===(o=null==n?void 0:n.constructor)||void 0===o?void 0:o.name)&&void 0!==i?i:n);return e.call(this,a)||this}return gA(t,e),t}(Error),RI=(function(e){gA((function(t){var r='Failed to select check box due to missing onValue: \"'+t+'\"';return e.call(this,r)||this}),e)}(Error),function(e){function t(t){var r='A field already exists with the specified name: \"'+t+'\"';return e.call(this,r)||this}return gA(t,e),t}(Error)),_I=function(e){function t(t){var r='Field name contains invalid component: \"'+t+'\"';return e.call(this,r)||this}return gA(t,e),t}(Error),II=(function(e){gA((function(t){var r='A non-terminal field already exists with the specified name: \"'+t+'\"';return e.call(this,r)||this}),e)}(Error),function(e){function t(t){var r=\"Reading rich text fields is not supported: Attempted to read rich text field: \"+t;return e.call(this,r)||this}return gA(t,e),t}(Error)),NI=function(e){function t(t,r){var n=\"Failed to layout combed text as lineLength=\"+t+\" is greater than cellCount=\"+r;return e.call(this,n)||this}return gA(t,e),t}(Error),FI=function(e){function t(t,r,n){var o=\"Attempted to set text with length=\"+t+\" for TextField with maxLength=\"+r+\" and name=\"+n;return e.call(this,o)||this}return gA(t,e),t}(Error),DI=function(e){function t(t,r,n){var o=\"Attempted to set maxLength=\"+r+\", which is less than \"+t+\", the length of this field's current value (name=\"+n+\")\";return e.call(this,o)||this}return gA(t,e),t}(Error);!function(e){e[e.Left=0]=\"Left\",e[e.Center=1]=\"Center\",e[e.Right=2]=\"Right\"}(X_||(X_={}));var BI=function(e,t,r,n){void 0===n&&(n=!1);for(var o=4;o<500;){for(var i=0,a=0,s=e.length;a<s;a++){i+=1;for(var l=e[a].split(\" \"),c=r.width,u=0,d=l.length;u<d;u++){var f=u===d-1?l[u]:l[u]+\" \",h=t.widthOfTextAtSize(f,o);(c-=h)<=0&&(i+=1,c=r.width-h)}}if(!n&&i>e.length)return o-1;var p=t.heightAtSize(o);if((p+.2*p)*i>Math.abs(r.height))return o-1;o+=1}return o},LI=function(e){for(var t=e.length;t>0;t--)if(/\\s/.test(e[t]))return t},zI=function(e,t,r,n){for(var o,i=e.length;i>0;){var a=e.substring(0,i),s=r.encodeText(a),l=r.widthOfTextAtSize(a,n);if(l<t)return{line:a,encoded:s,width:l,remainder:e.substring(i)||void 0};i=null!==(o=LI(a))&&void 0!==o?o:0}return{line:e,encoded:r.encodeText(e),width:r.widthOfTextAtSize(e,n),remainder:void 0}},HI=function(e,t){var r=t.alignment,n=t.fontSize,o=t.font,i=t.bounds,a=DA(IA(e));void 0!==n&&0!==n||(n=BI(a,o,i,!0));for(var s=o.heightAtSize(n),l=s+.2*s,c=[],u=i.x,d=i.y,f=i.x+i.width,h=i.y+i.height,p=i.y+i.height,m=0,g=a.length;m<g;m++)for(var v=a[m];void 0!==v;){var b=zI(v,i.width,o,n),y=b.line,w=b.encoded,x=b.width,S=b.remainder,C=r===X_.Left?i.x:r===X_.Center?i.x+i.width/2-x/2:r===X_.Right?i.x+i.width-x:i.x;C<u&&(u=C),(p-=l)<d&&(d=p),C+x>f&&(f=C+x),p+s>h&&(h=p+s),c.push({text:y,encoded:w,width:x,height:s,x:C,y:p}),v=null==S?void 0:S.trim()}return{fontSize:n,lineHeight:l,lines:c,bounds:{x:u,y:d,width:f-u,height:h-d}}},UI=function(e,t){var r=t.alignment,n=t.fontSize,o=t.font,i=t.bounds,a=BA(IA(e));void 0!==n&&0!==n||(n=BI([a],o,i));var s=o.encodeText(a),l=o.widthOfTextAtSize(a,n),c=o.heightAtSize(n,{descender:!1}),u=r===X_.Left?i.x:r===X_.Center?i.x+i.width/2-l/2:r===X_.Right?i.x+i.width-l:i.x,d=i.y+(i.height/2-c/2);return{fontSize:n,line:{text:a,encoded:s,width:l,height:c,x:u,y:d},bounds:{x:u,y:d,width:l,height:c}}},VI=function(e){return\"normal\"in e?e:{normal:e}},WI=/\\/([^\\0\\t\\n\\f\\r\\ ]+)[\\0\\t\\n\\f\\r\\ ]+(\\d*\\.\\d+|\\d+)[\\0\\t\\n\\f\\r\\ ]+Tf/,GI=function(e){var t,r,n=null!==(t=e.getDefaultAppearance())&&void 0!==t?t:\"\",o=null!==(r=UA(n,WI).match)&&void 0!==r?r:[],i=Number(o[2]);return isFinite(i)?i:void 0},qI=/(\\d*\\.\\d+|\\d+)[\\0\\t\\n\\f\\r\\ ]*(\\d*\\.\\d+|\\d+)?[\\0\\t\\n\\f\\r\\ ]*(\\d*\\.\\d+|\\d+)?[\\0\\t\\n\\f\\r\\ ]*(\\d*\\.\\d+|\\d+)?[\\0\\t\\n\\f\\r\\ ]+(g|rg|k)/,KI=function(e){var t,r=null!==(t=e.getDefaultAppearance())&&void 0!==t?t:\"\",n=UA(r,qI).match,o=null!=n?n:[],i=o[1],a=o[2],s=o[3],l=o[4],c=o[5];return\"g\"===c&&i?Y_(Number(i)):\"rg\"===c&&i&&a&&s?$_(Number(i),Number(a),Number(s)):\"k\"===c&&i&&a&&s&&l?Z_(Number(i),Number(a),Number(s),Number(l)):void 0},XI=function(e,t,r,n){var o;void 0===n&&(n=0);var i=[tI(t).toString(),U_(null!==(o=null==r?void 0:r.name)&&void 0!==o?o:\"dummy__noop\",n).toString()].join(\"\\n\");e.setDefaultAppearance(i)},YI=function(e,t){var r,n,o,i=KI(t),a=KI(e.acroField),s=t.getRectangle(),l=t.getAppearanceCharacteristics(),c=t.getBorderStyle(),u=null!==(r=null==c?void 0:c.getWidth())&&void 0!==r?r:0,d=u_(null==l?void 0:l.getRotation()),f=d_(s,d),h=f.width,p=f.height,m=wI(vA(vA({},s),{rotation:d})),g=$_(0,0,0),v=null!==(n=nI(null==l?void 0:l.getBorderColor()))&&void 0!==n?n:g,b=nI(null==l?void 0:l.getBackgroundColor()),y=nI(null==l?void 0:l.getBackgroundColor(),.8),w=null!==(o=null!=i?i:a)&&void 0!==o?o:g;XI(i?t:e.acroField,w);var x={x:0+u/2,y:0+u/2,width:h-u,height:p-u,thickness:1.5,borderWidth:u,borderColor:v,markColor:w};return{normal:{on:wA(m,xI(vA(vA({},x),{color:b,filled:!0}))),off:wA(m,xI(vA(vA({},x),{color:b,filled:!1})))},down:{on:wA(m,xI(vA(vA({},x),{color:y,filled:!0}))),off:wA(m,xI(vA(vA({},x),{color:y,filled:!1})))}}},$I=function(e,t){var r,n,o,i=KI(t),a=KI(e.acroField),s=t.getRectangle(),l=t.getAppearanceCharacteristics(),c=t.getBorderStyle(),u=null!==(r=null==c?void 0:c.getWidth())&&void 0!==r?r:0,d=u_(null==l?void 0:l.getRotation()),f=d_(s,d),h=f.width,p=f.height,m=wI(vA(vA({},s),{rotation:d})),g=$_(0,0,0),v=null!==(n=nI(null==l?void 0:l.getBorderColor()))&&void 0!==n?n:g,b=nI(null==l?void 0:l.getBackgroundColor()),y=nI(null==l?void 0:l.getBackgroundColor(),.8),w=null!==(o=null!=i?i:a)&&void 0!==o?o:g;XI(i?t:e.acroField,w);var x={x:h/2,y:p/2,width:h-u,height:p-u,borderWidth:u,borderColor:v,dotColor:w};return{normal:{on:wA(m,SI(vA(vA({},x),{color:b,filled:!0}))),off:wA(m,SI(vA(vA({},x),{color:b,filled:!1})))},down:{on:wA(m,SI(vA(vA({},x),{color:y,filled:!0}))),off:wA(m,SI(vA(vA({},x),{color:y,filled:!1})))}}},ZI=function(e,t,r){var n,o,i,a,s,l=KI(t),c=KI(e.acroField),u=GI(t),d=GI(e.acroField),f=t.getRectangle(),h=t.getAppearanceCharacteristics(),p=t.getBorderStyle(),m=null==h?void 0:h.getCaptions(),g=null!==(n=null==m?void 0:m.normal)&&void 0!==n?n:\"\",v=null!==(i=null!==(o=null==m?void 0:m.down)&&void 0!==o?o:g)&&void 0!==i?i:\"\",b=null!==(a=null==p?void 0:p.getWidth())&&void 0!==a?a:0,y=u_(null==h?void 0:h.getRotation()),w=d_(f,y),x=w.width,S=w.height,C=wI(vA(vA({},f),{rotation:y})),k=$_(0,0,0),E=nI(null==h?void 0:h.getBorderColor()),O=nI(null==h?void 0:h.getBackgroundColor()),A=nI(null==h?void 0:h.getBackgroundColor(),.8),T={x:b,y:b,width:x-2*b,height:S-2*b},j=UI(g,{alignment:X_.Center,fontSize:null!=u?u:d,font:r,bounds:T}),P=UI(v,{alignment:X_.Center,fontSize:null!=u?u:d,font:r,bounds:T}),M=Math.min(j.fontSize,P.fontSize),R=null!==(s=null!=l?l:c)&&void 0!==s?s:k;XI(l||void 0!==u?t:e.acroField,R,r,M);var _={x:0+b/2,y:0+b/2,width:x-b,height:S-b,borderWidth:b,borderColor:E,textColor:R,font:r.name,fontSize:M};return{normal:wA(C,CI(vA(vA({},_),{color:O,textLines:[j.line]}))),down:wA(C,CI(vA(vA({},_),{color:A,textLines:[P.line]})))}},QI=function(e,t,r){var n,o,i,a,s,l,c=KI(t),u=KI(e.acroField),d=GI(t),f=GI(e.acroField),h=t.getRectangle(),p=t.getAppearanceCharacteristics(),m=t.getBorderStyle(),g=null!==(n=e.getText())&&void 0!==n?n:\"\",v=null!==(o=null==m?void 0:m.getWidth())&&void 0!==o?o:0,b=u_(null==p?void 0:p.getRotation()),y=d_(h,b),w=y.width,x=y.height,S=wI(vA(vA({},h),{rotation:b})),C=$_(0,0,0),k=nI(null==p?void 0:p.getBorderColor()),E=nI(null==p?void 0:p.getBackgroundColor()),O=e.isCombed()?0:1,A={x:v+O,y:v+O,width:w-2*(v+O),height:x-2*(v+O)};if(e.isMultiline())s=(T=HI(g,{alignment:e.getAlignment(),fontSize:null!=d?d:f,font:r,bounds:A})).lines,l=T.fontSize;else if(e.isCombed()){var T=function(e,t){var r=t.fontSize,n=t.font,o=t.bounds,i=t.cellCount,a=BA(IA(e));if(a.length>i)throw new NI(a.length,i);void 0!==r&&0!==r||(r=function(e,t,r,n){for(var o=r.width/n,i=r.height,a=4,s=function(e){for(var t=[],r=0,n=e.length;r<n;){var o=LA(e,r),i=o[0],a=o[1];t.push(i),r+=a}return t}(e);a<500;){for(var l=0,c=s.length;l<c;l++){var u=s[l];if(t.widthOfTextAtSize(u,a)>.75*o)return a-1}if(t.heightAtSize(a,{descender:!1})>i)return a-1;a+=1}return a}(a,n,o,i));for(var s=o.width/i,l=n.heightAtSize(r,{descender:!1}),c=o.y+(o.height/2-l/2),u=[],d=o.x,f=o.y,h=o.x+o.width,p=o.y+o.height,m=0,g=0;m<i;){var v=LA(a,g),b=v[0],y=v[1],w=n.encodeText(b),x=n.widthOfTextAtSize(b,r),S=o.x+(s*m+s/2)-x/2;S<d&&(d=S),c<f&&(f=c),S+x>h&&(h=S+x),c+l>p&&(p=c+l),u.push({text:a,encoded:w,width:x,height:l,x:S,y:c}),m+=1,g+=y}return{fontSize:r,cells:u,bounds:{x:d,y:f,width:h-d,height:p-f}}}(g,{fontSize:null!=d?d:f,font:r,bounds:A,cellCount:null!==(i=e.getMaxLength())&&void 0!==i?i:0});s=T.cells,l=T.fontSize}else s=[(T=UI(g,{alignment:e.getAlignment(),fontSize:null!=d?d:f,font:r,bounds:A})).line],l=T.fontSize;var j=null!==(a=null!=c?c:u)&&void 0!==a?a:C;XI(c||void 0!==d?t:e.acroField,j,r,l);var P={x:0+v/2,y:0+v/2,width:w-v,height:x-v,borderWidth:null!=v?v:0,borderColor:k,textColor:j,font:r.name,fontSize:l,color:E,textLines:s,padding:O};return wA(S,EI(P))},JI=function(e,t,r){var n,o,i,a=KI(t),s=KI(e.acroField),l=GI(t),c=GI(e.acroField),u=t.getRectangle(),d=t.getAppearanceCharacteristics(),f=t.getBorderStyle(),h=null!==(n=e.getSelected()[0])&&void 0!==n?n:\"\",p=null!==(o=null==f?void 0:f.getWidth())&&void 0!==o?o:0,m=u_(null==d?void 0:d.getRotation()),g=d_(u,m),v=g.width,b=g.height,y=wI(vA(vA({},u),{rotation:m})),w=$_(0,0,0),x=nI(null==d?void 0:d.getBorderColor()),S=nI(null==d?void 0:d.getBackgroundColor()),C={x:p+1,y:p+1,width:v-2*(p+1),height:b-2*(p+1)},k=UI(h,{alignment:X_.Left,fontSize:null!=l?l:c,font:r,bounds:C}),E=k.line,O=k.fontSize,A=null!==(i=null!=a?a:s)&&void 0!==i?i:w;XI(a||void 0!==l?t:e.acroField,A,r,O);var T={x:0+p/2,y:0+p/2,width:v-p,height:b-p,borderWidth:null!=p?p:0,borderColor:x,textColor:A,font:r.name,fontSize:O,color:S,textLines:[E],padding:1};return wA(y,EI(T))},eN=function(e,t,r){var n,o,i=KI(t),a=KI(e.acroField),s=GI(t),l=GI(e.acroField),c=t.getRectangle(),u=t.getAppearanceCharacteristics(),d=t.getBorderStyle(),f=null!==(n=null==d?void 0:d.getWidth())&&void 0!==n?n:0,h=u_(null==u?void 0:u.getRotation()),p=d_(c,h),m=p.width,g=p.height,v=wI(vA(vA({},c),{rotation:h})),b=$_(0,0,0),y=nI(null==u?void 0:u.getBorderColor()),w=nI(null==u?void 0:u.getBackgroundColor()),x=e.getOptions(),S=e.getSelected();e.isSorted()&&x.sort();for(var C=\"\",k=0,E=x.length;k<E;k++)C+=x[k],k<E-1&&(C+=\"\\n\");var O={x:f+1,y:f+1,width:m-2*(f+1),height:g-2*(f+1)},A=HI(C,{alignment:X_.Left,fontSize:null!=s?s:l,font:r,bounds:O}),T=A.lines,j=A.fontSize,P=A.lineHeight,M=[];for(k=0,E=T.length;k<E;k++){var R=T[k];S.includes(R.text)&&M.push(k)}var _=$_(.6,193/255,218/255),I=null!==(o=null!=i?i:a)&&void 0!==o?o:b;return XI(i||void 0!==s?t:e.acroField,I,r,j),wA(v,function(e){for(var t=r_(e.x),r=r_(e.y),n=r_(e.width),o=r_(e.height),i=r_(e.lineHeight),a=r_(e.borderWidth),s=r_(e.padding),l=t+a/2+s,c=r+a/2+s,u=n-2*(a/2+s),d=o-2*(a/2+s),f=[__(l,c),I_(l,c+d),I_(l+u,c+d),I_(l+u,c),R_(),f_(),B_()],h=vI({x:t,y:r,width:n,height:o,borderWidth:e.borderWidth,color:e.color,borderColor:e.borderColor,rotate:o_(0),xSkew:o_(0),ySkew:o_(0)}),p=[],m=0,g=e.selectedLines.length;m<g;m++){var v=e.textLines[e.selectedLines[m]];p.push.apply(p,vI({x:v.x-s,y:v.y-(i-v.height)/2,width:n-a,height:v.height+(i-v.height)/2,borderWidth:0,color:e.selectedColor,borderColor:void 0,rotate:o_(0),xSkew:o_(0),ySkew:o_(0)}))}var b=kI(e.textLines,{color:e.textColor,font:e.font,size:e.fontSize,rotate:o_(0),xSkew:o_(0),ySkew:o_(0)}),y=wA([q_(\"Tx\"),A_()],b,[T_(),K_()]);return wA([A_()],h,p,f,y,[T_()])}({x:0+f/2,y:0+f/2,width:m-f,height:g-f,borderWidth:null!=f?f:0,borderColor:y,textColor:I,font:r.name,fontSize:j,color:w,textLines:T,lineHeight:P,selectedColor:_,selectedLines:M,padding:1}))};const tN=function(){function e(e,t,r){this.alreadyEmbedded=!1,_T(e,\"ref\",[[Yj,\"PDFRef\"]]),_T(t,\"doc\",[[_N,\"PDFDocument\"]]),_T(r,\"embedder\",[[SM,\"PDFPageEmbedder\"]]),this.ref=e,this.doc=t,this.width=r.width,this.height=r.height,this.embedder=r}return e.prototype.scale=function(e){return _T(e,\"factor\",[\"number\"]),{width:this.width*e,height:this.height*e}},e.prototype.size=function(){return this.scale(1)},e.prototype.embed=function(){return bA(this,void 0,void 0,(function(){return yA(this,(function(e){switch(e.label){case 0:return this.alreadyEmbedded?[3,2]:[4,this.embedder.embedIntoContext(this.doc.context,this.ref)];case 1:e.sent(),this.alreadyEmbedded=!0,e.label=2;case 2:return[2]}}))}))},e.of=function(t,r,n){return new e(t,r,n)},e}();var rN=function(){function e(e,t,r){this.modified=!0,_T(e,\"ref\",[[Yj,\"PDFRef\"]]),_T(t,\"doc\",[[_N,\"PDFDocument\"]]),_T(r,\"embedder\",[[FP,\"CustomFontEmbedder\"],[jP,\"StandardFontEmbedder\"]]),this.ref=e,this.doc=t,this.name=r.fontName,this.embedder=r}return e.prototype.encodeText=function(e){return _T(e,\"text\",[\"string\"]),this.modified=!0,this.embedder.encodeText(e)},e.prototype.widthOfTextAtSize=function(e,t){return _T(e,\"text\",[\"string\"]),_T(t,\"size\",[\"number\"]),this.embedder.widthOfTextAtSize(e,t)},e.prototype.heightAtSize=function(e,t){var r;return _T(e,\"size\",[\"number\"]),IT(null==t?void 0:t.descender,\"options.descender\",[\"boolean\"]),this.embedder.heightOfFontAtSize(e,{descender:null===(r=null==t?void 0:t.descender)||void 0===r||r})},e.prototype.sizeAtHeight=function(e){return _T(e,\"height\",[\"number\"]),this.embedder.sizeOfFontAtHeight(e)},e.prototype.getCharacterSet=function(){return this.embedder instanceof jP?this.embedder.encoding.supportedCodePoints:this.embedder.font.characterSet},e.prototype.embed=function(){return bA(this,void 0,void 0,(function(){return yA(this,(function(e){switch(e.label){case 0:return this.modified?[4,this.embedder.embedIntoContext(this.doc.context,this.ref)]:[3,2];case 1:e.sent(),this.modified=!1,e.label=2;case 2:return[2]}}))}))},e.of=function(t,r,n){return new e(t,r,n)},e}();const nN=rN;var oN=function(){function e(e,t,r){_T(e,\"ref\",[[Yj,\"PDFRef\"]]),_T(t,\"doc\",[[_N,\"PDFDocument\"]]),_T(r,\"embedder\",[[GP,\"JpegEmbedder\"],[JP,\"PngEmbedder\"]]),this.ref=e,this.doc=t,this.width=r.width,this.height=r.height,this.embedder=r}return e.prototype.scale=function(e){return _T(e,\"factor\",[\"number\"]),{width:this.width*e,height:this.height*e}},e.prototype.scaleToFit=function(e,t){_T(e,\"width\",[\"number\"]),_T(t,\"height\",[\"number\"]);var r=e/this.width,n=t/this.height,o=Math.min(r,n);return this.scale(o)},e.prototype.size=function(){return this.scale(1)},e.prototype.embed=function(){return bA(this,void 0,void 0,(function(){var e,t,r;return yA(this,(function(n){switch(n.label){case 0:return this.embedder?(this.embedTask||(t=(e=this).doc,r=e.ref,this.embedTask=this.embedder.embedIntoContext(t.context,r)),[4,this.embedTask]):[2];case 1:return n.sent(),this.embedder=void 0,[2]}}))}))},e.of=function(t,r,n){return new e(t,r,n)},e}();const iN=oN;var aN;!function(e){e[e.Left=0]=\"Left\",e[e.Center=1]=\"Center\",e[e.Right=2]=\"Right\"}(aN||(aN={}));var sN=function(e){IT(null==e?void 0:e.x,\"options.x\",[\"number\"]),IT(null==e?void 0:e.y,\"options.y\",[\"number\"]),IT(null==e?void 0:e.width,\"options.width\",[\"number\"]),IT(null==e?void 0:e.height,\"options.height\",[\"number\"]),IT(null==e?void 0:e.textColor,\"options.textColor\",[[Object,\"Color\"]]),IT(null==e?void 0:e.backgroundColor,\"options.backgroundColor\",[[Object,\"Color\"]]),IT(null==e?void 0:e.borderColor,\"options.borderColor\",[[Object,\"Color\"]]),IT(null==e?void 0:e.borderWidth,\"options.borderWidth\",[\"number\"]),IT(null==e?void 0:e.rotate,\"options.rotate\",[[Object,\"Rotation\"]])},lN=function(){function e(e,t,r){_T(e,\"acroField\",[[UM,\"PDFAcroTerminal\"]]),_T(t,\"ref\",[[Yj,\"PDFRef\"]]),_T(r,\"doc\",[[_N,\"PDFDocument\"]]),this.acroField=e,this.ref=t,this.doc=r}return e.prototype.getName=function(){var e;return null!==(e=this.acroField.getFullyQualifiedName())&&void 0!==e?e:\"\"},e.prototype.isReadOnly=function(){return this.acroField.hasFlag(KM.ReadOnly)},e.prototype.enableReadOnly=function(){this.acroField.setFlagTo(KM.ReadOnly,!0)},e.prototype.disableReadOnly=function(){this.acroField.setFlagTo(KM.ReadOnly,!1)},e.prototype.isRequired=function(){return this.acroField.hasFlag(KM.Required)},e.prototype.enableRequired=function(){this.acroField.setFlagTo(KM.Required,!0)},e.prototype.disableRequired=function(){this.acroField.setFlagTo(KM.Required,!1)},e.prototype.isExported=function(){return!this.acroField.hasFlag(KM.NoExport)},e.prototype.enableExporting=function(){this.acroField.setFlagTo(KM.NoExport,!1)},e.prototype.disableExporting=function(){this.acroField.setFlagTo(KM.NoExport,!0)},e.prototype.needsAppearancesUpdate=function(){throw new KT(this.constructor.name,\"needsAppearancesUpdate\")},e.prototype.defaultUpdateAppearances=function(e){throw new KT(this.constructor.name,\"defaultUpdateAppearances\")},e.prototype.markAsDirty=function(){this.doc.getForm().markFieldAsDirty(this.ref)},e.prototype.markAsClean=function(){this.doc.getForm().markFieldAsClean(this.ref)},e.prototype.isDirty=function(){return this.doc.getForm().fieldIsDirty(this.ref)},e.prototype.createWidget=function(e){var t,r=e.textColor,n=e.backgroundColor,o=e.borderColor,i=e.borderWidth,a=c_(e.rotate),s=e.caption,l=e.x,c=e.y,u=e.width+i,d=e.height+i,f=Boolean(e.hidden),h=e.page;BT(a,\"degreesAngle\",90);var p=zM.create(this.doc.context,this.ref),m=function(e,t,r){void 0===t&&(t=0),void 0===r&&(r=0);var n=e.x,o=e.y,i=e.width,a=e.height,s=u_(r),l=t/2;return 0===s?{x:n-l,y:o-l,width:i,height:a}:90===s?{x:n-a+l,y:o-l,width:a,height:i}:180===s?{x:n-i+l,y:o-a+l,width:i,height:a}:270===s?{x:n-l,y:o-i+l,width:a,height:i}:{x:n-l,y:o-l,width:i,height:a}}({x:l,y:c,width:u,height:d},i,a);p.setRectangle(m),h&&p.setP(h);var g=p.getOrCreateAppearanceCharacteristics();n&&g.setBackgroundColor(oI(n)),g.setRotation(a),s&&g.setCaptions({normal:s}),o&&g.setBorderColor(oI(o));var v=p.getOrCreateBorderStyle();if(void 0!==i&&v.setWidth(i),p.setFlagTo(ZR.Print,!0),p.setFlagTo(ZR.Hidden,f),p.setFlagTo(ZR.Invisible,!1),r){var b=(null!==(t=this.acroField.getDefaultAppearance())&&void 0!==t?t:\"\")+\"\\n\"+tI(r).toString();this.acroField.setDefaultAppearance(b)}return p},e.prototype.updateWidgetAppearanceWithFont=function(e,t,r){var n=r.normal,o=r.rollover,i=r.down;this.updateWidgetAppearances(e,{normal:this.createAppearanceStream(e,n,t),rollover:o&&this.createAppearanceStream(e,o,t),down:i&&this.createAppearanceStream(e,i,t)})},e.prototype.updateOnOffWidgetAppearance=function(e,t,r){var n=r.normal,o=r.rollover,i=r.down;this.updateWidgetAppearances(e,{normal:this.createAppearanceDict(e,n,t),rollover:o&&this.createAppearanceDict(e,o,t),down:i&&this.createAppearanceDict(e,i,t)})},e.prototype.updateWidgetAppearances=function(e,t){var r=t.normal,n=t.rollover,o=t.down;e.setNormalAppearance(r),n?e.setRolloverAppearance(n):e.removeRolloverAppearance(),o?e.setDownAppearance(o):e.removeDownAppearance()},e.prototype.createAppearanceStream=function(e,t,r){var n,o=this.acroField.dict.context,i=e.getRectangle(),a=i.width,s=i.height,l=r&&{Font:(n={},n[r.name]=r.ref,n)},c=o.formXObject(t,{Resources:l,BBox:o.obj([0,0,a,s]),Matrix:o.obj([1,0,0,1,0,0])});return o.register(c)},e.prototype.createImageAppearanceStream=function(e,t,r){var n,o,i=this.acroField.dict.context,a=e.getRectangle(),s=e.getAppearanceCharacteristics(),l=e.getBorderStyle(),c=null!==(o=null==l?void 0:l.getWidth())&&void 0!==o?o:0,u=u_(null==s?void 0:s.getRotation()),d=wI(vA(vA({},a),{rotation:u})),f=d_(a,u),h=t.scaleToFit(f.width-2*c,f.height-2*c),p={x:c,y:c,width:h.width,height:h.height,rotate:o_(0),xSkew:o_(0),ySkew:o_(0)};r===aN.Center?(p.x+=(f.width-2*c)/2-h.width/2,p.y+=(f.height-2*c)/2-h.height/2):r===aN.Right&&(p.x=f.width-c-h.width,p.y=f.height-c-h.height);var m=this.doc.context.addRandomSuffix(\"Image\",10),g=wA(d,gI(m,p)),v={XObject:(n={},n[m]=t.ref,n)},b=i.formXObject(g,{Resources:v,BBox:i.obj([0,0,a.width,a.height]),Matrix:i.obj([1,0,0,1,0,0])});return i.register(b)},e.prototype.createAppearanceDict=function(e,t,r){var n=this.acroField.dict.context,o=this.createAppearanceStream(e,t.on),i=this.createAppearanceStream(e,t.off),a=n.obj({});return a.set(r,o),a.set(Dj.of(\"Off\"),i),a},e}();const cN=lN;var uN=function(e){function t(t,r,n){var o=e.call(this,t,r,n)||this;return _T(t,\"acroCheckBox\",[[qM,\"PDFAcroCheckBox\"]]),o.acroField=t,o}return gA(t,e),t.prototype.check=function(){var e,t=null!==(e=this.acroField.getOnValue())&&void 0!==e?e:Dj.of(\"Yes\");this.markAsDirty(),this.acroField.setValue(t)},t.prototype.uncheck=function(){this.markAsDirty(),this.acroField.setValue(Dj.of(\"Off\"))},t.prototype.isChecked=function(){var e=this.acroField.getOnValue();return!!e&&e===this.acroField.getValue()},t.prototype.addToPage=function(e,t){var r,n,o,i,a,s;_T(e,\"page\",[[DN,\"PDFPage\"]]),sN(t),t||(t={}),\"textColor\"in t||(t.textColor=$_(0,0,0)),\"backgroundColor\"in t||(t.backgroundColor=$_(1,1,1)),\"borderColor\"in t||(t.borderColor=$_(0,0,0)),\"borderWidth\"in t||(t.borderWidth=1);var l=this.createWidget({x:null!==(r=t.x)&&void 0!==r?r:0,y:null!==(n=t.y)&&void 0!==n?n:0,width:null!==(o=t.width)&&void 0!==o?o:50,height:null!==(i=t.height)&&void 0!==i?i:50,textColor:t.textColor,backgroundColor:t.backgroundColor,borderColor:t.borderColor,borderWidth:null!==(a=t.borderWidth)&&void 0!==a?a:0,rotate:null!==(s=t.rotate)&&void 0!==s?s:o_(0),hidden:t.hidden,page:e.ref}),c=this.doc.context.register(l.dict);this.acroField.addWidget(c),l.setAppearanceState(Dj.of(\"Off\")),this.updateWidgetAppearance(l,Dj.of(\"Yes\")),e.node.addAnnot(c)},t.prototype.needsAppearancesUpdate=function(){for(var e,t=this.acroField.getWidgets(),r=0,n=t.length;r<n;r++){var o=t[r],i=o.getAppearanceState(),a=null===(e=o.getAppearances())||void 0===e?void 0:e.normal;if(!(a instanceof Hj))return!0;if(i&&!a.has(i))return!0}return!1},t.prototype.defaultUpdateAppearances=function(){this.updateAppearances()},t.prototype.updateAppearances=function(e){var t;IT(e,\"provider\",[Function]);for(var r=this.acroField.getWidgets(),n=0,o=r.length;n<o;n++){var i=r[n],a=null!==(t=i.getOnValue())&&void 0!==t?t:Dj.of(\"Yes\");a&&this.updateWidgetAppearance(i,a,e)}this.markAsClean()},t.prototype.updateWidgetAppearance=function(e,t,r){var n=VI((null!=r?r:YI)(this,e));this.updateOnOffWidgetAppearance(e,t,n)},t.of=function(e,r,n){return new t(e,r,n)},t}(cN);const dN=uN;var fN=function(e){function t(t,r,n){var o=e.call(this,t,r,n)||this;return _T(t,\"acroComboBox\",[[tR,\"PDFAcroComboBox\"]]),o.acroField=t,o}return gA(t,e),t.prototype.getOptions=function(){for(var e=this.acroField.getOptions(),t=new Array(e.length),r=0,n=t.length;r<n;r++){var o=e[r],i=o.display,a=o.value;t[r]=(null!=i?i:a).decodeText()}return t},t.prototype.getSelected=function(){for(var e=this.acroField.getValues(),t=new Array(e.length),r=0,n=e.length;r<n;r++)t[r]=e[r].decodeText();return t},t.prototype.setOptions=function(e){_T(e,\"options\",[Array]);for(var t=new Array(e.length),r=0,n=e.length;r<n;r++)t[r]={value:AP.fromText(e[r])};this.acroField.setOptions(t)},t.prototype.addOptions=function(e){_T(e,\"options\",[\"string\",Array]);for(var t=Array.isArray(e)?e:[e],r=this.acroField.getOptions(),n=new Array(t.length),o=0,i=t.length;o<i;o++)n[o]={value:AP.fromText(t[o])};this.acroField.setOptions(r.concat(n))},t.prototype.select=function(e,t){void 0===t&&(t=!1),_T(e,\"options\",[\"string\",Array]),_T(t,\"merge\",[\"boolean\"]);var r=Array.isArray(e)?e:[e],n=this.getOptions();r.find((function(e){return!n.includes(e)}))&&this.enableEditing(),this.markAsDirty(),(r.length>1||1===r.length&&t)&&this.enableMultiselect();for(var o=new Array(r.length),i=0,a=r.length;i<a;i++)o[i]=AP.fromText(r[i]);if(t){var s=this.acroField.getValues();this.acroField.setValues(s.concat(o))}else this.acroField.setValues(o)},t.prototype.clear=function(){this.markAsDirty(),this.acroField.setValues([])},t.prototype.setFontSize=function(e){LT(e,\"fontSize\"),this.acroField.setFontSize(e),this.markAsDirty()},t.prototype.isEditable=function(){return this.acroField.hasFlag($M.Edit)},t.prototype.enableEditing=function(){this.acroField.setFlagTo($M.Edit,!0)},t.prototype.disableEditing=function(){this.acroField.setFlagTo($M.Edit,!1)},t.prototype.isSorted=function(){return this.acroField.hasFlag($M.Sort)},t.prototype.enableSorting=function(){this.acroField.setFlagTo($M.Sort,!0)},t.prototype.disableSorting=function(){this.acroField.setFlagTo($M.Sort,!1)},t.prototype.isMultiselect=function(){return this.acroField.hasFlag($M.MultiSelect)},t.prototype.enableMultiselect=function(){this.acroField.setFlagTo($M.MultiSelect,!0)},t.prototype.disableMultiselect=function(){this.acroField.setFlagTo($M.MultiSelect,!1)},t.prototype.isSpellChecked=function(){return!this.acroField.hasFlag($M.DoNotSpellCheck)},t.prototype.enableSpellChecking=function(){this.acroField.setFlagTo($M.DoNotSpellCheck,!1)},t.prototype.disableSpellChecking=function(){this.acroField.setFlagTo($M.DoNotSpellCheck,!0)},t.prototype.isSelectOnClick=function(){return this.acroField.hasFlag($M.CommitOnSelChange)},t.prototype.enableSelectOnClick=function(){this.acroField.setFlagTo($M.CommitOnSelChange,!0)},t.prototype.disableSelectOnClick=function(){this.acroField.setFlagTo($M.CommitOnSelChange,!1)},t.prototype.addToPage=function(e,t){var r,n,o,i,a,s,l;_T(e,\"page\",[[DN,\"PDFPage\"]]),sN(t),t||(t={}),\"textColor\"in t||(t.textColor=$_(0,0,0)),\"backgroundColor\"in t||(t.backgroundColor=$_(1,1,1)),\"borderColor\"in t||(t.borderColor=$_(0,0,0)),\"borderWidth\"in t||(t.borderWidth=1);var c=this.createWidget({x:null!==(r=t.x)&&void 0!==r?r:0,y:null!==(n=t.y)&&void 0!==n?n:0,width:null!==(o=t.width)&&void 0!==o?o:200,height:null!==(i=t.height)&&void 0!==i?i:50,textColor:t.textColor,backgroundColor:t.backgroundColor,borderColor:t.borderColor,borderWidth:null!==(a=t.borderWidth)&&void 0!==a?a:0,rotate:null!==(s=t.rotate)&&void 0!==s?s:o_(0),hidden:t.hidden,page:e.ref}),u=this.doc.context.register(c.dict);this.acroField.addWidget(u);var d=null!==(l=t.font)&&void 0!==l?l:this.doc.getForm().getDefaultFont();this.updateWidgetAppearance(c,d),e.node.addAnnot(u)},t.prototype.needsAppearancesUpdate=function(){var e;if(this.isDirty())return!0;for(var t=this.acroField.getWidgets(),r=0,n=t.length;r<n;r++)if(!((null===(e=t[r].getAppearances())||void 0===e?void 0:e.normal)instanceof Vj))return!0;return!1},t.prototype.defaultUpdateAppearances=function(e){_T(e,\"font\",[[nN,\"PDFFont\"]]),this.updateAppearances(e)},t.prototype.updateAppearances=function(e,t){_T(e,\"font\",[[nN,\"PDFFont\"]]),IT(t,\"provider\",[Function]);for(var r=this.acroField.getWidgets(),n=0,o=r.length;n<o;n++){var i=r[n];this.updateWidgetAppearance(i,e,t)}this.markAsClean()},t.prototype.updateWidgetAppearance=function(e,t,r){var n=VI((null!=r?r:JI)(this,e,t));this.updateWidgetAppearanceWithFont(e,t,n)},t.of=function(e,r,n){return new t(e,r,n)},t}(cN);const hN=fN;var pN=function(e){function t(t,r,n){var o=e.call(this,t,r,n)||this;return _T(t,\"acroListBox\",[[fR,\"PDFAcroListBox\"]]),o.acroField=t,o}return gA(t,e),t.prototype.getOptions=function(){for(var e=this.acroField.getOptions(),t=new Array(e.length),r=0,n=t.length;r<n;r++){var o=e[r],i=o.display,a=o.value;t[r]=(null!=i?i:a).decodeText()}return t},t.prototype.getSelected=function(){for(var e=this.acroField.getValues(),t=new Array(e.length),r=0,n=e.length;r<n;r++)t[r]=e[r].decodeText();return t},t.prototype.setOptions=function(e){_T(e,\"options\",[Array]),this.markAsDirty();for(var t=new Array(e.length),r=0,n=e.length;r<n;r++)t[r]={value:AP.fromText(e[r])};this.acroField.setOptions(t)},t.prototype.addOptions=function(e){_T(e,\"options\",[\"string\",Array]),this.markAsDirty();for(var t=Array.isArray(e)?e:[e],r=this.acroField.getOptions(),n=new Array(t.length),o=0,i=t.length;o<i;o++)n[o]={value:AP.fromText(t[o])};this.acroField.setOptions(r.concat(n))},t.prototype.select=function(e,t){void 0===t&&(t=!1),_T(e,\"options\",[\"string\",Array]),_T(t,\"merge\",[\"boolean\"]);var r=Array.isArray(e)?e:[e];!function(e,t,r){Array.isArray(r)||(r=kT(r));for(var n=0,o=e.length;n<o;n++)PT(e[n],\"option\",r)}(r,0,this.getOptions()),this.markAsDirty(),(r.length>1||1===r.length&&t)&&this.enableMultiselect();for(var n=new Array(r.length),o=0,i=r.length;o<i;o++)n[o]=AP.fromText(r[o]);if(t){var a=this.acroField.getValues();this.acroField.setValues(a.concat(n))}else this.acroField.setValues(n)},t.prototype.clear=function(){this.markAsDirty(),this.acroField.setValues([])},t.prototype.setFontSize=function(e){LT(e,\"fontSize\"),this.acroField.setFontSize(e),this.markAsDirty()},t.prototype.isSorted=function(){return this.acroField.hasFlag($M.Sort)},t.prototype.enableSorting=function(){this.acroField.setFlagTo($M.Sort,!0)},t.prototype.disableSorting=function(){this.acroField.setFlagTo($M.Sort,!1)},t.prototype.isMultiselect=function(){return this.acroField.hasFlag($M.MultiSelect)},t.prototype.enableMultiselect=function(){this.acroField.setFlagTo($M.MultiSelect,!0)},t.prototype.disableMultiselect=function(){this.acroField.setFlagTo($M.MultiSelect,!1)},t.prototype.isSelectOnClick=function(){return this.acroField.hasFlag($M.CommitOnSelChange)},t.prototype.enableSelectOnClick=function(){this.acroField.setFlagTo($M.CommitOnSelChange,!0)},t.prototype.disableSelectOnClick=function(){this.acroField.setFlagTo($M.CommitOnSelChange,!1)},t.prototype.addToPage=function(e,t){var r,n,o,i,a,s,l;_T(e,\"page\",[[DN,\"PDFPage\"]]),sN(t),t||(t={}),\"textColor\"in t||(t.textColor=$_(0,0,0)),\"backgroundColor\"in t||(t.backgroundColor=$_(1,1,1)),\"borderColor\"in t||(t.borderColor=$_(0,0,0)),\"borderWidth\"in t||(t.borderWidth=1);var c=this.createWidget({x:null!==(r=t.x)&&void 0!==r?r:0,y:null!==(n=t.y)&&void 0!==n?n:0,width:null!==(o=t.width)&&void 0!==o?o:200,height:null!==(i=t.height)&&void 0!==i?i:100,textColor:t.textColor,backgroundColor:t.backgroundColor,borderColor:t.borderColor,borderWidth:null!==(a=t.borderWidth)&&void 0!==a?a:0,rotate:null!==(s=t.rotate)&&void 0!==s?s:o_(0),hidden:t.hidden,page:e.ref}),u=this.doc.context.register(c.dict);this.acroField.addWidget(u);var d=null!==(l=t.font)&&void 0!==l?l:this.doc.getForm().getDefaultFont();this.updateWidgetAppearance(c,d),e.node.addAnnot(u)},t.prototype.needsAppearancesUpdate=function(){var e;if(this.isDirty())return!0;for(var t=this.acroField.getWidgets(),r=0,n=t.length;r<n;r++)if(!((null===(e=t[r].getAppearances())||void 0===e?void 0:e.normal)instanceof Vj))return!0;return!1},t.prototype.defaultUpdateAppearances=function(e){_T(e,\"font\",[[nN,\"PDFFont\"]]),this.updateAppearances(e)},t.prototype.updateAppearances=function(e,t){_T(e,\"font\",[[nN,\"PDFFont\"]]),IT(t,\"provider\",[Function]);for(var r=this.acroField.getWidgets(),n=0,o=r.length;n<o;n++){var i=r[n];this.updateWidgetAppearance(i,e,t)}this.markAsClean()},t.prototype.updateWidgetAppearance=function(e,t,r){var n=VI((null!=r?r:eN)(this,e,t));this.updateWidgetAppearanceWithFont(e,t,n)},t.of=function(e,r,n){return new t(e,r,n)},t}(cN);const mN=pN;var gN=function(e){function t(t,r,n){var o=e.call(this,t,r,n)||this;return _T(t,\"acroRadioButton\",[[uR,\"PDFAcroRadioButton\"]]),o.acroField=t,o}return gA(t,e),t.prototype.getOptions=function(){var e=this.acroField.getExportValues();if(e){for(var t=new Array(e.length),r=0,n=e.length;r<n;r++)t[r]=e[r].decodeText();return t}var o=this.acroField.getOnValues(),i=new Array(o.length);for(r=0,n=i.length;r<n;r++)i[r]=o[r].decodeText();return i},t.prototype.getSelected=function(){var e=this.acroField.getValue();if(e!==Dj.of(\"Off\")){var t=this.acroField.getExportValues();if(t)for(var r=this.acroField.getOnValues(),n=0,o=r.length;n<o;n++)if(r[n]===e)return t[n].decodeText();return e.decodeText()}},t.prototype.select=function(e){_T(e,\"option\",[\"string\"]);var t=this.getOptions();PT(e,\"option\",t),this.markAsDirty();var r=this.acroField.getOnValues(),n=this.acroField.getExportValues();if(n)for(var o=0,i=n.length;o<i;o++)n[o].decodeText()===e&&this.acroField.setValue(r[o]);else for(o=0,i=r.length;o<i;o++){var a=r[o];a.decodeText()===e&&this.acroField.setValue(a)}},t.prototype.clear=function(){this.markAsDirty(),this.acroField.setValue(Dj.of(\"Off\"))},t.prototype.isOffToggleable=function(){return!this.acroField.hasFlag(XM.NoToggleToOff)},t.prototype.enableOffToggling=function(){this.acroField.setFlagTo(XM.NoToggleToOff,!1)},t.prototype.disableOffToggling=function(){this.acroField.setFlagTo(XM.NoToggleToOff,!0)},t.prototype.isMutuallyExclusive=function(){return!this.acroField.hasFlag(XM.RadiosInUnison)},t.prototype.enableMutualExclusion=function(){this.acroField.setFlagTo(XM.RadiosInUnison,!1)},t.prototype.disableMutualExclusion=function(){this.acroField.setFlagTo(XM.RadiosInUnison,!0)},t.prototype.addOptionToPage=function(e,t,r){var n,o,i,a,s,l,c,u,d;_T(e,\"option\",[\"string\"]),_T(t,\"page\",[[DN,\"PDFPage\"]]),sN(r);var f=this.createWidget({x:null!==(n=null==r?void 0:r.x)&&void 0!==n?n:0,y:null!==(o=null==r?void 0:r.y)&&void 0!==o?o:0,width:null!==(i=null==r?void 0:r.width)&&void 0!==i?i:50,height:null!==(a=null==r?void 0:r.height)&&void 0!==a?a:50,textColor:null!==(s=null==r?void 0:r.textColor)&&void 0!==s?s:$_(0,0,0),backgroundColor:null!==(l=null==r?void 0:r.backgroundColor)&&void 0!==l?l:$_(1,1,1),borderColor:null!==(c=null==r?void 0:r.borderColor)&&void 0!==c?c:$_(0,0,0),borderWidth:null!==(u=null==r?void 0:r.borderWidth)&&void 0!==u?u:1,rotate:null!==(d=null==r?void 0:r.rotate)&&void 0!==d?d:o_(0),hidden:null==r?void 0:r.hidden,page:t.ref}),h=this.doc.context.register(f.dict),p=this.acroField.addWidgetWithOpt(h,AP.fromText(e),!this.isMutuallyExclusive());f.setAppearanceState(Dj.of(\"Off\")),this.updateWidgetAppearance(f,p),t.node.addAnnot(h)},t.prototype.needsAppearancesUpdate=function(){for(var e,t=this.acroField.getWidgets(),r=0,n=t.length;r<n;r++){var o=t[r],i=o.getAppearanceState(),a=null===(e=o.getAppearances())||void 0===e?void 0:e.normal;if(!(a instanceof Hj))return!0;if(i&&!a.has(i))return!0}return!1},t.prototype.defaultUpdateAppearances=function(){this.updateAppearances()},t.prototype.updateAppearances=function(e){IT(e,\"provider\",[Function]);for(var t=this.acroField.getWidgets(),r=0,n=t.length;r<n;r++){var o=t[r],i=o.getOnValue();i&&this.updateWidgetAppearance(o,i,e)}},t.prototype.updateWidgetAppearance=function(e,t,r){var n=VI((null!=r?r:$I)(this,e));this.updateOnOffWidgetAppearance(e,t,n)},t.of=function(e,r,n){return new t(e,r,n)},t}(cN);const vN=gN,bN=function(e){function t(t,r,n){var o=e.call(this,t,r,n)||this;return _T(t,\"acroSignature\",[[oR,\"PDFAcroSignature\"]]),o.acroField=t,o}return gA(t,e),t.prototype.needsAppearancesUpdate=function(){return!1},t.of=function(e,r,n){return new t(e,r,n)},t}(cN);var yN=function(e){function t(t,r,n){var o=e.call(this,t,r,n)||this;return _T(t,\"acroText\",[[aR,\"PDFAcroText\"]]),o.acroField=t,o}return gA(t,e),t.prototype.getText=function(){var e=this.acroField.getValue();if(!e&&this.isRichFormatted())throw new II(this.getName());return null==e?void 0:e.decodeText()},t.prototype.setText=function(e){IT(e,\"text\",[\"string\"]);var t=this.getMaxLength();if(void 0!==t&&e&&e.length>t)throw new FI(e.length,t,this.getName());this.markAsDirty(),this.disableRichFormatting(),e?this.acroField.setValue(AP.fromText(e)):this.acroField.removeValue()},t.prototype.getAlignment=function(){var e=this.acroField.getQuadding();return 0===e?X_.Left:1===e?X_.Center:2===e?X_.Right:X_.Left},t.prototype.setAlignment=function(e){PT(e,\"alignment\",X_),this.markAsDirty(),this.acroField.setQuadding(e)},t.prototype.getMaxLength=function(){return this.acroField.getMaxLength()},t.prototype.setMaxLength=function(e){if(DT(e,\"maxLength\",0,Number.MAX_SAFE_INTEGER),this.markAsDirty(),void 0===e)this.acroField.removeMaxLength();else{var t=this.getText();if(t&&t.length>e)throw new DI(t.length,e,this.getName());this.acroField.setMaxLength(e)}},t.prototype.removeMaxLength=function(){this.markAsDirty(),this.acroField.removeMaxLength()},t.prototype.setImage=function(e){for(var t=this.getAlignment(),r=t===X_.Center?aN.Center:t===X_.Right?aN.Right:aN.Left,n=this.acroField.getWidgets(),o=0,i=n.length;o<i;o++){var a=n[o],s=this.createImageAppearanceStream(a,e,r);this.updateWidgetAppearances(a,{normal:s})}this.markAsClean()},t.prototype.setFontSize=function(e){LT(e,\"fontSize\"),this.acroField.setFontSize(e),this.markAsDirty()},t.prototype.isMultiline=function(){return this.acroField.hasFlag(YM.Multiline)},t.prototype.enableMultiline=function(){this.markAsDirty(),this.acroField.setFlagTo(YM.Multiline,!0)},t.prototype.disableMultiline=function(){this.markAsDirty(),this.acroField.setFlagTo(YM.Multiline,!1)},t.prototype.isPassword=function(){return this.acroField.hasFlag(YM.Password)},t.prototype.enablePassword=function(){this.acroField.setFlagTo(YM.Password,!0)},t.prototype.disablePassword=function(){this.acroField.setFlagTo(YM.Password,!1)},t.prototype.isFileSelector=function(){return this.acroField.hasFlag(YM.FileSelect)},t.prototype.enableFileSelection=function(){this.acroField.setFlagTo(YM.FileSelect,!0)},t.prototype.disableFileSelection=function(){this.acroField.setFlagTo(YM.FileSelect,!1)},t.prototype.isSpellChecked=function(){return!this.acroField.hasFlag(YM.DoNotSpellCheck)},t.prototype.enableSpellChecking=function(){this.acroField.setFlagTo(YM.DoNotSpellCheck,!1)},t.prototype.disableSpellChecking=function(){this.acroField.setFlagTo(YM.DoNotSpellCheck,!0)},t.prototype.isScrollable=function(){return!this.acroField.hasFlag(YM.DoNotScroll)},t.prototype.enableScrolling=function(){this.acroField.setFlagTo(YM.DoNotScroll,!1)},t.prototype.disableScrolling=function(){this.acroField.setFlagTo(YM.DoNotScroll,!0)},t.prototype.isCombed=function(){return this.acroField.hasFlag(YM.Comb)&&!this.isMultiline()&&!this.isPassword()&&!this.isFileSelector()&&void 0!==this.getMaxLength()},t.prototype.enableCombing=function(){void 0===this.getMaxLength()&&console.warn(\"PDFTextFields must have a max length in order to be combed\"),this.markAsDirty(),this.disableMultiline(),this.disablePassword(),this.disableFileSelection(),this.acroField.setFlagTo(YM.Comb,!0)},t.prototype.disableCombing=function(){this.markAsDirty(),this.acroField.setFlagTo(YM.Comb,!1)},t.prototype.isRichFormatted=function(){return this.acroField.hasFlag(YM.RichText)},t.prototype.enableRichFormatting=function(){this.acroField.setFlagTo(YM.RichText,!0)},t.prototype.disableRichFormatting=function(){this.acroField.setFlagTo(YM.RichText,!1)},t.prototype.addToPage=function(e,t){var r,n,o,i,a,s,l;_T(e,\"page\",[[DN,\"PDFPage\"]]),sN(t),t||(t={}),\"textColor\"in t||(t.textColor=$_(0,0,0)),\"backgroundColor\"in t||(t.backgroundColor=$_(1,1,1)),\"borderColor\"in t||(t.borderColor=$_(0,0,0)),\"borderWidth\"in t||(t.borderWidth=1);var c=this.createWidget({x:null!==(r=t.x)&&void 0!==r?r:0,y:null!==(n=t.y)&&void 0!==n?n:0,width:null!==(o=t.width)&&void 0!==o?o:200,height:null!==(i=t.height)&&void 0!==i?i:50,textColor:t.textColor,backgroundColor:t.backgroundColor,borderColor:t.borderColor,borderWidth:null!==(a=t.borderWidth)&&void 0!==a?a:0,rotate:null!==(s=t.rotate)&&void 0!==s?s:o_(0),hidden:t.hidden,page:e.ref}),u=this.doc.context.register(c.dict);this.acroField.addWidget(u);var d=null!==(l=t.font)&&void 0!==l?l:this.doc.getForm().getDefaultFont();this.updateWidgetAppearance(c,d),e.node.addAnnot(u)},t.prototype.needsAppearancesUpdate=function(){var e;if(this.isDirty())return!0;for(var t=this.acroField.getWidgets(),r=0,n=t.length;r<n;r++)if(!((null===(e=t[r].getAppearances())||void 0===e?void 0:e.normal)instanceof Vj))return!0;return!1},t.prototype.defaultUpdateAppearances=function(e){_T(e,\"font\",[[nN,\"PDFFont\"]]),this.updateAppearances(e)},t.prototype.updateAppearances=function(e,t){_T(e,\"font\",[[nN,\"PDFFont\"]]),IT(t,\"provider\",[Function]);for(var r=this.acroField.getWidgets(),n=0,o=r.length;n<o;n++){var i=r[n];this.updateWidgetAppearance(i,e,t)}this.markAsClean()},t.prototype.updateWidgetAppearance=function(e,t,r){var n=VI((null!=r?r:QI)(this,e,t));this.updateWidgetAppearanceWithFont(e,t,n)},t.of=function(e,r,n){return new t(e,r,n)},t}(cN);const wN=yN;var xN;!function(e){e.Courier=\"Courier\",e.CourierBold=\"Courier-Bold\",e.CourierOblique=\"Courier-Oblique\",e.CourierBoldOblique=\"Courier-BoldOblique\",e.Helvetica=\"Helvetica\",e.HelveticaBold=\"Helvetica-Bold\",e.HelveticaOblique=\"Helvetica-Oblique\",e.HelveticaBoldOblique=\"Helvetica-BoldOblique\",e.TimesRoman=\"Times-Roman\",e.TimesRomanBold=\"Times-Bold\",e.TimesRomanItalic=\"Times-Italic\",e.TimesRomanBoldItalic=\"Times-BoldItalic\",e.Symbol=\"Symbol\",e.ZapfDingbats=\"ZapfDingbats\"}(xN||(xN={}));var SN=function(){function e(e,t){var r=this;this.embedDefaultFont=function(){return r.doc.embedStandardFont(xN.Helvetica)},_T(e,\"acroForm\",[[CR,\"PDFAcroForm\"]]),_T(t,\"doc\",[[_N,\"PDFDocument\"]]),this.acroForm=e,this.doc=t,this.dirtyFields=new Set,this.defaultFontCache=WT.populatedBy(this.embedDefaultFont)}return e.prototype.hasXFA=function(){return this.acroForm.dict.has(Dj.of(\"XFA\"))},e.prototype.deleteXFA=function(){this.acroForm.dict.delete(Dj.of(\"XFA\"))},e.prototype.getFields=function(){for(var e=this.acroForm.getAllFields(),t=[],r=0,n=e.length;r<n;r++){var o=e[r],i=o[0],a=o[1],s=EN(i,a,this.doc);s&&t.push(s)}return t},e.prototype.getFieldMaybe=function(e){_T(e,\"name\",[\"string\"]);for(var t=this.getFields(),r=0,n=t.length;r<n;r++){var o=t[r];if(o.getName()===e)return o}},e.prototype.getField=function(e){_T(e,\"name\",[\"string\"]);var t=this.getFieldMaybe(e);if(t)return t;throw new PI(e)},e.prototype.getButton=function(e){_T(e,\"name\",[\"string\"]);var t=this.getField(e);if(t instanceof LN)return t;throw new MI(e,LN,t)},e.prototype.getCheckBox=function(e){_T(e,\"name\",[\"string\"]);var t=this.getField(e);if(t instanceof dN)return t;throw new MI(e,dN,t)},e.prototype.getDropdown=function(e){_T(e,\"name\",[\"string\"]);var t=this.getField(e);if(t instanceof hN)return t;throw new MI(e,hN,t)},e.prototype.getOptionList=function(e){_T(e,\"name\",[\"string\"]);var t=this.getField(e);if(t instanceof mN)return t;throw new MI(e,mN,t)},e.prototype.getRadioGroup=function(e){_T(e,\"name\",[\"string\"]);var t=this.getField(e);if(t instanceof vN)return t;throw new MI(e,vN,t)},e.prototype.getSignature=function(e){_T(e,\"name\",[\"string\"]);var t=this.getField(e);if(t instanceof bN)return t;throw new MI(e,bN,t)},e.prototype.getTextField=function(e){_T(e,\"name\",[\"string\"]);var t=this.getField(e);if(t instanceof wN)return t;throw new MI(e,wN,t)},e.prototype.createButton=function(e){_T(e,\"name\",[\"string\"]);var t=ON(e),r=this.findOrCreateNonTerminals(t.nonTerminal),n=lR.create(this.doc.context);return n.setPartialName(t.terminal),AN(r,[n,n.ref],t.terminal),LN.of(n,n.ref,this.doc)},e.prototype.createCheckBox=function(e){_T(e,\"name\",[\"string\"]);var t=ON(e),r=this.findOrCreateNonTerminals(t.nonTerminal),n=qM.create(this.doc.context);return n.setPartialName(t.terminal),AN(r,[n,n.ref],t.terminal),dN.of(n,n.ref,this.doc)},e.prototype.createDropdown=function(e){_T(e,\"name\",[\"string\"]);var t=ON(e),r=this.findOrCreateNonTerminals(t.nonTerminal),n=tR.create(this.doc.context);return n.setPartialName(t.terminal),AN(r,[n,n.ref],t.terminal),hN.of(n,n.ref,this.doc)},e.prototype.createOptionList=function(e){_T(e,\"name\",[\"string\"]);var t=ON(e),r=this.findOrCreateNonTerminals(t.nonTerminal),n=fR.create(this.doc.context);return n.setPartialName(t.terminal),AN(r,[n,n.ref],t.terminal),mN.of(n,n.ref,this.doc)},e.prototype.createRadioGroup=function(e){_T(e,\"name\",[\"string\"]);var t=ON(e),r=this.findOrCreateNonTerminals(t.nonTerminal),n=uR.create(this.doc.context);return n.setPartialName(t.terminal),AN(r,[n,n.ref],t.terminal),vN.of(n,n.ref,this.doc)},e.prototype.createTextField=function(e){_T(e,\"name\",[\"string\"]);var t=ON(e),r=this.findOrCreateNonTerminals(t.nonTerminal),n=aR.create(this.doc.context);return n.setPartialName(t.terminal),AN(r,[n,n.ref],t.terminal),wN.of(n,n.ref,this.doc)},e.prototype.flatten=function(e){void 0===e&&(e={updateFieldAppearances:!0}),e.updateFieldAppearances&&this.updateFieldAppearances();for(var t=this.getFields(),r=0,n=t.length;r<n;r++){for(var o=t[r],i=o.acroField.getWidgets(),a=0,s=i.length;a<s;a++){var l=i[a],c=this.findWidgetPage(l),u=this.findWidgetAppearanceRef(o,l),d=c.node.newXObject(\"FlatWidget\",u),f=l.getRectangle(),h=wA([A_(),v_(f.x,f.y)],wI(vA(vA({},f),{rotation:0})),[G_(d),T_()]).filter(Boolean);c.pushOperators.apply(c,h)}this.removeField(o)}},e.prototype.removeField=function(e){for(var t=e.acroField.getWidgets(),r=new Set,n=0,o=t.length;n<o;n++){var i=t[n],a=this.findWidgetAppearanceRef(e,i),s=this.findWidgetPage(i);r.add(s),s.node.removeAnnot(a)}r.forEach((function(t){return t.node.removeAnnot(e.ref)})),this.acroForm.removeField(e.acroField);for(var l=e.acroField.normalizedEntries().Kids,c=l.size(),u=0;u<c;u++){var d=l.get(u);d instanceof Yj&&this.doc.context.delete(d)}this.doc.context.delete(e.ref)},e.prototype.updateFieldAppearances=function(e){IT(e,\"font\",[[nN,\"PDFFont\"]]),e=null!=e?e:this.getDefaultFont();for(var t=this.getFields(),r=0,n=t.length;r<n;r++){var o=t[r];o.needsAppearancesUpdate()&&o.defaultUpdateAppearances(e)}},e.prototype.markFieldAsDirty=function(e){IT(e,\"fieldRef\",[[Yj,\"PDFRef\"]]),this.dirtyFields.add(e)},e.prototype.markFieldAsClean=function(e){IT(e,\"fieldRef\",[[Yj,\"PDFRef\"]]),this.dirtyFields.delete(e)},e.prototype.fieldIsDirty=function(e){return IT(e,\"fieldRef\",[[Yj,\"PDFRef\"]]),this.dirtyFields.has(e)},e.prototype.getDefaultFont=function(){return this.defaultFontCache.access()},e.prototype.findWidgetPage=function(e){var t=e.P(),r=this.doc.getPages().find((function(e){return e.ref===t}));if(void 0===r){var n=this.doc.context.getObjectRef(e.dict);if(void 0===n)throw new Error(\"Could not find PDFRef for PDFObject\");if(void 0===(r=this.doc.findPageForAnnotationRef(n)))throw new Error(\"Could not find page for PDFRef \"+n)}return r},e.prototype.findWidgetAppearanceRef=function(e,t){var r,n=t.getNormalAppearance();if(n instanceof Hj&&(e instanceof dN||e instanceof vN)){var o=e.acroField.getValue(),i=null!==(r=n.get(o))&&void 0!==r?r:n.get(Dj.of(\"Off\"));i instanceof Yj&&(n=i)}if(!(n instanceof Yj)){var a=e.getName();throw new Error(\"Failed to extract appearance ref for: \"+a)}return n},e.prototype.findOrCreateNonTerminals=function(e){for(var t=[this.acroForm],r=0,n=e.length;r<n;r++){var o=e[r];if(!o)throw new _I(o);var i=t[0],a=t[1],s=this.findNonTerminal(o,i);if(s)t=s;else{var l=nR.create(this.doc.context);l.setPartialName(o),l.setParent(a);var c=this.doc.context.register(l.dict);i.addField(c),t=[l,c]}}return t},e.prototype.findNonTerminal=function(e,t){for(var r=t instanceof CR?this.acroForm.getFields():hR(t.Kids()),n=0,o=r.length;n<o;n++){var i=r[n],a=i[0],s=i[1];if(a.getPartialName()===e){if(a instanceof nR)return[a,s];throw new RI(e)}}},e.of=function(t,r){return new e(t,r)},e}();const CN=SN;var kN,EN=function(e,t,r){return e instanceof lR?LN.of(e,t,r):e instanceof qM?dN.of(e,t,r):e instanceof tR?hN.of(e,t,r):e instanceof fR?mN.of(e,t,r):e instanceof aR?wN.of(e,t,r):e instanceof uR?vN.of(e,t,r):e instanceof oR?bN.of(e,t,r):void 0},ON=function(e){if(0===e.length)throw new Error(\"PDF field names must not be empty strings\");for(var t=e.split(\".\"),r=0,n=t.length;r<n;r++)if(\"\"===t[r])throw new Error('Periods in PDF field names must be separated by at least one character: \"'+e+'\"');return 1===t.length?{nonTerminal:[],terminal:t[0]}:{nonTerminal:t.slice(0,t.length-1),terminal:t[t.length-1]}},AN=function(e,t,r){for(var n=e[0],o=e[1],i=t[0],a=t[1],s=n.normalizedEntries(),l=(hR(\"Kids\"in s?s.Kids:s.Fields)),c=0,u=l.length;c<u;c++)if(l[c][0].getPartialName()===r)throw new RI(r);n.addField(a),i.setParent(o)},TN={\"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],Folio:[612,936],Legal:[612,1008],Letter:[612,792],Tabloid:[792,1224]};!function(e){e[e.Fastest=1/0]=\"Fastest\",e[e.Fast=1500]=\"Fast\",e[e.Medium=500]=\"Medium\",e[e.Slow=100]=\"Slow\"}(kN||(kN={}));const jN=function(){function e(e,t,r){this.alreadyEmbedded=!1,this.ref=e,this.doc=t,this.embedder=r}return e.prototype.embed=function(){return bA(this,void 0,void 0,(function(){var e,t,r,n;return yA(this,(function(o){switch(o.label){case 0:return this.alreadyEmbedded?[3,2]:[4,this.embedder.embedIntoContext(this.doc.context,this.ref)];case 1:e=o.sent(),this.doc.catalog.has(Dj.of(\"Names\"))||this.doc.catalog.set(Dj.of(\"Names\"),this.doc.context.obj({})),(t=this.doc.catalog.lookup(Dj.of(\"Names\"),Hj)).has(Dj.of(\"EmbeddedFiles\"))||t.set(Dj.of(\"EmbeddedFiles\"),this.doc.context.obj({})),(r=t.lookup(Dj.of(\"EmbeddedFiles\"),Hj)).has(Dj.of(\"Names\"))||r.set(Dj.of(\"Names\"),this.doc.context.obj([])),(n=r.lookup(Dj.of(\"Names\"),Oj)).push(AP.fromText(this.embedder.fileName)),n.push(e),this.doc.catalog.has(Dj.of(\"AF\"))||this.doc.catalog.set(Dj.of(\"AF\"),this.doc.context.obj([])),this.doc.catalog.lookup(Dj.of(\"AF\"),Oj).push(e),this.alreadyEmbedded=!0,o.label=2;case 2:return[2]}}))}))},e.of=function(t,r,n){return new e(t,r,n)},e}();const PN=function(){function e(e,t,r){this.alreadyEmbedded=!1,this.ref=e,this.doc=t,this.embedder=r}return e.prototype.embed=function(){return bA(this,void 0,void 0,(function(){var e,t,r,n,o,i,a;return yA(this,(function(s){switch(s.label){case 0:return this.alreadyEmbedded?[3,2]:(e=this.doc,t=e.catalog,r=e.context,[4,this.embedder.embedIntoContext(this.doc.context,this.ref)]);case 1:n=s.sent(),t.has(Dj.of(\"Names\"))||t.set(Dj.of(\"Names\"),r.obj({})),(o=t.lookup(Dj.of(\"Names\"),Hj)).has(Dj.of(\"JavaScript\"))||o.set(Dj.of(\"JavaScript\"),r.obj({})),(i=o.lookup(Dj.of(\"JavaScript\"),Hj)).has(Dj.of(\"Names\"))||i.set(Dj.of(\"Names\"),r.obj([])),(a=i.lookup(Dj.of(\"Names\"),Oj)).push(AP.fromText(this.embedder.scriptName)),a.push(n),this.alreadyEmbedded=!0,s.label=2;case 2:return[2]}}))}))},e.of=function(t,r,n){return new e(t,r,n)},e}();const MN=function(){function e(e,t){this.script=e,this.scriptName=t}return e.for=function(t,r){return new e(t,r)},e.prototype.embedIntoContext=function(e,t){return bA(this,void 0,void 0,(function(){var r;return yA(this,(function(n){return r=e.obj({Type:\"Action\",S:\"JavaScript\",JS:AP.fromText(this.script)}),t?(e.assign(t,r),[2,t]):[2,e.register(r)]}))}))},e}();var RN=function(){function e(e,t,r){var n=this;if(this.defaultWordBreaks=[\" \"],this.computePages=function(){var e=[];return n.catalog.Pages().traverse((function(t,r){if(t instanceof lP){var o=n.pageMap.get(t);o||(o=DN.of(t,r,n),n.pageMap.set(t,o)),e.push(o)}})),e},this.getOrCreateForm=function(){var e=n.catalog.getOrCreateAcroForm();return CN.of(e,n)},_T(e,\"context\",[[aP,\"PDFContext\"]]),_T(t,\"ignoreEncryption\",[\"boolean\"]),this.context=e,this.catalog=e.lookup(e.trailerInfo.Root),this.isEncrypted=!!e.lookup(e.trailerInfo.Encrypt),this.pageCache=WT.populatedBy(this.computePages),this.pageMap=new Map,this.formCache=WT.populatedBy(this.getOrCreateForm),this.fonts=[],this.images=[],this.embeddedPages=[],this.embeddedFiles=[],this.javaScripts=[],!t&&this.isEncrypted)throw new OI;r&&this.updateInfoDict()}return e.load=function(t,r){return void 0===r&&(r={}),bA(this,void 0,void 0,(function(){var n,o,i,a,s,l,c,u,d,f,h;return yA(this,(function(p){switch(p.label){case 0:return n=r.ignoreEncryption,o=void 0!==n&&n,i=r.parseSpeed,a=void 0===i?kN.Slow:i,s=r.throwOnInvalidObject,l=void 0!==s&&s,c=r.updateMetadata,u=void 0===c||c,d=r.capNumbers,f=void 0!==d&&d,_T(t,\"pdf\",[\"string\",Uint8Array,ArrayBuffer]),_T(o,\"ignoreEncryption\",[\"boolean\"]),_T(a,\"parseSpeed\",[\"number\"]),_T(l,\"throwOnInvalidObject\",[\"boolean\"]),h=YA(t),[4,$R.forBytesWithOptions(h,a,l,f).parseDocument()];case 1:return[2,new e(p.sent(),o,u)]}}))}))},e.create=function(t){return void 0===t&&(t={}),bA(this,void 0,void 0,(function(){var r,n,o,i,a,s;return yA(this,(function(l){return r=t.updateMetadata,n=void 0===r||r,o=aP.create(),i=AR.withContext(o),a=o.register(i),s=ER.withContextAndPages(o,a),o.trailerInfo.Root=o.register(s),[2,new e(o,!1,n)]}))}))},e.prototype.registerFontkit=function(e){this.fontkit=e},e.prototype.getForm=function(){var e=this.formCache.access();return e.hasXFA()&&(console.warn(\"Removing XFA form data as pdf-lib does not support reading or writing XFA\"),e.deleteXFA()),e},e.prototype.getTitle=function(){var e=this.getInfoDict().lookup(Dj.Title);if(e)return IN(e),e.decodeText()},e.prototype.getAuthor=function(){var e=this.getInfoDict().lookup(Dj.Author);if(e)return IN(e),e.decodeText()},e.prototype.getSubject=function(){var e=this.getInfoDict().lookup(Dj.Subject);if(e)return IN(e),e.decodeText()},e.prototype.getKeywords=function(){var e=this.getInfoDict().lookup(Dj.Keywords);if(e)return IN(e),e.decodeText()},e.prototype.getCreator=function(){var e=this.getInfoDict().lookup(Dj.Creator);if(e)return IN(e),e.decodeText()},e.prototype.getProducer=function(){var e=this.getInfoDict().lookup(Dj.Producer);if(e)return IN(e),e.decodeText()},e.prototype.getCreationDate=function(){var e=this.getInfoDict().lookup(Dj.CreationDate);if(e)return IN(e),e.decodeDate()},e.prototype.getModificationDate=function(){var e=this.getInfoDict().lookup(Dj.ModDate);if(e)return IN(e),e.decodeDate()},e.prototype.setTitle=function(e,t){_T(e,\"title\",[\"string\"]);var r=Dj.of(\"Title\");this.getInfoDict().set(r,AP.fromText(e)),(null==t?void 0:t.showInWindowTitleBar)&&this.catalog.getOrCreateViewerPreferences().setDisplayDocTitle(!0)},e.prototype.setAuthor=function(e){_T(e,\"author\",[\"string\"]);var t=Dj.of(\"Author\");this.getInfoDict().set(t,AP.fromText(e))},e.prototype.setSubject=function(e){_T(e,\"author\",[\"string\"]);var t=Dj.of(\"Subject\");this.getInfoDict().set(t,AP.fromText(e))},e.prototype.setKeywords=function(e){_T(e,\"keywords\",[Array]);var t=Dj.of(\"Keywords\");this.getInfoDict().set(t,AP.fromText(e.join(\" \")))},e.prototype.setCreator=function(e){_T(e,\"creator\",[\"string\"]);var t=Dj.of(\"Creator\");this.getInfoDict().set(t,AP.fromText(e))},e.prototype.setProducer=function(e){_T(e,\"creator\",[\"string\"]);var t=Dj.of(\"Producer\");this.getInfoDict().set(t,AP.fromText(e))},e.prototype.setLanguage=function(e){_T(e,\"language\",[\"string\"]);var t=Dj.of(\"Lang\");this.catalog.set(t,IP.of(e))},e.prototype.setCreationDate=function(e){_T(e,\"creationDate\",[[Date,\"Date\"]]);var t=Dj.of(\"CreationDate\");this.getInfoDict().set(t,IP.fromDate(e))},e.prototype.setModificationDate=function(e){_T(e,\"modificationDate\",[[Date,\"Date\"]]);var t=Dj.of(\"ModDate\");this.getInfoDict().set(t,IP.fromDate(e))},e.prototype.getPageCount=function(){return void 0===this.pageCount&&(this.pageCount=this.getPages().length),this.pageCount},e.prototype.getPages=function(){return this.pageCache.access()},e.prototype.getPage=function(e){var t=this.getPages();return FT(e,\"index\",0,t.length-1),t[e]},e.prototype.getPageIndices=function(){return function(e,t){for(var r=new Array(t-0),n=0,o=r.length;n<o;n++)r[n]=0+n;return r}(0,this.getPageCount())},e.prototype.removePage=function(e){var t=this.getPageCount();if(0===this.pageCount)throw new jI;FT(e,\"index\",0,t-1),this.catalog.removeLeafNode(e),this.pageCount=t-1},e.prototype.addPage=function(e){return _T(e,\"page\",[\"undefined\",[DN,\"PDFPage\"],Array]),this.insertPage(this.getPageCount(),e)},e.prototype.insertPage=function(e,t){var r=this.getPageCount();if(FT(e,\"index\",0,r),_T(t,\"page\",[\"undefined\",[DN,\"PDFPage\"],Array]),!t||Array.isArray(t)){var n=Array.isArray(t)?t:TN.A4;(t=DN.create(this)).setSize.apply(t,n)}else if(t.doc!==this)throw new TI;var o=this.catalog.insertLeafNode(t.ref,e);return t.node.setParent(o),this.pageMap.set(t.node,t),this.pageCache.invalidate(),this.pageCount=r+1,t},e.prototype.copyPages=function(t,r){return bA(this,void 0,void 0,(function(){var n,o,i,a,s,l,c,u;return yA(this,(function(d){switch(d.label){case 0:return _T(t,\"srcDoc\",[[e,\"PDFDocument\"]]),_T(r,\"indices\",[Array]),[4,t.flush()];case 1:for(d.sent(),n=uP.for(t.context,this.context),o=t.getPages(),i=new Array(r.length),a=0,s=r.length;a<s;a++)l=o[r[a]],c=n.copy(l.node),u=this.context.register(c),i[a]=DN.of(c,u,this);return[2,i]}}))}))},e.prototype.copy=function(){return bA(this,void 0,void 0,(function(){var t,r,n,o;return yA(this,(function(i){switch(i.label){case 0:return[4,e.create()];case 1:return[4,(t=i.sent()).copyPages(this,this.getPageIndices())];case 2:for(r=i.sent(),n=0,o=r.length;n<o;n++)t.addPage(r[n]);return void 0!==this.getAuthor()&&t.setAuthor(this.getAuthor()),void 0!==this.getCreationDate()&&t.setCreationDate(this.getCreationDate()),void 0!==this.getCreator()&&t.setCreator(this.getCreator()),void 0!==this.getModificationDate()&&t.setModificationDate(this.getModificationDate()),void 0!==this.getProducer()&&t.setProducer(this.getProducer()),void 0!==this.getSubject()&&t.setSubject(this.getSubject()),void 0!==this.getTitle()&&t.setTitle(this.getTitle()),t.defaultWordBreaks=this.defaultWordBreaks,[2,t]}}))}))},e.prototype.addJavaScript=function(e,t){_T(e,\"name\",[\"string\"]),_T(t,\"script\",[\"string\"]);var r=MN.for(t,e),n=this.context.nextRef(),o=PN.of(n,this,r);this.javaScripts.push(o)},e.prototype.attach=function(e,t,r){return void 0===r&&(r={}),bA(this,void 0,void 0,(function(){var n,o,i,a;return yA(this,(function(s){return _T(e,\"attachment\",[\"string\",Uint8Array,ArrayBuffer]),_T(t,\"name\",[\"string\"]),IT(r.mimeType,\"mimeType\",[\"string\"]),IT(r.description,\"description\",[\"string\"]),IT(r.creationDate,\"options.creationDate\",[Date]),IT(r.modificationDate,\"options.modificationDate\",[Date]),MT(r.afRelationship,\"options.afRelationship\",LP),n=YA(e),o=HP.for(n,t,r),i=this.context.nextRef(),a=jN.of(i,this,o),this.embeddedFiles.push(a),[2]}))}))},e.prototype.embedFont=function(e,t){return void 0===t&&(t={}),bA(this,void 0,void 0,(function(){var r,n,o,i,a,s,l,c,u,d;return yA(this,(function(f){switch(f.label){case 0:return r=t.subset,n=void 0!==r&&r,o=t.customName,i=t.features,_T(e,\"font\",[\"string\",Uint8Array,ArrayBuffer]),_T(n,\"subset\",[\"boolean\"]),OT(e)?(a=jP.for(e,o),[3,7]):[3,1];case 1:return function(e){return e instanceof Uint8Array||e instanceof ArrayBuffer||\"string\"==typeof e}(e)?(s=YA(e),l=this.assertFontkit(),n?[4,BP.for(l,s,o,i)]:[3,3]):[3,6];case 2:return c=f.sent(),[3,5];case 3:return[4,FP.for(l,s,o,i)];case 4:c=f.sent(),f.label=5;case 5:return a=c,[3,7];case 6:throw new TypeError(\"`font` must be one of `StandardFonts | string | Uint8Array | ArrayBuffer`\");case 7:return u=this.context.nextRef(),d=nN.of(u,this,a),this.fonts.push(d),[2,d]}}))}))},e.prototype.embedStandardFont=function(e,t){if(_T(e,\"font\",[\"string\"]),!OT(e))throw new TypeError(\"`font` must be one of type `StandardFonts`\");var r=jP.for(e,t),n=this.context.nextRef(),o=nN.of(n,this,r);return this.fonts.push(o),o},e.prototype.embedJpg=function(e){return bA(this,void 0,void 0,(function(){var t,r,n,o;return yA(this,(function(i){switch(i.label){case 0:return _T(e,\"jpg\",[\"string\",Uint8Array,ArrayBuffer]),t=YA(e),[4,GP.for(t)];case 1:return r=i.sent(),n=this.context.nextRef(),o=iN.of(n,this,r),this.images.push(o),[2,o]}}))}))},e.prototype.embedPng=function(e){return bA(this,void 0,void 0,(function(){var t,r,n,o;return yA(this,(function(i){switch(i.label){case 0:return _T(e,\"png\",[\"string\",Uint8Array,ArrayBuffer]),t=YA(e),[4,JP.for(t)];case 1:return r=i.sent(),n=this.context.nextRef(),o=iN.of(n,this,r),this.images.push(o),[2,o]}}))}))},e.prototype.embedPdf=function(t,r){return void 0===r&&(r=[0]),bA(this,void 0,void 0,(function(){var n,o;return yA(this,(function(i){switch(i.label){case 0:return _T(t,\"pdf\",[\"string\",Uint8Array,ArrayBuffer,[e,\"PDFDocument\"]]),_T(r,\"indices\",[Array]),t instanceof e?(n=t,[3,3]):[3,1];case 1:return[4,e.load(t)];case 2:n=i.sent(),i.label=3;case 3:return o=function(e,t){for(var r=new Array(t.length),n=0,o=t.length;n<o;n++)r[n]=e[t[n]];return r}(n.getPages(),r),[2,this.embedPages(o)]}}))}))},e.prototype.embedPage=function(e,t,r){return bA(this,void 0,void 0,(function(){return yA(this,(function(n){switch(n.label){case 0:return _T(e,\"page\",[[DN,\"PDFPage\"]]),[4,this.embedPages([e],[t],[r])];case 1:return[2,n.sent()[0]]}}))}))},e.prototype.embedPages=function(e,t,r){return void 0===t&&(t=[]),void 0===r&&(r=[]),bA(this,void 0,void 0,(function(){var n,o,i,a,s,l,c,u,d,f,h,p,m;return yA(this,(function(g){switch(g.label){case 0:if(0===e.length)return[2,[]];for(l=0,c=e.length-1;l<c;l++)if(n=e[l],o=e[l+1],n.node.context!==o.node.context)throw new ej;i=e[0].node.context,a=i===this.context?function(e){return e}:uP.for(i,this.context).copy,s=new Array(e.length),l=0,c=e.length,g.label=1;case 1:return l<c?(u=a(e[l].node),d=t[l],f=r[l],[4,SM.for(u,d,f)]):[3,4];case 2:h=g.sent(),p=this.context.nextRef(),s[l]=tN.of(p,this,h),g.label=3;case 3:return l++,[3,1];case 4:return(m=this.embeddedPages).push.apply(m,s),[2,s]}}))}))},e.prototype.flush=function(){return bA(this,void 0,void 0,(function(){return yA(this,(function(e){switch(e.label){case 0:return[4,this.embedAll(this.fonts)];case 1:return e.sent(),[4,this.embedAll(this.images)];case 2:return e.sent(),[4,this.embedAll(this.embeddedPages)];case 3:return e.sent(),[4,this.embedAll(this.embeddedFiles)];case 4:return e.sent(),[4,this.embedAll(this.javaScripts)];case 5:return e.sent(),[2]}}))}))},e.prototype.save=function(e){return void 0===e&&(e={}),bA(this,void 0,void 0,(function(){var t,r,n,o,i,a,s,l,c;return yA(this,(function(u){switch(u.label){case 0:return t=e.useObjectStreams,r=void 0===t||t,n=e.addDefaultPage,o=void 0===n||n,i=e.objectsPerTick,a=void 0===i?50:i,s=e.updateFieldAppearances,l=void 0===s||s,_T(r,\"useObjectStreams\",[\"boolean\"]),_T(o,\"addDefaultPage\",[\"boolean\"]),_T(a,\"objectsPerTick\",[\"number\"]),_T(l,\"updateFieldAppearances\",[\"boolean\"]),o&&0===this.getPageCount()&&this.addPage(),l&&(c=this.formCache.getValue())&&c.updateFieldAppearances(),[4,this.flush()];case 1:return u.sent(),[2,(r?EP:bP).forContext(this.context,a).serializeToBuffer()]}}))}))},e.prototype.saveAsBase64=function(e){return void 0===e&&(e={}),bA(this,void 0,void 0,(function(){var t,r,n,o,i;return yA(this,(function(a){switch(a.label){case 0:return t=e.dataUri,r=void 0!==t&&t,n=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"dataUri\"]),_T(r,\"dataUri\",[\"boolean\"]),[4,this.save(n)];case 1:return o=a.sent(),i=function(e){for(var t=\"\",r=e.length,n=0;n<r;n+=3)t+=xA[e[n]>>2],t+=xA[(3&e[n])<<4|e[n+1]>>4],t+=xA[(15&e[n+1])<<2|e[n+2]>>6],t+=xA[63&e[n+2]];return r%3==2?t=t.substring(0,t.length-1)+\"=\":r%3==1&&(t=t.substring(0,t.length-2)+\"==\"),t}(o),[2,r?\"data:application/pdf;base64,\"+i:i]}}))}))},e.prototype.findPageForAnnotationRef=function(e){for(var t=this.getPages(),r=0,n=t.length;r<n;r++){var o=t[r],i=o.node.Annots();if(void 0!==(null==i?void 0:i.indexOf(e)))return o}},e.prototype.embedAll=function(e){return bA(this,void 0,void 0,(function(){var t,r;return yA(this,(function(n){switch(n.label){case 0:t=0,r=e.length,n.label=1;case 1:return t<r?[4,e[t].embed()]:[3,4];case 2:n.sent(),n.label=3;case 3:return t++,[3,1];case 4:return[2]}}))}))},e.prototype.updateInfoDict=function(){var e=\"pdf-lib (https://github.com/Hopding/pdf-lib)\",t=new Date,r=this.getInfoDict();this.setProducer(e),this.setModificationDate(t),r.get(Dj.of(\"Creator\"))||this.setCreator(e),r.get(Dj.of(\"CreationDate\"))||this.setCreationDate(t)},e.prototype.getInfoDict=function(){var e=this.context.lookup(this.context.trailerInfo.Info);if(e instanceof Hj)return e;var t=this.context.obj({});return this.context.trailerInfo.Info=this.context.register(t),t},e.prototype.assertFontkit=function(){if(!this.fontkit)throw new AI;return this.fontkit},e}();const _N=RN;function IN(e){if(!(e instanceof AP||e instanceof IP))throw new YT([AP,IP],e)}var NN;!function(e){e.Normal=\"Normal\",e.Multiply=\"Multiply\",e.Screen=\"Screen\",e.Overlay=\"Overlay\",e.Darken=\"Darken\",e.Lighten=\"Lighten\",e.ColorDodge=\"ColorDodge\",e.ColorBurn=\"ColorBurn\",e.HardLight=\"HardLight\",e.SoftLight=\"SoftLight\",e.Difference=\"Difference\",e.Exclusion=\"Exclusion\"}(NN||(NN={}));var FN=function(){function e(e,t,r){this.fontSize=24,this.fontColor=$_(0,0,0),this.lineHeight=24,this.x=0,this.y=0,_T(e,\"leafNode\",[[lP,\"PDFPageLeaf\"]]),_T(t,\"ref\",[[Yj,\"PDFRef\"]]),_T(r,\"doc\",[[_N,\"PDFDocument\"]]),this.node=e,this.ref=t,this.doc=r}return e.prototype.setRotation=function(e){var t=c_(e);BT(t,\"degreesAngle\",90),this.node.set(Dj.of(\"Rotate\"),this.doc.context.obj(t))},e.prototype.getRotation=function(){var e=this.node.Rotate();return o_(e?e.asNumber():0)},e.prototype.setSize=function(e,t){_T(e,\"width\",[\"number\"]),_T(t,\"height\",[\"number\"]);var r=this.getMediaBox();this.setMediaBox(r.x,r.y,e,t);var n=this.getCropBox(),o=this.getBleedBox(),i=this.getTrimBox(),a=this.getArtBox(),s=this.node.CropBox(),l=this.node.BleedBox(),c=this.node.TrimBox(),u=this.node.ArtBox();s&&AT(n,r)&&this.setCropBox(r.x,r.y,e,t),l&&AT(o,r)&&this.setBleedBox(r.x,r.y,e,t),c&&AT(i,r)&&this.setTrimBox(r.x,r.y,e,t),u&&AT(a,r)&&this.setArtBox(r.x,r.y,e,t)},e.prototype.setWidth=function(e){_T(e,\"width\",[\"number\"]),this.setSize(e,this.getSize().height)},e.prototype.setHeight=function(e){_T(e,\"height\",[\"number\"]),this.setSize(this.getSize().width,e)},e.prototype.setMediaBox=function(e,t,r,n){_T(e,\"x\",[\"number\"]),_T(t,\"y\",[\"number\"]),_T(r,\"width\",[\"number\"]),_T(n,\"height\",[\"number\"]);var o=this.doc.context.obj([e,t,e+r,t+n]);this.node.set(Dj.MediaBox,o)},e.prototype.setCropBox=function(e,t,r,n){_T(e,\"x\",[\"number\"]),_T(t,\"y\",[\"number\"]),_T(r,\"width\",[\"number\"]),_T(n,\"height\",[\"number\"]);var o=this.doc.context.obj([e,t,e+r,t+n]);this.node.set(Dj.CropBox,o)},e.prototype.setBleedBox=function(e,t,r,n){_T(e,\"x\",[\"number\"]),_T(t,\"y\",[\"number\"]),_T(r,\"width\",[\"number\"]),_T(n,\"height\",[\"number\"]);var o=this.doc.context.obj([e,t,e+r,t+n]);this.node.set(Dj.BleedBox,o)},e.prototype.setTrimBox=function(e,t,r,n){_T(e,\"x\",[\"number\"]),_T(t,\"y\",[\"number\"]),_T(r,\"width\",[\"number\"]),_T(n,\"height\",[\"number\"]);var o=this.doc.context.obj([e,t,e+r,t+n]);this.node.set(Dj.TrimBox,o)},e.prototype.setArtBox=function(e,t,r,n){_T(e,\"x\",[\"number\"]),_T(t,\"y\",[\"number\"]),_T(r,\"width\",[\"number\"]),_T(n,\"height\",[\"number\"]);var o=this.doc.context.obj([e,t,e+r,t+n]);this.node.set(Dj.ArtBox,o)},e.prototype.getSize=function(){var e=this.getMediaBox();return{width:e.width,height:e.height}},e.prototype.getWidth=function(){return this.getSize().width},e.prototype.getHeight=function(){return this.getSize().height},e.prototype.getMediaBox=function(){return this.node.MediaBox().asRectangle()},e.prototype.getCropBox=function(){var e,t=this.node.CropBox();return null!==(e=null==t?void 0:t.asRectangle())&&void 0!==e?e:this.getMediaBox()},e.prototype.getBleedBox=function(){var e,t=this.node.BleedBox();return null!==(e=null==t?void 0:t.asRectangle())&&void 0!==e?e:this.getCropBox()},e.prototype.getTrimBox=function(){var e,t=this.node.TrimBox();return null!==(e=null==t?void 0:t.asRectangle())&&void 0!==e?e:this.getCropBox()},e.prototype.getArtBox=function(){var e,t=this.node.ArtBox();return null!==(e=null==t?void 0:t.asRectangle())&&void 0!==e?e:this.getCropBox()},e.prototype.translateContent=function(e,t){_T(e,\"x\",[\"number\"]),_T(t,\"y\",[\"number\"]),this.node.normalize(),this.getContentStream();var r=this.createContentStream(A_(),v_(e,t)),n=this.doc.context.register(r),o=this.createContentStream(T_()),i=this.doc.context.register(o);this.node.wrapContentStreams(n,i)},e.prototype.scale=function(e,t){_T(e,\"x\",[\"number\"]),_T(t,\"y\",[\"number\"]),this.setSize(this.getWidth()*e,this.getHeight()*t),this.scaleContent(e,t),this.scaleAnnotations(e,t)},e.prototype.scaleContent=function(e,t){_T(e,\"x\",[\"number\"]),_T(t,\"y\",[\"number\"]),this.node.normalize(),this.getContentStream();var r=this.createContentStream(A_(),b_(e,t)),n=this.doc.context.register(r),o=this.createContentStream(T_()),i=this.doc.context.register(o);this.node.wrapContentStreams(n,i)},e.prototype.scaleAnnotations=function(e,t){_T(e,\"x\",[\"number\"]),_T(t,\"y\",[\"number\"]);var r=this.node.Annots();if(r)for(var n=0;n<r.size();n++){var o=r.lookup(n);o instanceof Hj&&this.scaleAnnot(o,e,t)}},e.prototype.resetPosition=function(){this.getContentStream(!1),this.x=0,this.y=0},e.prototype.setFont=function(e){_T(e,\"font\",[[nN,\"PDFFont\"]]),this.font=e,this.fontKey=this.node.newFontDictionary(this.font.name,this.font.ref)},e.prototype.setFontSize=function(e){_T(e,\"fontSize\",[\"number\"]),this.fontSize=e},e.prototype.setFontColor=function(e){_T(e,\"fontColor\",[[Object,\"Color\"]]),this.fontColor=e},e.prototype.setLineHeight=function(e){_T(e,\"lineHeight\",[\"number\"]),this.lineHeight=e},e.prototype.getPosition=function(){return{x:this.x,y:this.y}},e.prototype.getX=function(){return this.x},e.prototype.getY=function(){return this.y},e.prototype.moveTo=function(e,t){_T(e,\"x\",[\"number\"]),_T(t,\"y\",[\"number\"]),this.x=e,this.y=t},e.prototype.moveDown=function(e){_T(e,\"yDecrease\",[\"number\"]),this.y-=e},e.prototype.moveUp=function(e){_T(e,\"yIncrease\",[\"number\"]),this.y+=e},e.prototype.moveLeft=function(e){_T(e,\"xDecrease\",[\"number\"]),this.x-=e},e.prototype.moveRight=function(e){_T(e,\"xIncrease\",[\"number\"]),this.x+=e},e.prototype.pushOperators=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];NT(e,\"operator\",[[Zj,\"PDFOperator\"]]);var r=this.getContentStream();r.push.apply(r,e)},e.prototype.drawText=function(e,t){var r,n,o,i,a,s,l;void 0===t&&(t={}),_T(e,\"text\",[\"string\"]),IT(t.color,\"options.color\",[[Object,\"Color\"]]),DT(t.opacity,\"opacity.opacity\",0,1),IT(t.font,\"options.font\",[[nN,\"PDFFont\"]]),IT(t.size,\"options.size\",[\"number\"]),IT(t.rotate,\"options.rotate\",[[Object,\"Rotation\"]]),IT(t.xSkew,\"options.xSkew\",[[Object,\"Rotation\"]]),IT(t.ySkew,\"options.ySkew\",[[Object,\"Rotation\"]]),IT(t.x,\"options.x\",[\"number\"]),IT(t.y,\"options.y\",[\"number\"]),IT(t.lineHeight,\"options.lineHeight\",[\"number\"]),IT(t.maxWidth,\"options.maxWidth\",[\"number\"]),IT(t.wordBreaks,\"options.wordBreaks\",[Array]),MT(t.blendMode,\"options.blendMode\",NN);for(var c=this.setOrEmbedFont(t.font),u=c.oldFont,d=c.newFont,f=c.newFontKey,h=t.size||this.fontSize,p=t.wordBreaks||this.doc.defaultWordBreaks,m=void 0===t.maxWidth?DA(IA(e)):function(e,t,r,n){for(var o=function(e){for(var t=NA.join(\"|\"),r=[\"$\"],n=0,o=e.length;n<o;n++){var i=e[n];if(FA(i))throw new TypeError(\"`wordBreak` must not include \"+t);r.push(\"\"===i?\".\":i.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\"))}var a=r.join(\"|\");return new RegExp(\"(\"+t+\")|((.*?)(\"+a+\"))\",\"gm\")}(t),i=IA(e).match(o),a=\"\",s=0,l=[],c=function(){\"\"!==a&&l.push(a),a=\"\",s=0},u=0,d=i.length;u<d;u++){var f=i[u];if(FA(f))c();else{var h=n(f);s+h>r&&c(),a+=f,s+=h}}return c(),l}(e,p,t.maxWidth,(function(e){return d.widthOfTextAtSize(e,h)})),g=new Array(m.length),v=0,b=m.length;v<b;v++)g[v]=d.encodeText(m[v]);var y=this.maybeEmbedGraphicsState({opacity:t.opacity,blendMode:t.blendMode}),w=this.getContentStream();w.push.apply(w,function(e,t){for(var r,n=[A_(),t.graphicsState&&O_(t.graphicsState),z_(),tI(t.color),U_(t.font,t.size),(r=t.lineHeight,Zj.of(Jj.SetTextLineHeight,[t_(r)])),W_(l_(t.rotate),l_(t.xSkew),l_(t.ySkew),t.x,t.y)].filter(Boolean),o=0,i=e.length;o<i;o++)n.push(L_(e[o]),Zj.of(Jj.NextLine));return n.push(H_(),T_()),n}(g,{color:null!==(r=t.color)&&void 0!==r?r:this.fontColor,font:f,size:h,rotate:null!==(n=t.rotate)&&void 0!==n?n:o_(0),xSkew:null!==(o=t.xSkew)&&void 0!==o?o:o_(0),ySkew:null!==(i=t.ySkew)&&void 0!==i?i:o_(0),x:null!==(a=t.x)&&void 0!==a?a:this.x,y:null!==(s=t.y)&&void 0!==s?s:this.y,lineHeight:null!==(l=t.lineHeight)&&void 0!==l?l:this.lineHeight,graphicsState:y})),t.font&&(u?this.setFont(u):this.resetFont())},e.prototype.drawImage=function(e,t){var r,n,o,i,a,s,l;void 0===t&&(t={}),_T(e,\"image\",[[iN,\"PDFImage\"]]),IT(t.x,\"options.x\",[\"number\"]),IT(t.y,\"options.y\",[\"number\"]),IT(t.width,\"options.width\",[\"number\"]),IT(t.height,\"options.height\",[\"number\"]),IT(t.rotate,\"options.rotate\",[[Object,\"Rotation\"]]),IT(t.xSkew,\"options.xSkew\",[[Object,\"Rotation\"]]),IT(t.ySkew,\"options.ySkew\",[[Object,\"Rotation\"]]),DT(t.opacity,\"opacity.opacity\",0,1),MT(t.blendMode,\"options.blendMode\",NN);var c=this.node.newXObject(\"Image\",e.ref),u=this.maybeEmbedGraphicsState({opacity:t.opacity,blendMode:t.blendMode}),d=this.getContentStream();d.push.apply(d,gI(c,{x:null!==(r=t.x)&&void 0!==r?r:this.x,y:null!==(n=t.y)&&void 0!==n?n:this.y,width:null!==(o=t.width)&&void 0!==o?o:e.size().width,height:null!==(i=t.height)&&void 0!==i?i:e.size().height,rotate:null!==(a=t.rotate)&&void 0!==a?a:o_(0),xSkew:null!==(s=t.xSkew)&&void 0!==s?s:o_(0),ySkew:null!==(l=t.ySkew)&&void 0!==l?l:o_(0),graphicsState:u}))},e.prototype.drawPage=function(e,t){var r,n,o,i,a;void 0===t&&(t={}),_T(e,\"embeddedPage\",[[tN,\"PDFEmbeddedPage\"]]),IT(t.x,\"options.x\",[\"number\"]),IT(t.y,\"options.y\",[\"number\"]),IT(t.xScale,\"options.xScale\",[\"number\"]),IT(t.yScale,\"options.yScale\",[\"number\"]),IT(t.width,\"options.width\",[\"number\"]),IT(t.height,\"options.height\",[\"number\"]),IT(t.rotate,\"options.rotate\",[[Object,\"Rotation\"]]),IT(t.xSkew,\"options.xSkew\",[[Object,\"Rotation\"]]),IT(t.ySkew,\"options.ySkew\",[[Object,\"Rotation\"]]),DT(t.opacity,\"opacity.opacity\",0,1),MT(t.blendMode,\"options.blendMode\",NN);var s=this.node.newXObject(\"EmbeddedPdfPage\",e.ref),l=this.maybeEmbedGraphicsState({opacity:t.opacity,blendMode:t.blendMode}),c=void 0!==t.width?t.width/e.width:void 0!==t.xScale?t.xScale:1,u=void 0!==t.height?t.height/e.height:void 0!==t.yScale?t.yScale:1,d=this.getContentStream();d.push.apply(d,function(e,t){return[A_(),t.graphicsState&&O_(t.graphicsState),v_(t.x,t.y),y_(l_(t.rotate)),b_(t.xScale,t.yScale),x_(l_(t.xSkew),l_(t.ySkew)),G_(e),T_()].filter(Boolean)}(s,{x:null!==(r=t.x)&&void 0!==r?r:this.x,y:null!==(n=t.y)&&void 0!==n?n:this.y,xScale:c,yScale:u,rotate:null!==(o=t.rotate)&&void 0!==o?o:o_(0),xSkew:null!==(i=t.xSkew)&&void 0!==i?i:o_(0),ySkew:null!==(a=t.ySkew)&&void 0!==a?a:o_(0),graphicsState:l}))},e.prototype.drawSvgPath=function(e,t){var r,n,o,i,a,s,l,c,u;void 0===t&&(t={}),_T(e,\"path\",[\"string\"]),IT(t.x,\"options.x\",[\"number\"]),IT(t.y,\"options.y\",[\"number\"]),IT(t.scale,\"options.scale\",[\"number\"]),IT(t.rotate,\"options.rotate\",[[Object,\"Rotation\"]]),IT(t.borderWidth,\"options.borderWidth\",[\"number\"]),IT(t.color,\"options.color\",[[Object,\"Color\"]]),DT(t.opacity,\"opacity.opacity\",0,1),IT(t.borderColor,\"options.borderColor\",[[Object,\"Color\"]]),IT(t.borderDashArray,\"options.borderDashArray\",[Array]),IT(t.borderDashPhase,\"options.borderDashPhase\",[\"number\"]),MT(t.borderLineCap,\"options.borderLineCap\",n_),DT(t.borderOpacity,\"options.borderOpacity\",0,1),MT(t.blendMode,\"options.blendMode\",NN);var d=this.maybeEmbedGraphicsState({opacity:t.opacity,borderOpacity:t.borderOpacity,blendMode:t.blendMode});\"color\"in t||\"borderColor\"in t||(t.borderColor=$_(0,0,0));var f=this.getContentStream();f.push.apply(f,function(e,t){var r,n,o;return wA([A_(),t.graphicsState&&O_(t.graphicsState),v_(t.x,t.y),y_(l_(null!==(r=t.rotate)&&void 0!==r?r:o_(0))),t.scale?b_(t.scale,-t.scale):b_(1,-1),t.color&&tI(t.color),t.borderColor&&rI(t.borderColor),t.borderWidth&&j_(t.borderWidth),t.borderLineCap&&k_(t.borderLineCap),S_(null!==(n=t.borderDashArray)&&void 0!==n?n:[],null!==(o=t.borderDashPhase)&&void 0!==o?o:0)],function(e){return function(e){iI=aI=sI=lI=cI=uI=0;for(var t=[],r=0;r<e.length;r++){var n=e[r];if(n.cmd&&\"function\"==typeof fI[n.cmd]){var o=fI[n.cmd](n.args);Array.isArray(o)?t=t.concat(o):t.push(o)}}return t}(function(e){for(var t,r=[],n=[],o=\"\",i=!1,a=0,s=0,l=e;s<l.length;s++){var c=l[s];if(dI.has(c))a=dI.get(c),t&&(o.length>0&&(n[n.length]=+o),r[r.length]={cmd:t,args:n},n=[],o=\"\",i=!1),t=c;else if([\" \",\",\"].includes(c)||\"-\"===c&&o.length>0&&\"e\"!==o[o.length-1]||\".\"===c&&i){if(0===o.length)continue;n.length===a?(r[r.length]={cmd:t,args:n},n=[+o],\"M\"===t&&(t=\"L\"),\"m\"===t&&(t=\"l\")):n[n.length]=+o,i=\".\"===c,o=[\"-\",\".\"].includes(c)?c:\"\"}else o+=c,\".\"===c&&(i=!0)}return o.length>0&&(n.length===a?(r[r.length]={cmd:t,args:n},n=[+o],\"M\"===t&&(t=\"L\"),\"m\"===t&&(t=\"l\")):n[n.length]=+o),r[r.length]={cmd:t,args:n},r}(e))}(e),[t.color&&t.borderWidth?D_():t.color?F_():t.borderColor?N_():R_(),T_()]).filter(Boolean)}(e,{x:null!==(r=t.x)&&void 0!==r?r:this.x,y:null!==(n=t.y)&&void 0!==n?n:this.y,scale:t.scale,rotate:null!==(o=t.rotate)&&void 0!==o?o:o_(0),color:null!==(i=t.color)&&void 0!==i?i:void 0,borderColor:null!==(a=t.borderColor)&&void 0!==a?a:void 0,borderWidth:null!==(s=t.borderWidth)&&void 0!==s?s:0,borderDashArray:null!==(l=t.borderDashArray)&&void 0!==l?l:void 0,borderDashPhase:null!==(c=t.borderDashPhase)&&void 0!==c?c:void 0,borderLineCap:null!==(u=t.borderLineCap)&&void 0!==u?u:void 0,graphicsState:d}))},e.prototype.drawLine=function(e){var t,r,n,o,i;_T(e.start,\"options.start\",[[Object,\"{ x: number, y: number }\"]]),_T(e.end,\"options.end\",[[Object,\"{ x: number, y: number }\"]]),_T(e.start.x,\"options.start.x\",[\"number\"]),_T(e.start.y,\"options.start.y\",[\"number\"]),_T(e.end.x,\"options.end.x\",[\"number\"]),_T(e.end.y,\"options.end.y\",[\"number\"]),IT(e.thickness,\"options.thickness\",[\"number\"]),IT(e.color,\"options.color\",[[Object,\"Color\"]]),IT(e.dashArray,\"options.dashArray\",[Array]),IT(e.dashPhase,\"options.dashPhase\",[\"number\"]),MT(e.lineCap,\"options.lineCap\",n_),DT(e.opacity,\"opacity.opacity\",0,1),MT(e.blendMode,\"options.blendMode\",NN);var a=this.maybeEmbedGraphicsState({borderOpacity:e.opacity,blendMode:e.blendMode});\"color\"in e||(e.color=$_(0,0,0));var s=this.getContentStream();s.push.apply(s,function(e){var t,r;return[A_(),e.graphicsState&&O_(e.graphicsState),e.color&&rI(e.color),j_(e.thickness),S_(null!==(t=e.dashArray)&&void 0!==t?t:[],null!==(r=e.dashPhase)&&void 0!==r?r:0),__(e.start.x,e.start.y),e.lineCap&&k_(e.lineCap),__(e.start.x,e.start.y),I_(e.end.x,e.end.y),N_(),T_()].filter(Boolean)}({start:e.start,end:e.end,thickness:null!==(t=e.thickness)&&void 0!==t?t:1,color:null!==(r=e.color)&&void 0!==r?r:void 0,dashArray:null!==(n=e.dashArray)&&void 0!==n?n:void 0,dashPhase:null!==(o=e.dashPhase)&&void 0!==o?o:void 0,lineCap:null!==(i=e.lineCap)&&void 0!==i?i:void 0,graphicsState:a}))},e.prototype.drawRectangle=function(e){var t,r,n,o,i,a,s,l,c,u,d,f,h;void 0===e&&(e={}),IT(e.x,\"options.x\",[\"number\"]),IT(e.y,\"options.y\",[\"number\"]),IT(e.width,\"options.width\",[\"number\"]),IT(e.height,\"options.height\",[\"number\"]),IT(e.rotate,\"options.rotate\",[[Object,\"Rotation\"]]),IT(e.xSkew,\"options.xSkew\",[[Object,\"Rotation\"]]),IT(e.ySkew,\"options.ySkew\",[[Object,\"Rotation\"]]),IT(e.borderWidth,\"options.borderWidth\",[\"number\"]),IT(e.color,\"options.color\",[[Object,\"Color\"]]),DT(e.opacity,\"opacity.opacity\",0,1),IT(e.borderColor,\"options.borderColor\",[[Object,\"Color\"]]),IT(e.borderDashArray,\"options.borderDashArray\",[Array]),IT(e.borderDashPhase,\"options.borderDashPhase\",[\"number\"]),MT(e.borderLineCap,\"options.borderLineCap\",n_),DT(e.borderOpacity,\"options.borderOpacity\",0,1),MT(e.blendMode,\"options.blendMode\",NN);var p=this.maybeEmbedGraphicsState({opacity:e.opacity,borderOpacity:e.borderOpacity,blendMode:e.blendMode});\"color\"in e||\"borderColor\"in e||(e.color=$_(0,0,0));var m=this.getContentStream();m.push.apply(m,vI({x:null!==(t=e.x)&&void 0!==t?t:this.x,y:null!==(r=e.y)&&void 0!==r?r:this.y,width:null!==(n=e.width)&&void 0!==n?n:150,height:null!==(o=e.height)&&void 0!==o?o:100,rotate:null!==(i=e.rotate)&&void 0!==i?i:o_(0),xSkew:null!==(a=e.xSkew)&&void 0!==a?a:o_(0),ySkew:null!==(s=e.ySkew)&&void 0!==s?s:o_(0),borderWidth:null!==(l=e.borderWidth)&&void 0!==l?l:0,color:null!==(c=e.color)&&void 0!==c?c:void 0,borderColor:null!==(u=e.borderColor)&&void 0!==u?u:void 0,borderDashArray:null!==(d=e.borderDashArray)&&void 0!==d?d:void 0,borderDashPhase:null!==(f=e.borderDashPhase)&&void 0!==f?f:void 0,graphicsState:p,borderLineCap:null!==(h=e.borderLineCap)&&void 0!==h?h:void 0}))},e.prototype.drawSquare=function(e){void 0===e&&(e={});var t=e.size;IT(t,\"size\",[\"number\"]),this.drawRectangle(vA(vA({},e),{width:t,height:t}))},e.prototype.drawEllipse=function(e){var t,r,n,o,i,a,s,l,c,u,d;void 0===e&&(e={}),IT(e.x,\"options.x\",[\"number\"]),IT(e.y,\"options.y\",[\"number\"]),IT(e.xScale,\"options.xScale\",[\"number\"]),IT(e.yScale,\"options.yScale\",[\"number\"]),IT(e.rotate,\"options.rotate\",[[Object,\"Rotation\"]]),IT(e.color,\"options.color\",[[Object,\"Color\"]]),DT(e.opacity,\"opacity.opacity\",0,1),IT(e.borderColor,\"options.borderColor\",[[Object,\"Color\"]]),DT(e.borderOpacity,\"options.borderOpacity\",0,1),IT(e.borderWidth,\"options.borderWidth\",[\"number\"]),IT(e.borderDashArray,\"options.borderDashArray\",[Array]),IT(e.borderDashPhase,\"options.borderDashPhase\",[\"number\"]),MT(e.borderLineCap,\"options.borderLineCap\",n_),MT(e.blendMode,\"options.blendMode\",NN);var f=this.maybeEmbedGraphicsState({opacity:e.opacity,borderOpacity:e.borderOpacity,blendMode:e.blendMode});\"color\"in e||\"borderColor\"in e||(e.color=$_(0,0,0));var h=this.getContentStream();h.push.apply(h,yI({x:null!==(t=e.x)&&void 0!==t?t:this.x,y:null!==(r=e.y)&&void 0!==r?r:this.y,xScale:null!==(n=e.xScale)&&void 0!==n?n:100,yScale:null!==(o=e.yScale)&&void 0!==o?o:100,rotate:null!==(i=e.rotate)&&void 0!==i?i:void 0,color:null!==(a=e.color)&&void 0!==a?a:void 0,borderColor:null!==(s=e.borderColor)&&void 0!==s?s:void 0,borderWidth:null!==(l=e.borderWidth)&&void 0!==l?l:0,borderDashArray:null!==(c=e.borderDashArray)&&void 0!==c?c:void 0,borderDashPhase:null!==(u=e.borderDashPhase)&&void 0!==u?u:void 0,borderLineCap:null!==(d=e.borderLineCap)&&void 0!==d?d:void 0,graphicsState:f}))},e.prototype.drawCircle=function(e){void 0===e&&(e={});var t=e.size,r=void 0===t?100:t;IT(r,\"size\",[\"number\"]),this.drawEllipse(vA(vA({},e),{xScale:r,yScale:r}))},e.prototype.setOrEmbedFont=function(e){var t=this.font,r=this.fontKey;return e?this.setFont(e):this.getFont(),{oldFont:t,oldFontKey:r,newFont:this.font,newFontKey:this.fontKey}},e.prototype.getFont=function(){if(!this.font||!this.fontKey){var e=this.doc.embedStandardFont(xN.Helvetica);this.setFont(e)}return[this.font,this.fontKey]},e.prototype.resetFont=function(){this.font=void 0,this.fontKey=void 0},e.prototype.getContentStream=function(e){return void 0===e&&(e=!0),e&&this.contentStream||(this.contentStream=this.createContentStream(),this.contentStreamRef=this.doc.context.register(this.contentStream),this.node.addContentStream(this.contentStreamRef)),this.contentStream},e.prototype.createContentStream=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=this.doc.context.obj({});return rP.of(r,e)},e.prototype.maybeEmbedGraphicsState=function(e){var t=e.opacity,r=e.borderOpacity,n=e.blendMode;if(void 0!==t||void 0!==r||void 0!==n){var o=this.doc.context.obj({Type:\"ExtGState\",ca:t,CA:r,BM:n});return this.node.newExtGState(\"GS\",o)}},e.prototype.scaleAnnot=function(e,t,r){for(var n=[\"RD\",\"CL\",\"Vertices\",\"QuadPoints\",\"L\",\"Rect\"],o=0,i=n.length;o<i;o++){var a=e.lookup(Dj.of(n[o]));a instanceof Oj&&a.scalePDFNumbers(t,r)}var s=e.lookup(Dj.of(\"InkList\"));if(s instanceof Oj)for(o=0,i=s.size();o<i;o++){var l=s.lookup(o);l instanceof Oj&&l.scalePDFNumbers(t,r)}},e.of=function(t,r,n){return new e(t,r,n)},e.create=function(t){_T(t,\"doc\",[[_N,\"PDFDocument\"]]);var r=Yj.of(-1),n=lP.withContextAndParent(t.context,r);return new e(n,t.context.register(n),t)},e}();const DN=FN;var BN=function(e){function t(t,r,n){var o=e.call(this,t,r,n)||this;return _T(t,\"acroButton\",[[lR,\"PDFAcroPushButton\"]]),o.acroField=t,o}return gA(t,e),t.prototype.setImage=function(e,t){void 0===t&&(t=aN.Center);for(var r=this.acroField.getWidgets(),n=0,o=r.length;n<o;n++){var i=r[n],a=this.createImageAppearanceStream(i,e,t);this.updateWidgetAppearances(i,{normal:a})}this.markAsClean()},t.prototype.setFontSize=function(e){LT(e,\"fontSize\"),this.acroField.setFontSize(e),this.markAsDirty()},t.prototype.addToPage=function(e,t,r){var n,o,i,a,s,l,c,u,d,f,h;IT(e,\"text\",[\"string\"]),IT(t,\"page\",[[DN,\"PDFPage\"]]),sN(r);var p=this.createWidget({x:(null!==(n=null==r?void 0:r.x)&&void 0!==n?n:0)-(null!==(o=null==r?void 0:r.borderWidth)&&void 0!==o?o:0)/2,y:(null!==(i=null==r?void 0:r.y)&&void 0!==i?i:0)-(null!==(a=null==r?void 0:r.borderWidth)&&void 0!==a?a:0)/2,width:null!==(s=null==r?void 0:r.width)&&void 0!==s?s:100,height:null!==(l=null==r?void 0:r.height)&&void 0!==l?l:50,textColor:null!==(c=null==r?void 0:r.textColor)&&void 0!==c?c:$_(0,0,0),backgroundColor:null!==(u=null==r?void 0:r.backgroundColor)&&void 0!==u?u:$_(.75,.75,.75),borderColor:null==r?void 0:r.borderColor,borderWidth:null!==(d=null==r?void 0:r.borderWidth)&&void 0!==d?d:0,rotate:null!==(f=null==r?void 0:r.rotate)&&void 0!==f?f:o_(0),caption:e,hidden:null==r?void 0:r.hidden,page:t.ref}),m=this.doc.context.register(p.dict);this.acroField.addWidget(m);var g=null!==(h=null==r?void 0:r.font)&&void 0!==h?h:this.doc.getForm().getDefaultFont();this.updateWidgetAppearance(p,g),t.node.addAnnot(m)},t.prototype.needsAppearancesUpdate=function(){var e;if(this.isDirty())return!0;for(var t=this.acroField.getWidgets(),r=0,n=t.length;r<n;r++)if(!((null===(e=t[r].getAppearances())||void 0===e?void 0:e.normal)instanceof Vj))return!0;return!1},t.prototype.defaultUpdateAppearances=function(e){_T(e,\"font\",[[nN,\"PDFFont\"]]),this.updateAppearances(e)},t.prototype.updateAppearances=function(e,t){_T(e,\"font\",[[nN,\"PDFFont\"]]),IT(t,\"provider\",[Function]);for(var r=this.acroField.getWidgets(),n=0,o=r.length;n<o;n++){var i=r[n];this.updateWidgetAppearance(i,e,t)}},t.prototype.updateWidgetAppearance=function(e,t,r){var n=VI((null!=r?r:ZI)(this,e,t));this.updateWidgetAppearanceWithFont(e,t,n)},t.of=function(e,r,n){return new t(e,r,n)},t}(cN);const LN=BN;function zN(e){return zN=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},zN(e)}function HN(e){if(!e)return[1,1,0];if(e.startsWith(\"rgb\")){var t=e.match(/\\d+/g);return!t||t.length<3?[1,1,0]:t.slice(0,3).map((function(e){return parseInt(e)/255}))}if(e.startsWith(\"#\")){var r=e.replace(\"#\",\"\");return 6!==r.length?[1,1,0]:[parseInt(r.slice(0,2),16)/255,parseInt(r.slice(2,4),16)/255,parseInt(r.slice(4,6),16)/255]}return[1,1,0]}function UN(){return((e=21)=>{let t=\"\",r=crypto.getRandomValues(new Uint8Array(e|=0));for(;e--;)t+=\"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\"[63&r[e]];return t})()}function VN(e,t){document.documentElement.style.setProperty(e,t)}function WN(e){document.documentElement.style.removeProperty(e)}function GN(e){if(e<1024)return\"\".concat(e,\" B\");var t=[\"KB\",\"MB\",\"GB\",\"TB\"],r=-1,n=e;do{n/=1024,r++}while(n>=1024&&r<t.length-1);return\"\".concat(n.toFixed(2),\" \").concat(t[r])}function qN(e,t,r){if(e<=r&&t<=r)return{newWidth:e,newHeight:t};var n=r/e,o=r/t,i=Math.min(n,o);return{newWidth:e*i,newHeight:t*i}}function KN(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(t<0||3*t+2>=e.length)throw new Error(\"Index out of bounds\");var r=e[3*t],n=e[3*t+1],o=e[3*t+2];return\"rgb(\".concat(r,\", \").concat(n,\", \").concat(o,\")\")}function XN(e){var t=new Date(e),r=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,\"0\"),o=String(t.getDate()).padStart(2,\"0\"),i=String(t.getHours()).padStart(2,\"0\"),a=String(t.getMinutes()).padStart(2,\"0\"),s=String(t.getSeconds()).padStart(2,\"0\"),l=-t.getTimezoneOffset(),c=String(Math.floor(Math.abs(l)/60)).padStart(2,\"0\"),u=String(Math.abs(l)%60).padStart(2,\"0\"),d=l>=0?\"+\":\"-\";return\"D:\".concat(r).concat(n).concat(o).concat(i).concat(a).concat(s).concat(d).concat(c,\"'\").concat(u,\"'\")}function YN(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=e.slice(2,16),n=r.slice(0,4),o=r.slice(4,6),i=r.slice(6,8),a=r.slice(8,10),s=r.slice(10,12);if(t)return se.t(\"dateFormat.full\",{year:n,month:o,day:i,hour:a,minute:s});var l=new Date,c=l.getFullYear().toString(),u=(l.getMonth()+1).toString().padStart(2,\"0\"),d=l.getDate().toString().padStart(2,\"0\");return n===c&&o===u&&i===d?\"\".concat(a,\":\").concat(s):n===c?se.t(\"dateFormat.dayMonth\",{day:i,month:o}):se.t(\"dateFormat.dayMonthYear\",{day:i,month:o,year:n})}function $N(e){var t=e.slice(2,16),r=parseInt(t.slice(0,4),10),n=parseInt(t.slice(4,6),10)-1,o=parseInt(t.slice(6,8),10),i=parseInt(t.slice(8,10),10),a=parseInt(t.slice(10,12),10),s=parseInt(t.slice(12,14),10)||0,l=e.slice(16).match(/([+-])(\\d{2})'?(\\d{2})?'/),c=0;return l&&(c=(\"+\"===l[1]?1:-1)*(60*(parseInt(l[2],10)||0)+(parseInt(l[3]||\"0\",10)||0))),new Date(Date.UTC(r,n,o,i,a,s)).getTime()-60*c*1e3}function ZN(e,t){var r=e.x,n=e.y,o=e.width,i=e.height,a=t-n-i;return[r,a,r+o,a+i]}function QN(e){for(var t=[].concat([254,255]),r=0;r<e.length;r++){var n=e.charCodeAt(r);t.push(n>>8&255,255&n)}var o=t.map((function(e){return e.toString(16).padStart(2,\"0\")})).join(\"\").toUpperCase();return AP.of(o)}function JN(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new Date,t=function(e){return e.toString().padStart(2,\"0\")},r=e.getFullYear(),n=t(e.getMonth()+1),o=t(e.getDate()),i=t(e.getHours()),a=t(e.getMinutes()),s=t(e.getSeconds());return\"\".concat(r).concat(n).concat(o,\"_\").concat(i).concat(a).concat(s)}function eF(e){var t=JSON.stringify(e,(function(e,t){return t&&\"object\"===zN(t)&&!Array.isArray(t)?Object.keys(t).sort().reduce((function(e,r){return e[r]=t[r],e}),{}):t})),r=0;if(0===t.length)return r;for(var n=0;n<t.length;n++)r=(r<<5)-r+t.charCodeAt(n),r|=0;return r}function tF(e){if(e=e.trim().toLowerCase(),/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(e))return 4===e.length?\"#\"+e.slice(1).split(\"\").map((function(e){return e+e})).join(\"\"):e;var t=e.match(/^rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)$/);if(t)return\"#\"+[Number(t[1]),Number(t[2]),Number(t[3])].map((function(e){return function(e){return Math.max(0,Math.min(255,e))}(e).toString(16).padStart(2,\"0\")})).join(\"\");throw new Error(\"Unsupported color format: \".concat(e))}function rF(e,t){try{return tF(e)===tF(t)}catch(e){return!1}}function nF(e){return nF=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},nF(e)}function oF(){oF=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==nF(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(nF(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function iF(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}var aF=new Set;function sF(e){if(e.external&&e.url&&!aF.has(e.value)){var t=document.createElement(\"style\");t.innerHTML=\"\\n    @font-face {\\n        font-family: '\".concat(e.value,\"';\\n        src: url('\").concat(e.url,\"') format('truetype');\\n        font-weight: normal;\\n        font-style: normal;\\n    }\\n    \"),document.head.appendChild(t),aF.add(e.value)}}function lF(e){return cF.apply(this,arguments)}function cF(){return e=oF().mark((function e(t){var r;return oF().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.external&&t.url&&!aF.has(t.value)){e.next=2;break}return e.abrupt(\"return\");case 2:return e.prev=2,r=new FontFace(t.value,\"url(\".concat(t.url,\")\")),e.next=6,r.load();case 6:document.fonts.add(r),aF.add(t.value),e.next=13;break;case 10:e.prev=10,e.t0=e.catch(2),sF(t);case 13:case\"end\":return e.stop()}}),e,null,[[2,10]])})),cF=function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){iF(i,n,o,a,s,\"next\",e)}function s(e){iF(i,n,o,a,s,\"throw\",e)}a(void 0)}))},cF.apply(this,arguments);var e}function uF(e){return uF=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},uF(e)}function dF(e){return function(e){if(Array.isArray(e))return vF(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||gF(e)||function(){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 fF(){fF=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==uF(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(uF(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function hF(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function pF(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){hF(i,n,o,a,s,\"next\",e)}function s(e){hF(i,n,o,a,s,\"throw\",e)}a(void 0)}))}}function mF(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=r){var n,o,i,a,s=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return s}}(e,t)||gF(e,t)||function(){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 gF(e,t){if(e){if(\"string\"==typeof e)return vF(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?vF(e,t):void 0}}function vF(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var bF=function(e){var t=e.annotation,r=e.onAdd,n=ke().t,o=(0,m.useRef)(null),i=(0,m.useRef)(null),a=(0,m.useRef)(Eo.signature.COLORS[0]),s=mF((0,m.useState)(!1),2),l=s[0],c=s[1],u=mF((0,m.useState)(!1),2),d=u[0],f=u[1],h=mF((0,m.useState)(a.current),2),p=h[0],g=h[1],v=mF((0,m.useState)(!0),2),b=v[0],y=v[1],w=mF((0,m.useState)([]),2),x=w[0],S=w[1],C=mF((0,m.useState)(null),2),k=C[0],E=C[1],O=mF((0,m.useState)(\"\"),2),A=O[0],T=O[1],j=mF((0,m.useState)(Eo.handwritingFontList[0].value||\"Arial\"),2),P=j[0],M=j[1],R=mF((0,m.useState)(null),2),_=R[0],I=R[1],N=Eo.signature.MAX_SIZE;(0,m.useEffect)((function(){a.current=p}),[p]);var F=function(e){r(e),c(!1)},D=function(){var e=pF(fF().mark((function e(t){return fF().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,lF(Eo.handwritingFontList.find((function(e){return e.value===t})));case 2:M(t);case 3:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();return(0,m.useEffect)((function(){T(\"\"),I(null),(\"Enter\"===k||\"Draw\"===k||\"Upload\"===k)&&y(!0)}),[k]),(0,m.useEffect)((function(){y(0===A.trim().length)}),[A]),(0,m.useEffect)((function(){d&&(D(P),T(\"\"),I(null),E(Eo.signature.TYPE))}),[d]),(0,m.useEffect)((function(){var e;d&&\"Draw\"===k?function(){if(console.log(o),o.current){var e=new(IE().Stage)({container:o.current,width:Eo.signature.WIDTH,height:Eo.signature.HEIGHT}),t=new(IE().Layer);e.add(t),i.current=e;var r=!1,n=null;e.on(\"mousedown touchstart\",(function(){r=!0;var o=e.getPointerPosition();o&&(n=new(IE().Line)({stroke:a.current,strokeWidth:3,globalCompositeOperation:\"source-over\",lineCap:\"round\",lineJoin:\"round\",points:[o.x,o.y]}),t.add(n))})),e.on(\"mouseup touchend\",(function(){r=!1,n=null})),e.on(\"mousemove touchmove\",(function(t){if(r&&n){t.evt.preventDefault();var o=e.getPointerPosition();if(o){var i=n.points().concat([o.x,o.y]);n.points(i),y(!1)}}}))}}():(null===(e=i.current)||void 0===e||e.destroy(),i.current=null)}),[k,d]),(0,Mn.jsxs)(Mn.Fragment,{children:[(0,Mn.jsxs)(hm,{rootClassName:\"SignaturePop\",content:(0,Mn.jsxs)(\"div\",{children:[(0,Mn.jsx)(\"ul\",{className:\"SignaturePop-Container\",children:x.map((function(e,t){return(0,Mn.jsx)(\"li\",{children:(0,Mn.jsx)(\"img\",{onClick:function(){return F(e)},src:e})},t)}))}),(0,Mn.jsx)(\"div\",{className:\"SignaturePop-Toolbar\",children:(0,Mn.jsx)(AC,{block:!0,type:\"link\",onClick:function(){c(!1),f(!0)},icon:(0,Mn.jsx)(DE,{}),children:n(\"toolbar.buttons.createSignature\")})})]}),trigger:\"click\",open:l,onOpenChange:c,placement:\"bottom\",arrow:!1,children:[(0,Mn.jsx)(\"div\",{className:\"icon\",children:t.icon}),(0,Mn.jsx)(\"div\",{className:\"name\",children:n(\"annotations.\".concat(t.name))})]}),(0,Mn.jsx)(dE,{title:n(\"toolbar.buttons.createSignature\"),open:d,onOk:function(){if(\"Upload\"!==k)if(\"Enter\"!==k)if(\"Draw\"!==k);else{var e,t=null===(e=i.current)||void 0===e?void 0:e.toDataURL();t&&(S((function(e){return[].concat(dF(e),[t])})),F(t),f(!1))}else{var r=function(){if(!A.trim())return null;var e=document.createElement(\"canvas\");e.width=Eo.signature.WIDTH/1.1,e.height=Eo.signature.HEIGHT;var t=e.getContext(\"2d\");if(!t)return null;t.clearRect(0,0,e.width,e.height),t.font=\"\".concat(80,'px \"').concat(P,'\", cursive, sans-serif');var r=t.measureText(A).width,n=r+40>e.width?(e.width-40)/r:1;return t.font=\"\".concat(80*n,'px \"').concat(P,'\", cursive, sans-serif'),t.textAlign=\"center\",t.textBaseline=\"middle\",t.imageSmoothingEnabled=!0,t.shadowColor=\"rgba(0, 0, 0, 0.1)\",t.shadowBlur=2,t.shadowOffsetX=1,t.shadowOffsetY=1,t.fillStyle=p,t.fillText(A,e.width/2,e.height/2),e.toDataURL(\"image/png\")}();r&&(S((function(e){return[].concat(dF(e),[r])})),F(r),f(!1))}else _&&(S((function(e){return[].concat(dF(e),[_])})),F(_),f(!1))},onCancel:function(){return f(!1)},destroyOnHidden:!0,okButtonProps:{disabled:b},okText:n(\"normal.ok\"),cancelText:n(\"normal.cancel\"),className:\"SignatureTool\",children:(0,Mn.jsxs)(\"div\",{children:[(0,Mn.jsx)(\"div\",{className:\"SignatureTool-Header\",children:(0,Mn.jsx)(RE.Group,{block:!0,options:[{label:n(\"normal.draw\"),value:\"Draw\"},{label:n(\"normal.enter\"),value:\"Enter\"},{label:n(\"normal.upload\"),value:\"Upload\"}],optionType:\"button\",value:k,onChange:function(e){return E(e.target.value)}})}),(0,Mn.jsxs)(\"div\",{className:\"SignatureTool-Container\",style:{width:Eo.signature.WIDTH},children:[\"Enter\"===k&&(0,Mn.jsx)(\"input\",{autoFocus:!0,type:\"text\",value:A,onChange:function(e){return T(e.target.value)},placeholder:n(\"toolbar.message.signatureArea\"),style:{height:Eo.signature.HEIGHT,width:Eo.signature.WIDTH/1.1,color:p,fontFamily:\"\".concat(P),fontSize:80,lineHeight:\"\".concat(80,\"px\")}}),\"Draw\"===k&&(0,Mn.jsxs)(Mn.Fragment,{children:[(0,Mn.jsx)(\"div\",{className:\"SignatureTool-Container-info\",children:n(\"toolbar.message.signatureArea\")}),(0,Mn.jsx)(\"div\",{ref:o,style:{height:Eo.signature.HEIGHT,width:Eo.signature.WIDTH}})]}),\"Upload\"===k&&(0,Mn.jsx)(\"div\",{style:{height:Eo.signature.HEIGHT,width:Eo.signature.WIDTH},children:_?(0,Mn.jsx)(\"div\",{className:\"SignatureTool-ImagePreview\",style:{height:Eo.signature.HEIGHT,width:Eo.signature.WIDTH},children:(0,Mn.jsx)(\"img\",{src:_,alt:\"preview\"})}):(0,Mn.jsxs)(pA,{accept:Eo.signature.ACCEPT,beforeUpload:function(){return!1},showUploadList:!1,onChange:function(e){var t=e.file;if(t&&t.type.startsWith(\"image/\"))if(t.size>N)alert(n(\"normal.fileSizeLimit\",{value:GN(N)}));else{var r=new FileReader;r.onload=function(){var e=pF(fF().mark((function e(t){var r,n,o;return fF().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=null===(r=t.target)||void 0===r?void 0:r.result,(o=new Image).src=n,o.onload=function(){var e=Eo.setting.MAX_UPLOAD_IMAGE_SIZE,t=Eo.setting.MAX_UPLOAD_IMAGE_SIZE,r=o.width,n=o.height;r>n&&r>e?(n=Math.round(n*e/r),r=e):n>t&&(r=Math.round(r*t/n),n=t);var i=document.createElement(\"canvas\"),a=i.getContext(\"2d\");if(i.width=r,i.height=n,a){a.drawImage(o,0,0,r,n);var s=i.toDataURL(\"image/png\");I(s),y(!1)}};case 4:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),r.readAsDataURL(t)}},multiple:!1,style:{height:Eo.signature.HEIGHT,width:Eo.signature.WIDTH},children:[(0,Mn.jsx)(\"p\",{className:\"ant-upload-drag-icon\"}),(0,Mn.jsx)(\"p\",{className:\"ant-upload-text\",children:n(\"toolbar.message.uploadArea\")}),(0,Mn.jsx)(\"p\",{className:\"ant-upload-hint\",children:n(\"toolbar.message.uploadHint\",{format:Eo.signature.ACCEPT,maxSize:GN(Eo.signature.MAX_SIZE)})})]})})]}),(0,Mn.jsxs)(\"div\",{className:\"SignatureTool-Toolbar\",style:{width:Eo.signature.WIDTH},children:[(0,Mn.jsxs)(\"div\",{className:\"colorPalette\",children:[\"Upload\"!==k&&(0,Mn.jsx)(Mn.Fragment,{children:Eo.signature.COLORS.map((function(e){return(0,Mn.jsx)(\"div\",{onClick:function(){return function(e){var t;g(e);var r=(null===(t=i.current)||void 0===t?void 0:t.getLayers()[0].getChildren((function(e){return\"Line\"===e.getClassName()})))||[];r.forEach((function(t){return t.stroke(e)}))}(e)},className:\"cell \".concat(e===p?\"active\":\"\"),children:(0,Mn.jsx)(\"span\",{style:{backgroundColor:e}})},e)}))}),\"Enter\"===k&&(0,Mn.jsx)(Mn.Fragment,{children:(0,Mn.jsx)(sy,{style:{width:160},size:\"small\",defaultValue:P,options:Eo.handwritingFontList,onChange:function(){var e=pF(fF().mark((function e(t){return fF().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,D(t);case 2:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()})})]}),(0,Mn.jsx)(\"div\",{className:\"clear\",onClick:function(){var e=i.current;e&&(e.clear(),e.getLayers().forEach((function(e){return e.destroyChildren()})),y(!0)),T(\"\"),I(null)},children:n(\"normal.clear\")})]})]})})]})};const yF={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M531.3 574.4l.3-1.4c5.8-23.9 13.1-53.7 7.4-80.7-3.8-21.3-19.5-29.6-32.9-30.2-15.8-.7-29.9 8.3-33.4 21.4-6.6 24-.7 56.8 10.1 98.6-13.6 32.4-35.3 79.5-51.2 107.5-29.6 15.3-69.3 38.9-75.2 68.7-1.2 5.5.2 12.5 3.5 18.8 3.7 7 9.6 12.4 16.5 15 3 1.1 6.6 2 10.8 2 17.6 0 46.1-14.2 84.1-79.4 5.8-1.9 11.8-3.9 17.6-5.9 27.2-9.2 55.4-18.8 80.9-23.1 28.2 15.1 60.3 24.8 82.1 24.8 21.6 0 30.1-12.8 33.3-20.5 5.6-13.5 2.9-30.5-6.2-39.6-13.2-13-45.3-16.4-95.3-10.2-24.6-15-40.7-35.4-52.4-65.8zM421.6 726.3c-13.9 20.2-24.4 30.3-30.1 34.7 6.7-12.3 19.8-25.3 30.1-34.7zm87.6-235.5c5.2 8.9 4.5 35.8.5 49.4-4.9-19.9-5.6-48.1-2.7-51.4.8.1 1.5.7 2.2 2zm-1.6 120.5c10.7 18.5 24.2 34.4 39.1 46.2-21.6 4.9-41.3 13-58.9 20.2-4.2 1.7-8.3 3.4-12.3 5 13.3-24.1 24.4-51.4 32.1-71.4zm155.6 65.5c.1.2.2.5-.4.9h-.2l-.2.3c-.8.5-9 5.3-44.3-8.6 40.6-1.9 45 7.3 45.1 7.4zm191.4-388.2L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zm1.8 562H232V136h302v216a42 42 0 0042 42h216v494z\"}}]},name:\"file-pdf\",theme:\"outlined\"};var wF=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:yF}))};const xF=m.forwardRef(wF);function SF(e){const[t,r]=m.useState(e);return m.useEffect((()=>{const t=setTimeout((()=>{r(e)}),e.length?0:10);return()=>{clearTimeout(t)}}),[e]),t}const CF=e=>{const{componentCls:t}=e,r=`${t}-show-help`,n=`${t}-show-help-item`;return{[r]:{transition:`opacity ${e.motionDurationFast} ${e.motionEaseInOut}`,\"&-appear, &-enter\":{opacity:0,\"&-active\":{opacity:1}},\"&-leave\":{opacity:1,\"&-active\":{opacity:0}},[n]:{overflow:\"hidden\",transition:`height ${e.motionDurationFast} ${e.motionEaseInOut},\\n                     opacity ${e.motionDurationFast} ${e.motionEaseInOut},\\n                     transform ${e.motionDurationFast} ${e.motionEaseInOut} !important`,[`&${n}-appear, &${n}-enter`]:{transform:\"translateY(-5px)\",opacity:0,\"&-active\":{transform:\"translateY(0)\",opacity:1}},[`&${n}-leave-active`]:{transform:\"translateY(-5px)\"}}}}},kF=e=>({legend:{display:\"block\",width:\"100%\",marginBottom:e.marginLG,padding:0,color:e.colorTextDescription,fontSize:e.fontSizeLG,lineHeight:\"inherit\",border:0,borderBottom:`${Si(e.lineWidth)} ${e.lineType} ${e.colorBorder}`},'input[type=\"search\"]':{boxSizing:\"border-box\"},'input[type=\"radio\"], input[type=\"checkbox\"]':{lineHeight:\"normal\"},'input[type=\"file\"]':{display:\"block\"},'input[type=\"range\"]':{display:\"block\",width:\"100%\"},\"select[multiple], select[size]\":{height:\"auto\"},\"input[type='file']:focus,\\n  input[type='radio']:focus,\\n  input[type='checkbox']:focus\":{outline:0,boxShadow:`0 0 0 ${Si(e.controlOutlineWidth)} ${e.controlOutline}`},output:{display:\"block\",paddingTop:15,color:e.colorText,fontSize:e.fontSize,lineHeight:e.lineHeight}}),EF=(e,t)=>{const{formItemCls:r}=e;return{[r]:{[`${r}-label > label`]:{height:t},[`${r}-control-input`]:{minHeight:t}}}},OF=e=>{const{componentCls:t}=e;return{[e.componentCls]:Object.assign(Object.assign(Object.assign({},rc(e)),kF(e)),{[`${t}-text`]:{display:\"inline-block\",paddingInlineEnd:e.paddingSM},\"&-small\":Object.assign({},EF(e,e.controlHeightSM)),\"&-large\":Object.assign({},EF(e,e.controlHeightLG))})}},AF=e=>{const{formItemCls:t,iconCls:r,rootPrefixCls:n,antCls:o,labelRequiredMarkColor:i,labelColor:a,labelFontSize:s,labelHeight:l,labelColonMarginInlineStart:c,labelColonMarginInlineEnd:u,itemMarginBottom:d}=e;return{[t]:Object.assign(Object.assign({},rc(e)),{marginBottom:d,verticalAlign:\"top\",\"&-with-help\":{transition:\"none\"},[`&-hidden,\\n        &-hidden${o}-row`]:{display:\"none\"},\"&-has-warning\":{[`${t}-split`]:{color:e.colorError}},\"&-has-error\":{[`${t}-split`]:{color:e.colorWarning}},[`${t}-label`]:{flexGrow:0,overflow:\"hidden\",whiteSpace:\"nowrap\",textAlign:\"end\",verticalAlign:\"middle\",\"&-left\":{textAlign:\"start\"},\"&-wrap\":{overflow:\"unset\",lineHeight:e.lineHeight,whiteSpace:\"unset\",\"> label\":{verticalAlign:\"middle\",textWrap:\"balance\"}},\"> label\":{position:\"relative\",display:\"inline-flex\",alignItems:\"center\",maxWidth:\"100%\",height:l,color:a,fontSize:s,[`> ${r}`]:{fontSize:e.fontSize,verticalAlign:\"top\"},[`&${t}-required`]:{\"&::before\":{display:\"inline-block\",marginInlineEnd:e.marginXXS,color:i,fontSize:e.fontSize,fontFamily:\"SimSun, sans-serif\",lineHeight:1,content:'\"*\"'},[`&${t}-required-mark-hidden, &${t}-required-mark-optional`]:{\"&::before\":{display:\"none\"}}},[`${t}-optional`]:{display:\"inline-block\",marginInlineStart:e.marginXXS,color:e.colorTextDescription,[`&${t}-required-mark-hidden`]:{display:\"none\"}},[`${t}-tooltip`]:{color:e.colorTextDescription,cursor:\"help\",writingMode:\"horizontal-tb\",marginInlineStart:e.marginXXS},\"&::after\":{content:'\":\"',position:\"relative\",marginBlock:0,marginInlineStart:c,marginInlineEnd:u},[`&${t}-no-colon::after`]:{content:'\"\\\\a0\"'}}},[`${t}-control`]:{\"--ant-display\":\"flex\",flexDirection:\"column\",flexGrow:1,[`&:first-child:not([class^=\"'${n}-col-'\"]):not([class*=\"' ${n}-col-'\"])`]:{width:\"100%\"},\"&-input\":{position:\"relative\",display:\"flex\",alignItems:\"center\",minHeight:e.controlHeight,\"&-content\":{flex:\"auto\",maxWidth:\"100%\"}}},[t]:{\"&-additional\":{display:\"flex\",flexDirection:\"column\"},\"&-explain, &-extra\":{clear:\"both\",color:e.colorTextDescription,fontSize:e.fontSize,lineHeight:e.lineHeight},\"&-explain-connected\":{width:\"100%\"},\"&-extra\":{minHeight:e.controlHeightSM,transition:`color ${e.motionDurationMid} ${e.motionEaseOut}`},\"&-explain\":{\"&-error\":{color:e.colorError},\"&-warning\":{color:e.colorWarning}}},[`&-with-help ${t}-explain`]:{height:\"auto\",opacity:1},[`${t}-feedback-icon`]:{fontSize:e.fontSize,textAlign:\"center\",visibility:\"visible\",animationName:Fp,animationDuration:e.motionDurationMid,animationTimingFunction:e.motionEaseOutBack,pointerEvents:\"none\",\"&-success\":{color:e.colorSuccess},\"&-error\":{color:e.colorError},\"&-warning\":{color:e.colorWarning},\"&-validating\":{color:e.colorPrimary}}})}},TF=(e,t)=>{const{formItemCls:r}=e;return{[`${t}-horizontal`]:{[`${r}-label`]:{flexGrow:0},[`${r}-control`]:{flex:\"1 1 0\",minWidth:0},[`${r}-label[class$='-24'], ${r}-label[class*='-24 ']`]:{[`& + ${r}-control`]:{minWidth:\"unset\"}}}}},jF=e=>{const{componentCls:t,formItemCls:r,inlineItemMarginBottom:n}=e;return{[`${t}-inline`]:{display:\"flex\",flexWrap:\"wrap\",[r]:{flex:\"none\",marginInlineEnd:e.margin,marginBottom:n,\"&-row\":{flexWrap:\"nowrap\"},[`> ${r}-label,\\n        > ${r}-control`]:{display:\"inline-block\",verticalAlign:\"top\"},[`> ${r}-label`]:{flex:\"none\"},[`${t}-text`]:{display:\"inline-block\"},[`${r}-has-feedback`]:{display:\"inline-block\"}}}}},PF=e=>({padding:e.verticalLabelPadding,margin:e.verticalLabelMargin,whiteSpace:\"initial\",textAlign:\"start\",\"> label\":{margin:0,\"&::after\":{visibility:\"hidden\"}}}),MF=e=>{const{componentCls:t,formItemCls:r,rootPrefixCls:n}=e;return{[`${r} ${r}-label`]:PF(e),[`${t}:not(${t}-inline)`]:{[r]:{flexWrap:\"wrap\",[`${r}-label, ${r}-control`]:{[`&:not([class*=\" ${n}-col-xs\"])`]:{flex:\"0 0 100%\",maxWidth:\"100%\"}}}}}},RF=e=>{const{componentCls:t,formItemCls:r,antCls:n}=e;return{[`${t}-vertical`]:{[`${r}:not(${r}-horizontal)`]:{[`${r}-row`]:{flexDirection:\"column\"},[`${r}-label > label`]:{height:\"auto\"},[`${r}-control`]:{width:\"100%\"},[`${r}-label,\\n        ${n}-col-24${r}-label,\\n        ${n}-col-xl-24${r}-label`]:PF(e)}},[`@media (max-width: ${Si(e.screenXSMax)})`]:[MF(e),{[t]:{[`${r}:not(${r}-horizontal)`]:{[`${n}-col-xs-24${r}-label`]:PF(e)}}}],[`@media (max-width: ${Si(e.screenSMMax)})`]:{[t]:{[`${r}:not(${r}-horizontal)`]:{[`${n}-col-sm-24${r}-label`]:PF(e)}}},[`@media (max-width: ${Si(e.screenMDMax)})`]:{[t]:{[`${r}:not(${r}-horizontal)`]:{[`${n}-col-md-24${r}-label`]:PF(e)}}},[`@media (max-width: ${Si(e.screenLGMax)})`]:{[t]:{[`${r}:not(${r}-horizontal)`]:{[`${n}-col-lg-24${r}-label`]:PF(e)}}}}},_F=e=>{const{formItemCls:t,antCls:r}=e;return{[`${t}-vertical`]:{[`${t}-row`]:{flexDirection:\"column\"},[`${t}-label > label`]:{height:\"auto\"},[`${t}-control`]:{width:\"100%\"}},[`${t}-vertical ${t}-label,\\n      ${r}-col-24${t}-label,\\n      ${r}-col-xl-24${t}-label`]:PF(e),[`@media (max-width: ${Si(e.screenXSMax)})`]:[MF(e),{[t]:{[`${r}-col-xs-24${t}-label`]:PF(e)}}],[`@media (max-width: ${Si(e.screenSMMax)})`]:{[t]:{[`${r}-col-sm-24${t}-label`]:PF(e)}},[`@media (max-width: ${Si(e.screenMDMax)})`]:{[t]:{[`${r}-col-md-24${t}-label`]:PF(e)}},[`@media (max-width: ${Si(e.screenLGMax)})`]:{[t]:{[`${r}-col-lg-24${t}-label`]:PF(e)}}}},IF=(e,t)=>Au(e,{formItemCls:`${e.componentCls}-item`,rootPrefixCls:t}),NF=Iu(\"Form\",((e,t)=>{let{rootPrefixCls:r}=t;const n=IF(e,r);return[OF(n),AF(n),CF(n),TF(n,n.componentCls),TF(n,n.formItemCls),jF(n),RF(n),_F(n),Dx(n),Fp]}),(e=>({labelRequiredMarkColor:e.colorError,labelColor:e.colorTextHeading,labelFontSize:e.fontSize,labelHeight:e.controlHeight,labelColonMarginInlineStart:e.marginXXS/2,labelColonMarginInlineEnd:e.marginXS,itemMarginBottom:e.marginLG,verticalLabelPadding:`0 0 ${e.paddingXS}px`,verticalLabelMargin:0,inlineItemMarginBottom:0})),{order:-1e3}),FF=[];function DF(e,t,r){return{key:\"string\"==typeof e?e:`${t}-${arguments.length>3&&void 0!==arguments[3]?arguments[3]:0}`,error:e,errorStatus:r}}const BF=e=>{let{help:t,helpStatus:r,errors:n=FF,warnings:o=FF,className:i,fieldId:a,onVisibleChanged:s}=e;const{prefixCls:l}=m.useContext(Tf),c=`${l}-item-explain`,u=du(l),[d,f,h]=NF(l,u),p=m.useMemo((()=>Jf(l)),[l]),g=SF(n),v=SF(o),b=m.useMemo((()=>null!=t?[DF(t,\"help\",r)]:[].concat(Vo(g.map(((e,t)=>DF(e,\"error\",\"error\",t)))),Vo(v.map(((e,t)=>DF(e,\"warning\",\"warning\",t)))))),[t,r,g,v]),y=m.useMemo((()=>{const e={};return b.forEach((t=>{let{key:r}=t;e[r]=(e[r]||0)+1})),b.map(((t,r)=>Object.assign(Object.assign({},t),{key:e[t.key]>1?`${t.key}-fallback-${r}`:t.key})))}),[b]),w={};return a&&(w.id=`${a}_help`),d(m.createElement(Vl,{motionDeadline:p.motionDeadline,motionName:`${l}-show-help`,visible:!!y.length,onVisibleChanged:s},(e=>{const{className:t,style:r}=e;return m.createElement(\"div\",Object.assign({},w,{className:ze()(c,t,h,u,i,f),style:r}),m.createElement(Ul,Object.assign({keys:y},Jf(l),{motionName:`${l}-show-help-item`,component:!1}),(e=>{const{key:t,error:r,errorStatus:n,className:o,style:i}=e;return m.createElement(\"div\",{key:t,className:ze()(o,{[`${c}-${n}`]:n}),style:i},r)})))})))},LF=e=>\"object\"==typeof e&&null!=e&&1===e.nodeType,zF=(e,t)=>(!t||\"hidden\"!==e)&&\"visible\"!==e&&\"clip\"!==e,HF=(e,t)=>{if(e.clientHeight<e.scrollHeight||e.clientWidth<e.scrollWidth){const r=getComputedStyle(e,null);return zF(r.overflowY,t)||zF(r.overflowX,t)||(e=>{const t=(e=>{if(!e.ownerDocument||!e.ownerDocument.defaultView)return null;try{return e.ownerDocument.defaultView.frameElement}catch(e){return null}})(e);return!!t&&(t.clientHeight<e.scrollHeight||t.clientWidth<e.scrollWidth)})(e)}return!1},UF=(e,t,r,n,o,i,a,s)=>i<e&&a>t||i>e&&a<t?0:i<=e&&s<=r||a>=t&&s>=r?i-e-n:a>t&&s<r||i<e&&s>r?a-t+o:0,VF=e=>{const t=e.parentElement;return null==t?e.getRootNode().host||null:t},WF=(e,t)=>{var r,n,o,i;if(\"undefined\"==typeof document)return[];const{scrollMode:a,block:s,inline:l,boundary:c,skipOverflowHiddenElements:u}=t,d=\"function\"==typeof c?c:e=>e!==c;if(!LF(e))throw new TypeError(\"Invalid target\");const f=document.scrollingElement||document.documentElement,h=[];let p=e;for(;LF(p)&&d(p);){if(p=VF(p),p===f){h.push(p);break}null!=p&&p===document.body&&HF(p)&&!HF(document.documentElement)||null!=p&&HF(p,u)&&h.push(p)}const m=null!=(n=null==(r=window.visualViewport)?void 0:r.width)?n:innerWidth,g=null!=(i=null==(o=window.visualViewport)?void 0:o.height)?i:innerHeight,{scrollX:v,scrollY:b}=window,{height:y,width:w,top:x,right:S,bottom:C,left:k}=e.getBoundingClientRect(),{top:E,right:O,bottom:A,left:T}=(e=>{const t=window.getComputedStyle(e);return{top:parseFloat(t.scrollMarginTop)||0,right:parseFloat(t.scrollMarginRight)||0,bottom:parseFloat(t.scrollMarginBottom)||0,left:parseFloat(t.scrollMarginLeft)||0}})(e);let j=\"start\"===s||\"nearest\"===s?x-E:\"end\"===s?C+A:x+y/2-E+A,P=\"center\"===l?k+w/2-T+O:\"end\"===l?S+O:k-T;const M=[];for(let e=0;e<h.length;e++){const t=h[e],{height:r,width:n,top:o,right:i,bottom:c,left:u}=t.getBoundingClientRect();if(\"if-needed\"===a&&x>=0&&k>=0&&C<=g&&S<=m&&(t===f&&!HF(t)||x>=o&&C<=c&&k>=u&&S<=i))return M;const d=getComputedStyle(t),p=parseInt(d.borderLeftWidth,10),E=parseInt(d.borderTopWidth,10),O=parseInt(d.borderRightWidth,10),A=parseInt(d.borderBottomWidth,10);let T=0,R=0;const _=\"offsetWidth\"in t?t.offsetWidth-t.clientWidth-p-O:0,I=\"offsetHeight\"in t?t.offsetHeight-t.clientHeight-E-A:0,N=\"offsetWidth\"in t?0===t.offsetWidth?0:n/t.offsetWidth:0,F=\"offsetHeight\"in t?0===t.offsetHeight?0:r/t.offsetHeight:0;if(f===t)T=\"start\"===s?j:\"end\"===s?j-g:\"nearest\"===s?UF(b,b+g,g,E,A,b+j,b+j+y,y):j-g/2,R=\"start\"===l?P:\"center\"===l?P-m/2:\"end\"===l?P-m:UF(v,v+m,m,p,O,v+P,v+P+w,w),T=Math.max(0,T+b),R=Math.max(0,R+v);else{T=\"start\"===s?j-o-E:\"end\"===s?j-c+A+I:\"nearest\"===s?UF(o,c,r,E,A+I,j,j+y,y):j-(o+r/2)+I/2,R=\"start\"===l?P-u-p:\"center\"===l?P-(u+n/2)+_/2:\"end\"===l?P-i+O+_:UF(u,i,n,p,O+_,P,P+w,w);const{scrollLeft:e,scrollTop:a}=t;T=0===F?0:Math.max(0,Math.min(a+T/F,t.scrollHeight-r/F+I)),R=0===N?0:Math.max(0,Math.min(e+R/N,t.scrollWidth-n/N+_)),j+=a-T,P+=e-R}M.push({el:t,top:T,left:R})}return M};const GF=[\"parentNode\"];function qF(e){return void 0===e||!1===e?[]:Array.isArray(e)?e:[e]}function KF(e,t){if(!e.length)return;const r=e.join(\"_\");return t?`${t}_${r}`:GF.includes(r)?`form_item_${r}`:r}function XF(e,t,r,n,o,i){let a=n;return void 0!==i?a=i:r.validating?a=\"validating\":e.length?a=\"error\":t.length?a=\"warning\":(r.touched||o&&r.validated)&&(a=\"success\"),a}function YF(e){return qF(e).join(\"_\")}function $F(e,t){const r=Rs(t.getFieldInstance(e));if(r)return r;const n=KF(qF(e),t.__INTERNAL__.name);return n?document.getElementById(n):void 0}function ZF(e){const[t]=pf(),r=m.useRef({}),n=m.useMemo((()=>null!=e?e:Object.assign(Object.assign({},t),{__INTERNAL__:{itemRef:e=>t=>{const n=YF(e);t?r.current[n]=t:delete r.current[n]}},scrollToField:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{focus:r}=t,o=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(t,[\"focus\"]),i=$F(e,n);i&&(function(e,t){if(!e.isConnected||!(e=>{let t=e;for(;t&&t.parentNode;){if(t.parentNode===document)return!0;t=t.parentNode instanceof ShadowRoot?t.parentNode.host:t.parentNode}return!1})(e))return;const r=(e=>{const t=window.getComputedStyle(e);return{top:parseFloat(t.scrollMarginTop)||0,right:parseFloat(t.scrollMarginRight)||0,bottom:parseFloat(t.scrollMarginBottom)||0,left:parseFloat(t.scrollMarginLeft)||0}})(e);if((e=>\"object\"==typeof e&&\"function\"==typeof e.behavior)(t))return t.behavior(WF(e,t));const n=\"boolean\"==typeof t||null==t?void 0:t.behavior;for(const{el:o,top:i,left:a}of WF(e,(e=>!1===e?{block:\"end\",inline:\"nearest\"}:(e=>e===Object(e)&&0!==Object.keys(e).length)(e)?e:{block:\"start\",inline:\"nearest\"})(t))){const e=i-r.top+r.bottom,t=a-r.left+r.right;o.scroll({top:e,left:t,behavior:n})}}(i,Object.assign({scrollMode:\"if-needed\",block:\"nearest\"},o)),r&&n.focusField(e))},focusField:e=>{var t,r;const o=n.getFieldInstance(e);\"function\"==typeof(null==o?void 0:o.focus)?o.focus():null===(r=null===(t=$F(e,n))||void 0===t?void 0:t.focus)||void 0===r||r.call(t)},getFieldInstance:e=>{const t=YF(e);return r.current[t]}})),[e,t]);return[n]}const QF=(e,t)=>{const r=m.useContext(Ss),{getPrefixCls:n,direction:o,requiredMark:i,colon:a,scrollToFirstError:s,className:l,style:c}=Zo(\"form\"),{prefixCls:u,className:d,rootClassName:f,size:h,disabled:p=r,form:g,colon:v,labelAlign:b,labelWrap:y,labelCol:w,wrapperCol:x,hideRequiredMark:S,layout:C=\"horizontal\",scrollToFirstError:k,requiredMark:E,onFinishFailed:O,name:A,style:T,feedbackIcons:j,variant:P}=e,M=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"className\",\"rootClassName\",\"size\",\"disabled\",\"form\",\"colon\",\"labelAlign\",\"labelWrap\",\"labelCol\",\"wrapperCol\",\"hideRequiredMark\",\"layout\",\"scrollToFirstError\",\"requiredMark\",\"onFinishFailed\",\"name\",\"style\",\"feedbackIcons\",\"variant\"]),R=Rf(h),_=m.useContext($a),I=m.useMemo((()=>void 0!==E?E:!S&&(void 0===i||i)),[S,E,i]),N=null!=v?v:a,F=n(\"form\",u),D=du(F),[B,L,z]=NF(F,D),H=ze()(F,`${F}-${C}`,{[`${F}-hide-required-mark`]:!1===I,[`${F}-rtl`]:\"rtl\"===o,[`${F}-${R}`]:R},z,D,L,l,d,f),[U]=ZF(g),{__INTERNAL__:V}=U;V.name=A;const W=m.useMemo((()=>({name:A,labelAlign:b,labelCol:w,labelWrap:y,wrapperCol:x,vertical:\"vertical\"===C,colon:N,requiredMark:I,itemRef:V.itemRef,form:U,feedbackIcons:j})),[A,b,w,x,C,N,I,U,j]),G=m.useRef(null);m.useImperativeHandle(t,(()=>{var e;return Object.assign(Object.assign({},U),{nativeElement:null===(e=G.current)||void 0===e?void 0:e.nativeElement})}));const q=(e,t)=>{if(e){let r={block:\"nearest\"};\"object\"==typeof e&&(r=Object.assign(Object.assign({},r),e)),U.scrollToField(t,r)}};return B(m.createElement(Mf.Provider,{value:P},m.createElement(xs,{disabled:p},m.createElement(Es.Provider,{value:R},m.createElement(Af,{validateMessages:_},m.createElement(Ef.Provider,{value:W},m.createElement(Cf,Object.assign({id:A},M,{name:A,onFinishFailed:e=>{if(null==O||O(e),e.errorFields.length){const t=e.errorFields[0].name;if(void 0!==k)return void q(k,t);void 0!==s&&q(s,t)}},form:U,ref:G,style:Object.assign(Object.assign({},c),T),className:H}))))))))},JF=m.forwardRef(QF),eD=()=>{const{status:e,errors:t=[],warnings:r=[]}=m.useContext(jf);return{status:e,errors:t,warnings:r}};eD.Context=jf;const tD=eD,rD=[\"xxl\",\"xl\",\"lg\",\"md\",\"sm\",\"xs\"],nD=()=>{const[,e]=Ql(),t=(e=>({xs:`(max-width: ${e.screenXSMax}px)`,sm:`(min-width: ${e.screenSM}px)`,md:`(min-width: ${e.screenMD}px)`,lg:`(min-width: ${e.screenLG}px)`,xl:`(min-width: ${e.screenXL}px)`,xxl:`(min-width: ${e.screenXXL}px)`}))((e=>{const t=e,r=[].concat(rD).reverse();return r.forEach(((e,n)=>{const o=e.toUpperCase(),i=`screen${o}Min`,a=`screen${o}`;if(!(t[i]<=t[a]))throw new Error(`${i}<=${a} fails : !(${t[i]}<=${t[a]})`);if(n<r.length-1){const e=`screen${o}Max`;if(!(t[a]<=t[e]))throw new Error(`${a}<=${e} fails : !(${t[a]}<=${t[e]})`);const i=`screen${r[n+1].toUpperCase()}Min`;if(!(t[e]<=t[i]))throw new Error(`${e}<=${i} fails : !(${t[e]}<=${t[i]})`)}})),e})(e));return m.useMemo((()=>{const e=new Map;let r=-1,n={};return{responsiveMap:t,matchHandlers:{},dispatch:t=>(n=t,e.forEach((e=>e(n))),e.size>=1),subscribe(t){return e.size||this.register(),r+=1,e.set(r,t),t(n),r},unsubscribe(t){e.delete(t),e.size||this.unregister()},register(){Object.entries(t).forEach((e=>{let[t,r]=e;const o=e=>{let{matches:r}=e;this.dispatch(Object.assign(Object.assign({},n),{[t]:r}))},i=window.matchMedia(r);((e,t)=>{void 0!==(null==e?void 0:e.addEventListener)?e.addEventListener(\"change\",t):void 0!==(null==e?void 0:e.addListener)&&e.addListener(t)})(i,o),this.matchHandlers[r]={mql:i,listener:o},o(i)}))},unregister(){Object.values(t).forEach((e=>{const t=this.matchHandlers[e];((e,t)=>{void 0!==(null==e?void 0:e.removeEventListener)?e.removeEventListener(\"change\",t):void 0!==(null==e?void 0:e.removeListener)&&e.removeListener(t)})(null==t?void 0:t.mql,null==t?void 0:t.listener)})),e.clear()}}}),[e])},oD=(0,m.createContext)({});function iD(e,t){const[r,n]=m.useState(\"string\"==typeof e?e:\"\");return m.useEffect((()=>{(()=>{if(\"string\"==typeof e&&n(e),\"object\"==typeof e)for(let r=0;r<rD.length;r++){const o=rD[r];if(!t||!t[o])continue;const i=e[o];if(void 0!==i)return void n(i)}})()}),[JSON.stringify(e),t]),r}const aD=m.forwardRef(((e,t)=>{const{prefixCls:r,justify:n,align:o,className:i,style:a,children:s,gutter:l=0,wrap:c}=e,u=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"justify\",\"align\",\"className\",\"style\",\"children\",\"gutter\",\"wrap\"]),{getPrefixCls:d,direction:f}=m.useContext(Xo),h=function(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=(0,m.useRef)(t),n=pO(),o=nD();return Pi((()=>{const t=o.subscribe((t=>{r.current=t,e&&n()}));return()=>o.unsubscribe(t)}),[]),r.current}(!0,null),p=iD(o,h),g=iD(n,h),v=d(\"row\",r),[b,y,w]=Ak(v),x=function(e,t){const r=[void 0,void 0],n=Array.isArray(e)?e:[e,void 0],o=t||{xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0};return n.forEach(((e,t)=>{if(\"object\"==typeof e&&null!==e)for(let n=0;n<rD.length;n++){const i=rD[n];if(o[i]&&void 0!==e[i]){r[t]=e[i];break}}else r[t]=e})),r}(l,h),S=ze()(v,{[`${v}-no-wrap`]:!1===c,[`${v}-${g}`]:g,[`${v}-${p}`]:p,[`${v}-rtl`]:\"rtl\"===f},i,y,w),C={},k=null!=x[0]&&x[0]>0?x[0]/-2:void 0;k&&(C.marginLeft=k,C.marginRight=k);const[E,O]=x;C.rowGap=O;const A=m.useMemo((()=>({gutter:[E,O],wrap:c})),[E,O,c]);return b(m.createElement(oD.Provider,{value:A},m.createElement(\"div\",Object.assign({},u,{className:S,style:Object.assign(Object.assign({},C),a),ref:t}),s)))})),sD=aD;function lD(e){return\"number\"==typeof e?`${e} ${e} auto`:/^\\d+(\\.\\d+)?(px|em|rem|%)$/.test(e)?`0 0 ${e}`:e}const cD=[\"xs\",\"sm\",\"md\",\"lg\",\"xl\",\"xxl\"],uD=m.forwardRef(((e,t)=>{const{getPrefixCls:r,direction:n}=m.useContext(Xo),{gutter:o,wrap:i}=m.useContext(oD),{prefixCls:a,span:s,order:l,offset:c,push:u,pull:d,className:f,children:h,flex:p,style:g}=e,v=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"span\",\"order\",\"offset\",\"push\",\"pull\",\"className\",\"children\",\"flex\",\"style\"]),b=r(\"col\",a),[y,w,x]=jk(b),S={};let C={};cD.forEach((t=>{let r={};const o=e[t];\"number\"==typeof o?r.span=o:\"object\"==typeof o&&(r=o||{}),delete v[t],C=Object.assign(Object.assign({},C),{[`${b}-${t}-${r.span}`]:void 0!==r.span,[`${b}-${t}-order-${r.order}`]:r.order||0===r.order,[`${b}-${t}-offset-${r.offset}`]:r.offset||0===r.offset,[`${b}-${t}-push-${r.push}`]:r.push||0===r.push,[`${b}-${t}-pull-${r.pull}`]:r.pull||0===r.pull,[`${b}-rtl`]:\"rtl\"===n}),r.flex&&(C[`${b}-${t}-flex`]=!0,S[`--${b}-${t}-flex`]=lD(r.flex))}));const k=ze()(b,{[`${b}-${s}`]:void 0!==s,[`${b}-order-${l}`]:l,[`${b}-offset-${c}`]:c,[`${b}-push-${u}`]:u,[`${b}-pull-${d}`]:d},f,C,w,x),E={};if(o&&o[0]>0){const e=o[0]/2;E.paddingLeft=e,E.paddingRight=e}return p&&(E.flex=lD(p),!1!==i||E.minWidth||(E.minWidth=0)),y(m.createElement(\"div\",Object.assign({},v,{style:Object.assign(Object.assign(Object.assign({},E),g),S),className:k,ref:t}),h))})),dD=uD,fD=e=>{const{formItemCls:t}=e;return{\"@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none)\":{[`${t}-control`]:{display:\"flex\"}}}},hD=Fu([\"Form\",\"item-item\"],((e,t)=>{let{rootPrefixCls:r}=t;const n=IF(e,r);return[fD(n)]}));const pD=e=>{const{prefixCls:t,status:r,labelCol:n,wrapperCol:o,children:i,errors:a,warnings:s,_internalItemRender:l,extra:c,help:u,fieldId:d,marginBottom:f,onErrorVisibleChanged:h,label:p}=e,g=`${t}-item`,v=m.useContext(Ef),b=m.useMemo((()=>{let e=Object.assign({},o||v.wrapperCol||{});return null!==p||n||o||!v.labelCol||[void 0,\"xs\",\"sm\",\"md\",\"lg\",\"xl\",\"xxl\"].forEach((t=>{const r=t?[t]:[],n=Ha(v.labelCol,r),o=\"object\"==typeof n?n:{},i=Ha(e,r);\"span\"in o&&!(\"offset\"in(\"object\"==typeof i?i:{}))&&o.span<24&&(e=Va(e,[].concat(r,[\"offset\"]),o.span))})),e}),[o,v]),y=ze()(`${g}-control`,b.className),w=m.useMemo((()=>{const{labelCol:e,wrapperCol:t}=v;return function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(v,[\"labelCol\",\"wrapperCol\"])}),[v]),x=m.useRef(null),[S,C]=m.useState(0);Pi((()=>{c&&x.current?C(x.current.clientHeight):C(0)}),[c]);const k=m.createElement(\"div\",{className:`${g}-control-input`},m.createElement(\"div\",{className:`${g}-control-input-content`},i)),E=m.useMemo((()=>({prefixCls:t,status:r})),[t,r]),O=null!==f||a.length||s.length?m.createElement(Tf.Provider,{value:E},m.createElement(BF,{fieldId:d,errors:a,warnings:s,help:u,helpStatus:r,className:`${g}-explain-connected`,onVisibleChanged:h})):null,A={};d&&(A.id=`${d}_extra`);const T=c?m.createElement(\"div\",Object.assign({},A,{className:`${g}-extra`,ref:x}),c):null,j=O||T?m.createElement(\"div\",{className:`${g}-additional`,style:f?{minHeight:f+S}:{}},O,T):null,P=l&&\"pro_table_render\"===l.mark&&l.render?l.render(e,{input:k,errorList:O,extra:T}):m.createElement(m.Fragment,null,k,j);return m.createElement(Ef.Provider,{value:w},m.createElement(dD,Object.assign({},b,{className:y}),P),m.createElement(hD,{prefixCls:t}))},mD={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z\"}},{tag:\"path\",attrs:{d:\"M623.6 316.7C593.6 290.4 554 276 512 276s-81.6 14.5-111.6 40.7C369.2 344 352 380.7 352 420v7.6c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V420c0-44.1 43.1-80 96-80s96 35.9 96 80c0 31.1-22 59.6-56.1 72.7-21.2 8.1-39.2 22.3-52.1 40.9-13.1 19-19.9 41.8-19.9 64.9V620c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-22.7a48.3 48.3 0 0130.9-44.8c59-22.7 97.1-74.7 97.1-132.5.1-39.3-17.1-76-48.3-103.3zM472 732a40 40 0 1080 0 40 40 0 10-80 0z\"}}]},name:\"question-circle\",theme:\"outlined\"};var gD=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:mD}))};const vD=m.forwardRef(gD);const bD=e=>{let{prefixCls:t,label:r,htmlFor:n,labelCol:o,labelAlign:i,colon:a,required:s,requiredMark:l,tooltip:c,vertical:u}=e;var d;const[f]=Gv(\"Form\"),{labelAlign:h,labelCol:p,labelWrap:g,colon:v}=m.useContext(Ef);if(!r)return null;const b=o||p||{},y=i||h,w=`${t}-item-label`,x=ze()(w,\"left\"===y&&`${w}-left`,b.className,{[`${w}-wrap`]:!!g});let S=r;const C=!0===a||!1!==v&&!1!==a;C&&!u&&\"string\"==typeof r&&r.trim()&&(S=r.replace(/[:|：]\\s*$/,\"\"));const k=function(e){return null==e?null:\"object\"!=typeof e||(0,m.isValidElement)(e)?{title:e}:e}(c);if(k){const{icon:e=m.createElement(vD,null)}=k,r=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(k,[\"icon\"]),n=m.createElement(im,Object.assign({},r),m.cloneElement(e,{className:`${t}-item-tooltip`,title:\"\",onClick:e=>{e.preventDefault()},tabIndex:null}));S=m.createElement(m.Fragment,null,S,n)}const E=\"optional\"===l,O=\"function\"==typeof l,A=!1===l;let T;O?S=l(S,{required:!!s}):E&&!s&&(S=m.createElement(m.Fragment,null,S,m.createElement(\"span\",{className:`${t}-item-optional`,title:\"\"},(null==f?void 0:f.optional)||(null===(d=ts.Form)||void 0===d?void 0:d.optional)))),A?T=\"hidden\":(E||O)&&(T=\"optional\");const j=ze()({[`${t}-item-required`]:s,[`${t}-item-required-mark-${T}`]:T,[`${t}-item-no-colon`]:!C});return m.createElement(dD,Object.assign({},b,{className:x}),m.createElement(\"label\",{htmlFor:n,className:j,title:\"string\"==typeof r?r:\"\"},S))},yD={success:Fc,warning:Uc,error:Lc,validating:Xc};function wD(e){let{children:t,errors:r,warnings:n,hasFeedback:o,validateStatus:i,prefixCls:a,meta:s,noStyle:l}=e;const c=`${a}-item`,{feedbackIcons:u}=m.useContext(Ef),d=XF(r,n,s,null,!!o,i),{isFormItemInput:f,status:h,hasFeedback:p,feedbackIcon:g}=m.useContext(jf),v=m.useMemo((()=>{var e;let t;if(o){const i=!0!==o&&o.icons||u,a=d&&(null===(e=null==i?void 0:i({status:d,errors:r,warnings:n}))||void 0===e?void 0:e[d]),s=d&&yD[d];t=!1!==a&&s?m.createElement(\"span\",{className:ze()(`${c}-feedback-icon`,`${c}-feedback-icon-${d}`)},a||m.createElement(s,null)):null}const i={status:d||\"\",errors:r,warnings:n,hasFeedback:!!o,feedbackIcon:t,isFormItemInput:!0};return l&&(i.status=(null!=d?d:h)||\"\",i.isFormItemInput=f,i.hasFeedback=!!(null!=o?o:p),i.feedbackIcon=void 0!==o?i.feedbackIcon:g),i}),[d,o,l,f,h]);return m.createElement(jf.Provider,{value:v},t)}function xD(e){const{prefixCls:t,className:r,rootClassName:n,style:o,help:i,errors:a,warnings:s,validateStatus:l,meta:c,hasFeedback:u,hidden:d,children:f,fieldId:h,required:p,isRequired:g,onSubItemMetaChange:v,layout:b}=e,y=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"className\",\"rootClassName\",\"style\",\"help\",\"errors\",\"warnings\",\"validateStatus\",\"meta\",\"hasFeedback\",\"hidden\",\"children\",\"fieldId\",\"required\",\"isRequired\",\"onSubItemMetaChange\",\"layout\"]),w=`${t}-item`,{requiredMark:x,vertical:S}=m.useContext(Ef),C=S||\"vertical\"===b,k=m.useRef(null),E=SF(a),O=SF(s),A=null!=i,T=!!(A||a.length||s.length),j=!!k.current&&rp(k.current),[P,M]=m.useState(null);Pi((()=>{if(T&&k.current){const e=getComputedStyle(k.current);M(parseInt(e.marginBottom,10))}}),[T,j]);const R=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return XF(e?E:c.errors,e?O:c.warnings,c,\"\",!!u,l)}(),_=ze()(w,r,n,{[`${w}-with-help`]:A||E.length||O.length,[`${w}-has-feedback`]:R&&u,[`${w}-has-success`]:\"success\"===R,[`${w}-has-warning`]:\"warning\"===R,[`${w}-has-error`]:\"error\"===R,[`${w}-is-validating`]:\"validating\"===R,[`${w}-hidden`]:d,[`${w}-${b}`]:b});return m.createElement(\"div\",{className:_,style:o,ref:k},m.createElement(sD,Object.assign({className:`${w}-row`},kf(y,[\"_internalItemRender\",\"colon\",\"dependencies\",\"extra\",\"fieldKey\",\"getValueFromEvent\",\"getValueProps\",\"htmlFor\",\"id\",\"initialValue\",\"isListField\",\"label\",\"labelAlign\",\"labelCol\",\"labelWrap\",\"messageVariables\",\"name\",\"normalize\",\"noStyle\",\"preserve\",\"requiredMark\",\"rules\",\"shouldUpdate\",\"trigger\",\"tooltip\",\"validateFirst\",\"validateTrigger\",\"valuePropName\",\"wrapperCol\",\"validateDebounce\"])),m.createElement(bD,Object.assign({htmlFor:h},e,{requiredMark:x,required:null!=p?p:g,prefixCls:t,vertical:C})),m.createElement(pD,Object.assign({},e,c,{errors:E,warnings:O,prefixCls:t,status:R,help:i,marginBottom:P,onErrorVisibleChanged:e=>{e||M(null)}}),m.createElement(Of.Provider,{value:v},m.createElement(wD,{prefixCls:t,meta:c,errors:c.errors,warnings:c.warnings,hasFeedback:u,validateStatus:R},f)))),!!P&&m.createElement(\"div\",{className:`${w}-margin-offset`,style:{marginBottom:-P}}))}const SD=m.memo((e=>{let{children:t}=e;return t}),((e,t)=>function(e,t){const r=Object.keys(e),n=Object.keys(t);return r.length===n.length&&r.every((r=>{const n=e[r],o=t[r];return n===o||\"function\"==typeof n||\"function\"==typeof o}))}(e.control,t.control)&&e.update===t.update&&e.childProps.length===t.childProps.length&&e.childProps.every(((e,r)=>e===t.childProps[r])))),CD=function(e){const{name:t,noStyle:r,className:n,dependencies:o,prefixCls:i,shouldUpdate:a,rules:s,children:l,required:c,label:u,messageVariables:d,trigger:f=\"onChange\",validateTrigger:h,hidden:p,help:g,layout:v}=e,{getPrefixCls:b}=m.useContext(Xo),{name:y}=m.useContext(Ef),w=function(e){if(\"function\"==typeof e)return e;const t=sd(e);return t.length<=1?t[0]:t}(l),x=\"function\"==typeof w,S=m.useContext(Of),{validateTrigger:C}=m.useContext(ud),k=void 0!==h?h:C,E=!(null==t),O=b(\"form\",i),A=du(O),[T,j,P]=NF(O,A);Ya();const M=m.useContext(dd),R=m.useRef(null),[_,I]=function(){const[e,t]=m.useState({}),r=m.useRef(null),n=m.useRef([]),o=m.useRef(!1);return m.useEffect((()=>(o.current=!1,()=>{o.current=!0,Ol.cancel(r.current),r.current=null})),[]),[e,function(e){o.current||(null===r.current&&(n.current=[],r.current=Ol((()=>{r.current=null,t((e=>{let t=e;return n.current.forEach((e=>{t=e(t)})),t}))}))),n.current.push(e))}]}(),[N,F]=Gs((()=>({errors:[],warnings:[],touched:!1,validating:!1,name:[],validated:!1}))),D=(e,t)=>{I((r=>{const n=Object.assign({},r),o=[].concat(Vo(e.name.slice(0,-1)),Vo(t)).join(\"__SPLIT__\");return e.destroy?delete n[o]:n[o]=e,n}))},[B,L]=m.useMemo((()=>{const e=Vo(N.errors),t=Vo(N.warnings);return Object.values(_).forEach((r=>{e.push.apply(e,Vo(r.errors||[])),t.push.apply(t,Vo(r.warnings||[]))})),[e,t]}),[_,N.errors,N.warnings]),z=function(){const{itemRef:e}=m.useContext(Ef),t=m.useRef({});return function(r,n){const o=n&&\"object\"==typeof n&&An(n),i=r.join(\"_\");return t.current.name===i&&t.current.originRef===o||(t.current.name=i,t.current.originRef=o,t.current.ref=Cn(e(r),o)),t.current.ref}}();function H(t,o,i){return r&&!p?m.createElement(wD,{prefixCls:O,hasFeedback:e.hasFeedback,validateStatus:e.validateStatus,meta:N,errors:B,warnings:L,noStyle:!0},t):m.createElement(xD,Object.assign({key:\"row\"},e,{className:ze()(n,P,A,j),prefixCls:O,fieldId:o,isRequired:i,errors:B,warnings:L,meta:N,onSubItemMetaChange:D,layout:v}),t)}if(!E&&!x&&!o)return T(H(w));let U={};return\"string\"==typeof u?U.label=u:t&&(U.label=String(t)),d&&(U=Object.assign(Object.assign({},U),d)),T(m.createElement(af,Object.assign({},e,{messageVariables:U,trigger:f,validateTrigger:k,onMetaChange:e=>{const t=null==M?void 0:M.getKey(e.name);if(F(e.destroy?{errors:[],warnings:[],touched:!1,validating:!1,name:[],validated:!1}:e,!0),r&&!1!==g&&S){let r=e.name;if(e.destroy)r=R.current||r;else if(void 0!==t){const[e,n]=t;r=[e].concat(Vo(n)),R.current=r}S(e,r)}}}),((r,n,i)=>{const l=qF(t).length&&n?n.name:[],u=KF(l,y),d=void 0!==c?c:!!(null==s?void 0:s.some((e=>{if(e&&\"object\"==typeof e&&e.required&&!e.warningOnly)return!0;if(\"function\"==typeof e){const t=e(i);return(null==t?void 0:t.required)&&!(null==t?void 0:t.warningOnly)}return!1}))),h=Object.assign({},r);let p=null;if(Array.isArray(w)&&E)p=w;else if(x&&(!a&&!o||E));else if(!o||x||E)if(m.isValidElement(w)){const t=Object.assign(Object.assign({},w.props),h);if(t.id||(t.id=u),g||B.length>0||L.length>0||e.extra){const r=[];(g||B.length>0)&&r.push(`${u}_help`),e.extra&&r.push(`${u}_extra`),t[\"aria-describedby\"]=r.join(\" \")}B.length>0&&(t[\"aria-invalid\"]=\"true\"),d&&(t[\"aria-required\"]=\"true\"),En(w)&&(t.ref=z(l,w)),new Set([].concat(Vo(qF(f)),Vo(qF(k)))).forEach((e=>{t[e]=function(){for(var t,r,n,o,i,a=arguments.length,s=new Array(a),l=0;l<a;l++)s[l]=arguments[l];null===(n=h[e])||void 0===n||(t=n).call.apply(t,[h].concat(s)),null===(i=(o=w.props)[e])||void 0===i||(r=i).call.apply(r,[o].concat(s))}}));const r=[t[\"aria-required\"],t[\"aria-invalid\"],t[\"aria-describedby\"]];p=m.createElement(SD,{control:h,update:w,childProps:r},th(w,t))}else p=x&&(a||o)&&!E?w(i):w;return H(p,u,d)})))};CD.useStatus=tD;const kD=CD;const ED=JF;ED.Item=kD,ED.List=e=>{var{prefixCls:t,children:r}=e,n=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"children\"]);const{getPrefixCls:o}=m.useContext(Xo),i=o(\"form\",t),a=m.useMemo((()=>({prefixCls:i,status:\"error\"})),[i]);return m.createElement(sf,Object.assign({},n),((e,t,n)=>m.createElement(Tf.Provider,{value:a},r(e.map((e=>Object.assign(Object.assign({},e),{fieldKey:e.key}))),t,{errors:n.errors,warnings:n.warnings}))))},ED.ErrorList=BF,ED.useForm=ZF,ED.useFormInstance=function(){const{form:e}=m.useContext(Ef);return e},ED.useWatch=xf,ED.Provider=Af,ED.create=()=>{};const OD=ED,AD=e=>{const{componentCls:t,paddingXS:r}=e;return{[t]:{display:\"inline-flex\",alignItems:\"center\",flexWrap:\"nowrap\",columnGap:r,[`${t}-input-wrapper`]:{position:\"relative\",[`${t}-mask-icon`]:{position:\"absolute\",zIndex:\"1\",top:\"50%\",right:\"50%\",transform:\"translate(50%, -50%)\",pointerEvents:\"none\"},[`${t}-mask-input`]:{color:\"transparent\",caretColor:\"var(--ant-color-text)\"},[`${t}-mask-input[type=number]::-webkit-inner-spin-button`]:{\"-webkit-appearance\":\"none\",margin:0},[`${t}-mask-input[type=number]`]:{\"-moz-appearance\":\"textfield\"}},\"&-rtl\":{direction:\"rtl\"},[`${t}-input`]:{textAlign:\"center\",paddingInline:e.paddingXXS},[`&${t}-sm ${t}-input`]:{paddingInline:e.calc(e.paddingXXS).div(2).equal()},[`&${t}-lg ${t}-input`]:{paddingInline:e.paddingXS}}}},TD=Iu([\"Input\",\"OTP\"],(e=>{const t=Au(e,Gy(e));return[AD(t)]}),qy);const jD=m.forwardRef(((e,t)=>{const{className:r,value:n,onChange:o,onActiveChange:i,index:a,mask:s}=e,l=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"className\",\"value\",\"onChange\",\"onActiveChange\",\"index\",\"mask\"]),{getPrefixCls:c}=m.useContext(Xo),u=c(\"otp\"),d=\"string\"==typeof s?s:n,f=m.useRef(null);m.useImperativeHandle(t,(()=>f.current));const h=()=>{Ol((()=>{var e;const t=null===(e=f.current)||void 0===e?void 0:e.input;document.activeElement===t&&t&&t.select()}))};return m.createElement(\"span\",{className:`${u}-input-wrapper`,role:\"presentation\"},s&&\"\"!==n&&void 0!==n&&m.createElement(\"span\",{className:`${u}-mask-icon`,\"aria-hidden\":\"true\"},d),m.createElement(Iw,Object.assign({\"aria-label\":`OTP Input ${a+1}`,type:!0===s?\"password\":\"text\"},l,{ref:f,value:n,onInput:e=>{o(a,e.target.value)},onFocus:h,onKeyDown:e=>{const{key:t,ctrlKey:r,metaKey:n}=e;\"ArrowLeft\"===t?i(a-1):\"ArrowRight\"===t?i(a+1):\"z\"===t&&(r||n)&&e.preventDefault(),h()},onKeyUp:e=>{\"Backspace\"!==e.key||n||i(a-1),h()},onMouseDown:h,onMouseUp:h,className:ze()(r,{[`${u}-mask-input`]:s})})))})),PD=jD;function MD(e){return(e||\"\").split(\"\")}const RD=e=>{const{index:t,prefixCls:r,separator:n}=e,o=\"function\"==typeof n?n(t):n;return o?m.createElement(\"span\",{className:`${r}-separator`},o):null},_D=m.forwardRef(((e,t)=>{const{prefixCls:r,length:n=6,size:o,defaultValue:i,value:a,onChange:s,formatter:l,separator:c,variant:u,disabled:d,status:f,autoFocus:h,mask:p,type:g,onInput:v,inputMode:b}=e,y=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"length\",\"size\",\"defaultValue\",\"value\",\"onChange\",\"formatter\",\"separator\",\"variant\",\"disabled\",\"status\",\"autoFocus\",\"mask\",\"type\",\"onInput\",\"inputMode\"]),{getPrefixCls:w,direction:x}=m.useContext(Xo),S=w(\"otp\",r),C=Jc(y,{aria:!0,data:!0,attr:!0}),[k,E,O]=TD(S),A=Rf((e=>null!=o?o:e)),T=m.useContext(jf),j=qf(T.status,f),P=m.useMemo((()=>Object.assign(Object.assign({},T),{status:j,hasFeedback:!1,feedbackIcon:null})),[T,j]),M=m.useRef(null),R=m.useRef({});m.useImperativeHandle(t,(()=>({focus:()=>{var e;null===(e=R.current[0])||void 0===e||e.focus()},blur:()=>{var e;for(let t=0;t<n;t+=1)null===(e=R.current[t])||void 0===e||e.blur()},nativeElement:M.current})));const _=e=>l?l(e):e,[I,N]=m.useState((()=>MD(_(i||\"\"))));m.useEffect((()=>{void 0!==a&&N(MD(a))}),[a]);const F=Ws((e=>{N(e),v&&v(e),s&&e.length===n&&e.every((e=>e))&&e.some(((e,t)=>I[t]!==e))&&s(e.join(\"\"))})),D=Ws(((e,t)=>{let r=Vo(I);for(let t=0;t<e;t+=1)r[t]||(r[t]=\"\");t.length<=1?r[e]=t:r=r.slice(0,e).concat(MD(t)),r=r.slice(0,n);for(let e=r.length-1;e>=0&&!r[e];e-=1)r.pop();const o=_(r.map((e=>e||\" \")).join(\"\"));return r=MD(o).map(((e,t)=>\" \"!==e||r[t]?e:r[t])),r})),B=(e,t)=>{var r;const o=D(e,t),i=Math.min(e+t.length,n-1);i!==e&&void 0!==o[e]&&(null===(r=R.current[i])||void 0===r||r.focus()),F(o)},L=e=>{var t;null===(t=R.current[e])||void 0===t||t.focus()},z={variant:u,disabled:d,status:j,mask:p,type:g,inputMode:b};return k(m.createElement(\"div\",Object.assign({},C,{ref:M,className:ze()(S,{[`${S}-sm`]:\"small\"===A,[`${S}-lg`]:\"large\"===A,[`${S}-rtl`]:\"rtl\"===x},O,E),role:\"group\"}),m.createElement(jf.Provider,{value:P},Array.from({length:n}).map(((e,t)=>{const r=`otp-${t}`,o=I[t]||\"\";return m.createElement(m.Fragment,{key:r},m.createElement(PD,Object.assign({ref:e=>{R.current[t]=e},index:t,size:A,htmlSize:1,className:`${S}-input`,onChange:B,value:o,onActiveChange:L,autoFocus:0===t&&h},z)),t<n-1&&m.createElement(RD,{separator:c,index:t,prefixCls:S}))})))))})),ID=_D,ND={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M942.2 486.2Q889.47 375.11 816.7 305l-50.88 50.88C807.31 395.53 843.45 447.4 874.7 512 791.5 684.2 673.4 766 512 766q-72.67 0-133.87-22.38L323 798.75Q408 838 512 838q288.3 0 430.2-300.3a60.29 60.29 0 000-51.5zm-63.57-320.64L836 122.88a8 8 0 00-11.32 0L715.31 232.2Q624.86 186 512 186q-288.3 0-430.2 300.3a60.3 60.3 0 000 51.5q56.69 119.4 136.5 191.41L112.48 835a8 8 0 000 11.31L155.17 889a8 8 0 0011.31 0l712.15-712.12a8 8 0 000-11.32zM149.3 512C232.6 339.8 350.7 258 512 258c54.54 0 104.13 9.36 149.12 28.39l-70.3 70.3a176 176 0 00-238.13 238.13l-83.42 83.42C223.1 637.49 183.3 582.28 149.3 512zm246.7 0a112.11 112.11 0 01146.2-106.69L401.31 546.2A112 112 0 01396 512z\"}},{tag:\"path\",attrs:{d:\"M508 624c-3.46 0-6.87-.16-10.25-.47l-52.82 52.82a176.09 176.09 0 00227.42-227.42l-52.82 52.82c.31 3.38.47 6.79.47 10.25a111.94 111.94 0 01-112 112z\"}}]},name:\"eye-invisible\",theme:\"outlined\"};var FD=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:ND}))};const DD=m.forwardRef(FD);const BD=e=>e?m.createElement(PO,null):m.createElement(DD,null),LD={click:\"onClick\",hover:\"onMouseOver\"},zD=m.forwardRef(((e,t)=>{const{disabled:r,action:n=\"click\",visibilityToggle:o=!0,iconRender:i=BD}=e,a=m.useContext(Ss),s=null!=r?r:a,l=\"object\"==typeof o&&void 0!==o.visible,[c,u]=(0,m.useState)((()=>!!l&&o.visible)),d=(0,m.useRef)(null);m.useEffect((()=>{l&&u(o.visible)}),[l,o]);const f=Rw(d),h=()=>{var e;if(s)return;c&&f();const t=!c;u(t),\"object\"==typeof o&&(null===(e=o.onVisibleChange)||void 0===e||e.call(o,t))},{className:p,prefixCls:g,inputPrefixCls:v,size:b}=e,y=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"className\",\"prefixCls\",\"inputPrefixCls\",\"size\"]),{getPrefixCls:w}=m.useContext(Xo),x=w(\"input\",v),S=w(\"input-password\",g),C=o&&(e=>{const t=LD[n]||\"\",r=i(c),o={[t]:h,className:`${e}-icon`,key:\"passwordIcon\",onMouseDown:e=>{e.preventDefault()},onMouseUp:e=>{e.preventDefault()}};return m.cloneElement(m.isValidElement(r)?r:m.createElement(\"span\",null,r),o)})(S),k=ze()(S,p,{[`${S}-${b}`]:!!b}),E=Object.assign(Object.assign({},kf(y,[\"suffix\",\"iconRender\",\"visibilityToggle\"])),{type:c?\"text\":\"password\",className:k,prefixCls:x,suffix:C});return b&&(E.size=b),m.createElement(Iw,Object.assign({ref:Cn(t,d)},E))})),HD=zD;const UD=m.forwardRef(((e,t)=>{const{prefixCls:r,inputPrefixCls:n,className:o,size:i,suffix:a,enterButton:s=!1,addonAfter:l,loading:c,disabled:u,onSearch:d,onChange:f,onCompositionStart:h,onCompositionEnd:p}=e,g=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"inputPrefixCls\",\"className\",\"size\",\"suffix\",\"enterButton\",\"addonAfter\",\"loading\",\"disabled\",\"onSearch\",\"onChange\",\"onCompositionStart\",\"onCompositionEnd\"]),{getPrefixCls:v,direction:b}=m.useContext(Xo),y=m.useRef(!1),w=v(\"input-search\",r),x=v(\"input\",n),{compactSize:S}=Lf(w,b),C=Rf((e=>{var t;return null!==(t=null!=i?i:S)&&void 0!==t?t:e})),k=m.useRef(null),E=e=>{var t;document.activeElement===(null===(t=k.current)||void 0===t?void 0:t.input)&&e.preventDefault()},O=e=>{var t,r;d&&d(null===(r=null===(t=k.current)||void 0===t?void 0:t.input)||void 0===r?void 0:r.value,e,{source:\"input\"})},A=\"boolean\"==typeof s?m.createElement(ry,null):null,T=`${w}-button`;let j;const P=s||{},M=P.type&&!0===P.type.__ANT_BUTTON;j=M||\"button\"===P.type?th(P,Object.assign({onMouseDown:E,onClick:e=>{var t,r;null===(r=null===(t=null==P?void 0:P.props)||void 0===t?void 0:t.onClick)||void 0===r||r.call(t,e),O(e)},key:\"enterButton\"},M?{className:T,size:C}:{})):m.createElement(AC,{className:T,type:s?\"primary\":void 0,size:C,disabled:u,key:\"enterButton\",onMouseDown:E,onClick:O,loading:c,icon:A},s),l&&(j=[j,th(l,{key:\"addonAfter\"})]);const R=ze()(w,{[`${w}-rtl`]:\"rtl\"===b,[`${w}-${C}`]:!!C,[`${w}-with-button`]:!!s},o),_=Object.assign(Object.assign({},g),{className:R,prefixCls:x,type:\"search\"});return m.createElement(Iw,Object.assign({ref:Cn(k,t),onPressEnter:e=>{y.current||c||O(e)}},_,{size:C,onCompositionStart:e=>{y.current=!0,null==h||h(e)},onCompositionEnd:e=>{y.current=!1,null==p||p(e)},addonAfter:j,suffix:a,onChange:e=>{(null==e?void 0:e.target)&&\"click\"===e.type&&d&&d(e.target.value,e,{source:\"clear\"}),null==f||f(e)},disabled:u}))})),VD=UD;var WD,GD=[\"letter-spacing\",\"line-height\",\"padding-top\",\"padding-bottom\",\"font-family\",\"font-weight\",\"font-size\",\"font-variant\",\"text-rendering\",\"text-transform\",\"width\",\"text-indent\",\"padding-left\",\"padding-right\",\"border-width\",\"box-sizing\",\"word-break\",\"white-space\"],qD={};var KD=[\"prefixCls\",\"defaultValue\",\"value\",\"autoSize\",\"onResize\",\"className\",\"style\",\"disabled\",\"onChange\",\"onInternalAutoSize\"],XD=m.forwardRef((function(e,t){var r=e,n=r.prefixCls,o=r.defaultValue,i=r.value,a=r.autoSize,s=r.onResize,l=r.className,c=r.style,u=r.disabled,d=r.onChange,f=(r.onInternalAutoSize,Be(r,KD)),h=Ie(Ks(o,{value:i,postState:function(e){return null!=e?e:\"\"}}),2),p=h[0],g=h[1],v=m.useRef();m.useImperativeHandle(t,(function(){return{textArea:v.current}}));var b=Ie(m.useMemo((function(){return a&&\"object\"===Ne(a)?[a.minRows,a.maxRows]:[]}),[a]),2),y=b[0],w=b[1],x=!!a,S=Ie(m.useState(2),2),C=S[0],k=S[1],E=Ie(m.useState(),2),O=E[0],A=E[1],T=function(){k(0)};Pi((function(){x&&T()}),[i,y,w,x]),Pi((function(){if(0===C)k(1);else if(1===C){var e=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;WD||((WD=document.createElement(\"textarea\")).setAttribute(\"tab-index\",\"-1\"),WD.setAttribute(\"aria-hidden\",\"true\"),WD.setAttribute(\"name\",\"hiddenTextarea\"),document.body.appendChild(WD)),e.getAttribute(\"wrap\")?WD.setAttribute(\"wrap\",e.getAttribute(\"wrap\")):WD.removeAttribute(\"wrap\");var o=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=e.getAttribute(\"id\")||e.getAttribute(\"data-reactid\")||e.getAttribute(\"name\");if(t&&qD[r])return qD[r];var n=window.getComputedStyle(e),o=n.getPropertyValue(\"box-sizing\")||n.getPropertyValue(\"-moz-box-sizing\")||n.getPropertyValue(\"-webkit-box-sizing\"),i=parseFloat(n.getPropertyValue(\"padding-bottom\"))+parseFloat(n.getPropertyValue(\"padding-top\")),a=parseFloat(n.getPropertyValue(\"border-bottom-width\"))+parseFloat(n.getPropertyValue(\"border-top-width\")),s={sizingStyle:GD.map((function(e){return\"\".concat(e,\":\").concat(n.getPropertyValue(e))})).join(\";\"),paddingSize:i,borderSize:a,boxSizing:o};return t&&r&&(qD[r]=s),s}(e,t),i=o.paddingSize,a=o.borderSize,s=o.boxSizing,l=o.sizingStyle;WD.setAttribute(\"style\",\"\".concat(l,\";\").concat(\"\\n  min-height:0 !important;\\n  max-height:none !important;\\n  height:0 !important;\\n  visibility:hidden !important;\\n  overflow:hidden !important;\\n  position:absolute !important;\\n  z-index:-1000 !important;\\n  top:0 !important;\\n  right:0 !important;\\n  pointer-events: none !important;\\n\")),WD.value=e.value||e.placeholder||\"\";var c,u=void 0,d=void 0,f=WD.scrollHeight;if(\"border-box\"===s?f+=a:\"content-box\"===s&&(f-=i),null!==r||null!==n){WD.value=\" \";var h=WD.scrollHeight-i;null!==r&&(u=h*r,\"border-box\"===s&&(u=u+i+a),f=Math.max(u,f)),null!==n&&(d=h*n,\"border-box\"===s&&(d=d+i+a),c=f>d?\"\":\"hidden\",f=Math.min(d,f))}var p={height:f,overflowY:c,resize:\"none\"};return u&&(p.minHeight=u),d&&(p.maxHeight=d),p}(v.current,!1,y,w);k(2),A(e)}else!function(){try{if(document.activeElement===v.current){var e=v.current,t=e.selectionStart,r=e.selectionEnd,n=e.scrollTop;v.current.setSelectionRange(t,r),v.current.scrollTop=n}}catch(e){}}()}),[C]);var j=m.useRef(),P=function(){Ol.cancel(j.current)};m.useEffect((function(){return P}),[]);var M=x?O:null,R=At(At({},c),M);return 0!==C&&1!==C||(R.overflowY=\"hidden\",R.overflowX=\"hidden\"),m.createElement(Hh,{onResize:function(e){2===C&&(null==s||s(e),a&&(P(),j.current=Ol((function(){T()}))))},disabled:!(a||s)},m.createElement(\"textarea\",Te({},f,{ref:v,style:R,className:ze()(n,l,De({},\"\".concat(n,\"-disabled\"),u)),disabled:u,value:p,onChange:function(e){g(e.target.value),null==d||d(e)}})))}));const YD=XD;var $D=[\"defaultValue\",\"value\",\"onFocus\",\"onBlur\",\"onChange\",\"allowClear\",\"maxLength\",\"onCompositionStart\",\"onCompositionEnd\",\"suffix\",\"prefixCls\",\"showCount\",\"count\",\"className\",\"style\",\"disabled\",\"hidden\",\"classNames\",\"styles\",\"onResize\",\"onClear\",\"onPressEnter\",\"readOnly\",\"autoSize\",\"onKeyDown\"],ZD=m.forwardRef((function(e,t){var r,n=e.defaultValue,o=e.value,i=e.onFocus,a=e.onBlur,s=e.onChange,l=e.allowClear,c=e.maxLength,u=e.onCompositionStart,d=e.onCompositionEnd,f=e.suffix,h=e.prefixCls,p=void 0===h?\"rc-textarea\":h,g=e.showCount,v=e.count,b=e.className,y=e.style,w=e.disabled,x=e.hidden,S=e.classNames,C=e.styles,k=e.onResize,E=e.onClear,O=e.onPressEnter,A=e.readOnly,T=e.autoSize,j=e.onKeyDown,P=Be(e,$D),M=Ie(Ks(n,{value:o,defaultValue:n}),2),R=M[0],_=M[1],I=null==R?\"\":String(R),N=Ie(m.useState(!1),2),F=N[0],D=N[1],B=m.useRef(!1),L=Ie(m.useState(null),2),z=L[0],H=L[1],U=(0,m.useRef)(null),V=(0,m.useRef)(null),W=function(){var e;return null===(e=V.current)||void 0===e?void 0:e.textArea},G=function(){W().focus()};(0,m.useImperativeHandle)(t,(function(){var e;return{resizableTextArea:V.current,focus:G,blur:function(){W().blur()},nativeElement:(null===(e=U.current)||void 0===e?void 0:e.nativeElement)||W()}})),(0,m.useEffect)((function(){D((function(e){return!w&&e}))}),[w]);var q=Ie(m.useState(null),2),K=q[0],X=q[1];m.useEffect((function(){var e;K&&(e=W()).setSelectionRange.apply(e,Vo(K))}),[K]);var Y,$=Ry(v,g),Z=null!==(r=$.max)&&void 0!==r?r:c,Q=Number(Z)>0,J=$.strategy(I),ee=!!Z&&J>Z,te=function(e,t){var r=t;!B.current&&$.exceedFormatter&&$.max&&$.strategy(t)>$.max&&t!==(r=$.exceedFormatter(t,{max:$.max}))&&X([W().selectionStart||0,W().selectionEnd||0]),_(r),Ay(e.currentTarget,e,s,r)},re=f;$.show&&(Y=$.showFormatter?$.showFormatter({value:I,count:J,maxLength:Z}):\"\".concat(J).concat(Q?\" / \".concat(Z):\"\"),re=m.createElement(m.Fragment,null,re,m.createElement(\"span\",{className:ze()(\"\".concat(p,\"-data-count\"),null==S?void 0:S.count),style:null==C?void 0:C.count},Y)));var ne=!T&&!g&&!l;return m.createElement(Py,{ref:U,value:I,allowClear:l,handleReset:function(e){_(\"\"),G(),Ay(W(),e,s)},suffix:re,prefixCls:p,classNames:At(At({},S),{},{affixWrapper:ze()(null==S?void 0:S.affixWrapper,De(De({},\"\".concat(p,\"-show-count\"),g),\"\".concat(p,\"-textarea-allow-clear\"),l))}),disabled:w,focused:F,className:ze()(b,ee&&\"\".concat(p,\"-out-of-range\")),style:At(At({},y),z&&!ne?{height:\"auto\"}:{}),dataAttrs:{affixWrapper:{\"data-count\":\"string\"==typeof Y?Y:void 0}},hidden:x,readOnly:A,onClear:E},m.createElement(YD,Te({},P,{autoSize:T,maxLength:c,onKeyDown:function(e){\"Enter\"===e.key&&O&&O(e),null==j||j(e)},onChange:function(e){te(e,e.target.value)},onFocus:function(e){D(!0),null==i||i(e)},onBlur:function(e){D(!1),null==a||a(e)},onCompositionStart:function(e){B.current=!0,null==u||u(e)},onCompositionEnd:function(e){B.current=!1,te(e,e.currentTarget.value),null==d||d(e)},className:ze()(null==S?void 0:S.textarea),style:At(At({},null==C?void 0:C.textarea),{},{resize:null==y?void 0:y.resize}),disabled:w,prefixCls:p,onResize:function(e){var t;null==k||k(e),null!==(t=W())&&void 0!==t&&t.style.height&&H(!0)},ref:V,readOnly:A})))}));const QD=ZD,JD=e=>{const{componentCls:t,paddingLG:r}=e,n=`${t}-textarea`;return{[`textarea${t}`]:{maxWidth:\"100%\",height:\"auto\",minHeight:e.controlHeight,lineHeight:e.lineHeight,verticalAlign:\"bottom\",transition:`all ${e.motionDurationSlow}`,resize:\"vertical\",[`&${t}-mouse-active`]:{transition:`all ${e.motionDurationSlow}, height 0s, width 0s`}},[`${t}-textarea-affix-wrapper-resize-dirty`]:{width:\"auto\"},[n]:{position:\"relative\",\"&-show-count\":{[`${t}-data-count`]:{position:\"absolute\",bottom:e.calc(e.fontSize).mul(e.lineHeight).mul(-1).equal(),insetInlineEnd:0,color:e.colorTextDescription,whiteSpace:\"nowrap\",pointerEvents:\"none\"}},[`\\n        &-allow-clear > ${t},\\n        &-affix-wrapper${n}-has-feedback ${t}\\n      `]:{paddingInlineEnd:r},[`&-affix-wrapper${t}-affix-wrapper`]:{padding:0,[`> textarea${t}`]:{fontSize:\"inherit\",border:\"none\",outline:\"none\",background:\"transparent\",minHeight:e.calc(e.controlHeight).sub(e.calc(e.lineWidth).mul(2)).equal(),\"&:focus\":{boxShadow:\"none !important\"}},[`${t}-suffix`]:{margin:0,\"> *:not(:last-child)\":{marginInline:0},[`${t}-clear-icon`]:{position:\"absolute\",insetInlineEnd:e.paddingInline,insetBlockStart:e.paddingXS},[`${n}-suffix`]:{position:\"absolute\",top:0,insetInlineEnd:e.paddingInline,bottom:0,zIndex:1,display:\"inline-flex\",alignItems:\"center\",margin:\"auto\",pointerEvents:\"none\"}}},[`&-affix-wrapper${t}-affix-wrapper-rtl`]:{[`${t}-suffix`]:{[`${t}-data-count`]:{direction:\"ltr\",insetInlineStart:0}}},[`&-affix-wrapper${t}-affix-wrapper-sm`]:{[`${t}-suffix`]:{[`${t}-clear-icon`]:{insetInlineEnd:e.paddingInlineSM}}}}}},eB=Iu([\"Input\",\"TextArea\"],(e=>{const t=Au(e,Gy(e));return[JD(t)]}),qy,{resetFont:!1});const tB=(0,m.forwardRef)(((e,t)=>{var r;const{prefixCls:n,bordered:o=!0,size:i,disabled:a,status:s,allowClear:l,classNames:c,rootClassName:u,className:d,style:f,styles:h,variant:p,showCount:g,onMouseDown:v,onResize:b}=e,y=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"bordered\",\"size\",\"disabled\",\"status\",\"allowClear\",\"classNames\",\"rootClassName\",\"className\",\"style\",\"styles\",\"variant\",\"showCount\",\"onMouseDown\",\"onResize\"]),{getPrefixCls:w,direction:x,allowClear:S,autoComplete:C,className:k,style:E,classNames:O,styles:A}=Zo(\"textArea\"),T=m.useContext(Ss),j=null!=a?a:T,{status:P,hasFeedback:M,feedbackIcon:R}=m.useContext(jf),_=qf(P,s),I=m.useRef(null);m.useImperativeHandle(t,(()=>{var e;return{resizableTextArea:null===(e=I.current)||void 0===e?void 0:e.resizableTextArea,focus:e=>{var t,r;Ty(null===(r=null===(t=I.current)||void 0===t?void 0:t.resizableTextArea)||void 0===r?void 0:r.textArea,e)},blur:()=>{var e;return null===(e=I.current)||void 0===e?void 0:e.blur()}}}));const N=w(\"input\",n),F=du(N),[D,B,L]=ww(N,u),[z]=eB(N,F),{compactSize:H,compactItemClassnames:U}=Lf(N,x),V=Rf((e=>{var t;return null!==(t=null!=i?i:H)&&void 0!==t?t:e})),[W,G]=tb(\"textArea\",p,o),q=Mw(null!=l?l:S),[K,X]=m.useState(!1),[Y,$]=m.useState(!1);return D(z(m.createElement(QD,Object.assign({autoComplete:C},y,{style:Object.assign(Object.assign({},E),f),styles:Object.assign(Object.assign({},A),h),disabled:j,allowClear:q,className:ze()(L,F,d,u,U,k,Y&&`${N}-textarea-affix-wrapper-resize-dirty`),classNames:Object.assign(Object.assign(Object.assign({},c),O),{textarea:ze()({[`${N}-sm`]:\"small\"===V,[`${N}-lg`]:\"large\"===V},B,null==c?void 0:c.textarea,O.textarea,K&&`${N}-mouse-active`),variant:ze()({[`${N}-${W}`]:G},Gf(N,_)),affixWrapper:ze()(`${N}-textarea-affix-wrapper`,{[`${N}-affix-wrapper-rtl`]:\"rtl\"===x,[`${N}-affix-wrapper-sm`]:\"small\"===V,[`${N}-affix-wrapper-lg`]:\"large\"===V,[`${N}-textarea-show-count`]:g||(null===(r=e.count)||void 0===r?void 0:r.show)},B)}),prefixCls:N,suffix:M&&m.createElement(\"span\",{className:`${N}-textarea-suffix`},R),showCount:g,ref:I,onResize:e=>{var t,r;if(null==b||b(e),K&&\"function\"==typeof getComputedStyle){const e=null===(r=null===(t=I.current)||void 0===t?void 0:t.nativeElement)||void 0===r?void 0:r.querySelector(\"textarea\");e&&\"both\"===getComputedStyle(e).resize&&$(!0)}},onMouseDown:e=>{X(!0),null==v||v(e);const t=()=>{X(!1),document.removeEventListener(\"mouseup\",t)};document.addEventListener(\"mouseup\",t)}}))))})),rB=tB,nB=Iw;nB.Group=e=>{const{getPrefixCls:t,direction:r}=(0,m.useContext)(Xo),{prefixCls:n,className:o}=e,i=t(\"input-group\",n),a=t(\"input\"),[s,l,c]=xw(a),u=ze()(i,c,{[`${i}-lg`]:\"large\"===e.size,[`${i}-sm`]:\"small\"===e.size,[`${i}-compact`]:e.compact,[`${i}-rtl`]:\"rtl\"===r},l,o),d=(0,m.useContext)(jf),f=(0,m.useMemo)((()=>Object.assign(Object.assign({},d),{isFormItemInput:!1})),[d]);return s(m.createElement(\"span\",{className:u,style:e.style,onMouseEnter:e.onMouseEnter,onMouseLeave:e.onMouseLeave,onFocus:e.onFocus,onBlur:e.onBlur},m.createElement(jf.Provider,{value:f},e.children)))},nB.Search=VD,nB.TextArea=rB,nB.Password=HD,nB.OTP=ID;const oB=nB,iB=sD,aB=dD,sB=m.createContext(null),lB=e=>{const{checkboxCls:t}=e,r=`${t}-wrapper`;return[{[`${t}-group`]:Object.assign(Object.assign({},rc(e)),{display:\"inline-flex\",flexWrap:\"wrap\",columnGap:e.marginXS,[`> ${e.antCls}-row`]:{flex:1}}),[r]:Object.assign(Object.assign({},rc(e)),{display:\"inline-flex\",alignItems:\"baseline\",cursor:\"pointer\",\"&:after\":{display:\"inline-block\",width:0,overflow:\"hidden\",content:\"'\\\\a0'\"},[`& + ${r}`]:{marginInlineStart:0},[`&${r}-in-form-item`]:{'input[type=\"checkbox\"]':{width:14,height:14}}}),[t]:Object.assign(Object.assign({},rc(e)),{position:\"relative\",whiteSpace:\"nowrap\",lineHeight:1,cursor:\"pointer\",borderRadius:e.borderRadiusSM,alignSelf:\"center\",[`${t}-input`]:{position:\"absolute\",inset:0,zIndex:1,cursor:\"pointer\",opacity:0,margin:0,[`&:focus-visible + ${t}-inner`]:Object.assign({},nc(e))},[`${t}-inner`]:{boxSizing:\"border-box\",display:\"block\",width:e.checkboxSize,height:e.checkboxSize,direction:\"ltr\",backgroundColor:e.colorBgContainer,border:`${Si(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderRadius:e.borderRadiusSM,borderCollapse:\"separate\",transition:`all ${e.motionDurationSlow}`,\"&:after\":{boxSizing:\"border-box\",position:\"absolute\",top:\"50%\",insetInlineStart:\"25%\",display:\"table\",width:e.calc(e.checkboxSize).div(14).mul(5).equal(),height:e.calc(e.checkboxSize).div(14).mul(8).equal(),border:`${Si(e.lineWidthBold)} solid ${e.colorWhite}`,borderTop:0,borderInlineStart:0,transform:\"rotate(45deg) scale(0) translate(-50%,-50%)\",opacity:0,content:'\"\"',transition:`all ${e.motionDurationFast} ${e.motionEaseInBack}, opacity ${e.motionDurationFast}`}},\"& + span\":{paddingInlineStart:e.paddingXS,paddingInlineEnd:e.paddingXS}})},{[`\\n        ${r}:not(${r}-disabled),\\n        ${t}:not(${t}-disabled)\\n      `]:{[`&:hover ${t}-inner`]:{borderColor:e.colorPrimary}},[`${r}:not(${r}-disabled)`]:{[`&:hover ${t}-checked:not(${t}-disabled) ${t}-inner`]:{backgroundColor:e.colorPrimaryHover,borderColor:\"transparent\"},[`&:hover ${t}-checked:not(${t}-disabled):after`]:{borderColor:e.colorPrimaryHover}}},{[`${t}-checked`]:{[`${t}-inner`]:{backgroundColor:e.colorPrimary,borderColor:e.colorPrimary,\"&:after\":{opacity:1,transform:\"rotate(45deg) scale(1) translate(-50%,-50%)\",transition:`all ${e.motionDurationMid} ${e.motionEaseOutBack} ${e.motionDurationFast}`}}},[`\\n        ${r}-checked:not(${r}-disabled),\\n        ${t}-checked:not(${t}-disabled)\\n      `]:{[`&:hover ${t}-inner`]:{backgroundColor:e.colorPrimaryHover,borderColor:\"transparent\"}}},{[t]:{\"&-indeterminate\":{[`${t}-inner`]:{backgroundColor:`${e.colorBgContainer} !important`,borderColor:`${e.colorBorder} !important`,\"&:after\":{top:\"50%\",insetInlineStart:\"50%\",width:e.calc(e.fontSizeLG).div(2).equal(),height:e.calc(e.fontSizeLG).div(2).equal(),backgroundColor:e.colorPrimary,border:0,transform:\"translate(-50%, -50%) scale(1)\",opacity:1,content:'\"\"'}},[`&:hover ${t}-inner`]:{backgroundColor:`${e.colorBgContainer} !important`,borderColor:`${e.colorPrimary} !important`}}}},{[`${r}-disabled`]:{cursor:\"not-allowed\"},[`${t}-disabled`]:{[`&, ${t}-input`]:{cursor:\"not-allowed\",pointerEvents:\"none\"},[`${t}-inner`]:{background:e.colorBgContainerDisabled,borderColor:e.colorBorder,\"&:after\":{borderColor:e.colorTextDisabled}},\"&:after\":{display:\"none\"},\"& + span\":{color:e.colorTextDisabled},[`&${t}-indeterminate ${t}-inner::after`]:{background:e.colorTextDisabled}}}]};function cB(e,t){const r=Au(t,{checkboxCls:`.${e}`,checkboxSize:t.controlInteractiveSize});return[lB(r)]}const uB=Iu(\"Checkbox\",((e,t)=>{let{prefixCls:r}=t;return[cB(r,e)]}));const dB=(e,t)=>{var r;const{prefixCls:n,className:o,rootClassName:i,children:a,indeterminate:s=!1,style:l,onMouseEnter:c,onMouseLeave:u,skipGroup:d=!1,disabled:f}=e,h=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"className\",\"rootClassName\",\"children\",\"indeterminate\",\"style\",\"onMouseEnter\",\"onMouseLeave\",\"skipGroup\",\"disabled\"]),{getPrefixCls:p,direction:g,checkbox:v}=m.useContext(Xo),b=m.useContext(sB),{isFormItemInput:y}=m.useContext(jf),w=m.useContext(Ss),x=null!==(r=(null==b?void 0:b.disabled)||f)&&void 0!==r?r:w,S=m.useRef(h.value),C=m.useRef(null),k=Cn(t,C);m.useEffect((()=>{null==b||b.registerValue(h.value)}),[]),m.useEffect((()=>{if(!d)return h.value!==S.current&&(null==b||b.cancelValue(S.current),null==b||b.registerValue(h.value),S.current=h.value),()=>null==b?void 0:b.cancelValue(h.value)}),[h.value]),m.useEffect((()=>{var e;(null===(e=C.current)||void 0===e?void 0:e.input)&&(C.current.input.indeterminate=s)}),[s]);const E=p(\"checkbox\",n),O=du(E),[A,T,j]=uB(E,O),P=Object.assign({},h);b&&!d&&(P.onChange=function(){h.onChange&&h.onChange.apply(h,arguments),b.toggleOption&&b.toggleOption({label:a,value:h.value})},P.name=b.name,P.checked=b.value.includes(h.value));const M=ze()(`${E}-wrapper`,{[`${E}-rtl`]:\"rtl\"===g,[`${E}-wrapper-checked`]:P.checked,[`${E}-wrapper-disabled`]:x,[`${E}-wrapper-in-form-item`]:y},null==v?void 0:v.className,o,i,j,O,T),R=ze()({[`${E}-indeterminate`]:s},ES,T),[_,I]=wE(P.onClick);return A(m.createElement(MS,{component:\"Checkbox\",disabled:x},m.createElement(\"label\",{className:M,style:Object.assign(Object.assign({},null==v?void 0:v.style),l),onMouseEnter:c,onMouseLeave:u,onClick:_},m.createElement(yE,Object.assign({},P,{onClick:I,prefixCls:E,className:R,disabled:x,ref:k})),null!=a&&m.createElement(\"span\",{className:`${E}-label`},a))))},fB=m.forwardRef(dB);const hB=m.forwardRef(((e,t)=>{const{defaultValue:r,children:n,options:o=[],prefixCls:i,className:a,rootClassName:s,style:l,onChange:c}=e,u=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"defaultValue\",\"children\",\"options\",\"prefixCls\",\"className\",\"rootClassName\",\"style\",\"onChange\"]),{getPrefixCls:d,direction:f}=m.useContext(Xo),[h,p]=m.useState(u.value||r||[]),[g,v]=m.useState([]);m.useEffect((()=>{\"value\"in u&&p(u.value||[])}),[u.value]);const b=m.useMemo((()=>o.map((e=>\"string\"==typeof e||\"number\"==typeof e?{label:e,value:e}:e))),[o]),y=e=>{v((t=>t.filter((t=>t!==e))))},w=e=>{v((t=>[].concat(Vo(t),[e])))},x=e=>{const t=h.indexOf(e.value),r=Vo(h);-1===t?r.push(e.value):r.splice(t,1),\"value\"in u||p(r),null==c||c(r.filter((e=>g.includes(e))).sort(((e,t)=>b.findIndex((t=>t.value===e))-b.findIndex((e=>e.value===t)))))},S=d(\"checkbox\",i),C=`${S}-group`,k=du(S),[E,O,A]=uB(S,k),T=kf(u,[\"value\",\"disabled\"]),j=o.length?b.map((e=>m.createElement(fB,{prefixCls:S,key:e.value.toString(),disabled:\"disabled\"in e?e.disabled:u.disabled,value:e.value,checked:h.includes(e.value),onChange:e.onChange,className:ze()(`${C}-item`,e.className),style:e.style,title:e.title,id:e.id,required:e.required},e.label))):n,P=m.useMemo((()=>({toggleOption:x,value:h,disabled:u.disabled,name:u.name,registerValue:w,cancelValue:y})),[x,h,u.disabled,u.name,w,y]),M=ze()(C,{[`${C}-rtl`]:\"rtl\"===f},a,s,A,k,O);return E(m.createElement(\"div\",Object.assign({className:M,style:l},T,{ref:t}),m.createElement(sB.Provider,{value:P},j)))})),pB=hB,mB=fB;mB.Group=pB,mB.__ANT_CHECKBOX=!0;const gB=mB,vB={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z\"}}]},name:\"upload\",theme:\"outlined\"};var bB=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:vB}))};const yB=m.forwardRef(bB),wB={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M697.8 481.4c33.6-35 54.2-82.3 54.2-134.3v-10.2C752 229.3 663.9 142 555.3 142H259.4c-15.1 0-27.4 12.3-27.4 27.4v679.1c0 16.3 13.2 29.5 29.5 29.5h318.7c117 0 211.8-94.2 211.8-210.5v-11c0-73-37.4-137.3-94.2-175.1zM328 238h224.7c57.1 0 103.3 44.4 103.3 99.3v9.5c0 54.8-46.3 99.3-103.3 99.3H328V238zm366.6 429.4c0 62.9-51.7 113.9-115.5 113.9H328V542.7h251.1c63.8 0 115.5 51 115.5 113.9v10.8z\"}}]},name:\"bold\",theme:\"outlined\"};var xB=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:wB}))};const SB=m.forwardRef(xB),CB={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M798 160H366c-4.4 0-8 3.6-8 8v64c0 4.4 3.6 8 8 8h181.2l-156 544H229c-4.4 0-8 3.6-8 8v64c0 4.4 3.6 8 8 8h432c4.4 0 8-3.6 8-8v-64c0-4.4-3.6-8-8-8H474.4l156-544H798c4.4 0 8-3.6 8-8v-64c0-4.4-3.6-8-8-8z\"}}]},name:\"italic\",theme:\"outlined\"};var kB=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:CB}))};const EB=m.forwardRef(kB),OB={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M824 804H200c-4.4 0-8 3.4-8 7.6v60.8c0 4.2 3.6 7.6 8 7.6h624c4.4 0 8-3.4 8-7.6v-60.8c0-4.2-3.6-7.6-8-7.6zm-312-76c69.4 0 134.6-27.1 183.8-76.2C745 602.7 772 537.4 772 468V156c0-6.6-5.4-12-12-12h-60c-6.6 0-12 5.4-12 12v312c0 97-79 176-176 176s-176-79-176-176V156c0-6.6-5.4-12-12-12h-60c-6.6 0-12 5.4-12 12v312c0 69.4 27.1 134.6 76.2 183.8C377.3 701 442.6 728 512 728z\"}}]},name:\"underline\",theme:\"outlined\"};var AB=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:OB}))};const TB=m.forwardRef(AB),jB={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M952 474H569.9c-10-2-20.5-4-31.6-6-15.9-2.9-22.2-4.1-30.8-5.8-51.3-10-82.2-20-106.8-34.2-35.1-20.5-52.2-48.3-52.2-85.1 0-37 15.2-67.7 44-89 28.4-21 68.8-32.1 116.8-32.1 54.8 0 97.1 14.4 125.8 42.8 14.6 14.4 25.3 32.1 31.8 52.6 1.3 4.1 2.8 10 4.3 17.8.9 4.8 5.2 8.2 9.9 8.2h72.8c5.6 0 10.1-4.6 10.1-10.1v-1c-.7-6.8-1.3-12.1-2-16-7.3-43.5-28-81.7-59.7-110.3-44.4-40.5-109.7-61.8-188.7-61.8-72.3 0-137.4 18.1-183.3 50.9-25.6 18.4-45.4 41.2-58.6 67.7-13.5 27.1-20.3 58.4-20.3 92.9 0 29.5 5.7 54.5 17.3 76.5 8.3 15.7 19.6 29.5 34.1 42H72c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h433.2c2.1.4 3.9.8 5.9 1.2 30.9 6.2 49.5 10.4 66.6 15.2 23 6.5 40.6 13.3 55.2 21.5 35.8 20.2 53.3 49.2 53.3 89 0 35.3-15.5 66.8-43.6 88.8-30.5 23.9-75.6 36.4-130.5 36.4-43.7 0-80.7-8.5-110.2-25-29.1-16.3-49.1-39.8-59.7-69.5-.8-2.2-1.7-5.2-2.7-9-1.2-4.4-5.3-7.5-9.7-7.5h-79.7c-5.6 0-10.1 4.6-10.1 10.1v1c.2 2.3.4 4.2.6 5.7 6.5 48.8 30.3 88.8 70.7 118.8 47.1 34.8 113.4 53.2 191.8 53.2 84.2 0 154.8-19.8 204.2-57.3 25-18.9 44.2-42.2 57.1-69 13-27.1 19.7-57.9 19.7-91.5 0-31.8-5.8-58.4-17.8-81.4-5.8-11.2-13.1-21.5-21.8-30.8H952c4.4 0 8-3.6 8-8v-60a8 8 0 00-8-7.9z\"}}]},name:\"strikethrough\",theme:\"outlined\"};var PB=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:jB}))};const MB=m.forwardRef(PB);var RB=o(4353),_B=o.n(RB),IB=o(445),NB=o.n(IB);function FB(e){return FB=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},FB(e)}function DB(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function BB(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?DB(Object(r),!0).forEach((function(t){LB(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):DB(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function LB(e,t,r){return(t=function(e){var t=function(e){if(\"object\"!=FB(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=FB(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==FB(t)?t:t+\"\"}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function zB(){zB=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==FB(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(FB(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function HB(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function UB(e){return function(e){if(Array.isArray(e))return GB(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||WB(e)||function(){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 VB(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=r){var n,o,i,a,s=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return s}}(e,t)||WB(e,t)||function(){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 WB(e,t){if(e){if(\"string\"==typeof e)return GB(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?GB(e,t):void 0}}function GB(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}_B().extend(NB());var qB=\"StampGroup\",KB=470,XB=120,YB=[{label:\"📅\",options:[{label:\"YYYY-MM-DD\",value:\"YYYY-MM-DD\"},{label:\"YYYY/MM/DD\",value:\"YYYY/MM/DD\"},{label:\"YYYY年MM月DD日\",value:\"YYYY年MM月DD日\"},{label:\"DD-MM-YYYY\",value:\"DD-MM-YYYY\"},{label:\"DD/MM/YYYY\",value:\"DD/MM/YYYY\"},{label:\"MM/DD/YYYY\",value:\"MM/DD/YYYY\"},{label:\"dddd, MMMM D, YYYY\",value:\"dddd, MMMM D, YYYY\"},{label:\"MMM D, YYYY\",value:\"MMM D, YYYY\"},{label:\"D MMMM YYYY\",value:\"D MMMM YYYY\"}]},{label:\"⏰\",options:[{label:\"HH:mm:ss\",value:\"HH:mm:ss\"},{label:\"HH:mm\",value:\"HH:mm\"},{label:\"hh:mm A\",value:\"hh:mm A\"},{label:\"h:mm A\",value:\"h:mm A\"},{label:\"HH:mm:ss.SSS\",value:\"HH:mm:ss.SSS\"}]},{label:\"🗓️ \",options:[{label:\"YYYY-MM-DD HH:mm:ss\",value:\"YYYY-MM-DD HH:mm:ss\"},{label:\"YYYY-MM-DD HH:mm\",value:\"YYYY-MM-DD HH:mm\"},{label:\"DD/MM/YYYY HH:mm\",value:\"DD/MM/YYYY HH:mm\"},{label:\"MM/DD/YYYY hh:mm A\",value:\"MM/DD/YYYY hh:mm A\"},{label:\"YYYY年MM月DD日 HH:mm\",value:\"YYYY年MM月DD日 HH:mm\"},{label:\"dddd, MMMM D, YYYY HH:mm\",value:\"dddd, MMMM D, YYYY HH:mm\"},{label:\"D MMMM YYYY HH:mm\",value:\"D MMMM YYYY HH:mm\"}]}],$B=function(e){var t=e.annotation,r=e.onAdd,n=e.userName,o=ke().t,i=(0,m.useRef)(null),a=(0,m.useRef)(null),s=(0,m.useRef)(null),l=VB((0,m.useState)([]),2),c=l[0],u=l[1],d=Eo.stamp.MAX_SIZE,f=VB(OD.useForm(),1)[0],h=Eo.stamp.DEFAULT_STAMP||[],p=VB((0,m.useState)(!1),2),g=p[0],v=p[1],b=VB((0,m.useState)(!1),2),y=b[0],w=b[1],x=VB((0,m.useState)(\"default\"),2),S=x[0],C=x[1],k={stampText:o(\"editor.stamp.defaultText\"),fontStyle:[],fontFamily:Eo.defaultFontList[0].value,textColor:Eo.stamp.editor.DEFAULT_TEXT_COLOR,backgroundColor:Eo.stamp.editor.DEFAULT_BACKGROUND_COLOR,borderColor:Eo.stamp.editor.DEFAULT_BORDER_COLOR,borderStyle:\"solid\",timestamp:[\"username\",\"date\"],customTimestampText:\"\",dateFormat:\"YYYY-MM-DD\"},E=VB((0,m.useState)(k),2),O=E[0],A=E[1],T=function(e){r(e),v(!1)},j=function(e){var t,r;if(i.current){var o=e.stampText,s=e.fontStyle,l=e.textColor,c=e.backgroundColor,u=e.borderColor,d=e.borderStyle,f=e.timestamp,h=e.dateFormat,p=e.fontFamily;null===(t=a.current)||void 0===t||t.destroy();var m=new(IE().Stage)({container:i.current,width:KB,height:XB}),g=new(IE().Layer),v=[];s.includes(\"italic\")&&v.push(\"italic\"),s.includes(\"bold\")&&v.push(\"bold\");var b,y=v.join(\" \")||\"normal\",w=s.includes(\"underline\"),x=s.includes(\"strikeout\"),S=_B()(),C=n,k=h?S.format(h):\"\",E=null===(r=e.customTimestampText)||void 0===r?void 0:r.trim(),O=[f.includes(\"username\")?C:null,f.includes(\"date\")?k:null,E||null].filter(Boolean).join(\" · \"),A=30,T=new(IE().Text)({text:o,fontSize:A,fontStyle:y,fontFamily:p}),j=new(IE().Text)({text:O,fontSize:16,fontFamily:p}),P=Math.max(T.width(),j.width())+60,M=A+10+16+25,R=Math.max(P,180),_=Math.max(M,60),I=new(IE().Rect)({name:qB,width:R,height:_,x:(KB-R)/2,y:(XB-_)/2,fill:c,strokeWidth:3,stroke:u,dash:\"dashed\"===d?[5,5]:void 0,cornerRadius:8});g.add(I),O||(A*=1.2),b=O?(XB-_)/2+15:(XB-_)/2+_/2-A/2;var N=new(IE().Text)({text:o,x:0,y:b,width:KB,align:\"center\",fontSize:A,fontStyle:y,fontFamily:p,fill:l});if(g.add(N),w){var F=N.y()+A+4,D=new(IE().Line)({points:[I.x(),F,I.x()+I.width(),F],stroke:l,strokeWidth:2});g.add(D)}if(x){var B=N.y()+A/2,L=new(IE().Line)({points:[I.x(),B,I.x()+I.width(),B],stroke:l,strokeWidth:2});g.add(L)}var z=new(IE().Text)({text:O,x:0,y:b+A+10,width:KB,align:\"center\",fontSize:16,fontFamily:p,fill:l});O&&g.add(z),m.add(g),a.current=m}};return(0,Mn.jsxs)(Mn.Fragment,{children:[(0,Mn.jsxs)(hm,{rootClassName:\"StampPop\",content:(0,Mn.jsxs)(\"div\",{children:[(0,Mn.jsx)(RE.Group,{block:!0,options:[{label:o(\"normal.default\"),value:\"default\"},{label:o(\"normal.custom\"),value:\"custom\"}],size:\"small\",optionType:\"button\",value:S,onChange:function(e){return C(e.target.value)}}),\"default\"===S&&(0,Mn.jsx)(\"ul\",{className:\"StampPop-Container\",children:h.map((function(e,t){return(0,Mn.jsx)(\"li\",{children:(0,Mn.jsx)(\"img\",{onClick:function(){return T(e)},src:e})},t)}))}),(0,Mn.jsx)(\"div\",{children:\"custom\"===S&&(0,Mn.jsxs)(Mn.Fragment,{children:[(0,Mn.jsx)(\"ul\",{className:\"StampPop-Container\",children:c.map((function(e,t){return(0,Mn.jsx)(\"li\",{children:(0,Mn.jsx)(\"img\",{onClick:function(){return T(e)},src:e})},t)}))}),(0,Mn.jsx)(AC,{color:\"default\",variant:\"filled\",style:{marginTop:8},block:!0,size:\"small\",onClick:function(){v(!1),w(!0)},icon:(0,Mn.jsx)(DE,{}),children:o(\"toolbar.buttons.createStamp\")})]})}),(0,Mn.jsx)(Lm,{size:\"small\"}),(0,Mn.jsx)(\"input\",{style:{display:\"none\"},type:\"file\",ref:s,accept:Eo.stamp.ACCEPT,onChange:function(e){var t=e.target,n=t.files;if(null!=n&&n.length){var i=n[0];if(i.size>d)alert(o(\"normal.fileSizeLimit\",{value:GN(d)}));else{var a=new FileReader;a.onload=function(){var e,n=(e=zB().mark((function e(n){var o,i,a;return zB().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i=null===(o=n.target)||void 0===o?void 0:o.result,(a=new Image).src=i,a.onload=function(){var e=Eo.setting.MAX_UPLOAD_IMAGE_SIZE,n=Eo.setting.MAX_UPLOAD_IMAGE_SIZE,o=a.width,i=a.height;o>i&&o>e?(i=Math.round(i*e/o),o=e):i>n&&(o=Math.round(o*n/i),i=n);var s=document.createElement(\"canvas\"),l=s.getContext(\"2d\");if(s.width=o,s.height=i,l){l.drawImage(a,0,0,o,i);var c=s.toDataURL(\"image/png\");t.value=\"\",r(c),u((function(e){return[].concat(UB(e),[c])})),v(!1)}};case 4:case\"end\":return e.stop()}}),e)})),function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){HB(i,n,o,a,s,\"next\",e)}function s(e){HB(i,n,o,a,s,\"throw\",e)}a(void 0)}))});return function(e){return n.apply(this,arguments)}}(),a.readAsDataURL(i)}}}}),(0,Mn.jsx)(\"div\",{className:\"StampPop-Toolbar\",children:(0,Mn.jsx)(AC,{block:!0,type:\"link\",onClick:function(){var e;null===(e=s.current)||void 0===e||e.click()},icon:(0,Mn.jsx)(yB,{}),children:o(\"normal.upload\")})})]}),trigger:\"click\",open:g,onOpenChange:v,placement:\"bottom\",arrow:!1,children:[(0,Mn.jsx)(\"div\",{className:\"icon\",children:t.icon}),(0,Mn.jsx)(\"div\",{className:\"name\",children:o(\"annotations.\".concat(t.name))})]}),(0,Mn.jsx)(dE,{title:o(\"toolbar.buttons.createStamp\"),open:y,onOk:function(){var e,t=null===(e=a.current)||void 0===e?void 0:e.getLayers()[0];if(t){var r=t.getChildren((function(e){return e.name()===qB}))[0];if(r){var n=a.current.toDataURL({x:r.x(),y:r.y(),width:r.width(),height:r.height()});n&&(u((function(e){return[].concat(UB(e),[n])})),T(n),w(!1))}}},onClose:function(){var e=a.current;e&&(e.destroy(),a.current=null)},afterOpenChange:function(e){if(e){var t=O||k;j(t),f.setFieldsValue(t)}},onCancel:function(){return w(!1)},okText:o(\"normal.ok\"),cancelText:o(\"normal.cancel\"),className:\"StampTool\",children:(0,Mn.jsxs)(\"div\",{children:[(0,Mn.jsxs)(\"div\",{className:\"StampTool-Container\",children:[(0,Mn.jsx)(\"div\",{className:\"StampTool-Container-ImagePreview\",ref:i,style:{height:XB}}),(0,Mn.jsxs)(OD,{form:f,name:\"basic\",layout:\"vertical\",size:\"middle\",onValuesChange:function(e,t){var r=t.textColor,n=t.backgroundColor,o=t.borderColor;A(BB(BB({},t),{},{textColor:null!=r&&r.toHexString?r.toHexString():r,backgroundColor:null!=n&&n.toHexString?n.toHexString():n,borderColor:null!=o&&o.toHexString?o.toHexString():o})),j(BB(BB({},t),{},{textColor:null!=r&&r.toHexString?r.toHexString():r,backgroundColor:null!=n&&n.toHexString?n.toHexString():n,borderColor:null!=o&&o.toHexString?o.toHexString():o}))},initialValues:k,autoComplete:\"off\",children:[(0,Mn.jsx)(OD.Item,{label:o(\"editor.stamp.stampText\"),name:\"stampText\",children:(0,Mn.jsx)(oB,{})}),(0,Mn.jsxs)(iB,{children:[(0,Mn.jsx)(aB,{span:5,children:(0,Mn.jsx)(OD.Item,{name:\"textColor\",label:o(\"editor.stamp.textColor\"),children:(0,Mn.jsx)(pS,{format:\"rgb\",size:\"small\",arrow:!0,presets:[{label:\"\",colors:[\"#ffffff\",\"#000000\"].concat(UB(Eo.colors))}]})})}),(0,Mn.jsx)(aB,{span:12,children:(0,Mn.jsx)(OD.Item,{name:\"fontStyle\",label:o(\"editor.stamp.fontStyle\"),children:(0,Mn.jsx)(gB.Group,{options:[{value:\"bold\",label:(0,Mn.jsx)(SB,{})},{value:\"italic\",label:(0,Mn.jsx)(EB,{})},{value:\"underline\",label:(0,Mn.jsx)(TB,{})},{value:\"strikeout\",label:(0,Mn.jsx)(MB,{})}]})})}),(0,Mn.jsx)(aB,{span:7,children:(0,Mn.jsx)(OD.Item,{name:\"fontFamily\",label:o(\"editor.stamp.fontFamily\"),children:(0,Mn.jsx)(sy,{options:Eo.defaultFontList})})})]}),(0,Mn.jsxs)(iB,{children:[(0,Mn.jsx)(aB,{span:8,children:(0,Mn.jsx)(OD.Item,{name:\"backgroundColor\",label:o(\"editor.stamp.backgroundColor\"),children:(0,Mn.jsx)(pS,{allowClear:!0,size:\"small\",arrow:!0,showText:!1,presets:[{label:\"\",colors:Eo.colors}]})})}),(0,Mn.jsx)(aB,{span:8,children:(0,Mn.jsx)(OD.Item,{name:\"borderColor\",label:o(\"editor.stamp.borderColor\"),children:(0,Mn.jsx)(pS,{allowClear:!0,size:\"small\",arrow:!0,showText:!1,presets:[{label:\"\",colors:Eo.colors}]})})}),(0,Mn.jsx)(aB,{span:8,children:(0,Mn.jsx)(OD.Item,{name:\"borderStyle\",label:o(\"editor.stamp.borderStyle\"),children:(0,Mn.jsx)(RE.Group,{block:!0,options:[{label:o(\"editor.stamp.solid\"),value:\"solid\"},{label:o(\"editor.stamp.dashed\"),value:\"dashed\"}]})})})]}),(0,Mn.jsx)(Lm,{}),(0,Mn.jsxs)(iB,{children:[(0,Mn.jsx)(aB,{span:10,children:(0,Mn.jsx)(OD.Item,{name:\"timestamp\",label:o(\"editor.stamp.timestampText\"),children:(0,Mn.jsx)(gB.Group,{options:[{value:\"username\",label:o(\"editor.stamp.username\")},{value:\"date\",label:o(\"editor.stamp.date\")}]})})}),(0,Mn.jsx)(aB,{span:14,children:(0,Mn.jsx)(OD.Item,{name:\"dateFormat\",label:o(\"editor.stamp.dateFormat\"),children:(0,Mn.jsx)(sy,{options:YB})})})]}),(0,Mn.jsx)(OD.Item,{name:\"customTimestampText\",label:o(\"editor.stamp.customTimestamp\"),children:(0,Mn.jsx)(oB,{})})]})]}),(0,Mn.jsx)(\"div\",{className:\"StampTool-Toolbar\"})]})})]})};function ZB(e){return ZB=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},ZB(e)}function QB(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function JB(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?QB(Object(r),!0).forEach((function(t){eL(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):QB(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function eL(e,t,r){return(t=function(e){var t=function(e){if(\"object\"!=ZB(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=ZB(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==ZB(t)?t:t+\"\"}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function tL(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=r){var n,o,i,a,s=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return s}}(e,t)||function(e,t){if(e){if(\"string\"==typeof e)return rL(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?rL(e,t):void 0}}(e,t)||function(){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 rL(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var nL=(0,m.forwardRef)((function(e,t){var r,n,o,i=(0,m.useMemo)((function(){return e.defaultAnnotationName&&Po.find((function(t){return t.name===e.defaultAnnotationName}))||null}),[e.defaultAnnotationName,Po]),a=tL((0,m.useState)(i),2),s=a[0],l=a[1],c=tL((0,m.useState)(Po.filter((function(e){return e.pdfjsEditorType!==Ao.HIGHLIGHT}))),2),u=c[0],d=c[1],f=tL((0,m.useState)(null),2),h=f[0],p=f[1],g=tL((0,m.useState)(e.defaultSidebarOpen),2),v=g[0],b=g[1],y=ke().t;(0,m.useImperativeHandle)(t,(function(){return{activeAnnotation:w,toggleSidebarBtn:x,updateStyle:S}}));var w=function(e){k(e)},x=function(e){b(e)},S=function(e,t){d(u.map((function(r){return r.type===e&&(r.style=JB(JB({},r.style),t)),r})))},C=null==s?void 0:s.type,k=function(e){l(e),(null==e?void 0:e.type)!==To.SIGNATURE&&p(null)},E=function(e,t){ad.open({type:\"info\",content:y(\"toolbar.message.selectPosition\")}),p(e),l(t)},O=u.map((function(t,r){var n=t.type===C,o={className:n?\"selected\":\"\"};switch(t.type){case To.STAMP:return(0,Mn.jsx)(\"li\",JB(JB({title:y(\"annotations.\".concat(t.name))},o),{},{children:(0,Mn.jsx)($B,{userName:e.userName,annotation:t,onAdd:function(e){return E(e,t)}})}),r);case To.SIGNATURE:return(0,Mn.jsx)(\"li\",JB(JB({title:y(\"annotations.\".concat(t.name))},o),{},{children:(0,Mn.jsx)(bF,{annotation:t,onAdd:function(e){return E(e,t)}})}),r);default:return(0,Mn.jsxs)(\"li\",JB(JB({title:y(\"annotations.\".concat(t.name))},o),{},{onClick:function(){return k(n?null:t)},children:[(0,Mn.jsx)(\"div\",{className:\"icon\",children:t.icon}),(0,Mn.jsx)(\"div\",{className:\"name\",children:y(\"annotations.\".concat(t.name))})]}),r)}})),A=!(null!=s&&null!==(r=s.styleEditable)&&void 0!==r&&r.color);return(0,m.useEffect)((function(){e.onChange(s,h)}),[s,h,e]),(0,Mn.jsxs)(\"div\",{className:\"CustomToolbar\",children:[(0,Mn.jsxs)(\"ul\",{className:\"buttons\",children:[O,(0,Mn.jsx)(pS,{arrow:!1,disabledAlpha:!0,value:(null==s||null===(n=s.style)||void 0===n?void 0:n.color)||Eo.setting.COLOR,disabled:A,showText:!1,onChangeComplete:function(e){return function(e){if(s){var t=JB(JB({},s),{},{style:JB(JB({},s.style),{},{color:e})}),r=u.map((function(e){return e.type===s.type?t:e}));d(r),l(t)}}(e.toHexString())},presets:[{label:\"\",colors:Eo.colors}],children:(0,Mn.jsxs)(\"li\",{className:A?\"disabled\":\"\",title:y(\"normal.color\"),children:[(0,Mn.jsx)(\"div\",{className:\"icon\",children:(0,Mn.jsx)(po,{style:{color:null==s||null===(o=s.style)||void 0===o?void 0:o.color}})}),(0,Mn.jsx)(\"div\",{className:\"name\",children:y(\"normal.color\")})]})})]}),(0,Mn.jsx)(\"div\",{className:\"splitToolbarButtonSeparator\"}),(0,Mn.jsxs)(\"ul\",{className:\"buttons\",children:[Eo.setting.SAVE_BUTTON&&(0,Mn.jsxs)(\"li\",{title:y(\"normal.save\"),onClick:function(){e.onSave()},children:[(0,Mn.jsx)(\"div\",{className:\"icon\",children:(0,Mn.jsx)(go,{})}),(0,Mn.jsx)(\"div\",{className:\"name\",children:y(\"normal.save\")})]}),(Eo.setting.EXPORT_PDF||Eo.setting.EXPORT_EXCEL)&&(0,Mn.jsx)(\"li\",{title:y(\"normal.export\"),children:(0,Mn.jsxs)(hm,{content:(0,Mn.jsxs)(SS,{direction:\"vertical\",children:[Eo.setting.EXPORT_PDF&&(0,Mn.jsx)(AC,{block:!0,color:\"primary\",variant:\"outlined\",onClick:function(){e.onExport(\"pdf\")},icon:(0,Mn.jsx)(xF,{}),children:\"PDF\"}),Eo.setting.EXPORT_EXCEL&&(0,Mn.jsx)(AC,{block:!0,color:\"primary\",variant:\"outlined\",onClick:function(){e.onExport(\"excel\")},icon:(0,Mn.jsx)(xF,{}),children:\"Excel\"})]}),trigger:\"click\",placement:\"bottom\",arrow:!1,children:[(0,Mn.jsx)(\"div\",{className:\"icon\",children:(0,Mn.jsx)(vo,{})}),(0,Mn.jsx)(\"div\",{className:\"name\",children:y(\"normal.export\")})]})})]}),(0,Mn.jsx)(\"ul\",{className:\"buttons right\",children:(0,Mn.jsxs)(\"li\",{onClick:function(){return t=v,e.onSidebarOpen(!t),void b(!t);var t},className:\"\".concat(v?\"selected\":\"\"),children:[(0,Mn.jsx)(\"div\",{className:\"icon\",children:(0,Mn.jsx)(yo,{})}),(0,Mn.jsx)(\"div\",{className:\"name\",children:y(\"anno\")})]})})]})})),oL=o(1665),iL={};iL.styleTagTransform=f(),iL.setAttributes=l(),iL.insert=a().bind(null,\"head\"),iL.domAPI=n(),iL.insertStyleElement=u(),t()(oL.A,iL),oL.A&&oL.A.locals&&oL.A.locals;var aL=\"PdfjsAnnotationExtension\",sL=\"\".concat(aL,\"_painter_wrapper\"),lL=\"\".concat(aL,\"_is_painting\"),cL=\"\".concat(aL,\"_painting_type\"),uL=\"\".concat(aL,\"_shape_group\"),dL=\"\".concat(aL,\"_selector_hover\"),fL=\"--\".concat(aL,\"-image-cursor\");function hL(e){return hL=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},hL(e)}function pL(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,gL(n.key),n)}}function mL(e,t,r){return(t=gL(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function gL(e){var t=function(e){if(\"object\"!=hL(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=hL(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==hL(t)?t:t+\"\"}var vL=function(){function e(t){var r=t.userName,n=t.konvaStage,o=t.pageNumber,i=t.annotation,a=t.onAdd,s=t.editorType,l=t.pdfViewerApplication,c=t.onChange;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),mL(this,\"shapeGroupStore\",new Map),this.userName=r,this.pdfViewerApplication=l,this.id=\"\".concat(o,\"_\").concat(s),this.konvaStage=n,this.pageNumber=o,this.currentAnnotation=i,this.isPainting=!1,this.currentShapeGroup=null,this.onAdd=a,this.onChange=c||function(){},this.disableEditMode(),this.enableEditMode()}return function(e,t,r){return t&&pL(e.prototype,t),r&&pL(e,r),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(e,[{key:\"dispatchAddEvent\",value:function(e){var t=e.shapeGroup,r=e.contentsObj,n=e.color,o=e.fontSize,i=t.id,a=t.pageNumber,s=t.konvaGroup,l=t.annotation,c={id:i,pageNumber:a,konvaString:s.toJSON(),konvaClientRect:IE().Node.create(s.toJSON()).getClientRect(),title:this.userName,type:l.type,pdfjsType:l.pdfjsAnnotationType,pdfjsEditorType:l.pdfjsEditorType,subtype:l.subtype,color:n,fontSize:o,date:XN(Date.now()),contentsObj:r,comments:[],resizable:l.resizable,draggable:l.draggable};this.onAdd(c)}},{key:\"dispatchChangedEvent\",value:function(e,t){this.onChange(e,t)}},{key:\"enableEditMode\",value:function(){var e=this;this.konvaStage.on(\"mousedown\",(function(t){0===t.evt.button&&e.mouseDownHandler(t)})),this.konvaStage.on(\"mousemove\",(function(t){e.mouseMoveHandler(t)})),this.konvaStage.on(\"mouseup\",(function(t){0===t.evt.button&&e.mouseUpHandler(t)})),this.konvaStage.on(\"touchstart\",(function(t){1===t.evt.touches.length&&e.mouseDownHandler(t)})),this.konvaStage.on(\"touchmove\",(function(t){1===t.evt.touches.length&&e.mouseMoveHandler(t)})),this.konvaStage.on(\"touchend\",(function(t){e.mouseUpHandler(t)}))}},{key:\"disableEditMode\",value:function(){this.isPainting=!1,this.konvaStage.off(\"click\"),this.konvaStage.off(\"mousedown\"),this.konvaStage.off(\"mousemove\"),this.konvaStage.off(\"mouseup\"),this.konvaStage.off(\"touchstart\"),this.konvaStage.off(\"touchmove\"),this.konvaStage.off(\"touchend\")}},{key:\"getBgLayer\",value:function(e){return e?e.getLayers()[0]:this.konvaStage.getLayers()[0]}},{key:\"delShapeGroup\",value:function(e){this.shapeGroupStore.delete(e);var t=this.konvaStage.findOne((function(t){return\"Group\"===t.getType()&&t.id()===e}));t&&t.destroy()}},{key:\"getShapeGroupById\",value:function(e){var t=this.konvaStage.findOne((function(t){return\"Group\"===t.getType()&&t.id()===e}));return t}},{key:\"setShapeGroupDone\",value:function(e){var t=e.id,r=e.contentsObj,n=e.color,o=e.fontSize,i=this.shapeGroupStore.get(t);i&&(i.isDone=!0,this.dispatchAddEvent({shapeGroup:i,contentsObj:r,color:n,fontSize:o}))}},{key:\"setChanged\",value:function(e,t){this.dispatchChangedEvent(e,t)}},{key:\"getNodesByClassName\",value:function(e){var t=this.currentShapeGroup.konvaGroup.getChildren((function(t){return t.getClassName()===e}));return t}},{key:\"getGroupNodesByClassName\",value:function(e,t){var r=e.getChildren((function(e){return e.getClassName()===t}));return r}},{key:\"updateKonvaGroup\",value:function(e,t){if(this.shapeGroupStore.has(e)){var r=this.shapeGroupStore.get(e);if(r)return r.konvaGroup=t,this.shapeGroupStore.set(e,r),r}else console.warn(\"ShapeGroup with id \".concat(e,\" not found.\"));return null}},{key:\"createShapeGroup\",value:function(){var e=UN(),t={id:e,konvaGroup:new(IE().Group)({draggable:!1,name:uL,id:e}),pageNumber:this.pageNumber,annotation:this.currentAnnotation,isDone:!1};return this.shapeGroupStore.set(e,t),t}},{key:\"activate\",value:function(e,t){this.konvaStage=e,this.currentAnnotation=t,this.isPainting=!1,this.disableEditMode(),this.enableEditMode()}},{key:\"addSerializedGroupToLayer\",value:function(e,t){this.konvaStage=e;var r=IE().Node.create(t),n=r.id();if(this.getBgLayer(e).add(r),!this.shapeGroupStore.has(n)){var o={id:n,konvaGroup:r,pageNumber:this.pageNumber,isDone:!0};this.shapeGroupStore.set(n,o)}}},{key:\"deleteGroup\",value:function(e,t){this.konvaStage=t,this.delShapeGroup(e)}},{key:\"updateStyle\",value:function(e,t){this.changeStyle(e,t)}}],[{key:\"TimerClear\",value:function(t){var r=e.Timer[t];r&&window.clearTimeout(r)}},{key:\"TimerStart\",value:function(t,r){e.Timer[t]=window.setTimeout((function(){\"function\"==typeof r&&r(t)}),1e3)}}])}();function bL(e){return bL=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},bL(e)}function yL(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function wL(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?yL(Object(r),!0).forEach((function(t){EL(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):yL(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function xL(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,OL(n.key),n)}}function SL(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(SL=function(){return!!e})()}function CL(e){return CL=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},CL(e)}function kL(e,t){return kL=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},kL(e,t)}function EL(e,t,r){return(t=OL(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function OL(e){var t=function(e){if(\"object\"!=bL(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=bL(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==bL(t)?t:t+\"\"}mL(vL,\"MinSize\",8),mL(vL,\"Timer\",{});var AL=function(e){function t(e){var r;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),EL(r=function(e,t,r){return t=CL(t),function(e,t){if(t&&(\"object\"==bL(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,SL()?Reflect.construct(t,r||[],CL(e).constructor):t.apply(e,r))}(this,t,[wL(wL({},e),{},{editorType:To.CIRCLE})]),\"globalPointerUpHandler\",(function(e){0===e.button&&(r.mouseUpHandler(),window.removeEventListener(\"mouseup\",r.globalPointerUpHandler))})),r.ellipse=null,r.vertex={x:0,y:0},r}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&kL(e,t)}(t,e),function(e,t){return t&&xL(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"mouseDownHandler\",value:function(e){if(e.currentTarget===this.konvaStage){this.ellipse=null,this.isPainting=!0,this.currentShapeGroup=this.createShapeGroup(),this.getBgLayer().add(this.currentShapeGroup.konvaGroup);var t=this.konvaStage.getRelativePointerPosition();this.vertex={x:t.x,y:t.y},this.ellipse=new(IE().Ellipse)({radiusX:0,radiusY:0,x:t.x,y:t.y,strokeScaleEnabled:!1,visible:!1,stroke:this.currentAnnotation.style.color,strokeWidth:this.currentAnnotation.style.strokeWidth,opacity:this.currentAnnotation.style.opacity}),this.currentShapeGroup.konvaGroup.add(this.ellipse),window.addEventListener(\"mouseup\",this.globalPointerUpHandler)}}},{key:\"mouseMoveHandler\",value:function(e){if(this.isPainting){e.evt.preventDefault(),this.ellipse.show();var t=this.konvaStage.getRelativePointerPosition(),r=Math.abs(t.x-this.vertex.x)/2,n=Math.abs(t.y-this.vertex.y)/2,o={x:(t.x-this.vertex.x)/2+this.vertex.x,y:(t.y-this.vertex.y)/2+this.vertex.y,radiusX:r,radiusY:n};this.ellipse.setAttrs(o)}}},{key:\"mouseUpHandler\",value:function(){if(this.isPainting){this.isPainting=!1;var e=this.ellipse.getParent();if(this.ellipse.isVisible()||\"Group\"!==e.getType()){if(this.isTooSmall())return this.ellipse.destroy(),this.delShapeGroup(e.id()),void(this.ellipse=null);this.setShapeGroupDone({id:e.id(),color:this.currentAnnotation.style.color,contentsObj:{text:\"\"}}),this.ellipse=null}else this.delShapeGroup(e.id())}}},{key:\"isTooSmall\",value:function(){var e=this.ellipse.size(),t=e.width,r=e.height;return Math.max(t,r)<vL.MinSize}},{key:\"changeStyle\",value:function(e,t){var r=e.id,n=this.getShapeGroupById(r);if(n){n.getChildren().forEach((function(e){e instanceof IE().Ellipse&&(void 0!==t.color&&e.stroke(t.color),void 0!==t.strokeWidth&&e.strokeWidth(t.strokeWidth),void 0!==t.opacity&&e.opacity(t.opacity))}));var o={konvaString:n.toJSON()};void 0!==t.color&&(o.color=t.color),this.setChanged(r,o)}}}])}(vL);function TL(e){return TL=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},TL(e)}function jL(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function PL(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?jL(Object(r),!0).forEach((function(t){NL(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):jL(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function ML(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,FL(n.key),n)}}function RL(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(RL=function(){return!!e})()}function _L(e){return _L=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},_L(e)}function IL(e,t){return IL=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},IL(e,t)}function NL(e,t,r){return(t=FL(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function FL(e){var t=function(e){if(\"object\"!=TL(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=TL(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==TL(t)?t:t+\"\"}var DL=function(e){function t(e){var r;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),NL(r=function(e,t,r){return t=_L(t),function(e,t){if(t&&(\"object\"==TL(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,RL()?Reflect.construct(t,r||[],_L(e).constructor):t.apply(e,r))}(this,t,[PL(PL({},e),{},{editorType:To.FREEHAND})]),\"globalPointerUpHandler\",(function(e){0===e.button&&(r.mouseUpHandler(),window.removeEventListener(\"mouseup\",r.globalPointerUpHandler))})),r.line=null,r}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&IL(e,t)}(t,e),function(e,t){return t&&ML(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"mouseDownHandler\",value:function(e){if(e.currentTarget===this.konvaStage){vL.TimerClear(this.pageNumber),this.line=null,this.isPainting=!0,this.currentShapeGroup||(this.currentShapeGroup=this.createShapeGroup(),this.getBgLayer().add(this.currentShapeGroup.konvaGroup));var t=this.konvaStage.getRelativePointerPosition();this.line=new(IE().Line)({strokeScaleEnabled:!1,stroke:this.currentAnnotation.style.color,strokeWidth:this.currentAnnotation.style.strokeWidth,opacity:this.currentAnnotation.style.opacity,lineCap:\"round\",lineJoin:\"round\",hitStrokeWidth:20,visible:!1,globalCompositeOperation:\"source-over\",points:[t.x,t.y,t.x,t.y]}),this.currentShapeGroup.konvaGroup.add(this.line),window.addEventListener(\"mouseup\",this.globalPointerUpHandler)}}},{key:\"mouseMoveHandler\",value:function(e){if(this.isPainting){e.evt.preventDefault(),this.line.show();var t=this.konvaStage.getRelativePointerPosition(),r=this.line.points().concat([t.x,t.y]);this.line.points(r)}}},{key:\"mouseUpHandler\",value:function(){var e=this;if(this.isPainting){this.isPainting=!1;var t=this.line.getParent();if(this.isTooSmall())return this.line.destroy(),void vL.TimerStart(this.pageNumber,(function(){e.setShapeGroupDone({id:t.id(),color:e.currentAnnotation.style.color,contentsObj:{text:\"\"}}),e.currentShapeGroup=null}));vL.TimerStart(this.pageNumber,(function(){e.setShapeGroupDone({id:t.id(),color:e.currentAnnotation.style.color,contentsObj:{text:\"\"}}),e.currentShapeGroup=null})),this.line=null}}},{key:\"isTooSmall\",value:function(){return this.line.points().length<vL.MinSize}},{key:\"changeStyle\",value:function(e,t){var r=e.id,n=this.getShapeGroupById(r);if(n){n.getChildren().forEach((function(e){e instanceof IE().Line&&(void 0!==t.color&&e.stroke(t.color),void 0!==t.strokeWidth&&e.strokeWidth(t.strokeWidth),void 0!==t.opacity&&e.opacity(t.opacity))}));var o={konvaString:n.toJSON()};void 0!==t.color&&(o.color=t.color),this.setChanged(r,o)}}}])}(vL);function BL(e){return BL=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},BL(e)}function LL(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function zL(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?LL(Object(r),!0).forEach((function(t){GL(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):LL(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function HL(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,qL(n.key),n)}}function UL(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(UL=function(){return!!e})()}function VL(e){return VL=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},VL(e)}function WL(e,t){return WL=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},WL(e,t)}function GL(e,t,r){return(t=qL(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function qL(e){var t=function(e){if(\"object\"!=BL(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=BL(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==BL(t)?t:t+\"\"}var KL=function(e){function t(e){var r;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),GL(r=function(e,t,r){return t=VL(t),function(e,t){if(t&&(\"object\"==BL(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,UL()?Reflect.construct(t,r||[],VL(e).constructor):t.apply(e,r))}(this,t,[zL(zL({},e),{},{editorType:To.FREE_HIGHLIGHT})]),\"globalPointerUpHandler\",(function(e){0===e.button&&(r.mouseUpHandler(),window.removeEventListener(\"mouseup\",r.globalPointerUpHandler))})),r.line=null,r}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&WL(e,t)}(t,e),function(e,t){return t&&HL(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"mouseDownHandler\",value:function(e){if(e.currentTarget===this.konvaStage){this.line=null,this.isPainting=!0,this.currentShapeGroup=this.createShapeGroup(),this.getBgLayer().add(this.currentShapeGroup.konvaGroup);var t=this.konvaStage.getRelativePointerPosition();this.line=new(IE().Line)({strokeScaleEnabled:!1,stroke:this.currentAnnotation.style.color,strokeWidth:this.currentAnnotation.style.strokeWidth,opacity:this.currentAnnotation.style.opacity,hitStrokeWidth:this.currentAnnotation.style.strokeWidth,lineCap:\"round\",lineJoin:\"round\",visible:!1,globalCompositeOperation:\"source-over\",points:[t.x,t.y]}),this.currentShapeGroup.konvaGroup.add(this.line),window.addEventListener(\"mouseup\",this.globalPointerUpHandler)}}},{key:\"mouseMoveHandler\",value:function(e){if(this.isPainting){e.evt.preventDefault(),this.line.show();var t=this.konvaStage.getRelativePointerPosition(),r=this.line.points().concat([t.x,t.y]);this.line.points(r)}}},{key:\"mouseUpHandler\",value:function(){var e;if(this.isPainting){this.isPainting=!1;var t=null===(e=this.line)||void 0===e?void 0:e.getParent();if(!t||this.line.isVisible()||\"Group\"!==t.getType()){var r;if(this.isTooSmall())return null===(r=this.line)||void 0===r||r.destroy(),t&&this.delShapeGroup(t.id()),void(this.line=null);if(this.line){var n=this.line.points(),o=this.correctLineIfStraight(n);this.line.points(o),this.setShapeGroupDone({id:t.id(),color:this.currentAnnotation.style.color,contentsObj:{text:\"\"}}),this.line=null}}else this.delShapeGroup(t.id())}}},{key:\"correctLineIfStraight\",value:function(e){var t=e[0],r=e[1],n=e[e.length-2],o=e[e.length-1],i=n-t,a=o-r,s=Math.atan2(a,i),l=Math.abs(s*(180/Math.PI)),c=l<=2||l>=178,u=Math.abs(l-90)<=2;return c?e.map((function(e,t){return t%2==0?e:r})):u?e.map((function(e,r){return r%2==0?t:e})):e}},{key:\"isTooSmall\",value:function(){var e;return((null===(e=this.line)||void 0===e?void 0:e.points().length)||0)<5}},{key:\"changeStyle\",value:function(e,t){var r=e.id,n=this.getShapeGroupById(r);if(n){n.getChildren().forEach((function(e){e instanceof IE().Line&&(void 0!==t.color&&e.stroke(t.color),void 0!==t.strokeWidth&&e.strokeWidth(t.strokeWidth),void 0!==t.opacity&&e.opacity(t.opacity))}));var o={konvaString:n.toJSON()};void 0!==t.color&&(o.color=t.color),this.setChanged(r,o)}}}])}(vL);const XL={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M724 218.3V141c0-6.7-7.7-10.4-12.9-6.3L260.3 486.8a31.86 31.86 0 000 50.3l450.8 352.1c5.3 4.1 12.9.4 12.9-6.3v-77.3c0-4.9-2.3-9.6-6.1-12.6l-360-281 360-281.1c3.8-3 6.1-7.7 6.1-12.6z\"}}]},name:\"left\",theme:\"outlined\"};var YL=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:XL}))};const $L=m.forwardRef(YL);var ZL=$c.ESC,QL=$c.TAB;const JL=(0,m.forwardRef)((function(e,t){var r=e.overlay,n=e.arrow,o=e.prefixCls,i=(0,m.useMemo)((function(){return\"function\"==typeof r?r():r}),[r]),a=Cn(t,An(i));return m.createElement(m.Fragment,null,n&&m.createElement(\"div\",{className:\"\".concat(o,\"-arrow\")}),m.cloneElement(i,{ref:En(i)?a:void 0}))}));var ez={adjustX:1,adjustY:1},tz=[0,0];const rz={topLeft:{points:[\"bl\",\"tl\"],overflow:ez,offset:[0,-4],targetOffset:tz},top:{points:[\"bc\",\"tc\"],overflow:ez,offset:[0,-4],targetOffset:tz},topRight:{points:[\"br\",\"tr\"],overflow:ez,offset:[0,-4],targetOffset:tz},bottomLeft:{points:[\"tl\",\"bl\"],overflow:ez,offset:[0,4],targetOffset:tz},bottom:{points:[\"tc\",\"bc\"],overflow:ez,offset:[0,4],targetOffset:tz},bottomRight:{points:[\"tr\",\"br\"],overflow:ez,offset:[0,4],targetOffset:tz}};var nz=[\"arrow\",\"prefixCls\",\"transitionName\",\"animation\",\"align\",\"placement\",\"placements\",\"getPopupContainer\",\"showAction\",\"hideAction\",\"overlayClassName\",\"overlayStyle\",\"visible\",\"trigger\",\"autoFocus\",\"overlay\",\"children\",\"onVisibleChange\"];function oz(e,t){var r,n=e.arrow,o=void 0!==n&&n,i=e.prefixCls,a=void 0===i?\"rc-dropdown\":i,s=e.transitionName,l=e.animation,c=e.align,u=e.placement,d=void 0===u?\"bottomLeft\":u,f=e.placements,h=void 0===f?rz:f,p=e.getPopupContainer,g=e.showAction,v=e.hideAction,b=e.overlayClassName,y=e.overlayStyle,w=e.visible,x=e.trigger,S=void 0===x?[\"hover\"]:x,C=e.autoFocus,k=e.overlay,E=e.children,O=e.onVisibleChange,A=Be(e,nz),T=Ie(m.useState(),2),j=T[0],P=T[1],M=\"visible\"in e?w:j,R=m.useRef(null),_=m.useRef(null),I=m.useRef(null);m.useImperativeHandle(t,(function(){return R.current}));var N=function(e){P(e),null==O||O(e)};!function(e){var t=e.visible,r=e.triggerRef,n=e.onVisibleChange,o=e.autoFocus,i=e.overlayRef,a=m.useRef(!1),s=function(){var e,o;t&&(null===(e=r.current)||void 0===e||null===(o=e.focus)||void 0===o||o.call(e),null==n||n(!1))},l=function(){var e;return!(null===(e=i.current)||void 0===e||!e.focus||(i.current.focus(),a.current=!0,0))},c=function(e){switch(e.keyCode){case ZL:s();break;case QL:var t=!1;a.current||(t=l()),t?e.preventDefault():s()}};m.useEffect((function(){return t?(window.addEventListener(\"keydown\",c),o&&Ol(l,3),function(){window.removeEventListener(\"keydown\",c),a.current=!1}):function(){a.current=!1}}),[t])}({visible:M,triggerRef:I,onVisibleChange:N,autoFocus:C,overlayRef:_});var F,D,B,L=function(){return m.createElement(JL,{ref:_,overlay:k,prefixCls:a,arrow:o})},z=m.cloneElement(E,{className:ze()(null===(r=E.props)||void 0===r?void 0:r.className,M&&(F=e.openClassName,void 0!==F?F:\"\".concat(a,\"-open\"))),ref:En(E)?Cn(I,An(E)):void 0}),H=v;return H||-1===S.indexOf(\"contextMenu\")||(H=[\"click\"]),m.createElement(gp,Te({builtinPlacements:h},A,{prefixCls:a,ref:R,popupClassName:ze()(b,De({},\"\".concat(a,\"-show-arrow\"),o)),popupStyle:y,action:S,showAction:g,hideAction:H,popupPlacement:d,popupAlign:c,popupTransitionName:s,popupAnimation:l,popupVisible:M,stretch:(D=e.minOverlayWidthMatchTrigger,B=e.alignPoint,(\"minOverlayWidthMatchTrigger\"in e?D:!B)?\"minWidth\":\"\"),popup:\"function\"==typeof k?L:L(),onPopupVisibleChange:N,onPopupClick:function(t){var r=e.onOverlayClick;P(!1),r&&r(t)},getPopupContainer:p}),z)}const iz=m.forwardRef(oz);var az=m.createContext(null);function sz(e,t){return void 0===e?null:\"\".concat(e,\"-\").concat(t)}function lz(e){return sz(m.useContext(az),e)}var cz=[\"children\",\"locked\"],uz=m.createContext(null);function dz(e){var t=e.children,r=e.locked,n=Be(e,cz),o=m.useContext(uz),i=gn((function(){return e=n,t=At({},o),Object.keys(e).forEach((function(r){var n=e[r];void 0!==n&&(t[r]=n)})),t;var e,t}),[o,n],(function(e,t){return!(r||e[0]===t[0]&&Jo(e[1],t[1],!0))}));return m.createElement(uz.Provider,{value:i},t)}var fz=[],hz=m.createContext(null);function pz(){return m.useContext(hz)}var mz=m.createContext(fz);function gz(e){var t=m.useContext(mz);return m.useMemo((function(){return void 0!==e?[].concat(Vo(t),[e]):t}),[t,e])}var vz=m.createContext(null);const bz=m.createContext({});function yz(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(rp(e)){var r=e.nodeName.toLowerCase(),n=[\"input\",\"select\",\"textarea\",\"button\"].includes(r)||e.isContentEditable||\"a\"===r&&!!e.getAttribute(\"href\"),o=e.getAttribute(\"tabindex\"),i=Number(o),a=null;return o&&!Number.isNaN(i)?a=i:n&&null===a&&(a=0),n&&e.disabled&&(a=null),null!==a&&(a>=0||t&&a<0)}return!1}var wz=$c.LEFT,xz=$c.RIGHT,Sz=$c.UP,Cz=$c.DOWN,kz=$c.ENTER,Ez=$c.ESC,Oz=$c.HOME,Az=$c.END,Tz=[Sz,Cz,wz,xz];function jz(e,t){return function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=Vo(e.querySelectorAll(\"*\")).filter((function(e){return yz(e,t)}));return yz(e,t)&&r.unshift(e),r}(e,!0).filter((function(e){return t.has(e)}))}function Pz(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;if(!e)return null;var o=jz(e,t),i=o.length,a=o.findIndex((function(e){return r===e}));return n<0?-1===a?a=i-1:a-=1:n>0&&(a+=1),o[a=(a+i)%i]}var Mz=function(e,t){var r=new Set,n=new Map,o=new Map;return e.forEach((function(e){var i=document.querySelector(\"[data-menu-id='\".concat(sz(t,e),\"']\"));i&&(r.add(i),o.set(i,e),n.set(e,i))})),{elements:r,key2element:n,element2key:o}};var Rz=\"__RC_UTIL_PATH_SPLIT__\",_z=function(e){return e.join(Rz)},Iz=\"rc-menu-more\";function Nz(e){var t=m.useRef(e);t.current=e;var r=m.useCallback((function(){for(var e,r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];return null===(e=t.current)||void 0===e?void 0:e.call.apply(e,[t].concat(n))}),[]);return e?r:void 0}var Fz=Math.random().toFixed(5).toString().slice(2),Dz=0;function Bz(e,t,r,n){var o=m.useContext(uz),i=o.activeKey,a=o.onActive,s=o.onInactive,l={active:i===e};return t||(l.onMouseEnter=function(t){null==r||r({key:e,domEvent:t}),a(e)},l.onMouseLeave=function(t){null==n||n({key:e,domEvent:t}),s(e)}),l}function Lz(e){var t=m.useContext(uz),r=t.mode,n=t.rtl,o=t.inlineIndent;return\"inline\"!==r?null:n?{paddingRight:e*o}:{paddingLeft:e*o}}function zz(e){var t,r=e.icon,n=e.props,o=e.children;return null===r||!1===r?null:(\"function\"==typeof r?t=m.createElement(r,At({},n)):\"boolean\"!=typeof r&&(t=r),t||o||null)}var Hz=[\"item\"];function Uz(e){var t=e.item,r=Be(e,Hz);return Object.defineProperty(r,\"item\",{get:function(){return Xt(!1,\"`info.item` is deprecated since we will move to function component that not provides React Node instance in future.\"),t}}),r}var Vz=[\"title\",\"attribute\",\"elementRef\"],Wz=[\"style\",\"className\",\"eventKey\",\"warnKey\",\"disabled\",\"itemIcon\",\"children\",\"role\",\"onMouseEnter\",\"onMouseLeave\",\"onClick\",\"onKeyDown\",\"onFocus\"],Gz=[\"active\"],qz=function(e){Bs(r,e);var t=Us(r);function r(){return ei(this,r),t.apply(this,arguments)}return ri(r,[{key:\"render\",value:function(){var e=this.props,t=e.title,r=e.attribute,n=e.elementRef,o=kf(Be(e,Vz),[\"eventKey\",\"popupClassName\",\"popupOffset\",\"onTitleClick\"]);return Xt(!r,\"`attribute` of Menu.Item is deprecated. Please pass attribute directly.\"),m.createElement(Mg.Item,Te({},r,{title:\"string\"==typeof t?t:void 0},o,{ref:n}))}}]),r}(m.Component),Kz=m.forwardRef((function(e,t){var r=e.style,n=e.className,o=e.eventKey,i=(e.warnKey,e.disabled),a=e.itemIcon,s=e.children,l=e.role,c=e.onMouseEnter,u=e.onMouseLeave,d=e.onClick,f=e.onKeyDown,h=e.onFocus,p=Be(e,Wz),g=lz(o),v=m.useContext(uz),b=v.prefixCls,y=v.onItemClick,w=v.disabled,x=v.overflowDisabled,S=v.itemIcon,C=v.selectedKeys,k=v.onActive,E=m.useContext(bz)._internalRenderMenuItem,O=\"\".concat(b,\"-item\"),A=m.useRef(),T=m.useRef(),j=w||i,P=kn(t,T),M=gz(o),R=function(e){return{key:o,keyPath:Vo(M).reverse(),item:A.current,domEvent:e}},_=a||S,I=Bz(o,j,c,u),N=I.active,F=Be(I,Gz),D=C.includes(o),B=Lz(M.length),L={};\"option\"===e.role&&(L[\"aria-selected\"]=D);var z=m.createElement(qz,Te({ref:A,elementRef:P,role:null===l?\"none\":l||\"menuitem\",tabIndex:i?null:-1,\"data-menu-id\":x&&g?null:g},kf(p,[\"extra\"]),F,L,{component:\"li\",\"aria-disabled\":i,style:At(At({},B),r),className:ze()(O,De(De(De({},\"\".concat(O,\"-active\"),N),\"\".concat(O,\"-selected\"),D),\"\".concat(O,\"-disabled\"),j),n),onClick:function(e){if(!j){var t=R(e);null==d||d(Uz(t)),y(t)}},onKeyDown:function(e){if(null==f||f(e),e.which===$c.ENTER){var t=R(e);null==d||d(Uz(t)),y(t)}},onFocus:function(e){k(o),null==h||h(e)}}),s,m.createElement(zz,{props:At(At({},e),{},{isSelected:D}),icon:_}));return E&&(z=E(z,e,{selected:D})),z}));function Xz(e,t){var r=e.eventKey,n=pz(),o=gz(r);return m.useEffect((function(){if(n)return n.registerPath(r,o),function(){n.unregisterPath(r,o)}}),[o]),n?null:m.createElement(Kz,Te({},e,{ref:t}))}const Yz=m.forwardRef(Xz);var $z=[\"className\",\"children\"],Zz=function(e,t){var r=e.className,n=e.children,o=Be(e,$z),i=m.useContext(uz),a=i.prefixCls,s=i.mode,l=i.rtl;return m.createElement(\"ul\",Te({className:ze()(a,l&&\"\".concat(a,\"-rtl\"),\"\".concat(a,\"-sub\"),\"\".concat(a,\"-\").concat(\"inline\"===s?\"inline\":\"vertical\"),r),role:\"menu\"},o,{\"data-menu-list\":!0,ref:t}),n)},Qz=m.forwardRef(Zz);Qz.displayName=\"SubMenuList\";const Jz=Qz;function eH(e,t){return sd(e).map((function(e,r){if(m.isValidElement(e)){var n,o,i=e.key,a=null!==(n=null===(o=e.props)||void 0===o?void 0:o.eventKey)&&void 0!==n?n:i;null==a&&(a=\"tmp_key-\".concat([].concat(Vo(t),[r]).join(\"-\")));var s={key:a,eventKey:a};return m.cloneElement(e,s)}return e}))}var tH={adjustX:1,adjustY:1},rH={topLeft:{points:[\"bl\",\"tl\"],overflow:tH},topRight:{points:[\"br\",\"tr\"],overflow:tH},bottomLeft:{points:[\"tl\",\"bl\"],overflow:tH},bottomRight:{points:[\"tr\",\"br\"],overflow:tH},leftTop:{points:[\"tr\",\"tl\"],overflow:tH},leftBottom:{points:[\"br\",\"bl\"],overflow:tH},rightTop:{points:[\"tl\",\"tr\"],overflow:tH},rightBottom:{points:[\"bl\",\"br\"],overflow:tH}},nH={topLeft:{points:[\"bl\",\"tl\"],overflow:tH},topRight:{points:[\"br\",\"tr\"],overflow:tH},bottomLeft:{points:[\"tl\",\"bl\"],overflow:tH},bottomRight:{points:[\"tr\",\"br\"],overflow:tH},rightTop:{points:[\"tr\",\"tl\"],overflow:tH},rightBottom:{points:[\"br\",\"bl\"],overflow:tH},leftTop:{points:[\"tl\",\"tr\"],overflow:tH},leftBottom:{points:[\"bl\",\"br\"],overflow:tH}};function oH(e,t,r){return t||(r?r[e]||r.other:void 0)}var iH={horizontal:\"bottomLeft\",vertical:\"rightTop\",\"vertical-left\":\"rightTop\",\"vertical-right\":\"leftTop\"};function aH(e){var t=e.prefixCls,r=e.visible,n=e.children,o=e.popup,i=e.popupStyle,a=e.popupClassName,s=e.popupOffset,l=e.disabled,c=e.mode,u=e.onVisibleChange,d=m.useContext(uz),f=d.getPopupContainer,h=d.rtl,p=d.subMenuOpenDelay,g=d.subMenuCloseDelay,v=d.builtinPlacements,b=d.triggerSubMenuAction,y=d.forceSubMenuRender,w=d.rootClassName,x=d.motion,S=d.defaultMotions,C=Ie(m.useState(!1),2),k=C[0],E=C[1],O=At(At({},h?nH:rH),v),A=iH[c],T=oH(c,x,S),j=m.useRef(T);\"inline\"!==c&&(j.current=T);var P=At(At({},j.current),{},{leavedClassName:\"\".concat(t,\"-hidden\"),removeOnLeave:!1,motionAppear:!0}),M=m.useRef();return m.useEffect((function(){return M.current=Ol((function(){E(r)})),function(){Ol.cancel(M.current)}}),[r]),m.createElement(gp,{prefixCls:t,popupClassName:ze()(\"\".concat(t,\"-popup\"),De({},\"\".concat(t,\"-rtl\"),h),a,w),stretch:\"horizontal\"===c?\"minWidth\":null,getPopupContainer:f,builtinPlacements:O,popupPlacement:A,popupVisible:k,popup:o,popupStyle:i,popupAlign:s&&{offset:s},action:l?[]:[b],mouseEnterDelay:p,mouseLeaveDelay:g,onPopupVisibleChange:u,forceRender:y,popupMotion:P,fresh:!0},n)}function sH(e){var t=e.id,r=e.open,n=e.keyPath,o=e.children,i=\"inline\",a=m.useContext(uz),s=a.prefixCls,l=a.forceSubMenuRender,c=a.motion,u=a.defaultMotions,d=a.mode,f=m.useRef(!1);f.current=d===i;var h=Ie(m.useState(!f.current),2),p=h[0],g=h[1],v=!!f.current&&r;m.useEffect((function(){f.current&&g(!1)}),[d]);var b=At({},oH(i,c,u));n.length>1&&(b.motionAppear=!1);var y=b.onVisibleChanged;return b.onVisibleChanged=function(e){return f.current||e||g(!0),null==y?void 0:y(e)},p?null:m.createElement(dz,{mode:i,locked:!f.current},m.createElement(Vl,Te({visible:v},b,{forceRender:l,removeOnLeave:!1,leavedClassName:\"\".concat(s,\"-hidden\")}),(function(e){var r=e.className,n=e.style;return m.createElement(Jz,{id:t,className:r,style:n},o)})))}var lH=[\"style\",\"className\",\"title\",\"eventKey\",\"warnKey\",\"disabled\",\"internalPopupClose\",\"children\",\"itemIcon\",\"expandIcon\",\"popupClassName\",\"popupOffset\",\"popupStyle\",\"onClick\",\"onMouseEnter\",\"onMouseLeave\",\"onTitleClick\",\"onTitleMouseEnter\",\"onTitleMouseLeave\"],cH=[\"active\"],uH=m.forwardRef((function(e,t){var r=e.style,n=e.className,o=e.title,i=e.eventKey,a=(e.warnKey,e.disabled),s=e.internalPopupClose,l=e.children,c=e.itemIcon,u=e.expandIcon,d=e.popupClassName,f=e.popupOffset,h=e.popupStyle,p=e.onClick,g=e.onMouseEnter,v=e.onMouseLeave,b=e.onTitleClick,y=e.onTitleMouseEnter,w=e.onTitleMouseLeave,x=Be(e,lH),S=lz(i),C=m.useContext(uz),k=C.prefixCls,E=C.mode,O=C.openKeys,A=C.disabled,T=C.overflowDisabled,j=C.activeKey,P=C.selectedKeys,M=C.itemIcon,R=C.expandIcon,_=C.onItemClick,I=C.onOpenChange,N=C.onActive,F=m.useContext(bz)._internalRenderSubMenuItem,D=m.useContext(vz).isSubPathKey,B=gz(),L=\"\".concat(k,\"-submenu\"),z=A||a,H=m.useRef(),U=m.useRef(),V=null!=c?c:M,W=null!=u?u:R,G=O.includes(i),q=!T&&G,K=D(P,i),X=Bz(i,z,y,w),Y=X.active,$=Be(X,cH),Z=Ie(m.useState(!1),2),Q=Z[0],J=Z[1],ee=function(e){z||J(e)},te=m.useMemo((function(){return Y||\"inline\"!==E&&(Q||D([j],i))}),[E,Y,j,Q,i,D]),re=Lz(B.length),ne=Nz((function(e){null==p||p(Uz(e)),_(e)})),oe=S&&\"\".concat(S,\"-popup\"),ie=m.useMemo((function(){return m.createElement(zz,{icon:\"horizontal\"!==E?W:void 0,props:At(At({},e),{},{isOpen:q,isSubMenu:!0})},m.createElement(\"i\",{className:\"\".concat(L,\"-arrow\")}))}),[E,W,e,q,L]),ae=m.createElement(\"div\",Te({role:\"menuitem\",style:re,className:\"\".concat(L,\"-title\"),tabIndex:z?null:-1,ref:H,title:\"string\"==typeof o?o:null,\"data-menu-id\":T&&S?null:S,\"aria-expanded\":q,\"aria-haspopup\":!0,\"aria-controls\":oe,\"aria-disabled\":z,onClick:function(e){z||(null==b||b({key:i,domEvent:e}),\"inline\"===E&&I(i,!G))},onFocus:function(){N(i)}},$),o,ie),se=m.useRef(E);if(\"inline\"!==E&&B.length>1?se.current=\"vertical\":se.current=E,!T){var le=se.current;ae=m.createElement(aH,{mode:le,prefixCls:L,visible:!s&&q&&\"inline\"!==E,popupClassName:d,popupOffset:f,popupStyle:h,popup:m.createElement(dz,{mode:\"horizontal\"===le?\"vertical\":le},m.createElement(Jz,{id:oe,ref:U},l)),disabled:z,onVisibleChange:function(e){\"inline\"!==E&&I(i,e)}},ae)}var ce=m.createElement(Mg.Item,Te({ref:t,role:\"none\"},x,{component:\"li\",style:r,className:ze()(L,\"\".concat(L,\"-\").concat(E),n,De(De(De(De({},\"\".concat(L,\"-open\"),q),\"\".concat(L,\"-active\"),te),\"\".concat(L,\"-selected\"),K),\"\".concat(L,\"-disabled\"),z)),onMouseEnter:function(e){ee(!0),null==g||g({key:i,domEvent:e})},onMouseLeave:function(e){ee(!1),null==v||v({key:i,domEvent:e})}}),ae,!T&&m.createElement(sH,{id:oe,open:q,keyPath:B},l));return F&&(ce=F(ce,e,{selected:K,active:te,open:q,disabled:z})),m.createElement(dz,{onItemClick:ne,mode:\"horizontal\"===E?\"vertical\":E,itemIcon:V,expandIcon:W},ce)}));const dH=m.forwardRef((function(e,t){var r,n=e.eventKey,o=e.children,i=gz(n),a=eH(o,i),s=pz();return m.useEffect((function(){if(s)return s.registerPath(n,i),function(){s.unregisterPath(n,i)}}),[i]),r=s?a:m.createElement(uH,Te({ref:t},e),a),m.createElement(mz.Provider,{value:i},r)}));function fH(e){var t=e.className,r=e.style,n=m.useContext(uz).prefixCls;return pz()?null:m.createElement(\"li\",{role:\"separator\",className:ze()(\"\".concat(n,\"-item-divider\"),t),style:r})}var hH=[\"className\",\"title\",\"eventKey\",\"children\"],pH=m.forwardRef((function(e,t){var r=e.className,n=e.title,o=(e.eventKey,e.children),i=Be(e,hH),a=m.useContext(uz).prefixCls,s=\"\".concat(a,\"-item-group\");return m.createElement(\"li\",Te({ref:t,role:\"presentation\"},i,{onClick:function(e){return e.stopPropagation()},className:ze()(s,r)}),m.createElement(\"div\",{role:\"presentation\",className:\"\".concat(s,\"-title\"),title:\"string\"==typeof n?n:void 0},n),m.createElement(\"ul\",{role:\"group\",className:\"\".concat(s,\"-list\")},o))}));const mH=m.forwardRef((function(e,t){var r=e.eventKey,n=eH(e.children,gz(r));return pz()?n:m.createElement(pH,Te({ref:t},kf(e,[\"warnKey\"])),n)}));var gH=[\"label\",\"children\",\"key\",\"type\",\"extra\"];function vH(e,t,r){var n=t.item,o=t.group,i=t.submenu,a=t.divider;return(e||[]).map((function(e,s){if(e&&\"object\"===Ne(e)){var l=e,c=l.label,u=l.children,d=l.key,f=l.type,h=l.extra,p=Be(l,gH),g=null!=d?d:\"tmp-\".concat(s);return u||\"group\"===f?\"group\"===f?m.createElement(o,Te({key:g},p,{title:c}),vH(u,t,r)):m.createElement(i,Te({key:g},p,{title:c}),vH(u,t,r)):\"divider\"===f?m.createElement(a,Te({key:g},p)):m.createElement(n,Te({key:g},p,{extra:h}),c,(!!h||0===h)&&m.createElement(\"span\",{className:\"\".concat(r,\"-item-extra\")},h))}return null})).filter((function(e){return e}))}function bH(e,t,r,n,o){var i=e,a=At({divider:fH,item:Yz,group:mH,submenu:dH},n);return t&&(i=vH(t,a,o)),eH(i,r)}var yH=[\"prefixCls\",\"rootClassName\",\"style\",\"className\",\"tabIndex\",\"items\",\"children\",\"direction\",\"id\",\"mode\",\"inlineCollapsed\",\"disabled\",\"disabledOverflow\",\"subMenuOpenDelay\",\"subMenuCloseDelay\",\"forceSubMenuRender\",\"defaultOpenKeys\",\"openKeys\",\"activeKey\",\"defaultActiveFirst\",\"selectable\",\"multiple\",\"defaultSelectedKeys\",\"selectedKeys\",\"onSelect\",\"onDeselect\",\"inlineIndent\",\"motion\",\"defaultMotions\",\"triggerSubMenuAction\",\"builtinPlacements\",\"itemIcon\",\"expandIcon\",\"overflowedIndicator\",\"overflowedIndicatorPopupClassName\",\"getPopupContainer\",\"onClick\",\"onOpenChange\",\"onKeyDown\",\"openAnimation\",\"openTransitionName\",\"_internalRenderMenuItem\",\"_internalRenderSubMenuItem\",\"_internalComponents\"],wH=[],xH=m.forwardRef((function(e,t){var r,n=e,o=n.prefixCls,i=void 0===o?\"rc-menu\":o,a=n.rootClassName,s=n.style,l=n.className,c=n.tabIndex,u=void 0===c?0:c,d=n.items,f=n.children,h=n.direction,p=n.id,g=n.mode,v=void 0===g?\"vertical\":g,b=n.inlineCollapsed,y=n.disabled,w=n.disabledOverflow,x=n.subMenuOpenDelay,S=void 0===x?.1:x,C=n.subMenuCloseDelay,k=void 0===C?.1:C,E=n.forceSubMenuRender,O=n.defaultOpenKeys,A=n.openKeys,T=n.activeKey,j=n.defaultActiveFirst,P=n.selectable,M=void 0===P||P,R=n.multiple,_=void 0!==R&&R,I=n.defaultSelectedKeys,N=n.selectedKeys,F=n.onSelect,D=n.onDeselect,B=n.inlineIndent,L=void 0===B?24:B,z=n.motion,H=n.defaultMotions,U=n.triggerSubMenuAction,V=void 0===U?\"hover\":U,W=n.builtinPlacements,G=n.itemIcon,q=n.expandIcon,K=n.overflowedIndicator,X=void 0===K?\"...\":K,Y=n.overflowedIndicatorPopupClassName,$=n.getPopupContainer,Z=n.onClick,Q=n.onOpenChange,J=n.onKeyDown,ee=(n.openAnimation,n.openTransitionName,n._internalRenderMenuItem),te=n._internalRenderSubMenuItem,re=n._internalComponents,ne=Be(n,yH),oe=Ie(m.useMemo((function(){return[bH(f,d,wH,re,i),bH(f,d,wH,{},i)]}),[f,d,re]),2),ie=oe[0],ae=oe[1],se=Ie(m.useState(!1),2),le=se[0],ce=se[1],ue=m.useRef(),de=function(e){var t=Ie(Ks(e,{value:e}),2),r=t[0],n=t[1];return m.useEffect((function(){Dz+=1;var e=\"\".concat(Fz,\"-\").concat(Dz);n(\"rc-menu-uuid-\".concat(e))}),[]),r}(p),fe=\"rtl\"===h,he=Ks(O,{value:A,postState:function(e){return e||wH}}),pe=Ie(he,2),me=pe[0],ge=pe[1],ve=function(e){function t(){ge(e),null==Q||Q(e)}arguments.length>1&&void 0!==arguments[1]&&arguments[1]?(0,js.flushSync)(t):t()},be=Ie(m.useState(me),2),ye=be[0],we=be[1],xe=m.useRef(!1),Se=Ie(m.useMemo((function(){return\"inline\"!==v&&\"vertical\"!==v||!b?[v,!1]:[\"vertical\",b]}),[v,b]),2),Ce=Se[0],ke=Se[1],Ee=\"inline\"===Ce,Oe=Ie(m.useState(Ce),2),Ae=Oe[0],je=Oe[1],Pe=Ie(m.useState(ke),2),Me=Pe[0],Re=Pe[1];m.useEffect((function(){je(Ce),Re(ke),xe.current&&(Ee?ge(ye):ve(wH))}),[Ce,ke]);var _e=Ie(m.useState(0),2),Ne=_e[0],Fe=_e[1],Le=Ne>=ie.length-1||\"horizontal\"!==Ae||w;m.useEffect((function(){Ee&&we(me)}),[me]),m.useEffect((function(){return xe.current=!0,function(){xe.current=!1}}),[]);var He=function(){var e=Ie(m.useState({}),2)[1],t=(0,m.useRef)(new Map),r=(0,m.useRef)(new Map),n=Ie(m.useState([]),2),o=n[0],i=n[1],a=(0,m.useRef)(0),s=(0,m.useRef)(!1),l=(0,m.useCallback)((function(n,o){var i=_z(o);r.current.set(i,n),t.current.set(n,i),a.current+=1;var l,c=a.current;l=function(){c===a.current&&(s.current||e({}))},Promise.resolve().then(l)}),[]),c=(0,m.useCallback)((function(e,n){var o=_z(n);r.current.delete(o),t.current.delete(e)}),[]),u=(0,m.useCallback)((function(e){i(e)}),[]),d=(0,m.useCallback)((function(e,r){var n=(t.current.get(e)||\"\").split(Rz);return r&&o.includes(n[0])&&n.unshift(Iz),n}),[o]),f=(0,m.useCallback)((function(e,t){return e.filter((function(e){return void 0!==e})).some((function(e){return d(e,!0).includes(t)}))}),[d]),h=(0,m.useCallback)((function(e){var n=\"\".concat(t.current.get(e)).concat(Rz),o=new Set;return Vo(r.current.keys()).forEach((function(e){e.startsWith(n)&&o.add(r.current.get(e))})),o}),[]);return m.useEffect((function(){return function(){s.current=!0}}),[]),{registerPath:l,unregisterPath:c,refreshOverflowKeys:u,isSubPathKey:f,getKeyPath:d,getKeys:function(){var e=Vo(t.current.keys());return o.length&&e.push(Iz),e},getSubPathKeys:h}}(),Ue=He.registerPath,Ve=He.unregisterPath,We=He.refreshOverflowKeys,Ge=He.isSubPathKey,qe=He.getKeyPath,Ke=He.getKeys,Xe=He.getSubPathKeys,Ye=m.useMemo((function(){return{registerPath:Ue,unregisterPath:Ve}}),[Ue,Ve]),$e=m.useMemo((function(){return{isSubPathKey:Ge}}),[Ge]);m.useEffect((function(){We(Le?wH:ie.slice(Ne+1).map((function(e){return e.key})))}),[Ne,Le]);var Ze=Ie(Ks(T||j&&(null===(r=ie[0])||void 0===r?void 0:r.key),{value:T}),2),Qe=Ze[0],Je=Ze[1],et=Nz((function(e){Je(e)})),tt=Nz((function(){Je(void 0)}));(0,m.useImperativeHandle)(t,(function(){return{list:ue.current,focus:function(e){var t,r,n=Ke(),o=Mz(n,de),i=o.elements,a=o.key2element,s=o.element2key,l=jz(ue.current,i),c=null!=Qe?Qe:l[0]?s.get(l[0]):null===(t=ie.find((function(e){return!e.props.disabled})))||void 0===t?void 0:t.key,u=a.get(c);c&&u&&(null==u||null===(r=u.focus)||void 0===r||r.call(u,e))}}}));var rt=Ks(I||[],{value:N,postState:function(e){return Array.isArray(e)?e:null==e?wH:[e]}}),nt=Ie(rt,2),ot=nt[0],it=nt[1],at=Nz((function(e){null==Z||Z(Uz(e)),function(e){if(M){var t,r=e.key,n=ot.includes(r);t=_?n?ot.filter((function(e){return e!==r})):[].concat(Vo(ot),[r]):[r],it(t);var o=At(At({},e),{},{selectedKeys:t});n?null==D||D(o):null==F||F(o)}!_&&me.length&&\"inline\"!==Ae&&ve(wH)}(e)})),st=Nz((function(e,t){var r=me.filter((function(t){return t!==e}));if(t)r.push(e);else if(\"inline\"!==Ae){var n=Xe(e);r=r.filter((function(e){return!n.has(e)}))}Jo(me,r,!0)||ve(r,!0)})),lt=function(e,t,r,n,o,i,a,s,l,c){var u=m.useRef(),d=m.useRef();d.current=t;var f=function(){Ol.cancel(u.current)};return m.useEffect((function(){return function(){f()}}),[]),function(h){var p=h.which;if([].concat(Tz,[kz,Ez,Oz,Az]).includes(p)){var m=i(),g=Mz(m,n),v=g,b=v.elements,y=v.key2element,w=v.element2key,x=function(e,t){for(var r=e||document.activeElement;r;){if(t.has(r))return r;r=r.parentElement}return null}(y.get(t),b),S=w.get(x),C=function(e,t,r,n){var o,i=\"prev\",a=\"next\",s=\"children\",l=\"parent\";if(\"inline\"===e&&n===kz)return{inlineTrigger:!0};var c=De(De({},Sz,i),Cz,a),u=De(De(De(De({},wz,r?a:i),xz,r?i:a),Cz,s),kz,s),d=De(De(De(De(De(De({},Sz,i),Cz,a),kz,s),Ez,l),wz,r?s:l),xz,r?l:s);switch(null===(o={inline:c,horizontal:u,vertical:d,inlineSub:c,horizontalSub:d,verticalSub:d}[\"\".concat(e).concat(t?\"\":\"Sub\")])||void 0===o?void 0:o[n]){case i:return{offset:-1,sibling:!0};case a:return{offset:1,sibling:!0};case l:return{offset:-1,sibling:!1};case s:return{offset:1,sibling:!1};default:return null}}(e,1===a(S,!0).length,r,p);if(!C&&p!==Oz&&p!==Az)return;(Tz.includes(p)||[Oz,Az].includes(p))&&h.preventDefault();var k=function(e){if(e){var t=e,r=e.querySelector(\"a\");null!=r&&r.getAttribute(\"href\")&&(t=r);var n=w.get(e);s(n),f(),u.current=Ol((function(){d.current===n&&t.focus()}))}};if([Oz,Az].includes(p)||C.sibling||!x){var E,O,A=jz(E=x&&\"inline\"!==e?function(e){for(var t=e;t;){if(t.getAttribute(\"data-menu-list\"))return t;t=t.parentElement}return null}(x):o.current,b);O=p===Oz?A[0]:p===Az?A[A.length-1]:Pz(E,b,x,C.offset),k(O)}else if(C.inlineTrigger)l(S);else if(C.offset>0)l(S,!0),f(),u.current=Ol((function(){g=Mz(m,n);var e=x.getAttribute(\"aria-controls\"),t=Pz(document.getElementById(e),g.elements);k(t)}),5);else if(C.offset<0){var T=a(S,!0),j=T[T.length-2],P=y.get(j);l(j,!1),k(P)}}null==c||c(h)}}(Ae,Qe,fe,de,ue,Ke,qe,Je,(function(e,t){var r=null!=t?t:!me.includes(e);st(e,r)}),J);m.useEffect((function(){ce(!0)}),[]);var ct=m.useMemo((function(){return{_internalRenderMenuItem:ee,_internalRenderSubMenuItem:te}}),[ee,te]),ut=\"horizontal\"!==Ae||w?ie:ie.map((function(e,t){return m.createElement(dz,{key:e.key,overflowDisabled:t>Ne},e)})),dt=m.createElement(Mg,Te({id:p,ref:ue,prefixCls:\"\".concat(i,\"-overflow\"),component:\"ul\",itemComponent:Yz,className:ze()(i,\"\".concat(i,\"-root\"),\"\".concat(i,\"-\").concat(Ae),l,De(De({},\"\".concat(i,\"-inline-collapsed\"),Me),\"\".concat(i,\"-rtl\"),fe),a),dir:h,style:s,role:\"menu\",tabIndex:u,data:ut,renderRawItem:function(e){return e},renderRawRest:function(e){var t=e.length,r=t?ie.slice(-t):null;return m.createElement(dH,{eventKey:Iz,title:X,disabled:Le,internalPopupClose:0===t,popupClassName:Y},r)},maxCount:\"horizontal\"!==Ae||w?Mg.INVALIDATE:Mg.RESPONSIVE,ssr:\"full\",\"data-menu-list\":!0,onVisibleChange:function(e){Fe(e)},onKeyDown:lt},ne));return m.createElement(bz.Provider,{value:ct},m.createElement(az.Provider,{value:de},m.createElement(dz,{prefixCls:i,rootClassName:a,mode:Ae,openKeys:me,rtl:fe,disabled:y,motion:le?z:null,defaultMotions:le?H:null,activeKey:Qe,onActive:et,onInactive:tt,selectedKeys:ot,inlineIndent:L,subMenuOpenDelay:S,subMenuCloseDelay:k,forceSubMenuRender:E,builtinPlacements:W,triggerSubMenuAction:V,getPopupContainer:$,itemIcon:G,expandIcon:q,onItemClick:at,onOpenChange:st},m.createElement(vz.Provider,{value:$e},dt),m.createElement(\"div\",{style:{display:\"none\"},\"aria-hidden\":!0},m.createElement(hz.Provider,{value:Ye},ae)))))})),SH=xH;SH.Item=Yz,SH.SubMenu=dH,SH.ItemGroup=mH,SH.Divider=fH;const CH=SH,kH=m.createContext({}),EH={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M176 511a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0z\"}}]},name:\"ellipsis\",theme:\"outlined\"};var OH=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:EH}))};const AH=m.forwardRef(OH),TH=(0,m.createContext)({prefixCls:\"\",firstLevel:!0,inlineCollapsed:!1});const jH=e=>{const{prefixCls:t,className:r,dashed:n}=e,o=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"className\",\"dashed\"]),{getPrefixCls:i}=m.useContext(Xo),a=i(\"menu\",t),s=ze()({[`${a}-item-divider-dashed`]:!!n},r);return m.createElement(fH,Object.assign({className:s},o))},PH=e=>{var t;const{className:r,children:n,icon:o,title:i,danger:a,extra:s}=e,{prefixCls:l,firstLevel:c,direction:u,disableMenuItemTitleTooltip:d,inlineCollapsed:f}=m.useContext(TH),{siderCollapsed:h}=m.useContext(kH);let p=i;void 0===i?p=c?n:\"\":!1===i&&(p=\"\");const g={title:p};h||f||(g.title=null,g.open=!1);const v=sd(n).length;let b=m.createElement(Yz,Object.assign({},kf(e,[\"title\",\"icon\",\"danger\"]),{className:ze()({[`${l}-item-danger`]:a,[`${l}-item-only-child`]:1===(o?v+1:v)},r),title:\"string\"==typeof i?i:void 0}),th(o,{className:ze()(m.isValidElement(o)?null===(t=o.props)||void 0===t?void 0:t.className:\"\",`${l}-item-icon`)}),(e=>{const t=null==n?void 0:n[0],r=m.createElement(\"span\",{className:ze()(`${l}-title-content`,{[`${l}-title-content-with-extra`]:!!s||0===s})},n);return(!o||m.isValidElement(n)&&\"span\"===n.type)&&n&&e&&c&&\"string\"==typeof t?m.createElement(\"div\",{className:`${l}-inline-collapsed-noicon`},t.charAt(0)):r})(f));return d||(b=m.createElement(im,Object.assign({},g,{placement:\"rtl\"===u?\"left\":\"right\",classNames:{root:`${l}-inline-collapsed-tooltip`}}),b)),b};const MH=m.createContext(null),RH=m.forwardRef(((e,t)=>{const{children:r}=e,n=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"children\"]),o=m.useContext(MH),i=m.useMemo((()=>Object.assign(Object.assign({},o),n)),[o,n.prefixCls,n.mode,n.selectable,n.rootClassName]),a=function(e){return On(e)&&En(e)}(r),s=kn(t,a?An(r):null);return m.createElement(MH.Provider,{value:i},m.createElement(Uf,{space:!0},a?m.cloneElement(r,{ref:s}):r))})),_H=MH,IH=e=>{const{componentCls:t,motionDurationSlow:r,horizontalLineHeight:n,colorSplit:o,lineWidth:i,lineType:a,itemPaddingInline:s}=e;return{[`${t}-horizontal`]:{lineHeight:n,border:0,borderBottom:`${Si(i)} ${a} ${o}`,boxShadow:\"none\",\"&::after\":{display:\"block\",clear:\"both\",height:0,content:'\"\\\\20\"'},[`${t}-item, ${t}-submenu`]:{position:\"relative\",display:\"inline-block\",verticalAlign:\"bottom\",paddingInline:s},[`> ${t}-item:hover,\\n        > ${t}-item-active,\\n        > ${t}-submenu ${t}-submenu-title:hover`]:{backgroundColor:\"transparent\"},[`${t}-item, ${t}-submenu-title`]:{transition:[`border-color ${r}`,`background ${r}`].join(\",\")},[`${t}-submenu-arrow`]:{display:\"none\"}}}},NH=e=>{let{componentCls:t,menuArrowOffset:r,calc:n}=e;return{[`${t}-rtl`]:{direction:\"rtl\"},[`${t}-submenu-rtl`]:{transformOrigin:\"100% 0\"},[`${t}-rtl${t}-vertical,\\n    ${t}-submenu-rtl ${t}-vertical`]:{[`${t}-submenu-arrow`]:{\"&::before\":{transform:`rotate(-45deg) translateY(${Si(n(r).mul(-1).equal())})`},\"&::after\":{transform:`rotate(45deg) translateY(${Si(r)})`}}}}},FH=e=>Object.assign({},nc(e)),DH=(e,t)=>{const{componentCls:r,itemColor:n,itemSelectedColor:o,subMenuItemSelectedColor:i,groupTitleColor:a,itemBg:s,subMenuItemBg:l,itemSelectedBg:c,activeBarHeight:u,activeBarWidth:d,activeBarBorderWidth:f,motionDurationSlow:h,motionEaseInOut:p,motionEaseOut:m,itemPaddingInline:g,motionDurationMid:v,itemHoverColor:b,lineType:y,colorSplit:w,itemDisabledColor:x,dangerItemColor:S,dangerItemHoverColor:C,dangerItemSelectedColor:k,dangerItemActiveBg:E,dangerItemSelectedBg:O,popupBg:A,itemHoverBg:T,itemActiveBg:j,menuSubMenuBg:P,horizontalItemSelectedColor:M,horizontalItemSelectedBg:R,horizontalItemBorderRadius:_,horizontalItemHoverBg:I}=e;return{[`${r}-${t}, ${r}-${t} > ${r}`]:{color:n,background:s,[`&${r}-root:focus-visible`]:Object.assign({},FH(e)),[`${r}-item`]:{\"&-group-title, &-extra\":{color:a}},[`${r}-submenu-selected > ${r}-submenu-title`]:{color:i},[`${r}-item, ${r}-submenu-title`]:{color:n,[`&:not(${r}-item-disabled):focus-visible`]:Object.assign({},FH(e))},[`${r}-item-disabled, ${r}-submenu-disabled`]:{color:`${x} !important`},[`${r}-item:not(${r}-item-selected):not(${r}-submenu-selected)`]:{[`&:hover, > ${r}-submenu-title:hover`]:{color:b}},[`&:not(${r}-horizontal)`]:{[`${r}-item:not(${r}-item-selected)`]:{\"&:hover\":{backgroundColor:T},\"&:active\":{backgroundColor:j}},[`${r}-submenu-title`]:{\"&:hover\":{backgroundColor:T},\"&:active\":{backgroundColor:j}}},[`${r}-item-danger`]:{color:S,[`&${r}-item:hover`]:{[`&:not(${r}-item-selected):not(${r}-submenu-selected)`]:{color:C}},[`&${r}-item:active`]:{background:E}},[`${r}-item a`]:{\"&, &:hover\":{color:\"inherit\"}},[`${r}-item-selected`]:{color:o,[`&${r}-item-danger`]:{color:k},\"a, a:hover\":{color:\"inherit\"}},[`& ${r}-item-selected`]:{backgroundColor:c,[`&${r}-item-danger`]:{backgroundColor:O}},[`&${r}-submenu > ${r}`]:{backgroundColor:P},[`&${r}-popup > ${r}`]:{backgroundColor:A},[`&${r}-submenu-popup > ${r}`]:{backgroundColor:A},[`&${r}-horizontal`]:Object.assign(Object.assign({},\"dark\"===t?{borderBottom:0}:{}),{[`> ${r}-item, > ${r}-submenu`]:{top:f,marginTop:e.calc(f).mul(-1).equal(),marginBottom:0,borderRadius:_,\"&::after\":{position:\"absolute\",insetInline:g,bottom:0,borderBottom:`${Si(u)} solid transparent`,transition:`border-color ${h} ${p}`,content:'\"\"'},\"&:hover, &-active, &-open\":{background:I,\"&::after\":{borderBottomWidth:u,borderBottomColor:M}},\"&-selected\":{color:M,backgroundColor:R,\"&:hover\":{backgroundColor:R},\"&::after\":{borderBottomWidth:u,borderBottomColor:M}}}}),[`&${r}-root`]:{[`&${r}-inline, &${r}-vertical`]:{borderInlineEnd:`${Si(f)} ${y} ${w}`}},[`&${r}-inline`]:{[`${r}-sub${r}-inline`]:{background:l},[`${r}-item`]:{position:\"relative\",\"&::after\":{position:\"absolute\",insetBlock:0,insetInlineEnd:0,borderInlineEnd:`${Si(d)} solid ${o}`,transform:\"scaleY(0.0001)\",opacity:0,transition:[`transform ${v} ${m}`,`opacity ${v} ${m}`].join(\",\"),content:'\"\"'},[`&${r}-item-danger`]:{\"&::after\":{borderInlineEndColor:k}}},[`${r}-selected, ${r}-item-selected`]:{\"&::after\":{transform:\"scaleY(1)\",opacity:1,transition:[`transform ${v} ${p}`,`opacity ${v} ${p}`].join(\",\")}}}}}},BH=e=>{const{componentCls:t,itemHeight:r,itemMarginInline:n,padding:o,menuArrowSize:i,marginXS:a,itemMarginBlock:s,itemWidth:l,itemPaddingInline:c}=e,u=e.calc(i).add(o).add(a).equal();return{[`${t}-item`]:{position:\"relative\",overflow:\"hidden\"},[`${t}-item, ${t}-submenu-title`]:{height:r,lineHeight:Si(r),paddingInline:c,overflow:\"hidden\",textOverflow:\"ellipsis\",marginInline:n,marginBlock:s,width:l},[`> ${t}-item,\\n            > ${t}-submenu > ${t}-submenu-title`]:{height:r,lineHeight:Si(r)},[`${t}-item-group-list ${t}-submenu-title,\\n            ${t}-submenu-title`]:{paddingInlineEnd:u}}},LH=e=>{const{componentCls:t,iconCls:r,itemHeight:n,colorTextLightSolid:o,dropdownWidth:i,controlHeightLG:a,motionEaseOut:s,paddingXL:l,itemMarginInline:c,fontSizeLG:u,motionDurationFast:d,motionDurationSlow:f,paddingXS:h,boxShadowSecondary:p,collapsedWidth:m,collapsedIconSize:g}=e,v={height:n,lineHeight:Si(n),listStylePosition:\"inside\",listStyleType:\"disc\"};return[{[t]:{\"&-inline, &-vertical\":Object.assign({[`&${t}-root`]:{boxShadow:\"none\"}},BH(e))},[`${t}-submenu-popup`]:{[`${t}-vertical`]:Object.assign(Object.assign({},BH(e)),{boxShadow:p})}},{[`${t}-submenu-popup ${t}-vertical${t}-sub`]:{minWidth:i,maxHeight:`calc(100vh - ${Si(e.calc(a).mul(2.5).equal())})`,padding:\"0\",overflow:\"hidden\",borderInlineEnd:0,\"&:not([class*='-active'])\":{overflowX:\"hidden\",overflowY:\"auto\"}}},{[`${t}-inline`]:{width:\"100%\",[`&${t}-root`]:{[`${t}-item, ${t}-submenu-title`]:{display:\"flex\",alignItems:\"center\",transition:[`border-color ${f}`,`background ${f}`,`padding ${d} ${s}`].join(\",\"),[`> ${t}-title-content`]:{flex:\"auto\",minWidth:0,overflow:\"hidden\",textOverflow:\"ellipsis\"},\"> *\":{flex:\"none\"}}},[`${t}-sub${t}-inline`]:{padding:0,border:0,borderRadius:0,boxShadow:\"none\",[`& > ${t}-submenu > ${t}-submenu-title`]:v,[`& ${t}-item-group-title`]:{paddingInlineStart:l}},[`${t}-item`]:v}},{[`${t}-inline-collapsed`]:{width:m,[`&${t}-root`]:{[`${t}-item, ${t}-submenu ${t}-submenu-title`]:{[`> ${t}-inline-collapsed-noicon`]:{fontSize:u,textAlign:\"center\"}}},[`> ${t}-item,\\n          > ${t}-item-group > ${t}-item-group-list > ${t}-item,\\n          > ${t}-item-group > ${t}-item-group-list > ${t}-submenu > ${t}-submenu-title,\\n          > ${t}-submenu > ${t}-submenu-title`]:{insetInlineStart:0,paddingInline:`calc(50% - ${Si(e.calc(g).div(2).equal())} - ${Si(c)})`,textOverflow:\"clip\",[`\\n            ${t}-submenu-arrow,\\n            ${t}-submenu-expand-icon\\n          `]:{opacity:0},[`${t}-item-icon, ${r}`]:{margin:0,fontSize:g,lineHeight:Si(n),\"+ span\":{display:\"inline-block\",opacity:0}}},[`${t}-item-icon, ${r}`]:{display:\"inline-block\"},\"&-tooltip\":{pointerEvents:\"none\",[`${t}-item-icon, ${r}`]:{display:\"none\"},\"a, a:hover\":{color:o}},[`${t}-item-group-title`]:Object.assign(Object.assign({},tc),{paddingInline:h})}}]},zH=e=>{const{componentCls:t,motionDurationSlow:r,motionDurationMid:n,motionEaseInOut:o,motionEaseOut:i,iconCls:a,iconSize:s,iconMarginInlineEnd:l}=e;return{[`${t}-item, ${t}-submenu-title`]:{position:\"relative\",display:\"block\",margin:0,whiteSpace:\"nowrap\",cursor:\"pointer\",transition:[`border-color ${r}`,`background ${r}`,`padding calc(${r} + 0.1s) ${o}`].join(\",\"),[`${t}-item-icon, ${a}`]:{minWidth:s,fontSize:s,transition:[`font-size ${n} ${i}`,`margin ${r} ${o}`,`color ${r}`].join(\",\"),\"+ span\":{marginInlineStart:l,opacity:1,transition:[`opacity ${r} ${o}`,`margin ${r}`,`color ${r}`].join(\",\")}},[`${t}-item-icon`]:Object.assign({},{display:\"inline-flex\",alignItems:\"center\",color:\"inherit\",fontStyle:\"normal\",lineHeight:0,textAlign:\"center\",textTransform:\"none\",verticalAlign:\"-0.125em\",textRendering:\"optimizeLegibility\",\"-webkit-font-smoothing\":\"antialiased\",\"-moz-osx-font-smoothing\":\"grayscale\",\"> *\":{lineHeight:1},svg:{display:\"inline-block\"}}),[`&${t}-item-only-child`]:{[`> ${a}, > ${t}-item-icon`]:{marginInlineEnd:0}}},[`${t}-item-disabled, ${t}-submenu-disabled`]:{background:\"none !important\",cursor:\"not-allowed\",\"&::after\":{borderColor:\"transparent !important\"},a:{color:\"inherit !important\",cursor:\"not-allowed\",pointerEvents:\"none\"},[`> ${t}-submenu-title`]:{color:\"inherit !important\",cursor:\"not-allowed\"}}}},HH=e=>{const{componentCls:t,motionDurationSlow:r,motionEaseInOut:n,borderRadius:o,menuArrowSize:i,menuArrowOffset:a}=e;return{[`${t}-submenu`]:{\"&-expand-icon, &-arrow\":{position:\"absolute\",top:\"50%\",insetInlineEnd:e.margin,width:i,color:\"currentcolor\",transform:\"translateY(-50%)\",transition:`transform ${r} ${n}, opacity ${r}`},\"&-arrow\":{\"&::before, &::after\":{position:\"absolute\",width:e.calc(i).mul(.6).equal(),height:e.calc(i).mul(.15).equal(),backgroundColor:\"currentcolor\",borderRadius:o,transition:[`background ${r} ${n}`,`transform ${r} ${n}`,`top ${r} ${n}`,`color ${r} ${n}`].join(\",\"),content:'\"\"'},\"&::before\":{transform:`rotate(45deg) translateY(${Si(e.calc(a).mul(-1).equal())})`},\"&::after\":{transform:`rotate(-45deg) translateY(${Si(a)})`}}}}},UH=e=>{const{antCls:t,componentCls:r,fontSize:n,motionDurationSlow:o,motionDurationMid:i,motionEaseInOut:a,paddingXS:s,padding:l,colorSplit:c,lineWidth:u,zIndexPopup:d,borderRadiusLG:f,subMenuItemBorderRadius:h,menuArrowSize:p,menuArrowOffset:m,lineType:g,groupTitleLineHeight:v,groupTitleFontSize:b}=e;return[{\"\":{[r]:Object.assign(Object.assign({},{\"&::before\":{display:\"table\",content:'\"\"'},\"&::after\":{display:\"table\",clear:\"both\",content:'\"\"'}}),{\"&-hidden\":{display:\"none\"}})},[`${r}-submenu-hidden`]:{display:\"none\"}},{[r]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},rc(e)),{\"&::before\":{display:\"table\",content:'\"\"'},\"&::after\":{display:\"table\",clear:\"both\",content:'\"\"'}}),{marginBottom:0,paddingInlineStart:0,fontSize:n,lineHeight:0,listStyle:\"none\",outline:\"none\",transition:`width ${o} cubic-bezier(0.2, 0, 0, 1) 0s`,\"ul, ol\":{margin:0,padding:0,listStyle:\"none\"},\"&-overflow\":{display:\"flex\",[`${r}-item`]:{flex:\"none\"}},[`${r}-item, ${r}-submenu, ${r}-submenu-title`]:{borderRadius:e.itemBorderRadius},[`${r}-item-group-title`]:{padding:`${Si(s)} ${Si(l)}`,fontSize:b,lineHeight:v,transition:`all ${o}`},[`&-horizontal ${r}-submenu`]:{transition:[`border-color ${o} ${a}`,`background ${o} ${a}`].join(\",\")},[`${r}-submenu, ${r}-submenu-inline`]:{transition:[`border-color ${o} ${a}`,`background ${o} ${a}`,`padding ${i} ${a}`].join(\",\")},[`${r}-submenu ${r}-sub`]:{cursor:\"initial\",transition:[`background ${o} ${a}`,`padding ${o} ${a}`].join(\",\")},[`${r}-title-content`]:{transition:`color ${o}`,\"&-with-extra\":{display:\"inline-flex\",alignItems:\"center\",width:\"100%\"},[`> ${t}-typography-ellipsis-single-line`]:{display:\"inline\",verticalAlign:\"unset\"},[`${r}-item-extra`]:{marginInlineStart:\"auto\",paddingInlineStart:e.padding}},[`${r}-item a`]:{\"&::before\":{position:\"absolute\",inset:0,backgroundColor:\"transparent\",content:'\"\"'}},[`${r}-item-divider`]:{overflow:\"hidden\",lineHeight:0,borderColor:c,borderStyle:g,borderWidth:0,borderTopWidth:u,marginBlock:u,padding:0,\"&-dashed\":{borderStyle:\"dashed\"}}}),zH(e)),{[`${r}-item-group`]:{[`${r}-item-group-list`]:{margin:0,padding:0,[`${r}-item, ${r}-submenu-title`]:{paddingInline:`${Si(e.calc(n).mul(2).equal())} ${Si(l)}`}}},\"&-submenu\":{\"&-popup\":{position:\"absolute\",zIndex:d,borderRadius:f,boxShadow:\"none\",transformOrigin:\"0 0\",[`&${r}-submenu`]:{background:\"transparent\"},\"&::before\":{position:\"absolute\",inset:0,zIndex:-1,width:\"100%\",height:\"100%\",opacity:0,content:'\"\"'},[`> ${r}`]:Object.assign(Object.assign(Object.assign({borderRadius:f},zH(e)),HH(e)),{[`${r}-item, ${r}-submenu > ${r}-submenu-title`]:{borderRadius:h},[`${r}-submenu-title::after`]:{transition:`transform ${o} ${a}`}})},\"\\n          &-placement-leftTop,\\n          &-placement-bottomRight,\\n          \":{transformOrigin:\"100% 0\"},\"\\n          &-placement-leftBottom,\\n          &-placement-topRight,\\n          \":{transformOrigin:\"100% 100%\"},\"\\n          &-placement-rightBottom,\\n          &-placement-topLeft,\\n          \":{transformOrigin:\"0 100%\"},\"\\n          &-placement-bottomLeft,\\n          &-placement-rightTop,\\n          \":{transformOrigin:\"0 0\"},\"\\n          &-placement-leftTop,\\n          &-placement-leftBottom\\n          \":{paddingInlineEnd:e.paddingXS},\"\\n          &-placement-rightTop,\\n          &-placement-rightBottom\\n          \":{paddingInlineStart:e.paddingXS},\"\\n          &-placement-topRight,\\n          &-placement-topLeft\\n          \":{paddingBottom:e.paddingXS},\"\\n          &-placement-bottomRight,\\n          &-placement-bottomLeft\\n          \":{paddingTop:e.paddingXS}}}),HH(e)),{[`&-inline-collapsed ${r}-submenu-arrow,\\n        &-inline ${r}-submenu-arrow`]:{\"&::before\":{transform:`rotate(-45deg) translateX(${Si(m)})`},\"&::after\":{transform:`rotate(45deg) translateX(${Si(e.calc(m).mul(-1).equal())})`}},[`${r}-submenu-open${r}-submenu-inline > ${r}-submenu-title > ${r}-submenu-arrow`]:{transform:`translateY(${Si(e.calc(p).mul(.2).mul(-1).equal())})`,\"&::after\":{transform:`rotate(-45deg) translateX(${Si(e.calc(m).mul(-1).equal())})`},\"&::before\":{transform:`rotate(45deg) translateX(${Si(m)})`}}})},{[`${t}-layout-header`]:{[r]:{lineHeight:\"inherit\"}}}]},VH=e=>{var t,r,n;const{colorPrimary:o,colorError:i,colorTextDisabled:a,colorErrorBg:s,colorText:l,colorTextDescription:c,colorBgContainer:u,colorFillAlter:d,colorFillContent:f,lineWidth:h,lineWidthBold:p,controlItemBgActive:m,colorBgTextHover:g,controlHeightLG:v,lineHeight:b,colorBgElevated:y,marginXXS:w,padding:x,fontSize:S,controlHeightSM:C,fontSizeLG:k,colorTextLightSolid:E,colorErrorHover:O}=e,A=null!==(t=e.activeBarWidth)&&void 0!==t?t:0,T=null!==(r=e.activeBarBorderWidth)&&void 0!==r?r:h,j=null!==(n=e.itemMarginInline)&&void 0!==n?n:e.marginXXS,P=new Ge(E).setA(.65).toRgbString();return{dropdownWidth:160,zIndexPopup:e.zIndexPopupBase+50,radiusItem:e.borderRadiusLG,itemBorderRadius:e.borderRadiusLG,radiusSubMenuItem:e.borderRadiusSM,subMenuItemBorderRadius:e.borderRadiusSM,colorItemText:l,itemColor:l,colorItemTextHover:l,itemHoverColor:l,colorItemTextHoverHorizontal:o,horizontalItemHoverColor:o,colorGroupTitle:c,groupTitleColor:c,colorItemTextSelected:o,itemSelectedColor:o,subMenuItemSelectedColor:o,colorItemTextSelectedHorizontal:o,horizontalItemSelectedColor:o,colorItemBg:u,itemBg:u,colorItemBgHover:g,itemHoverBg:g,colorItemBgActive:f,itemActiveBg:m,colorSubItemBg:d,subMenuItemBg:d,colorItemBgSelected:m,itemSelectedBg:m,colorItemBgSelectedHorizontal:\"transparent\",horizontalItemSelectedBg:\"transparent\",colorActiveBarWidth:0,activeBarWidth:A,colorActiveBarHeight:p,activeBarHeight:p,colorActiveBarBorderSize:h,activeBarBorderWidth:T,colorItemTextDisabled:a,itemDisabledColor:a,colorDangerItemText:i,dangerItemColor:i,colorDangerItemTextHover:i,dangerItemHoverColor:i,colorDangerItemTextSelected:i,dangerItemSelectedColor:i,colorDangerItemBgActive:s,dangerItemActiveBg:s,colorDangerItemBgSelected:s,dangerItemSelectedBg:s,itemMarginInline:j,horizontalItemBorderRadius:0,horizontalItemHoverBg:\"transparent\",itemHeight:v,groupTitleLineHeight:b,collapsedWidth:2*v,popupBg:y,itemMarginBlock:w,itemPaddingInline:x,horizontalLineHeight:1.15*v+\"px\",iconSize:S,iconMarginInlineEnd:C-S,collapsedIconSize:k,groupTitleFontSize:S,darkItemDisabledColor:new Ge(E).setA(.25).toRgbString(),darkItemColor:P,darkDangerItemColor:i,darkItemBg:\"#001529\",darkPopupBg:\"#001529\",darkSubMenuItemBg:\"#000c17\",darkItemSelectedColor:E,darkItemSelectedBg:o,darkDangerItemSelectedBg:i,darkItemHoverBg:\"transparent\",darkGroupTitleColor:P,darkItemHoverColor:E,darkDangerItemHoverColor:O,darkDangerItemSelectedColor:E,darkDangerItemActiveBg:i,itemWidth:A?`calc(100% + ${T}px)`:`calc(100% - ${2*j}px)`}},WH=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e;const r=Iu(\"Menu\",(e=>{const{colorBgElevated:t,controlHeightLG:r,fontSize:n,darkItemColor:o,darkDangerItemColor:i,darkItemBg:a,darkSubMenuItemBg:s,darkItemSelectedColor:l,darkItemSelectedBg:c,darkDangerItemSelectedBg:u,darkItemHoverBg:d,darkGroupTitleColor:f,darkItemHoverColor:h,darkItemDisabledColor:p,darkDangerItemHoverColor:m,darkDangerItemSelectedColor:g,darkDangerItemActiveBg:v,popupBg:b,darkPopupBg:y}=e,w=e.calc(n).div(7).mul(5).equal(),x=Au(e,{menuArrowSize:w,menuHorizontalHeight:e.calc(r).mul(1.15).equal(),menuArrowOffset:e.calc(w).mul(.25).equal(),menuSubMenuBg:t,calc:e.calc,popupBg:b}),S=Au(x,{itemColor:o,itemHoverColor:h,groupTitleColor:f,itemSelectedColor:l,subMenuItemSelectedColor:l,itemBg:a,popupBg:y,subMenuItemBg:s,itemActiveBg:\"transparent\",itemSelectedBg:c,activeBarHeight:0,activeBarBorderWidth:0,itemHoverBg:d,itemDisabledColor:p,dangerItemColor:i,dangerItemHoverColor:m,dangerItemSelectedColor:g,dangerItemActiveBg:v,dangerItemSelectedBg:u,menuSubMenuBg:s,horizontalItemSelectedColor:l,horizontalItemSelectedBg:c});return[UH(x),IH(x),LH(x),DH(x,\"light\"),DH(S,\"dark\"),NH(x),Dx(x),mb(x,\"slide-up\"),mb(x,\"slide-down\"),Yp(x,\"zoom-big\")]}),VH,{deprecatedTokens:[[\"colorGroupTitle\",\"groupTitleColor\"],[\"radiusItem\",\"itemBorderRadius\"],[\"radiusSubMenuItem\",\"subMenuItemBorderRadius\"],[\"colorItemText\",\"itemColor\"],[\"colorItemTextHover\",\"itemHoverColor\"],[\"colorItemTextHoverHorizontal\",\"horizontalItemHoverColor\"],[\"colorItemTextSelected\",\"itemSelectedColor\"],[\"colorItemTextSelectedHorizontal\",\"horizontalItemSelectedColor\"],[\"colorItemTextDisabled\",\"itemDisabledColor\"],[\"colorDangerItemText\",\"dangerItemColor\"],[\"colorDangerItemTextHover\",\"dangerItemHoverColor\"],[\"colorDangerItemTextSelected\",\"dangerItemSelectedColor\"],[\"colorDangerItemBgActive\",\"dangerItemActiveBg\"],[\"colorDangerItemBgSelected\",\"dangerItemSelectedBg\"],[\"colorItemBg\",\"itemBg\"],[\"colorItemBgHover\",\"itemHoverBg\"],[\"colorSubItemBg\",\"subMenuItemBg\"],[\"colorItemBgActive\",\"itemActiveBg\"],[\"colorItemBgSelectedHorizontal\",\"horizontalItemSelectedBg\"],[\"colorActiveBarWidth\",\"activeBarWidth\"],[\"colorActiveBarHeight\",\"activeBarHeight\"],[\"colorActiveBarBorderSize\",\"activeBarBorderWidth\"],[\"colorItemBgSelected\",\"itemSelectedBg\"]],injectStyle:!(arguments.length>2&&void 0!==arguments[2])||arguments[2],unitless:{groupTitleLineHeight:!0}});return r(e,t)},GH=e=>{var t;const{popupClassName:r,icon:n,title:o,theme:i}=e,a=m.useContext(TH),{prefixCls:s,inlineCollapsed:l,theme:c}=a,u=gz();let d;if(n){const e=m.isValidElement(o)&&\"span\"===o.type;d=m.createElement(m.Fragment,null,th(n,{className:ze()(m.isValidElement(n)?null===(t=n.props)||void 0===t?void 0:t.className:\"\",`${s}-item-icon`)}),e?o:m.createElement(\"span\",{className:`${s}-title-content`},o))}else d=l&&!u.length&&o&&\"string\"==typeof o?m.createElement(\"div\",{className:`${s}-inline-collapsed-noicon`},o.charAt(0)):m.createElement(\"span\",{className:`${s}-title-content`},o);const f=m.useMemo((()=>Object.assign(Object.assign({},a),{firstLevel:!1})),[a]),[h]=gu(\"Menu\");return m.createElement(TH.Provider,{value:f},m.createElement(dH,Object.assign({},kf(e,[\"icon\"]),{title:d,popupClassName:ze()(s,r,`${s}-${i||c}`),popupStyle:Object.assign({zIndex:h},e.popupStyle)})))};function qH(e){return null===e||!1===e}const KH={item:PH,submenu:GH,divider:jH},XH=(0,m.forwardRef)(((e,t)=>{var r;const n=m.useContext(_H),o=n||{},{getPrefixCls:i,getPopupContainer:a,direction:s,menu:l}=m.useContext(Xo),c=i(),{prefixCls:u,className:d,style:f,theme:h=\"light\",expandIcon:p,_internalDisableMenuItemTitleTooltip:g,inlineCollapsed:v,siderCollapsed:b,rootClassName:y,mode:w,selectable:x,onClick:S,overflowedIndicatorPopupClassName:C}=e,k=kf(function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"className\",\"style\",\"theme\",\"expandIcon\",\"_internalDisableMenuItemTitleTooltip\",\"inlineCollapsed\",\"siderCollapsed\",\"rootClassName\",\"mode\",\"selectable\",\"onClick\",\"overflowedIndicatorPopupClassName\"]),[\"collapsedWidth\"]);null===(r=o.validator)||void 0===r||r.call(o,{mode:w});const E=Ws((function(){var e;null==S||S.apply(void 0,arguments),null===(e=o.onClick)||void 0===e||e.call(o)})),O=o.mode||w,A=null!=x?x:o.selectable,T=null!=v?v:b,j={horizontal:{motionName:`${c}-slide-up`},inline:Jf(c),other:{motionName:`${c}-zoom-big`}},P=i(\"menu\",u||o.prefixCls),M=du(P),[R,_,I]=WH(P,M,!n),N=ze()(`${P}-${h}`,null==l?void 0:l.className,d),F=m.useMemo((()=>{var e,t;if(\"function\"==typeof p||qH(p))return p||null;if(\"function\"==typeof o.expandIcon||qH(o.expandIcon))return o.expandIcon||null;if(\"function\"==typeof(null==l?void 0:l.expandIcon)||qH(null==l?void 0:l.expandIcon))return(null==l?void 0:l.expandIcon)||null;const r=null!==(e=null!=p?p:null==o?void 0:o.expandIcon)&&void 0!==e?e:null==l?void 0:l.expandIcon;return th(r,{className:ze()(`${P}-submenu-expand-icon`,m.isValidElement(r)?null===(t=r.props)||void 0===t?void 0:t.className:void 0)})}),[p,null==o?void 0:o.expandIcon,null==l?void 0:l.expandIcon,P]),D=m.useMemo((()=>({prefixCls:P,inlineCollapsed:T||!1,direction:s,firstLevel:!0,theme:h,mode:O,disableMenuItemTitleTooltip:g})),[P,T,s,g,h]);return R(m.createElement(_H.Provider,{value:null},m.createElement(TH.Provider,{value:D},m.createElement(CH,Object.assign({getPopupContainer:a,overflowedIndicator:m.createElement(AH,null),overflowedIndicatorPopupClassName:ze()(P,`${P}-${h}`,C),mode:O,selectable:A,onClick:E},k,{inlineCollapsed:T,style:Object.assign(Object.assign({},null==l?void 0:l.style),f),className:N,prefixCls:P,direction:s,defaultMotions:j,expandIcon:F,ref:t,rootClassName:ze()(y,_,o.rootClassName,I,M),_internalComponents:KH})))))})),YH=XH,$H=(0,m.forwardRef)(((e,t)=>{const r=(0,m.useRef)(null),n=m.useContext(kH);return(0,m.useImperativeHandle)(t,(()=>({menu:r.current,focus:e=>{var t;null===(t=r.current)||void 0===t||t.focus(e)}}))),m.createElement(YH,Object.assign({ref:r},e,n))}));$H.Item=PH,$H.SubMenu=GH,$H.Divider=jH,$H.ItemGroup=mH;const ZH=$H,QH=e=>{const{componentCls:t,menuCls:r,colorError:n,colorTextLightSolid:o}=e,i=`${r}-item`;return{[`${t}, ${t}-menu-submenu`]:{[`${r} ${i}`]:{[`&${i}-danger:not(${i}-disabled)`]:{color:n,\"&:hover\":{color:o,backgroundColor:n}}}}}},JH=e=>{const{componentCls:t,menuCls:r,zIndexPopup:n,dropdownArrowDistance:o,sizePopupArrow:i,antCls:a,iconCls:s,motionDurationMid:l,paddingBlock:c,fontSize:u,dropdownEdgeChildPadding:d,colorTextDisabled:f,fontSizeIcon:h,controlPaddingHorizontal:p,colorBgElevated:m}=e;return[{[t]:{position:\"absolute\",top:-9999,left:{_skip_check_:!0,value:-9999},zIndex:n,display:\"block\",\"&::before\":{position:\"absolute\",insetBlock:e.calc(i).div(2).sub(o).equal(),zIndex:-9999,opacity:1e-4,content:'\"\"'},\"&-menu-vertical\":{maxHeight:\"100vh\",overflowY:\"auto\"},[`&-trigger${a}-btn`]:{[`& > ${s}-down, & > ${a}-btn-icon > ${s}-down`]:{fontSize:h}},[`${t}-wrap`]:{position:\"relative\",[`${a}-btn > ${s}-down`]:{fontSize:h},[`${s}-down::before`]:{transition:`transform ${l}`}},[`${t}-wrap-open`]:{[`${s}-down::before`]:{transform:\"rotate(180deg)\"}},\"\\n        &-hidden,\\n        &-menu-hidden,\\n        &-menu-submenu-hidden\\n      \":{display:\"none\"},[`&${a}-slide-down-enter${a}-slide-down-enter-active${t}-placement-bottomLeft,\\n          &${a}-slide-down-appear${a}-slide-down-appear-active${t}-placement-bottomLeft,\\n          &${a}-slide-down-enter${a}-slide-down-enter-active${t}-placement-bottom,\\n          &${a}-slide-down-appear${a}-slide-down-appear-active${t}-placement-bottom,\\n          &${a}-slide-down-enter${a}-slide-down-enter-active${t}-placement-bottomRight,\\n          &${a}-slide-down-appear${a}-slide-down-appear-active${t}-placement-bottomRight`]:{animationName:ab},[`&${a}-slide-up-enter${a}-slide-up-enter-active${t}-placement-topLeft,\\n          &${a}-slide-up-appear${a}-slide-up-appear-active${t}-placement-topLeft,\\n          &${a}-slide-up-enter${a}-slide-up-enter-active${t}-placement-top,\\n          &${a}-slide-up-appear${a}-slide-up-appear-active${t}-placement-top,\\n          &${a}-slide-up-enter${a}-slide-up-enter-active${t}-placement-topRight,\\n          &${a}-slide-up-appear${a}-slide-up-appear-active${t}-placement-topRight`]:{animationName:lb},[`&${a}-slide-down-leave${a}-slide-down-leave-active${t}-placement-bottomLeft,\\n          &${a}-slide-down-leave${a}-slide-down-leave-active${t}-placement-bottom,\\n          &${a}-slide-down-leave${a}-slide-down-leave-active${t}-placement-bottomRight`]:{animationName:sb},[`&${a}-slide-up-leave${a}-slide-up-leave-active${t}-placement-topLeft,\\n          &${a}-slide-up-leave${a}-slide-up-leave-active${t}-placement-top,\\n          &${a}-slide-up-leave${a}-slide-up-leave-active${t}-placement-topRight`]:{animationName:cb}}},Tp(e,m,{arrowPlacement:{top:!0,bottom:!0}}),{[`${t} ${r}`]:{position:\"relative\",margin:0},[`${r}-submenu-popup`]:{position:\"absolute\",zIndex:n,background:\"transparent\",boxShadow:\"none\",transformOrigin:\"0 0\",\"ul, li\":{listStyle:\"none\",margin:0}},[`${t}, ${t}-menu-submenu`]:Object.assign(Object.assign({},rc(e)),{[r]:Object.assign(Object.assign({padding:d,listStyleType:\"none\",backgroundColor:m,backgroundClip:\"padding-box\",borderRadius:e.borderRadiusLG,outline:\"none\",boxShadow:e.boxShadowSecondary},oc(e)),{\"&:empty\":{padding:0,boxShadow:\"none\"},[`${r}-item-group-title`]:{padding:`${Si(c)} ${Si(p)}`,color:e.colorTextDescription,transition:`all ${l}`},[`${r}-item`]:{position:\"relative\",display:\"flex\",alignItems:\"center\"},[`${r}-item-icon`]:{minWidth:u,marginInlineEnd:e.marginXS,fontSize:e.fontSizeSM},[`${r}-title-content`]:{flex:\"auto\",\"&-with-extra\":{display:\"inline-flex\",alignItems:\"center\",width:\"100%\"},\"> a\":{color:\"inherit\",transition:`all ${l}`,\"&:hover\":{color:\"inherit\"},\"&::after\":{position:\"absolute\",inset:0,content:'\"\"'}},[`${r}-item-extra`]:{paddingInlineStart:e.padding,marginInlineStart:\"auto\",fontSize:e.fontSizeSM,color:e.colorTextDescription}},[`${r}-item, ${r}-submenu-title`]:Object.assign(Object.assign({display:\"flex\",margin:0,padding:`${Si(c)} ${Si(p)}`,color:e.colorText,fontWeight:\"normal\",fontSize:u,lineHeight:e.lineHeight,cursor:\"pointer\",transition:`all ${l}`,borderRadius:e.borderRadiusSM,\"&:hover, &-active\":{backgroundColor:e.controlItemBgHover}},oc(e)),{\"&-selected\":{color:e.colorPrimary,backgroundColor:e.controlItemBgActive,\"&:hover, &-active\":{backgroundColor:e.controlItemBgActiveHover}},\"&-disabled\":{color:f,cursor:\"not-allowed\",\"&:hover\":{color:f,backgroundColor:m,cursor:\"not-allowed\"},a:{pointerEvents:\"none\"}},\"&-divider\":{height:1,margin:`${Si(e.marginXXS)} 0`,overflow:\"hidden\",lineHeight:0,backgroundColor:e.colorSplit},[`${t}-menu-submenu-expand-icon`]:{position:\"absolute\",insetInlineEnd:e.paddingXS,[`${t}-menu-submenu-arrow-icon`]:{marginInlineEnd:\"0 !important\",color:e.colorIcon,fontSize:h,fontStyle:\"normal\"}}}),[`${r}-item-group-list`]:{margin:`0 ${Si(e.marginXS)}`,padding:0,listStyle:\"none\"},[`${r}-submenu-title`]:{paddingInlineEnd:e.calc(p).add(e.fontSizeSM).equal()},[`${r}-submenu-vertical`]:{position:\"relative\"},[`${r}-submenu${r}-submenu-disabled ${t}-menu-submenu-title`]:{[`&, ${t}-menu-submenu-arrow-icon`]:{color:f,backgroundColor:m,cursor:\"not-allowed\"}},[`${r}-submenu-selected ${t}-menu-submenu-title`]:{color:e.colorPrimary}})})},[mb(e,\"slide-up\"),mb(e,\"slide-down\"),Cb(e,\"move-up\"),Cb(e,\"move-down\"),Yp(e,\"zoom-big\")]]},eU=Iu(\"Dropdown\",(e=>{const{marginXXS:t,sizePopupArrow:r,paddingXXS:n,componentCls:o}=e,i=Au(e,{menuCls:`${o}-menu`,dropdownArrowDistance:e.calc(r).div(2).add(t).equal(),dropdownEdgeChildPadding:n});return[JH(i),QH(i)]}),(e=>Object.assign(Object.assign({zIndexPopup:e.zIndexPopupBase+50,paddingBlock:(e.controlHeight-e.fontSize*e.lineHeight)/2},Op({contentRadius:e.borderRadiusLG,limitVerticalRadius:!0})),kp(e))),{resetStyle:!1}),tU=e=>{var t;const{menu:r,arrow:n,prefixCls:o,children:i,trigger:a,disabled:s,dropdownRender:l,popupRender:c,getPopupContainer:u,overlayClassName:d,rootClassName:f,overlayStyle:h,open:p,onOpenChange:g,visible:v,onVisibleChange:b,mouseEnterDelay:y=.15,mouseLeaveDelay:w=.1,autoAdjustOverflow:x=!0,placement:S=\"\",overlay:C,transitionName:k,destroyOnHidden:E,destroyPopupOnHide:O}=e,{getPopupContainer:A,getPrefixCls:T,direction:j,dropdown:P}=m.useContext(Xo),M=c||l;Ya();const R=m.useMemo((()=>{const e=T();return void 0!==k?k:S.includes(\"top\")?`${e}-slide-down`:`${e}-slide-up`}),[T,S,k]),_=m.useMemo((()=>S?S.includes(\"Center\")?S.slice(0,S.indexOf(\"Center\")):S:\"rtl\"===j?\"bottomRight\":\"bottomLeft\"),[S,j]),I=T(\"dropdown\",o),N=du(I),[F,D,B]=eU(I,N),[,L]=Ql(),z=m.Children.only(\"object\"!=typeof(Q=i)&&\"function\"!=typeof Q||null===Q?m.createElement(\"span\",null,i):i),H=th(z,{className:ze()(`${I}-trigger`,{[`${I}-rtl`]:\"rtl\"===j},z.props.className),disabled:null!==(t=z.props.disabled)&&void 0!==t?t:s}),U=s?[]:a,V=!!(null==U?void 0:U.includes(\"contextMenu\")),[W,G]=Ks(!1,{value:null!=p?p:v}),q=Ws((e=>{null==g||g(e,{source:\"trigger\"}),null==b||b(e),G(e)})),K=ze()(d,f,D,B,N,null==P?void 0:P.className,{[`${I}-rtl`]:\"rtl\"===j}),X=Rp({arrowPointAtCenter:\"object\"==typeof n&&n.pointAtCenter,autoAdjustOverflow:x,offset:L.marginXXS,arrowWidth:n?L.sizePopupArrow:0,borderRadius:L.borderRadius}),Y=m.useCallback((()=>{(null==r?void 0:r.selectable)&&(null==r?void 0:r.multiple)||(null==g||g(!1,{source:\"menu\"}),G(!1))}),[null==r?void 0:r.selectable,null==r?void 0:r.multiple]),[$,Z]=gu(\"Dropdown\",null==h?void 0:h.zIndex);var Q;let J=m.createElement(iz,Object.assign({alignPoint:V},kf(e,[\"rootClassName\"]),{mouseEnterDelay:y,mouseLeaveDelay:w,visible:W,builtinPlacements:X,arrow:!!n,overlayClassName:K,prefixCls:I,getPopupContainer:u||A,transitionName:R,trigger:U,overlay:()=>{let e;return e=(null==r?void 0:r.items)?m.createElement(ZH,Object.assign({},r)):\"function\"==typeof C?C():C,M&&(e=M(e)),e=m.Children.only(\"string\"==typeof e?m.createElement(\"span\",null,e):e),m.createElement(RH,{prefixCls:`${I}-menu`,rootClassName:ze()(B,N),expandIcon:m.createElement(\"span\",{className:`${I}-menu-submenu-arrow`},\"rtl\"===j?m.createElement($L,{className:`${I}-menu-submenu-arrow-icon`}):m.createElement(Ex,{className:`${I}-menu-submenu-arrow-icon`})),mode:\"vertical\",selectable:!1,onClick:Y,validator:e=>{let{mode:t}=e}},e)},placement:_,onVisibleChange:q,overlayStyle:Object.assign(Object.assign(Object.assign({},null==P?void 0:P.style),h),{zIndex:$}),autoDestroy:null!=E?E:O}),H);return $&&(J=m.createElement(fu.Provider,{value:Z},J)),F(J)},rU=Wf(tU,\"align\",void 0,\"dropdown\",(e=>e));tU._InternalPanelDoNotUseOrYouWillBeFired=e=>m.createElement(rU,Object.assign({},e),m.createElement(\"span\",null));const nU=tU;const oU=e=>{const{getPopupContainer:t,getPrefixCls:r,direction:n}=m.useContext(Xo),{prefixCls:o,type:i=\"default\",danger:a,disabled:s,loading:l,onClick:c,htmlType:u,children:d,className:f,menu:h,arrow:p,autoFocus:g,overlay:v,trigger:b,align:y,open:w,onOpenChange:x,placement:S,getPopupContainer:C,href:k,icon:E=m.createElement(AH,null),title:O,buttonsRender:A=e=>e,mouseEnterDelay:T,mouseLeaveDelay:j,overlayClassName:P,overlayStyle:M,destroyOnHidden:R,destroyPopupOnHide:_,dropdownRender:I,popupRender:N}=e,F=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"type\",\"danger\",\"disabled\",\"loading\",\"onClick\",\"htmlType\",\"children\",\"className\",\"menu\",\"arrow\",\"autoFocus\",\"overlay\",\"trigger\",\"align\",\"open\",\"onOpenChange\",\"placement\",\"getPopupContainer\",\"href\",\"icon\",\"title\",\"buttonsRender\",\"mouseEnterDelay\",\"mouseLeaveDelay\",\"overlayClassName\",\"overlayStyle\",\"destroyOnHidden\",\"destroyPopupOnHide\",\"dropdownRender\",\"popupRender\"]),D=r(\"dropdown\",o),B=`${D}-button`,L={menu:h,arrow:p,autoFocus:g,align:y,disabled:s,trigger:s?[]:b,onOpenChange:x,getPopupContainer:C||t,mouseEnterDelay:T,mouseLeaveDelay:j,overlayClassName:P,overlayStyle:M,destroyOnHidden:R,popupRender:N||I},{compactSize:z,compactItemClassnames:H}=Lf(D,n),U=ze()(B,H,f);\"destroyPopupOnHide\"in e&&(L.destroyPopupOnHide=_),\"overlay\"in e&&(L.overlay=v),\"open\"in e&&(L.open=w),L.placement=\"placement\"in e?S:\"rtl\"===n?\"bottomLeft\":\"bottomRight\";const V=m.createElement(AC,{type:i,danger:a,disabled:s,loading:l,onClick:c,htmlType:u,href:k,title:O},d),W=m.createElement(AC,{type:i,danger:a,icon:E}),[G,q]=A([V,W]);return m.createElement(SS.Compact,Object.assign({className:U,size:z,block:!0},F),G,m.createElement(nU,Object.assign({},L),q))};oU.__ANT_BUTTON=!0;const iU=oU,aU=nU;aU.Button=iU;const sU=aU;var lU=o(289),cU={};function uU(e){return uU=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},uU(e)}function dU(){dU=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==uU(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(uU(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function fU(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function hU(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?fU(Object(r),!0).forEach((function(t){pU(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):fU(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function pU(e,t,r){return(t=gU(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function mU(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,gU(n.key),n)}}function gU(e){var t=function(e){if(\"object\"!=uU(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=uU(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==uU(t)?t:t+\"\"}function vU(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(vU=function(){return!!e})()}function bU(e){return bU=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},bU(e)}function yU(e,t){return yU=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},yU(e,t)}function wU(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function xU(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){wU(i,n,o,a,s,\"next\",e)}function s(e){wU(i,n,o,a,s,\"throw\",e)}a(void 0)}))}}function SU(e,t){return CU.apply(this,arguments)}function CU(){return CU=xU(dU().mark((function e(t,r){var n,o;return dU().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t,o=r,e.abrupt(\"return\",new Promise((function(e){var t,r=se.t(\"editor.text.startTyping\"),i=\"\",a=\"error\",s=m.createRef(),l=function(e){i=e.target.value,a=\"\"!==i.trim()?\"\":\"error\",c()},c=function(){t.update({title:\"\".concat(se.t(\"annotations.freeText\"),\"-\").concat(o,\"px\"),content:(0,Mn.jsxs)(\"div\",{children:[(0,Mn.jsx)(rB,{ref:s,status:a,placeholder:r,onChange:l,autoSize:{minRows:3,maxRows:5}}),(0,Mn.jsxs)(\"div\",{className:\"EditorFreeText-Modal-Toolbar\",children:[(0,Mn.jsx)(\"div\",{className:\"colorPalette\",children:Eo.colors.map((function(e){return(0,Mn.jsx)(\"div\",{onClick:function(){return u(e)},className:\"cell \".concat(e===n?\"active\":\"\"),children:(0,Mn.jsx)(\"span\",{style:{backgroundColor:e}})},e)}))}),(0,Mn.jsx)(sU,{menu:{items:Eo.fontSize.map((function(e){return{key:e.toString(),label:e,onClick:function(){return d(e)}}}))},trigger:[\"click\"],children:(0,Mn.jsx)(mo,{})})]})]}),okButtonProps:{disabled:\"error\"===a}})},u=function(e){n=e,c()},d=function(e){o=e,c()};t=dE.confirm({title:\"\".concat(se.t(\"annotations.freeText\"),\"-\").concat(o,\"px\"),icon:null,content:(0,Mn.jsxs)(\"div\",{className:\"EditorFreeText-Modal\",children:[(0,Mn.jsx)(rB,{ref:s,status:a,placeholder:r,onChange:l,autoSize:{minRows:3,maxRows:5}}),(0,Mn.jsxs)(\"div\",{className:\"EditorFreeText-Modal-Toolbar\",children:[(0,Mn.jsx)(\"div\",{className:\"colorPalette\",children:Eo.colors.map((function(e){return(0,Mn.jsx)(\"div\",{onClick:function(){return u(e)},className:\"cell \".concat(rF(e,n)?\"active\":\"\"),children:(0,Mn.jsx)(\"span\",{style:{backgroundColor:e}})},e)}))}),(0,Mn.jsx)(sU,{menu:{items:Eo.fontSize.map((function(e){return{key:e.toString(),label:e,onClick:function(){return d(e)}}}))},trigger:[\"click\"],children:(0,Mn.jsx)(mo,{})})]})]}),destroyOnClose:!0,okText:se.t(\"normal.ok\"),cancelText:se.t(\"normal.cancel\"),okButtonProps:{disabled:\"error\"===a},onOk:function(){e({inputValue:i,color:n,fontSize:o})},onCancel:function(){e({inputValue:\"\",color:n,fontSize:o})}}),setTimeout((function(){s.current&&s.current.focus()}),100)})));case 3:case\"end\":return e.stop()}}),e)}))),CU.apply(this,arguments)}cU.styleTagTransform=f(),cU.setAttributes=l(),cU.insert=a().bind(null,\"head\"),cU.domAPI=n(),cU.insertStyleElement=u(),t()(lU.A,cU),lU.A&&lU.A.locals&&lU.A.locals;var kU=function(e){function t(e){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=bU(t),function(e,t){if(t&&(\"object\"==uU(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,vU()?Reflect.construct(t,r||[],bU(e).constructor):t.apply(e,r))}(this,t,[hU(hU({},e),{},{editorType:To.FREETEXT})])}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&yU(e,t)}(t,e),function(e,t){return t&&mU(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"mouseDownHandler\",value:function(){}},{key:\"mouseMoveHandler\",value:function(){}},{key:\"mouseUpHandler\",value:(n=xU(dU().mark((function e(t){var r,n,o,i,a,s,l,c;return dU().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=this.konvaStage.getRelativePointerPosition(),n=this.konvaStage.scale(),o=n.x,i=n.y,t.currentTarget===this.konvaStage){e.next=4;break}return e.abrupt(\"return\");case 4:return this.isPainting=!0,this.currentShapeGroup=this.createShapeGroup(),this.getBgLayer().add(this.currentShapeGroup.konvaGroup),e.next=9,SU(this.currentAnnotation.style.color,this.currentAnnotation.style.fontSize);case 9:a=e.sent,s=a.inputValue,l=a.color,c=a.fontSize,this.inputDoneHandler(s,{x:o,y:i},r,l,c);case 14:case\"end\":return e.stop()}}),e,this)}))),function(e){return n.apply(this,arguments)})},{key:\"inputDoneHandler\",value:(r=xU(dU().mark((function e(t,r,n,o,i){var a,s,l,c,u,d;return dU().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(\"\"!==(a=t.trim())){e.next=5;break}return this.delShapeGroup(this.currentShapeGroup.id),this.currentShapeGroup=null,e.abrupt(\"return\");case 5:s=new(IE().Text)({text:a,fontSize:i,padding:2}),l=s.width(),c=l>300?300:l,u=new(IE().Text)({x:n.x,y:n.y+2,text:a,width:c,fontSize:i,fill:o,wrap:l>300?\"word\":\"none\"}),this.currentShapeGroup.konvaGroup.add(u),d=this.currentShapeGroup.konvaGroup.id(),this.setShapeGroupDone({id:d,contentsObj:{text:a},color:o,fontSize:i});case 13:case\"end\":return e.stop()}}),e,this)}))),function(e,t,n,o,i){return r.apply(this,arguments)})},{key:\"changeStyle\",value:function(e,t){var r=e.id,n=this.getShapeGroupById(r);if(n){n.getChildren().forEach((function(e){e instanceof IE().Text&&(void 0!==t.color&&e.fill(t.color),void 0!==t.opacity&&e.opacity(t.opacity))}));var o={konvaString:n.toJSON()};void 0!==t.color&&(o.color=t.color),this.setChanged(r,o)}}}]);var r,n}(vL);function EU(e){return EU=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},EU(e)}function OU(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function AU(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?OU(Object(r),!0).forEach((function(t){TU(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):OU(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function TU(e,t,r){return(t=PU(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function jU(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,PU(n.key),n)}}function PU(e){var t=function(e){if(\"object\"!=EU(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=EU(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==EU(t)?t:t+\"\"}function MU(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(MU=function(){return!!e})()}function RU(e){return RU=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},RU(e)}function _U(e,t){return _U=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},_U(e,t)}var IU=function(e){function t(e,r){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=RU(t),function(e,t){if(t&&(\"object\"==EU(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,MU()?Reflect.construct(t,r||[],RU(e).constructor):t.apply(e,r))}(this,t,[AU(AU({},e),{},{editorType:r})])}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&_U(e,t)}(t,e),function(e,t){return t&&jU(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"convertTextSelection\",value:function(e,t){var r=this;this.currentShapeGroup=this.createShapeGroup(),this.getBgLayer().add(this.currentShapeGroup.konvaGroup);var n=t.getBoundingClientRect();e.forEach((function(e){var t=e.getBoundingClientRect(),o=r.calculateRelativePosition(t,n),i=o.x,a=o.y,s=o.width,l=o.height,c=r.createShape(i,a,s,l);r.currentShapeGroup.konvaGroup.add(c)})),this.setShapeGroupDone({id:this.currentShapeGroup.id,contentsObj:{text:this.getElementOuterText(e)},color:this.currentAnnotation.style.color})}},{key:\"getElementOuterText\",value:function(e){return e.map((function(e){return e.outerText})).join(\"\")}},{key:\"calculateRelativePosition\",value:function(e,t){var r=this.konvaStage.scale();return{x:(e.x-t.x)/r.x,y:(e.y-t.y)/r.y,width:e.width/r.x,height:e.height/r.y}}},{key:\"createShape\",value:function(e,t,r,n){switch(this.currentAnnotation.type){case To.HIGHLIGHT:return this.createHighlightShape(e,t,r,n);case To.UNDERLINE:return this.createUnderlineShape(e,t,r,n);case To.STRIKEOUT:return this.createStrikeoutShape(e,t,r,n);default:throw new Error(\"Unsupported annotation type: \".concat(this.currentAnnotation.type))}}},{key:\"createHighlightShape\",value:function(e,t,r,n){return new(IE().Rect)({x:e,y:t,width:r,height:n,opacity:.5,fill:this.currentAnnotation.style.color})}},{key:\"createUnderlineShape\",value:function(e,t,r,n){return new(IE().Rect)({x:e,y:n+t-2,width:r,stroke:this.currentAnnotation.style.color,opacity:1,strokeWidth:1,hitStrokeWidth:10,height:1})}},{key:\"createStrikeoutShape\",value:function(e,t,r,n){return new(IE().Rect)({x:e,y:t+n/2,width:r,stroke:this.currentAnnotation.style.color,opacity:1,strokeWidth:1,hitStrokeWidth:10,height:1})}},{key:\"mouseDownHandler\",value:function(){}},{key:\"mouseMoveHandler\",value:function(){}},{key:\"mouseUpHandler\",value:function(){}},{key:\"changeStyle\",value:function(e,t){var r=e.id,n=this.getShapeGroupById(r);if(n){n.getChildren().forEach((function(r){e.type===To.HIGHLIGHT&&r instanceof IE().Rect&&(void 0!==t.color&&r.fill(t.color),void 0!==t.strokeWidth&&r.strokeWidth(t.strokeWidth),void 0!==t.opacity&&r.opacity(t.opacity)),e.type===To.UNDERLINE&&r instanceof IE().Rect&&(void 0!==t.color&&r.stroke(t.color),void 0!==t.strokeWidth&&r.strokeWidth(t.strokeWidth),void 0!==t.opacity&&r.opacity(t.opacity)),e.type===To.STRIKEOUT&&r instanceof IE().Rect&&(void 0!==t.color&&r.stroke(t.color),void 0!==t.strokeWidth&&r.strokeWidth(t.strokeWidth),void 0!==t.opacity&&r.opacity(t.opacity))}));var o={konvaString:n.toJSON()};void 0!==t.color&&(o.color=t.color),this.setChanged(r,o)}}}])}(vL);function NU(e){return NU=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},NU(e)}function FU(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function DU(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?FU(Object(r),!0).forEach((function(t){UU(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):FU(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function BU(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,VU(n.key),n)}}function LU(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(LU=function(){return!!e})()}function zU(e){return zU=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},zU(e)}function HU(e,t){return HU=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},HU(e,t)}function UU(e,t,r){return(t=VU(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function VU(e){var t=function(e){if(\"object\"!=NU(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=NU(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==NU(t)?t:t+\"\"}var WU=function(e){function t(e){var r;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),UU(r=function(e,t,r){return t=zU(t),function(e,t){if(t&&(\"object\"==NU(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,LU()?Reflect.construct(t,r||[],zU(e).constructor):t.apply(e,r))}(this,t,[DU(DU({},e),{},{editorType:To.RECTANGLE})]),\"globalPointerUpHandler\",(function(e){0===e.button&&(r.mouseUpHandler(),window.removeEventListener(\"mouseup\",r.globalPointerUpHandler))})),r.rect=null,r.vertex={x:0,y:0},r}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&HU(e,t)}(t,e),function(e,t){return t&&BU(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"mouseDownHandler\",value:function(e){if(e.currentTarget===this.konvaStage){this.rect=null,this.isPainting=!0,this.currentShapeGroup=this.createShapeGroup(),this.getBgLayer().add(this.currentShapeGroup.konvaGroup);var t=this.konvaStage.getRelativePointerPosition();this.vertex={x:t.x,y:t.y},this.rect=new(IE().Rect)({x:t.x,y:t.y,width:0,height:0,strokeScaleEnabled:!1,visible:!1,stroke:this.currentAnnotation.style.color,strokeWidth:this.currentAnnotation.style.strokeWidth||2,opacity:this.currentAnnotation.style.opacity}),this.currentShapeGroup.konvaGroup.add(this.rect),window.addEventListener(\"mouseup\",this.globalPointerUpHandler)}}},{key:\"mouseMoveHandler\",value:function(e){if(this.isPainting){e.evt.preventDefault(),this.rect.show();var t=this.konvaStage.getRelativePointerPosition(),r={x:Math.min(this.vertex.x,t.x),y:Math.min(this.vertex.y,t.y),width:Math.abs(t.x-this.vertex.x),height:Math.abs(t.y-this.vertex.y)};this.rect.setAttrs(r)}}},{key:\"mouseUpHandler\",value:function(){if(this.isPainting){this.isPainting=!1;var e=this.rect.getParent();if(this.rect.isVisible()||\"Group\"!==e.getType()){if(this.isTooSmall())return this.rect.destroy(),this.delShapeGroup(e.id()),void(this.rect=null);this.setShapeGroupDone({id:e.id(),color:this.currentAnnotation.style.color,contentsObj:{text:\"\"}}),this.rect=null}else this.delShapeGroup(e.id())}}},{key:\"isTooSmall\",value:function(){var e=this.rect.size(),t=e.width,r=e.height;return Math.max(t,r)<vL.MinSize}},{key:\"changeStyle\",value:function(e,t){var r=e.id,n=this.getShapeGroupById(r);if(n){n.getChildren().forEach((function(e){e instanceof IE().Rect&&(void 0!==t.color&&e.stroke(t.color),void 0!==t.strokeWidth&&e.strokeWidth(t.strokeWidth),void 0!==t.opacity&&e.opacity(t.opacity))}));var o={konvaString:n.toJSON()};void 0!==t.color&&(o.color=t.color),this.setChanged(r,o)}}}])}(vL);function GU(e){return GU=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},GU(e)}function qU(){qU=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==GU(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(GU(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function KU(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function XU(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){KU(i,n,o,a,s,\"next\",e)}function s(e){KU(i,n,o,a,s,\"throw\",e)}a(void 0)}))}}function YU(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function $U(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?YU(Object(r),!0).forEach((function(t){ZU(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):YU(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function ZU(e,t,r){return(t=JU(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function QU(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,JU(n.key),n)}}function JU(e){var t=function(e){if(\"object\"!=GU(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=GU(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==GU(t)?t:t+\"\"}function eV(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(eV=function(){return!!e})()}function tV(){return tV=\"undefined\"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var n=function(e,t){for(;!{}.hasOwnProperty.call(e,t)&&null!==(e=rV(e)););return e}(e,t);if(n){var o=Object.getOwnPropertyDescriptor(n,t);return o.get?o.get.call(arguments.length<3?e:r):o.value}},tV.apply(null,arguments)}function rV(e){return rV=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},rV(e)}function nV(e,t){return nV=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},nV(e,t)}var oV=function(e){function t(e,r){var n;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),(n=function(e,t,r){return t=rV(t),function(e,t){if(t&&(\"object\"==GU(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,eV()?Reflect.construct(t,r||[],rV(e).constructor):t.apply(e,r))}(this,t,[$U($U({},e),{},{editorType:To.SIGNATURE})])).signatureUrl=r,r&&n.createCursorImg(),n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&nV(e,t)}(t,e),function(e,t){return t&&QU(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"createCursorImg\",value:function(){var e=new(IE().Group)({draggable:!1});IE().Image.fromURL(this.signatureUrl,(function(t){var r=t.getClientRect(),n=qN(r.width,r.height,Eo.setting.MAX_CURSOR_SIZE),o=n.newWidth,i=n.newHeight,a={x:o/2,y:i/2},s=new(IE().Rect)({x:0,y:0,width:o,height:i,stroke:\"red\",strokeWidth:2}),l=new(IE().Line)({points:[0,a.y,o,a.y],stroke:\"red\",strokeWidth:1,dash:[5,5]}),c=new(IE().Line)({points:[a.x,0,a.x,i],stroke:\"red\",strokeWidth:1,dash:[5,5]}),u=new(IE().Circle)({x:a.x,y:a.y,radius:5,stroke:\"red\"});t.setAttrs({x:0,y:0,width:o,height:i,visible:!0}),e.add(t,l,c,u,s);var d=e.toDataURL();e.destroy(),VN(fL,\"url(\".concat(d,\") \").concat(a.x,\" \").concat(a.y,\", default\"))}))}},{key:\"mouseDownHandler\",value:function(e){var t=this;if(e.currentTarget===this.konvaStage){this.signatureImage=null,this.currentShapeGroup=this.createShapeGroup(),this.getBgLayer().add(this.currentShapeGroup.konvaGroup);var r=this.konvaStage.getRelativePointerPosition();IE().Image.fromURL(this.signatureUrl,function(){var e=XU(qU().mark((function e(n){var o,i,a,s,l,c,u,d;return qU().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:o=n.getClientRect(),i=o.width,a=o.height,s=qN(i,a,120),l=s.newWidth,c=s.newHeight,u={x:l/2,y:c/2},t.signatureImage=n,t.signatureImage.setAttrs({x:r.x-u.x,y:r.y-u.y,width:l,height:c,base64:t.signatureUrl}),t.currentShapeGroup.konvaGroup.add(t.signatureImage),d=t.currentShapeGroup.konvaGroup.id(),t.setShapeGroupDone({id:d,contentsObj:{text:\"\",image:t.signatureUrl}}),t.signatureImage=null;case 9:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}())}}},{key:\"activateWithSignature\",value:function(e,r,n){!function(e,t,r){var n=tV(rV(e.prototype),\"activate\",r);return\"function\"==typeof n?function(e){return n.apply(r,e)}:n}(t,0,this)([e,r]),this.signatureUrl=n,n&&this.createCursorImg()}},{key:\"addSerializedGroupToLayer\",value:function(e,t){var r=IE().Node.create(t),n=this.getGroupNodesByClassName(r,\"Image\")[0],o=n.getAttr(\"base64\");IE().Image.fromURL(o,function(){var e=XU(qU().mark((function e(t){return qU().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t.setAttrs(n.getAttrs()),n.destroy(),r.add(t);case 3:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()),this.getBgLayer(e).add(r)}},{key:\"mouseMoveHandler\",value:function(){}},{key:\"mouseUpHandler\",value:function(){}},{key:\"changeStyle\",value:function(){}}])}(vL);function iV(e){return iV=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},iV(e)}function aV(){aV=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==iV(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(iV(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function sV(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function lV(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){sV(i,n,o,a,s,\"next\",e)}function s(e){sV(i,n,o,a,s,\"throw\",e)}a(void 0)}))}}function cV(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function uV(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?cV(Object(r),!0).forEach((function(t){dV(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):cV(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function dV(e,t,r){return(t=hV(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function fV(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,hV(n.key),n)}}function hV(e){var t=function(e){if(\"object\"!=iV(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=iV(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==iV(t)?t:t+\"\"}function pV(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(pV=function(){return!!e})()}function mV(){return mV=\"undefined\"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var n=function(e,t){for(;!{}.hasOwnProperty.call(e,t)&&null!==(e=gV(e)););return e}(e,t);if(n){var o=Object.getOwnPropertyDescriptor(n,t);return o.get?o.get.call(arguments.length<3?e:r):o.value}},mV.apply(null,arguments)}function gV(e){return gV=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},gV(e)}function vV(e,t){return vV=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},vV(e,t)}var bV=function(e){function t(e,r){var n;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),(n=function(e,t,r){return t=gV(t),function(e,t){if(t&&(\"object\"==iV(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,pV()?Reflect.construct(t,r||[],gV(e).constructor):t.apply(e,r))}(this,t,[uV(uV({},e),{},{editorType:To.STAMP})])).stampUrl=r,r&&n.createCursorImg(),n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&vV(e,t)}(t,e),function(e,t){return t&&fV(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"createCursorImg\",value:function(){var e=new(IE().Group)({draggable:!1});IE().Image.fromURL(this.stampUrl,(function(t){var r=t.getClientRect(),n=qN(r.width,r.height,Eo.setting.MAX_CURSOR_SIZE),o=n.newWidth,i=n.newHeight,a={x:o/2,y:i/2},s=new(IE().Rect)({x:0,y:0,width:o,height:i,stroke:\"red\",strokeWidth:2}),l=new(IE().Line)({points:[0,a.y,o,a.y],stroke:\"red\",strokeWidth:1,dash:[5,5]}),c=new(IE().Line)({points:[a.x,0,a.x,i],stroke:\"red\",strokeWidth:1,dash:[5,5]}),u=new(IE().Circle)({x:a.x,y:a.y,radius:5,stroke:\"red\"});t.setAttrs({x:0,y:0,width:o,height:i,visible:!0}),e.add(t,l,c,u,s);var d=e.toDataURL();e.destroy(),VN(fL,\"url(\".concat(d,\") \").concat(a.x,\" \").concat(a.y,\", default\"))}))}},{key:\"mouseDownHandler\",value:function(e){var t=this;if(e.currentTarget===this.konvaStage){this.stampImage=null,this.currentShapeGroup=this.createShapeGroup(),this.getBgLayer().add(this.currentShapeGroup.konvaGroup);var r=this.konvaStage.getRelativePointerPosition();IE().Image.fromURL(this.stampUrl,function(){var e=lV(aV().mark((function e(n){var o,i,a,s,l,c,u,d;return aV().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:o=n.getClientRect(),i=o.width,a=o.height,s=qN(i,a,120),l=s.newWidth,c=s.newHeight,u={x:l/2,y:c/2},t.stampImage=n,t.stampImage.setAttrs({x:r.x-u.x,y:r.y-u.y,width:l,height:c,base64:t.stampUrl}),t.currentShapeGroup.konvaGroup.add(t.stampImage),d=t.currentShapeGroup.konvaGroup.id(),t.setShapeGroupDone({id:d,contentsObj:{text:\"\",image:t.stampUrl}}),t.stampImage=null;case 9:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}())}}},{key:\"activateWithStamp\",value:function(e,r,n){!function(e,t,r){var n=mV(gV(e.prototype),\"activate\",r);return\"function\"==typeof n?function(e){return n.apply(r,e)}:n}(t,0,this)([e,r]),this.stampUrl=n,n&&this.createCursorImg()}},{key:\"addSerializedGroupToLayer\",value:function(e,t){var r=IE().Node.create(t),n=this.getGroupNodesByClassName(r,\"Image\")[0],o=n.getAttr(\"base64\"),i=this.getGroupNodesByClassName(r,\"Text\")[0];IE().Image.fromURL(o,function(){var e=lV(aV().mark((function e(t){return aV().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t.setAttrs(n.getAttrs()),n.destroy(),r.add(t),i&&i.moveToTop();case 4:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()),this.getBgLayer(e).add(r)}},{key:\"mouseMoveHandler\",value:function(){}},{key:\"mouseUpHandler\",value:function(){}},{key:\"changeStyle\",value:function(){}}])}(vL);function yV(e){for(var t=e.x,r=e.y,n=e.fill,o=void 0===n?\"rgb(255, 222, 33)\":n,i=e.stroke,a=void 0===i?\"#000\":i,s=e.strokeWidth,l=void 0===s?1:s,c=e.cornerSize,u=void 0===c?3:c,d=new(IE().Rect)({x:t,y:r,width:16,height:16,fillLinearGradientStartPoint:{x:0,y:0},fillLinearGradientEndPoint:{x:0,y:16},fillLinearGradientColorStops:[0,o,1,\"#fff\"],stroke:a,cornerRadius:[0,u,0,0],strokeWidth:l,shadowColor:\"rgba(0,0,0,0.2)\",shadowBlur:2,shadowOffset:{x:1,y:1},shadowOpacity:.3}),f=[],h=1;h<=4;h++){var p=r+4+1.6*h,m=1===h?t+16-6:t+16-3,g=new(IE().Line)({points:[t+3,p,m,p],stroke:\"#555\",strokeWidth:.6,lineCap:\"round\"});f.push(g)}return[d].concat(f)}function wV(e){return wV=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},wV(e)}function xV(){xV=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==wV(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(wV(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function SV(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function CV(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function kV(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function EV(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?kV(Object(r),!0).forEach((function(t){OV(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):kV(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function OV(e,t,r){return(t=TV(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function AV(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,TV(n.key),n)}}function TV(e){var t=function(e){if(\"object\"!=wV(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=wV(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==wV(t)?t:t+\"\"}function jV(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(jV=function(){return!!e})()}function PV(e){return PV=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},PV(e)}function MV(e,t){return MV=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},MV(e,t)}var RV=function(e){function t(e){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=PV(t),function(e,t){if(t&&(\"object\"==wV(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,jV()?Reflect.construct(t,r||[],PV(e).constructor):t.apply(e,r))}(this,t,[EV(EV({},e),{},{editorType:To.NOTE})])}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&MV(e,t)}(t,e),function(e,t){return t&&AV(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"mouseDownHandler\",value:function(){}},{key:\"mouseMoveHandler\",value:function(){}},{key:\"mouseUpHandler\",value:(r=xV().mark((function e(t){var r,n,o,i,a,s,l;return xV().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=\"rgb(255, 222, 33)\",o=this.konvaStage.getRelativePointerPosition(),i=o.x,a=o.y,t.currentTarget===this.konvaStage){e.next=4;break}return e.abrupt(\"return\");case 4:this.isPainting=!0,this.currentShapeGroup=this.createShapeGroup(),this.getBgLayer().add(this.currentShapeGroup.konvaGroup),s=yV({x:i,y:a,fill:n}),(r=this.currentShapeGroup.konvaGroup).add.apply(r,function(e){if(Array.isArray(e))return SV(e)}(c=s)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(c)||function(e,t){if(e){if(\"string\"==typeof e)return SV(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?SV(e,t):void 0}}(c)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),l=this.currentShapeGroup.konvaGroup.id(),this.setShapeGroupDone({id:l,contentsObj:{text:\"\"},color:n});case 11:case\"end\":return e.stop()}var c}),e,this)})),n=function(){var e=this,t=arguments;return new Promise((function(n,o){var i=r.apply(e,t);function a(e){CV(i,n,o,a,s,\"next\",e)}function s(e){CV(i,n,o,a,s,\"throw\",e)}a(void 0)}))},function(e){return n.apply(this,arguments)})},{key:\"changeStyle\",value:function(){}}]);var r,n}(vL);function _V(e){return _V=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},_V(e)}function IV(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function NV(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?IV(Object(r),!0).forEach((function(t){DV(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):IV(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function FV(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,BV(n.key),n)}}function DV(e,t,r){return(t=BV(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function BV(e){var t=function(e){if(\"object\"!=_V(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=_V(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==_V(t)?t:t+\"\"}var LV=function(){return function(e,t){return t&&FV(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}((function e(t){var r=t.konvaCanvasStore,n=t.getAnnotationStore,o=t.onDelete,i=t.onSelected,a=t.onCancel,s=t.onChanged;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),DV(this,\"transformerStore\",new Map),DV(this,\"_currentTransformerId\",null),DV(this,\"selectedId\",null),this.konvaCanvasStore=r,this.getAnnotationStore=n,this.onDelete=o,this.onSelected=i,this.onCancel=a,this.onChanged=s}),[{key:\"currentTransformerId\",get:function(){return this._currentTransformerId},set:function(e){this._currentTransformerId!==e&&(this.selectedId=e,this.deactivateTransformer(this._currentTransformerId),this._currentTransformerId=e)}},{key:\"disableStageEvents\",value:function(e){e.off(\"click mousedown mousemove mouseup touchstart touchmove touchend\")}},{key:\"bindStageEvents\",value:function(e){var t=this;e.on(\"click tap\",(function(r){r.target===e&&t.clearTransformers()}))}},{key:\"getBackgroundLayer\",value:function(e){return e.getLayers()[0]}},{key:\"getPageShapeGroups\",value:function(e){return this.getBackgroundLayer(e).getChildren((function(e){return e.name()===uL}))}},{key:\"getGroupById\",value:function(e,t){return this.getPageShapeGroups(e).find((function(e){return e.id()===t}))||null}},{key:\"getFirstShapeInGroup\",value:function(e){return e.getChildren().find((function(e){return e instanceof IE().Shape}))||null}},{key:\"enableShapeGroups\",value:function(e,t){var r=this;e.forEach((function(e){e.getChildren().forEach((function(e){e instanceof IE().Shape&&(r.removeShapeEvents(e),r.bindShapeEvents(e,t))}))}))}},{key:\"disableShapeGroups\",value:function(e){var t=this;e.forEach((function(e){e.getChildren().forEach((function(e){e instanceof IE().Shape&&t.removeShapeEvents(e)}))}))}},{key:\"bindShapeEvents\",value:function(e,t){var r=this;Eo.setting.DB_CLICK_DELETE&&e.on(\"pointerdblclick\",(function(){dE.confirm({title:se.t(\"normal.deleteConfirm\"),type:\"warn\",destroyOnClose:!0,centered:!0,okText:se.t(\"normal.yes\"),cancelText:se.t(\"normal.no\"),onOk:function(){r.onDelete(r.currentTransformerId),r.clearTransformers()}})})),e.on(\"pointerclick\",(function(n){0===n.evt.button&&r.handleShapeClick(e,t,!0)})),e.on(\"mouseover\",(function(e){0===e.evt.button&&r.handleShapeMouseover()})),e.on(\"mouseout\",(function(e){0===e.evt.button&&r.handleShapeMouseout()}))}},{key:\"removeShapeEvents\",value:function(e){e.off(\"pointerclick mouseover mouseout pointerdblclick\")}},{key:\"handleShapeClick\",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=e.findAncestor(\".\".concat(uL));if(n){this.clearTransformers(),this.createTransformer(n,t,!r);var o=this.transformerStore.get(n.id()).getClientRect();this.onSelected(n.id(),r,o)}}},{key:\"createTransformer\",value:function(e,t,r){var n=this,o=e.children[0],i=e.id();this.currentTransformerId=i;var a=this.getAnnotationStore(i);e.off(\"dragend\");var s=new(IE().Transformer)({resizeEnabled:a.resizable,rotateEnabled:!1,borderStrokeWidth:Eo.chooseSetting.STROKEWIDTH,borderStroke:Eo.chooseSetting.COLOR,anchorFill:Eo.chooseSetting.COLOR,anchorStroke:Eo.chooseSetting.COLOR,opacity:Eo.chooseSetting.OPACITY,anchorCornerRadius:5,anchorStrokeWidth:2,anchorSize:8,padding:1,boundBoxFunc:function(e,t){return t.width=Math.max(30,t.width),t}});o.attrs.id&&\"note\"===o.attrs.id&&s.resizeEnabled(!1),e.draggable(a.draggable),s.off(\"transformend\"),s.off(\"transformstart\"),s.on(\"transformend\",(function(){n.onChanged(e.id(),e.toJSON(),NV({},a),IE().Node.create(e.toJSON()).getClientRect(),s.getClientRect())})),s.on(\"transformstart\",(function(){n.onCancel()})),s.on(\"dragstart\",(function(){n.onCancel()})),s.on(\"dragend\",(function(){n.onChanged(e.id(),e.toJSON(),NV({},a),IE().Node.create(e.toJSON()).getClientRect(),s.getClientRect())})),s.on(\"dragmove\",(function(){var e=s.nodes().map((function(e){return e.getClientRect()})),r=n.getTotalBox(e);s.nodes().forEach((function(e){var n=e.getAbsolutePosition(),o=r.x-n.x,i=r.y-n.y,a=r.width/2,s=r.height/2,l=NV({},n);r.x+a<0&&(l.x=-o-a),r.y+s<0&&(l.y=-i-s),r.x+a>t.width()&&(l.x=t.width()-a-o),r.y+s>t.height()&&(l.y=t.height()-s-i),e.setAbsolutePosition(l)}))})),s.nodes([e]),this.getBackgroundLayer(t).add(s),this.transformerStore.set(i,s),r&&this.flashNodeWithTransformer(e,s,(function(){n.onSelected(e.id(),!1,s.getClientRect())}))}},{key:\"flashNodeWithTransformer\",value:function(e,t,r){var n=0,o=t.borderStroke(),i=function(){new(IE().Tween)({node:e,duration:.1,opacity:0,onFinish:function(){try{var e;t.borderStroke(\"red\"),null===(e=t.getLayer())||void 0===e||e.batchDraw(),a()}catch(e){}}}).play()},a=function(){new(IE().Tween)({node:e,duration:.1,opacity:1,onFinish:function(){try{var e;t.borderStroke(o),null===(e=t.getLayer())||void 0===e||e.batchDraw(),++n<1?setTimeout(i,100):r&&r()}catch(e){}}}).play()};i()}},{key:\"getTotalBox\",value:function(e){var t=1/0,r=1/0,n=-1/0,o=-1/0;return e.forEach((function(e){t=Math.min(t,e.x),r=Math.min(r,e.y),n=Math.max(n,e.x+e.width),o=Math.max(o,e.y+e.height)})),{x:t,y:r,width:n-t,height:o-r}}},{key:\"toggleCursorStyle\",value:function(e){document.body.classList.toggle(dL,e)}},{key:\"handleShapeMouseover\",value:function(){this.toggleCursorStyle(!0)}},{key:\"handleShapeMouseout\",value:function(){this.toggleCursorStyle(!1)}},{key:\"clearTransformers\",value:function(){this.toggleCursorStyle(!1),this.transformerStore.forEach((function(e){e&&(e.nodes().forEach((function(e){e instanceof IE().Group&&e.draggable(!1)})),e.nodes([]))})),this.transformerStore.clear(),this.currentTransformerId=null,this.onCancel()}},{key:\"activateTransformer\",value:function(e){if(e){var t=this.transformerStore.get(e);t&&t.nodes().forEach((function(e){e instanceof IE().Group&&e.draggable(!0)}))}}},{key:\"deactivateTransformer\",value:function(e){if(e){var t=this.transformerStore.get(e);t&&t.nodes().forEach((function(e){e instanceof IE().Group&&e.draggable(!1)}))}}},{key:\"selectedShape\",value:function(e,t){var r=this.getGroupById(t,e);if(r){var n=this.getFirstShapeInGroup(r);n&&this.handleShapeClick(n,t,!1)}}},{key:\"clear\",value:function(){var e=this;this.clearTransformers(),this.konvaCanvasStore.forEach((function(t){var r=t.konvaStage,n=e.getPageShapeGroups(r);e.disableStageEvents(r),e.disableShapeGroups(n)}))}},{key:\"activate\",value:function(e){var t=this.konvaCanvasStore.get(e);if(t){var r=t.konvaStage,n=this.getPageShapeGroups(r);this.disableStageEvents(r),this.bindStageEvents(r),this.enableShapeGroups(n,r),this.selectedId&&this.selectedShape(this.selectedId,r)}}},{key:\"select\",value:function(e){this.selectedId=e}},{key:\"delete\",value:function(){this.clearTransformers()}}])}();function zV(e){return zV=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},zV(e)}function HV(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function UV(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?HV(Object(r),!0).forEach((function(t){WV(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):HV(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function VV(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,GV(n.key),n)}}function WV(e,t,r){return(t=GV(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function GV(e){var t=function(e){if(\"object\"!=zV(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=zV(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==zV(t)?t:t+\"\"}var qV=function(){return function(e,t){return t&&VV(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}((function e(t){var r=t.PDFViewerApplication;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),WV(this,\"annotationStore\",new Map),WV(this,\"originalAnnotationStore\",new Map),this.pdfViewerApplication=r}),[{key:\"annotation\",get:function(){var e=this;return function(t){return e.annotationStore.get(t)}}},{key:\"annotations\",get:function(){return Array.from(this.annotationStore.values())}},{key:\"save\",value:function(e,t){return this.annotationStore.set(e.id,e),t&&this.originalAnnotationStore.set(e.id,e),e}},{key:\"update\",value:function(e,t){if(!this.annotationStore.has(e))return console.warn(\"Annotation with id \".concat(e,\" not found.\")),null;var r=this.annotationStore.get(e);if(r){var n=UV(UV(UV({},r),t),{},{date:XN(Date.now())});return this.annotationStore.set(e,n),n}}},{key:\"getByPage\",value:function(e){return Array.from(this.annotationStore.values()).filter((function(t){return t.pageNumber===e}))}},{key:\"delete\",value:function(e){this.annotationStore.has(e)?this.annotationStore.delete(e):console.warn(\"Annotation with id \".concat(e,\" not found.\"))}}])}(),KV=o(2910),XV=o.n(KV);function YV(e){return YV=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},YV(e)}function $V(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function ZV(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,QV(n.key),n)}}function QV(e){var t=function(e){if(\"object\"!=YV(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=YV(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==YV(t)?t:t+\"\"}var JV=function(){return function(e,t){return t&&ZV(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}((function e(t){var r=t.onSelect,n=t.onHighlight;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.isEditing=!1,this.onSelect=r,this.onHighlight=n,this.highlighterObj=null}),[{key:\"create\",value:function(e){var t=this,r=!1;this.highlighterObj=new(XV())({$root:e,wrapTag:\"mark\"}),this.highlighterObj.stop(),document.addEventListener(\"selectionchange\",(function(){var n=window.getSelection();if(\"Caret\"!==n.type){if(n&&n.toString()){var o=n.getRangeAt(0).commonAncestorContainer;e.contains(o)&&(r=!0)}}else t.onSelect(null)})),document.addEventListener(\"mouseup\",(function(){if(r){r=!1;var e=window.getSelection();t.onSelect(e.getRangeAt(0))}})),document.addEventListener(\"touchend\",(function(){if(r){console.log(\"Selection completed\"),r=!1;var e=window.getSelection();t.onSelect(e.getRangeAt(0))}})),this.highlighterObj.on(\"selection:create\",(function(e){var r=e.sources.map((function(e){return e.id})),n=[];r.forEach((function(e){var r;n.push.apply(n,function(e){if(Array.isArray(e))return $V(e)}(r=t.highlighterObj.getDoms(e))||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(r)||function(e,t){if(e){if(\"string\"==typeof e)return $V(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?$V(e,t):void 0}}(r)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}())}));var o=Object.groupBy(n,(function(e){return e.closest(\".page\").getAttribute(\"data-page-number\")}));t.onHighlight(o),t.highlighterObj.removeAll(),window.getSelection().removeAllRanges()}))}},{key:\"highlight\",value:function(e){e&&this.highlighterObj.fromRange(e)}}])}();function eW(e){return eW=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},eW(e)}function tW(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function rW(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,nW(n.key),n)}}function nW(e){var t=function(e){if(\"object\"!=eW(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=eW(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==eW(t)?t:t+\"\"}var oW=function(){return function(e,t){return t&&rW(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}((function e(t){var r=t.pdfViewerApplication,n=t.id;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.pdfViewerApplication=r,this.id=n}),[{key:\"convertRect\",value:function(e,t,r){var n=r/t,o=function(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=r){var n,o,i,a,s=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return s}}(e,t)||function(e,t){if(e){if(\"string\"==typeof e)return tW(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?tW(e,t):void 0}}(e,t)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}(e,4),i=o[0],a=o[1],s=o[2],l=o[3];return{x:i,y:n-l,width:s-i,height:l-a}}},{key:\"convertQuadPoints\",value:function(e,t,r){var n=r/t;return{x:e[0].x,y:n-e[0].y,width:e[1].x-e[0].x,height:e[1].y-e[3].y}}},{key:\"convertPoint\",value:function(e,t,r){var n=r/t;return{x:e.x,y:n-e.y}}},{key:\"convertCoordinates\",value:function(e,t,r){var n=r/t;return{x:e[0],y:n-e[1],x1:e[2],y1:n-e[3]}}},{key:\"getComments\",value:function(e,t){var r=[];return t.forEach((function(t){t.annotationType===Oo.TEXT&&t.inReplyTo===e.id&&r.push({id:t.id,title:t.titleObj.str,date:t.modificationDate,content:t.contentsObj.str})})),r}}])}();function iW(e){return iW=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},iW(e)}function aW(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,sW(n.key),n)}}function sW(e){var t=function(e){if(\"object\"!=iW(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=iW(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==iW(t)?t:t+\"\"}function lW(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(lW=function(){return!!e})()}function cW(e){return cW=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},cW(e)}function uW(e,t){return uW=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},uW(e,t)}var dW=function(e){function t(e){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=cW(t),function(e,t){if(t&&(\"object\"==iW(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,lW()?Reflect.construct(t,r||[],cW(e).constructor):t.apply(e,r))}(this,t,[e])}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&uW(e,t)}(t,e),function(e,t){return t&&aW(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"decodePdfAnnotation\",value:function(e,t){var r=KN(e.color),n=1===e.borderStyle.width?e.borderStyle.width+1:e.borderStyle.width,o=this.convertRect(e.rect,e.pageViewer.viewport.scale,e.pageViewer.viewport.height),i=o.x,a=o.y,s=o.width,l=o.height,c=new(IE().Group)({draggable:!1,name:uL,id:e.id}),u=new(IE().Ellipse)({radiusX:s/2,radiusY:l/2,x:i+s/2,y:a+l/2,strokeScaleEnabled:!1,strokeWidth:n,stroke:r,dash:2===e.borderStyle.style?e.borderStyle.dashArray:[]});c.add(u);var d={id:e.id,pageNumber:e.pageNumber,konvaString:c.toJSON(),konvaClientRect:c.getClientRect(),title:e.titleObj.str,type:To.CIRCLE,color:r,pdfjsType:e.annotationType,pdfjsEditorType:Ao.INK,subtype:e.subtype,date:e.modificationDate,contentsObj:{text:e.contentsObj.str},comments:this.getComments(e,t),draggable:!0,resizable:!0};return c.destroy(),d}}])}(oW);function fW(e){return fW=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},fW(e)}function hW(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,pW(n.key),n)}}function pW(e){var t=function(e){if(\"object\"!=fW(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=fW(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==fW(t)?t:t+\"\"}function mW(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(mW=function(){return!!e})()}function gW(e){return gW=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},gW(e)}function vW(e,t){return vW=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},vW(e,t)}var bW=function(e){function t(e){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=gW(t),function(e,t){if(t&&(\"object\"==fW(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,mW()?Reflect.construct(t,r||[],gW(e).constructor):t.apply(e,r))}(this,t,[e])}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&vW(e,t)}(t,e),function(e,t){return t&&hW(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"decodePdfAnnotation\",value:function(e,t){var r=KN(e.defaultAppearanceData.fontColor),n=e.defaultAppearanceData.fontSize,o=e.contentsObj.str,i=this.convertRect(e.rect,e.pageViewer.viewport.scale,e.pageViewer.viewport.height),a=i.x,s=i.y,l=(i.width,i.height,new(IE().Group)({draggable:!1,name:uL,id:e.id})),c=new(IE().Text)({x:a,y:s+2,text:o,fontSize:n,fill:r});return l.add(c),{id:e.id,pageNumber:e.pageNumber,konvaString:l.toJSON(),konvaClientRect:l.getClientRect(),title:e.titleObj.str,type:To.FREETEXT,color:r,fontSize:n,pdfjsType:e.annotationType,pdfjsEditorType:Ao.INK,subtype:e.subtype,date:e.modificationDate,contentsObj:{text:o},comments:this.getComments(e,t),draggable:!0,resizable:!0}}}])}(oW);function yW(e){return yW=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},yW(e)}function wW(e,t,r){return(t=SW(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function xW(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,SW(n.key),n)}}function SW(e){var t=function(e){if(\"object\"!=yW(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=yW(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==yW(t)?t:t+\"\"}function CW(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(CW=function(){return!!e})()}function kW(e){return kW=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},kW(e)}function EW(e,t){return EW=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},EW(e,t)}var OW=function(e){function t(e){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=kW(t),function(e,t){if(t&&(\"object\"==yW(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,CW()?Reflect.construct(t,r||[],kW(e).constructor):t.apply(e,r))}(this,t,[e])}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&EW(e,t)}(t,e),function(e,t){return t&&xW(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"createHighlightShape\",value:function(e,t,r,n,o){return new(IE().Rect)({x:e,y:t,width:r,height:n,opacity:.5,fill:o})}},{key:\"createUnderlineShape\",value:function(e,t,r,n,o){return new(IE().Rect)({x:e,y:n+t-1.5,width:r,stroke:o,strokeWidth:.5,hitStrokeWidth:10,height:.5})}},{key:\"createStrikeoutShape\",value:function(e,t,r,n,o){return new(IE().Rect)({x:e,y:t+n/2,width:r,stroke:o,strokeWidth:.5,hitStrokeWidth:10,height:.5})}},{key:\"decodePdfAnnotation\",value:function(e,t){var r,n=this,o=KN(e.color),i=wW(wW(wW({},Oo.HIGHLIGHT,To.HIGHLIGHT),Oo.UNDERLINE,To.UNDERLINE),Oo.STRIKEOUT,To.STRIKEOUT)[e.annotationType]||To.HIGHLIGHT,a=new(IE().Group)({draggable:!1,name:uL,id:e.id});null===(r=e.quadPoints)||void 0===r||r.forEach((function(t){var r=function(t){var r=n.convertQuadPoints(t,e.pageViewer.viewport.scale,e.pageViewer.viewport.height),i=r.x,a=r.y,s=r.width,l=r.height;switch(e.annotationType){case Oo.HIGHLIGHT:return n.createHighlightShape(i,a,s,l,o);case Oo.UNDERLINE:return n.createUnderlineShape(i,a,s,l,o);case Oo.STRIKEOUT:return n.createStrikeoutShape(i,a,s,l,o);default:return null}}(t);r&&a.add(r)}));var s={id:e.id,pageNumber:e.pageNumber,konvaString:a.toJSON(),konvaClientRect:a.getClientRect(),title:e.titleObj.str,type:i,color:o,pdfjsType:e.annotationType,pdfjsEditorType:Ao.INK,subtype:e.subtype,date:e.modificationDate,contentsObj:{text:e.contentsObj.str},comments:this.getComments(e,t),draggable:!1,resizable:!1};return a.destroy(),s}}])}(oW);function AW(e){return AW=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},AW(e)}function TW(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,jW(n.key),n)}}function jW(e){var t=function(e){if(\"object\"!=AW(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=AW(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==AW(t)?t:t+\"\"}function PW(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(PW=function(){return!!e})()}function MW(e){return MW=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},MW(e)}function RW(e,t){return RW=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},RW(e,t)}var _W=function(e){function t(e){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=MW(t),function(e,t){if(t&&(\"object\"==AW(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,PW()?Reflect.construct(t,r||[],MW(e).constructor):t.apply(e,r))}(this,t,[e])}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&RW(e,t)}(t,e),function(e,t){return t&&TW(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"decodePdfAnnotation\",value:function(e,t){var r=KN(e.color),n=1===e.borderStyle.width?e.borderStyle.width+1:e.borderStyle.width,o=this.convertRect(e.rect,e.pageViewer.viewport.scale,e.pageViewer.viewport.height),i=o.x,a=o.y,s=o.width,l=o.height,c=new(IE().Group)({draggable:!1,name:uL,id:e.id}),u=new(IE().Rect)({x:i,y:a,width:s,height:l,strokeScaleEnabled:!1,stroke:r,strokeWidth:n,fill:0===e.borderStyle.width?r:null,opacity:0===e.borderStyle.width?.5:1});c.add(u);var d={id:e.id,pageNumber:e.pageNumber,konvaString:c.toJSON(),konvaClientRect:c.getClientRect(),title:e.titleObj.str,type:To.RECTANGLE,color:r,pdfjsType:e.annotationType,pdfjsEditorType:Ao.INK,subtype:e.subtype,date:e.modificationDate,contentsObj:{text:e.contentsObj.str},comments:this.getComments(e,t),draggable:!0,resizable:!0};return c.destroy(),d}}])}(oW);function IW(e){return IW=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},IW(e)}function NW(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,FW(n.key),n)}}function FW(e){var t=function(e){if(\"object\"!=IW(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=IW(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==IW(t)?t:t+\"\"}function DW(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(DW=function(){return!!e})()}function BW(e){return BW=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},BW(e)}function LW(e,t){return LW=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},LW(e,t)}var zW=function(e){function t(e){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=BW(t),function(e,t){if(t&&(\"object\"==IW(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,DW()?Reflect.construct(t,r||[],BW(e).constructor):t.apply(e,r))}(this,t,[e])}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&LW(e,t)}(t,e),function(e,t){return t&&NW(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"decodePdfAnnotation\",value:function(e,t){var r,n=this;if(0===e.inkLists.length)return null;var o=KN(e.color),i=new(IE().Group)({draggable:!1,name:uL,id:e.id});null===(r=e.inkLists)||void 0===r||r.forEach((function(t){var r,a=(r=t.map((function(t){var r=n.convertPoint(t,e.pageViewer.viewport.scale,e.pageViewer.viewport.height);return[r.x,r.y]})).flat(),new(IE().Line)({strokeScaleEnabled:!1,stroke:o,strokeWidth:e.borderStyle.width,opacity:.5,lineCap:\"round\",lineJoin:\"round\",hitStrokeWidth:20,globalCompositeOperation:\"source-over\",points:r}));i.add(a)}));var a={id:e.id,pageNumber:e.pageNumber,konvaString:i.toJSON(),konvaClientRect:i.getClientRect(),title:e.titleObj.str,type:To.FREEHAND,color:o,pdfjsType:e.annotationType,pdfjsEditorType:Ao.INK,subtype:e.subtype,date:e.modificationDate,contentsObj:{text:e.contentsObj.str},comments:this.getComments(e,t),draggable:!0,resizable:!0};return i.destroy(),a}}])}(oW);function HW(e){return HW=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},HW(e)}function UW(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,VW(n.key),n)}}function VW(e){var t=function(e){if(\"object\"!=HW(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=HW(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==HW(t)?t:t+\"\"}function WW(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(WW=function(){return!!e})()}function GW(e){return GW=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},GW(e)}function qW(e,t){return qW=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},qW(e,t)}var KW=function(e){function t(e){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=GW(t),function(e,t){if(t&&(\"object\"==HW(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,WW()?Reflect.construct(t,r||[],GW(e).constructor):t.apply(e,r))}(this,t,[e])}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&qW(e,t)}(t,e),function(e,t){return t&&UW(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"decodePdfAnnotation\",value:function(e,t){var r,n=KN(e.color),o=1===e.borderStyle.width?e.borderStyle.width+1:e.borderStyle.width,i=new(IE().Group)({draggable:!1,name:uL,id:e.id}),a=this.convertCoordinates(e.lineCoordinates,e.pageViewer.viewport.scale,e.pageViewer.viewport.height),s=(r=[a.x,a.y,a.x1,a.y1],e.lineEndings,new(IE().Line)({strokeScaleEnabled:!1,stroke:n,strokeWidth:o,hitStrokeWidth:20,dash:2===e.borderStyle.style?e.borderStyle.dashArray:[],globalCompositeOperation:\"source-over\",points:r}));i.add(s);var l={id:e.id,pageNumber:e.pageNumber,konvaString:i.toJSON(),konvaClientRect:i.getClientRect(),title:e.titleObj.str,type:To.FREEHAND,color:n,pdfjsType:e.annotationType,pdfjsEditorType:Ao.INK,subtype:e.subtype,date:e.modificationDate,contentsObj:{text:e.contentsObj.str},comments:this.getComments(e,t),draggable:!0,resizable:!0};return i.destroy(),l}}])}(oW);function XW(e){return XW=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},XW(e)}function YW(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,$W(n.key),n)}}function $W(e){var t=function(e){if(\"object\"!=XW(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=XW(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==XW(t)?t:t+\"\"}function ZW(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(ZW=function(){return!!e})()}function QW(e){return QW=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},QW(e)}function JW(e,t){return JW=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},JW(e,t)}var eG=function(e){function t(e){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=QW(t),function(e,t){if(t&&(\"object\"==XW(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,ZW()?Reflect.construct(t,r||[],QW(e).constructor):t.apply(e,r))}(this,t,[e])}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&JW(e,t)}(t,e),function(e,t){return t&&YW(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"decodePdfAnnotation\",value:function(e,t){var r,n,o=this,i=KN(e.color),a=1===e.borderStyle.width?e.borderStyle.width+1:e.borderStyle.width,s=new(IE().Group)({draggable:!1,name:uL,id:e.id}),l=(r=e.vertices,n=[],null==r||r.forEach((function(t){var r=o.convertPoint(t,e.pageViewer.viewport.scale,e.pageViewer.viewport.height),i=r.x,a=r.y;n.push(i),n.push(a)})),new(IE().Line)({strokeScaleEnabled:!1,stroke:i,strokeWidth:a,lineCap:\"round\",lineJoin:\"round\",hitStrokeWidth:20,closed:!0,globalCompositeOperation:\"source-over\",points:n}));s.add(l);var c={id:e.id,pageNumber:e.pageNumber,konvaString:s.toJSON(),konvaClientRect:s.getClientRect(),title:e.titleObj.str,type:To.FREEHAND,color:i,pdfjsType:e.annotationType,pdfjsEditorType:Ao.INK,subtype:e.subtype,date:e.modificationDate,contentsObj:{text:e.contentsObj.str},comments:this.getComments(e,t),draggable:!0,resizable:!0};return s.destroy(),c}}])}(oW);function tG(e){return tG=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},tG(e)}function rG(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,nG(n.key),n)}}function nG(e){var t=function(e){if(\"object\"!=tG(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=tG(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==tG(t)?t:t+\"\"}function oG(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(oG=function(){return!!e})()}function iG(e){return iG=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},iG(e)}function aG(e,t){return aG=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},aG(e,t)}var sG=function(e){function t(e){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=iG(t),function(e,t){if(t&&(\"object\"==tG(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,oG()?Reflect.construct(t,r||[],iG(e).constructor):t.apply(e,r))}(this,t,[e])}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&aG(e,t)}(t,e),function(e,t){return t&&rG(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"decodePdfAnnotation\",value:function(e,t){var r,n,o=this,i=KN(e.color),a=1===e.borderStyle.width?e.borderStyle.width+1:e.borderStyle.width,s=new(IE().Group)({draggable:!1,name:uL,id:e.id}),l=(r=e.vertices,n=[],null==r||r.forEach((function(t){var r=o.convertPoint(t,e.pageViewer.viewport.scale,e.pageViewer.viewport.height),i=r.x,a=r.y;n.push(i),n.push(a)})),new(IE().Line)({strokeScaleEnabled:!1,stroke:i,strokeWidth:a,lineCap:\"round\",lineJoin:\"round\",hitStrokeWidth:20,closed:!1,globalCompositeOperation:\"source-over\",points:n}));s.add(l);var c={id:e.id,pageNumber:e.pageNumber,konvaString:s.toJSON(),konvaClientRect:s.getClientRect(),title:e.titleObj.str,type:To.FREEHAND,color:i,pdfjsType:e.annotationType,pdfjsEditorType:Ao.INK,subtype:e.subtype,date:e.modificationDate,contentsObj:{text:e.contentsObj.str},comments:this.getComments(e,t),draggable:!0,resizable:!0};return s.destroy(),c}}])}(oW);function lG(e){return lG=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},lG(e)}function cG(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function uG(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,dG(n.key),n)}}function dG(e){var t=function(e){if(\"object\"!=lG(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=lG(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==lG(t)?t:t+\"\"}function fG(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(fG=function(){return!!e})()}function hG(e){return hG=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},hG(e)}function pG(e,t){return pG=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},pG(e,t)}var mG=function(e){function t(e){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=hG(t),function(e,t){if(t&&(\"object\"==lG(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,fG()?Reflect.construct(t,r||[],hG(e).constructor):t.apply(e,r))}(this,t,[e])}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&pG(e,t)}(t,e),function(e,t){return t&&uG(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"decodePdfAnnotation\",value:function(e,t){if(e.inReplyTo)return null;var r,n=KN(e.color),o=this.convertRect(e.rect,e.pageViewer.viewport.scale,e.pageViewer.viewport.height),i=o.x,a=o.y,s=new(IE().Group)({draggable:!1,name:uL,id:e.id}),l=yV({x:i,y:a,fill:n});s.add.apply(s,function(e){if(Array.isArray(e))return cG(e)}(r=l)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(r)||function(e,t){if(e){if(\"string\"==typeof e)return cG(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?cG(e,t):void 0}}(r)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}());var c={id:e.id,pageNumber:e.pageNumber,konvaString:s.toJSON(),konvaClientRect:s.getClientRect(),title:e.titleObj.str,type:To.NOTE,color:n,pdfjsType:e.annotationType,pdfjsEditorType:Ao.INK,subtype:e.subtype,date:e.modificationDate,contentsObj:{text:e.contentsObj.str},comments:this.getComments(e,t),draggable:!0,resizable:!1};return s.destroy(),c}}])}(oW);function gG(e){return gG=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},gG(e)}function vG(){vG=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==gG(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(gG(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function bG(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function yG(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?bG(Object(r),!0).forEach((function(t){wG(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):bG(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function wG(e,t,r){return(t=kG(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function xG(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function SG(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){xG(i,n,o,a,s,\"next\",e)}function s(e){xG(i,n,o,a,s,\"throw\",e)}a(void 0)}))}}function CG(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,kG(n.key),n)}}function kG(e){var t=function(e){if(\"object\"!=gG(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=gG(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==gG(t)?t:t+\"\"}var EG=function(){return function(e,t){return t&&CG(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}((function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.pdfViewerApplication=t}),[{key:\"getAnnotations\",value:(t=SG(vG().mark((function e(){var t,r,n,o,i;return vG().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=this.pdfViewerApplication.pdfDocument,r=this.pdfViewerApplication.pdfViewer,n=t.numPages,o=Array.from({length:n},(function(e,n){return t.getPage(n+1).then((function(e){var t=r.getPageView(n);return e.getAnnotations().then((function(e){return e.map((function(e){return yG(yG({},e),{},{pageNumber:n+1,pageViewer:t})}))}))}))})),e.next=6,Promise.all(o);case 6:return i=e.sent,e.abrupt(\"return\",i.flat());case 8:case\"end\":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:\"decodeAnnotation\",value:function(e,t){var r,n=(wG(wG(wG(wG(wG(wG(wG(wG(wG(wG(r={},Oo.CIRCLE,dW),Oo.FREETEXT,bW),Oo.HIGHLIGHT,OW),Oo.UNDERLINE,OW),Oo.STRIKEOUT,OW),Oo.SQUARE,_W),Oo.INK,zW),Oo.LINE,KW),Oo.POLYGON,eG),Oo.POLYLINE,sG),wG(r,Oo.TEXT,mG))[e.annotationType];return n?new n({pdfViewerApplication:this.pdfViewerApplication,id:e.id}).decodePdfAnnotation(e,t):null}},{key:\"cleanAnnotationStore\",value:function(e){var t;null===(t=this.pdfViewerApplication)||void 0===t||null===(t=t.pdfDocument)||void 0===t||t.annotationStorage.setValue(\"\".concat(\"pdfjs_internal_editor_\").concat(e.id),{deleted:!0,id:e.id,pageIndex:e.pageNumber-1})}},{key:\"decodePdfAnnotation\",value:(e=SG(vG().mark((function e(){var t,r,n=this;return vG().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getAnnotations();case 2:return t=e.sent,r=new Map,t.forEach((function(e){n.cleanAnnotationStore(e);var o=n.decodeAnnotation(e,t);o&&r.set(e.id,o)})),e.abrupt(\"return\",r);case 6:case\"end\":return e.stop()}}),e,this)}))),function(){return e.apply(this,arguments)})}]);var e,t}();function OG(e){return OG=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},OG(e)}function AG(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function TG(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?AG(Object(r),!0).forEach((function(t){_G(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):AG(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function jG(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,IG(n.key),n)}}function PG(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(PG=function(){return!!e})()}function MG(e){return MG=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},MG(e)}function RG(e,t){return RG=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},RG(e,t)}function _G(e,t,r){return(t=IG(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function IG(e){var t=function(e){if(\"object\"!=OG(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=OG(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==OG(t)?t:t+\"\"}var NG=function(e){function t(e){var r;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),_G(r=function(e,t,r){return t=MG(t),function(e,t){if(t&&(\"object\"==OG(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,PG()?Reflect.construct(t,r||[],MG(e).constructor):t.apply(e,r))}(this,t,[TG(TG({},e),{},{editorType:To.ARROW})]),\"globalPointerUpHandler\",(function(e){0===e.button&&(r.mouseUpHandler(),window.removeEventListener(\"mouseup\",r.globalPointerUpHandler))})),r.arrow=null,r.startPoint={x:0,y:0},r}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&RG(e,t)}(t,e),function(e,t){return t&&jG(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"mouseDownHandler\",value:function(e){if(e.currentTarget===this.konvaStage){this.arrow=null,this.isPainting=!0,this.currentShapeGroup=this.createShapeGroup(),this.getBgLayer().add(this.currentShapeGroup.konvaGroup);var t=this.konvaStage.getRelativePointerPosition();this.startPoint={x:t.x,y:t.y},this.arrow=new(IE().Arrow)({points:[t.x,t.y,t.x,t.y],stroke:this.currentAnnotation.style.color,strokeWidth:this.currentAnnotation.style.strokeWidth,fill:this.currentAnnotation.style.color,pointerLength:10,pointerWidth:10,hitStrokeWidth:20,lineCap:\"round\",lineJoin:\"round\",strokeScaleEnabled:!1,visible:!1,opacity:this.currentAnnotation.style.opacity}),this.currentShapeGroup.konvaGroup.add(this.arrow),window.addEventListener(\"mouseup\",this.globalPointerUpHandler)}}},{key:\"mouseMoveHandler\",value:function(e){var t,r;if(this.isPainting){e.evt.preventDefault();var n=this.konvaStage.getRelativePointerPosition(),o=[this.startPoint.x,this.startPoint.y,n.x,n.y];null===(t=this.arrow)||void 0===t||t.show(),null===(r=this.arrow)||void 0===r||r.setAttrs({points:o})}}},{key:\"mouseUpHandler\",value:function(){var e,t;if(this.isPainting){this.isPainting=!1;var r=null===(e=this.arrow)||void 0===e?void 0:e.getParent();if(null!==(t=this.arrow)&&void 0!==t&&t.isVisible()||\"Group\"!==(null==r?void 0:r.getType())){var n;if(this.isTooShort())return null===(n=this.arrow)||void 0===n||n.destroy(),this.delShapeGroup(r.id()),void(this.arrow=null);this.setShapeGroupDone({id:r.id(),color:this.currentAnnotation.style.color,contentsObj:{text:\"\"}}),this.arrow=null}else this.delShapeGroup(r.id())}}},{key:\"isTooShort\",value:function(){if(!this.arrow)return!0;var e=this.arrow.points();if(4!==e.length)return!0;var t=e[2]-e[0],r=e[3]-e[1];return Math.hypot(t,r)<vL.MinSize}},{key:\"changeStyle\",value:function(e,t){var r=e.id,n=this.getShapeGroupById(r);if(n){n.getChildren().forEach((function(e){if(e instanceof IE().Arrow){if(void 0!==t.color&&(e.stroke(t.color),e.fill(t.color)),void 0!==t.strokeWidth){var r=t.strokeWidth;e.strokeWidth(r);var n=Math.max(6,Math.min(30,5*r));e.pointerLength(n),e.pointerWidth(n)}void 0!==t.opacity&&e.opacity(t.opacity)}}));var o={konvaString:n.toJSON()};void 0!==t.color&&(o.color=t.color),this.setChanged(r,o)}}}])}(vL);function FG(e){return FG=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},FG(e)}function DG(e){return function(e){if(Array.isArray(e))return BG(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||function(e,t){if(e){if(\"string\"==typeof e)return BG(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?BG(e,t):void 0}}(e)||function(){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 BG(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function LG(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function zG(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?LG(Object(r),!0).forEach((function(t){GG(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):LG(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function HG(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,qG(n.key),n)}}function UG(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(UG=function(){return!!e})()}function VG(e){return VG=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},VG(e)}function WG(e,t){return WG=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},WG(e,t)}function GG(e,t,r){return(t=qG(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function qG(e){var t=function(e){if(\"object\"!=FG(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=FG(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==FG(t)?t:t+\"\"}var KG=function(e){function t(e){var r;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),GG(r=function(e,t,r){return t=VG(t),function(e,t){if(t&&(\"object\"==FG(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,UG()?Reflect.construct(t,r||[],VG(e).constructor):t.apply(e,r))}(this,t,[zG(zG({},e),{},{editorType:To.CLOUD})]),\"cloudPath\",null),GG(r,\"points\",[]),GG(r,\"startRect\",null),GG(r,\"startRectSize\",12),GG(r,\"handleKeyUp\",(function(e){\"Escape\"===e.key&&r.isPainting&&r.cancelDrawing()})),GG(r,\"handleDoubleClick\",(function(){if(r.isPainting&&!(r.points.length<3)&&(r.isPainting=!1,r.cloudPath)){var e=[].concat(DG(r.points),[r.points[0]]),t=r.generateCloudPathData(e);r.cloudPath.data(t),r.setShapeGroupDone({id:r.currentShapeGroup.konvaGroup.id(),color:r.currentAnnotation.style.color,contentsObj:{text:\"\"}}),r.cloudPath=null,r.points=[],r.startRect&&(r.startRect.destroy(),r.startRect=null)}})),r.konvaStage.on(\"dblclick\",r.handleDoubleClick),window.addEventListener(\"keyup\",r.handleKeyUp),r}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&WG(e,t)}(t,e),function(e,t){return t&&HG(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"cancelDrawing\",value:function(){this.isPainting=!1,this.points=[],this.cloudPath&&(this.cloudPath.destroy(),this.cloudPath=null),this.startRect&&(this.startRect.destroy(),this.startRect=null),this.currentShapeGroup&&(this.delShapeGroup(this.currentShapeGroup.konvaGroup.id()),this.currentShapeGroup=null),this.getBgLayer().batchDraw()}},{key:\"mouseDownHandler\",value:function(e){var t=this.konvaStage.getRelativePointerPosition();this.points.push(t),this.isPainting||(this.isPainting=!0,this.currentShapeGroup=this.createShapeGroup(),this.getBgLayer().add(this.currentShapeGroup.konvaGroup),this.cloudPath=new(IE().Path)({data:\"\",stroke:this.currentAnnotation.style.color,strokeWidth:this.currentAnnotation.style.strokeWidth,fillEnabled:!1,lineJoin:\"round\",lineCap:\"round\",hitStrokeWidth:20,opacity:this.currentAnnotation.style.opacity}),this.currentShapeGroup.konvaGroup.add(this.cloudPath),this.drawStartRect(t)),this.updateCloudPreview()}},{key:\"mouseMoveHandler\",value:function(e){if(this.isPainting&&this.cloudPath){var t=this.konvaStage.getRelativePointerPosition();this.updateCloudPreview(t)}}},{key:\"mouseUpHandler\",value:function(e){}},{key:\"updateCloudPreview\",value:function(e){if(this.cloudPath){var t=DG(this.points);e&&t.push(e);var r=this.generateCloudPathData(t);this.cloudPath.data(r)}}},{key:\"generateCloudPathData\",value:function(e){if(e.length<2)return\"\";for(var t=12*1.1,r=this.computeCentroid(e),n=\"\",o=null,i=0;i<e.length-1;i++){var a=e[i],s=e[i+1],l=s.x-a.x,c=s.y-a.y,u=Math.hypot(l,c),d=Math.atan2(c,l);0!==i||o||(o=d),0===i&&(d=o);var f=Math.cos(d+Math.PI/2),h=Math.sin(d+Math.PI/2),p=(a.x+s.x)/2,m=(a.y+s.y)/2,g=1;f*(r.x-p)+h*(r.y-m)>0&&(g=-1);for(var v=Math.max(2,Math.floor(u/t)),b=0;b<v;b++){var y=b/v,w=(b+1)/v,x=a.x+l*y,S=a.y+c*y,C=a.x+l*w,k=a.y+c*w,E=(x+C)/2+12*f*g,O=(S+k)/2+12*h*g;0===i&&0===b&&(n+=\"M \".concat(x,\" \").concat(S,\" \")),n+=\"Q \".concat(E,\" \").concat(O,\" \").concat(C,\" \").concat(k,\" \")}}return n}},{key:\"computeCentroid\",value:function(e){var t=e.reduce((function(e,t){return e.x+=t.x,e.y+=t.y,e}),{x:0,y:0});return{x:t.x/e.length,y:t.y/e.length}}},{key:\"drawStartRect\",value:function(e){var t=this;this.startRect=new(IE().Rect)({x:e.x-this.startRectSize/2,y:e.y-this.startRectSize/2,width:this.startRectSize,height:this.startRectSize,stroke:\"#000\",strokeWidth:2,fill:null,cornerRadius:2,hitStrokeWidth:10,draggable:!1,dash:[4,2],name:\"startRect\"}),this.getBgLayer().add(this.startRect),this.startRect.moveToTop(),this.startRect.on(\"mouseup\",(function(e){t.handleDoubleClick()})),this.startRect.on(\"mousemove\",(function(e){var r;t.startRect.stroke(\"#1677ff\"),null===(r=t.startRect.getLayer())||void 0===r||r.batchDraw()})),this.startRect.on(\"mouseout\",(function(e){var r;t.startRect.stroke(\"#000\"),null===(r=t.startRect.getLayer())||void 0===r||r.batchDraw()}))}},{key:\"changeStyle\",value:function(e,t){var r=e.id,n=this.getShapeGroupById(r);if(n){n.getChildren().forEach((function(e){e instanceof IE().Path&&(void 0!==t.color&&e.stroke(t.color),void 0!==t.strokeWidth&&e.strokeWidth(t.strokeWidth),void 0!==t.opacity&&e.opacity(t.opacity))}));var o={konvaString:n.toJSON()};void 0!==t.color&&(o.color=t.color),this.setChanged(r,o)}}}])}(vL);function XG(e){return XG=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},XG(e)}function YG(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=r){var n,o,i,a,s=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return s}}(e,t)||function(e,t){if(e){if(\"string\"==typeof e)return $G(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?$G(e,t):void 0}}(e,t)||function(){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 $G(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function ZG(){ZG=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==XG(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(XG(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function QG(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function JG(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){QG(i,n,o,a,s,\"next\",e)}function s(e){QG(i,n,o,a,s,\"throw\",e)}a(void 0)}))}}function eq(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,rq(n.key),n)}}function tq(e,t,r){return(t=rq(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function rq(e){var t=function(e){if(\"object\"!=XG(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=XG(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==XG(t)?t:t+\"\"}var nq=function(){return function(e,t){return t&&eq(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}((function e(t){var r,n=this,o=t.userName,i=t.PDFViewerApplication,a=t.PDFJS_EventBus,s=t.setDefaultMode,l=t.onWebSelectionSelected,c=t.onStoreAdd,u=t.onStoreDelete,d=t.onAnnotationSelected,f=t.onAnnotationChange,h=t.onAnnotationChanging,p=t.onAnnotationChanged;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),tq(this,\"konvaCanvasStore\",new Map),tq(this,\"editorStore\",new Map),tq(this,\"currentAnnotation\",null),tq(this,\"globalKeyUpHandler\",(function(e){\"Escape\"!==e.code||n.currentAnnotation.type!==To.SIGNATURE&&n.currentAnnotation.type!==To.STAMP||(WN(fL),n.setDefaultMode())})),this.userName=o,this.pdfViewerApplication=i,this.pdfjsEventBus=a,this.setDefaultMode=s,this.onWebSelectionSelected=l,this.onStoreAdd=c,this.onStoreDelete=u,this.onAnnotationSelected=d,this.onAnnotationChange=f,this.onAnnotationChanging=h,this.onAnnotationChanged=p,this.store=new qV({PDFViewerApplication:i}),this.selector=new LV({konvaCanvasStore:this.konvaCanvasStore,getAnnotationStore:function(e){return n.store.annotation(e)},onSelected:function(e,t,r){n.onAnnotationSelected(n.store.annotation(e),t,r)},onChanged:(r=JG(ZG().mark((function e(t,r,o,i,a){return ZG().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n.findEditorForGroupId(t)&&n.updateStore(t,{konvaString:r,konvaClientRect:i}),n.onAnnotationChanged(n.store.annotation(t),a);case 3:case\"end\":return e.stop()}}),e)}))),function(e,t,n,o,i){return r.apply(this,arguments)}),onCancel:function(){n.onAnnotationChanging()},onDelete:function(e){n.deleteAnnotation(e,!0)}}),this.webSelection=new JV({onSelect:function(e){n.onWebSelectionSelected(e)},onHighlight:function(e){Object.keys(e).forEach((function(t){var r=Number(t),o=e[t],i=n.konvaCanvasStore.get(r);if(i){var a=i.konvaStage,s=i.wrapper,l=n.findEditor(r,n.currentAnnotation.type);l||(l=new IU({userName:n.userName,pdfViewerApplication:n.pdfViewerApplication,konvaStage:a,pageNumber:r,annotation:n.currentAnnotation,onAdd:function(e){n.saveToStore(e)},onChange:function(e,t){n.updateStore(e,t)}},n.currentAnnotation.type),n.editorStore.set(l.id,l)),l.convertTextSelection(o,s)}}))}}),this.transform=new EG(i),this.bindGlobalEvents()}),[{key:\"bindGlobalEvents\",value:function(){window.addEventListener(\"keyup\",this.globalKeyUpHandler)}},{key:\"createPainterWrapper\",value:function(e,t){var r=document.createElement(\"div\");r.id=\"\".concat(sL,\"_page_\").concat(t),r.setAttribute(\"data-main-rotation\",\"\".concat(e.viewport.rotation)),r.classList.add(sL);var n={width:e.viewport.viewBox[2],height:e.viewport.viewBox[3]},o=n.width,i=n.height,a=\"var(--scale-factor)\";return r.style.width=\"calc(\".concat(a,\" * \").concat(o,\"px)\"),r.style.height=\"calc(\".concat(a,\" * \").concat(i,\"px)\"),e.div.appendChild(r),r}},{key:\"createKonvaStage\",value:function(e,t){var r=new(IE().Stage)({container:e,width:t.width,height:t.height,rotation:t.rotation,scale:{x:t.scale,y:t.scale}}),n=new(IE().Layer);return r.add(n),r}},{key:\"cleanUpInvalidStore\",value:function(){var e=this;this.konvaCanvasStore.forEach((function(t){var r;r=t.wrapper,document.body.contains(r)||(t.konvaStage.destroy(),e.konvaCanvasStore.delete(t.pageNumber))}))}},{key:\"insertCanvas\",value:function(e,t){this.cleanUpInvalidStore();var r=this.createPainterWrapper(e,t),n=this.createKonvaStage(r,e.viewport);this.konvaCanvasStore.set(t,{pageNumber:t,konvaStage:n,wrapper:r,isActive:!1}),this.reDrawAnnotation(t),this.enablePainting()}},{key:\"scaleCanvas\",value:function(e,t){var r=this.konvaCanvasStore.get(t);if(r){var n=r.konvaStage,o=e.viewport,i=o.scale,a=o.width,s=o.height;n.scale({x:i,y:i}),n.width(a),n.height(s)}}},{key:\"setMode\",value:function(e){var t,r=\"painting\"===e;document.body.classList.toggle(\"\".concat(lL),r),Object.values(To).filter((function(e){return\"number\"==typeof e})).map((function(e){return\"\".concat(cL,\"_\").concat(e)})).forEach((function(e){return document.body.classList.remove(e)})),WN(fL),this.currentAnnotation&&document.body.classList.add(\"\".concat(cL,\"_\").concat(null===(t=this.currentAnnotation)||void 0===t?void 0:t.type))}},{key:\"saveToStore\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=Po.find((function(t){return t.pdfjsAnnotationType===e.pdfjsType}));this.onStoreAdd(this.store.save(e,t),t,r)}},{key:\"updateStore\",value:function(e,t){this.onAnnotationChange(this.store.update(e,t))}},{key:\"findEditorForGroupId\",value:function(e){var t=null;return this.editorStore.forEach((function(r){var n;null!==(n=r.shapeGroupStore)&&void 0!==n&&n.has(e)&&(t=r)})),t}},{key:\"findEditor\",value:function(e,t){return this.editorStore.get(\"\".concat(e,\"_\").concat(t))}},{key:\"enableEditor\",value:function(e){var t=this,r=e.konvaStage,n=e.pageNumber,o=e.annotation,i=this.findEditor(n,o.type);if(i)return i instanceof oV?void i.activateWithSignature(r,o,this.tempDataTransfer):i instanceof bV?void i.activateWithStamp(r,o,this.tempDataTransfer):void i.activate(r,o);var a=null;switch(o.type){case To.FREETEXT:a=new kU({userName:this.userName,pdfViewerApplication:this.pdfViewerApplication,konvaStage:r,pageNumber:n,annotation:o,onAdd:function(e){t.saveToStore(e)},onChange:function(){}});break;case To.RECTANGLE:a=new WU({userName:this.userName,pdfViewerApplication:this.pdfViewerApplication,konvaStage:r,pageNumber:n,annotation:o,onAdd:function(e){t.saveToStore(e)},onChange:function(e,r){t.updateStore(e,r)}});break;case To.ARROW:a=new NG({userName:this.userName,pdfViewerApplication:this.pdfViewerApplication,konvaStage:r,pageNumber:n,annotation:o,onAdd:function(e){t.saveToStore(e)},onChange:function(e,r){t.updateStore(e,r)}});break;case To.CLOUD:a=new KG({userName:this.userName,pdfViewerApplication:this.pdfViewerApplication,konvaStage:r,pageNumber:n,annotation:o,onAdd:function(e){t.saveToStore(e)},onChange:function(e,r){t.updateStore(e,r)}});break;case To.CIRCLE:a=new AL({userName:this.userName,pdfViewerApplication:this.pdfViewerApplication,konvaStage:r,pageNumber:n,annotation:o,onAdd:function(e){t.saveToStore(e)},onChange:function(e,r){t.updateStore(e,r)}});break;case To.NOTE:a=new RV({userName:this.userName,pdfViewerApplication:this.pdfViewerApplication,konvaStage:r,pageNumber:n,annotation:o,onAdd:function(e){t.saveToStore(e)},onChange:function(){}});break;case To.FREEHAND:a=new DL({userName:this.userName,pdfViewerApplication:this.pdfViewerApplication,konvaStage:r,pageNumber:n,annotation:o,onAdd:function(e){t.saveToStore(e)},onChange:function(e,r){t.updateStore(e,r)}});break;case To.FREE_HIGHLIGHT:a=new KL({userName:this.userName,pdfViewerApplication:this.pdfViewerApplication,konvaStage:r,pageNumber:n,annotation:o,onAdd:function(e){t.saveToStore(e)},onChange:function(e,r){t.updateStore(e,r)}});break;case To.SIGNATURE:a=new oV({userName:this.userName,pdfViewerApplication:this.pdfViewerApplication,konvaStage:r,pageNumber:n,annotation:o,onAdd:function(e){t.saveToStore(e)},onChange:function(){}},this.tempDataTransfer);break;case To.STAMP:a=new bV({userName:this.userName,pdfViewerApplication:this.pdfViewerApplication,konvaStage:r,pageNumber:n,annotation:o,onAdd:function(e){t.saveToStore(e)},onChange:function(){}},this.tempDataTransfer);break;case To.HIGHLIGHT:case To.UNDERLINE:case To.STRIKEOUT:a=new IU({userName:this.userName,pdfViewerApplication:this.pdfViewerApplication,konvaStage:r,pageNumber:n,annotation:o,onAdd:function(e){t.saveToStore(e)},onChange:function(e,r){t.updateStore(e,r)}},o.type);break;case To.SELECT:this.selector.activate(n);break;default:return void console.warn(\"未实现的批注类型: \".concat(o.type))}a&&this.editorStore.set(a.id,a)}},{key:\"enablePainting\",value:function(){var e=this;this.konvaCanvasStore.forEach((function(t){var r=t.konvaStage,n=t.pageNumber;e.currentAnnotation&&e.enableEditor({konvaStage:r,pageNumber:n,annotation:e.currentAnnotation})}))}},{key:\"reDrawAnnotation\",value:function(e){var t=this,r=this.konvaCanvasStore.get(e);this.store.getByPage(e).forEach((function(n){var o=t.findEditor(e,n.type);if(!o){var i=Po.find((function(e){return e.type===n.type}));t.enableEditor({konvaStage:r.konvaStage,pageNumber:e,annotation:i}),o=t.findEditor(e,n.type)}o&&o.addSerializedGroupToLayer(r.konvaStage,n.konvaString)}))}},{key:\"deleteAnnotation\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=this.store.annotation(e),n=this.konvaCanvasStore.get(r.pageNumber);if(r){this.store.delete(e);var o=this.findEditor(r.pageNumber,r.type);o&&o.deleteGroup(e,n.konvaStage),t&&this.onStoreDelete(e)}}},{key:\"disablePainting\",value:function(){this.setMode(\"default\"),this.clearTempDataTransfer(),this.selector.clear(),console.log(\"Painting mode disabled\")}},{key:\"saveTempDataTransfer\",value:function(e){return this.tempDataTransfer=e,this.tempDataTransfer}},{key:\"clearTempDataTransfer\",value:function(){return this.tempDataTransfer=null,this.tempDataTransfer}},{key:\"initCanvas\",value:function(e){var t=e.pageView,r=e.cssTransform,n=e.pageNumber;r?this.scaleCanvas(t,n):this.insertCanvas(t,n)}},{key:\"initWebSelection\",value:function(e){this.webSelection.create(e)}},{key:\"activate\",value:function(e,t){if(this.currentAnnotation=e,this.disablePainting(),this.saveTempDataTransfer(t),e){switch(console.log(\"Painting mode active type: \".concat(e.type,\" | pdfjs annotationStorage type: \").concat(e.pdfjsEditorType)),e.type){case To.FREETEXT:case To.RECTANGLE:case To.CIRCLE:case To.FREEHAND:case To.FREE_HIGHLIGHT:case To.SIGNATURE:case To.STAMP:case To.SELECT:case To.NOTE:case To.ARROW:case To.CLOUD:this.setMode(\"painting\");break;default:this.setMode(\"default\")}this.enablePainting()}}},{key:\"resetPdfjsAnnotationStorage\",value:function(){}},{key:\"highlightRange\",value:function(e,t){this.currentAnnotation=t,this.webSelection.highlight(e)}},{key:\"selectAnnotation\",value:function(e){this.setDefaultMode(),this.selector.select(e)}},{key:\"initAnnotations\",value:(t=JG(ZG().mark((function e(t,r){var n,o=this;return ZG().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!r){e.next=8;break}return e.next=3,this.transform.decodePdfAnnotation();case 3:(n=e.sent).forEach((function(e){o.saveToStore(e,!0)})),t.forEach((function(e){n.has(e.id)?o.updateStore(e.id,e):o.saveToStore(e,!0)})),e.next=9;break;case 8:t.forEach((function(e){o.saveToStore(e,!0)}));case 9:case\"end\":return e.stop()}}),e,this)}))),function(e,r){return t.apply(this,arguments)})},{key:\"update\",value:function(e,t){this.store.update(e,t)}},{key:\"delete\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.selector.delete(),this.deleteAnnotation(e,t)}},{key:\"highlight\",value:(e=JG(ZG().mark((function e(t){var r,n,o,i,a,s,l,c,u,d=this;return ZG().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=this.pdfViewerApplication.pdfViewer.getPageView(t.pageNumber),n=t.konvaClientRect,o=n.x,i=n.y,a=r.viewport.convertToPdfPoint(o,i),s=YG(a,2),l=s[0],c=s[1],this.pdfViewerApplication.pdfViewer.scrollPageIntoView({pageNumber:t.pageNumber,destArray:[null,{name:\"XYZ\"},l,c,null],allowNegativeOffset:!0}),(u=function(e){d.findEditor(t.pageNumber,t.type)?(d.setDefaultMode(),d.selector.select(t.id),d.currentAnnotation&&d.currentAnnotation.type===To.SELECT&&d.selector.activate(t.pageNumber)):e>0?setTimeout((function(){u(e-1)}),200):console.error(\"Failed to find editor after maximum retries.\")})(5);case 8:case\"end\":return e.stop()}}),e,this)}))),function(t){return e.apply(this,arguments)})},{key:\"getData\",value:function(){return this.store.annotations}},{key:\"updateAnnotationStyle\",value:function(e,t){var r=this.findEditorForGroupId(e.id);r&&r.updateStyle(e,t)}}]);var e,t}(),oq=o(7830),iq={};iq.styleTagTransform=f(),iq.setAttributes=l(),iq.insert=a().bind(null,\"head\"),iq.domAPI=n(),iq.insertStyleElement=u(),t()(oq.A,iq),oq.A&&oq.A.locals&&oq.A.locals;const aq={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M257.7 752c2 0 4-.2 6-.5L431.9 722c2-.4 3.9-1.3 5.3-2.8l423.9-423.9a9.96 9.96 0 000-14.1L694.9 114.9c-1.9-1.9-4.4-2.9-7.1-2.9s-5.2 1-7.1 2.9L256.8 538.8c-1.5 1.5-2.4 3.3-2.8 5.3l-29.5 168.2a33.5 33.5 0 009.4 29.8c6.6 6.4 14.9 9.9 23.8 9.9zm67.4-174.4L687.8 215l73.3 73.3-362.7 362.6-88.9 15.7 15.6-89zM880 836H144c-17.7 0-32 14.3-32 32v36c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-36c0-17.7-14.3-32-32-32z\"}}]},name:\"edit\",theme:\"outlined\"};var sq=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:aq}))};const lq=m.forwardRef(sq);var cq=function(e){if(Tt()&&window.document.documentElement){var t=Array.isArray(e)?e:[e],r=window.document.documentElement;return t.some((function(e){return e in r.style}))}return!1};function uq(e,t){return Array.isArray(e)||void 0===t?cq(e):function(e,t){if(!cq(e))return!1;var r=document.createElement(\"div\"),n=r.style[e];return r.style[e]=t,r.style[e]!==n}(e,t)}const dq={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M864 170h-60c-4.4 0-8 3.6-8 8v518H310v-73c0-6.7-7.8-10.5-13-6.3l-141.9 112a8 8 0 000 12.6l141.9 112c5.3 4.2 13 .4 13-6.3v-75h498c35.3 0 64-28.7 64-64V178c0-4.4-3.6-8-8-8z\"}}]},name:\"enter\",theme:\"outlined\"};var fq=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:dq}))};const hq=m.forwardRef(fq),pq=e=>{const t={};return[1,2,3,4,5].forEach((r=>{t[`\\n      h${r}&,\\n      div&-h${r},\\n      div&-h${r} > textarea,\\n      h${r}\\n    `]=((e,t,r,n)=>{const{titleMarginBottom:o,fontWeightStrong:i}=n;return{marginBottom:o,color:r,fontWeight:i,fontSize:e,lineHeight:t}})(e[`fontSizeHeading${r}`],e[`lineHeightHeading${r}`],e.colorTextHeading,e)})),t},mq=e=>{const{componentCls:t}=e;return{\"a&, a\":Object.assign(Object.assign({},ac(e)),{userSelect:\"text\",[`&[disabled], &${t}-disabled`]:{color:e.colorTextDisabled,cursor:\"not-allowed\",\"&:active, &:hover\":{color:e.colorTextDisabled},\"&:active\":{pointerEvents:\"none\"}}})}},gq=e=>({code:{margin:\"0 0.2em\",paddingInline:\"0.4em\",paddingBlock:\"0.2em 0.1em\",fontSize:\"85%\",fontFamily:e.fontFamilyCode,background:\"rgba(150, 150, 150, 0.1)\",border:\"1px solid rgba(100, 100, 100, 0.2)\",borderRadius:3},kbd:{margin:\"0 0.2em\",paddingInline:\"0.4em\",paddingBlock:\"0.15em 0.1em\",fontSize:\"90%\",fontFamily:e.fontFamilyCode,background:\"rgba(150, 150, 150, 0.06)\",border:\"1px solid rgba(100, 100, 100, 0.2)\",borderBottomWidth:2,borderRadius:3},mark:{padding:0,backgroundColor:tt[2]},\"u, ins\":{textDecoration:\"underline\",textDecorationSkipInk:\"auto\"},\"s, del\":{textDecoration:\"line-through\"},strong:{fontWeight:600},\"ul, ol\":{marginInline:0,marginBlock:\"0 1em\",padding:0,li:{marginInline:\"20px 0\",marginBlock:0,paddingInline:\"4px 0\",paddingBlock:0}},ul:{listStyleType:\"circle\",ul:{listStyleType:\"disc\"}},ol:{listStyleType:\"decimal\"},\"pre, blockquote\":{margin:\"1em 0\"},pre:{padding:\"0.4em 0.6em\",whiteSpace:\"pre-wrap\",wordWrap:\"break-word\",background:\"rgba(150, 150, 150, 0.1)\",border:\"1px solid rgba(100, 100, 100, 0.2)\",borderRadius:3,fontFamily:e.fontFamilyCode,code:{display:\"inline\",margin:0,padding:0,fontSize:\"inherit\",fontFamily:\"inherit\",background:\"transparent\",border:0}},blockquote:{paddingInline:\"0.6em 0\",paddingBlock:0,borderInlineStart:\"4px solid rgba(100, 100, 100, 0.2)\",opacity:.85}}),vq=e=>{const{componentCls:t,paddingSM:r}=e,n=r;return{\"&-edit-content\":{position:\"relative\",\"div&\":{insetInlineStart:e.calc(e.paddingSM).mul(-1).equal(),marginTop:e.calc(n).mul(-1).equal(),marginBottom:`calc(1em - ${Si(n)})`},[`${t}-edit-content-confirm`]:{position:\"absolute\",insetInlineEnd:e.calc(e.marginXS).add(2).equal(),insetBlockEnd:e.marginXS,color:e.colorIcon,fontWeight:\"normal\",fontSize:e.fontSize,fontStyle:\"normal\",pointerEvents:\"none\"},textarea:{margin:\"0!important\",MozTransition:\"none\",height:\"1em\"}}}},bq=e=>({[`${e.componentCls}-copy-success`]:{\"\\n    &,\\n    &:hover,\\n    &:focus\":{color:e.colorSuccess}},[`${e.componentCls}-copy-icon-only`]:{marginInlineStart:0}}),yq=e=>{const{componentCls:t,titleMarginTop:r}=e;return{[t]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({color:e.colorText,wordBreak:\"break-word\",lineHeight:e.lineHeight,[`&${t}-secondary`]:{color:e.colorTextDescription},[`&${t}-success`]:{color:e.colorSuccessText},[`&${t}-warning`]:{color:e.colorWarningText},[`&${t}-danger`]:{color:e.colorErrorText,\"a&:active, a&:focus\":{color:e.colorErrorTextActive},\"a&:hover\":{color:e.colorErrorTextHover}},[`&${t}-disabled`]:{color:e.colorTextDisabled,cursor:\"not-allowed\",userSelect:\"none\"},\"\\n        div&,\\n        p\\n      \":{marginBottom:\"1em\"}},pq(e)),{[`\\n      & + h1${t},\\n      & + h2${t},\\n      & + h3${t},\\n      & + h4${t},\\n      & + h5${t}\\n      `]:{marginTop:r},\"\\n      div,\\n      ul,\\n      li,\\n      p,\\n      h1,\\n      h2,\\n      h3,\\n      h4,\\n      h5\":{\"\\n        + h1,\\n        + h2,\\n        + h3,\\n        + h4,\\n        + h5\\n        \":{marginTop:r}}}),gq(e)),mq(e)),{[`\\n        ${t}-expand,\\n        ${t}-collapse,\\n        ${t}-edit,\\n        ${t}-copy\\n      `]:Object.assign(Object.assign({},ac(e)),{marginInlineStart:e.marginXXS})}),vq(e)),bq(e)),{\"\\n  a&-ellipsis,\\n  span&-ellipsis\\n  \":{display:\"inline-block\",maxWidth:\"100%\"},\"&-ellipsis-single-line\":{whiteSpace:\"nowrap\",overflow:\"hidden\",textOverflow:\"ellipsis\",\"a&, span&\":{verticalAlign:\"bottom\"},\"> code\":{paddingBlock:0,maxWidth:\"calc(100% - 1.2em)\",display:\"inline-block\",overflow:\"hidden\",textOverflow:\"ellipsis\",verticalAlign:\"bottom\",boxSizing:\"content-box\"}},\"&-ellipsis-multiple-line\":{display:\"-webkit-box\",overflow:\"hidden\",WebkitLineClamp:3,WebkitBoxOrient:\"vertical\"}}),{\"&-rtl\":{direction:\"rtl\"}})}},wq=Iu(\"Typography\",(e=>[yq(e)]),(()=>({titleMarginTop:\"1.2em\",titleMarginBottom:\"0.5em\"}))),xq=e=>{const{prefixCls:t,\"aria-label\":r,className:n,style:o,direction:i,maxLength:a,autoSize:s=!0,value:l,onSave:c,onCancel:u,onEnd:d,component:f,enterIcon:h=m.createElement(hq,null)}=e,p=m.useRef(null),g=m.useRef(!1),v=m.useRef(null),[b,y]=m.useState(l);m.useEffect((()=>{y(l)}),[l]),m.useEffect((()=>{var e;if(null===(e=p.current)||void 0===e?void 0:e.resizableTextArea){const{textArea:e}=p.current.resizableTextArea;e.focus();const{length:t}=e.value;e.setSelectionRange(t,t)}}),[]);const w=()=>{c(b.trim())},[x,S,C]=wq(t),k=ze()(t,`${t}-edit-content`,{[`${t}-rtl`]:\"rtl\"===i,[`${t}-${f}`]:!!f},n,S,C);return x(m.createElement(\"div\",{className:k,style:o},m.createElement(rB,{ref:p,maxLength:a,value:b,onChange:e=>{let{target:t}=e;y(t.value.replace(/[\\n\\r]/g,\"\"))},onKeyDown:e=>{let{keyCode:t}=e;g.current||(v.current=t)},onKeyUp:e=>{let{keyCode:t,ctrlKey:r,altKey:n,metaKey:o,shiftKey:i}=e;v.current!==t||g.current||r||n||o||i||(t===$c.ENTER?(w(),null==d||d()):t===$c.ESC&&u())},onCompositionStart:()=>{g.current=!0},onCompositionEnd:()=>{g.current=!1},onBlur:()=>{w()},\"aria-label\":r,rows:1,autoSize:s}),null!==h?th(h,{className:`${t}-edit-content-confirm`}):null))};var Sq=o(7965),Cq=o.n(Sq);const kq=e=>{let{copyConfig:t,children:r}=e;const[n,o]=m.useState(!1),[i,a]=m.useState(!1),s=m.useRef(null),l=()=>{s.current&&clearTimeout(s.current)},c={};t.format&&(c.format=t.format),m.useEffect((()=>l),[]);const u=Ws((e=>{return n=void 0,i=void 0,d=function*(){var n;null==e||e.preventDefault(),null==e||e.stopPropagation(),a(!0);try{const i=\"function\"==typeof t.text?yield t.text():t.text;Cq()(i||function(e){return arguments.length>1&&void 0!==arguments[1]&&arguments[1]&&null==e?[]:Array.isArray(e)?e:[e]}(r,!0).join(\"\")||\"\",c),a(!1),o(!0),l(),s.current=setTimeout((()=>{o(!1)}),3e3),null===(n=t.onCopy)||void 0===n||n.call(t,e)}catch(e){throw a(!1),e}},new((u=void 0)||(u=Promise))((function(e,t){function r(e){try{a(d.next(e))}catch(e){t(e)}}function o(e){try{a(d.throw(e))}catch(e){t(e)}}function a(t){var n;t.done?e(t.value):(n=t.value,n instanceof u?n:new u((function(e){e(n)}))).then(r,o)}a((d=d.apply(n,i||[])).next())}));var n,i,u,d}));return{copied:n,copyLoading:i,onClick:u}};function Eq(e,t){return m.useMemo((()=>{const r=!!e;return[r,Object.assign(Object.assign({},t),r&&\"object\"==typeof e?e:null)]}),[e])}const Oq=m.forwardRef(((e,t)=>{const{prefixCls:r,component:n=\"article\",className:o,rootClassName:i,setContentRef:a,children:s,direction:l,style:c}=e,u=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"component\",\"className\",\"rootClassName\",\"setContentRef\",\"children\",\"direction\",\"style\"]),{getPrefixCls:d,direction:f,className:h,style:p}=Zo(\"typography\"),g=null!=l?l:f,v=a?Cn(t,a):t,b=d(\"typography\",r),[y,w,x]=wq(b),S=ze()(b,h,{[`${b}-rtl`]:\"rtl\"===g},o,i,w,x),C=Object.assign(Object.assign({},p),c);return y(m.createElement(n,Object.assign({className:S,style:C,ref:v},u),s))})),Aq=Oq,Tq={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z\"}}]},name:\"copy\",theme:\"outlined\"};var jq=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:Tq}))};const Pq=m.forwardRef(jq);function Mq(e){return!1===e?[!1,!1]:Array.isArray(e)?e:[e]}function Rq(e,t,r){return!0===e||void 0===e?t:e||r&&t}const _q=e=>[\"string\",\"number\"].includes(typeof e),Iq=e=>{let{prefixCls:t,copied:r,locale:n,iconOnly:o,tooltips:i,icon:a,tabIndex:s,onCopy:l,loading:c}=e;const u=Mq(i),d=Mq(a),{copied:f,copy:h}=null!=n?n:{},p=r?f:h,g=Rq(u[r?1:0],p),v=\"string\"==typeof g?g:p;return m.createElement(im,{title:g},m.createElement(\"button\",{type:\"button\",className:ze()(`${t}-copy`,{[`${t}-copy-success`]:r,[`${t}-copy-icon-only`]:o}),onClick:l,\"aria-label\":v,tabIndex:s},r?Rq(d[1],m.createElement($b,null),!0):Rq(d[0],c?m.createElement(Xc,null):m.createElement(Pq,null),!0)))},Nq=m.forwardRef(((e,t)=>{let{style:r,children:n}=e;const o=m.useRef(null);return m.useImperativeHandle(t,(()=>({isExceed:()=>{const e=o.current;return e.scrollHeight>e.clientHeight},getHeight:()=>o.current.clientHeight}))),m.createElement(\"span\",{\"aria-hidden\":!0,ref:o,style:Object.assign({position:\"fixed\",display:\"block\",left:0,top:0,pointerEvents:\"none\",backgroundColor:\"rgba(255, 0, 0, 0.65)\"},r)},n)}));function Fq(e,t){let r=0;const n=[];for(let o=0;o<e.length;o+=1){if(r===t)return n;const i=e[o],a=r+(_q(i)?String(i).length:1);if(a>t){const e=t-r;return n.push(String(i).slice(0,e)),n}n.push(i),r=a}return e}const Dq=0,Bq=4,Lq={display:\"-webkit-box\",overflow:\"hidden\",WebkitBoxOrient:\"vertical\"};function zq(e){const{enableMeasure:t,width:r,text:n,children:o,rows:i,expanded:a,miscDeps:s,onEllipsis:l}=e,c=m.useMemo((()=>sd(n)),[n]),u=m.useMemo((()=>(e=>e.reduce(((e,t)=>e+(_q(t)?String(t).length:1)),0))(c)),[n]),d=m.useMemo((()=>o(c,!1)),[n]),[f,h]=m.useState(null),p=m.useRef(null),g=m.useRef(null),v=m.useRef(null),b=m.useRef(null),y=m.useRef(null),[w,x]=m.useState(!1),[S,C]=m.useState(Dq),[k,E]=m.useState(0),[O,A]=m.useState(null);Pi((()=>{C(t&&r&&u?1:Dq)}),[r,n,i,t,c]),Pi((()=>{var e,t,r,n;if(1===S){C(2);const e=g.current&&getComputedStyle(g.current).whiteSpace;A(e)}else if(2===S){const o=!!(null===(e=v.current)||void 0===e?void 0:e.isExceed());C(o?3:Bq),h(o?[0,u]:null),x(o);const a=(null===(t=v.current)||void 0===t?void 0:t.getHeight())||0,s=1===i?0:(null===(r=b.current)||void 0===r?void 0:r.getHeight())||0,c=(null===(n=y.current)||void 0===n?void 0:n.getHeight())||0,d=Math.max(a,s+c);E(d+1),l(o)}}),[S]);const T=f?Math.ceil((f[0]+f[1])/2):0;Pi((()=>{var e;const[t,r]=f||[0,0];if(t!==r){const n=((null===(e=p.current)||void 0===e?void 0:e.getHeight())||0)>k;let o=T;r-t===1&&(o=n?t:r),h(n?[t,o]:[o,r])}}),[f,T]);const j=m.useMemo((()=>{if(!t)return o(c,!1);if(3!==S||!f||f[0]!==f[1]){const e=o(c,!1);return[Bq,Dq].includes(S)?e:m.createElement(\"span\",{style:Object.assign(Object.assign({},Lq),{WebkitLineClamp:i})},e)}return o(a?c:Fq(c,f[0]),w)}),[a,S,f,c].concat(Vo(s))),P={width:r,margin:0,padding:0,whiteSpace:\"nowrap\"===O?\"normal\":\"inherit\"};return m.createElement(m.Fragment,null,j,2===S&&m.createElement(m.Fragment,null,m.createElement(Nq,{style:Object.assign(Object.assign(Object.assign({},P),Lq),{WebkitLineClamp:i}),ref:v},d),m.createElement(Nq,{style:Object.assign(Object.assign(Object.assign({},P),Lq),{WebkitLineClamp:i-1}),ref:b},d),m.createElement(Nq,{style:Object.assign(Object.assign(Object.assign({},P),Lq),{WebkitLineClamp:1}),ref:y},o([],!0))),3===S&&f&&f[0]!==f[1]&&m.createElement(Nq,{style:Object.assign(Object.assign({},P),{top:400}),ref:p},o(Fq(c,T),!0)),1===S&&m.createElement(\"span\",{style:{whiteSpace:\"inherit\"},ref:g}))}const Hq=e=>{let{enableEllipsis:t,isEllipsis:r,children:n,tooltipProps:o}=e;return(null==o?void 0:o.title)&&t?m.createElement(im,Object.assign({open:!!r&&void 0},o),n):n};const Uq=m.forwardRef(((e,t)=>{var r;const{prefixCls:n,className:o,style:i,type:a,disabled:s,children:l,ellipsis:c,editable:u,copyable:d,component:f,title:h}=e,p=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"prefixCls\",\"className\",\"style\",\"type\",\"disabled\",\"children\",\"ellipsis\",\"editable\",\"copyable\",\"component\",\"title\"]),{getPrefixCls:g,direction:v}=m.useContext(Xo),[b]=Gv(\"Text\"),y=m.useRef(null),w=m.useRef(null),x=g(\"typography\",n),S=kf(p,[\"mark\",\"code\",\"delete\",\"underline\",\"strong\",\"keyboard\",\"italic\"]),[C,k]=Eq(u),[E,O]=Ks(!1,{value:k.editing}),{triggerType:A=[\"icon\"]}=k,T=e=>{var t;e&&(null===(t=k.onStart)||void 0===t||t.call(k)),O(e)},j=(e=>{const t=(0,m.useRef)(void 0);return(0,m.useEffect)((()=>{t.current=e})),t.current})(E);Pi((()=>{var e;!E&&j&&(null===(e=w.current)||void 0===e||e.focus())}),[E]);const P=e=>{null==e||e.preventDefault(),T(!0)},[M,R]=Eq(d),{copied:_,copyLoading:I,onClick:N}=kq({copyConfig:R,children:l}),[F,D]=m.useState(!1),[B,L]=m.useState(!1),[z,H]=m.useState(!1),[U,V]=m.useState(!1),[W,G]=m.useState(!0),[q,K]=Eq(c,{expandable:!1,symbol:e=>e?null==b?void 0:b.collapse:null==b?void 0:b.expand}),[X,Y]=Ks(K.defaultExpanded||!1,{value:K.expanded}),$=q&&(!X||\"collapsible\"===K.expandable),{rows:Z=1}=K,Q=m.useMemo((()=>$&&(void 0!==K.suffix||K.onEllipsis||K.expandable||C||M)),[$,K,C,M]);Pi((()=>{q&&!Q&&(D(uq(\"webkitLineClamp\")),L(uq(\"textOverflow\")))}),[Q,q]);const[J,ee]=m.useState($),te=m.useMemo((()=>!Q&&(1===Z?B:F)),[Q,B,F]);Pi((()=>{ee(te&&$)}),[te,$]);const re=$&&(J?U:z),ne=$&&1===Z&&J,oe=$&&Z>1&&J,[ie,ae]=m.useState(0),se=e=>{var t;H(e),z!==e&&(null===(t=K.onEllipsis)||void 0===t||t.call(K,e))};m.useEffect((()=>{const e=y.current;if(q&&J&&e){const t=function(e){const t=document.createElement(\"em\");e.appendChild(t);const r=e.getBoundingClientRect(),n=t.getBoundingClientRect();return e.removeChild(t),r.left>n.left||n.right>r.right||r.top>n.top||n.bottom>r.bottom}(e);U!==t&&V(t)}}),[q,J,l,oe,W,ie]),m.useEffect((()=>{const e=y.current;if(\"undefined\"==typeof IntersectionObserver||!e||!J||!$)return;const t=new IntersectionObserver((()=>{G(!!e.offsetParent)}));return t.observe(e),()=>{t.disconnect()}}),[J,$]);const le=((e,t,r)=>(0,m.useMemo)((()=>!0===e?{title:null!=t?t:r}:(0,m.isValidElement)(e)?{title:e}:\"object\"==typeof e?Object.assign({title:null!=t?t:r},e):{title:e}),[e,t,r]))(K.tooltip,k.text,l),ce=m.useMemo((()=>{if(q&&!J)return[k.text,l,h,le.title].find(_q)}),[q,J,h,le.title,re]);if(E)return m.createElement(xq,{value:null!==(r=k.text)&&void 0!==r?r:\"string\"==typeof l?l:\"\",onSave:e=>{var t;null===(t=k.onChange)||void 0===t||t.call(k,e),T(!1)},onCancel:()=>{var e;null===(e=k.onCancel)||void 0===e||e.call(k),T(!1)},onEnd:k.onEnd,prefixCls:x,className:o,style:i,direction:v,component:f,maxLength:k.maxLength,autoSize:k.autoSize,enterIcon:k.enterIcon});const ue=()=>{const{expandable:e,symbol:t}=K;return e?m.createElement(\"button\",{type:\"button\",key:\"expand\",className:`${x}-${X?\"collapse\":\"expand\"}`,onClick:e=>((e,t)=>{var r;Y(t.expanded),null===(r=K.onExpand)||void 0===r||r.call(K,e,t)})(e,{expanded:!X}),\"aria-label\":X?b.collapse:null==b?void 0:b.expand},\"function\"==typeof t?t(X):t):null},de=()=>{if(!C)return;const{icon:e,tooltip:t,tabIndex:r}=k,n=sd(t)[0]||(null==b?void 0:b.edit),o=\"string\"==typeof n?n:\"\";return A.includes(\"icon\")?m.createElement(im,{key:\"edit\",title:!1===t?\"\":n},m.createElement(\"button\",{type:\"button\",ref:w,className:`${x}-edit`,onClick:P,\"aria-label\":o,tabIndex:r},e||m.createElement(lq,{role:\"button\"}))):null},fe=e=>[e&&ue(),de(),M?m.createElement(Iq,Object.assign({key:\"copy\"},R,{prefixCls:x,copied:_,locale:b,onCopy:N,loading:I,iconOnly:null==l})):null];return m.createElement(Hh,{onResize:e=>{let{offsetWidth:t}=e;ae(t)},disabled:!$},(r=>m.createElement(Hq,{tooltipProps:le,enableEllipsis:$,isEllipsis:re},m.createElement(Aq,Object.assign({className:ze()({[`${x}-${a}`]:a,[`${x}-disabled`]:s,[`${x}-ellipsis`]:q,[`${x}-ellipsis-single-line`]:ne,[`${x}-ellipsis-multiple-line`]:oe},o),prefixCls:n,style:Object.assign(Object.assign({},i),{WebkitLineClamp:oe?Z:void 0}),component:f,ref:Cn(r,y,t),direction:v,onClick:A.includes(\"text\")?P:void 0,\"aria-label\":null==ce?void 0:ce.toString(),title:h},S),m.createElement(zq,{enableMeasure:$&&!J,text:l,rows:Z,width:ie,onEllipsis:se,expanded:X,miscDeps:[_,X,I,C,M,b]},((t,r)=>function(e,t){let{mark:r,code:n,underline:o,delete:i,strong:a,keyboard:s,italic:l}=e,c=t;function u(e,t){t&&(c=m.createElement(e,{},c))}return u(\"strong\",a),u(\"u\",o),u(\"del\",i),u(\"code\",n),u(\"mark\",r),u(\"kbd\",s),u(\"i\",l),c}(e,m.createElement(m.Fragment,null,t.length>0&&r&&!X&&ce?m.createElement(\"span\",{key:\"show-content\",\"aria-hidden\":!0},t):t,(e=>[e&&!X&&m.createElement(\"span\",{\"aria-hidden\":!0,key:\"ellipsis\"},\"...\"),K.suffix,fe(e)])(r)))))))))})),Vq=Uq;const Wq=m.forwardRef(((e,t)=>{var{ellipsis:r,rel:n}=e,o=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"ellipsis\",\"rel\"]);const i=Object.assign(Object.assign({},o),{rel:void 0===n&&\"_blank\"===o.target?\"noopener noreferrer\":n});return delete i.navigate,m.createElement(Vq,Object.assign({},i,{ref:t,ellipsis:!!r,component:\"a\"}))})),Gq=m.forwardRef(((e,t)=>m.createElement(Vq,Object.assign({ref:t},e,{component:\"div\"}))));const qq=(e,t)=>{var{ellipsis:r}=e,n=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"ellipsis\"]);const o=m.useMemo((()=>r&&\"object\"==typeof r?kf(r,[\"expandable\",\"rows\"]):r),[r]);return m.createElement(Vq,Object.assign({ref:t},n,{ellipsis:o,component:\"span\"}))},Kq=m.forwardRef(qq);const Xq=[1,2,3,4,5],Yq=m.forwardRef(((e,t)=>{const{level:r=1}=e,n=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"level\"]),o=Xq.includes(r)?`h${r}`:\"h1\";return m.createElement(Vq,Object.assign({ref:t},n,{component:o}))})),$q=Aq;$q.Text=Kq,$q.Link=Wq,$q.Title=Yq,$q.Paragraph=Gq;const Zq=$q,Qq={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M885.9 533.7c16.8-22.2 26.1-49.4 26.1-77.7 0-44.9-25.1-87.4-65.5-111.1a67.67 67.67 0 00-34.3-9.3H572.4l6-122.9c1.4-29.7-9.1-57.9-29.5-79.4A106.62 106.62 0 00471 99.9c-52 0-98 35-111.8 85.1l-85.9 311H144c-17.7 0-32 14.3-32 32v364c0 17.7 14.3 32 32 32h601.3c9.2 0 18.2-1.8 26.5-5.4 47.6-20.3 78.3-66.8 78.3-118.4 0-12.6-1.8-25-5.4-37 16.8-22.2 26.1-49.4 26.1-77.7 0-12.6-1.8-25-5.4-37 16.8-22.2 26.1-49.4 26.1-77.7-.2-12.6-2-25.1-5.6-37.1zM184 852V568h81v284h-81zm636.4-353l-21.9 19 13.9 25.4a56.2 56.2 0 016.9 27.3c0 16.5-7.2 32.2-19.6 43l-21.9 19 13.9 25.4a56.2 56.2 0 016.9 27.3c0 16.5-7.2 32.2-19.6 43l-21.9 19 13.9 25.4a56.2 56.2 0 016.9 27.3c0 22.4-13.2 42.6-33.6 51.8H329V564.8l99.5-360.5a44.1 44.1 0 0142.2-32.3c7.6 0 15.1 2.2 21.1 6.7 9.9 7.4 15.2 18.6 14.6 30.5l-9.6 198.4h314.4C829 418.5 840 436.9 840 456c0 16.5-7.2 32.1-19.6 43z\"}}]},name:\"like\",theme:\"outlined\"};var Jq=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:Qq}))};const eK=m.forwardRef(Jq),tK={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M885.9 490.3c3.6-12 5.4-24.4 5.4-37 0-28.3-9.3-55.5-26.1-77.7 3.6-12 5.4-24.4 5.4-37 0-28.3-9.3-55.5-26.1-77.7 3.6-12 5.4-24.4 5.4-37 0-51.6-30.7-98.1-78.3-118.4a66.1 66.1 0 00-26.5-5.4H144c-17.7 0-32 14.3-32 32v364c0 17.7 14.3 32 32 32h129.3l85.8 310.8C372.9 889 418.9 924 470.9 924c29.7 0 57.4-11.8 77.9-33.4 20.5-21.5 31-49.7 29.5-79.4l-6-122.9h239.9c12.1 0 23.9-3.2 34.3-9.3 40.4-23.5 65.5-66.1 65.5-111 0-28.3-9.3-55.5-26.1-77.7zM184 456V172h81v284h-81zm627.2 160.4H496.8l9.6 198.4c.6 11.9-4.7 23.1-14.6 30.5-6.1 4.5-13.6 6.8-21.1 6.7a44.28 44.28 0 01-42.2-32.3L329 459.2V172h415.4a56.85 56.85 0 0133.6 51.8c0 9.7-2.3 18.9-6.9 27.3l-13.9 25.4 21.9 19a56.76 56.76 0 0119.6 43c0 9.7-2.3 18.9-6.9 27.3l-13.9 25.4 21.9 19a56.76 56.76 0 0119.6 43c0 9.7-2.3 18.9-6.9 27.3l-14 25.5 21.9 19a56.76 56.76 0 0119.6 43c0 19.1-11 37.5-28.8 48.4z\"}}]},name:\"dislike\",theme:\"outlined\"};var rK=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:tK}))};const nK=m.forwardRef(rK),oK={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M696 480H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z\"}},{tag:\"path\",attrs:{d:\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z\"}}]},name:\"minus-circle\",theme:\"outlined\"};var iK=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:oK}))};const aK=m.forwardRef(iK),sK={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M699 353h-46.9c-10.2 0-19.9 4.9-25.9 13.3L469 584.3l-71.2-98.8c-6-8.3-15.6-13.3-25.9-13.3H325c-6.5 0-10.3 7.4-6.5 12.7l124.6 172.8a31.8 31.8 0 0051.7 0l210.6-292c3.9-5.3.1-12.7-6.4-12.7z\"}},{tag:\"path\",attrs:{d:\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z\"}}]},name:\"check-circle\",theme:\"outlined\"};var lK=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:sK}))};const cK=m.forwardRef(lK),uK={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372 0-89 31.3-170.8 83.5-234.8l523.3 523.3C682.8 852.7 601 884 512 884zm288.5-137.2L277.2 223.5C341.2 171.3 423 140 512 140c205.4 0 372 166.6 372 372 0 89-31.3 170.8-83.5 234.8z\"}}]},name:\"stop\",theme:\"outlined\"};var dK=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:uK}))};const fK=m.forwardRef(dK),hK={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M328 544h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z\"}},{tag:\"path\",attrs:{d:\"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z\"}}]},name:\"minus-square\",theme:\"outlined\"};var pK=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:hK}))};const mK=m.forwardRef(pK),gK={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M456 231a56 56 0 10112 0 56 56 0 10-112 0zm0 280a56 56 0 10112 0 56 56 0 10-112 0zm0 280a56 56 0 10112 0 56 56 0 10-112 0z\"}}]},name:\"more\",theme:\"outlined\"};var vK=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:gK}))};const bK=m.forwardRef(vK),yK={icon:{tag:\"svg\",attrs:{viewBox:\"64 64 896 896\",focusable:\"false\"},children:[{tag:\"path\",attrs:{d:\"M880.1 154H143.9c-24.5 0-39.8 26.7-27.5 48L349 597.4V838c0 17.7 14.2 32 31.8 32h262.4c17.6 0 31.8-14.3 31.8-32V597.4L907.7 202c12.2-21.3-3.1-48-27.6-48zM603.4 798H420.6V642h182.9v156zm9.6-236.6l-9.5 16.6h-183l-9.5-16.6L212.7 226h598.6L613 561.4z\"}}]},name:\"filter\",theme:\"outlined\"};var wK=function(e,t){return m.createElement(ur,Te({},e,{ref:t,icon:yK}))};const xK=m.forwardRef(wK);function SK(e){return SK=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},SK(e)}function CK(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function kK(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?CK(Object(r),!0).forEach((function(t){jK(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):CK(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function EK(e){return function(e){if(Array.isArray(e))return TK(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||AK(e)||function(){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 OK(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=r){var n,o,i,a,s=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return s}}(e,t)||AK(e,t)||function(){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 AK(e,t){if(e){if(\"string\"==typeof e)return TK(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?TK(e,t):void 0}}function TK(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function jK(e,t,r){return(t=function(e){var t=function(e){if(\"object\"!=SK(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=SK(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==SK(t)?t:t+\"\"}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var PK=Zq.Text,MK={Circle:(0,Mn.jsx)(lo,{}),FreeText:(0,Mn.jsx)(ao,{}),Ink:(0,Mn.jsx)(co,{}),Highlight:(0,Mn.jsx)(no,{}),Underline:(0,Mn.jsx)(io,{}),Squiggly:(0,Mn.jsx)(uo,{}),StrikeOut:(0,Mn.jsx)(oo,{}),Stamp:(0,Mn.jsx)(ho,{}),Line:(0,Mn.jsx)(co,{}),Square:(0,Mn.jsx)(so,{}),Polygon:(0,Mn.jsx)(co,{}),PolyLine:(0,Mn.jsx)(xo,{}),Caret:(0,Mn.jsx)(fo,{}),Link:(0,Mn.jsx)(co,{}),Text:(0,Mn.jsx)(bo,{}),FileAttachment:(0,Mn.jsx)(vo,{}),Popup:(0,Mn.jsx)(co,{}),Widget:(0,Mn.jsx)(co,{}),Note:(0,Mn.jsx)(bo,{}),Arrow:(0,Mn.jsx)(wo,{})},RK=jK(jK(jK(jK(jK(jK({},jo.Accepted,{labelKey:\"comment.status.accepted\",icon:(0,Mn.jsx)(eK,{})}),jo.Rejected,{labelKey:\"comment.status.rejected\",icon:(0,Mn.jsx)(nK,{})}),jo.Cancelled,{labelKey:\"comment.status.cancelled\",icon:(0,Mn.jsx)(aK,{})}),jo.Completed,{labelKey:\"comment.status.completed\",icon:(0,Mn.jsx)(cK,{})}),jo.Closed,{labelKey:\"comment.status.closed\",icon:(0,Mn.jsx)(fK,{})}),jo.None,{labelKey:\"comment.status.none\",icon:(0,Mn.jsx)(mK,{})}),_K=function(e){var t,r=(t=e.subtype,MK[t]||null);return r?(0,Mn.jsx)(\"span\",{className:\"annotation-icon\",children:r}):null},IK=oB.TextArea,NK=(0,m.forwardRef)((function(e,t){var r=OK((0,m.useState)([]),2),n=r[0],o=r[1],i=OK((0,m.useState)(null),2),a=i[0],s=i[1],l=OK((0,m.useState)(null),2),c=l[0],u=l[1],d=OK((0,m.useState)(null),2),f=d[0],h=d[1],p=OK((0,m.useState)(null),2),g=p[0],v=p[1],b=OK((0,m.useState)([]),2),y=b[0],w=b[1],x=OK((0,m.useState)([]),2),S=x[0],C=x[1],k=ke().t,E=(0,m.useRef)({});(0,m.useImperativeHandle)(t,(function(){return{addAnnotation:O,delAnnotation:A,selectedAnnotation:T,updateAnnotation:j}}));var O=function(e){o((function(t){return[].concat(EK(t),[e])})),s(null)},A=function(e){o((function(t){return t.filter((function(t){return t.id!==e}))})),(null==a?void 0:a.id)===e&&s(null),(null==c?void 0:c.id)===e&&u(null),h(null)},T=function(t,r){if(s(t),r){var n=t.title===e.userName,o=\"\"===t.contentsObj.text;n&&o?v(t):u(t);var i=E.current[t.id];i&&i.scrollIntoView({behavior:\"smooth\",block:\"center\"})}},j=function(e){o((function(t){return t.map((function(t){return t.id===e.id?kK(kK({},t),{},{konvaClientRect:e.konvaClientRect,date:XN(Date.now())}):t}))})),v(null)},P=(0,m.useMemo)((function(){var e=new Map;return n.forEach((function(t){e.set(t.title,(e.get(t.title)||0)+1)})),Array.from(e.entries())}),[n]),M=(0,m.useMemo)((function(){var e=new Map;return n.forEach((function(t){e.set(t.subtype,(e.get(t.subtype)||0)+1)})),Array.from(e.entries())}),[n]);(0,m.useEffect)((function(){w(P.map((function(e){return OK(e,1)[0]})))}),[P]),(0,m.useEffect)((function(){C(M.map((function(e){return OK(e,1)[0]})))}),[M]);var R=(0,m.useMemo)((function(){return 0===y.length||0===S.length?[]:n.filter((function(e){return y.includes(e.title)&&S.includes(e.subtype)}))}),[n,y,S]),_=(0,m.useMemo)((function(){return R.reduce((function(e,t){return e[t.pageNumber]||(e[t.pageNumber]=[]),e[t.pageNumber].push(t),e}),{})}),[R]),I=(0,Mn.jsxs)(\"div\",{className:\"CustomComment_filterContent\",children:[(0,Mn.jsx)(\"div\",{className:\"title\",children:k(\"normal.author\")}),(0,Mn.jsx)(\"ul\",{children:P.map((function(e){var t=OK(e,2),r=t[0],n=t[1];return(0,Mn.jsx)(\"li\",{children:(0,Mn.jsx)(gB,{checked:y.includes(r),onChange:function(){return e=r,void w((function(t){return t.includes(e)?t.filter((function(t){return t!==e})):[].concat(EK(t),[e])}));var e},children:(0,Mn.jsxs)(SS,{children:[(0,Mn.jsx)(PK,{ellipsis:!0,style:{maxWidth:200},children:r}),(0,Mn.jsxs)(PK,{type:\"secondary\",children:[\"(\",n,\")\"]})]})})},r)}))}),(0,Mn.jsx)(\"div\",{className:\"title\",children:k(\"normal.type\")}),(0,Mn.jsx)(\"ul\",{children:M.map((function(e){var t=OK(e,2),r=t[0],n=t[1];return(0,Mn.jsx)(\"li\",{children:(0,Mn.jsx)(gB,{checked:S.includes(r),onChange:function(){return function(e){C((function(t){return t.includes(e)?t.filter((function(t){return t!==e})):[].concat(EK(t),[e])}))}(r)},children:(0,Mn.jsxs)(SS,{children:[(0,Mn.jsx)(_K,{subtype:r}),(0,Mn.jsxs)(PK,{type:\"secondary\",children:[\"(\",n,\")\"]})]})})},r)}))}),(0,Mn.jsxs)(\"div\",{style:{display:\"flex\",justifyContent:\"space-between\"},children:[(0,Mn.jsx)(AC,{type:\"link\",onClick:function(){w(P.map((function(e){return OK(e,1)[0]}))),C(M.map((function(e){return OK(e,1)[0]})))},children:k(\"normal.selectAll\")}),(0,Mn.jsx)(AC,{type:\"link\",onClick:function(){w([]),C([])},children:k(\"normal.clear\")})]})]}),N=function(e){var t,r,n,o=EK(e.comments||[]).reverse().find((function(e){return void 0!==e.status&&null!==e.status})),i=null!==(t=null==o?void 0:o.status)&&void 0!==t?t:jo.None;return null!==(r=null===(n=RK[i])||void 0===n?void 0:n.icon)&&void 0!==r?r:RK[jo.None].icon},F=function(t,r,n){var i={id:UN(),title:e.userName,date:XN(Date.now()),content:r,status:n};o((function(r){return r.map((function(r){if(r.id===t.id){var n=kK(kK({},r),{},{comments:[].concat(EK(r.comments||[]),[i]),date:XN(Date.now())});return e.onUpdate(n),n}return r}))})),u(null)},D=(0,m.useCallback)((function(t){var r=\"\";if(g&&(null==a?void 0:a.id)===t.id){var n=function(){!function(t,r){t.contentsObj.text=r,e.onUpdate(t)}(t,r),v(null)};return(0,Mn.jsxs)(Mn.Fragment,{children:[(0,Mn.jsx)(IK,{defaultValue:t.contentsObj.text,autoFocus:!0,rows:4,style:{marginBottom:\"8px\",marginTop:\"8px\"},onBlur:function(){return v(null)},onChange:function(e){return r=e.target.value},onKeyDown:function(e){\"Enter\"!==e.key||e.shiftKey||(e.preventDefault(),n())}}),(0,Mn.jsx)(AC,{type:\"primary\",block:!0,onMouseDown:n,children:k(\"normal.confirm\")})]})}return(0,Mn.jsx)(Gq,{style:{margin:\"8px 0 8px 15px\"},ellipsis:{rows:3,expandable:!0,symbol:k(\"normal.more\")},children:t.contentsObj.text})}),[g,a]),B=(0,m.useCallback)((function(e){var t=\"\";if(c&&(null==a?void 0:a.id)===e.id){var r=function(){F(e,t),u(null)};return(0,Mn.jsxs)(Mn.Fragment,{children:[(0,Mn.jsx)(IK,{autoFocus:!0,rows:4,style:{marginBottom:\"8px\",marginTop:\"8px\"},onBlur:function(){return u(null)},onChange:function(e){return t=e.target.value},onKeyDown:function(e){\"Enter\"!==e.key||e.shiftKey||(e.preventDefault(),r())}}),(0,Mn.jsx)(AC,{type:\"primary\",block:!0,onMouseDown:r,children:k(\"normal.confirm\")})]})}return null}),[c,a]),L=(0,m.useCallback)((function(t,r){var n=\"\";if(f&&f.id===r.id){var o=function(){!function(t,r,n){r.date=XN(Date.now()),r.content=n,r.title=e.userName,e.onUpdate(t)}(t,r,n),h(null)};return(0,Mn.jsxs)(Mn.Fragment,{children:[(0,Mn.jsx)(IK,{defaultValue:f.content,autoFocus:!0,rows:4,style:{marginBottom:\"8px\"},onBlur:function(){return h(null)},onChange:function(e){return n=e.target.value},onKeyDown:function(e){\"Enter\"!==e.key||e.shiftKey||(e.preventDefault(),o())}}),(0,Mn.jsx)(AC,{type:\"primary\",block:!0,onMouseDown:o,children:k(\"normal.confirm\")})]})}return(0,Mn.jsx)(\"p\",{children:r.content})}),[c,f]),z=Object.entries(_).map((function(t){var r=OK(t,2),n=r[0],i=r[1],l=i.sort((function(e,t){return e.konvaClientRect.y-t.konvaClientRect.y}));return(0,Mn.jsxs)(\"div\",{className:\"group\",children:[(0,Mn.jsxs)(\"h3\",{children:[k(\"comment.page\",{value:n}),(0,Mn.jsx)(\"span\",{children:k(\"comment.total\",{value:i.length})})]}),l.map((function(t){var r,n={className:t.id===(null==a?void 0:a.id)?\"comment selected\":\"comment\",id:\"annotation-\".concat(t.id)};return(0,m.createElement)(\"div\",kK(kK({},n),{},{key:t.id,onClick:function(){return function(t){s(t),e.onSelected(t)}(t)},ref:function(e){return E.current[t.id]=e}}),(0,Mn.jsxs)(\"div\",{className:\"title\",children:[(0,Mn.jsx)(_K,{subtype:t.subtype}),(0,Mn.jsxs)(\"div\",{className:\"username\",children:[t.title,(0,Mn.jsx)(\"span\",{children:YN(t.date,!0)})]}),(0,Mn.jsxs)(\"span\",{className:\"tool\",children:[(0,Mn.jsx)(sU,{menu:{items:Object.entries(RK).map((function(e){var r=OK(e,2),n=r[0],o=r[1];return{key:n,label:k(o.labelKey),icon:o.icon,onClick:function(e){F(t,k(\"comment.statusText\",{value:k(o.labelKey)}),e.key),u(null)}}}))},trigger:[\"click\"],children:(0,Mn.jsx)(\"span\",{className:\"icon\",children:N(t)})}),(0,Mn.jsx)(sU,{menu:{items:[{label:k(\"normal.reply\"),key:\"0\",onClick:function(e){e.domEvent.stopPropagation(),u(t)}},{label:k(\"normal.edit\"),key:\"1\",onClick:function(e){e.domEvent.stopPropagation(),v(t)}},{label:k(\"normal.delete\"),key:\"3\",onClick:function(r){r.domEvent.stopPropagation(),function(t){o((function(e){return e.filter((function(e){return e.id!==t.id}))})),(null==a?void 0:a.id)===t.id&&s(null),(null==c?void 0:c.id)===t.id&&u(null),h(null),e.onDelete(t.id)}(t)}}]},trigger:[\"click\"],children:(0,Mn.jsx)(\"span\",{className:\"icon\",children:(0,Mn.jsx)(bK,{})})})]})]}),D(t),null===(r=t.comments)||void 0===r?void 0:r.map((function(r,n){return(0,Mn.jsxs)(\"div\",{className:\"reply\",children:[(0,Mn.jsxs)(\"div\",{className:\"title\",children:[(0,Mn.jsxs)(\"div\",{className:\"username\",children:[\" \",r.title,(0,Mn.jsx)(\"span\",{children:YN(r.date,!0)})]}),(0,Mn.jsx)(\"span\",{className:\"tool\",children:(0,Mn.jsx)(sU,{menu:{items:[{label:k(\"normal.edit\"),key:\"1\",onClick:function(e){e.domEvent.stopPropagation(),h(r)}},{label:k(\"normal.delete\"),key:\"2\",onClick:function(n){n.domEvent.stopPropagation(),function(t,r){var n=null;o((function(e){return e.map((function(e){if(e.id===t.id){var o=e.comments.filter((function(e){return e.id!==r.id}));return n=kK(kK({},e),{},{comments:o})}return e}))})),(null==f?void 0:f.id)===r.id&&h(null),n&&e.onUpdate(n)}(t,r)}}]},trigger:[\"click\"],children:(0,Mn.jsx)(\"span\",{className:\"icon\",children:(0,Mn.jsx)(bK,{})})})})]}),L(t,r)]},n)})),(0,Mn.jsxs)(\"div\",{className:\"reply-input\",children:[B(t),!c&&!f&&!g&&(null==a?void 0:a.id)===t.id&&(0,Mn.jsx)(AC,{style:{marginTop:\"8px\"},onClick:function(){return u(t)},type:\"primary\",block:!0,children:k(\"normal.reply\")})]}))}))]},n)}));return(0,Mn.jsxs)(\"div\",{className:\"CustomComment\",onScroll:function(){e.onScroll&&e.onScroll()},children:[(0,Mn.jsx)(\"div\",{className:\"filters\",children:(0,Mn.jsx)(hm,{content:I,trigger:\"click\",placement:\"bottomLeft\",children:(0,Mn.jsx)(AC,{size:\"small\",icon:(0,Mn.jsx)(xK,{})})})}),(0,Mn.jsx)(\"div\",{className:\"list\",children:z})]})}));function FK(e){return FK=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},FK(e)}function DK(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,BK(n.key),n)}}function BK(e){var t=function(e){if(\"object\"!=FK(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=FK(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==FK(t)?t:t+\"\"}var LK=function(){return function(e,t){return t&&DK(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}((function e(t,r,n){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.pdfDoc=t,this.page=r,this.annotation=n}),[{key:\"addAnnotationToPage\",value:function(e,t){var r=e.node.lookup(Dj.of(\"Annots\"));r?r.push(t):e.node.set(Dj.of(\"Annots\"),e.doc.context.obj([t]))}}])}();function zK(e){return zK=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},zK(e)}function HK(){HK=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==zK(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(zK(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function UK(e,t){var r=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if(\"string\"==typeof e)return VK(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?VK(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}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 i,a=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw i}}}}function VK(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function WK(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function GK(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,qK(n.key),n)}}function qK(e){var t=function(e){if(\"object\"!=zK(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=zK(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==zK(t)?t:t+\"\"}function KK(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(KK=function(){return!!e})()}function XK(e){return XK=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},XK(e)}function YK(e,t){return YK=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},YK(e,t)}var $K=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=XK(t),function(e,t){if(t&&(\"object\"==zK(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,KK()?Reflect.construct(t,r||[],XK(e).constructor):t.apply(e,r))}(this,t,arguments)}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&YK(e,t)}(t,e),function(e,t){return t&&GK(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"parse\",value:(r=HK().mark((function e(){var t,r,n,o,i,a,s,l,c,u,d,f,h;return HK().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=this.annotation,n=this.page,o=this.pdfDoc,i=ZN(r.konvaClientRect,n.getHeight()),a=o.context,s=a.obj({Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"Text\"),Rect:i,NM:IP.of(r.id),Contents:QN((null===(t=r.contentsObj)||void 0===t?void 0:t.text)||\"\"),Name:Dj.of(\"Comment\"),T:QN(r.title||le(\"normal.unknownUser\")),M:IP.of(r.date),C:HN(r.color),Open:!1}),l=a.register(s),this.addAnnotationToPage(n,l),c=UK(r.comments||[]);try{for(c.s();!(u=c.n()).done;)d=u.value,f=a.obj({Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"Text\"),Rect:i,Contents:QN(d.content),T:QN(d.title||le(\"normal.unknownUser\")),M:IP.of(d.date),C:HN(r.color),IRT:l,RT:Dj.of(\"R\"),NM:IP.of(d.id),Open:!1}),h=a.register(f),this.addAnnotationToPage(n,h)}catch(e){c.e(e)}finally{c.f()}case 8:case\"end\":return e.stop()}}),e,this)})),n=function(){var e=this,t=arguments;return new Promise((function(n,o){var i=r.apply(e,t);function a(e){WK(i,n,o,a,s,\"next\",e)}function s(e){WK(i,n,o,a,s,\"throw\",e)}a(void 0)}))},function(){return n.apply(this,arguments)})}]);var r,n}(LK),ZK=o(4974),QK=o.n(ZK),JK=o(4213);function eX(e){return eX=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},eX(e)}function tX(){tX=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==eX(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(eX(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function rX(e,t){var r=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if(\"string\"==typeof e)return nX(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?nX(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}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 i,a=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw i}}}}function nX(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function oX(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function iX(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,aX(n.key),n)}}function aX(e){var t=function(e){if(\"object\"!=eX(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=eX(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==eX(t)?t:t+\"\"}function sX(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(sX=function(){return!!e})()}function lX(e){return lX=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},lX(e)}function cX(e,t){return cX=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},cX(e,t)}var uX=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=lX(t),function(e,t){if(t&&(\"object\"==eX(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,sX()?Reflect.construct(t,r||[],lX(e).constructor):t.apply(e,r))}(this,t,arguments)}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&cX(e,t)}(t,e),function(e,t){return t&&iX(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"parse\",value:(r=tX().mark((function e(){var t,r,n,o,i,a,s,l,c,u,d,f,h,p,m,g,v,b,y,w,x,S,C,k,E,O,A;return tX().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t=this.annotation,r=this.page,n=this.pdfDoc,o=n.context,i=r.getHeight(),a=JSON.parse(t.konvaString),s=a.children.filter((function(e){return\"Rect\"===e.className})),l=[],c=rX(s);try{for(c.s();!(u=c.n()).done;)d=u.value,f=d.attrs,h=f.x,p=f.y,m=f.width,g=f.height,v=h,b=i-p,y=h+m,w=i-(p+g),l.push(v,b,y,b,v,w,y,w)}catch(e){c.e(e)}finally{c.f()}x=o.obj({Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"Highlight\"),Rect:ZN(t.konvaClientRect,i),QuadPoints:l,C:HN(t.color),T:QN(t.title||le(\"normal.unknownUser\")),Contents:QN(\"\"),M:IP.of(t.date),NM:IP.of(t.id)}),S=o.register(x),this.addAnnotationToPage(r,S),C=rX(t.comments||[]);try{for(C.s();!(k=C.n()).done;)E=k.value,O=o.obj({Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"Text\"),Rect:ZN(t.konvaClientRect,i),Contents:QN(E.content),T:QN(E.title||le(\"normal.unknownUser\")),M:IP.of(E.date),C:HN(t.color),IRT:S,RT:Dj.of(\"R\"),NM:IP.of(E.id),Open:!1}),A=o.register(O),this.addAnnotationToPage(r,A)}catch(e){C.e(e)}finally{C.f()}case 13:case\"end\":return e.stop()}}),e,this)})),n=function(){var e=this,t=arguments;return new Promise((function(n,o){var i=r.apply(e,t);function a(e){oX(i,n,o,a,s,\"next\",e)}function s(e){oX(i,n,o,a,s,\"throw\",e)}a(void 0)}))},function(){return n.apply(this,arguments)})}]);var r,n}(LK);function dX(e){return dX=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},dX(e)}function fX(){fX=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==dX(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(dX(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function hX(e,t){var r=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if(\"string\"==typeof e)return pX(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?pX(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}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 i,a=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw i}}}}function pX(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function mX(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function gX(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,vX(n.key),n)}}function vX(e){var t=function(e){if(\"object\"!=dX(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=dX(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==dX(t)?t:t+\"\"}function bX(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(bX=function(){return!!e})()}function yX(e){return yX=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},yX(e)}function wX(e,t){return wX=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},wX(e,t)}var xX=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=yX(t),function(e,t){if(t&&(\"object\"==dX(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,bX()?Reflect.construct(t,r||[],yX(e).constructor):t.apply(e,r))}(this,t,arguments)}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&wX(e,t)}(t,e),function(e,t){return t&&gX(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"parse\",value:(r=fX().mark((function e(){var t,r,n,o,i,a,s,l,c,u,d,f,h,p,m,g,v,b,y,w,x,S,C,k,E,O,A,T;return fX().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=this.annotation,n=this.page,o=this.pdfDoc,i=o.context,a=n.getHeight(),s=JSON.parse(r.konvaString),l=s.children.filter((function(e){return\"Rect\"===e.className})),c=[],u=hX(l);try{for(u.s();!(d=u.n()).done;)f=d.value,h=f.attrs,p=h.x,m=h.y,g=h.width,v=h.height,b=p,y=a-m,w=p+g,x=a-(m+v),c.push(b,y,w,y,b,x,w,x)}catch(e){u.e(e)}finally{u.f()}S=i.obj({Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"Underline\"),Rect:ZN(r.konvaClientRect,a),QuadPoints:c,C:HN(r.color),T:QN(r.title||le(\"normal.unknownUser\")),Contents:QN((null===(t=r.contentsObj)||void 0===t?void 0:t.text)||\"\"),M:IP.of(r.date),NM:IP.of(r.id)}),C=i.register(S),this.addAnnotationToPage(n,C),k=hX(r.comments||[]);try{for(k.s();!(E=k.n()).done;)O=E.value,A=i.obj({Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"Text\"),Rect:ZN(r.konvaClientRect,a),Contents:QN(O.content),T:QN(O.title||le(\"normal.unknownUser\")),M:IP.of(O.date),C:HN(r.color),IRT:C,RT:Dj.of(\"R\"),NM:IP.of(O.id),Open:!1}),T=i.register(A),this.addAnnotationToPage(n,T)}catch(e){k.e(e)}finally{k.f()}case 13:case\"end\":return e.stop()}}),e,this)})),n=function(){var e=this,t=arguments;return new Promise((function(n,o){var i=r.apply(e,t);function a(e){mX(i,n,o,a,s,\"next\",e)}function s(e){mX(i,n,o,a,s,\"throw\",e)}a(void 0)}))},function(){return n.apply(this,arguments)})}]);var r,n}(LK);function SX(e){return SX=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},SX(e)}function CX(){CX=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==SX(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(SX(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function kX(e,t){var r=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if(\"string\"==typeof e)return EX(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?EX(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}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 i,a=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw i}}}}function EX(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function OX(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function AX(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,TX(n.key),n)}}function TX(e){var t=function(e){if(\"object\"!=SX(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=SX(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==SX(t)?t:t+\"\"}function jX(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(jX=function(){return!!e})()}function PX(e){return PX=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},PX(e)}function MX(e,t){return MX=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},MX(e,t)}var RX=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=PX(t),function(e,t){if(t&&(\"object\"==SX(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,jX()?Reflect.construct(t,r||[],PX(e).constructor):t.apply(e,r))}(this,t,arguments)}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&MX(e,t)}(t,e),function(e,t){return t&&AX(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"parse\",value:(r=CX().mark((function e(){var t,r,n,o,i,a,s,l,c,u,d,f,h,p,m,g,v,b,y,w,x,S,C,k,E,O,A,T;return CX().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=this.annotation,n=this.page,o=this.pdfDoc,i=o.context,a=n.getHeight(),s=JSON.parse(r.konvaString),l=s.children.filter((function(e){return\"Rect\"===e.className})),c=[],u=kX(l);try{for(u.s();!(d=u.n()).done;)f=d.value,h=f.attrs,p=h.x,m=h.y,g=h.width,v=h.height,b=p,y=a-m,w=p+g,x=a-(m+v),c.push(b,y,w,y,b,x,w,x)}catch(e){u.e(e)}finally{u.f()}S=i.obj({Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"StrikeOut\"),Rect:ZN(r.konvaClientRect,a),QuadPoints:c,C:HN(r.color),T:QN(r.title||le(\"normal.unknownUser\")),Contents:QN((null===(t=r.contentsObj)||void 0===t?void 0:t.text)||\"\"),M:IP.of(r.date),NM:IP.of(r.id)}),C=i.register(S),this.addAnnotationToPage(n,C),k=kX(r.comments||[]);try{for(k.s();!(E=k.n()).done;)O=E.value,A=i.obj({Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"Text\"),Rect:ZN(r.konvaClientRect,a),Contents:QN(O.content),T:QN(O.title||le(\"normal.unknownUser\")),M:IP.of(O.date),C:HN(r.color),IRT:C,RT:Dj.of(\"R\"),NM:IP.of(O.id),Open:!1}),T=i.register(A),this.addAnnotationToPage(n,T)}catch(e){k.e(e)}finally{k.f()}case 13:case\"end\":return e.stop()}}),e,this)})),n=function(){var e=this,t=arguments;return new Promise((function(n,o){var i=r.apply(e,t);function a(e){OX(i,n,o,a,s,\"next\",e)}function s(e){OX(i,n,o,a,s,\"throw\",e)}a(void 0)}))},function(){return n.apply(this,arguments)})}]);var r,n}(LK);function _X(e){return _X=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},_X(e)}function IX(){IX=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==_X(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(_X(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function NX(e,t){var r=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if(\"string\"==typeof e)return FX(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?FX(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}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 i,a=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw i}}}}function FX(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function DX(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function BX(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,LX(n.key),n)}}function LX(e){var t=function(e){if(\"object\"!=_X(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=_X(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==_X(t)?t:t+\"\"}function zX(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(zX=function(){return!!e})()}function HX(e){return HX=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},HX(e)}function UX(e,t){return UX=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},UX(e,t)}var VX=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=HX(t),function(e,t){if(t&&(\"object\"==_X(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,zX()?Reflect.construct(t,r||[],HX(e).constructor):t.apply(e,r))}(this,t,arguments)}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&UX(e,t)}(t,e),function(e,t){return t&&BX(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"parse\",value:(r=IX().mark((function e(){var t,r,n,o,i,a,s,l,c,u,d,f,h;return IX().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=this.annotation,n=this.page,o=this.pdfDoc,i=o.context,a=n.getHeight(),s=i.obj({Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"Square\"),Rect:ZN(r.konvaClientRect,a),C:HN(r.color),T:QN(r.title||le(\"normal.unknownUser\")),Contents:QN((null===(t=r.contentsObj)||void 0===t?void 0:t.text)||\"\"),M:IP.of(r.date),NM:IP.of(r.id),Border:[0,0,1]}),l=i.register(s),this.addAnnotationToPage(n,l),c=NX(r.comments||[]);try{for(c.s();!(u=c.n()).done;)d=u.value,f=i.obj({Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"Text\"),Rect:ZN(r.konvaClientRect,a),Contents:QN(d.content),T:QN(d.title||le(\"normal.unknownUser\")),M:IP.of(d.date),C:HN(r.color),IRT:l,RT:Dj.of(\"R\"),NM:IP.of(d.id),Open:!1}),h=i.register(f),this.addAnnotationToPage(n,h)}catch(e){c.e(e)}finally{c.f()}case 8:case\"end\":return e.stop()}}),e,this)})),n=function(){var e=this,t=arguments;return new Promise((function(n,o){var i=r.apply(e,t);function a(e){DX(i,n,o,a,s,\"next\",e)}function s(e){DX(i,n,o,a,s,\"throw\",e)}a(void 0)}))},function(){return n.apply(this,arguments)})}]);var r,n}(LK);function WX(e){return WX=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},WX(e)}function GX(){GX=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==WX(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(WX(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function qX(e,t){var r=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if(\"string\"==typeof e)return KX(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?KX(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}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 i,a=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw i}}}}function KX(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function XX(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function YX(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,$X(n.key),n)}}function $X(e){var t=function(e){if(\"object\"!=WX(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=WX(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==WX(t)?t:t+\"\"}function ZX(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(ZX=function(){return!!e})()}function QX(e){return QX=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},QX(e)}function JX(e,t){return JX=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},JX(e,t)}var eY=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=QX(t),function(e,t){if(t&&(\"object\"==WX(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,ZX()?Reflect.construct(t,r||[],QX(e).constructor):t.apply(e,r))}(this,t,arguments)}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&JX(e,t)}(t,e),function(e,t){return t&&YX(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"parse\",value:(r=GX().mark((function e(){var t,r,n,o,i,a,s,l,c,u,d,f,h;return GX().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=this.annotation,n=this.page,o=this.pdfDoc,i=o.context,a=n.getHeight(),s=i.obj({Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"Circle\"),Rect:ZN(r.konvaClientRect,a),C:HN(r.color),T:QN(r.title||le(\"normal.unknownUser\")),Contents:QN((null===(t=r.contentsObj)||void 0===t?void 0:t.text)||\"\"),M:IP.of(r.date),NM:IP.of(r.id),Border:[0,0,1]}),l=i.register(s),this.addAnnotationToPage(n,l),c=qX(r.comments||[]);try{for(c.s();!(u=c.n()).done;)d=u.value,f=i.obj({Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"Text\"),Rect:ZN(r.konvaClientRect,a),Contents:QN(d.content),T:QN(d.title||le(\"normal.unknownUser\")),M:IP.of(d.date),C:HN(r.color),IRT:l,RT:Dj.of(\"R\"),NM:IP.of(d.id),Open:!1}),h=i.register(f),this.addAnnotationToPage(n,h)}catch(e){c.e(e)}finally{c.f()}case 8:case\"end\":return e.stop()}}),e,this)})),n=function(){var e=this,t=arguments;return new Promise((function(n,o){var i=r.apply(e,t);function a(e){XX(i,n,o,a,s,\"next\",e)}function s(e){XX(i,n,o,a,s,\"throw\",e)}a(void 0)}))},function(){return n.apply(this,arguments)})}]);var r,n}(LK);function tY(e){return tY=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},tY(e)}function rY(){rY=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==tY(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(tY(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function nY(e,t){var r=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(!r){if(Array.isArray(e)||(r=iY(e))||t&&e&&\"number\"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}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 i,a=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw i}}}}function oY(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=r){var n,o,i,a,s=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return s}}(e,t)||iY(e,t)||function(){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 iY(e,t){if(e){if(\"string\"==typeof e)return aY(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?aY(e,t):void 0}}function aY(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function sY(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function lY(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,cY(n.key),n)}}function cY(e){var t=function(e){if(\"object\"!=tY(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=tY(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==tY(t)?t:t+\"\"}function uY(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(uY=function(){return!!e})()}function dY(e){return dY=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},dY(e)}function fY(e,t){return fY=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},fY(e,t)}var hY=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=dY(t),function(e,t){if(t&&(\"object\"==tY(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,uY()?Reflect.construct(t,r||[],dY(e).constructor):t.apply(e,r))}(this,t,arguments)}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&fY(e,t)}(t,e),function(e,t){return t&&lY(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"parse\",value:(r=rY().mark((function e(){var t,r,n,o,i,a,s,l,c,u,d,f,h,p,m,g,v,b,y,w,x,S,C,k,E,O,A,T,j,P,M,R,_,I,N;return rY().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:s=this.annotation,l=this.page,c=this.pdfDoc,u=c.context,d=l.getHeight(),f=JSON.parse(s.konvaString),h=f.children.filter((function(e){return\"Line\"===e.className})),p=f.attrs.x||0,m=f.attrs.y||0,g=f.attrs.scaleX||1,v=f.attrs.scaleY||1,b=u.obj(h.map((function(e){for(var t=e.attrs.points,r=[],n=0;n<t.length;n+=2){var o=p+t[n]*g,i=m+t[n+1]*v;r.push(o,d-i)}return u.obj(r)}))),y=(null===(t=h[0])||void 0===t?void 0:t.attrs)||{},w=null!==(r=y.strokeWidth)&&void 0!==r?r:1,x=null!==(n=y.opacity)&&void 0!==n?n:1,S=null!==(o=null!==(i=y.stroke)&&void 0!==i?i:s.color)&&void 0!==o?o:\"rgb(255, 0, 0)\",C=HN(S),k=oY(C,3),E=k[0],O=k[1],A=k[2],T=u.obj({W:kj.of(w),S:Dj.of(\"S\")}),j=u.obj({Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"Ink\"),Rect:ZN(s.konvaClientRect,d),InkList:b,C:u.obj([kj.of(E),kj.of(O),kj.of(A)]),T:QN(s.title||le(\"normal.unknownUser\")),Contents:QN((null===(a=s.contentsObj)||void 0===a?void 0:a.text)||\"\"),M:IP.of(s.date),NM:IP.of(s.id),Border:u.obj([0,0,0]),BS:T,CA:kj.of(x)}),P=u.register(j),this.addAnnotationToPage(l,P),M=nY(s.comments||[]);try{for(M.s();!(R=M.n()).done;)_=R.value,I=u.obj({Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"Text\"),Rect:ZN(s.konvaClientRect,d),Contents:QN(_.content),T:QN(_.title||le(\"normal.unknownUser\")),M:IP.of(_.date),C:u.obj([kj.of(E),kj.of(O),kj.of(A)]),IRT:P,RT:Dj.of(\"R\"),NM:IP.of(_.id),Open:!1}),N=u.register(I),this.addAnnotationToPage(l,N)}catch(e){M.e(e)}finally{M.f()}case 21:case\"end\":return e.stop()}}),e,this)})),n=function(){var e=this,t=arguments;return new Promise((function(n,o){var i=r.apply(e,t);function a(e){sY(i,n,o,a,s,\"next\",e)}function s(e){sY(i,n,o,a,s,\"throw\",e)}a(void 0)}))},function(){return n.apply(this,arguments)})}]);var r,n}(LK);function pY(e){return pY=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},pY(e)}function mY(){mY=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==pY(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(pY(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function gY(e,t){var r=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(!r){if(Array.isArray(e)||(r=bY(e))||t&&e&&\"number\"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}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 i,a=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw i}}}}function vY(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=r){var n,o,i,a,s=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return s}}(e,t)||bY(e,t)||function(){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 bY(e,t){if(e){if(\"string\"==typeof e)return yY(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?yY(e,t):void 0}}function yY(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function wY(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function xY(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,SY(n.key),n)}}function SY(e){var t=function(e){if(\"object\"!=pY(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=pY(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==pY(t)?t:t+\"\"}function CY(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(CY=function(){return!!e})()}function kY(e){return kY=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},kY(e)}function EY(e,t){return EY=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},EY(e,t)}var OY=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=kY(t),function(e,t){if(t&&(\"object\"==pY(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,CY()?Reflect.construct(t,r||[],kY(e).constructor):t.apply(e,r))}(this,t,arguments)}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&EY(e,t)}(t,e),function(e,t){return t&&xY(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"parse\",value:(r=mY().mark((function e(){var t,r,n,o,i,a,s,l,c,u,d,f,h,p,m,g,v,b,y,w,x,S;return mY().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=this.annotation,n=this.page,o=this.pdfDoc,i=ZN(r.konvaClientRect,n.getHeight()),a=vY(i,4),s=a[0],l=a[3],c=o.context,u=n.getWidth(),d=n.getHeight(),f=Math.max(0,Math.min(s,u-20)),h=Math.min(d,Math.max(l,20)),p=h-20,m=[kj.of(f),kj.of(p),kj.of(f+20),kj.of(h)],g=c.obj({Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"Text\"),Rect:m,NM:IP.of(r.id),Contents:QN((null===(t=r.contentsObj)||void 0===t?void 0:t.text)||\"\"),Name:Dj.of(\"Comment\"),T:QN(r.title||le(\"normal.unknownUser\")),M:IP.of(r.date),C:HN(r.color),Open:!1}),v=c.register(g),this.addAnnotationToPage(n,v),b=gY(r.comments||[]);try{for(b.s();!(y=b.n()).done;)w=y.value,x=c.obj({Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"Text\"),Rect:m,Contents:QN(w.content),T:QN(w.title||le(\"normal.unknownUser\")),M:IP.of(w.date),C:HN(r.color),IRT:v,RT:Dj.of(\"R\"),NM:IP.of(w.id),Open:!1}),S=c.register(x),this.addAnnotationToPage(n,S)}catch(e){b.e(e)}finally{b.f()}case 15:case\"end\":return e.stop()}}),e,this)})),n=function(){var e=this,t=arguments;return new Promise((function(n,o){var i=r.apply(e,t);function a(e){wY(i,n,o,a,s,\"next\",e)}function s(e){wY(i,n,o,a,s,\"throw\",e)}a(void 0)}))},function(){return n.apply(this,arguments)})}]);var r,n}(LK);function AY(e){return AY=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},AY(e)}function TY(){TY=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==AY(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(AY(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function jY(e,t){var r=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(!r){if(Array.isArray(e)||(r=MY(e))||t&&e&&\"number\"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}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 i,a=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw i}}}}function PY(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=r){var n,o,i,a,s=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return s}}(e,t)||MY(e,t)||function(){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 MY(e,t){if(e){if(\"string\"==typeof e)return RY(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?RY(e,t):void 0}}function RY(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function _Y(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function IY(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,NY(n.key),n)}}function NY(e){var t=function(e){if(\"object\"!=AY(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=AY(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==AY(t)?t:t+\"\"}function FY(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(FY=function(){return!!e})()}function DY(e){return DY=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},DY(e)}function BY(e,t){return BY=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},BY(e,t)}var LY=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=DY(t),function(e,t){if(t&&(\"object\"==AY(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,FY()?Reflect.construct(t,r||[],DY(e).constructor):t.apply(e,r))}(this,t,arguments)}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&BY(e,t)}(t,e),function(e,t){return t&&IY(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"parse\",value:(r=TY().mark((function e(){var t,r,n,o,i,a,s,l,c,u,d,f,h,p,m,g,v,b,y,w,x,S,C,k,E,O,A,T,j,P,M,R,_,I,N,F,D;return TY().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=this.annotation,o=this.page,i=this.pdfDoc,a=i.context,s=ZN(n.konvaClientRect,o.getHeight()),l=PY(s,4),c=l[0],u=l[1],d=l[2],f=l[3],h=o.getWidth(),p=o.getHeight(),m=Math.max(0,Math.min(c,h)),g=Math.max(0,Math.min(u,p)),v=Math.max(m,Math.min(d,h)),b=Math.max(g,Math.min(f,p)),y=[kj.of(m),kj.of(g),kj.of(v),kj.of(b)],w=void 0,null===(t=n.contentsObj)||void 0===t||!t.image){e.next=24;break}return x=n.contentsObj.image.replace(/^data:image\\/png;base64,/,\"\"),e.next=15,i.embedPng(x);case 15:S=e.sent,C=S.width,k=S.height,E=a.obj({Type:\"XObject\",Subtype:\"Form\",BBox:[0,0,C,k],Resources:a.obj({XObject:a.obj({Im1:S.ref})})}),O=\"q \".concat(C,\" 0 0 \").concat(k,\" 0 0 cm /Im1 Do Q\"),A=(new TextEncoder).encode(O),T=Gj.of(E,A),j=a.register(T),w=a.obj({N:j});case 24:P={Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"Stamp\"),Rect:y,NM:IP.of(n.id),Contents:QN((null===(r=n.contentsObj)||void 0===r?void 0:r.text)||\"\"),T:QN(n.title||le(\"normal.unknownUser\")),M:IP.of(n.date),Open:!1},w&&(P.AP=w),M=a.obj(P),R=a.register(M),this.addAnnotationToPage(o,R),_=jY(n.comments||[]);try{for(_.s();!(I=_.n()).done;)N=I.value,F=a.obj({Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"Text\"),Rect:ZN(n.konvaClientRect,p),Contents:QN(N.content),T:QN(N.title||le(\"normal.unknownUser\")),M:IP.of(N.date),IRT:R,RT:Dj.of(\"R\"),NM:IP.of(N.id),Open:!1}),D=a.register(F),this.addAnnotationToPage(o,D)}catch(e){_.e(e)}finally{_.f()}case 31:case\"end\":return e.stop()}}),e,this)})),n=function(){var e=this,t=arguments;return new Promise((function(n,o){var i=r.apply(e,t);function a(e){_Y(i,n,o,a,s,\"next\",e)}function s(e){_Y(i,n,o,a,s,\"throw\",e)}a(void 0)}))},function(){return n.apply(this,arguments)})}]);var r,n}(LK);function zY(e){return zY=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},zY(e)}function HY(){HY=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==zY(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(zY(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function UY(e,t){var r=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(!r){if(Array.isArray(e)||(r=WY(e))||t&&e&&\"number\"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}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 i,a=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw i}}}}function VY(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=r){var n,o,i,a,s=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return s}}(e,t)||WY(e,t)||function(){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 WY(e,t){if(e){if(\"string\"==typeof e)return GY(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?GY(e,t):void 0}}function GY(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function qY(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function KY(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,XY(n.key),n)}}function XY(e){var t=function(e){if(\"object\"!=zY(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=zY(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==zY(t)?t:t+\"\"}function YY(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(YY=function(){return!!e})()}function $Y(e){return $Y=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},$Y(e)}function ZY(e,t){return ZY=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},ZY(e,t)}var QY=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=$Y(t),function(e,t){if(t&&(\"object\"==zY(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,YY()?Reflect.construct(t,r||[],$Y(e).constructor):t.apply(e,r))}(this,t,arguments)}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&ZY(e,t)}(t,e),function(e,t){return t&&KY(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"parse\",value:(r=HY().mark((function e(){var t,r,n,o,i,a,s,l,c,u,d,f,h,p,m,g,v,b,y,w,x,S,C,k,E,O,A,T,j,P,M,R,_,I,N;return HY().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:s=this.annotation,l=this.page,c=this.pdfDoc,u=c.context,d=l.getHeight(),f=JSON.parse(s.konvaString),h=f.children.filter((function(e){return\"Arrow\"===e.className})),p=f.attrs.x||0,m=f.attrs.y||0,g=f.attrs.scaleX||1,v=f.attrs.scaleY||1,b=u.obj(h.map((function(e){for(var t=e.attrs.points,r=[],n=0;n<t.length;n+=2){var o=p+t[n]*g,i=m+t[n+1]*v;r.push(o,d-i)}return u.obj(r)}))),y=(null===(t=h[0])||void 0===t?void 0:t.attrs)||{},w=null!==(r=y.strokeWidth)&&void 0!==r?r:1,x=null!==(n=y.opacity)&&void 0!==n?n:1,S=null!==(o=null!==(i=y.stroke)&&void 0!==i?i:s.color)&&void 0!==o?o:\"rgb(255, 0, 0)\",C=HN(S),k=VY(C,3),E=k[0],O=k[1],A=k[2],T=u.obj({W:kj.of(w),S:Dj.of(\"S\")}),j=u.obj({Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"Ink\"),Rect:ZN(s.konvaClientRect,d),InkList:b,C:u.obj([kj.of(E),kj.of(O),kj.of(A)]),T:QN(s.title||le(\"normal.unknownUser\")),Contents:QN((null===(a=s.contentsObj)||void 0===a?void 0:a.text)||\"\"),M:IP.of(s.date),NM:IP.of(s.id),Border:u.obj([0,0,0]),BS:T,CA:kj.of(x)}),P=u.register(j),this.addAnnotationToPage(l,P),M=UY(s.comments||[]);try{for(M.s();!(R=M.n()).done;)_=R.value,I=u.obj({Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"Text\"),Rect:ZN(s.konvaClientRect,d),Contents:QN(_.content),T:QN(_.title||le(\"normal.unknownUser\")),M:IP.of(_.date),C:u.obj([kj.of(E),kj.of(O),kj.of(A)]),IRT:P,RT:Dj.of(\"R\"),NM:IP.of(_.id),Open:!1}),N=u.register(I),this.addAnnotationToPage(l,N)}catch(e){M.e(e)}finally{M.f()}case 21:case\"end\":return e.stop()}}),e,this)})),n=function(){var e=this,t=arguments;return new Promise((function(n,o){var i=r.apply(e,t);function a(e){qY(i,n,o,a,s,\"next\",e)}function s(e){qY(i,n,o,a,s,\"throw\",e)}a(void 0)}))},function(){return n.apply(this,arguments)})}]);var r,n}(LK);function JY(e){return JY=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},JY(e)}function e$(){e$=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==JY(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(JY(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function t$(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=r){var n,o,i,a,s=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return s}}(e,t)||c$(e,t)||function(){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 r$(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function n$(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,o$(n.key),n)}}function o$(e){var t=function(e){if(\"object\"!=JY(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=JY(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==JY(t)?t:t+\"\"}function i$(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(i$=function(){return!!e})()}function a$(e){return a$=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},a$(e)}function s$(e,t){return s$=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},s$(e,t)}function l$(e,t){var r=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(!r){if(Array.isArray(e)||(r=c$(e))||t&&e&&\"number\"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}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 i,a=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw i}}}}function c$(e,t){if(e){if(\"string\"==typeof e)return u$(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u$(e,t):void 0}}function u$(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function d$(e){var t,r=[],n=l$(e.match(/[a-zA-Z][^a-zA-Z]*/g)||[]);try{for(n.s();!(t=n.n()).done;){var o=t.value,i=o[0],a=o.slice(1).trim().split(/[\\s,]+/).map(parseFloat);if(\"M\"===i||\"L\"===i)for(var s=0;s<a.length;s+=2)r.push(a[s],a[s+1]);else\"Q\"===i?a.length>=4&&r.push(a[2],a[3]):\"C\"===i&&a.length>=6&&r.push(a[4],a[5])}}catch(e){n.e(e)}finally{n.f()}return r}var f$,h$=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t,r){return t=a$(t),function(e,t){if(t&&(\"object\"==JY(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,i$()?Reflect.construct(t,r||[],a$(e).constructor):t.apply(e,r))}(this,t,arguments)}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&s$(e,t)}(t,e),function(e,t){return t&&n$(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(t,[{key:\"parse\",value:(r=e$().mark((function e(){var t,r,n,o,i,a,s,l,c,u,d,f,h,p,m,g,v,b,y,w,x,S,C,k,E,O,A,T,j,P,M,R,_,I,N;return e$().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:s=this.annotation,l=this.page,c=this.pdfDoc,u=c.context,d=l.getHeight(),f=JSON.parse(s.konvaString),h=f.children.filter((function(e){return\"Path\"===e.className})),p=f.attrs.x||0,m=f.attrs.y||0,g=f.attrs.scaleX||1,v=f.attrs.scaleY||1,b=u.obj(h.map((function(e){for(var t=d$(e.attrs.data),r=[],n=0;n<t.length;n+=2){var o=p+t[n]*g,i=m+t[n+1]*v;r.push(o,d-i)}return u.obj(r)}))),y=(null===(t=h[0])||void 0===t?void 0:t.attrs)||{},w=null!==(r=y.strokeWidth)&&void 0!==r?r:1,x=null!==(n=y.opacity)&&void 0!==n?n:1,S=null!==(o=null!==(i=y.stroke)&&void 0!==i?i:s.color)&&void 0!==o?o:\"rgb(255, 0, 0)\",C=HN(S),k=t$(C,3),E=k[0],O=k[1],A=k[2],T=u.obj({W:kj.of(w),S:Dj.of(\"S\")}),j=u.obj({Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"Ink\"),Rect:ZN(s.konvaClientRect,d),InkList:b,C:u.obj([kj.of(E),kj.of(O),kj.of(A)]),T:QN(s.title||le(\"normal.unknownUser\")),Contents:QN((null===(a=s.contentsObj)||void 0===a?void 0:a.text)||\"\"),M:IP.of(s.date),NM:IP.of(s.id),Border:u.obj([0,0,0]),BS:T,CA:kj.of(x)}),P=u.register(j),this.addAnnotationToPage(l,P),M=l$(s.comments||[]);try{for(M.s();!(R=M.n()).done;)_=R.value,I=u.obj({Type:Dj.of(\"Annot\"),Subtype:Dj.of(\"Text\"),Rect:ZN(s.konvaClientRect,d),Contents:QN(_.content),T:QN(_.title||le(\"normal.unknownUser\")),M:IP.of(_.date),C:u.obj([kj.of(E),kj.of(O),kj.of(A)]),IRT:P,RT:Dj.of(\"R\"),NM:IP.of(_.id),Open:!1}),N=u.register(I),this.addAnnotationToPage(l,N)}catch(e){M.e(e)}finally{M.f()}case 21:case\"end\":return e.stop()}}),e,this)})),n=function(){var e=this,t=arguments;return new Promise((function(n,o){var i=r.apply(e,t);function a(e){r$(i,n,o,a,s,\"next\",e)}function s(e){r$(i,n,o,a,s,\"throw\",e)}a(void 0)}))},function(){return n.apply(this,arguments)})}]);var r,n}(LK);function p$(){p$=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==m$(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(m$(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function m$(e){return m$=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},m$(e)}function g$(e,t){var r=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(!r){if(Array.isArray(e)||(r=v$(e))||t&&e&&\"number\"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}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 i,a=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw i}}}}function v$(e,t){if(e){if(\"string\"==typeof e)return b$(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?b$(e,t):void 0}}function b$(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function y$(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function w$(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){y$(i,n,o,a,s,\"next\",e)}function s(e){y$(i,n,o,a,s,\"throw\",e)}a(void 0)}))}}function x$(e,t,r){return(t=function(e){var t=function(e){if(\"object\"!=m$(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=m$(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==m$(t)?t:t+\"\"}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var S$=(x$(x$(x$(x$(x$(x$(x$(x$(x$(x$(f$={},Oo.TEXT,$K),Oo.HIGHLIGHT,uX),Oo.UNDERLINE,xX),Oo.STRIKEOUT,RX),Oo.SQUARE,VX),Oo.CIRCLE,eY),Oo.INK,hY),Oo.POLYLINE,h$),Oo.FREETEXT,OY),Oo.STAMP,LY),x$(f$,Oo.LINE,QY));function C$(e,t,r){return k$.apply(this,arguments)}function k$(){return(k$=w$(p$().mark((function e(t,r,n){var o,i;return p$().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(o=S$[t.pdfjsType])){e.next=7;break}return i=new o(n,r,t),e.next=5,i.parse();case 5:e.next=8;break;case 7:console.warn(\"Unsupported annotation type:\",t.pdfjsType);case 8:case\"end\":return e.stop()}}),e)})))).apply(this,arguments)}function E$(e,t){var r=new Blob([e],{type:\"application/octet-stream\"});(0,JK.saveAs)(r,\"\".concat(t,\".xlsx\"))}function O$(e){var t,r=g$(e.getPages());try{for(r.s();!(t=r.n()).done;){var n=t.value,o=Dj.of(\"Annots\");n.node.has(o)&&n.node.set(o,e.context.obj([]))}}catch(e){r.e(e)}finally{r.f()}}function A$(e,t){return T$.apply(this,arguments)}function T$(){return(T$=w$(p$().mark((function e(t,r){var n,o,i,a,s,l,c,u,d;return p$().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,fetch(t._downloadUrl);case 2:return n=e.sent,e.next=5,n.arrayBuffer();case 5:return o=e.sent,e.next=8,_N.load(o);case 8:O$(i=e.sent),a=g$(r),e.prev=11,a.s();case 13:if((s=a.n()).done){e.next=20;break}return l=s.value,c=i.getPages()[l.pageNumber-1],e.next=18,C$(l,c,i);case 18:e.next=13;break;case 20:e.next=25;break;case 22:e.prev=22,e.t0=e.catch(11),a.e(e.t0);case 25:return e.prev=25,a.f(),e.finish(25);case 28:return e.next=30,i.save();case 30:u=e.sent,d=t._title||\"annotated\",h=\"\".concat(d,\"_\").concat(JN()),void 0,void 0,p=(f=u).buffer.slice(f.byteOffset,f.byteOffset+f.byteLength),m=new Blob([p],{type:\"application/pdf\"}),(0,JK.saveAs)(m,\"\".concat(h,\".pdf\"));case 34:case\"end\":return e.stop()}var f,h,p,m}),e,null,[[11,22,25,28]])})))).apply(this,arguments)}function j$(e,t){return P$.apply(this,arguments)}function P$(){return P$=w$(p$().mark((function e(t,r){var n,o,i,a,s,l,c,u,d;return p$().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=[],r.sort((function(e,t){return e.pageNumber!==t.pageNumber?e.pageNumber-t.pageNumber:$N(t.date)-$N(e.date)})),o=function(e){var t,r,n=(r=e.comments||[],function(e){if(Array.isArray(e))return b$(e)}(r)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(r)||v$(r)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()).reverse().find((function(e){return void 0!==e.status&&null!==e.status})),o=null!==(t=null==n?void 0:n.status)&&void 0!==t?t:jo.None;return le(\"comment.status.\".concat(o.toLowerCase()))},i=1,a=0,r.forEach((function(e){var t,r,s=null===(t=Po.find((function(t){return t.type===e.type})))||void 0===t?void 0:t.name,l=le(\"annotations.\".concat(s));n.push({index:\"\".concat(i),id:e.id,page:e.pageNumber,annotationType:l,recordType:le(\"export.recordType.annotation\"),author:e.title,content:(null===(r=e.contentsObj)||void 0===r?void 0:r.text)||\"\",date:YN(e.date,!0),status:o(e)}),a=0,e.comments.forEach((function(e){a++,n.push({index:\"\".concat(i,\".\").concat(a),id:e.id,page:\"\",annotationType:\"--\",recordType:le(\"export.recordType.reply\"),author:e.title,content:e.content,date:YN(e.date,!0),status:\"\"})})),i++})),s=new(QK().Workbook),(l=s.addWorksheet(le(\"export.sheetName\"))).columns=[{key:\"index\",header:\"#\",width:8,style:{alignment:{vertical:\"middle\"}}},{key:\"id\",header:le(\"export.fields.id\"),width:20,style:{alignment:{vertical:\"middle\"}}},{key:\"page\",header:le(\"export.fields.page\"),width:10,style:{alignment:{vertical:\"middle\"}}},{key:\"annotationType\",header:le(\"export.fields.annotationType\"),width:18,style:{alignment:{vertical:\"middle\"}}},{key:\"recordType\",header:le(\"export.fields.recordType\"),width:12,style:{alignment:{vertical:\"middle\"}}},{key:\"author\",header:le(\"export.fields.author\"),width:16,style:{alignment:{vertical:\"middle\"}}},{key:\"content\",header:le(\"export.fields.content\"),width:40,style:{alignment:{wrapText:!0,vertical:\"top\"}}},{key:\"date\",header:le(\"export.fields.date\"),width:22,style:{alignment:{vertical:\"middle\"}}},{key:\"status\",header:le(\"export.fields.status\"),width:14,style:{alignment:{vertical:\"middle\"}}}],n.forEach((function(e){var t=l.addRow(e),r=e.recordType===le(\"export.recordType.reply\");t.font={size:12,color:{argb:r?\"389e0d\":\"000000\"}}})),l.getRow(1).eachCell((function(e){e.font={bold:!0,size:12},e.fill={type:\"pattern\",pattern:\"solid\",fgColor:{argb:\"D9E1F2\"}}})),l.eachRow((function(e){e.eachCell((function(e){e.border={top:{style:\"thin\",color:{argb:\"000000\"}},left:{style:\"thin\",color:{argb:\"000000\"}},bottom:{style:\"thin\",color:{argb:\"000000\"}},right:{style:\"thin\",color:{argb:\"000000\"}}}}))})),e.next=14,s.xlsx.writeBuffer();case 14:c=e.sent,u=t._title||\"annotated\",d=\"\".concat(u,\"_\").concat(JN()),E$(c,d);case 18:case\"end\":return e.stop()}}),e)}))),P$.apply(this,arguments)}var M$=o(9616),R$={};function _$(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=r){var n,o,i,a,s=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return s}}(e,t)||function(e,t){if(e){if(\"string\"==typeof e)return I$(e,t);var r={}.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?I$(e,t):void 0}}(e,t)||function(){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 I$(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}R$.styleTagTransform=f(),R$.setAttributes=l(),R$.insert=a().bind(null,\"head\"),R$.domAPI=n(),R$.insertStyleElement=u(),t()(M$.A,R$),M$.A&&M$.A.locals&&M$.A.locals;var N$=(0,m.forwardRef)((function(e,t){var r,n=_$((0,m.useState)(!1),2),o=n[0],i=n[1],a=_$((0,m.useState)(null),2),s=a[0],l=a[1],c=_$((0,m.useState)(Eo.setting.COLOR),2),u=c[0],d=c[1],f=_$((0,m.useState)(Eo.setting.STROKE_WIDTH),2),h=f[0],p=f[1],g=_$((0,m.useState)(Eo.setting.OPACITY),2),v=g[0],b=g[1],y=_$((0,m.useState)(!1),2),w=y[0],x=y[1],S=(0,m.useRef)(null),C=ke().t;(0,m.useImperativeHandle)(t,(function(){return{open:k,close:E}}));var k=function(e,t){l(e),i(!0);var r,n=(r=e.konvaString,IE().Node.create(r).children[0]);d(n.stroke()),p(n.strokeWidth()),b(100*n.opacity()),requestAnimationFrame((function(){var r,n=S.current;if(n){var o=\"\".concat(sL,\"_page_\").concat(e.pageNumber),i=document.querySelector(\"#\".concat(o,\" .konvajs-content\")),a=null==i||null===(r=i.getBoundingClientRect)||void 0===r?void 0:r.call(i),s=1*t.x+a.left,l=1*t.y+a.top;pn({getBoundingClientRect:function(){return{x:s,y:l,width:1*t.width,height:1*t.height,left:s,top:l,right:s+1*t.width,bottom:l+1*t.height}}},n,{placement:\"bottom\",middleware:[hn()]}).then((function(e){var t=e.x,r=e.y;Object.assign(n.style,{position:\"absolute\",left:\"\".concat(t,\"px\"),top:\"\".concat(r,\"px\")})}))}}))},E=function(){i(!1),l(null),x(!1)},O=s&&(null===(r=Po.find((function(e){return e.type===s.type})))||void 0===r?void 0:r.styleEditable),A=function(t){s&&e.onChangeStyle(s,t)};return(0,Mn.jsxs)(\"div\",{className:\"CustomAnnotationMenu \".concat(o?\"show\":\"hide\"),ref:S,children:[w&&s&&(0,Mn.jsxs)(\"div\",{className:\"styleContainer\",children:[O.color&&(0,Mn.jsx)(\"div\",{className:\"colorPalette\",children:Eo.colors.map((function(e){return(0,Mn.jsx)(\"div\",{className:\"cell \".concat(rF(e,u)?\"active\":\"\"),onMouseDown:function(){A({color:e}),d(e)},children:(0,Mn.jsx)(\"span\",{style:{backgroundColor:e}})},e)}))}),(O.opacity||O.strokeWidth)&&(0,Mn.jsxs)(Mn.Fragment,{children:[(0,Mn.jsx)(Lm,{size:\"small\"}),(0,Mn.jsx)(\"div\",{className:\"prototypeSetting\",children:(0,Mn.jsxs)(OD,{layout:\"vertical\",children:[O.strokeWidth&&(0,Mn.jsx)(OD.Item,{label:\"\".concat(C(\"normal.strokeWidth\"),\" (\").concat(h,\")\"),children:(0,Mn.jsx)(gx,{value:h,min:1,max:20,onChange:function(e){A({strokeWidth:e}),p(e)}})}),O.opacity&&(0,Mn.jsx)(OD.Item,{label:\"\".concat(C(\"normal.opacity\"),\" (\").concat(v,\"%)\"),children:(0,Mn.jsx)(gx,{value:v,min:0,max:100,onChange:function(e){A({opacity:e/100}),b(e)}})})]})})]})]}),!w&&s&&(0,Mn.jsxs)(\"ul\",{className:\"buttons\",children:[(0,Mn.jsx)(\"li\",{onMouseDown:function(){s&&(e.onOpenComment(s),E())},children:(0,Mn.jsx)(\"div\",{className:\"icon\",children:(0,Mn.jsx)(yo,{})})}),O&&(0,Mn.jsx)(\"li\",{onMouseDown:function(){s&&x(!0)},children:(0,Mn.jsx)(\"div\",{className:\"icon\",children:(0,Mn.jsx)(po,{})})}),(0,Mn.jsx)(\"li\",{onMouseDown:function(){s&&(e.onDelete(s),E())},children:(0,Mn.jsx)(\"div\",{className:\"icon\",children:(0,Mn.jsx)(So,{})})})]})]})}));function F$(e){return F$=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},F$(e)}function D$(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,B$(n.key),n)}}function B$(e){var t=function(e){if(\"object\"!=F$(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=F$(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==F$(t)?t:t+\"\"}var L$=function(){return function(e,t){return t&&D$(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}((function e(t){!function(e){if(null==e)throw new TypeError(\"Cannot destructure \"+e)}(t),function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),function(e,t){(t=B$(t))in e?Object.defineProperty(e,t,{value:null,enumerable:!0,configurable:!0,writable:!0}):e[t]=null}(this,\"connectionPathElement\")}),[{key:\"calculateShapeRect\",value:function(e,t){var r=\"\".concat(sL,\"_page_\").concat(e.pageNumber),n=document.querySelector(\"#\".concat(r,\" .konvajs-content\"));if(!n)return console.warn(\"[ConnectorLine] 页面容器未找到：\".concat(r)),{x:0,y:0,width:t.width,height:t.height};var o=n.getBoundingClientRect();return{x:1*t.x+o.left,y:1*t.y+o.top,width:t.width,height:t.height}}},{key:\"calculateAnnotationRect\",value:function(e){var t=document.getElementById(\"annotation-\".concat(e.id)).getBoundingClientRect();return{x:t.x,y:t.y,width:t.width,height:t.height}}},{key:\"calculateConnectionPath\",value:function(e,t){var r=e.x+e.width,n=e.y+e.height/2,o=t.x,i=t.y+10,a=(r+o)/2;return\"\\n            M \".concat(r,\" \").concat(n,\"\\n            L \").concat(a,\" \").concat(n,\"\\n            L \").concat(a,\" \").concat(i,\"\\n            L \").concat(o,\" \").concat(i,\"\\n        \").trim()}},{key:\"createArrowMarkerDefs\",value:function(e){var t=\"http://www.w3.org/2000/svg\",r=document.createElementNS(t,\"defs\"),n=document.createElementNS(t,\"marker\");n.setAttribute(\"id\",\"arrow\"),n.setAttribute(\"viewBox\",\"0 0 10 10\"),n.setAttribute(\"refX\",\"0\"),n.setAttribute(\"refY\",\"5\"),n.setAttribute(\"markerWidth\",\"6\"),n.setAttribute(\"markerHeight\",\"6\"),n.setAttribute(\"orient\",\"auto\");var o=document.createElementNS(t,\"path\");o.setAttribute(\"d\",\"M 10 0 L 0 5 L 10 10 z\"),o.setAttribute(\"fill\",Eo.connectorLine.COLOR),n.appendChild(o),r.appendChild(n),e.appendChild(r)}},{key:\"animateLine\",value:function(){this.connectionPathElement&&(this.connectionPathElement.style.strokeDashoffset=\"0\")}},{key:\"shouldDrawBasedOnDistance\",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:30,n=e.x+e.width;return t.x-n>r}},{key:\"shouldDrawBasedOnScreen\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:768;return window.innerWidth>e}},{key:\"drawConnection\",value:function(e,t){var r=this;requestAnimationFrame((function(){if(r.clearConnection(),r.shouldDrawBasedOnScreen()){var n=r.calculateShapeRect(e,t),o=r.calculateAnnotationRect(e);if(r.shouldDrawBasedOnDistance(n,o)){var i=r.calculateConnectionPath(n,o),a=\"http://www.w3.org/2000/svg\";if(r.connectionPathElement){r.connectionPathElement.setAttribute(\"d\",i);var s=r.connectionPathElement.getTotalLength();r.connectionPathElement.setAttribute(\"stroke-dasharray\",\"\".concat(s)),r.connectionPathElement.setAttribute(\"stroke-dashoffset\",\"\".concat(s)),r.connectionPathElement.style.strokeDashoffset=\"0\"}else{var l=document.createElementNS(a,\"svg\"),c=document.createElementNS(a,\"path\");c.setAttribute(\"d\",i);var u=c.getTotalLength();c.setAttribute(\"stroke\",Eo.connectorLine.COLOR),c.setAttribute(\"stroke-width\",\"\".concat(Eo.connectorLine.WIDTH)),c.setAttribute(\"fill\",\"none\"),c.setAttribute(\"stroke-linecap\",\"round\"),c.setAttribute(\"opacity\",\"\".concat(Eo.connectorLine.OPACITY)),c.setAttribute(\"stroke-dasharray\",\"\".concat(u)),c.setAttribute(\"stroke-dashoffset\",\"\".concat(u)),c.setAttribute(\"marker-start\",\"url(#arrow)\"),c.style.transition=\"stroke-dashoffset 0.5s ease-in-out\",c.style.transform=\"translateZ(0)\",r.createArrowMarkerDefs(l),l.appendChild(c),l.style.position=\"absolute\",l.style.top=\"0\",l.style.left=\"0\",l.style.width=\"100vw\",l.style.height=\"100vh\",l.style.pointerEvents=\"none\",l.style.zIndex=\"98\",l.id=\"connector-svg\",r.connectionPathElement=c,document.body.appendChild(l),r.animateLine()}}}}))}},{key:\"clearConnection\",value:function(){var e=document.getElementById(\"connector-svg\");e&&e.remove(),this.connectionPathElement=null}}])}();function z$(e){return z$=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},z$(e)}function H$(){H$=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},i=o.iterator||\"@@iterator\",a=o.asyncIterator||\"@@asyncIterator\",s=o.toStringTag||\"@@toStringTag\";function l(e,t,r,n){return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},\"\")}catch(e){l=function(e,t,r){return e[t]=r}}function c(t,r,n,o){var i=r&&r.prototype instanceof f?r:f,a=Object.create(i.prototype);return l(a,\"_invoke\",function(t,r,n){var o=1;return function(i,a){if(3===o)throw Error(\"Generator is already running\");if(4===o){if(\"throw\"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=x(s,n);if(l){if(l===d)continue;return l}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);o=3;var c=u(t,r,n);if(\"normal\"===c.type){if(o=n.done?4:2,c.arg===d)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(o=4,n.method=\"throw\",n.arg=c.arg)}}}(t,n,new k(o||[])),!0),a}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}t.wrap=c;var d={};function f(){}function h(){}function p(){}var m={};l(m,i,(function(){return this}));var g=Object.getPrototypeOf,v=g&&g(g(E([])));v&&v!==r&&n.call(v,i)&&(m=v);var b=p.prototype=f.prototype=Object.create(m);function y(e){[\"next\",\"throw\",\"return\"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(o,i,a,s){var l=u(e[o],e,i);if(\"throw\"!==l.type){var c=l.arg,d=c.value;return d&&\"object\"==z$(d)&&n.call(d,\"__await\")?t.resolve(d.__await).then((function(e){r(\"next\",e,a,s)}),(function(e){r(\"throw\",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r(\"throw\",e,a,s)}))}s(l.arg)}var o;l(this,\"_invoke\",(function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}),!0)}function x(t,r){var n=r.method,o=t.i[n];if(o===e)return r.delegate=null,\"throw\"===n&&t.i.return&&(r.method=\"return\",r.arg=e,x(t,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),d;var i=u(o,t.i,r.arg);if(\"throw\"===i.type)return r.method=\"throw\",r.arg=i.arg,r.delegate=null,d;var a=i.arg;return a?a.done?(r[t.r]=a.value,r.next=t.n,\"return\"!==r.method&&(r.method=\"next\",r.arg=e),r.delegate=null,d):a:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,d)}function S(e){this.tryEntries.push(e)}function C(t){var r=t[4]||{};r.type=\"normal\",r.arg=e,t[4]=r}function k(e){this.tryEntries=[[-1]],e.forEach(S,this),this.reset(!0)}function E(t){if(null!=t){var r=t[i];if(r)return r.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(z$(t)+\" is not iterable\")}return h.prototype=p,l(b,\"constructor\",p),l(p,\"constructor\",h),h.displayName=l(p,s,\"GeneratorFunction\"),t.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===h||\"GeneratorFunction\"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,l(e,s,\"GeneratorFunction\")),e.prototype=Object.create(b),e},t.awrap=function(e){return{__await:e}},y(w.prototype),l(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(c(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(b),l(b,s,\"Generator\"),l(b,i,(function(){return this})),l(b,\"toString\",(function(){return\"[object Generator]\"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}},t.values=E,k.prototype={constructor:k,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(C),!t)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(e){a.type=\"throw\",a.arg=t,r.next=e}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],s=this.prev,l=i[1],c=i[2];if(-1===i[0])return n(\"end\"),!1;if(!l&&!c)throw Error(\"try statement without catch or finally\");if(null!=i[0]&&i[0]<=s){if(s<l)return this.method=\"next\",this.arg=e,n(l),!0;if(s<c)return n(c),!1}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=e,i.arg=t,o?(this.method=\"next\",this.next=o[2],d):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[2]===e)return this.complete(r[4],r[3]),C(r),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r[0]===e){var n=r[4];if(\"throw\"===n.type){var o=n.arg;C(r)}return o}}throw Error(\"illegal catch attempt\")},delegateYield:function(t,r,n){return this.delegate={i:E(t),r,n},\"next\"===this.method&&(this.arg=e),d}},t}function U$(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function V$(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){U$(i,n,o,a,s,\"next\",e)}function s(e){U$(i,n,o,a,s,\"throw\",e)}a(void 0)}))}}function W$(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,q$(n.key),n)}}function G$(e,t,r){return(t=q$(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function q$(e){var t=function(e){if(\"object\"!=z$(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=z$(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==z$(t)?t:t+\"\"}var K$=function(){return function(e,t){return t&&W$(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}((function e(){var t,r,n=this;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),G$(this,\"_connectorLine\",null),this.loadEnd=!1,this.initialDataHash=null,this.PDFJS_PDFViewerApplication=window.PDFViewerApplication,this.PDFJS_EventBus=this.PDFJS_PDFViewerApplication.eventBus,this.$PDFJS_sidebarContainer=this.PDFJS_PDFViewerApplication.appConfig.sidebar.sidebarContainer,this.$PDFJS_toolbar_container=this.PDFJS_PDFViewerApplication.appConfig.toolbar.container,this.$PDFJS_viewerContainer=this.PDFJS_PDFViewerApplication.appConfig.viewerContainer,this.$PDFJS_mainContainer=this.PDFJS_PDFViewerApplication.appConfig.mainContainer,this.$PDFJS_outerContainer=this.PDFJS_PDFViewerApplication.appConfig.sidebar.outerContainer,this.customToolbarRef=(0,m.createRef)(),this.customPopbarRef=(0,m.createRef)(),this.customerAnnotationMenuRef=(0,m.createRef)(),this.customCommentRef=(0,m.createRef)(),(r=(t=this.PDFJS_PDFViewerApplication.l10n.getLanguage()).toLowerCase()).length>2&&(r=Ae[t.toLowerCase()]||\"en\"),se.use(we).init({resources:Oe,lng:r,fallbackLng:\"en\",interpolation:{escapeValue:!1}}),this.appOptions=G$(G$(G$(G$(G$({},Ro,se.t(\"normal.unknownUser\")),_o,\"\"),Io,\"\"),No,null),Fo,\"true\"),this.parseHashParams(),this.painter=new nq({userName:this.getOption(Ro),PDFViewerApplication:this.PDFJS_PDFViewerApplication,PDFJS_EventBus:this.PDFJS_EventBus,setDefaultMode:function(){n.customToolbarRef.current.activeAnnotation(Po[0])},onWebSelectionSelected:function(e){n.customPopbarRef.current.open(e)},onStoreAdd:function(e,t,r){n.customCommentRef.current.addAnnotation(e),t||(r.isOnce&&n.painter.selectAnnotation(e.id),n.isCommentOpen()&&n.customCommentRef.current.selectedAnnotation(e,!0))},onStoreDelete:function(e){n.customCommentRef.current.delAnnotation(e)},onAnnotationSelected:function(e,t,r){var o;n.customerAnnotationMenuRef.current.open(e,r),t&&n.isCommentOpen()&&n.customCommentRef.current.selectedAnnotation(e,t),null===(o=n.connectorLine)||void 0===o||o.drawConnection(e,r)},onAnnotationChange:function(e){n.customCommentRef.current.updateAnnotation(e)},onAnnotationChanging:function(){var e,t;null===(e=n.connectorLine)||void 0===e||e.clearConnection(),null===(t=n.customerAnnotationMenuRef)||void 0===t||null===(t=t.current)||void 0===t||t.close()},onAnnotationChanged:function(e,t){var r,o;console.log(\"annotation changed\",e),null===(r=n.connectorLine)||void 0===r||r.drawConnection(e,t),null===(o=n.customerAnnotationMenuRef)||void 0===o||null===(o=o.current)||void 0===o||o.open(e,t)}}),this.init()}),[{key:\"connectorLine\",get:function(){return Eo.connectorLine.ENABLED&&(this._connectorLine=new L$({})),this._connectorLine}},{key:\"init\",value:function(){this.addCustomStyle(),this.bindPdfjsEvents(),this.renderToolbar(),this.renderPopBar(),this.renderAnnotationMenu(),this.renderComment()}},{key:\"parseHashParams\",value:function(){var e=document.location.hash.substring(1);if(e){var t=function(e){var t=new Map;return new URLSearchParams(e).forEach((function(e,r){t.set(r.toLowerCase(),e)})),t}(e);t.has(Ro)?this.setOption(Ro,t.get(Ro)):console.warn(\"\".concat(Ro,\" is undefined\")),t.has(_o)?this.setOption(_o,t.get(_o)):console.warn(\"\".concat(_o,\" is undefined\")),t.has(Io)?this.setOption(Io,t.get(Io)):console.warn(\"\".concat(Io,\" is undefined\")),t.has(No)&&\"true\"===t.get(No)?this.setOption(No,\"select\"):console.warn(\"\".concat(No,\" is undefined\")),t.has(Fo)&&\"false\"===t.get(Fo)?this.setOption(Fo,\"false\"):console.warn(\"\".concat(No,\" is undefined\"))}else console.warn(\"HASH_PARAMS is undefined\")}},{key:\"setOption\",value:function(e,t){this.appOptions[e]=t}},{key:\"getOption\",value:function(e){return this.appOptions[e]}},{key:\"addCustomStyle\",value:function(){document.body.classList.add(\"PdfjsAnnotationExtension\"),this.toggleComment(\"true\"===this.getOption(Fo))}},{key:\"toggleComment\",value:function(e){e?document.body.classList.remove(\"PdfjsAnnotationExtension_Comment_hidden\"):document.body.classList.add(\"PdfjsAnnotationExtension_Comment_hidden\")}},{key:\"isCommentOpen\",value:function(){return!document.body.classList.contains(\"PdfjsAnnotationExtension_Comment_hidden\")}},{key:\"renderToolbar\",value:function(){var e=this,t=document.createElement(\"div\");this.$PDFJS_toolbar_container.insertAdjacentElement(\"afterend\",t),(0,v.H)(t).render((0,Mn.jsx)(nL,{ref:this.customToolbarRef,defaultAnnotationName:this.getOption(No),defaultSidebarOpen:\"true\"===this.getOption(Fo),userName:this.getOption(Ro),onChange:function(t,r){e.painter.activate(t,r)},onSave:function(){e.saveData()},onExport:function(){var t=V$(H$().mark((function t(r){return H$().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(\"excel\"!==r){t.next=3;break}return e.exportExcel(),t.abrupt(\"return\");case 3:if(\"pdf\"!==r){t.next=7;break}return t.next=6,e.exportPdf();case 6:return t.abrupt(\"return\");case 7:case\"end\":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),onSidebarOpen:function(t){e.toggleComment(t),e.connectorLine.clearConnection()}}))}},{key:\"renderPopBar\",value:function(){var e=this,t=document.createElement(\"div\");this.$PDFJS_viewerContainer.insertAdjacentElement(\"afterend\",t),(0,v.H)(t).render((0,Mn.jsx)(Lo,{ref:this.customPopbarRef,onChange:function(t,r){e.painter.highlightRange(r,t)}}))}},{key:\"renderAnnotationMenu\",value:function(){var e=this,t=document.createElement(\"div\");this.$PDFJS_outerContainer.insertAdjacentElement(\"afterend\",t),(0,v.H)(t).render((0,Mn.jsx)(N$,{ref:this.customerAnnotationMenuRef,onOpenComment:function(t){e.toggleComment(!0),e.customToolbarRef.current.toggleSidebarBtn(!0),setTimeout((function(){e.customCommentRef.current.selectedAnnotation(t,!0)}),100)},onChangeStyle:function(t,r){e.painter.updateAnnotationStyle(t,r),e.customToolbarRef.current.updateStyle(t.type,r)},onDelete:function(t){e.painter.delete(t.id,!0)}}))}},{key:\"renderComment\",value:function(){var e=this,t=document.createElement(\"div\");this.$PDFJS_mainContainer.insertAdjacentElement(\"afterend\",t),(0,v.H)(t).render((0,Mn.jsx)(NK,{ref:this.customCommentRef,userName:this.getOption(Ro),onSelected:function(){var t=V$(H$().mark((function t(r){return H$().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.painter.highlight(r);case 2:case\"end\":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),onDelete:function(t){e.painter.delete(t)},onUpdate:function(t){e.painter.update(t.id,{title:t.title,contentsObj:t.contentsObj,comments:t.comments})},onScroll:function(){var t;null===(t=e.connectorLine)||void 0===t||t.clearConnection()}}))}},{key:\"hidePdfjsEditorModeButtons\",value:function(){Eo.setting.HIDE_PDFJS_ELEMENT.forEach((function(e){var t=document.querySelector(e);if(t){t.style.display=\"none\";var r=t.nextElementSibling;r.classList.contains(\"horizontalToolbarSeparator\")&&(r.style.display=\"none\")}}))}},{key:\"updatePdfjs\",value:function(){var e=this.PDFJS_PDFViewerApplication.pdfViewer.currentScaleValue;\"auto\"===e||\"page-fit\"===e||\"page-width\"===e?(this.PDFJS_PDFViewerApplication.pdfViewer.currentScaleValue=\"0.8\",this.PDFJS_PDFViewerApplication.pdfViewer.update()):(this.PDFJS_PDFViewerApplication.pdfViewer.currentScaleValue=\"auto\",this.PDFJS_PDFViewerApplication.pdfViewer.update()),this.PDFJS_PDFViewerApplication.pdfViewer.currentScaleValue=e,this.PDFJS_PDFViewerApplication.pdfViewer.update()}},{key:\"bindPdfjsEvents\",value:function(){var e=this;this.hidePdfjsEditorModeButtons();var t,r,n,o=(t=function(){e.loadEnd=!0},n=!1,function(){if(!n){n=!0;for(var e=arguments.length,o=new Array(e),i=0;i<e;i++)o[i]=arguments[i];r=t.apply(this,o)}return r});this.PDFJS_EventBus._on(\"updateviewarea\",(function(){var t,r;null===(t=e.customerAnnotationMenuRef.current)||void 0===t||t.close(),null===(r=e.connectorLine)||void 0===r||r.clearConnection()})),this.PDFJS_EventBus._on(\"pagerendered\",function(){var t=V$(H$().mark((function t(r){var n,i,a;return H$().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:n=r.source,i=r.cssTransform,a=r.pageNumber,o(),e.painter.initCanvas({pageView:n,cssTransform:i,pageNumber:a});case 3:case\"end\":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}()),this.PDFJS_EventBus._on(\"documentloaded\",V$(H$().mark((function t(){var r;return H$().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e.painter.initWebSelection(e.$PDFJS_viewerContainer),t.next=3,e.getData();case 3:return r=t.sent,e.initialDataHash=eF(r),t.next=7,e.painter.initAnnotations(r,Eo.setting.LOAD_PDF_ANNOTATION);case 7:e.loadEnd&&e.updatePdfjs();case 8:case\"end\":return t.stop()}}),t)}))))}},{key:\"getData\",value:(n=V$(H$().mark((function e(){var t,r,n;return H$().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=this.getOption(_o)){e.next=3;break}return e.abrupt(\"return\",[]);case 3:return e.prev=3,ad.open({type:\"loading\",content:le(\"normal.processing\"),duration:0}),e.next=7,fetch(t,{method:\"GET\"});case 7:if((r=e.sent).ok){e.next=11;break}throw n=\"HTTP Error \".concat(r.status,\": \").concat(r.statusText||\"Unknown Status\"),new Error(n);case 11:return e.next=13,r.json();case 13:return e.abrupt(\"return\",e.sent);case 16:return e.prev=16,e.t0=e.catch(3),dE.error({content:le(\"load.fail\",{value:null===e.t0||void 0===e.t0?void 0:e.t0.message}),closable:!1,okButtonProps:{loading:!1},okText:le(\"normal.ok\")}),console.error(\"Fetch error:\",e.t0),e.abrupt(\"return\",[]);case 21:return e.prev=21,ad.destroy(),e.finish(21);case 24:case\"end\":return e.stop()}}),e,this,[[3,16,21,24]])}))),function(){return n.apply(this,arguments)})},{key:\"saveData\",value:(r=V$(H$().mark((function e(){var t,r,n,o,i;return H$().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=this.painter.getData(),console.log(\"%c [ dataToSave ]\",\"font-size:13px; background:#d10d00; color:#ff5144;\",t),r=this.getOption(Io)){e.next=6;break}return ad.error({content:le(\"save.noPostUrl\",{value:Io}),key:\"save\"}),e.abrupt(\"return\");case 6:return n=dE.info({content:(0,Mn.jsxs)(SS,{children:[(0,Mn.jsx)(fr,{spin:!0}),le(\"save.start\")]}),closable:!1,okButtonProps:{loading:!0},okText:le(\"normal.ok\")}),e.prev=7,e.next=10,fetch(r,{method:\"POST\",headers:{\"Content-Type\":\"application/json\"},body:JSON.stringify(t)});case 10:if((o=e.sent).ok){e.next=13;break}throw new Error(\"Failed to save PDF. Status: \".concat(o.status,\" \").concat(o.statusText));case 13:return e.next=15,o.json();case 15:i=e.sent,this.initialDataHash=eF(t),n.destroy(),ad.success({content:le(\"save.success\"),key:\"save\"}),console.log(\"Saved successfully:\",i),e.next=26;break;case 22:e.prev=22,e.t0=e.catch(7),n.update({type:\"error\",content:le(\"save.fail\",{value:null===e.t0||void 0===e.t0?void 0:e.t0.message}),closable:!0,okButtonProps:{loading:!1}}),console.error(\"Error while saving data:\",e.t0);case 26:case\"end\":return e.stop()}}),e,this,[[7,22]])}))),function(){return r.apply(this,arguments)})},{key:\"exportPdf\",value:(t=V$(H$().mark((function e(){var t,r;return H$().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=this.painter.getData(),r=dE.info({title:le(\"normal.export\"),content:(0,Mn.jsxs)(SS,{children:[(0,Mn.jsx)(fr,{spin:!0}),le(\"normal.processing\")]}),closable:!1,okButtonProps:{loading:!0},okText:le(\"normal.ok\")}),e.next=4,A$(this.PDFJS_PDFViewerApplication,t);case 4:r.update({type:\"success\",title:le(\"normal.export\"),content:le(\"pdf.generationSuccess\"),closable:!0,okButtonProps:{loading:!1}});case 5:case\"end\":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:\"exportExcel\",value:(e=V$(H$().mark((function e(){var t;return H$().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=this.painter.getData(),e.next=3,j$(this.PDFJS_PDFViewerApplication,t);case 3:dE.info({type:\"success\",title:le(\"normal.export\"),content:le(\"pdf.generationSuccess\"),closable:!0,okButtonProps:{loading:!1}});case 4:case\"end\":return e.stop()}}),e,this)}))),function(){return e.apply(this,arguments)})},{key:\"hasUnsavedChanges\",value:function(){return eF(this.painter.getData())!==this.initialDataHash}}]);var e,t,r,n}();window.pdfjsAnnotationExtensionInstance=new K$})(),{}})()));"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/standard_fonts/LICENSE_FOXIT",
    "content": "// Copyright 2014 PDFium Authors. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//    * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//    * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//    * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/standard_fonts/LICENSE_LIBERATION",
    "content": "Digitized data copyright (c) 2010 Google Corporation\n\twith Reserved Font Arimo, Tinos and Cousine.\nCopyright (c) 2012 Red Hat, Inc.\n\twith Reserved Font Name Liberation.\n\nThis Font Software is licensed under the SIL Open Font License,\nVersion 1.1.\n\nThis license is copied below, and is also available with a FAQ at:\nhttp://scripts.sil.org/OFL\n\nSIL OPEN FONT LICENSE Version 1.1 - 26 February 2007\n\nPREAMBLE The goals of the Open Font License (OFL) are to stimulate\nworldwide development of collaborative font projects, to support the font\ncreation efforts of academic and linguistic communities, and to provide\na free and open framework in which fonts may be shared and improved in\npartnership with others.\n\nThe OFL allows the licensed fonts to be used, studied, modified and\nredistributed freely as long as they are not sold by themselves.\nThe fonts, including any derivative works, can be bundled, embedded,\nredistributed and/or sold with any software provided that any reserved\nnames are not used by derivative works.  The fonts and derivatives,\nhowever, cannot be released under any other type of license.  The\nrequirement for fonts to remain under this license does not apply to\nany document created using the fonts or their derivatives.\n\n \n\nDEFINITIONS\n\"Font Software\" refers to the set of files released by the Copyright\nHolder(s) under this license and clearly marked as such.\nThis may include source files, build scripts and documentation.\n\n\"Reserved Font Name\" refers to any names specified as such after the\ncopyright statement(s).\n\n\"Original Version\" refers to the collection of Font Software components\nas distributed by the Copyright Holder(s).\n\n\"Modified Version\" refers to any derivative made by adding to, deleting,\nor substituting ? in part or in whole ?\nany of the components of the Original Version, by changing formats or\nby porting the Font Software to a new environment.\n\n\"Author\" refers to any designer, engineer, programmer, technical writer\nor other person who contributed to the Font Software.\n\n\nPERMISSION & CONDITIONS\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of the Font Software, to use, study, copy, merge, embed, modify,\nredistribute, and sell modified and unmodified copies of the Font\nSoftware, subject to the following conditions:\n\n1) Neither the Font Software nor any of its individual components,in\n   Original or Modified Versions, may be sold by itself.\n\n2) Original or Modified Versions of the Font Software may be bundled,\n   redistributed and/or sold with any software, provided that each copy\n   contains the above copyright notice and this license. These can be\n   included either as stand-alone text files, human-readable headers or\n   in the appropriate machine-readable metadata fields within text or\n   binary files as long as those fields can be easily viewed by the user.\n\n3) No Modified Version of the Font Software may use the Reserved Font\n   Name(s) unless explicit written permission is granted by the\n   corresponding Copyright Holder. This restriction only applies to the\n   primary font name as presented to the users.\n\n4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font\n   Software shall not be used to promote, endorse or advertise any\n   Modified Version, except to acknowledge the contribution(s) of the\n   Copyright Holder(s) and the Author(s) or with their explicit written\n   permission.\n\n5) The Font Software, modified or unmodified, in part or in whole, must\n   be distributed entirely under this license, and must not be distributed\n   under any other license. The requirement for fonts to remain under\n   this license does not apply to any document created using the Font\n   Software.\n\n\n \nTERMINATION\nThis license becomes null and void if any of the above conditions are not met.\n\n \n\nDISCLAIMER\nTHE FONT SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\nOF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT.  IN NO EVENT SHALL THE\nCOPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nINCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL\nDAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER\nDEALINGS IN THE FONT SOFTWARE.\n\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/viewer.css",
    "content": "/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n.dialog{\n  --dialog-bg-color:white;\n  --dialog-border-color:white;\n  --dialog-shadow:0 2px 14px 0 rgb(58 57 68 / 0.2);\n  --text-primary-color:#15141a;\n  --text-secondary-color:#5b5b66;\n  --hover-filter:brightness(0.9);\n  --focus-ring-color:#0060df;\n  --focus-ring-outline:2px solid var(--focus-ring-color);\n\n  --textarea-border-color:#8f8f9d;\n  --textarea-bg-color:white;\n  --textarea-fg-color:var(--text-secondary-color);\n\n  --radio-bg-color:#f0f0f4;\n  --radio-checked-bg-color:#fbfbfe;\n  --radio-border-color:#8f8f9d;\n  --radio-checked-border-color:#0060df;\n\n  --button-secondary-bg-color:#f0f0f4;\n  --button-secondary-fg-color:var(--text-primary-color);\n  --button-secondary-border-color:var(--button-secondary-bg-color);\n  --button-secondary-hover-bg-color:var(--button-secondary-bg-color);\n  --button-secondary-hover-fg-color:var(--button-secondary-fg-color);\n  --button-secondary-hover-border-color:var(--button-secondary-hover-bg-color);\n\n  --button-primary-bg-color:#0060df;\n  --button-primary-fg-color:#fbfbfe;\n  --button-primary-hover-bg-color:var(--button-primary-bg-color);\n  --button-primary-hover-fg-color:var(--button-primary-fg-color);\n  --button-primary-hover-border-color:var(--button-primary-hover-bg-color);\n\n  font:message-box;\n  font-size:13px;\n  font-weight:400;\n  line-height:150%;\n  border-radius:4px;\n  padding:12px 16px;\n  border:1px solid var(--dialog-border-color);\n  background:var(--dialog-bg-color);\n  color:var(--text-primary-color);\n  box-shadow:var(--dialog-shadow);\n}\n\n@media (prefers-color-scheme: dark){\n\n:where(html:not(.is-light)) .dialog{\n    --dialog-bg-color:#1c1b22;\n    --dialog-border-color:#1c1b22;\n    --dialog-shadow:0 2px 14px 0 #15141a;\n    --text-primary-color:#fbfbfe;\n    --text-secondary-color:#cfcfd8;\n    --focus-ring-color:#0df;\n    --hover-filter:brightness(1.4);\n\n    --textarea-bg-color:#42414d;\n\n    --radio-bg-color:#2b2a33;\n    --radio-checked-bg-color:#15141a;\n    --radio-checked-border-color:#0df;\n\n    --button-secondary-bg-color:#2b2a33;\n    --button-primary-bg-color:#0df;\n    --button-primary-fg-color:#15141a;\n}\n  }\n\n:where(html.is-dark) .dialog{\n    --dialog-bg-color:#1c1b22;\n    --dialog-border-color:#1c1b22;\n    --dialog-shadow:0 2px 14px 0 #15141a;\n    --text-primary-color:#fbfbfe;\n    --text-secondary-color:#cfcfd8;\n    --focus-ring-color:#0df;\n    --hover-filter:brightness(1.4);\n\n    --textarea-bg-color:#42414d;\n\n    --radio-bg-color:#2b2a33;\n    --radio-checked-bg-color:#15141a;\n    --radio-checked-border-color:#0df;\n\n    --button-secondary-bg-color:#2b2a33;\n    --button-primary-bg-color:#0df;\n    --button-primary-fg-color:#15141a;\n}\n\n@media screen and (forced-colors: active){\n\n.dialog{\n    --dialog-bg-color:Canvas;\n    --dialog-border-color:CanvasText;\n    --dialog-shadow:none;\n    --text-primary-color:CanvasText;\n    --text-secondary-color:CanvasText;\n    --hover-filter:none;\n    --focus-ring-color:ButtonBorder;\n\n    --textarea-border-color:ButtonBorder;\n    --textarea-bg-color:Field;\n    --textarea-fg-color:ButtonText;\n\n    --radio-bg-color:ButtonFace;\n    --radio-checked-bg-color:ButtonFace;\n    --radio-border-color:ButtonText;\n    --radio-checked-border-color:ButtonText;\n\n    --button-secondary-bg-color:ButtonFace;\n    --button-secondary-fg-color:ButtonText;\n    --button-secondary-border-color:ButtonText;\n    --button-secondary-hover-bg-color:AccentColor;\n    --button-secondary-hover-fg-color:AccentColorText;\n\n    --button-primary-bg-color:ButtonText;\n    --button-primary-fg-color:ButtonFace;\n    --button-primary-hover-bg-color:AccentColor;\n    --button-primary-hover-fg-color:AccentColorText;\n}\n  }\n\n.dialog .mainContainer *:focus-visible{\n      outline:var(--focus-ring-outline);\n      outline-offset:2px;\n    }\n\n.dialog .mainContainer .radio{\n      display:flex;\n      flex-direction:column;\n      align-items:flex-start;\n      gap:4px;\n    }\n\n.dialog .mainContainer .radio > .radioButton{\n        display:flex;\n        gap:8px;\n        align-self:stretch;\n        align-items:center;\n      }\n\n.dialog .mainContainer .radio > .radioButton input{\n          -webkit-appearance:none;\n             -moz-appearance:none;\n                  appearance:none;\n          box-sizing:border-box;\n          width:16px;\n          height:16px;\n          border-radius:50%;\n          background-color:var(--radio-bg-color);\n          border:1px solid var(--radio-border-color);\n        }\n\n.dialog .mainContainer .radio > .radioButton input:hover{\n            filter:var(--hover-filter);\n          }\n\n.dialog .mainContainer .radio > .radioButton input:checked{\n            background-color:var(--radio-checked-bg-color);\n            border:4px solid var(--radio-checked-border-color);\n          }\n\n.dialog .mainContainer .radio > .radioLabel{\n        display:flex;\n        padding-inline-start:24px;\n        align-items:flex-start;\n        gap:10px;\n        align-self:stretch;\n      }\n\n.dialog .mainContainer .radio > .radioLabel > span{\n          flex:1 0 0;\n          font-size:11px;\n          color:var(--text-secondary-color);\n        }\n\n.dialog .mainContainer button{\n      border-radius:4px;\n      border:1px solid;\n      font:menu;\n      font-weight:600;\n      padding:4px 16px;\n      width:auto;\n      height:32px;\n    }\n\n.dialog .mainContainer button:hover{\n        cursor:pointer;\n        filter:var(--hover-filter);\n      }\n\n.dialog .mainContainer button.secondaryButton{\n        color:var(--button-secondary-fg-color);\n        background-color:var(--button-secondary-bg-color);\n        border-color:var(--button-secondary-border-color);\n      }\n\n.dialog .mainContainer button.secondaryButton:hover{\n          color:var(--button-secondary-hover-fg-color);\n          background-color:var(--button-secondary-hover-bg-color);\n          border-color:var(--button-secondary-hover-border-color);\n        }\n\n.dialog .mainContainer button.primaryButton{\n        color:var(--button-primary-hover-fg-color);\n        background-color:var(--button-primary-hover-bg-color);\n        border-color:var(--button-primary-hover-border-color);\n        opacity:1;\n      }\n\n.dialog .mainContainer button.primaryButton:hover{\n          color:var(--button-primary-hover-fg-color);\n          background-color:var(--button-primary-hover-bg-color);\n          border-color:var(--button-primary-hover-border-color);\n        }\n\n.dialog .mainContainer textarea{\n      font:inherit;\n      padding:8px;\n      resize:none;\n      margin:0;\n      box-sizing:border-box;\n      border-radius:4px;\n      border:1px solid var(--textarea-border-color);\n      background:var(--textarea-bg-color);\n      color:var(--textarea-fg-color);\n    }\n\n.dialog .mainContainer textarea:focus{\n        outline-offset:0;\n        border-color:transparent;\n      }\n\n.dialog .mainContainer textarea:disabled{\n        pointer-events:none;\n        opacity:0.4;\n      }\n\n.textLayer{\n  position:absolute;\n  text-align:initial;\n  inset:0;\n  overflow:clip;\n  opacity:1;\n  line-height:1;\n  -webkit-text-size-adjust:none;\n     -moz-text-size-adjust:none;\n          text-size-adjust:none;\n  forced-color-adjust:none;\n  transform-origin:0 0;\n  caret-color:CanvasText;\n  z-index:0;\n}\n\n.textLayer.highlighting{\n    touch-action:none;\n  }\n\n.textLayer :is(span, br){\n    color:transparent;\n    position:absolute;\n    white-space:pre;\n    cursor:text;\n    transform-origin:0% 0%;\n  }\n\n.textLayer > :not(.markedContent),\n  .textLayer .markedContent span:not(.markedContent){\n    z-index:1;\n  }\n\n.textLayer span.markedContent{\n    top:0;\n    height:0;\n  }\n\n.textLayer .highlight{\n    --highlight-bg-color:rgb(180 0 170 / 0.25);\n    --highlight-selected-bg-color:rgb(0 100 0 / 0.25);\n    --highlight-backdrop-filter:none;\n    --highlight-selected-backdrop-filter:none;\n\n    margin:-1px;\n    padding:1px;\n    background-color:var(--highlight-bg-color);\n    -webkit-backdrop-filter:var(--highlight-backdrop-filter);\n            backdrop-filter:var(--highlight-backdrop-filter);\n    border-radius:4px;\n  }\n\n@media screen and (forced-colors: active){\n\n.textLayer .highlight{\n      --highlight-bg-color:transparent;\n      --highlight-selected-bg-color:transparent;\n      --highlight-backdrop-filter:var(--hcm-highlight-filter);\n      --highlight-selected-backdrop-filter:var(\n        --hcm-highlight-selected-filter\n      );\n  }\n    }\n\n.textLayer .highlight.appended{\n      position:initial;\n    }\n\n.textLayer .highlight.begin{\n      border-radius:4px 0 0 4px;\n    }\n\n.textLayer .highlight.end{\n      border-radius:0 4px 4px 0;\n    }\n\n.textLayer .highlight.middle{\n      border-radius:0;\n    }\n\n.textLayer .highlight.selected{\n      background-color:var(--highlight-selected-bg-color);\n      -webkit-backdrop-filter:var(--highlight-selected-backdrop-filter);\n              backdrop-filter:var(--highlight-selected-backdrop-filter);\n    }\n\n.textLayer ::-moz-selection{\n    background:rgba(0 0 255 / 0.25);\n    background:color-mix(in srgb, AccentColor, transparent 75%);\n  }\n\n.textLayer ::selection{\n    background:rgba(0 0 255 / 0.25);\n    background:color-mix(in srgb, AccentColor, transparent 75%);\n  }\n\n.textLayer br::-moz-selection{\n    background:transparent;\n  }\n\n.textLayer br::selection{\n    background:transparent;\n  }\n\n.textLayer .endOfContent{\n    display:block;\n    position:absolute;\n    inset:100% 0 0;\n    z-index:0;\n    cursor:default;\n    -webkit-user-select:none;\n       -moz-user-select:none;\n            user-select:none;\n  }\n\n.textLayer .endOfContent.active{\n      top:0;\n    }\n\n.annotationLayer{\n  --annotation-unfocused-field-background:url(\"data:image/svg+xml;charset=UTF-8,<svg width='1px' height='1px' xmlns='http://www.w3.org/2000/svg'><rect width='100%' height='100%' style='fill:rgba(0, 54, 255, 0.13);'/></svg>\");\n  --input-focus-border-color:Highlight;\n  --input-focus-outline:1px solid Canvas;\n  --input-unfocused-border-color:transparent;\n  --input-disabled-border-color:transparent;\n  --input-hover-border-color:black;\n  --link-outline:none;\n\n  position:absolute;\n  top:0;\n  left:0;\n  pointer-events:none;\n  transform-origin:0 0;\n}\n\n@media screen and (forced-colors: active){\n\n.annotationLayer{\n    --input-focus-border-color:CanvasText;\n    --input-unfocused-border-color:ActiveText;\n    --input-disabled-border-color:GrayText;\n    --input-hover-border-color:Highlight;\n    --link-outline:1.5px solid LinkText;\n}\n\n    .annotationLayer .textWidgetAnnotation :is(input, textarea):required, .annotationLayer .choiceWidgetAnnotation select:required, .annotationLayer .buttonWidgetAnnotation:is(.checkBox, .radioButton) input:required{\n      outline:1.5px solid selectedItem;\n    }\n\n    .annotationLayer .linkAnnotation{\n      outline:var(--link-outline);\n    }\n\n      .annotationLayer .linkAnnotation:hover{\n        -webkit-backdrop-filter:var(--hcm-highlight-filter);\n                backdrop-filter:var(--hcm-highlight-filter);\n      }\n\n      .annotationLayer .linkAnnotation > a:hover{\n        opacity:0 !important;\n        background:none !important;\n        box-shadow:none;\n      }\n\n    .annotationLayer .popupAnnotation .popup{\n      outline:calc(1.5px * var(--scale-factor)) solid CanvasText !important;\n      background-color:ButtonFace !important;\n      color:ButtonText !important;\n    }\n\n    .annotationLayer .highlightArea:hover::after{\n      position:absolute;\n      top:0;\n      left:0;\n      width:100%;\n      height:100%;\n      -webkit-backdrop-filter:var(--hcm-highlight-filter);\n              backdrop-filter:var(--hcm-highlight-filter);\n      content:\"\";\n      pointer-events:none;\n    }\n\n    .annotationLayer .popupAnnotation.focused .popup{\n      outline:calc(3px * var(--scale-factor)) solid Highlight !important;\n    }\n  }\n\n.annotationLayer[data-main-rotation=\"90\"] .norotate{\n    transform:rotate(270deg) translateX(-100%);\n  }\n\n.annotationLayer[data-main-rotation=\"180\"] .norotate{\n    transform:rotate(180deg) translate(-100%, -100%);\n  }\n\n.annotationLayer[data-main-rotation=\"270\"] .norotate{\n    transform:rotate(90deg) translateY(-100%);\n  }\n\n.annotationLayer.disabled section,\n    .annotationLayer.disabled .popup{\n      pointer-events:none;\n    }\n\n.annotationLayer .annotationContent{\n    position:absolute;\n    width:100%;\n    height:100%;\n    pointer-events:none;\n  }\n\n.annotationLayer .annotationContent.freetext{\n      background:transparent;\n      border:none;\n      inset:0;\n      overflow:visible;\n      white-space:nowrap;\n      font:10px sans-serif;\n      line-height:1.35;\n      -webkit-user-select:none;\n         -moz-user-select:none;\n              user-select:none;\n    }\n\n.annotationLayer section{\n    position:absolute;\n    text-align:initial;\n    pointer-events:auto;\n    box-sizing:border-box;\n    transform-origin:0 0;\n  }\n\n.annotationLayer section:has(div.annotationContent) canvas.annotationContent{\n        display:none;\n      }\n\n.annotationLayer :is(.linkAnnotation, .buttonWidgetAnnotation.pushButton) > a{\n    position:absolute;\n    font-size:1em;\n    top:0;\n    left:0;\n    width:100%;\n    height:100%;\n  }\n\n.annotationLayer :is(.linkAnnotation, .buttonWidgetAnnotation.pushButton):not(.hasBorder)\n    > a:hover{\n    opacity:0.2;\n    background-color:rgb(255 255 0);\n    box-shadow:0 2px 10px rgb(255 255 0);\n  }\n\n.annotationLayer .linkAnnotation.hasBorder:hover{\n    background-color:rgb(255 255 0 / 0.2);\n  }\n\n.annotationLayer .hasBorder{\n    background-size:100% 100%;\n  }\n\n.annotationLayer .textAnnotation img{\n    position:absolute;\n    cursor:pointer;\n    width:100%;\n    height:100%;\n    top:0;\n    left:0;\n  }\n\n.annotationLayer .textWidgetAnnotation :is(input, textarea), .annotationLayer .choiceWidgetAnnotation select, .annotationLayer .buttonWidgetAnnotation:is(.checkBox, .radioButton) input{\n    background-image:var(--annotation-unfocused-field-background);\n    border:2px solid var(--input-unfocused-border-color);\n    box-sizing:border-box;\n    font:calc(9px * var(--scale-factor)) sans-serif;\n    height:100%;\n    margin:0;\n    vertical-align:top;\n    width:100%;\n  }\n\n.annotationLayer .textWidgetAnnotation :is(input, textarea):required, .annotationLayer .choiceWidgetAnnotation select:required, .annotationLayer .buttonWidgetAnnotation:is(.checkBox, .radioButton) input:required{\n    outline:1.5px solid red;\n  }\n\n.annotationLayer .choiceWidgetAnnotation select option{\n    padding:0;\n  }\n\n.annotationLayer .buttonWidgetAnnotation.radioButton input{\n    border-radius:50%;\n  }\n\n.annotationLayer .textWidgetAnnotation textarea{\n    resize:none;\n  }\n\n.annotationLayer .textWidgetAnnotation [disabled]:is(input, textarea), .annotationLayer .choiceWidgetAnnotation select[disabled], .annotationLayer .buttonWidgetAnnotation:is(.checkBox, .radioButton) input[disabled]{\n    background:none;\n    border:2px solid var(--input-disabled-border-color);\n    cursor:not-allowed;\n  }\n\n.annotationLayer .textWidgetAnnotation :is(input, textarea):hover, .annotationLayer .choiceWidgetAnnotation select:hover, .annotationLayer .buttonWidgetAnnotation:is(.checkBox, .radioButton) input:hover{\n    border:2px solid var(--input-hover-border-color);\n  }\n\n.annotationLayer .textWidgetAnnotation :is(input, textarea):hover, .annotationLayer .choiceWidgetAnnotation select:hover, .annotationLayer .buttonWidgetAnnotation.checkBox input:hover{\n    border-radius:2px;\n  }\n\n.annotationLayer .textWidgetAnnotation :is(input, textarea):focus, .annotationLayer .choiceWidgetAnnotation select:focus{\n    background:none;\n    border:2px solid var(--input-focus-border-color);\n    border-radius:2px;\n    outline:var(--input-focus-outline);\n  }\n\n.annotationLayer .buttonWidgetAnnotation:is(.checkBox, .radioButton) :focus{\n    background-image:none;\n    background-color:transparent;\n  }\n\n.annotationLayer .buttonWidgetAnnotation.checkBox :focus{\n    border:2px solid var(--input-focus-border-color);\n    border-radius:2px;\n    outline:var(--input-focus-outline);\n  }\n\n.annotationLayer .buttonWidgetAnnotation.radioButton :focus{\n    border:2px solid var(--input-focus-border-color);\n    outline:var(--input-focus-outline);\n  }\n\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::before,\n  .annotationLayer .buttonWidgetAnnotation.checkBox input:checked::after,\n  .annotationLayer .buttonWidgetAnnotation.radioButton input:checked::before{\n    background-color:CanvasText;\n    content:\"\";\n    display:block;\n    position:absolute;\n  }\n\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::before,\n  .annotationLayer .buttonWidgetAnnotation.checkBox input:checked::after{\n    height:80%;\n    left:45%;\n    width:1px;\n  }\n\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::before{\n    transform:rotate(45deg);\n  }\n\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::after{\n    transform:rotate(-45deg);\n  }\n\n.annotationLayer .buttonWidgetAnnotation.radioButton input:checked::before{\n    border-radius:50%;\n    height:50%;\n    left:25%;\n    top:25%;\n    width:50%;\n  }\n\n.annotationLayer .textWidgetAnnotation input.comb{\n    font-family:monospace;\n    padding-left:2px;\n    padding-right:0;\n  }\n\n.annotationLayer .textWidgetAnnotation input.comb:focus{\n    width:103%;\n  }\n\n.annotationLayer .buttonWidgetAnnotation:is(.checkBox, .radioButton) input{\n    -webkit-appearance:none;\n       -moz-appearance:none;\n            appearance:none;\n  }\n\n.annotationLayer .fileAttachmentAnnotation .popupTriggerArea{\n    height:100%;\n    width:100%;\n  }\n\n.annotationLayer .popupAnnotation{\n    position:absolute;\n    font-size:calc(9px * var(--scale-factor));\n    pointer-events:none;\n    width:-moz-max-content;\n    width:max-content;\n    max-width:45%;\n    height:auto;\n  }\n\n.annotationLayer .popup{\n    background-color:rgb(255 255 153);\n    box-shadow:0 calc(2px * var(--scale-factor)) calc(5px * var(--scale-factor)) rgb(136 136 136);\n    border-radius:calc(2px * var(--scale-factor));\n    outline:1.5px solid rgb(255 255 74);\n    padding:calc(6px * var(--scale-factor));\n    cursor:pointer;\n    font:message-box;\n    white-space:normal;\n    word-wrap:break-word;\n    pointer-events:auto;\n  }\n\n.annotationLayer .popupAnnotation.focused .popup{\n    outline-width:3px;\n  }\n\n.annotationLayer .popup *{\n    font-size:calc(9px * var(--scale-factor));\n  }\n\n.annotationLayer .popup > .header{\n    display:inline-block;\n  }\n\n.annotationLayer .popup > .header h1{\n    display:inline;\n  }\n\n.annotationLayer .popup > .header .popupDate{\n    display:inline-block;\n    margin-left:calc(5px * var(--scale-factor));\n    width:-moz-fit-content;\n    width:fit-content;\n  }\n\n.annotationLayer .popupContent{\n    border-top:1px solid rgb(51 51 51);\n    margin-top:calc(2px * var(--scale-factor));\n    padding-top:calc(2px * var(--scale-factor));\n  }\n\n.annotationLayer .richText > *{\n    white-space:pre-wrap;\n    font-size:calc(9px * var(--scale-factor));\n  }\n\n.annotationLayer .popupTriggerArea{\n    cursor:pointer;\n  }\n\n.annotationLayer section svg{\n    position:absolute;\n    width:100%;\n    height:100%;\n    top:0;\n    left:0;\n  }\n\n.annotationLayer .annotationTextContent{\n    position:absolute;\n    width:100%;\n    height:100%;\n    opacity:0;\n    color:transparent;\n    -webkit-user-select:none;\n       -moz-user-select:none;\n            user-select:none;\n    pointer-events:none;\n  }\n\n.annotationLayer .annotationTextContent span{\n      width:100%;\n      display:inline-block;\n    }\n\n.annotationLayer svg.quadrilateralsContainer{\n    contain:strict;\n    width:0;\n    height:0;\n    position:absolute;\n    top:0;\n    left:0;\n    z-index:-1;\n  }\n\n:root{\n  --xfa-unfocused-field-background:url(\"data:image/svg+xml;charset=UTF-8,<svg width='1px' height='1px' xmlns='http://www.w3.org/2000/svg'><rect width='100%' height='100%' style='fill:rgba(0, 54, 255, 0.13);'/></svg>\");\n  --xfa-focus-outline:auto;\n}\n\n@media screen and (forced-colors: active){\n  :root{\n    --xfa-focus-outline:2px solid CanvasText;\n  }\n  .xfaLayer *:required{\n    outline:1.5px solid selectedItem;\n  }\n}\n\n.xfaLayer{\n  background-color:transparent;\n}\n\n.xfaLayer .highlight{\n  margin:-1px;\n  padding:1px;\n  background-color:rgb(239 203 237);\n  border-radius:4px;\n}\n\n.xfaLayer .highlight.appended{\n  position:initial;\n}\n\n.xfaLayer .highlight.begin{\n  border-radius:4px 0 0 4px;\n}\n\n.xfaLayer .highlight.end{\n  border-radius:0 4px 4px 0;\n}\n\n.xfaLayer .highlight.middle{\n  border-radius:0;\n}\n\n.xfaLayer .highlight.selected{\n  background-color:rgb(203 223 203);\n}\n\n.xfaPage{\n  overflow:hidden;\n  position:relative;\n}\n\n.xfaContentarea{\n  position:absolute;\n}\n\n.xfaPrintOnly{\n  display:none;\n}\n\n.xfaLayer{\n  position:absolute;\n  text-align:initial;\n  top:0;\n  left:0;\n  transform-origin:0 0;\n  line-height:1.2;\n}\n\n.xfaLayer *{\n  color:inherit;\n  font:inherit;\n  font-style:inherit;\n  font-weight:inherit;\n  font-kerning:inherit;\n  letter-spacing:-0.01px;\n  text-align:inherit;\n  text-decoration:inherit;\n  box-sizing:border-box;\n  background-color:transparent;\n  padding:0;\n  margin:0;\n  pointer-events:auto;\n  line-height:inherit;\n}\n\n.xfaLayer *:required{\n  outline:1.5px solid red;\n}\n\n.xfaLayer div,\n.xfaLayer svg,\n.xfaLayer svg *{\n  pointer-events:none;\n}\n\n.xfaLayer a{\n  color:blue;\n}\n\n.xfaRich li{\n  margin-left:3em;\n}\n\n.xfaFont{\n  color:black;\n  font-weight:normal;\n  font-kerning:none;\n  font-size:10px;\n  font-style:normal;\n  letter-spacing:0;\n  text-decoration:none;\n  vertical-align:0;\n}\n\n.xfaCaption{\n  overflow:hidden;\n  flex:0 0 auto;\n}\n\n.xfaCaptionForCheckButton{\n  overflow:hidden;\n  flex:1 1 auto;\n}\n\n.xfaLabel{\n  height:100%;\n  width:100%;\n}\n\n.xfaLeft{\n  display:flex;\n  flex-direction:row;\n  align-items:center;\n}\n\n.xfaRight{\n  display:flex;\n  flex-direction:row-reverse;\n  align-items:center;\n}\n\n:is(.xfaLeft, .xfaRight) > :is(.xfaCaption, .xfaCaptionForCheckButton){\n  max-height:100%;\n}\n\n.xfaTop{\n  display:flex;\n  flex-direction:column;\n  align-items:flex-start;\n}\n\n.xfaBottom{\n  display:flex;\n  flex-direction:column-reverse;\n  align-items:flex-start;\n}\n\n:is(.xfaTop, .xfaBottom) > :is(.xfaCaption, .xfaCaptionForCheckButton){\n  width:100%;\n}\n\n.xfaBorder{\n  background-color:transparent;\n  position:absolute;\n  pointer-events:none;\n}\n\n.xfaWrapped{\n  width:100%;\n  height:100%;\n}\n\n:is(.xfaTextfield, .xfaSelect):focus{\n  background-image:none;\n  background-color:transparent;\n  outline:var(--xfa-focus-outline);\n  outline-offset:-1px;\n}\n\n:is(.xfaCheckbox, .xfaRadio):focus{\n  outline:var(--xfa-focus-outline);\n}\n\n.xfaTextfield,\n.xfaSelect{\n  height:100%;\n  width:100%;\n  flex:1 1 auto;\n  border:none;\n  resize:none;\n  background-image:var(--xfa-unfocused-field-background);\n}\n\n.xfaSelect{\n  padding-inline:2px;\n}\n\n:is(.xfaTop, .xfaBottom) > :is(.xfaTextfield, .xfaSelect){\n  flex:0 1 auto;\n}\n\n.xfaButton{\n  cursor:pointer;\n  width:100%;\n  height:100%;\n  border:none;\n  text-align:center;\n}\n\n.xfaLink{\n  width:100%;\n  height:100%;\n  position:absolute;\n  top:0;\n  left:0;\n}\n\n.xfaCheckbox,\n.xfaRadio{\n  width:100%;\n  height:100%;\n  flex:0 0 auto;\n  border:none;\n}\n\n.xfaRich{\n  white-space:pre-wrap;\n  width:100%;\n  height:100%;\n}\n\n.xfaImage{\n  -o-object-position:left top;\n     object-position:left top;\n  -o-object-fit:contain;\n     object-fit:contain;\n  width:100%;\n  height:100%;\n}\n\n.xfaLrTb,\n.xfaRlTb,\n.xfaTb{\n  display:flex;\n  flex-direction:column;\n  align-items:stretch;\n}\n\n.xfaLr{\n  display:flex;\n  flex-direction:row;\n  align-items:stretch;\n}\n\n.xfaRl{\n  display:flex;\n  flex-direction:row-reverse;\n  align-items:stretch;\n}\n\n.xfaTb > div{\n  justify-content:left;\n}\n\n.xfaPosition{\n  position:relative;\n}\n\n.xfaArea{\n  position:relative;\n}\n\n.xfaValignMiddle{\n  display:flex;\n  align-items:center;\n}\n\n.xfaTable{\n  display:flex;\n  flex-direction:column;\n  align-items:stretch;\n}\n\n.xfaTable .xfaRow{\n  display:flex;\n  flex-direction:row;\n  align-items:stretch;\n}\n\n.xfaTable .xfaRlRow{\n  display:flex;\n  flex-direction:row-reverse;\n  align-items:stretch;\n  flex:1;\n}\n\n.xfaTable .xfaRlRow > div{\n  flex:1;\n}\n\n:is(.xfaNonInteractive, .xfaDisabled, .xfaReadOnly) :is(input, textarea){\n  background:initial;\n}\n\n@media print{\n  .xfaTextfield,\n  .xfaSelect{\n    background:transparent;\n  }\n\n  .xfaSelect{\n    -webkit-appearance:none;\n       -moz-appearance:none;\n            appearance:none;\n    text-indent:1px;\n    text-overflow:\"\";\n  }\n}\n\n.canvasWrapper svg{\n    transform:none;\n  }\n\n.canvasWrapper svg[data-main-rotation=\"90\"] mask,\n      .canvasWrapper svg[data-main-rotation=\"90\"] use:not(.clip, .mask){\n        transform:matrix(0, 1, -1, 0, 1, 0);\n      }\n\n.canvasWrapper svg[data-main-rotation=\"180\"] mask,\n      .canvasWrapper svg[data-main-rotation=\"180\"] use:not(.clip, .mask){\n        transform:matrix(-1, 0, 0, -1, 1, 1);\n      }\n\n.canvasWrapper svg[data-main-rotation=\"270\"] mask,\n      .canvasWrapper svg[data-main-rotation=\"270\"] use:not(.clip, .mask){\n        transform:matrix(0, -1, 1, 0, 0, 1);\n      }\n\n.canvasWrapper svg.highlight{\n      --blend-mode:multiply;\n\n      position:absolute;\n      mix-blend-mode:var(--blend-mode);\n    }\n\n@media screen and (forced-colors: active){\n\n.canvasWrapper svg.highlight{\n        --blend-mode:difference;\n    }\n      }\n\n.canvasWrapper svg.highlight:not(.free){\n        fill-rule:evenodd;\n      }\n\n.canvasWrapper svg.highlightOutline{\n      position:absolute;\n      mix-blend-mode:normal;\n      fill-rule:evenodd;\n      fill:none;\n    }\n\n.canvasWrapper svg.highlightOutline.hovered:not(.free):not(.selected){\n          stroke:var(--hover-outline-color);\n          stroke-width:var(--outline-width);\n        }\n\n.canvasWrapper svg.highlightOutline.selected:not(.free) .mainOutline{\n            stroke:var(--outline-around-color);\n            stroke-width:calc(\n              var(--outline-width) + 2 * var(--outline-around-width)\n            );\n          }\n\n.canvasWrapper svg.highlightOutline.selected:not(.free) .secondaryOutline{\n            stroke:var(--outline-color);\n            stroke-width:var(--outline-width);\n          }\n\n.canvasWrapper svg.highlightOutline.free.hovered:not(.selected){\n          stroke:var(--hover-outline-color);\n          stroke-width:calc(2 * var(--outline-width));\n        }\n\n.canvasWrapper svg.highlightOutline.free.selected .mainOutline{\n            stroke:var(--outline-around-color);\n            stroke-width:calc(\n              2 * (var(--outline-width) + var(--outline-around-width))\n            );\n          }\n\n.canvasWrapper svg.highlightOutline.free.selected .secondaryOutline{\n            stroke:var(--outline-color);\n            stroke-width:calc(2 * var(--outline-width));\n          }\n\n.toggle-button{\n  --button-background-color:#f0f0f4;\n  --button-background-color-hover:#e0e0e6;\n  --button-background-color-active:#cfcfd8;\n  --color-accent-primary:#0060df;\n  --color-accent-primary-hover:#0250bb;\n  --color-accent-primary-active:#054096;\n  --border-interactive-color:#8f8f9d;\n  --border-radius-circle:9999px;\n  --border-width:1px;\n  --size-item-small:16px;\n  --size-item-large:32px;\n  --color-canvas:white;\n\n  --toggle-background-color:var(--button-background-color);\n  --toggle-background-color-hover:var(--button-background-color-hover);\n  --toggle-background-color-active:var(--button-background-color-active);\n  --toggle-background-color-pressed:var(--color-accent-primary);\n  --toggle-background-color-pressed-hover:var(--color-accent-primary-hover);\n  --toggle-background-color-pressed-active:var(--color-accent-primary-active);\n  --toggle-border-color:var(--border-interactive-color);\n  --toggle-border-color-hover:var(--toggle-border-color);\n  --toggle-border-color-active:var(--toggle-border-color);\n  --toggle-border-radius:var(--border-radius-circle);\n  --toggle-border-width:var(--border-width);\n  --toggle-height:var(--size-item-small);\n  --toggle-width:var(--size-item-large);\n  --toggle-dot-background-color:var(--toggle-border-color);\n  --toggle-dot-background-color-hover:var(--toggle-dot-background-color);\n  --toggle-dot-background-color-active:var(--toggle-dot-background-color);\n  --toggle-dot-background-color-on-pressed:var(--color-canvas);\n  --toggle-dot-margin:1px;\n  --toggle-dot-height:calc(\n    var(--toggle-height) - 2 * var(--toggle-dot-margin) - 2 *\n      var(--toggle-border-width)\n  );\n  --toggle-dot-width:var(--toggle-dot-height);\n  --toggle-dot-transform-x:calc(\n    var(--toggle-width) - 4 * var(--toggle-dot-margin) - var(--toggle-dot-width)\n  );\n\n  -webkit-appearance:none;\n\n     -moz-appearance:none;\n\n          appearance:none;\n  padding:0;\n  margin:0;\n  border:var(--toggle-border-width) solid var(--toggle-border-color);\n  height:var(--toggle-height);\n  width:var(--toggle-width);\n  border-radius:var(--toggle-border-radius);\n  background:var(--toggle-background-color);\n  box-sizing:border-box;\n  flex-shrink:0;\n}\n\n@media (prefers-color-scheme: dark){\n\n:where(html:not(.is-light)) .toggle-button{\n    --button-background-color:color-mix(in srgb, currentColor 7%, transparent);\n    --button-background-color-hover:color-mix(\n      in srgb,\n      currentColor 14%,\n      transparent\n    );\n    --button-background-color-active:color-mix(\n      in srgb,\n      currentColor 21%,\n      transparent\n    );\n    --color-accent-primary:#0df;\n    --color-accent-primary-hover:#80ebff;\n    --color-accent-primary-active:#aaf2ff;\n    --border-interactive-color:#bfbfc9;\n    --color-canvas:#1c1b22;\n}\n  }\n\n:where(html.is-dark) .toggle-button{\n    --button-background-color:color-mix(in srgb, currentColor 7%, transparent);\n    --button-background-color-hover:color-mix(\n      in srgb,\n      currentColor 14%,\n      transparent\n    );\n    --button-background-color-active:color-mix(\n      in srgb,\n      currentColor 21%,\n      transparent\n    );\n    --color-accent-primary:#0df;\n    --color-accent-primary-hover:#80ebff;\n    --color-accent-primary-active:#aaf2ff;\n    --border-interactive-color:#bfbfc9;\n    --color-canvas:#1c1b22;\n}\n\n@media (forced-colors: active){\n\n.toggle-button{\n    --color-accent-primary:ButtonText;\n    --color-accent-primary-hover:SelectedItem;\n    --color-accent-primary-active:SelectedItem;\n    --border-interactive-color:ButtonText;\n    --button-background-color:ButtonFace;\n    --border-interactive-color-hover:SelectedItem;\n    --border-interactive-color-active:SelectedItem;\n    --border-interactive-color-disabled:GrayText;\n    --color-canvas:ButtonText;\n}\n  }\n\n.toggle-button:focus-visible{\n    outline:var(--focus-outline);\n    outline-offset:var(--focus-outline-offset);\n  }\n\n.toggle-button:enabled:hover{\n    background:var(--toggle-background-color-hover);\n    border-color:var(--toggle-border-color);\n  }\n\n.toggle-button:enabled:active{\n    background:var(--toggle-background-color-active);\n    border-color:var(--toggle-border-color);\n  }\n\n.toggle-button[aria-pressed=\"true\"]{\n    background:var(--toggle-background-color-pressed);\n    border-color:transparent;\n  }\n\n.toggle-button[aria-pressed=\"true\"]:enabled:hover{\n    background:var(--toggle-background-color-pressed-hover);\n    border-color:transparent;\n  }\n\n.toggle-button[aria-pressed=\"true\"]:enabled:active{\n    background:var(--toggle-background-color-pressed-active);\n    border-color:transparent;\n  }\n\n.toggle-button::before{\n    display:block;\n    content:\"\";\n    background-color:var(--toggle-dot-background-color);\n    height:var(--toggle-dot-height);\n    width:var(--toggle-dot-width);\n    margin:var(--toggle-dot-margin);\n    border-radius:var(--toggle-border-radius);\n    translate:0;\n  }\n\n.toggle-button[aria-pressed=\"true\"]::before{\n    translate:var(--toggle-dot-transform-x);\n    background-color:var(--toggle-dot-background-color-on-pressed);\n  }\n\n.toggle-button[aria-pressed=\"true\"]:enabled:hover::before,\n  .toggle-button[aria-pressed=\"true\"]:enabled:active::before{\n    background-color:var(--toggle-dot-background-color-on-pressed);\n  }\n\n[dir=\"rtl\"] .toggle-button[aria-pressed=\"true\"]::before{\n    translate:calc(-1 * var(--toggle-dot-transform-x));\n  }\n\n@media (prefers-reduced-motion: no-preference){\n    .toggle-button::before{\n      transition:translate 100ms;\n    }\n  }\n\n@media (prefers-contrast){\n    .toggle-button:enabled:hover{\n      border-color:var(--toggle-border-color-hover);\n    }\n\n    .toggle-button:enabled:active{\n      border-color:var(--toggle-border-color-active);\n    }\n\n    .toggle-button[aria-pressed=\"true\"]:enabled{\n      border-color:var(--toggle-border-color);\n      position:relative;\n    }\n\n    .toggle-button[aria-pressed=\"true\"]:enabled:hover,\n    .toggle-button[aria-pressed=\"true\"]:enabled:hover:active{\n      border-color:var(--toggle-border-color-hover);\n    }\n\n    .toggle-button[aria-pressed=\"true\"]:enabled:active{\n      background-color:var(--toggle-dot-background-color-active);\n      border-color:var(--toggle-dot-background-color-hover);\n    }\n\n    .toggle-button:hover::before,\n    .toggle-button:active::before{\n      background-color:var(--toggle-dot-background-color-hover);\n    }\n  }\n\n@media (forced-colors){\n\n.toggle-button{\n    --toggle-dot-background-color:var(--color-accent-primary);\n    --toggle-dot-background-color-hover:var(--color-accent-primary-hover);\n    --toggle-dot-background-color-active:var(--color-accent-primary-active);\n    --toggle-dot-background-color-on-pressed:var(--button-background-color);\n    --toggle-background-color-disabled:var(--button-background-color-disabled);\n    --toggle-border-color-hover:var(--border-interactive-color-hover);\n    --toggle-border-color-active:var(--border-interactive-color-active);\n    --toggle-border-color-disabled:var(--border-interactive-color-disabled);\n}\n\n    .toggle-button[aria-pressed=\"true\"]:enabled::after{\n      border:1px solid var(--button-background-color);\n      content:\"\";\n      position:absolute;\n      height:var(--toggle-height);\n      width:var(--toggle-width);\n      display:block;\n      border-radius:var(--toggle-border-radius);\n      inset:-2px;\n    }\n\n    .toggle-button[aria-pressed=\"true\"]:enabled:active::after{\n      border-color:var(--toggle-border-color-active);\n    }\n  }\n\n:root{\n  --outline-width:2px;\n  --outline-color:#0060df;\n  --outline-around-width:1px;\n  --outline-around-color:#f0f0f4;\n  --hover-outline-around-color:var(--outline-around-color);\n  --focus-outline:solid var(--outline-width) var(--outline-color);\n  --unfocus-outline:solid var(--outline-width) transparent;\n  --focus-outline-around:solid var(--outline-around-width) var(--outline-around-color);\n  --hover-outline-color:#8f8f9d;\n  --hover-outline:solid var(--outline-width) var(--hover-outline-color);\n  --hover-outline-around:solid var(--outline-around-width) var(--hover-outline-around-color);\n  --freetext-line-height:1.35;\n  --freetext-padding:2px;\n  --resizer-bg-color:var(--outline-color);\n  --resizer-size:6px;\n  --resizer-shift:calc(\n    0px - (var(--outline-width) + var(--resizer-size)) / 2 -\n      var(--outline-around-width)\n  );\n  --editorFreeText-editing-cursor:text;\n  --editorInk-editing-cursor:url(images/cursor-editorInk.svg) 0 16, pointer;\n  --editorHighlight-editing-cursor:url(images/cursor-editorTextHighlight.svg) 24 24, text;\n  --editorFreeHighlight-editing-cursor:url(images/cursor-editorFreeHighlight.svg) 1 18, pointer;\n}\n.visuallyHidden{\n  position:absolute;\n  top:0;\n  left:0;\n  border:0;\n  margin:0;\n  padding:0;\n  width:0;\n  height:0;\n  overflow:hidden;\n  white-space:nowrap;\n  font-size:0;\n}\n\n.textLayer.highlighting{\n  cursor:var(--editorFreeHighlight-editing-cursor);\n}\n\n.textLayer.highlighting:not(.free) span{\n    cursor:var(--editorHighlight-editing-cursor);\n  }\n\n.textLayer.highlighting.free span{\n    cursor:var(--editorFreeHighlight-editing-cursor);\n  }\n\n@media (min-resolution: 1.1dppx){\n  :root{\n    --editorFreeText-editing-cursor:url(images/cursor-editorFreeText.svg) 0 16, text;\n  }\n}\n\n@media screen and (forced-colors: active){\n  :root{\n    --outline-color:CanvasText;\n    --outline-around-color:ButtonFace;\n    --resizer-bg-color:ButtonText;\n    --hover-outline-color:Highlight;\n    --hover-outline-around-color:SelectedItemText;\n  }\n}\n\n[data-editor-rotation=\"90\"]{\n  transform:rotate(90deg);\n}\n\n[data-editor-rotation=\"180\"]{\n  transform:rotate(180deg);\n}\n\n[data-editor-rotation=\"270\"]{\n  transform:rotate(270deg);\n}\n\n.annotationEditorLayer{\n  background:transparent;\n  position:absolute;\n  inset:0;\n  font-size:calc(100px * var(--scale-factor));\n  transform-origin:0 0;\n  cursor:auto;\n}\n\n.annotationEditorLayer.waiting{\n  content:\"\";\n  cursor:wait;\n  position:absolute;\n  inset:0;\n  width:100%;\n  height:100%;\n}\n\n.annotationEditorLayer.disabled{\n  pointer-events:none;\n}\n\n.annotationEditorLayer.freetextEditing{\n  cursor:var(--editorFreeText-editing-cursor);\n}\n\n.annotationEditorLayer.inkEditing{\n  cursor:var(--editorInk-editing-cursor);\n}\n\n.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor){\n  position:absolute;\n  background:transparent;\n  z-index:1;\n  transform-origin:0 0;\n  cursor:auto;\n  max-width:100%;\n  max-height:100%;\n  border:var(--unfocus-outline);\n}\n\n.annotationEditorLayer .draggable.selectedEditor:is(.freeTextEditor, .inkEditor, .stampEditor){\n    cursor:move;\n  }\n\n.annotationEditorLayer .moving:is(.freeTextEditor, .inkEditor, .stampEditor){\n    touch-action:none;\n  }\n\n.annotationEditorLayer .selectedEditor:is(.freeTextEditor, .inkEditor, .stampEditor){\n    border:var(--focus-outline);\n    outline:var(--focus-outline-around);\n  }\n\n.annotationEditorLayer .selectedEditor:is(.freeTextEditor, .inkEditor, .stampEditor)::before{\n      content:\"\";\n      position:absolute;\n      inset:0;\n      border:var(--focus-outline-around);\n      pointer-events:none;\n    }\n\n.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor):hover:not(.selectedEditor){\n    border:var(--hover-outline);\n    outline:var(--hover-outline-around);\n  }\n\n.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor):hover:not(.selectedEditor)::before{\n      content:\"\";\n      position:absolute;\n      inset:0;\n      border:var(--focus-outline-around);\n    }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar{\n    --editor-toolbar-delete-image:url(images/editor-toolbar-delete.svg);\n    --editor-toolbar-bg-color:#f0f0f4;\n    --editor-toolbar-highlight-image:url(images/toolbarButton-editorHighlight.svg);\n    --editor-toolbar-fg-color:#2e2e56;\n    --editor-toolbar-border-color:#8f8f9d;\n    --editor-toolbar-hover-border-color:var(--editor-toolbar-border-color);\n    --editor-toolbar-hover-bg-color:#e0e0e6;\n    --editor-toolbar-hover-fg-color:var(--editor-toolbar-fg-color);\n    --editor-toolbar-hover-outline:none;\n    --editor-toolbar-focus-outline-color:#0060df;\n    --editor-toolbar-shadow:0 2px 6px 0 rgb(58 57 68 / 0.2);\n    --editor-toolbar-vert-offset:6px;\n    --editor-toolbar-height:28px;\n    --editor-toolbar-padding:2px;\n\n    display:flex;\n    width:-moz-fit-content;\n    width:fit-content;\n    height:var(--editor-toolbar-height);\n    flex-direction:column;\n    justify-content:center;\n    align-items:center;\n    cursor:default;\n    pointer-events:auto;\n    box-sizing:content-box;\n    padding:var(--editor-toolbar-padding);\n\n    position:absolute;\n    inset-inline-end:0;\n    inset-block-start:calc(100% + var(--editor-toolbar-vert-offset));\n\n    border-radius:6px;\n    background-color:var(--editor-toolbar-bg-color);\n    border:1px solid var(--editor-toolbar-border-color);\n    box-shadow:var(--editor-toolbar-shadow);\n  }\n\n@media (prefers-color-scheme: dark){\n\n:where(html:not(.is-light)) :is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar{\n      --editor-toolbar-bg-color:#2b2a33;\n      --editor-toolbar-fg-color:#fbfbfe;\n      --editor-toolbar-hover-bg-color:#52525e;\n      --editor-toolbar-focus-outline-color:#0df;\n  }\n    }\n\n:where(html.is-dark) :is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar{\n      --editor-toolbar-bg-color:#2b2a33;\n      --editor-toolbar-fg-color:#fbfbfe;\n      --editor-toolbar-hover-bg-color:#52525e;\n      --editor-toolbar-focus-outline-color:#0df;\n  }\n\n@media screen and (forced-colors: active){\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar{\n      --editor-toolbar-bg-color:ButtonFace;\n      --editor-toolbar-fg-color:ButtonText;\n      --editor-toolbar-border-color:ButtonText;\n      --editor-toolbar-hover-border-color:AccentColor;\n      --editor-toolbar-hover-bg-color:ButtonFace;\n      --editor-toolbar-hover-fg-color:AccentColor;\n      --editor-toolbar-hover-outline:2px solid var(--editor-toolbar-hover-border-color);\n      --editor-toolbar-focus-outline-color:ButtonBorder;\n      --editor-toolbar-shadow:none;\n  }\n    }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar.hidden{\n      display:none;\n    }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar:has(:focus-visible){\n      border-color:transparent;\n    }\n\n[dir=\"ltr\"] :is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar{\n      transform-origin:100% 0;\n    }\n\n[dir=\"rtl\"] :is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar{\n      transform-origin:0 0;\n    }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons{\n      display:flex;\n      justify-content:center;\n      align-items:center;\n      gap:0;\n      height:100%;\n    }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons .divider{\n        width:1px;\n        height:calc(\n          2 * var(--editor-toolbar-padding) + var(--editor-toolbar-height)\n        );\n        background-color:var(--editor-toolbar-border-color);\n        display:inline-block;\n        margin-inline:2px;\n      }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons .highlightButton{\n        width:var(--editor-toolbar-height);\n      }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons .highlightButton::before{\n          content:\"\";\n          -webkit-mask-image:var(--editor-toolbar-highlight-image);\n                  mask-image:var(--editor-toolbar-highlight-image);\n          -webkit-mask-repeat:no-repeat;\n                  mask-repeat:no-repeat;\n          -webkit-mask-position:center;\n                  mask-position:center;\n          display:inline-block;\n          background-color:var(--editor-toolbar-fg-color);\n          width:100%;\n          height:100%;\n        }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons .highlightButton:hover::before{\n          background-color:var(--editor-toolbar-hover-fg-color);\n        }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons .delete{\n        width:var(--editor-toolbar-height);\n      }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons .delete::before{\n          content:\"\";\n          -webkit-mask-image:var(--editor-toolbar-delete-image);\n                  mask-image:var(--editor-toolbar-delete-image);\n          -webkit-mask-repeat:no-repeat;\n                  mask-repeat:no-repeat;\n          -webkit-mask-position:center;\n                  mask-position:center;\n          display:inline-block;\n          background-color:var(--editor-toolbar-fg-color);\n          width:100%;\n          height:100%;\n        }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons .delete:hover::before{\n          background-color:var(--editor-toolbar-hover-fg-color);\n        }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons > *{\n        height:var(--editor-toolbar-height);\n      }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons > :not(.divider){\n        border:none;\n        background-color:transparent;\n        cursor:pointer;\n      }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons > :not(.divider):hover{\n          border-radius:2px;\n          background-color:var(--editor-toolbar-hover-bg-color);\n          color:var(--editor-toolbar-hover-fg-color);\n          outline:var(--editor-toolbar-hover-outline);\n          outline-offset:1px;\n        }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons > :not(.divider):hover:active{\n            outline:none;\n          }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons > :not(.divider):focus-visible{\n          border-radius:2px;\n          outline:2px solid var(--editor-toolbar-focus-outline-color);\n        }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons .altText{\n        --alt-text-add-image:url(images/altText_add.svg);\n        --alt-text-done-image:url(images/altText_done.svg);\n\n        display:flex;\n        align-items:center;\n        justify-content:center;\n        width:-moz-max-content;\n        width:max-content;\n        padding-inline:8px;\n        pointer-events:all;\n        font:menu;\n        font-weight:590;\n        font-size:12px;\n        color:var(--editor-toolbar-fg-color);\n      }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons .altText:disabled{\n          pointer-events:none;\n        }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons .altText::before{\n          content:\"\";\n          -webkit-mask-image:var(--alt-text-add-image);\n                  mask-image:var(--alt-text-add-image);\n          -webkit-mask-repeat:no-repeat;\n                  mask-repeat:no-repeat;\n          -webkit-mask-position:center;\n                  mask-position:center;\n          display:inline-block;\n          width:12px;\n          height:13px;\n          background-color:var(--editor-toolbar-fg-color);\n          margin-inline-end:4px;\n        }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons .altText:hover::before{\n          background-color:var(--editor-toolbar-hover-fg-color);\n        }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons .altText.done::before{\n          -webkit-mask-image:var(--alt-text-done-image);\n                  mask-image:var(--alt-text-done-image);\n        }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons .altText .tooltip{\n          display:none;\n        }\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons .altText .tooltip.show{\n            --alt-text-tooltip-bg:#f0f0f4;\n            --alt-text-tooltip-fg:#15141a;\n            --alt-text-tooltip-border:#8f8f9d;\n            --alt-text-tooltip-shadow:0px 2px 6px 0px rgb(58 57 68 / 0.2);\n\n            display:inline-flex;\n            flex-direction:column;\n            align-items:center;\n            justify-content:center;\n            position:absolute;\n            top:calc(100% + 2px);\n            inset-inline-start:0;\n            padding-block:2px 3px;\n            padding-inline:3px;\n            max-width:300px;\n            width:-moz-max-content;\n            width:max-content;\n            height:auto;\n            font-size:12px;\n\n            border:0.5px solid var(--alt-text-tooltip-border);\n            background:var(--alt-text-tooltip-bg);\n            box-shadow:var(--alt-text-tooltip-shadow);\n            color:var(--alt-text-tooltip-fg);\n\n            pointer-events:none;\n          }\n\n@media (prefers-color-scheme: dark){\n\n:where(html:not(.is-light)) :is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons .altText .tooltip.show{\n              --alt-text-tooltip-bg:#1c1b22;\n              --alt-text-tooltip-fg:#fbfbfe;\n              --alt-text-tooltip-shadow:0px 2px 6px 0px #15141a;\n          }\n            }\n\n:where(html.is-dark) :is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons .altText .tooltip.show{\n              --alt-text-tooltip-bg:#1c1b22;\n              --alt-text-tooltip-fg:#fbfbfe;\n              --alt-text-tooltip-shadow:0px 2px 6px 0px #15141a;\n          }\n\n@media screen and (forced-colors: active){\n\n:is(.annotationEditorLayer\n  :is(.freeTextEditor, .inkEditor, .stampEditor, .highlightEditor),.textLayer) .editToolbar .buttons .altText .tooltip.show{\n              --alt-text-tooltip-bg:Canvas;\n              --alt-text-tooltip-fg:CanvasText;\n              --alt-text-tooltip-border:CanvasText;\n              --alt-text-tooltip-shadow:none;\n          }\n            }\n\n.annotationEditorLayer .freeTextEditor{\n  padding:calc(var(--freetext-padding) * var(--scale-factor));\n  width:auto;\n  height:auto;\n  touch-action:none;\n}\n\n.annotationEditorLayer .freeTextEditor .internal{\n  background:transparent;\n  border:none;\n  inset:0;\n  overflow:visible;\n  white-space:nowrap;\n  font:10px sans-serif;\n  line-height:var(--freetext-line-height);\n  -webkit-user-select:none;\n     -moz-user-select:none;\n          user-select:none;\n}\n\n.annotationEditorLayer .freeTextEditor .overlay{\n  position:absolute;\n  display:none;\n  background:transparent;\n  inset:0;\n  width:100%;\n  height:100%;\n}\n\n.annotationEditorLayer freeTextEditor .overlay.enabled{\n  display:block;\n}\n\n.annotationEditorLayer .freeTextEditor .internal:empty::before{\n  content:attr(default-content);\n  color:gray;\n}\n\n.annotationEditorLayer .freeTextEditor .internal:focus{\n  outline:none;\n  -webkit-user-select:auto;\n     -moz-user-select:auto;\n          user-select:auto;\n}\n\n.annotationEditorLayer .inkEditor{\n  width:100%;\n  height:100%;\n}\n\n.annotationEditorLayer .inkEditor.editing{\n  cursor:inherit;\n}\n\n.annotationEditorLayer .inkEditor .inkEditorCanvas{\n  position:absolute;\n  inset:0;\n  width:100%;\n  height:100%;\n  touch-action:none;\n}\n\n.annotationEditorLayer .stampEditor{\n  width:auto;\n  height:auto;\n}\n\n.annotationEditorLayer .stampEditor canvas{\n    position:absolute;\n    width:100%;\n    height:100%;\n    margin:0;\n  }\n\n.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) > .resizers{\n      position:absolute;\n      inset:0;\n    }\n\n.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) > .resizers.hidden{\n        display:none;\n      }\n\n.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) > .resizers > .resizer{\n        width:var(--resizer-size);\n        height:var(--resizer-size);\n        background:content-box var(--resizer-bg-color);\n        border:var(--focus-outline-around);\n        border-radius:2px;\n        position:absolute;\n      }\n\n.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) > .resizers > .resizer.topLeft{\n          top:var(--resizer-shift);\n          left:var(--resizer-shift);\n        }\n\n.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) > .resizers > .resizer.topMiddle{\n          top:var(--resizer-shift);\n          left:calc(50% + var(--resizer-shift));\n        }\n\n.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) > .resizers > .resizer.topRight{\n          top:var(--resizer-shift);\n          right:var(--resizer-shift);\n        }\n\n.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) > .resizers > .resizer.middleRight{\n          top:calc(50% + var(--resizer-shift));\n          right:var(--resizer-shift);\n        }\n\n.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) > .resizers > .resizer.bottomRight{\n          bottom:var(--resizer-shift);\n          right:var(--resizer-shift);\n        }\n\n.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) > .resizers > .resizer.bottomMiddle{\n          bottom:var(--resizer-shift);\n          left:calc(50% + var(--resizer-shift));\n        }\n\n.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) > .resizers > .resizer.bottomLeft{\n          bottom:var(--resizer-shift);\n          left:var(--resizer-shift);\n        }\n\n.annotationEditorLayer :is(.freeTextEditor, .inkEditor, .stampEditor) > .resizers > .resizer.middleLeft{\n          top:calc(50% + var(--resizer-shift));\n          left:var(--resizer-shift);\n        }\n\n.annotationEditorLayer[data-main-rotation=\"0\"]\n    :is([data-editor-rotation=\"0\"], [data-editor-rotation=\"180\"]) > .resizers > .resizer.topLeft,\n      .annotationEditorLayer[data-main-rotation=\"90\"]\n    :is([data-editor-rotation=\"270\"], [data-editor-rotation=\"90\"]) > .resizers > .resizer.topLeft,\n      .annotationEditorLayer[data-main-rotation=\"180\"]\n    :is([data-editor-rotation=\"180\"], [data-editor-rotation=\"0\"]) > .resizers > .resizer.topLeft,\n      .annotationEditorLayer[data-main-rotation=\"270\"]\n    :is([data-editor-rotation=\"90\"], [data-editor-rotation=\"270\"]) > .resizers > .resizer.topLeft,\n      .annotationEditorLayer[data-main-rotation=\"0\"]\n    :is([data-editor-rotation=\"0\"], [data-editor-rotation=\"180\"]) > .resizers > .resizer.bottomRight,\n      .annotationEditorLayer[data-main-rotation=\"90\"]\n    :is([data-editor-rotation=\"270\"], [data-editor-rotation=\"90\"]) > .resizers > .resizer.bottomRight,\n      .annotationEditorLayer[data-main-rotation=\"180\"]\n    :is([data-editor-rotation=\"180\"], [data-editor-rotation=\"0\"]) > .resizers > .resizer.bottomRight,\n      .annotationEditorLayer[data-main-rotation=\"270\"]\n    :is([data-editor-rotation=\"90\"], [data-editor-rotation=\"270\"]) > .resizers > .resizer.bottomRight{\n        cursor:nwse-resize;\n      }\n\n.annotationEditorLayer[data-main-rotation=\"0\"]\n    :is([data-editor-rotation=\"0\"], [data-editor-rotation=\"180\"]) > .resizers > .resizer.topMiddle,\n      .annotationEditorLayer[data-main-rotation=\"90\"]\n    :is([data-editor-rotation=\"270\"], [data-editor-rotation=\"90\"]) > .resizers > .resizer.topMiddle,\n      .annotationEditorLayer[data-main-rotation=\"180\"]\n    :is([data-editor-rotation=\"180\"], [data-editor-rotation=\"0\"]) > .resizers > .resizer.topMiddle,\n      .annotationEditorLayer[data-main-rotation=\"270\"]\n    :is([data-editor-rotation=\"90\"], [data-editor-rotation=\"270\"]) > .resizers > .resizer.topMiddle,\n      .annotationEditorLayer[data-main-rotation=\"0\"]\n    :is([data-editor-rotation=\"0\"], [data-editor-rotation=\"180\"]) > .resizers > .resizer.bottomMiddle,\n      .annotationEditorLayer[data-main-rotation=\"90\"]\n    :is([data-editor-rotation=\"270\"], [data-editor-rotation=\"90\"]) > .resizers > .resizer.bottomMiddle,\n      .annotationEditorLayer[data-main-rotation=\"180\"]\n    :is([data-editor-rotation=\"180\"], [data-editor-rotation=\"0\"]) > .resizers > .resizer.bottomMiddle,\n      .annotationEditorLayer[data-main-rotation=\"270\"]\n    :is([data-editor-rotation=\"90\"], [data-editor-rotation=\"270\"]) > .resizers > .resizer.bottomMiddle{\n        cursor:ns-resize;\n      }\n\n.annotationEditorLayer[data-main-rotation=\"0\"]\n    :is([data-editor-rotation=\"0\"], [data-editor-rotation=\"180\"]) > .resizers > .resizer.topRight,\n      .annotationEditorLayer[data-main-rotation=\"90\"]\n    :is([data-editor-rotation=\"270\"], [data-editor-rotation=\"90\"]) > .resizers > .resizer.topRight,\n      .annotationEditorLayer[data-main-rotation=\"180\"]\n    :is([data-editor-rotation=\"180\"], [data-editor-rotation=\"0\"]) > .resizers > .resizer.topRight,\n      .annotationEditorLayer[data-main-rotation=\"270\"]\n    :is([data-editor-rotation=\"90\"], [data-editor-rotation=\"270\"]) > .resizers > .resizer.topRight,\n      .annotationEditorLayer[data-main-rotation=\"0\"]\n    :is([data-editor-rotation=\"0\"], [data-editor-rotation=\"180\"]) > .resizers > .resizer.bottomLeft,\n      .annotationEditorLayer[data-main-rotation=\"90\"]\n    :is([data-editor-rotation=\"270\"], [data-editor-rotation=\"90\"]) > .resizers > .resizer.bottomLeft,\n      .annotationEditorLayer[data-main-rotation=\"180\"]\n    :is([data-editor-rotation=\"180\"], [data-editor-rotation=\"0\"]) > .resizers > .resizer.bottomLeft,\n      .annotationEditorLayer[data-main-rotation=\"270\"]\n    :is([data-editor-rotation=\"90\"], [data-editor-rotation=\"270\"]) > .resizers > .resizer.bottomLeft{\n        cursor:nesw-resize;\n      }\n\n.annotationEditorLayer[data-main-rotation=\"0\"]\n    :is([data-editor-rotation=\"0\"], [data-editor-rotation=\"180\"]) > .resizers > .resizer.middleRight,\n      .annotationEditorLayer[data-main-rotation=\"90\"]\n    :is([data-editor-rotation=\"270\"], [data-editor-rotation=\"90\"]) > .resizers > .resizer.middleRight,\n      .annotationEditorLayer[data-main-rotation=\"180\"]\n    :is([data-editor-rotation=\"180\"], [data-editor-rotation=\"0\"]) > .resizers > .resizer.middleRight,\n      .annotationEditorLayer[data-main-rotation=\"270\"]\n    :is([data-editor-rotation=\"90\"], [data-editor-rotation=\"270\"]) > .resizers > .resizer.middleRight,\n      .annotationEditorLayer[data-main-rotation=\"0\"]\n    :is([data-editor-rotation=\"0\"], [data-editor-rotation=\"180\"]) > .resizers > .resizer.middleLeft,\n      .annotationEditorLayer[data-main-rotation=\"90\"]\n    :is([data-editor-rotation=\"270\"], [data-editor-rotation=\"90\"]) > .resizers > .resizer.middleLeft,\n      .annotationEditorLayer[data-main-rotation=\"180\"]\n    :is([data-editor-rotation=\"180\"], [data-editor-rotation=\"0\"]) > .resizers > .resizer.middleLeft,\n      .annotationEditorLayer[data-main-rotation=\"270\"]\n    :is([data-editor-rotation=\"90\"], [data-editor-rotation=\"270\"]) > .resizers > .resizer.middleLeft{\n        cursor:ew-resize;\n      }\n\n.annotationEditorLayer[data-main-rotation=\"0\"]\n    :is([data-editor-rotation=\"90\"], [data-editor-rotation=\"270\"]) > .resizers > .resizer.topLeft,\n      .annotationEditorLayer[data-main-rotation=\"90\"]\n    :is([data-editor-rotation=\"0\"], [data-editor-rotation=\"180\"]) > .resizers > .resizer.topLeft,\n      .annotationEditorLayer[data-main-rotation=\"180\"]\n    :is([data-editor-rotation=\"270\"], [data-editor-rotation=\"90\"]) > .resizers > .resizer.topLeft,\n      .annotationEditorLayer[data-main-rotation=\"270\"]\n    :is([data-editor-rotation=\"180\"], [data-editor-rotation=\"0\"]) > .resizers > .resizer.topLeft,\n      .annotationEditorLayer[data-main-rotation=\"0\"]\n    :is([data-editor-rotation=\"90\"], [data-editor-rotation=\"270\"]) > .resizers > .resizer.bottomRight,\n      .annotationEditorLayer[data-main-rotation=\"90\"]\n    :is([data-editor-rotation=\"0\"], [data-editor-rotation=\"180\"]) > .resizers > .resizer.bottomRight,\n      .annotationEditorLayer[data-main-rotation=\"180\"]\n    :is([data-editor-rotation=\"270\"], [data-editor-rotation=\"90\"]) > .resizers > .resizer.bottomRight,\n      .annotationEditorLayer[data-main-rotation=\"270\"]\n    :is([data-editor-rotation=\"180\"], [data-editor-rotation=\"0\"]) > .resizers > .resizer.bottomRight{\n        cursor:nesw-resize;\n      }\n\n.annotationEditorLayer[data-main-rotation=\"0\"]\n    :is([data-editor-rotation=\"90\"], [data-editor-rotation=\"270\"]) > .resizers > .resizer.topMiddle,\n      .annotationEditorLayer[data-main-rotation=\"90\"]\n    :is([data-editor-rotation=\"0\"], [data-editor-rotation=\"180\"]) > .resizers > .resizer.topMiddle,\n      .annotationEditorLayer[data-main-rotation=\"180\"]\n    :is([data-editor-rotation=\"270\"], [data-editor-rotation=\"90\"]) > .resizers > .resizer.topMiddle,\n      .annotationEditorLayer[data-main-rotation=\"270\"]\n    :is([data-editor-rotation=\"180\"], [data-editor-rotation=\"0\"]) > .resizers > .resizer.topMiddle,\n      .annotationEditorLayer[data-main-rotation=\"0\"]\n    :is([data-editor-rotation=\"90\"], [data-editor-rotation=\"270\"]) > .resizers > .resizer.bottomMiddle,\n      .annotationEditorLayer[data-main-rotation=\"90\"]\n    :is([data-editor-rotation=\"0\"], [data-editor-rotation=\"180\"]) > .resizers > .resizer.bottomMiddle,\n      .annotationEditorLayer[data-main-rotation=\"180\"]\n    :is([data-editor-rotation=\"270\"], [data-editor-rotation=\"90\"]) > .resizers > .resizer.bottomMiddle,\n      .annotationEditorLayer[data-main-rotation=\"270\"]\n    :is([data-editor-rotation=\"180\"], [data-editor-rotation=\"0\"]) > .resizers > .resizer.bottomMiddle{\n        cursor:ew-resize;\n      }\n\n.annotationEditorLayer[data-main-rotation=\"0\"]\n    :is([data-editor-rotation=\"90\"], [data-editor-rotation=\"270\"]) > .resizers > .resizer.topRight,\n      .annotationEditorLayer[data-main-rotation=\"90\"]\n    :is([data-editor-rotation=\"0\"], [data-editor-rotation=\"180\"]) > .resizers > .resizer.topRight,\n      .annotationEditorLayer[data-main-rotation=\"180\"]\n    :is([data-editor-rotation=\"270\"], [data-editor-rotation=\"90\"]) > .resizers > .resizer.topRight,\n      .annotationEditorLayer[data-main-rotation=\"270\"]\n    :is([data-editor-rotation=\"180\"], [data-editor-rotation=\"0\"]) > .resizers > .resizer.topRight,\n      .annotationEditorLayer[data-main-rotation=\"0\"]\n    :is([data-editor-rotation=\"90\"], [data-editor-rotation=\"270\"]) > .resizers > .resizer.bottomLeft,\n      .annotationEditorLayer[data-main-rotation=\"90\"]\n    :is([data-editor-rotation=\"0\"], [data-editor-rotation=\"180\"]) > .resizers > .resizer.bottomLeft,\n      .annotationEditorLayer[data-main-rotation=\"180\"]\n    :is([data-editor-rotation=\"270\"], [data-editor-rotation=\"90\"]) > .resizers > .resizer.bottomLeft,\n      .annotationEditorLayer[data-main-rotation=\"270\"]\n    :is([data-editor-rotation=\"180\"], [data-editor-rotation=\"0\"]) > .resizers > .resizer.bottomLeft{\n        cursor:nwse-resize;\n      }\n\n.annotationEditorLayer[data-main-rotation=\"0\"]\n    :is([data-editor-rotation=\"90\"], [data-editor-rotation=\"270\"]) > .resizers > .resizer.middleRight,\n      .annotationEditorLayer[data-main-rotation=\"90\"]\n    :is([data-editor-rotation=\"0\"], [data-editor-rotation=\"180\"]) > .resizers > .resizer.middleRight,\n      .annotationEditorLayer[data-main-rotation=\"180\"]\n    :is([data-editor-rotation=\"270\"], [data-editor-rotation=\"90\"]) > .resizers > .resizer.middleRight,\n      .annotationEditorLayer[data-main-rotation=\"270\"]\n    :is([data-editor-rotation=\"180\"], [data-editor-rotation=\"0\"]) > .resizers > .resizer.middleRight,\n      .annotationEditorLayer[data-main-rotation=\"0\"]\n    :is([data-editor-rotation=\"90\"], [data-editor-rotation=\"270\"]) > .resizers > .resizer.middleLeft,\n      .annotationEditorLayer[data-main-rotation=\"90\"]\n    :is([data-editor-rotation=\"0\"], [data-editor-rotation=\"180\"]) > .resizers > .resizer.middleLeft,\n      .annotationEditorLayer[data-main-rotation=\"180\"]\n    :is([data-editor-rotation=\"270\"], [data-editor-rotation=\"90\"]) > .resizers > .resizer.middleLeft,\n      .annotationEditorLayer[data-main-rotation=\"270\"]\n    :is([data-editor-rotation=\"180\"], [data-editor-rotation=\"0\"]) > .resizers > .resizer.middleLeft{\n        cursor:ns-resize;\n      }\n\n.annotationEditorLayer\n    :is(\n      [data-main-rotation=\"0\"] [data-editor-rotation=\"90\"],\n      [data-main-rotation=\"90\"] [data-editor-rotation=\"0\"],\n      [data-main-rotation=\"180\"] [data-editor-rotation=\"270\"],\n      [data-main-rotation=\"270\"] [data-editor-rotation=\"180\"]\n    ) .editToolbar{\n      rotate:270deg;\n    }\n\n[dir=\"ltr\"] .annotationEditorLayer\n    :is(\n      [data-main-rotation=\"0\"] [data-editor-rotation=\"90\"],\n      [data-main-rotation=\"90\"] [data-editor-rotation=\"0\"],\n      [data-main-rotation=\"180\"] [data-editor-rotation=\"270\"],\n      [data-main-rotation=\"270\"] [data-editor-rotation=\"180\"]\n    ) .editToolbar{\n        inset-inline-end:calc(0px - var(--editor-toolbar-vert-offset));\n        inset-block-start:0;\n      }\n\n[dir=\"rtl\"] .annotationEditorLayer\n    :is(\n      [data-main-rotation=\"0\"] [data-editor-rotation=\"90\"],\n      [data-main-rotation=\"90\"] [data-editor-rotation=\"0\"],\n      [data-main-rotation=\"180\"] [data-editor-rotation=\"270\"],\n      [data-main-rotation=\"270\"] [data-editor-rotation=\"180\"]\n    ) .editToolbar{\n        inset-inline-end:calc(100% + var(--editor-toolbar-vert-offset));\n        inset-block-start:0;\n      }\n\n.annotationEditorLayer\n    :is(\n      [data-main-rotation=\"0\"] [data-editor-rotation=\"180\"],\n      [data-main-rotation=\"90\"] [data-editor-rotation=\"90\"],\n      [data-main-rotation=\"180\"] [data-editor-rotation=\"0\"],\n      [data-main-rotation=\"270\"] [data-editor-rotation=\"270\"]\n    ) .editToolbar{\n      rotate:180deg;\n      inset-inline-end:100%;\n      inset-block-start:calc(0pc - var(--editor-toolbar-vert-offset));\n    }\n\n.annotationEditorLayer\n    :is(\n      [data-main-rotation=\"0\"] [data-editor-rotation=\"270\"],\n      [data-main-rotation=\"90\"] [data-editor-rotation=\"180\"],\n      [data-main-rotation=\"180\"] [data-editor-rotation=\"90\"],\n      [data-main-rotation=\"270\"] [data-editor-rotation=\"0\"]\n    ) .editToolbar{\n      rotate:90deg;\n    }\n\n[dir=\"ltr\"] .annotationEditorLayer\n    :is(\n      [data-main-rotation=\"0\"] [data-editor-rotation=\"270\"],\n      [data-main-rotation=\"90\"] [data-editor-rotation=\"180\"],\n      [data-main-rotation=\"180\"] [data-editor-rotation=\"90\"],\n      [data-main-rotation=\"270\"] [data-editor-rotation=\"0\"]\n    ) .editToolbar{\n        inset-inline-end:calc(100% + var(--editor-toolbar-vert-offset));\n        inset-block-start:100%;\n      }\n\n[dir=\"rtl\"] .annotationEditorLayer\n    :is(\n      [data-main-rotation=\"0\"] [data-editor-rotation=\"270\"],\n      [data-main-rotation=\"90\"] [data-editor-rotation=\"180\"],\n      [data-main-rotation=\"180\"] [data-editor-rotation=\"90\"],\n      [data-main-rotation=\"270\"] [data-editor-rotation=\"0\"]\n    ) .editToolbar{\n        inset-inline-start:calc(0px - var(--editor-toolbar-vert-offset));\n        inset-block-start:0;\n      }\n\n.dialog.altText::backdrop{\n    -webkit-mask:url(#alttext-manager-mask);\n            mask:url(#alttext-manager-mask);\n  }\n\n.dialog.altText.positioned{\n    margin:0;\n  }\n\n.dialog.altText #altTextContainer{\n    width:300px;\n    height:-moz-fit-content;\n    height:fit-content;\n    display:inline-flex;\n    flex-direction:column;\n    align-items:flex-start;\n    gap:16px;\n  }\n\n.dialog.altText #altTextContainer #overallDescription{\n      display:flex;\n      flex-direction:column;\n      align-items:flex-start;\n      gap:4px;\n      align-self:stretch;\n    }\n\n.dialog.altText #altTextContainer #overallDescription span{\n        align-self:stretch;\n      }\n\n.dialog.altText #altTextContainer #overallDescription .title{\n        font-size:13px;\n        font-style:normal;\n        font-weight:590;\n      }\n\n.dialog.altText #altTextContainer #addDescription{\n      display:flex;\n      flex-direction:column;\n      align-items:stretch;\n      gap:8px;\n    }\n\n.dialog.altText #altTextContainer #addDescription .descriptionArea{\n        flex:1;\n        padding-inline:24px 10px;\n      }\n\n.dialog.altText #altTextContainer #addDescription .descriptionArea textarea{\n          width:100%;\n          min-height:75px;\n        }\n\n.dialog.altText #altTextContainer #buttons{\n      display:flex;\n      justify-content:flex-end;\n      align-items:flex-start;\n      gap:8px;\n      align-self:stretch;\n    }\n\n.colorPicker{\n  --hover-outline-color:#0250bb;\n  --selected-outline-color:#0060df;\n  --swatch-border-color:#cfcfd8;\n}\n\n@media (prefers-color-scheme: dark){\n\n:where(html:not(.is-light)) .colorPicker{\n    --hover-outline-color:#80ebff;\n    --selected-outline-color:#aaf2ff;\n    --swatch-border-color:#52525e;\n}\n  }\n\n:where(html.is-dark) .colorPicker{\n    --hover-outline-color:#80ebff;\n    --selected-outline-color:#aaf2ff;\n    --swatch-border-color:#52525e;\n}\n\n@media screen and (forced-colors: active){\n\n.colorPicker{\n    --hover-outline-color:Highlight;\n    --selected-outline-color:var(--hover-outline-color);\n    --swatch-border-color:ButtonText;\n}\n  }\n\n.colorPicker .swatch{\n    width:16px;\n    height:16px;\n    border:1px solid var(--swatch-border-color);\n    border-radius:100%;\n    outline-offset:2px;\n    box-sizing:border-box;\n    forced-color-adjust:none;\n  }\n\n.colorPicker button:is(:hover, .selected) > .swatch{\n    border:none;\n  }\n\n.annotationEditorLayer[data-main-rotation=\"0\"] .highlightEditor:not(.free) > .editToolbar{\n      rotate:0deg;\n    }\n\n.annotationEditorLayer[data-main-rotation=\"90\"] .highlightEditor:not(.free) > .editToolbar{\n      rotate:270deg;\n    }\n\n.annotationEditorLayer[data-main-rotation=\"180\"] .highlightEditor:not(.free) > .editToolbar{\n      rotate:180deg;\n    }\n\n.annotationEditorLayer[data-main-rotation=\"270\"] .highlightEditor:not(.free) > .editToolbar{\n      rotate:90deg;\n    }\n\n.annotationEditorLayer .highlightEditor{\n    position:absolute;\n    background:transparent;\n    z-index:1;\n    cursor:auto;\n    max-width:100%;\n    max-height:100%;\n    border:none;\n    outline:none;\n    pointer-events:none;\n    transform-origin:0 0;\n  }\n\n.annotationEditorLayer .highlightEditor:not(.free){\n      transform:none;\n    }\n\n.annotationEditorLayer .highlightEditor .internal{\n      position:absolute;\n      top:0;\n      left:0;\n      width:100%;\n      height:100%;\n      pointer-events:auto;\n    }\n\n.annotationEditorLayer .highlightEditor.disabled .internal{\n      pointer-events:none;\n    }\n\n.annotationEditorLayer .highlightEditor.selectedEditor .internal{\n        cursor:pointer;\n      }\n\n.annotationEditorLayer .highlightEditor .editToolbar{\n      --editor-toolbar-colorpicker-arrow-image:url(images/toolbarButton-menuArrow.svg);\n\n      transform-origin:center !important;\n    }\n\n.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker{\n          position:relative;\n          width:auto;\n          display:flex;\n          justify-content:center;\n          align-items:center;\n          gap:4px;\n          padding:4px;\n        }\n\n.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker::after{\n            content:\"\";\n            -webkit-mask-image:var(--editor-toolbar-colorpicker-arrow-image);\n                    mask-image:var(--editor-toolbar-colorpicker-arrow-image);\n            -webkit-mask-repeat:no-repeat;\n                    mask-repeat:no-repeat;\n            -webkit-mask-position:center;\n                    mask-position:center;\n            display:inline-block;\n            background-color:var(--editor-toolbar-fg-color);\n            width:12px;\n            height:12px;\n          }\n\n.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker:hover::after{\n            background-color:var(--editor-toolbar-hover-fg-color);\n          }\n\n.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker:has(.dropdown:not(.hidden)){\n            background-color:var(--editor-toolbar-hover-bg-color);\n          }\n\n.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker:has(.dropdown:not(.hidden))::after{\n              scale:-1;\n            }\n\n.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker .dropdown{\n            position:absolute;\n            display:flex;\n            justify-content:center;\n            align-items:center;\n            flex-direction:column;\n            gap:11px;\n            padding-block:8px;\n            border-radius:6px;\n            background-color:var(--editor-toolbar-bg-color);\n            border:1px solid var(--editor-toolbar-border-color);\n            box-shadow:var(--editor-toolbar-shadow);\n            inset-block-start:calc(100% + 4px);\n            width:calc(100% + 2 * var(--editor-toolbar-padding));\n          }\n\n.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker .dropdown button{\n              width:100%;\n              height:auto;\n              border:none;\n              cursor:pointer;\n              display:flex;\n              justify-content:center;\n              align-items:center;\n              background:none;\n            }\n\n.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker .dropdown button:is(:active, :focus-visible){\n                outline:none;\n              }\n\n.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker .dropdown button > .swatch{\n                outline-offset:2px;\n              }\n\n.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker .dropdown button[aria-selected=\"true\"] > .swatch{\n                outline:2px solid var(--selected-outline-color);\n              }\n\n.annotationEditorLayer .highlightEditor .editToolbar .buttons .colorPicker .dropdown button:is(:hover, :active, :focus-visible) > .swatch{\n                outline:2px solid var(--hover-outline-color);\n              }\n\n.editorParamsToolbar:has(#highlightParamsToolbarContainer){\n  padding:unset;\n}\n\n#highlightParamsToolbarContainer{\n  height:auto;\n  padding-inline:10px;\n  padding-block:10px 16px;\n  gap:16px;\n  display:flex;\n  flex-direction:column;\n  box-sizing:border-box;\n}\n\n#highlightParamsToolbarContainer .editorParamsLabel{\n    width:-moz-fit-content;\n    width:fit-content;\n    inset-inline-start:0;\n  }\n\n#highlightParamsToolbarContainer .colorPicker{\n    display:flex;\n    flex-direction:column;\n    gap:8px;\n  }\n\n#highlightParamsToolbarContainer .colorPicker .dropdown{\n      display:flex;\n      justify-content:space-between;\n      align-items:center;\n      flex-direction:row;\n      height:auto;\n    }\n\n#highlightParamsToolbarContainer .colorPicker .dropdown button{\n        width:auto;\n        height:auto;\n        border:none;\n        cursor:pointer;\n        display:flex;\n        justify-content:center;\n        align-items:center;\n        background:none;\n        flex:0 0 auto;\n      }\n\n#highlightParamsToolbarContainer .colorPicker .dropdown button .swatch{\n          width:24px;\n          height:24px;\n        }\n\n#highlightParamsToolbarContainer .colorPicker .dropdown button:is(:active, :focus-visible){\n          outline:none;\n        }\n\n#highlightParamsToolbarContainer .colorPicker .dropdown button[aria-selected=\"true\"] > .swatch{\n          outline:2px solid var(--selected-outline-color);\n        }\n\n#highlightParamsToolbarContainer .colorPicker .dropdown button:is(:hover, :active, :focus-visible) > .swatch{\n          outline:2px solid var(--hover-outline-color);\n        }\n\n#highlightParamsToolbarContainer #editorHighlightThickness{\n    display:flex;\n    flex-direction:column;\n    align-items:center;\n    gap:4px;\n    align-self:stretch;\n  }\n\n#highlightParamsToolbarContainer #editorHighlightThickness .editorParamsLabel{\n      width:100%;\n      height:auto;\n      align-self:stretch;\n    }\n\n#highlightParamsToolbarContainer #editorHighlightThickness .thicknessPicker{\n      display:flex;\n      justify-content:space-between;\n      align-items:center;\n      align-self:stretch;\n\n      --example-color:#bfbfc9;\n    }\n\n@media (prefers-color-scheme: dark){\n\n:where(html:not(.is-light)) #highlightParamsToolbarContainer #editorHighlightThickness .thicknessPicker{\n        --example-color:#80808e;\n    }\n      }\n\n:where(html.is-dark) #highlightParamsToolbarContainer #editorHighlightThickness .thicknessPicker{\n        --example-color:#80808e;\n    }\n\n@media screen and (forced-colors: active){\n\n#highlightParamsToolbarContainer #editorHighlightThickness .thicknessPicker{\n        --example-color:CanvasText;\n    }\n      }\n\n:is(#highlightParamsToolbarContainer #editorHighlightThickness .thicknessPicker > .editorParamsSlider[disabled]){\n        opacity:0.4;\n      }\n\n#highlightParamsToolbarContainer #editorHighlightThickness .thicknessPicker::before,\n      #highlightParamsToolbarContainer #editorHighlightThickness .thicknessPicker::after{\n        content:\"\";\n        width:8px;\n        aspect-ratio:1;\n        display:block;\n        border-radius:100%;\n        background-color:var(--example-color);\n      }\n\n#highlightParamsToolbarContainer #editorHighlightThickness .thicknessPicker::after{\n        width:24px;\n      }\n\n#highlightParamsToolbarContainer #editorHighlightThickness .thicknessPicker .editorParamsSlider{\n        width:unset;\n        height:14px;\n      }\n\n#highlightParamsToolbarContainer #editorHighlightVisibility{\n    display:flex;\n    flex-direction:column;\n    align-items:flex-start;\n    gap:8px;\n    align-self:stretch;\n  }\n\n#highlightParamsToolbarContainer #editorHighlightVisibility .divider{\n      --divider-color:#d7d7db;\n\n      margin-block:4px;\n      width:100%;\n      height:1px;\n      background-color:var(--divider-color);\n    }\n\n@media (prefers-color-scheme: dark){\n\n:where(html:not(.is-light)) #highlightParamsToolbarContainer #editorHighlightVisibility .divider{\n        --divider-color:#8f8f9d;\n    }\n      }\n\n:where(html.is-dark) #highlightParamsToolbarContainer #editorHighlightVisibility .divider{\n        --divider-color:#8f8f9d;\n    }\n\n@media screen and (forced-colors: active){\n\n#highlightParamsToolbarContainer #editorHighlightVisibility .divider{\n        --divider-color:CanvasText;\n    }\n      }\n\n#highlightParamsToolbarContainer #editorHighlightVisibility .toggler{\n      display:flex;\n      justify-content:space-between;\n      align-items:center;\n      align-self:stretch;\n    }\n\n:root{\n  --viewer-container-height:0;\n  --pdfViewer-padding-bottom:0;\n  --page-margin:1px auto -8px;\n  --page-border:9px solid transparent;\n  --spreadHorizontalWrapped-margin-LR:-3.5px;\n  --loading-icon-delay:400ms;\n}\n\n@media screen and (forced-colors: active){\n  :root{\n    --pdfViewer-padding-bottom:9px;\n    --page-margin:8px auto -1px;\n    --page-border:1px solid CanvasText;\n    --spreadHorizontalWrapped-margin-LR:3.5px;\n  }\n}\n\n[data-main-rotation=\"90\"]{\n  transform:rotate(90deg) translateY(-100%);\n}\n[data-main-rotation=\"180\"]{\n  transform:rotate(180deg) translate(-100%, -100%);\n}\n[data-main-rotation=\"270\"]{\n  transform:rotate(270deg) translateX(-100%);\n}\n\n#hiddenCopyElement,\n.hiddenCanvasElement{\n  position:absolute;\n  top:0;\n  left:0;\n  width:0;\n  height:0;\n  display:none;\n}\n\n.pdfViewer{\n  --scale-factor:1;\n\n  padding-bottom:var(--pdfViewer-padding-bottom);\n\n  --hcm-highlight-filter:none;\n  --hcm-highlight-selected-filter:none;\n}\n\n@media screen and (forced-colors: active){\n\n.pdfViewer{\n    --hcm-highlight-filter:invert(100%);\n}\n  }\n\n.pdfViewer .canvasWrapper{\n    overflow:hidden;\n    width:100%;\n    height:100%;\n  }\n\n.pdfViewer .canvasWrapper canvas{\n      margin:0;\n      display:block;\n    }\n\n.pdfViewer .canvasWrapper canvas[hidden]{\n        display:none;\n      }\n\n.pdfViewer .canvasWrapper canvas[zooming]{\n        width:100%;\n        height:100%;\n      }\n\n.pdfViewer .canvasWrapper canvas .structTree{\n        contain:strict;\n      }\n\n.pdfViewer .page{\n  direction:ltr;\n  width:816px;\n  height:1056px;\n  margin:var(--page-margin);\n  position:relative;\n  overflow:visible;\n  border:var(--page-border);\n  background-clip:content-box;\n  background-color:rgb(255 255 255);\n}\n\n.pdfViewer .dummyPage{\n  position:relative;\n  width:0;\n  height:var(--viewer-container-height);\n}\n\n.pdfViewer.noUserSelect{\n  -webkit-user-select:none;\n     -moz-user-select:none;\n          user-select:none;\n}\n\n.pdfViewer.removePageBorders .page{\n  margin:0 auto 10px;\n  border:none;\n}\n\n.pdfViewer:is(.scrollHorizontal, .scrollWrapped),\n.spread{\n  margin-inline:3.5px;\n  text-align:center;\n}\n\n.pdfViewer.scrollHorizontal,\n.spread{\n  white-space:nowrap;\n}\n\n.pdfViewer.removePageBorders,\n.pdfViewer:is(.scrollHorizontal, .scrollWrapped) .spread{\n  margin-inline:0;\n}\n\n.spread :is(.page, .dummyPage),\n.pdfViewer:is(.scrollHorizontal, .scrollWrapped) :is(.page, .spread){\n  display:inline-block;\n  vertical-align:middle;\n}\n\n.spread .page,\n.pdfViewer:is(.scrollHorizontal, .scrollWrapped) .page{\n  margin-inline:var(--spreadHorizontalWrapped-margin-LR);\n}\n\n.pdfViewer.removePageBorders .spread .page,\n.pdfViewer.removePageBorders:is(.scrollHorizontal, .scrollWrapped) .page{\n  margin-inline:5px;\n}\n\n.pdfViewer .page.loadingIcon::after{\n  position:absolute;\n  top:0;\n  left:0;\n  content:\"\";\n  width:100%;\n  height:100%;\n  background:url(\"images/loading-icon.gif\") center no-repeat;\n  display:none;\n  transition-property:display;\n  transition-delay:var(--loading-icon-delay);\n  z-index:5;\n  contain:strict;\n}\n\n.pdfViewer .page.loading::after{\n  display:block;\n}\n\n.pdfViewer .page:not(.loading)::after{\n  transition-property:none;\n  display:none;\n}\n\n.pdfPresentationMode .pdfViewer{\n  padding-bottom:0;\n}\n\n.pdfPresentationMode .spread{\n  margin:0;\n}\n\n.pdfPresentationMode .pdfViewer .page{\n  margin:0 auto;\n  border:2px solid transparent;\n}\n\n:root{\n  --dir-factor:1;\n  --inline-start:left;\n  --inline-end:right;\n\n  --sidebar-width:200px;\n  --sidebar-transition-duration:200ms;\n  --sidebar-transition-timing-function:ease;\n\n  --toolbar-icon-opacity:0.7;\n  --doorhanger-icon-opacity:0.9;\n  --editor-toolbar-base-offset:105px;\n\n  --main-color:rgb(12 12 13);\n  --body-bg-color:rgb(212 212 215);\n  --progressBar-color:rgb(10 132 255);\n  --progressBar-bg-color:rgb(221 221 222);\n  --progressBar-blend-color:rgb(116 177 239);\n  --scrollbar-color:auto;\n  --scrollbar-bg-color:auto;\n  --toolbar-icon-bg-color:rgb(0 0 0);\n  --toolbar-icon-hover-bg-color:rgb(0 0 0);\n\n  --sidebar-narrow-bg-color:rgb(212 212 215 / 0.9);\n  --sidebar-toolbar-bg-color:rgb(245 246 247);\n  --toolbar-bg-color:rgb(249 249 250);\n  --toolbar-border-color:rgb(184 184 184);\n  --toolbar-box-shadow:0 1px 0 var(--toolbar-border-color);\n  --toolbar-border-bottom:none;\n  --toolbarSidebar-box-shadow:inset calc(-1px * var(--dir-factor)) 0 0 rgb(0 0 0 / 0.25), 0 1px 0 rgb(0 0 0 / 0.15), 0 0 1px rgb(0 0 0 / 0.1);\n  --toolbarSidebar-border-bottom:none;\n  --button-hover-color:rgb(221 222 223);\n  --toggled-btn-color:rgb(0 0 0);\n  --toggled-btn-bg-color:rgb(0 0 0 / 0.3);\n  --toggled-hover-active-btn-color:rgb(0 0 0 / 0.4);\n  --toggled-hover-btn-outline:none;\n  --dropdown-btn-bg-color:rgb(215 215 219);\n  --dropdown-btn-border:none;\n  --separator-color:rgb(0 0 0 / 0.3);\n  --field-color:rgb(6 6 6);\n  --field-bg-color:rgb(255 255 255);\n  --field-border-color:rgb(187 187 188);\n  --treeitem-color:rgb(0 0 0 / 0.8);\n  --treeitem-bg-color:rgb(0 0 0 / 0.15);\n  --treeitem-hover-color:rgb(0 0 0 / 0.9);\n  --treeitem-selected-color:rgb(0 0 0 / 0.9);\n  --treeitem-selected-bg-color:rgb(0 0 0 / 0.25);\n  --thumbnail-hover-color:rgb(0 0 0 / 0.1);\n  --thumbnail-selected-color:rgb(0 0 0 / 0.2);\n  --doorhanger-bg-color:rgb(255 255 255);\n  --doorhanger-border-color:rgb(12 12 13 / 0.2);\n  --doorhanger-hover-color:rgb(12 12 13);\n  --doorhanger-hover-bg-color:rgb(237 237 237);\n  --doorhanger-separator-color:rgb(222 222 222);\n  --dialog-button-border:none;\n  --dialog-button-bg-color:rgb(12 12 13 / 0.1);\n  --dialog-button-hover-bg-color:rgb(12 12 13 / 0.3);\n\n  --loading-icon:url(images/loading.svg);\n  --treeitem-expanded-icon:url(images/treeitem-expanded.svg);\n  --treeitem-collapsed-icon:url(images/treeitem-collapsed.svg);\n  --toolbarButton-editorFreeText-icon:url(images/toolbarButton-editorFreeText.svg);\n  --toolbarButton-editorHighlight-icon:url(images/toolbarButton-editorHighlight.svg);\n  --toolbarButton-editorInk-icon:url(images/toolbarButton-editorInk.svg);\n  --toolbarButton-editorStamp-icon:url(images/toolbarButton-editorStamp.svg);\n  --toolbarButton-menuArrow-icon:url(images/toolbarButton-menuArrow.svg);\n  --toolbarButton-sidebarToggle-icon:url(images/toolbarButton-sidebarToggle.svg);\n  --toolbarButton-secondaryToolbarToggle-icon:url(images/toolbarButton-secondaryToolbarToggle.svg);\n  --toolbarButton-pageUp-icon:url(images/toolbarButton-pageUp.svg);\n  --toolbarButton-pageDown-icon:url(images/toolbarButton-pageDown.svg);\n  --toolbarButton-zoomOut-icon:url(images/toolbarButton-zoomOut.svg);\n  --toolbarButton-zoomIn-icon:url(images/toolbarButton-zoomIn.svg);\n  --toolbarButton-presentationMode-icon:url(images/toolbarButton-presentationMode.svg);\n  --toolbarButton-print-icon:url(images/toolbarButton-print.svg);\n  --toolbarButton-openFile-icon:url(images/toolbarButton-openFile.svg);\n  --toolbarButton-download-icon:url(images/toolbarButton-download.svg);\n  --toolbarButton-bookmark-icon:url(images/toolbarButton-bookmark.svg);\n  --toolbarButton-viewThumbnail-icon:url(images/toolbarButton-viewThumbnail.svg);\n  --toolbarButton-viewOutline-icon:url(images/toolbarButton-viewOutline.svg);\n  --toolbarButton-viewAttachments-icon:url(images/toolbarButton-viewAttachments.svg);\n  --toolbarButton-viewLayers-icon:url(images/toolbarButton-viewLayers.svg);\n  --toolbarButton-currentOutlineItem-icon:url(images/toolbarButton-currentOutlineItem.svg);\n  --toolbarButton-search-icon:url(images/toolbarButton-search.svg);\n  --findbarButton-previous-icon:url(images/findbarButton-previous.svg);\n  --findbarButton-next-icon:url(images/findbarButton-next.svg);\n  --secondaryToolbarButton-firstPage-icon:url(images/secondaryToolbarButton-firstPage.svg);\n  --secondaryToolbarButton-lastPage-icon:url(images/secondaryToolbarButton-lastPage.svg);\n  --secondaryToolbarButton-rotateCcw-icon:url(images/secondaryToolbarButton-rotateCcw.svg);\n  --secondaryToolbarButton-rotateCw-icon:url(images/secondaryToolbarButton-rotateCw.svg);\n  --secondaryToolbarButton-selectTool-icon:url(images/secondaryToolbarButton-selectTool.svg);\n  --secondaryToolbarButton-handTool-icon:url(images/secondaryToolbarButton-handTool.svg);\n  --secondaryToolbarButton-scrollPage-icon:url(images/secondaryToolbarButton-scrollPage.svg);\n  --secondaryToolbarButton-scrollVertical-icon:url(images/secondaryToolbarButton-scrollVertical.svg);\n  --secondaryToolbarButton-scrollHorizontal-icon:url(images/secondaryToolbarButton-scrollHorizontal.svg);\n  --secondaryToolbarButton-scrollWrapped-icon:url(images/secondaryToolbarButton-scrollWrapped.svg);\n  --secondaryToolbarButton-spreadNone-icon:url(images/secondaryToolbarButton-spreadNone.svg);\n  --secondaryToolbarButton-spreadOdd-icon:url(images/secondaryToolbarButton-spreadOdd.svg);\n  --secondaryToolbarButton-spreadEven-icon:url(images/secondaryToolbarButton-spreadEven.svg);\n  --secondaryToolbarButton-documentProperties-icon:url(images/secondaryToolbarButton-documentProperties.svg);\n  --editorParams-stampAddImage-icon:url(images/toolbarButton-zoomIn.svg);\n}\n\n[dir=\"rtl\"]:root{\n  --dir-factor:-1;\n  --inline-start:right;\n  --inline-end:left;\n}\n\n@media (prefers-color-scheme: dark){\n  :root:where(:not(.is-light)){\n    --main-color:rgb(249 249 250);\n    --body-bg-color:rgb(42 42 46);\n    --progressBar-color:rgb(0 96 223);\n    --progressBar-bg-color:rgb(40 40 43);\n    --progressBar-blend-color:rgb(20 68 133);\n    --scrollbar-color:rgb(121 121 123);\n    --scrollbar-bg-color:rgb(35 35 39);\n    --toolbar-icon-bg-color:rgb(255 255 255);\n    --toolbar-icon-hover-bg-color:rgb(255 255 255);\n\n    --sidebar-narrow-bg-color:rgb(42 42 46 / 0.9);\n    --sidebar-toolbar-bg-color:rgb(50 50 52);\n    --toolbar-bg-color:rgb(56 56 61);\n    --toolbar-border-color:rgb(12 12 13);\n    --button-hover-color:rgb(102 102 103);\n    --toggled-btn-color:rgb(255 255 255);\n    --toggled-btn-bg-color:rgb(0 0 0 / 0.3);\n    --toggled-hover-active-btn-color:rgb(0 0 0 / 0.4);\n    --dropdown-btn-bg-color:rgb(74 74 79);\n    --separator-color:rgb(0 0 0 / 0.3);\n    --field-color:rgb(250 250 250);\n    --field-bg-color:rgb(64 64 68);\n    --field-border-color:rgb(115 115 115);\n    --treeitem-color:rgb(255 255 255 / 0.8);\n    --treeitem-bg-color:rgb(255 255 255 / 0.15);\n    --treeitem-hover-color:rgb(255 255 255 / 0.9);\n    --treeitem-selected-color:rgb(255 255 255 / 0.9);\n    --treeitem-selected-bg-color:rgb(255 255 255 / 0.25);\n    --thumbnail-hover-color:rgb(255 255 255 / 0.1);\n    --thumbnail-selected-color:rgb(255 255 255 / 0.2);\n    --doorhanger-bg-color:rgb(74 74 79);\n    --doorhanger-border-color:rgb(39 39 43);\n    --doorhanger-hover-color:rgb(249 249 250);\n    --doorhanger-hover-bg-color:rgb(93 94 98);\n    --doorhanger-separator-color:rgb(92 92 97);\n    --dialog-button-bg-color:rgb(92 92 97);\n    --dialog-button-hover-bg-color:rgb(115 115 115);\n  }\n}\n\n:root:where(.is-dark){\n    --main-color:rgb(249 249 250);\n    --body-bg-color:rgb(42 42 46);\n    --progressBar-color:rgb(0 96 223);\n    --progressBar-bg-color:rgb(40 40 43);\n    --progressBar-blend-color:rgb(20 68 133);\n    --scrollbar-color:rgb(121 121 123);\n    --scrollbar-bg-color:rgb(35 35 39);\n    --toolbar-icon-bg-color:rgb(255 255 255);\n    --toolbar-icon-hover-bg-color:rgb(255 255 255);\n\n    --sidebar-narrow-bg-color:rgb(42 42 46 / 0.9);\n    --sidebar-toolbar-bg-color:rgb(50 50 52);\n    --toolbar-bg-color:rgb(56 56 61);\n    --toolbar-border-color:rgb(12 12 13);\n    --button-hover-color:rgb(102 102 103);\n    --toggled-btn-color:rgb(255 255 255);\n    --toggled-btn-bg-color:rgb(0 0 0 / 0.3);\n    --toggled-hover-active-btn-color:rgb(0 0 0 / 0.4);\n    --dropdown-btn-bg-color:rgb(74 74 79);\n    --separator-color:rgb(0 0 0 / 0.3);\n    --field-color:rgb(250 250 250);\n    --field-bg-color:rgb(64 64 68);\n    --field-border-color:rgb(115 115 115);\n    --treeitem-color:rgb(255 255 255 / 0.8);\n    --treeitem-bg-color:rgb(255 255 255 / 0.15);\n    --treeitem-hover-color:rgb(255 255 255 / 0.9);\n    --treeitem-selected-color:rgb(255 255 255 / 0.9);\n    --treeitem-selected-bg-color:rgb(255 255 255 / 0.25);\n    --thumbnail-hover-color:rgb(255 255 255 / 0.1);\n    --thumbnail-selected-color:rgb(255 255 255 / 0.2);\n    --doorhanger-bg-color:rgb(74 74 79);\n    --doorhanger-border-color:rgb(39 39 43);\n    --doorhanger-hover-color:rgb(249 249 250);\n    --doorhanger-hover-bg-color:rgb(93 94 98);\n    --doorhanger-separator-color:rgb(92 92 97);\n    --dialog-button-bg-color:rgb(92 92 97);\n    --dialog-button-hover-bg-color:rgb(115 115 115);\n  }\n\n@media screen and (forced-colors: active){\n  :root{\n    --button-hover-color:Highlight;\n    --doorhanger-hover-bg-color:Highlight;\n    --toolbar-icon-opacity:1;\n    --toolbar-icon-bg-color:ButtonText;\n    --toolbar-icon-hover-bg-color:ButtonFace;\n    --toggled-hover-active-btn-color:ButtonText;\n    --toggled-hover-btn-outline:2px solid ButtonBorder;\n    --toolbar-border-color:CanvasText;\n    --toolbar-border-bottom:1px solid var(--toolbar-border-color);\n    --toolbar-box-shadow:none;\n    --toggled-btn-color:HighlightText;\n    --toggled-btn-bg-color:LinkText;\n    --doorhanger-hover-color:ButtonFace;\n    --doorhanger-border-color-whcm:1px solid ButtonText;\n    --doorhanger-triangle-opacity-whcm:0;\n    --dialog-button-border:1px solid Highlight;\n    --dialog-button-hover-bg-color:Highlight;\n    --dialog-button-hover-color:ButtonFace;\n    --dropdown-btn-border:1px solid ButtonText;\n    --field-border-color:ButtonText;\n    --main-color:CanvasText;\n    --separator-color:GrayText;\n    --doorhanger-separator-color:GrayText;\n    --toolbarSidebar-box-shadow:none;\n    --toolbarSidebar-border-bottom:1px solid var(--toolbar-border-color);\n  }\n}\n\n@media screen and (prefers-reduced-motion: reduce){\n  :root{\n    --sidebar-transition-duration:0;\n  }\n}\n\n*{\n  padding:0;\n  margin:0;\n}\n\nhtml,\nbody{\n  height:100%;\n  width:100%;\n}\n\nbody{\n  background-color:var(--body-bg-color);\n  scrollbar-color:var(--scrollbar-color) var(--scrollbar-bg-color);\n}\n\n.hidden,\n[hidden]{\n  display:none !important;\n}\n\n#viewerContainer.pdfPresentationMode:fullscreen{\n  top:0;\n  background-color:rgb(0 0 0);\n  width:100%;\n  height:100%;\n  overflow:hidden;\n  cursor:none;\n  -webkit-user-select:none;\n     -moz-user-select:none;\n          user-select:none;\n}\n\n.pdfPresentationMode:fullscreen section:not([data-internal-link]){\n  pointer-events:none;\n}\n\n.pdfPresentationMode:fullscreen .textLayer span{\n  cursor:none;\n}\n\n.pdfPresentationMode.pdfPresentationModeControls > *,\n.pdfPresentationMode.pdfPresentationModeControls .textLayer span{\n  cursor:default;\n}\n\n#outerContainer{\n  width:100%;\n  height:100%;\n  position:relative;\n}\n\n#sidebarContainer{\n  position:absolute;\n  inset-block:32px 0;\n  inset-inline-start:calc(-1 * var(--sidebar-width));\n  width:var(--sidebar-width);\n  visibility:hidden;\n  z-index:100;\n  font:message-box;\n  border-top:1px solid rgb(51 51 51);\n  border-inline-end:var(--doorhanger-border-color-whcm);\n  transition-property:inset-inline-start;\n  transition-duration:var(--sidebar-transition-duration);\n  transition-timing-function:var(--sidebar-transition-timing-function);\n}\n\n#outerContainer:is(.sidebarMoving, .sidebarOpen) #sidebarContainer{\n  visibility:visible;\n}\n#outerContainer.sidebarOpen #sidebarContainer{\n  inset-inline-start:0;\n}\n\n#mainContainer{\n  position:absolute;\n  inset:0;\n  min-width:350px;\n}\n\n#sidebarContent{\n  inset-block:32px 0;\n  inset-inline-start:0;\n  overflow:auto;\n  position:absolute;\n  width:100%;\n  box-shadow:inset calc(-1px * var(--dir-factor)) 0 0 rgb(0 0 0 / 0.25);\n}\n\n#viewerContainer{\n  overflow:auto;\n  position:absolute;\n  inset:32px 0 0;\n  outline:none;\n}\n#viewerContainer:not(.pdfPresentationMode){\n  transition-duration:var(--sidebar-transition-duration);\n  transition-timing-function:var(--sidebar-transition-timing-function);\n}\n\n#outerContainer.sidebarOpen #viewerContainer:not(.pdfPresentationMode){\n  inset-inline-start:var(--sidebar-width);\n  transition-property:inset-inline-start;\n}\n\n.toolbar{\n  position:relative;\n  inset-inline:0;\n  z-index:9999;\n  cursor:default;\n  font:message-box;\n}\n\n:is(.toolbar, .editorParamsToolbar, .findbar, #sidebarContainer)\n  :is(input, button, select),\n.secondaryToolbar :is(input, button, a, select){\n  outline:none;\n  font:message-box;\n}\n\n#toolbarContainer{\n  width:100%;\n}\n\n#toolbarSidebar{\n  width:100%;\n  height:32px;\n  background-color:var(--sidebar-toolbar-bg-color);\n  box-shadow:var(--toolbarSidebar-box-shadow);\n  border-bottom:var(--toolbarSidebar-border-bottom);\n}\n\n#sidebarResizer{\n  position:absolute;\n  inset-block:0;\n  inset-inline-end:-6px;\n  width:6px;\n  z-index:200;\n  cursor:ew-resize;\n}\n\n#toolbarContainer,\n.findbar,\n.secondaryToolbar,\n.editorParamsToolbar{\n  position:relative;\n  height:32px;\n  background-color:var(--toolbar-bg-color);\n  box-shadow:var(--toolbar-box-shadow);\n  border-bottom:var(--toolbar-border-bottom);\n}\n\n#toolbarViewer{\n  height:32px;\n}\n\n#loadingBar{\n  --progressBar-percent:0%;\n  --progressBar-end-offset:0;\n\n  position:absolute;\n  inset-inline:0 var(--progressBar-end-offset);\n  height:4px;\n  background-color:var(--progressBar-bg-color);\n  border-bottom:1px solid var(--toolbar-border-color);\n  transition-property:inset-inline-start;\n  transition-duration:var(--sidebar-transition-duration);\n  transition-timing-function:var(--sidebar-transition-timing-function);\n}\n\n#outerContainer.sidebarOpen #loadingBar{\n  inset-inline-start:var(--sidebar-width);\n}\n\n#loadingBar .progress{\n  position:absolute;\n  top:0;\n  inset-inline-start:0;\n  width:100%;\n  transform:scaleX(var(--progressBar-percent));\n  transform-origin:calc(50% - 50% * var(--dir-factor)) 0;\n  height:100%;\n  background-color:var(--progressBar-color);\n  overflow:hidden;\n  transition:transform 200ms;\n}\n\n@keyframes progressIndeterminate{\n  0%{\n    transform:translateX(calc(-142px * var(--dir-factor)));\n  }\n  100%{\n    transform:translateX(0);\n  }\n}\n\n#loadingBar.indeterminate .progress{\n  transform:none;\n  background-color:var(--progressBar-bg-color);\n  transition:none;\n}\n\n#loadingBar.indeterminate .progress .glimmer{\n  position:absolute;\n  top:0;\n  inset-inline-start:0;\n  height:100%;\n  width:calc(100% + 150px);\n  background:repeating-linear-gradient(\n    135deg,\n    var(--progressBar-blend-color) 0,\n    var(--progressBar-bg-color) 5px,\n    var(--progressBar-bg-color) 45px,\n    var(--progressBar-color) 55px,\n    var(--progressBar-color) 95px,\n    var(--progressBar-blend-color) 100px\n  );\n  animation:progressIndeterminate 1s linear infinite;\n}\n\n#outerContainer.sidebarResizing\n  :is(#sidebarContainer, #viewerContainer, #loadingBar){\n  transition-duration:0s;\n}\n\n.findbar,\n.secondaryToolbar,\n.editorParamsToolbar{\n  top:32px;\n  position:absolute;\n  z-index:30000;\n  height:auto;\n  padding:0 4px;\n  margin:4px 2px;\n  font:message-box;\n  font-size:12px;\n  line-height:14px;\n  text-align:left;\n  cursor:default;\n}\n\n.findbar{\n  inset-inline-start:64px;\n  min-width:300px;\n  background-color:var(--toolbar-bg-color);\n}\n.findbar > div{\n  height:32px;\n}\n.findbar > div#findbarInputContainer{\n  margin-inline-end:4px;\n}\n.findbar.wrapContainers > div,\n.findbar.wrapContainers > div#findbarMessageContainer > *{\n  clear:both;\n}\n.findbar.wrapContainers > div#findbarMessageContainer{\n  height:auto;\n}\n\n.findbar input[type=\"checkbox\"]{\n  pointer-events:none;\n}\n\n.findbar label{\n  -webkit-user-select:none;\n     -moz-user-select:none;\n          user-select:none;\n}\n\n.findbar label:hover,\n.findbar input:focus-visible + label{\n  color:var(--toggled-btn-color);\n  background-color:var(--button-hover-color);\n}\n\n.findbar .toolbarField[type=\"checkbox\"]:checked + .toolbarLabel{\n  background-color:var(--toggled-btn-bg-color) !important;\n  color:var(--toggled-btn-color);\n}\n\n#findInput{\n  width:200px;\n}\n\n#findInput::-moz-placeholder{\n    font-style:normal;\n  }\n\n#findInput::placeholder{\n    font-style:normal;\n  }\n\n.loadingInput:has(> #findInput[data-status=\"pending\"])::after{\n    display:block;\n    visibility:visible;\n  }\n\n#findInput[data-status=\"notFound\"]{\n    background-color:rgb(255 102 102);\n  }\n\n.secondaryToolbar,\n.editorParamsToolbar{\n  padding:6px 0 10px;\n  inset-inline-end:4px;\n  height:auto;\n  background-color:var(--doorhanger-bg-color);\n}\n\n.editorParamsToolbarContainer{\n  width:220px;\n  margin-bottom:-4px;\n}\n\n.editorParamsToolbarContainer > .editorParamsSetter{\n  min-height:26px;\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n  padding-inline:10px;\n}\n\n.editorParamsToolbarContainer .editorParamsLabel{\n  padding-inline-end:10px;\n  flex:none;\n  font:menu;\n  font-size:13px;\n  font-style:normal;\n  font-weight:400;\n  line-height:150%;\n  color:var(--main-color);\n}\n\n.editorParamsToolbarContainer .editorParamsColor{\n  width:32px;\n  height:32px;\n  flex:none;\n}\n\n.editorParamsToolbarContainer .editorParamsSlider{\n  background-color:transparent;\n  width:90px;\n  flex:0 1 0;\n}\n\n.editorParamsToolbarContainer .editorParamsSlider::-moz-range-progress{\n  background-color:black;\n}\n\n.editorParamsToolbarContainer .editorParamsSlider::-webkit-slider-runnable-track,\n.editorParamsToolbarContainer .editorParamsSlider::-moz-range-track{\n  background-color:black;\n}\n\n.editorParamsToolbarContainer .editorParamsSlider::-webkit-slider-thumb,\n.editorParamsToolbarContainer .editorParamsSlider::-moz-range-thumb{\n  background-color:white;\n}\n\n#secondaryToolbarButtonContainer{\n  max-width:220px;\n  min-height:26px;\n  max-height:calc(var(--viewer-container-height) - 40px);\n  overflow-y:auto;\n  margin-bottom:-4px;\n}\n\n#editorStampParamsToolbar{\n  inset-inline-end:calc(var(--editor-toolbar-base-offset) + 0px);\n}\n\n#editorInkParamsToolbar{\n  inset-inline-end:calc(var(--editor-toolbar-base-offset) + 28px);\n}\n\n#editorFreeTextParamsToolbar{\n  inset-inline-end:calc(var(--editor-toolbar-base-offset) + 56px);\n}\n\n#editorHighlightParamsToolbar{\n  inset-inline-end:calc(var(--editor-toolbar-base-offset) + 84px);\n}\n\n#editorStampAddImage::before{\n  -webkit-mask-image:var(--editorParams-stampAddImage-icon);\n          mask-image:var(--editorParams-stampAddImage-icon);\n}\n\n.doorHanger,\n.doorHangerRight{\n  border-radius:2px;\n  box-shadow:0 1px 5px var(--doorhanger-border-color), 0 0 0 1px var(--doorhanger-border-color);\n  border:var(--doorhanger-border-color-whcm);\n}\n:is(.doorHanger, .doorHangerRight)::after,\n:is(.doorHanger, .doorHangerRight)::before{\n  bottom:100%;\n  border:8px solid rgb(0 0 0 / 0);\n  content:\" \";\n  height:0;\n  width:0;\n  position:absolute;\n  pointer-events:none;\n  opacity:var(--doorhanger-triangle-opacity-whcm);\n}\n.doorHanger::after{\n  inset-inline-start:10px;\n  margin-inline-start:-8px;\n  border-bottom-color:var(--toolbar-bg-color);\n}\n.doorHangerRight::after{\n  inset-inline-end:10px;\n  margin-inline-end:-8px;\n  border-bottom-color:var(--doorhanger-bg-color);\n}\n:is(.doorHanger, .doorHangerRight)::before{\n  border-bottom-color:var(--doorhanger-border-color);\n  border-width:9px;\n}\n.doorHanger::before{\n  inset-inline-start:10px;\n  margin-inline-start:-9px;\n}\n.doorHangerRight::before{\n  inset-inline-end:10px;\n  margin-inline-end:-9px;\n}\n\n#findResultsCount{\n  background-color:rgb(217 217 217);\n  color:rgb(82 82 82);\n  text-align:center;\n  padding:4px 5px;\n  margin:5px;\n}\n\n#findMsg[data-status=\"notFound\"]{\n  font-weight:bold;\n}\n\n:is(#findResultsCount, #findMsg):empty{\n  display:none;\n}\n\n#toolbarViewerMiddle{\n  position:absolute;\n  left:50%;\n  transform:translateX(-50%);\n}\n\n#toolbarViewerLeft,\n#toolbarSidebarLeft{\n  float:var(--inline-start);\n}\n#toolbarViewerRight,\n#toolbarSidebarRight{\n  float:var(--inline-end);\n}\n\n#toolbarViewerLeft > *,\n#toolbarViewerMiddle > *,\n#toolbarViewerRight > *,\n#toolbarSidebarLeft *,\n#toolbarSidebarRight *,\n.findbar *{\n  position:relative;\n  float:var(--inline-start);\n}\n\n#toolbarViewerLeft{\n  padding-inline-start:1px;\n}\n#toolbarViewerRight{\n  padding-inline-end:1px;\n}\n#toolbarSidebarRight{\n  padding-inline-end:2px;\n}\n\n.splitToolbarButton{\n  margin:2px;\n  display:inline-block;\n}\n.splitToolbarButton > .toolbarButton{\n  float:var(--inline-start);\n}\n\n.toolbarButton,\n.secondaryToolbarButton,\n.dialogButton{\n  border:none;\n  background:none;\n  width:28px;\n  height:28px;\n  outline:none;\n}\n\n.dialogButton:is(:hover, :focus-visible){\n  background-color:var(--dialog-button-hover-bg-color);\n}\n\n.dialogButton:is(:hover, :focus-visible) > span{\n  color:var(--dialog-button-hover-color);\n}\n\n.toolbarButton > span{\n  display:inline-block;\n  width:0;\n  height:0;\n  overflow:hidden;\n}\n\n:is(.toolbarButton, .secondaryToolbarButton, .dialogButton)[disabled]{\n  opacity:0.5;\n}\n\n.splitToolbarButton > .toolbarButton:is(:hover, :focus-visible),\n.dropdownToolbarButton:hover{\n  background-color:var(--button-hover-color);\n}\n.splitToolbarButton > .toolbarButton{\n  position:relative;\n  margin:0;\n}\n#toolbarSidebar .splitToolbarButton > .toolbarButton{\n  margin-inline-end:2px;\n}\n\n.splitToolbarButtonSeparator{\n  float:var(--inline-start);\n  margin:4px 0;\n  width:1px;\n  height:20px;\n  background-color:var(--separator-color);\n}\n\n.toolbarButton,\n.dropdownToolbarButton,\n.secondaryToolbarButton,\n.dialogButton{\n  min-width:16px;\n  margin:2px 1px;\n  padding:2px 6px 0;\n  border:none;\n  border-radius:2px;\n  color:var(--main-color);\n  font-size:12px;\n  line-height:14px;\n  -webkit-user-select:none;\n     -moz-user-select:none;\n          user-select:none;\n  cursor:default;\n  box-sizing:border-box;\n}\n\n.toolbarButton:is(:hover, :focus-visible){\n  background-color:var(--button-hover-color);\n}\n.secondaryToolbarButton:is(:hover, :focus-visible){\n  background-color:var(--doorhanger-hover-bg-color);\n  color:var(--doorhanger-hover-color);\n}\n\n:is(.toolbarButton, .secondaryToolbarButton).toggled,\n.splitToolbarButton.toggled > .toolbarButton.toggled{\n  background-color:var(--toggled-btn-bg-color);\n  color:var(--toggled-btn-color);\n}\n\n:is(.toolbarButton, .secondaryToolbarButton).toggled:hover,\n.splitToolbarButton.toggled > .toolbarButton.toggled:hover{\n  outline:var(--toggled-hover-btn-outline) !important;\n}\n\n:is(.toolbarButton, .secondaryToolbarButton).toggled::before{\n  background-color:var(--toggled-btn-color);\n}\n\n:is(.toolbarButton, .secondaryToolbarButton).toggled:hover:active,\n.splitToolbarButton.toggled > .toolbarButton.toggled:hover:active{\n  background-color:var(--toggled-hover-active-btn-color);\n}\n\n.dropdownToolbarButton{\n  display:flex;\n  width:-moz-fit-content;\n  width:fit-content;\n  min-width:140px;\n  padding:0;\n  background-color:var(--dropdown-btn-bg-color);\n  border:var(--dropdown-btn-border);\n}\n.dropdownToolbarButton::after{\n  top:6px;\n  inset-inline-end:6px;\n  pointer-events:none;\n  -webkit-mask-image:var(--toolbarButton-menuArrow-icon);\n          mask-image:var(--toolbarButton-menuArrow-icon);\n}\n\n.dropdownToolbarButton > select{\n  -webkit-appearance:none;\n     -moz-appearance:none;\n          appearance:none;\n  width:inherit;\n  min-width:inherit;\n  height:28px;\n  font-size:12px;\n  color:var(--main-color);\n  margin:0;\n  padding-block:1px 2px;\n  padding-inline:6px 38px;\n  border:none;\n  background-color:var(--dropdown-btn-bg-color);\n}\n.dropdownToolbarButton > select:is(:hover, :focus-visible){\n  background-color:var(--button-hover-color);\n  color:var(--toggled-btn-color);\n}\n.dropdownToolbarButton > select > option{\n  background:var(--doorhanger-bg-color);\n  color:var(--main-color);\n}\n\n.toolbarButtonSpacer{\n  width:30px;\n  display:inline-block;\n  height:1px;\n}\n\n:is(.toolbarButton, .secondaryToolbarButton, .treeItemToggler)::before,\n.dropdownToolbarButton::after{\n  position:absolute;\n  display:inline-block;\n  width:16px;\n  height:16px;\n\n  content:\"\";\n  background-color:var(--toolbar-icon-bg-color);\n  -webkit-mask-size:cover;\n          mask-size:cover;\n}\n\n.dropdownToolbarButton:is(:hover, :focus-visible, :active)::after{\n  background-color:var(--toolbar-icon-hover-bg-color);\n}\n\n.toolbarButton::before{\n  opacity:var(--toolbar-icon-opacity);\n  top:6px;\n  left:6px;\n}\n\n.toolbarButton:is(:hover, :focus-visible)::before,\n.secondaryToolbarButton:is(:hover, :focus-visible)::before{\n  background-color:var(--toolbar-icon-hover-bg-color);\n}\n\n.secondaryToolbarButton::before{\n  opacity:var(--doorhanger-icon-opacity);\n  top:5px;\n  inset-inline-start:12px;\n}\n\n#sidebarToggle::before{\n  -webkit-mask-image:var(--toolbarButton-sidebarToggle-icon);\n          mask-image:var(--toolbarButton-sidebarToggle-icon);\n  transform:scaleX(var(--dir-factor));\n}\n\n#secondaryToolbarToggle::before{\n  -webkit-mask-image:var(--toolbarButton-secondaryToolbarToggle-icon);\n          mask-image:var(--toolbarButton-secondaryToolbarToggle-icon);\n  transform:scaleX(var(--dir-factor));\n}\n\n#findPrevious::before{\n  -webkit-mask-image:var(--findbarButton-previous-icon);\n          mask-image:var(--findbarButton-previous-icon);\n}\n\n#findNext::before{\n  -webkit-mask-image:var(--findbarButton-next-icon);\n          mask-image:var(--findbarButton-next-icon);\n}\n\n#previous::before{\n  -webkit-mask-image:var(--toolbarButton-pageUp-icon);\n          mask-image:var(--toolbarButton-pageUp-icon);\n}\n\n#next::before{\n  -webkit-mask-image:var(--toolbarButton-pageDown-icon);\n          mask-image:var(--toolbarButton-pageDown-icon);\n}\n\n#zoomOut::before{\n  -webkit-mask-image:var(--toolbarButton-zoomOut-icon);\n          mask-image:var(--toolbarButton-zoomOut-icon);\n}\n\n#zoomIn::before{\n  -webkit-mask-image:var(--toolbarButton-zoomIn-icon);\n          mask-image:var(--toolbarButton-zoomIn-icon);\n}\n\n#presentationMode::before{\n  -webkit-mask-image:var(--toolbarButton-presentationMode-icon);\n          mask-image:var(--toolbarButton-presentationMode-icon);\n}\n\n#editorFreeText::before{\n  -webkit-mask-image:var(--toolbarButton-editorFreeText-icon);\n          mask-image:var(--toolbarButton-editorFreeText-icon);\n}\n\n#editorHighlight::before{\n  -webkit-mask-image:var(--toolbarButton-editorHighlight-icon);\n          mask-image:var(--toolbarButton-editorHighlight-icon);\n}\n\n#editorInk::before{\n  -webkit-mask-image:var(--toolbarButton-editorInk-icon);\n          mask-image:var(--toolbarButton-editorInk-icon);\n}\n\n#editorStamp::before{\n  -webkit-mask-image:var(--toolbarButton-editorStamp-icon);\n          mask-image:var(--toolbarButton-editorStamp-icon);\n}\n\n:is(#print, #secondaryPrint)::before{\n  -webkit-mask-image:var(--toolbarButton-print-icon);\n          mask-image:var(--toolbarButton-print-icon);\n}\n\n#secondaryOpenFile::before{\n  -webkit-mask-image:var(--toolbarButton-openFile-icon);\n          mask-image:var(--toolbarButton-openFile-icon);\n}\n\n:is(#download, #secondaryDownload)::before{\n  -webkit-mask-image:var(--toolbarButton-download-icon);\n          mask-image:var(--toolbarButton-download-icon);\n}\n\na.secondaryToolbarButton{\n  padding-top:5px;\n  text-decoration:none;\n}\na:is(.toolbarButton, .secondaryToolbarButton)[href=\"#\"]{\n  opacity:0.5;\n  pointer-events:none;\n}\n\n#viewBookmark::before{\n  -webkit-mask-image:var(--toolbarButton-bookmark-icon);\n          mask-image:var(--toolbarButton-bookmark-icon);\n}\n\n#viewThumbnail::before{\n  -webkit-mask-image:var(--toolbarButton-viewThumbnail-icon);\n          mask-image:var(--toolbarButton-viewThumbnail-icon);\n}\n\n#viewOutline::before{\n  -webkit-mask-image:var(--toolbarButton-viewOutline-icon);\n          mask-image:var(--toolbarButton-viewOutline-icon);\n  transform:scaleX(var(--dir-factor));\n}\n\n#viewAttachments::before{\n  -webkit-mask-image:var(--toolbarButton-viewAttachments-icon);\n          mask-image:var(--toolbarButton-viewAttachments-icon);\n}\n\n#viewLayers::before{\n  -webkit-mask-image:var(--toolbarButton-viewLayers-icon);\n          mask-image:var(--toolbarButton-viewLayers-icon);\n}\n\n#currentOutlineItem::before{\n  -webkit-mask-image:var(--toolbarButton-currentOutlineItem-icon);\n          mask-image:var(--toolbarButton-currentOutlineItem-icon);\n  transform:scaleX(var(--dir-factor));\n}\n\n#viewFind::before{\n  -webkit-mask-image:var(--toolbarButton-search-icon);\n          mask-image:var(--toolbarButton-search-icon);\n}\n\n.pdfSidebarNotification::after{\n  position:absolute;\n  display:inline-block;\n  top:2px;\n  inset-inline-end:2px;\n  content:\"\";\n  background-color:rgb(112 219 85);\n  height:9px;\n  width:9px;\n  border-radius:50%;\n}\n\n.secondaryToolbarButton{\n  position:relative;\n  margin:0;\n  padding:0 0 1px;\n  padding-inline-start:36px;\n  height:auto;\n  min-height:26px;\n  width:auto;\n  min-width:100%;\n  text-align:start;\n  white-space:normal;\n  border-radius:0;\n  box-sizing:border-box;\n  display:inline-block;\n}\n.secondaryToolbarButton > span{\n  padding-inline-end:4px;\n}\n\n#firstPage::before{\n  -webkit-mask-image:var(--secondaryToolbarButton-firstPage-icon);\n          mask-image:var(--secondaryToolbarButton-firstPage-icon);\n}\n\n#lastPage::before{\n  -webkit-mask-image:var(--secondaryToolbarButton-lastPage-icon);\n          mask-image:var(--secondaryToolbarButton-lastPage-icon);\n}\n\n#pageRotateCcw::before{\n  -webkit-mask-image:var(--secondaryToolbarButton-rotateCcw-icon);\n          mask-image:var(--secondaryToolbarButton-rotateCcw-icon);\n}\n\n#pageRotateCw::before{\n  -webkit-mask-image:var(--secondaryToolbarButton-rotateCw-icon);\n          mask-image:var(--secondaryToolbarButton-rotateCw-icon);\n}\n\n#cursorSelectTool::before{\n  -webkit-mask-image:var(--secondaryToolbarButton-selectTool-icon);\n          mask-image:var(--secondaryToolbarButton-selectTool-icon);\n}\n\n#cursorHandTool::before{\n  -webkit-mask-image:var(--secondaryToolbarButton-handTool-icon);\n          mask-image:var(--secondaryToolbarButton-handTool-icon);\n}\n\n#scrollPage::before{\n  -webkit-mask-image:var(--secondaryToolbarButton-scrollPage-icon);\n          mask-image:var(--secondaryToolbarButton-scrollPage-icon);\n}\n\n#scrollVertical::before{\n  -webkit-mask-image:var(--secondaryToolbarButton-scrollVertical-icon);\n          mask-image:var(--secondaryToolbarButton-scrollVertical-icon);\n}\n\n#scrollHorizontal::before{\n  -webkit-mask-image:var(--secondaryToolbarButton-scrollHorizontal-icon);\n          mask-image:var(--secondaryToolbarButton-scrollHorizontal-icon);\n}\n\n#scrollWrapped::before{\n  -webkit-mask-image:var(--secondaryToolbarButton-scrollWrapped-icon);\n          mask-image:var(--secondaryToolbarButton-scrollWrapped-icon);\n}\n\n#spreadNone::before{\n  -webkit-mask-image:var(--secondaryToolbarButton-spreadNone-icon);\n          mask-image:var(--secondaryToolbarButton-spreadNone-icon);\n}\n\n#spreadOdd::before{\n  -webkit-mask-image:var(--secondaryToolbarButton-spreadOdd-icon);\n          mask-image:var(--secondaryToolbarButton-spreadOdd-icon);\n}\n\n#spreadEven::before{\n  -webkit-mask-image:var(--secondaryToolbarButton-spreadEven-icon);\n          mask-image:var(--secondaryToolbarButton-spreadEven-icon);\n}\n\n#documentProperties::before{\n  -webkit-mask-image:var(--secondaryToolbarButton-documentProperties-icon);\n          mask-image:var(--secondaryToolbarButton-documentProperties-icon);\n}\n\n.verticalToolbarSeparator{\n  display:block;\n  margin:5px 2px;\n  width:1px;\n  height:22px;\n  background-color:var(--separator-color);\n}\n.horizontalToolbarSeparator{\n  display:block;\n  margin:6px 0;\n  height:1px;\n  width:100%;\n  background-color:var(--doorhanger-separator-color);\n}\n\n.toolbarField{\n  padding:4px 7px;\n  margin:3px 0;\n  border-radius:2px;\n  background-color:var(--field-bg-color);\n  background-clip:padding-box;\n  border:1px solid var(--field-border-color);\n  box-shadow:none;\n  color:var(--field-color);\n  font-size:12px;\n  line-height:16px;\n  outline:none;\n}\n\n.toolbarField[type=\"checkbox\"]{\n  opacity:0;\n  position:absolute !important;\n  left:0;\n  margin:10px 0 3px;\n  margin-inline-start:7px;\n}\n\n#pageNumber{\n  -moz-appearance:textfield;\n  text-align:end;\n  width:40px;\n  background-size:0 0;\n  transition-property:none;\n}\n\n#pageNumber::-webkit-inner-spin-button{\n    -webkit-appearance:none;\n  }\n\n.loadingInput:has(> #pageNumber.loading)::after{\n    display:block;\n    visibility:visible;\n\n    transition-property:visibility;\n    transition-delay:var(--loading-icon-delay);\n  }\n\n.loadingInput::after{\n    position:absolute;\n    visibility:hidden;\n    display:none;\n    top:calc(50% - 8px);\n    width:16px;\n    height:16px;\n\n    content:\"\";\n    background-color:var(--toolbar-icon-bg-color);\n    -webkit-mask-size:cover;\n            mask-size:cover;\n    -webkit-mask-image:var(--loading-icon);\n            mask-image:var(--loading-icon);\n  }\n\n.loadingInput.start::after{\n    inset-inline-start:4px;\n  }\n\n.loadingInput.end::after{\n    inset-inline-end:4px;\n  }\n\n.toolbarField:focus{\n  border-color:#0a84ff;\n}\n\n.toolbarLabel{\n  min-width:16px;\n  padding:7px;\n  margin:2px;\n  border-radius:2px;\n  color:var(--main-color);\n  font-size:12px;\n  line-height:14px;\n  text-align:left;\n  -webkit-user-select:none;\n     -moz-user-select:none;\n          user-select:none;\n  cursor:default;\n}\n\n#numPages.toolbarLabel{\n  padding-inline-start:3px;\n}\n\n#thumbnailView,\n#outlineView,\n#attachmentsView,\n#layersView{\n  position:absolute;\n  width:calc(100% - 8px);\n  inset-block:0;\n  padding:4px 4px 0;\n  overflow:auto;\n  -webkit-user-select:none;\n     -moz-user-select:none;\n          user-select:none;\n}\n#thumbnailView{\n  width:calc(100% - 60px);\n  padding:10px 30px 0;\n}\n\n#thumbnailView > a:is(:active, :focus){\n  outline:0;\n}\n\n.thumbnail{\n  --thumbnail-width:0;\n  --thumbnail-height:0;\n\n  float:var(--inline-start);\n  width:var(--thumbnail-width);\n  height:var(--thumbnail-height);\n  margin:0 10px 5px;\n  padding:1px;\n  border:7px solid transparent;\n  border-radius:2px;\n}\n\n#thumbnailView > a:last-of-type > .thumbnail{\n  margin-bottom:10px;\n}\n\na:focus > .thumbnail,\n.thumbnail:hover{\n  border-color:var(--thumbnail-hover-color);\n}\n.thumbnail.selected{\n  border-color:var(--thumbnail-selected-color) !important;\n}\n\n.thumbnailImage{\n  width:var(--thumbnail-width);\n  height:var(--thumbnail-height);\n  opacity:0.9;\n}\na:focus > .thumbnail > .thumbnailImage,\n.thumbnail:hover > .thumbnailImage{\n  opacity:0.95;\n}\n.thumbnail.selected > .thumbnailImage{\n  opacity:1 !important;\n}\n\n.thumbnail:not([data-loaded]) > .thumbnailImage{\n  width:calc(var(--thumbnail-width) - 2px);\n  height:calc(var(--thumbnail-height) - 2px);\n  border:1px dashed rgb(132 132 132);\n}\n\n.treeWithDeepNesting > .treeItem,\n.treeItem > .treeItems{\n  margin-inline-start:20px;\n}\n\n.treeItem > a{\n  text-decoration:none;\n  display:inline-block;\n  min-width:calc(100% - 4px);\n  height:auto;\n  margin-bottom:1px;\n  padding:2px 0 5px;\n  padding-inline-start:4px;\n  border-radius:2px;\n  color:var(--treeitem-color);\n  font-size:13px;\n  line-height:15px;\n  -webkit-user-select:none;\n     -moz-user-select:none;\n          user-select:none;\n  white-space:normal;\n  cursor:pointer;\n}\n\n#layersView .treeItem > a *{\n  cursor:pointer;\n}\n#layersView .treeItem > a > label{\n  padding-inline-start:4px;\n}\n#layersView .treeItem > a > label > input{\n  float:var(--inline-start);\n  margin-top:1px;\n}\n\n.treeItemToggler{\n  position:relative;\n  float:var(--inline-start);\n  height:0;\n  width:0;\n  color:rgb(255 255 255 / 0.5);\n}\n.treeItemToggler::before{\n  inset-inline-end:4px;\n  -webkit-mask-image:var(--treeitem-expanded-icon);\n          mask-image:var(--treeitem-expanded-icon);\n}\n.treeItemToggler.treeItemsHidden::before{\n  -webkit-mask-image:var(--treeitem-collapsed-icon);\n          mask-image:var(--treeitem-collapsed-icon);\n  transform:scaleX(var(--dir-factor));\n}\n.treeItemToggler.treeItemsHidden ~ .treeItems{\n  display:none;\n}\n\n.treeItem.selected > a{\n  background-color:var(--treeitem-selected-bg-color);\n  color:var(--treeitem-selected-color);\n}\n\n.treeItemToggler:hover,\n.treeItemToggler:hover + a,\n.treeItemToggler:hover ~ .treeItems,\n.treeItem > a:hover{\n  background-color:var(--treeitem-bg-color);\n  background-clip:padding-box;\n  border-radius:2px;\n  color:var(--treeitem-hover-color);\n}\n\n#outlineOptionsContainer{\n  display:none;\n}\n\n#sidebarContainer:has(#outlineView:not(.hidden)) #outlineOptionsContainer{\n    display:inherit;\n  }\n\n.dialogButton{\n  width:auto;\n  margin:3px 4px 2px !important;\n  padding:2px 11px;\n  color:var(--main-color);\n  background-color:var(--dialog-button-bg-color);\n  border:var(--dialog-button-border) !important;\n}\n\ndialog{\n  margin:auto;\n  padding:15px;\n  border-spacing:4px;\n  color:var(--main-color);\n  font:message-box;\n  font-size:12px;\n  line-height:14px;\n  background-color:var(--doorhanger-bg-color);\n  border:1px solid rgb(0 0 0 / 0.5);\n  border-radius:4px;\n  box-shadow:0 1px 4px rgb(0 0 0 / 0.3);\n}\ndialog::backdrop{\n  background-color:rgb(0 0 0 / 0.2);\n}\n\ndialog > .row{\n  display:table-row;\n}\n\ndialog > .row > *{\n  display:table-cell;\n}\n\ndialog .toolbarField{\n  margin:5px 0;\n}\n\ndialog .separator{\n  display:block;\n  margin:4px 0;\n  height:1px;\n  width:100%;\n  background-color:var(--separator-color);\n}\n\ndialog .buttonRow{\n  text-align:center;\n  vertical-align:middle;\n}\n\ndialog :link{\n  color:rgb(255 255 255);\n}\n\n#passwordDialog{\n  text-align:center;\n}\n#passwordDialog .toolbarField{\n  width:200px;\n}\n\n#documentPropertiesDialog{\n  text-align:left;\n}\n#documentPropertiesDialog .row > *{\n  min-width:100px;\n  text-align:start;\n}\n#documentPropertiesDialog .row > span{\n  width:125px;\n  word-wrap:break-word;\n}\n#documentPropertiesDialog .row > p{\n  max-width:225px;\n  word-wrap:break-word;\n}\n#documentPropertiesDialog .buttonRow{\n  margin-top:10px;\n}\n\n.grab-to-pan-grab{\n  cursor:grab !important;\n}\n.grab-to-pan-grab\n  *:not(input):not(textarea):not(button):not(select):not(:link){\n  cursor:inherit !important;\n}\n.grab-to-pan-grab:active,\n.grab-to-pan-grabbing{\n  cursor:grabbing !important;\n}\n.grab-to-pan-grabbing{\n  position:fixed;\n  background:rgb(0 0 0 / 0);\n  display:block;\n  inset:0;\n  overflow:hidden;\n  z-index:50000;\n}\n\n@page{\n  margin:0;\n}\n\n#printContainer{\n  display:none;\n}\n\n@media print{\n  body{\n    background:rgb(0 0 0 / 0) none;\n  }\n  body[data-pdfjsprinting] #outerContainer{\n    display:none;\n  }\n  body[data-pdfjsprinting] #printContainer{\n    display:block;\n  }\n  #printContainer{\n    height:100%;\n  }\n  #printContainer > .printedPage{\n    page-break-after:always;\n    page-break-inside:avoid;\n    height:100%;\n    width:100%;\n\n    display:flex;\n    flex-direction:column;\n    justify-content:center;\n    align-items:center;\n  }\n\n  #printContainer > .xfaPrintedPage .xfaPage{\n    position:absolute;\n  }\n\n  #printContainer > .xfaPrintedPage{\n    page-break-after:always;\n    page-break-inside:avoid;\n    width:100%;\n    height:100%;\n    position:relative;\n  }\n\n  #printContainer > .printedPage :is(canvas, img){\n    max-width:100%;\n    max-height:100%;\n\n    direction:ltr;\n    display:block;\n  }\n}\n\n.visibleMediumView{\n  display:none;\n}\n\n@media all and (max-width: 900px){\n  #toolbarViewerMiddle{\n    display:table;\n    margin:auto;\n    left:auto;\n    position:inherit;\n    transform:none;\n  }\n}\n\n@media all and (max-width: 840px){\n  #sidebarContainer{\n    background-color:var(--sidebar-narrow-bg-color);\n  }\n  #outerContainer.sidebarOpen #viewerContainer{\n    inset-inline-start:0 !important;\n  }\n}\n\n@media all and (max-width: 750px){\n  :root{\n    --editor-toolbar-base-offset:40px;\n  }\n  #outerContainer .hiddenMediumView{\n    display:none;\n  }\n  #outerContainer .visibleMediumView{\n    display:inherit;\n  }\n}\n\n@media all and (max-width: 690px){\n  .hiddenSmallView,\n  .hiddenSmallView *{\n    display:none;\n  }\n  .toolbarButtonSpacer{\n    width:0;\n  }\n  .findbar{\n    inset-inline-start:34px;\n  }\n}\n\n@media all and (max-width: 560px){\n  #scaleSelectContainer{\n    display:none;\n  }\n}\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/viewer.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright 2012 Mozilla Foundation\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nAdobe CMap resources are covered by their own copyright but the same license:\n\n    Copyright 1990-2015 Adobe Systems Incorporated.\n\nSee https://github.com/adobe-type-tools/cmap-resources\n-->\n<html dir=\"ltr\" mozdisallowselectionprint>\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <meta name=\"google\" content=\"notranslate\">\n    <title>PDF.js viewer</title>\n\n<!-- This snippet is used in production (included from viewer.html) -->\n<link rel=\"resource\" type=\"application/l10n\" href=\"locale/locale.json\">\n<script src=\"../build/pdf.mjs\" type=\"module\"></script>\n\n    <link rel=\"stylesheet\" href=\"viewer.css\">\n\n  <script src=\"viewer.mjs\" type=\"module\"></script>\n  <script src=\"./pdfjs-annotation-extension/pdfjs-annotation-extension.js\" type=\"module\"></script>\n  </head>\n\n  <body tabindex=\"1\">\n    <div id=\"outerContainer\">\n\n      <div id=\"sidebarContainer\">\n        <div id=\"toolbarSidebar\">\n          <div id=\"toolbarSidebarLeft\">\n            <div id=\"sidebarViewButtons\" class=\"splitToolbarButton toggled\" role=\"radiogroup\">\n              <button id=\"viewThumbnail\" class=\"toolbarButton toggled\" title=\"Show Thumbnails\" tabindex=\"2\" data-l10n-id=\"pdfjs-thumbs-button\" role=\"radio\" aria-checked=\"true\" aria-controls=\"thumbnailView\">\n                 <span data-l10n-id=\"pdfjs-thumbs-button-label\">Thumbnails</span>\n              </button>\n              <button id=\"viewOutline\" class=\"toolbarButton\" title=\"Show Document Outline (double-click to expand/collapse all items)\" tabindex=\"3\" data-l10n-id=\"pdfjs-document-outline-button\" role=\"radio\" aria-checked=\"false\" aria-controls=\"outlineView\">\n                 <span data-l10n-id=\"pdfjs-document-outline-button-label\">Document Outline</span>\n              </button>\n              <button id=\"viewAttachments\" class=\"toolbarButton\" title=\"Show Attachments\" tabindex=\"4\" data-l10n-id=\"pdfjs-attachments-button\" role=\"radio\" aria-checked=\"false\" aria-controls=\"attachmentsView\">\n                 <span data-l10n-id=\"pdfjs-attachments-button-label\">Attachments</span>\n              </button>\n              <button id=\"viewLayers\" class=\"toolbarButton\" title=\"Show Layers (double-click to reset all layers to the default state)\" tabindex=\"5\" data-l10n-id=\"pdfjs-layers-button\" role=\"radio\" aria-checked=\"false\" aria-controls=\"layersView\">\n                 <span data-l10n-id=\"pdfjs-layers-button-label\">Layers</span>\n              </button>\n            </div>\n          </div>\n\n          <div id=\"toolbarSidebarRight\">\n            <div id=\"outlineOptionsContainer\">\n              <div class=\"verticalToolbarSeparator\"></div>\n\n              <button id=\"currentOutlineItem\" class=\"toolbarButton\" disabled=\"disabled\" title=\"Find Current Outline Item\" tabindex=\"6\" data-l10n-id=\"pdfjs-current-outline-item-button\">\n                <span data-l10n-id=\"pdfjs-current-outline-item-button-label\">Current Outline Item</span>\n              </button>\n            </div>\n          </div>\n        </div>\n        <div id=\"sidebarContent\">\n          <div id=\"thumbnailView\">\n          </div>\n          <div id=\"outlineView\" class=\"hidden\">\n          </div>\n          <div id=\"attachmentsView\" class=\"hidden\">\n          </div>\n          <div id=\"layersView\" class=\"hidden\">\n          </div>\n        </div>\n        <div id=\"sidebarResizer\"></div>\n      </div>  <!-- sidebarContainer -->\n\n      <div id=\"mainContainer\">\n        <div class=\"findbar hidden doorHanger\" id=\"findbar\">\n          <div id=\"findbarInputContainer\">\n            <span class=\"loadingInput end\">\n              <input id=\"findInput\" class=\"toolbarField\" title=\"Find\" placeholder=\"Find in document…\" tabindex=\"91\" data-l10n-id=\"pdfjs-find-input\" aria-invalid=\"false\">\n            </span>\n            <div class=\"splitToolbarButton\">\n              <button id=\"findPrevious\" class=\"toolbarButton\" title=\"Find the previous occurrence of the phrase\" tabindex=\"92\" data-l10n-id=\"pdfjs-find-previous-button\">\n                <span data-l10n-id=\"pdfjs-find-previous-button-label\">Previous</span>\n              </button>\n              <div class=\"splitToolbarButtonSeparator\"></div>\n              <button id=\"findNext\" class=\"toolbarButton\" title=\"Find the next occurrence of the phrase\" tabindex=\"93\" data-l10n-id=\"pdfjs-find-next-button\">\n                <span data-l10n-id=\"pdfjs-find-next-button-label\">Next</span>\n              </button>\n            </div>\n          </div>\n\n          <div id=\"findbarOptionsOneContainer\">\n            <input type=\"checkbox\" id=\"findHighlightAll\" class=\"toolbarField\" tabindex=\"94\">\n            <label for=\"findHighlightAll\" class=\"toolbarLabel\" data-l10n-id=\"pdfjs-find-highlight-checkbox\">Highlight All</label>\n            <input type=\"checkbox\" id=\"findMatchCase\" class=\"toolbarField\" tabindex=\"95\">\n            <label for=\"findMatchCase\" class=\"toolbarLabel\" data-l10n-id=\"pdfjs-find-match-case-checkbox-label\">Match Case</label>\n          </div>\n          <div id=\"findbarOptionsTwoContainer\">\n            <input type=\"checkbox\" id=\"findMatchDiacritics\" class=\"toolbarField\" tabindex=\"96\">\n            <label for=\"findMatchDiacritics\" class=\"toolbarLabel\" data-l10n-id=\"pdfjs-find-match-diacritics-checkbox-label\">Match Diacritics</label>\n            <input type=\"checkbox\" id=\"findEntireWord\" class=\"toolbarField\" tabindex=\"97\">\n            <label for=\"findEntireWord\" class=\"toolbarLabel\" data-l10n-id=\"pdfjs-find-entire-word-checkbox-label\">Whole Words</label>\n          </div>\n\n          <div id=\"findbarMessageContainer\" aria-live=\"polite\">\n            <span id=\"findResultsCount\" class=\"toolbarLabel\"></span>\n            <span id=\"findMsg\" class=\"toolbarLabel\"></span>\n          </div>\n        </div>  <!-- findbar -->\n\n        <div class=\"editorParamsToolbar hidden doorHangerRight\" id=\"editorHighlightParamsToolbar\">\n          <div id=\"highlightParamsToolbarContainer\" class=\"editorParamsToolbarContainer\">\n            <div id=\"editorHighlightColorPicker\" class=\"colorPicker\">\n              <span id=\"highlightColorPickerLabel\" class=\"editorParamsLabel\" data-l10n-id=\"pdfjs-editor-highlight-colorpicker-label\">Highlight color</span>\n            </div>\n            <div id=\"editorHighlightThickness\">\n              <label for=\"editorFreeHighlightThickness\" class=\"editorParamsLabel\" data-l10n-id=\"pdfjs-editor-free-highlight-thickness-input\">Thickness</label>\n              <div class=\"thicknessPicker\">\n                <input type=\"range\" id=\"editorFreeHighlightThickness\" class=\"editorParamsSlider\" data-l10n-id=\"pdfjs-editor-free-highlight-thickness-title\" value=\"12\" min=\"8\" max=\"24\" step=\"1\" tabindex=\"101\">\n              </div>\n            </div>\n            <div id=\"editorHighlightVisibility\">\n              <div class=\"divider\"></div>\n              <div class=\"toggler\">\n                <label for=\"editorHighlightShowAll\" class=\"editorParamsLabel\" data-l10n-id=\"pdfjs-editor-highlight-show-all-button-label\">Show all</label>\n                <button id=\"editorHighlightShowAll\" class=\"toggle-button\" data-l10n-id=\"pdfjs-editor-highlight-show-all-button\" aria-pressed=\"true\" tabindex=\"102\"></button>\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <div class=\"editorParamsToolbar hidden doorHangerRight\" id=\"editorFreeTextParamsToolbar\">\n          <div class=\"editorParamsToolbarContainer\">\n            <div class=\"editorParamsSetter\">\n              <label for=\"editorFreeTextColor\" class=\"editorParamsLabel\" data-l10n-id=\"pdfjs-editor-free-text-color-input\">Color</label>\n              <input type=\"color\" id=\"editorFreeTextColor\" class=\"editorParamsColor\" tabindex=\"103\">\n            </div>\n            <div class=\"editorParamsSetter\">\n              <label for=\"editorFreeTextFontSize\" class=\"editorParamsLabel\" data-l10n-id=\"pdfjs-editor-free-text-size-input\">Size</label>\n              <input type=\"range\" id=\"editorFreeTextFontSize\" class=\"editorParamsSlider\" value=\"10\" min=\"5\" max=\"100\" step=\"1\" tabindex=\"104\">\n            </div>\n          </div>\n        </div>\n\n        <div class=\"editorParamsToolbar hidden doorHangerRight\" id=\"editorInkParamsToolbar\">\n          <div class=\"editorParamsToolbarContainer\">\n            <div class=\"editorParamsSetter\">\n              <label for=\"editorInkColor\" class=\"editorParamsLabel\" data-l10n-id=\"pdfjs-editor-ink-color-input\">Color</label>\n              <input type=\"color\" id=\"editorInkColor\" class=\"editorParamsColor\" tabindex=\"105\">\n            </div>\n            <div class=\"editorParamsSetter\">\n              <label for=\"editorInkThickness\" class=\"editorParamsLabel\" data-l10n-id=\"pdfjs-editor-ink-thickness-input\">Thickness</label>\n              <input type=\"range\" id=\"editorInkThickness\" class=\"editorParamsSlider\" value=\"1\" min=\"1\" max=\"20\" step=\"1\" tabindex=\"106\">\n            </div>\n            <div class=\"editorParamsSetter\">\n              <label for=\"editorInkOpacity\" class=\"editorParamsLabel\" data-l10n-id=\"pdfjs-editor-ink-opacity-input\">Opacity</label>\n              <input type=\"range\" id=\"editorInkOpacity\" class=\"editorParamsSlider\" value=\"100\" min=\"1\" max=\"100\" step=\"1\" tabindex=\"107\">\n            </div>\n          </div>\n        </div>\n\n        <div class=\"editorParamsToolbar hidden doorHangerRight\" id=\"editorStampParamsToolbar\">\n          <div class=\"editorParamsToolbarContainer\">\n            <button id=\"editorStampAddImage\" class=\"secondaryToolbarButton\" title=\"Add image\" tabindex=\"108\" data-l10n-id=\"pdfjs-editor-stamp-add-image-button\">\n              <span class=\"editorParamsLabel\" data-l10n-id=\"pdfjs-editor-stamp-add-image-button-label\">Add image</span>\n            </button>\n          </div>\n        </div>\n\n        <div id=\"secondaryToolbar\" class=\"secondaryToolbar hidden doorHangerRight\">\n          <div id=\"secondaryToolbarButtonContainer\">\n            <button id=\"secondaryOpenFile\" class=\"secondaryToolbarButton\" title=\"Open File\" tabindex=\"51\" data-l10n-id=\"pdfjs-open-file-button\">\n              <span data-l10n-id=\"pdfjs-open-file-button-label\">Open</span>\n            </button>\n\n            <button id=\"secondaryPrint\" class=\"secondaryToolbarButton visibleMediumView\" title=\"Print\" tabindex=\"52\" data-l10n-id=\"pdfjs-print-button\">\n              <span data-l10n-id=\"pdfjs-print-button-label\">Print</span>\n            </button>\n\n            <button id=\"secondaryDownload\" class=\"secondaryToolbarButton visibleMediumView\" title=\"Save\" tabindex=\"53\" data-l10n-id=\"pdfjs-save-button\">\n              <span data-l10n-id=\"pdfjs-save-button-label\">Save</span>\n            </button>\n\n            <div class=\"horizontalToolbarSeparator\"></div>\n\n            <button id=\"presentationMode\" class=\"secondaryToolbarButton\" title=\"Switch to Presentation Mode\" tabindex=\"54\" data-l10n-id=\"pdfjs-presentation-mode-button\">\n              <span data-l10n-id=\"pdfjs-presentation-mode-button-label\">Presentation Mode</span>\n            </button>\n\n            <a href=\"#\" id=\"viewBookmark\" class=\"secondaryToolbarButton\" title=\"Current Page (View URL from Current Page)\" tabindex=\"55\" data-l10n-id=\"pdfjs-bookmark-button\">\n              <span data-l10n-id=\"pdfjs-bookmark-button-label\">Current Page</span>\n            </a>\n\n            <div id=\"viewBookmarkSeparator\" class=\"horizontalToolbarSeparator\"></div>\n\n            <button id=\"firstPage\" class=\"secondaryToolbarButton\" title=\"Go to First Page\" tabindex=\"56\" data-l10n-id=\"pdfjs-first-page-button\">\n              <span data-l10n-id=\"pdfjs-first-page-button-label\">Go to First Page</span>\n            </button>\n            <button id=\"lastPage\" class=\"secondaryToolbarButton\" title=\"Go to Last Page\" tabindex=\"57\" data-l10n-id=\"pdfjs-last-page-button\">\n              <span data-l10n-id=\"pdfjs-last-page-button-label\">Go to Last Page</span>\n            </button>\n\n            <div class=\"horizontalToolbarSeparator\"></div>\n\n            <button id=\"pageRotateCw\" class=\"secondaryToolbarButton\" title=\"Rotate Clockwise\" tabindex=\"58\" data-l10n-id=\"pdfjs-page-rotate-cw-button\">\n              <span data-l10n-id=\"pdfjs-page-rotate-cw-button-label\">Rotate Clockwise</span>\n            </button>\n            <button id=\"pageRotateCcw\" class=\"secondaryToolbarButton\" title=\"Rotate Counterclockwise\" tabindex=\"59\" data-l10n-id=\"pdfjs-page-rotate-ccw-button\">\n              <span data-l10n-id=\"pdfjs-page-rotate-ccw-button-label\">Rotate Counterclockwise</span>\n            </button>\n\n            <div class=\"horizontalToolbarSeparator\"></div>\n\n            <div id=\"cursorToolButtons\" role=\"radiogroup\">\n              <button id=\"cursorSelectTool\" class=\"secondaryToolbarButton toggled\" title=\"Enable Text Selection Tool\" tabindex=\"60\" data-l10n-id=\"pdfjs-cursor-text-select-tool-button\" role=\"radio\" aria-checked=\"true\">\n                <span data-l10n-id=\"pdfjs-cursor-text-select-tool-button-label\">Text Selection Tool</span>\n              </button>\n              <button id=\"cursorHandTool\" class=\"secondaryToolbarButton\" title=\"Enable Hand Tool\" tabindex=\"61\" data-l10n-id=\"pdfjs-cursor-hand-tool-button\" role=\"radio\" aria-checked=\"false\">\n                <span data-l10n-id=\"pdfjs-cursor-hand-tool-button-label\">Hand Tool</span>\n              </button>\n            </div>\n\n            <div class=\"horizontalToolbarSeparator\"></div>\n\n            <div id=\"scrollModeButtons\" role=\"radiogroup\">\n              <button id=\"scrollPage\" class=\"secondaryToolbarButton\" title=\"Use Page Scrolling\" tabindex=\"62\" data-l10n-id=\"pdfjs-scroll-page-button\" role=\"radio\" aria-checked=\"false\">\n                <span data-l10n-id=\"pdfjs-scroll-page-button-label\">Page Scrolling</span>\n              </button>\n              <button id=\"scrollVertical\" class=\"secondaryToolbarButton toggled\" title=\"Use Vertical Scrolling\" tabindex=\"63\" data-l10n-id=\"pdfjs-scroll-vertical-button\" role=\"radio\" aria-checked=\"true\">\n                <span data-l10n-id=\"pdfjs-scroll-vertical-button-label\" >Vertical Scrolling</span>\n              </button>\n              <button id=\"scrollHorizontal\" class=\"secondaryToolbarButton\" title=\"Use Horizontal Scrolling\" tabindex=\"64\" data-l10n-id=\"pdfjs-scroll-horizontal-button\" role=\"radio\" aria-checked=\"false\">\n                <span data-l10n-id=\"pdfjs-scroll-horizontal-button-label\">Horizontal Scrolling</span>\n              </button>\n              <button id=\"scrollWrapped\" class=\"secondaryToolbarButton\" title=\"Use Wrapped Scrolling\" tabindex=\"65\" data-l10n-id=\"pdfjs-scroll-wrapped-button\" role=\"radio\" aria-checked=\"false\">\n                <span data-l10n-id=\"pdfjs-scroll-wrapped-button-label\">Wrapped Scrolling</span>\n              </button>\n            </div>\n\n            <div class=\"horizontalToolbarSeparator\"></div>\n\n            <div id=\"spreadModeButtons\" role=\"radiogroup\">\n              <button id=\"spreadNone\" class=\"secondaryToolbarButton toggled\" title=\"Do not join page spreads\" tabindex=\"66\" data-l10n-id=\"pdfjs-spread-none-button\" role=\"radio\" aria-checked=\"true\">\n                <span data-l10n-id=\"pdfjs-spread-none-button-label\">No Spreads</span>\n              </button>\n              <button id=\"spreadOdd\" class=\"secondaryToolbarButton\" title=\"Join page spreads starting with odd-numbered pages\" tabindex=\"67\" data-l10n-id=\"pdfjs-spread-odd-button\" role=\"radio\" aria-checked=\"false\">\n                <span data-l10n-id=\"pdfjs-spread-odd-button-label\">Odd Spreads</span>\n              </button>\n              <button id=\"spreadEven\" class=\"secondaryToolbarButton\" title=\"Join page spreads starting with even-numbered pages\" tabindex=\"68\" data-l10n-id=\"pdfjs-spread-even-button\" role=\"radio\" aria-checked=\"false\">\n                <span data-l10n-id=\"pdfjs-spread-even-button-label\">Even Spreads</span>\n              </button>\n            </div>\n\n            <div class=\"horizontalToolbarSeparator\"></div>\n\n            <button id=\"documentProperties\" class=\"secondaryToolbarButton\" title=\"Document Properties…\" tabindex=\"69\" data-l10n-id=\"pdfjs-document-properties-button\" aria-controls=\"documentPropertiesDialog\">\n              <span data-l10n-id=\"pdfjs-document-properties-button-label\">Document Properties…</span>\n            </button>\n          </div>\n        </div>  <!-- secondaryToolbar -->\n\n        <div class=\"toolbar\">\n          <div id=\"toolbarContainer\">\n            <div id=\"toolbarViewer\">\n              <div id=\"toolbarViewerLeft\">\n                <button id=\"sidebarToggle\" class=\"toolbarButton\" title=\"Toggle Sidebar\" tabindex=\"11\" data-l10n-id=\"pdfjs-toggle-sidebar-button\" aria-expanded=\"false\" aria-controls=\"sidebarContainer\">\n                  <span data-l10n-id=\"pdfjs-toggle-sidebar-button-label\">Toggle Sidebar</span>\n                </button>\n                <div class=\"toolbarButtonSpacer\"></div>\n                <button id=\"viewFind\" class=\"toolbarButton\" title=\"Find in Document\" tabindex=\"12\" data-l10n-id=\"pdfjs-findbar-button\" aria-expanded=\"false\" aria-controls=\"findbar\">\n                  <span data-l10n-id=\"pdfjs-findbar-button-label\">Find</span>\n                </button>\n                <div class=\"splitToolbarButton hiddenSmallView\">\n                  <button class=\"toolbarButton\" title=\"Previous Page\" id=\"previous\" tabindex=\"13\" data-l10n-id=\"pdfjs-previous-button\">\n                    <span data-l10n-id=\"pdfjs-previous-button-label\">Previous</span>\n                  </button>\n                  <div class=\"splitToolbarButtonSeparator\"></div>\n                  <button class=\"toolbarButton\" title=\"Next Page\" id=\"next\" tabindex=\"14\" data-l10n-id=\"pdfjs-next-button\">\n                    <span data-l10n-id=\"pdfjs-next-button-label\">Next</span>\n                  </button>\n                </div>\n                <span class=\"loadingInput start\">\n                  <input type=\"number\" id=\"pageNumber\" class=\"toolbarField\" title=\"Page\" value=\"1\" min=\"1\" tabindex=\"15\" data-l10n-id=\"pdfjs-page-input\" autocomplete=\"off\">\n                </span>\n                <span id=\"numPages\" class=\"toolbarLabel\"></span>\n              </div>\n              <div id=\"toolbarViewerRight\">\n                <div id=\"editorModeButtons\" class=\"splitToolbarButton toggled\" role=\"radiogroup\">\n                  <button id=\"editorHighlight\" class=\"toolbarButton\" hidden=\"true\" disabled=\"disabled\" title=\"Highlight\" role=\"radio\" aria-checked=\"false\" aria-controls=\"editorHighlightParamsToolbar\" tabindex=\"31\" data-l10n-id=\"pdfjs-editor-highlight-button\">\n                    <span data-l10n-id=\"pdfjs-editor-highlight-button-label\">Highlight</span>\n                  </button>\n                  <button id=\"editorFreeText\" class=\"toolbarButton\" disabled=\"disabled\" title=\"Text\" role=\"radio\" aria-checked=\"false\" aria-controls=\"editorFreeTextParamsToolbar\" tabindex=\"32\" data-l10n-id=\"pdfjs-editor-free-text-button\">\n                    <span data-l10n-id=\"pdfjs-editor-free-text-button-label\">Text</span>\n                  </button>\n                  <button id=\"editorInk\" class=\"toolbarButton\" disabled=\"disabled\" title=\"Draw\" role=\"radio\" aria-checked=\"false\" aria-controls=\"editorInkParamsToolbar\" tabindex=\"33\" data-l10n-id=\"pdfjs-editor-ink-button\">\n                    <span data-l10n-id=\"pdfjs-editor-ink-button-label\">Draw</span>\n                  </button>\n                  <button id=\"editorStamp\" class=\"toolbarButton hidden\" disabled=\"disabled\" title=\"Add or edit images\" role=\"radio\" aria-checked=\"false\" aria-controls=\"editorStampParamsToolbar\" tabindex=\"34\" data-l10n-id=\"pdfjs-editor-stamp-button\">\n                    <span data-l10n-id=\"pdfjs-editor-stamp-button-label\">Add or edit images</span>\n                  </button>\n                </div>\n\n                <div id=\"editorModeSeparator\" class=\"verticalToolbarSeparator\"></div>\n\n                <button id=\"print\" class=\"toolbarButton hiddenMediumView\" title=\"Print\" tabindex=\"41\" data-l10n-id=\"pdfjs-print-button\">\n                  <span data-l10n-id=\"pdfjs-print-button-label\">Print</span>\n                </button>\n\n                <button id=\"download\" class=\"toolbarButton hiddenMediumView\" title=\"Save\" tabindex=\"42\" data-l10n-id=\"pdfjs-save-button\">\n                  <span data-l10n-id=\"pdfjs-save-button-label\">Save</span>\n                </button>\n\n                <div class=\"verticalToolbarSeparator hiddenMediumView\"></div>\n\n                <button id=\"secondaryToolbarToggle\" class=\"toolbarButton\" title=\"Tools\" tabindex=\"43\" data-l10n-id=\"pdfjs-tools-button\" aria-expanded=\"false\" aria-controls=\"secondaryToolbar\">\n                  <span data-l10n-id=\"pdfjs-tools-button-label\">Tools</span>\n                </button>\n              </div>\n              <div id=\"toolbarViewerMiddle\">\n                <div class=\"splitToolbarButton\">\n                  <button id=\"zoomOut\" class=\"toolbarButton\" title=\"Zoom Out\" tabindex=\"21\" data-l10n-id=\"pdfjs-zoom-out-button\">\n                    <span data-l10n-id=\"pdfjs-zoom-out-button-label\">Zoom Out</span>\n                  </button>\n                  <div class=\"splitToolbarButtonSeparator\"></div>\n                  <button id=\"zoomIn\" class=\"toolbarButton\" title=\"Zoom In\" tabindex=\"22\" data-l10n-id=\"pdfjs-zoom-in-button\">\n                    <span data-l10n-id=\"pdfjs-zoom-in-button-label\">Zoom In</span>\n                   </button>\n                </div>\n                <span id=\"scaleSelectContainer\" class=\"dropdownToolbarButton\">\n                  <select id=\"scaleSelect\" title=\"Zoom\" tabindex=\"23\" data-l10n-id=\"pdfjs-zoom-select\">\n                    <option id=\"pageAutoOption\" title=\"\" value=\"auto\" selected=\"selected\" data-l10n-id=\"pdfjs-page-scale-auto\">Automatic Zoom</option>\n                    <option id=\"pageActualOption\" title=\"\" value=\"page-actual\" data-l10n-id=\"pdfjs-page-scale-actual\">Actual Size</option>\n                    <option id=\"pageFitOption\" title=\"\" value=\"page-fit\" data-l10n-id=\"pdfjs-page-scale-fit\">Page Fit</option>\n                    <option id=\"pageWidthOption\" title=\"\" value=\"page-width\" data-l10n-id=\"pdfjs-page-scale-width\">Page Width</option>\n                    <option id=\"customScaleOption\" title=\"\" value=\"custom\" disabled=\"disabled\" hidden=\"true\" data-l10n-id=\"pdfjs-page-scale-percent\" data-l10n-args='{ \"scale\": 0 }'>0%</option>\n                    <option title=\"\" value=\"0.5\" data-l10n-id=\"pdfjs-page-scale-percent\" data-l10n-args='{ \"scale\": 50 }'>50%</option>\n                    <option title=\"\" value=\"0.75\" data-l10n-id=\"pdfjs-page-scale-percent\" data-l10n-args='{ \"scale\": 75 }'>75%</option>\n                    <option title=\"\" value=\"1\" data-l10n-id=\"pdfjs-page-scale-percent\" data-l10n-args='{ \"scale\": 100 }'>100%</option>\n                    <option title=\"\" value=\"1.25\" data-l10n-id=\"pdfjs-page-scale-percent\" data-l10n-args='{ \"scale\": 125 }'>125%</option>\n                    <option title=\"\" value=\"1.5\" data-l10n-id=\"pdfjs-page-scale-percent\" data-l10n-args='{ \"scale\": 150 }'>150%</option>\n                    <option title=\"\" value=\"2\" data-l10n-id=\"pdfjs-page-scale-percent\" data-l10n-args='{ \"scale\": 200 }'>200%</option>\n                    <option title=\"\" value=\"3\" data-l10n-id=\"pdfjs-page-scale-percent\" data-l10n-args='{ \"scale\": 300 }'>300%</option>\n                    <option title=\"\" value=\"4\" data-l10n-id=\"pdfjs-page-scale-percent\" data-l10n-args='{ \"scale\": 400 }'>400%</option>\n                  </select>\n                </span>\n              </div>\n            </div>\n            <div id=\"loadingBar\">\n              <div class=\"progress\">\n                <div class=\"glimmer\">\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <div id=\"viewerContainer\" tabindex=\"0\">\n          <div id=\"viewer\" class=\"pdfViewer\"></div>\n        </div>\n      </div> <!-- mainContainer -->\n\n      <div id=\"dialogContainer\">\n        <dialog id=\"passwordDialog\">\n          <div class=\"row\">\n            <label for=\"password\" id=\"passwordText\" data-l10n-id=\"pdfjs-password-label\">Enter the password to open this PDF file:</label>\n          </div>\n          <div class=\"row\">\n            <input type=\"password\" id=\"password\" class=\"toolbarField\">\n          </div>\n          <div class=\"buttonRow\">\n            <button id=\"passwordCancel\" class=\"dialogButton\"><span data-l10n-id=\"pdfjs-password-cancel-button\">Cancel</span></button>\n            <button id=\"passwordSubmit\" class=\"dialogButton\"><span data-l10n-id=\"pdfjs-password-ok-button\">OK</span></button>\n          </div>\n        </dialog>\n        <dialog id=\"documentPropertiesDialog\">\n          <div class=\"row\">\n            <span id=\"fileNameLabel\" data-l10n-id=\"pdfjs-document-properties-file-name\">File name:</span>\n            <p id=\"fileNameField\" aria-labelledby=\"fileNameLabel\">-</p>\n          </div>\n          <div class=\"row\">\n            <span id=\"fileSizeLabel\" data-l10n-id=\"pdfjs-document-properties-file-size\">File size:</span>\n            <p id=\"fileSizeField\" aria-labelledby=\"fileSizeLabel\">-</p>\n          </div>\n          <div class=\"separator\"></div>\n          <div class=\"row\">\n            <span id=\"titleLabel\" data-l10n-id=\"pdfjs-document-properties-title\">Title:</span>\n            <p id=\"titleField\" aria-labelledby=\"titleLabel\">-</p>\n          </div>\n          <div class=\"row\">\n            <span id=\"authorLabel\" data-l10n-id=\"pdfjs-document-properties-author\">Author:</span>\n            <p id=\"authorField\" aria-labelledby=\"authorLabel\">-</p>\n          </div>\n          <div class=\"row\">\n            <span id=\"subjectLabel\" data-l10n-id=\"pdfjs-document-properties-subject\">Subject:</span>\n            <p id=\"subjectField\" aria-labelledby=\"subjectLabel\">-</p>\n          </div>\n          <div class=\"row\">\n            <span id=\"keywordsLabel\" data-l10n-id=\"pdfjs-document-properties-keywords\">Keywords:</span>\n            <p id=\"keywordsField\" aria-labelledby=\"keywordsLabel\">-</p>\n          </div>\n          <div class=\"row\">\n            <span id=\"creationDateLabel\" data-l10n-id=\"pdfjs-document-properties-creation-date\">Creation Date:</span>\n            <p id=\"creationDateField\" aria-labelledby=\"creationDateLabel\">-</p>\n          </div>\n          <div class=\"row\">\n            <span id=\"modificationDateLabel\" data-l10n-id=\"pdfjs-document-properties-modification-date\">Modification Date:</span>\n            <p id=\"modificationDateField\" aria-labelledby=\"modificationDateLabel\">-</p>\n          </div>\n          <div class=\"row\">\n            <span id=\"creatorLabel\" data-l10n-id=\"pdfjs-document-properties-creator\">Creator:</span>\n            <p id=\"creatorField\" aria-labelledby=\"creatorLabel\">-</p>\n          </div>\n          <div class=\"separator\"></div>\n          <div class=\"row\">\n            <span id=\"producerLabel\" data-l10n-id=\"pdfjs-document-properties-producer\">PDF Producer:</span>\n            <p id=\"producerField\" aria-labelledby=\"producerLabel\">-</p>\n          </div>\n          <div class=\"row\">\n            <span id=\"versionLabel\" data-l10n-id=\"pdfjs-document-properties-version\">PDF Version:</span>\n            <p id=\"versionField\" aria-labelledby=\"versionLabel\">-</p>\n          </div>\n          <div class=\"row\">\n            <span id=\"pageCountLabel\" data-l10n-id=\"pdfjs-document-properties-page-count\">Page Count:</span>\n            <p id=\"pageCountField\" aria-labelledby=\"pageCountLabel\">-</p>\n          </div>\n          <div class=\"row\">\n            <span id=\"pageSizeLabel\" data-l10n-id=\"pdfjs-document-properties-page-size\">Page Size:</span>\n            <p id=\"pageSizeField\" aria-labelledby=\"pageSizeLabel\">-</p>\n          </div>\n          <div class=\"separator\"></div>\n          <div class=\"row\">\n            <span id=\"linearizedLabel\" data-l10n-id=\"pdfjs-document-properties-linearized\">Fast Web View:</span>\n            <p id=\"linearizedField\" aria-labelledby=\"linearizedLabel\">-</p>\n          </div>\n          <div class=\"buttonRow\">\n            <button id=\"documentPropertiesClose\" class=\"dialogButton\"><span data-l10n-id=\"pdfjs-document-properties-close-button\">Close</span></button>\n          </div>\n        </dialog>\n        <dialog class=\"dialog altText\" id=\"altTextDialog\" aria-labelledby=\"dialogLabel\" aria-describedby=\"dialogDescription\">\n          <div id=\"altTextContainer\" class=\"mainContainer\">\n            <div id=\"overallDescription\">\n              <span id=\"dialogLabel\" data-l10n-id=\"pdfjs-editor-alt-text-dialog-label\" class=\"title\">Choose an option</span>\n              <span id=\"dialogDescription\" data-l10n-id=\"pdfjs-editor-alt-text-dialog-description\">\n                Alt text (alternative text) helps when people can’t see the image or when it doesn’t load.\n              </span>\n            </div>\n            <div id=\"addDescription\">\n              <div class=\"radio\">\n                <div class=\"radioButton\">\n                  <input type=\"radio\" id=\"descriptionButton\" name=\"altTextOption\" tabindex=\"0\" aria-describedby=\"descriptionAreaLabel\" checked>\n                  <label for=\"descriptionButton\" data-l10n-id=\"pdfjs-editor-alt-text-add-description-label\">Add a description</label>\n                </div>\n                <div class=\"radioLabel\">\n                  <span id=\"descriptionAreaLabel\" data-l10n-id=\"pdfjs-editor-alt-text-add-description-description\">\n                    Aim for 1-2 sentences that describe the subject, setting, or actions.\n                  </span>\n                </div>\n              </div>\n              <div class=\"descriptionArea\">\n                <textarea id=\"descriptionTextarea\" placeholder=\"For example, “A young man sits down at a table to eat a meal”\" aria-labelledby=\"descriptionAreaLabel\" data-l10n-id=\"pdfjs-editor-alt-text-textarea\" tabindex=\"0\"></textarea>\n              </div>\n            </div>\n            <div id=\"markAsDecorative\">\n              <div class=\"radio\">\n                <div class=\"radioButton\">\n                  <input type=\"radio\" id=\"decorativeButton\" name=\"altTextOption\" aria-describedby=\"decorativeLabel\">\n                  <label for=\"decorativeButton\" data-l10n-id=\"pdfjs-editor-alt-text-mark-decorative-label\">Mark as decorative</label>\n                </div>\n                <div class=\"radioLabel\">\n                  <span id=\"decorativeLabel\" data-l10n-id=\"pdfjs-editor-alt-text-mark-decorative-description\">\n                    This is used for ornamental images, like borders or watermarks.\n                  </span>\n                </div>\n              </div>\n            </div>\n            <div id=\"buttons\">\n              <button id=\"altTextCancel\" class=\"secondaryButton\" tabindex=\"0\"><span data-l10n-id=\"pdfjs-editor-alt-text-cancel-button\">Cancel</span></button>\n              <button id=\"altTextSave\" class=\"primaryButton\" tabindex=\"0\"><span data-l10n-id=\"pdfjs-editor-alt-text-save-button\">Save</span></button>\n            </div>\n          </div>\n        </dialog>\n        <dialog id=\"printServiceDialog\" style=\"min-width: 200px;\">\n          <div class=\"row\">\n            <span data-l10n-id=\"pdfjs-print-progress-message\">Preparing document for printing…</span>\n          </div>\n          <div class=\"row\">\n            <progress value=\"0\" max=\"100\"></progress>\n            <span data-l10n-id=\"pdfjs-print-progress-percent\" data-l10n-args='{ \"progress\": 0 }' class=\"relative-progress\">0%</span>\n          </div>\n          <div class=\"buttonRow\">\n            <button id=\"printCancel\" class=\"dialogButton\"><span data-l10n-id=\"pdfjs-print-progress-close-button\">Cancel</span></button>\n          </div>\n        </dialog>\n      </div>  <!-- dialogContainer -->\n\n    </div> <!-- outerContainer -->\n    <div id=\"printContainer\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "examples/pdfjs-4.3.136-dist/web/viewer.mjs",
    "content": "/**\n * @licstart The following is the entire license notice for the\n * JavaScript code in this page\n *\n * Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * @licend The above is the entire license notice for the\n * JavaScript code in this page\n */\n\n/******/ // The require scope\n/******/ var __webpack_require__ = {};\n/******/ \n/************************************************************************/\n/******/ /* webpack/runtime/define property getters */\n/******/ (() => {\n/******/ \t// define getter functions for harmony exports\n/******/ \t__webpack_require__.d = (exports, definition) => {\n/******/ \t\tfor(var key in definition) {\n/******/ \t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t};\n/******/ })();\n/******/ \n/******/ /* webpack/runtime/hasOwnProperty shorthand */\n/******/ (() => {\n/******/ \t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ })();\n/******/ \n/************************************************************************/\nvar __webpack_exports__ = {};\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  PDFViewerApplication: () => (/* reexport */ PDFViewerApplication),\n  PDFViewerApplicationConstants: () => (/* binding */ AppConstants),\n  PDFViewerApplicationOptions: () => (/* reexport */ AppOptions)\n});\n\n;// CONCATENATED MODULE: ./web/ui_utils.js\nconst DEFAULT_SCALE_VALUE = \"auto\";\nconst DEFAULT_SCALE = 1.0;\nconst DEFAULT_SCALE_DELTA = 1.1;\nconst MIN_SCALE = 0.1;\nconst MAX_SCALE = 10.0;\nconst UNKNOWN_SCALE = 0;\nconst MAX_AUTO_SCALE = 1.25;\nconst SCROLLBAR_PADDING = 40;\nconst VERTICAL_PADDING = 5;\nconst RenderingStates = {\n  INITIAL: 0,\n  RUNNING: 1,\n  PAUSED: 2,\n  FINISHED: 3\n};\nconst PresentationModeState = {\n  UNKNOWN: 0,\n  NORMAL: 1,\n  CHANGING: 2,\n  FULLSCREEN: 3\n};\nconst SidebarView = {\n  UNKNOWN: -1,\n  NONE: 0,\n  THUMBS: 1,\n  OUTLINE: 2,\n  ATTACHMENTS: 3,\n  LAYERS: 4\n};\nconst TextLayerMode = {\n  DISABLE: 0,\n  ENABLE: 1,\n  ENABLE_PERMISSIONS: 2\n};\nconst ScrollMode = {\n  UNKNOWN: -1,\n  VERTICAL: 0,\n  HORIZONTAL: 1,\n  WRAPPED: 2,\n  PAGE: 3\n};\nconst SpreadMode = {\n  UNKNOWN: -1,\n  NONE: 0,\n  ODD: 1,\n  EVEN: 2\n};\nconst CursorTool = {\n  SELECT: 0,\n  HAND: 1,\n  ZOOM: 2\n};\nconst AutoPrintRegExp = /\\bprint\\s*\\(/;\nclass OutputScale {\n  constructor() {\n    const pixelRatio = window.devicePixelRatio || 1;\n    this.sx = pixelRatio;\n    this.sy = pixelRatio;\n  }\n  get scaled() {\n    return this.sx !== 1 || this.sy !== 1;\n  }\n}\nfunction scrollIntoView(element, spot, scrollMatches = false) {\n  let parent = element.offsetParent;\n  if (!parent) {\n    console.error(\"offsetParent is not set -- cannot scroll\");\n    return;\n  }\n  let offsetY = element.offsetTop + element.clientTop;\n  let offsetX = element.offsetLeft + element.clientLeft;\n  while (parent.clientHeight === parent.scrollHeight && parent.clientWidth === parent.scrollWidth || scrollMatches && (parent.classList.contains(\"markedContent\") || getComputedStyle(parent).overflow === \"hidden\")) {\n    offsetY += parent.offsetTop;\n    offsetX += parent.offsetLeft;\n    parent = parent.offsetParent;\n    if (!parent) {\n      return;\n    }\n  }\n  if (spot) {\n    if (spot.top !== undefined) {\n      offsetY += spot.top;\n    }\n    if (spot.left !== undefined) {\n      offsetX += spot.left;\n      parent.scrollLeft = offsetX;\n    }\n  }\n  parent.scrollTop = offsetY;\n}\nfunction watchScroll(viewAreaElement, callback) {\n  const debounceScroll = function (evt) {\n    if (rAF) {\n      return;\n    }\n    rAF = window.requestAnimationFrame(function viewAreaElementScrolled() {\n      rAF = null;\n      const currentX = viewAreaElement.scrollLeft;\n      const lastX = state.lastX;\n      if (currentX !== lastX) {\n        state.right = currentX > lastX;\n      }\n      state.lastX = currentX;\n      const currentY = viewAreaElement.scrollTop;\n      const lastY = state.lastY;\n      if (currentY !== lastY) {\n        state.down = currentY > lastY;\n      }\n      state.lastY = currentY;\n      callback(state);\n    });\n  };\n  const state = {\n    right: true,\n    down: true,\n    lastX: viewAreaElement.scrollLeft,\n    lastY: viewAreaElement.scrollTop,\n    _eventHandler: debounceScroll\n  };\n  let rAF = null;\n  viewAreaElement.addEventListener(\"scroll\", debounceScroll, true);\n  return state;\n}\nfunction parseQueryString(query) {\n  const params = new Map();\n  for (const [key, value] of new URLSearchParams(query)) {\n    params.set(key.toLowerCase(), value);\n  }\n  return params;\n}\nconst InvisibleCharsRegExp = /[\\x00-\\x1F]/g;\nfunction removeNullCharacters(str, replaceInvisible = false) {\n  if (!InvisibleCharsRegExp.test(str)) {\n    return str;\n  }\n  if (replaceInvisible) {\n    return str.replaceAll(InvisibleCharsRegExp, m => m === \"\\x00\" ? \"\" : \" \");\n  }\n  return str.replaceAll(\"\\x00\", \"\");\n}\nfunction binarySearchFirstItem(items, condition, start = 0) {\n  let minIndex = start;\n  let maxIndex = items.length - 1;\n  if (maxIndex < 0 || !condition(items[maxIndex])) {\n    return items.length;\n  }\n  if (condition(items[minIndex])) {\n    return minIndex;\n  }\n  while (minIndex < maxIndex) {\n    const currentIndex = minIndex + maxIndex >> 1;\n    const currentItem = items[currentIndex];\n    if (condition(currentItem)) {\n      maxIndex = currentIndex;\n    } else {\n      minIndex = currentIndex + 1;\n    }\n  }\n  return minIndex;\n}\nfunction approximateFraction(x) {\n  if (Math.floor(x) === x) {\n    return [x, 1];\n  }\n  const xinv = 1 / x;\n  const limit = 8;\n  if (xinv > limit) {\n    return [1, limit];\n  } else if (Math.floor(xinv) === xinv) {\n    return [1, xinv];\n  }\n  const x_ = x > 1 ? xinv : x;\n  let a = 0,\n    b = 1,\n    c = 1,\n    d = 1;\n  while (true) {\n    const p = a + c,\n      q = b + d;\n    if (q > limit) {\n      break;\n    }\n    if (x_ <= p / q) {\n      c = p;\n      d = q;\n    } else {\n      a = p;\n      b = q;\n    }\n  }\n  let result;\n  if (x_ - a / b < c / d - x_) {\n    result = x_ === x ? [a, b] : [b, a];\n  } else {\n    result = x_ === x ? [c, d] : [d, c];\n  }\n  return result;\n}\nfunction roundToDivide(x, div) {\n  const r = x % div;\n  return r === 0 ? x : Math.round(x - r + div);\n}\nfunction getPageSizeInches({\n  view,\n  userUnit,\n  rotate\n}) {\n  const [x1, y1, x2, y2] = view;\n  const changeOrientation = rotate % 180 !== 0;\n  const width = (x2 - x1) / 72 * userUnit;\n  const height = (y2 - y1) / 72 * userUnit;\n  return {\n    width: changeOrientation ? height : width,\n    height: changeOrientation ? width : height\n  };\n}\nfunction backtrackBeforeAllVisibleElements(index, views, top) {\n  if (index < 2) {\n    return index;\n  }\n  let elt = views[index].div;\n  let pageTop = elt.offsetTop + elt.clientTop;\n  if (pageTop >= top) {\n    elt = views[index - 1].div;\n    pageTop = elt.offsetTop + elt.clientTop;\n  }\n  for (let i = index - 2; i >= 0; --i) {\n    elt = views[i].div;\n    if (elt.offsetTop + elt.clientTop + elt.clientHeight <= pageTop) {\n      break;\n    }\n    index = i;\n  }\n  return index;\n}\nfunction getVisibleElements({\n  scrollEl,\n  views,\n  sortByVisibility = false,\n  horizontal = false,\n  rtl = false\n}) {\n  const top = scrollEl.scrollTop,\n    bottom = top + scrollEl.clientHeight;\n  const left = scrollEl.scrollLeft,\n    right = left + scrollEl.clientWidth;\n  function isElementBottomAfterViewTop(view) {\n    const element = view.div;\n    const elementBottom = element.offsetTop + element.clientTop + element.clientHeight;\n    return elementBottom > top;\n  }\n  function isElementNextAfterViewHorizontally(view) {\n    const element = view.div;\n    const elementLeft = element.offsetLeft + element.clientLeft;\n    const elementRight = elementLeft + element.clientWidth;\n    return rtl ? elementLeft < right : elementRight > left;\n  }\n  const visible = [],\n    ids = new Set(),\n    numViews = views.length;\n  let firstVisibleElementInd = binarySearchFirstItem(views, horizontal ? isElementNextAfterViewHorizontally : isElementBottomAfterViewTop);\n  if (firstVisibleElementInd > 0 && firstVisibleElementInd < numViews && !horizontal) {\n    firstVisibleElementInd = backtrackBeforeAllVisibleElements(firstVisibleElementInd, views, top);\n  }\n  let lastEdge = horizontal ? right : -1;\n  for (let i = firstVisibleElementInd; i < numViews; i++) {\n    const view = views[i],\n      element = view.div;\n    const currentWidth = element.offsetLeft + element.clientLeft;\n    const currentHeight = element.offsetTop + element.clientTop;\n    const viewWidth = element.clientWidth,\n      viewHeight = element.clientHeight;\n    const viewRight = currentWidth + viewWidth;\n    const viewBottom = currentHeight + viewHeight;\n    if (lastEdge === -1) {\n      if (viewBottom >= bottom) {\n        lastEdge = viewBottom;\n      }\n    } else if ((horizontal ? currentWidth : currentHeight) > lastEdge) {\n      break;\n    }\n    if (viewBottom <= top || currentHeight >= bottom || viewRight <= left || currentWidth >= right) {\n      continue;\n    }\n    const hiddenHeight = Math.max(0, top - currentHeight) + Math.max(0, viewBottom - bottom);\n    const hiddenWidth = Math.max(0, left - currentWidth) + Math.max(0, viewRight - right);\n    const fractionHeight = (viewHeight - hiddenHeight) / viewHeight,\n      fractionWidth = (viewWidth - hiddenWidth) / viewWidth;\n    const percent = fractionHeight * fractionWidth * 100 | 0;\n    visible.push({\n      id: view.id,\n      x: currentWidth,\n      y: currentHeight,\n      view,\n      percent,\n      widthPercent: fractionWidth * 100 | 0\n    });\n    ids.add(view.id);\n  }\n  const first = visible[0],\n    last = visible.at(-1);\n  if (sortByVisibility) {\n    visible.sort(function (a, b) {\n      const pc = a.percent - b.percent;\n      if (Math.abs(pc) > 0.001) {\n        return -pc;\n      }\n      return a.id - b.id;\n    });\n  }\n  return {\n    first,\n    last,\n    views: visible,\n    ids\n  };\n}\nfunction normalizeWheelEventDirection(evt) {\n  let delta = Math.hypot(evt.deltaX, evt.deltaY);\n  const angle = Math.atan2(evt.deltaY, evt.deltaX);\n  if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) {\n    delta = -delta;\n  }\n  return delta;\n}\nfunction normalizeWheelEventDelta(evt) {\n  const deltaMode = evt.deltaMode;\n  let delta = normalizeWheelEventDirection(evt);\n  const MOUSE_PIXELS_PER_LINE = 30;\n  const MOUSE_LINES_PER_PAGE = 30;\n  if (deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n    delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE;\n  } else if (deltaMode === WheelEvent.DOM_DELTA_LINE) {\n    delta /= MOUSE_LINES_PER_PAGE;\n  }\n  return delta;\n}\nfunction isValidRotation(angle) {\n  return Number.isInteger(angle) && angle % 90 === 0;\n}\nfunction isValidScrollMode(mode) {\n  return Number.isInteger(mode) && Object.values(ScrollMode).includes(mode) && mode !== ScrollMode.UNKNOWN;\n}\nfunction isValidSpreadMode(mode) {\n  return Number.isInteger(mode) && Object.values(SpreadMode).includes(mode) && mode !== SpreadMode.UNKNOWN;\n}\nfunction isPortraitOrientation(size) {\n  return size.width <= size.height;\n}\nconst animationStarted = new Promise(function (resolve) {\n  window.requestAnimationFrame(resolve);\n});\nconst docStyle = document.documentElement.style;\nfunction clamp(v, min, max) {\n  return Math.min(Math.max(v, min), max);\n}\nclass ProgressBar {\n  #classList = null;\n  #disableAutoFetchTimeout = null;\n  #percent = 0;\n  #style = null;\n  #visible = true;\n  constructor(bar) {\n    this.#classList = bar.classList;\n    this.#style = bar.style;\n  }\n  get percent() {\n    return this.#percent;\n  }\n  set percent(val) {\n    this.#percent = clamp(val, 0, 100);\n    if (isNaN(val)) {\n      this.#classList.add(\"indeterminate\");\n      return;\n    }\n    this.#classList.remove(\"indeterminate\");\n    this.#style.setProperty(\"--progressBar-percent\", `${this.#percent}%`);\n  }\n  setWidth(viewer) {\n    if (!viewer) {\n      return;\n    }\n    const container = viewer.parentNode;\n    const scrollbarWidth = container.offsetWidth - viewer.offsetWidth;\n    if (scrollbarWidth > 0) {\n      this.#style.setProperty(\"--progressBar-end-offset\", `${scrollbarWidth}px`);\n    }\n  }\n  setDisableAutoFetch(delay = 5000) {\n    if (isNaN(this.#percent)) {\n      return;\n    }\n    if (this.#disableAutoFetchTimeout) {\n      clearTimeout(this.#disableAutoFetchTimeout);\n    }\n    this.show();\n    this.#disableAutoFetchTimeout = setTimeout(() => {\n      this.#disableAutoFetchTimeout = null;\n      this.hide();\n    }, delay);\n  }\n  hide() {\n    if (!this.#visible) {\n      return;\n    }\n    this.#visible = false;\n    this.#classList.add(\"hidden\");\n  }\n  show() {\n    if (this.#visible) {\n      return;\n    }\n    this.#visible = true;\n    this.#classList.remove(\"hidden\");\n  }\n}\nfunction getActiveOrFocusedElement() {\n  let curRoot = document;\n  let curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(\":focus\");\n  while (curActiveOrFocused?.shadowRoot) {\n    curRoot = curActiveOrFocused.shadowRoot;\n    curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(\":focus\");\n  }\n  return curActiveOrFocused;\n}\nfunction apiPageLayoutToViewerModes(layout) {\n  let scrollMode = ScrollMode.VERTICAL,\n    spreadMode = SpreadMode.NONE;\n  switch (layout) {\n    case \"SinglePage\":\n      scrollMode = ScrollMode.PAGE;\n      break;\n    case \"OneColumn\":\n      break;\n    case \"TwoPageLeft\":\n      scrollMode = ScrollMode.PAGE;\n    case \"TwoColumnLeft\":\n      spreadMode = SpreadMode.ODD;\n      break;\n    case \"TwoPageRight\":\n      scrollMode = ScrollMode.PAGE;\n    case \"TwoColumnRight\":\n      spreadMode = SpreadMode.EVEN;\n      break;\n  }\n  return {\n    scrollMode,\n    spreadMode\n  };\n}\nfunction apiPageModeToSidebarView(mode) {\n  switch (mode) {\n    case \"UseNone\":\n      return SidebarView.NONE;\n    case \"UseThumbs\":\n      return SidebarView.THUMBS;\n    case \"UseOutlines\":\n      return SidebarView.OUTLINE;\n    case \"UseAttachments\":\n      return SidebarView.ATTACHMENTS;\n    case \"UseOC\":\n      return SidebarView.LAYERS;\n  }\n  return SidebarView.NONE;\n}\nfunction toggleCheckedBtn(button, toggle, view = null) {\n  button.classList.toggle(\"toggled\", toggle);\n  button.setAttribute(\"aria-checked\", toggle);\n  view?.classList.toggle(\"hidden\", !toggle);\n}\nfunction toggleExpandedBtn(button, toggle, view = null) {\n  button.classList.toggle(\"toggled\", toggle);\n  button.setAttribute(\"aria-expanded\", toggle);\n  view?.classList.toggle(\"hidden\", !toggle);\n}\n\n;// CONCATENATED MODULE: ./web/app_options.js\n{\n  var compatibilityParams = Object.create(null);\n  const userAgent = navigator.userAgent || \"\";\n  const platform = navigator.platform || \"\";\n  const maxTouchPoints = navigator.maxTouchPoints || 1;\n  const isAndroid = /Android/.test(userAgent);\n  const isIOS = /\\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) || platform === \"MacIntel\" && maxTouchPoints > 1;\n  (function checkCanvasSizeLimitation() {\n    if (isIOS || isAndroid) {\n      compatibilityParams.maxCanvasPixels = 5242880;\n    }\n  })();\n}\nconst OptionKind = {\n  BROWSER: 0x01,\n  VIEWER: 0x02,\n  API: 0x04,\n  WORKER: 0x08,\n  PREFERENCE: 0x80\n};\nconst defaultOptions = {\n  canvasMaxAreaInBytes: {\n    value: -1,\n    kind: OptionKind.BROWSER + OptionKind.API\n  },\n  isInAutomation: {\n    value: false,\n    kind: OptionKind.BROWSER\n  },\n  supportsCaretBrowsingMode: {\n    value: false,\n    kind: OptionKind.BROWSER\n  },\n  supportsDocumentFonts: {\n    value: true,\n    kind: OptionKind.BROWSER\n  },\n  supportsIntegratedFind: {\n    value: false,\n    kind: OptionKind.BROWSER\n  },\n  supportsMouseWheelZoomCtrlKey: {\n    value: true,\n    kind: OptionKind.BROWSER\n  },\n  supportsMouseWheelZoomMetaKey: {\n    value: true,\n    kind: OptionKind.BROWSER\n  },\n  supportsPinchToZoom: {\n    value: true,\n    kind: OptionKind.BROWSER\n  },\n  annotationEditorMode: {\n    value: 0,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  annotationMode: {\n    value: 0,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  cursorToolOnLoad: {\n    value: 0,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  debuggerSrc: {\n    value: \"./debugger.mjs\",\n    kind: OptionKind.VIEWER\n  },\n  defaultZoomDelay: {\n    value: 400,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  defaultZoomValue: {\n    value: \"\",\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  disableHistory: {\n    value: false,\n    kind: OptionKind.VIEWER\n  },\n  disablePageLabels: {\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  enableHighlightEditor: {\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  enableHighlightFloatingButton: {\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  enableML: {\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  enablePermissions: {\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  enablePrintAutoRotate: {\n    value: true,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  enableScripting: {\n    value: true,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  enableStampEditor: {\n    value: true,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  externalLinkRel: {\n    value: \"noopener noreferrer nofollow\",\n    kind: OptionKind.VIEWER\n  },\n  externalLinkTarget: {\n    value: 0,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  highlightEditorColors: {\n    value: \"yellow=#FFFF98,green=#53FFBC,blue=#80EBFF,pink=#FFCBE6,red=#FF4F5F\",\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  historyUpdateUrl: {\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  ignoreDestinationZoom: {\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  imageResourcesPath: {\n    value: \"./images/\",\n    kind: OptionKind.VIEWER\n  },\n  maxCanvasPixels: {\n    value: 2 ** 25,\n    kind: OptionKind.VIEWER\n  },\n  forcePageColors: {\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  pageColorsBackground: {\n    value: \"Canvas\",\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  pageColorsForeground: {\n    value: \"CanvasText\",\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  pdfBugEnabled: {\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  printResolution: {\n    value: 150,\n    kind: OptionKind.VIEWER\n  },\n  sidebarViewOnLoad: {\n    value: -1,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  scrollModeOnLoad: {\n    value: -1,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  spreadModeOnLoad: {\n    value: -1,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  textLayerMode: {\n    value: 1,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  viewOnLoad: {\n    value: 0,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  cMapPacked: {\n    value: true,\n    kind: OptionKind.API\n  },\n  cMapUrl: {\n    value: \"../web/cmaps/\",\n    kind: OptionKind.API\n  },\n  disableAutoFetch: {\n    value: false,\n    kind: OptionKind.API + OptionKind.PREFERENCE\n  },\n  disableFontFace: {\n    value: false,\n    kind: OptionKind.API + OptionKind.PREFERENCE\n  },\n  disableRange: {\n    value: false,\n    kind: OptionKind.API + OptionKind.PREFERENCE\n  },\n  disableStream: {\n    value: false,\n    kind: OptionKind.API + OptionKind.PREFERENCE\n  },\n  docBaseUrl: {\n    value: \"\",\n    kind: OptionKind.API\n  },\n  enableXfa: {\n    value: true,\n    kind: OptionKind.API + OptionKind.PREFERENCE\n  },\n  fontExtraProperties: {\n    value: false,\n    kind: OptionKind.API\n  },\n  isEvalSupported: {\n    value: true,\n    kind: OptionKind.API\n  },\n  isOffscreenCanvasSupported: {\n    value: true,\n    kind: OptionKind.API\n  },\n  maxImageSize: {\n    value: -1,\n    kind: OptionKind.API\n  },\n  pdfBug: {\n    value: false,\n    kind: OptionKind.API\n  },\n  standardFontDataUrl: {\n    value: \"../web/standard_fonts/\",\n    kind: OptionKind.API\n  },\n  verbosity: {\n    value: 1,\n    kind: OptionKind.API\n  },\n  workerPort: {\n    value: null,\n    kind: OptionKind.WORKER\n  },\n  workerSrc: {\n    value: \"../build/pdf.worker.mjs\",\n    kind: OptionKind.WORKER\n  }\n};\n{\n  defaultOptions.defaultUrl = {\n    value: \"compressed.tracemonkey-pldi-09.pdf\",\n    kind: OptionKind.VIEWER\n  };\n  defaultOptions.sandboxBundleSrc = {\n    value: \"../build/pdf.sandbox.mjs\",\n    kind: OptionKind.VIEWER\n  };\n  defaultOptions.viewerCssTheme = {\n    value: 0,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  };\n}\n{\n  defaultOptions.disablePreferences = {\n    value: false,\n    kind: OptionKind.VIEWER\n  };\n  defaultOptions.locale = {\n    value: navigator.language || \"en-US\",\n    kind: OptionKind.VIEWER\n  };\n}\nconst userOptions = Object.create(null);\n{\n  for (const name in compatibilityParams) {\n    userOptions[name] = compatibilityParams[name];\n  }\n}\nclass AppOptions {\n  constructor() {\n    throw new Error(\"Cannot initialize AppOptions.\");\n  }\n  static get(name) {\n    return userOptions[name] ?? defaultOptions[name]?.value ?? undefined;\n  }\n  static getAll(kind = null, defaultOnly = false) {\n    const options = Object.create(null);\n    for (const name in defaultOptions) {\n      const defaultOption = defaultOptions[name];\n      if (kind && !(kind & defaultOption.kind)) {\n        continue;\n      }\n      options[name] = defaultOnly ? defaultOption.value : userOptions[name] ?? defaultOption.value;\n    }\n    return options;\n  }\n  static set(name, value) {\n    userOptions[name] = value;\n  }\n  static setAll(options, init = false) {\n    if (init) {\n      if (this.get(\"disablePreferences\")) {\n        return;\n      }\n      for (const name in userOptions) {\n        if (compatibilityParams[name] !== undefined) {\n          continue;\n        }\n        console.warn(\"setAll: The Preferences may override manually set AppOptions; \" + 'please use the \"disablePreferences\"-option in order to prevent that.');\n        break;\n      }\n    }\n    for (const name in options) {\n      userOptions[name] = options[name];\n    }\n  }\n  static remove(name) {\n    delete userOptions[name];\n    const val = compatibilityParams[name];\n    if (val !== undefined) {\n      userOptions[name] = val;\n    }\n  }\n}\n\n;// CONCATENATED MODULE: ./web/pdf_link_service.js\n\nconst DEFAULT_LINK_REL = \"noopener noreferrer nofollow\";\nconst LinkTarget = {\n  NONE: 0,\n  SELF: 1,\n  BLANK: 2,\n  PARENT: 3,\n  TOP: 4\n};\nclass PDFLinkService {\n  externalLinkEnabled = true;\n  constructor({\n    eventBus,\n    externalLinkTarget = null,\n    externalLinkRel = null,\n    ignoreDestinationZoom = false\n  } = {}) {\n    this.eventBus = eventBus;\n    this.externalLinkTarget = externalLinkTarget;\n    this.externalLinkRel = externalLinkRel;\n    this._ignoreDestinationZoom = ignoreDestinationZoom;\n    this.baseUrl = null;\n    this.pdfDocument = null;\n    this.pdfViewer = null;\n    this.pdfHistory = null;\n  }\n  setDocument(pdfDocument, baseUrl = null) {\n    this.baseUrl = baseUrl;\n    this.pdfDocument = pdfDocument;\n  }\n  setViewer(pdfViewer) {\n    this.pdfViewer = pdfViewer;\n  }\n  setHistory(pdfHistory) {\n    this.pdfHistory = pdfHistory;\n  }\n  get pagesCount() {\n    return this.pdfDocument ? this.pdfDocument.numPages : 0;\n  }\n  get page() {\n    return this.pdfDocument ? this.pdfViewer.currentPageNumber : 1;\n  }\n  set page(value) {\n    if (this.pdfDocument) {\n      this.pdfViewer.currentPageNumber = value;\n    }\n  }\n  get rotation() {\n    return this.pdfDocument ? this.pdfViewer.pagesRotation : 0;\n  }\n  set rotation(value) {\n    if (this.pdfDocument) {\n      this.pdfViewer.pagesRotation = value;\n    }\n  }\n  get isInPresentationMode() {\n    return this.pdfDocument ? this.pdfViewer.isInPresentationMode : false;\n  }\n  async goToDestination(dest) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    let namedDest, explicitDest, pageNumber;\n    if (typeof dest === \"string\") {\n      namedDest = dest;\n      explicitDest = await this.pdfDocument.getDestination(dest);\n    } else {\n      namedDest = null;\n      explicitDest = await dest;\n    }\n    if (!Array.isArray(explicitDest)) {\n      console.error(`goToDestination: \"${explicitDest}\" is not a valid destination array, for dest=\"${dest}\".`);\n      return;\n    }\n    const [destRef] = explicitDest;\n    if (destRef && typeof destRef === \"object\") {\n      pageNumber = this.pdfDocument.cachedPageNumber(destRef);\n      if (!pageNumber) {\n        try {\n          pageNumber = (await this.pdfDocument.getPageIndex(destRef)) + 1;\n        } catch {\n          console.error(`goToDestination: \"${destRef}\" is not a valid page reference, for dest=\"${dest}\".`);\n          return;\n        }\n      }\n    } else if (Number.isInteger(destRef)) {\n      pageNumber = destRef + 1;\n    }\n    if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) {\n      console.error(`goToDestination: \"${pageNumber}\" is not a valid page number, for dest=\"${dest}\".`);\n      return;\n    }\n    if (this.pdfHistory) {\n      this.pdfHistory.pushCurrentPosition();\n      this.pdfHistory.push({\n        namedDest,\n        explicitDest,\n        pageNumber\n      });\n    }\n    this.pdfViewer.scrollPageIntoView({\n      pageNumber,\n      destArray: explicitDest,\n      ignoreDestinationZoom: this._ignoreDestinationZoom\n    });\n  }\n  goToPage(val) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    const pageNumber = typeof val === \"string\" && this.pdfViewer.pageLabelToPageNumber(val) || val | 0;\n    if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) {\n      console.error(`PDFLinkService.goToPage: \"${val}\" is not a valid page.`);\n      return;\n    }\n    if (this.pdfHistory) {\n      this.pdfHistory.pushCurrentPosition();\n      this.pdfHistory.pushPage(pageNumber);\n    }\n    this.pdfViewer.scrollPageIntoView({\n      pageNumber\n    });\n  }\n  addLinkAttributes(link, url, newWindow = false) {\n    if (!url || typeof url !== \"string\") {\n      throw new Error('A valid \"url\" parameter must provided.');\n    }\n    const target = newWindow ? LinkTarget.BLANK : this.externalLinkTarget,\n      rel = this.externalLinkRel;\n    if (this.externalLinkEnabled) {\n      link.href = link.title = url;\n    } else {\n      link.href = \"\";\n      link.title = `Disabled: ${url}`;\n      link.onclick = () => false;\n    }\n    let targetStr = \"\";\n    switch (target) {\n      case LinkTarget.NONE:\n        break;\n      case LinkTarget.SELF:\n        targetStr = \"_self\";\n        break;\n      case LinkTarget.BLANK:\n        targetStr = \"_blank\";\n        break;\n      case LinkTarget.PARENT:\n        targetStr = \"_parent\";\n        break;\n      case LinkTarget.TOP:\n        targetStr = \"_top\";\n        break;\n    }\n    link.target = targetStr;\n    link.rel = typeof rel === \"string\" ? rel : DEFAULT_LINK_REL;\n  }\n  getDestinationHash(dest) {\n    if (typeof dest === \"string\") {\n      if (dest.length > 0) {\n        return this.getAnchorUrl(\"#\" + escape(dest));\n      }\n    } else if (Array.isArray(dest)) {\n      const str = JSON.stringify(dest);\n      if (str.length > 0) {\n        return this.getAnchorUrl(\"#\" + escape(str));\n      }\n    }\n    return this.getAnchorUrl(\"\");\n  }\n  getAnchorUrl(anchor) {\n    return this.baseUrl ? this.baseUrl + anchor : anchor;\n  }\n  setHash(hash) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    let pageNumber, dest;\n    if (hash.includes(\"=\")) {\n      const params = parseQueryString(hash);\n      if (params.has(\"search\")) {\n        const query = params.get(\"search\").replaceAll('\"', \"\"),\n          phrase = params.get(\"phrase\") === \"true\";\n        this.eventBus.dispatch(\"findfromurlhash\", {\n          source: this,\n          query: phrase ? query : query.match(/\\S+/g)\n        });\n      }\n      if (params.has(\"page\")) {\n        pageNumber = params.get(\"page\") | 0 || 1;\n      }\n      if (params.has(\"zoom\")) {\n        const zoomArgs = params.get(\"zoom\").split(\",\");\n        const zoomArg = zoomArgs[0];\n        const zoomArgNumber = parseFloat(zoomArg);\n        if (!zoomArg.includes(\"Fit\")) {\n          dest = [null, {\n            name: \"XYZ\"\n          }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null, zoomArgs.length > 2 ? zoomArgs[2] | 0 : null, zoomArgNumber ? zoomArgNumber / 100 : zoomArg];\n        } else if (zoomArg === \"Fit\" || zoomArg === \"FitB\") {\n          dest = [null, {\n            name: zoomArg\n          }];\n        } else if (zoomArg === \"FitH\" || zoomArg === \"FitBH\" || zoomArg === \"FitV\" || zoomArg === \"FitBV\") {\n          dest = [null, {\n            name: zoomArg\n          }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null];\n        } else if (zoomArg === \"FitR\") {\n          if (zoomArgs.length !== 5) {\n            console.error('PDFLinkService.setHash: Not enough parameters for \"FitR\".');\n          } else {\n            dest = [null, {\n              name: zoomArg\n            }, zoomArgs[1] | 0, zoomArgs[2] | 0, zoomArgs[3] | 0, zoomArgs[4] | 0];\n          }\n        } else {\n          console.error(`PDFLinkService.setHash: \"${zoomArg}\" is not a valid zoom value.`);\n        }\n      }\n      if (dest) {\n        this.pdfViewer.scrollPageIntoView({\n          pageNumber: pageNumber || this.page,\n          destArray: dest,\n          allowNegativeOffset: true\n        });\n      } else if (pageNumber) {\n        this.page = pageNumber;\n      }\n      if (params.has(\"pagemode\")) {\n        this.eventBus.dispatch(\"pagemode\", {\n          source: this,\n          mode: params.get(\"pagemode\")\n        });\n      }\n      if (params.has(\"nameddest\")) {\n        this.goToDestination(params.get(\"nameddest\"));\n      }\n      return;\n    }\n    dest = unescape(hash);\n    try {\n      dest = JSON.parse(dest);\n      if (!Array.isArray(dest)) {\n        dest = dest.toString();\n      }\n    } catch {}\n    if (typeof dest === \"string\" || PDFLinkService.#isValidExplicitDest(dest)) {\n      this.goToDestination(dest);\n      return;\n    }\n    console.error(`PDFLinkService.setHash: \"${unescape(hash)}\" is not a valid destination.`);\n  }\n  executeNamedAction(action) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    switch (action) {\n      case \"GoBack\":\n        this.pdfHistory?.back();\n        break;\n      case \"GoForward\":\n        this.pdfHistory?.forward();\n        break;\n      case \"NextPage\":\n        this.pdfViewer.nextPage();\n        break;\n      case \"PrevPage\":\n        this.pdfViewer.previousPage();\n        break;\n      case \"LastPage\":\n        this.page = this.pagesCount;\n        break;\n      case \"FirstPage\":\n        this.page = 1;\n        break;\n      default:\n        break;\n    }\n    this.eventBus.dispatch(\"namedaction\", {\n      source: this,\n      action\n    });\n  }\n  async executeSetOCGState(action) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    const pdfDocument = this.pdfDocument,\n      optionalContentConfig = await this.pdfViewer.optionalContentConfigPromise;\n    if (pdfDocument !== this.pdfDocument) {\n      return;\n    }\n    optionalContentConfig.setOCGState(action);\n    this.pdfViewer.optionalContentConfigPromise = Promise.resolve(optionalContentConfig);\n  }\n  static #isValidExplicitDest(dest) {\n    if (!Array.isArray(dest) || dest.length < 2) {\n      return false;\n    }\n    const [page, zoom, ...args] = dest;\n    if (!(typeof page === \"object\" && Number.isInteger(page?.num) && Number.isInteger(page?.gen)) && !Number.isInteger(page)) {\n      return false;\n    }\n    if (!(typeof zoom === \"object\" && typeof zoom?.name === \"string\")) {\n      return false;\n    }\n    let allowNull = true;\n    switch (zoom.name) {\n      case \"XYZ\":\n        if (args.length !== 3) {\n          return false;\n        }\n        break;\n      case \"Fit\":\n      case \"FitB\":\n        return args.length === 0;\n      case \"FitH\":\n      case \"FitBH\":\n      case \"FitV\":\n      case \"FitBV\":\n        if (args.length !== 1) {\n          return false;\n        }\n        break;\n      case \"FitR\":\n        if (args.length !== 4) {\n          return false;\n        }\n        allowNull = false;\n        break;\n      default:\n        return false;\n    }\n    for (const arg of args) {\n      if (!(typeof arg === \"number\" || allowNull && arg === null)) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\nclass SimpleLinkService extends PDFLinkService {\n  setDocument(pdfDocument, baseUrl = null) {}\n}\n\n;// CONCATENATED MODULE: ./web/pdfjs.js\nconst {\n  AbortException,\n  AnnotationEditorLayer,\n  AnnotationEditorParamsType,\n  AnnotationEditorType,\n  AnnotationEditorUIManager,\n  AnnotationLayer,\n  AnnotationMode,\n  build,\n  CMapCompressionType,\n  ColorPicker,\n  createValidAbsoluteUrl,\n  DOMSVGFactory,\n  DrawLayer,\n  FeatureTest,\n  fetchData,\n  getDocument,\n  getFilenameFromUrl,\n  getPdfFilenameFromUrl: pdfjs_getPdfFilenameFromUrl,\n  getXfaPageViewport,\n  GlobalWorkerOptions,\n  ImageKind,\n  InvalidPDFException,\n  isDataScheme,\n  isPdfFile,\n  MissingPDFException,\n  noContextMenu,\n  normalizeUnicode,\n  OPS,\n  Outliner,\n  PasswordResponses,\n  PDFDataRangeTransport,\n  PDFDateString,\n  PDFWorker,\n  PermissionFlag,\n  PixelsPerInch,\n  RenderingCancelledException,\n  renderTextLayer,\n  setLayerDimensions,\n  shadow,\n  TextLayer,\n  UnexpectedResponseException,\n  updateTextLayer,\n  Util,\n  VerbosityLevel,\n  version,\n  XfaLayer\n} = globalThis.pdfjsLib;\n\n;// CONCATENATED MODULE: ./web/event_utils.js\nconst WaitOnType = {\n  EVENT: \"event\",\n  TIMEOUT: \"timeout\"\n};\nasync function waitOnEventOrTimeout({\n  target,\n  name,\n  delay = 0\n}) {\n  if (typeof target !== \"object\" || !(name && typeof name === \"string\") || !(Number.isInteger(delay) && delay >= 0)) {\n    throw new Error(\"waitOnEventOrTimeout - invalid parameters.\");\n  }\n  const {\n    promise,\n    resolve\n  } = Promise.withResolvers();\n  const ac = new AbortController();\n  function handler(type) {\n    ac.abort();\n    clearTimeout(timeout);\n    resolve(type);\n  }\n  const evtMethod = target instanceof EventBus ? \"_on\" : \"addEventListener\";\n  target[evtMethod](name, handler.bind(null, WaitOnType.EVENT), {\n    signal: ac.signal\n  });\n  const timeout = setTimeout(handler.bind(null, WaitOnType.TIMEOUT), delay);\n  return promise;\n}\nclass EventBus {\n  #listeners = Object.create(null);\n  on(eventName, listener, options = null) {\n    this._on(eventName, listener, {\n      external: true,\n      once: options?.once,\n      signal: options?.signal\n    });\n  }\n  off(eventName, listener, options = null) {\n    this._off(eventName, listener);\n  }\n  dispatch(eventName, data) {\n    const eventListeners = this.#listeners[eventName];\n    if (!eventListeners || eventListeners.length === 0) {\n      return;\n    }\n    let externalListeners;\n    for (const {\n      listener,\n      external,\n      once\n    } of eventListeners.slice(0)) {\n      if (once) {\n        this._off(eventName, listener);\n      }\n      if (external) {\n        (externalListeners ||= []).push(listener);\n        continue;\n      }\n      listener(data);\n    }\n    if (externalListeners) {\n      for (const listener of externalListeners) {\n        listener(data);\n      }\n      externalListeners = null;\n    }\n  }\n  _on(eventName, listener, options = null) {\n    let rmAbort = null;\n    if (options?.signal instanceof AbortSignal) {\n      const {\n        signal\n      } = options;\n      if (signal.aborted) {\n        console.error(\"Cannot use an `aborted` signal.\");\n        return;\n      }\n      const onAbort = () => this._off(eventName, listener);\n      rmAbort = () => signal.removeEventListener(\"abort\", onAbort);\n      signal.addEventListener(\"abort\", onAbort);\n    }\n    const eventListeners = this.#listeners[eventName] ||= [];\n    eventListeners.push({\n      listener,\n      external: options?.external === true,\n      once: options?.once === true,\n      rmAbort\n    });\n  }\n  _off(eventName, listener, options = null) {\n    const eventListeners = this.#listeners[eventName];\n    if (!eventListeners) {\n      return;\n    }\n    for (let i = 0, ii = eventListeners.length; i < ii; i++) {\n      const evt = eventListeners[i];\n      if (evt.listener === listener) {\n        evt.rmAbort?.();\n        eventListeners.splice(i, 1);\n        return;\n      }\n    }\n  }\n}\nclass AutomationEventBus extends EventBus {\n  dispatch(eventName, data) {\n    throw new Error(\"Not implemented: AutomationEventBus.dispatch\");\n  }\n}\n\n;// CONCATENATED MODULE: ./web/external_services.js\nclass BaseExternalServices {\n  constructor() {\n    if (this.constructor === BaseExternalServices) {\n      throw new Error(\"Cannot initialize BaseExternalServices.\");\n    }\n  }\n  updateFindControlState(data) {}\n  updateFindMatchesCount(data) {}\n  initPassiveLoading() {}\n  reportTelemetry(data) {}\n  async createL10n() {\n    throw new Error(\"Not implemented: createL10n\");\n  }\n  createScripting() {\n    throw new Error(\"Not implemented: createScripting\");\n  }\n  updateEditorStates(data) {\n    throw new Error(\"Not implemented: updateEditorStates\");\n  }\n  async getNimbusExperimentData() {}\n}\n\n;// CONCATENATED MODULE: ./web/preferences.js\n\nclass BasePreferences {\n  #browserDefaults = Object.freeze({\n    canvasMaxAreaInBytes: -1,\n    isInAutomation: false,\n    supportsCaretBrowsingMode: false,\n    supportsDocumentFonts: true,\n    supportsIntegratedFind: false,\n    supportsMouseWheelZoomCtrlKey: true,\n    supportsMouseWheelZoomMetaKey: true,\n    supportsPinchToZoom: true\n  });\n  #defaults = Object.freeze({\n    annotationEditorMode: 0,\n    annotationMode: 0,\n    cursorToolOnLoad: 0,\n    defaultZoomDelay: 400,\n    defaultZoomValue: \"\",\n    disablePageLabels: false,\n    enableHighlightEditor: false,\n    enableHighlightFloatingButton: false,\n    enableML: false,\n    enablePermissions: false,\n    enablePrintAutoRotate: true,\n    enableScripting: true,\n    enableStampEditor: true,\n    externalLinkTarget: 0,\n    highlightEditorColors: \"yellow=#FFFF98,green=#53FFBC,blue=#80EBFF,pink=#FFCBE6,red=#FF4F5F\",\n    historyUpdateUrl: false,\n    ignoreDestinationZoom: false,\n    forcePageColors: false,\n    pageColorsBackground: \"Canvas\",\n    pageColorsForeground: \"CanvasText\",\n    pdfBugEnabled: false,\n    sidebarViewOnLoad: -1,\n    scrollModeOnLoad: -1,\n    spreadModeOnLoad: -1,\n    textLayerMode: 1,\n    viewOnLoad: 0,\n    disableAutoFetch: false,\n    disableFontFace: false,\n    disableRange: false,\n    disableStream: false,\n    enableXfa: true,\n    viewerCssTheme: 0\n  });\n  #prefs = Object.create(null);\n  #initializedPromise = null;\n  constructor() {\n    if (this.constructor === BasePreferences) {\n      throw new Error(\"Cannot initialize BasePreferences.\");\n    }\n    this.#initializedPromise = this._readFromStorage(this.#defaults).then(({\n      browserPrefs,\n      prefs\n    }) => {\n      const options = Object.create(null);\n      for (const [name, val] of Object.entries(this.#browserDefaults)) {\n        const prefVal = browserPrefs?.[name];\n        options[name] = typeof prefVal === typeof val ? prefVal : val;\n      }\n      for (const [name, val] of Object.entries(this.#defaults)) {\n        const prefVal = prefs?.[name];\n        options[name] = this.#prefs[name] = typeof prefVal === typeof val ? prefVal : val;\n      }\n      AppOptions.setAll(options, true);\n    });\n  }\n  async _writeToStorage(prefObj) {\n    throw new Error(\"Not implemented: _writeToStorage\");\n  }\n  async _readFromStorage(prefObj) {\n    throw new Error(\"Not implemented: _readFromStorage\");\n  }\n  #updatePref({\n    name,\n    value\n  }) {\n    throw new Error(\"Not implemented: #updatePref\");\n  }\n  async reset() {\n    await this.#initializedPromise;\n    const oldPrefs = structuredClone(this.#prefs);\n    this.#prefs = Object.create(null);\n    try {\n      await this._writeToStorage(this.#defaults);\n    } catch (reason) {\n      this.#prefs = oldPrefs;\n      throw reason;\n    }\n  }\n  async set(name, value) {\n    await this.#initializedPromise;\n    const defaultValue = this.#defaults[name],\n      oldPrefs = structuredClone(this.#prefs);\n    if (defaultValue === undefined) {\n      throw new Error(`Set preference: \"${name}\" is undefined.`);\n    } else if (value === undefined) {\n      throw new Error(\"Set preference: no value is specified.\");\n    }\n    const valueType = typeof value,\n      defaultType = typeof defaultValue;\n    if (valueType !== defaultType) {\n      if (valueType === \"number\" && defaultType === \"string\") {\n        value = value.toString();\n      } else {\n        throw new Error(`Set preference: \"${value}\" is a ${valueType}, expected a ${defaultType}.`);\n      }\n    } else if (valueType === \"number\" && !Number.isInteger(value)) {\n      throw new Error(`Set preference: \"${value}\" must be an integer.`);\n    }\n    this.#prefs[name] = value;\n    try {\n      await this._writeToStorage(this.#prefs);\n    } catch (reason) {\n      this.#prefs = oldPrefs;\n      throw reason;\n    }\n  }\n  async get(name) {\n    await this.#initializedPromise;\n    const defaultValue = this.#defaults[name];\n    if (defaultValue === undefined) {\n      throw new Error(`Get preference: \"${name}\" is undefined.`);\n    }\n    return this.#prefs[name] ?? defaultValue;\n  }\n  get initializedPromise() {\n    return this.#initializedPromise;\n  }\n}\n\n;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/types.js\nclass FluentType {\n  constructor(value) {\n    this.value = value;\n  }\n  valueOf() {\n    return this.value;\n  }\n}\nclass FluentNone extends FluentType {\n  constructor(value = \"???\") {\n    super(value);\n  }\n  toString(scope) {\n    return `{${this.value}}`;\n  }\n}\nclass FluentNumber extends FluentType {\n  constructor(value, opts = {}) {\n    super(value);\n    this.opts = opts;\n  }\n  toString(scope) {\n    try {\n      const nf = scope.memoizeIntlObject(Intl.NumberFormat, this.opts);\n      return nf.format(this.value);\n    } catch (err) {\n      scope.reportError(err);\n      return this.value.toString(10);\n    }\n  }\n}\nclass FluentDateTime extends FluentType {\n  constructor(value, opts = {}) {\n    super(value);\n    this.opts = opts;\n  }\n  toString(scope) {\n    try {\n      const dtf = scope.memoizeIntlObject(Intl.DateTimeFormat, this.opts);\n      return dtf.format(this.value);\n    } catch (err) {\n      scope.reportError(err);\n      return new Date(this.value).toISOString();\n    }\n  }\n}\n;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/resolver.js\n\nconst MAX_PLACEABLES = 100;\nconst FSI = \"\\u2068\";\nconst PDI = \"\\u2069\";\nfunction match(scope, selector, key) {\n  if (key === selector) {\n    return true;\n  }\n  if (key instanceof FluentNumber && selector instanceof FluentNumber && key.value === selector.value) {\n    return true;\n  }\n  if (selector instanceof FluentNumber && typeof key === \"string\") {\n    let category = scope.memoizeIntlObject(Intl.PluralRules, selector.opts).select(selector.value);\n    if (key === category) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction getDefault(scope, variants, star) {\n  if (variants[star]) {\n    return resolvePattern(scope, variants[star].value);\n  }\n  scope.reportError(new RangeError(\"No default\"));\n  return new FluentNone();\n}\nfunction getArguments(scope, args) {\n  const positional = [];\n  const named = Object.create(null);\n  for (const arg of args) {\n    if (arg.type === \"narg\") {\n      named[arg.name] = resolveExpression(scope, arg.value);\n    } else {\n      positional.push(resolveExpression(scope, arg));\n    }\n  }\n  return {\n    positional,\n    named\n  };\n}\nfunction resolveExpression(scope, expr) {\n  switch (expr.type) {\n    case \"str\":\n      return expr.value;\n    case \"num\":\n      return new FluentNumber(expr.value, {\n        minimumFractionDigits: expr.precision\n      });\n    case \"var\":\n      return resolveVariableReference(scope, expr);\n    case \"mesg\":\n      return resolveMessageReference(scope, expr);\n    case \"term\":\n      return resolveTermReference(scope, expr);\n    case \"func\":\n      return resolveFunctionReference(scope, expr);\n    case \"select\":\n      return resolveSelectExpression(scope, expr);\n    default:\n      return new FluentNone();\n  }\n}\nfunction resolveVariableReference(scope, {\n  name\n}) {\n  let arg;\n  if (scope.params) {\n    if (Object.prototype.hasOwnProperty.call(scope.params, name)) {\n      arg = scope.params[name];\n    } else {\n      return new FluentNone(`$${name}`);\n    }\n  } else if (scope.args && Object.prototype.hasOwnProperty.call(scope.args, name)) {\n    arg = scope.args[name];\n  } else {\n    scope.reportError(new ReferenceError(`Unknown variable: $${name}`));\n    return new FluentNone(`$${name}`);\n  }\n  if (arg instanceof FluentType) {\n    return arg;\n  }\n  switch (typeof arg) {\n    case \"string\":\n      return arg;\n    case \"number\":\n      return new FluentNumber(arg);\n    case \"object\":\n      if (arg instanceof Date) {\n        return new FluentDateTime(arg.getTime());\n      }\n    default:\n      scope.reportError(new TypeError(`Variable type not supported: $${name}, ${typeof arg}`));\n      return new FluentNone(`$${name}`);\n  }\n}\nfunction resolveMessageReference(scope, {\n  name,\n  attr\n}) {\n  const message = scope.bundle._messages.get(name);\n  if (!message) {\n    scope.reportError(new ReferenceError(`Unknown message: ${name}`));\n    return new FluentNone(name);\n  }\n  if (attr) {\n    const attribute = message.attributes[attr];\n    if (attribute) {\n      return resolvePattern(scope, attribute);\n    }\n    scope.reportError(new ReferenceError(`Unknown attribute: ${attr}`));\n    return new FluentNone(`${name}.${attr}`);\n  }\n  if (message.value) {\n    return resolvePattern(scope, message.value);\n  }\n  scope.reportError(new ReferenceError(`No value: ${name}`));\n  return new FluentNone(name);\n}\nfunction resolveTermReference(scope, {\n  name,\n  attr,\n  args\n}) {\n  const id = `-${name}`;\n  const term = scope.bundle._terms.get(id);\n  if (!term) {\n    scope.reportError(new ReferenceError(`Unknown term: ${id}`));\n    return new FluentNone(id);\n  }\n  if (attr) {\n    const attribute = term.attributes[attr];\n    if (attribute) {\n      scope.params = getArguments(scope, args).named;\n      const resolved = resolvePattern(scope, attribute);\n      scope.params = null;\n      return resolved;\n    }\n    scope.reportError(new ReferenceError(`Unknown attribute: ${attr}`));\n    return new FluentNone(`${id}.${attr}`);\n  }\n  scope.params = getArguments(scope, args).named;\n  const resolved = resolvePattern(scope, term.value);\n  scope.params = null;\n  return resolved;\n}\nfunction resolveFunctionReference(scope, {\n  name,\n  args\n}) {\n  let func = scope.bundle._functions[name];\n  if (!func) {\n    scope.reportError(new ReferenceError(`Unknown function: ${name}()`));\n    return new FluentNone(`${name}()`);\n  }\n  if (typeof func !== \"function\") {\n    scope.reportError(new TypeError(`Function ${name}() is not callable`));\n    return new FluentNone(`${name}()`);\n  }\n  try {\n    let resolved = getArguments(scope, args);\n    return func(resolved.positional, resolved.named);\n  } catch (err) {\n    scope.reportError(err);\n    return new FluentNone(`${name}()`);\n  }\n}\nfunction resolveSelectExpression(scope, {\n  selector,\n  variants,\n  star\n}) {\n  let sel = resolveExpression(scope, selector);\n  if (sel instanceof FluentNone) {\n    return getDefault(scope, variants, star);\n  }\n  for (const variant of variants) {\n    const key = resolveExpression(scope, variant.key);\n    if (match(scope, sel, key)) {\n      return resolvePattern(scope, variant.value);\n    }\n  }\n  return getDefault(scope, variants, star);\n}\nfunction resolveComplexPattern(scope, ptn) {\n  if (scope.dirty.has(ptn)) {\n    scope.reportError(new RangeError(\"Cyclic reference\"));\n    return new FluentNone();\n  }\n  scope.dirty.add(ptn);\n  const result = [];\n  const useIsolating = scope.bundle._useIsolating && ptn.length > 1;\n  for (const elem of ptn) {\n    if (typeof elem === \"string\") {\n      result.push(scope.bundle._transform(elem));\n      continue;\n    }\n    scope.placeables++;\n    if (scope.placeables > MAX_PLACEABLES) {\n      scope.dirty.delete(ptn);\n      throw new RangeError(`Too many placeables expanded: ${scope.placeables}, ` + `max allowed is ${MAX_PLACEABLES}`);\n    }\n    if (useIsolating) {\n      result.push(FSI);\n    }\n    result.push(resolveExpression(scope, elem).toString(scope));\n    if (useIsolating) {\n      result.push(PDI);\n    }\n  }\n  scope.dirty.delete(ptn);\n  return result.join(\"\");\n}\nfunction resolvePattern(scope, value) {\n  if (typeof value === \"string\") {\n    return scope.bundle._transform(value);\n  }\n  return resolveComplexPattern(scope, value);\n}\n;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/scope.js\nclass Scope {\n  constructor(bundle, errors, args) {\n    this.dirty = new WeakSet();\n    this.params = null;\n    this.placeables = 0;\n    this.bundle = bundle;\n    this.errors = errors;\n    this.args = args;\n  }\n  reportError(error) {\n    if (!this.errors || !(error instanceof Error)) {\n      throw error;\n    }\n    this.errors.push(error);\n  }\n  memoizeIntlObject(ctor, opts) {\n    let cache = this.bundle._intls.get(ctor);\n    if (!cache) {\n      cache = {};\n      this.bundle._intls.set(ctor, cache);\n    }\n    let id = JSON.stringify(opts);\n    if (!cache[id]) {\n      cache[id] = new ctor(this.bundle.locales, opts);\n    }\n    return cache[id];\n  }\n}\n;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/builtins.js\n\nfunction values(opts, allowed) {\n  const unwrapped = Object.create(null);\n  for (const [name, opt] of Object.entries(opts)) {\n    if (allowed.includes(name)) {\n      unwrapped[name] = opt.valueOf();\n    }\n  }\n  return unwrapped;\n}\nconst NUMBER_ALLOWED = [\"unitDisplay\", \"currencyDisplay\", \"useGrouping\", \"minimumIntegerDigits\", \"minimumFractionDigits\", \"maximumFractionDigits\", \"minimumSignificantDigits\", \"maximumSignificantDigits\"];\nfunction NUMBER(args, opts) {\n  let arg = args[0];\n  if (arg instanceof FluentNone) {\n    return new FluentNone(`NUMBER(${arg.valueOf()})`);\n  }\n  if (arg instanceof FluentNumber) {\n    return new FluentNumber(arg.valueOf(), {\n      ...arg.opts,\n      ...values(opts, NUMBER_ALLOWED)\n    });\n  }\n  if (arg instanceof FluentDateTime) {\n    return new FluentNumber(arg.valueOf(), {\n      ...values(opts, NUMBER_ALLOWED)\n    });\n  }\n  throw new TypeError(\"Invalid argument to NUMBER\");\n}\nconst DATETIME_ALLOWED = [\"dateStyle\", \"timeStyle\", \"fractionalSecondDigits\", \"dayPeriod\", \"hour12\", \"weekday\", \"era\", \"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"timeZoneName\"];\nfunction DATETIME(args, opts) {\n  let arg = args[0];\n  if (arg instanceof FluentNone) {\n    return new FluentNone(`DATETIME(${arg.valueOf()})`);\n  }\n  if (arg instanceof FluentDateTime) {\n    return new FluentDateTime(arg.valueOf(), {\n      ...arg.opts,\n      ...values(opts, DATETIME_ALLOWED)\n    });\n  }\n  if (arg instanceof FluentNumber) {\n    return new FluentDateTime(arg.valueOf(), {\n      ...values(opts, DATETIME_ALLOWED)\n    });\n  }\n  throw new TypeError(\"Invalid argument to DATETIME\");\n}\n;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/memoizer.js\nconst cache = new Map();\nfunction getMemoizerForLocale(locales) {\n  const stringLocale = Array.isArray(locales) ? locales.join(\" \") : locales;\n  let memoizer = cache.get(stringLocale);\n  if (memoizer === undefined) {\n    memoizer = new Map();\n    cache.set(stringLocale, memoizer);\n  }\n  return memoizer;\n}\n;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/bundle.js\n\n\n\n\n\nclass FluentBundle {\n  constructor(locales, {\n    functions,\n    useIsolating = true,\n    transform = v => v\n  } = {}) {\n    this._terms = new Map();\n    this._messages = new Map();\n    this.locales = Array.isArray(locales) ? locales : [locales];\n    this._functions = {\n      NUMBER: NUMBER,\n      DATETIME: DATETIME,\n      ...functions\n    };\n    this._useIsolating = useIsolating;\n    this._transform = transform;\n    this._intls = getMemoizerForLocale(locales);\n  }\n  hasMessage(id) {\n    return this._messages.has(id);\n  }\n  getMessage(id) {\n    return this._messages.get(id);\n  }\n  addResource(res, {\n    allowOverrides = false\n  } = {}) {\n    const errors = [];\n    for (let i = 0; i < res.body.length; i++) {\n      let entry = res.body[i];\n      if (entry.id.startsWith(\"-\")) {\n        if (allowOverrides === false && this._terms.has(entry.id)) {\n          errors.push(new Error(`Attempt to override an existing term: \"${entry.id}\"`));\n          continue;\n        }\n        this._terms.set(entry.id, entry);\n      } else {\n        if (allowOverrides === false && this._messages.has(entry.id)) {\n          errors.push(new Error(`Attempt to override an existing message: \"${entry.id}\"`));\n          continue;\n        }\n        this._messages.set(entry.id, entry);\n      }\n    }\n    return errors;\n  }\n  formatPattern(pattern, args = null, errors = null) {\n    if (typeof pattern === \"string\") {\n      return this._transform(pattern);\n    }\n    let scope = new Scope(this, errors, args);\n    try {\n      let value = resolveComplexPattern(scope, pattern);\n      return value.toString(scope);\n    } catch (err) {\n      if (scope.errors && err instanceof Error) {\n        scope.errors.push(err);\n        return new FluentNone().toString(scope);\n      }\n      throw err;\n    }\n  }\n}\n;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/resource.js\nconst RE_MESSAGE_START = /^(-?[a-zA-Z][\\w-]*) *= */gm;\nconst RE_ATTRIBUTE_START = /\\.([a-zA-Z][\\w-]*) *= */y;\nconst RE_VARIANT_START = /\\*?\\[/y;\nconst RE_NUMBER_LITERAL = /(-?[0-9]+(?:\\.([0-9]+))?)/y;\nconst RE_IDENTIFIER = /([a-zA-Z][\\w-]*)/y;\nconst RE_REFERENCE = /([$-])?([a-zA-Z][\\w-]*)(?:\\.([a-zA-Z][\\w-]*))?/y;\nconst RE_FUNCTION_NAME = /^[A-Z][A-Z0-9_-]*$/;\nconst RE_TEXT_RUN = /([^{}\\n\\r]+)/y;\nconst RE_STRING_RUN = /([^\\\\\"\\n\\r]*)/y;\nconst RE_STRING_ESCAPE = /\\\\([\\\\\"])/y;\nconst RE_UNICODE_ESCAPE = /\\\\u([a-fA-F0-9]{4})|\\\\U([a-fA-F0-9]{6})/y;\nconst RE_LEADING_NEWLINES = /^\\n+/;\nconst RE_TRAILING_SPACES = / +$/;\nconst RE_BLANK_LINES = / *\\r?\\n/g;\nconst RE_INDENT = /( *)$/;\nconst TOKEN_BRACE_OPEN = /{\\s*/y;\nconst TOKEN_BRACE_CLOSE = /\\s*}/y;\nconst TOKEN_BRACKET_OPEN = /\\[\\s*/y;\nconst TOKEN_BRACKET_CLOSE = /\\s*] */y;\nconst TOKEN_PAREN_OPEN = /\\s*\\(\\s*/y;\nconst TOKEN_ARROW = /\\s*->\\s*/y;\nconst TOKEN_COLON = /\\s*:\\s*/y;\nconst TOKEN_COMMA = /\\s*,?\\s*/y;\nconst TOKEN_BLANK = /\\s+/y;\nclass FluentResource {\n  constructor(source) {\n    this.body = [];\n    RE_MESSAGE_START.lastIndex = 0;\n    let cursor = 0;\n    while (true) {\n      let next = RE_MESSAGE_START.exec(source);\n      if (next === null) {\n        break;\n      }\n      cursor = RE_MESSAGE_START.lastIndex;\n      try {\n        this.body.push(parseMessage(next[1]));\n      } catch (err) {\n        if (err instanceof SyntaxError) {\n          continue;\n        }\n        throw err;\n      }\n    }\n    function test(re) {\n      re.lastIndex = cursor;\n      return re.test(source);\n    }\n    function consumeChar(char, errorClass) {\n      if (source[cursor] === char) {\n        cursor++;\n        return true;\n      }\n      if (errorClass) {\n        throw new errorClass(`Expected ${char}`);\n      }\n      return false;\n    }\n    function consumeToken(re, errorClass) {\n      if (test(re)) {\n        cursor = re.lastIndex;\n        return true;\n      }\n      if (errorClass) {\n        throw new errorClass(`Expected ${re.toString()}`);\n      }\n      return false;\n    }\n    function match(re) {\n      re.lastIndex = cursor;\n      let result = re.exec(source);\n      if (result === null) {\n        throw new SyntaxError(`Expected ${re.toString()}`);\n      }\n      cursor = re.lastIndex;\n      return result;\n    }\n    function match1(re) {\n      return match(re)[1];\n    }\n    function parseMessage(id) {\n      let value = parsePattern();\n      let attributes = parseAttributes();\n      if (value === null && Object.keys(attributes).length === 0) {\n        throw new SyntaxError(\"Expected message value or attributes\");\n      }\n      return {\n        id,\n        value,\n        attributes\n      };\n    }\n    function parseAttributes() {\n      let attrs = Object.create(null);\n      while (test(RE_ATTRIBUTE_START)) {\n        let name = match1(RE_ATTRIBUTE_START);\n        let value = parsePattern();\n        if (value === null) {\n          throw new SyntaxError(\"Expected attribute value\");\n        }\n        attrs[name] = value;\n      }\n      return attrs;\n    }\n    function parsePattern() {\n      let first;\n      if (test(RE_TEXT_RUN)) {\n        first = match1(RE_TEXT_RUN);\n      }\n      if (source[cursor] === \"{\" || source[cursor] === \"}\") {\n        return parsePatternElements(first ? [first] : [], Infinity);\n      }\n      let indent = parseIndent();\n      if (indent) {\n        if (first) {\n          return parsePatternElements([first, indent], indent.length);\n        }\n        indent.value = trim(indent.value, RE_LEADING_NEWLINES);\n        return parsePatternElements([indent], indent.length);\n      }\n      if (first) {\n        return trim(first, RE_TRAILING_SPACES);\n      }\n      return null;\n    }\n    function parsePatternElements(elements = [], commonIndent) {\n      while (true) {\n        if (test(RE_TEXT_RUN)) {\n          elements.push(match1(RE_TEXT_RUN));\n          continue;\n        }\n        if (source[cursor] === \"{\") {\n          elements.push(parsePlaceable());\n          continue;\n        }\n        if (source[cursor] === \"}\") {\n          throw new SyntaxError(\"Unbalanced closing brace\");\n        }\n        let indent = parseIndent();\n        if (indent) {\n          elements.push(indent);\n          commonIndent = Math.min(commonIndent, indent.length);\n          continue;\n        }\n        break;\n      }\n      let lastIndex = elements.length - 1;\n      let lastElement = elements[lastIndex];\n      if (typeof lastElement === \"string\") {\n        elements[lastIndex] = trim(lastElement, RE_TRAILING_SPACES);\n      }\n      let baked = [];\n      for (let element of elements) {\n        if (element instanceof Indent) {\n          element = element.value.slice(0, element.value.length - commonIndent);\n        }\n        if (element) {\n          baked.push(element);\n        }\n      }\n      return baked;\n    }\n    function parsePlaceable() {\n      consumeToken(TOKEN_BRACE_OPEN, SyntaxError);\n      let selector = parseInlineExpression();\n      if (consumeToken(TOKEN_BRACE_CLOSE)) {\n        return selector;\n      }\n      if (consumeToken(TOKEN_ARROW)) {\n        let variants = parseVariants();\n        consumeToken(TOKEN_BRACE_CLOSE, SyntaxError);\n        return {\n          type: \"select\",\n          selector,\n          ...variants\n        };\n      }\n      throw new SyntaxError(\"Unclosed placeable\");\n    }\n    function parseInlineExpression() {\n      if (source[cursor] === \"{\") {\n        return parsePlaceable();\n      }\n      if (test(RE_REFERENCE)) {\n        let [, sigil, name, attr = null] = match(RE_REFERENCE);\n        if (sigil === \"$\") {\n          return {\n            type: \"var\",\n            name\n          };\n        }\n        if (consumeToken(TOKEN_PAREN_OPEN)) {\n          let args = parseArguments();\n          if (sigil === \"-\") {\n            return {\n              type: \"term\",\n              name,\n              attr,\n              args\n            };\n          }\n          if (RE_FUNCTION_NAME.test(name)) {\n            return {\n              type: \"func\",\n              name,\n              args\n            };\n          }\n          throw new SyntaxError(\"Function names must be all upper-case\");\n        }\n        if (sigil === \"-\") {\n          return {\n            type: \"term\",\n            name,\n            attr,\n            args: []\n          };\n        }\n        return {\n          type: \"mesg\",\n          name,\n          attr\n        };\n      }\n      return parseLiteral();\n    }\n    function parseArguments() {\n      let args = [];\n      while (true) {\n        switch (source[cursor]) {\n          case \")\":\n            cursor++;\n            return args;\n          case undefined:\n            throw new SyntaxError(\"Unclosed argument list\");\n        }\n        args.push(parseArgument());\n        consumeToken(TOKEN_COMMA);\n      }\n    }\n    function parseArgument() {\n      let expr = parseInlineExpression();\n      if (expr.type !== \"mesg\") {\n        return expr;\n      }\n      if (consumeToken(TOKEN_COLON)) {\n        return {\n          type: \"narg\",\n          name: expr.name,\n          value: parseLiteral()\n        };\n      }\n      return expr;\n    }\n    function parseVariants() {\n      let variants = [];\n      let count = 0;\n      let star;\n      while (test(RE_VARIANT_START)) {\n        if (consumeChar(\"*\")) {\n          star = count;\n        }\n        let key = parseVariantKey();\n        let value = parsePattern();\n        if (value === null) {\n          throw new SyntaxError(\"Expected variant value\");\n        }\n        variants[count++] = {\n          key,\n          value\n        };\n      }\n      if (count === 0) {\n        return null;\n      }\n      if (star === undefined) {\n        throw new SyntaxError(\"Expected default variant\");\n      }\n      return {\n        variants,\n        star\n      };\n    }\n    function parseVariantKey() {\n      consumeToken(TOKEN_BRACKET_OPEN, SyntaxError);\n      let key;\n      if (test(RE_NUMBER_LITERAL)) {\n        key = parseNumberLiteral();\n      } else {\n        key = {\n          type: \"str\",\n          value: match1(RE_IDENTIFIER)\n        };\n      }\n      consumeToken(TOKEN_BRACKET_CLOSE, SyntaxError);\n      return key;\n    }\n    function parseLiteral() {\n      if (test(RE_NUMBER_LITERAL)) {\n        return parseNumberLiteral();\n      }\n      if (source[cursor] === '\"') {\n        return parseStringLiteral();\n      }\n      throw new SyntaxError(\"Invalid expression\");\n    }\n    function parseNumberLiteral() {\n      let [, value, fraction = \"\"] = match(RE_NUMBER_LITERAL);\n      let precision = fraction.length;\n      return {\n        type: \"num\",\n        value: parseFloat(value),\n        precision\n      };\n    }\n    function parseStringLiteral() {\n      consumeChar('\"', SyntaxError);\n      let value = \"\";\n      while (true) {\n        value += match1(RE_STRING_RUN);\n        if (source[cursor] === \"\\\\\") {\n          value += parseEscapeSequence();\n          continue;\n        }\n        if (consumeChar('\"')) {\n          return {\n            type: \"str\",\n            value\n          };\n        }\n        throw new SyntaxError(\"Unclosed string literal\");\n      }\n    }\n    function parseEscapeSequence() {\n      if (test(RE_STRING_ESCAPE)) {\n        return match1(RE_STRING_ESCAPE);\n      }\n      if (test(RE_UNICODE_ESCAPE)) {\n        let [, codepoint4, codepoint6] = match(RE_UNICODE_ESCAPE);\n        let codepoint = parseInt(codepoint4 || codepoint6, 16);\n        return codepoint <= 0xd7ff || 0xe000 <= codepoint ? String.fromCodePoint(codepoint) : \"�\";\n      }\n      throw new SyntaxError(\"Unknown escape sequence\");\n    }\n    function parseIndent() {\n      let start = cursor;\n      consumeToken(TOKEN_BLANK);\n      switch (source[cursor]) {\n        case \".\":\n        case \"[\":\n        case \"*\":\n        case \"}\":\n        case undefined:\n          return false;\n        case \"{\":\n          return makeIndent(source.slice(start, cursor));\n      }\n      if (source[cursor - 1] === \" \") {\n        return makeIndent(source.slice(start, cursor));\n      }\n      return false;\n    }\n    function trim(text, re) {\n      return text.replace(re, \"\");\n    }\n    function makeIndent(blank) {\n      let value = blank.replace(RE_BLANK_LINES, \"\\n\");\n      let length = RE_INDENT.exec(blank)[1].length;\n      return new Indent(value, length);\n    }\n  }\n}\nclass Indent {\n  constructor(value, length) {\n    this.value = value;\n    this.length = length;\n  }\n}\n;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/index.js\n\n\n\n;// CONCATENATED MODULE: ./node_modules/@fluent/dom/esm/overlay.js\nconst reOverlay = /<|&#?\\w+;/;\nconst TEXT_LEVEL_ELEMENTS = {\n  \"http://www.w3.org/1999/xhtml\": [\"em\", \"strong\", \"small\", \"s\", \"cite\", \"q\", \"dfn\", \"abbr\", \"data\", \"time\", \"code\", \"var\", \"samp\", \"kbd\", \"sub\", \"sup\", \"i\", \"b\", \"u\", \"mark\", \"bdi\", \"bdo\", \"span\", \"br\", \"wbr\"]\n};\nconst LOCALIZABLE_ATTRIBUTES = {\n  \"http://www.w3.org/1999/xhtml\": {\n    global: [\"title\", \"aria-label\", \"aria-valuetext\"],\n    a: [\"download\"],\n    area: [\"download\", \"alt\"],\n    input: [\"alt\", \"placeholder\"],\n    menuitem: [\"label\"],\n    menu: [\"label\"],\n    optgroup: [\"label\"],\n    option: [\"label\"],\n    track: [\"label\"],\n    img: [\"alt\"],\n    textarea: [\"placeholder\"],\n    th: [\"abbr\"]\n  },\n  \"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul\": {\n    global: [\"accesskey\", \"aria-label\", \"aria-valuetext\", \"label\", \"title\", \"tooltiptext\"],\n    description: [\"value\"],\n    key: [\"key\", \"keycode\"],\n    label: [\"value\"],\n    textbox: [\"placeholder\", \"value\"]\n  }\n};\nfunction translateElement(element, translation) {\n  const {\n    value\n  } = translation;\n  if (typeof value === \"string\") {\n    if (element.localName === \"title\" && element.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n      element.textContent = value;\n    } else if (!reOverlay.test(value)) {\n      element.textContent = value;\n    } else {\n      const templateElement = element.ownerDocument.createElementNS(\"http://www.w3.org/1999/xhtml\", \"template\");\n      templateElement.innerHTML = value;\n      overlayChildNodes(templateElement.content, element);\n    }\n  }\n  overlayAttributes(translation, element);\n}\nfunction overlayChildNodes(fromFragment, toElement) {\n  for (const childNode of fromFragment.childNodes) {\n    if (childNode.nodeType === childNode.TEXT_NODE) {\n      continue;\n    }\n    if (childNode.hasAttribute(\"data-l10n-name\")) {\n      const sanitized = getNodeForNamedElement(toElement, childNode);\n      fromFragment.replaceChild(sanitized, childNode);\n      continue;\n    }\n    if (isElementAllowed(childNode)) {\n      const sanitized = createSanitizedElement(childNode);\n      fromFragment.replaceChild(sanitized, childNode);\n      continue;\n    }\n    console.warn(`An element of forbidden type \"${childNode.localName}\" was found in ` + \"the translation. Only safe text-level elements and elements with \" + \"data-l10n-name are allowed.\");\n    fromFragment.replaceChild(createTextNodeFromTextContent(childNode), childNode);\n  }\n  toElement.textContent = \"\";\n  toElement.appendChild(fromFragment);\n}\nfunction hasAttribute(attributes, name) {\n  if (!attributes) {\n    return false;\n  }\n  for (let attr of attributes) {\n    if (attr.name === name) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction overlayAttributes(fromElement, toElement) {\n  const explicitlyAllowed = toElement.hasAttribute(\"data-l10n-attrs\") ? toElement.getAttribute(\"data-l10n-attrs\").split(\",\").map(i => i.trim()) : null;\n  for (const attr of Array.from(toElement.attributes)) {\n    if (isAttrNameLocalizable(attr.name, toElement, explicitlyAllowed) && !hasAttribute(fromElement.attributes, attr.name)) {\n      toElement.removeAttribute(attr.name);\n    }\n  }\n  if (!fromElement.attributes) {\n    return;\n  }\n  for (const attr of Array.from(fromElement.attributes)) {\n    if (isAttrNameLocalizable(attr.name, toElement, explicitlyAllowed) && toElement.getAttribute(attr.name) !== attr.value) {\n      toElement.setAttribute(attr.name, attr.value);\n    }\n  }\n}\nfunction getNodeForNamedElement(sourceElement, translatedChild) {\n  const childName = translatedChild.getAttribute(\"data-l10n-name\");\n  const sourceChild = sourceElement.querySelector(`[data-l10n-name=\"${childName}\"]`);\n  if (!sourceChild) {\n    console.warn(`An element named \"${childName}\" wasn't found in the source.`);\n    return createTextNodeFromTextContent(translatedChild);\n  }\n  if (sourceChild.localName !== translatedChild.localName) {\n    console.warn(`An element named \"${childName}\" was found in the translation ` + `but its type ${translatedChild.localName} didn't match the ` + `element found in the source (${sourceChild.localName}).`);\n    return createTextNodeFromTextContent(translatedChild);\n  }\n  sourceElement.removeChild(sourceChild);\n  const clone = sourceChild.cloneNode(false);\n  return shallowPopulateUsing(translatedChild, clone);\n}\nfunction createSanitizedElement(element) {\n  const clone = element.ownerDocument.createElement(element.localName);\n  return shallowPopulateUsing(element, clone);\n}\nfunction createTextNodeFromTextContent(element) {\n  return element.ownerDocument.createTextNode(element.textContent);\n}\nfunction isElementAllowed(element) {\n  const allowed = TEXT_LEVEL_ELEMENTS[element.namespaceURI];\n  return allowed && allowed.includes(element.localName);\n}\nfunction isAttrNameLocalizable(name, element, explicitlyAllowed = null) {\n  if (explicitlyAllowed && explicitlyAllowed.includes(name)) {\n    return true;\n  }\n  const allowed = LOCALIZABLE_ATTRIBUTES[element.namespaceURI];\n  if (!allowed) {\n    return false;\n  }\n  const attrName = name.toLowerCase();\n  const elemName = element.localName;\n  if (allowed.global.includes(attrName)) {\n    return true;\n  }\n  if (!allowed[elemName]) {\n    return false;\n  }\n  if (allowed[elemName].includes(attrName)) {\n    return true;\n  }\n  if (element.namespaceURI === \"http://www.w3.org/1999/xhtml\" && elemName === \"input\" && attrName === \"value\") {\n    const type = element.type.toLowerCase();\n    if (type === \"submit\" || type === \"button\" || type === \"reset\") {\n      return true;\n    }\n  }\n  return false;\n}\nfunction shallowPopulateUsing(fromElement, toElement) {\n  toElement.textContent = fromElement.textContent;\n  overlayAttributes(fromElement, toElement);\n  return toElement;\n}\n;// CONCATENATED MODULE: ./node_modules/cached-iterable/src/cached_iterable.mjs\nclass CachedIterable extends Array {\n  static from(iterable) {\n    if (iterable instanceof this) {\n      return iterable;\n    }\n    return new this(iterable);\n  }\n}\n;// CONCATENATED MODULE: ./node_modules/cached-iterable/src/cached_sync_iterable.mjs\n\nclass CachedSyncIterable extends CachedIterable {\n  constructor(iterable) {\n    super();\n    if (Symbol.iterator in Object(iterable)) {\n      this.iterator = iterable[Symbol.iterator]();\n    } else {\n      throw new TypeError(\"Argument must implement the iteration protocol.\");\n    }\n  }\n  [Symbol.iterator]() {\n    const cached = this;\n    let cur = 0;\n    return {\n      next() {\n        if (cached.length <= cur) {\n          cached.push(cached.iterator.next());\n        }\n        return cached[cur++];\n      }\n    };\n  }\n  touchNext(count = 1) {\n    let idx = 0;\n    while (idx++ < count) {\n      const last = this[this.length - 1];\n      if (last && last.done) {\n        break;\n      }\n      this.push(this.iterator.next());\n    }\n    return this[this.length - 1];\n  }\n}\n;// CONCATENATED MODULE: ./node_modules/cached-iterable/src/cached_async_iterable.mjs\n\nclass CachedAsyncIterable extends CachedIterable {\n  constructor(iterable) {\n    super();\n    if (Symbol.asyncIterator in Object(iterable)) {\n      this.iterator = iterable[Symbol.asyncIterator]();\n    } else if (Symbol.iterator in Object(iterable)) {\n      this.iterator = iterable[Symbol.iterator]();\n    } else {\n      throw new TypeError(\"Argument must implement the iteration protocol.\");\n    }\n  }\n  [Symbol.asyncIterator]() {\n    const cached = this;\n    let cur = 0;\n    return {\n      async next() {\n        if (cached.length <= cur) {\n          cached.push(cached.iterator.next());\n        }\n        return cached[cur++];\n      }\n    };\n  }\n  async touchNext(count = 1) {\n    let idx = 0;\n    while (idx++ < count) {\n      const last = this[this.length - 1];\n      if (last && (await last).done) {\n        break;\n      }\n      this.push(this.iterator.next());\n    }\n    return this[this.length - 1];\n  }\n}\n;// CONCATENATED MODULE: ./node_modules/cached-iterable/src/index.mjs\n\n\n;// CONCATENATED MODULE: ./node_modules/@fluent/dom/esm/localization.js\n\nclass Localization {\n  constructor(resourceIds = [], generateBundles) {\n    this.resourceIds = resourceIds;\n    this.generateBundles = generateBundles;\n    this.onChange(true);\n  }\n  addResourceIds(resourceIds, eager = false) {\n    this.resourceIds.push(...resourceIds);\n    this.onChange(eager);\n    return this.resourceIds.length;\n  }\n  removeResourceIds(resourceIds) {\n    this.resourceIds = this.resourceIds.filter(r => !resourceIds.includes(r));\n    this.onChange();\n    return this.resourceIds.length;\n  }\n  async formatWithFallback(keys, method) {\n    const translations = [];\n    let hasAtLeastOneBundle = false;\n    for await (const bundle of this.bundles) {\n      hasAtLeastOneBundle = true;\n      const missingIds = keysFromBundle(method, bundle, keys, translations);\n      if (missingIds.size === 0) {\n        break;\n      }\n      if (typeof console !== \"undefined\") {\n        const locale = bundle.locales[0];\n        const ids = Array.from(missingIds).join(\", \");\n        console.warn(`[fluent] Missing translations in ${locale}: ${ids}`);\n      }\n    }\n    if (!hasAtLeastOneBundle && typeof console !== \"undefined\") {\n      console.warn(`[fluent] Request for keys failed because no resource bundles got generated.\n  keys: ${JSON.stringify(keys)}.\n  resourceIds: ${JSON.stringify(this.resourceIds)}.`);\n    }\n    return translations;\n  }\n  formatMessages(keys) {\n    return this.formatWithFallback(keys, messageFromBundle);\n  }\n  formatValues(keys) {\n    return this.formatWithFallback(keys, valueFromBundle);\n  }\n  async formatValue(id, args) {\n    const [val] = await this.formatValues([{\n      id,\n      args\n    }]);\n    return val;\n  }\n  handleEvent() {\n    this.onChange();\n  }\n  onChange(eager = false) {\n    this.bundles = CachedAsyncIterable.from(this.generateBundles(this.resourceIds));\n    if (eager) {\n      this.bundles.touchNext(2);\n    }\n  }\n}\nfunction valueFromBundle(bundle, errors, message, args) {\n  if (message.value) {\n    return bundle.formatPattern(message.value, args, errors);\n  }\n  return null;\n}\nfunction messageFromBundle(bundle, errors, message, args) {\n  const formatted = {\n    value: null,\n    attributes: null\n  };\n  if (message.value) {\n    formatted.value = bundle.formatPattern(message.value, args, errors);\n  }\n  let attrNames = Object.keys(message.attributes);\n  if (attrNames.length > 0) {\n    formatted.attributes = new Array(attrNames.length);\n    for (let [i, name] of attrNames.entries()) {\n      let value = bundle.formatPattern(message.attributes[name], args, errors);\n      formatted.attributes[i] = {\n        name,\n        value\n      };\n    }\n  }\n  return formatted;\n}\nfunction keysFromBundle(method, bundle, keys, translations) {\n  const messageErrors = [];\n  const missingIds = new Set();\n  keys.forEach(({\n    id,\n    args\n  }, i) => {\n    if (translations[i] !== undefined) {\n      return;\n    }\n    let message = bundle.getMessage(id);\n    if (message) {\n      messageErrors.length = 0;\n      translations[i] = method(bundle, messageErrors, message, args);\n      if (messageErrors.length > 0 && typeof console !== \"undefined\") {\n        const locale = bundle.locales[0];\n        const errors = messageErrors.join(\", \");\n        console.warn(`[fluent][resolver] errors in ${locale}/${id}: ${errors}.`);\n      }\n    } else {\n      missingIds.add(id);\n    }\n  });\n  return missingIds;\n}\n;// CONCATENATED MODULE: ./node_modules/@fluent/dom/esm/dom_localization.js\n\n\nconst L10NID_ATTR_NAME = \"data-l10n-id\";\nconst L10NARGS_ATTR_NAME = \"data-l10n-args\";\nconst L10N_ELEMENT_QUERY = `[${L10NID_ATTR_NAME}]`;\nclass DOMLocalization extends Localization {\n  constructor(resourceIds, generateBundles) {\n    super(resourceIds, generateBundles);\n    this.roots = new Set();\n    this.pendingrAF = null;\n    this.pendingElements = new Set();\n    this.windowElement = null;\n    this.mutationObserver = null;\n    this.observerConfig = {\n      attributes: true,\n      characterData: false,\n      childList: true,\n      subtree: true,\n      attributeFilter: [L10NID_ATTR_NAME, L10NARGS_ATTR_NAME]\n    };\n  }\n  onChange(eager = false) {\n    super.onChange(eager);\n    if (this.roots) {\n      this.translateRoots();\n    }\n  }\n  setAttributes(element, id, args) {\n    element.setAttribute(L10NID_ATTR_NAME, id);\n    if (args) {\n      element.setAttribute(L10NARGS_ATTR_NAME, JSON.stringify(args));\n    } else {\n      element.removeAttribute(L10NARGS_ATTR_NAME);\n    }\n    return element;\n  }\n  getAttributes(element) {\n    return {\n      id: element.getAttribute(L10NID_ATTR_NAME),\n      args: JSON.parse(element.getAttribute(L10NARGS_ATTR_NAME) || null)\n    };\n  }\n  connectRoot(newRoot) {\n    for (const root of this.roots) {\n      if (root === newRoot || root.contains(newRoot) || newRoot.contains(root)) {\n        throw new Error(\"Cannot add a root that overlaps with existing root.\");\n      }\n    }\n    if (this.windowElement) {\n      if (this.windowElement !== newRoot.ownerDocument.defaultView) {\n        throw new Error(`Cannot connect a root:\n          DOMLocalization already has a root from a different window.`);\n      }\n    } else {\n      this.windowElement = newRoot.ownerDocument.defaultView;\n      this.mutationObserver = new this.windowElement.MutationObserver(mutations => this.translateMutations(mutations));\n    }\n    this.roots.add(newRoot);\n    this.mutationObserver.observe(newRoot, this.observerConfig);\n  }\n  disconnectRoot(root) {\n    this.roots.delete(root);\n    this.pauseObserving();\n    if (this.roots.size === 0) {\n      this.mutationObserver = null;\n      this.windowElement = null;\n      this.pendingrAF = null;\n      this.pendingElements.clear();\n      return true;\n    }\n    this.resumeObserving();\n    return false;\n  }\n  translateRoots() {\n    const roots = Array.from(this.roots);\n    return Promise.all(roots.map(root => this.translateFragment(root)));\n  }\n  pauseObserving() {\n    if (!this.mutationObserver) {\n      return;\n    }\n    this.translateMutations(this.mutationObserver.takeRecords());\n    this.mutationObserver.disconnect();\n  }\n  resumeObserving() {\n    if (!this.mutationObserver) {\n      return;\n    }\n    for (const root of this.roots) {\n      this.mutationObserver.observe(root, this.observerConfig);\n    }\n  }\n  translateMutations(mutations) {\n    for (const mutation of mutations) {\n      switch (mutation.type) {\n        case \"attributes\":\n          if (mutation.target.hasAttribute(\"data-l10n-id\")) {\n            this.pendingElements.add(mutation.target);\n          }\n          break;\n        case \"childList\":\n          for (const addedNode of mutation.addedNodes) {\n            if (addedNode.nodeType === addedNode.ELEMENT_NODE) {\n              if (addedNode.childElementCount) {\n                for (const element of this.getTranslatables(addedNode)) {\n                  this.pendingElements.add(element);\n                }\n              } else if (addedNode.hasAttribute(L10NID_ATTR_NAME)) {\n                this.pendingElements.add(addedNode);\n              }\n            }\n          }\n          break;\n      }\n    }\n    if (this.pendingElements.size > 0) {\n      if (this.pendingrAF === null) {\n        this.pendingrAF = this.windowElement.requestAnimationFrame(() => {\n          this.translateElements(Array.from(this.pendingElements));\n          this.pendingElements.clear();\n          this.pendingrAF = null;\n        });\n      }\n    }\n  }\n  translateFragment(frag) {\n    return this.translateElements(this.getTranslatables(frag));\n  }\n  async translateElements(elements) {\n    if (!elements.length) {\n      return undefined;\n    }\n    const keys = elements.map(this.getKeysForElement);\n    const translations = await this.formatMessages(keys);\n    return this.applyTranslations(elements, translations);\n  }\n  applyTranslations(elements, translations) {\n    this.pauseObserving();\n    for (let i = 0; i < elements.length; i++) {\n      if (translations[i] !== undefined) {\n        translateElement(elements[i], translations[i]);\n      }\n    }\n    this.resumeObserving();\n  }\n  getTranslatables(element) {\n    const nodes = Array.from(element.querySelectorAll(L10N_ELEMENT_QUERY));\n    if (typeof element.hasAttribute === \"function\" && element.hasAttribute(L10NID_ATTR_NAME)) {\n      nodes.push(element);\n    }\n    return nodes;\n  }\n  getKeysForElement(element) {\n    return {\n      id: element.getAttribute(L10NID_ATTR_NAME),\n      args: JSON.parse(element.getAttribute(L10NARGS_ATTR_NAME) || null)\n    };\n  }\n}\n;// CONCATENATED MODULE: ./node_modules/@fluent/dom/esm/index.js\n\n\n;// CONCATENATED MODULE: ./web/l10n.js\nclass L10n {\n  #dir;\n  #lang;\n  #l10n;\n  constructor({\n    lang,\n    isRTL\n  }, l10n = null) {\n    this.#lang = L10n.#fixupLangCode(lang);\n    this.#l10n = l10n;\n    this.#dir = isRTL ?? L10n.#isRTL(this.#lang) ? \"rtl\" : \"ltr\";\n  }\n  _setL10n(l10n) {\n    this.#l10n = l10n;\n  }\n  getLanguage() {\n    return this.#lang;\n  }\n  getDirection() {\n    return this.#dir;\n  }\n  async get(ids, args = null, fallback) {\n    if (Array.isArray(ids)) {\n      ids = ids.map(id => ({\n        id\n      }));\n      const messages = await this.#l10n.formatMessages(ids);\n      return messages.map(message => message.value);\n    }\n    const messages = await this.#l10n.formatMessages([{\n      id: ids,\n      args\n    }]);\n    return messages?.[0].value || fallback;\n  }\n  async translate(element) {\n    try {\n      this.#l10n.connectRoot(element);\n      await this.#l10n.translateRoots();\n    } catch {}\n  }\n  pause() {\n    this.#l10n.pauseObserving();\n  }\n  resume() {\n    this.#l10n.resumeObserving();\n  }\n  static #fixupLangCode(langCode) {\n    langCode = langCode?.toLowerCase() || \"en-us\";\n    const PARTIAL_LANG_CODES = {\n      en: \"en-us\",\n      es: \"es-es\",\n      fy: \"fy-nl\",\n      ga: \"ga-ie\",\n      gu: \"gu-in\",\n      hi: \"hi-in\",\n      hy: \"hy-am\",\n      nb: \"nb-no\",\n      ne: \"ne-np\",\n      nn: \"nn-no\",\n      pa: \"pa-in\",\n      pt: \"pt-pt\",\n      sv: \"sv-se\",\n      zh: \"zh-cn\"\n    };\n    return PARTIAL_LANG_CODES[langCode] || langCode;\n  }\n  static #isRTL(lang) {\n    const shortCode = lang.split(\"-\", 1)[0];\n    return [\"ar\", \"he\", \"fa\", \"ps\", \"ur\"].includes(shortCode);\n  }\n}\nconst GenericL10n = null;\n\n;// CONCATENATED MODULE: ./web/genericl10n.js\n\n\n\n\nfunction createBundle(lang, text) {\n  const resource = new FluentResource(text);\n  const bundle = new FluentBundle(lang);\n  const errors = bundle.addResource(resource);\n  if (errors.length) {\n    console.error(\"L10n errors\", errors);\n  }\n  return bundle;\n}\nclass genericl10n_GenericL10n extends L10n {\n  constructor(lang) {\n    super({\n      lang\n    });\n    const generateBundles = !lang ? genericl10n_GenericL10n.#generateBundlesFallback.bind(genericl10n_GenericL10n, this.getLanguage()) : genericl10n_GenericL10n.#generateBundles.bind(genericl10n_GenericL10n, \"en-us\", this.getLanguage());\n    this._setL10n(new DOMLocalization([], generateBundles));\n  }\n  static async *#generateBundles(defaultLang, baseLang) {\n    const {\n      baseURL,\n      paths\n    } = await this.#getPaths();\n    const langs = [baseLang];\n    if (defaultLang !== baseLang) {\n      const shortLang = baseLang.split(\"-\", 1)[0];\n      if (shortLang !== baseLang) {\n        langs.push(shortLang);\n      }\n      langs.push(defaultLang);\n    }\n    for (const lang of langs) {\n      const bundle = await this.#createBundle(lang, baseURL, paths);\n      if (bundle) {\n        yield bundle;\n      }\n      if (lang === \"en-us\") {\n        yield this.#createBundleFallback(lang);\n      }\n    }\n  }\n  static async #createBundle(lang, baseURL, paths) {\n    const path = paths[lang];\n    if (!path) {\n      return null;\n    }\n    const url = new URL(path, baseURL);\n    const text = await fetchData(url, \"text\");\n    return createBundle(lang, text);\n  }\n  static async #getPaths() {\n    try {\n      const {\n        href\n      } = document.querySelector(`link[type=\"application/l10n\"]`);\n      const paths = await fetchData(href, \"json\");\n      return {\n        baseURL: href.replace(/[^/]*$/, \"\") || \"./\",\n        paths\n      };\n    } catch {}\n    return {\n      baseURL: \"./\",\n      paths: Object.create(null)\n    };\n  }\n  static async *#generateBundlesFallback(lang) {\n    yield this.#createBundleFallback(lang);\n  }\n  static async #createBundleFallback(lang) {\n    const text = \"pdfjs-previous-button =\\n    .title = Previous Page\\npdfjs-previous-button-label = Previous\\npdfjs-next-button =\\n    .title = Next Page\\npdfjs-next-button-label = Next\\npdfjs-page-input =\\n    .title = Page\\npdfjs-of-pages = of { $pagesCount }\\npdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount })\\npdfjs-zoom-out-button =\\n    .title = Zoom Out\\npdfjs-zoom-out-button-label = Zoom Out\\npdfjs-zoom-in-button =\\n    .title = Zoom In\\npdfjs-zoom-in-button-label = Zoom In\\npdfjs-zoom-select =\\n    .title = Zoom\\npdfjs-presentation-mode-button =\\n    .title = Switch to Presentation Mode\\npdfjs-presentation-mode-button-label = Presentation Mode\\npdfjs-open-file-button =\\n    .title = Open File\\npdfjs-open-file-button-label = Open\\npdfjs-print-button =\\n    .title = Print\\npdfjs-print-button-label = Print\\npdfjs-save-button =\\n    .title = Save\\npdfjs-save-button-label = Save\\npdfjs-download-button =\\n    .title = Download\\npdfjs-download-button-label = Download\\npdfjs-bookmark-button =\\n    .title = Current Page (View URL from Current Page)\\npdfjs-bookmark-button-label = Current Page\\npdfjs-tools-button =\\n    .title = Tools\\npdfjs-tools-button-label = Tools\\npdfjs-first-page-button =\\n    .title = Go to First Page\\npdfjs-first-page-button-label = Go to First Page\\npdfjs-last-page-button =\\n    .title = Go to Last Page\\npdfjs-last-page-button-label = Go to Last Page\\npdfjs-page-rotate-cw-button =\\n    .title = Rotate Clockwise\\npdfjs-page-rotate-cw-button-label = Rotate Clockwise\\npdfjs-page-rotate-ccw-button =\\n    .title = Rotate Counterclockwise\\npdfjs-page-rotate-ccw-button-label = Rotate Counterclockwise\\npdfjs-cursor-text-select-tool-button =\\n    .title = Enable Text Selection Tool\\npdfjs-cursor-text-select-tool-button-label = Text Selection Tool\\npdfjs-cursor-hand-tool-button =\\n    .title = Enable Hand Tool\\npdfjs-cursor-hand-tool-button-label = Hand Tool\\npdfjs-scroll-page-button =\\n    .title = Use Page Scrolling\\npdfjs-scroll-page-button-label = Page Scrolling\\npdfjs-scroll-vertical-button =\\n    .title = Use Vertical Scrolling\\npdfjs-scroll-vertical-button-label = Vertical Scrolling\\npdfjs-scroll-horizontal-button =\\n    .title = Use Horizontal Scrolling\\npdfjs-scroll-horizontal-button-label = Horizontal Scrolling\\npdfjs-scroll-wrapped-button =\\n    .title = Use Wrapped Scrolling\\npdfjs-scroll-wrapped-button-label = Wrapped Scrolling\\npdfjs-spread-none-button =\\n    .title = Do not join page spreads\\npdfjs-spread-none-button-label = No Spreads\\npdfjs-spread-odd-button =\\n    .title = Join page spreads starting with odd-numbered pages\\npdfjs-spread-odd-button-label = Odd Spreads\\npdfjs-spread-even-button =\\n    .title = Join page spreads starting with even-numbered pages\\npdfjs-spread-even-button-label = Even Spreads\\npdfjs-document-properties-button =\\n    .title = Document Properties\\u2026\\npdfjs-document-properties-button-label = Document Properties\\u2026\\npdfjs-document-properties-file-name = File name:\\npdfjs-document-properties-file-size = File size:\\npdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes)\\npdfjs-document-properties-mb = { $size_mb } MB ({ $size_b } bytes)\\npdfjs-document-properties-title = Title:\\npdfjs-document-properties-author = Author:\\npdfjs-document-properties-subject = Subject:\\npdfjs-document-properties-keywords = Keywords:\\npdfjs-document-properties-creation-date = Creation Date:\\npdfjs-document-properties-modification-date = Modification Date:\\npdfjs-document-properties-date-string = { $date }, { $time }\\npdfjs-document-properties-creator = Creator:\\npdfjs-document-properties-producer = PDF Producer:\\npdfjs-document-properties-version = PDF Version:\\npdfjs-document-properties-page-count = Page Count:\\npdfjs-document-properties-page-size = Page Size:\\npdfjs-document-properties-page-size-unit-inches = in\\npdfjs-document-properties-page-size-unit-millimeters = mm\\npdfjs-document-properties-page-size-orientation-portrait = portrait\\npdfjs-document-properties-page-size-orientation-landscape = landscape\\npdfjs-document-properties-page-size-name-a-three = A3\\npdfjs-document-properties-page-size-name-a-four = A4\\npdfjs-document-properties-page-size-name-letter = Letter\\npdfjs-document-properties-page-size-name-legal = Legal\\npdfjs-document-properties-page-size-dimension-string = { $width } \\xD7 { $height } { $unit } ({ $orientation })\\npdfjs-document-properties-page-size-dimension-name-string = { $width } \\xD7 { $height } { $unit } ({ $name }, { $orientation })\\npdfjs-document-properties-linearized = Fast Web View:\\npdfjs-document-properties-linearized-yes = Yes\\npdfjs-document-properties-linearized-no = No\\npdfjs-document-properties-close-button = Close\\npdfjs-print-progress-message = Preparing document for printing\\u2026\\npdfjs-print-progress-percent = { $progress }%\\npdfjs-print-progress-close-button = Cancel\\npdfjs-printing-not-supported = Warning: Printing is not fully supported by this browser.\\npdfjs-printing-not-ready = Warning: The PDF is not fully loaded for printing.\\npdfjs-toggle-sidebar-button =\\n    .title = Toggle Sidebar\\npdfjs-toggle-sidebar-notification-button =\\n    .title = Toggle Sidebar (document contains outline/attachments/layers)\\npdfjs-toggle-sidebar-button-label = Toggle Sidebar\\npdfjs-document-outline-button =\\n    .title = Show Document Outline (double-click to expand/collapse all items)\\npdfjs-document-outline-button-label = Document Outline\\npdfjs-attachments-button =\\n    .title = Show Attachments\\npdfjs-attachments-button-label = Attachments\\npdfjs-layers-button =\\n    .title = Show Layers (double-click to reset all layers to the default state)\\npdfjs-layers-button-label = Layers\\npdfjs-thumbs-button =\\n    .title = Show Thumbnails\\npdfjs-thumbs-button-label = Thumbnails\\npdfjs-current-outline-item-button =\\n    .title = Find Current Outline Item\\npdfjs-current-outline-item-button-label = Current Outline Item\\npdfjs-findbar-button =\\n    .title = Find in Document\\npdfjs-findbar-button-label = Find\\npdfjs-additional-layers = Additional Layers\\npdfjs-thumb-page-title =\\n    .title = Page { $page }\\npdfjs-thumb-page-canvas =\\n    .aria-label = Thumbnail of Page { $page }\\npdfjs-find-input =\\n    .title = Find\\n    .placeholder = Find in document\\u2026\\npdfjs-find-previous-button =\\n    .title = Find the previous occurrence of the phrase\\npdfjs-find-previous-button-label = Previous\\npdfjs-find-next-button =\\n    .title = Find the next occurrence of the phrase\\npdfjs-find-next-button-label = Next\\npdfjs-find-highlight-checkbox = Highlight All\\npdfjs-find-match-case-checkbox-label = Match Case\\npdfjs-find-match-diacritics-checkbox-label = Match Diacritics\\npdfjs-find-entire-word-checkbox-label = Whole Words\\npdfjs-find-reached-top = Reached top of document, continued from bottom\\npdfjs-find-reached-bottom = Reached end of document, continued from top\\npdfjs-find-match-count =\\n    { $total ->\\n        [one] { $current } of { $total } match\\n       *[other] { $current } of { $total } matches\\n    }\\npdfjs-find-match-count-limit =\\n    { $limit ->\\n        [one] More than { $limit } match\\n       *[other] More than { $limit } matches\\n    }\\npdfjs-find-not-found = Phrase not found\\npdfjs-page-scale-width = Page Width\\npdfjs-page-scale-fit = Page Fit\\npdfjs-page-scale-auto = Automatic Zoom\\npdfjs-page-scale-actual = Actual Size\\npdfjs-page-scale-percent = { $scale }%\\npdfjs-page-landmark =\\n    .aria-label = Page { $page }\\npdfjs-loading-error = An error occurred while loading the PDF.\\npdfjs-invalid-file-error = Invalid or corrupted PDF file.\\npdfjs-missing-file-error = Missing PDF file.\\npdfjs-unexpected-response-error = Unexpected server response.\\npdfjs-rendering-error = An error occurred while rendering the page.\\npdfjs-annotation-date-string = { $date }, { $time }\\npdfjs-text-annotation-type =\\n    .alt = [{ $type } Annotation]\\npdfjs-password-label = Enter the password to open this PDF file.\\npdfjs-password-invalid = Invalid password. Please try again.\\npdfjs-password-ok-button = OK\\npdfjs-password-cancel-button = Cancel\\npdfjs-web-fonts-disabled = Web fonts are disabled: unable to use embedded PDF fonts.\\npdfjs-editor-free-text-button =\\n    .title = Text\\npdfjs-editor-free-text-button-label = Text\\npdfjs-editor-ink-button =\\n    .title = Draw\\npdfjs-editor-ink-button-label = Draw\\npdfjs-editor-stamp-button =\\n    .title = Add or edit images\\npdfjs-editor-stamp-button-label = Add or edit images\\npdfjs-editor-highlight-button =\\n    .title = Highlight\\npdfjs-editor-highlight-button-label = Highlight\\npdfjs-highlight-floating-button1 =\\n    .title = Highlight\\n    .aria-label = Highlight\\npdfjs-highlight-floating-button-label = Highlight\\npdfjs-editor-remove-ink-button =\\n    .title = Remove drawing\\npdfjs-editor-remove-freetext-button =\\n    .title = Remove text\\npdfjs-editor-remove-stamp-button =\\n    .title = Remove image\\npdfjs-editor-remove-highlight-button =\\n    .title = Remove highlight\\npdfjs-editor-free-text-color-input = Color\\npdfjs-editor-free-text-size-input = Size\\npdfjs-editor-ink-color-input = Color\\npdfjs-editor-ink-thickness-input = Thickness\\npdfjs-editor-ink-opacity-input = Opacity\\npdfjs-editor-stamp-add-image-button =\\n    .title = Add image\\npdfjs-editor-stamp-add-image-button-label = Add image\\npdfjs-editor-free-highlight-thickness-input = Thickness\\npdfjs-editor-free-highlight-thickness-title =\\n    .title = Change thickness when highlighting items other than text\\npdfjs-free-text =\\n    .aria-label = Text Editor\\npdfjs-free-text-default-content = Start typing\\u2026\\npdfjs-ink =\\n    .aria-label = Draw Editor\\npdfjs-ink-canvas =\\n    .aria-label = User-created image\\npdfjs-editor-alt-text-button-label = Alt text\\npdfjs-editor-alt-text-edit-button-label = Edit alt text\\npdfjs-editor-alt-text-dialog-label = Choose an option\\npdfjs-editor-alt-text-dialog-description = Alt text (alternative text) helps when people can\\u2019t see the image or when it doesn\\u2019t load.\\npdfjs-editor-alt-text-add-description-label = Add a description\\npdfjs-editor-alt-text-add-description-description = Aim for 1-2 sentences that describe the subject, setting, or actions.\\npdfjs-editor-alt-text-mark-decorative-label = Mark as decorative\\npdfjs-editor-alt-text-mark-decorative-description = This is used for ornamental images, like borders or watermarks.\\npdfjs-editor-alt-text-cancel-button = Cancel\\npdfjs-editor-alt-text-save-button = Save\\npdfjs-editor-alt-text-decorative-tooltip = Marked as decorative\\npdfjs-editor-alt-text-textarea =\\n    .placeholder = For example, \\u201CA young man sits down at a table to eat a meal\\u201D\\npdfjs-editor-resizer-label-top-left = Top left corner \\u2014 resize\\npdfjs-editor-resizer-label-top-middle = Top middle \\u2014 resize\\npdfjs-editor-resizer-label-top-right = Top right corner \\u2014 resize\\npdfjs-editor-resizer-label-middle-right = Middle right \\u2014 resize\\npdfjs-editor-resizer-label-bottom-right = Bottom right corner \\u2014 resize\\npdfjs-editor-resizer-label-bottom-middle = Bottom middle \\u2014 resize\\npdfjs-editor-resizer-label-bottom-left = Bottom left corner \\u2014 resize\\npdfjs-editor-resizer-label-middle-left = Middle left \\u2014 resize\\npdfjs-editor-highlight-colorpicker-label = Highlight color\\npdfjs-editor-colorpicker-button =\\n    .title = Change color\\npdfjs-editor-colorpicker-dropdown =\\n    .aria-label = Color choices\\npdfjs-editor-colorpicker-yellow =\\n    .title = Yellow\\npdfjs-editor-colorpicker-green =\\n    .title = Green\\npdfjs-editor-colorpicker-blue =\\n    .title = Blue\\npdfjs-editor-colorpicker-pink =\\n    .title = Pink\\npdfjs-editor-colorpicker-red =\\n    .title = Red\\npdfjs-editor-highlight-show-all-button-label = Show all\\npdfjs-editor-highlight-show-all-button =\\n    .title = Show all\";\n    return createBundle(lang, text);\n  }\n}\n\n;// CONCATENATED MODULE: ./web/generic_scripting.js\n\nasync function docProperties(pdfDocument) {\n  const url = \"\",\n    baseUrl = url.split(\"#\", 1)[0];\n  let {\n    info,\n    metadata,\n    contentDispositionFilename,\n    contentLength\n  } = await pdfDocument.getMetadata();\n  if (!contentLength) {\n    const {\n      length\n    } = await pdfDocument.getDownloadInfo();\n    contentLength = length;\n  }\n  return {\n    ...info,\n    baseURL: baseUrl,\n    filesize: contentLength,\n    filename: contentDispositionFilename || getPdfFilenameFromUrl(url),\n    metadata: metadata?.getRaw(),\n    authors: metadata?.get(\"dc:creator\"),\n    numPages: pdfDocument.numPages,\n    URL: url\n  };\n}\nclass GenericScripting {\n  constructor(sandboxBundleSrc) {\n    this._ready = new Promise((resolve, reject) => {\n      const sandbox = import( /*webpackIgnore: true*/sandboxBundleSrc);\n      sandbox.then(pdfjsSandbox => {\n        resolve(pdfjsSandbox.QuickJSSandbox());\n      }).catch(reject);\n    });\n  }\n  async createSandbox(data) {\n    const sandbox = await this._ready;\n    sandbox.create(data);\n  }\n  async dispatchEventInSandbox(event) {\n    const sandbox = await this._ready;\n    setTimeout(() => sandbox.dispatchEvent(event), 0);\n  }\n  async destroySandbox() {\n    const sandbox = await this._ready;\n    sandbox.nukeSandbox();\n  }\n}\n\n;// CONCATENATED MODULE: ./web/genericcom.js\n\n\n\n\n\nfunction initCom(app) {}\nclass Preferences extends BasePreferences {\n  async _writeToStorage(prefObj) {\n    localStorage.setItem(\"pdfjs.preferences\", JSON.stringify(prefObj));\n  }\n  async _readFromStorage(prefObj) {\n    return {\n      prefs: JSON.parse(localStorage.getItem(\"pdfjs.preferences\"))\n    };\n  }\n}\nclass ExternalServices extends BaseExternalServices {\n  async createL10n() {\n    return new genericl10n_GenericL10n(AppOptions.get(\"locale\"));\n  }\n  createScripting() {\n    return new GenericScripting(AppOptions.get(\"sandboxBundleSrc\"));\n  }\n}\nclass MLManager {\n  async guess() {\n    return null;\n  }\n}\n\n;// CONCATENATED MODULE: ./web/alt_text_manager.js\n\nclass AltTextManager {\n  #boundUpdateUIState = this.#updateUIState.bind(this);\n  #boundSetPosition = this.#setPosition.bind(this);\n  #boundOnClick = this.#onClick.bind(this);\n  #currentEditor = null;\n  #cancelButton;\n  #dialog;\n  #eventBus;\n  #hasUsedPointer = false;\n  #optionDescription;\n  #optionDecorative;\n  #overlayManager;\n  #saveButton;\n  #textarea;\n  #uiManager;\n  #previousAltText = null;\n  #svgElement = null;\n  #rectElement = null;\n  #container;\n  #telemetryData = null;\n  constructor({\n    dialog,\n    optionDescription,\n    optionDecorative,\n    textarea,\n    cancelButton,\n    saveButton\n  }, container, overlayManager, eventBus) {\n    this.#dialog = dialog;\n    this.#optionDescription = optionDescription;\n    this.#optionDecorative = optionDecorative;\n    this.#textarea = textarea;\n    this.#cancelButton = cancelButton;\n    this.#saveButton = saveButton;\n    this.#overlayManager = overlayManager;\n    this.#eventBus = eventBus;\n    this.#container = container;\n    dialog.addEventListener(\"close\", this.#close.bind(this));\n    dialog.addEventListener(\"contextmenu\", event => {\n      if (event.target !== this.#textarea) {\n        event.preventDefault();\n      }\n    });\n    cancelButton.addEventListener(\"click\", this.#finish.bind(this));\n    saveButton.addEventListener(\"click\", this.#save.bind(this));\n    optionDescription.addEventListener(\"change\", this.#boundUpdateUIState);\n    optionDecorative.addEventListener(\"change\", this.#boundUpdateUIState);\n    this.#overlayManager.register(dialog);\n  }\n  get _elements() {\n    return shadow(this, \"_elements\", [this.#optionDescription, this.#optionDecorative, this.#textarea, this.#saveButton, this.#cancelButton]);\n  }\n  #createSVGElement() {\n    if (this.#svgElement) {\n      return;\n    }\n    const svgFactory = new DOMSVGFactory();\n    const svg = this.#svgElement = svgFactory.createElement(\"svg\");\n    svg.setAttribute(\"width\", \"0\");\n    svg.setAttribute(\"height\", \"0\");\n    const defs = svgFactory.createElement(\"defs\");\n    svg.append(defs);\n    const mask = svgFactory.createElement(\"mask\");\n    defs.append(mask);\n    mask.setAttribute(\"id\", \"alttext-manager-mask\");\n    mask.setAttribute(\"maskContentUnits\", \"objectBoundingBox\");\n    let rect = svgFactory.createElement(\"rect\");\n    mask.append(rect);\n    rect.setAttribute(\"fill\", \"white\");\n    rect.setAttribute(\"width\", \"1\");\n    rect.setAttribute(\"height\", \"1\");\n    rect.setAttribute(\"x\", \"0\");\n    rect.setAttribute(\"y\", \"0\");\n    rect = this.#rectElement = svgFactory.createElement(\"rect\");\n    mask.append(rect);\n    rect.setAttribute(\"fill\", \"black\");\n    this.#dialog.append(svg);\n  }\n  async editAltText(uiManager, editor) {\n    if (this.#currentEditor || !editor) {\n      return;\n    }\n    this.#createSVGElement();\n    this.#hasUsedPointer = false;\n    for (const element of this._elements) {\n      element.addEventListener(\"click\", this.#boundOnClick);\n    }\n    const {\n      altText,\n      decorative\n    } = editor.altTextData;\n    if (decorative === true) {\n      this.#optionDecorative.checked = true;\n      this.#optionDescription.checked = false;\n    } else {\n      this.#optionDecorative.checked = false;\n      this.#optionDescription.checked = true;\n    }\n    this.#previousAltText = this.#textarea.value = altText?.trim() || \"\";\n    this.#updateUIState();\n    this.#currentEditor = editor;\n    this.#uiManager = uiManager;\n    this.#uiManager.removeEditListeners();\n    this.#eventBus._on(\"resize\", this.#boundSetPosition);\n    try {\n      await this.#overlayManager.open(this.#dialog);\n      this.#setPosition();\n    } catch (ex) {\n      this.#close();\n      throw ex;\n    }\n  }\n  #setPosition() {\n    if (!this.#currentEditor) {\n      return;\n    }\n    const dialog = this.#dialog;\n    const {\n      style\n    } = dialog;\n    const {\n      x: containerX,\n      y: containerY,\n      width: containerW,\n      height: containerH\n    } = this.#container.getBoundingClientRect();\n    const {\n      innerWidth: windowW,\n      innerHeight: windowH\n    } = window;\n    const {\n      width: dialogW,\n      height: dialogH\n    } = dialog.getBoundingClientRect();\n    const {\n      x,\n      y,\n      width,\n      height\n    } = this.#currentEditor.getClientDimensions();\n    const MARGIN = 10;\n    const isLTR = this.#uiManager.direction === \"ltr\";\n    const xs = Math.max(x, containerX);\n    const xe = Math.min(x + width, containerX + containerW);\n    const ys = Math.max(y, containerY);\n    const ye = Math.min(y + height, containerY + containerH);\n    this.#rectElement.setAttribute(\"width\", `${(xe - xs) / windowW}`);\n    this.#rectElement.setAttribute(\"height\", `${(ye - ys) / windowH}`);\n    this.#rectElement.setAttribute(\"x\", `${xs / windowW}`);\n    this.#rectElement.setAttribute(\"y\", `${ys / windowH}`);\n    let left = null;\n    let top = Math.max(y, 0);\n    top += Math.min(windowH - (top + dialogH), 0);\n    if (isLTR) {\n      if (x + width + MARGIN + dialogW < windowW) {\n        left = x + width + MARGIN;\n      } else if (x > dialogW + MARGIN) {\n        left = x - dialogW - MARGIN;\n      }\n    } else if (x > dialogW + MARGIN) {\n      left = x - dialogW - MARGIN;\n    } else if (x + width + MARGIN + dialogW < windowW) {\n      left = x + width + MARGIN;\n    }\n    if (left === null) {\n      top = null;\n      left = Math.max(x, 0);\n      left += Math.min(windowW - (left + dialogW), 0);\n      if (y > dialogH + MARGIN) {\n        top = y - dialogH - MARGIN;\n      } else if (y + height + MARGIN + dialogH < windowH) {\n        top = y + height + MARGIN;\n      }\n    }\n    if (top !== null) {\n      dialog.classList.add(\"positioned\");\n      if (isLTR) {\n        style.left = `${left}px`;\n      } else {\n        style.right = `${windowW - left - dialogW}px`;\n      }\n      style.top = `${top}px`;\n    } else {\n      dialog.classList.remove(\"positioned\");\n      style.left = \"\";\n      style.top = \"\";\n    }\n  }\n  #finish() {\n    if (this.#overlayManager.active === this.#dialog) {\n      this.#overlayManager.close(this.#dialog);\n    }\n  }\n  #close() {\n    this.#currentEditor._reportTelemetry(this.#telemetryData || {\n      action: \"alt_text_cancel\",\n      alt_text_keyboard: !this.#hasUsedPointer\n    });\n    this.#telemetryData = null;\n    this.#removeOnClickListeners();\n    this.#uiManager?.addEditListeners();\n    this.#eventBus._off(\"resize\", this.#boundSetPosition);\n    this.#currentEditor.altTextFinish();\n    this.#currentEditor = null;\n    this.#uiManager = null;\n  }\n  #updateUIState() {\n    this.#textarea.disabled = this.#optionDecorative.checked;\n  }\n  #save() {\n    const altText = this.#textarea.value.trim();\n    const decorative = this.#optionDecorative.checked;\n    this.#currentEditor.altTextData = {\n      altText,\n      decorative\n    };\n    this.#telemetryData = {\n      action: \"alt_text_save\",\n      alt_text_description: !!altText,\n      alt_text_edit: !!this.#previousAltText && this.#previousAltText !== altText,\n      alt_text_decorative: decorative,\n      alt_text_keyboard: !this.#hasUsedPointer\n    };\n    this.#finish();\n  }\n  #onClick(evt) {\n    if (evt.detail === 0) {\n      return;\n    }\n    this.#hasUsedPointer = true;\n    this.#removeOnClickListeners();\n  }\n  #removeOnClickListeners() {\n    for (const element of this._elements) {\n      element.removeEventListener(\"click\", this.#boundOnClick);\n    }\n  }\n  destroy() {\n    this.#uiManager = null;\n    this.#finish();\n    this.#svgElement?.remove();\n    this.#svgElement = this.#rectElement = null;\n  }\n}\n\n;// CONCATENATED MODULE: ./web/annotation_editor_params.js\n\nclass AnnotationEditorParams {\n  constructor(options, eventBus) {\n    this.eventBus = eventBus;\n    this.#bindListeners(options);\n  }\n  #bindListeners({\n    editorFreeTextFontSize,\n    editorFreeTextColor,\n    editorInkColor,\n    editorInkThickness,\n    editorInkOpacity,\n    editorStampAddImage,\n    editorFreeHighlightThickness,\n    editorHighlightShowAll\n  }) {\n    const dispatchEvent = (typeStr, value) => {\n      this.eventBus.dispatch(\"switchannotationeditorparams\", {\n        source: this,\n        type: AnnotationEditorParamsType[typeStr],\n        value\n      });\n    };\n    editorFreeTextFontSize.addEventListener(\"input\", function () {\n      dispatchEvent(\"FREETEXT_SIZE\", this.valueAsNumber);\n    });\n    editorFreeTextColor.addEventListener(\"input\", function () {\n      dispatchEvent(\"FREETEXT_COLOR\", this.value);\n    });\n    editorInkColor.addEventListener(\"input\", function () {\n      dispatchEvent(\"INK_COLOR\", this.value);\n    });\n    editorInkThickness.addEventListener(\"input\", function () {\n      dispatchEvent(\"INK_THICKNESS\", this.valueAsNumber);\n    });\n    editorInkOpacity.addEventListener(\"input\", function () {\n      dispatchEvent(\"INK_OPACITY\", this.valueAsNumber);\n    });\n    editorStampAddImage.addEventListener(\"click\", () => {\n      dispatchEvent(\"CREATE\");\n    });\n    editorFreeHighlightThickness.addEventListener(\"input\", function () {\n      dispatchEvent(\"HIGHLIGHT_THICKNESS\", this.valueAsNumber);\n    });\n    editorHighlightShowAll.addEventListener(\"click\", function () {\n      const checked = this.getAttribute(\"aria-pressed\") === \"true\";\n      this.setAttribute(\"aria-pressed\", !checked);\n      dispatchEvent(\"HIGHLIGHT_SHOW_ALL\", !checked);\n    });\n    this.eventBus._on(\"annotationeditorparamschanged\", evt => {\n      for (const [type, value] of evt.details) {\n        switch (type) {\n          case AnnotationEditorParamsType.FREETEXT_SIZE:\n            editorFreeTextFontSize.value = value;\n            break;\n          case AnnotationEditorParamsType.FREETEXT_COLOR:\n            editorFreeTextColor.value = value;\n            break;\n          case AnnotationEditorParamsType.INK_COLOR:\n            editorInkColor.value = value;\n            break;\n          case AnnotationEditorParamsType.INK_THICKNESS:\n            editorInkThickness.value = value;\n            break;\n          case AnnotationEditorParamsType.INK_OPACITY:\n            editorInkOpacity.value = value;\n            break;\n          case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS:\n            editorFreeHighlightThickness.value = value;\n            break;\n          case AnnotationEditorParamsType.HIGHLIGHT_FREE:\n            editorFreeHighlightThickness.disabled = !value;\n            break;\n          case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL:\n            editorHighlightShowAll.setAttribute(\"aria-pressed\", value);\n            break;\n        }\n      }\n    });\n  }\n}\n\n;// CONCATENATED MODULE: ./web/caret_browsing.js\nconst PRECISION = 1e-1;\nclass CaretBrowsingMode {\n  #mainContainer;\n  #toolBarHeight;\n  #viewerContainer;\n  constructor(mainContainer, viewerContainer, toolbarContainer) {\n    this.#mainContainer = mainContainer;\n    this.#viewerContainer = viewerContainer;\n    this.#toolBarHeight = toolbarContainer?.getBoundingClientRect().height ?? 0;\n  }\n  #isOnSameLine(rect1, rect2) {\n    const top1 = rect1.y;\n    const bot1 = rect1.bottom;\n    const mid1 = rect1.y + rect1.height / 2;\n    const top2 = rect2.y;\n    const bot2 = rect2.bottom;\n    const mid2 = rect2.y + rect2.height / 2;\n    return top1 <= mid2 && mid2 <= bot1 || top2 <= mid1 && mid1 <= bot2;\n  }\n  #isUnderOver(rect, x, y, isUp) {\n    const midY = rect.y + rect.height / 2;\n    return (isUp ? y >= midY : y <= midY) && rect.x - PRECISION <= x && x <= rect.right + PRECISION;\n  }\n  #isVisible(rect) {\n    return rect.top >= this.#toolBarHeight && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n  }\n  #getCaretPosition(selection, isUp) {\n    const {\n      focusNode,\n      focusOffset\n    } = selection;\n    const range = document.createRange();\n    range.setStart(focusNode, focusOffset);\n    range.setEnd(focusNode, focusOffset);\n    const rect = range.getBoundingClientRect();\n    return [rect.x, isUp ? rect.top : rect.bottom];\n  }\n  static #caretPositionFromPoint(x, y) {\n    if (!document.caretPositionFromPoint) {\n      const {\n        startContainer: offsetNode,\n        startOffset: offset\n      } = document.caretRangeFromPoint(x, y);\n      return {\n        offsetNode,\n        offset\n      };\n    }\n    return document.caretPositionFromPoint(x, y);\n  }\n  #setCaretPositionHelper(selection, caretX, select, element, rect) {\n    rect ||= element.getBoundingClientRect();\n    if (caretX <= rect.x + PRECISION) {\n      if (select) {\n        selection.extend(element.firstChild, 0);\n      } else {\n        selection.setPosition(element.firstChild, 0);\n      }\n      return;\n    }\n    if (rect.right - PRECISION <= caretX) {\n      const {\n        lastChild\n      } = element;\n      if (select) {\n        selection.extend(lastChild, lastChild.length);\n      } else {\n        selection.setPosition(lastChild, lastChild.length);\n      }\n      return;\n    }\n    const midY = rect.y + rect.height / 2;\n    let caretPosition = CaretBrowsingMode.#caretPositionFromPoint(caretX, midY);\n    let parentElement = caretPosition.offsetNode?.parentElement;\n    if (parentElement && parentElement !== element) {\n      const elementsAtPoint = document.elementsFromPoint(caretX, midY);\n      const savedVisibilities = [];\n      for (const el of elementsAtPoint) {\n        if (el === element) {\n          break;\n        }\n        const {\n          style\n        } = el;\n        savedVisibilities.push([el, style.visibility]);\n        style.visibility = \"hidden\";\n      }\n      caretPosition = CaretBrowsingMode.#caretPositionFromPoint(caretX, midY);\n      parentElement = caretPosition.offsetNode?.parentElement;\n      for (const [el, visibility] of savedVisibilities) {\n        el.style.visibility = visibility;\n      }\n    }\n    if (parentElement !== element) {\n      if (select) {\n        selection.extend(element.firstChild, 0);\n      } else {\n        selection.setPosition(element.firstChild, 0);\n      }\n      return;\n    }\n    if (select) {\n      selection.extend(caretPosition.offsetNode, caretPosition.offset);\n    } else {\n      selection.setPosition(caretPosition.offsetNode, caretPosition.offset);\n    }\n  }\n  #setCaretPosition(select, selection, newLineElement, newLineElementRect, caretX) {\n    if (this.#isVisible(newLineElementRect)) {\n      this.#setCaretPositionHelper(selection, caretX, select, newLineElement, newLineElementRect);\n      return;\n    }\n    this.#mainContainer.addEventListener(\"scrollend\", this.#setCaretPositionHelper.bind(this, selection, caretX, select, newLineElement, null), {\n      once: true\n    });\n    newLineElement.scrollIntoView();\n  }\n  #getNodeOnNextPage(textLayer, isUp) {\n    while (true) {\n      const page = textLayer.closest(\".page\");\n      const pageNumber = parseInt(page.getAttribute(\"data-page-number\"));\n      const nextPage = isUp ? pageNumber - 1 : pageNumber + 1;\n      textLayer = this.#viewerContainer.querySelector(`.page[data-page-number=\"${nextPage}\"] .textLayer`);\n      if (!textLayer) {\n        return null;\n      }\n      const walker = document.createTreeWalker(textLayer, NodeFilter.SHOW_TEXT);\n      const node = isUp ? walker.lastChild() : walker.firstChild();\n      if (node) {\n        return node;\n      }\n    }\n  }\n  moveCaret(isUp, select) {\n    const selection = document.getSelection();\n    if (selection.rangeCount === 0) {\n      return;\n    }\n    const {\n      focusNode\n    } = selection;\n    const focusElement = focusNode.nodeType !== Node.ELEMENT_NODE ? focusNode.parentElement : focusNode;\n    const root = focusElement.closest(\".textLayer\");\n    if (!root) {\n      return;\n    }\n    const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\n    walker.currentNode = focusNode;\n    const focusRect = focusElement.getBoundingClientRect();\n    let newLineElement = null;\n    const nodeIterator = (isUp ? walker.previousSibling : walker.nextSibling).bind(walker);\n    while (nodeIterator()) {\n      const element = walker.currentNode.parentElement;\n      if (!this.#isOnSameLine(focusRect, element.getBoundingClientRect())) {\n        newLineElement = element;\n        break;\n      }\n    }\n    if (!newLineElement) {\n      const node = this.#getNodeOnNextPage(root, isUp);\n      if (!node) {\n        return;\n      }\n      if (select) {\n        const lastNode = (isUp ? walker.firstChild() : walker.lastChild()) || focusNode;\n        selection.extend(lastNode, isUp ? 0 : lastNode.length);\n        const range = document.createRange();\n        range.setStart(node, isUp ? node.length : 0);\n        range.setEnd(node, isUp ? node.length : 0);\n        selection.addRange(range);\n        return;\n      }\n      const [caretX] = this.#getCaretPosition(selection, isUp);\n      const {\n        parentElement\n      } = node;\n      this.#setCaretPosition(select, selection, parentElement, parentElement.getBoundingClientRect(), caretX);\n      return;\n    }\n    const [caretX, caretY] = this.#getCaretPosition(selection, isUp);\n    const newLineElementRect = newLineElement.getBoundingClientRect();\n    if (this.#isUnderOver(newLineElementRect, caretX, caretY, isUp)) {\n      this.#setCaretPosition(select, selection, newLineElement, newLineElementRect, caretX);\n      return;\n    }\n    while (nodeIterator()) {\n      const element = walker.currentNode.parentElement;\n      const elementRect = element.getBoundingClientRect();\n      if (!this.#isOnSameLine(newLineElementRect, elementRect)) {\n        break;\n      }\n      if (this.#isUnderOver(elementRect, caretX, caretY, isUp)) {\n        this.#setCaretPosition(select, selection, element, elementRect, caretX);\n        return;\n      }\n    }\n    this.#setCaretPosition(select, selection, newLineElement, newLineElementRect, caretX);\n  }\n}\n\n;// CONCATENATED MODULE: ./web/download_manager.js\n\nfunction download(blobUrl, filename) {\n  const a = document.createElement(\"a\");\n  if (!a.click) {\n    throw new Error('DownloadManager: \"a.click()\" is not supported.');\n  }\n  a.href = blobUrl;\n  a.target = \"_parent\";\n  if (\"download\" in a) {\n    a.download = filename;\n  }\n  (document.body || document.documentElement).append(a);\n  a.click();\n  a.remove();\n}\nclass DownloadManager {\n  #openBlobUrls = new WeakMap();\n  downloadUrl(url, filename, _options) {\n    if (!createValidAbsoluteUrl(url, \"http://example.com\")) {\n      console.error(`downloadUrl - not a valid URL: ${url}`);\n      return;\n    }\n    download(url + \"#pdfjs.action=download\", filename);\n  }\n  downloadData(data, filename, contentType) {\n    const blobUrl = URL.createObjectURL(new Blob([data], {\n      type: contentType\n    }));\n    download(blobUrl, filename);\n  }\n  openOrDownloadData(data, filename, dest = null) {\n    const isPdfData = isPdfFile(filename);\n    const contentType = isPdfData ? \"application/pdf\" : \"\";\n    if (isPdfData) {\n      let blobUrl = this.#openBlobUrls.get(data);\n      if (!blobUrl) {\n        blobUrl = URL.createObjectURL(new Blob([data], {\n          type: contentType\n        }));\n        this.#openBlobUrls.set(data, blobUrl);\n      }\n      let viewerUrl;\n      viewerUrl = \"?file=\" + encodeURIComponent(blobUrl + \"#\" + filename);\n      if (dest) {\n        viewerUrl += `#${escape(dest)}`;\n      }\n      try {\n        window.open(viewerUrl);\n        return true;\n      } catch (ex) {\n        console.error(`openOrDownloadData: ${ex}`);\n        URL.revokeObjectURL(blobUrl);\n        this.#openBlobUrls.delete(data);\n      }\n    }\n    this.downloadData(data, filename, contentType);\n    return false;\n  }\n  download(blob, url, filename, _options) {\n    const blobUrl = URL.createObjectURL(blob);\n    download(blobUrl, filename);\n  }\n}\n\n;// CONCATENATED MODULE: ./web/overlay_manager.js\nclass OverlayManager {\n  #overlays = new WeakMap();\n  #active = null;\n  get active() {\n    return this.#active;\n  }\n  async register(dialog, canForceClose = false) {\n    if (typeof dialog !== \"object\") {\n      throw new Error(\"Not enough parameters.\");\n    } else if (this.#overlays.has(dialog)) {\n      throw new Error(\"The overlay is already registered.\");\n    }\n    this.#overlays.set(dialog, {\n      canForceClose\n    });\n    dialog.addEventListener(\"cancel\", evt => {\n      this.#active = null;\n    });\n  }\n  async open(dialog) {\n    if (!this.#overlays.has(dialog)) {\n      throw new Error(\"The overlay does not exist.\");\n    } else if (this.#active) {\n      if (this.#active === dialog) {\n        throw new Error(\"The overlay is already active.\");\n      } else if (this.#overlays.get(dialog).canForceClose) {\n        await this.close();\n      } else {\n        throw new Error(\"Another overlay is currently active.\");\n      }\n    }\n    this.#active = dialog;\n    dialog.showModal();\n  }\n  async close(dialog = this.#active) {\n    if (!this.#overlays.has(dialog)) {\n      throw new Error(\"The overlay does not exist.\");\n    } else if (!this.#active) {\n      throw new Error(\"The overlay is currently not active.\");\n    } else if (this.#active !== dialog) {\n      throw new Error(\"Another overlay is currently active.\");\n    }\n    dialog.close();\n    this.#active = null;\n  }\n}\n\n;// CONCATENATED MODULE: ./web/password_prompt.js\n\nclass PasswordPrompt {\n  #activeCapability = null;\n  #updateCallback = null;\n  #reason = null;\n  constructor(options, overlayManager, isViewerEmbedded = false) {\n    this.dialog = options.dialog;\n    this.label = options.label;\n    this.input = options.input;\n    this.submitButton = options.submitButton;\n    this.cancelButton = options.cancelButton;\n    this.overlayManager = overlayManager;\n    this._isViewerEmbedded = isViewerEmbedded;\n    this.submitButton.addEventListener(\"click\", this.#verify.bind(this));\n    this.cancelButton.addEventListener(\"click\", this.close.bind(this));\n    this.input.addEventListener(\"keydown\", e => {\n      if (e.keyCode === 13) {\n        this.#verify();\n      }\n    });\n    this.overlayManager.register(this.dialog, true);\n    this.dialog.addEventListener(\"close\", this.#cancel.bind(this));\n  }\n  async open() {\n    await this.#activeCapability?.promise;\n    this.#activeCapability = Promise.withResolvers();\n    try {\n      await this.overlayManager.open(this.dialog);\n    } catch (ex) {\n      this.#activeCapability.resolve();\n      throw ex;\n    }\n    const passwordIncorrect = this.#reason === PasswordResponses.INCORRECT_PASSWORD;\n    if (!this._isViewerEmbedded || passwordIncorrect) {\n      this.input.focus();\n    }\n    this.label.setAttribute(\"data-l10n-id\", `pdfjs-password-${passwordIncorrect ? \"invalid\" : \"label\"}`);\n  }\n  async close() {\n    if (this.overlayManager.active === this.dialog) {\n      this.overlayManager.close(this.dialog);\n    }\n  }\n  #verify() {\n    const password = this.input.value;\n    if (password?.length > 0) {\n      this.#invokeCallback(password);\n    }\n  }\n  #cancel() {\n    this.#invokeCallback(new Error(\"PasswordPrompt cancelled.\"));\n    this.#activeCapability.resolve();\n  }\n  #invokeCallback(password) {\n    if (!this.#updateCallback) {\n      return;\n    }\n    this.close();\n    this.input.value = \"\";\n    this.#updateCallback(password);\n    this.#updateCallback = null;\n  }\n  async setUpdateCallback(updateCallback, reason) {\n    if (this.#activeCapability) {\n      await this.#activeCapability.promise;\n    }\n    this.#updateCallback = updateCallback;\n    this.#reason = reason;\n  }\n}\n\n;// CONCATENATED MODULE: ./web/base_tree_viewer.js\n\nconst TREEITEM_OFFSET_TOP = -100;\nconst TREEITEM_SELECTED_CLASS = \"selected\";\nclass BaseTreeViewer {\n  constructor(options) {\n    if (this.constructor === BaseTreeViewer) {\n      throw new Error(\"Cannot initialize BaseTreeViewer.\");\n    }\n    this.container = options.container;\n    this.eventBus = options.eventBus;\n    this._l10n = options.l10n;\n    this.reset();\n  }\n  reset() {\n    this._pdfDocument = null;\n    this._lastToggleIsShow = true;\n    this._currentTreeItem = null;\n    this.container.textContent = \"\";\n    this.container.classList.remove(\"treeWithDeepNesting\");\n  }\n  _dispatchEvent(count) {\n    throw new Error(\"Not implemented: _dispatchEvent\");\n  }\n  _bindLink(element, params) {\n    throw new Error(\"Not implemented: _bindLink\");\n  }\n  _normalizeTextContent(str) {\n    return removeNullCharacters(str, true) || \"\\u2013\";\n  }\n  _addToggleButton(div, hidden = false) {\n    const toggler = document.createElement(\"div\");\n    toggler.className = \"treeItemToggler\";\n    if (hidden) {\n      toggler.classList.add(\"treeItemsHidden\");\n    }\n    toggler.onclick = evt => {\n      evt.stopPropagation();\n      toggler.classList.toggle(\"treeItemsHidden\");\n      if (evt.shiftKey) {\n        const shouldShowAll = !toggler.classList.contains(\"treeItemsHidden\");\n        this._toggleTreeItem(div, shouldShowAll);\n      }\n    };\n    div.prepend(toggler);\n  }\n  _toggleTreeItem(root, show = false) {\n    this._l10n.pause();\n    this._lastToggleIsShow = show;\n    for (const toggler of root.querySelectorAll(\".treeItemToggler\")) {\n      toggler.classList.toggle(\"treeItemsHidden\", !show);\n    }\n    this._l10n.resume();\n  }\n  _toggleAllTreeItems() {\n    this._toggleTreeItem(this.container, !this._lastToggleIsShow);\n  }\n  _finishRendering(fragment, count, hasAnyNesting = false) {\n    if (hasAnyNesting) {\n      this.container.classList.add(\"treeWithDeepNesting\");\n      this._lastToggleIsShow = !fragment.querySelector(\".treeItemsHidden\");\n    }\n    this._l10n.pause();\n    this.container.append(fragment);\n    this._l10n.resume();\n    this._dispatchEvent(count);\n  }\n  render(params) {\n    throw new Error(\"Not implemented: render\");\n  }\n  _updateCurrentTreeItem(treeItem = null) {\n    if (this._currentTreeItem) {\n      this._currentTreeItem.classList.remove(TREEITEM_SELECTED_CLASS);\n      this._currentTreeItem = null;\n    }\n    if (treeItem) {\n      treeItem.classList.add(TREEITEM_SELECTED_CLASS);\n      this._currentTreeItem = treeItem;\n    }\n  }\n  _scrollToCurrentTreeItem(treeItem) {\n    if (!treeItem) {\n      return;\n    }\n    this._l10n.pause();\n    let currentNode = treeItem.parentNode;\n    while (currentNode && currentNode !== this.container) {\n      if (currentNode.classList.contains(\"treeItem\")) {\n        const toggler = currentNode.firstElementChild;\n        toggler?.classList.remove(\"treeItemsHidden\");\n      }\n      currentNode = currentNode.parentNode;\n    }\n    this._l10n.resume();\n    this._updateCurrentTreeItem(treeItem);\n    this.container.scrollTo(treeItem.offsetLeft, treeItem.offsetTop + TREEITEM_OFFSET_TOP);\n  }\n}\n\n;// CONCATENATED MODULE: ./web/pdf_attachment_viewer.js\n\n\nclass PDFAttachmentViewer extends BaseTreeViewer {\n  constructor(options) {\n    super(options);\n    this.downloadManager = options.downloadManager;\n    this.eventBus._on(\"fileattachmentannotation\", this.#appendAttachment.bind(this));\n  }\n  reset(keepRenderedCapability = false) {\n    super.reset();\n    this._attachments = null;\n    if (!keepRenderedCapability) {\n      this._renderedCapability = Promise.withResolvers();\n    }\n    this._pendingDispatchEvent = false;\n  }\n  async _dispatchEvent(attachmentsCount) {\n    this._renderedCapability.resolve();\n    if (attachmentsCount === 0 && !this._pendingDispatchEvent) {\n      this._pendingDispatchEvent = true;\n      await waitOnEventOrTimeout({\n        target: this.eventBus,\n        name: \"annotationlayerrendered\",\n        delay: 1000\n      });\n      if (!this._pendingDispatchEvent) {\n        return;\n      }\n    }\n    this._pendingDispatchEvent = false;\n    this.eventBus.dispatch(\"attachmentsloaded\", {\n      source: this,\n      attachmentsCount\n    });\n  }\n  _bindLink(element, {\n    content,\n    description,\n    filename\n  }) {\n    if (description) {\n      element.title = description;\n    }\n    element.onclick = () => {\n      this.downloadManager.openOrDownloadData(content, filename);\n      return false;\n    };\n  }\n  render({\n    attachments,\n    keepRenderedCapability = false\n  }) {\n    if (this._attachments) {\n      this.reset(keepRenderedCapability);\n    }\n    this._attachments = attachments || null;\n    if (!attachments) {\n      this._dispatchEvent(0);\n      return;\n    }\n    const fragment = document.createDocumentFragment();\n    let attachmentsCount = 0;\n    for (const name in attachments) {\n      const item = attachments[name];\n      const div = document.createElement(\"div\");\n      div.className = \"treeItem\";\n      const element = document.createElement(\"a\");\n      this._bindLink(element, item);\n      element.textContent = this._normalizeTextContent(item.filename);\n      div.append(element);\n      fragment.append(div);\n      attachmentsCount++;\n    }\n    this._finishRendering(fragment, attachmentsCount);\n  }\n  #appendAttachment(item) {\n    const renderedPromise = this._renderedCapability.promise;\n    renderedPromise.then(() => {\n      if (renderedPromise !== this._renderedCapability.promise) {\n        return;\n      }\n      const attachments = this._attachments || Object.create(null);\n      for (const name in attachments) {\n        if (item.filename === name) {\n          return;\n        }\n      }\n      attachments[item.filename] = item;\n      this.render({\n        attachments,\n        keepRenderedCapability: true\n      });\n    });\n  }\n}\n\n;// CONCATENATED MODULE: ./web/grab_to_pan.js\nconst CSS_CLASS_GRAB = \"grab-to-pan-grab\";\nclass GrabToPan {\n  constructor({\n    element\n  }) {\n    this.element = element;\n    this.document = element.ownerDocument;\n    this.activate = this.activate.bind(this);\n    this.deactivate = this.deactivate.bind(this);\n    this.toggle = this.toggle.bind(this);\n    this._onMouseDown = this.#onMouseDown.bind(this);\n    this._onMouseMove = this.#onMouseMove.bind(this);\n    this._endPan = this.#endPan.bind(this);\n    const overlay = this.overlay = document.createElement(\"div\");\n    overlay.className = \"grab-to-pan-grabbing\";\n  }\n  activate() {\n    if (!this.active) {\n      this.active = true;\n      this.element.addEventListener(\"mousedown\", this._onMouseDown, true);\n      this.element.classList.add(CSS_CLASS_GRAB);\n    }\n  }\n  deactivate() {\n    if (this.active) {\n      this.active = false;\n      this.element.removeEventListener(\"mousedown\", this._onMouseDown, true);\n      this._endPan();\n      this.element.classList.remove(CSS_CLASS_GRAB);\n    }\n  }\n  toggle() {\n    if (this.active) {\n      this.deactivate();\n    } else {\n      this.activate();\n    }\n  }\n  ignoreTarget(node) {\n    return node.matches(\"a[href], a[href] *, input, textarea, button, button *, select, option\");\n  }\n  #onMouseDown(event) {\n    if (event.button !== 0 || this.ignoreTarget(event.target)) {\n      return;\n    }\n    if (event.originalTarget) {\n      try {\n        event.originalTarget.tagName;\n      } catch {\n        return;\n      }\n    }\n    this.scrollLeftStart = this.element.scrollLeft;\n    this.scrollTopStart = this.element.scrollTop;\n    this.clientXStart = event.clientX;\n    this.clientYStart = event.clientY;\n    this.document.addEventListener(\"mousemove\", this._onMouseMove, true);\n    this.document.addEventListener(\"mouseup\", this._endPan, true);\n    this.element.addEventListener(\"scroll\", this._endPan, true);\n    event.preventDefault();\n    event.stopPropagation();\n    const focusedElement = document.activeElement;\n    if (focusedElement && !focusedElement.contains(event.target)) {\n      focusedElement.blur();\n    }\n  }\n  #onMouseMove(event) {\n    this.element.removeEventListener(\"scroll\", this._endPan, true);\n    if (!(event.buttons & 1)) {\n      this._endPan();\n      return;\n    }\n    const xDiff = event.clientX - this.clientXStart;\n    const yDiff = event.clientY - this.clientYStart;\n    this.element.scrollTo({\n      top: this.scrollTopStart - yDiff,\n      left: this.scrollLeftStart - xDiff,\n      behavior: \"instant\"\n    });\n    if (!this.overlay.parentNode) {\n      document.body.append(this.overlay);\n    }\n  }\n  #endPan() {\n    this.element.removeEventListener(\"scroll\", this._endPan, true);\n    this.document.removeEventListener(\"mousemove\", this._onMouseMove, true);\n    this.document.removeEventListener(\"mouseup\", this._endPan, true);\n    this.overlay.remove();\n  }\n}\n\n;// CONCATENATED MODULE: ./web/pdf_cursor_tools.js\n\n\n\nclass PDFCursorTools {\n  #active = CursorTool.SELECT;\n  #prevActive = null;\n  constructor({\n    container,\n    eventBus,\n    cursorToolOnLoad = CursorTool.SELECT\n  }) {\n    this.container = container;\n    this.eventBus = eventBus;\n    this.#addEventListeners();\n    Promise.resolve().then(() => {\n      this.switchTool(cursorToolOnLoad);\n    });\n  }\n  get activeTool() {\n    return this.#active;\n  }\n  switchTool(tool) {\n    if (this.#prevActive !== null) {\n      return;\n    }\n    if (tool === this.#active) {\n      return;\n    }\n    const disableActiveTool = () => {\n      switch (this.#active) {\n        case CursorTool.SELECT:\n          break;\n        case CursorTool.HAND:\n          this._handTool.deactivate();\n          break;\n        case CursorTool.ZOOM:\n      }\n    };\n    switch (tool) {\n      case CursorTool.SELECT:\n        disableActiveTool();\n        break;\n      case CursorTool.HAND:\n        disableActiveTool();\n        this._handTool.activate();\n        break;\n      case CursorTool.ZOOM:\n      default:\n        console.error(`switchTool: \"${tool}\" is an unsupported value.`);\n        return;\n    }\n    this.#active = tool;\n    this.eventBus.dispatch(\"cursortoolchanged\", {\n      source: this,\n      tool\n    });\n  }\n  #addEventListeners() {\n    this.eventBus._on(\"switchcursortool\", evt => {\n      if (!evt.reset) {\n        this.switchTool(evt.tool);\n      } else if (this.#prevActive !== null) {\n        annotationEditorMode = AnnotationEditorType.NONE;\n        presentationModeState = PresentationModeState.NORMAL;\n        enableActive();\n      }\n    });\n    let annotationEditorMode = AnnotationEditorType.NONE,\n      presentationModeState = PresentationModeState.NORMAL;\n    const disableActive = () => {\n      const prevActive = this.#active;\n      this.switchTool(CursorTool.SELECT);\n      this.#prevActive ??= prevActive;\n    };\n    const enableActive = () => {\n      const prevActive = this.#prevActive;\n      if (prevActive !== null && annotationEditorMode === AnnotationEditorType.NONE && presentationModeState === PresentationModeState.NORMAL) {\n        this.#prevActive = null;\n        this.switchTool(prevActive);\n      }\n    };\n    this.eventBus._on(\"annotationeditormodechanged\", ({\n      mode\n    }) => {\n      annotationEditorMode = mode;\n      if (mode === AnnotationEditorType.NONE) {\n        enableActive();\n      } else {\n        disableActive();\n      }\n    });\n    this.eventBus._on(\"presentationmodechanged\", ({\n      state\n    }) => {\n      presentationModeState = state;\n      if (state === PresentationModeState.NORMAL) {\n        enableActive();\n      } else if (state === PresentationModeState.FULLSCREEN) {\n        disableActive();\n      }\n    });\n  }\n  get _handTool() {\n    return shadow(this, \"_handTool\", new GrabToPan({\n      element: this.container\n    }));\n  }\n}\n\n;// CONCATENATED MODULE: ./web/pdf_document_properties.js\n\n\nconst DEFAULT_FIELD_CONTENT = \"-\";\nconst NON_METRIC_LOCALES = [\"en-us\", \"en-lr\", \"my\"];\nconst US_PAGE_NAMES = {\n  \"8.5x11\": \"letter\",\n  \"8.5x14\": \"legal\"\n};\nconst METRIC_PAGE_NAMES = {\n  \"297x420\": \"a-three\",\n  \"210x297\": \"a-four\"\n};\nfunction getPageName(size, isPortrait, pageNames) {\n  const width = isPortrait ? size.width : size.height;\n  const height = isPortrait ? size.height : size.width;\n  return pageNames[`${width}x${height}`];\n}\nclass PDFDocumentProperties {\n  #fieldData = null;\n  constructor({\n    dialog,\n    fields,\n    closeButton\n  }, overlayManager, eventBus, l10n, fileNameLookup) {\n    this.dialog = dialog;\n    this.fields = fields;\n    this.overlayManager = overlayManager;\n    this.l10n = l10n;\n    this._fileNameLookup = fileNameLookup;\n    this.#reset();\n    closeButton.addEventListener(\"click\", this.close.bind(this));\n    this.overlayManager.register(this.dialog);\n    eventBus._on(\"pagechanging\", evt => {\n      this._currentPageNumber = evt.pageNumber;\n    });\n    eventBus._on(\"rotationchanging\", evt => {\n      this._pagesRotation = evt.pagesRotation;\n    });\n    this._isNonMetricLocale = NON_METRIC_LOCALES.includes(l10n.getLanguage());\n  }\n  async open() {\n    await Promise.all([this.overlayManager.open(this.dialog), this._dataAvailableCapability.promise]);\n    const currentPageNumber = this._currentPageNumber;\n    const pagesRotation = this._pagesRotation;\n    if (this.#fieldData && currentPageNumber === this.#fieldData._currentPageNumber && pagesRotation === this.#fieldData._pagesRotation) {\n      this.#updateUI();\n      return;\n    }\n    const {\n      info,\n      contentLength\n    } = await this.pdfDocument.getMetadata();\n    const [fileName, fileSize, creationDate, modificationDate, pageSize, isLinearized] = await Promise.all([this._fileNameLookup(), this.#parseFileSize(contentLength), this.#parseDate(info.CreationDate), this.#parseDate(info.ModDate), this.pdfDocument.getPage(currentPageNumber).then(pdfPage => {\n      return this.#parsePageSize(getPageSizeInches(pdfPage), pagesRotation);\n    }), this.#parseLinearization(info.IsLinearized)]);\n    this.#fieldData = Object.freeze({\n      fileName,\n      fileSize,\n      title: info.Title,\n      author: info.Author,\n      subject: info.Subject,\n      keywords: info.Keywords,\n      creationDate,\n      modificationDate,\n      creator: info.Creator,\n      producer: info.Producer,\n      version: info.PDFFormatVersion,\n      pageCount: this.pdfDocument.numPages,\n      pageSize,\n      linearized: isLinearized,\n      _currentPageNumber: currentPageNumber,\n      _pagesRotation: pagesRotation\n    });\n    this.#updateUI();\n    const {\n      length\n    } = await this.pdfDocument.getDownloadInfo();\n    if (contentLength === length) {\n      return;\n    }\n    const data = Object.assign(Object.create(null), this.#fieldData);\n    data.fileSize = await this.#parseFileSize(length);\n    this.#fieldData = Object.freeze(data);\n    this.#updateUI();\n  }\n  async close() {\n    this.overlayManager.close(this.dialog);\n  }\n  setDocument(pdfDocument) {\n    if (this.pdfDocument) {\n      this.#reset();\n      this.#updateUI(true);\n    }\n    if (!pdfDocument) {\n      return;\n    }\n    this.pdfDocument = pdfDocument;\n    this._dataAvailableCapability.resolve();\n  }\n  #reset() {\n    this.pdfDocument = null;\n    this.#fieldData = null;\n    this._dataAvailableCapability = Promise.withResolvers();\n    this._currentPageNumber = 1;\n    this._pagesRotation = 0;\n  }\n  #updateUI(reset = false) {\n    if (reset || !this.#fieldData) {\n      for (const id in this.fields) {\n        this.fields[id].textContent = DEFAULT_FIELD_CONTENT;\n      }\n      return;\n    }\n    if (this.overlayManager.active !== this.dialog) {\n      return;\n    }\n    for (const id in this.fields) {\n      const content = this.#fieldData[id];\n      this.fields[id].textContent = content || content === 0 ? content : DEFAULT_FIELD_CONTENT;\n    }\n  }\n  async #parseFileSize(fileSize = 0) {\n    const kb = fileSize / 1024,\n      mb = kb / 1024;\n    if (!kb) {\n      return undefined;\n    }\n    return this.l10n.get(`pdfjs-document-properties-${mb >= 1 ? \"mb\" : \"kb\"}`, {\n      size_mb: mb >= 1 && (+mb.toPrecision(3)).toLocaleString(),\n      size_kb: mb < 1 && (+kb.toPrecision(3)).toLocaleString(),\n      size_b: fileSize.toLocaleString()\n    });\n  }\n  async #parsePageSize(pageSizeInches, pagesRotation) {\n    if (!pageSizeInches) {\n      return undefined;\n    }\n    if (pagesRotation % 180 !== 0) {\n      pageSizeInches = {\n        width: pageSizeInches.height,\n        height: pageSizeInches.width\n      };\n    }\n    const isPortrait = isPortraitOrientation(pageSizeInches);\n    let sizeInches = {\n      width: Math.round(pageSizeInches.width * 100) / 100,\n      height: Math.round(pageSizeInches.height * 100) / 100\n    };\n    let sizeMillimeters = {\n      width: Math.round(pageSizeInches.width * 25.4 * 10) / 10,\n      height: Math.round(pageSizeInches.height * 25.4 * 10) / 10\n    };\n    let rawName = getPageName(sizeInches, isPortrait, US_PAGE_NAMES) || getPageName(sizeMillimeters, isPortrait, METRIC_PAGE_NAMES);\n    if (!rawName && !(Number.isInteger(sizeMillimeters.width) && Number.isInteger(sizeMillimeters.height))) {\n      const exactMillimeters = {\n        width: pageSizeInches.width * 25.4,\n        height: pageSizeInches.height * 25.4\n      };\n      const intMillimeters = {\n        width: Math.round(sizeMillimeters.width),\n        height: Math.round(sizeMillimeters.height)\n      };\n      if (Math.abs(exactMillimeters.width - intMillimeters.width) < 0.1 && Math.abs(exactMillimeters.height - intMillimeters.height) < 0.1) {\n        rawName = getPageName(intMillimeters, isPortrait, METRIC_PAGE_NAMES);\n        if (rawName) {\n          sizeInches = {\n            width: Math.round(intMillimeters.width / 25.4 * 100) / 100,\n            height: Math.round(intMillimeters.height / 25.4 * 100) / 100\n          };\n          sizeMillimeters = intMillimeters;\n        }\n      }\n    }\n    const [{\n      width,\n      height\n    }, unit, name, orientation] = await Promise.all([this._isNonMetricLocale ? sizeInches : sizeMillimeters, this.l10n.get(`pdfjs-document-properties-page-size-unit-${this._isNonMetricLocale ? \"inches\" : \"millimeters\"}`), rawName && this.l10n.get(`pdfjs-document-properties-page-size-name-${rawName}`), this.l10n.get(`pdfjs-document-properties-page-size-orientation-${isPortrait ? \"portrait\" : \"landscape\"}`)]);\n    return this.l10n.get(`pdfjs-document-properties-page-size-dimension-${name ? \"name-\" : \"\"}string`, {\n      width: width.toLocaleString(),\n      height: height.toLocaleString(),\n      unit,\n      name,\n      orientation\n    });\n  }\n  async #parseDate(inputDate) {\n    const dateObject = PDFDateString.toDateObject(inputDate);\n    if (!dateObject) {\n      return undefined;\n    }\n    return this.l10n.get(\"pdfjs-document-properties-date-string\", {\n      date: dateObject.toLocaleDateString(),\n      time: dateObject.toLocaleTimeString()\n    });\n  }\n  #parseLinearization(isLinearized) {\n    return this.l10n.get(`pdfjs-document-properties-linearized-${isLinearized ? \"yes\" : \"no\"}`);\n  }\n}\n\n;// CONCATENATED MODULE: ./web/pdf_find_utils.js\nconst CharacterType = {\n  SPACE: 0,\n  ALPHA_LETTER: 1,\n  PUNCT: 2,\n  HAN_LETTER: 3,\n  KATAKANA_LETTER: 4,\n  HIRAGANA_LETTER: 5,\n  HALFWIDTH_KATAKANA_LETTER: 6,\n  THAI_LETTER: 7\n};\nfunction isAlphabeticalScript(charCode) {\n  return charCode < 0x2e80;\n}\nfunction isAscii(charCode) {\n  return (charCode & 0xff80) === 0;\n}\nfunction isAsciiAlpha(charCode) {\n  return charCode >= 0x61 && charCode <= 0x7a || charCode >= 0x41 && charCode <= 0x5a;\n}\nfunction isAsciiDigit(charCode) {\n  return charCode >= 0x30 && charCode <= 0x39;\n}\nfunction isAsciiSpace(charCode) {\n  return charCode === 0x20 || charCode === 0x09 || charCode === 0x0d || charCode === 0x0a;\n}\nfunction isHan(charCode) {\n  return charCode >= 0x3400 && charCode <= 0x9fff || charCode >= 0xf900 && charCode <= 0xfaff;\n}\nfunction isKatakana(charCode) {\n  return charCode >= 0x30a0 && charCode <= 0x30ff;\n}\nfunction isHiragana(charCode) {\n  return charCode >= 0x3040 && charCode <= 0x309f;\n}\nfunction isHalfwidthKatakana(charCode) {\n  return charCode >= 0xff60 && charCode <= 0xff9f;\n}\nfunction isThai(charCode) {\n  return (charCode & 0xff80) === 0x0e00;\n}\nfunction getCharacterType(charCode) {\n  if (isAlphabeticalScript(charCode)) {\n    if (isAscii(charCode)) {\n      if (isAsciiSpace(charCode)) {\n        return CharacterType.SPACE;\n      } else if (isAsciiAlpha(charCode) || isAsciiDigit(charCode) || charCode === 0x5f) {\n        return CharacterType.ALPHA_LETTER;\n      }\n      return CharacterType.PUNCT;\n    } else if (isThai(charCode)) {\n      return CharacterType.THAI_LETTER;\n    } else if (charCode === 0xa0) {\n      return CharacterType.SPACE;\n    }\n    return CharacterType.ALPHA_LETTER;\n  }\n  if (isHan(charCode)) {\n    return CharacterType.HAN_LETTER;\n  } else if (isKatakana(charCode)) {\n    return CharacterType.KATAKANA_LETTER;\n  } else if (isHiragana(charCode)) {\n    return CharacterType.HIRAGANA_LETTER;\n  } else if (isHalfwidthKatakana(charCode)) {\n    return CharacterType.HALFWIDTH_KATAKANA_LETTER;\n  }\n  return CharacterType.ALPHA_LETTER;\n}\nlet NormalizeWithNFKC;\nfunction getNormalizeWithNFKC() {\n  NormalizeWithNFKC ||= ` ¨ª¯²-µ¸-º¼-¾Ĳ-ĳĿ-ŀŉſǄ-ǌǱ-ǳʰ-ʸ˘-˝ˠ-ˤʹͺ;΄-΅·ϐ-ϖϰ-ϲϴ-ϵϹևٵ-ٸक़-य़ড়-ঢ়য়ਲ਼ਸ਼ਖ਼-ਜ਼ਫ਼ଡ଼-ଢ଼ำຳໜ-ໝ༌གྷཌྷདྷབྷཛྷཀྵჼᴬ-ᴮᴰ-ᴺᴼ-ᵍᵏ-ᵪᵸᶛ-ᶿẚ-ẛάέήίόύώΆ᾽-῁ΈΉ῍-῏ΐΊ῝-῟ΰΎ῭-`ΌΏ´-῾ - ‑‗․-… ″-‴‶-‷‼‾⁇-⁉⁗ ⁰-ⁱ⁴-₎ₐ-ₜ₨℀-℃℅-ℇ℉-ℓℕ-№ℙ-ℝ℠-™ℤΩℨK-ℭℯ-ℱℳ-ℹ℻-⅀ⅅ-ⅉ⅐-ⅿ↉∬-∭∯-∰〈-〉①-⓪⨌⩴-⩶⫝̸ⱼ-ⱽⵯ⺟⻳⼀-⿕　〶〸-〺゛-゜ゟヿㄱ-ㆎ㆒-㆟㈀-㈞㈠-㉇㉐-㉾㊀-㏿ꚜ-ꚝꝰꟲ-ꟴꟸ-ꟹꭜ-ꭟꭩ豈-嗀塚晴凞-羽蘒諸逸-都飯-舘並-龎ﬀ-ﬆﬓ-ﬗיִײַ-זּטּ-לּמּנּ-סּףּ-פּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-﷼︐-︙︰-﹄﹇-﹒﹔-﹦﹨-﹫ﹰ-ﹲﹴﹶ-ﻼ！-ﾾￂ-ￇￊ-ￏￒ-ￗￚ-ￜ￠-￦`;\n  return NormalizeWithNFKC;\n}\n\n;// CONCATENATED MODULE: ./web/pdf_find_controller.js\n\n\nconst FindState = {\n  FOUND: 0,\n  NOT_FOUND: 1,\n  WRAPPED: 2,\n  PENDING: 3\n};\nconst FIND_TIMEOUT = 250;\nconst MATCH_SCROLL_OFFSET_TOP = -50;\nconst MATCH_SCROLL_OFFSET_LEFT = -400;\nconst CHARACTERS_TO_NORMALIZE = {\n  \"\\u2010\": \"-\",\n  \"\\u2018\": \"'\",\n  \"\\u2019\": \"'\",\n  \"\\u201A\": \"'\",\n  \"\\u201B\": \"'\",\n  \"\\u201C\": '\"',\n  \"\\u201D\": '\"',\n  \"\\u201E\": '\"',\n  \"\\u201F\": '\"',\n  \"\\u00BC\": \"1/4\",\n  \"\\u00BD\": \"1/2\",\n  \"\\u00BE\": \"3/4\"\n};\nconst DIACRITICS_EXCEPTION = new Set([0x3099, 0x309a, 0x094d, 0x09cd, 0x0a4d, 0x0acd, 0x0b4d, 0x0bcd, 0x0c4d, 0x0ccd, 0x0d3b, 0x0d3c, 0x0d4d, 0x0dca, 0x0e3a, 0x0eba, 0x0f84, 0x1039, 0x103a, 0x1714, 0x1734, 0x17d2, 0x1a60, 0x1b44, 0x1baa, 0x1bab, 0x1bf2, 0x1bf3, 0x2d7f, 0xa806, 0xa82c, 0xa8c4, 0xa953, 0xa9c0, 0xaaf6, 0xabed, 0x0c56, 0x0f71, 0x0f72, 0x0f7a, 0x0f7b, 0x0f7c, 0x0f7d, 0x0f80, 0x0f74]);\nlet DIACRITICS_EXCEPTION_STR;\nconst DIACRITICS_REG_EXP = /\\p{M}+/gu;\nconst SPECIAL_CHARS_REG_EXP = /([.*+?^${}()|[\\]\\\\])|(\\p{P})|(\\s+)|(\\p{M})|(\\p{L})/gu;\nconst NOT_DIACRITIC_FROM_END_REG_EXP = /([^\\p{M}])\\p{M}*$/u;\nconst NOT_DIACRITIC_FROM_START_REG_EXP = /^\\p{M}*([^\\p{M}])/u;\nconst SYLLABLES_REG_EXP = /[\\uAC00-\\uD7AF\\uFA6C\\uFACF-\\uFAD1\\uFAD5-\\uFAD7]+/g;\nconst SYLLABLES_LENGTHS = new Map();\nconst FIRST_CHAR_SYLLABLES_REG_EXP = \"[\\\\u1100-\\\\u1112\\\\ud7a4-\\\\ud7af\\\\ud84a\\\\ud84c\\\\ud850\\\\ud854\\\\ud857\\\\ud85f]\";\nconst NFKC_CHARS_TO_NORMALIZE = new Map();\nlet noSyllablesRegExp = null;\nlet withSyllablesRegExp = null;\nfunction normalize(text) {\n  const syllablePositions = [];\n  let m;\n  while ((m = SYLLABLES_REG_EXP.exec(text)) !== null) {\n    let {\n      index\n    } = m;\n    for (const char of m[0]) {\n      let len = SYLLABLES_LENGTHS.get(char);\n      if (!len) {\n        len = char.normalize(\"NFD\").length;\n        SYLLABLES_LENGTHS.set(char, len);\n      }\n      syllablePositions.push([len, index++]);\n    }\n  }\n  let normalizationRegex;\n  if (syllablePositions.length === 0 && noSyllablesRegExp) {\n    normalizationRegex = noSyllablesRegExp;\n  } else if (syllablePositions.length > 0 && withSyllablesRegExp) {\n    normalizationRegex = withSyllablesRegExp;\n  } else {\n    const replace = Object.keys(CHARACTERS_TO_NORMALIZE).join(\"\");\n    const toNormalizeWithNFKC = getNormalizeWithNFKC();\n    const CJK = \"(?:\\\\p{Ideographic}|[\\u3040-\\u30FF])\";\n    const HKDiacritics = \"(?:\\u3099|\\u309A)\";\n    const regexp = `([${replace}])|([${toNormalizeWithNFKC}])|(${HKDiacritics}\\\\n)|(\\\\p{M}+(?:-\\\\n)?)|(\\\\S-\\\\n)|(${CJK}\\\\n)|(\\\\n)`;\n    if (syllablePositions.length === 0) {\n      normalizationRegex = noSyllablesRegExp = new RegExp(regexp + \"|(\\\\u0000)\", \"gum\");\n    } else {\n      normalizationRegex = withSyllablesRegExp = new RegExp(regexp + `|(${FIRST_CHAR_SYLLABLES_REG_EXP})`, \"gum\");\n    }\n  }\n  const rawDiacriticsPositions = [];\n  while ((m = DIACRITICS_REG_EXP.exec(text)) !== null) {\n    rawDiacriticsPositions.push([m[0].length, m.index]);\n  }\n  let normalized = text.normalize(\"NFD\");\n  const positions = [[0, 0]];\n  let rawDiacriticsIndex = 0;\n  let syllableIndex = 0;\n  let shift = 0;\n  let shiftOrigin = 0;\n  let eol = 0;\n  let hasDiacritics = false;\n  normalized = normalized.replace(normalizationRegex, (match, p1, p2, p3, p4, p5, p6, p7, p8, i) => {\n    i -= shiftOrigin;\n    if (p1) {\n      const replacement = CHARACTERS_TO_NORMALIZE[p1];\n      const jj = replacement.length;\n      for (let j = 1; j < jj; j++) {\n        positions.push([i - shift + j, shift - j]);\n      }\n      shift -= jj - 1;\n      return replacement;\n    }\n    if (p2) {\n      let replacement = NFKC_CHARS_TO_NORMALIZE.get(p2);\n      if (!replacement) {\n        replacement = p2.normalize(\"NFKC\");\n        NFKC_CHARS_TO_NORMALIZE.set(p2, replacement);\n      }\n      const jj = replacement.length;\n      for (let j = 1; j < jj; j++) {\n        positions.push([i - shift + j, shift - j]);\n      }\n      shift -= jj - 1;\n      return replacement;\n    }\n    if (p3) {\n      hasDiacritics = true;\n      if (i + eol === rawDiacriticsPositions[rawDiacriticsIndex]?.[1]) {\n        ++rawDiacriticsIndex;\n      } else {\n        positions.push([i - 1 - shift + 1, shift - 1]);\n        shift -= 1;\n        shiftOrigin += 1;\n      }\n      positions.push([i - shift + 1, shift]);\n      shiftOrigin += 1;\n      eol += 1;\n      return p3.charAt(0);\n    }\n    if (p4) {\n      const hasTrailingDashEOL = p4.endsWith(\"\\n\");\n      const len = hasTrailingDashEOL ? p4.length - 2 : p4.length;\n      hasDiacritics = true;\n      let jj = len;\n      if (i + eol === rawDiacriticsPositions[rawDiacriticsIndex]?.[1]) {\n        jj -= rawDiacriticsPositions[rawDiacriticsIndex][0];\n        ++rawDiacriticsIndex;\n      }\n      for (let j = 1; j <= jj; j++) {\n        positions.push([i - 1 - shift + j, shift - j]);\n      }\n      shift -= jj;\n      shiftOrigin += jj;\n      if (hasTrailingDashEOL) {\n        i += len - 1;\n        positions.push([i - shift + 1, 1 + shift]);\n        shift += 1;\n        shiftOrigin += 1;\n        eol += 1;\n        return p4.slice(0, len);\n      }\n      return p4;\n    }\n    if (p5) {\n      const len = p5.length - 2;\n      positions.push([i - shift + len, 1 + shift]);\n      shift += 1;\n      shiftOrigin += 1;\n      eol += 1;\n      return p5.slice(0, -2);\n    }\n    if (p6) {\n      const len = p6.length - 1;\n      positions.push([i - shift + len, shift]);\n      shiftOrigin += 1;\n      eol += 1;\n      return p6.slice(0, -1);\n    }\n    if (p7) {\n      positions.push([i - shift + 1, shift - 1]);\n      shift -= 1;\n      shiftOrigin += 1;\n      eol += 1;\n      return \" \";\n    }\n    if (i + eol === syllablePositions[syllableIndex]?.[1]) {\n      const newCharLen = syllablePositions[syllableIndex][0] - 1;\n      ++syllableIndex;\n      for (let j = 1; j <= newCharLen; j++) {\n        positions.push([i - (shift - j), shift - j]);\n      }\n      shift -= newCharLen;\n      shiftOrigin += newCharLen;\n    }\n    return p8;\n  });\n  positions.push([normalized.length, shift]);\n  return [normalized, positions, hasDiacritics];\n}\nfunction getOriginalIndex(diffs, pos, len) {\n  if (!diffs) {\n    return [pos, len];\n  }\n  const start = pos;\n  const end = pos + len - 1;\n  let i = binarySearchFirstItem(diffs, x => x[0] >= start);\n  if (diffs[i][0] > start) {\n    --i;\n  }\n  let j = binarySearchFirstItem(diffs, x => x[0] >= end, i);\n  if (diffs[j][0] > end) {\n    --j;\n  }\n  const oldStart = start + diffs[i][1];\n  const oldEnd = end + diffs[j][1];\n  const oldLen = oldEnd + 1 - oldStart;\n  return [oldStart, oldLen];\n}\nclass PDFFindController {\n  #state = null;\n  #updateMatchesCountOnProgress = true;\n  #visitedPagesCount = 0;\n  constructor({\n    linkService,\n    eventBus,\n    updateMatchesCountOnProgress = true\n  }) {\n    this._linkService = linkService;\n    this._eventBus = eventBus;\n    this.#updateMatchesCountOnProgress = updateMatchesCountOnProgress;\n    this.onIsPageVisible = null;\n    this.#reset();\n    eventBus._on(\"find\", this.#onFind.bind(this));\n    eventBus._on(\"findbarclose\", this.#onFindBarClose.bind(this));\n  }\n  get highlightMatches() {\n    return this._highlightMatches;\n  }\n  get pageMatches() {\n    return this._pageMatches;\n  }\n  get pageMatchesLength() {\n    return this._pageMatchesLength;\n  }\n  get selected() {\n    return this._selected;\n  }\n  get state() {\n    return this.#state;\n  }\n  setDocument(pdfDocument) {\n    if (this._pdfDocument) {\n      this.#reset();\n    }\n    if (!pdfDocument) {\n      return;\n    }\n    this._pdfDocument = pdfDocument;\n    this._firstPageCapability.resolve();\n  }\n  #onFind(state) {\n    if (!state) {\n      return;\n    }\n    const pdfDocument = this._pdfDocument;\n    const {\n      type\n    } = state;\n    if (this.#state === null || this.#shouldDirtyMatch(state)) {\n      this._dirtyMatch = true;\n    }\n    this.#state = state;\n    if (type !== \"highlightallchange\") {\n      this.#updateUIState(FindState.PENDING);\n    }\n    this._firstPageCapability.promise.then(() => {\n      if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) {\n        return;\n      }\n      this.#extractText();\n      const findbarClosed = !this._highlightMatches;\n      const pendingTimeout = !!this._findTimeout;\n      if (this._findTimeout) {\n        clearTimeout(this._findTimeout);\n        this._findTimeout = null;\n      }\n      if (!type) {\n        this._findTimeout = setTimeout(() => {\n          this.#nextMatch();\n          this._findTimeout = null;\n        }, FIND_TIMEOUT);\n      } else if (this._dirtyMatch) {\n        this.#nextMatch();\n      } else if (type === \"again\") {\n        this.#nextMatch();\n        if (findbarClosed && this.#state.highlightAll) {\n          this.#updateAllPages();\n        }\n      } else if (type === \"highlightallchange\") {\n        if (pendingTimeout) {\n          this.#nextMatch();\n        } else {\n          this._highlightMatches = true;\n        }\n        this.#updateAllPages();\n      } else {\n        this.#nextMatch();\n      }\n    });\n  }\n  scrollMatchIntoView({\n    element = null,\n    selectedLeft = 0,\n    pageIndex = -1,\n    matchIndex = -1\n  }) {\n    if (!this._scrollMatches || !element) {\n      return;\n    } else if (matchIndex === -1 || matchIndex !== this._selected.matchIdx) {\n      return;\n    } else if (pageIndex === -1 || pageIndex !== this._selected.pageIdx) {\n      return;\n    }\n    this._scrollMatches = false;\n    const spot = {\n      top: MATCH_SCROLL_OFFSET_TOP,\n      left: selectedLeft + MATCH_SCROLL_OFFSET_LEFT\n    };\n    scrollIntoView(element, spot, true);\n  }\n  #reset() {\n    this._highlightMatches = false;\n    this._scrollMatches = false;\n    this._pdfDocument = null;\n    this._pageMatches = [];\n    this._pageMatchesLength = [];\n    this.#visitedPagesCount = 0;\n    this.#state = null;\n    this._selected = {\n      pageIdx: -1,\n      matchIdx: -1\n    };\n    this._offset = {\n      pageIdx: null,\n      matchIdx: null,\n      wrapped: false\n    };\n    this._extractTextPromises = [];\n    this._pageContents = [];\n    this._pageDiffs = [];\n    this._hasDiacritics = [];\n    this._matchesCountTotal = 0;\n    this._pagesToSearch = null;\n    this._pendingFindMatches = new Set();\n    this._resumePageIdx = null;\n    this._dirtyMatch = false;\n    clearTimeout(this._findTimeout);\n    this._findTimeout = null;\n    this._firstPageCapability = Promise.withResolvers();\n  }\n  get #query() {\n    const {\n      query\n    } = this.#state;\n    if (typeof query === \"string\") {\n      if (query !== this._rawQuery) {\n        this._rawQuery = query;\n        [this._normalizedQuery] = normalize(query);\n      }\n      return this._normalizedQuery;\n    }\n    return (query || []).filter(q => !!q).map(q => normalize(q)[0]);\n  }\n  #shouldDirtyMatch(state) {\n    const newQuery = state.query,\n      prevQuery = this.#state.query;\n    const newType = typeof newQuery,\n      prevType = typeof prevQuery;\n    if (newType !== prevType) {\n      return true;\n    }\n    if (newType === \"string\") {\n      if (newQuery !== prevQuery) {\n        return true;\n      }\n    } else if (JSON.stringify(newQuery) !== JSON.stringify(prevQuery)) {\n      return true;\n    }\n    switch (state.type) {\n      case \"again\":\n        const pageNumber = this._selected.pageIdx + 1;\n        const linkService = this._linkService;\n        return pageNumber >= 1 && pageNumber <= linkService.pagesCount && pageNumber !== linkService.page && !(this.onIsPageVisible?.(pageNumber) ?? true);\n      case \"highlightallchange\":\n        return false;\n    }\n    return true;\n  }\n  #isEntireWord(content, startIdx, length) {\n    let match = content.slice(0, startIdx).match(NOT_DIACRITIC_FROM_END_REG_EXP);\n    if (match) {\n      const first = content.charCodeAt(startIdx);\n      const limit = match[1].charCodeAt(0);\n      if (getCharacterType(first) === getCharacterType(limit)) {\n        return false;\n      }\n    }\n    match = content.slice(startIdx + length).match(NOT_DIACRITIC_FROM_START_REG_EXP);\n    if (match) {\n      const last = content.charCodeAt(startIdx + length - 1);\n      const limit = match[1].charCodeAt(0);\n      if (getCharacterType(last) === getCharacterType(limit)) {\n        return false;\n      }\n    }\n    return true;\n  }\n  #calculateRegExpMatch(query, entireWord, pageIndex, pageContent) {\n    const matches = this._pageMatches[pageIndex] = [];\n    const matchesLength = this._pageMatchesLength[pageIndex] = [];\n    if (!query) {\n      return;\n    }\n    const diffs = this._pageDiffs[pageIndex];\n    let match;\n    while ((match = query.exec(pageContent)) !== null) {\n      if (entireWord && !this.#isEntireWord(pageContent, match.index, match[0].length)) {\n        continue;\n      }\n      const [matchPos, matchLen] = getOriginalIndex(diffs, match.index, match[0].length);\n      if (matchLen) {\n        matches.push(matchPos);\n        matchesLength.push(matchLen);\n      }\n    }\n  }\n  #convertToRegExpString(query, hasDiacritics) {\n    const {\n      matchDiacritics\n    } = this.#state;\n    let isUnicode = false;\n    query = query.replaceAll(SPECIAL_CHARS_REG_EXP, (match, p1, p2, p3, p4, p5) => {\n      if (p1) {\n        return `[ ]*\\\\${p1}[ ]*`;\n      }\n      if (p2) {\n        return `[ ]*${p2}[ ]*`;\n      }\n      if (p3) {\n        return \"[ ]+\";\n      }\n      if (matchDiacritics) {\n        return p4 || p5;\n      }\n      if (p4) {\n        return DIACRITICS_EXCEPTION.has(p4.charCodeAt(0)) ? p4 : \"\";\n      }\n      if (hasDiacritics) {\n        isUnicode = true;\n        return `${p5}\\\\p{M}*`;\n      }\n      return p5;\n    });\n    const trailingSpaces = \"[ ]*\";\n    if (query.endsWith(trailingSpaces)) {\n      query = query.slice(0, query.length - trailingSpaces.length);\n    }\n    if (matchDiacritics) {\n      if (hasDiacritics) {\n        DIACRITICS_EXCEPTION_STR ||= String.fromCharCode(...DIACRITICS_EXCEPTION);\n        isUnicode = true;\n        query = `${query}(?=[${DIACRITICS_EXCEPTION_STR}]|[^\\\\p{M}]|$)`;\n      }\n    }\n    return [isUnicode, query];\n  }\n  #calculateMatch(pageIndex) {\n    let query = this.#query;\n    if (query.length === 0) {\n      return;\n    }\n    const {\n      caseSensitive,\n      entireWord\n    } = this.#state;\n    const pageContent = this._pageContents[pageIndex];\n    const hasDiacritics = this._hasDiacritics[pageIndex];\n    let isUnicode = false;\n    if (typeof query === \"string\") {\n      [isUnicode, query] = this.#convertToRegExpString(query, hasDiacritics);\n    } else {\n      query = query.sort().reverse().map(q => {\n        const [isUnicodePart, queryPart] = this.#convertToRegExpString(q, hasDiacritics);\n        isUnicode ||= isUnicodePart;\n        return `(${queryPart})`;\n      }).join(\"|\");\n    }\n    const flags = `g${isUnicode ? \"u\" : \"\"}${caseSensitive ? \"\" : \"i\"}`;\n    query = query ? new RegExp(query, flags) : null;\n    this.#calculateRegExpMatch(query, entireWord, pageIndex, pageContent);\n    if (this.#state.highlightAll) {\n      this.#updatePage(pageIndex);\n    }\n    if (this._resumePageIdx === pageIndex) {\n      this._resumePageIdx = null;\n      this.#nextPageMatch();\n    }\n    const pageMatchesCount = this._pageMatches[pageIndex].length;\n    this._matchesCountTotal += pageMatchesCount;\n    if (this.#updateMatchesCountOnProgress) {\n      if (pageMatchesCount > 0) {\n        this.#updateUIResultsCount();\n      }\n    } else if (++this.#visitedPagesCount === this._linkService.pagesCount) {\n      this.#updateUIResultsCount();\n    }\n  }\n  #extractText() {\n    if (this._extractTextPromises.length > 0) {\n      return;\n    }\n    let deferred = Promise.resolve();\n    const textOptions = {\n      disableNormalization: true\n    };\n    for (let i = 0, ii = this._linkService.pagesCount; i < ii; i++) {\n      const {\n        promise,\n        resolve\n      } = Promise.withResolvers();\n      this._extractTextPromises[i] = promise;\n      deferred = deferred.then(() => {\n        return this._pdfDocument.getPage(i + 1).then(pdfPage => pdfPage.getTextContent(textOptions)).then(textContent => {\n          const strBuf = [];\n          for (const textItem of textContent.items) {\n            strBuf.push(textItem.str);\n            if (textItem.hasEOL) {\n              strBuf.push(\"\\n\");\n            }\n          }\n          [this._pageContents[i], this._pageDiffs[i], this._hasDiacritics[i]] = normalize(strBuf.join(\"\"));\n          resolve();\n        }, reason => {\n          console.error(`Unable to get text content for page ${i + 1}`, reason);\n          this._pageContents[i] = \"\";\n          this._pageDiffs[i] = null;\n          this._hasDiacritics[i] = false;\n          resolve();\n        });\n      });\n    }\n  }\n  #updatePage(index) {\n    if (this._scrollMatches && this._selected.pageIdx === index) {\n      this._linkService.page = index + 1;\n    }\n    this._eventBus.dispatch(\"updatetextlayermatches\", {\n      source: this,\n      pageIndex: index\n    });\n  }\n  #updateAllPages() {\n    this._eventBus.dispatch(\"updatetextlayermatches\", {\n      source: this,\n      pageIndex: -1\n    });\n  }\n  #nextMatch() {\n    const previous = this.#state.findPrevious;\n    const currentPageIndex = this._linkService.page - 1;\n    const numPages = this._linkService.pagesCount;\n    this._highlightMatches = true;\n    if (this._dirtyMatch) {\n      this._dirtyMatch = false;\n      this._selected.pageIdx = this._selected.matchIdx = -1;\n      this._offset.pageIdx = currentPageIndex;\n      this._offset.matchIdx = null;\n      this._offset.wrapped = false;\n      this._resumePageIdx = null;\n      this._pageMatches.length = 0;\n      this._pageMatchesLength.length = 0;\n      this.#visitedPagesCount = 0;\n      this._matchesCountTotal = 0;\n      this.#updateAllPages();\n      for (let i = 0; i < numPages; i++) {\n        if (this._pendingFindMatches.has(i)) {\n          continue;\n        }\n        this._pendingFindMatches.add(i);\n        this._extractTextPromises[i].then(() => {\n          this._pendingFindMatches.delete(i);\n          this.#calculateMatch(i);\n        });\n      }\n    }\n    const query = this.#query;\n    if (query.length === 0) {\n      this.#updateUIState(FindState.FOUND);\n      return;\n    }\n    if (this._resumePageIdx) {\n      return;\n    }\n    const offset = this._offset;\n    this._pagesToSearch = numPages;\n    if (offset.matchIdx !== null) {\n      const numPageMatches = this._pageMatches[offset.pageIdx].length;\n      if (!previous && offset.matchIdx + 1 < numPageMatches || previous && offset.matchIdx > 0) {\n        offset.matchIdx = previous ? offset.matchIdx - 1 : offset.matchIdx + 1;\n        this.#updateMatch(true);\n        return;\n      }\n      this.#advanceOffsetPage(previous);\n    }\n    this.#nextPageMatch();\n  }\n  #matchesReady(matches) {\n    const offset = this._offset;\n    const numMatches = matches.length;\n    const previous = this.#state.findPrevious;\n    if (numMatches) {\n      offset.matchIdx = previous ? numMatches - 1 : 0;\n      this.#updateMatch(true);\n      return true;\n    }\n    this.#advanceOffsetPage(previous);\n    if (offset.wrapped) {\n      offset.matchIdx = null;\n      if (this._pagesToSearch < 0) {\n        this.#updateMatch(false);\n        return true;\n      }\n    }\n    return false;\n  }\n  #nextPageMatch() {\n    if (this._resumePageIdx !== null) {\n      console.error(\"There can only be one pending page.\");\n    }\n    let matches = null;\n    do {\n      const pageIdx = this._offset.pageIdx;\n      matches = this._pageMatches[pageIdx];\n      if (!matches) {\n        this._resumePageIdx = pageIdx;\n        break;\n      }\n    } while (!this.#matchesReady(matches));\n  }\n  #advanceOffsetPage(previous) {\n    const offset = this._offset;\n    const numPages = this._linkService.pagesCount;\n    offset.pageIdx = previous ? offset.pageIdx - 1 : offset.pageIdx + 1;\n    offset.matchIdx = null;\n    this._pagesToSearch--;\n    if (offset.pageIdx >= numPages || offset.pageIdx < 0) {\n      offset.pageIdx = previous ? numPages - 1 : 0;\n      offset.wrapped = true;\n    }\n  }\n  #updateMatch(found = false) {\n    let state = FindState.NOT_FOUND;\n    const wrapped = this._offset.wrapped;\n    this._offset.wrapped = false;\n    if (found) {\n      const previousPage = this._selected.pageIdx;\n      this._selected.pageIdx = this._offset.pageIdx;\n      this._selected.matchIdx = this._offset.matchIdx;\n      state = wrapped ? FindState.WRAPPED : FindState.FOUND;\n      if (previousPage !== -1 && previousPage !== this._selected.pageIdx) {\n        this.#updatePage(previousPage);\n      }\n    }\n    this.#updateUIState(state, this.#state.findPrevious);\n    if (this._selected.pageIdx !== -1) {\n      this._scrollMatches = true;\n      this.#updatePage(this._selected.pageIdx);\n    }\n  }\n  #onFindBarClose(evt) {\n    const pdfDocument = this._pdfDocument;\n    this._firstPageCapability.promise.then(() => {\n      if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) {\n        return;\n      }\n      if (this._findTimeout) {\n        clearTimeout(this._findTimeout);\n        this._findTimeout = null;\n      }\n      if (this._resumePageIdx) {\n        this._resumePageIdx = null;\n        this._dirtyMatch = true;\n      }\n      this.#updateUIState(FindState.FOUND);\n      this._highlightMatches = false;\n      this.#updateAllPages();\n    });\n  }\n  #requestMatchesCount() {\n    const {\n      pageIdx,\n      matchIdx\n    } = this._selected;\n    let current = 0,\n      total = this._matchesCountTotal;\n    if (matchIdx !== -1) {\n      for (let i = 0; i < pageIdx; i++) {\n        current += this._pageMatches[i]?.length || 0;\n      }\n      current += matchIdx + 1;\n    }\n    if (current < 1 || current > total) {\n      current = total = 0;\n    }\n    return {\n      current,\n      total\n    };\n  }\n  #updateUIResultsCount() {\n    this._eventBus.dispatch(\"updatefindmatchescount\", {\n      source: this,\n      matchesCount: this.#requestMatchesCount()\n    });\n  }\n  #updateUIState(state, previous = false) {\n    if (!this.#updateMatchesCountOnProgress && (this.#visitedPagesCount !== this._linkService.pagesCount || state === FindState.PENDING)) {\n      return;\n    }\n    this._eventBus.dispatch(\"updatefindcontrolstate\", {\n      source: this,\n      state,\n      previous,\n      matchesCount: this.#requestMatchesCount(),\n      rawQuery: this.#state?.query ?? null\n    });\n  }\n}\n\n;// CONCATENATED MODULE: ./web/pdf_find_bar.js\n\n\nconst MATCHES_COUNT_LIMIT = 1000;\nclass PDFFindBar {\n  #resizeObserver = new ResizeObserver(this.#resizeObserverCallback.bind(this));\n  constructor(options, eventBus) {\n    this.opened = false;\n    this.bar = options.bar;\n    this.toggleButton = options.toggleButton;\n    this.findField = options.findField;\n    this.highlightAll = options.highlightAllCheckbox;\n    this.caseSensitive = options.caseSensitiveCheckbox;\n    this.matchDiacritics = options.matchDiacriticsCheckbox;\n    this.entireWord = options.entireWordCheckbox;\n    this.findMsg = options.findMsg;\n    this.findResultsCount = options.findResultsCount;\n    this.findPreviousButton = options.findPreviousButton;\n    this.findNextButton = options.findNextButton;\n    this.eventBus = eventBus;\n    this.toggleButton.addEventListener(\"click\", () => {\n      this.toggle();\n    });\n    this.findField.addEventListener(\"input\", () => {\n      this.dispatchEvent(\"\");\n    });\n    this.bar.addEventListener(\"keydown\", e => {\n      switch (e.keyCode) {\n        case 13:\n          if (e.target === this.findField) {\n            this.dispatchEvent(\"again\", e.shiftKey);\n          }\n          break;\n        case 27:\n          this.close();\n          break;\n      }\n    });\n    this.findPreviousButton.addEventListener(\"click\", () => {\n      this.dispatchEvent(\"again\", true);\n    });\n    this.findNextButton.addEventListener(\"click\", () => {\n      this.dispatchEvent(\"again\", false);\n    });\n    this.highlightAll.addEventListener(\"click\", () => {\n      this.dispatchEvent(\"highlightallchange\");\n    });\n    this.caseSensitive.addEventListener(\"click\", () => {\n      this.dispatchEvent(\"casesensitivitychange\");\n    });\n    this.entireWord.addEventListener(\"click\", () => {\n      this.dispatchEvent(\"entirewordchange\");\n    });\n    this.matchDiacritics.addEventListener(\"click\", () => {\n      this.dispatchEvent(\"diacriticmatchingchange\");\n    });\n  }\n  reset() {\n    this.updateUIState();\n  }\n  dispatchEvent(type, findPrev = false) {\n    this.eventBus.dispatch(\"find\", {\n      source: this,\n      type,\n      query: this.findField.value,\n      caseSensitive: this.caseSensitive.checked,\n      entireWord: this.entireWord.checked,\n      highlightAll: this.highlightAll.checked,\n      findPrevious: findPrev,\n      matchDiacritics: this.matchDiacritics.checked\n    });\n  }\n  updateUIState(state, previous, matchesCount) {\n    const {\n      findField,\n      findMsg\n    } = this;\n    let findMsgId = \"\",\n      status = \"\";\n    switch (state) {\n      case FindState.FOUND:\n        break;\n      case FindState.PENDING:\n        status = \"pending\";\n        break;\n      case FindState.NOT_FOUND:\n        findMsgId = \"pdfjs-find-not-found\";\n        status = \"notFound\";\n        break;\n      case FindState.WRAPPED:\n        findMsgId = `pdfjs-find-reached-${previous ? \"top\" : \"bottom\"}`;\n        break;\n    }\n    findField.setAttribute(\"data-status\", status);\n    findField.setAttribute(\"aria-invalid\", state === FindState.NOT_FOUND);\n    findMsg.setAttribute(\"data-status\", status);\n    if (findMsgId) {\n      findMsg.setAttribute(\"data-l10n-id\", findMsgId);\n    } else {\n      findMsg.removeAttribute(\"data-l10n-id\");\n      findMsg.textContent = \"\";\n    }\n    this.updateResultsCount(matchesCount);\n  }\n  updateResultsCount({\n    current = 0,\n    total = 0\n  } = {}) {\n    const {\n      findResultsCount\n    } = this;\n    if (total > 0) {\n      const limit = MATCHES_COUNT_LIMIT;\n      findResultsCount.setAttribute(\"data-l10n-id\", `pdfjs-find-match-count${total > limit ? \"-limit\" : \"\"}`);\n      findResultsCount.setAttribute(\"data-l10n-args\", JSON.stringify({\n        limit,\n        current,\n        total\n      }));\n    } else {\n      findResultsCount.removeAttribute(\"data-l10n-id\");\n      findResultsCount.textContent = \"\";\n    }\n  }\n  open() {\n    if (!this.opened) {\n      this.#resizeObserver.observe(this.bar.parentNode);\n      this.#resizeObserver.observe(this.bar);\n      this.opened = true;\n      toggleExpandedBtn(this.toggleButton, true, this.bar);\n    }\n    this.findField.select();\n    this.findField.focus();\n  }\n  close() {\n    if (!this.opened) {\n      return;\n    }\n    this.#resizeObserver.disconnect();\n    this.opened = false;\n    toggleExpandedBtn(this.toggleButton, false, this.bar);\n    this.eventBus.dispatch(\"findbarclose\", {\n      source: this\n    });\n  }\n  toggle() {\n    if (this.opened) {\n      this.close();\n    } else {\n      this.open();\n    }\n  }\n  #resizeObserverCallback(entries) {\n    const {\n      bar\n    } = this;\n    bar.classList.remove(\"wrapContainers\");\n    const findbarHeight = bar.clientHeight;\n    const inputContainerHeight = bar.firstElementChild.clientHeight;\n    if (findbarHeight > inputContainerHeight) {\n      bar.classList.add(\"wrapContainers\");\n    }\n  }\n}\n\n;// CONCATENATED MODULE: ./web/pdf_history.js\n\n\nconst HASH_CHANGE_TIMEOUT = 1000;\nconst POSITION_UPDATED_THRESHOLD = 50;\nconst UPDATE_VIEWAREA_TIMEOUT = 1000;\nfunction getCurrentHash() {\n  return document.location.hash;\n}\nclass PDFHistory {\n  #eventAbortController = null;\n  constructor({\n    linkService,\n    eventBus\n  }) {\n    this.linkService = linkService;\n    this.eventBus = eventBus;\n    this._initialized = false;\n    this._fingerprint = \"\";\n    this.reset();\n    this.eventBus._on(\"pagesinit\", () => {\n      this._isPagesLoaded = false;\n      this.eventBus._on(\"pagesloaded\", evt => {\n        this._isPagesLoaded = !!evt.pagesCount;\n      }, {\n        once: true\n      });\n    });\n  }\n  initialize({\n    fingerprint,\n    resetHistory = false,\n    updateUrl = false\n  }) {\n    if (!fingerprint || typeof fingerprint !== \"string\") {\n      console.error('PDFHistory.initialize: The \"fingerprint\" must be a non-empty string.');\n      return;\n    }\n    if (this._initialized) {\n      this.reset();\n    }\n    const reInitialized = this._fingerprint !== \"\" && this._fingerprint !== fingerprint;\n    this._fingerprint = fingerprint;\n    this._updateUrl = updateUrl === true;\n    this._initialized = true;\n    this.#bindEvents();\n    const state = window.history.state;\n    this._popStateInProgress = false;\n    this._blockHashChange = 0;\n    this._currentHash = getCurrentHash();\n    this._numPositionUpdates = 0;\n    this._uid = this._maxUid = 0;\n    this._destination = null;\n    this._position = null;\n    if (!this.#isValidState(state, true) || resetHistory) {\n      const {\n        hash,\n        page,\n        rotation\n      } = this.#parseCurrentHash(true);\n      if (!hash || reInitialized || resetHistory) {\n        this.#pushOrReplaceState(null, true);\n        return;\n      }\n      this.#pushOrReplaceState({\n        hash,\n        page,\n        rotation\n      }, true);\n      return;\n    }\n    const destination = state.destination;\n    this.#updateInternalState(destination, state.uid, true);\n    if (destination.rotation !== undefined) {\n      this._initialRotation = destination.rotation;\n    }\n    if (destination.dest) {\n      this._initialBookmark = JSON.stringify(destination.dest);\n      this._destination.page = null;\n    } else if (destination.hash) {\n      this._initialBookmark = destination.hash;\n    } else if (destination.page) {\n      this._initialBookmark = `page=${destination.page}`;\n    }\n  }\n  reset() {\n    if (this._initialized) {\n      this.#pageHide();\n      this._initialized = false;\n      this.#unbindEvents();\n    }\n    if (this._updateViewareaTimeout) {\n      clearTimeout(this._updateViewareaTimeout);\n      this._updateViewareaTimeout = null;\n    }\n    this._initialBookmark = null;\n    this._initialRotation = null;\n  }\n  push({\n    namedDest = null,\n    explicitDest,\n    pageNumber\n  }) {\n    if (!this._initialized) {\n      return;\n    }\n    if (namedDest && typeof namedDest !== \"string\") {\n      console.error(\"PDFHistory.push: \" + `\"${namedDest}\" is not a valid namedDest parameter.`);\n      return;\n    } else if (!Array.isArray(explicitDest)) {\n      console.error(\"PDFHistory.push: \" + `\"${explicitDest}\" is not a valid explicitDest parameter.`);\n      return;\n    } else if (!this.#isValidPage(pageNumber)) {\n      if (pageNumber !== null || this._destination) {\n        console.error(\"PDFHistory.push: \" + `\"${pageNumber}\" is not a valid pageNumber parameter.`);\n        return;\n      }\n    }\n    const hash = namedDest || JSON.stringify(explicitDest);\n    if (!hash) {\n      return;\n    }\n    let forceReplace = false;\n    if (this._destination && (isDestHashesEqual(this._destination.hash, hash) || isDestArraysEqual(this._destination.dest, explicitDest))) {\n      if (this._destination.page) {\n        return;\n      }\n      forceReplace = true;\n    }\n    if (this._popStateInProgress && !forceReplace) {\n      return;\n    }\n    this.#pushOrReplaceState({\n      dest: explicitDest,\n      hash,\n      page: pageNumber,\n      rotation: this.linkService.rotation\n    }, forceReplace);\n    if (!this._popStateInProgress) {\n      this._popStateInProgress = true;\n      Promise.resolve().then(() => {\n        this._popStateInProgress = false;\n      });\n    }\n  }\n  pushPage(pageNumber) {\n    if (!this._initialized) {\n      return;\n    }\n    if (!this.#isValidPage(pageNumber)) {\n      console.error(`PDFHistory.pushPage: \"${pageNumber}\" is not a valid page number.`);\n      return;\n    }\n    if (this._destination?.page === pageNumber) {\n      return;\n    }\n    if (this._popStateInProgress) {\n      return;\n    }\n    this.#pushOrReplaceState({\n      dest: null,\n      hash: `page=${pageNumber}`,\n      page: pageNumber,\n      rotation: this.linkService.rotation\n    });\n    if (!this._popStateInProgress) {\n      this._popStateInProgress = true;\n      Promise.resolve().then(() => {\n        this._popStateInProgress = false;\n      });\n    }\n  }\n  pushCurrentPosition() {\n    if (!this._initialized || this._popStateInProgress) {\n      return;\n    }\n    this.#tryPushCurrentPosition();\n  }\n  back() {\n    if (!this._initialized || this._popStateInProgress) {\n      return;\n    }\n    const state = window.history.state;\n    if (this.#isValidState(state) && state.uid > 0) {\n      window.history.back();\n    }\n  }\n  forward() {\n    if (!this._initialized || this._popStateInProgress) {\n      return;\n    }\n    const state = window.history.state;\n    if (this.#isValidState(state) && state.uid < this._maxUid) {\n      window.history.forward();\n    }\n  }\n  get popStateInProgress() {\n    return this._initialized && (this._popStateInProgress || this._blockHashChange > 0);\n  }\n  get initialBookmark() {\n    return this._initialized ? this._initialBookmark : null;\n  }\n  get initialRotation() {\n    return this._initialized ? this._initialRotation : null;\n  }\n  #pushOrReplaceState(destination, forceReplace = false) {\n    const shouldReplace = forceReplace || !this._destination;\n    const newState = {\n      fingerprint: this._fingerprint,\n      uid: shouldReplace ? this._uid : this._uid + 1,\n      destination\n    };\n    this.#updateInternalState(destination, newState.uid);\n    let newUrl;\n    if (this._updateUrl && destination?.hash) {\n      const baseUrl = document.location.href.split(\"#\", 1)[0];\n      if (!baseUrl.startsWith(\"file://\")) {\n        newUrl = `${baseUrl}#${destination.hash}`;\n      }\n    }\n    if (shouldReplace) {\n      window.history.replaceState(newState, \"\", newUrl);\n    } else {\n      window.history.pushState(newState, \"\", newUrl);\n    }\n  }\n  #tryPushCurrentPosition(temporary = false) {\n    if (!this._position) {\n      return;\n    }\n    let position = this._position;\n    if (temporary) {\n      position = Object.assign(Object.create(null), this._position);\n      position.temporary = true;\n    }\n    if (!this._destination) {\n      this.#pushOrReplaceState(position);\n      return;\n    }\n    if (this._destination.temporary) {\n      this.#pushOrReplaceState(position, true);\n      return;\n    }\n    if (this._destination.hash === position.hash) {\n      return;\n    }\n    if (!this._destination.page && (POSITION_UPDATED_THRESHOLD <= 0 || this._numPositionUpdates <= POSITION_UPDATED_THRESHOLD)) {\n      return;\n    }\n    let forceReplace = false;\n    if (this._destination.page >= position.first && this._destination.page <= position.page) {\n      if (this._destination.dest !== undefined || !this._destination.first) {\n        return;\n      }\n      forceReplace = true;\n    }\n    this.#pushOrReplaceState(position, forceReplace);\n  }\n  #isValidPage(val) {\n    return Number.isInteger(val) && val > 0 && val <= this.linkService.pagesCount;\n  }\n  #isValidState(state, checkReload = false) {\n    if (!state) {\n      return false;\n    }\n    if (state.fingerprint !== this._fingerprint) {\n      if (checkReload) {\n        if (typeof state.fingerprint !== \"string\" || state.fingerprint.length !== this._fingerprint.length) {\n          return false;\n        }\n        const [perfEntry] = performance.getEntriesByType(\"navigation\");\n        if (perfEntry?.type !== \"reload\") {\n          return false;\n        }\n      } else {\n        return false;\n      }\n    }\n    if (!Number.isInteger(state.uid) || state.uid < 0) {\n      return false;\n    }\n    if (state.destination === null || typeof state.destination !== \"object\") {\n      return false;\n    }\n    return true;\n  }\n  #updateInternalState(destination, uid, removeTemporary = false) {\n    if (this._updateViewareaTimeout) {\n      clearTimeout(this._updateViewareaTimeout);\n      this._updateViewareaTimeout = null;\n    }\n    if (removeTemporary && destination?.temporary) {\n      delete destination.temporary;\n    }\n    this._destination = destination;\n    this._uid = uid;\n    this._maxUid = Math.max(this._maxUid, uid);\n    this._numPositionUpdates = 0;\n  }\n  #parseCurrentHash(checkNameddest = false) {\n    const hash = unescape(getCurrentHash()).substring(1);\n    const params = parseQueryString(hash);\n    const nameddest = params.get(\"nameddest\") || \"\";\n    let page = params.get(\"page\") | 0;\n    if (!this.#isValidPage(page) || checkNameddest && nameddest.length > 0) {\n      page = null;\n    }\n    return {\n      hash,\n      page,\n      rotation: this.linkService.rotation\n    };\n  }\n  #updateViewarea({\n    location\n  }) {\n    if (this._updateViewareaTimeout) {\n      clearTimeout(this._updateViewareaTimeout);\n      this._updateViewareaTimeout = null;\n    }\n    this._position = {\n      hash: location.pdfOpenParams.substring(1),\n      page: this.linkService.page,\n      first: location.pageNumber,\n      rotation: location.rotation\n    };\n    if (this._popStateInProgress) {\n      return;\n    }\n    if (POSITION_UPDATED_THRESHOLD > 0 && this._isPagesLoaded && this._destination && !this._destination.page) {\n      this._numPositionUpdates++;\n    }\n    if (UPDATE_VIEWAREA_TIMEOUT > 0) {\n      this._updateViewareaTimeout = setTimeout(() => {\n        if (!this._popStateInProgress) {\n          this.#tryPushCurrentPosition(true);\n        }\n        this._updateViewareaTimeout = null;\n      }, UPDATE_VIEWAREA_TIMEOUT);\n    }\n  }\n  #popState({\n    state\n  }) {\n    const newHash = getCurrentHash(),\n      hashChanged = this._currentHash !== newHash;\n    this._currentHash = newHash;\n    if (!state) {\n      this._uid++;\n      const {\n        hash,\n        page,\n        rotation\n      } = this.#parseCurrentHash();\n      this.#pushOrReplaceState({\n        hash,\n        page,\n        rotation\n      }, true);\n      return;\n    }\n    if (!this.#isValidState(state)) {\n      return;\n    }\n    this._popStateInProgress = true;\n    if (hashChanged) {\n      this._blockHashChange++;\n      waitOnEventOrTimeout({\n        target: window,\n        name: \"hashchange\",\n        delay: HASH_CHANGE_TIMEOUT\n      }).then(() => {\n        this._blockHashChange--;\n      });\n    }\n    const destination = state.destination;\n    this.#updateInternalState(destination, state.uid, true);\n    if (isValidRotation(destination.rotation)) {\n      this.linkService.rotation = destination.rotation;\n    }\n    if (destination.dest) {\n      this.linkService.goToDestination(destination.dest);\n    } else if (destination.hash) {\n      this.linkService.setHash(destination.hash);\n    } else if (destination.page) {\n      this.linkService.page = destination.page;\n    }\n    Promise.resolve().then(() => {\n      this._popStateInProgress = false;\n    });\n  }\n  #pageHide() {\n    if (!this._destination || this._destination.temporary) {\n      this.#tryPushCurrentPosition();\n    }\n  }\n  #bindEvents() {\n    if (this.#eventAbortController) {\n      return;\n    }\n    this.#eventAbortController = new AbortController();\n    const {\n      signal\n    } = this.#eventAbortController;\n    this.eventBus._on(\"updateviewarea\", this.#updateViewarea.bind(this), {\n      signal\n    });\n    window.addEventListener(\"popstate\", this.#popState.bind(this), {\n      signal\n    });\n    window.addEventListener(\"pagehide\", this.#pageHide.bind(this), {\n      signal\n    });\n  }\n  #unbindEvents() {\n    this.#eventAbortController?.abort();\n    this.#eventAbortController = null;\n  }\n}\nfunction isDestHashesEqual(destHash, pushHash) {\n  if (typeof destHash !== \"string\" || typeof pushHash !== \"string\") {\n    return false;\n  }\n  if (destHash === pushHash) {\n    return true;\n  }\n  const nameddest = parseQueryString(destHash).get(\"nameddest\");\n  if (nameddest === pushHash) {\n    return true;\n  }\n  return false;\n}\nfunction isDestArraysEqual(firstDest, secondDest) {\n  function isEntryEqual(first, second) {\n    if (typeof first !== typeof second) {\n      return false;\n    }\n    if (Array.isArray(first) || Array.isArray(second)) {\n      return false;\n    }\n    if (first !== null && typeof first === \"object\" && second !== null) {\n      if (Object.keys(first).length !== Object.keys(second).length) {\n        return false;\n      }\n      for (const key in first) {\n        if (!isEntryEqual(first[key], second[key])) {\n          return false;\n        }\n      }\n      return true;\n    }\n    return first === second || Number.isNaN(first) && Number.isNaN(second);\n  }\n  if (!(Array.isArray(firstDest) && Array.isArray(secondDest))) {\n    return false;\n  }\n  if (firstDest.length !== secondDest.length) {\n    return false;\n  }\n  for (let i = 0, ii = firstDest.length; i < ii; i++) {\n    if (!isEntryEqual(firstDest[i], secondDest[i])) {\n      return false;\n    }\n  }\n  return true;\n}\n\n;// CONCATENATED MODULE: ./web/pdf_layer_viewer.js\n\nclass PDFLayerViewer extends BaseTreeViewer {\n  constructor(options) {\n    super(options);\n    this.eventBus._on(\"optionalcontentconfigchanged\", evt => {\n      this.#updateLayers(evt.promise);\n    });\n    this.eventBus._on(\"resetlayers\", () => {\n      this.#updateLayers();\n    });\n    this.eventBus._on(\"togglelayerstree\", this._toggleAllTreeItems.bind(this));\n  }\n  reset() {\n    super.reset();\n    this._optionalContentConfig = null;\n    this._optionalContentHash = null;\n  }\n  _dispatchEvent(layersCount) {\n    this.eventBus.dispatch(\"layersloaded\", {\n      source: this,\n      layersCount\n    });\n  }\n  _bindLink(element, {\n    groupId,\n    input\n  }) {\n    const setVisibility = () => {\n      this._optionalContentConfig.setVisibility(groupId, input.checked);\n      this._optionalContentHash = this._optionalContentConfig.getHash();\n      this.eventBus.dispatch(\"optionalcontentconfig\", {\n        source: this,\n        promise: Promise.resolve(this._optionalContentConfig)\n      });\n    };\n    element.onclick = evt => {\n      if (evt.target === input) {\n        setVisibility();\n        return true;\n      } else if (evt.target !== element) {\n        return true;\n      }\n      input.checked = !input.checked;\n      setVisibility();\n      return false;\n    };\n  }\n  async _setNestedName(element, {\n    name = null\n  }) {\n    if (typeof name === \"string\") {\n      element.textContent = this._normalizeTextContent(name);\n      return;\n    }\n    element.textContent = await this._l10n.get(\"pdfjs-additional-layers\");\n    element.style.fontStyle = \"italic\";\n  }\n  _addToggleButton(div, {\n    name = null\n  }) {\n    super._addToggleButton(div, name === null);\n  }\n  _toggleAllTreeItems() {\n    if (!this._optionalContentConfig) {\n      return;\n    }\n    super._toggleAllTreeItems();\n  }\n  render({\n    optionalContentConfig,\n    pdfDocument\n  }) {\n    if (this._optionalContentConfig) {\n      this.reset();\n    }\n    this._optionalContentConfig = optionalContentConfig || null;\n    this._pdfDocument = pdfDocument || null;\n    const groups = optionalContentConfig?.getOrder();\n    if (!groups) {\n      this._dispatchEvent(0);\n      return;\n    }\n    this._optionalContentHash = optionalContentConfig.getHash();\n    const fragment = document.createDocumentFragment(),\n      queue = [{\n        parent: fragment,\n        groups\n      }];\n    let layersCount = 0,\n      hasAnyNesting = false;\n    while (queue.length > 0) {\n      const levelData = queue.shift();\n      for (const groupId of levelData.groups) {\n        const div = document.createElement(\"div\");\n        div.className = \"treeItem\";\n        const element = document.createElement(\"a\");\n        div.append(element);\n        if (typeof groupId === \"object\") {\n          hasAnyNesting = true;\n          this._addToggleButton(div, groupId);\n          this._setNestedName(element, groupId);\n          const itemsDiv = document.createElement(\"div\");\n          itemsDiv.className = \"treeItems\";\n          div.append(itemsDiv);\n          queue.push({\n            parent: itemsDiv,\n            groups: groupId.order\n          });\n        } else {\n          const group = optionalContentConfig.getGroup(groupId);\n          const input = document.createElement(\"input\");\n          this._bindLink(element, {\n            groupId,\n            input\n          });\n          input.type = \"checkbox\";\n          input.checked = group.visible;\n          const label = document.createElement(\"label\");\n          label.textContent = this._normalizeTextContent(group.name);\n          label.append(input);\n          element.append(label);\n          layersCount++;\n        }\n        levelData.parent.append(div);\n      }\n    }\n    this._finishRendering(fragment, layersCount, hasAnyNesting);\n  }\n  async #updateLayers(promise = null) {\n    if (!this._optionalContentConfig) {\n      return;\n    }\n    const pdfDocument = this._pdfDocument;\n    const optionalContentConfig = await (promise || pdfDocument.getOptionalContentConfig({\n      intent: \"display\"\n    }));\n    if (pdfDocument !== this._pdfDocument) {\n      return;\n    }\n    if (promise) {\n      if (optionalContentConfig.getHash() === this._optionalContentHash) {\n        return;\n      }\n    } else {\n      this.eventBus.dispatch(\"optionalcontentconfig\", {\n        source: this,\n        promise: Promise.resolve(optionalContentConfig)\n      });\n    }\n    this.render({\n      optionalContentConfig,\n      pdfDocument: this._pdfDocument\n    });\n  }\n}\n\n;// CONCATENATED MODULE: ./web/pdf_outline_viewer.js\n\n\nclass PDFOutlineViewer extends BaseTreeViewer {\n  constructor(options) {\n    super(options);\n    this.linkService = options.linkService;\n    this.downloadManager = options.downloadManager;\n    this.eventBus._on(\"toggleoutlinetree\", this._toggleAllTreeItems.bind(this));\n    this.eventBus._on(\"currentoutlineitem\", this._currentOutlineItem.bind(this));\n    this.eventBus._on(\"pagechanging\", evt => {\n      this._currentPageNumber = evt.pageNumber;\n    });\n    this.eventBus._on(\"pagesloaded\", evt => {\n      this._isPagesLoaded = !!evt.pagesCount;\n      this._currentOutlineItemCapability?.resolve(this._isPagesLoaded);\n    });\n    this.eventBus._on(\"sidebarviewchanged\", evt => {\n      this._sidebarView = evt.view;\n    });\n  }\n  reset() {\n    super.reset();\n    this._outline = null;\n    this._pageNumberToDestHashCapability = null;\n    this._currentPageNumber = 1;\n    this._isPagesLoaded = null;\n    this._currentOutlineItemCapability?.resolve(false);\n    this._currentOutlineItemCapability = null;\n  }\n  _dispatchEvent(outlineCount) {\n    this._currentOutlineItemCapability = Promise.withResolvers();\n    if (outlineCount === 0 || this._pdfDocument?.loadingParams.disableAutoFetch) {\n      this._currentOutlineItemCapability.resolve(false);\n    } else if (this._isPagesLoaded !== null) {\n      this._currentOutlineItemCapability.resolve(this._isPagesLoaded);\n    }\n    this.eventBus.dispatch(\"outlineloaded\", {\n      source: this,\n      outlineCount,\n      currentOutlineItemPromise: this._currentOutlineItemCapability.promise\n    });\n  }\n  _bindLink(element, {\n    url,\n    newWindow,\n    action,\n    attachment,\n    dest,\n    setOCGState\n  }) {\n    const {\n      linkService\n    } = this;\n    if (url) {\n      linkService.addLinkAttributes(element, url, newWindow);\n      return;\n    }\n    if (action) {\n      element.href = linkService.getAnchorUrl(\"\");\n      element.onclick = () => {\n        linkService.executeNamedAction(action);\n        return false;\n      };\n      return;\n    }\n    if (attachment) {\n      element.href = linkService.getAnchorUrl(\"\");\n      element.onclick = () => {\n        this.downloadManager.openOrDownloadData(attachment.content, attachment.filename);\n        return false;\n      };\n      return;\n    }\n    if (setOCGState) {\n      element.href = linkService.getAnchorUrl(\"\");\n      element.onclick = () => {\n        linkService.executeSetOCGState(setOCGState);\n        return false;\n      };\n      return;\n    }\n    element.href = linkService.getDestinationHash(dest);\n    element.onclick = evt => {\n      this._updateCurrentTreeItem(evt.target.parentNode);\n      if (dest) {\n        linkService.goToDestination(dest);\n      }\n      return false;\n    };\n  }\n  _setStyles(element, {\n    bold,\n    italic\n  }) {\n    if (bold) {\n      element.style.fontWeight = \"bold\";\n    }\n    if (italic) {\n      element.style.fontStyle = \"italic\";\n    }\n  }\n  _addToggleButton(div, {\n    count,\n    items\n  }) {\n    let hidden = false;\n    if (count < 0) {\n      let totalCount = items.length;\n      if (totalCount > 0) {\n        const queue = [...items];\n        while (queue.length > 0) {\n          const {\n            count: nestedCount,\n            items: nestedItems\n          } = queue.shift();\n          if (nestedCount > 0 && nestedItems.length > 0) {\n            totalCount += nestedItems.length;\n            queue.push(...nestedItems);\n          }\n        }\n      }\n      if (Math.abs(count) === totalCount) {\n        hidden = true;\n      }\n    }\n    super._addToggleButton(div, hidden);\n  }\n  _toggleAllTreeItems() {\n    if (!this._outline) {\n      return;\n    }\n    super._toggleAllTreeItems();\n  }\n  render({\n    outline,\n    pdfDocument\n  }) {\n    if (this._outline) {\n      this.reset();\n    }\n    this._outline = outline || null;\n    this._pdfDocument = pdfDocument || null;\n    if (!outline) {\n      this._dispatchEvent(0);\n      return;\n    }\n    const fragment = document.createDocumentFragment();\n    const queue = [{\n      parent: fragment,\n      items: outline\n    }];\n    let outlineCount = 0,\n      hasAnyNesting = false;\n    while (queue.length > 0) {\n      const levelData = queue.shift();\n      for (const item of levelData.items) {\n        const div = document.createElement(\"div\");\n        div.className = \"treeItem\";\n        const element = document.createElement(\"a\");\n        this._bindLink(element, item);\n        this._setStyles(element, item);\n        element.textContent = this._normalizeTextContent(item.title);\n        div.append(element);\n        if (item.items.length > 0) {\n          hasAnyNesting = true;\n          this._addToggleButton(div, item);\n          const itemsDiv = document.createElement(\"div\");\n          itemsDiv.className = \"treeItems\";\n          div.append(itemsDiv);\n          queue.push({\n            parent: itemsDiv,\n            items: item.items\n          });\n        }\n        levelData.parent.append(div);\n        outlineCount++;\n      }\n    }\n    this._finishRendering(fragment, outlineCount, hasAnyNesting);\n  }\n  async _currentOutlineItem() {\n    if (!this._isPagesLoaded) {\n      throw new Error(\"_currentOutlineItem: All pages have not been loaded.\");\n    }\n    if (!this._outline || !this._pdfDocument) {\n      return;\n    }\n    const pageNumberToDestHash = await this._getPageNumberToDestHash(this._pdfDocument);\n    if (!pageNumberToDestHash) {\n      return;\n    }\n    this._updateCurrentTreeItem(null);\n    if (this._sidebarView !== SidebarView.OUTLINE) {\n      return;\n    }\n    for (let i = this._currentPageNumber; i > 0; i--) {\n      const destHash = pageNumberToDestHash.get(i);\n      if (!destHash) {\n        continue;\n      }\n      const linkElement = this.container.querySelector(`a[href=\"${destHash}\"]`);\n      if (!linkElement) {\n        continue;\n      }\n      this._scrollToCurrentTreeItem(linkElement.parentNode);\n      break;\n    }\n  }\n  async _getPageNumberToDestHash(pdfDocument) {\n    if (this._pageNumberToDestHashCapability) {\n      return this._pageNumberToDestHashCapability.promise;\n    }\n    this._pageNumberToDestHashCapability = Promise.withResolvers();\n    const pageNumberToDestHash = new Map(),\n      pageNumberNesting = new Map();\n    const queue = [{\n      nesting: 0,\n      items: this._outline\n    }];\n    while (queue.length > 0) {\n      const levelData = queue.shift(),\n        currentNesting = levelData.nesting;\n      for (const {\n        dest,\n        items\n      } of levelData.items) {\n        let explicitDest, pageNumber;\n        if (typeof dest === \"string\") {\n          explicitDest = await pdfDocument.getDestination(dest);\n          if (pdfDocument !== this._pdfDocument) {\n            return null;\n          }\n        } else {\n          explicitDest = dest;\n        }\n        if (Array.isArray(explicitDest)) {\n          const [destRef] = explicitDest;\n          if (destRef && typeof destRef === \"object\") {\n            pageNumber = pdfDocument.cachedPageNumber(destRef);\n          } else if (Number.isInteger(destRef)) {\n            pageNumber = destRef + 1;\n          }\n          if (Number.isInteger(pageNumber) && (!pageNumberToDestHash.has(pageNumber) || currentNesting > pageNumberNesting.get(pageNumber))) {\n            const destHash = this.linkService.getDestinationHash(dest);\n            pageNumberToDestHash.set(pageNumber, destHash);\n            pageNumberNesting.set(pageNumber, currentNesting);\n          }\n        }\n        if (items.length > 0) {\n          queue.push({\n            nesting: currentNesting + 1,\n            items\n          });\n        }\n      }\n    }\n    this._pageNumberToDestHashCapability.resolve(pageNumberToDestHash.size > 0 ? pageNumberToDestHash : null);\n    return this._pageNumberToDestHashCapability.promise;\n  }\n}\n\n;// CONCATENATED MODULE: ./web/pdf_presentation_mode.js\n\n\nconst DELAY_BEFORE_HIDING_CONTROLS = 3000;\nconst ACTIVE_SELECTOR = \"pdfPresentationMode\";\nconst CONTROLS_SELECTOR = \"pdfPresentationModeControls\";\nconst MOUSE_SCROLL_COOLDOWN_TIME = 50;\nconst PAGE_SWITCH_THRESHOLD = 0.1;\nconst SWIPE_MIN_DISTANCE_THRESHOLD = 50;\nconst SWIPE_ANGLE_THRESHOLD = Math.PI / 6;\nclass PDFPresentationMode {\n  #state = PresentationModeState.UNKNOWN;\n  #args = null;\n  #fullscreenChangeAbortController = null;\n  #windowAbortController = null;\n  constructor({\n    container,\n    pdfViewer,\n    eventBus\n  }) {\n    this.container = container;\n    this.pdfViewer = pdfViewer;\n    this.eventBus = eventBus;\n    this.contextMenuOpen = false;\n    this.mouseScrollTimeStamp = 0;\n    this.mouseScrollDelta = 0;\n    this.touchSwipeState = null;\n  }\n  async request() {\n    const {\n      container,\n      pdfViewer\n    } = this;\n    if (this.active || !pdfViewer.pagesCount || !container.requestFullscreen) {\n      return false;\n    }\n    this.#addFullscreenChangeListeners();\n    this.#notifyStateChange(PresentationModeState.CHANGING);\n    const promise = container.requestFullscreen();\n    this.#args = {\n      pageNumber: pdfViewer.currentPageNumber,\n      scaleValue: pdfViewer.currentScaleValue,\n      scrollMode: pdfViewer.scrollMode,\n      spreadMode: null,\n      annotationEditorMode: null\n    };\n    if (pdfViewer.spreadMode !== SpreadMode.NONE && !(pdfViewer.pageViewsReady && pdfViewer.hasEqualPageSizes)) {\n      console.warn(\"Ignoring Spread modes when entering PresentationMode, \" + \"since the document may contain varying page sizes.\");\n      this.#args.spreadMode = pdfViewer.spreadMode;\n    }\n    if (pdfViewer.annotationEditorMode !== AnnotationEditorType.DISABLE) {\n      this.#args.annotationEditorMode = pdfViewer.annotationEditorMode;\n    }\n    try {\n      await promise;\n      pdfViewer.focus();\n      return true;\n    } catch {\n      this.#removeFullscreenChangeListeners();\n      this.#notifyStateChange(PresentationModeState.NORMAL);\n    }\n    return false;\n  }\n  get active() {\n    return this.#state === PresentationModeState.CHANGING || this.#state === PresentationModeState.FULLSCREEN;\n  }\n  #mouseWheel(evt) {\n    if (!this.active) {\n      return;\n    }\n    evt.preventDefault();\n    const delta = normalizeWheelEventDelta(evt);\n    const currentTime = Date.now();\n    const storedTime = this.mouseScrollTimeStamp;\n    if (currentTime > storedTime && currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) {\n      return;\n    }\n    if (this.mouseScrollDelta > 0 && delta < 0 || this.mouseScrollDelta < 0 && delta > 0) {\n      this.#resetMouseScrollState();\n    }\n    this.mouseScrollDelta += delta;\n    if (Math.abs(this.mouseScrollDelta) >= PAGE_SWITCH_THRESHOLD) {\n      const totalDelta = this.mouseScrollDelta;\n      this.#resetMouseScrollState();\n      const success = totalDelta > 0 ? this.pdfViewer.previousPage() : this.pdfViewer.nextPage();\n      if (success) {\n        this.mouseScrollTimeStamp = currentTime;\n      }\n    }\n  }\n  #notifyStateChange(state) {\n    this.#state = state;\n    this.eventBus.dispatch(\"presentationmodechanged\", {\n      source: this,\n      state\n    });\n  }\n  #enter() {\n    this.#notifyStateChange(PresentationModeState.FULLSCREEN);\n    this.container.classList.add(ACTIVE_SELECTOR);\n    setTimeout(() => {\n      this.pdfViewer.scrollMode = ScrollMode.PAGE;\n      if (this.#args.spreadMode !== null) {\n        this.pdfViewer.spreadMode = SpreadMode.NONE;\n      }\n      this.pdfViewer.currentPageNumber = this.#args.pageNumber;\n      this.pdfViewer.currentScaleValue = \"page-fit\";\n      if (this.#args.annotationEditorMode !== null) {\n        this.pdfViewer.annotationEditorMode = {\n          mode: AnnotationEditorType.NONE\n        };\n      }\n    }, 0);\n    this.#addWindowListeners();\n    this.#showControls();\n    this.contextMenuOpen = false;\n    document.getSelection().empty();\n  }\n  #exit() {\n    const pageNumber = this.pdfViewer.currentPageNumber;\n    this.container.classList.remove(ACTIVE_SELECTOR);\n    setTimeout(() => {\n      this.#removeFullscreenChangeListeners();\n      this.#notifyStateChange(PresentationModeState.NORMAL);\n      this.pdfViewer.scrollMode = this.#args.scrollMode;\n      if (this.#args.spreadMode !== null) {\n        this.pdfViewer.spreadMode = this.#args.spreadMode;\n      }\n      this.pdfViewer.currentScaleValue = this.#args.scaleValue;\n      this.pdfViewer.currentPageNumber = pageNumber;\n      if (this.#args.annotationEditorMode !== null) {\n        this.pdfViewer.annotationEditorMode = {\n          mode: this.#args.annotationEditorMode\n        };\n      }\n      this.#args = null;\n    }, 0);\n    this.#removeWindowListeners();\n    this.#hideControls();\n    this.#resetMouseScrollState();\n    this.contextMenuOpen = false;\n  }\n  #mouseDown(evt) {\n    if (this.contextMenuOpen) {\n      this.contextMenuOpen = false;\n      evt.preventDefault();\n      return;\n    }\n    if (evt.button !== 0) {\n      return;\n    }\n    if (evt.target.href && evt.target.parentNode?.hasAttribute(\"data-internal-link\")) {\n      return;\n    }\n    evt.preventDefault();\n    if (evt.shiftKey) {\n      this.pdfViewer.previousPage();\n    } else {\n      this.pdfViewer.nextPage();\n    }\n  }\n  #contextMenu() {\n    this.contextMenuOpen = true;\n  }\n  #showControls() {\n    if (this.controlsTimeout) {\n      clearTimeout(this.controlsTimeout);\n    } else {\n      this.container.classList.add(CONTROLS_SELECTOR);\n    }\n    this.controlsTimeout = setTimeout(() => {\n      this.container.classList.remove(CONTROLS_SELECTOR);\n      delete this.controlsTimeout;\n    }, DELAY_BEFORE_HIDING_CONTROLS);\n  }\n  #hideControls() {\n    if (!this.controlsTimeout) {\n      return;\n    }\n    clearTimeout(this.controlsTimeout);\n    this.container.classList.remove(CONTROLS_SELECTOR);\n    delete this.controlsTimeout;\n  }\n  #resetMouseScrollState() {\n    this.mouseScrollTimeStamp = 0;\n    this.mouseScrollDelta = 0;\n  }\n  #touchSwipe(evt) {\n    if (!this.active) {\n      return;\n    }\n    if (evt.touches.length > 1) {\n      this.touchSwipeState = null;\n      return;\n    }\n    switch (evt.type) {\n      case \"touchstart\":\n        this.touchSwipeState = {\n          startX: evt.touches[0].pageX,\n          startY: evt.touches[0].pageY,\n          endX: evt.touches[0].pageX,\n          endY: evt.touches[0].pageY\n        };\n        break;\n      case \"touchmove\":\n        if (this.touchSwipeState === null) {\n          return;\n        }\n        this.touchSwipeState.endX = evt.touches[0].pageX;\n        this.touchSwipeState.endY = evt.touches[0].pageY;\n        evt.preventDefault();\n        break;\n      case \"touchend\":\n        if (this.touchSwipeState === null) {\n          return;\n        }\n        let delta = 0;\n        const dx = this.touchSwipeState.endX - this.touchSwipeState.startX;\n        const dy = this.touchSwipeState.endY - this.touchSwipeState.startY;\n        const absAngle = Math.abs(Math.atan2(dy, dx));\n        if (Math.abs(dx) > SWIPE_MIN_DISTANCE_THRESHOLD && (absAngle <= SWIPE_ANGLE_THRESHOLD || absAngle >= Math.PI - SWIPE_ANGLE_THRESHOLD)) {\n          delta = dx;\n        } else if (Math.abs(dy) > SWIPE_MIN_DISTANCE_THRESHOLD && Math.abs(absAngle - Math.PI / 2) <= SWIPE_ANGLE_THRESHOLD) {\n          delta = dy;\n        }\n        if (delta > 0) {\n          this.pdfViewer.previousPage();\n        } else if (delta < 0) {\n          this.pdfViewer.nextPage();\n        }\n        break;\n    }\n  }\n  #addWindowListeners() {\n    if (this.#windowAbortController) {\n      return;\n    }\n    this.#windowAbortController = new AbortController();\n    const {\n      signal\n    } = this.#windowAbortController;\n    const touchSwipeBind = this.#touchSwipe.bind(this);\n    window.addEventListener(\"mousemove\", this.#showControls.bind(this), {\n      signal\n    });\n    window.addEventListener(\"mousedown\", this.#mouseDown.bind(this), {\n      signal\n    });\n    window.addEventListener(\"wheel\", this.#mouseWheel.bind(this), {\n      passive: false,\n      signal\n    });\n    window.addEventListener(\"keydown\", this.#resetMouseScrollState.bind(this), {\n      signal\n    });\n    window.addEventListener(\"contextmenu\", this.#contextMenu.bind(this), {\n      signal\n    });\n    window.addEventListener(\"touchstart\", touchSwipeBind, {\n      signal\n    });\n    window.addEventListener(\"touchmove\", touchSwipeBind, {\n      signal\n    });\n    window.addEventListener(\"touchend\", touchSwipeBind, {\n      signal\n    });\n  }\n  #removeWindowListeners() {\n    this.#windowAbortController?.abort();\n    this.#windowAbortController = null;\n  }\n  #addFullscreenChangeListeners() {\n    if (this.#fullscreenChangeAbortController) {\n      return;\n    }\n    this.#fullscreenChangeAbortController = new AbortController();\n    window.addEventListener(\"fullscreenchange\", () => {\n      if (document.fullscreenElement) {\n        this.#enter();\n      } else {\n        this.#exit();\n      }\n    }, {\n      signal: this.#fullscreenChangeAbortController.signal\n    });\n  }\n  #removeFullscreenChangeListeners() {\n    this.#fullscreenChangeAbortController?.abort();\n    this.#fullscreenChangeAbortController = null;\n  }\n}\n\n;// CONCATENATED MODULE: ./web/xfa_layer_builder.js\n\nclass XfaLayerBuilder {\n  constructor({\n    pdfPage,\n    annotationStorage = null,\n    linkService,\n    xfaHtml = null\n  }) {\n    this.pdfPage = pdfPage;\n    this.annotationStorage = annotationStorage;\n    this.linkService = linkService;\n    this.xfaHtml = xfaHtml;\n    this.div = null;\n    this._cancelled = false;\n  }\n  async render(viewport, intent = \"display\") {\n    if (intent === \"print\") {\n      const parameters = {\n        viewport: viewport.clone({\n          dontFlip: true\n        }),\n        div: this.div,\n        xfaHtml: this.xfaHtml,\n        annotationStorage: this.annotationStorage,\n        linkService: this.linkService,\n        intent\n      };\n      this.div = document.createElement(\"div\");\n      parameters.div = this.div;\n      return XfaLayer.render(parameters);\n    }\n    const xfaHtml = await this.pdfPage.getXfa();\n    if (this._cancelled || !xfaHtml) {\n      return {\n        textDivs: []\n      };\n    }\n    const parameters = {\n      viewport: viewport.clone({\n        dontFlip: true\n      }),\n      div: this.div,\n      xfaHtml,\n      annotationStorage: this.annotationStorage,\n      linkService: this.linkService,\n      intent\n    };\n    if (this.div) {\n      return XfaLayer.update(parameters);\n    }\n    this.div = document.createElement(\"div\");\n    parameters.div = this.div;\n    return XfaLayer.render(parameters);\n  }\n  cancel() {\n    this._cancelled = true;\n  }\n  hide() {\n    if (!this.div) {\n      return;\n    }\n    this.div.hidden = true;\n  }\n}\n\n;// CONCATENATED MODULE: ./web/print_utils.js\n\n\n\nfunction getXfaHtmlForPrinting(printContainer, pdfDocument) {\n  const xfaHtml = pdfDocument.allXfaHtml;\n  const linkService = new SimpleLinkService();\n  const scale = Math.round(PixelsPerInch.PDF_TO_CSS_UNITS * 100) / 100;\n  for (const xfaPage of xfaHtml.children) {\n    const page = document.createElement(\"div\");\n    page.className = \"xfaPrintedPage\";\n    printContainer.append(page);\n    const builder = new XfaLayerBuilder({\n      pdfPage: null,\n      annotationStorage: pdfDocument.annotationStorage,\n      linkService,\n      xfaHtml: xfaPage\n    });\n    const viewport = getXfaPageViewport(xfaPage, {\n      scale\n    });\n    builder.render(viewport, \"print\");\n    page.append(builder.div);\n  }\n}\n\n;// CONCATENATED MODULE: ./web/pdf_print_service.js\n\n\nlet activeService = null;\nlet dialog = null;\nlet overlayManager = null;\nlet viewerApp = {\n  initialized: false\n};\nfunction renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size, printResolution, optionalContentConfigPromise, printAnnotationStoragePromise) {\n  const scratchCanvas = activeService.scratchCanvas;\n  const PRINT_UNITS = printResolution / PixelsPerInch.PDF;\n  scratchCanvas.width = Math.floor(size.width * PRINT_UNITS);\n  scratchCanvas.height = Math.floor(size.height * PRINT_UNITS);\n  const ctx = scratchCanvas.getContext(\"2d\");\n  ctx.save();\n  ctx.fillStyle = \"rgb(255, 255, 255)\";\n  ctx.fillRect(0, 0, scratchCanvas.width, scratchCanvas.height);\n  ctx.restore();\n  return Promise.all([pdfDocument.getPage(pageNumber), printAnnotationStoragePromise]).then(function ([pdfPage, printAnnotationStorage]) {\n    const renderContext = {\n      canvasContext: ctx,\n      transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0],\n      viewport: pdfPage.getViewport({\n        scale: 1,\n        rotation: size.rotation\n      }),\n      intent: \"print\",\n      annotationMode: AnnotationMode.ENABLE_STORAGE,\n      optionalContentConfigPromise,\n      printAnnotationStorage\n    };\n    const renderTask = pdfPage.render(renderContext);\n    return renderTask.promise.catch(reason => {\n      if (!(reason instanceof RenderingCancelledException)) {\n        console.error(reason);\n      }\n      throw reason;\n    });\n  });\n}\nclass PDFPrintService {\n  constructor({\n    pdfDocument,\n    pagesOverview,\n    printContainer,\n    printResolution,\n    printAnnotationStoragePromise = null\n  }) {\n    this.pdfDocument = pdfDocument;\n    this.pagesOverview = pagesOverview;\n    this.printContainer = printContainer;\n    this._printResolution = printResolution || 150;\n    this._optionalContentConfigPromise = pdfDocument.getOptionalContentConfig({\n      intent: \"print\"\n    });\n    this._printAnnotationStoragePromise = printAnnotationStoragePromise || Promise.resolve();\n    this.currentPage = -1;\n    this.scratchCanvas = document.createElement(\"canvas\");\n  }\n  layout() {\n    this.throwIfInactive();\n    const body = document.querySelector(\"body\");\n    body.setAttribute(\"data-pdfjsprinting\", true);\n    const {\n      width,\n      height\n    } = this.pagesOverview[0];\n    const hasEqualPageSizes = this.pagesOverview.every(size => size.width === width && size.height === height);\n    if (!hasEqualPageSizes) {\n      console.warn(\"Not all pages have the same size. The printed result may be incorrect!\");\n    }\n    this.pageStyleSheet = document.createElement(\"style\");\n    this.pageStyleSheet.textContent = `@page { size: ${width}pt ${height}pt;}`;\n    body.append(this.pageStyleSheet);\n  }\n  destroy() {\n    if (activeService !== this) {\n      return;\n    }\n    this.printContainer.textContent = \"\";\n    const body = document.querySelector(\"body\");\n    body.removeAttribute(\"data-pdfjsprinting\");\n    if (this.pageStyleSheet) {\n      this.pageStyleSheet.remove();\n      this.pageStyleSheet = null;\n    }\n    this.scratchCanvas.width = this.scratchCanvas.height = 0;\n    this.scratchCanvas = null;\n    activeService = null;\n    ensureOverlay().then(function () {\n      if (overlayManager.active === dialog) {\n        overlayManager.close(dialog);\n      }\n    });\n  }\n  renderPages() {\n    if (this.pdfDocument.isPureXfa) {\n      getXfaHtmlForPrinting(this.printContainer, this.pdfDocument);\n      return Promise.resolve();\n    }\n    const pageCount = this.pagesOverview.length;\n    const renderNextPage = (resolve, reject) => {\n      this.throwIfInactive();\n      if (++this.currentPage >= pageCount) {\n        renderProgress(pageCount, pageCount);\n        resolve();\n        return;\n      }\n      const index = this.currentPage;\n      renderProgress(index, pageCount);\n      renderPage(this, this.pdfDocument, index + 1, this.pagesOverview[index], this._printResolution, this._optionalContentConfigPromise, this._printAnnotationStoragePromise).then(this.useRenderedPage.bind(this)).then(function () {\n        renderNextPage(resolve, reject);\n      }, reject);\n    };\n    return new Promise(renderNextPage);\n  }\n  useRenderedPage() {\n    this.throwIfInactive();\n    const img = document.createElement(\"img\");\n    const scratchCanvas = this.scratchCanvas;\n    if (\"toBlob\" in scratchCanvas) {\n      scratchCanvas.toBlob(function (blob) {\n        img.src = URL.createObjectURL(blob);\n      });\n    } else {\n      img.src = scratchCanvas.toDataURL();\n    }\n    const wrapper = document.createElement(\"div\");\n    wrapper.className = \"printedPage\";\n    wrapper.append(img);\n    this.printContainer.append(wrapper);\n    return new Promise(function (resolve, reject) {\n      img.onload = resolve;\n      img.onerror = reject;\n    });\n  }\n  performPrint() {\n    this.throwIfInactive();\n    return new Promise(resolve => {\n      setTimeout(() => {\n        if (!this.active) {\n          resolve();\n          return;\n        }\n        print.call(window);\n        setTimeout(resolve, 20);\n      }, 0);\n    });\n  }\n  get active() {\n    return this === activeService;\n  }\n  throwIfInactive() {\n    if (!this.active) {\n      throw new Error(\"This print request was cancelled or completed.\");\n    }\n  }\n}\nconst print = window.print;\nwindow.print = function () {\n  if (activeService) {\n    console.warn(\"Ignored window.print() because of a pending print job.\");\n    return;\n  }\n  ensureOverlay().then(function () {\n    if (activeService) {\n      overlayManager.open(dialog);\n    }\n  });\n  try {\n    dispatchEvent(\"beforeprint\");\n  } finally {\n    if (!activeService) {\n      console.error(\"Expected print service to be initialized.\");\n      ensureOverlay().then(function () {\n        if (overlayManager.active === dialog) {\n          overlayManager.close(dialog);\n        }\n      });\n      return;\n    }\n    const activeServiceOnEntry = activeService;\n    activeService.renderPages().then(function () {\n      return activeServiceOnEntry.performPrint();\n    }).catch(function () {}).then(function () {\n      if (activeServiceOnEntry.active) {\n        abort();\n      }\n    });\n  }\n};\nfunction dispatchEvent(eventType) {\n  const event = new CustomEvent(eventType, {\n    bubbles: false,\n    cancelable: false,\n    detail: \"custom\"\n  });\n  window.dispatchEvent(event);\n}\nfunction abort() {\n  if (activeService) {\n    activeService.destroy();\n    dispatchEvent(\"afterprint\");\n  }\n}\nfunction renderProgress(index, total) {\n  dialog ||= document.getElementById(\"printServiceDialog\");\n  const progress = Math.round(100 * index / total);\n  const progressBar = dialog.querySelector(\"progress\");\n  const progressPerc = dialog.querySelector(\".relative-progress\");\n  progressBar.value = progress;\n  progressPerc.setAttribute(\"data-l10n-args\", JSON.stringify({\n    progress\n  }));\n}\nwindow.addEventListener(\"keydown\", function (event) {\n  if (event.keyCode === 80 && (event.ctrlKey || event.metaKey) && !event.altKey && (!event.shiftKey || window.chrome || window.opera)) {\n    window.print();\n    event.preventDefault();\n    event.stopImmediatePropagation();\n  }\n}, true);\nif (\"onbeforeprint\" in window) {\n  const stopPropagationIfNeeded = function (event) {\n    if (event.detail !== \"custom\") {\n      event.stopImmediatePropagation();\n    }\n  };\n  window.addEventListener(\"beforeprint\", stopPropagationIfNeeded);\n  window.addEventListener(\"afterprint\", stopPropagationIfNeeded);\n}\nlet overlayPromise;\nfunction ensureOverlay() {\n  if (!overlayPromise) {\n    overlayManager = viewerApp.overlayManager;\n    if (!overlayManager) {\n      throw new Error(\"The overlay manager has not yet been initialized.\");\n    }\n    dialog ||= document.getElementById(\"printServiceDialog\");\n    overlayPromise = overlayManager.register(dialog, true);\n    document.getElementById(\"printCancel\").onclick = abort;\n    dialog.addEventListener(\"close\", abort);\n  }\n  return overlayPromise;\n}\nclass PDFPrintServiceFactory {\n  static initGlobals(app) {\n    viewerApp = app;\n  }\n  static get supportsPrinting() {\n    return shadow(this, \"supportsPrinting\", true);\n  }\n  static createPrintService(params) {\n    if (activeService) {\n      throw new Error(\"The print service is created and active.\");\n    }\n    return activeService = new PDFPrintService(params);\n  }\n}\n\n;// CONCATENATED MODULE: ./web/pdf_rendering_queue.js\n\n\nconst CLEANUP_TIMEOUT = 30000;\nclass PDFRenderingQueue {\n  constructor() {\n    this.pdfViewer = null;\n    this.pdfThumbnailViewer = null;\n    this.onIdle = null;\n    this.highestPriorityPage = null;\n    this.idleTimeout = null;\n    this.printing = false;\n    this.isThumbnailViewEnabled = false;\n    Object.defineProperty(this, \"hasViewer\", {\n      value: () => !!this.pdfViewer\n    });\n  }\n  setViewer(pdfViewer) {\n    this.pdfViewer = pdfViewer;\n  }\n  setThumbnailViewer(pdfThumbnailViewer) {\n    this.pdfThumbnailViewer = pdfThumbnailViewer;\n  }\n  isHighestPriority(view) {\n    return this.highestPriorityPage === view.renderingId;\n  }\n  renderHighestPriority(currentlyVisiblePages) {\n    if (this.idleTimeout) {\n      clearTimeout(this.idleTimeout);\n      this.idleTimeout = null;\n    }\n    if (this.pdfViewer.forceRendering(currentlyVisiblePages)) {\n      return;\n    }\n    if (this.isThumbnailViewEnabled && this.pdfThumbnailViewer?.forceRendering()) {\n      return;\n    }\n    if (this.printing) {\n      return;\n    }\n    if (this.onIdle) {\n      this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT);\n    }\n  }\n  getHighestPriority(visible, views, scrolledDown, preRenderExtra = false) {\n    const visibleViews = visible.views,\n      numVisible = visibleViews.length;\n    if (numVisible === 0) {\n      return null;\n    }\n    for (let i = 0; i < numVisible; i++) {\n      const view = visibleViews[i].view;\n      if (!this.isViewFinished(view)) {\n        return view;\n      }\n    }\n    const firstId = visible.first.id,\n      lastId = visible.last.id;\n    if (lastId - firstId + 1 > numVisible) {\n      const visibleIds = visible.ids;\n      for (let i = 1, ii = lastId - firstId; i < ii; i++) {\n        const holeId = scrolledDown ? firstId + i : lastId - i;\n        if (visibleIds.has(holeId)) {\n          continue;\n        }\n        const holeView = views[holeId - 1];\n        if (!this.isViewFinished(holeView)) {\n          return holeView;\n        }\n      }\n    }\n    let preRenderIndex = scrolledDown ? lastId : firstId - 2;\n    let preRenderView = views[preRenderIndex];\n    if (preRenderView && !this.isViewFinished(preRenderView)) {\n      return preRenderView;\n    }\n    if (preRenderExtra) {\n      preRenderIndex += scrolledDown ? 1 : -1;\n      preRenderView = views[preRenderIndex];\n      if (preRenderView && !this.isViewFinished(preRenderView)) {\n        return preRenderView;\n      }\n    }\n    return null;\n  }\n  isViewFinished(view) {\n    return view.renderingState === RenderingStates.FINISHED;\n  }\n  renderView(view) {\n    switch (view.renderingState) {\n      case RenderingStates.FINISHED:\n        return false;\n      case RenderingStates.PAUSED:\n        this.highestPriorityPage = view.renderingId;\n        view.resume();\n        break;\n      case RenderingStates.RUNNING:\n        this.highestPriorityPage = view.renderingId;\n        break;\n      case RenderingStates.INITIAL:\n        this.highestPriorityPage = view.renderingId;\n        view.draw().finally(() => {\n          this.renderHighestPriority();\n        }).catch(reason => {\n          if (reason instanceof RenderingCancelledException) {\n            return;\n          }\n          console.error(`renderView: \"${reason}\"`);\n        });\n        break;\n    }\n    return true;\n  }\n}\n\n;// CONCATENATED MODULE: ./web/pdf_scripting_manager.js\n\n\nclass PDFScriptingManager {\n  #closeCapability = null;\n  #destroyCapability = null;\n  #docProperties = null;\n  #eventAbortController = null;\n  #eventBus = null;\n  #externalServices = null;\n  #pdfDocument = null;\n  #pdfViewer = null;\n  #ready = false;\n  #scripting = null;\n  #willPrintCapability = null;\n  constructor({\n    eventBus,\n    externalServices = null,\n    docProperties = null\n  }) {\n    this.#eventBus = eventBus;\n    this.#externalServices = externalServices;\n    this.#docProperties = docProperties;\n  }\n  setViewer(pdfViewer) {\n    this.#pdfViewer = pdfViewer;\n  }\n  async setDocument(pdfDocument) {\n    if (this.#pdfDocument) {\n      await this.#destroyScripting();\n    }\n    this.#pdfDocument = pdfDocument;\n    if (!pdfDocument) {\n      return;\n    }\n    const [objects, calculationOrder, docActions] = await Promise.all([pdfDocument.getFieldObjects(), pdfDocument.getCalculationOrderIds(), pdfDocument.getJSActions()]);\n    if (!objects && !docActions) {\n      await this.#destroyScripting();\n      return;\n    }\n    if (pdfDocument !== this.#pdfDocument) {\n      return;\n    }\n    try {\n      this.#scripting = this.#initScripting();\n    } catch (error) {\n      console.error(`setDocument: \"${error.message}\".`);\n      await this.#destroyScripting();\n      return;\n    }\n    const eventBus = this.#eventBus;\n    this.#eventAbortController = new AbortController();\n    const {\n      signal\n    } = this.#eventAbortController;\n    eventBus._on(\"updatefromsandbox\", event => {\n      if (event?.source === window) {\n        this.#updateFromSandbox(event.detail);\n      }\n    }, {\n      signal\n    });\n    eventBus._on(\"dispatcheventinsandbox\", event => {\n      this.#scripting?.dispatchEventInSandbox(event.detail);\n    }, {\n      signal\n    });\n    eventBus._on(\"pagechanging\", ({\n      pageNumber,\n      previous\n    }) => {\n      if (pageNumber === previous) {\n        return;\n      }\n      this.#dispatchPageClose(previous);\n      this.#dispatchPageOpen(pageNumber);\n    }, {\n      signal\n    });\n    eventBus._on(\"pagerendered\", ({\n      pageNumber\n    }) => {\n      if (!this._pageOpenPending.has(pageNumber)) {\n        return;\n      }\n      if (pageNumber !== this.#pdfViewer.currentPageNumber) {\n        return;\n      }\n      this.#dispatchPageOpen(pageNumber);\n    }, {\n      signal\n    });\n    eventBus._on(\"pagesdestroy\", async () => {\n      await this.#dispatchPageClose(this.#pdfViewer.currentPageNumber);\n      await this.#scripting?.dispatchEventInSandbox({\n        id: \"doc\",\n        name: \"WillClose\"\n      });\n      this.#closeCapability?.resolve();\n    }, {\n      signal\n    });\n    try {\n      const docProperties = await this.#docProperties(pdfDocument);\n      if (pdfDocument !== this.#pdfDocument) {\n        return;\n      }\n      await this.#scripting.createSandbox({\n        objects,\n        calculationOrder,\n        appInfo: {\n          platform: navigator.platform,\n          language: navigator.language\n        },\n        docInfo: {\n          ...docProperties,\n          actions: docActions\n        }\n      });\n      eventBus.dispatch(\"sandboxcreated\", {\n        source: this\n      });\n    } catch (error) {\n      console.error(`setDocument: \"${error.message}\".`);\n      await this.#destroyScripting();\n      return;\n    }\n    await this.#scripting?.dispatchEventInSandbox({\n      id: \"doc\",\n      name: \"Open\"\n    });\n    await this.#dispatchPageOpen(this.#pdfViewer.currentPageNumber, true);\n    Promise.resolve().then(() => {\n      if (pdfDocument === this.#pdfDocument) {\n        this.#ready = true;\n      }\n    });\n  }\n  async dispatchWillSave() {\n    return this.#scripting?.dispatchEventInSandbox({\n      id: \"doc\",\n      name: \"WillSave\"\n    });\n  }\n  async dispatchDidSave() {\n    return this.#scripting?.dispatchEventInSandbox({\n      id: \"doc\",\n      name: \"DidSave\"\n    });\n  }\n  async dispatchWillPrint() {\n    if (!this.#scripting) {\n      return;\n    }\n    await this.#willPrintCapability?.promise;\n    this.#willPrintCapability = Promise.withResolvers();\n    try {\n      await this.#scripting.dispatchEventInSandbox({\n        id: \"doc\",\n        name: \"WillPrint\"\n      });\n    } catch (ex) {\n      this.#willPrintCapability.resolve();\n      this.#willPrintCapability = null;\n      throw ex;\n    }\n    await this.#willPrintCapability.promise;\n  }\n  async dispatchDidPrint() {\n    return this.#scripting?.dispatchEventInSandbox({\n      id: \"doc\",\n      name: \"DidPrint\"\n    });\n  }\n  get destroyPromise() {\n    return this.#destroyCapability?.promise || null;\n  }\n  get ready() {\n    return this.#ready;\n  }\n  get _pageOpenPending() {\n    return shadow(this, \"_pageOpenPending\", new Set());\n  }\n  get _visitedPages() {\n    return shadow(this, \"_visitedPages\", new Map());\n  }\n  async #updateFromSandbox(detail) {\n    const pdfViewer = this.#pdfViewer;\n    const isInPresentationMode = pdfViewer.isInPresentationMode || pdfViewer.isChangingPresentationMode;\n    const {\n      id,\n      siblings,\n      command,\n      value\n    } = detail;\n    if (!id) {\n      switch (command) {\n        case \"clear\":\n          console.clear();\n          break;\n        case \"error\":\n          console.error(value);\n          break;\n        case \"layout\":\n          if (!isInPresentationMode) {\n            const modes = apiPageLayoutToViewerModes(value);\n            pdfViewer.spreadMode = modes.spreadMode;\n          }\n          break;\n        case \"page-num\":\n          pdfViewer.currentPageNumber = value + 1;\n          break;\n        case \"print\":\n          await pdfViewer.pagesPromise;\n          this.#eventBus.dispatch(\"print\", {\n            source: this\n          });\n          break;\n        case \"println\":\n          console.log(value);\n          break;\n        case \"zoom\":\n          if (!isInPresentationMode) {\n            pdfViewer.currentScaleValue = value;\n          }\n          break;\n        case \"SaveAs\":\n          this.#eventBus.dispatch(\"download\", {\n            source: this\n          });\n          break;\n        case \"FirstPage\":\n          pdfViewer.currentPageNumber = 1;\n          break;\n        case \"LastPage\":\n          pdfViewer.currentPageNumber = pdfViewer.pagesCount;\n          break;\n        case \"NextPage\":\n          pdfViewer.nextPage();\n          break;\n        case \"PrevPage\":\n          pdfViewer.previousPage();\n          break;\n        case \"ZoomViewIn\":\n          if (!isInPresentationMode) {\n            pdfViewer.increaseScale();\n          }\n          break;\n        case \"ZoomViewOut\":\n          if (!isInPresentationMode) {\n            pdfViewer.decreaseScale();\n          }\n          break;\n        case \"WillPrintFinished\":\n          this.#willPrintCapability?.resolve();\n          this.#willPrintCapability = null;\n          break;\n      }\n      return;\n    }\n    if (isInPresentationMode && detail.focus) {\n      return;\n    }\n    delete detail.id;\n    delete detail.siblings;\n    const ids = siblings ? [id, ...siblings] : [id];\n    for (const elementId of ids) {\n      const element = document.querySelector(`[data-element-id=\"${elementId}\"]`);\n      if (element) {\n        element.dispatchEvent(new CustomEvent(\"updatefromsandbox\", {\n          detail\n        }));\n      } else {\n        this.#pdfDocument?.annotationStorage.setValue(elementId, detail);\n      }\n    }\n  }\n  async #dispatchPageOpen(pageNumber, initialize = false) {\n    const pdfDocument = this.#pdfDocument,\n      visitedPages = this._visitedPages;\n    if (initialize) {\n      this.#closeCapability = Promise.withResolvers();\n    }\n    if (!this.#closeCapability) {\n      return;\n    }\n    const pageView = this.#pdfViewer.getPageView(pageNumber - 1);\n    if (pageView?.renderingState !== RenderingStates.FINISHED) {\n      this._pageOpenPending.add(pageNumber);\n      return;\n    }\n    this._pageOpenPending.delete(pageNumber);\n    const actionsPromise = (async () => {\n      const actions = await (!visitedPages.has(pageNumber) ? pageView.pdfPage?.getJSActions() : null);\n      if (pdfDocument !== this.#pdfDocument) {\n        return;\n      }\n      await this.#scripting?.dispatchEventInSandbox({\n        id: \"page\",\n        name: \"PageOpen\",\n        pageNumber,\n        actions\n      });\n    })();\n    visitedPages.set(pageNumber, actionsPromise);\n  }\n  async #dispatchPageClose(pageNumber) {\n    const pdfDocument = this.#pdfDocument,\n      visitedPages = this._visitedPages;\n    if (!this.#closeCapability) {\n      return;\n    }\n    if (this._pageOpenPending.has(pageNumber)) {\n      return;\n    }\n    const actionsPromise = visitedPages.get(pageNumber);\n    if (!actionsPromise) {\n      return;\n    }\n    visitedPages.set(pageNumber, null);\n    await actionsPromise;\n    if (pdfDocument !== this.#pdfDocument) {\n      return;\n    }\n    await this.#scripting?.dispatchEventInSandbox({\n      id: \"page\",\n      name: \"PageClose\",\n      pageNumber\n    });\n  }\n  #initScripting() {\n    this.#destroyCapability = Promise.withResolvers();\n    if (this.#scripting) {\n      throw new Error(\"#initScripting: Scripting already exists.\");\n    }\n    return this.#externalServices.createScripting();\n  }\n  async #destroyScripting() {\n    if (!this.#scripting) {\n      this.#pdfDocument = null;\n      this.#destroyCapability?.resolve();\n      return;\n    }\n    if (this.#closeCapability) {\n      await Promise.race([this.#closeCapability.promise, new Promise(resolve => {\n        setTimeout(resolve, 1000);\n      })]).catch(() => {});\n      this.#closeCapability = null;\n    }\n    this.#pdfDocument = null;\n    try {\n      await this.#scripting.destroySandbox();\n    } catch {}\n    this.#willPrintCapability?.reject(new Error(\"Scripting destroyed.\"));\n    this.#willPrintCapability = null;\n    this.#eventAbortController?.abort();\n    this.#eventAbortController = null;\n    this._pageOpenPending.clear();\n    this._visitedPages.clear();\n    this.#scripting = null;\n    this.#ready = false;\n    this.#destroyCapability?.resolve();\n  }\n}\n\n;// CONCATENATED MODULE: ./web/pdf_sidebar.js\n\nconst SIDEBAR_WIDTH_VAR = \"--sidebar-width\";\nconst SIDEBAR_MIN_WIDTH = 200;\nconst SIDEBAR_RESIZING_CLASS = \"sidebarResizing\";\nconst UI_NOTIFICATION_CLASS = \"pdfSidebarNotification\";\nclass PDFSidebar {\n  #isRTL = false;\n  #mouseMoveBound = this.#mouseMove.bind(this);\n  #mouseUpBound = this.#mouseUp.bind(this);\n  #outerContainerWidth = null;\n  #width = null;\n  constructor({\n    elements,\n    eventBus,\n    l10n\n  }) {\n    this.isOpen = false;\n    this.active = SidebarView.THUMBS;\n    this.isInitialViewSet = false;\n    this.isInitialEventDispatched = false;\n    this.onToggled = null;\n    this.onUpdateThumbnails = null;\n    this.outerContainer = elements.outerContainer;\n    this.sidebarContainer = elements.sidebarContainer;\n    this.toggleButton = elements.toggleButton;\n    this.resizer = elements.resizer;\n    this.thumbnailButton = elements.thumbnailButton;\n    this.outlineButton = elements.outlineButton;\n    this.attachmentsButton = elements.attachmentsButton;\n    this.layersButton = elements.layersButton;\n    this.thumbnailView = elements.thumbnailView;\n    this.outlineView = elements.outlineView;\n    this.attachmentsView = elements.attachmentsView;\n    this.layersView = elements.layersView;\n    this._currentOutlineItemButton = elements.currentOutlineItemButton;\n    this.eventBus = eventBus;\n    this.#isRTL = l10n.getDirection() === \"rtl\";\n    this.#addEventListeners();\n  }\n  reset() {\n    this.isInitialViewSet = false;\n    this.isInitialEventDispatched = false;\n    this.#hideUINotification(true);\n    this.switchView(SidebarView.THUMBS);\n    this.outlineButton.disabled = false;\n    this.attachmentsButton.disabled = false;\n    this.layersButton.disabled = false;\n    this._currentOutlineItemButton.disabled = true;\n  }\n  get visibleView() {\n    return this.isOpen ? this.active : SidebarView.NONE;\n  }\n  setInitialView(view = SidebarView.NONE) {\n    if (this.isInitialViewSet) {\n      return;\n    }\n    this.isInitialViewSet = true;\n    if (view === SidebarView.NONE || view === SidebarView.UNKNOWN) {\n      this.#dispatchEvent();\n      return;\n    }\n    this.switchView(view, true);\n    if (!this.isInitialEventDispatched) {\n      this.#dispatchEvent();\n    }\n  }\n  switchView(view, forceOpen = false) {\n    const isViewChanged = view !== this.active;\n    let forceRendering = false;\n    switch (view) {\n      case SidebarView.NONE:\n        if (this.isOpen) {\n          this.close();\n        }\n        return;\n      case SidebarView.THUMBS:\n        if (this.isOpen && isViewChanged) {\n          forceRendering = true;\n        }\n        break;\n      case SidebarView.OUTLINE:\n        if (this.outlineButton.disabled) {\n          return;\n        }\n        break;\n      case SidebarView.ATTACHMENTS:\n        if (this.attachmentsButton.disabled) {\n          return;\n        }\n        break;\n      case SidebarView.LAYERS:\n        if (this.layersButton.disabled) {\n          return;\n        }\n        break;\n      default:\n        console.error(`PDFSidebar.switchView: \"${view}\" is not a valid view.`);\n        return;\n    }\n    this.active = view;\n    toggleCheckedBtn(this.thumbnailButton, view === SidebarView.THUMBS, this.thumbnailView);\n    toggleCheckedBtn(this.outlineButton, view === SidebarView.OUTLINE, this.outlineView);\n    toggleCheckedBtn(this.attachmentsButton, view === SidebarView.ATTACHMENTS, this.attachmentsView);\n    toggleCheckedBtn(this.layersButton, view === SidebarView.LAYERS, this.layersView);\n    if (forceOpen && !this.isOpen) {\n      this.open();\n      return;\n    }\n    if (forceRendering) {\n      this.onUpdateThumbnails();\n      this.onToggled();\n    }\n    if (isViewChanged) {\n      this.#dispatchEvent();\n    }\n  }\n  open() {\n    if (this.isOpen) {\n      return;\n    }\n    this.isOpen = true;\n    toggleExpandedBtn(this.toggleButton, true);\n    this.outerContainer.classList.add(\"sidebarMoving\", \"sidebarOpen\");\n    if (this.active === SidebarView.THUMBS) {\n      this.onUpdateThumbnails();\n    }\n    this.onToggled();\n    this.#dispatchEvent();\n    this.#hideUINotification();\n  }\n  close(evt = null) {\n    if (!this.isOpen) {\n      return;\n    }\n    this.isOpen = false;\n    toggleExpandedBtn(this.toggleButton, false);\n    this.outerContainer.classList.add(\"sidebarMoving\");\n    this.outerContainer.classList.remove(\"sidebarOpen\");\n    this.onToggled();\n    this.#dispatchEvent();\n    if (evt?.detail > 0) {\n      this.toggleButton.blur();\n    }\n  }\n  toggle(evt = null) {\n    if (this.isOpen) {\n      this.close(evt);\n    } else {\n      this.open();\n    }\n  }\n  #dispatchEvent() {\n    if (this.isInitialViewSet) {\n      this.isInitialEventDispatched ||= true;\n    }\n    this.eventBus.dispatch(\"sidebarviewchanged\", {\n      source: this,\n      view: this.visibleView\n    });\n  }\n  #showUINotification() {\n    this.toggleButton.setAttribute(\"data-l10n-id\", \"pdfjs-toggle-sidebar-notification-button\");\n    if (!this.isOpen) {\n      this.toggleButton.classList.add(UI_NOTIFICATION_CLASS);\n    }\n  }\n  #hideUINotification(reset = false) {\n    if (this.isOpen || reset) {\n      this.toggleButton.classList.remove(UI_NOTIFICATION_CLASS);\n    }\n    if (reset) {\n      this.toggleButton.setAttribute(\"data-l10n-id\", \"pdfjs-toggle-sidebar-button\");\n    }\n  }\n  #addEventListeners() {\n    this.sidebarContainer.addEventListener(\"transitionend\", evt => {\n      if (evt.target === this.sidebarContainer) {\n        this.outerContainer.classList.remove(\"sidebarMoving\");\n        this.eventBus.dispatch(\"resize\", {\n          source: this\n        });\n      }\n    });\n    this.toggleButton.addEventListener(\"click\", evt => {\n      this.toggle(evt);\n    });\n    this.thumbnailButton.addEventListener(\"click\", () => {\n      this.switchView(SidebarView.THUMBS);\n    });\n    this.outlineButton.addEventListener(\"click\", () => {\n      this.switchView(SidebarView.OUTLINE);\n    });\n    this.outlineButton.addEventListener(\"dblclick\", () => {\n      this.eventBus.dispatch(\"toggleoutlinetree\", {\n        source: this\n      });\n    });\n    this.attachmentsButton.addEventListener(\"click\", () => {\n      this.switchView(SidebarView.ATTACHMENTS);\n    });\n    this.layersButton.addEventListener(\"click\", () => {\n      this.switchView(SidebarView.LAYERS);\n    });\n    this.layersButton.addEventListener(\"dblclick\", () => {\n      this.eventBus.dispatch(\"resetlayers\", {\n        source: this\n      });\n    });\n    this._currentOutlineItemButton.addEventListener(\"click\", () => {\n      this.eventBus.dispatch(\"currentoutlineitem\", {\n        source: this\n      });\n    });\n    const onTreeLoaded = (count, button, view) => {\n      button.disabled = !count;\n      if (count) {\n        this.#showUINotification();\n      } else if (this.active === view) {\n        this.switchView(SidebarView.THUMBS);\n      }\n    };\n    this.eventBus._on(\"outlineloaded\", evt => {\n      onTreeLoaded(evt.outlineCount, this.outlineButton, SidebarView.OUTLINE);\n      evt.currentOutlineItemPromise.then(enabled => {\n        if (!this.isInitialViewSet) {\n          return;\n        }\n        this._currentOutlineItemButton.disabled = !enabled;\n      });\n    });\n    this.eventBus._on(\"attachmentsloaded\", evt => {\n      onTreeLoaded(evt.attachmentsCount, this.attachmentsButton, SidebarView.ATTACHMENTS);\n    });\n    this.eventBus._on(\"layersloaded\", evt => {\n      onTreeLoaded(evt.layersCount, this.layersButton, SidebarView.LAYERS);\n    });\n    this.eventBus._on(\"presentationmodechanged\", evt => {\n      if (evt.state === PresentationModeState.NORMAL && this.visibleView === SidebarView.THUMBS) {\n        this.onUpdateThumbnails();\n      }\n    });\n    this.resizer.addEventListener(\"mousedown\", evt => {\n      if (evt.button !== 0) {\n        return;\n      }\n      this.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS);\n      window.addEventListener(\"mousemove\", this.#mouseMoveBound);\n      window.addEventListener(\"mouseup\", this.#mouseUpBound);\n    });\n    this.eventBus._on(\"resize\", evt => {\n      if (evt.source !== window) {\n        return;\n      }\n      this.#outerContainerWidth = null;\n      if (!this.#width) {\n        return;\n      }\n      if (!this.isOpen) {\n        this.#updateWidth(this.#width);\n        return;\n      }\n      this.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS);\n      const updated = this.#updateWidth(this.#width);\n      Promise.resolve().then(() => {\n        this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS);\n        if (updated) {\n          this.eventBus.dispatch(\"resize\", {\n            source: this\n          });\n        }\n      });\n    });\n  }\n  get outerContainerWidth() {\n    return this.#outerContainerWidth ||= this.outerContainer.clientWidth;\n  }\n  #updateWidth(width = 0) {\n    const maxWidth = Math.floor(this.outerContainerWidth / 2);\n    if (width > maxWidth) {\n      width = maxWidth;\n    }\n    if (width < SIDEBAR_MIN_WIDTH) {\n      width = SIDEBAR_MIN_WIDTH;\n    }\n    if (width === this.#width) {\n      return false;\n    }\n    this.#width = width;\n    docStyle.setProperty(SIDEBAR_WIDTH_VAR, `${width}px`);\n    return true;\n  }\n  #mouseMove(evt) {\n    let width = evt.clientX;\n    if (this.#isRTL) {\n      width = this.outerContainerWidth - width;\n    }\n    this.#updateWidth(width);\n  }\n  #mouseUp(evt) {\n    this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS);\n    this.eventBus.dispatch(\"resize\", {\n      source: this\n    });\n    window.removeEventListener(\"mousemove\", this.#mouseMoveBound);\n    window.removeEventListener(\"mouseup\", this.#mouseUpBound);\n  }\n}\n\n;// CONCATENATED MODULE: ./web/pdf_thumbnail_view.js\n\n\nconst DRAW_UPSCALE_FACTOR = 2;\nconst MAX_NUM_SCALING_STEPS = 3;\nconst THUMBNAIL_WIDTH = 98;\nclass TempImageFactory {\n  static #tempCanvas = null;\n  static getCanvas(width, height) {\n    const tempCanvas = this.#tempCanvas ||= document.createElement(\"canvas\");\n    tempCanvas.width = width;\n    tempCanvas.height = height;\n    const ctx = tempCanvas.getContext(\"2d\", {\n      alpha: false\n    });\n    ctx.save();\n    ctx.fillStyle = \"rgb(255, 255, 255)\";\n    ctx.fillRect(0, 0, width, height);\n    ctx.restore();\n    return [tempCanvas, tempCanvas.getContext(\"2d\")];\n  }\n  static destroyCanvas() {\n    const tempCanvas = this.#tempCanvas;\n    if (tempCanvas) {\n      tempCanvas.width = 0;\n      tempCanvas.height = 0;\n    }\n    this.#tempCanvas = null;\n  }\n}\nclass PDFThumbnailView {\n  constructor({\n    container,\n    eventBus,\n    id,\n    defaultViewport,\n    optionalContentConfigPromise,\n    linkService,\n    renderingQueue,\n    pageColors\n  }) {\n    this.id = id;\n    this.renderingId = \"thumbnail\" + id;\n    this.pageLabel = null;\n    this.pdfPage = null;\n    this.rotation = 0;\n    this.viewport = defaultViewport;\n    this.pdfPageRotate = defaultViewport.rotation;\n    this._optionalContentConfigPromise = optionalContentConfigPromise || null;\n    this.pageColors = pageColors || null;\n    this.eventBus = eventBus;\n    this.linkService = linkService;\n    this.renderingQueue = renderingQueue;\n    this.renderTask = null;\n    this.renderingState = RenderingStates.INITIAL;\n    this.resume = null;\n    const anchor = document.createElement(\"a\");\n    anchor.href = linkService.getAnchorUrl(\"#page=\" + id);\n    anchor.setAttribute(\"data-l10n-id\", \"pdfjs-thumb-page-title\");\n    anchor.setAttribute(\"data-l10n-args\", this.#pageL10nArgs);\n    anchor.onclick = function () {\n      linkService.goToPage(id);\n      return false;\n    };\n    this.anchor = anchor;\n    const div = document.createElement(\"div\");\n    div.className = \"thumbnail\";\n    div.setAttribute(\"data-page-number\", this.id);\n    this.div = div;\n    this.#updateDims();\n    const img = document.createElement(\"div\");\n    img.className = \"thumbnailImage\";\n    this._placeholderImg = img;\n    div.append(img);\n    anchor.append(div);\n    container.append(anchor);\n  }\n  #updateDims() {\n    const {\n      width,\n      height\n    } = this.viewport;\n    const ratio = width / height;\n    this.canvasWidth = THUMBNAIL_WIDTH;\n    this.canvasHeight = this.canvasWidth / ratio | 0;\n    this.scale = this.canvasWidth / width;\n    const {\n      style\n    } = this.div;\n    style.setProperty(\"--thumbnail-width\", `${this.canvasWidth}px`);\n    style.setProperty(\"--thumbnail-height\", `${this.canvasHeight}px`);\n  }\n  setPdfPage(pdfPage) {\n    this.pdfPage = pdfPage;\n    this.pdfPageRotate = pdfPage.rotate;\n    const totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n    this.viewport = pdfPage.getViewport({\n      scale: 1,\n      rotation: totalRotation\n    });\n    this.reset();\n  }\n  reset() {\n    this.cancelRendering();\n    this.renderingState = RenderingStates.INITIAL;\n    this.div.removeAttribute(\"data-loaded\");\n    this.image?.replaceWith(this._placeholderImg);\n    this.#updateDims();\n    if (this.image) {\n      this.image.removeAttribute(\"src\");\n      delete this.image;\n    }\n  }\n  update({\n    rotation = null\n  }) {\n    if (typeof rotation === \"number\") {\n      this.rotation = rotation;\n    }\n    const totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n    this.viewport = this.viewport.clone({\n      scale: 1,\n      rotation: totalRotation\n    });\n    this.reset();\n  }\n  cancelRendering() {\n    if (this.renderTask) {\n      this.renderTask.cancel();\n      this.renderTask = null;\n    }\n    this.resume = null;\n  }\n  #getPageDrawContext(upscaleFactor = 1) {\n    const canvas = document.createElement(\"canvas\");\n    const ctx = canvas.getContext(\"2d\", {\n      alpha: false\n    });\n    const outputScale = new OutputScale();\n    canvas.width = upscaleFactor * this.canvasWidth * outputScale.sx | 0;\n    canvas.height = upscaleFactor * this.canvasHeight * outputScale.sy | 0;\n    const transform = outputScale.scaled ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0] : null;\n    return {\n      ctx,\n      canvas,\n      transform\n    };\n  }\n  #convertCanvasToImage(canvas) {\n    if (this.renderingState !== RenderingStates.FINISHED) {\n      throw new Error(\"#convertCanvasToImage: Rendering has not finished.\");\n    }\n    const reducedCanvas = this.#reduceImage(canvas);\n    const image = document.createElement(\"img\");\n    image.className = \"thumbnailImage\";\n    image.setAttribute(\"data-l10n-id\", \"pdfjs-thumb-page-canvas\");\n    image.setAttribute(\"data-l10n-args\", this.#pageL10nArgs);\n    image.src = reducedCanvas.toDataURL();\n    this.image = image;\n    this.div.setAttribute(\"data-loaded\", true);\n    this._placeholderImg.replaceWith(image);\n    reducedCanvas.width = 0;\n    reducedCanvas.height = 0;\n  }\n  async #finishRenderTask(renderTask, canvas, error = null) {\n    if (renderTask === this.renderTask) {\n      this.renderTask = null;\n    }\n    if (error instanceof RenderingCancelledException) {\n      return;\n    }\n    this.renderingState = RenderingStates.FINISHED;\n    this.#convertCanvasToImage(canvas);\n    if (error) {\n      throw error;\n    }\n  }\n  async draw() {\n    if (this.renderingState !== RenderingStates.INITIAL) {\n      console.error(\"Must be in new state before drawing\");\n      return undefined;\n    }\n    const {\n      pdfPage\n    } = this;\n    if (!pdfPage) {\n      this.renderingState = RenderingStates.FINISHED;\n      throw new Error(\"pdfPage is not loaded\");\n    }\n    this.renderingState = RenderingStates.RUNNING;\n    const {\n      ctx,\n      canvas,\n      transform\n    } = this.#getPageDrawContext(DRAW_UPSCALE_FACTOR);\n    const drawViewport = this.viewport.clone({\n      scale: DRAW_UPSCALE_FACTOR * this.scale\n    });\n    const renderContinueCallback = cont => {\n      if (!this.renderingQueue.isHighestPriority(this)) {\n        this.renderingState = RenderingStates.PAUSED;\n        this.resume = () => {\n          this.renderingState = RenderingStates.RUNNING;\n          cont();\n        };\n        return;\n      }\n      cont();\n    };\n    const renderContext = {\n      canvasContext: ctx,\n      transform,\n      viewport: drawViewport,\n      optionalContentConfigPromise: this._optionalContentConfigPromise,\n      pageColors: this.pageColors\n    };\n    const renderTask = this.renderTask = pdfPage.render(renderContext);\n    renderTask.onContinue = renderContinueCallback;\n    const resultPromise = renderTask.promise.then(() => this.#finishRenderTask(renderTask, canvas), error => this.#finishRenderTask(renderTask, canvas, error));\n    resultPromise.finally(() => {\n      canvas.width = 0;\n      canvas.height = 0;\n      this.eventBus.dispatch(\"thumbnailrendered\", {\n        source: this,\n        pageNumber: this.id,\n        pdfPage: this.pdfPage\n      });\n    });\n    return resultPromise;\n  }\n  setImage(pageView) {\n    if (this.renderingState !== RenderingStates.INITIAL) {\n      return;\n    }\n    const {\n      thumbnailCanvas: canvas,\n      pdfPage,\n      scale\n    } = pageView;\n    if (!canvas) {\n      return;\n    }\n    if (!this.pdfPage) {\n      this.setPdfPage(pdfPage);\n    }\n    if (scale < this.scale) {\n      return;\n    }\n    this.renderingState = RenderingStates.FINISHED;\n    this.#convertCanvasToImage(canvas);\n  }\n  #reduceImage(img) {\n    const {\n      ctx,\n      canvas\n    } = this.#getPageDrawContext();\n    if (img.width <= 2 * canvas.width) {\n      ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height);\n      return canvas;\n    }\n    let reducedWidth = canvas.width << MAX_NUM_SCALING_STEPS;\n    let reducedHeight = canvas.height << MAX_NUM_SCALING_STEPS;\n    const [reducedImage, reducedImageCtx] = TempImageFactory.getCanvas(reducedWidth, reducedHeight);\n    while (reducedWidth > img.width || reducedHeight > img.height) {\n      reducedWidth >>= 1;\n      reducedHeight >>= 1;\n    }\n    reducedImageCtx.drawImage(img, 0, 0, img.width, img.height, 0, 0, reducedWidth, reducedHeight);\n    while (reducedWidth > 2 * canvas.width) {\n      reducedImageCtx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, reducedWidth >> 1, reducedHeight >> 1);\n      reducedWidth >>= 1;\n      reducedHeight >>= 1;\n    }\n    ctx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, canvas.width, canvas.height);\n    return canvas;\n  }\n  get #pageL10nArgs() {\n    return JSON.stringify({\n      page: this.pageLabel ?? this.id\n    });\n  }\n  setPageLabel(label) {\n    this.pageLabel = typeof label === \"string\" ? label : null;\n    this.anchor.setAttribute(\"data-l10n-args\", this.#pageL10nArgs);\n    if (this.renderingState !== RenderingStates.FINISHED) {\n      return;\n    }\n    this.image?.setAttribute(\"data-l10n-args\", this.#pageL10nArgs);\n  }\n}\n\n;// CONCATENATED MODULE: ./web/pdf_thumbnail_viewer.js\n\n\nconst THUMBNAIL_SCROLL_MARGIN = -19;\nconst THUMBNAIL_SELECTED_CLASS = \"selected\";\nclass PDFThumbnailViewer {\n  constructor({\n    container,\n    eventBus,\n    linkService,\n    renderingQueue,\n    pageColors\n  }) {\n    this.container = container;\n    this.eventBus = eventBus;\n    this.linkService = linkService;\n    this.renderingQueue = renderingQueue;\n    this.pageColors = pageColors || null;\n    this.scroll = watchScroll(this.container, this.#scrollUpdated.bind(this));\n    this.#resetView();\n  }\n  #scrollUpdated() {\n    this.renderingQueue.renderHighestPriority();\n  }\n  getThumbnail(index) {\n    return this._thumbnails[index];\n  }\n  #getVisibleThumbs() {\n    return getVisibleElements({\n      scrollEl: this.container,\n      views: this._thumbnails\n    });\n  }\n  scrollThumbnailIntoView(pageNumber) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    const thumbnailView = this._thumbnails[pageNumber - 1];\n    if (!thumbnailView) {\n      console.error('scrollThumbnailIntoView: Invalid \"pageNumber\" parameter.');\n      return;\n    }\n    if (pageNumber !== this._currentPageNumber) {\n      const prevThumbnailView = this._thumbnails[this._currentPageNumber - 1];\n      prevThumbnailView.div.classList.remove(THUMBNAIL_SELECTED_CLASS);\n      thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS);\n    }\n    const {\n      first,\n      last,\n      views\n    } = this.#getVisibleThumbs();\n    if (views.length > 0) {\n      let shouldScroll = false;\n      if (pageNumber <= first.id || pageNumber >= last.id) {\n        shouldScroll = true;\n      } else {\n        for (const {\n          id,\n          percent\n        } of views) {\n          if (id !== pageNumber) {\n            continue;\n          }\n          shouldScroll = percent < 100;\n          break;\n        }\n      }\n      if (shouldScroll) {\n        scrollIntoView(thumbnailView.div, {\n          top: THUMBNAIL_SCROLL_MARGIN\n        });\n      }\n    }\n    this._currentPageNumber = pageNumber;\n  }\n  get pagesRotation() {\n    return this._pagesRotation;\n  }\n  set pagesRotation(rotation) {\n    if (!isValidRotation(rotation)) {\n      throw new Error(\"Invalid thumbnails rotation angle.\");\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    if (this._pagesRotation === rotation) {\n      return;\n    }\n    this._pagesRotation = rotation;\n    const updateArgs = {\n      rotation\n    };\n    for (const thumbnail of this._thumbnails) {\n      thumbnail.update(updateArgs);\n    }\n  }\n  cleanup() {\n    for (const thumbnail of this._thumbnails) {\n      if (thumbnail.renderingState !== RenderingStates.FINISHED) {\n        thumbnail.reset();\n      }\n    }\n    TempImageFactory.destroyCanvas();\n  }\n  #resetView() {\n    this._thumbnails = [];\n    this._currentPageNumber = 1;\n    this._pageLabels = null;\n    this._pagesRotation = 0;\n    this.container.textContent = \"\";\n  }\n  setDocument(pdfDocument) {\n    if (this.pdfDocument) {\n      this.#cancelRendering();\n      this.#resetView();\n    }\n    this.pdfDocument = pdfDocument;\n    if (!pdfDocument) {\n      return;\n    }\n    const firstPagePromise = pdfDocument.getPage(1);\n    const optionalContentConfigPromise = pdfDocument.getOptionalContentConfig({\n      intent: \"display\"\n    });\n    firstPagePromise.then(firstPdfPage => {\n      const pagesCount = pdfDocument.numPages;\n      const viewport = firstPdfPage.getViewport({\n        scale: 1\n      });\n      for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {\n        const thumbnail = new PDFThumbnailView({\n          container: this.container,\n          eventBus: this.eventBus,\n          id: pageNum,\n          defaultViewport: viewport.clone(),\n          optionalContentConfigPromise,\n          linkService: this.linkService,\n          renderingQueue: this.renderingQueue,\n          pageColors: this.pageColors\n        });\n        this._thumbnails.push(thumbnail);\n      }\n      this._thumbnails[0]?.setPdfPage(firstPdfPage);\n      const thumbnailView = this._thumbnails[this._currentPageNumber - 1];\n      thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS);\n    }).catch(reason => {\n      console.error(\"Unable to initialize thumbnail viewer\", reason);\n    });\n  }\n  #cancelRendering() {\n    for (const thumbnail of this._thumbnails) {\n      thumbnail.cancelRendering();\n    }\n  }\n  setPageLabels(labels) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    if (!labels) {\n      this._pageLabels = null;\n    } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) {\n      this._pageLabels = null;\n      console.error(\"PDFThumbnailViewer_setPageLabels: Invalid page labels.\");\n    } else {\n      this._pageLabels = labels;\n    }\n    for (let i = 0, ii = this._thumbnails.length; i < ii; i++) {\n      this._thumbnails[i].setPageLabel(this._pageLabels?.[i] ?? null);\n    }\n  }\n  async #ensurePdfPageLoaded(thumbView) {\n    if (thumbView.pdfPage) {\n      return thumbView.pdfPage;\n    }\n    try {\n      const pdfPage = await this.pdfDocument.getPage(thumbView.id);\n      if (!thumbView.pdfPage) {\n        thumbView.setPdfPage(pdfPage);\n      }\n      return pdfPage;\n    } catch (reason) {\n      console.error(\"Unable to get page for thumb view\", reason);\n      return null;\n    }\n  }\n  #getScrollAhead(visible) {\n    if (visible.first?.id === 1) {\n      return true;\n    } else if (visible.last?.id === this._thumbnails.length) {\n      return false;\n    }\n    return this.scroll.down;\n  }\n  forceRendering() {\n    const visibleThumbs = this.#getVisibleThumbs();\n    const scrollAhead = this.#getScrollAhead(visibleThumbs);\n    const thumbView = this.renderingQueue.getHighestPriority(visibleThumbs, this._thumbnails, scrollAhead);\n    if (thumbView) {\n      this.#ensurePdfPageLoaded(thumbView).then(() => {\n        this.renderingQueue.renderView(thumbView);\n      });\n      return true;\n    }\n    return false;\n  }\n}\n\n;// CONCATENATED MODULE: ./web/annotation_editor_layer_builder.js\n\n\nclass AnnotationEditorLayerBuilder {\n  #annotationLayer = null;\n  #drawLayer = null;\n  #onAppend = null;\n  #textLayer = null;\n  #uiManager;\n  constructor(options) {\n    this.pdfPage = options.pdfPage;\n    this.accessibilityManager = options.accessibilityManager;\n    this.l10n = options.l10n;\n    this.l10n ||= new genericl10n_GenericL10n();\n    this.annotationEditorLayer = null;\n    this.div = null;\n    this._cancelled = false;\n    this.#uiManager = options.uiManager;\n    this.#annotationLayer = options.annotationLayer || null;\n    this.#textLayer = options.textLayer || null;\n    this.#drawLayer = options.drawLayer || null;\n    this.#onAppend = options.onAppend || null;\n  }\n  async render(viewport, intent = \"display\") {\n    if (intent !== \"display\") {\n      return;\n    }\n    if (this._cancelled) {\n      return;\n    }\n    const clonedViewport = viewport.clone({\n      dontFlip: true\n    });\n    if (this.div) {\n      this.annotationEditorLayer.update({\n        viewport: clonedViewport\n      });\n      this.show();\n      return;\n    }\n    const div = this.div = document.createElement(\"div\");\n    div.className = \"annotationEditorLayer\";\n    div.hidden = true;\n    div.dir = this.#uiManager.direction;\n    this.#onAppend?.(div);\n    this.annotationEditorLayer = new AnnotationEditorLayer({\n      uiManager: this.#uiManager,\n      div,\n      accessibilityManager: this.accessibilityManager,\n      pageIndex: this.pdfPage.pageNumber - 1,\n      l10n: this.l10n,\n      viewport: clonedViewport,\n      annotationLayer: this.#annotationLayer,\n      textLayer: this.#textLayer,\n      drawLayer: this.#drawLayer\n    });\n    const parameters = {\n      viewport: clonedViewport,\n      div,\n      annotations: null,\n      intent\n    };\n    this.annotationEditorLayer.render(parameters);\n    this.show();\n  }\n  cancel() {\n    this._cancelled = true;\n    if (!this.div) {\n      return;\n    }\n    this.annotationEditorLayer.destroy();\n  }\n  hide() {\n    if (!this.div) {\n      return;\n    }\n    this.div.hidden = true;\n  }\n  show() {\n    if (!this.div || this.annotationEditorLayer.isInvisible) {\n      return;\n    }\n    this.div.hidden = false;\n  }\n}\n\n;// CONCATENATED MODULE: ./web/annotation_layer_builder.js\n\n\nclass AnnotationLayerBuilder {\n  #onAppend = null;\n  #eventAbortController = null;\n  constructor({\n    pdfPage,\n    linkService,\n    downloadManager,\n    annotationStorage = null,\n    imageResourcesPath = \"\",\n    renderForms = true,\n    enableScripting = false,\n    hasJSActionsPromise = null,\n    fieldObjectsPromise = null,\n    annotationCanvasMap = null,\n    accessibilityManager = null,\n    annotationEditorUIManager = null,\n    onAppend = null\n  }) {\n    this.pdfPage = pdfPage;\n    this.linkService = linkService;\n    this.downloadManager = downloadManager;\n    this.imageResourcesPath = imageResourcesPath;\n    this.renderForms = renderForms;\n    this.annotationStorage = annotationStorage;\n    this.enableScripting = enableScripting;\n    this._hasJSActionsPromise = hasJSActionsPromise || Promise.resolve(false);\n    this._fieldObjectsPromise = fieldObjectsPromise || Promise.resolve(null);\n    this._annotationCanvasMap = annotationCanvasMap;\n    this._accessibilityManager = accessibilityManager;\n    this._annotationEditorUIManager = annotationEditorUIManager;\n    this.#onAppend = onAppend;\n    this.annotationLayer = null;\n    this.div = null;\n    this._cancelled = false;\n    this._eventBus = linkService.eventBus;\n  }\n  async render(viewport, intent = \"display\") {\n    if (this.div) {\n      if (this._cancelled || !this.annotationLayer) {\n        return;\n      }\n      this.annotationLayer.update({\n        viewport: viewport.clone({\n          dontFlip: true\n        })\n      });\n      return;\n    }\n    const [annotations, hasJSActions, fieldObjects] = await Promise.all([this.pdfPage.getAnnotations({\n      intent\n    }), this._hasJSActionsPromise, this._fieldObjectsPromise]);\n    if (this._cancelled) {\n      return;\n    }\n    const div = this.div = document.createElement(\"div\");\n    div.className = \"annotationLayer\";\n    this.#onAppend?.(div);\n    if (annotations.length === 0) {\n      this.hide();\n      return;\n    }\n    this.annotationLayer = new AnnotationLayer({\n      div,\n      accessibilityManager: this._accessibilityManager,\n      annotationCanvasMap: this._annotationCanvasMap,\n      annotationEditorUIManager: this._annotationEditorUIManager,\n      page: this.pdfPage,\n      viewport: viewport.clone({\n        dontFlip: true\n      })\n    });\n    await this.annotationLayer.render({\n      annotations,\n      imageResourcesPath: this.imageResourcesPath,\n      renderForms: this.renderForms,\n      linkService: this.linkService,\n      downloadManager: this.downloadManager,\n      annotationStorage: this.annotationStorage,\n      enableScripting: this.enableScripting,\n      hasJSActions,\n      fieldObjects\n    });\n    if (this.linkService.isInPresentationMode) {\n      this.#updatePresentationModeState(PresentationModeState.FULLSCREEN);\n    }\n    if (!this.#eventAbortController) {\n      this.#eventAbortController = new AbortController();\n      this._eventBus?._on(\"presentationmodechanged\", evt => {\n        this.#updatePresentationModeState(evt.state);\n      }, {\n        signal: this.#eventAbortController.signal\n      });\n    }\n  }\n  cancel() {\n    this._cancelled = true;\n    this.#eventAbortController?.abort();\n    this.#eventAbortController = null;\n  }\n  hide() {\n    if (!this.div) {\n      return;\n    }\n    this.div.hidden = true;\n  }\n  #updatePresentationModeState(state) {\n    if (!this.div) {\n      return;\n    }\n    let disableFormElements = false;\n    switch (state) {\n      case PresentationModeState.FULLSCREEN:\n        disableFormElements = true;\n        break;\n      case PresentationModeState.NORMAL:\n        break;\n      default:\n        return;\n    }\n    for (const section of this.div.childNodes) {\n      if (section.hasAttribute(\"data-internal-link\")) {\n        continue;\n      }\n      section.inert = disableFormElements;\n    }\n  }\n}\n\n;// CONCATENATED MODULE: ./web/draw_layer_builder.js\n\nclass DrawLayerBuilder {\n  #drawLayer = null;\n  constructor(options) {\n    this.pageIndex = options.pageIndex;\n  }\n  async render(intent = \"display\") {\n    if (intent !== \"display\" || this.#drawLayer || this._cancelled) {\n      return;\n    }\n    this.#drawLayer = new DrawLayer({\n      pageIndex: this.pageIndex\n    });\n  }\n  cancel() {\n    this._cancelled = true;\n    if (!this.#drawLayer) {\n      return;\n    }\n    this.#drawLayer.destroy();\n    this.#drawLayer = null;\n  }\n  setParent(parent) {\n    this.#drawLayer?.setParent(parent);\n  }\n  getDrawLayer() {\n    return this.#drawLayer;\n  }\n}\n\n;// CONCATENATED MODULE: ./web/struct_tree_layer_builder.js\n\nconst PDF_ROLE_TO_HTML_ROLE = {\n  Document: null,\n  DocumentFragment: null,\n  Part: \"group\",\n  Sect: \"group\",\n  Div: \"group\",\n  Aside: \"note\",\n  NonStruct: \"none\",\n  P: null,\n  H: \"heading\",\n  Title: null,\n  FENote: \"note\",\n  Sub: \"group\",\n  Lbl: null,\n  Span: null,\n  Em: null,\n  Strong: null,\n  Link: \"link\",\n  Annot: \"note\",\n  Form: \"form\",\n  Ruby: null,\n  RB: null,\n  RT: null,\n  RP: null,\n  Warichu: null,\n  WT: null,\n  WP: null,\n  L: \"list\",\n  LI: \"listitem\",\n  LBody: null,\n  Table: \"table\",\n  TR: \"row\",\n  TH: \"columnheader\",\n  TD: \"cell\",\n  THead: \"columnheader\",\n  TBody: null,\n  TFoot: null,\n  Caption: null,\n  Figure: \"figure\",\n  Formula: null,\n  Artifact: null\n};\nconst HEADING_PATTERN = /^H(\\d+)$/;\nclass StructTreeLayerBuilder {\n  #treeDom = undefined;\n  get renderingDone() {\n    return this.#treeDom !== undefined;\n  }\n  render(structTree) {\n    if (this.#treeDom !== undefined) {\n      return this.#treeDom;\n    }\n    const treeDom = this.#walk(structTree);\n    treeDom?.classList.add(\"structTree\");\n    return this.#treeDom = treeDom;\n  }\n  hide() {\n    if (this.#treeDom && !this.#treeDom.hidden) {\n      this.#treeDom.hidden = true;\n    }\n  }\n  show() {\n    if (this.#treeDom?.hidden) {\n      this.#treeDom.hidden = false;\n    }\n  }\n  #setAttributes(structElement, htmlElement) {\n    const {\n      alt,\n      id,\n      lang\n    } = structElement;\n    if (alt !== undefined) {\n      htmlElement.setAttribute(\"aria-label\", removeNullCharacters(alt));\n    }\n    if (id !== undefined) {\n      htmlElement.setAttribute(\"aria-owns\", id);\n    }\n    if (lang !== undefined) {\n      htmlElement.setAttribute(\"lang\", removeNullCharacters(lang, true));\n    }\n  }\n  #walk(node) {\n    if (!node) {\n      return null;\n    }\n    const element = document.createElement(\"span\");\n    if (\"role\" in node) {\n      const {\n        role\n      } = node;\n      const match = role.match(HEADING_PATTERN);\n      if (match) {\n        element.setAttribute(\"role\", \"heading\");\n        element.setAttribute(\"aria-level\", match[1]);\n      } else if (PDF_ROLE_TO_HTML_ROLE[role]) {\n        element.setAttribute(\"role\", PDF_ROLE_TO_HTML_ROLE[role]);\n      }\n    }\n    this.#setAttributes(node, element);\n    if (node.children) {\n      if (node.children.length === 1 && \"id\" in node.children[0]) {\n        this.#setAttributes(node.children[0], element);\n      } else {\n        for (const kid of node.children) {\n          element.append(this.#walk(kid));\n        }\n      }\n    }\n    return element;\n  }\n}\n\n;// CONCATENATED MODULE: ./web/text_accessibility.js\n\nclass TextAccessibilityManager {\n  #enabled = false;\n  #textChildren = null;\n  #textNodes = new Map();\n  #waitingElements = new Map();\n  setTextMapping(textDivs) {\n    this.#textChildren = textDivs;\n  }\n  static #compareElementPositions(e1, e2) {\n    const rect1 = e1.getBoundingClientRect();\n    const rect2 = e2.getBoundingClientRect();\n    if (rect1.width === 0 && rect1.height === 0) {\n      return +1;\n    }\n    if (rect2.width === 0 && rect2.height === 0) {\n      return -1;\n    }\n    const top1 = rect1.y;\n    const bot1 = rect1.y + rect1.height;\n    const mid1 = rect1.y + rect1.height / 2;\n    const top2 = rect2.y;\n    const bot2 = rect2.y + rect2.height;\n    const mid2 = rect2.y + rect2.height / 2;\n    if (mid1 <= top2 && mid2 >= bot1) {\n      return -1;\n    }\n    if (mid2 <= top1 && mid1 >= bot2) {\n      return +1;\n    }\n    const centerX1 = rect1.x + rect1.width / 2;\n    const centerX2 = rect2.x + rect2.width / 2;\n    return centerX1 - centerX2;\n  }\n  enable() {\n    if (this.#enabled) {\n      throw new Error(\"TextAccessibilityManager is already enabled.\");\n    }\n    if (!this.#textChildren) {\n      throw new Error(\"Text divs and strings have not been set.\");\n    }\n    this.#enabled = true;\n    this.#textChildren = this.#textChildren.slice();\n    this.#textChildren.sort(TextAccessibilityManager.#compareElementPositions);\n    if (this.#textNodes.size > 0) {\n      const textChildren = this.#textChildren;\n      for (const [id, nodeIndex] of this.#textNodes) {\n        const element = document.getElementById(id);\n        if (!element) {\n          this.#textNodes.delete(id);\n          continue;\n        }\n        this.#addIdToAriaOwns(id, textChildren[nodeIndex]);\n      }\n    }\n    for (const [element, isRemovable] of this.#waitingElements) {\n      this.addPointerInTextLayer(element, isRemovable);\n    }\n    this.#waitingElements.clear();\n  }\n  disable() {\n    if (!this.#enabled) {\n      return;\n    }\n    this.#waitingElements.clear();\n    this.#textChildren = null;\n    this.#enabled = false;\n  }\n  removePointerInTextLayer(element) {\n    if (!this.#enabled) {\n      this.#waitingElements.delete(element);\n      return;\n    }\n    const children = this.#textChildren;\n    if (!children || children.length === 0) {\n      return;\n    }\n    const {\n      id\n    } = element;\n    const nodeIndex = this.#textNodes.get(id);\n    if (nodeIndex === undefined) {\n      return;\n    }\n    const node = children[nodeIndex];\n    this.#textNodes.delete(id);\n    let owns = node.getAttribute(\"aria-owns\");\n    if (owns?.includes(id)) {\n      owns = owns.split(\" \").filter(x => x !== id).join(\" \");\n      if (owns) {\n        node.setAttribute(\"aria-owns\", owns);\n      } else {\n        node.removeAttribute(\"aria-owns\");\n        node.setAttribute(\"role\", \"presentation\");\n      }\n    }\n  }\n  #addIdToAriaOwns(id, node) {\n    const owns = node.getAttribute(\"aria-owns\");\n    if (!owns?.includes(id)) {\n      node.setAttribute(\"aria-owns\", owns ? `${owns} ${id}` : id);\n    }\n    node.removeAttribute(\"role\");\n  }\n  addPointerInTextLayer(element, isRemovable) {\n    const {\n      id\n    } = element;\n    if (!id) {\n      return null;\n    }\n    if (!this.#enabled) {\n      this.#waitingElements.set(element, isRemovable);\n      return null;\n    }\n    if (isRemovable) {\n      this.removePointerInTextLayer(element);\n    }\n    const children = this.#textChildren;\n    if (!children || children.length === 0) {\n      return null;\n    }\n    const index = binarySearchFirstItem(children, node => TextAccessibilityManager.#compareElementPositions(element, node) < 0);\n    const nodeIndex = Math.max(0, index - 1);\n    const child = children[nodeIndex];\n    this.#addIdToAriaOwns(id, child);\n    this.#textNodes.set(id, nodeIndex);\n    const parent = child.parentNode;\n    return parent?.classList.contains(\"markedContent\") ? parent.id : null;\n  }\n  moveElementInDOM(container, element, contentElement, isRemovable) {\n    const id = this.addPointerInTextLayer(contentElement, isRemovable);\n    if (!container.hasChildNodes()) {\n      container.append(element);\n      return id;\n    }\n    const children = Array.from(container.childNodes).filter(node => node !== element);\n    if (children.length === 0) {\n      return id;\n    }\n    const elementToCompare = contentElement || element;\n    const index = binarySearchFirstItem(children, node => TextAccessibilityManager.#compareElementPositions(elementToCompare, node) < 0);\n    if (index === 0) {\n      children[0].before(element);\n    } else {\n      children[index - 1].after(element);\n    }\n    return id;\n  }\n}\n\n;// CONCATENATED MODULE: ./web/text_highlighter.js\nclass TextHighlighter {\n  #eventAbortController = null;\n  constructor({\n    findController,\n    eventBus,\n    pageIndex\n  }) {\n    this.findController = findController;\n    this.matches = [];\n    this.eventBus = eventBus;\n    this.pageIdx = pageIndex;\n    this.textDivs = null;\n    this.textContentItemsStr = null;\n    this.enabled = false;\n  }\n  setTextMapping(divs, texts) {\n    this.textDivs = divs;\n    this.textContentItemsStr = texts;\n  }\n  enable() {\n    if (!this.textDivs || !this.textContentItemsStr) {\n      throw new Error(\"Text divs and strings have not been set.\");\n    }\n    if (this.enabled) {\n      throw new Error(\"TextHighlighter is already enabled.\");\n    }\n    this.enabled = true;\n    if (!this.#eventAbortController) {\n      this.#eventAbortController = new AbortController();\n      this.eventBus._on(\"updatetextlayermatches\", evt => {\n        if (evt.pageIndex === this.pageIdx || evt.pageIndex === -1) {\n          this._updateMatches();\n        }\n      }, {\n        signal: this.#eventAbortController.signal\n      });\n    }\n    this._updateMatches();\n  }\n  disable() {\n    if (!this.enabled) {\n      return;\n    }\n    this.enabled = false;\n    this.#eventAbortController?.abort();\n    this.#eventAbortController = null;\n    this._updateMatches(true);\n  }\n  _convertMatches(matches, matchesLength) {\n    if (!matches) {\n      return [];\n    }\n    const {\n      textContentItemsStr\n    } = this;\n    let i = 0,\n      iIndex = 0;\n    const end = textContentItemsStr.length - 1;\n    const result = [];\n    for (let m = 0, mm = matches.length; m < mm; m++) {\n      let matchIdx = matches[m];\n      while (i !== end && matchIdx >= iIndex + textContentItemsStr[i].length) {\n        iIndex += textContentItemsStr[i].length;\n        i++;\n      }\n      if (i === textContentItemsStr.length) {\n        console.error(\"Could not find a matching mapping\");\n      }\n      const match = {\n        begin: {\n          divIdx: i,\n          offset: matchIdx - iIndex\n        }\n      };\n      matchIdx += matchesLength[m];\n      while (i !== end && matchIdx > iIndex + textContentItemsStr[i].length) {\n        iIndex += textContentItemsStr[i].length;\n        i++;\n      }\n      match.end = {\n        divIdx: i,\n        offset: matchIdx - iIndex\n      };\n      result.push(match);\n    }\n    return result;\n  }\n  _renderMatches(matches) {\n    if (matches.length === 0) {\n      return;\n    }\n    const {\n      findController,\n      pageIdx\n    } = this;\n    const {\n      textContentItemsStr,\n      textDivs\n    } = this;\n    const isSelectedPage = pageIdx === findController.selected.pageIdx;\n    const selectedMatchIdx = findController.selected.matchIdx;\n    const highlightAll = findController.state.highlightAll;\n    let prevEnd = null;\n    const infinity = {\n      divIdx: -1,\n      offset: undefined\n    };\n    function beginText(begin, className) {\n      const divIdx = begin.divIdx;\n      textDivs[divIdx].textContent = \"\";\n      return appendTextToDiv(divIdx, 0, begin.offset, className);\n    }\n    function appendTextToDiv(divIdx, fromOffset, toOffset, className) {\n      let div = textDivs[divIdx];\n      if (div.nodeType === Node.TEXT_NODE) {\n        const span = document.createElement(\"span\");\n        div.before(span);\n        span.append(div);\n        textDivs[divIdx] = span;\n        div = span;\n      }\n      const content = textContentItemsStr[divIdx].substring(fromOffset, toOffset);\n      const node = document.createTextNode(content);\n      if (className) {\n        const span = document.createElement(\"span\");\n        span.className = `${className} appended`;\n        span.append(node);\n        div.append(span);\n        return className.includes(\"selected\") ? span.offsetLeft : 0;\n      }\n      div.append(node);\n      return 0;\n    }\n    let i0 = selectedMatchIdx,\n      i1 = i0 + 1;\n    if (highlightAll) {\n      i0 = 0;\n      i1 = matches.length;\n    } else if (!isSelectedPage) {\n      return;\n    }\n    let lastDivIdx = -1;\n    let lastOffset = -1;\n    for (let i = i0; i < i1; i++) {\n      const match = matches[i];\n      const begin = match.begin;\n      if (begin.divIdx === lastDivIdx && begin.offset === lastOffset) {\n        continue;\n      }\n      lastDivIdx = begin.divIdx;\n      lastOffset = begin.offset;\n      const end = match.end;\n      const isSelected = isSelectedPage && i === selectedMatchIdx;\n      const highlightSuffix = isSelected ? \" selected\" : \"\";\n      let selectedLeft = 0;\n      if (!prevEnd || begin.divIdx !== prevEnd.divIdx) {\n        if (prevEnd !== null) {\n          appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);\n        }\n        beginText(begin);\n      } else {\n        appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset);\n      }\n      if (begin.divIdx === end.divIdx) {\n        selectedLeft = appendTextToDiv(begin.divIdx, begin.offset, end.offset, \"highlight\" + highlightSuffix);\n      } else {\n        selectedLeft = appendTextToDiv(begin.divIdx, begin.offset, infinity.offset, \"highlight begin\" + highlightSuffix);\n        for (let n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) {\n          textDivs[n0].className = \"highlight middle\" + highlightSuffix;\n        }\n        beginText(end, \"highlight end\" + highlightSuffix);\n      }\n      prevEnd = end;\n      if (isSelected) {\n        findController.scrollMatchIntoView({\n          element: textDivs[begin.divIdx],\n          selectedLeft,\n          pageIndex: pageIdx,\n          matchIndex: selectedMatchIdx\n        });\n      }\n    }\n    if (prevEnd) {\n      appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);\n    }\n  }\n  _updateMatches(reset = false) {\n    if (!this.enabled && !reset) {\n      return;\n    }\n    const {\n      findController,\n      matches,\n      pageIdx\n    } = this;\n    const {\n      textContentItemsStr,\n      textDivs\n    } = this;\n    let clearedUntilDivIdx = -1;\n    for (const match of matches) {\n      const begin = Math.max(clearedUntilDivIdx, match.begin.divIdx);\n      for (let n = begin, end = match.end.divIdx; n <= end; n++) {\n        const div = textDivs[n];\n        div.textContent = textContentItemsStr[n];\n        div.className = \"\";\n      }\n      clearedUntilDivIdx = match.end.divIdx + 1;\n    }\n    if (!findController?.highlightMatches || reset) {\n      return;\n    }\n    const pageMatches = findController.pageMatches[pageIdx] || null;\n    const pageMatchesLength = findController.pageMatchesLength[pageIdx] || null;\n    this.matches = this._convertMatches(pageMatches, pageMatchesLength);\n    this._renderMatches(this.matches);\n  }\n}\n\n;// CONCATENATED MODULE: ./web/text_layer_builder.js\n\n\nclass TextLayerBuilder {\n  #enablePermissions = false;\n  #onAppend = null;\n  #renderingDone = false;\n  #textLayer = null;\n  static #textLayers = new Map();\n  static #selectionChangeAbortController = null;\n  constructor({\n    pdfPage,\n    highlighter = null,\n    accessibilityManager = null,\n    enablePermissions = false,\n    onAppend = null\n  }) {\n    this.pdfPage = pdfPage;\n    this.highlighter = highlighter;\n    this.accessibilityManager = accessibilityManager;\n    this.#enablePermissions = enablePermissions === true;\n    this.#onAppend = onAppend;\n    this.div = document.createElement(\"div\");\n    this.div.tabIndex = 0;\n    this.div.className = \"textLayer\";\n  }\n  #finishRendering() {\n    this.#renderingDone = true;\n    const endOfContent = document.createElement(\"div\");\n    endOfContent.className = \"endOfContent\";\n    this.div.append(endOfContent);\n    this.#bindMouse(endOfContent);\n  }\n  async render(viewport, textContentParams = null) {\n    if (this.#renderingDone && this.#textLayer) {\n      this.#textLayer.update({\n        viewport,\n        onBefore: this.hide.bind(this)\n      });\n      this.show();\n      return;\n    }\n    this.cancel();\n    this.#textLayer = new TextLayer({\n      textContentSource: this.pdfPage.streamTextContent(textContentParams || {\n        includeMarkedContent: true,\n        disableNormalization: true\n      }),\n      container: this.div,\n      viewport\n    });\n    const {\n      textDivs,\n      textContentItemsStr\n    } = this.#textLayer;\n    this.highlighter?.setTextMapping(textDivs, textContentItemsStr);\n    this.accessibilityManager?.setTextMapping(textDivs);\n    await this.#textLayer.render();\n    this.#finishRendering();\n    this.#onAppend?.(this.div);\n    this.highlighter?.enable();\n    this.accessibilityManager?.enable();\n  }\n  hide() {\n    if (!this.div.hidden && this.#renderingDone) {\n      this.highlighter?.disable();\n      this.div.hidden = true;\n    }\n  }\n  show() {\n    if (this.div.hidden && this.#renderingDone) {\n      this.div.hidden = false;\n      this.highlighter?.enable();\n    }\n  }\n  cancel() {\n    this.#textLayer?.cancel();\n    this.#textLayer = null;\n    this.highlighter?.disable();\n    this.accessibilityManager?.disable();\n    TextLayerBuilder.#removeGlobalSelectionListener(this.div);\n  }\n  #bindMouse(end) {\n    const {\n      div\n    } = this;\n    div.addEventListener(\"mousedown\", evt => {\n      end.classList.add(\"active\");\n    });\n    div.addEventListener(\"copy\", event => {\n      if (!this.#enablePermissions) {\n        const selection = document.getSelection();\n        event.clipboardData.setData(\"text/plain\", removeNullCharacters(normalizeUnicode(selection.toString())));\n      }\n      event.preventDefault();\n      event.stopPropagation();\n    });\n    TextLayerBuilder.#textLayers.set(div, end);\n    TextLayerBuilder.#enableGlobalSelectionListener();\n  }\n  static #removeGlobalSelectionListener(textLayerDiv) {\n    this.#textLayers.delete(textLayerDiv);\n    if (this.#textLayers.size === 0) {\n      this.#selectionChangeAbortController?.abort();\n      this.#selectionChangeAbortController = null;\n    }\n  }\n  static #enableGlobalSelectionListener() {\n    if (this.#selectionChangeAbortController) {\n      return;\n    }\n    this.#selectionChangeAbortController = new AbortController();\n    const {\n      signal\n    } = this.#selectionChangeAbortController;\n    const reset = (end, textLayer) => {\n      textLayer.append(end);\n      end.style.width = \"\";\n      end.style.height = \"\";\n      end.classList.remove(\"active\");\n    };\n    document.addEventListener(\"pointerup\", () => {\n      this.#textLayers.forEach(reset);\n    }, {\n      signal\n    });\n    var isFirefox, prevRange;\n    document.addEventListener(\"selectionchange\", () => {\n      const selection = document.getSelection();\n      if (selection.rangeCount === 0) {\n        this.#textLayers.forEach(reset);\n        return;\n      }\n      const activeTextLayers = new Set();\n      for (let i = 0; i < selection.rangeCount; i++) {\n        const range = selection.getRangeAt(i);\n        for (const textLayerDiv of this.#textLayers.keys()) {\n          if (!activeTextLayers.has(textLayerDiv) && range.intersectsNode(textLayerDiv)) {\n            activeTextLayers.add(textLayerDiv);\n          }\n        }\n      }\n      for (const [textLayerDiv, endDiv] of this.#textLayers) {\n        if (activeTextLayers.has(textLayerDiv)) {\n          endDiv.classList.add(\"active\");\n        } else {\n          reset(endDiv, textLayerDiv);\n        }\n      }\n      isFirefox ??= getComputedStyle(this.#textLayers.values().next().value).getPropertyValue(\"-moz-user-select\") === \"none\";\n      if (isFirefox) {\n        return;\n      }\n      const range = selection.getRangeAt(0);\n      const modifyStart = prevRange && (range.compareBoundaryPoints(Range.END_TO_END, prevRange) === 0 || range.compareBoundaryPoints(Range.START_TO_END, prevRange) === 0);\n      let anchor = modifyStart ? range.startContainer : range.endContainer;\n      if (anchor.nodeType === Node.TEXT_NODE) {\n        anchor = anchor.parentNode;\n      }\n      const parentTextLayer = anchor.parentElement.closest(\".textLayer\");\n      const endDiv = this.#textLayers.get(parentTextLayer);\n      if (endDiv) {\n        endDiv.style.width = parentTextLayer.style.width;\n        endDiv.style.height = parentTextLayer.style.height;\n        anchor.parentElement.insertBefore(endDiv, modifyStart ? anchor : anchor.nextSibling);\n      }\n      prevRange = range.cloneRange();\n    }, {\n      signal\n    });\n  }\n}\n\n;// CONCATENATED MODULE: ./web/pdf_page_view.js\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst DEFAULT_LAYER_PROPERTIES = null;\nconst LAYERS_ORDER = new Map([[\"canvasWrapper\", 0], [\"textLayer\", 1], [\"annotationLayer\", 2], [\"annotationEditorLayer\", 3], [\"xfaLayer\", 3]]);\nclass PDFPageView {\n  #annotationMode = AnnotationMode.ENABLE_FORMS;\n  #hasRestrictedScaling = false;\n  #layerProperties = null;\n  #loadingId = null;\n  #previousRotation = null;\n  #renderError = null;\n  #renderingState = RenderingStates.INITIAL;\n  #textLayerMode = TextLayerMode.ENABLE;\n  #useThumbnailCanvas = {\n    directDrawing: true,\n    initialOptionalContent: true,\n    regularAnnotations: true\n  };\n  #viewportMap = new WeakMap();\n  #layers = [null, null, null, null];\n  constructor(options) {\n    const container = options.container;\n    const defaultViewport = options.defaultViewport;\n    this.id = options.id;\n    this.renderingId = \"page\" + this.id;\n    this.#layerProperties = options.layerProperties || DEFAULT_LAYER_PROPERTIES;\n    this.pdfPage = null;\n    this.pageLabel = null;\n    this.rotation = 0;\n    this.scale = options.scale || DEFAULT_SCALE;\n    this.viewport = defaultViewport;\n    this.pdfPageRotate = defaultViewport.rotation;\n    this._optionalContentConfigPromise = options.optionalContentConfigPromise || null;\n    this.#textLayerMode = options.textLayerMode ?? TextLayerMode.ENABLE;\n    this.#annotationMode = options.annotationMode ?? AnnotationMode.ENABLE_FORMS;\n    this.imageResourcesPath = options.imageResourcesPath || \"\";\n    this.maxCanvasPixels = options.maxCanvasPixels ?? AppOptions.get(\"maxCanvasPixels\");\n    this.pageColors = options.pageColors || null;\n    this.eventBus = options.eventBus;\n    this.renderingQueue = options.renderingQueue;\n    this.l10n = options.l10n;\n    this.l10n ||= new genericl10n_GenericL10n();\n    this.renderTask = null;\n    this.resume = null;\n    this._isStandalone = !this.renderingQueue?.hasViewer();\n    this._container = container;\n    this._annotationCanvasMap = null;\n    this.annotationLayer = null;\n    this.annotationEditorLayer = null;\n    this.textLayer = null;\n    this.zoomLayer = null;\n    this.xfaLayer = null;\n    this.structTreeLayer = null;\n    this.drawLayer = null;\n    const div = document.createElement(\"div\");\n    div.className = \"page\";\n    div.setAttribute(\"data-page-number\", this.id);\n    div.setAttribute(\"role\", \"region\");\n    div.setAttribute(\"data-l10n-id\", \"pdfjs-page-landmark\");\n    div.setAttribute(\"data-l10n-args\", JSON.stringify({\n      page: this.id\n    }));\n    this.div = div;\n    this.#setDimensions();\n    container?.append(div);\n    if (this._isStandalone) {\n      container?.style.setProperty(\"--scale-factor\", this.scale * PixelsPerInch.PDF_TO_CSS_UNITS);\n      const {\n        optionalContentConfigPromise\n      } = options;\n      if (optionalContentConfigPromise) {\n        optionalContentConfigPromise.then(optionalContentConfig => {\n          if (optionalContentConfigPromise !== this._optionalContentConfigPromise) {\n            return;\n          }\n          this.#useThumbnailCanvas.initialOptionalContent = optionalContentConfig.hasInitialVisibility;\n        });\n      }\n      if (!options.l10n) {\n        this.l10n.translate(this.div);\n      }\n    }\n  }\n  #addLayer(div, name) {\n    const pos = LAYERS_ORDER.get(name);\n    const oldDiv = this.#layers[pos];\n    this.#layers[pos] = div;\n    if (oldDiv) {\n      oldDiv.replaceWith(div);\n      return;\n    }\n    for (let i = pos - 1; i >= 0; i--) {\n      const layer = this.#layers[i];\n      if (layer) {\n        layer.after(div);\n        return;\n      }\n    }\n    this.div.prepend(div);\n  }\n  get renderingState() {\n    return this.#renderingState;\n  }\n  set renderingState(state) {\n    if (state === this.#renderingState) {\n      return;\n    }\n    this.#renderingState = state;\n    if (this.#loadingId) {\n      clearTimeout(this.#loadingId);\n      this.#loadingId = null;\n    }\n    switch (state) {\n      case RenderingStates.PAUSED:\n        this.div.classList.remove(\"loading\");\n        break;\n      case RenderingStates.RUNNING:\n        this.div.classList.add(\"loadingIcon\");\n        this.#loadingId = setTimeout(() => {\n          this.div.classList.add(\"loading\");\n          this.#loadingId = null;\n        }, 0);\n        break;\n      case RenderingStates.INITIAL:\n      case RenderingStates.FINISHED:\n        this.div.classList.remove(\"loadingIcon\", \"loading\");\n        break;\n    }\n  }\n  #setDimensions() {\n    const {\n      viewport\n    } = this;\n    if (this.pdfPage) {\n      if (this.#previousRotation === viewport.rotation) {\n        return;\n      }\n      this.#previousRotation = viewport.rotation;\n    }\n    setLayerDimensions(this.div, viewport, true, false);\n  }\n  setPdfPage(pdfPage) {\n    if (this._isStandalone && (this.pageColors?.foreground === \"CanvasText\" || this.pageColors?.background === \"Canvas\")) {\n      this._container?.style.setProperty(\"--hcm-highlight-filter\", pdfPage.filterFactory.addHighlightHCMFilter(\"highlight\", \"CanvasText\", \"Canvas\", \"HighlightText\", \"Highlight\"));\n      this._container?.style.setProperty(\"--hcm-highlight-selected-filter\", pdfPage.filterFactory.addHighlightHCMFilter(\"highlight_selected\", \"CanvasText\", \"Canvas\", \"HighlightText\", \"Highlight\"));\n    }\n    this.pdfPage = pdfPage;\n    this.pdfPageRotate = pdfPage.rotate;\n    const totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n    this.viewport = pdfPage.getViewport({\n      scale: this.scale * PixelsPerInch.PDF_TO_CSS_UNITS,\n      rotation: totalRotation\n    });\n    this.#setDimensions();\n    this.reset();\n  }\n  destroy() {\n    this.reset();\n    this.pdfPage?.cleanup();\n  }\n  get _textHighlighter() {\n    return shadow(this, \"_textHighlighter\", new TextHighlighter({\n      pageIndex: this.id - 1,\n      eventBus: this.eventBus,\n      findController: this.#layerProperties.findController\n    }));\n  }\n  #dispatchLayerRendered(name, error) {\n    this.eventBus.dispatch(name, {\n      source: this,\n      pageNumber: this.id,\n      error\n    });\n  }\n  async #renderAnnotationLayer() {\n    let error = null;\n    try {\n      await this.annotationLayer.render(this.viewport, \"display\");\n    } catch (ex) {\n      console.error(`#renderAnnotationLayer: \"${ex}\".`);\n      error = ex;\n    } finally {\n      this.#dispatchLayerRendered(\"annotationlayerrendered\", error);\n    }\n  }\n  async #renderAnnotationEditorLayer() {\n    let error = null;\n    try {\n      await this.annotationEditorLayer.render(this.viewport, \"display\");\n    } catch (ex) {\n      console.error(`#renderAnnotationEditorLayer: \"${ex}\".`);\n      error = ex;\n    } finally {\n      this.#dispatchLayerRendered(\"annotationeditorlayerrendered\", error);\n    }\n  }\n  async #renderDrawLayer() {\n    try {\n      await this.drawLayer.render(\"display\");\n    } catch (ex) {\n      console.error(`#renderDrawLayer: \"${ex}\".`);\n    }\n  }\n  async #renderXfaLayer() {\n    let error = null;\n    try {\n      const result = await this.xfaLayer.render(this.viewport, \"display\");\n      if (result?.textDivs && this._textHighlighter) {\n        this.#buildXfaTextContentItems(result.textDivs);\n      }\n    } catch (ex) {\n      console.error(`#renderXfaLayer: \"${ex}\".`);\n      error = ex;\n    } finally {\n      if (this.xfaLayer?.div) {\n        this.l10n.pause();\n        this.#addLayer(this.xfaLayer.div, \"xfaLayer\");\n        this.l10n.resume();\n      }\n      this.#dispatchLayerRendered(\"xfalayerrendered\", error);\n    }\n  }\n  async #renderTextLayer() {\n    if (!this.textLayer) {\n      return;\n    }\n    let error = null;\n    try {\n      await this.textLayer.render(this.viewport);\n    } catch (ex) {\n      if (ex instanceof AbortException) {\n        return;\n      }\n      console.error(`#renderTextLayer: \"${ex}\".`);\n      error = ex;\n    }\n    this.#dispatchLayerRendered(\"textlayerrendered\", error);\n    this.#renderStructTreeLayer();\n  }\n  async #renderStructTreeLayer() {\n    if (!this.textLayer) {\n      return;\n    }\n    this.structTreeLayer ||= new StructTreeLayerBuilder();\n    const tree = await (!this.structTreeLayer.renderingDone ? this.pdfPage.getStructTree() : null);\n    const treeDom = this.structTreeLayer?.render(tree);\n    if (treeDom) {\n      this.l10n.pause();\n      this.canvas?.append(treeDom);\n      this.l10n.resume();\n    }\n    this.structTreeLayer?.show();\n  }\n  async #buildXfaTextContentItems(textDivs) {\n    const text = await this.pdfPage.getTextContent();\n    const items = [];\n    for (const item of text.items) {\n      items.push(item.str);\n    }\n    this._textHighlighter.setTextMapping(textDivs, items);\n    this._textHighlighter.enable();\n  }\n  _resetZoomLayer(removeFromDOM = false) {\n    if (!this.zoomLayer) {\n      return;\n    }\n    const zoomLayerCanvas = this.zoomLayer.firstChild;\n    this.#viewportMap.delete(zoomLayerCanvas);\n    zoomLayerCanvas.width = 0;\n    zoomLayerCanvas.height = 0;\n    if (removeFromDOM) {\n      this.zoomLayer.remove();\n    }\n    this.zoomLayer = null;\n  }\n  reset({\n    keepZoomLayer = false,\n    keepAnnotationLayer = false,\n    keepAnnotationEditorLayer = false,\n    keepXfaLayer = false,\n    keepTextLayer = false\n  } = {}) {\n    this.cancelRendering({\n      keepAnnotationLayer,\n      keepAnnotationEditorLayer,\n      keepXfaLayer,\n      keepTextLayer\n    });\n    this.renderingState = RenderingStates.INITIAL;\n    const div = this.div;\n    const childNodes = div.childNodes,\n      zoomLayerNode = keepZoomLayer && this.zoomLayer || null,\n      annotationLayerNode = keepAnnotationLayer && this.annotationLayer?.div || null,\n      annotationEditorLayerNode = keepAnnotationEditorLayer && this.annotationEditorLayer?.div || null,\n      xfaLayerNode = keepXfaLayer && this.xfaLayer?.div || null,\n      textLayerNode = keepTextLayer && this.textLayer?.div || null;\n    for (let i = childNodes.length - 1; i >= 0; i--) {\n      const node = childNodes[i];\n      switch (node) {\n        case zoomLayerNode:\n        case annotationLayerNode:\n        case annotationEditorLayerNode:\n        case xfaLayerNode:\n        case textLayerNode:\n          continue;\n      }\n      node.remove();\n      const layerIndex = this.#layers.indexOf(node);\n      if (layerIndex >= 0) {\n        this.#layers[layerIndex] = null;\n      }\n    }\n    div.removeAttribute(\"data-loaded\");\n    if (annotationLayerNode) {\n      this.annotationLayer.hide();\n    }\n    if (annotationEditorLayerNode) {\n      this.annotationEditorLayer.hide();\n    }\n    if (xfaLayerNode) {\n      this.xfaLayer.hide();\n    }\n    if (textLayerNode) {\n      this.textLayer.hide();\n    }\n    this.structTreeLayer?.hide();\n    if (!zoomLayerNode) {\n      if (this.canvas) {\n        this.#viewportMap.delete(this.canvas);\n        this.canvas.width = 0;\n        this.canvas.height = 0;\n        delete this.canvas;\n      }\n      this._resetZoomLayer();\n    }\n  }\n  update({\n    scale = 0,\n    rotation = null,\n    optionalContentConfigPromise = null,\n    drawingDelay = -1\n  }) {\n    this.scale = scale || this.scale;\n    if (typeof rotation === \"number\") {\n      this.rotation = rotation;\n    }\n    if (optionalContentConfigPromise instanceof Promise) {\n      this._optionalContentConfigPromise = optionalContentConfigPromise;\n      optionalContentConfigPromise.then(optionalContentConfig => {\n        if (optionalContentConfigPromise !== this._optionalContentConfigPromise) {\n          return;\n        }\n        this.#useThumbnailCanvas.initialOptionalContent = optionalContentConfig.hasInitialVisibility;\n      });\n    }\n    this.#useThumbnailCanvas.directDrawing = true;\n    const totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n    this.viewport = this.viewport.clone({\n      scale: this.scale * PixelsPerInch.PDF_TO_CSS_UNITS,\n      rotation: totalRotation\n    });\n    this.#setDimensions();\n    if (this._isStandalone) {\n      this._container?.style.setProperty(\"--scale-factor\", this.viewport.scale);\n    }\n    if (this.canvas) {\n      let onlyCssZoom = false;\n      if (this.#hasRestrictedScaling) {\n        if (this.maxCanvasPixels === 0) {\n          onlyCssZoom = true;\n        } else if (this.maxCanvasPixels > 0) {\n          const {\n            width,\n            height\n          } = this.viewport;\n          const {\n            sx,\n            sy\n          } = this.outputScale;\n          onlyCssZoom = (Math.floor(width) * sx | 0) * (Math.floor(height) * sy | 0) > this.maxCanvasPixels;\n        }\n      }\n      const postponeDrawing = drawingDelay >= 0 && drawingDelay < 1000;\n      if (postponeDrawing || onlyCssZoom) {\n        if (postponeDrawing && !onlyCssZoom && this.renderingState !== RenderingStates.FINISHED) {\n          this.cancelRendering({\n            keepZoomLayer: true,\n            keepAnnotationLayer: true,\n            keepAnnotationEditorLayer: true,\n            keepXfaLayer: true,\n            keepTextLayer: true,\n            cancelExtraDelay: drawingDelay\n          });\n          this.renderingState = RenderingStates.FINISHED;\n          this.#useThumbnailCanvas.directDrawing = false;\n        }\n        this.cssTransform({\n          target: this.canvas,\n          redrawAnnotationLayer: true,\n          redrawAnnotationEditorLayer: true,\n          redrawXfaLayer: true,\n          redrawTextLayer: !postponeDrawing,\n          hideTextLayer: postponeDrawing\n        });\n        if (postponeDrawing) {\n          return;\n        }\n        this.eventBus.dispatch(\"pagerendered\", {\n          source: this,\n          pageNumber: this.id,\n          cssTransform: true,\n          timestamp: performance.now(),\n          error: this.#renderError\n        });\n        return;\n      }\n      if (!this.zoomLayer && !this.canvas.hidden) {\n        this.zoomLayer = this.canvas.parentNode;\n        this.zoomLayer.style.position = \"absolute\";\n      }\n    }\n    if (this.zoomLayer) {\n      this.cssTransform({\n        target: this.zoomLayer.firstChild\n      });\n    }\n    this.reset({\n      keepZoomLayer: true,\n      keepAnnotationLayer: true,\n      keepAnnotationEditorLayer: true,\n      keepXfaLayer: true,\n      keepTextLayer: true\n    });\n  }\n  cancelRendering({\n    keepAnnotationLayer = false,\n    keepAnnotationEditorLayer = false,\n    keepXfaLayer = false,\n    keepTextLayer = false,\n    cancelExtraDelay = 0\n  } = {}) {\n    if (this.renderTask) {\n      this.renderTask.cancel(cancelExtraDelay);\n      this.renderTask = null;\n    }\n    this.resume = null;\n    if (this.textLayer && (!keepTextLayer || !this.textLayer.div)) {\n      this.textLayer.cancel();\n      this.textLayer = null;\n    }\n    if (this.structTreeLayer && !this.textLayer) {\n      this.structTreeLayer = null;\n    }\n    if (this.annotationLayer && (!keepAnnotationLayer || !this.annotationLayer.div)) {\n      this.annotationLayer.cancel();\n      this.annotationLayer = null;\n      this._annotationCanvasMap = null;\n    }\n    if (this.annotationEditorLayer && (!keepAnnotationEditorLayer || !this.annotationEditorLayer.div)) {\n      if (this.drawLayer) {\n        this.drawLayer.cancel();\n        this.drawLayer = null;\n      }\n      this.annotationEditorLayer.cancel();\n      this.annotationEditorLayer = null;\n    }\n    if (this.xfaLayer && (!keepXfaLayer || !this.xfaLayer.div)) {\n      this.xfaLayer.cancel();\n      this.xfaLayer = null;\n      this._textHighlighter?.disable();\n    }\n  }\n  cssTransform({\n    target,\n    redrawAnnotationLayer = false,\n    redrawAnnotationEditorLayer = false,\n    redrawXfaLayer = false,\n    redrawTextLayer = false,\n    hideTextLayer = false\n  }) {\n    if (!target.hasAttribute(\"zooming\")) {\n      target.setAttribute(\"zooming\", true);\n      const {\n        style\n      } = target;\n      style.width = style.height = \"\";\n    }\n    const originalViewport = this.#viewportMap.get(target);\n    if (this.viewport !== originalViewport) {\n      const relativeRotation = this.viewport.rotation - originalViewport.rotation;\n      const absRotation = Math.abs(relativeRotation);\n      let scaleX = 1,\n        scaleY = 1;\n      if (absRotation === 90 || absRotation === 270) {\n        const {\n          width,\n          height\n        } = this.viewport;\n        scaleX = height / width;\n        scaleY = width / height;\n      }\n      target.style.transform = `rotate(${relativeRotation}deg) scale(${scaleX}, ${scaleY})`;\n    }\n    if (redrawAnnotationLayer && this.annotationLayer) {\n      this.#renderAnnotationLayer();\n    }\n    if (redrawAnnotationEditorLayer && this.annotationEditorLayer) {\n      if (this.drawLayer) {\n        this.#renderDrawLayer();\n      }\n      this.#renderAnnotationEditorLayer();\n    }\n    if (redrawXfaLayer && this.xfaLayer) {\n      this.#renderXfaLayer();\n    }\n    if (this.textLayer) {\n      if (hideTextLayer) {\n        this.textLayer.hide();\n        this.structTreeLayer?.hide();\n      } else if (redrawTextLayer) {\n        this.#renderTextLayer();\n      }\n    }\n  }\n  get width() {\n    return this.viewport.width;\n  }\n  get height() {\n    return this.viewport.height;\n  }\n  getPagePoint(x, y) {\n    return this.viewport.convertToPdfPoint(x, y);\n  }\n  async #finishRenderTask(renderTask, error = null) {\n    if (renderTask === this.renderTask) {\n      this.renderTask = null;\n    }\n    if (error instanceof RenderingCancelledException) {\n      this.#renderError = null;\n      return;\n    }\n    this.#renderError = error;\n    this.renderingState = RenderingStates.FINISHED;\n    this._resetZoomLayer(true);\n    this.#useThumbnailCanvas.regularAnnotations = !renderTask.separateAnnots;\n    this.eventBus.dispatch(\"pagerendered\", {\n      source: this,\n      pageNumber: this.id,\n      cssTransform: false,\n      timestamp: performance.now(),\n      error: this.#renderError\n    });\n    if (error) {\n      throw error;\n    }\n  }\n  async draw() {\n    if (this.renderingState !== RenderingStates.INITIAL) {\n      console.error(\"Must be in new state before drawing\");\n      this.reset();\n    }\n    const {\n      div,\n      l10n,\n      pageColors,\n      pdfPage,\n      viewport\n    } = this;\n    if (!pdfPage) {\n      this.renderingState = RenderingStates.FINISHED;\n      throw new Error(\"pdfPage is not loaded\");\n    }\n    this.renderingState = RenderingStates.RUNNING;\n    const canvasWrapper = document.createElement(\"div\");\n    canvasWrapper.classList.add(\"canvasWrapper\");\n    this.#addLayer(canvasWrapper, \"canvasWrapper\");\n    if (!this.textLayer && this.#textLayerMode !== TextLayerMode.DISABLE && !pdfPage.isPureXfa) {\n      this._accessibilityManager ||= new TextAccessibilityManager();\n      this.textLayer = new TextLayerBuilder({\n        pdfPage,\n        highlighter: this._textHighlighter,\n        accessibilityManager: this._accessibilityManager,\n        enablePermissions: this.#textLayerMode === TextLayerMode.ENABLE_PERMISSIONS,\n        onAppend: textLayerDiv => {\n          this.l10n.pause();\n          this.#addLayer(textLayerDiv, \"textLayer\");\n          this.l10n.resume();\n        }\n      });\n    }\n    if (!this.annotationLayer && this.#annotationMode !== AnnotationMode.DISABLE) {\n      const {\n        annotationStorage,\n        annotationEditorUIManager,\n        downloadManager,\n        enableScripting,\n        fieldObjectsPromise,\n        hasJSActionsPromise,\n        linkService\n      } = this.#layerProperties;\n      this._annotationCanvasMap ||= new Map();\n      this.annotationLayer = new AnnotationLayerBuilder({\n        pdfPage,\n        annotationStorage,\n        imageResourcesPath: this.imageResourcesPath,\n        renderForms: this.#annotationMode === AnnotationMode.ENABLE_FORMS,\n        linkService,\n        downloadManager,\n        enableScripting,\n        hasJSActionsPromise,\n        fieldObjectsPromise,\n        annotationCanvasMap: this._annotationCanvasMap,\n        accessibilityManager: this._accessibilityManager,\n        annotationEditorUIManager,\n        onAppend: annotationLayerDiv => {\n          this.#addLayer(annotationLayerDiv, \"annotationLayer\");\n        }\n      });\n    }\n    const renderContinueCallback = cont => {\n      showCanvas?.(false);\n      if (this.renderingQueue && !this.renderingQueue.isHighestPriority(this)) {\n        this.renderingState = RenderingStates.PAUSED;\n        this.resume = () => {\n          this.renderingState = RenderingStates.RUNNING;\n          cont();\n        };\n        return;\n      }\n      cont();\n    };\n    const {\n      width,\n      height\n    } = viewport;\n    const canvas = document.createElement(\"canvas\");\n    canvas.setAttribute(\"role\", \"presentation\");\n    canvas.hidden = true;\n    const hasHCM = !!(pageColors?.background && pageColors?.foreground);\n    let showCanvas = isLastShow => {\n      if (!hasHCM || isLastShow) {\n        canvas.hidden = false;\n        showCanvas = null;\n      }\n    };\n    canvasWrapper.append(canvas);\n    this.canvas = canvas;\n    const ctx = canvas.getContext(\"2d\", {\n      alpha: false\n    });\n    const outputScale = this.outputScale = new OutputScale();\n    if (this.maxCanvasPixels === 0) {\n      const invScale = 1 / this.scale;\n      outputScale.sx *= invScale;\n      outputScale.sy *= invScale;\n      this.#hasRestrictedScaling = true;\n    } else if (this.maxCanvasPixels > 0) {\n      const pixelsInViewport = width * height;\n      const maxScale = Math.sqrt(this.maxCanvasPixels / pixelsInViewport);\n      if (outputScale.sx > maxScale || outputScale.sy > maxScale) {\n        outputScale.sx = maxScale;\n        outputScale.sy = maxScale;\n        this.#hasRestrictedScaling = true;\n      } else {\n        this.#hasRestrictedScaling = false;\n      }\n    }\n    const sfx = approximateFraction(outputScale.sx);\n    const sfy = approximateFraction(outputScale.sy);\n    canvas.width = roundToDivide(width * outputScale.sx, sfx[0]);\n    canvas.height = roundToDivide(height * outputScale.sy, sfy[0]);\n    const {\n      style\n    } = canvas;\n    style.width = roundToDivide(width, sfx[1]) + \"px\";\n    style.height = roundToDivide(height, sfy[1]) + \"px\";\n    this.#viewportMap.set(canvas, viewport);\n    const transform = outputScale.scaled ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0] : null;\n    const renderContext = {\n      canvasContext: ctx,\n      transform,\n      viewport,\n      annotationMode: this.#annotationMode,\n      optionalContentConfigPromise: this._optionalContentConfigPromise,\n      annotationCanvasMap: this._annotationCanvasMap,\n      pageColors\n    };\n    const renderTask = this.renderTask = pdfPage.render(renderContext);\n    renderTask.onContinue = renderContinueCallback;\n    const resultPromise = renderTask.promise.then(async () => {\n      showCanvas?.(true);\n      await this.#finishRenderTask(renderTask);\n      this.#renderTextLayer();\n      if (this.annotationLayer) {\n        await this.#renderAnnotationLayer();\n      }\n      const {\n        annotationEditorUIManager\n      } = this.#layerProperties;\n      if (!annotationEditorUIManager) {\n        return;\n      }\n      this.drawLayer ||= new DrawLayerBuilder({\n        pageIndex: this.id\n      });\n      await this.#renderDrawLayer();\n      this.drawLayer.setParent(canvasWrapper);\n      if (!this.annotationEditorLayer) {\n        this.annotationEditorLayer = new AnnotationEditorLayerBuilder({\n          uiManager: annotationEditorUIManager,\n          pdfPage,\n          l10n,\n          accessibilityManager: this._accessibilityManager,\n          annotationLayer: this.annotationLayer?.annotationLayer,\n          textLayer: this.textLayer,\n          drawLayer: this.drawLayer.getDrawLayer(),\n          onAppend: annotationEditorLayerDiv => {\n            this.#addLayer(annotationEditorLayerDiv, \"annotationEditorLayer\");\n          }\n        });\n      }\n      this.#renderAnnotationEditorLayer();\n    }, error => {\n      if (!(error instanceof RenderingCancelledException)) {\n        showCanvas?.(true);\n      }\n      return this.#finishRenderTask(renderTask, error);\n    });\n    if (pdfPage.isPureXfa) {\n      if (!this.xfaLayer) {\n        const {\n          annotationStorage,\n          linkService\n        } = this.#layerProperties;\n        this.xfaLayer = new XfaLayerBuilder({\n          pdfPage,\n          annotationStorage,\n          linkService\n        });\n      }\n      this.#renderXfaLayer();\n    }\n    div.setAttribute(\"data-loaded\", true);\n    this.eventBus.dispatch(\"pagerender\", {\n      source: this,\n      pageNumber: this.id\n    });\n    return resultPromise;\n  }\n  setPageLabel(label) {\n    this.pageLabel = typeof label === \"string\" ? label : null;\n    this.div.setAttribute(\"data-l10n-args\", JSON.stringify({\n      page: this.pageLabel ?? this.id\n    }));\n    if (this.pageLabel !== null) {\n      this.div.setAttribute(\"data-page-label\", this.pageLabel);\n    } else {\n      this.div.removeAttribute(\"data-page-label\");\n    }\n  }\n  get thumbnailCanvas() {\n    const {\n      directDrawing,\n      initialOptionalContent,\n      regularAnnotations\n    } = this.#useThumbnailCanvas;\n    return directDrawing && initialOptionalContent && regularAnnotations ? this.canvas : null;\n  }\n}\n\n;// CONCATENATED MODULE: ./web/pdf_viewer.js\n\n\n\n\n\n\nconst DEFAULT_CACHE_SIZE = 10;\nconst PagesCountLimit = {\n  FORCE_SCROLL_MODE_PAGE: 15000,\n  FORCE_LAZY_PAGE_INIT: 7500,\n  PAUSE_EAGER_PAGE_INIT: 250\n};\nfunction isValidAnnotationEditorMode(mode) {\n  return Object.values(AnnotationEditorType).includes(mode) && mode !== AnnotationEditorType.DISABLE;\n}\nclass PDFPageViewBuffer {\n  #buf = new Set();\n  #size = 0;\n  constructor(size) {\n    this.#size = size;\n  }\n  push(view) {\n    const buf = this.#buf;\n    if (buf.has(view)) {\n      buf.delete(view);\n    }\n    buf.add(view);\n    if (buf.size > this.#size) {\n      this.#destroyFirstView();\n    }\n  }\n  resize(newSize, idsToKeep = null) {\n    this.#size = newSize;\n    const buf = this.#buf;\n    if (idsToKeep) {\n      const ii = buf.size;\n      let i = 1;\n      for (const view of buf) {\n        if (idsToKeep.has(view.id)) {\n          buf.delete(view);\n          buf.add(view);\n        }\n        if (++i > ii) {\n          break;\n        }\n      }\n    }\n    while (buf.size > this.#size) {\n      this.#destroyFirstView();\n    }\n  }\n  has(view) {\n    return this.#buf.has(view);\n  }\n  [Symbol.iterator]() {\n    return this.#buf.keys();\n  }\n  #destroyFirstView() {\n    const firstView = this.#buf.keys().next().value;\n    firstView?.destroy();\n    this.#buf.delete(firstView);\n  }\n}\nclass PDFViewer {\n  #buffer = null;\n  #altTextManager = null;\n  #annotationEditorHighlightColors = null;\n  #annotationEditorMode = AnnotationEditorType.NONE;\n  #annotationEditorUIManager = null;\n  #annotationMode = AnnotationMode.ENABLE_FORMS;\n  #containerTopLeft = null;\n  #enableHighlightFloatingButton = false;\n  #enablePermissions = false;\n  #eventAbortController = null;\n  #mlManager = null;\n  #getAllTextInProgress = false;\n  #hiddenCopyElement = null;\n  #interruptCopyCondition = false;\n  #previousContainerHeight = 0;\n  #resizeObserver = new ResizeObserver(this.#resizeObserverCallback.bind(this));\n  #scrollModePageState = null;\n  #scaleTimeoutId = null;\n  #textLayerMode = TextLayerMode.ENABLE;\n  constructor(options) {\n    const viewerVersion = \"4.3.136\";\n    if (version !== viewerVersion) {\n      throw new Error(`The API version \"${version}\" does not match the Viewer version \"${viewerVersion}\".`);\n    }\n    this.container = options.container;\n    this.viewer = options.viewer || options.container.firstElementChild;\n    if (this.container?.tagName !== \"DIV\" || this.viewer?.tagName !== \"DIV\") {\n      throw new Error(\"Invalid `container` and/or `viewer` option.\");\n    }\n    if (this.container.offsetParent && getComputedStyle(this.container).position !== \"absolute\") {\n      throw new Error(\"The `container` must be absolutely positioned.\");\n    }\n    this.#resizeObserver.observe(this.container);\n    this.eventBus = options.eventBus;\n    this.linkService = options.linkService || new SimpleLinkService();\n    this.downloadManager = options.downloadManager || null;\n    this.findController = options.findController || null;\n    this.#altTextManager = options.altTextManager || null;\n    if (this.findController) {\n      this.findController.onIsPageVisible = pageNumber => this._getVisiblePages().ids.has(pageNumber);\n    }\n    this._scriptingManager = options.scriptingManager || null;\n    this.#textLayerMode = options.textLayerMode ?? TextLayerMode.ENABLE;\n    this.#annotationMode = options.annotationMode ?? AnnotationMode.ENABLE_FORMS;\n    this.#annotationEditorMode = options.annotationEditorMode ?? AnnotationEditorType.NONE;\n    this.#annotationEditorHighlightColors = options.annotationEditorHighlightColors || null;\n    this.#enableHighlightFloatingButton = options.enableHighlightFloatingButton === true;\n    this.imageResourcesPath = options.imageResourcesPath || \"\";\n    this.enablePrintAutoRotate = options.enablePrintAutoRotate || false;\n    this.removePageBorders = options.removePageBorders || false;\n    this.maxCanvasPixels = options.maxCanvasPixels;\n    this.l10n = options.l10n;\n    this.l10n ||= new genericl10n_GenericL10n();\n    this.#enablePermissions = options.enablePermissions || false;\n    this.pageColors = options.pageColors || null;\n    this.#mlManager = options.mlManager || null;\n    this.defaultRenderingQueue = !options.renderingQueue;\n    if (this.defaultRenderingQueue) {\n      this.renderingQueue = new PDFRenderingQueue();\n      this.renderingQueue.setViewer(this);\n    } else {\n      this.renderingQueue = options.renderingQueue;\n    }\n    this.scroll = watchScroll(this.container, this._scrollUpdate.bind(this));\n    this.presentationModeState = PresentationModeState.UNKNOWN;\n    this._resetView();\n    if (this.removePageBorders) {\n      this.viewer.classList.add(\"removePageBorders\");\n    }\n    this.#updateContainerHeightCss();\n    this.eventBus._on(\"thumbnailrendered\", ({\n      pageNumber,\n      pdfPage\n    }) => {\n      const pageView = this._pages[pageNumber - 1];\n      if (!this.#buffer.has(pageView)) {\n        pdfPage?.cleanup();\n      }\n    });\n    if (!options.l10n) {\n      this.l10n.translate(this.container);\n    }\n  }\n  get pagesCount() {\n    return this._pages.length;\n  }\n  getPageView(index) {\n    return this._pages[index];\n  }\n  getCachedPageViews() {\n    return new Set(this.#buffer);\n  }\n  get pageViewsReady() {\n    return this._pages.every(pageView => pageView?.pdfPage);\n  }\n  get renderForms() {\n    return this.#annotationMode === AnnotationMode.ENABLE_FORMS;\n  }\n  get enableScripting() {\n    return !!this._scriptingManager;\n  }\n  get currentPageNumber() {\n    return this._currentPageNumber;\n  }\n  set currentPageNumber(val) {\n    if (!Number.isInteger(val)) {\n      throw new Error(\"Invalid page number.\");\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    if (!this._setCurrentPageNumber(val, true)) {\n      console.error(`currentPageNumber: \"${val}\" is not a valid page.`);\n    }\n  }\n  _setCurrentPageNumber(val, resetCurrentPageView = false) {\n    if (this._currentPageNumber === val) {\n      if (resetCurrentPageView) {\n        this.#resetCurrentPageView();\n      }\n      return true;\n    }\n    if (!(0 < val && val <= this.pagesCount)) {\n      return false;\n    }\n    const previous = this._currentPageNumber;\n    this._currentPageNumber = val;\n    this.eventBus.dispatch(\"pagechanging\", {\n      source: this,\n      pageNumber: val,\n      pageLabel: this._pageLabels?.[val - 1] ?? null,\n      previous\n    });\n    if (resetCurrentPageView) {\n      this.#resetCurrentPageView();\n    }\n    return true;\n  }\n  get currentPageLabel() {\n    return this._pageLabels?.[this._currentPageNumber - 1] ?? null;\n  }\n  set currentPageLabel(val) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    let page = val | 0;\n    if (this._pageLabels) {\n      const i = this._pageLabels.indexOf(val);\n      if (i >= 0) {\n        page = i + 1;\n      }\n    }\n    if (!this._setCurrentPageNumber(page, true)) {\n      console.error(`currentPageLabel: \"${val}\" is not a valid page.`);\n    }\n  }\n  get currentScale() {\n    return this._currentScale !== UNKNOWN_SCALE ? this._currentScale : DEFAULT_SCALE;\n  }\n  set currentScale(val) {\n    if (isNaN(val)) {\n      throw new Error(\"Invalid numeric scale.\");\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    this.#setScale(val, {\n      noScroll: false\n    });\n  }\n  get currentScaleValue() {\n    return this._currentScaleValue;\n  }\n  set currentScaleValue(val) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    this.#setScale(val, {\n      noScroll: false\n    });\n  }\n  get pagesRotation() {\n    return this._pagesRotation;\n  }\n  set pagesRotation(rotation) {\n    if (!isValidRotation(rotation)) {\n      throw new Error(\"Invalid pages rotation angle.\");\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    rotation %= 360;\n    if (rotation < 0) {\n      rotation += 360;\n    }\n    if (this._pagesRotation === rotation) {\n      return;\n    }\n    this._pagesRotation = rotation;\n    const pageNumber = this._currentPageNumber;\n    this.refresh(true, {\n      rotation\n    });\n    if (this._currentScaleValue) {\n      this.#setScale(this._currentScaleValue, {\n        noScroll: true\n      });\n    }\n    this.eventBus.dispatch(\"rotationchanging\", {\n      source: this,\n      pagesRotation: rotation,\n      pageNumber\n    });\n    if (this.defaultRenderingQueue) {\n      this.update();\n    }\n  }\n  get firstPagePromise() {\n    return this.pdfDocument ? this._firstPageCapability.promise : null;\n  }\n  get onePageRendered() {\n    return this.pdfDocument ? this._onePageRenderedCapability.promise : null;\n  }\n  get pagesPromise() {\n    return this.pdfDocument ? this._pagesCapability.promise : null;\n  }\n  get _layerProperties() {\n    const self = this;\n    return shadow(this, \"_layerProperties\", {\n      get annotationEditorUIManager() {\n        return self.#annotationEditorUIManager;\n      },\n      get annotationStorage() {\n        return self.pdfDocument?.annotationStorage;\n      },\n      get downloadManager() {\n        return self.downloadManager;\n      },\n      get enableScripting() {\n        return !!self._scriptingManager;\n      },\n      get fieldObjectsPromise() {\n        return self.pdfDocument?.getFieldObjects();\n      },\n      get findController() {\n        return self.findController;\n      },\n      get hasJSActionsPromise() {\n        return self.pdfDocument?.hasJSActions();\n      },\n      get linkService() {\n        return self.linkService;\n      }\n    });\n  }\n  #initializePermissions(permissions) {\n    const params = {\n      annotationEditorMode: this.#annotationEditorMode,\n      annotationMode: this.#annotationMode,\n      textLayerMode: this.#textLayerMode\n    };\n    if (!permissions) {\n      return params;\n    }\n    if (!permissions.includes(PermissionFlag.COPY) && this.#textLayerMode === TextLayerMode.ENABLE) {\n      params.textLayerMode = TextLayerMode.ENABLE_PERMISSIONS;\n    }\n    if (!permissions.includes(PermissionFlag.MODIFY_CONTENTS)) {\n      params.annotationEditorMode = AnnotationEditorType.DISABLE;\n    }\n    if (!permissions.includes(PermissionFlag.MODIFY_ANNOTATIONS) && !permissions.includes(PermissionFlag.FILL_INTERACTIVE_FORMS) && this.#annotationMode === AnnotationMode.ENABLE_FORMS) {\n      params.annotationMode = AnnotationMode.ENABLE;\n    }\n    return params;\n  }\n  async #onePageRenderedOrForceFetch(signal) {\n    if (document.visibilityState === \"hidden\" || !this.container.offsetParent || this._getVisiblePages().views.length === 0) {\n      return;\n    }\n    const hiddenCapability = Promise.withResolvers();\n    function onVisibilityChange() {\n      if (document.visibilityState === \"hidden\") {\n        hiddenCapability.resolve();\n      }\n    }\n    document.addEventListener(\"visibilitychange\", onVisibilityChange, {\n      signal\n    });\n    await Promise.race([this._onePageRenderedCapability.promise, hiddenCapability.promise]);\n    document.removeEventListener(\"visibilitychange\", onVisibilityChange);\n  }\n  async getAllText() {\n    const texts = [];\n    const buffer = [];\n    for (let pageNum = 1, pagesCount = this.pdfDocument.numPages; pageNum <= pagesCount; ++pageNum) {\n      if (this.#interruptCopyCondition) {\n        return null;\n      }\n      buffer.length = 0;\n      const page = await this.pdfDocument.getPage(pageNum);\n      const {\n        items\n      } = await page.getTextContent();\n      for (const item of items) {\n        if (item.str) {\n          buffer.push(item.str);\n        }\n        if (item.hasEOL) {\n          buffer.push(\"\\n\");\n        }\n      }\n      texts.push(removeNullCharacters(buffer.join(\"\")));\n    }\n    return texts.join(\"\\n\");\n  }\n  #copyCallback(textLayerMode, event) {\n    const selection = document.getSelection();\n    const {\n      focusNode,\n      anchorNode\n    } = selection;\n    if (anchorNode && focusNode && selection.containsNode(this.#hiddenCopyElement)) {\n      if (this.#getAllTextInProgress || textLayerMode === TextLayerMode.ENABLE_PERMISSIONS) {\n        event.preventDefault();\n        event.stopPropagation();\n        return;\n      }\n      this.#getAllTextInProgress = true;\n      const savedCursor = this.container.style.cursor;\n      this.container.style.cursor = \"wait\";\n      const interruptCopy = ev => this.#interruptCopyCondition = ev.key === \"Escape\";\n      window.addEventListener(\"keydown\", interruptCopy);\n      this.getAllText().then(async text => {\n        if (text !== null) {\n          await navigator.clipboard.writeText(text);\n        }\n      }).catch(reason => {\n        console.warn(`Something goes wrong when extracting the text: ${reason.message}`);\n      }).finally(() => {\n        this.#getAllTextInProgress = false;\n        this.#interruptCopyCondition = false;\n        window.removeEventListener(\"keydown\", interruptCopy);\n        this.container.style.cursor = savedCursor;\n      });\n      event.preventDefault();\n      event.stopPropagation();\n    }\n  }\n  setDocument(pdfDocument) {\n    if (this.pdfDocument) {\n      this.eventBus.dispatch(\"pagesdestroy\", {\n        source: this\n      });\n      this._cancelRendering();\n      this._resetView();\n      this.findController?.setDocument(null);\n      this._scriptingManager?.setDocument(null);\n      if (this.#annotationEditorUIManager) {\n        this.#annotationEditorUIManager.destroy();\n        this.#annotationEditorUIManager = null;\n      }\n    }\n    this.pdfDocument = pdfDocument;\n    if (!pdfDocument) {\n      return;\n    }\n    const pagesCount = pdfDocument.numPages;\n    const firstPagePromise = pdfDocument.getPage(1);\n    const optionalContentConfigPromise = pdfDocument.getOptionalContentConfig({\n      intent: \"display\"\n    });\n    const permissionsPromise = this.#enablePermissions ? pdfDocument.getPermissions() : Promise.resolve();\n    const {\n      eventBus,\n      pageColors,\n      viewer\n    } = this;\n    this.#eventAbortController = new AbortController();\n    const {\n      signal\n    } = this.#eventAbortController;\n    if (pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE) {\n      console.warn(\"Forcing PAGE-scrolling for performance reasons, given the length of the document.\");\n      const mode = this._scrollMode = ScrollMode.PAGE;\n      eventBus.dispatch(\"scrollmodechanged\", {\n        source: this,\n        mode\n      });\n    }\n    this._pagesCapability.promise.then(() => {\n      eventBus.dispatch(\"pagesloaded\", {\n        source: this,\n        pagesCount\n      });\n    }, () => {});\n    const onBeforeDraw = evt => {\n      const pageView = this._pages[evt.pageNumber - 1];\n      if (!pageView) {\n        return;\n      }\n      this.#buffer.push(pageView);\n    };\n    eventBus._on(\"pagerender\", onBeforeDraw, {\n      signal\n    });\n    const onAfterDraw = evt => {\n      if (evt.cssTransform) {\n        return;\n      }\n      this._onePageRenderedCapability.resolve({\n        timestamp: evt.timestamp\n      });\n      eventBus._off(\"pagerendered\", onAfterDraw);\n    };\n    eventBus._on(\"pagerendered\", onAfterDraw, {\n      signal\n    });\n    Promise.all([firstPagePromise, permissionsPromise]).then(([firstPdfPage, permissions]) => {\n      if (pdfDocument !== this.pdfDocument) {\n        return;\n      }\n      this._firstPageCapability.resolve(firstPdfPage);\n      this._optionalContentConfigPromise = optionalContentConfigPromise;\n      const {\n        annotationEditorMode,\n        annotationMode,\n        textLayerMode\n      } = this.#initializePermissions(permissions);\n      if (textLayerMode !== TextLayerMode.DISABLE) {\n        const element = this.#hiddenCopyElement = document.createElement(\"div\");\n        element.id = \"hiddenCopyElement\";\n        viewer.before(element);\n      }\n      if (annotationEditorMode !== AnnotationEditorType.DISABLE) {\n        const mode = annotationEditorMode;\n        if (pdfDocument.isPureXfa) {\n          console.warn(\"Warning: XFA-editing is not implemented.\");\n        } else if (isValidAnnotationEditorMode(mode)) {\n          this.#annotationEditorUIManager = new AnnotationEditorUIManager(this.container, viewer, this.#altTextManager, eventBus, pdfDocument, pageColors, this.#annotationEditorHighlightColors, this.#enableHighlightFloatingButton, this.#mlManager);\n          eventBus.dispatch(\"annotationeditoruimanager\", {\n            source: this,\n            uiManager: this.#annotationEditorUIManager\n          });\n          if (mode !== AnnotationEditorType.NONE) {\n            this.#annotationEditorUIManager.updateMode(mode);\n          }\n        } else {\n          console.error(`Invalid AnnotationEditor mode: ${mode}`);\n        }\n      }\n      const viewerElement = this._scrollMode === ScrollMode.PAGE ? null : viewer;\n      const scale = this.currentScale;\n      const viewport = firstPdfPage.getViewport({\n        scale: scale * PixelsPerInch.PDF_TO_CSS_UNITS\n      });\n      viewer.style.setProperty(\"--scale-factor\", viewport.scale);\n      if (pageColors?.foreground === \"CanvasText\" || pageColors?.background === \"Canvas\") {\n        viewer.style.setProperty(\"--hcm-highlight-filter\", pdfDocument.filterFactory.addHighlightHCMFilter(\"highlight\", \"CanvasText\", \"Canvas\", \"HighlightText\", \"Highlight\"));\n        viewer.style.setProperty(\"--hcm-highlight-selected-filter\", pdfDocument.filterFactory.addHighlightHCMFilter(\"highlight_selected\", \"CanvasText\", \"Canvas\", \"HighlightText\", \"ButtonText\"));\n      }\n      for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {\n        const pageView = new PDFPageView({\n          container: viewerElement,\n          eventBus,\n          id: pageNum,\n          scale,\n          defaultViewport: viewport.clone(),\n          optionalContentConfigPromise,\n          renderingQueue: this.renderingQueue,\n          textLayerMode,\n          annotationMode,\n          imageResourcesPath: this.imageResourcesPath,\n          maxCanvasPixels: this.maxCanvasPixels,\n          pageColors,\n          l10n: this.l10n,\n          layerProperties: this._layerProperties\n        });\n        this._pages.push(pageView);\n      }\n      this._pages[0]?.setPdfPage(firstPdfPage);\n      if (this._scrollMode === ScrollMode.PAGE) {\n        this.#ensurePageViewVisible();\n      } else if (this._spreadMode !== SpreadMode.NONE) {\n        this._updateSpreadMode();\n      }\n      this.#onePageRenderedOrForceFetch(signal).then(async () => {\n        if (pdfDocument !== this.pdfDocument) {\n          return;\n        }\n        this.findController?.setDocument(pdfDocument);\n        this._scriptingManager?.setDocument(pdfDocument);\n        if (this.#hiddenCopyElement) {\n          document.addEventListener(\"copy\", this.#copyCallback.bind(this, textLayerMode), {\n            signal\n          });\n        }\n        if (this.#annotationEditorUIManager) {\n          eventBus.dispatch(\"annotationeditormodechanged\", {\n            source: this,\n            mode: this.#annotationEditorMode\n          });\n        }\n        if (pdfDocument.loadingParams.disableAutoFetch || pagesCount > PagesCountLimit.FORCE_LAZY_PAGE_INIT) {\n          this._pagesCapability.resolve();\n          return;\n        }\n        let getPagesLeft = pagesCount - 1;\n        if (getPagesLeft <= 0) {\n          this._pagesCapability.resolve();\n          return;\n        }\n        for (let pageNum = 2; pageNum <= pagesCount; ++pageNum) {\n          const promise = pdfDocument.getPage(pageNum).then(pdfPage => {\n            const pageView = this._pages[pageNum - 1];\n            if (!pageView.pdfPage) {\n              pageView.setPdfPage(pdfPage);\n            }\n            if (--getPagesLeft === 0) {\n              this._pagesCapability.resolve();\n            }\n          }, reason => {\n            console.error(`Unable to get page ${pageNum} to initialize viewer`, reason);\n            if (--getPagesLeft === 0) {\n              this._pagesCapability.resolve();\n            }\n          });\n          if (pageNum % PagesCountLimit.PAUSE_EAGER_PAGE_INIT === 0) {\n            await promise;\n          }\n        }\n      });\n      eventBus.dispatch(\"pagesinit\", {\n        source: this\n      });\n      pdfDocument.getMetadata().then(({\n        info\n      }) => {\n        if (pdfDocument !== this.pdfDocument) {\n          return;\n        }\n        if (info.Language) {\n          viewer.lang = info.Language;\n        }\n      });\n      if (this.defaultRenderingQueue) {\n        this.update();\n      }\n    }).catch(reason => {\n      console.error(\"Unable to initialize viewer\", reason);\n      this._pagesCapability.reject(reason);\n    });\n  }\n  setPageLabels(labels) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    if (!labels) {\n      this._pageLabels = null;\n    } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) {\n      this._pageLabels = null;\n      console.error(`setPageLabels: Invalid page labels.`);\n    } else {\n      this._pageLabels = labels;\n    }\n    for (let i = 0, ii = this._pages.length; i < ii; i++) {\n      this._pages[i].setPageLabel(this._pageLabels?.[i] ?? null);\n    }\n  }\n  _resetView() {\n    this._pages = [];\n    this._currentPageNumber = 1;\n    this._currentScale = UNKNOWN_SCALE;\n    this._currentScaleValue = null;\n    this._pageLabels = null;\n    this.#buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE);\n    this._location = null;\n    this._pagesRotation = 0;\n    this._optionalContentConfigPromise = null;\n    this._firstPageCapability = Promise.withResolvers();\n    this._onePageRenderedCapability = Promise.withResolvers();\n    this._pagesCapability = Promise.withResolvers();\n    this._scrollMode = ScrollMode.VERTICAL;\n    this._previousScrollMode = ScrollMode.UNKNOWN;\n    this._spreadMode = SpreadMode.NONE;\n    this.#scrollModePageState = {\n      previousPageNumber: 1,\n      scrollDown: true,\n      pages: []\n    };\n    this.#eventAbortController?.abort();\n    this.#eventAbortController = null;\n    this.viewer.textContent = \"\";\n    this._updateScrollMode();\n    this.viewer.removeAttribute(\"lang\");\n    this.#hiddenCopyElement?.remove();\n    this.#hiddenCopyElement = null;\n  }\n  #ensurePageViewVisible() {\n    if (this._scrollMode !== ScrollMode.PAGE) {\n      throw new Error(\"#ensurePageViewVisible: Invalid scrollMode value.\");\n    }\n    const pageNumber = this._currentPageNumber,\n      state = this.#scrollModePageState,\n      viewer = this.viewer;\n    viewer.textContent = \"\";\n    state.pages.length = 0;\n    if (this._spreadMode === SpreadMode.NONE && !this.isInPresentationMode) {\n      const pageView = this._pages[pageNumber - 1];\n      viewer.append(pageView.div);\n      state.pages.push(pageView);\n    } else {\n      const pageIndexSet = new Set(),\n        parity = this._spreadMode - 1;\n      if (parity === -1) {\n        pageIndexSet.add(pageNumber - 1);\n      } else if (pageNumber % 2 !== parity) {\n        pageIndexSet.add(pageNumber - 1);\n        pageIndexSet.add(pageNumber);\n      } else {\n        pageIndexSet.add(pageNumber - 2);\n        pageIndexSet.add(pageNumber - 1);\n      }\n      const spread = document.createElement(\"div\");\n      spread.className = \"spread\";\n      if (this.isInPresentationMode) {\n        const dummyPage = document.createElement(\"div\");\n        dummyPage.className = \"dummyPage\";\n        spread.append(dummyPage);\n      }\n      for (const i of pageIndexSet) {\n        const pageView = this._pages[i];\n        if (!pageView) {\n          continue;\n        }\n        spread.append(pageView.div);\n        state.pages.push(pageView);\n      }\n      viewer.append(spread);\n    }\n    state.scrollDown = pageNumber >= state.previousPageNumber;\n    state.previousPageNumber = pageNumber;\n  }\n  _scrollUpdate() {\n    if (this.pagesCount === 0) {\n      return;\n    }\n    this.update();\n  }\n  #scrollIntoView(pageView, pageSpot = null) {\n    const {\n      div,\n      id\n    } = pageView;\n    if (this._currentPageNumber !== id) {\n      this._setCurrentPageNumber(id);\n    }\n    if (this._scrollMode === ScrollMode.PAGE) {\n      this.#ensurePageViewVisible();\n      this.update();\n    }\n    if (!pageSpot && !this.isInPresentationMode) {\n      const left = div.offsetLeft + div.clientLeft,\n        right = left + div.clientWidth;\n      const {\n        scrollLeft,\n        clientWidth\n      } = this.container;\n      if (this._scrollMode === ScrollMode.HORIZONTAL || left < scrollLeft || right > scrollLeft + clientWidth) {\n        pageSpot = {\n          left: 0,\n          top: 0\n        };\n      }\n    }\n    scrollIntoView(div, pageSpot);\n    if (!this._currentScaleValue && this._location) {\n      this._location = null;\n    }\n  }\n  #isSameScale(newScale) {\n    return newScale === this._currentScale || Math.abs(newScale - this._currentScale) < 1e-15;\n  }\n  #setScaleUpdatePages(newScale, newValue, {\n    noScroll = false,\n    preset = false,\n    drawingDelay = -1,\n    origin = null\n  }) {\n    this._currentScaleValue = newValue.toString();\n    if (this.#isSameScale(newScale)) {\n      if (preset) {\n        this.eventBus.dispatch(\"scalechanging\", {\n          source: this,\n          scale: newScale,\n          presetValue: newValue\n        });\n      }\n      return;\n    }\n    this.viewer.style.setProperty(\"--scale-factor\", newScale * PixelsPerInch.PDF_TO_CSS_UNITS);\n    const postponeDrawing = drawingDelay >= 0 && drawingDelay < 1000;\n    this.refresh(true, {\n      scale: newScale,\n      drawingDelay: postponeDrawing ? drawingDelay : -1\n    });\n    if (postponeDrawing) {\n      this.#scaleTimeoutId = setTimeout(() => {\n        this.#scaleTimeoutId = null;\n        this.refresh();\n      }, drawingDelay);\n    }\n    const previousScale = this._currentScale;\n    this._currentScale = newScale;\n    if (!noScroll) {\n      let page = this._currentPageNumber,\n        dest;\n      if (this._location && !(this.isInPresentationMode || this.isChangingPresentationMode)) {\n        page = this._location.pageNumber;\n        dest = [null, {\n          name: \"XYZ\"\n        }, this._location.left, this._location.top, null];\n      }\n      this.scrollPageIntoView({\n        pageNumber: page,\n        destArray: dest,\n        allowNegativeOffset: true\n      });\n      if (Array.isArray(origin)) {\n        const scaleDiff = newScale / previousScale - 1;\n        const [top, left] = this.containerTopLeft;\n        this.container.scrollLeft += (origin[0] - left) * scaleDiff;\n        this.container.scrollTop += (origin[1] - top) * scaleDiff;\n      }\n    }\n    this.eventBus.dispatch(\"scalechanging\", {\n      source: this,\n      scale: newScale,\n      presetValue: preset ? newValue : undefined\n    });\n    if (this.defaultRenderingQueue) {\n      this.update();\n    }\n  }\n  get #pageWidthScaleFactor() {\n    if (this._spreadMode !== SpreadMode.NONE && this._scrollMode !== ScrollMode.HORIZONTAL) {\n      return 2;\n    }\n    return 1;\n  }\n  #setScale(value, options) {\n    let scale = parseFloat(value);\n    if (scale > 0) {\n      options.preset = false;\n      this.#setScaleUpdatePages(scale, value, options);\n    } else {\n      const currentPage = this._pages[this._currentPageNumber - 1];\n      if (!currentPage) {\n        return;\n      }\n      let hPadding = SCROLLBAR_PADDING,\n        vPadding = VERTICAL_PADDING;\n      if (this.isInPresentationMode) {\n        hPadding = vPadding = 4;\n        if (this._spreadMode !== SpreadMode.NONE) {\n          hPadding *= 2;\n        }\n      } else if (this.removePageBorders) {\n        hPadding = vPadding = 0;\n      } else if (this._scrollMode === ScrollMode.HORIZONTAL) {\n        [hPadding, vPadding] = [vPadding, hPadding];\n      }\n      const pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale / this.#pageWidthScaleFactor;\n      const pageHeightScale = (this.container.clientHeight - vPadding) / currentPage.height * currentPage.scale;\n      switch (value) {\n        case \"page-actual\":\n          scale = 1;\n          break;\n        case \"page-width\":\n          scale = pageWidthScale;\n          break;\n        case \"page-height\":\n          scale = pageHeightScale;\n          break;\n        case \"page-fit\":\n          scale = Math.min(pageWidthScale, pageHeightScale);\n          break;\n        case \"auto\":\n          const horizontalScale = isPortraitOrientation(currentPage) ? pageWidthScale : Math.min(pageHeightScale, pageWidthScale);\n          scale = Math.min(MAX_AUTO_SCALE, horizontalScale);\n          break;\n        default:\n          console.error(`#setScale: \"${value}\" is an unknown zoom value.`);\n          return;\n      }\n      options.preset = true;\n      this.#setScaleUpdatePages(scale, value, options);\n    }\n  }\n  #resetCurrentPageView() {\n    const pageView = this._pages[this._currentPageNumber - 1];\n    if (this.isInPresentationMode) {\n      this.#setScale(this._currentScaleValue, {\n        noScroll: true\n      });\n    }\n    this.#scrollIntoView(pageView);\n  }\n  pageLabelToPageNumber(label) {\n    if (!this._pageLabels) {\n      return null;\n    }\n    const i = this._pageLabels.indexOf(label);\n    if (i < 0) {\n      return null;\n    }\n    return i + 1;\n  }\n  scrollPageIntoView({\n    pageNumber,\n    destArray = null,\n    allowNegativeOffset = false,\n    ignoreDestinationZoom = false\n  }) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    const pageView = Number.isInteger(pageNumber) && this._pages[pageNumber - 1];\n    if (!pageView) {\n      console.error(`scrollPageIntoView: \"${pageNumber}\" is not a valid pageNumber parameter.`);\n      return;\n    }\n    if (this.isInPresentationMode || !destArray) {\n      this._setCurrentPageNumber(pageNumber, true);\n      return;\n    }\n    let x = 0,\n      y = 0;\n    let width = 0,\n      height = 0,\n      widthScale,\n      heightScale;\n    const changeOrientation = pageView.rotation % 180 !== 0;\n    const pageWidth = (changeOrientation ? pageView.height : pageView.width) / pageView.scale / PixelsPerInch.PDF_TO_CSS_UNITS;\n    const pageHeight = (changeOrientation ? pageView.width : pageView.height) / pageView.scale / PixelsPerInch.PDF_TO_CSS_UNITS;\n    let scale = 0;\n    switch (destArray[1].name) {\n      case \"XYZ\":\n        x = destArray[2];\n        y = destArray[3];\n        scale = destArray[4];\n        x = x !== null ? x : 0;\n        y = y !== null ? y : pageHeight;\n        break;\n      case \"Fit\":\n      case \"FitB\":\n        scale = \"page-fit\";\n        break;\n      case \"FitH\":\n      case \"FitBH\":\n        y = destArray[2];\n        scale = \"page-width\";\n        if (y === null && this._location) {\n          x = this._location.left;\n          y = this._location.top;\n        } else if (typeof y !== \"number\" || y < 0) {\n          y = pageHeight;\n        }\n        break;\n      case \"FitV\":\n      case \"FitBV\":\n        x = destArray[2];\n        width = pageWidth;\n        height = pageHeight;\n        scale = \"page-height\";\n        break;\n      case \"FitR\":\n        x = destArray[2];\n        y = destArray[3];\n        width = destArray[4] - x;\n        height = destArray[5] - y;\n        let hPadding = SCROLLBAR_PADDING,\n          vPadding = VERTICAL_PADDING;\n        if (this.removePageBorders) {\n          hPadding = vPadding = 0;\n        }\n        widthScale = (this.container.clientWidth - hPadding) / width / PixelsPerInch.PDF_TO_CSS_UNITS;\n        heightScale = (this.container.clientHeight - vPadding) / height / PixelsPerInch.PDF_TO_CSS_UNITS;\n        scale = Math.min(Math.abs(widthScale), Math.abs(heightScale));\n        break;\n      default:\n        console.error(`scrollPageIntoView: \"${destArray[1].name}\" is not a valid destination type.`);\n        return;\n    }\n    if (!ignoreDestinationZoom) {\n      if (scale && scale !== this._currentScale) {\n        this.currentScaleValue = scale;\n      } else if (this._currentScale === UNKNOWN_SCALE) {\n        this.currentScaleValue = DEFAULT_SCALE_VALUE;\n      }\n    }\n    if (scale === \"page-fit\" && !destArray[4]) {\n      this.#scrollIntoView(pageView);\n      return;\n    }\n    const boundingRect = [pageView.viewport.convertToViewportPoint(x, y), pageView.viewport.convertToViewportPoint(x + width, y + height)];\n    let left = Math.min(boundingRect[0][0], boundingRect[1][0]);\n    let top = Math.min(boundingRect[0][1], boundingRect[1][1]);\n    if (!allowNegativeOffset) {\n      left = Math.max(left, 0);\n      top = Math.max(top, 0);\n    }\n    this.#scrollIntoView(pageView, {\n      left,\n      top\n    });\n  }\n  _updateLocation(firstPage) {\n    const currentScale = this._currentScale;\n    const currentScaleValue = this._currentScaleValue;\n    const normalizedScaleValue = parseFloat(currentScaleValue) === currentScale ? Math.round(currentScale * 10000) / 100 : currentScaleValue;\n    const pageNumber = firstPage.id;\n    const currentPageView = this._pages[pageNumber - 1];\n    const container = this.container;\n    const topLeft = currentPageView.getPagePoint(container.scrollLeft - firstPage.x, container.scrollTop - firstPage.y);\n    const intLeft = Math.round(topLeft[0]);\n    const intTop = Math.round(topLeft[1]);\n    let pdfOpenParams = `#page=${pageNumber}`;\n    if (!this.isInPresentationMode) {\n      pdfOpenParams += `&zoom=${normalizedScaleValue},${intLeft},${intTop}`;\n    }\n    this._location = {\n      pageNumber,\n      scale: normalizedScaleValue,\n      top: intTop,\n      left: intLeft,\n      rotation: this._pagesRotation,\n      pdfOpenParams\n    };\n  }\n  update() {\n    const visible = this._getVisiblePages();\n    const visiblePages = visible.views,\n      numVisiblePages = visiblePages.length;\n    if (numVisiblePages === 0) {\n      return;\n    }\n    const newCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * numVisiblePages + 1);\n    this.#buffer.resize(newCacheSize, visible.ids);\n    this.renderingQueue.renderHighestPriority(visible);\n    const isSimpleLayout = this._spreadMode === SpreadMode.NONE && (this._scrollMode === ScrollMode.PAGE || this._scrollMode === ScrollMode.VERTICAL);\n    const currentId = this._currentPageNumber;\n    let stillFullyVisible = false;\n    for (const page of visiblePages) {\n      if (page.percent < 100) {\n        break;\n      }\n      if (page.id === currentId && isSimpleLayout) {\n        stillFullyVisible = true;\n        break;\n      }\n    }\n    this._setCurrentPageNumber(stillFullyVisible ? currentId : visiblePages[0].id);\n    this._updateLocation(visible.first);\n    this.eventBus.dispatch(\"updateviewarea\", {\n      source: this,\n      location: this._location\n    });\n  }\n  containsElement(element) {\n    return this.container.contains(element);\n  }\n  focus() {\n    this.container.focus();\n  }\n  get _isContainerRtl() {\n    return getComputedStyle(this.container).direction === \"rtl\";\n  }\n  get isInPresentationMode() {\n    return this.presentationModeState === PresentationModeState.FULLSCREEN;\n  }\n  get isChangingPresentationMode() {\n    return this.presentationModeState === PresentationModeState.CHANGING;\n  }\n  get isHorizontalScrollbarEnabled() {\n    return this.isInPresentationMode ? false : this.container.scrollWidth > this.container.clientWidth;\n  }\n  get isVerticalScrollbarEnabled() {\n    return this.isInPresentationMode ? false : this.container.scrollHeight > this.container.clientHeight;\n  }\n  _getVisiblePages() {\n    const views = this._scrollMode === ScrollMode.PAGE ? this.#scrollModePageState.pages : this._pages,\n      horizontal = this._scrollMode === ScrollMode.HORIZONTAL,\n      rtl = horizontal && this._isContainerRtl;\n    return getVisibleElements({\n      scrollEl: this.container,\n      views,\n      sortByVisibility: true,\n      horizontal,\n      rtl\n    });\n  }\n  cleanup() {\n    for (const pageView of this._pages) {\n      if (pageView.renderingState !== RenderingStates.FINISHED) {\n        pageView.reset();\n      }\n    }\n  }\n  _cancelRendering() {\n    for (const pageView of this._pages) {\n      pageView.cancelRendering();\n    }\n  }\n  async #ensurePdfPageLoaded(pageView) {\n    if (pageView.pdfPage) {\n      return pageView.pdfPage;\n    }\n    try {\n      const pdfPage = await this.pdfDocument.getPage(pageView.id);\n      if (!pageView.pdfPage) {\n        pageView.setPdfPage(pdfPage);\n      }\n      return pdfPage;\n    } catch (reason) {\n      console.error(\"Unable to get page for page view\", reason);\n      return null;\n    }\n  }\n  #getScrollAhead(visible) {\n    if (visible.first?.id === 1) {\n      return true;\n    } else if (visible.last?.id === this.pagesCount) {\n      return false;\n    }\n    switch (this._scrollMode) {\n      case ScrollMode.PAGE:\n        return this.#scrollModePageState.scrollDown;\n      case ScrollMode.HORIZONTAL:\n        return this.scroll.right;\n    }\n    return this.scroll.down;\n  }\n  forceRendering(currentlyVisiblePages) {\n    const visiblePages = currentlyVisiblePages || this._getVisiblePages();\n    const scrollAhead = this.#getScrollAhead(visiblePages);\n    const preRenderExtra = this._spreadMode !== SpreadMode.NONE && this._scrollMode !== ScrollMode.HORIZONTAL;\n    const pageView = this.renderingQueue.getHighestPriority(visiblePages, this._pages, scrollAhead, preRenderExtra);\n    if (pageView) {\n      this.#ensurePdfPageLoaded(pageView).then(() => {\n        this.renderingQueue.renderView(pageView);\n      });\n      return true;\n    }\n    return false;\n  }\n  get hasEqualPageSizes() {\n    const firstPageView = this._pages[0];\n    for (let i = 1, ii = this._pages.length; i < ii; ++i) {\n      const pageView = this._pages[i];\n      if (pageView.width !== firstPageView.width || pageView.height !== firstPageView.height) {\n        return false;\n      }\n    }\n    return true;\n  }\n  getPagesOverview() {\n    let initialOrientation;\n    return this._pages.map(pageView => {\n      const viewport = pageView.pdfPage.getViewport({\n        scale: 1\n      });\n      const orientation = isPortraitOrientation(viewport);\n      if (initialOrientation === undefined) {\n        initialOrientation = orientation;\n      } else if (this.enablePrintAutoRotate && orientation !== initialOrientation) {\n        return {\n          width: viewport.height,\n          height: viewport.width,\n          rotation: (viewport.rotation - 90) % 360\n        };\n      }\n      return {\n        width: viewport.width,\n        height: viewport.height,\n        rotation: viewport.rotation\n      };\n    });\n  }\n  get optionalContentConfigPromise() {\n    if (!this.pdfDocument) {\n      return Promise.resolve(null);\n    }\n    if (!this._optionalContentConfigPromise) {\n      console.error(\"optionalContentConfigPromise: Not initialized yet.\");\n      return this.pdfDocument.getOptionalContentConfig({\n        intent: \"display\"\n      });\n    }\n    return this._optionalContentConfigPromise;\n  }\n  set optionalContentConfigPromise(promise) {\n    if (!(promise instanceof Promise)) {\n      throw new Error(`Invalid optionalContentConfigPromise: ${promise}`);\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    if (!this._optionalContentConfigPromise) {\n      return;\n    }\n    this._optionalContentConfigPromise = promise;\n    this.refresh(false, {\n      optionalContentConfigPromise: promise\n    });\n    this.eventBus.dispatch(\"optionalcontentconfigchanged\", {\n      source: this,\n      promise\n    });\n  }\n  get scrollMode() {\n    return this._scrollMode;\n  }\n  set scrollMode(mode) {\n    if (this._scrollMode === mode) {\n      return;\n    }\n    if (!isValidScrollMode(mode)) {\n      throw new Error(`Invalid scroll mode: ${mode}`);\n    }\n    if (this.pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE) {\n      return;\n    }\n    this._previousScrollMode = this._scrollMode;\n    this._scrollMode = mode;\n    this.eventBus.dispatch(\"scrollmodechanged\", {\n      source: this,\n      mode\n    });\n    this._updateScrollMode(this._currentPageNumber);\n  }\n  _updateScrollMode(pageNumber = null) {\n    const scrollMode = this._scrollMode,\n      viewer = this.viewer;\n    viewer.classList.toggle(\"scrollHorizontal\", scrollMode === ScrollMode.HORIZONTAL);\n    viewer.classList.toggle(\"scrollWrapped\", scrollMode === ScrollMode.WRAPPED);\n    if (!this.pdfDocument || !pageNumber) {\n      return;\n    }\n    if (scrollMode === ScrollMode.PAGE) {\n      this.#ensurePageViewVisible();\n    } else if (this._previousScrollMode === ScrollMode.PAGE) {\n      this._updateSpreadMode();\n    }\n    if (this._currentScaleValue && isNaN(this._currentScaleValue)) {\n      this.#setScale(this._currentScaleValue, {\n        noScroll: true\n      });\n    }\n    this._setCurrentPageNumber(pageNumber, true);\n    this.update();\n  }\n  get spreadMode() {\n    return this._spreadMode;\n  }\n  set spreadMode(mode) {\n    if (this._spreadMode === mode) {\n      return;\n    }\n    if (!isValidSpreadMode(mode)) {\n      throw new Error(`Invalid spread mode: ${mode}`);\n    }\n    this._spreadMode = mode;\n    this.eventBus.dispatch(\"spreadmodechanged\", {\n      source: this,\n      mode\n    });\n    this._updateSpreadMode(this._currentPageNumber);\n  }\n  _updateSpreadMode(pageNumber = null) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    const viewer = this.viewer,\n      pages = this._pages;\n    if (this._scrollMode === ScrollMode.PAGE) {\n      this.#ensurePageViewVisible();\n    } else {\n      viewer.textContent = \"\";\n      if (this._spreadMode === SpreadMode.NONE) {\n        for (const pageView of this._pages) {\n          viewer.append(pageView.div);\n        }\n      } else {\n        const parity = this._spreadMode - 1;\n        let spread = null;\n        for (let i = 0, ii = pages.length; i < ii; ++i) {\n          if (spread === null) {\n            spread = document.createElement(\"div\");\n            spread.className = \"spread\";\n            viewer.append(spread);\n          } else if (i % 2 === parity) {\n            spread = spread.cloneNode(false);\n            viewer.append(spread);\n          }\n          spread.append(pages[i].div);\n        }\n      }\n    }\n    if (!pageNumber) {\n      return;\n    }\n    if (this._currentScaleValue && isNaN(this._currentScaleValue)) {\n      this.#setScale(this._currentScaleValue, {\n        noScroll: true\n      });\n    }\n    this._setCurrentPageNumber(pageNumber, true);\n    this.update();\n  }\n  _getPageAdvance(currentPageNumber, previous = false) {\n    switch (this._scrollMode) {\n      case ScrollMode.WRAPPED:\n        {\n          const {\n              views\n            } = this._getVisiblePages(),\n            pageLayout = new Map();\n          for (const {\n            id,\n            y,\n            percent,\n            widthPercent\n          } of views) {\n            if (percent === 0 || widthPercent < 100) {\n              continue;\n            }\n            let yArray = pageLayout.get(y);\n            if (!yArray) {\n              pageLayout.set(y, yArray ||= []);\n            }\n            yArray.push(id);\n          }\n          for (const yArray of pageLayout.values()) {\n            const currentIndex = yArray.indexOf(currentPageNumber);\n            if (currentIndex === -1) {\n              continue;\n            }\n            const numPages = yArray.length;\n            if (numPages === 1) {\n              break;\n            }\n            if (previous) {\n              for (let i = currentIndex - 1, ii = 0; i >= ii; i--) {\n                const currentId = yArray[i],\n                  expectedId = yArray[i + 1] - 1;\n                if (currentId < expectedId) {\n                  return currentPageNumber - expectedId;\n                }\n              }\n            } else {\n              for (let i = currentIndex + 1, ii = numPages; i < ii; i++) {\n                const currentId = yArray[i],\n                  expectedId = yArray[i - 1] + 1;\n                if (currentId > expectedId) {\n                  return expectedId - currentPageNumber;\n                }\n              }\n            }\n            if (previous) {\n              const firstId = yArray[0];\n              if (firstId < currentPageNumber) {\n                return currentPageNumber - firstId + 1;\n              }\n            } else {\n              const lastId = yArray[numPages - 1];\n              if (lastId > currentPageNumber) {\n                return lastId - currentPageNumber + 1;\n              }\n            }\n            break;\n          }\n          break;\n        }\n      case ScrollMode.HORIZONTAL:\n        {\n          break;\n        }\n      case ScrollMode.PAGE:\n      case ScrollMode.VERTICAL:\n        {\n          if (this._spreadMode === SpreadMode.NONE) {\n            break;\n          }\n          const parity = this._spreadMode - 1;\n          if (previous && currentPageNumber % 2 !== parity) {\n            break;\n          } else if (!previous && currentPageNumber % 2 === parity) {\n            break;\n          }\n          const {\n              views\n            } = this._getVisiblePages(),\n            expectedId = previous ? currentPageNumber - 1 : currentPageNumber + 1;\n          for (const {\n            id,\n            percent,\n            widthPercent\n          } of views) {\n            if (id !== expectedId) {\n              continue;\n            }\n            if (percent > 0 && widthPercent === 100) {\n              return 2;\n            }\n            break;\n          }\n          break;\n        }\n    }\n    return 1;\n  }\n  nextPage() {\n    const currentPageNumber = this._currentPageNumber,\n      pagesCount = this.pagesCount;\n    if (currentPageNumber >= pagesCount) {\n      return false;\n    }\n    const advance = this._getPageAdvance(currentPageNumber, false) || 1;\n    this.currentPageNumber = Math.min(currentPageNumber + advance, pagesCount);\n    return true;\n  }\n  previousPage() {\n    const currentPageNumber = this._currentPageNumber;\n    if (currentPageNumber <= 1) {\n      return false;\n    }\n    const advance = this._getPageAdvance(currentPageNumber, true) || 1;\n    this.currentPageNumber = Math.max(currentPageNumber - advance, 1);\n    return true;\n  }\n  updateScale({\n    drawingDelay,\n    scaleFactor = null,\n    steps = null,\n    origin\n  }) {\n    if (steps === null && scaleFactor === null) {\n      throw new Error(\"Invalid updateScale options: either `steps` or `scaleFactor` must be provided.\");\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    let newScale = this._currentScale;\n    if (scaleFactor > 0 && scaleFactor !== 1) {\n      newScale = Math.round(newScale * scaleFactor * 100) / 100;\n    } else if (steps) {\n      const delta = steps > 0 ? DEFAULT_SCALE_DELTA : 1 / DEFAULT_SCALE_DELTA;\n      const round = steps > 0 ? Math.ceil : Math.floor;\n      steps = Math.abs(steps);\n      do {\n        newScale = round((newScale * delta).toFixed(2) * 10) / 10;\n      } while (--steps > 0);\n    }\n    newScale = Math.max(MIN_SCALE, Math.min(MAX_SCALE, newScale));\n    this.#setScale(newScale, {\n      noScroll: false,\n      drawingDelay,\n      origin\n    });\n  }\n  increaseScale(options = {}) {\n    this.updateScale({\n      ...options,\n      steps: options.steps ?? 1\n    });\n  }\n  decreaseScale(options = {}) {\n    this.updateScale({\n      ...options,\n      steps: -(options.steps ?? 1)\n    });\n  }\n  #updateContainerHeightCss(height = this.container.clientHeight) {\n    if (height !== this.#previousContainerHeight) {\n      this.#previousContainerHeight = height;\n      docStyle.setProperty(\"--viewer-container-height\", `${height}px`);\n    }\n  }\n  #resizeObserverCallback(entries) {\n    for (const entry of entries) {\n      if (entry.target === this.container) {\n        this.#updateContainerHeightCss(Math.floor(entry.borderBoxSize[0].blockSize));\n        this.#containerTopLeft = null;\n        break;\n      }\n    }\n  }\n  get containerTopLeft() {\n    return this.#containerTopLeft ||= [this.container.offsetTop, this.container.offsetLeft];\n  }\n  get annotationEditorMode() {\n    return this.#annotationEditorUIManager ? this.#annotationEditorMode : AnnotationEditorType.DISABLE;\n  }\n  set annotationEditorMode({\n    mode,\n    editId = null,\n    isFromKeyboard = false\n  }) {\n    if (!this.#annotationEditorUIManager) {\n      throw new Error(`The AnnotationEditor is not enabled.`);\n    }\n    if (this.#annotationEditorMode === mode) {\n      return;\n    }\n    if (!isValidAnnotationEditorMode(mode)) {\n      throw new Error(`Invalid AnnotationEditor mode: ${mode}`);\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    this.#annotationEditorMode = mode;\n    this.eventBus.dispatch(\"annotationeditormodechanged\", {\n      source: this,\n      mode\n    });\n    this.#annotationEditorUIManager.updateMode(mode, editId, isFromKeyboard);\n  }\n  set annotationEditorParams({\n    type,\n    value\n  }) {\n    if (!this.#annotationEditorUIManager) {\n      throw new Error(`The AnnotationEditor is not enabled.`);\n    }\n    this.#annotationEditorUIManager.updateParams(type, value);\n  }\n  refresh(noUpdate = false, updateArgs = Object.create(null)) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    for (const pageView of this._pages) {\n      pageView.update(updateArgs);\n    }\n    if (this.#scaleTimeoutId !== null) {\n      clearTimeout(this.#scaleTimeoutId);\n      this.#scaleTimeoutId = null;\n    }\n    if (!noUpdate) {\n      this.update();\n    }\n  }\n}\n\n;// CONCATENATED MODULE: ./web/secondary_toolbar.js\n\n\nclass SecondaryToolbar {\n  #opts;\n  constructor(options, eventBus) {\n    this.#opts = options;\n    const buttons = [{\n      element: options.presentationModeButton,\n      eventName: \"presentationmode\",\n      close: true\n    }, {\n      element: options.printButton,\n      eventName: \"print\",\n      close: true\n    }, {\n      element: options.downloadButton,\n      eventName: \"download\",\n      close: true\n    }, {\n      element: options.viewBookmarkButton,\n      eventName: null,\n      close: true\n    }, {\n      element: options.firstPageButton,\n      eventName: \"firstpage\",\n      close: true\n    }, {\n      element: options.lastPageButton,\n      eventName: \"lastpage\",\n      close: true\n    }, {\n      element: options.pageRotateCwButton,\n      eventName: \"rotatecw\",\n      close: false\n    }, {\n      element: options.pageRotateCcwButton,\n      eventName: \"rotateccw\",\n      close: false\n    }, {\n      element: options.cursorSelectToolButton,\n      eventName: \"switchcursortool\",\n      eventDetails: {\n        tool: CursorTool.SELECT\n      },\n      close: true\n    }, {\n      element: options.cursorHandToolButton,\n      eventName: \"switchcursortool\",\n      eventDetails: {\n        tool: CursorTool.HAND\n      },\n      close: true\n    }, {\n      element: options.scrollPageButton,\n      eventName: \"switchscrollmode\",\n      eventDetails: {\n        mode: ScrollMode.PAGE\n      },\n      close: true\n    }, {\n      element: options.scrollVerticalButton,\n      eventName: \"switchscrollmode\",\n      eventDetails: {\n        mode: ScrollMode.VERTICAL\n      },\n      close: true\n    }, {\n      element: options.scrollHorizontalButton,\n      eventName: \"switchscrollmode\",\n      eventDetails: {\n        mode: ScrollMode.HORIZONTAL\n      },\n      close: true\n    }, {\n      element: options.scrollWrappedButton,\n      eventName: \"switchscrollmode\",\n      eventDetails: {\n        mode: ScrollMode.WRAPPED\n      },\n      close: true\n    }, {\n      element: options.spreadNoneButton,\n      eventName: \"switchspreadmode\",\n      eventDetails: {\n        mode: SpreadMode.NONE\n      },\n      close: true\n    }, {\n      element: options.spreadOddButton,\n      eventName: \"switchspreadmode\",\n      eventDetails: {\n        mode: SpreadMode.ODD\n      },\n      close: true\n    }, {\n      element: options.spreadEvenButton,\n      eventName: \"switchspreadmode\",\n      eventDetails: {\n        mode: SpreadMode.EVEN\n      },\n      close: true\n    }, {\n      element: options.documentPropertiesButton,\n      eventName: \"documentproperties\",\n      close: true\n    }];\n    buttons.push({\n      element: options.openFileButton,\n      eventName: \"openfile\",\n      close: true\n    });\n    this.eventBus = eventBus;\n    this.opened = false;\n    this.#bindListeners(buttons);\n    this.reset();\n  }\n  get isOpen() {\n    return this.opened;\n  }\n  setPageNumber(pageNumber) {\n    this.pageNumber = pageNumber;\n    this.#updateUIState();\n  }\n  setPagesCount(pagesCount) {\n    this.pagesCount = pagesCount;\n    this.#updateUIState();\n  }\n  reset() {\n    this.pageNumber = 0;\n    this.pagesCount = 0;\n    this.#updateUIState();\n    this.eventBus.dispatch(\"switchcursortool\", {\n      source: this,\n      reset: true\n    });\n    this.#scrollModeChanged({\n      mode: ScrollMode.VERTICAL\n    });\n    this.#spreadModeChanged({\n      mode: SpreadMode.NONE\n    });\n  }\n  #updateUIState() {\n    const {\n      firstPageButton,\n      lastPageButton,\n      pageRotateCwButton,\n      pageRotateCcwButton\n    } = this.#opts;\n    firstPageButton.disabled = this.pageNumber <= 1;\n    lastPageButton.disabled = this.pageNumber >= this.pagesCount;\n    pageRotateCwButton.disabled = this.pagesCount === 0;\n    pageRotateCcwButton.disabled = this.pagesCount === 0;\n  }\n  #bindListeners(buttons) {\n    const {\n      eventBus\n    } = this;\n    const {\n      toggleButton\n    } = this.#opts;\n    toggleButton.addEventListener(\"click\", this.toggle.bind(this));\n    for (const {\n      element,\n      eventName,\n      close,\n      eventDetails\n    } of buttons) {\n      element.addEventListener(\"click\", evt => {\n        if (eventName !== null) {\n          eventBus.dispatch(eventName, {\n            source: this,\n            ...eventDetails\n          });\n        }\n        if (close) {\n          this.close();\n        }\n        eventBus.dispatch(\"reporttelemetry\", {\n          source: this,\n          details: {\n            type: \"buttons\",\n            data: {\n              id: element.id\n            }\n          }\n        });\n      });\n    }\n    eventBus._on(\"cursortoolchanged\", this.#cursorToolChanged.bind(this));\n    eventBus._on(\"scrollmodechanged\", this.#scrollModeChanged.bind(this));\n    eventBus._on(\"spreadmodechanged\", this.#spreadModeChanged.bind(this));\n  }\n  #cursorToolChanged({\n    tool\n  }) {\n    const {\n      cursorSelectToolButton,\n      cursorHandToolButton\n    } = this.#opts;\n    toggleCheckedBtn(cursorSelectToolButton, tool === CursorTool.SELECT);\n    toggleCheckedBtn(cursorHandToolButton, tool === CursorTool.HAND);\n  }\n  #scrollModeChanged({\n    mode\n  }) {\n    const {\n      scrollPageButton,\n      scrollVerticalButton,\n      scrollHorizontalButton,\n      scrollWrappedButton,\n      spreadNoneButton,\n      spreadOddButton,\n      spreadEvenButton\n    } = this.#opts;\n    toggleCheckedBtn(scrollPageButton, mode === ScrollMode.PAGE);\n    toggleCheckedBtn(scrollVerticalButton, mode === ScrollMode.VERTICAL);\n    toggleCheckedBtn(scrollHorizontalButton, mode === ScrollMode.HORIZONTAL);\n    toggleCheckedBtn(scrollWrappedButton, mode === ScrollMode.WRAPPED);\n    const forceScrollModePage = this.pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE;\n    scrollPageButton.disabled = forceScrollModePage;\n    scrollVerticalButton.disabled = forceScrollModePage;\n    scrollHorizontalButton.disabled = forceScrollModePage;\n    scrollWrappedButton.disabled = forceScrollModePage;\n    const isHorizontal = mode === ScrollMode.HORIZONTAL;\n    spreadNoneButton.disabled = isHorizontal;\n    spreadOddButton.disabled = isHorizontal;\n    spreadEvenButton.disabled = isHorizontal;\n  }\n  #spreadModeChanged({\n    mode\n  }) {\n    const {\n      spreadNoneButton,\n      spreadOddButton,\n      spreadEvenButton\n    } = this.#opts;\n    toggleCheckedBtn(spreadNoneButton, mode === SpreadMode.NONE);\n    toggleCheckedBtn(spreadOddButton, mode === SpreadMode.ODD);\n    toggleCheckedBtn(spreadEvenButton, mode === SpreadMode.EVEN);\n  }\n  open() {\n    if (this.opened) {\n      return;\n    }\n    this.opened = true;\n    const {\n      toggleButton,\n      toolbar\n    } = this.#opts;\n    toggleExpandedBtn(toggleButton, true, toolbar);\n  }\n  close() {\n    if (!this.opened) {\n      return;\n    }\n    this.opened = false;\n    const {\n      toggleButton,\n      toolbar\n    } = this.#opts;\n    toggleExpandedBtn(toggleButton, false, toolbar);\n  }\n  toggle() {\n    if (this.opened) {\n      this.close();\n    } else {\n      this.open();\n    }\n  }\n}\n\n;// CONCATENATED MODULE: ./web/toolbar.js\n\n\nclass Toolbar {\n  #opts;\n  constructor(options, eventBus) {\n    this.#opts = options;\n    this.eventBus = eventBus;\n    const buttons = [{\n      element: options.previous,\n      eventName: \"previouspage\"\n    }, {\n      element: options.next,\n      eventName: \"nextpage\"\n    }, {\n      element: options.zoomIn,\n      eventName: \"zoomin\"\n    }, {\n      element: options.zoomOut,\n      eventName: \"zoomout\"\n    }, {\n      element: options.print,\n      eventName: \"print\"\n    }, {\n      element: options.download,\n      eventName: \"download\"\n    }, {\n      element: options.editorFreeTextButton,\n      eventName: \"switchannotationeditormode\",\n      eventDetails: {\n        get mode() {\n          const {\n            classList\n          } = options.editorFreeTextButton;\n          return classList.contains(\"toggled\") ? AnnotationEditorType.NONE : AnnotationEditorType.FREETEXT;\n        }\n      }\n    }, {\n      element: options.editorHighlightButton,\n      eventName: \"switchannotationeditormode\",\n      eventDetails: {\n        get mode() {\n          const {\n            classList\n          } = options.editorHighlightButton;\n          return classList.contains(\"toggled\") ? AnnotationEditorType.NONE : AnnotationEditorType.HIGHLIGHT;\n        }\n      }\n    }, {\n      element: options.editorInkButton,\n      eventName: \"switchannotationeditormode\",\n      eventDetails: {\n        get mode() {\n          const {\n            classList\n          } = options.editorInkButton;\n          return classList.contains(\"toggled\") ? AnnotationEditorType.NONE : AnnotationEditorType.INK;\n        }\n      }\n    }, {\n      element: options.editorStampButton,\n      eventName: \"switchannotationeditormode\",\n      eventDetails: {\n        get mode() {\n          const {\n            classList\n          } = options.editorStampButton;\n          return classList.contains(\"toggled\") ? AnnotationEditorType.NONE : AnnotationEditorType.STAMP;\n        }\n      }\n    }];\n    this.#bindListeners(buttons);\n    if (options.editorHighlightColorPicker) {\n      eventBus._on(\"annotationeditoruimanager\", ({\n        uiManager\n      }) => {\n        this.#setAnnotationEditorUIManager(uiManager, options.editorHighlightColorPicker);\n      }, {\n        once: true\n      });\n    }\n    eventBus._on(\"showannotationeditorui\", ({\n      mode\n    }) => {\n      switch (mode) {\n        case AnnotationEditorType.HIGHLIGHT:\n          options.editorHighlightButton.click();\n          break;\n      }\n    });\n    this.reset();\n  }\n  #setAnnotationEditorUIManager(uiManager, parentContainer) {\n    const colorPicker = new ColorPicker({\n      uiManager\n    });\n    uiManager.setMainHighlightColorPicker(colorPicker);\n    parentContainer.append(colorPicker.renderMainDropdown());\n  }\n  setPageNumber(pageNumber, pageLabel) {\n    this.pageNumber = pageNumber;\n    this.pageLabel = pageLabel;\n    this.#updateUIState(false);\n  }\n  setPagesCount(pagesCount, hasPageLabels) {\n    this.pagesCount = pagesCount;\n    this.hasPageLabels = hasPageLabels;\n    this.#updateUIState(true);\n  }\n  setPageScale(pageScaleValue, pageScale) {\n    this.pageScaleValue = (pageScaleValue || pageScale).toString();\n    this.pageScale = pageScale;\n    this.#updateUIState(false);\n  }\n  reset() {\n    this.pageNumber = 0;\n    this.pageLabel = null;\n    this.hasPageLabels = false;\n    this.pagesCount = 0;\n    this.pageScaleValue = DEFAULT_SCALE_VALUE;\n    this.pageScale = DEFAULT_SCALE;\n    this.#updateUIState(true);\n    this.updateLoadingIndicatorState();\n    this.#editorModeChanged({\n      mode: AnnotationEditorType.DISABLE\n    });\n  }\n  #bindListeners(buttons) {\n    const {\n      eventBus\n    } = this;\n    const {\n      pageNumber,\n      scaleSelect\n    } = this.#opts;\n    const self = this;\n    for (const {\n      element,\n      eventName,\n      eventDetails\n    } of buttons) {\n      element.addEventListener(\"click\", evt => {\n        if (eventName !== null) {\n          eventBus.dispatch(eventName, {\n            source: this,\n            ...eventDetails,\n            isFromKeyboard: evt.detail === 0\n          });\n        }\n      });\n    }\n    pageNumber.addEventListener(\"click\", function () {\n      this.select();\n    });\n    pageNumber.addEventListener(\"change\", function () {\n      eventBus.dispatch(\"pagenumberchanged\", {\n        source: self,\n        value: this.value\n      });\n    });\n    scaleSelect.addEventListener(\"change\", function () {\n      if (this.value === \"custom\") {\n        return;\n      }\n      eventBus.dispatch(\"scalechanged\", {\n        source: self,\n        value: this.value\n      });\n    });\n    scaleSelect.addEventListener(\"click\", function ({\n      target\n    }) {\n      if (this.value === self.pageScaleValue && target.tagName.toUpperCase() === \"OPTION\") {\n        this.blur();\n      }\n    });\n    scaleSelect.oncontextmenu = noContextMenu;\n    eventBus._on(\"annotationeditormodechanged\", this.#editorModeChanged.bind(this));\n  }\n  #editorModeChanged({\n    mode\n  }) {\n    const {\n      editorFreeTextButton,\n      editorFreeTextParamsToolbar,\n      editorHighlightButton,\n      editorHighlightParamsToolbar,\n      editorInkButton,\n      editorInkParamsToolbar,\n      editorStampButton,\n      editorStampParamsToolbar\n    } = this.#opts;\n    toggleCheckedBtn(editorFreeTextButton, mode === AnnotationEditorType.FREETEXT, editorFreeTextParamsToolbar);\n    toggleCheckedBtn(editorHighlightButton, mode === AnnotationEditorType.HIGHLIGHT, editorHighlightParamsToolbar);\n    toggleCheckedBtn(editorInkButton, mode === AnnotationEditorType.INK, editorInkParamsToolbar);\n    toggleCheckedBtn(editorStampButton, mode === AnnotationEditorType.STAMP, editorStampParamsToolbar);\n    const isDisable = mode === AnnotationEditorType.DISABLE;\n    editorFreeTextButton.disabled = isDisable;\n    editorHighlightButton.disabled = isDisable;\n    editorInkButton.disabled = isDisable;\n    editorStampButton.disabled = isDisable;\n  }\n  #updateUIState(resetNumPages = false) {\n    const {\n      pageNumber,\n      pagesCount,\n      pageScaleValue,\n      pageScale\n    } = this;\n    const opts = this.#opts;\n    if (resetNumPages) {\n      if (this.hasPageLabels) {\n        opts.pageNumber.type = \"text\";\n        opts.numPages.setAttribute(\"data-l10n-id\", \"pdfjs-page-of-pages\");\n      } else {\n        opts.pageNumber.type = \"number\";\n        opts.numPages.setAttribute(\"data-l10n-id\", \"pdfjs-of-pages\");\n        opts.numPages.setAttribute(\"data-l10n-args\", JSON.stringify({\n          pagesCount\n        }));\n      }\n      opts.pageNumber.max = pagesCount;\n    }\n    if (this.hasPageLabels) {\n      opts.pageNumber.value = this.pageLabel;\n      opts.numPages.setAttribute(\"data-l10n-args\", JSON.stringify({\n        pageNumber,\n        pagesCount\n      }));\n    } else {\n      opts.pageNumber.value = pageNumber;\n    }\n    opts.previous.disabled = pageNumber <= 1;\n    opts.next.disabled = pageNumber >= pagesCount;\n    opts.zoomOut.disabled = pageScale <= MIN_SCALE;\n    opts.zoomIn.disabled = pageScale >= MAX_SCALE;\n    let predefinedValueFound = false;\n    for (const option of opts.scaleSelect.options) {\n      if (option.value !== pageScaleValue) {\n        option.selected = false;\n        continue;\n      }\n      option.selected = true;\n      predefinedValueFound = true;\n    }\n    if (!predefinedValueFound) {\n      opts.customScaleOption.selected = true;\n      opts.customScaleOption.setAttribute(\"data-l10n-args\", JSON.stringify({\n        scale: Math.round(pageScale * 10000) / 100\n      }));\n    }\n  }\n  updateLoadingIndicatorState(loading = false) {\n    const {\n      pageNumber\n    } = this.#opts;\n    pageNumber.classList.toggle(\"loading\", loading);\n  }\n}\n\n;// CONCATENATED MODULE: ./web/view_history.js\nconst DEFAULT_VIEW_HISTORY_CACHE_SIZE = 20;\nclass ViewHistory {\n  constructor(fingerprint, cacheSize = DEFAULT_VIEW_HISTORY_CACHE_SIZE) {\n    this.fingerprint = fingerprint;\n    this.cacheSize = cacheSize;\n    this._initializedPromise = this._readFromStorage().then(databaseStr => {\n      const database = JSON.parse(databaseStr || \"{}\");\n      let index = -1;\n      if (!Array.isArray(database.files)) {\n        database.files = [];\n      } else {\n        while (database.files.length >= this.cacheSize) {\n          database.files.shift();\n        }\n        for (let i = 0, ii = database.files.length; i < ii; i++) {\n          const branch = database.files[i];\n          if (branch.fingerprint === this.fingerprint) {\n            index = i;\n            break;\n          }\n        }\n      }\n      if (index === -1) {\n        index = database.files.push({\n          fingerprint: this.fingerprint\n        }) - 1;\n      }\n      this.file = database.files[index];\n      this.database = database;\n    });\n  }\n  async _writeToStorage() {\n    const databaseStr = JSON.stringify(this.database);\n    localStorage.setItem(\"pdfjs.history\", databaseStr);\n  }\n  async _readFromStorage() {\n    return localStorage.getItem(\"pdfjs.history\");\n  }\n  async set(name, val) {\n    await this._initializedPromise;\n    this.file[name] = val;\n    return this._writeToStorage();\n  }\n  async setMultiple(properties) {\n    await this._initializedPromise;\n    for (const name in properties) {\n      this.file[name] = properties[name];\n    }\n    return this._writeToStorage();\n  }\n  async get(name, defaultValue) {\n    await this._initializedPromise;\n    const val = this.file[name];\n    return val !== undefined ? val : defaultValue;\n  }\n  async getMultiple(properties) {\n    await this._initializedPromise;\n    const values = Object.create(null);\n    for (const name in properties) {\n      const val = this.file[name];\n      values[name] = val !== undefined ? val : properties[name];\n    }\n    return values;\n  }\n}\n\n;// CONCATENATED MODULE: ./web/app.js\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\n\n\n\n\n\n\nconst FORCE_PAGES_LOADED_TIMEOUT = 10000;\nconst WHEEL_ZOOM_DISABLED_TIMEOUT = 1000;\nconst ViewOnLoad = {\n  UNKNOWN: -1,\n  PREVIOUS: 0,\n  INITIAL: 1\n};\nconst PDFViewerApplication = {\n  initialBookmark: document.location.hash.substring(1),\n  _initializedCapability: {\n    ...Promise.withResolvers(),\n    settled: false\n  },\n  appConfig: null,\n  pdfDocument: null,\n  pdfLoadingTask: null,\n  printService: null,\n  pdfViewer: null,\n  pdfThumbnailViewer: null,\n  pdfRenderingQueue: null,\n  pdfPresentationMode: null,\n  pdfDocumentProperties: null,\n  pdfLinkService: null,\n  pdfHistory: null,\n  pdfSidebar: null,\n  pdfOutlineViewer: null,\n  pdfAttachmentViewer: null,\n  pdfLayerViewer: null,\n  pdfCursorTools: null,\n  pdfScriptingManager: null,\n  store: null,\n  downloadManager: null,\n  overlayManager: null,\n  preferences: null,\n  toolbar: null,\n  secondaryToolbar: null,\n  eventBus: null,\n  l10n: null,\n  annotationEditorParams: null,\n  isInitialViewSet: false,\n  downloadComplete: false,\n  isViewerEmbedded: window.parent !== window,\n  url: \"\",\n  baseUrl: \"\",\n  _downloadUrl: \"\",\n  _eventBusAbortController: null,\n  _windowAbortController: null,\n  documentInfo: null,\n  metadata: null,\n  _contentDispositionFilename: null,\n  _contentLength: null,\n  _saveInProgress: false,\n  _wheelUnusedTicks: 0,\n  _wheelUnusedFactor: 1,\n  _touchUnusedTicks: 0,\n  _touchUnusedFactor: 1,\n  _PDFBug: null,\n  _hasAnnotationEditors: false,\n  _title: document.title,\n  _printAnnotationStoragePromise: null,\n  _touchInfo: null,\n  _isCtrlKeyDown: false,\n  _nimbusDataPromise: null,\n  _caretBrowsing: null,\n  _isScrolling: false,\n  async initialize(appConfig) {\n    let l10nPromise;\n    this.appConfig = appConfig;\n    try {\n      await this.preferences.initializedPromise;\n    } catch (ex) {\n      console.error(`initialize: \"${ex.message}\".`);\n    }\n    if (AppOptions.get(\"pdfBugEnabled\")) {\n      await this._parseHashParams();\n    }\n    let mode;\n    switch (AppOptions.get(\"viewerCssTheme\")) {\n      case 1:\n        mode = \"is-light\";\n        break;\n      case 2:\n        mode = \"is-dark\";\n        break;\n    }\n    if (mode) {\n      document.documentElement.classList.add(mode);\n    }\n    l10nPromise = this.externalServices.createL10n();\n    this.l10n = await l10nPromise;\n    document.getElementsByTagName(\"html\")[0].dir = this.l10n.getDirection();\n    this.l10n.translate(appConfig.appContainer || document.documentElement);\n    if (this.isViewerEmbedded && AppOptions.get(\"externalLinkTarget\") === LinkTarget.NONE) {\n      AppOptions.set(\"externalLinkTarget\", LinkTarget.TOP);\n    }\n    await this._initializeViewerComponents();\n    this.bindEvents();\n    this.bindWindowEvents();\n    this._initializedCapability.settled = true;\n    this._initializedCapability.resolve();\n  },\n  async _parseHashParams() {\n    const hash = document.location.hash.substring(1);\n    if (!hash) {\n      return;\n    }\n    const {\n        mainContainer,\n        viewerContainer\n      } = this.appConfig,\n      params = parseQueryString(hash);\n    const loadPDFBug = async () => {\n      if (this._PDFBug) {\n        return;\n      }\n      const {\n        PDFBug\n      } = await import( /*webpackIgnore: true*/AppOptions.get(\"debuggerSrc\"));\n      this._PDFBug = PDFBug;\n    };\n    if (params.get(\"disableworker\") === \"true\") {\n      try {\n        GlobalWorkerOptions.workerSrc ||= AppOptions.get(\"workerSrc\");\n        await import( /*webpackIgnore: true*/PDFWorker.workerSrc);\n      } catch (ex) {\n        console.error(`_parseHashParams: \"${ex.message}\".`);\n      }\n    }\n    if (params.has(\"disablerange\")) {\n      AppOptions.set(\"disableRange\", params.get(\"disablerange\") === \"true\");\n    }\n    if (params.has(\"disablestream\")) {\n      AppOptions.set(\"disableStream\", params.get(\"disablestream\") === \"true\");\n    }\n    if (params.has(\"disableautofetch\")) {\n      AppOptions.set(\"disableAutoFetch\", params.get(\"disableautofetch\") === \"true\");\n    }\n    if (params.has(\"disablefontface\")) {\n      AppOptions.set(\"disableFontFace\", params.get(\"disablefontface\") === \"true\");\n    }\n    if (params.has(\"disablehistory\")) {\n      AppOptions.set(\"disableHistory\", params.get(\"disablehistory\") === \"true\");\n    }\n    if (params.has(\"verbosity\")) {\n      AppOptions.set(\"verbosity\", params.get(\"verbosity\") | 0);\n    }\n    if (params.has(\"textlayer\")) {\n      switch (params.get(\"textlayer\")) {\n        case \"off\":\n          AppOptions.set(\"textLayerMode\", TextLayerMode.DISABLE);\n          break;\n        case \"visible\":\n        case \"shadow\":\n        case \"hover\":\n          viewerContainer.classList.add(`textLayer-${params.get(\"textlayer\")}`);\n          try {\n            await loadPDFBug();\n            this._PDFBug.loadCSS();\n          } catch (ex) {\n            console.error(`_parseHashParams: \"${ex.message}\".`);\n          }\n          break;\n      }\n    }\n    if (params.has(\"pdfbug\")) {\n      AppOptions.setAll({\n        pdfBug: true,\n        fontExtraProperties: true\n      });\n      const enabled = params.get(\"pdfbug\").split(\",\");\n      try {\n        await loadPDFBug();\n        this._PDFBug.init(mainContainer, enabled);\n      } catch (ex) {\n        console.error(`_parseHashParams: \"${ex.message}\".`);\n      }\n    }\n    if (params.has(\"locale\")) {\n      AppOptions.set(\"locale\", params.get(\"locale\"));\n    }\n  },\n  async _initializeViewerComponents() {\n    const {\n      appConfig,\n      externalServices,\n      l10n\n    } = this;\n    const eventBus = AppOptions.get(\"isInAutomation\") ? new AutomationEventBus() : new EventBus();\n    this.eventBus = eventBus;\n    this.overlayManager = new OverlayManager();\n    const pdfRenderingQueue = new PDFRenderingQueue();\n    pdfRenderingQueue.onIdle = this._cleanup.bind(this);\n    this.pdfRenderingQueue = pdfRenderingQueue;\n    const pdfLinkService = new PDFLinkService({\n      eventBus,\n      externalLinkTarget: AppOptions.get(\"externalLinkTarget\"),\n      externalLinkRel: AppOptions.get(\"externalLinkRel\"),\n      ignoreDestinationZoom: AppOptions.get(\"ignoreDestinationZoom\")\n    });\n    this.pdfLinkService = pdfLinkService;\n    const downloadManager = this.downloadManager = new DownloadManager();\n    const findController = new PDFFindController({\n      linkService: pdfLinkService,\n      eventBus,\n      updateMatchesCountOnProgress: true\n    });\n    this.findController = findController;\n    const pdfScriptingManager = new PDFScriptingManager({\n      eventBus,\n      externalServices,\n      docProperties: this._scriptingDocProperties.bind(this)\n    });\n    this.pdfScriptingManager = pdfScriptingManager;\n    const container = appConfig.mainContainer,\n      viewer = appConfig.viewerContainer;\n    const annotationEditorMode = AppOptions.get(\"annotationEditorMode\");\n    const pageColors = AppOptions.get(\"forcePageColors\") || window.matchMedia(\"(forced-colors: active)\").matches ? {\n      background: AppOptions.get(\"pageColorsBackground\"),\n      foreground: AppOptions.get(\"pageColorsForeground\")\n    } : null;\n    const altTextManager = appConfig.altTextDialog ? new AltTextManager(appConfig.altTextDialog, container, this.overlayManager, eventBus) : null;\n    const pdfViewer = new PDFViewer({\n      container,\n      viewer,\n      eventBus,\n      renderingQueue: pdfRenderingQueue,\n      linkService: pdfLinkService,\n      downloadManager,\n      altTextManager,\n      findController,\n      scriptingManager: AppOptions.get(\"enableScripting\") && pdfScriptingManager,\n      l10n,\n      textLayerMode: AppOptions.get(\"textLayerMode\"),\n      annotationMode: AppOptions.get(\"annotationMode\"),\n      annotationEditorMode,\n      annotationEditorHighlightColors: AppOptions.get(\"highlightEditorColors\"),\n      enableHighlightFloatingButton: AppOptions.get(\"enableHighlightFloatingButton\"),\n      imageResourcesPath: AppOptions.get(\"imageResourcesPath\"),\n      enablePrintAutoRotate: AppOptions.get(\"enablePrintAutoRotate\"),\n      maxCanvasPixels: AppOptions.get(\"maxCanvasPixels\"),\n      enablePermissions: AppOptions.get(\"enablePermissions\"),\n      pageColors,\n      mlManager: this.mlManager\n    });\n    this.pdfViewer = pdfViewer;\n    pdfRenderingQueue.setViewer(pdfViewer);\n    pdfLinkService.setViewer(pdfViewer);\n    pdfScriptingManager.setViewer(pdfViewer);\n    if (appConfig.sidebar?.thumbnailView) {\n      this.pdfThumbnailViewer = new PDFThumbnailViewer({\n        container: appConfig.sidebar.thumbnailView,\n        eventBus,\n        renderingQueue: pdfRenderingQueue,\n        linkService: pdfLinkService,\n        pageColors\n      });\n      pdfRenderingQueue.setThumbnailViewer(this.pdfThumbnailViewer);\n    }\n    if (!this.isViewerEmbedded && !AppOptions.get(\"disableHistory\")) {\n      this.pdfHistory = new PDFHistory({\n        linkService: pdfLinkService,\n        eventBus\n      });\n      pdfLinkService.setHistory(this.pdfHistory);\n    }\n    if (!this.supportsIntegratedFind && appConfig.findBar) {\n      this.findBar = new PDFFindBar(appConfig.findBar, eventBus);\n    }\n    if (appConfig.annotationEditorParams) {\n      if (annotationEditorMode !== AnnotationEditorType.DISABLE) {\n        if (AppOptions.get(\"enableStampEditor\")) {\n          appConfig.toolbar?.editorStampButton?.classList.remove(\"hidden\");\n        }\n        const editorHighlightButton = appConfig.toolbar?.editorHighlightButton;\n        if (editorHighlightButton && AppOptions.get(\"enableHighlightEditor\")) {\n          editorHighlightButton.hidden = false;\n        }\n        this.annotationEditorParams = new AnnotationEditorParams(appConfig.annotationEditorParams, eventBus);\n      } else {\n        for (const id of [\"editorModeButtons\", \"editorModeSeparator\"]) {\n          document.getElementById(id)?.classList.add(\"hidden\");\n        }\n      }\n    }\n    if (appConfig.documentProperties) {\n      this.pdfDocumentProperties = new PDFDocumentProperties(appConfig.documentProperties, this.overlayManager, eventBus, l10n, () => this._docFilename);\n    }\n    if (appConfig.secondaryToolbar?.cursorHandToolButton) {\n      this.pdfCursorTools = new PDFCursorTools({\n        container,\n        eventBus,\n        cursorToolOnLoad: AppOptions.get(\"cursorToolOnLoad\")\n      });\n    }\n    if (appConfig.toolbar) {\n      this.toolbar = new Toolbar(appConfig.toolbar, eventBus);\n    }\n    if (appConfig.secondaryToolbar) {\n      this.secondaryToolbar = new SecondaryToolbar(appConfig.secondaryToolbar, eventBus);\n    }\n    if (this.supportsFullscreen && appConfig.secondaryToolbar?.presentationModeButton) {\n      this.pdfPresentationMode = new PDFPresentationMode({\n        container,\n        pdfViewer,\n        eventBus\n      });\n    }\n    if (appConfig.passwordOverlay) {\n      this.passwordPrompt = new PasswordPrompt(appConfig.passwordOverlay, this.overlayManager, this.isViewerEmbedded);\n    }\n    if (appConfig.sidebar?.outlineView) {\n      this.pdfOutlineViewer = new PDFOutlineViewer({\n        container: appConfig.sidebar.outlineView,\n        eventBus,\n        l10n,\n        linkService: pdfLinkService,\n        downloadManager\n      });\n    }\n    if (appConfig.sidebar?.attachmentsView) {\n      this.pdfAttachmentViewer = new PDFAttachmentViewer({\n        container: appConfig.sidebar.attachmentsView,\n        eventBus,\n        l10n,\n        downloadManager\n      });\n    }\n    if (appConfig.sidebar?.layersView) {\n      this.pdfLayerViewer = new PDFLayerViewer({\n        container: appConfig.sidebar.layersView,\n        eventBus,\n        l10n\n      });\n    }\n    if (appConfig.sidebar) {\n      this.pdfSidebar = new PDFSidebar({\n        elements: appConfig.sidebar,\n        eventBus,\n        l10n\n      });\n      this.pdfSidebar.onToggled = this.forceRendering.bind(this);\n      this.pdfSidebar.onUpdateThumbnails = () => {\n        for (const pageView of pdfViewer.getCachedPageViews()) {\n          if (pageView.renderingState === RenderingStates.FINISHED) {\n            this.pdfThumbnailViewer.getThumbnail(pageView.id - 1)?.setImage(pageView);\n          }\n        }\n        this.pdfThumbnailViewer.scrollThumbnailIntoView(pdfViewer.currentPageNumber);\n      };\n    }\n  },\n  async run(config) {\n    this.preferences = new Preferences();\n    await this.initialize(config);\n    const {\n      appConfig,\n      eventBus\n    } = this;\n    let file;\n    const queryString = document.location.search.substring(1);\n    const params = parseQueryString(queryString);\n    file = params.get(\"file\") ?? AppOptions.get(\"defaultUrl\");\n    validateFileURL(file);\n    const fileInput = this._openFileInput = document.createElement(\"input\");\n    fileInput.id = \"fileInput\";\n    fileInput.hidden = true;\n    fileInput.type = \"file\";\n    fileInput.value = null;\n    document.body.append(fileInput);\n    fileInput.addEventListener(\"change\", function (evt) {\n      const {\n        files\n      } = evt.target;\n      if (!files || files.length === 0) {\n        return;\n      }\n      eventBus.dispatch(\"fileinputchange\", {\n        source: this,\n        fileInput: evt.target\n      });\n    });\n    appConfig.mainContainer.addEventListener(\"dragover\", function (evt) {\n      evt.preventDefault();\n      evt.dataTransfer.dropEffect = evt.dataTransfer.effectAllowed === \"copy\" ? \"copy\" : \"move\";\n    });\n    appConfig.mainContainer.addEventListener(\"drop\", function (evt) {\n      evt.preventDefault();\n      const {\n        files\n      } = evt.dataTransfer;\n      if (!files || files.length === 0) {\n        return;\n      }\n      eventBus.dispatch(\"fileinputchange\", {\n        source: this,\n        fileInput: evt.dataTransfer\n      });\n    });\n    if (!AppOptions.get(\"supportsDocumentFonts\")) {\n      AppOptions.set(\"disableFontFace\", true);\n      this.l10n.get(\"pdfjs-web-fonts-disabled\").then(msg => {\n        console.warn(msg);\n      });\n    }\n    if (!this.supportsPrinting) {\n      appConfig.toolbar?.print?.classList.add(\"hidden\");\n      appConfig.secondaryToolbar?.printButton.classList.add(\"hidden\");\n    }\n    if (!this.supportsFullscreen) {\n      appConfig.secondaryToolbar?.presentationModeButton.classList.add(\"hidden\");\n    }\n    if (this.supportsIntegratedFind) {\n      appConfig.toolbar?.viewFind?.classList.add(\"hidden\");\n    }\n    if (file) {\n      this.open({\n        url: file\n      });\n    } else {\n      this._hideViewBookmark();\n    }\n  },\n  get externalServices() {\n    return shadow(this, \"externalServices\", new ExternalServices());\n  },\n  get mlManager() {\n    return shadow(this, \"mlManager\", AppOptions.get(\"enableML\") === true ? new MLManager() : null);\n  },\n  get initialized() {\n    return this._initializedCapability.settled;\n  },\n  get initializedPromise() {\n    return this._initializedCapability.promise;\n  },\n  updateZoom(steps, scaleFactor, origin) {\n    if (this.pdfViewer.isInPresentationMode) {\n      return;\n    }\n    this.pdfViewer.updateScale({\n      drawingDelay: AppOptions.get(\"defaultZoomDelay\"),\n      steps,\n      scaleFactor,\n      origin\n    });\n  },\n  zoomIn() {\n    this.updateZoom(1);\n  },\n  zoomOut() {\n    this.updateZoom(-1);\n  },\n  zoomReset() {\n    if (this.pdfViewer.isInPresentationMode) {\n      return;\n    }\n    this.pdfViewer.currentScaleValue = DEFAULT_SCALE_VALUE;\n  },\n  get pagesCount() {\n    return this.pdfDocument ? this.pdfDocument.numPages : 0;\n  },\n  get page() {\n    return this.pdfViewer.currentPageNumber;\n  },\n  set page(val) {\n    this.pdfViewer.currentPageNumber = val;\n  },\n  get supportsPrinting() {\n    return PDFPrintServiceFactory.supportsPrinting;\n  },\n  get supportsFullscreen() {\n    return shadow(this, \"supportsFullscreen\", document.fullscreenEnabled);\n  },\n  get supportsPinchToZoom() {\n    return shadow(this, \"supportsPinchToZoom\", AppOptions.get(\"supportsPinchToZoom\"));\n  },\n  get supportsIntegratedFind() {\n    return shadow(this, \"supportsIntegratedFind\", AppOptions.get(\"supportsIntegratedFind\"));\n  },\n  get loadingBar() {\n    const barElement = document.getElementById(\"loadingBar\");\n    const bar = barElement ? new ProgressBar(barElement) : null;\n    return shadow(this, \"loadingBar\", bar);\n  },\n  get supportsMouseWheelZoomCtrlKey() {\n    return shadow(this, \"supportsMouseWheelZoomCtrlKey\", AppOptions.get(\"supportsMouseWheelZoomCtrlKey\"));\n  },\n  get supportsMouseWheelZoomMetaKey() {\n    return shadow(this, \"supportsMouseWheelZoomMetaKey\", AppOptions.get(\"supportsMouseWheelZoomMetaKey\"));\n  },\n  get supportsCaretBrowsingMode() {\n    return AppOptions.get(\"supportsCaretBrowsingMode\");\n  },\n  moveCaret(isUp, select) {\n    this._caretBrowsing ||= new CaretBrowsingMode(this.appConfig.mainContainer, this.appConfig.viewerContainer, this.appConfig.toolbar?.container);\n    this._caretBrowsing.moveCaret(isUp, select);\n  },\n  setTitleUsingUrl(url = \"\", downloadUrl = null) {\n    this.url = url;\n    this.baseUrl = url.split(\"#\", 1)[0];\n    if (downloadUrl) {\n      this._downloadUrl = downloadUrl === url ? this.baseUrl : downloadUrl.split(\"#\", 1)[0];\n    }\n    if (isDataScheme(url)) {\n      this._hideViewBookmark();\n    }\n    let title = pdfjs_getPdfFilenameFromUrl(url, \"\");\n    if (!title) {\n      try {\n        title = decodeURIComponent(getFilenameFromUrl(url)) || url;\n      } catch {\n        title = url;\n      }\n    }\n    this.setTitle(title);\n  },\n  setTitle(title = this._title) {\n    this._title = title;\n    if (this.isViewerEmbedded) {\n      return;\n    }\n    const editorIndicator = this._hasAnnotationEditors && !this.pdfRenderingQueue.printing;\n    document.title = `${editorIndicator ? \"* \" : \"\"}${title}`;\n  },\n  get _docFilename() {\n    return this._contentDispositionFilename || pdfjs_getPdfFilenameFromUrl(this.url);\n  },\n  _hideViewBookmark() {\n    const {\n      secondaryToolbar\n    } = this.appConfig;\n    secondaryToolbar?.viewBookmarkButton.classList.add(\"hidden\");\n    if (secondaryToolbar?.presentationModeButton.classList.contains(\"hidden\")) {\n      document.getElementById(\"viewBookmarkSeparator\")?.classList.add(\"hidden\");\n    }\n  },\n  async close() {\n    this._unblockDocumentLoadEvent();\n    this._hideViewBookmark();\n    if (!this.pdfLoadingTask) {\n      return;\n    }\n    if (this.pdfDocument?.annotationStorage.size > 0 && this._annotationStorageModified) {\n      try {\n        await this.save();\n      } catch {}\n    }\n    const promises = [];\n    promises.push(this.pdfLoadingTask.destroy());\n    this.pdfLoadingTask = null;\n    if (this.pdfDocument) {\n      this.pdfDocument = null;\n      this.pdfThumbnailViewer?.setDocument(null);\n      this.pdfViewer.setDocument(null);\n      this.pdfLinkService.setDocument(null);\n      this.pdfDocumentProperties?.setDocument(null);\n    }\n    this.pdfLinkService.externalLinkEnabled = true;\n    this.store = null;\n    this.isInitialViewSet = false;\n    this.downloadComplete = false;\n    this.url = \"\";\n    this.baseUrl = \"\";\n    this._downloadUrl = \"\";\n    this.documentInfo = null;\n    this.metadata = null;\n    this._contentDispositionFilename = null;\n    this._contentLength = null;\n    this._saveInProgress = false;\n    this._hasAnnotationEditors = false;\n    promises.push(this.pdfScriptingManager.destroyPromise, this.passwordPrompt.close());\n    this.setTitle();\n    this.pdfSidebar?.reset();\n    this.pdfOutlineViewer?.reset();\n    this.pdfAttachmentViewer?.reset();\n    this.pdfLayerViewer?.reset();\n    this.pdfHistory?.reset();\n    this.findBar?.reset();\n    this.toolbar?.reset();\n    this.secondaryToolbar?.reset();\n    this._PDFBug?.cleanup();\n    await Promise.all(promises);\n  },\n  async open(args) {\n    if (this.pdfLoadingTask) {\n      await this.close();\n    }\n    const workerParams = AppOptions.getAll(OptionKind.WORKER);\n    Object.assign(GlobalWorkerOptions, workerParams);\n    if (args.url) {\n      this.setTitleUsingUrl(args.originalUrl || args.url, args.url);\n    }\n    const apiParams = AppOptions.getAll(OptionKind.API);\n    const loadingTask = getDocument({\n      ...apiParams,\n      ...args\n    });\n    this.pdfLoadingTask = loadingTask;\n    loadingTask.onPassword = (updateCallback, reason) => {\n      if (this.isViewerEmbedded) {\n        this._unblockDocumentLoadEvent();\n      }\n      this.pdfLinkService.externalLinkEnabled = false;\n      this.passwordPrompt.setUpdateCallback(updateCallback, reason);\n      this.passwordPrompt.open();\n    };\n    loadingTask.onProgress = ({\n      loaded,\n      total\n    }) => {\n      this.progress(loaded / total);\n    };\n    return loadingTask.promise.then(pdfDocument => {\n      this.load(pdfDocument);\n    }, reason => {\n      if (loadingTask !== this.pdfLoadingTask) {\n        return undefined;\n      }\n      let key = \"pdfjs-loading-error\";\n      if (reason instanceof InvalidPDFException) {\n        key = \"pdfjs-invalid-file-error\";\n      } else if (reason instanceof MissingPDFException) {\n        key = \"pdfjs-missing-file-error\";\n      } else if (reason instanceof UnexpectedResponseException) {\n        key = \"pdfjs-unexpected-response-error\";\n      }\n      return this._documentError(key, {\n        message: reason.message\n      }).then(() => {\n        throw reason;\n      });\n    });\n  },\n  _ensureDownloadComplete() {\n    if (this.pdfDocument && this.downloadComplete) {\n      return;\n    }\n    throw new Error(\"PDF document not downloaded.\");\n  },\n  async download(options = {}) {\n    const url = this._downloadUrl,\n      filename = this._docFilename;\n    try {\n      this._ensureDownloadComplete();\n      const data = await this.pdfDocument.getData();\n      const blob = new Blob([data], {\n        type: \"application/pdf\"\n      });\n      await this.downloadManager.download(blob, url, filename, options);\n    } catch {\n      await this.downloadManager.downloadUrl(url, filename, options);\n    }\n  },\n  async save(options = {}) {\n    if (this._saveInProgress) {\n      return;\n    }\n    this._saveInProgress = true;\n    await this.pdfScriptingManager.dispatchWillSave();\n    const url = this._downloadUrl,\n      filename = this._docFilename;\n    try {\n      this._ensureDownloadComplete();\n      const data = await this.pdfDocument.saveDocument();\n      const blob = new Blob([data], {\n        type: \"application/pdf\"\n      });\n      await this.downloadManager.download(blob, url, filename, options);\n    } catch (reason) {\n      console.error(`Error when saving the document: ${reason.message}`);\n      await this.download(options);\n    } finally {\n      await this.pdfScriptingManager.dispatchDidSave();\n      this._saveInProgress = false;\n    }\n    if (this._hasAnnotationEditors) {\n      this.externalServices.reportTelemetry({\n        type: \"editing\",\n        data: {\n          type: \"save\",\n          stats: this.pdfDocument?.annotationStorage.editorStats\n        }\n      });\n    }\n  },\n  downloadOrSave(options = {}) {\n    if (this.pdfDocument?.annotationStorage.size > 0) {\n      this.save(options);\n    } else {\n      this.download(options);\n    }\n  },\n  async _documentError(key, moreInfo = null) {\n    this._unblockDocumentLoadEvent();\n    const message = await this._otherError(key || \"pdfjs-loading-error\", moreInfo);\n    this.eventBus.dispatch(\"documenterror\", {\n      source: this,\n      message,\n      reason: moreInfo?.message ?? null\n    });\n  },\n  async _otherError(key, moreInfo = null) {\n    const message = await this.l10n.get(key);\n    const moreInfoText = [`PDF.js v${version || \"?\"} (build: ${build || \"?\"})`];\n    if (moreInfo) {\n      moreInfoText.push(`Message: ${moreInfo.message}`);\n      if (moreInfo.stack) {\n        moreInfoText.push(`Stack: ${moreInfo.stack}`);\n      } else {\n        if (moreInfo.filename) {\n          moreInfoText.push(`File: ${moreInfo.filename}`);\n        }\n        if (moreInfo.lineNumber) {\n          moreInfoText.push(`Line: ${moreInfo.lineNumber}`);\n        }\n      }\n    }\n    console.error(`${message}\\n\\n${moreInfoText.join(\"\\n\")}`);\n    return message;\n  },\n  progress(level) {\n    if (!this.loadingBar || this.downloadComplete) {\n      return;\n    }\n    const percent = Math.round(level * 100);\n    if (percent <= this.loadingBar.percent) {\n      return;\n    }\n    this.loadingBar.percent = percent;\n    if (this.pdfDocument?.loadingParams.disableAutoFetch ?? AppOptions.get(\"disableAutoFetch\")) {\n      this.loadingBar.setDisableAutoFetch();\n    }\n  },\n  load(pdfDocument) {\n    this.pdfDocument = pdfDocument;\n    pdfDocument.getDownloadInfo().then(({\n      length\n    }) => {\n      this._contentLength = length;\n      this.downloadComplete = true;\n      this.loadingBar?.hide();\n      firstPagePromise.then(() => {\n        this.eventBus.dispatch(\"documentloaded\", {\n          source: this\n        });\n      });\n    });\n    const pageLayoutPromise = pdfDocument.getPageLayout().catch(() => {});\n    const pageModePromise = pdfDocument.getPageMode().catch(() => {});\n    const openActionPromise = pdfDocument.getOpenAction().catch(() => {});\n    this.toolbar?.setPagesCount(pdfDocument.numPages, false);\n    this.secondaryToolbar?.setPagesCount(pdfDocument.numPages);\n    this.pdfLinkService.setDocument(pdfDocument);\n    this.pdfDocumentProperties?.setDocument(pdfDocument);\n    const pdfViewer = this.pdfViewer;\n    pdfViewer.setDocument(pdfDocument);\n    const {\n      firstPagePromise,\n      onePageRendered,\n      pagesPromise\n    } = pdfViewer;\n    this.pdfThumbnailViewer?.setDocument(pdfDocument);\n    const storedPromise = (this.store = new ViewHistory(pdfDocument.fingerprints[0])).getMultiple({\n      page: null,\n      zoom: DEFAULT_SCALE_VALUE,\n      scrollLeft: \"0\",\n      scrollTop: \"0\",\n      rotation: null,\n      sidebarView: SidebarView.UNKNOWN,\n      scrollMode: ScrollMode.UNKNOWN,\n      spreadMode: SpreadMode.UNKNOWN\n    }).catch(() => {});\n    firstPagePromise.then(pdfPage => {\n      this.loadingBar?.setWidth(this.appConfig.viewerContainer);\n      this._initializeAnnotationStorageCallbacks(pdfDocument);\n      Promise.all([animationStarted, storedPromise, pageLayoutPromise, pageModePromise, openActionPromise]).then(async ([timeStamp, stored, pageLayout, pageMode, openAction]) => {\n        const viewOnLoad = AppOptions.get(\"viewOnLoad\");\n        this._initializePdfHistory({\n          fingerprint: pdfDocument.fingerprints[0],\n          viewOnLoad,\n          initialDest: openAction?.dest\n        });\n        const initialBookmark = this.initialBookmark;\n        const zoom = AppOptions.get(\"defaultZoomValue\");\n        let hash = zoom ? `zoom=${zoom}` : null;\n        let rotation = null;\n        let sidebarView = AppOptions.get(\"sidebarViewOnLoad\");\n        let scrollMode = AppOptions.get(\"scrollModeOnLoad\");\n        let spreadMode = AppOptions.get(\"spreadModeOnLoad\");\n        if (stored?.page && viewOnLoad !== ViewOnLoad.INITIAL) {\n          hash = `page=${stored.page}&zoom=${zoom || stored.zoom},` + `${stored.scrollLeft},${stored.scrollTop}`;\n          rotation = parseInt(stored.rotation, 10);\n          if (sidebarView === SidebarView.UNKNOWN) {\n            sidebarView = stored.sidebarView | 0;\n          }\n          if (scrollMode === ScrollMode.UNKNOWN) {\n            scrollMode = stored.scrollMode | 0;\n          }\n          if (spreadMode === SpreadMode.UNKNOWN) {\n            spreadMode = stored.spreadMode | 0;\n          }\n        }\n        if (pageMode && sidebarView === SidebarView.UNKNOWN) {\n          sidebarView = apiPageModeToSidebarView(pageMode);\n        }\n        if (pageLayout && scrollMode === ScrollMode.UNKNOWN && spreadMode === SpreadMode.UNKNOWN) {\n          const modes = apiPageLayoutToViewerModes(pageLayout);\n          spreadMode = modes.spreadMode;\n        }\n        this.setInitialView(hash, {\n          rotation,\n          sidebarView,\n          scrollMode,\n          spreadMode\n        });\n        this.eventBus.dispatch(\"documentinit\", {\n          source: this\n        });\n        if (!this.isViewerEmbedded) {\n          pdfViewer.focus();\n        }\n        await Promise.race([pagesPromise, new Promise(resolve => {\n          setTimeout(resolve, FORCE_PAGES_LOADED_TIMEOUT);\n        })]);\n        if (!initialBookmark && !hash) {\n          return;\n        }\n        if (pdfViewer.hasEqualPageSizes) {\n          return;\n        }\n        this.initialBookmark = initialBookmark;\n        pdfViewer.currentScaleValue = pdfViewer.currentScaleValue;\n        this.setInitialView(hash);\n      }).catch(() => {\n        this.setInitialView();\n      }).then(function () {\n        pdfViewer.update();\n      });\n    });\n    pagesPromise.then(() => {\n      this._unblockDocumentLoadEvent();\n      this._initializeAutoPrint(pdfDocument, openActionPromise);\n    }, reason => {\n      this._documentError(\"pdfjs-loading-error\", {\n        message: reason.message\n      });\n    });\n    onePageRendered.then(data => {\n      this.externalServices.reportTelemetry({\n        type: \"pageInfo\",\n        timestamp: data.timestamp\n      });\n      if (this.pdfOutlineViewer) {\n        pdfDocument.getOutline().then(outline => {\n          if (pdfDocument !== this.pdfDocument) {\n            return;\n          }\n          this.pdfOutlineViewer.render({\n            outline,\n            pdfDocument\n          });\n        });\n      }\n      if (this.pdfAttachmentViewer) {\n        pdfDocument.getAttachments().then(attachments => {\n          if (pdfDocument !== this.pdfDocument) {\n            return;\n          }\n          this.pdfAttachmentViewer.render({\n            attachments\n          });\n        });\n      }\n      if (this.pdfLayerViewer) {\n        pdfViewer.optionalContentConfigPromise.then(optionalContentConfig => {\n          if (pdfDocument !== this.pdfDocument) {\n            return;\n          }\n          this.pdfLayerViewer.render({\n            optionalContentConfig,\n            pdfDocument\n          });\n        });\n      }\n    });\n    this._initializePageLabels(pdfDocument);\n    this._initializeMetadata(pdfDocument);\n  },\n  async _scriptingDocProperties(pdfDocument) {\n    if (!this.documentInfo) {\n      await new Promise(resolve => {\n        this.eventBus._on(\"metadataloaded\", resolve, {\n          once: true\n        });\n      });\n      if (pdfDocument !== this.pdfDocument) {\n        return null;\n      }\n    }\n    if (!this._contentLength) {\n      await new Promise(resolve => {\n        this.eventBus._on(\"documentloaded\", resolve, {\n          once: true\n        });\n      });\n      if (pdfDocument !== this.pdfDocument) {\n        return null;\n      }\n    }\n    return {\n      ...this.documentInfo,\n      baseURL: this.baseUrl,\n      filesize: this._contentLength,\n      filename: this._docFilename,\n      metadata: this.metadata?.getRaw(),\n      authors: this.metadata?.get(\"dc:creator\"),\n      numPages: this.pagesCount,\n      URL: this.url\n    };\n  },\n  async _initializeAutoPrint(pdfDocument, openActionPromise) {\n    const [openAction, jsActions] = await Promise.all([openActionPromise, this.pdfViewer.enableScripting ? null : pdfDocument.getJSActions()]);\n    if (pdfDocument !== this.pdfDocument) {\n      return;\n    }\n    let triggerAutoPrint = openAction?.action === \"Print\";\n    if (jsActions) {\n      console.warn(\"Warning: JavaScript support is not enabled\");\n      for (const name in jsActions) {\n        if (triggerAutoPrint) {\n          break;\n        }\n        switch (name) {\n          case \"WillClose\":\n          case \"WillSave\":\n          case \"DidSave\":\n          case \"WillPrint\":\n          case \"DidPrint\":\n            continue;\n        }\n        triggerAutoPrint = jsActions[name].some(js => AutoPrintRegExp.test(js));\n      }\n    }\n    if (triggerAutoPrint) {\n      this.triggerPrinting();\n    }\n  },\n  async _initializeMetadata(pdfDocument) {\n    const {\n      info,\n      metadata,\n      contentDispositionFilename,\n      contentLength\n    } = await pdfDocument.getMetadata();\n    if (pdfDocument !== this.pdfDocument) {\n      return;\n    }\n    this.documentInfo = info;\n    this.metadata = metadata;\n    this._contentDispositionFilename ??= contentDispositionFilename;\n    this._contentLength ??= contentLength;\n    console.log(`PDF ${pdfDocument.fingerprints[0]} [${info.PDFFormatVersion} ` + `${(info.Producer || \"-\").trim()} / ${(info.Creator || \"-\").trim()}] ` + `(PDF.js: ${version || \"?\"} [${build || \"?\"}])`);\n    let pdfTitle = info.Title;\n    const metadataTitle = metadata?.get(\"dc:title\");\n    if (metadataTitle) {\n      if (metadataTitle !== \"Untitled\" && !/[\\uFFF0-\\uFFFF]/g.test(metadataTitle)) {\n        pdfTitle = metadataTitle;\n      }\n    }\n    if (pdfTitle) {\n      this.setTitle(`${pdfTitle} - ${this._contentDispositionFilename || this._title}`);\n    } else if (this._contentDispositionFilename) {\n      this.setTitle(this._contentDispositionFilename);\n    }\n    if (info.IsXFAPresent && !info.IsAcroFormPresent && !pdfDocument.isPureXfa) {\n      if (pdfDocument.loadingParams.enableXfa) {\n        console.warn(\"Warning: XFA Foreground documents are not supported\");\n      } else {\n        console.warn(\"Warning: XFA support is not enabled\");\n      }\n    } else if ((info.IsAcroFormPresent || info.IsXFAPresent) && !this.pdfViewer.renderForms) {\n      console.warn(\"Warning: Interactive form support is not enabled\");\n    }\n    if (info.IsSignaturesPresent) {\n      console.warn(\"Warning: Digital signatures validation is not supported\");\n    }\n    this.eventBus.dispatch(\"metadataloaded\", {\n      source: this\n    });\n  },\n  async _initializePageLabels(pdfDocument) {\n    const labels = await pdfDocument.getPageLabels();\n    if (pdfDocument !== this.pdfDocument) {\n      return;\n    }\n    if (!labels || AppOptions.get(\"disablePageLabels\")) {\n      return;\n    }\n    const numLabels = labels.length;\n    let standardLabels = 0,\n      emptyLabels = 0;\n    for (let i = 0; i < numLabels; i++) {\n      const label = labels[i];\n      if (label === (i + 1).toString()) {\n        standardLabels++;\n      } else if (label === \"\") {\n        emptyLabels++;\n      } else {\n        break;\n      }\n    }\n    if (standardLabels >= numLabels || emptyLabels >= numLabels) {\n      return;\n    }\n    const {\n      pdfViewer,\n      pdfThumbnailViewer,\n      toolbar\n    } = this;\n    pdfViewer.setPageLabels(labels);\n    pdfThumbnailViewer?.setPageLabels(labels);\n    toolbar?.setPagesCount(numLabels, true);\n    toolbar?.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel);\n  },\n  _initializePdfHistory({\n    fingerprint,\n    viewOnLoad,\n    initialDest = null\n  }) {\n    if (!this.pdfHistory) {\n      return;\n    }\n    this.pdfHistory.initialize({\n      fingerprint,\n      resetHistory: viewOnLoad === ViewOnLoad.INITIAL,\n      updateUrl: AppOptions.get(\"historyUpdateUrl\")\n    });\n    if (this.pdfHistory.initialBookmark) {\n      this.initialBookmark = this.pdfHistory.initialBookmark;\n      this.initialRotation = this.pdfHistory.initialRotation;\n    }\n    if (initialDest && !this.initialBookmark && viewOnLoad === ViewOnLoad.UNKNOWN) {\n      this.initialBookmark = JSON.stringify(initialDest);\n      this.pdfHistory.push({\n        explicitDest: initialDest,\n        pageNumber: null\n      });\n    }\n  },\n  _initializeAnnotationStorageCallbacks(pdfDocument) {\n    if (pdfDocument !== this.pdfDocument) {\n      return;\n    }\n    const {\n      annotationStorage\n    } = pdfDocument;\n    annotationStorage.onSetModified = () => {\n      window.addEventListener(\"beforeunload\", beforeUnload);\n      this._annotationStorageModified = true;\n    };\n    annotationStorage.onResetModified = () => {\n      window.removeEventListener(\"beforeunload\", beforeUnload);\n      delete this._annotationStorageModified;\n    };\n    annotationStorage.onAnnotationEditor = typeStr => {\n      this._hasAnnotationEditors = !!typeStr;\n      this.setTitle();\n    };\n  },\n  setInitialView(storedHash, {\n    rotation,\n    sidebarView,\n    scrollMode,\n    spreadMode\n  } = {}) {\n    const setRotation = angle => {\n      if (isValidRotation(angle)) {\n        this.pdfViewer.pagesRotation = angle;\n      }\n    };\n    const setViewerModes = (scroll, spread) => {\n      if (isValidScrollMode(scroll)) {\n        this.pdfViewer.scrollMode = scroll;\n      }\n      if (isValidSpreadMode(spread)) {\n        this.pdfViewer.spreadMode = spread;\n      }\n    };\n    this.isInitialViewSet = true;\n    this.pdfSidebar?.setInitialView(sidebarView);\n    setViewerModes(scrollMode, spreadMode);\n    if (this.initialBookmark) {\n      setRotation(this.initialRotation);\n      delete this.initialRotation;\n      this.pdfLinkService.setHash(this.initialBookmark);\n      this.initialBookmark = null;\n    } else if (storedHash) {\n      setRotation(rotation);\n      this.pdfLinkService.setHash(storedHash);\n    }\n    this.toolbar?.setPageNumber(this.pdfViewer.currentPageNumber, this.pdfViewer.currentPageLabel);\n    this.secondaryToolbar?.setPageNumber(this.pdfViewer.currentPageNumber);\n    if (!this.pdfViewer.currentScaleValue) {\n      this.pdfViewer.currentScaleValue = DEFAULT_SCALE_VALUE;\n    }\n  },\n  _cleanup() {\n    if (!this.pdfDocument) {\n      return;\n    }\n    this.pdfViewer.cleanup();\n    this.pdfThumbnailViewer?.cleanup();\n    this.pdfDocument.cleanup(AppOptions.get(\"fontExtraProperties\"));\n  },\n  forceRendering() {\n    this.pdfRenderingQueue.printing = !!this.printService;\n    this.pdfRenderingQueue.isThumbnailViewEnabled = this.pdfSidebar?.visibleView === SidebarView.THUMBS;\n    this.pdfRenderingQueue.renderHighestPriority();\n  },\n  beforePrint() {\n    this._printAnnotationStoragePromise = this.pdfScriptingManager.dispatchWillPrint().catch(() => {}).then(() => this.pdfDocument?.annotationStorage.print);\n    if (this.printService) {\n      return;\n    }\n    if (!this.supportsPrinting) {\n      this._otherError(\"pdfjs-printing-not-supported\");\n      return;\n    }\n    if (!this.pdfViewer.pageViewsReady) {\n      this.l10n.get(\"pdfjs-printing-not-ready\").then(msg => {\n        window.alert(msg);\n      });\n      return;\n    }\n    this.printService = PDFPrintServiceFactory.createPrintService({\n      pdfDocument: this.pdfDocument,\n      pagesOverview: this.pdfViewer.getPagesOverview(),\n      printContainer: this.appConfig.printContainer,\n      printResolution: AppOptions.get(\"printResolution\"),\n      printAnnotationStoragePromise: this._printAnnotationStoragePromise\n    });\n    this.forceRendering();\n    this.setTitle();\n    this.printService.layout();\n    if (this._hasAnnotationEditors) {\n      this.externalServices.reportTelemetry({\n        type: \"editing\",\n        data: {\n          type: \"print\",\n          stats: this.pdfDocument?.annotationStorage.editorStats\n        }\n      });\n    }\n  },\n  afterPrint() {\n    if (this._printAnnotationStoragePromise) {\n      this._printAnnotationStoragePromise.then(() => {\n        this.pdfScriptingManager.dispatchDidPrint();\n      });\n      this._printAnnotationStoragePromise = null;\n    }\n    if (this.printService) {\n      this.printService.destroy();\n      this.printService = null;\n      this.pdfDocument?.annotationStorage.resetModified();\n    }\n    this.forceRendering();\n    this.setTitle();\n  },\n  rotatePages(delta) {\n    this.pdfViewer.pagesRotation += delta;\n  },\n  requestPresentationMode() {\n    this.pdfPresentationMode?.request();\n  },\n  triggerPrinting() {\n    if (!this.supportsPrinting) {\n      return;\n    }\n    window.print();\n  },\n  bindEvents() {\n    if (this._eventBusAbortController) {\n      return;\n    }\n    this._eventBusAbortController = new AbortController();\n    const {\n      eventBus,\n      _eventBusAbortController: {\n        signal\n      }\n    } = this;\n    eventBus._on(\"resize\", webViewerResize, {\n      signal\n    });\n    eventBus._on(\"hashchange\", webViewerHashchange, {\n      signal\n    });\n    eventBus._on(\"beforeprint\", this.beforePrint.bind(this), {\n      signal\n    });\n    eventBus._on(\"afterprint\", this.afterPrint.bind(this), {\n      signal\n    });\n    eventBus._on(\"pagerender\", webViewerPageRender, {\n      signal\n    });\n    eventBus._on(\"pagerendered\", webViewerPageRendered, {\n      signal\n    });\n    eventBus._on(\"updateviewarea\", webViewerUpdateViewarea, {\n      signal\n    });\n    eventBus._on(\"pagechanging\", webViewerPageChanging, {\n      signal\n    });\n    eventBus._on(\"scalechanging\", webViewerScaleChanging, {\n      signal\n    });\n    eventBus._on(\"rotationchanging\", webViewerRotationChanging, {\n      signal\n    });\n    eventBus._on(\"sidebarviewchanged\", webViewerSidebarViewChanged, {\n      signal\n    });\n    eventBus._on(\"pagemode\", webViewerPageMode, {\n      signal\n    });\n    eventBus._on(\"namedaction\", webViewerNamedAction, {\n      signal\n    });\n    eventBus._on(\"presentationmodechanged\", webViewerPresentationModeChanged, {\n      signal\n    });\n    eventBus._on(\"presentationmode\", webViewerPresentationMode, {\n      signal\n    });\n    eventBus._on(\"switchannotationeditormode\", webViewerSwitchAnnotationEditorMode, {\n      signal\n    });\n    eventBus._on(\"switchannotationeditorparams\", webViewerSwitchAnnotationEditorParams, {\n      signal\n    });\n    eventBus._on(\"print\", webViewerPrint, {\n      signal\n    });\n    eventBus._on(\"download\", webViewerDownload, {\n      signal\n    });\n    eventBus._on(\"firstpage\", webViewerFirstPage, {\n      signal\n    });\n    eventBus._on(\"lastpage\", webViewerLastPage, {\n      signal\n    });\n    eventBus._on(\"nextpage\", webViewerNextPage, {\n      signal\n    });\n    eventBus._on(\"previouspage\", webViewerPreviousPage, {\n      signal\n    });\n    eventBus._on(\"zoomin\", webViewerZoomIn, {\n      signal\n    });\n    eventBus._on(\"zoomout\", webViewerZoomOut, {\n      signal\n    });\n    eventBus._on(\"zoomreset\", webViewerZoomReset, {\n      signal\n    });\n    eventBus._on(\"pagenumberchanged\", webViewerPageNumberChanged, {\n      signal\n    });\n    eventBus._on(\"scalechanged\", webViewerScaleChanged, {\n      signal\n    });\n    eventBus._on(\"rotatecw\", webViewerRotateCw, {\n      signal\n    });\n    eventBus._on(\"rotateccw\", webViewerRotateCcw, {\n      signal\n    });\n    eventBus._on(\"optionalcontentconfig\", webViewerOptionalContentConfig, {\n      signal\n    });\n    eventBus._on(\"switchscrollmode\", webViewerSwitchScrollMode, {\n      signal\n    });\n    eventBus._on(\"scrollmodechanged\", webViewerScrollModeChanged, {\n      signal\n    });\n    eventBus._on(\"switchspreadmode\", webViewerSwitchSpreadMode, {\n      signal\n    });\n    eventBus._on(\"spreadmodechanged\", webViewerSpreadModeChanged, {\n      signal\n    });\n    eventBus._on(\"documentproperties\", webViewerDocumentProperties, {\n      signal\n    });\n    eventBus._on(\"findfromurlhash\", webViewerFindFromUrlHash, {\n      signal\n    });\n    eventBus._on(\"updatefindmatchescount\", webViewerUpdateFindMatchesCount, {\n      signal\n    });\n    eventBus._on(\"updatefindcontrolstate\", webViewerUpdateFindControlState, {\n      signal\n    });\n    eventBus._on(\"fileinputchange\", webViewerFileInputChange, {\n      signal\n    });\n    eventBus._on(\"openfile\", webViewerOpenFile, {\n      signal\n    });\n  },\n  bindWindowEvents() {\n    if (this._windowAbortController) {\n      return;\n    }\n    this._windowAbortController = new AbortController();\n    const {\n      eventBus,\n      appConfig: {\n        mainContainer\n      },\n      _windowAbortController: {\n        signal\n      }\n    } = this;\n    function addWindowResolutionChange(evt = null) {\n      if (evt) {\n        webViewerResolutionChange(evt);\n      }\n      const mediaQueryList = window.matchMedia(`(resolution: ${window.devicePixelRatio || 1}dppx)`);\n      mediaQueryList.addEventListener(\"change\", addWindowResolutionChange, {\n        once: true,\n        signal\n      });\n    }\n    addWindowResolutionChange();\n    window.addEventListener(\"visibilitychange\", webViewerVisibilityChange, {\n      signal\n    });\n    window.addEventListener(\"wheel\", webViewerWheel, {\n      passive: false,\n      signal\n    });\n    window.addEventListener(\"touchstart\", webViewerTouchStart, {\n      passive: false,\n      signal\n    });\n    window.addEventListener(\"touchmove\", webViewerTouchMove, {\n      passive: false,\n      signal\n    });\n    window.addEventListener(\"touchend\", webViewerTouchEnd, {\n      passive: false,\n      signal\n    });\n    window.addEventListener(\"click\", webViewerClick, {\n      signal\n    });\n    window.addEventListener(\"keydown\", webViewerKeyDown, {\n      signal\n    });\n    window.addEventListener(\"keyup\", webViewerKeyUp, {\n      signal\n    });\n    window.addEventListener(\"resize\", () => {\n      eventBus.dispatch(\"resize\", {\n        source: window\n      });\n    }, {\n      signal\n    });\n    window.addEventListener(\"hashchange\", () => {\n      eventBus.dispatch(\"hashchange\", {\n        source: window,\n        hash: document.location.hash.substring(1)\n      });\n    }, {\n      signal\n    });\n    window.addEventListener(\"beforeprint\", () => {\n      eventBus.dispatch(\"beforeprint\", {\n        source: window\n      });\n    }, {\n      signal\n    });\n    window.addEventListener(\"afterprint\", () => {\n      eventBus.dispatch(\"afterprint\", {\n        source: window\n      });\n    }, {\n      signal\n    });\n    window.addEventListener(\"updatefromsandbox\", event => {\n      eventBus.dispatch(\"updatefromsandbox\", {\n        source: window,\n        detail: event.detail\n      });\n    }, {\n      signal\n    });\n    if (!(\"onscrollend\" in document.documentElement)) {\n      return;\n    }\n    ({\n      scrollTop: this._lastScrollTop,\n      scrollLeft: this._lastScrollLeft\n    } = mainContainer);\n    const scrollend = () => {\n      ({\n        scrollTop: this._lastScrollTop,\n        scrollLeft: this._lastScrollLeft\n      } = mainContainer);\n      this._isScrolling = false;\n      mainContainer.addEventListener(\"scroll\", scroll, {\n        passive: true,\n        signal\n      });\n      mainContainer.removeEventListener(\"scrollend\", scrollend);\n      mainContainer.removeEventListener(\"blur\", scrollend);\n    };\n    const scroll = () => {\n      if (this._isCtrlKeyDown) {\n        return;\n      }\n      if (this._lastScrollTop === mainContainer.scrollTop && this._lastScrollLeft === mainContainer.scrollLeft) {\n        return;\n      }\n      mainContainer.removeEventListener(\"scroll\", scroll, {\n        passive: true\n      });\n      this._isScrolling = true;\n      mainContainer.addEventListener(\"scrollend\", scrollend, {\n        signal\n      });\n      mainContainer.addEventListener(\"blur\", scrollend, {\n        signal\n      });\n    };\n    mainContainer.addEventListener(\"scroll\", scroll, {\n      passive: true,\n      signal\n    });\n  },\n  unbindEvents() {\n    this._eventBusAbortController?.abort();\n    this._eventBusAbortController = null;\n  },\n  unbindWindowEvents() {\n    this._windowAbortController?.abort();\n    this._windowAbortController = null;\n  },\n  _accumulateTicks(ticks, prop) {\n    if (this[prop] > 0 && ticks < 0 || this[prop] < 0 && ticks > 0) {\n      this[prop] = 0;\n    }\n    this[prop] += ticks;\n    const wholeTicks = Math.trunc(this[prop]);\n    this[prop] -= wholeTicks;\n    return wholeTicks;\n  },\n  _accumulateFactor(previousScale, factor, prop) {\n    if (factor === 1) {\n      return 1;\n    }\n    if (this[prop] > 1 && factor < 1 || this[prop] < 1 && factor > 1) {\n      this[prop] = 1;\n    }\n    const newFactor = Math.floor(previousScale * factor * this[prop] * 100) / (100 * previousScale);\n    this[prop] = factor / newFactor;\n    return newFactor;\n  },\n  _unblockDocumentLoadEvent() {\n    document.blockUnblockOnload?.(false);\n    this._unblockDocumentLoadEvent = () => {};\n  },\n  get scriptingReady() {\n    return this.pdfScriptingManager.ready;\n  }\n};\ninitCom(PDFViewerApplication);\n{\n  PDFPrintServiceFactory.initGlobals(PDFViewerApplication);\n}\n{\n  const HOSTED_VIEWER_ORIGINS = [\"null\", \"http://mozilla.github.io\", \"https://mozilla.github.io\"];\n  var validateFileURL = function (file) {\n    if (!file) {\n      return;\n    }\n    try {\n      const viewerOrigin = new URL(window.location.href).origin || \"null\";\n      if (HOSTED_VIEWER_ORIGINS.includes(viewerOrigin)) {\n        return;\n      }\n      const fileOrigin = new URL(file, window.location.href).origin;\n      // if (fileOrigin !== viewerOrigin) {\n      //   throw new Error(\"file origin does not match viewer's\");\n      // }\n    } catch (ex) {\n      PDFViewerApplication._documentError(\"pdfjs-loading-error\", {\n        message: ex.message\n      });\n      throw ex;\n    }\n  };\n}\nfunction webViewerPageRender({\n  pageNumber\n}) {\n  if (pageNumber === PDFViewerApplication.page) {\n    PDFViewerApplication.toolbar?.updateLoadingIndicatorState(true);\n  }\n}\nfunction webViewerPageRendered({\n  pageNumber,\n  error\n}) {\n  if (pageNumber === PDFViewerApplication.page) {\n    PDFViewerApplication.toolbar?.updateLoadingIndicatorState(false);\n  }\n  if (PDFViewerApplication.pdfSidebar?.visibleView === SidebarView.THUMBS) {\n    const pageView = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1);\n    const thumbnailView = PDFViewerApplication.pdfThumbnailViewer?.getThumbnail(pageNumber - 1);\n    if (pageView) {\n      thumbnailView?.setImage(pageView);\n    }\n  }\n  if (error) {\n    PDFViewerApplication._otherError(\"pdfjs-rendering-error\", error);\n  }\n}\nfunction webViewerPageMode({\n  mode\n}) {\n  let view;\n  switch (mode) {\n    case \"thumbs\":\n      view = SidebarView.THUMBS;\n      break;\n    case \"bookmarks\":\n    case \"outline\":\n      view = SidebarView.OUTLINE;\n      break;\n    case \"attachments\":\n      view = SidebarView.ATTACHMENTS;\n      break;\n    case \"layers\":\n      view = SidebarView.LAYERS;\n      break;\n    case \"none\":\n      view = SidebarView.NONE;\n      break;\n    default:\n      console.error('Invalid \"pagemode\" hash parameter: ' + mode);\n      return;\n  }\n  PDFViewerApplication.pdfSidebar?.switchView(view, true);\n}\nfunction webViewerNamedAction(evt) {\n  switch (evt.action) {\n    case \"GoToPage\":\n      PDFViewerApplication.appConfig.toolbar?.pageNumber.select();\n      break;\n    case \"Find\":\n      if (!PDFViewerApplication.supportsIntegratedFind) {\n        PDFViewerApplication.findBar?.toggle();\n      }\n      break;\n    case \"Print\":\n      PDFViewerApplication.triggerPrinting();\n      break;\n    case \"SaveAs\":\n      PDFViewerApplication.downloadOrSave();\n      break;\n  }\n}\nfunction webViewerPresentationModeChanged(evt) {\n  PDFViewerApplication.pdfViewer.presentationModeState = evt.state;\n}\nfunction webViewerSidebarViewChanged({\n  view\n}) {\n  PDFViewerApplication.pdfRenderingQueue.isThumbnailViewEnabled = view === SidebarView.THUMBS;\n  if (PDFViewerApplication.isInitialViewSet) {\n    PDFViewerApplication.store?.set(\"sidebarView\", view).catch(() => {});\n  }\n}\nfunction webViewerUpdateViewarea({\n  location\n}) {\n  if (PDFViewerApplication.isInitialViewSet) {\n    PDFViewerApplication.store?.setMultiple({\n      page: location.pageNumber,\n      zoom: location.scale,\n      scrollLeft: location.left,\n      scrollTop: location.top,\n      rotation: location.rotation\n    }).catch(() => {});\n  }\n  if (PDFViewerApplication.appConfig.secondaryToolbar) {\n    const href = PDFViewerApplication.pdfLinkService.getAnchorUrl(location.pdfOpenParams);\n    PDFViewerApplication.appConfig.secondaryToolbar.viewBookmarkButton.href = href;\n  }\n}\nfunction webViewerScrollModeChanged(evt) {\n  if (PDFViewerApplication.isInitialViewSet && !PDFViewerApplication.pdfViewer.isInPresentationMode) {\n    PDFViewerApplication.store?.set(\"scrollMode\", evt.mode).catch(() => {});\n  }\n}\nfunction webViewerSpreadModeChanged(evt) {\n  if (PDFViewerApplication.isInitialViewSet && !PDFViewerApplication.pdfViewer.isInPresentationMode) {\n    PDFViewerApplication.store?.set(\"spreadMode\", evt.mode).catch(() => {});\n  }\n}\nfunction webViewerResize() {\n  const {\n    pdfDocument,\n    pdfViewer,\n    pdfRenderingQueue\n  } = PDFViewerApplication;\n  if (pdfRenderingQueue.printing && window.matchMedia(\"print\").matches) {\n    return;\n  }\n  if (!pdfDocument) {\n    return;\n  }\n  const currentScaleValue = pdfViewer.currentScaleValue;\n  if (currentScaleValue === \"auto\" || currentScaleValue === \"page-fit\" || currentScaleValue === \"page-width\") {\n    pdfViewer.currentScaleValue = currentScaleValue;\n  }\n  pdfViewer.update();\n}\nfunction webViewerHashchange(evt) {\n  const hash = evt.hash;\n  if (!hash) {\n    return;\n  }\n  if (!PDFViewerApplication.isInitialViewSet) {\n    PDFViewerApplication.initialBookmark = hash;\n  } else if (!PDFViewerApplication.pdfHistory?.popStateInProgress) {\n    PDFViewerApplication.pdfLinkService.setHash(hash);\n  }\n}\n{\n  var webViewerFileInputChange = function (evt) {\n    if (PDFViewerApplication.pdfViewer?.isInPresentationMode) {\n      return;\n    }\n    const file = evt.fileInput.files[0];\n    PDFViewerApplication.open({\n      url: URL.createObjectURL(file),\n      originalUrl: file.name\n    });\n  };\n  var webViewerOpenFile = function (evt) {\n    PDFViewerApplication._openFileInput?.click();\n  };\n}\nfunction webViewerPresentationMode() {\n  PDFViewerApplication.requestPresentationMode();\n}\nfunction webViewerSwitchAnnotationEditorMode(evt) {\n  PDFViewerApplication.pdfViewer.annotationEditorMode = evt;\n}\nfunction webViewerSwitchAnnotationEditorParams(evt) {\n  PDFViewerApplication.pdfViewer.annotationEditorParams = evt;\n}\nfunction webViewerPrint() {\n  PDFViewerApplication.triggerPrinting();\n}\nfunction webViewerDownload() {\n  PDFViewerApplication.downloadOrSave();\n}\nfunction webViewerFirstPage() {\n  PDFViewerApplication.page = 1;\n}\nfunction webViewerLastPage() {\n  PDFViewerApplication.page = PDFViewerApplication.pagesCount;\n}\nfunction webViewerNextPage() {\n  PDFViewerApplication.pdfViewer.nextPage();\n}\nfunction webViewerPreviousPage() {\n  PDFViewerApplication.pdfViewer.previousPage();\n}\nfunction webViewerZoomIn() {\n  PDFViewerApplication.zoomIn();\n}\nfunction webViewerZoomOut() {\n  PDFViewerApplication.zoomOut();\n}\nfunction webViewerZoomReset() {\n  PDFViewerApplication.zoomReset();\n}\nfunction webViewerPageNumberChanged(evt) {\n  const pdfViewer = PDFViewerApplication.pdfViewer;\n  if (evt.value !== \"\") {\n    PDFViewerApplication.pdfLinkService.goToPage(evt.value);\n  }\n  if (evt.value !== pdfViewer.currentPageNumber.toString() && evt.value !== pdfViewer.currentPageLabel) {\n    PDFViewerApplication.toolbar?.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel);\n  }\n}\nfunction webViewerScaleChanged(evt) {\n  PDFViewerApplication.pdfViewer.currentScaleValue = evt.value;\n}\nfunction webViewerRotateCw() {\n  PDFViewerApplication.rotatePages(90);\n}\nfunction webViewerRotateCcw() {\n  PDFViewerApplication.rotatePages(-90);\n}\nfunction webViewerOptionalContentConfig(evt) {\n  PDFViewerApplication.pdfViewer.optionalContentConfigPromise = evt.promise;\n}\nfunction webViewerSwitchScrollMode(evt) {\n  PDFViewerApplication.pdfViewer.scrollMode = evt.mode;\n}\nfunction webViewerSwitchSpreadMode(evt) {\n  PDFViewerApplication.pdfViewer.spreadMode = evt.mode;\n}\nfunction webViewerDocumentProperties() {\n  PDFViewerApplication.pdfDocumentProperties?.open();\n}\nfunction webViewerFindFromUrlHash(evt) {\n  PDFViewerApplication.eventBus.dispatch(\"find\", {\n    source: evt.source,\n    type: \"\",\n    query: evt.query,\n    caseSensitive: false,\n    entireWord: false,\n    highlightAll: true,\n    findPrevious: false,\n    matchDiacritics: true\n  });\n}\nfunction webViewerUpdateFindMatchesCount({\n  matchesCount\n}) {\n  if (PDFViewerApplication.supportsIntegratedFind) {\n    PDFViewerApplication.externalServices.updateFindMatchesCount(matchesCount);\n  } else {\n    PDFViewerApplication.findBar?.updateResultsCount(matchesCount);\n  }\n}\nfunction webViewerUpdateFindControlState({\n  state,\n  previous,\n  matchesCount,\n  rawQuery\n}) {\n  if (PDFViewerApplication.supportsIntegratedFind) {\n    PDFViewerApplication.externalServices.updateFindControlState({\n      result: state,\n      findPrevious: previous,\n      matchesCount,\n      rawQuery\n    });\n  } else {\n    PDFViewerApplication.findBar?.updateUIState(state, previous, matchesCount);\n  }\n}\nfunction webViewerScaleChanging(evt) {\n  PDFViewerApplication.toolbar?.setPageScale(evt.presetValue, evt.scale);\n  PDFViewerApplication.pdfViewer.update();\n}\nfunction webViewerRotationChanging(evt) {\n  if (PDFViewerApplication.pdfThumbnailViewer) {\n    PDFViewerApplication.pdfThumbnailViewer.pagesRotation = evt.pagesRotation;\n  }\n  PDFViewerApplication.forceRendering();\n  PDFViewerApplication.pdfViewer.currentPageNumber = evt.pageNumber;\n}\nfunction webViewerPageChanging({\n  pageNumber,\n  pageLabel\n}) {\n  PDFViewerApplication.toolbar?.setPageNumber(pageNumber, pageLabel);\n  PDFViewerApplication.secondaryToolbar?.setPageNumber(pageNumber);\n  if (PDFViewerApplication.pdfSidebar?.visibleView === SidebarView.THUMBS) {\n    PDFViewerApplication.pdfThumbnailViewer?.scrollThumbnailIntoView(pageNumber);\n  }\n  const currentPage = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1);\n  PDFViewerApplication.toolbar?.updateLoadingIndicatorState(currentPage?.renderingState === RenderingStates.RUNNING);\n}\nfunction webViewerResolutionChange(evt) {\n  PDFViewerApplication.pdfViewer.refresh();\n}\nfunction webViewerVisibilityChange(evt) {\n  if (document.visibilityState === \"visible\") {\n    setZoomDisabledTimeout();\n  }\n}\nlet zoomDisabledTimeout = null;\nfunction setZoomDisabledTimeout() {\n  if (zoomDisabledTimeout) {\n    clearTimeout(zoomDisabledTimeout);\n  }\n  zoomDisabledTimeout = setTimeout(function () {\n    zoomDisabledTimeout = null;\n  }, WHEEL_ZOOM_DISABLED_TIMEOUT);\n}\nfunction webViewerWheel(evt) {\n  const {\n    pdfViewer,\n    supportsMouseWheelZoomCtrlKey,\n    supportsMouseWheelZoomMetaKey,\n    supportsPinchToZoom\n  } = PDFViewerApplication;\n  if (pdfViewer.isInPresentationMode) {\n    return;\n  }\n  const deltaMode = evt.deltaMode;\n  let scaleFactor = Math.exp(-evt.deltaY / 100);\n  const isBuiltInMac = false;\n  const isPinchToZoom = evt.ctrlKey && !PDFViewerApplication._isCtrlKeyDown && deltaMode === WheelEvent.DOM_DELTA_PIXEL && evt.deltaX === 0 && (Math.abs(scaleFactor - 1) < 0.05 || isBuiltInMac) && evt.deltaZ === 0;\n  const origin = [evt.clientX, evt.clientY];\n  if (isPinchToZoom || evt.ctrlKey && supportsMouseWheelZoomCtrlKey || evt.metaKey && supportsMouseWheelZoomMetaKey) {\n    evt.preventDefault();\n    if (PDFViewerApplication._isScrolling || zoomDisabledTimeout || document.visibilityState === \"hidden\" || PDFViewerApplication.overlayManager.active) {\n      return;\n    }\n    if (isPinchToZoom && supportsPinchToZoom) {\n      scaleFactor = PDFViewerApplication._accumulateFactor(pdfViewer.currentScale, scaleFactor, \"_wheelUnusedFactor\");\n      PDFViewerApplication.updateZoom(null, scaleFactor, origin);\n    } else {\n      const delta = normalizeWheelEventDirection(evt);\n      let ticks = 0;\n      if (deltaMode === WheelEvent.DOM_DELTA_LINE || deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n        if (Math.abs(delta) >= 1) {\n          ticks = Math.sign(delta);\n        } else {\n          ticks = PDFViewerApplication._accumulateTicks(delta, \"_wheelUnusedTicks\");\n        }\n      } else {\n        const PIXELS_PER_LINE_SCALE = 30;\n        ticks = PDFViewerApplication._accumulateTicks(delta / PIXELS_PER_LINE_SCALE, \"_wheelUnusedTicks\");\n      }\n      PDFViewerApplication.updateZoom(ticks, null, origin);\n    }\n  }\n}\nfunction webViewerTouchStart(evt) {\n  if (PDFViewerApplication.pdfViewer.isInPresentationMode || evt.touches.length < 2) {\n    return;\n  }\n  evt.preventDefault();\n  if (evt.touches.length !== 2 || PDFViewerApplication.overlayManager.active) {\n    PDFViewerApplication._touchInfo = null;\n    return;\n  }\n  let [touch0, touch1] = evt.touches;\n  if (touch0.identifier > touch1.identifier) {\n    [touch0, touch1] = [touch1, touch0];\n  }\n  PDFViewerApplication._touchInfo = {\n    touch0X: touch0.pageX,\n    touch0Y: touch0.pageY,\n    touch1X: touch1.pageX,\n    touch1Y: touch1.pageY\n  };\n}\nfunction webViewerTouchMove(evt) {\n  if (!PDFViewerApplication._touchInfo || evt.touches.length !== 2) {\n    return;\n  }\n  const {\n    pdfViewer,\n    _touchInfo,\n    supportsPinchToZoom\n  } = PDFViewerApplication;\n  let [touch0, touch1] = evt.touches;\n  if (touch0.identifier > touch1.identifier) {\n    [touch0, touch1] = [touch1, touch0];\n  }\n  const {\n    pageX: page0X,\n    pageY: page0Y\n  } = touch0;\n  const {\n    pageX: page1X,\n    pageY: page1Y\n  } = touch1;\n  const {\n    touch0X: pTouch0X,\n    touch0Y: pTouch0Y,\n    touch1X: pTouch1X,\n    touch1Y: pTouch1Y\n  } = _touchInfo;\n  if (Math.abs(pTouch0X - page0X) <= 1 && Math.abs(pTouch0Y - page0Y) <= 1 && Math.abs(pTouch1X - page1X) <= 1 && Math.abs(pTouch1Y - page1Y) <= 1) {\n    return;\n  }\n  _touchInfo.touch0X = page0X;\n  _touchInfo.touch0Y = page0Y;\n  _touchInfo.touch1X = page1X;\n  _touchInfo.touch1Y = page1Y;\n  if (pTouch0X === page0X && pTouch0Y === page0Y) {\n    const v1X = pTouch1X - page0X;\n    const v1Y = pTouch1Y - page0Y;\n    const v2X = page1X - page0X;\n    const v2Y = page1Y - page0Y;\n    const det = v1X * v2Y - v1Y * v2X;\n    if (Math.abs(det) > 0.02 * Math.hypot(v1X, v1Y) * Math.hypot(v2X, v2Y)) {\n      return;\n    }\n  } else if (pTouch1X === page1X && pTouch1Y === page1Y) {\n    const v1X = pTouch0X - page1X;\n    const v1Y = pTouch0Y - page1Y;\n    const v2X = page0X - page1X;\n    const v2Y = page0Y - page1Y;\n    const det = v1X * v2Y - v1Y * v2X;\n    if (Math.abs(det) > 0.02 * Math.hypot(v1X, v1Y) * Math.hypot(v2X, v2Y)) {\n      return;\n    }\n  } else {\n    const diff0X = page0X - pTouch0X;\n    const diff1X = page1X - pTouch1X;\n    const diff0Y = page0Y - pTouch0Y;\n    const diff1Y = page1Y - pTouch1Y;\n    const dotProduct = diff0X * diff1X + diff0Y * diff1Y;\n    if (dotProduct >= 0) {\n      return;\n    }\n  }\n  evt.preventDefault();\n  const origin = [(page0X + page1X) / 2, (page0Y + page1Y) / 2];\n  const distance = Math.hypot(page0X - page1X, page0Y - page1Y) || 1;\n  const pDistance = Math.hypot(pTouch0X - pTouch1X, pTouch0Y - pTouch1Y) || 1;\n  if (supportsPinchToZoom) {\n    const newScaleFactor = PDFViewerApplication._accumulateFactor(pdfViewer.currentScale, distance / pDistance, \"_touchUnusedFactor\");\n    PDFViewerApplication.updateZoom(null, newScaleFactor, origin);\n  } else {\n    const PIXELS_PER_LINE_SCALE = 30;\n    const ticks = PDFViewerApplication._accumulateTicks((distance - pDistance) / PIXELS_PER_LINE_SCALE, \"_touchUnusedTicks\");\n    PDFViewerApplication.updateZoom(ticks, null, origin);\n  }\n}\nfunction webViewerTouchEnd(evt) {\n  if (!PDFViewerApplication._touchInfo) {\n    return;\n  }\n  evt.preventDefault();\n  PDFViewerApplication._touchInfo = null;\n  PDFViewerApplication._touchUnusedTicks = 0;\n  PDFViewerApplication._touchUnusedFactor = 1;\n}\nfunction webViewerClick(evt) {\n  if (!PDFViewerApplication.secondaryToolbar?.isOpen) {\n    return;\n  }\n  const appConfig = PDFViewerApplication.appConfig;\n  if (PDFViewerApplication.pdfViewer.containsElement(evt.target) || appConfig.toolbar?.container.contains(evt.target) && evt.target !== appConfig.secondaryToolbar?.toggleButton) {\n    PDFViewerApplication.secondaryToolbar.close();\n  }\n}\nfunction webViewerKeyUp(evt) {\n  if (evt.key === \"Control\") {\n    PDFViewerApplication._isCtrlKeyDown = false;\n  }\n}\nfunction webViewerKeyDown(evt) {\n  PDFViewerApplication._isCtrlKeyDown = evt.key === \"Control\";\n  if (PDFViewerApplication.overlayManager.active) {\n    return;\n  }\n  const {\n    eventBus,\n    pdfViewer\n  } = PDFViewerApplication;\n  const isViewerInPresentationMode = pdfViewer.isInPresentationMode;\n  let handled = false,\n    ensureViewerFocused = false;\n  const cmd = (evt.ctrlKey ? 1 : 0) | (evt.altKey ? 2 : 0) | (evt.shiftKey ? 4 : 0) | (evt.metaKey ? 8 : 0);\n  if (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) {\n    switch (evt.keyCode) {\n      case 70:\n        if (!PDFViewerApplication.supportsIntegratedFind && !evt.shiftKey) {\n          PDFViewerApplication.findBar?.open();\n          handled = true;\n        }\n        break;\n      case 71:\n        if (!PDFViewerApplication.supportsIntegratedFind) {\n          const {\n            state\n          } = PDFViewerApplication.findController;\n          if (state) {\n            const newState = {\n              source: window,\n              type: \"again\",\n              findPrevious: cmd === 5 || cmd === 12\n            };\n            eventBus.dispatch(\"find\", {\n              ...state,\n              ...newState\n            });\n          }\n          handled = true;\n        }\n        break;\n      case 61:\n      case 107:\n      case 187:\n      case 171:\n        PDFViewerApplication.zoomIn();\n        handled = true;\n        break;\n      case 173:\n      case 109:\n      case 189:\n        PDFViewerApplication.zoomOut();\n        handled = true;\n        break;\n      case 48:\n      case 96:\n        if (!isViewerInPresentationMode) {\n          setTimeout(function () {\n            PDFViewerApplication.zoomReset();\n          });\n          handled = false;\n        }\n        break;\n      case 38:\n        if (isViewerInPresentationMode || PDFViewerApplication.page > 1) {\n          PDFViewerApplication.page = 1;\n          handled = true;\n          ensureViewerFocused = true;\n        }\n        break;\n      case 40:\n        if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) {\n          PDFViewerApplication.page = PDFViewerApplication.pagesCount;\n          handled = true;\n          ensureViewerFocused = true;\n        }\n        break;\n    }\n  }\n  if (cmd === 1 || cmd === 8) {\n    switch (evt.keyCode) {\n      case 83:\n        eventBus.dispatch(\"download\", {\n          source: window\n        });\n        handled = true;\n        break;\n      case 79:\n        {\n          eventBus.dispatch(\"openfile\", {\n            source: window\n          });\n          handled = true;\n        }\n        break;\n    }\n  }\n  if (cmd === 3 || cmd === 10) {\n    switch (evt.keyCode) {\n      case 80:\n        PDFViewerApplication.requestPresentationMode();\n        handled = true;\n        PDFViewerApplication.externalServices.reportTelemetry({\n          type: \"buttons\",\n          data: {\n            id: \"presentationModeKeyboard\"\n          }\n        });\n        break;\n      case 71:\n        if (PDFViewerApplication.appConfig.toolbar) {\n          PDFViewerApplication.appConfig.toolbar.pageNumber.select();\n          handled = true;\n        }\n        break;\n    }\n  }\n  if (handled) {\n    if (ensureViewerFocused && !isViewerInPresentationMode) {\n      pdfViewer.focus();\n    }\n    evt.preventDefault();\n    return;\n  }\n  const curElement = getActiveOrFocusedElement();\n  const curElementTagName = curElement?.tagName.toUpperCase();\n  if (curElementTagName === \"INPUT\" || curElementTagName === \"TEXTAREA\" || curElementTagName === \"SELECT\" || curElementTagName === \"BUTTON\" && (evt.keyCode === 13 || evt.keyCode === 32) || curElement?.isContentEditable) {\n    if (evt.keyCode !== 27) {\n      return;\n    }\n  }\n  if (cmd === 0) {\n    let turnPage = 0,\n      turnOnlyIfPageFit = false;\n    switch (evt.keyCode) {\n      case 38:\n        if (PDFViewerApplication.supportsCaretBrowsingMode) {\n          PDFViewerApplication.moveCaret(true, false);\n          handled = true;\n          break;\n        }\n      case 33:\n        if (pdfViewer.isVerticalScrollbarEnabled) {\n          turnOnlyIfPageFit = true;\n        }\n        turnPage = -1;\n        break;\n      case 8:\n        if (!isViewerInPresentationMode) {\n          turnOnlyIfPageFit = true;\n        }\n        turnPage = -1;\n        break;\n      case 37:\n        if (PDFViewerApplication.supportsCaretBrowsingMode) {\n          return;\n        }\n        if (pdfViewer.isHorizontalScrollbarEnabled) {\n          turnOnlyIfPageFit = true;\n        }\n      case 75:\n      case 80:\n        turnPage = -1;\n        break;\n      case 27:\n        if (PDFViewerApplication.secondaryToolbar?.isOpen) {\n          PDFViewerApplication.secondaryToolbar.close();\n          handled = true;\n        }\n        if (!PDFViewerApplication.supportsIntegratedFind && PDFViewerApplication.findBar?.opened) {\n          PDFViewerApplication.findBar.close();\n          handled = true;\n        }\n        break;\n      case 40:\n        if (PDFViewerApplication.supportsCaretBrowsingMode) {\n          PDFViewerApplication.moveCaret(false, false);\n          handled = true;\n          break;\n        }\n      case 34:\n        if (pdfViewer.isVerticalScrollbarEnabled) {\n          turnOnlyIfPageFit = true;\n        }\n        turnPage = 1;\n        break;\n      case 13:\n      case 32:\n        if (!isViewerInPresentationMode) {\n          turnOnlyIfPageFit = true;\n        }\n        turnPage = 1;\n        break;\n      case 39:\n        if (PDFViewerApplication.supportsCaretBrowsingMode) {\n          return;\n        }\n        if (pdfViewer.isHorizontalScrollbarEnabled) {\n          turnOnlyIfPageFit = true;\n        }\n      case 74:\n      case 78:\n        turnPage = 1;\n        break;\n      case 36:\n        if (isViewerInPresentationMode || PDFViewerApplication.page > 1) {\n          PDFViewerApplication.page = 1;\n          handled = true;\n          ensureViewerFocused = true;\n        }\n        break;\n      case 35:\n        if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) {\n          PDFViewerApplication.page = PDFViewerApplication.pagesCount;\n          handled = true;\n          ensureViewerFocused = true;\n        }\n        break;\n      case 83:\n        PDFViewerApplication.pdfCursorTools?.switchTool(CursorTool.SELECT);\n        break;\n      case 72:\n        PDFViewerApplication.pdfCursorTools?.switchTool(CursorTool.HAND);\n        break;\n      case 82:\n        PDFViewerApplication.rotatePages(90);\n        break;\n      case 115:\n        PDFViewerApplication.pdfSidebar?.toggle();\n        break;\n    }\n    if (turnPage !== 0 && (!turnOnlyIfPageFit || pdfViewer.currentScaleValue === \"page-fit\")) {\n      if (turnPage > 0) {\n        pdfViewer.nextPage();\n      } else {\n        pdfViewer.previousPage();\n      }\n      handled = true;\n    }\n  }\n  if (cmd === 4) {\n    switch (evt.keyCode) {\n      case 13:\n      case 32:\n        if (!isViewerInPresentationMode && pdfViewer.currentScaleValue !== \"page-fit\") {\n          break;\n        }\n        pdfViewer.previousPage();\n        handled = true;\n        break;\n      case 38:\n        PDFViewerApplication.moveCaret(true, true);\n        handled = true;\n        break;\n      case 40:\n        PDFViewerApplication.moveCaret(false, true);\n        handled = true;\n        break;\n      case 82:\n        PDFViewerApplication.rotatePages(-90);\n        break;\n    }\n  }\n  if (!handled && !isViewerInPresentationMode) {\n    if (evt.keyCode >= 33 && evt.keyCode <= 40 || evt.keyCode === 32 && curElementTagName !== \"BUTTON\") {\n      ensureViewerFocused = true;\n    }\n  }\n  if (ensureViewerFocused && !pdfViewer.containsElement(curElement)) {\n    pdfViewer.focus();\n  }\n  if (handled) {\n    evt.preventDefault();\n  }\n}\nfunction beforeUnload(evt) {\n  evt.preventDefault();\n  evt.returnValue = \"\";\n  return false;\n}\nfunction webViewerAnnotationEditorStatesChanged(data) {\n  PDFViewerApplication.externalServices.updateEditorStates(data);\n}\nfunction webViewerReportTelemetry({\n  details\n}) {\n  PDFViewerApplication.externalServices.reportTelemetry(details);\n}\n\n;// CONCATENATED MODULE: ./web/viewer.js\n\n\n\n\nconst pdfjsVersion = \"4.3.136\";\nconst pdfjsBuild = \"0cec64437\";\nconst AppConstants = {\n  LinkTarget: LinkTarget,\n  RenderingStates: RenderingStates,\n  ScrollMode: ScrollMode,\n  SpreadMode: SpreadMode\n};\nwindow.PDFViewerApplication = PDFViewerApplication;\nwindow.PDFViewerApplicationConstants = AppConstants;\nwindow.PDFViewerApplicationOptions = AppOptions;\nfunction getViewerConfiguration() {\n  return {\n    appContainer: document.body,\n    mainContainer: document.getElementById(\"viewerContainer\"),\n    viewerContainer: document.getElementById(\"viewer\"),\n    toolbar: {\n      container: document.getElementById(\"toolbarViewer\"),\n      numPages: document.getElementById(\"numPages\"),\n      pageNumber: document.getElementById(\"pageNumber\"),\n      scaleSelect: document.getElementById(\"scaleSelect\"),\n      customScaleOption: document.getElementById(\"customScaleOption\"),\n      previous: document.getElementById(\"previous\"),\n      next: document.getElementById(\"next\"),\n      zoomIn: document.getElementById(\"zoomIn\"),\n      zoomOut: document.getElementById(\"zoomOut\"),\n      viewFind: document.getElementById(\"viewFind\"),\n      print: document.getElementById(\"print\"),\n      editorFreeTextButton: document.getElementById(\"editorFreeText\"),\n      editorFreeTextParamsToolbar: document.getElementById(\"editorFreeTextParamsToolbar\"),\n      editorHighlightButton: document.getElementById(\"editorHighlight\"),\n      editorHighlightParamsToolbar: document.getElementById(\"editorHighlightParamsToolbar\"),\n      editorHighlightColorPicker: document.getElementById(\"editorHighlightColorPicker\"),\n      editorInkButton: document.getElementById(\"editorInk\"),\n      editorInkParamsToolbar: document.getElementById(\"editorInkParamsToolbar\"),\n      editorStampButton: document.getElementById(\"editorStamp\"),\n      editorStampParamsToolbar: document.getElementById(\"editorStampParamsToolbar\"),\n      download: document.getElementById(\"download\")\n    },\n    secondaryToolbar: {\n      toolbar: document.getElementById(\"secondaryToolbar\"),\n      toggleButton: document.getElementById(\"secondaryToolbarToggle\"),\n      presentationModeButton: document.getElementById(\"presentationMode\"),\n      openFileButton: document.getElementById(\"secondaryOpenFile\"),\n      printButton: document.getElementById(\"secondaryPrint\"),\n      downloadButton: document.getElementById(\"secondaryDownload\"),\n      viewBookmarkButton: document.getElementById(\"viewBookmark\"),\n      firstPageButton: document.getElementById(\"firstPage\"),\n      lastPageButton: document.getElementById(\"lastPage\"),\n      pageRotateCwButton: document.getElementById(\"pageRotateCw\"),\n      pageRotateCcwButton: document.getElementById(\"pageRotateCcw\"),\n      cursorSelectToolButton: document.getElementById(\"cursorSelectTool\"),\n      cursorHandToolButton: document.getElementById(\"cursorHandTool\"),\n      scrollPageButton: document.getElementById(\"scrollPage\"),\n      scrollVerticalButton: document.getElementById(\"scrollVertical\"),\n      scrollHorizontalButton: document.getElementById(\"scrollHorizontal\"),\n      scrollWrappedButton: document.getElementById(\"scrollWrapped\"),\n      spreadNoneButton: document.getElementById(\"spreadNone\"),\n      spreadOddButton: document.getElementById(\"spreadOdd\"),\n      spreadEvenButton: document.getElementById(\"spreadEven\"),\n      documentPropertiesButton: document.getElementById(\"documentProperties\")\n    },\n    sidebar: {\n      outerContainer: document.getElementById(\"outerContainer\"),\n      sidebarContainer: document.getElementById(\"sidebarContainer\"),\n      toggleButton: document.getElementById(\"sidebarToggle\"),\n      resizer: document.getElementById(\"sidebarResizer\"),\n      thumbnailButton: document.getElementById(\"viewThumbnail\"),\n      outlineButton: document.getElementById(\"viewOutline\"),\n      attachmentsButton: document.getElementById(\"viewAttachments\"),\n      layersButton: document.getElementById(\"viewLayers\"),\n      thumbnailView: document.getElementById(\"thumbnailView\"),\n      outlineView: document.getElementById(\"outlineView\"),\n      attachmentsView: document.getElementById(\"attachmentsView\"),\n      layersView: document.getElementById(\"layersView\"),\n      currentOutlineItemButton: document.getElementById(\"currentOutlineItem\")\n    },\n    findBar: {\n      bar: document.getElementById(\"findbar\"),\n      toggleButton: document.getElementById(\"viewFind\"),\n      findField: document.getElementById(\"findInput\"),\n      highlightAllCheckbox: document.getElementById(\"findHighlightAll\"),\n      caseSensitiveCheckbox: document.getElementById(\"findMatchCase\"),\n      matchDiacriticsCheckbox: document.getElementById(\"findMatchDiacritics\"),\n      entireWordCheckbox: document.getElementById(\"findEntireWord\"),\n      findMsg: document.getElementById(\"findMsg\"),\n      findResultsCount: document.getElementById(\"findResultsCount\"),\n      findPreviousButton: document.getElementById(\"findPrevious\"),\n      findNextButton: document.getElementById(\"findNext\")\n    },\n    passwordOverlay: {\n      dialog: document.getElementById(\"passwordDialog\"),\n      label: document.getElementById(\"passwordText\"),\n      input: document.getElementById(\"password\"),\n      submitButton: document.getElementById(\"passwordSubmit\"),\n      cancelButton: document.getElementById(\"passwordCancel\")\n    },\n    documentProperties: {\n      dialog: document.getElementById(\"documentPropertiesDialog\"),\n      closeButton: document.getElementById(\"documentPropertiesClose\"),\n      fields: {\n        fileName: document.getElementById(\"fileNameField\"),\n        fileSize: document.getElementById(\"fileSizeField\"),\n        title: document.getElementById(\"titleField\"),\n        author: document.getElementById(\"authorField\"),\n        subject: document.getElementById(\"subjectField\"),\n        keywords: document.getElementById(\"keywordsField\"),\n        creationDate: document.getElementById(\"creationDateField\"),\n        modificationDate: document.getElementById(\"modificationDateField\"),\n        creator: document.getElementById(\"creatorField\"),\n        producer: document.getElementById(\"producerField\"),\n        version: document.getElementById(\"versionField\"),\n        pageCount: document.getElementById(\"pageCountField\"),\n        pageSize: document.getElementById(\"pageSizeField\"),\n        linearized: document.getElementById(\"linearizedField\")\n      }\n    },\n    altTextDialog: {\n      dialog: document.getElementById(\"altTextDialog\"),\n      optionDescription: document.getElementById(\"descriptionButton\"),\n      optionDecorative: document.getElementById(\"decorativeButton\"),\n      textarea: document.getElementById(\"descriptionTextarea\"),\n      cancelButton: document.getElementById(\"altTextCancel\"),\n      saveButton: document.getElementById(\"altTextSave\")\n    },\n    annotationEditorParams: {\n      editorFreeTextFontSize: document.getElementById(\"editorFreeTextFontSize\"),\n      editorFreeTextColor: document.getElementById(\"editorFreeTextColor\"),\n      editorInkColor: document.getElementById(\"editorInkColor\"),\n      editorInkThickness: document.getElementById(\"editorInkThickness\"),\n      editorInkOpacity: document.getElementById(\"editorInkOpacity\"),\n      editorStampAddImage: document.getElementById(\"editorStampAddImage\"),\n      editorFreeHighlightThickness: document.getElementById(\"editorFreeHighlightThickness\"),\n      editorHighlightShowAll: document.getElementById(\"editorHighlightShowAll\")\n    },\n    printContainer: document.getElementById(\"printContainer\")\n  };\n}\nfunction webViewerLoad() {\n  const config = getViewerConfiguration();\n  const event = new CustomEvent(\"webviewerloaded\", {\n    bubbles: true,\n    cancelable: true,\n    detail: {\n      source: window\n    }\n  });\n  try {\n    parent.document.dispatchEvent(event);\n  } catch (ex) {\n    console.error(`webviewerloaded: ${ex}`);\n    document.dispatchEvent(event);\n  }\n  PDFViewerApplication.run(config);\n}\ndocument.blockUnblockOnload?.(true);\nif (document.readyState === \"interactive\" || document.readyState === \"complete\") {\n  webViewerLoad();\n} else {\n  document.addEventListener(\"DOMContentLoaded\", webViewerLoad, true);\n}\n\nvar __webpack_exports__PDFViewerApplication = __webpack_exports__.PDFViewerApplication;\nvar __webpack_exports__PDFViewerApplicationConstants = __webpack_exports__.PDFViewerApplicationConstants;\nvar __webpack_exports__PDFViewerApplicationOptions = __webpack_exports__.PDFViewerApplicationOptions;\nexport { __webpack_exports__PDFViewerApplication as PDFViewerApplication, __webpack_exports__PDFViewerApplicationConstants as PDFViewerApplicationConstants, __webpack_exports__PDFViewerApplicationOptions as PDFViewerApplicationOptions };\n\n//# sourceMappingURL=viewer.mjs.map"
  },
  {
    "path": "package.json",
    "content": "{\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.17.9\",\n    \"@babel/preset-env\": \"^7.16.0\",\n    \"@babel/preset-react\": \"^7.22.3\",\n    \"@babel/preset-typescript\": \"^7.21.5\",\n    \"@types/react\": \"^18.2.9\",\n    \"@types/react-dom\": \"^18.2.4\",\n    \"@typescript-eslint/eslint-plugin\": \"^7.15.0\",\n    \"autoprefixer\": \"^10.4.0\",\n    \"babel-loader\": \"^9.1.0\",\n    \"clean-webpack-plugin\": \"^4.0.0\",\n    \"copy-webpack-plugin\": \"^11.0.0\",\n    \"css-loader\": \"^6.5.1\",\n    \"css-minimizer-webpack-plugin\": \"^4.0.0\",\n    \"eslint\": \"^8.13.0\",\n    \"eslint-config-airbnb\": \"^19.0.0\",\n    \"eslint-plugin-import\": \"^2.26.0\",\n    \"eslint-plugin-jsx-a11y\": \"^6.5.1\",\n    \"eslint-plugin-prettier\": \"^5.1.3\",\n    \"eslint-plugin-react\": \"^7.27.0\",\n    \"eslint-plugin-react-hooks\": \"^4.3.0\",\n    \"eslint-plugin-simple-import-sort\": \"^12.1.0\",\n    \"eslint-plugin-unused-imports\": \"^3.2.0\",\n    \"file-loader\": \"^6.2.0\",\n    \"image-minimizer-webpack-plugin\": \"^3.2.3\",\n    \"imagemin\": \"^8.0.1\",\n    \"postcss\": \"^8.3.11\",\n    \"postcss-loader\": \"^7.0.0\",\n    \"prettier\": \"^3.3.2\",\n    \"raw-loader\": \"^4.0.2\",\n    \"sass\": \"^1.50.1\",\n    \"sass-lint\": \"^1.13.1\",\n    \"sass-loader\": \"^13.0.0\",\n    \"style-loader\": \"^3.3.3\",\n    \"terser-webpack-plugin\": \"^5.2.5\",\n    \"typescript-eslint\": \"^7.15.0\",\n    \"url-loader\": \"^4.1.1\",\n    \"webpack\": \"^5.75.0\",\n    \"webpack-bundle-analyzer\": \"^4.5.0\",\n    \"webpack-cli\": \"^5.0.0\",\n    \"webpack-merge\": \"^5.8.0\"\n  },\n  \"engines\": {\n    \"node\": \">=14\"\n  },\n  \"scripts\": {\n    \"build\": \"webpack --config configuration/webpack.prod.config.js --mode=production\",\n    \"dev\": \"webpack --config configuration/webpack.dev.config.js --mode=development --watch\",\n    \"bundle\": \"npm install && npm run dev\",\n    \"lint:sass\": \"sass-lint -v -q\",\n    \"lint:js\": \"eslint --ext .ts,.tsx src/\",\n    \"stats\": \"webpack --config configuration/webpack.prod.config.js --mode=production --json > stats.json && webpack-bundle-analyzer stats.json\"\n  },\n  \"target\": \"web\",\n  \"dependencies\": {\n    \"@floating-ui/dom\": \"^1.6.10\",\n    \"antd\": \"^5.15.3\",\n    \"dayjs\": \"^1.11.13\",\n    \"exceljs\": \"^4.4.0\",\n    \"file-saver\": \"^2.0.5\",\n    \"i18next\": \"^23.15.1\",\n    \"konva\": \"^9.3.6\",\n    \"nanoid\": \"^5.0.7\",\n    \"pdf-lib\": \"^1.17.1\",\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\",\n    \"react-i18next\": \"^15.0.2\",\n    \"web-highlighter\": \"^0.7.4\"\n  }\n}\n"
  },
  {
    "path": "src/annot/index.ts",
    "content": "import { PDFDocument, PDFName, PDFPage } from 'pdf-lib'\nimport { PDFViewerApplication } from 'pdfjs'\nimport { annotationDefinitions, CommentStatus, IAnnotationStore, PdfjsAnnotationType } from '../const/definitions'\nimport { TextParser } from './parse_text'\nimport ExcelJS from 'exceljs'\nimport { saveAs } from 'file-saver'\nimport { AnnotationParser } from './parse'\nimport { HighlightParser } from './parse_highlight'\nimport { UnderlineParser } from './parse_underline'\nimport { StrikeOutParser } from './parse_strikeout'\nimport { SquareParser } from './parse_square'\nimport { CircleParser } from './parse_circle'\nimport { InkParser } from './parse_ink'\nimport { formatPDFDate, getPDFDateTimestamp, getTimestampString } from '../utils/utils'\nimport { FreeTextParser } from './parse_freetext'\nimport { StampParser } from './parse_stamp'\nimport { LineParser } from './parse_line'\nimport { PolylineParser } from './parse_polyline'\nimport { t } from 'i18next'\n\n// import { HighlightParser } from './parse_highlight' // future\n// import { InkParser } from './parse_ink' // future\n\n// 映射不同批注类型到对应的解析器类\nconst parserMap: {\n    [key: number]: new (pdfDoc: PDFDocument, page: PDFPage, ann: IAnnotationStore) => AnnotationParser\n} = {\n    [PdfjsAnnotationType.TEXT]: TextParser,\n    [PdfjsAnnotationType.HIGHLIGHT]: HighlightParser,\n    [PdfjsAnnotationType.UNDERLINE]: UnderlineParser,\n    [PdfjsAnnotationType.STRIKEOUT]: StrikeOutParser,\n    [PdfjsAnnotationType.SQUARE]: SquareParser,\n    [PdfjsAnnotationType.CIRCLE]: CircleParser,\n    [PdfjsAnnotationType.INK]: InkParser,\n    [PdfjsAnnotationType.POLYLINE]: PolylineParser,\n    [PdfjsAnnotationType.FREETEXT]: FreeTextParser,\n    [PdfjsAnnotationType.STAMP]: StampParser,\n    [PdfjsAnnotationType.LINE]: LineParser\n    // 你可以在这里扩展其他类型的解析器\n}\n\n/**\n * 将单个注解对象解析并添加到指定 PDF 页面中。\n *\n * @param annotation - 批注数据对象（IAnnotationStore 格式）\n * @param page - 要添加注解的 PDF 页面\n * @param pdfDoc - 当前正在编辑的 PDF 文档实例\n */\nasync function parseAnnotationToPdf(annotation: IAnnotationStore, page: PDFPage, pdfDoc: PDFDocument): Promise<void> {\n    const ParserClass = parserMap[annotation.pdfjsType]\n    if (ParserClass) {\n        const parser = new ParserClass(pdfDoc, page, annotation)\n        await parser.parse()\n    } else {\n        console.warn('Unsupported annotation type:', annotation.pdfjsType)\n    }\n}\n\n/**\n * 触发 PDF 下载\n *\n * @param data - 保存后的 PDF 数据（Uint8Array）\n * @param filename - 下载时使用的文件名\n */\nfunction downloadPdf(data: Uint8Array, filename: string) {\n    // 提取安全的 ArrayBuffer\n    const arrayBuffer = data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength)\n    // 创建 Blob\n    // @ts-ignore\n    const blob = new Blob([arrayBuffer], { type: 'application/pdf' })\n    // 使用 saveAs 下载\n    saveAs(blob, `${filename}.pdf`)\n}\n\nfunction downloadExcel(data: any, filename: string) {\n    const buffer = new Blob([data], { type: 'application/octet-stream' })\n    saveAs(buffer, `${filename}.xlsx`)\n}\n\n/**\n * 从 PDF 中清除所有页面上的原始注解（Annots）\n *\n * @param pdfDoc - 要处理的 PDF 文档对象\n */\nfunction clearAllAnnotations(pdfDoc: PDFDocument) {\n    for (const page of pdfDoc.getPages()) {\n        const annotsKey = PDFName.of('Annots')\n        if (page.node.has(annotsKey)) {\n            page.node.set(annotsKey, pdfDoc.context.obj([])) // 清空批注数组\n        }\n    }\n}\n\n// 动态加载字体文件，返回 ArrayBuffer\nasync function loadFontBuffer(url: string): Promise<ArrayBuffer> {\n    const response = await fetch(url)\n    if (!response.ok) throw new Error(`Failed to load font at ${url}`)\n    return await response.arrayBuffer()\n}\n\n/**\n * 主导函数：加载 PDF，插入所有注解，然后触发下载。\n *\n * @param url - 要加载的 PDF 文件 URL\n * @param annotations - 解析后的批注数据数组\n */\nasync function exportAnnotationsToPdf(PDFViewerApplication: PDFViewerApplication, annotations: IAnnotationStore[]) {\n    // 加载 PDF 文件为 pdf-lib 可识别的文档对象\n    const pdfData = await PDFViewerApplication.pdfDocument.getData();\n    const pdfDoc = await PDFDocument.load(pdfData);\n\n    // ✅ 清除原有的所有批注\n    clearAllAnnotations(pdfDoc)\n    // 遍历每一个注解并解析应用到对应页面\n    for (const ann of annotations) {\n        const page = pdfDoc.getPages()[ann.pageNumber - 1]\n        await parseAnnotationToPdf(ann, page, pdfDoc)\n    }\n\n    // 保存带注解的 PDF\n    const modifiedPdf = await pdfDoc.save()\n    // 使用 title + 时间戳作为文件名\n    const baseName = PDFViewerApplication._title || 'annotated'\n    const fileName = `${baseName}_${getTimestampString()}`\n\n    downloadPdf(modifiedPdf, fileName)\n}\n\nasync function exportAnnotationsToExcel(PDFViewerApplication: PDFViewerApplication, annotations: IAnnotationStore[]) {\n    const rows: any[] = []\n    // 先按页码升序，再按批注时间降序\n    annotations.sort((a, b) => {\n        if (a.pageNumber !== b.pageNumber) {\n            return a.pageNumber - b.pageNumber\n        }\n        return getPDFDateTimestamp(b.date) - getPDFDateTimestamp(a.date)\n    })\n    const getLastStatusName = (annotation: IAnnotationStore): string => {\n        const lastWithStatus = [...(annotation.comments || [])].reverse().find(c => c.status !== undefined && c.status !== null)\n\n        const status = lastWithStatus?.status ?? CommentStatus.None\n        return t(`comment.status.${status.toLowerCase()}`)\n    }\n\n    let mainIndex = 1 // 主批注序号\n    let replyCounter: number = 0 // 回复计数器（每次主批注开始重置）\n\n    annotations.forEach(annotation => {\n        const annotationName = annotationDefinitions.find(def => def.type === annotation.type)?.name\n        const typeLabel = t(`annotations.${annotationName}`)\n        // 主批注行\n        rows.push({\n            index: `${mainIndex}`,\n            id: annotation.id,\n            page: annotation.pageNumber,\n            annotationType: typeLabel,\n            recordType: t('export.recordType.annotation'),\n            author: annotation.title,\n            content: annotation.contentsObj?.text || '',\n            date: formatPDFDate(annotation.date, true),\n            status: getLastStatusName(annotation)\n        })\n        // 重置回复计数器\n        replyCounter = 0\n        // 回复行\n        annotation.comments.forEach(comment => {\n            replyCounter++\n            rows.push({\n                index: `${mainIndex}.${replyCounter}`,\n                id: comment.id,\n                page: '',\n                annotationType: '--',\n                recordType: t('export.recordType.reply'),\n                author: comment.title,\n                content: comment.content,\n                date: formatPDFDate(comment.date, true),\n                status: ''\n            })\n        })\n        mainIndex++\n    })\n\n    // 创建 workbook 和 sheet\n    const workbook = new ExcelJS.Workbook()\n    const sheet = workbook.addWorksheet(t('export.sheetName'))\n\n    // 自定义列宽（单位为字符宽度）\n    sheet.columns = [\n        {\n            key: 'index',\n            header: '#',\n            width: 8,\n            style: {\n                alignment: { vertical: 'middle' }\n            }\n        },\n        {\n            key: 'id',\n            header: t('export.fields.id'),\n            width: 20,\n            style: {\n                alignment: {\n                    vertical: 'middle'\n                }\n            }\n        },\n        {\n            key: 'page',\n            header: t('export.fields.page'),\n            width: 10,\n            style: {\n                alignment: {\n                    vertical: 'middle'\n                }\n            }\n        },\n        {\n            key: 'annotationType',\n            header: t('export.fields.annotationType'),\n            width: 18,\n            style: {\n                alignment: {\n                    vertical: 'middle'\n                }\n            }\n        },\n        {\n            key: 'recordType',\n            header: t('export.fields.recordType'),\n            width: 12,\n            style: {\n                alignment: {\n                    vertical: 'middle'\n                }\n            }\n        },\n        {\n            key: 'author',\n            header: t('export.fields.author'),\n            width: 16,\n            style: {\n                alignment: {\n                    vertical: 'middle'\n                }\n            }\n        },\n        {\n            key: 'content',\n            header: t('export.fields.content'),\n            width: 40,\n            style: {\n                alignment: {\n                    wrapText: true,\n                    vertical: 'top'\n                }\n            }\n        },\n        {\n            key: 'date',\n            header: t('export.fields.date'),\n            width: 22,\n            style: {\n                alignment: {\n                    vertical: 'middle'\n                }\n            }\n        },\n        {\n            key: 'status',\n            header: t('export.fields.status'),\n            width: 14,\n            style: {\n                alignment: {\n                    vertical: 'middle'\n                }\n            }\n        }\n    ]\n\n    // 写入数据 + 样式\n    rows.forEach(row => {\n        const addedRow = sheet.addRow(row)\n        const isReply = row.recordType === t('export.recordType.reply')\n        addedRow.font = {\n            size: 12,\n            color: { argb: isReply ? '389e0d' : '000000' }\n        }\n    })\n\n    // 表头样式\n    sheet.getRow(1).eachCell(cell => {\n        cell.font = { bold: true, size: 12 }\n        cell.fill = {\n            type: 'pattern',\n            pattern: 'solid',\n            fgColor: { argb: 'D9E1F2' }\n        }\n    })\n\n    // 写入数据后给所有单元格加边框\n    sheet.eachRow(row => {\n        row.eachCell(cell => {\n            cell.border = {\n                top: { style: 'thin', color: { argb: '000000' } },\n                left: { style: 'thin', color: { argb: '000000' } },\n                bottom: { style: 'thin', color: { argb: '000000' } },\n                right: { style: 'thin', color: { argb: '000000' } }\n            }\n        })\n    })\n\n    // 导出\n    const buffer = await workbook.xlsx.writeBuffer()\n    const baseName = PDFViewerApplication._title || 'annotated'\n    const fileName = `${baseName}_${getTimestampString()}`\n    downloadExcel(buffer, fileName)\n}\n\nexport { exportAnnotationsToPdf, exportAnnotationsToExcel }\n"
  },
  {
    "path": "src/annot/parse.ts",
    "content": "import { PDFArray, PDFDocument, PDFName, PDFPage, PDFRef } from \"pdf-lib\"\nimport { IAnnotationStore } from \"../const/definitions\"\n\nexport abstract class AnnotationParser {\n    protected annotation: IAnnotationStore\n    protected page: PDFPage\n    protected pdfDoc: PDFDocument\n\n    constructor(pdfDoc: PDFDocument, page: PDFPage, annotation: IAnnotationStore) {\n        this.pdfDoc = pdfDoc\n        this.page = page\n        this.annotation = annotation\n    }\n\n    protected addAnnotationToPage(page: PDFPage, annotRef: PDFRef) {\n        const annots = page.node.lookup(PDFName.of('Annots')) as PDFArray | undefined\n        if (annots) {\n            annots.push(annotRef)\n        } else {\n            page.node.set(PDFName.of('Annots'), page.doc.context.obj([annotRef]))\n        }\n    }\n    \n\n    abstract parse(): Promise<void>\n}\n"
  },
  {
    "path": "src/annot/parse_circle.ts",
    "content": "import { AnnotationParser } from './parse'\nimport { PDFHexString, PDFName, PDFString } from 'pdf-lib'\nimport { convertKonvaRectToPdfRect, rgbToPdfColor, stringToPDFHexString } from '../utils/utils'\nimport { t } from 'i18next'\n\nexport class CircleParser extends AnnotationParser {\n    async parse() {\n        const { annotation, page, pdfDoc } = this\n        const context = pdfDoc.context\n        const pageHeight = page.getHeight()\n\n        // 1️⃣ 主批注（圆形）\n        const mainAnn = context.obj({\n            Type: PDFName.of('Annot'),\n            Subtype: PDFName.of('Circle'),\n            Rect: convertKonvaRectToPdfRect(annotation.konvaClientRect, pageHeight),\n            C: rgbToPdfColor(annotation.color),\n            T: stringToPDFHexString(annotation.title || t('normal.unknownUser')),\n            Contents: stringToPDFHexString(annotation.contentsObj?.text || ''),\n            M: PDFString.of(annotation.date || ''),\n            NM: PDFString.of(annotation.id),\n            Border: [0, 0, 1] // 可选：1像素实线边框\n        })\n        const mainAnnRef = context.register(mainAnn)\n        this.addAnnotationToPage(page, mainAnnRef)\n\n        // 2️⃣ 回复评论（如果有）\n        for (const comment of annotation.comments || []) {\n            const replyAnn = context.obj({\n                Type: PDFName.of('Annot'),\n                Subtype: PDFName.of('Text'),\n                Rect: convertKonvaRectToPdfRect(annotation.konvaClientRect, pageHeight),\n                Contents: stringToPDFHexString(comment.content),\n                T: stringToPDFHexString(comment.title || t('normal.unknownUser')),\n                M: PDFString.of(comment.date || ''),\n                C: rgbToPdfColor(annotation.color),\n                IRT: mainAnnRef,\n                RT: PDFName.of('R'),\n                NM: PDFString.of(comment.id),\n                Open: false\n            })\n            const replyAnnRef = context.register(replyAnn)\n            this.addAnnotationToPage(page, replyAnnRef)\n        }\n    }\n}\n"
  },
  {
    "path": "src/annot/parse_freetext.ts",
    "content": "import { PDFHexString, PDFName, PDFString, PDFNumber } from 'pdf-lib'\nimport { AnnotationParser } from './parse'\nimport { convertKonvaRectToPdfRect, rgbToPdfColor, stringToPDFHexString } from '../utils/utils'\nimport { t } from 'i18next'\n\nexport class FreeTextParser extends AnnotationParser {\n    async parse() {\n        const { annotation, page, pdfDoc } = this\n        const [x1, , , y2] = convertKonvaRectToPdfRect(annotation.konvaClientRect, page.getHeight())\n        const context = pdfDoc.context\n\n        const pageWidth = page.getWidth()\n        const pageHeight = page.getHeight()\n\n        // 计算图标宽高固定20\n        const iconSize = 20\n\n        // 限制 x1、y2 不能小于0，x1+iconSize 不能超过页面宽度，y2 不能超过页面高度\n        const xLeft = Math.max(0, Math.min(x1, pageWidth - iconSize))\n        const yTop = Math.min(pageHeight, Math.max(y2, iconSize)) // y2 是顶部坐标\n        const yBottom = yTop - iconSize\n\n        const rect = [PDFNumber.of(xLeft), PDFNumber.of(yBottom), PDFNumber.of(xLeft + iconSize), PDFNumber.of(yTop)]\n\n        const mainAnn = context.obj({\n            Type: PDFName.of('Annot'),\n            Subtype: PDFName.of('Text'),\n            Rect: rect,\n            NM: PDFString.of(annotation.id), // 唯一标识\n            Contents: stringToPDFHexString(annotation.contentsObj?.text || ''),\n            Name: PDFName.of('Comment'),\n            T: stringToPDFHexString(annotation.title || t('normal.unknownUser')),\n            M: PDFString.of(annotation.date || ''),\n            C: rgbToPdfColor(annotation.color),\n            Open: false\n        })\n        const mainAnnRef = context.register(mainAnn)\n        this.addAnnotationToPage(page, mainAnnRef)\n\n        for (const comment of annotation.comments || []) {\n            const replyAnn = context.obj({\n                Type: PDFName.of('Annot'),\n                Subtype: PDFName.of('Text'),\n                Rect: rect,\n                Contents: stringToPDFHexString(comment.content),\n                T: stringToPDFHexString(comment.title || t('normal.unknownUser')),\n                M: PDFString.of(comment.date || ''),\n                C: rgbToPdfColor(annotation.color),\n                IRT: mainAnnRef,\n                RT: PDFName.of('R'),\n                NM: PDFString.of(comment.id), // 唯一标识\n                Open: false\n            })\n            const replyAnnRef = context.register(replyAnn)\n            this.addAnnotationToPage(page, replyAnnRef)\n        }\n    }\n}\n"
  },
  {
    "path": "src/annot/parse_highlight.ts",
    "content": "import { AnnotationParser } from './parse'\nimport { PDFHexString, PDFName, PDFString } from 'pdf-lib'\nimport { convertKonvaRectToPdfRect, rgbToPdfColor, stringToPDFHexString } from '../utils/utils'\nimport { t } from 'i18next'\n\nexport class HighlightParser extends AnnotationParser {\n    async parse() {\n        const { annotation, page, pdfDoc } = this\n        const context = pdfDoc.context\n        const pageHeight = page.getHeight()\n\n        const konvaGroup = JSON.parse(annotation.konvaString)\n        const rects = konvaGroup.children.filter((item: any) => item.className === 'Rect')\n\n        const quadPoints: number[] = []\n\n        for (const rect of rects) {\n            const { x, y, width, height } = rect.attrs\n            const x1 = x\n            const y1 = pageHeight - y\n            const x2 = x + width\n            const y2 = pageHeight - (y + height)\n\n            // QuadPoints: 每个矩形有 4 个点（左上、右上、左下、右下）\n            quadPoints.push(\n                x1, y1, // 左上\n                x2, y1, // 右上\n                x1, y2, // 左下\n                x2, y2  // 右下\n            )\n        }\n        const mainAnn = context.obj({\n            Type: PDFName.of('Annot'),\n            Subtype: PDFName.of('Highlight'),\n            Rect: convertKonvaRectToPdfRect(annotation.konvaClientRect, pageHeight),\n            QuadPoints: quadPoints,\n            C: rgbToPdfColor(annotation.color), // 批注颜色\n            T: stringToPDFHexString(annotation.title || t('normal.unknownUser')), // 作者\n            Contents: stringToPDFHexString(annotation.contentsObj?.text || ''), // 主内容\n            M: PDFString.of(annotation.date || ''), // 日期\n            NM: PDFString.of(annotation.id), // 唯一标识\n        })\n        const mainAnnRef = context.register(mainAnn)\n        this.addAnnotationToPage(page, mainAnnRef)\n\n        for (const comment of annotation.comments || []) {\n            const replyAnn = context.obj({\n                Type: PDFName.of('Annot'),\n                Subtype: PDFName.of('Text'),\n                Rect: convertKonvaRectToPdfRect(annotation.konvaClientRect, pageHeight),\n                Contents: stringToPDFHexString(comment.content),\n                T: stringToPDFHexString(comment.title || t('normal.unknownUser')),\n                M: PDFString.of(comment.date || ''),\n                C: rgbToPdfColor(annotation.color),\n                IRT: mainAnnRef,\n                RT: PDFName.of('R'),\n                NM: PDFString.of(comment.id), // 唯一标识\n                Open: false\n            })\n            const replyAnnRef = context.register(replyAnn)\n            this.addAnnotationToPage(page, replyAnnRef)\n        }\n    }\n}\n"
  },
  {
    "path": "src/annot/parse_ink.ts",
    "content": "import { AnnotationParser } from './parse'\nimport { PDFHexString, PDFName, PDFString, PDFNumber } from 'pdf-lib'\nimport { convertKonvaRectToPdfRect, rgbToPdfColor, stringToPDFHexString } from '../utils/utils'\nimport { t } from 'i18next'\n\nexport class InkParser extends AnnotationParser {\n    async parse() {\n        const { annotation, page, pdfDoc } = this\n        const context = pdfDoc.context\n        const pageHeight = page.getHeight()\n        const konvaGroup = JSON.parse(annotation.konvaString)\n        const lines = konvaGroup.children.filter((item: any) => item.className === 'Line')\n\n        const groupX = konvaGroup.attrs.x || 0\n        const groupY = konvaGroup.attrs.y || 0\n        const scaleX = konvaGroup.attrs.scaleX || 1\n        const scaleY = konvaGroup.attrs.scaleY || 1\n\n        const inkList = context.obj(\n            lines.map((line: any) => {\n                const points = line.attrs.points as number[]\n                const transformedPoints: number[] = []\n                for (let i = 0; i < points.length; i += 2) {\n                    const x = groupX + points[i] * scaleX\n                    const y = groupY + points[i + 1] * scaleY\n                    transformedPoints.push(x, pageHeight - y)\n                }\n                return context.obj(transformedPoints)\n            })\n        )\n\n        const firstLine = lines[0]?.attrs || {}\n        const strokeWidth = firstLine.strokeWidth ?? 1\n        const opacity = firstLine.opacity ?? 1\n        const color = firstLine.stroke ?? annotation.color ?? 'rgb(255, 0, 0)'\n        const [r, g, b] = rgbToPdfColor(color)\n\n        const bs = context.obj({\n            W: PDFNumber.of(strokeWidth),\n            S: PDFName.of('S') // Solid border style\n        })\n\n        const mainAnn = context.obj({\n            Type: PDFName.of('Annot'),\n            Subtype: PDFName.of('Ink'),\n            Rect: convertKonvaRectToPdfRect(annotation.konvaClientRect, pageHeight),\n            InkList: inkList,\n            C: context.obj([PDFNumber.of(r), PDFNumber.of(g), PDFNumber.of(b)]),\n            T: stringToPDFHexString(annotation.title || t('normal.unknownUser')),\n            Contents: stringToPDFHexString(annotation.contentsObj?.text || ''),\n            M: PDFString.of(annotation.date || ''),\n            NM: PDFString.of(annotation.id),\n            Border: context.obj([0, 0, 0]),\n            BS: bs,\n            CA: PDFNumber.of(opacity) // Non-stroking opacity (used for drawing)\n        })\n\n        const mainAnnRef = context.register(mainAnn)\n        this.addAnnotationToPage(page, mainAnnRef)\n\n        for (const comment of annotation.comments || []) {\n            const replyAnn = context.obj({\n                Type: PDFName.of('Annot'),\n                Subtype: PDFName.of('Text'),\n                Rect: convertKonvaRectToPdfRect(annotation.konvaClientRect, pageHeight),\n                Contents: stringToPDFHexString(comment.content),\n                T: stringToPDFHexString(comment.title || t('normal.unknownUser')),\n                M: PDFString.of(comment.date || ''),\n                C: context.obj([PDFNumber.of(r), PDFNumber.of(g), PDFNumber.of(b)]),\n                IRT: mainAnnRef,\n                RT: PDFName.of('R'),\n                NM: PDFString.of(comment.id),\n                Open: false\n            })\n            const replyAnnRef = context.register(replyAnn)\n            this.addAnnotationToPage(page, replyAnnRef)\n        }\n    }\n}\n"
  },
  {
    "path": "src/annot/parse_line.ts",
    "content": "import { AnnotationParser } from './parse'\nimport { PDFHexString, PDFName, PDFString, PDFNumber } from 'pdf-lib'\nimport { convertKonvaRectToPdfRect, rgbToPdfColor, stringToPDFHexString } from '../utils/utils'\nimport { t } from 'i18next'\n\nexport class LineParser extends AnnotationParser {\n    async parse() {\n        const { annotation, page, pdfDoc } = this\n        const context = pdfDoc.context\n        const pageHeight = page.getHeight()\n\n        const konvaGroup = JSON.parse(annotation.konvaString)\n\n        const lines = konvaGroup.children.filter((item: any) => item.className === 'Arrow')\n\n        const groupX = konvaGroup.attrs.x || 0\n        const groupY = konvaGroup.attrs.y || 0\n        const scaleX = konvaGroup.attrs.scaleX || 1\n        const scaleY = konvaGroup.attrs.scaleY || 1\n\n        const inkList = context.obj(\n            lines.map((line: any) => {\n                const points = line.attrs.points as number[]\n                const transformedPoints: number[] = []\n\n                for (let i = 0; i < points.length; i += 2) {\n                    const x = groupX + points[i] * scaleX\n                    const y = groupY + points[i + 1] * scaleY\n                    transformedPoints.push(x, pageHeight - y)\n                }\n\n                return context.obj(transformedPoints)\n            })\n        )\n\n        const firstLine = lines[0]?.attrs || {}\n        const strokeWidth = firstLine.strokeWidth ?? 1\n        const opacity = firstLine.opacity ?? 1\n        const color = firstLine.stroke ?? annotation.color ?? 'rgb(255, 0, 0)'\n        const [r, g, b] = rgbToPdfColor(color)\n\n        const bs = context.obj({\n            W: PDFNumber.of(strokeWidth),\n            S: PDFName.of('S') // Solid border style\n        })\n\n        const mainAnn = context.obj({\n            Type: PDFName.of('Annot'),\n            // 注意：PDF 的 Ink 注解不支持箭头样式，导出后将仅保留线条\n            Subtype: PDFName.of('Ink'),\n            Rect: convertKonvaRectToPdfRect(annotation.konvaClientRect, pageHeight),\n            InkList: inkList,\n            C: context.obj([PDFNumber.of(r), PDFNumber.of(g), PDFNumber.of(b)]),\n            T: stringToPDFHexString(annotation.title || t('normal.unknownUser')),\n            Contents: stringToPDFHexString(annotation.contentsObj?.text || ''),\n            M: PDFString.of(annotation.date || ''),\n            NM: PDFString.of(annotation.id),\n            Border: context.obj([0, 0, 0]),\n            BS: bs,\n            CA: PDFNumber.of(opacity) // Non-stroking opacity (used for drawing)\n        })\n\n        const mainAnnRef = context.register(mainAnn)\n        this.addAnnotationToPage(page, mainAnnRef)\n\n        for (const comment of annotation.comments || []) {\n            const replyAnn = context.obj({\n                Type: PDFName.of('Annot'),\n                Subtype: PDFName.of('Text'),\n                Rect: convertKonvaRectToPdfRect(annotation.konvaClientRect, pageHeight),\n                Contents: stringToPDFHexString(comment.content),\n                T: stringToPDFHexString(comment.title || t('normal.unknownUser')),\n                M: PDFString.of(comment.date || ''),\n                C: context.obj([PDFNumber.of(r), PDFNumber.of(g), PDFNumber.of(b)]),\n                IRT: mainAnnRef,\n                RT: PDFName.of('R'),\n                NM: PDFString.of(comment.id),\n                Open: false\n            })\n            const replyAnnRef = context.register(replyAnn)\n            this.addAnnotationToPage(page, replyAnnRef)\n        }\n    }\n}\n"
  },
  {
    "path": "src/annot/parse_polyline.ts",
    "content": "import { AnnotationParser } from './parse'\nimport { PDFHexString, PDFName, PDFString, PDFNumber } from 'pdf-lib'\nimport { convertKonvaRectToPdfRect, rgbToPdfColor, stringToPDFHexString } from '../utils/utils'\nimport { t } from 'i18next'\n\nfunction parseSvgPathToPoints(data: string): number[] {\n    const commands = data.match(/[a-zA-Z][^a-zA-Z]*/g) || []\n    const points: number[] = []\n    for (const cmd of commands) {\n        const type = cmd[0]\n        const nums = cmd\n            .slice(1)\n            .trim()\n            .split(/[\\s,]+/)\n            .map(parseFloat)\n\n        if (type === 'M' || type === 'L') {\n            // MoveTo / LineTo：直接加入坐标\n            for (let i = 0; i < nums.length; i += 2) {\n                points.push(nums[i], nums[i + 1])\n            }\n        } else if (type === 'Q') {\n            // Quadratic curve：控制点忽略，仅取终点\n            if (nums.length >= 4) {\n                points.push(nums[2], nums[3])\n            }\n        } else if (type === 'C') {\n            // Cubic Bezier：同理，取终点\n            if (nums.length >= 6) {\n                points.push(nums[4], nums[5])\n            }\n        } else if (type === 'Z' || type === 'z') {\n            // Close path，忽略\n        }\n    }\n    return points\n}\n\nexport class PolylineParser extends AnnotationParser {\n    async parse() {\n        const { annotation, page, pdfDoc } = this\n        const context = pdfDoc.context\n        const pageHeight = page.getHeight()\n\n        const konvaGroup = JSON.parse(annotation.konvaString)\n\n        const lines = konvaGroup.children.filter((item: any) => item.className === 'Path')\n\n        const groupX = konvaGroup.attrs.x || 0\n        const groupY = konvaGroup.attrs.y || 0\n        const scaleX = konvaGroup.attrs.scaleX || 1\n        const scaleY = konvaGroup.attrs.scaleY || 1\n\n        const inkList = context.obj(\n            lines.map((line: any) => {\n                const points = parseSvgPathToPoints(line.attrs.data) as number[]\n                const transformedPoints: number[] = []\n\n                for (let i = 0; i < points.length; i += 2) {\n                    const x = groupX + points[i] * scaleX\n                    const y = groupY + points[i + 1] * scaleY\n                    transformedPoints.push(x, pageHeight - y)\n                }\n\n                return context.obj(transformedPoints)\n            })\n        )\n\n        const firstLine = lines[0]?.attrs || {}\n        const strokeWidth = firstLine.strokeWidth ?? 1\n        const opacity = firstLine.opacity ?? 1\n        const color = firstLine.stroke ?? annotation.color ?? 'rgb(255, 0, 0)'\n        const [r, g, b] = rgbToPdfColor(color)\n\n        const bs = context.obj({\n            W: PDFNumber.of(strokeWidth),\n            S: PDFName.of('S') // Solid border style\n        })\n\n        const mainAnn = context.obj({\n            Type: PDFName.of('Annot'),\n            Subtype: PDFName.of('Ink'),\n            Rect: convertKonvaRectToPdfRect(annotation.konvaClientRect, pageHeight),\n            InkList: inkList,\n            C: context.obj([PDFNumber.of(r), PDFNumber.of(g), PDFNumber.of(b)]),\n            T: stringToPDFHexString(annotation.title || t('normal.unknownUser')),\n            Contents: stringToPDFHexString(annotation.contentsObj?.text || ''),\n            M: PDFString.of(annotation.date || ''),\n            NM: PDFString.of(annotation.id),\n            Border: context.obj([0, 0, 0]),\n            BS: bs,\n            CA: PDFNumber.of(opacity) // Non-stroking opacity (used for drawing)\n        })\n\n        const mainAnnRef = context.register(mainAnn)\n        this.addAnnotationToPage(page, mainAnnRef)\n\n        for (const comment of annotation.comments || []) {\n            const replyAnn = context.obj({\n                Type: PDFName.of('Annot'),\n                Subtype: PDFName.of('Text'),\n                Rect: convertKonvaRectToPdfRect(annotation.konvaClientRect, pageHeight),\n                Contents: stringToPDFHexString(comment.content),\n                T: stringToPDFHexString(comment.title || t('normal.unknownUser')),\n                M: PDFString.of(comment.date || ''),\n                C: context.obj([PDFNumber.of(r), PDFNumber.of(g), PDFNumber.of(b)]),\n                IRT: mainAnnRef,\n                RT: PDFName.of('R'),\n                NM: PDFString.of(comment.id),\n                Open: false\n            })\n            const replyAnnRef = context.register(replyAnn)\n            this.addAnnotationToPage(page, replyAnnRef)\n        }\n    }\n}\n"
  },
  {
    "path": "src/annot/parse_square.ts",
    "content": "import { AnnotationParser } from './parse'\nimport { PDFHexString, PDFName, PDFString } from 'pdf-lib'\nimport { convertKonvaRectToPdfRect, rgbToPdfColor, stringToPDFHexString } from '../utils/utils'\nimport { t } from 'i18next'\n\nexport class SquareParser extends AnnotationParser {\n    async parse() {\n        const { annotation, page, pdfDoc } = this\n        const context = pdfDoc.context\n        const pageHeight = page.getHeight()\n\n        // 1️⃣ 主批注（方框）\n        const mainAnn = context.obj({\n            Type: PDFName.of('Annot'),\n            Subtype: PDFName.of('Square'),\n            Rect: convertKonvaRectToPdfRect(annotation.konvaClientRect, pageHeight),\n            C: rgbToPdfColor(annotation.color), // 边框颜色\n            T: stringToPDFHexString(annotation.title || t('normal.unknownUser')), // 作者\n            Contents: stringToPDFHexString(annotation.contentsObj?.text || ''), // 说明文字\n            M: PDFString.of(annotation.date || ''),\n            NM: PDFString.of(annotation.id), // 唯一标识\n            Border: [0, 0, 1] // 可选：设置边框样式为实线宽度1\n        })\n        const mainAnnRef = context.register(mainAnn)\n        this.addAnnotationToPage(page, mainAnnRef)\n\n        // 2️⃣ 回复评论（如果有）\n        for (const comment of annotation.comments || []) {\n            const replyAnn = context.obj({\n                Type: PDFName.of('Annot'),\n                Subtype: PDFName.of('Text'),\n                Rect: convertKonvaRectToPdfRect(annotation.konvaClientRect, pageHeight),\n                Contents: stringToPDFHexString(comment.content),\n                T: stringToPDFHexString(comment.title || t('normal.unknownUser')),\n                M: PDFString.of(comment.date || ''),\n                C: rgbToPdfColor(annotation.color),\n                IRT: mainAnnRef,\n                RT: PDFName.of('R'),\n                NM: PDFString.of(comment.id),\n                Open: false\n            })\n            const replyAnnRef = context.register(replyAnn)\n            this.addAnnotationToPage(page, replyAnnRef)\n        }\n    }\n}\n"
  },
  {
    "path": "src/annot/parse_stamp.ts",
    "content": "import { PDFHexString, PDFName, PDFString, PDFNumber, PDFRawStream } from 'pdf-lib'\nimport { AnnotationParser } from './parse'\nimport { convertKonvaRectToPdfRect, stringToPDFHexString } from '../utils/utils'\nimport { t } from 'i18next'\n\nexport class StampParser extends AnnotationParser {\n    async parse() {\n        const { annotation, page, pdfDoc } = this\n        const context = pdfDoc.context\n\n        // 转换坐标\n        const [x1, y1, x2, y2] = convertKonvaRectToPdfRect(annotation.konvaClientRect, page.getHeight())\n\n        const pageWidth = page.getWidth()\n        const pageHeight = page.getHeight()\n\n        const left = Math.max(0, Math.min(x1, pageWidth))\n        const bottom = Math.max(0, Math.min(y1, pageHeight))\n        const right = Math.max(left, Math.min(x2, pageWidth))\n        const top = Math.max(bottom, Math.min(y2, pageHeight))\n\n        const rect = [PDFNumber.of(left), PDFNumber.of(bottom), PDFNumber.of(right), PDFNumber.of(top)]\n\n        // 嵌入图片\n        let apDict = undefined\n        if (annotation.contentsObj?.image) {\n            // annotation.contentsObj.image 是 base64 png 字符串，格式 'data:image/png;base64,...'\n            // 去掉前缀，留纯 base64\n            const base64Str = annotation.contentsObj.image.replace(/^data:image\\/png;base64,/, '')\n            const pngImage = await pdfDoc.embedPng(base64Str)\n\n            const width = pngImage.width\n            const height = pngImage.height\n\n            // 创建外观流 Appearance Stream，放图片\n            const appearanceStreamDict = context.obj({\n                Type: 'XObject',\n                Subtype: 'Form',\n                BBox: [0, 0, width, height],\n                Resources: context.obj({\n                    XObject: context.obj({\n                        Im1: pngImage.ref\n                    })\n                })\n            })\n\n            // 这里构造流内容（绘制图片）\n            // pdf-lib 里没有直接方法，我们自己写绘制指令：\n            // q - 保存图形状态\n            // w h cm - 变换矩阵，调整坐标系和缩放\n            // /Im1 Do - 绘制图片\n            // Q - 恢复图形状态\n\n            const contentStream = `q ${width} 0 0 ${height} 0 0 cm /Im1 Do Q`\n            const contentStreamBytes = new TextEncoder().encode(contentStream)\n\n            // 创建 PDFStream\n            const appearanceStream = PDFRawStream.of(appearanceStreamDict, contentStreamBytes)\n            const appearanceStreamRef = context.register(appearanceStream)\n\n            apDict = context.obj({\n                N: appearanceStreamRef // 正常状态外观 Normal Appearance\n            })\n        }\n\n        // 创建 Stamp 注释字典\n        const stampAnnDict: any = {\n            Type: PDFName.of('Annot'),\n            Subtype: PDFName.of('Stamp'),\n            Rect: rect,\n            NM: PDFString.of(annotation.id),\n            Contents: stringToPDFHexString(annotation.contentsObj?.text || ''),\n            T: stringToPDFHexString(annotation.title || t('normal.unknownUser')),\n            M: PDFString.of(annotation.date || ''),\n            Open: false,\n            F: PDFNumber.of(128) // Locked 锁定移动和调整位置\n        }\n\n        if (apDict) {\n            stampAnnDict.AP = apDict\n        }\n\n        const stampAnn = context.obj(stampAnnDict)\n        const stampAnnRef = context.register(stampAnn)\n\n        this.addAnnotationToPage(page, stampAnnRef)\n\n        for (const comment of annotation.comments || []) {\n            const replyAnn = context.obj({\n                Type: PDFName.of('Annot'),\n                Subtype: PDFName.of('Text'),\n                Rect: convertKonvaRectToPdfRect(annotation.konvaClientRect, pageHeight),\n                Contents: stringToPDFHexString(comment.content),\n                T: stringToPDFHexString(comment.title || t('normal.unknownUser')),\n                M: PDFString.of(comment.date || ''),\n                IRT: stampAnnRef,\n                RT: PDFName.of('R'),\n                NM: PDFString.of(comment.id),\n                Open: false\n            })\n            const replyAnnRef = context.register(replyAnn)\n            this.addAnnotationToPage(page, replyAnnRef)\n        }\n    }\n}\n"
  },
  {
    "path": "src/annot/parse_strikeout.ts",
    "content": "import { AnnotationParser } from './parse'\nimport { PDFHexString, PDFName, PDFString } from 'pdf-lib'\nimport { convertKonvaRectToPdfRect, rgbToPdfColor, stringToPDFHexString } from '../utils/utils'\nimport { t } from 'i18next'\nexport class StrikeOutParser extends AnnotationParser {\n    async parse() {\n        const { annotation, page, pdfDoc } = this\n        const context = pdfDoc.context\n        const pageHeight = page.getHeight()\n\n        const konvaGroup = JSON.parse(annotation.konvaString)\n        const rects = konvaGroup.children.filter((item: any) => item.className === 'Rect')\n\n        const quadPoints: number[] = []\n\n        for (const rect of rects) {\n            const { x, y, width, height } = rect.attrs\n            const x1 = x\n            const y1 = pageHeight - y\n            const x2 = x + width\n            const y2 = pageHeight - (y + height)\n            quadPoints.push(x1, y1, x2, y1, x1, y2, x2, y2)\n        }\n\n        const mainAnn = context.obj({\n            Type: PDFName.of('Annot'),\n            Subtype: PDFName.of('StrikeOut'),\n            Rect: convertKonvaRectToPdfRect(annotation.konvaClientRect, pageHeight),\n            QuadPoints: quadPoints,\n            C: rgbToPdfColor(annotation.color),\n            T: stringToPDFHexString(annotation.title || t('normal.unknownUser')),\n            // 这里如果置空，写入的批注中就不会出现内容，和 highlight 不一致\n            Contents: stringToPDFHexString(annotation.contentsObj?.text || ''),\n            M: PDFString.of(annotation.date || ''),\n            NM: PDFString.of(annotation.id)\n        })\n        const mainAnnRef = context.register(mainAnn)\n        this.addAnnotationToPage(page, mainAnnRef)\n\n        for (const comment of annotation.comments || []) {\n            const replyAnn = context.obj({\n                Type: PDFName.of('Annot'),\n                Subtype: PDFName.of('Text'),\n                Rect: convertKonvaRectToPdfRect(annotation.konvaClientRect, pageHeight),\n                Contents: stringToPDFHexString(comment.content),\n                T: stringToPDFHexString(comment.title || t('normal.unknownUser')),\n                M: PDFString.of(comment.date || ''),\n                C: rgbToPdfColor(annotation.color),\n                IRT: mainAnnRef,\n                RT: PDFName.of('R'),\n                NM: PDFString.of(comment.id),\n                Open: false\n            })\n            const replyAnnRef = context.register(replyAnn)\n            this.addAnnotationToPage(page, replyAnnRef)\n        }\n    }\n}\n"
  },
  {
    "path": "src/annot/parse_text.ts",
    "content": "import { PDFHexString, PDFName, PDFString } from 'pdf-lib'\nimport { AnnotationParser } from './parse'\nimport { convertKonvaRectToPdfRect, rgbToPdfColor, stringToPDFHexString } from '../utils/utils'\nimport { t } from 'i18next'\n\nexport class TextParser extends AnnotationParser {\n    async parse() {\n        const { annotation, page, pdfDoc } = this\n        const rect = convertKonvaRectToPdfRect(annotation.konvaClientRect, page.getHeight())\n        const context = pdfDoc.context\n\n        const mainAnn = context.obj({\n            Type: PDFName.of('Annot'),\n            Subtype: PDFName.of('Text'),\n            Rect: rect,\n            NM: PDFString.of(annotation.id), // 唯一标识\n            Contents: stringToPDFHexString(annotation.contentsObj?.text || ''),\n            Name: PDFName.of('Comment'),\n            T: stringToPDFHexString(annotation.title || t('normal.unknownUser')),\n            M: PDFString.of(annotation.date || ''),\n            C: rgbToPdfColor(annotation.color),\n            Open: false\n        })\n        const mainAnnRef = context.register(mainAnn)\n        this.addAnnotationToPage(page, mainAnnRef)\n\n        for (const comment of annotation.comments || []) {\n            const replyAnn = context.obj({\n                Type: PDFName.of('Annot'),\n                Subtype: PDFName.of('Text'),\n                Rect: rect,\n                Contents: stringToPDFHexString(comment.content),\n                T: stringToPDFHexString(comment.title || t('normal.unknownUser')),\n                M: PDFString.of(comment.date || ''),\n                C: rgbToPdfColor(annotation.color),\n                IRT: mainAnnRef,\n                RT: PDFName.of('R'),\n                NM: PDFString.of(comment.id), // 唯一标识\n                Open: false\n            })\n            const replyAnnRef = context.register(replyAnn)\n            this.addAnnotationToPage(page, replyAnnRef)\n        }\n    }\n}\n"
  },
  {
    "path": "src/annot/parse_underline.ts",
    "content": "import { AnnotationParser } from './parse'\nimport { PDFHexString, PDFName, PDFString } from 'pdf-lib'\nimport { convertKonvaRectToPdfRect, rgbToPdfColor, stringToPDFHexString } from '../utils/utils'\nimport { t } from 'i18next'\n\nexport class UnderlineParser extends AnnotationParser {\n    async parse() {\n        const { annotation, page, pdfDoc } = this\n        const context = pdfDoc.context\n        const pageHeight = page.getHeight()\n\n        const konvaGroup = JSON.parse(annotation.konvaString)\n        const rects = konvaGroup.children.filter((item: any) => item.className === 'Rect')\n\n        const quadPoints: number[] = []\n\n        for (const rect of rects) {\n            const { x, y, width, height } = rect.attrs\n            const x1 = x\n            const y1 = pageHeight - y\n            const x2 = x + width\n            const y2 = pageHeight - (y + height)\n\n            quadPoints.push(x1, y1, x2, y1, x1, y2, x2, y2)\n        }\n\n        const mainAnn = context.obj({\n            Type: PDFName.of('Annot'),\n            Subtype: PDFName.of('Underline'),\n            Rect: convertKonvaRectToPdfRect(annotation.konvaClientRect, pageHeight),\n            QuadPoints: quadPoints,\n            C: rgbToPdfColor(annotation.color),\n            T: stringToPDFHexString(annotation.title || t('normal.unknownUser')),\n            // 这里如果置空，写入的批注中就不会出现内容，和 highlight 不一致\n            Contents: stringToPDFHexString(annotation.contentsObj?.text || ''),\n            M: PDFString.of(annotation.date || ''),\n            NM: PDFString.of(annotation.id)\n        })\n        const mainAnnRef = context.register(mainAnn)\n        this.addAnnotationToPage(page, mainAnnRef)\n\n        for (const comment of annotation.comments || []) {\n            const replyAnn = context.obj({\n                Type: PDFName.of('Annot'),\n                Subtype: PDFName.of('Text'),\n                Rect: convertKonvaRectToPdfRect(annotation.konvaClientRect, pageHeight),\n                Contents: stringToPDFHexString(comment.content),\n                T: stringToPDFHexString(comment.title || t('normal.unknownUser')),\n                M: PDFString.of(comment.date || ''),\n                C: rgbToPdfColor(annotation.color),\n                IRT: mainAnnRef,\n                RT: PDFName.of('R'),\n                NM: PDFString.of(comment.id),\n                Open: false\n            })\n            const replyAnnRef = context.register(replyAnn)\n            this.addAnnotationToPage(page, replyAnnRef)\n        }\n    }\n}\n"
  },
  {
    "path": "src/components/comment/index.scss",
    "content": ".PdfjsAnnotationExtension_Comment_hidden {\n    .CustomComment {\n        display: none;\n    }\n}\n.CustomComment_filterContent {\n    ul,\n    li {\n        list-style: none;\n    }\n    li {\n        padding: 3px;\n    }\n    li:hover {\n        background-color: #ddd;\n    }\n    li > label {\n        width: 100%;\n    }\n}\n.CustomComment {\n    width: 330px;\n    position: absolute;\n    top: 107px;\n    right: 0;\n    height: calc(100vh - 107px);\n    color: var(--main-color);\n    border-left: 1px solid var(--toolbar-border-color);\n    overflow: auto;\n    font: message-box;\n    font-size: 14px;\n    .filters {\n        padding: 5px;\n    }\n    .list {\n        padding: 5px 5px 25px 5px;\n        .group {\n            margin-bottom: 10px;\n        }\n        h3 {\n            font-weight: normal;\n            font-size: 14px;\n            span {\n                float: right;\n            }\n        }\n        .comment {\n            border: 1px solid var(--toolbar-border-color);\n            background-color: var(--toolbar-bg-color);\n            border-radius: 8px;\n            padding:5px 10px 10px 10px;\n            line-height: 150%;\n            .ant-typography{\n                color: var(--main-color) !important;\n            }\n            p {\n                white-space: pre-wrap;\n                line-height: 150%;\n                padding: 0;\n                margin-top: 5px;\n            }\n            .title {\n                display: flex;\n                align-items: center;\n                cursor: default;\n                .username {\n                    min-width: 30px;\n                    white-space: nowrap;\n                    overflow: hidden;\n                    text-overflow: ellipsis;\n                    span{\n                        display: block;\n                        font-size: 12px;\n                        line-height: 120%;\n                        opacity: 0.5;\n                    }\n                }\n                .annotation-icon {\n                    margin-right: 5px;\n                    align-self: flex-start;\n                }\n                .tool {\n                    margin-left: auto;\n                    display: flex;\n                    align-items: center;\n                    .icon {\n                        margin-left: 5px;\n                        border-radius: 8px;\n                        display: inline-block;\n                        padding: 0 3px !important;\n                    }\n                    .icon:hover {\n                        background-color: var(--dropdown-btn-bg-color);\n                    }\n                }\n            }\n            .reply {\n                background-color: var(--dropdown-btn-bg-color);\n                border-radius: 5px;\n                padding: 5px 10px;\n                margin-top: 8px;\n                margin-left: 15px;\n                .icon:hover {\n                    background-color: var(--toggled-btn-bg-color) !important;\n                }\n            }\n        }\n        .comment:hover {\n            background-color: var(--doorhanger-hover-bg-color);\n        }\n        .selected {\n            border-color: #1677ff72;\n            background-color: var(--doorhanger-hover-bg-color);            \n        }\n        h3,\n        .comment {\n            margin-bottom: 8px;\n        }\n    }\n}\n\n@media all and (max-width: 780px) {\n    .CustomComment {\n        width: 250px;\n    }\n    .PdfjsAnnotationExtension {\n        #viewerContainer {\n            right: 250px;\n        }\n    }\n}\n@media all and (max-width: 690px) {\n    .CustomComment {\n        width: 150px;\n    }\n    .PdfjsAnnotationExtension {\n        #viewerContainer {\n            right: 150px;\n        }\n    }\n}\n\n@media (hover: hover) {\n}\n@media (hover: none) {\n}\n"
  },
  {
    "path": "src/components/comment/index.tsx",
    "content": "import './index.scss'\nimport React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'\nimport { CommentStatus, IAnnotationComment, IAnnotationStore, PdfjsAnnotationSubtype } from '../../const/definitions'\nimport { useTranslation } from 'react-i18next'\nimport { formatPDFDate, formatTimestamp, generateUUID } from '../../utils/utils'\nimport { Button, Checkbox, Dropdown, Input, Popover, Space, Typography } from 'antd'\nimport { CheckCircleOutlined, DislikeOutlined, FilterOutlined, LikeOutlined, MinusCircleOutlined, MinusSquareOutlined, MoreOutlined, StopOutlined } from '@ant-design/icons'\nimport {\n    CircleIcon,\n    FreehandIcon,\n    FreeHighlightIcon,\n    FreetextIcon,\n    HighlightIcon,\n    RectangleIcon,\n    StampIcon,\n    StrikeoutIcon,\n    UnderlineIcon,\n    SignatureIcon,\n    NoteIcon,\n    ExportIcon,\n    ArrowIcon,\n    CloudIcon\n} from '../../const/icon'\nimport Paragraph from 'antd/es/typography/Paragraph'\n\ninterface StatusOption {\n    labelKey: string; // i18n key\n    icon: React.ReactNode;\n}\n\nconst { Text } = Typography\n\nconst iconMapping: Record<PdfjsAnnotationSubtype, React.ReactNode> = {\n    Circle: <CircleIcon />,\n    FreeText: <FreetextIcon />,\n    Ink: <FreehandIcon />,\n    Highlight: <HighlightIcon />,\n    Underline: <UnderlineIcon />,\n    Squiggly: <FreeHighlightIcon />,\n    StrikeOut: <StrikeoutIcon />,\n    Stamp: <StampIcon />,\n    Line: <FreehandIcon />,\n    Square: <RectangleIcon />,\n    Polygon: <FreehandIcon />,\n    PolyLine: <CloudIcon />,\n    Caret: <SignatureIcon />,\n    Link: <FreehandIcon />,\n    Text: <NoteIcon />,\n    FileAttachment: <ExportIcon />,\n    Popup: <FreehandIcon />,\n    Widget: <FreehandIcon />,\n    Note: <NoteIcon />,\n    Arrow: <ArrowIcon />\n}\n\nconst commentStatusOptions: Record<CommentStatus, StatusOption> = {\n    [CommentStatus.Accepted]: {\n        labelKey: 'comment.status.accepted',\n        icon: <LikeOutlined />,\n    },\n    [CommentStatus.Rejected]: {\n        labelKey: 'comment.status.rejected',\n        icon: <DislikeOutlined />,\n    },\n    [CommentStatus.Cancelled]: {\n        labelKey: 'comment.status.cancelled',\n        icon: <MinusCircleOutlined />,\n    },\n    [CommentStatus.Completed]: {\n        labelKey: 'comment.status.completed',\n        icon: <CheckCircleOutlined />,\n    },\n    [CommentStatus.Closed]: {\n        labelKey: 'comment.status.closed',\n        icon: <StopOutlined />,\n    },\n    [CommentStatus.None]: {\n        labelKey: 'comment.status.none',\n        icon: <MinusSquareOutlined />,\n    }\n};\n\nconst getIconBySubtype = (subtype: PdfjsAnnotationSubtype): React.ReactNode => {\n    return iconMapping[subtype] || null\n}\n\nconst AnnotationIcon: React.FC<{ subtype: PdfjsAnnotationSubtype }> = ({ subtype }) => {\n    const Icon = getIconBySubtype(subtype)\n    return Icon ? <span className=\"annotation-icon\">{Icon}</span> : null\n}\n\nconst { TextArea } = Input\n\ninterface CustomCommentProps {\n    userName: string\n    onSelected: (annotation: IAnnotationStore) => void\n    onUpdate: (annotation: IAnnotationStore) => void\n    onDelete: (id: string) => void\n    onScroll?: () => void\n}\n\nexport interface CustomCommentRef {\n    addAnnotation(annotation: IAnnotationStore): void\n    delAnnotation(id: string): void\n    updateAnnotation(annotation: IAnnotationStore): void\n    selectedAnnotation(annotation: IAnnotationStore, isClick: boolean): void\n}\n\n/**\n * @description CustomComment\n */\nconst CustomComment = forwardRef<CustomCommentRef, CustomCommentProps>(function CustomComment(props, ref) {\n    const [annotations, setAnnotations] = useState<IAnnotationStore[]>([])\n    const [currentAnnotation, setCurrentAnnotation] = useState<IAnnotationStore | null>(null)\n    const [replyAnnotation, setReplyAnnotation] = useState<IAnnotationStore | null>(null)\n    const [currentReply, setCurrentReply] = useState<IAnnotationComment | null>(null)\n    const [editAnnotation, setEditAnnotation] = useState<IAnnotationStore | null>(null)\n    const [selectedUsers, setSelectedUsers] = useState<string[]>([])\n    const [selectedTypes, setSelectedTypes] = useState<PdfjsAnnotationSubtype[]>([])\n    const { t } = useTranslation()\n\n    const annotationRefs = useRef<Record<string, HTMLDivElement | null>>({})\n\n    useImperativeHandle(ref, () => ({\n        addAnnotation,\n        delAnnotation,\n        selectedAnnotation,\n        updateAnnotation\n    }))\n\n    const addAnnotation = (annotation: IAnnotationStore) => {\n        setAnnotations(prevAnnotations => [...prevAnnotations, annotation])\n        setCurrentAnnotation(null)\n    }\n\n    const delAnnotation = (id: string) => {\n        setAnnotations(prevAnnotations => prevAnnotations.filter(annotation => annotation.id !== id))\n        if (currentAnnotation?.id === id) {\n            setCurrentAnnotation(null)\n        }\n        if (replyAnnotation?.id === id) {\n            setReplyAnnotation(null)\n        }\n        setCurrentReply(null)\n    }\n\n    const selectedAnnotation = (annotation: IAnnotationStore, isClick: boolean) => {\n        setCurrentAnnotation(annotation)\n\n        if (!isClick) return\n\n        const isOwn = annotation.title === props.userName\n        const isEmptyComment = annotation.contentsObj.text === ''\n\n        // 👇 根据批注归属与内容决定打开评论或回复\n        if (isOwn && isEmptyComment) {\n            setEditAnnotation(annotation)\n        } else {\n            setReplyAnnotation(annotation)\n        }\n\n        // 👇 滚动至目标批注 DOM 元素\n        const element = annotationRefs.current[annotation.id]\n        if (element) {\n            element.scrollIntoView({ behavior: 'smooth', block: 'center' })\n        }\n    }\n\n    const updateAnnotation = (updatedAnnotation: IAnnotationStore) => {\n        setAnnotations(prevAnnotations =>\n            prevAnnotations.map(annotation => {\n                if (annotation.id === updatedAnnotation.id) {\n                    // 更新内容、颜色或其他属性\n                    const newAnnotation = {\n                        ...annotation,\n                        konvaClientRect: updatedAnnotation.konvaClientRect,\n                        date: formatTimestamp(Date.now()) // 更新最后修改时间\n                    }\n                    return newAnnotation\n                }\n                return annotation\n            })\n        )\n\n        // 清除当前编辑的批注\n        setEditAnnotation(null)\n    }\n\n    const allUsers = useMemo(() => {\n        const map = new Map<string, number>()\n        annotations.forEach(a => {\n            map.set(a.title, (map.get(a.title) || 0) + 1)\n        })\n        return Array.from(map.entries()) // [title, count]\n    }, [annotations])\n\n    const allTypes = useMemo(() => {\n        const types = new Map<PdfjsAnnotationSubtype, number>()\n        annotations.forEach(a => {\n            types.set(a.subtype, (types.get(a.subtype) || 0) + 1)\n        })\n        return Array.from(types.entries()) // [subtype, count]\n    }, [annotations])\n\n    // ✅ 初始化默认选中所有 username/type\n    useEffect(() => {\n        setSelectedUsers(allUsers.map(([u]) => u))\n    }, [allUsers])\n\n    useEffect(() => {\n        setSelectedTypes(allTypes.map(([t]) => t))\n    }, [allTypes])\n\n    const filteredAnnotations = useMemo(() => {\n        if (selectedUsers.length === 0 || selectedTypes.length === 0) return []\n        return annotations.filter(a => selectedUsers.includes(a.title) && selectedTypes.includes(a.subtype))\n    }, [annotations, selectedUsers, selectedTypes])\n\n    const groupedAnnotations = useMemo(() => {\n        return filteredAnnotations.reduce(\n            (acc, annotation) => {\n                if (!acc[annotation.pageNumber]) {\n                    acc[annotation.pageNumber] = []\n                }\n                acc[annotation.pageNumber].push(annotation)\n                return acc\n            },\n            {} as Record<number, IAnnotationStore[]>\n        )\n    }, [filteredAnnotations])\n\n    const handleUserToggle = (username: string) => {\n        setSelectedUsers(prev => (prev.includes(username) ? prev.filter(u => u !== username) : [...prev, username]))\n    }\n\n    const handleTypeToggle = (type: PdfjsAnnotationSubtype) => {\n        setSelectedTypes(prev => (prev.includes(type) ? prev.filter(t => t !== type) : [...prev, type]))\n    }\n\n    const filterContent = (\n        <div className=\"CustomComment_filterContent\">\n            <div className=\"title\">{t('normal.author')}</div>\n            <ul>\n                {allUsers.map(([user, count]) => (\n                    <li key={user}>\n                        <Checkbox checked={selectedUsers.includes(user)} onChange={() => handleUserToggle(user)}>\n                            <Space>\n                                <Text ellipsis style={{ maxWidth: 200 }}>\n                                    {user}\n                                </Text>\n                                <Text type=\"secondary\">({count})</Text>\n                            </Space>\n                        </Checkbox>\n                    </li>\n                ))}\n            </ul>\n            <div className=\"title\">{t('normal.type')}</div>\n            <ul>\n                {allTypes.map(([type, count]) => (\n                    <li key={type}>\n                        <Checkbox checked={selectedTypes.includes(type)} onChange={() => handleTypeToggle(type)}>\n                            <Space>\n                                <AnnotationIcon subtype={type} />\n                                <Text type=\"secondary\">({count})</Text>\n                            </Space>\n                        </Checkbox>\n                    </li>\n                ))}\n            </ul>\n            <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n                <Button\n                    type=\"link\"\n                    onClick={() => {\n                        setSelectedUsers(allUsers.map(([u]) => u))\n                        setSelectedTypes(allTypes.map(([t]) => t))\n                    }}\n                >\n                    {t('normal.selectAll')}\n                </Button>\n                <Button\n                    type=\"link\"\n                    onClick={() => {\n                        setSelectedUsers([])\n                        setSelectedTypes([])\n                    }}\n                >\n                    {t('normal.clear')}\n                </Button>\n            </div>\n        </div>\n    )\n\n    const getLastStatusIcon = (annotation: IAnnotationStore): React.ReactNode => {\n        const lastWithStatus = [...(annotation.comments || [])]\n            .reverse()\n            .find(c => c.status !== undefined && c.status !== null)\n\n        const status = lastWithStatus?.status ?? CommentStatus.None\n        return commentStatusOptions[status]?.icon ?? commentStatusOptions[CommentStatus.None].icon\n    }\n\n    const handleAnnotationClick = (annotation: IAnnotationStore) => {\n        setCurrentAnnotation(annotation)\n        props.onSelected(annotation)\n    }\n\n    const updateComment = (annotation: IAnnotationStore, comment: string) => {\n        annotation.contentsObj.text = comment\n        props.onUpdate(annotation)\n    }\n\n    const addReply = (annotation: IAnnotationStore, comment: string, status?: CommentStatus) => {\n        const newReply = {\n            id: generateUUID(),\n            title: props.userName,\n            date: formatTimestamp(Date.now()),\n            content: comment,\n            status\n        }\n\n        setAnnotations(prevAnnotations =>\n            prevAnnotations.map(a => {\n                if (a.id === annotation.id) {\n                    const updatedAnnotation = {\n                        ...a,\n                        comments: [...(a.comments || []), newReply],\n                        date: formatTimestamp(Date.now())\n                    }\n                    props.onUpdate(updatedAnnotation)\n                    return updatedAnnotation\n                }\n                return a\n            })\n        )\n\n        setReplyAnnotation(null)\n    }\n\n\n    const updateReply = (annotation: IAnnotationStore, reply: IAnnotationComment, comment: string) => {\n        reply.date = formatTimestamp(Date.now())\n        reply.content = comment\n        reply.title = props.userName\n        props.onUpdate(annotation)\n    }\n\n    const deleteAnnotation = (annotation: IAnnotationStore) => {\n        setAnnotations(prevAnnotations => prevAnnotations.filter(item => item.id !== annotation.id))\n        if (currentAnnotation?.id === annotation.id) {\n            setCurrentAnnotation(null)\n        }\n        if (replyAnnotation?.id === annotation.id) {\n            setReplyAnnotation(null)\n        }\n        setCurrentReply(null)\n        props.onDelete(annotation.id)\n    }\n\n    const deleteReply = (annotation: IAnnotationStore, reply: IAnnotationComment) => {\n        let updatedAnnotation: IAnnotationStore | null = null\n\n        setAnnotations(prevAnnotations =>\n            prevAnnotations.map(item => {\n                if (item.id === annotation.id) {\n                    const updatedComments = item.comments.filter(comment => comment.id !== reply.id)\n                    updatedAnnotation = { ...item, comments: updatedComments }\n                    return updatedAnnotation\n                }\n                return item\n            })\n        )\n        if (currentReply?.id === reply.id) {\n            setCurrentReply(null)\n        }\n        if (updatedAnnotation) {\n            props.onUpdate(updatedAnnotation)\n        }\n    }\n\n    // Comment 编辑框\n    const commentInput = useCallback(\n        (annotation: IAnnotationStore) => {\n            let comment = ''\n            if (editAnnotation && currentAnnotation?.id === annotation.id) {\n                const handleSubmit = () => {\n                    updateComment(annotation, comment)\n                    setEditAnnotation(null)\n                }\n                return (\n                    <>\n                        <TextArea\n                            defaultValue={annotation.contentsObj.text}\n                            autoFocus\n                            rows={4}\n                            style={{ marginBottom: '8px', marginTop: '8px' }}\n                            onBlur={() => setEditAnnotation(null)}\n                            onChange={e => (comment = e.target.value)}\n                            onKeyDown={e => {\n                                if (e.key === 'Enter' && !e.shiftKey) {\n                                    e.preventDefault()\n                                    handleSubmit()\n                                }\n                            }}\n                        />\n                        <Button\n                            type=\"primary\"\n                            block\n                            onMouseDown={handleSubmit}\n                        >\n                            {t('normal.confirm')}\n                        </Button>\n                    </>\n                )\n            }\n            return <Paragraph style={{ margin: '8px 0 8px 15px'}} ellipsis={{ rows: 3, expandable: true, symbol: t('normal.more') }}>{annotation.contentsObj.text}</Paragraph>\n        },\n        [editAnnotation, currentAnnotation]\n    )\n\n    // 回复框\n    const replyInput = useCallback(\n        (annotation: IAnnotationStore) => {\n            let comment = ''\n            if (replyAnnotation && currentAnnotation?.id === annotation.id) {\n                const handleSubmit = () => {\n                    addReply(annotation, comment)\n                    setReplyAnnotation(null)\n                }\n                return (\n                    <>\n                        <TextArea\n                            autoFocus\n                            rows={4}\n                            style={{ marginBottom: '8px', marginTop: '8px' }}\n                            onBlur={() => setReplyAnnotation(null)}\n                            onChange={e => (comment = e.target.value)}\n                            onKeyDown={e => {\n                                if (e.key === 'Enter' && !e.shiftKey) {\n                                    e.preventDefault()\n                                    handleSubmit()\n                                }\n                            }}\n                        />\n                        <Button\n                            type=\"primary\"\n                            block\n                            onMouseDown={handleSubmit}\n                        >\n                            {t('normal.confirm')}\n                        </Button>\n                    </>\n                )\n            }\n            return null\n        },\n        [replyAnnotation, currentAnnotation]\n    )\n\n    // 编辑回复框\n    const editReplyInput = useCallback(\n        (annotation: IAnnotationStore, reply: IAnnotationComment) => {\n            let comment = ''\n            if (currentReply && currentReply.id === reply.id) {\n                const handleSubmit = () => {\n                    updateReply(annotation, reply, comment)\n                    setCurrentReply(null)\n                }\n                return (\n                    <>\n                        <TextArea\n                            defaultValue={currentReply.content}\n                            autoFocus\n                            rows={4}\n                            style={{ marginBottom: '8px' }}\n                            onBlur={() => setCurrentReply(null)}\n                            onChange={e => (comment = e.target.value)}\n                            onKeyDown={e => {\n                                if (e.key === 'Enter' && !e.shiftKey) {\n                                    e.preventDefault()\n                                    handleSubmit()\n                                }\n                            }}\n                        />\n                        <Button type=\"primary\" block onMouseDown={handleSubmit}>\n                            {t('normal.confirm')}\n                        </Button>\n                    </>\n                )\n            }\n\n            return <p>{reply.content}</p>\n        },\n        [replyAnnotation, currentReply]\n    )\n\n    const comments = Object.entries(groupedAnnotations).map(([pageNumber, annotationsForPage]) => {\n        // 根据 konvaClientRect.y 对 annotationsForPage 进行排序\n        const sortedAnnotations = annotationsForPage.sort((a, b) => a.konvaClientRect.y - b.konvaClientRect.y)\n\n        return (\n            <div key={pageNumber} className=\"group\">\n                <h3>\n                    {t('comment.page', { value: pageNumber })}\n                    <span>{t('comment.total', { value: annotationsForPage.length })}</span>\n                </h3>\n                {sortedAnnotations.map(annotation => {\n                    const isSelected = annotation.id === currentAnnotation?.id\n                    const commonProps = { className: isSelected ? 'comment selected' : 'comment', id: `annotation-${annotation.id}` }\n                    return (\n                        <div\n                            {...commonProps}\n                            key={annotation.id}\n                            onClick={() => handleAnnotationClick(annotation)}\n                            ref={el => (annotationRefs.current[annotation.id] = el)}\n                        >\n                            <div className=\"title\">\n                                <AnnotationIcon subtype={annotation.subtype} />\n                                <div className=\"username\">{annotation.title}\n                                    <span>{formatPDFDate(annotation.date, true)}</span>\n                                </div>\n                                <span className=\"tool\">\n                                    <Dropdown\n                                        menu={{\n                                            items: Object.entries(commentStatusOptions).map(([statusKey, option]) => ({\n                                                key: statusKey,\n                                                label: t(option.labelKey),\n                                                icon: option.icon,\n                                                onClick: (e) => {\n                                                    addReply(annotation, t('comment.statusText', { value: t(option.labelKey) }), e.key as CommentStatus)\n                                                    setReplyAnnotation(null)\n                                                }\n                                            }))\n                                        }}\n                                        trigger={['click']}\n                                    >\n                                        <span className=\"icon\">\n                                            {getLastStatusIcon(annotation)}\n                                        </span>\n                                    </Dropdown>\n                                    <Dropdown\n                                        menu={{\n                                            items: [\n                                                {\n                                                    label: t('normal.reply'),\n                                                    key: '0',\n                                                    onClick: e => {\n                                                        e.domEvent.stopPropagation()\n                                                        setReplyAnnotation(annotation)\n                                                    }\n                                                },\n                                                {\n                                                    label: t('normal.edit'),\n                                                    key: '1',\n                                                    onClick: e => {\n                                                        e.domEvent.stopPropagation()\n                                                        setEditAnnotation(annotation)\n                                                    }\n                                                },\n                                                {\n                                                    label: t('normal.delete'),\n                                                    key: '3',\n                                                    onClick: e => {\n                                                        e.domEvent.stopPropagation()\n                                                        deleteAnnotation(annotation)\n                                                    }\n                                                }\n                                            ]\n                                        }}\n                                        trigger={['click']}\n                                    >\n                                        <span className=\"icon\">\n                                            <MoreOutlined />\n                                        </span>\n                                    </Dropdown>\n                                </span>\n                            </div>\n                            {commentInput(annotation)}\n                            {annotation.comments?.map((reply, index) => (\n                                <div className=\"reply\" key={index}>\n                                    <div className=\"title\">\n                                        <div className=\"username\"> {reply.title}\n                                            <span>{formatPDFDate(reply.date, true)}</span>\n                                        </div>\n                                        <span className=\"tool\">\n                                            <Dropdown\n                                                menu={{\n                                                    items: [\n                                                        {\n                                                            label: t('normal.edit'),\n                                                            key: '1',\n                                                            onClick: e => {\n                                                                e.domEvent.stopPropagation()\n                                                                setCurrentReply(reply)\n                                                            }\n                                                        },\n                                                        {\n                                                            label: t('normal.delete'),\n                                                            key: '2',\n                                                            onClick: e => {\n                                                                e.domEvent.stopPropagation()\n                                                                deleteReply(annotation, reply)\n                                                            }\n                                                        }\n                                                    ]\n                                                }}\n                                                trigger={['click']}\n                                            >\n                                                <span className=\"icon\">\n                                                    <MoreOutlined />\n                                                </span>\n                                            </Dropdown>\n                                        </span>\n                                    </div>\n                                    {editReplyInput(annotation, reply)}\n                                </div>\n                            ))}\n                            <div className=\"reply-input\">\n                                {replyInput(annotation)}\n                                {\n                                    !replyAnnotation &&\n                                    !currentReply &&\n                                    !editAnnotation &&\n                                    currentAnnotation?.id === annotation.id && (\n                                        <Button style={{ marginTop: '8px' }} onClick={() => setReplyAnnotation(annotation)} type=\"primary\" block>\n                                            {t('normal.reply')}\n                                        </Button>\n                                    )}\n                            </div>\n                        </div>\n                    )\n                })}\n            </div>\n        )\n    })\n    return (\n        <div className=\"CustomComment\" onScroll={() => {props.onScroll && props.onScroll() }}>\n            <div className=\"filters\">\n                <Popover content={filterContent} trigger=\"click\" placement=\"bottomLeft\">\n                    <Button size=\"small\" icon={<FilterOutlined />} />\n                </Popover>\n            </div>\n            <div className=\"list\">{comments}</div>\n        </div>\n    )\n})\n\nexport { CustomComment }\n"
  },
  {
    "path": "src/components/menu/index.scss",
    "content": ".CustomAnnotationMenu {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 999;\n    display: none;\n    width: max-content;\n    background-color: var(--doorhanger-bg-color);\n    box-shadow:\n        0 1px 5px var(--doorhanger-border-color),\n        0 0 0 1px var(--doorhanger-border-color);\n    border: var(--toolbar-border-color);\n    border-radius: 6px;\n    font: message-box;\n    padding: 4px; // 增加基础内边距避免按钮贴边\n\n    &.show {\n        display: block;\n    }\n\n    &.hide {\n        display: none;\n    }\n\n    .styleContainer {\n        .colorPalette {\n            display: flex;\n            flex-wrap: wrap; // 允许换行\n            gap: 8px 10px; // 行间距8px，列间距10px\n            margin: 8px;\n            max-width: calc((22px + 10px) * 5); // 控制一行最多放5个，考虑cell宽度和间距\n\n            .cell {\n                cursor: pointer;\n                width: 22px;\n                height: 22px;\n                border-radius: 100px;\n                display: flex;\n                align-items: center;\n                justify-content: center;\n                border: 1px solid transparent;\n                span {\n                    width: 12px;\n                    height: 12px;\n                    display: inline-block;\n                    border-radius: 100px;\n                }\n            }\n            .cell:hover {\n                border: 1px solid var(--button-hover-color);\n            }\n\n            .cell.active {\n                border: 1px solid #bbb;\n            }\n        }\n        .prototypeSetting {\n            margin: 8px;\n            .ant-form-item{\n                margin-bottom: 8px;\n            }\n            .ant-form-item-label{\n                padding: 0;\n                label {\n                        color: var(--main-color);\n                }\n            }\n            .ant-slider:hover {\n                .ant-slider-rail {\n                    background-color: var(--toolbar-border-color);\n                }\n            }\n            .ant-slider-rail {\n                background-color: var(--toolbar-border-color);\n            }\n        }\n    }\n\n    .buttons {\n        display: flex;\n        gap: 4px;\n        margin: 0;\n        padding: 0;\n        list-style: none;\n        user-select: none;\n\n        li {\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            width: 40px; // ✅ 固定宽度（可按实际图标宽度调整）\n            height: 32px;\n            padding: 0; // ✅ 去掉额外 padding，保证统一尺寸\n            color: var(--main-color);\n            border: 1px solid transparent;\n            border-radius: 4px;\n            cursor: pointer;\n            transition:\n                background-color 0.2s ease,\n                opacity 0.2s ease;\n\n            .icon {\n                font-size: 16px;\n                line-height: 1;\n            }\n\n            &:hover {\n                background-color: var(--button-hover-color);\n            }\n\n            &:active {\n                background-color: var(--button-hover-color-active, #ccc);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/components/menu/index.tsx",
    "content": "import './index.scss'\n\nimport { computePosition, flip } from '@floating-ui/dom'\nimport React, { forwardRef, useImperativeHandle, useRef, useState } from 'react'\nimport { annotationDefinitions, IAnnotationStore, IAnnotationStyle } from '../../const/definitions'\nimport { IRect } from 'konva/lib/types'\nimport { AnnoIcon, DeleteIcon, PaletteIcon } from '../../const/icon'\nimport { defaultOptions } from '../../const/default_options'\nimport { Divider, Form, Slider } from 'antd'\nimport Konva from 'konva'\nimport { isSameColor } from '../../utils/utils'\nimport { useTranslation } from 'react-i18next'\nimport { PAINTER_WRAPPER_PREFIX } from '../../painter/const'\n\ninterface CustomAnnotationMenuProps {\n    onOpenComment: (annotation: IAnnotationStore) => void\n    onChangeStyle: (annotation: IAnnotationStore, styles: IAnnotationStyle) => void\n    onDelete: (annotation: IAnnotationStore) => void\n}\n\nexport interface CustomAnnotationMenuRef {\n    open(annotation: IAnnotationStore, selectorRect: IRect): void\n    close(): void\n}\n\nfunction getKonvaShapeForString(konvaString: string) {\n    const ghostGroup = Konva.Node.create(konvaString) // 根据序列化字符串创建 Konva.Group 对象\n    return ghostGroup.children[0]\n}\n\n/**\n * @description CustomAnnotationMenu\n */\nconst CustomAnnotationMenu = forwardRef<CustomAnnotationMenuRef, CustomAnnotationMenuProps>(function CustomAnnotationMenu(props, ref) {\n    const [show, setShow] = useState(false)\n    const [currentAnnotation, setCurrentAnnotation] = useState<IAnnotationStore | null>(null)\n\n    const [currentColor, setCurrentColor] = useState<string | null>(defaultOptions.setting.COLOR)\n\n    const [strokeWidth, setStrokeWidth] = useState<number | null>(defaultOptions.setting.STROKE_WIDTH)\n\n    const [opacity, seOpacity] = useState<number | null>(defaultOptions.setting.OPACITY)\n\n    const [showStyle, setShowStyle] = useState(false)\n\n    const containerRef = useRef<HTMLDivElement | null>(null)\n\n    const { t } = useTranslation()\n\n\n    useImperativeHandle(ref, () => ({\n        open,\n        close\n    }))\n\n    const open = (annotation: IAnnotationStore, selectorRect: IRect) => {\n        setCurrentAnnotation(annotation)\n        setShow(true)\n        const currentShape = getKonvaShapeForString(annotation.konvaString)\n        setCurrentColor(currentShape.stroke())\n        setStrokeWidth(currentShape.strokeWidth())\n        seOpacity(currentShape.opacity() * 100)\n        requestAnimationFrame(() => {\n            const menuEl = containerRef.current\n            if (!menuEl) return\n\n            const wrapperId = `${PAINTER_WRAPPER_PREFIX}_page_${annotation.pageNumber}`\n            const konvaContainer = document.querySelector(`#${wrapperId} .konvajs-content`) as HTMLElement\n            const containerRect = konvaContainer?.getBoundingClientRect?.()\n\n            const scaleX = 1\n            const scaleY = 1\n\n            const realX = selectorRect.x * scaleX + containerRect.left\n            const realY = selectorRect.y * scaleY + containerRect.top\n\n            const virtualEl = {\n                getBoundingClientRect() {\n                    return {\n                        x: realX,\n                        y: realY,\n                        width: selectorRect.width * scaleX,\n                        height: selectorRect.height * scaleY,\n                        left: realX,\n                        top: realY,\n                        right: realX + selectorRect.width * scaleX,\n                        bottom: realY + selectorRect.height * scaleY,\n                    }\n                }\n            }\n\n            computePosition(virtualEl, menuEl, {\n                placement: 'bottom',\n                middleware: [flip()],\n            }).then(({ x, y }) => {\n                Object.assign(menuEl.style, {\n                    position: 'absolute',\n                    left: `${x}px`,\n                    top: `${y}px`,\n                })\n            })\n        })\n    }\n\n    const close = () => {\n        setShow(false)\n        setCurrentAnnotation(null)\n        setShowStyle(false)\n    }\n\n    const isStyleSupported = currentAnnotation && annotationDefinitions.find(item => item.type === currentAnnotation.type)?.styleEditable\n\n    const handleAnnotationStyleChange = (style: IAnnotationStyle) => {\n        if (!currentAnnotation) return\n        props.onChangeStyle(currentAnnotation, style)\n    }\n    return (\n        <div className={`CustomAnnotationMenu ${show ? 'show' : 'hide'}`} ref={containerRef}>\n\n            {\n                showStyle && currentAnnotation && (\n                    <div className=\"styleContainer\">\n                        {\n                            isStyleSupported.color && (\n                                <div className=\"colorPalette\">\n                                    {defaultOptions.colors.map(color => (\n                                        <div key={color} className={`cell ${isSameColor(color, currentColor) ? 'active' : ''}`} onMouseDown={() => {\n                                            handleAnnotationStyleChange({ color })\n                                            setCurrentColor(color)\n                                        }}>\n                                            <span style={{ backgroundColor: color }}></span>\n                                        </div>\n                                    ))}\n                                </div>\n                            )\n                        }\n                        {\n                            (isStyleSupported.opacity || isStyleSupported.strokeWidth) && (\n                                <>\n                                    <Divider size='small' />\n                                    <div className='prototypeSetting'>\n                                        <Form\n                                            layout='vertical'\n                                        >\n                                            {\n                                                isStyleSupported.strokeWidth && (<Form.Item label={`${t('normal.strokeWidth')} (${strokeWidth})`}>\n                                                    <Slider\n                                                        value={strokeWidth}\n                                                        min={1}\n                                                        max={20}\n                                                        onChange={(value) => {\n                                                            handleAnnotationStyleChange({ strokeWidth: value })\n                                                            setStrokeWidth(value)\n                                                        }}\n                                                    />\n                                                </Form.Item>)\n                                            }\n                                            {\n                                                isStyleSupported.opacity && (<Form.Item label={`${t('normal.opacity')} (${opacity}%)`}>\n                                                    <Slider\n                                                        value={opacity}\n                                                        min={0}\n                                                        max={100}\n                                                        onChange={(value) => {\n                                                            handleAnnotationStyleChange({ opacity: value / 100 })\n                                                            seOpacity(value)\n                                                        }}\n                                                    />\n                                                </Form.Item>)\n                                            }\n\n                                        </Form>\n                                    </div></>\n                            )\n                        }\n\n\n                    </div>\n                )\n            }\n\n            {\n                !showStyle && currentAnnotation && (\n                    <ul className=\"buttons\">\n                        <li onMouseDown={() => {\n                            if (currentAnnotation) {\n                                props.onOpenComment(currentAnnotation)\n                                close()\n                            }\n                        }}>\n                            <div className=\"icon\">\n                                <AnnoIcon />\n                            </div>\n                        </li>\n\n                        {isStyleSupported && (\n                            <li onMouseDown={() => {\n                                if (currentAnnotation) {\n                                    setShowStyle(true)\n                                }\n                            }}>\n                                <div className=\"icon\">\n                                    <PaletteIcon />\n                                </div>\n                            </li>\n                        )}\n\n                        <li onMouseDown={() => {\n                            if (currentAnnotation) {\n                                props.onDelete(currentAnnotation)\n                                close()\n                            }\n                        }}>\n                            <div className=\"icon\">\n                                <DeleteIcon />\n                            </div>\n                        </li>\n                    </ul>\n                )\n            }\n\n\n        </div>\n    )\n})\n\nexport { CustomAnnotationMenu }\n"
  },
  {
    "path": "src/components/popbar/index.scss",
    "content": ".CustomPopbar {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 999;\n    display: none;\n    width: max-content;\n    background-color: var(--doorhanger-bg-color);\n    box-shadow:\n        0 1px 5px var(--doorhanger-border-color),\n        0 0 0 1px var(--doorhanger-border-color);\n    border: var(--toolbar-border-color);\n    border-radius: 6px;\n    font: message-box;\n    padding: 4px; // 增加基础内边距避免按钮贴边\n    &.show {\n        display: block;\n    }\n\n    .buttons {\n        display: flex;\n        gap: 4px;\n        padding: 0;\n        margin: 0;\n        list-style: none;\n        user-select: none;\n\n        li {\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            width: 40px; // ✅ 固定宽度（可按实际图标宽度调整）\n            height: 32px;\n            padding: 0;\n            border: 1px solid transparent;\n            color: var(--main-color);\n            cursor: pointer;\n            border-radius: 4px;\n            transition: background-color 0.2s ease;\n\n            .icon {\n                font-size: 14px;\n                line-height: 1;\n            }\n\n            &:hover {\n                background-color: var(--button-hover-color);\n            }\n\n            &:active {\n                background-color: var(--button-hover-color-active, #ccc);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/components/popbar/index.tsx",
    "content": "import './index.scss'\n\nimport { computePosition, flip } from '@floating-ui/dom'\nimport React, { forwardRef, useImperativeHandle, useRef, useState } from 'react'\nimport { annotationDefinitions, IAnnotationType, PdfjsAnnotationEditorType } from '../../const/definitions'\nimport { useTranslation } from 'react-i18next'\n\ninterface CustomPopbarProps {\n    onChange: (annotation: IAnnotationType | null, range: Range | null) => void\n}\n\nexport interface CustomPopbarRef {\n    open(range: Range | null): void\n    close(): void\n}\n\n/**\n * @description CustomPopbar\n */\nconst CustomPopbar = forwardRef<CustomPopbarRef, CustomPopbarProps>(function CustomPopbar(props, ref) {\n    const [show, setShow] = useState(false)\n    const [annotations] = useState<IAnnotationType[]>(annotationDefinitions.filter(item => item.pdfjsEditorType === PdfjsAnnotationEditorType.HIGHLIGHT))\n\n    const [currentRange, setCurrentRange] = useState<Range | null>(null)\n\n    const containerRef = useRef<HTMLDivElement | null>(null)\n\n    const { t } = useTranslation()\n\n    useImperativeHandle(ref, () => ({\n        open,\n        close\n    }))\n\n    const open = (range: Range | null) => {\n        setCurrentRange(range);\n        // 如果 range 为空或 startContainer 和 endContainer 都不是文本节点，隐藏菜单\n        if (!range || (range.endContainer.nodeType !== 3 && range.startContainer.nodeType !== 3)) {\n            setShow(false);\n            return;\n        }\n\n        setShow(true);\n\n        // 根据 endContainer 或 startContainer 获取边界矩形\n        const { bottom, height, left, right, top, width, x, y } = range.endContainer.nodeType === 3\n            ? range.endContainer.parentElement.getBoundingClientRect()\n            : range.startContainer.parentElement.getBoundingClientRect();\n\n        // 创建虚拟元素用于计算位置\n        const virtualEl = {\n            getBoundingClientRect() {\n                return {\n                    width,\n                    height,\n                    x,\n                    y,\n                    left,\n                    right,\n                    top,\n                    bottom\n                };\n            }\n        };\n\n        // 计算位置并调整菜单位置\n        computePosition(virtualEl, containerRef.current, {\n            placement: 'bottom',\n            middleware: [flip()]\n        }).then(({ x, y }) => {\n            Object.assign(containerRef.current.style, {\n                left: `${x}px`,\n                top: `${y}px`\n            });\n        });\n    };\n\n    const close = () => {\n        setShow(false)\n        setCurrentRange(null)\n    }\n\n    const handleAnnotationClick = (annotation: IAnnotationType | null) => {\n        setShow(false)\n        props.onChange(annotation, currentRange)\n    }\n\n    const buttons = annotations.map((annotation, index) => {\n        return (\n            <li key={index} onClick={() => handleAnnotationClick(annotation)}>\n                <div className=\"icon\">{annotation.icon}</div>\n            </li>\n        )\n    })\n\n    return (\n        <>\n            <div className={`CustomPopbar ${show ? 'show' : 'hide'}`} ref={containerRef}>\n                <ul className=\"buttons\">{buttons}</ul>\n            </div>\n        </>\n    )\n})\n\nexport { CustomPopbar }\n"
  },
  {
    "path": "src/components/toolbar/index.scss",
    "content": ".PdfjsAnnotationExtension_Comment_hidden {\n    .CustomToolbar::after {\n        display: none;\n    }\n}\n.CustomToolbar {\n    width: 100%;\n    height: 72px;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    overflow-x: auto;\n    .buttons {\n        display: flex;\n        padding: 0;\n        margin: 0;\n        list-style: none;\n        gap: 3px;\n        user-select: none;\n        li {\n            align-items: center;\n            height: 100%;\n            text-align: center;\n            border: 1px solid transparent;\n            border-radius: 3px;\n            color: var(--main-color);\n            .ant-upload-wrapper {\n                line-height: normal;\n            }\n\n            .icon {\n                font-size: 18px;\n                padding: 5px 10px 3px 10px;\n                border-bottom: 1px solid transparent;\n                opacity: 0.9;\n            }\n\n            .name {\n                font-size: 14px;\n                padding: 1px 10px 2px 10px;\n            }\n        }\n\n        li.selected {\n            border: 1px solid var(--toolbar-border-color);\n            background-color: var(--toolbar-border-color);\n        }\n\n        li.disabled {\n            opacity: 0.5;\n        }\n\n        li.disabled:hover {\n            background-color: transparent;\n        }\n    }\n\n    .splitToolbarButtonSeparator {\n        height: 30px;\n        margin: 0 5px;\n        min-width: 1px;\n    }\n    .right {\n        position: absolute;\n        right: 10px;\n    }\n}\n\n.CustomToolbar::after {\n    content: '';\n    display: block;\n    width: 330px; /* 右边间隔 */\n    height: 100%; /* 确保占位符高度和工具栏一致 */\n    flex-shrink: 0; /* 防止占位符被缩小 */\n}\n\n.SignatureTool {\n    margin: 0 auto;\n    .show {\n        display: block;\n    }\n    .hide {\n        display: none;\n    }\n    &-Header {\n        padding: 10px;\n    }\n    &-Container {\n        background-color: #eee;\n        border: 1px solid #ccc;\n        position: relative;\n        margin: 0 auto;\n        input {\n            background-color: transparent;\n            border: none;\n            margin: 0 auto;\n            text-align: center;\n            display: block;\n            width: 100%;\n            outline: none;\n        }\n        input::-webkit-input-placeholder {\n            color: #ccc;\n        }\n        .konvajs-content {\n            z-index: 99;\n            cursor: crosshair;\n        }\n\n        &-info {\n            font-size: 20px;\n            z-index: 0;\n            color: #ccc;\n            position: absolute;\n            top: 50%;\n            left: 0;\n            right: 0;\n            transform: translateY(-50%);\n            text-align: center;\n        }\n    }\n\n    &-ImagePreview {\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        width: 100%;\n        overflow: hidden;\n        position: relative;\n    }\n    img {\n        width: 100%;\n        height: 100%;\n        object-fit: contain;\n        display: block;\n    }\n\n    &-Toolbar {\n        border: 1px solid #ccc;\n        border-top: 0;\n        display: flex;\n        justify-content: space-between;\n        margin: 0 auto;\n\n        .colorPalette {\n            display: flex;\n            margin: 8px;\n\n            .cell {\n                cursor: pointer;\n                width: 22px;\n                height: 22px;\n                margin-right: 10px;\n                border-radius: 100px;\n                display: flex;\n                align-items: center;\n                justify-content: center;\n                border: 1px solid #fff;\n\n                span {\n                    width: 12px;\n                    height: 12px;\n                    display: inline-block;\n                    border-radius: 100px;\n                }\n            }\n\n            .active {\n                border: 1px solid #bbb;\n            }\n        }\n\n        .clear {\n            padding: 8px;\n            cursor: pointer;\n        }\n\n        .clear:hover {\n            text-decoration: underline;\n        }\n    }\n}\n\n.SignaturePop {\n    .ant-popover-inner {\n        padding: 5px;\n    }\n    &-Container {\n        max-height: 200px;\n        overflow: auto;\n    }\n    ul,\n    li {\n        margin: 0;\n        list-style: none;\n        padding: 0;\n\n        li:hover {\n            background-color: #ccc;\n        }\n    }\n    li {\n        display: flex;\n        margin: 5px;\n        justify-content: center;\n        align-items: center;\n        img{\n            height: 48px;\n            max-width: 100px;\n            overflow: clip;\n            object-fit: contain;\n        }\n        span {\n            margin-left: 5px;\n            cursor: pointer;\n        }\n    }\n\n    &-Toolbar {\n        padding: 5px;\n    }\n}\n\n.StampPop {\n    width: 300px;\n    .ant-popover-inner {\n        padding: 10px;\n    }\n    &-Container {\n        max-height: 200px;\n        overflow: auto;\n        display: flex;\n        flex-wrap: wrap;\n    }\n    ul,\n    li {\n        margin: 0;\n        list-style: none;\n        padding: 0;\n        li:hover {\n            background-color: #ccc;\n        }\n    }\n    li {\n        display: flex;\n        margin: 5px;\n        padding: 5px;\n        justify-content: center;\n        align-items: center;\n        border-radius: 5px;\n        width: 120px;\n        text-align: center;\n        img{\n            height: 48px;\n            max-width: 100px;\n            overflow: clip;\n            object-fit: contain;\n        }\n        span {\n            margin-left: 5px;\n            cursor: pointer;\n        }\n    }\n    &-Toolbar {\n        padding: 5px;\n    }\n}\n\n.StampTool {\n    margin: 0 auto;\n    &-Container {\n        position: relative;\n        margin: 0 auto;\n        .ant-form{\n            margin-top: 12px;\n        }\n        .ant-form-item{\n            margin-bottom: 12px;\n        }\n        &-ImagePreview {\n            background-color: #eee;\n            border: 1px solid #ccc;\n            overflow: auto;\n            .konvajs-content {\n                z-index: 99;\n                margin: 0 auto;\n            }\n        }\n        &-info {\n            font-size: 20px;\n            z-index: 0;\n            color: #ccc;\n            position: absolute;\n            top: 50%;\n            left: 0;\n            right: 0;\n            transform: translateY(-50%);\n            text-align: center;\n        }\n    }\n\n    &-ImagePreview {\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        width: 100%;\n        overflow: hidden;\n        position: relative;\n    }\n    img {\n        width: 100%;\n        height: 100%;\n        object-fit: contain;\n        display: block;\n    }\n\n    &-Toolbar {\n        border: 1px solid #ccc;\n        border-top: 0;\n        display: flex;\n        justify-content: space-between;\n        margin: 0 auto;\n\n        .colorPalette {\n            display: flex;\n            margin: 8px;\n\n            .cell {\n                cursor: pointer;\n                width: 22px;\n                height: 22px;\n                margin-right: 10px;\n                border-radius: 100px;\n                display: flex;\n                align-items: center;\n                justify-content: center;\n                border: 1px solid #fff;\n\n                span {\n                    width: 12px;\n                    height: 12px;\n                    display: inline-block;\n                    border-radius: 100px;\n                }\n            }\n\n            .active {\n                border: 1px solid #bbb;\n            }\n        }\n\n        .clear {\n            padding: 8px;\n            cursor: pointer;\n        }\n\n        .clear:hover {\n            text-decoration: underline;\n        }\n    }\n}\n\n@media all and (max-width: 1150px) {\n    .CustomToolbar {\n        .buttons {\n            .name {\n                display: none;\n            }\n        }\n    }\n    .CustomToolbar::after {\n        display: none;\n    }\n}\n@media all and (max-width: 690px) {\n    .CustomToolbar {\n        justify-content: flex-start;\n        .buttons {\n            margin-left: 5px;\n            padding-right: 5px;\n        }\n    }\n}\n\n@media (hover: hover) {\n    /* 只在支持 hover 的设备上保留 :hover 效果 */\n    .CustomToolbar .buttons li:hover {\n        background-color: var(--button-hover-color);\n    }\n}\n@media (hover: none) {\n    /* 在不支持 hover 的设备上，例如触屏设备，禁用 :hover 效果 */\n    .CustomToolbar .buttons li:active {\n        background-color: var(--button-hover-color); /* 使用 active 替代 */\n    }\n}\n"
  },
  {
    "path": "src/components/toolbar/index.tsx",
    "content": "import './index.scss'\nimport { Button, ColorPicker, message, Popover, Space } from 'antd'\nimport React, { forwardRef, useEffect, useImperativeHandle, useMemo, useState } from 'react'\nimport { annotationDefinitions, AnnotationType, IAnnotationStyle, IAnnotationType, PdfjsAnnotationEditorType } from '../../const/definitions'\nimport { AnnoIcon, ExportIcon, PaletteIcon, SaveIcon } from '../../const/icon'\nimport { SignatureTool } from './signature'\nimport { FilePdfOutlined, PlusCircleOutlined } from '@ant-design/icons'\nimport { StampTool } from './stamp'\nimport { useTranslation } from 'react-i18next'\nimport { defaultOptions } from '../../const/default_options'\n\ninterface CustomToolbarProps {\n    defaultAnnotationName: string\n    defaultSidebarOpen: boolean\n    userName: string\n    onChange: (annotation: IAnnotationType | null, dataTransfer: string | null) => void\n    onSave: () => void\n    onExport: (type: 'pdf' | 'excel') => void\n    onSidebarOpen: (open: boolean) => void\n}\n\nexport interface CustomToolbarRef {\n    activeAnnotation(annotation: IAnnotationType): void\n    updateStyle(annotationType: AnnotationType, style: IAnnotationStyle): void\n    toggleSidebarBtn(open: boolean): void\n}\n\n/**\n * @description CustomToolbar\n */\nconst CustomToolbar = forwardRef<CustomToolbarRef, CustomToolbarProps>(function CustomToolbar(props, ref) {\n    const defaultAnnotation = useMemo(() => {\n        if (!props.defaultAnnotationName) return null\n        return annotationDefinitions.find(item => item.name === props.defaultAnnotationName) || null\n    }, [props.defaultAnnotationName, annotationDefinitions])\n\n    const [currentAnnotation, setCurrentAnnotation] = useState<IAnnotationType | null>(defaultAnnotation)\n    const [annotations, setAnnotations] = useState<IAnnotationType[]>(\n        annotationDefinitions.filter(item => item.pdfjsEditorType !== PdfjsAnnotationEditorType.HIGHLIGHT)\n    )\n    const [dataTransfer, setDataTransfer] = useState<string | null>(null)\n    const [sidebarOpen, setSidebarOpen] = useState<boolean>(props.defaultSidebarOpen)\n    const { t } = useTranslation()\n\n    useImperativeHandle(ref, () => ({\n        activeAnnotation,\n        toggleSidebarBtn,\n        updateStyle\n    }))\n\n    const activeAnnotation = (annotation: IAnnotationType) => {\n        handleAnnotationClick(annotation)\n    }\n\n    const toggleSidebarBtn = (open: boolean) => {\n        setSidebarOpen(open)\n    }\n\n    const updateStyle = (annotationType: AnnotationType, style: IAnnotationStyle) => {\n        setAnnotations(\n            annotations.map(annotation => {\n                if (annotation.type === annotationType) {\n                    annotation.style = {\n                        ...annotation.style,\n                        ...style\n                    }\n                }\n                return annotation\n            })\n        )\n    }\n\n    const selectedType = currentAnnotation?.type\n\n    const handleAnnotationClick = (annotation: IAnnotationType | null) => {\n        setCurrentAnnotation(annotation)\n        if (annotation?.type !== AnnotationType.SIGNATURE) {\n            setDataTransfer(null) // 非签名类型时清空 dataTransfer\n        }\n    }\n\n    const handleAdd = (signatureDataUrl, annotation) => {\n        message.open({\n            type: 'info',\n            content: t('toolbar.message.selectPosition')\n        })\n        setDataTransfer(signatureDataUrl)\n        setCurrentAnnotation(annotation)\n    }\n\n    const buttons = annotations.map((annotation, index) => {\n        const isSelected = annotation.type === selectedType\n\n        const commonProps = {\n            className: isSelected ? 'selected' : ''\n        }\n        switch (annotation.type) {\n            case AnnotationType.STAMP:\n                return (\n                    <li title={t(`annotations.${annotation.name}`)} key={index} {...commonProps}>\n                        <StampTool userName={props.userName} annotation={annotation} onAdd={signatureDataUrl => handleAdd(signatureDataUrl, annotation)} />\n                    </li>\n                )\n\n            case AnnotationType.SIGNATURE:\n                return (\n                    <li title={t(`annotations.${annotation.name}`)} key={index} {...commonProps}>\n                        <SignatureTool annotation={annotation} onAdd={signatureDataUrl => handleAdd(signatureDataUrl, annotation)} />\n                    </li>\n                )\n\n            default:\n                return (\n                    <li\n                        title={t(`annotations.${annotation.name}`)}\n                        key={index}\n                        {...commonProps}\n                        onClick={() => handleAnnotationClick(isSelected ? null : annotation)}\n                    >\n                        <div className=\"icon\">{annotation.icon}</div>\n                        <div className=\"name\">{t(`annotations.${annotation.name}`)}</div>\n                    </li>\n                )\n        }\n    })\n\n    const isColorDisabled = !currentAnnotation?.styleEditable?.color\n\n    useEffect(() => {\n        // 调用 onChange 并传递当前的 annotation 和 dataTransfer\n        props.onChange(currentAnnotation, dataTransfer)\n    }, [currentAnnotation, dataTransfer, props])\n\n    const handleColorChange = (color: string) => {\n        if (!currentAnnotation) return\n        const updatedAnnotation = { ...currentAnnotation, style: { ...currentAnnotation.style, color } }\n        const updatedAnnotations = annotations.map(annotation => (annotation.type === currentAnnotation.type ? updatedAnnotation : annotation))\n        setAnnotations(updatedAnnotations)\n        setCurrentAnnotation(updatedAnnotation)\n    }\n\n    const handleSidebarOpen = isOpen => {\n        props.onSidebarOpen(!isOpen)\n        setSidebarOpen(!isOpen)\n    }\n\n    return (\n        <div className=\"CustomToolbar\">\n            <ul className=\"buttons\">\n                {buttons}\n                <ColorPicker\n                    arrow={false}\n                    disabledAlpha\n                    value={currentAnnotation?.style?.color || defaultOptions.setting.COLOR}\n                    disabled={isColorDisabled}\n                    showText={false}\n                    onChangeComplete={color => handleColorChange(color.toHexString())}\n                    presets={[{ label: '', colors: defaultOptions.colors }]}\n                >\n                    <li className={isColorDisabled ? 'disabled' : ''} title={t('normal.color')}>\n                        <div className=\"icon\">\n                            <PaletteIcon style={{ color: currentAnnotation?.style?.color }} />\n                        </div>\n                        <div className=\"name\">{t('normal.color')}</div>\n                    </li>\n                </ColorPicker>\n            </ul>\n            <div className=\"splitToolbarButtonSeparator\"></div>\n            <ul className=\"buttons\">\n                {defaultOptions.setting.SAVE_BUTTON && (\n                    <li\n                        title={t('normal.save')}\n                        onClick={() => {\n                            props.onSave()\n                        }}\n                    >\n                        <div className=\"icon\">\n                            <SaveIcon />\n                        </div>\n                        <div className=\"name\">{t('normal.save')}</div>\n                    </li>\n                )}\n                {(defaultOptions.setting.EXPORT_PDF || defaultOptions.setting.EXPORT_EXCEL) && (\n                    <li title={t('normal.export')}>\n                        <Popover\n                            content={\n                                <Space direction=\"vertical\">\n                                    {defaultOptions.setting.EXPORT_PDF && (\n                                        <Button\n                                            block\n                                            color=\"primary\"\n                                            variant=\"outlined\"\n                                            onClick={() => {\n                                                props.onExport('pdf')\n                                            }}\n                                            icon={<FilePdfOutlined />}\n                                        >\n                                            PDF\n                                        </Button>\n                                    )}\n                                    {defaultOptions.setting.EXPORT_EXCEL && (\n                                        <Button\n                                            block\n                                            color=\"primary\"\n                                            variant=\"outlined\"\n                                            onClick={() => {\n                                                props.onExport('excel')\n                                            }}\n                                            icon={<FilePdfOutlined />}\n                                        >\n                                            Excel\n                                        </Button>\n                                    )}\n                                </Space>\n                            }\n                            trigger=\"click\"\n                            placement=\"bottom\"\n                            arrow={false}\n                        >\n                            <div className=\"icon\">\n                                <ExportIcon />\n                            </div>\n                            <div className=\"name\">{t('normal.export')}</div>\n                        </Popover>\n                    </li>\n                )}\n            </ul>\n            <ul className=\"buttons right\">\n                <li onClick={() => handleSidebarOpen(sidebarOpen)} className={`${sidebarOpen ? 'selected' : ''}`}>\n                    <div className=\"icon\">\n                        <AnnoIcon />\n                    </div>\n                    <div className=\"name\">{t('anno')}</div>\n                </li>\n            </ul>\n        </div>\n    )\n})\n\nexport { CustomToolbar }\n"
  },
  {
    "path": "src/components/toolbar/signature.tsx",
    "content": "import './index.scss'\nimport { Button, Modal, Popover, Radio, Select } from 'antd'\nimport type { UploadChangeParam } from 'antd/es/upload'\nimport type { UploadFile } from 'antd/es/upload/interface'\nimport Konva from 'konva'\nimport React, {\n    useEffect,\n    useRef,\n    useState,\n} from 'react'\nimport { PlusCircleOutlined } from '@ant-design/icons'\nimport { IAnnotationType } from '../../const/definitions'\nimport { useTranslation } from 'react-i18next'\nimport { defaultOptions } from '../../const/default_options'\nimport Dragger from 'antd/es/upload/Dragger'\nimport { formatFileSize } from '../../utils/utils'\nimport { loadFontWithFontFace } from '../../utils/fontLoader'\n\ninterface SignatureToolProps {\n    annotation: IAnnotationType\n    onAdd: (signatureDataUrl: string) => void\n}\n\nconst BASE_FONT_SIZE = 80\n\nconst SignatureTool: React.FC<SignatureToolProps> = ({ annotation, onAdd }) => {\n    const { t } = useTranslation()\n    const containerRef = useRef<HTMLDivElement>(null)\n    const konvaStageRef = useRef<Konva.Stage | null>(null)\n    const colorRef = useRef(defaultOptions.signature.COLORS[0])\n\n    const [isPopoverOpen, setIsPopoverOpen] = useState(false)\n    const [isModalOpen, setIsModalOpen] = useState(false)\n    const [currentColor, setCurrentColor] = useState(colorRef.current)\n    const [isOKButtonDisabled, setIsOKButtonDisabled] = useState(true)\n    const [signatures, setSignatures] = useState<string[]>([])\n    const [signatureType, setSignatureType] = useState<string | null>(null)\n    const [typedSignature, setTypedSignature] = useState('')\n    const [fontFamily, setFontFamily] = useState<string>(defaultOptions.handwritingFontList[0].value || 'Arial')\n\n    const [uploadedImageUrl, setUploadedImageUrl] = useState<string | null>(null)\n\n    const maxSize: number = defaultOptions.signature.MAX_SIZE\n\n\n    useEffect(() => {\n        colorRef.current = currentColor\n    }, [currentColor])\n\n    const handleAdd = (signature: string) => {\n        onAdd(signature)\n        setIsPopoverOpen(false)\n    }\n\n    const loadFont = async (fontValue: string) => {\n        await loadFontWithFontFace(defaultOptions.handwritingFontList.find(item => item.value === fontValue))\n        setFontFamily(fontValue)\n    }\n\n    const generateTypedSignatureImage = (): string | null => {\n        if (!typedSignature.trim()) return null\n\n        const canvas = document.createElement('canvas')\n        canvas.width = defaultOptions.signature.WIDTH / 1.1\n        canvas.height = defaultOptions.signature.HEIGHT\n        const ctx = canvas.getContext('2d')\n\n        if (!ctx) return null\n\n        const padding = 20\n        ctx.clearRect(0, 0, canvas.width, canvas.height)\n        ctx.font = `${BASE_FONT_SIZE}px \"${fontFamily}\", cursive, sans-serif`\n\n        let textWidth = ctx.measureText(typedSignature).width\n        const scale = textWidth + padding * 2 > canvas.width ? (canvas.width - padding * 2) / textWidth : 1\n        ctx.font = `${BASE_FONT_SIZE * scale}px \"${fontFamily}\", cursive, sans-serif`\n\n        ctx.textAlign = 'center'\n        ctx.textBaseline = 'middle'\n        ctx.imageSmoothingEnabled = true\n        ctx.shadowColor = 'rgba(0, 0, 0, 0.1)'\n        ctx.shadowBlur = 2\n        ctx.shadowOffsetX = 1\n        ctx.shadowOffsetY = 1\n        ctx.fillStyle = currentColor\n        ctx.fillText(typedSignature, canvas.width / 2, canvas.height / 2)\n\n        return canvas.toDataURL('image/png')\n    }\n\n    const handleOk = () => {\n        if (signatureType === 'Upload') {\n            if (uploadedImageUrl) {\n                setSignatures(prev => [...prev, uploadedImageUrl])\n                handleAdd(uploadedImageUrl)\n                setIsModalOpen(false)\n            }\n            return\n        }\n        if (signatureType === 'Enter') {\n            const dataUrl = generateTypedSignatureImage()\n            if (dataUrl) {\n                setSignatures(prev => [...prev, dataUrl])\n                handleAdd(dataUrl)\n                setIsModalOpen(false)\n            }\n            return\n        }\n        if (signatureType === 'Draw') {\n            const dataUrl = konvaStageRef.current?.toDataURL()\n            if (dataUrl) {\n                setSignatures(prev => [...prev, dataUrl])\n                handleAdd(dataUrl)\n                setIsModalOpen(false)\n            }\n            return\n        }\n    }\n\n    const handleClear = () => {\n        const stage = konvaStageRef.current\n        if (stage) {\n            stage.clear()\n            stage.getLayers().forEach(layer => layer.destroyChildren())\n            setIsOKButtonDisabled(true)\n        }\n        setTypedSignature('')\n        setUploadedImageUrl(null)\n    }\n\n    const initializeKonvaStage = () => {\n        console.log(containerRef)\n        if (!containerRef.current) return\n\n        const stage = new Konva.Stage({\n            container: containerRef.current,\n            width: defaultOptions.signature.WIDTH,\n            height: defaultOptions.signature.HEIGHT,\n        })\n\n        const layer = new Konva.Layer()\n        stage.add(layer)\n        konvaStageRef.current = stage\n\n        let isPainting = false\n        let lastLine: Konva.Line | null = null\n\n        const start = () => {\n            isPainting = true\n            const pos = stage.getPointerPosition()\n            if (!pos) return\n\n            lastLine = new Konva.Line({\n                stroke: colorRef.current,\n                strokeWidth: 3,\n                globalCompositeOperation: 'source-over',\n                lineCap: 'round',\n                lineJoin: 'round',\n                points: [pos.x, pos.y],\n            })\n            layer.add(lastLine)\n        }\n\n        const draw = (e: Konva.KonvaEventObject<MouseEvent | TouchEvent>) => {\n            if (!isPainting || !lastLine) return\n            e.evt.preventDefault()\n            const pos = stage.getPointerPosition()\n            if (!pos) return\n\n            const newPoints = lastLine.points().concat([pos.x, pos.y])\n            lastLine.points(newPoints)\n            setIsOKButtonDisabled(false)\n        }\n\n        const end = () => {\n            isPainting = false\n            lastLine = null\n        }\n\n        stage.on('mousedown touchstart', start)\n        stage.on('mouseup touchend', end)\n        stage.on('mousemove touchmove', draw)\n    }\n\n    const changeColor = (color: string) => {\n        setCurrentColor(color)\n        const allLines = konvaStageRef.current?.getLayers()[0]\n            .getChildren(node => node.getClassName() === 'Line') || []\n\n        allLines.forEach(line => (line as Konva.Line).stroke(color))\n    }\n\n    const handleUploadChange = (info: UploadChangeParam<UploadFile>) => {\n        const file = info.file;\n\n        if (!file || !file.type.startsWith('image/')) return;\n\n        if (file.size > maxSize) {\n            alert(t('normal.fileSizeLimit', { value: formatFileSize(maxSize) }));\n            return;\n        }\n\n        const reader = new FileReader();\n\n        reader.onload = async (e) => {\n            const imageUrl = e.target?.result as string;\n            const img = new Image();\n            img.src = imageUrl;\n\n            img.onload = () => {\n                // 设置最大显示尺寸\n                const MAX_WIDTH = defaultOptions.setting.MAX_UPLOAD_IMAGE_SIZE;\n                const MAX_HEIGHT = defaultOptions.setting.MAX_UPLOAD_IMAGE_SIZE;\n\n                let { width, height } = img;\n\n                // 等比缩放\n                if (width > height && width > MAX_WIDTH) {\n                    height = Math.round((height * MAX_WIDTH) / width);\n                    width = MAX_WIDTH;\n                } else if (height > MAX_HEIGHT) {\n                    width = Math.round((width * MAX_HEIGHT) / height);\n                    height = MAX_HEIGHT;\n                }\n\n                const canvas = document.createElement('canvas');\n                const ctx = canvas.getContext('2d');\n\n                canvas.width = width;\n                canvas.height = height;\n\n                if (ctx) {\n                    ctx.drawImage(img, 0, 0, width, height);\n                    // 导出为 PNG 图像\n                    const pngDataUrl = canvas.toDataURL('image/png');\n                    setUploadedImageUrl(pngDataUrl);\n                    setIsOKButtonDisabled(false);\n                }\n            };\n        };\n        // @ts-expect-error\n        reader.readAsDataURL(file);\n    };\n\n    useEffect(() => {\n        setTypedSignature('')\n        setUploadedImageUrl(null)\n        if (signatureType === 'Enter') {\n            setIsOKButtonDisabled(true) // 直到用户输入\n        } else if (signatureType === 'Draw') {\n            setIsOKButtonDisabled(true) // 直到用户绘制\n        } else if (signatureType === 'Upload') {\n            setIsOKButtonDisabled(true) // 直到上传成功\n        }\n    }, [signatureType])\n\n\n    useEffect(() => {\n        setIsOKButtonDisabled(typedSignature.trim().length === 0)\n    }, [typedSignature])\n\n\n    useEffect(() => {\n        if (isModalOpen) {\n            loadFont(fontFamily)\n            setTypedSignature('')\n            setUploadedImageUrl(null)\n            setSignatureType(defaultOptions.signature.TYPE)\n        }\n    }, [isModalOpen])\n\n    useEffect(() => {\n        if (isModalOpen && signatureType === 'Draw') {\n            setTimeout(() => {\n                initializeKonvaStage()\n            }, 300)\n        } else {\n            konvaStageRef.current?.destroy()\n            konvaStageRef.current = null\n        }\n    }, [signatureType, isModalOpen])\n\n    return (\n        <>\n            <Popover\n                rootClassName=\"SignaturePop\"\n                content={\n                    <div>\n                        <ul className=\"SignaturePop-Container\">\n                            {signatures.map((s, idx) => (\n                                <li key={idx}>\n                                    <img onClick={() => handleAdd(s)} src={s} />\n                                </li>\n                            ))}\n                        </ul>\n                        <div className=\"SignaturePop-Toolbar\">\n                            <Button block type=\"link\" onClick={() => { setIsPopoverOpen(false); setIsModalOpen(true) }} icon={<PlusCircleOutlined />}>\n                                {t('toolbar.buttons.createSignature')}\n                            </Button>\n                        </div>\n                    </div>\n                }\n                trigger=\"click\"\n                open={isPopoverOpen}\n                onOpenChange={setIsPopoverOpen}\n                placement=\"bottom\"\n                arrow={false}\n            >\n                <div className=\"icon\">{annotation.icon}</div>\n                <div className=\"name\">{t(`annotations.${annotation.name}`)}</div>\n            </Popover>\n\n            <Modal\n                title={t('toolbar.buttons.createSignature')}\n                open={isModalOpen}\n                onOk={handleOk}\n                onCancel={() => setIsModalOpen(false)}\n                destroyOnHidden\n                okButtonProps={{ disabled: isOKButtonDisabled }}\n                okText={t('normal.ok')}\n                cancelText={t('normal.cancel')}\n                className=\"SignatureTool\"\n            >\n                <div>\n                    <div className=\"SignatureTool-Header\">\n                        <Radio.Group\n                            block\n                            options={[\n                                { label: t('normal.draw'), value: 'Draw' },\n                                { label: t('normal.enter'), value: 'Enter' },\n                                { label: t('normal.upload'), value: 'Upload' }\n                            ]}\n                            optionType=\"button\"\n                            value={signatureType}\n                            onChange={e => setSignatureType(e.target.value)}\n                        />\n                    </div>\n\n                    <div className=\"SignatureTool-Container\" style={{ width: defaultOptions.signature.WIDTH }}>\n                        {signatureType === 'Enter' && (\n                            <input\n                                autoFocus\n                                type=\"text\"\n                                value={typedSignature}\n                                onChange={e => setTypedSignature(e.target.value)}\n                                placeholder={t('toolbar.message.signatureArea')}\n                                style={{\n                                    height: defaultOptions.signature.HEIGHT,\n                                    width: defaultOptions.signature.WIDTH / 1.1,\n                                    color: currentColor,\n                                    fontFamily: `${fontFamily}`,\n                                    fontSize: BASE_FONT_SIZE,\n                                    lineHeight: `${BASE_FONT_SIZE}px`,\n                                }}\n                            />\n                        )}\n                        {signatureType === 'Draw' && (\n                            <>\n                                <div className=\"SignatureTool-Container-info\">{t('toolbar.message.signatureArea')}</div>\n                                <div\n                                    ref={containerRef}\n                                    style={{\n                                        height: defaultOptions.signature.HEIGHT,\n                                        width: defaultOptions.signature.WIDTH,\n                                    }}\n                                />\n                            </>\n                        )}\n                        {signatureType === 'Upload' && (\n                            <div style={{\n                                height: defaultOptions.signature.HEIGHT,\n                                width: defaultOptions.signature.WIDTH,\n                            }}>\n                                {uploadedImageUrl ? (\n                                    <div className=\"SignatureTool-ImagePreview\" style={{\n                                        height: defaultOptions.signature.HEIGHT,\n                                        width: defaultOptions.signature.WIDTH,\n                                    }}>\n                                        <img src={uploadedImageUrl} alt=\"preview\" />\n                                    </div>\n                                ) : (\n                                    <Dragger\n                                        accept={defaultOptions.signature.ACCEPT}\n                                        beforeUpload={() => false}\n                                        showUploadList={false}\n                                        onChange={handleUploadChange}\n                                        multiple={false}\n                                        style={{\n                                            height: defaultOptions.signature.HEIGHT,\n                                            width: defaultOptions.signature.WIDTH,\n                                        }}\n                                    >\n                                        <p className=\"ant-upload-drag-icon\" />\n                                        <p className=\"ant-upload-text\">{t('toolbar.message.uploadArea')}</p>\n                                        <p className=\"ant-upload-hint\">{t('toolbar.message.uploadHint', { format: defaultOptions.signature.ACCEPT, maxSize: formatFileSize(defaultOptions.signature.MAX_SIZE) })}</p>\n                                    </Dragger>\n                                )}\n                            </div>\n                        )}\n                    </div>\n\n                    <div className=\"SignatureTool-Toolbar\" style={{ width: defaultOptions.signature.WIDTH }}>\n                        <div className=\"colorPalette\">\n                            {\n                                signatureType !== 'Upload' &&\n                                <>\n                                    {\n                                        defaultOptions.signature.COLORS.map(color => (\n                                            <div key={color} onClick={() => changeColor(color)} className={`cell ${color === currentColor ? 'active' : ''}`}>\n                                                <span style={{ backgroundColor: color }} />\n                                            </div>\n                                        ))\n                                    }\n                                </>\n                            }\n                            {\n                                signatureType === 'Enter' && <>\n                                    <Select\n                                        style={{ width: 160 }}\n                                        size='small'\n                                        defaultValue={fontFamily}\n                                        options={defaultOptions.handwritingFontList}\n                                        onChange={async (value) => {\n                                            await loadFont(value)\n                                        }}\n                                    />\n                                </>\n                            }\n\n                        </div>\n                        <div className=\"clear\" onClick={handleClear}>\n                            {t('normal.clear')}\n                        </div>\n                    </div>\n                </div>\n            </Modal>\n        </>\n    )\n}\n\nexport { SignatureTool }\n"
  },
  {
    "path": "src/components/toolbar/stamp.tsx",
    "content": "import './index.scss'\nimport { Button, Checkbox, Col, ColorPicker, Divider, Form, Input, Modal, Popover, Radio, Row, Select } from 'antd'\nimport Konva from 'konva'\nimport React, { useRef, useState } from 'react'\nimport { BoldOutlined, ItalicOutlined, PlusCircleOutlined, StrikethroughOutlined, UnderlineOutlined, UploadOutlined } from '@ant-design/icons'\nimport { IAnnotationType } from '../../const/definitions'\nimport { useTranslation } from 'react-i18next'\nimport { defaultOptions } from '../../const/default_options'\nimport { formatFileSize } from '../../utils/utils'\nimport dayjs from 'dayjs'\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\ndayjs.extend(customParseFormat)\n\ninterface SignatureToolProps {\n    annotation: IAnnotationType\n    userName: string\n    onAdd: (signatureDataUrl: string) => void\n}\n\ntype FieldType = {\n    stampText: string\n    fontStyle: string[]\n    fontFamily: string,\n    textColor: string\n    backgroundColor: string\n    borderColor: string\n    borderStyle: 'solid' | 'dashed'\n    timestamp: string[]\n    customTimestampText: string\n    dateFormat: string\n}\n\nconst SHAPE_NAME = 'StampGroup'\nconst STAMP_WIDTH = 470\nconst STAMP_HEIGHT = 120\n\nconst DATE_FORMAT_OPTIONS = [\n    {\n        label: '📅',\n        options: [\n            { label: 'YYYY-MM-DD', value: 'YYYY-MM-DD' },\n            { label: 'YYYY/MM/DD', value: 'YYYY/MM/DD' },\n            { label: 'YYYY年MM月DD日', value: 'YYYY年MM月DD日' },\n            { label: 'DD-MM-YYYY', value: 'DD-MM-YYYY' },\n            { label: 'DD/MM/YYYY', value: 'DD/MM/YYYY' },\n            { label: 'MM/DD/YYYY', value: 'MM/DD/YYYY' },\n            { label: 'dddd, MMMM D, YYYY', value: 'dddd, MMMM D, YYYY' }, // 星期几 + 全月份\n            { label: 'MMM D, YYYY', value: 'MMM D, YYYY' }, // Jan 1, 2025\n            { label: 'D MMMM YYYY', value: 'D MMMM YYYY' } // 1 January 2025\n        ]\n    },\n    {\n        label: '⏰',\n        options: [\n            { label: 'HH:mm:ss', value: 'HH:mm:ss' },\n            { label: 'HH:mm', value: 'HH:mm' },\n            { label: 'hh:mm A', value: 'hh:mm A' }, // 12小时制带AM/PM\n            { label: 'h:mm A', value: 'h:mm A' },\n            { label: 'HH:mm:ss.SSS', value: 'HH:mm:ss.SSS' }\n        ]\n    },\n    {\n        label: '🗓️ ',\n        options: [\n            { label: 'YYYY-MM-DD HH:mm:ss', value: 'YYYY-MM-DD HH:mm:ss' },\n            { label: 'YYYY-MM-DD HH:mm', value: 'YYYY-MM-DD HH:mm' },\n            { label: 'DD/MM/YYYY HH:mm', value: 'DD/MM/YYYY HH:mm' },\n            { label: 'MM/DD/YYYY hh:mm A', value: 'MM/DD/YYYY hh:mm A' },\n            { label: 'YYYY年MM月DD日 HH:mm', value: 'YYYY年MM月DD日 HH:mm' },\n            { label: 'dddd, MMMM D, YYYY HH:mm', value: 'dddd, MMMM D, YYYY HH:mm' },\n            { label: 'D MMMM YYYY HH:mm', value: 'D MMMM YYYY HH:mm' }\n        ]\n    }\n]\n\nconst StampTool: React.FC<SignatureToolProps> = ({ annotation, onAdd, userName }) => {\n    const { t } = useTranslation()\n    const containerRef = useRef<HTMLDivElement>(null)\n    const konvaStageRef = useRef<Konva.Stage | null>(null)\n    const fileRef = useRef<HTMLInputElement>(null)\n\n    const [customStamps, setCustomStamps] = useState<string[]>([])\n\n    const maxSize = defaultOptions.stamp.MAX_SIZE\n\n    const [form] = Form.useForm()\n\n    const defaultStamps = defaultOptions.stamp.DEFAULT_STAMP || []\n\n    const [isPopoverOpen, setIsPopoverOpen] = useState(false)\n    const [isModalOpen, setIsModalOpen] = useState(false)\n    const [stampType, setStampType] = useState<string>('default')\n\n    const DEFAULT_VALUE: FieldType = {\n        stampText: t('editor.stamp.defaultText'),\n        fontStyle: [],\n        fontFamily: defaultOptions.defaultFontList[0].value,\n        textColor: defaultOptions.stamp.editor.DEFAULT_TEXT_COLOR,\n        backgroundColor: defaultOptions.stamp.editor.DEFAULT_BACKGROUND_COLOR,\n        borderColor: defaultOptions.stamp.editor.DEFAULT_BORDER_COLOR,\n        borderStyle: 'solid',\n        timestamp: ['username', 'date'],\n        customTimestampText: '',\n        dateFormat: 'YYYY-MM-DD'\n    }\n    const [lastFormValues, setLastFormValues] = useState<FieldType>(DEFAULT_VALUE)\n\n    const handleAdd = (dataUrl: string) => {\n        onAdd(dataUrl)\n        setIsPopoverOpen(false)\n    }\n\n    const handleOk = () => {\n        const layer = konvaStageRef.current?.getLayers()[0]\n        if (!layer) return\n\n        const shape = layer.getChildren(node => node.name() === SHAPE_NAME)[0]\n        if (!shape) return\n\n        const dataUrl = konvaStageRef.current.toDataURL({\n            x: shape.x(),\n            y: shape.y(),\n            width: shape.width(),\n            height: shape.height()\n        })\n\n        if (dataUrl) {\n            setCustomStamps(prev => [...prev, dataUrl])\n            handleAdd(dataUrl)\n            setIsModalOpen(false)\n        }\n    }\n\n    // 文件输入变化的事件处理函数\n    const onInputFileChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n        const target = event.target as HTMLInputElement;\n        const files = target.files;\n\n        if (!files?.length) return;\n        const _file = files[0];\n\n        // 检查文件大小\n        if (_file.size > maxSize) {\n            alert(t('normal.fileSizeLimit', { value: formatFileSize(maxSize) }));\n            return;\n        }\n\n        const reader = new FileReader();\n\n        reader.onload = async (e) => {\n            const imageUrl = e.target?.result as string;\n            const img = new Image();\n            img.src = imageUrl;\n\n            img.onload = () => {\n                // 设置最大宽高\n                const MAX_WIDTH = defaultOptions.setting.MAX_UPLOAD_IMAGE_SIZE;\n                const MAX_HEIGHT = defaultOptions.setting.MAX_UPLOAD_IMAGE_SIZE;\n\n                let { width, height } = img;\n\n                // 等比缩放\n                if (width > height && width > MAX_WIDTH) {\n                    height = Math.round((height * MAX_WIDTH) / width);\n                    width = MAX_WIDTH;\n                } else if (height > MAX_HEIGHT) {\n                    width = Math.round((width * MAX_HEIGHT) / height);\n                    height = MAX_HEIGHT;\n                }\n\n                const canvas = document.createElement('canvas');\n                const ctx = canvas.getContext('2d');\n\n                canvas.width = width;\n                canvas.height = height;\n\n                if (ctx) {\n                    ctx.drawImage(img, 0, 0, width, height);\n\n                    // 转换为 PNG Data URL\n                    const pngDataUrl = canvas.toDataURL('image/png');\n\n                    // 清空 input 的值，以便重复上传同一文件\n                    target.value = '';\n\n                    // 调用回调并更新状态\n                    onAdd(pngDataUrl);\n                    setCustomStamps(prev => [...prev, pngDataUrl]);\n                    setIsPopoverOpen(false);\n                }\n            };\n        };\n\n        reader.readAsDataURL(_file);\n    };\n\n    const initializeKonvaStage = (values: FieldType) => {\n        if (!containerRef.current) return\n\n        const { stampText, fontStyle, textColor, backgroundColor, borderColor, borderStyle, timestamp, dateFormat, fontFamily } = values\n\n        // 清除旧 stage\n        konvaStageRef.current?.destroy()\n\n        const stage = new Konva.Stage({\n            container: containerRef.current,\n            width: STAMP_WIDTH,\n            height: STAMP_HEIGHT\n        })\n\n        const layer = new Konva.Layer()\n\n        const fontStyleParts: string[] = []\n        if (fontStyle.includes('italic')) fontStyleParts.push('italic')\n        if (fontStyle.includes('bold')) fontStyleParts.push('bold')\n        const fontStyleValue = fontStyleParts.join(' ') || 'normal'\n        const isUnderline = fontStyle.includes('underline')\n        const isStrikeout = fontStyle.includes('strikeout')\n        const now = dayjs()\n        const username = userName\n        // 使用用户选择的格式来格式化日期\n        const formattedDate = dateFormat ? now.format(dateFormat) : ''\n        const customText = values.customTimestampText?.trim()\n        const timestampParts = [\n            timestamp.includes('username') ? username : null,\n            timestamp.includes('date') ? formattedDate : null,\n            customText || null\n        ].filter(Boolean)\n        const timestampText = timestampParts.join(' · ')\n        let textFontSize = 30\n        const timeFontSize = 16\n        const spacing = 10\n\n        // 用临时文本节点计算宽度\n        const tempTextNode = new Konva.Text({\n            text: stampText,\n            fontSize: textFontSize,\n            fontStyle: fontStyleValue,\n            fontFamily: fontFamily\n        })\n\n        const tempTimestampNode = new Konva.Text({\n            text: timestampText,\n            fontSize: timeFontSize,\n            fontFamily: fontFamily\n        })\n\n        const contentWidth = Math.max(tempTextNode.width(), tempTimestampNode.width()) + 60\n        const contentHeight = textFontSize + spacing + timeFontSize + 25\n\n        const shapeWidth = Math.max(contentWidth, 180)\n        const shapeHeight = Math.max(contentHeight, 60)\n\n        const shape = new Konva.Rect({\n            name: SHAPE_NAME,\n            width: shapeWidth,\n            height: shapeHeight,\n            x: (STAMP_WIDTH - shapeWidth) / 2,\n            y: (STAMP_HEIGHT - shapeHeight) / 2,\n            fill: backgroundColor,\n            strokeWidth: 3,\n            stroke: borderColor,\n            dash: borderStyle === 'dashed' ? [5, 5] : undefined,\n            cornerRadius: 8\n        })\n        layer.add(shape)\n        if (!timestampText) {\n            textFontSize = textFontSize * 1.2 // 没有时间戳时字体更大\n        }\n\n        // 计算 stampText 的 Y 位置\n        let textY: number\n\n        if (timestampText) {\n            // 有时间戳：保持原来的位置，靠近顶部\n            textY = (STAMP_HEIGHT - shapeHeight) / 2 + 15\n        } else {\n            // 没有时间戳：stampText 居中显示在 shape 中\n            textY = (STAMP_HEIGHT - shapeHeight) / 2 + shapeHeight / 2 - textFontSize / 2\n        }\n\n        const stampTextNode = new Konva.Text({\n            text: stampText,\n            x: 0,\n            y: textY,\n            width: STAMP_WIDTH,\n            align: 'center',\n            fontSize: textFontSize,\n            fontStyle: fontStyleValue,\n            fontFamily: fontFamily,\n            fill: textColor\n        })\n\n        layer.add(stampTextNode)\n\n        if (isUnderline) {\n            const underlineY = stampTextNode.y() + textFontSize + 4\n            const underline = new Konva.Line({\n                points: [shape.x(), underlineY, shape.x() + shape.width(), underlineY],\n                stroke: textColor,\n                strokeWidth: 2\n            })\n            layer.add(underline)\n        }\n\n        if (isStrikeout) {\n            const strikeoutLineY = stampTextNode.y() + textFontSize / 2\n            const strikeoutLine = new Konva.Line({\n                points: [shape.x(), strikeoutLineY, shape.x() + shape.width(), strikeoutLineY],\n                stroke: textColor,\n                strokeWidth: 2\n            })\n            layer.add(strikeoutLine)\n        }\n\n        const timestampNode = new Konva.Text({\n            text: timestampText,\n            x: 0,\n            y: textY + textFontSize + spacing,\n            width: STAMP_WIDTH,\n            align: 'center',\n            fontSize: timeFontSize,\n            fontFamily: fontFamily,\n            fill: textColor\n        })\n        if (timestampText) {\n            layer.add(timestampNode)\n        }\n        stage.add(layer)\n        konvaStageRef.current = stage\n    }\n\n    const destroyKonvaStage = () => {\n        const stage = konvaStageRef.current\n        if (stage) {\n            stage.destroy()\n            konvaStageRef.current = null\n        }\n    }\n\n    return (\n        <>\n            <Popover\n                rootClassName=\"StampPop\"\n                content={\n                    <div>\n                        <Radio.Group\n                            block\n                            options={[\n                                { label: t('normal.default'), value: 'default' },\n                                { label: t('normal.custom'), value: 'custom' }\n                            ]}\n                            size=\"small\"\n                            optionType=\"button\"\n                            value={stampType}\n                            onChange={e => setStampType(e.target.value)}\n                        />\n                        {stampType === 'default' && (\n                            <ul className=\"StampPop-Container\">\n                                {defaultStamps.map((s, idx) => (\n                                    <li key={idx}>\n                                        <img onClick={() => handleAdd(s)} src={s} />\n                                    </li>\n                                ))}\n                            </ul>\n                        )}\n                        <div>\n                            {stampType === 'custom' && (\n                                <>\n                                    <ul className=\"StampPop-Container\">\n                                        {customStamps.map((s, idx) => (\n                                            <li key={idx}>\n                                                <img onClick={() => handleAdd(s)} src={s} />\n                                            </li>\n                                        ))}\n                                    </ul>\n                                    <Button\n                                        color=\"default\"\n                                        variant=\"filled\"\n                                        style={{ marginTop: 8 }}\n                                        block\n                                        size=\"small\"\n                                        onClick={() => {\n                                            setIsPopoverOpen(false)\n                                            setIsModalOpen(true)\n                                        }}\n                                        icon={<PlusCircleOutlined />}\n                                    >\n                                        {t('toolbar.buttons.createStamp')}\n                                    </Button>\n                                </>\n                            )}\n                        </div>\n                        <Divider size=\"small\" />\n                        <input style={{ display: 'none' }} type=\"file\" ref={fileRef} accept={defaultOptions.stamp.ACCEPT} onChange={onInputFileChange} />\n                        <div className=\"StampPop-Toolbar\">\n                            <Button\n                                block\n                                type=\"link\"\n                                onClick={() => {\n                                    fileRef.current?.click()\n                                }}\n                                icon={<UploadOutlined />}\n                            >\n                                {t('normal.upload')}\n                            </Button>\n                        </div>\n                    </div>\n                }\n                trigger=\"click\"\n                open={isPopoverOpen}\n                onOpenChange={setIsPopoverOpen}\n                placement=\"bottom\"\n                arrow={false}\n            >\n                <div className=\"icon\">{annotation.icon}</div>\n                <div className=\"name\">{t(`annotations.${annotation.name}`)}</div>\n            </Popover>\n\n            <Modal\n                title={t('toolbar.buttons.createStamp')}\n                open={isModalOpen}\n                onOk={handleOk}\n                onClose={destroyKonvaStage}\n                afterOpenChange={open => {\n                    if (open) {\n                        // 使用上一次的表单值或默认值初始化 Konva 画布\n                        const initialValues = lastFormValues || DEFAULT_VALUE\n                        initializeKonvaStage(initialValues)\n                        form.setFieldsValue(initialValues) // 将上一次的值设置回表单\n                    }\n                }}\n                onCancel={() => setIsModalOpen(false)}\n                okText={t('normal.ok')}\n                cancelText={t('normal.cancel')}\n                className=\"StampTool\"\n            >\n                <div>\n                    <div className=\"StampTool-Container\">\n                        <div\n                            className=\"StampTool-Container-ImagePreview\"\n                            ref={containerRef}\n                            style={{\n                                height: STAMP_HEIGHT\n                            }}\n                        />\n                        <Form\n                            form={form}\n                            name=\"basic\"\n                            layout=\"vertical\"\n                            size=\"middle\"\n                            onValuesChange={(_changed, allValues) => {\n                                const rawTextColor = allValues.textColor\n                                const rawBackgroundColor = allValues.backgroundColor\n                                const rawBorderColor = allValues.borderColor\n\n                                // 更新状态以保存当前表单值\n                                setLastFormValues({\n                                    ...allValues,\n                                    textColor: rawTextColor?.toHexString ? rawTextColor.toHexString() : rawTextColor,\n                                    backgroundColor: rawBackgroundColor?.toHexString ? rawBackgroundColor.toHexString() : rawBackgroundColor,\n                                    borderColor: rawBorderColor?.toHexString ? rawBorderColor.toHexString() : rawBorderColor\n                                })\n\n                                // 初始化 Konva 画布\n                                initializeKonvaStage({\n                                    ...allValues,\n                                    textColor: rawTextColor?.toHexString ? rawTextColor.toHexString() : rawTextColor,\n                                    backgroundColor: rawBackgroundColor?.toHexString ? rawBackgroundColor.toHexString() : rawBackgroundColor,\n                                    borderColor: rawBorderColor?.toHexString ? rawBorderColor.toHexString() : rawBorderColor\n                                })\n                            }}\n                            initialValues={DEFAULT_VALUE}\n                            autoComplete=\"off\"\n                        >\n                            <Form.Item<FieldType> label={t('editor.stamp.stampText')} name=\"stampText\">\n                                <Input />\n                            </Form.Item>\n                            <Row>\n                                <Col span={5}>\n                                    <Form.Item<FieldType> name=\"textColor\" label={t('editor.stamp.textColor')}>\n                                        <ColorPicker\n                                            format=\"rgb\"\n                                            size=\"small\"\n                                            arrow={true}\n                                            presets={[{ label: '', colors: ['#ffffff', '#000000', ...defaultOptions.colors] }]}\n                                        />\n                                    </Form.Item>\n                                </Col>\n                                <Col span={12}>\n                                    <Form.Item<FieldType> name=\"fontStyle\" label={t('editor.stamp.fontStyle')}>\n                                        <Checkbox.Group\n                                            options={[\n                                                {\n                                                    value: 'bold',\n                                                    label: <BoldOutlined />\n                                                },\n                                                {\n                                                    value: 'italic',\n                                                    label: <ItalicOutlined />\n                                                },\n                                                {\n                                                    value: 'underline',\n                                                    label: <UnderlineOutlined />\n                                                },\n                                                {\n                                                    value: 'strikeout',\n                                                    label: <StrikethroughOutlined />\n                                                }\n                                            ]}\n                                        />\n                                    </Form.Item>\n                                </Col>\n                                <Col span={7}>\n                                    <Form.Item<FieldType> name=\"fontFamily\" label={t('editor.stamp.fontFamily')}>\n                                        <Select\n                                            options={defaultOptions.defaultFontList}\n                                        />\n                                    </Form.Item>\n                                </Col>\n\n                            </Row>\n                            <Row>\n                                <Col span={8}>\n                                    <Form.Item<FieldType> name=\"backgroundColor\" label={t('editor.stamp.backgroundColor')}>\n                                        <ColorPicker\n                                            allowClear\n                                            size=\"small\"\n                                            arrow={true}\n                                            showText={false}\n                                            presets={[{ label: '', colors: defaultOptions.colors }]}\n                                        />\n                                    </Form.Item>\n                                </Col>\n                                <Col span={8}>\n                                    <Form.Item<FieldType> name=\"borderColor\" label={t('editor.stamp.borderColor')}>\n                                        <ColorPicker\n                                            allowClear\n                                            size=\"small\"\n                                            arrow={true}\n                                            showText={false}\n                                            presets={[{ label: '', colors: defaultOptions.colors }]}\n                                        />\n                                    </Form.Item>\n                                </Col>\n                                <Col span={8}>\n                                    <Form.Item<FieldType> name=\"borderStyle\" label={t('editor.stamp.borderStyle')}>\n                                        <Radio.Group\n                                            block\n                                            options={[\n                                                { label: t('editor.stamp.solid'), value: 'solid' },\n                                                { label: t('editor.stamp.dashed'), value: 'dashed' }\n                                            ]}\n                                        />\n                                    </Form.Item>\n                                </Col>\n                            </Row>\n                            <Divider />\n                            <Row>\n                                <Col span={10}>\n                                    <Form.Item<FieldType> name=\"timestamp\" label={t('editor.stamp.timestampText')}>\n                                        <Checkbox.Group\n                                            options={[\n                                                {\n                                                    value: 'username',\n                                                    label: t('editor.stamp.username')\n                                                },\n                                                {\n                                                    value: 'date',\n                                                    label: t('editor.stamp.date')\n                                                }\n                                            ]}\n                                        />\n                                    </Form.Item>\n                                </Col>\n                                <Col span={14}>\n                                    <Form.Item<FieldType> name=\"dateFormat\" label={t('editor.stamp.dateFormat')}>\n                                        <Select options={DATE_FORMAT_OPTIONS} />\n                                    </Form.Item>\n\n                                </Col>\n                            </Row>\n                            <Form.Item<FieldType> name=\"customTimestampText\" label={t('editor.stamp.customTimestamp')}>\n                                <Input />\n                            </Form.Item>\n                        </Form>\n                    </div>\n                    <div className=\"StampTool-Toolbar\"></div>\n                </div>\n            </Modal>\n        </>\n    )\n}\n\nexport { StampTool }\n"
  },
  {
    "path": "src/const/default_options.ts",
    "content": "import { default_stamp } from './default_stamp'\nimport PingFangChangAnTiFont from './fonts/PingFangChangAnTi-2.ttf'\nimport qiantubifengshouxietiFont from './fonts/qiantubifengshouxieti.ttf'\n\nconst color = ['#ff0000', '#ffbe00', '#ffff00', '#83d33c', '#00b445', '#00b2f4', '#1677ff', '#001f63', '#7828a4', '#ff00ff']\n\nconst fontSize = [14, 16, 18, 20, 22, 24]\n\nconst defaultOptions = {\n    // 默认颜色\n    colors: color,\n    // 默认字体大小\n    fontSize: fontSize,\n    defaultFontList: [\n        // 常用英文\n        { label: 'Arial', value: 'Arial' },\n        { label: 'Times New Roman', value: 'Times New Roman' },\n        { label: 'Georgia', value: 'Georgia' },\n        { label: 'Verdana', value: 'Verdana' },\n        { label: 'Tahoma', value: 'Tahoma, Geneva, sans-serif' },\n        { label: 'Trebuchet MS', value: '\"Trebuchet MS\", sans-serif' },\n        { label: 'Courier New', value: '\"Courier New\", Courier, monospace' },\n        { label: 'Lucida Console', value: '\"Lucida Console\", Monaco, monospace' },\n        // 常用中文\n        { label: '宋体', value: 'SimSun, Songti SC, STSong, 宋体, \"Noto Serif SC\", serif' },\n        { label: '黑体', value: 'Microsoft YaHei, PingFang SC, Heiti SC, SimHei, 黑体, sans-serif' },\n        { label: '楷体', value: 'KaiTi, KaiTi_GB2312, STFangsong, 楷体, \"AR PL UKai CN\", serif' }\n    ],\n    handwritingFontList: [\n        // 自定义字体\n        {\n            label: '平方长安体',\n            value: 'PingFangChangAnTi-2',\n            external: true,\n            url: PingFangChangAnTiFont\n        },\n        {\n            label: '千图笔锋手写体',\n            value: 'qiantubifengshouxieti',\n            external: true,\n            url: qiantubifengshouxietiFont\n        }\n    ],\n    // 签名默认配置\n    signature: {\n        COLORS: ['#000000', '#ff0000', '#1677ff'],\n        WIDTH: 366,\n        HEIGHT: 200,\n        TYPE: 'Draw', // Draw 绘制， Enter 输入， Upload 上传默认签名模式\n        MAX_SIZE: 1024 * 1024 * 5, // 最大文件大小为 5MB\n        ACCEPT: '.png,.jpg,.jpeg,.bmp' // 签名文件上传类型\n    },\n    // 盖章默认配置\n    stamp: {\n        MAX_SIZE: 1024 * 1024 * 5, // 最大文件大小为 5MB\n        ACCEPT: '.png,.jpg,.jpeg,.bmp', // 签名文件上传类型\n        DEFAULT_STAMP: default_stamp,\n        editor: {\n            // 编辑器默认配置\n            DEFAULT_BACKGROUND_COLOR: '#00b445', // 默认背景颜色\n            DEFAULT_BORDER_COLOR: null, // 默认边框颜色\n            DEFAULT_TEXT_COLOR: '#fff' // 默认文字颜色\n        }\n    },\n    // 选择器默认配置\n    chooseSetting: {\n        COLOR: '#1677ff', // 选择工具的颜色\n        STROKEWIDTH: 2, // 选择工具的线条宽度\n        OPACITY: 0.7, // 连线透明度\n    },\n    // 连线配置\n    connectorLine : {\n            ENABLED: true, // 是否启用连线功能\n            COLOR: '#1677ff', // 连线颜色\n            WIDTH: 2, // 连线宽度\n            OPACITY: 0.7, // 连线透明度\n    },\n    setting: {\n        COLOR: color[0], // 默认颜色\n        FONT_SIZE: fontSize[2], // 默认字体大小\n        HIGHLIGHT_COLOR: color[2], // 默认高亮颜色\n        STRIKEOUT_COLOR: color[0], // 默认删除线颜色\n        UNDERLINE_COLOR: color[6], // 默认下划线颜色\n        STROKE_WIDTH: 2, // 默认线条宽度\n        OPACITY: 1, // 默认不透明度\n        MAX_CURSOR_SIZE: 96, // 鼠标指针图片最大宽度/高度\n        MAX_UPLOAD_IMAGE_SIZE: 800, // 上传图片最大宽度/高度, 大于这个会被等比压缩\n        SAVE_BUTTON: true, // 保存按钮\n        EXPORT_PDF: true, // 导出pdf\n        EXPORT_EXCEL: true, // 导出excel\n        LOAD_PDF_ANNOTATION: true, // 是否加载 pdf 原有批注\n        DB_CLICK_DELETE: false, // 双击删除批注\n        HIDE_PDFJS_ELEMENT: [\n            // 需要隐藏的 pdfjs 按钮\n            '#editorModeButtons',\n            '#editorModeSeparator',\n            '#pageRotateCw',\n            '#pageRotateCcw',\n            '#download'\n        ],\n        HASH_PARAMS_GET_URL: '', // 默认 GET URL\n        HASH_PARAMS_POST_URL: '', // 默认 POST URL\n        HASH_PARAMS_DEFAULT_EDITOR_ACTIVE: 'null', // 默认激活的编辑工具 select、 circle ...\n        HASH_PARAMS_DEFAULT_SIDEBAR_OPEN: 'true', // 默认侧边栏打开\n    }\n}\n\nexport { defaultOptions }\n"
  },
  {
    "path": "src/const/default_stamp.ts",
    "content": "const default_stamp = [\n            // 默认的一些章\n            'data:image/png;base64,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',\n            'data:image/png;base64,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',\n            'data:image/png;base64,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',\n            'data:image/png;base64,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',\n            'data:image/png;base64,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',\n            'data:image/png;base64,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'\n        ]\n\nexport  {\n    default_stamp\n}"
  },
  {
    "path": "src/const/definitions.tsx",
    "content": "import {\n    CircleIcon,\n    FreehandIcon,\n    FreeHighlightIcon,\n    FreetextIcon,\n    HighlightIcon,\n    RectangleIcon,\n    SelectIcon,\n    SignatureIcon,\n    StampIcon,\n    StrikeoutIcon,\n    UnderlineIcon,\n    NoteIcon,\n    ArrowIcon,\n    CloudIcon\n} from './icon'\nimport { IRect } from 'konva/lib/types'\nimport { defaultOptions } from './default_options'\n\nexport type PdfjsAnnotationSubtype =\n    | 'Link'\n    | 'Text'\n    | 'Widget'\n    | 'Popup'\n    | 'FreeText'\n    | 'Line'\n    | 'Square'\n    | 'Circle'\n    | 'PolyLine'\n    | 'Polygon'\n    | 'Caret'\n    | 'Ink'\n    | 'Highlight'\n    | 'Underline'\n    | 'Squiggly'\n    | 'StrikeOut'\n    | 'Stamp'\n    | 'FileAttachment'\n    | 'Note'\n    | 'Arrow'\n\n// PDF.js 批注类型\nexport enum PdfjsAnnotationType {\n    NONE = 0,\n    TEXT = 1,\n    LINK = 2,\n    FREETEXT = 3,\n    LINE = 4,\n    SQUARE = 5,\n    CIRCLE = 6,\n    POLYGON = 7,\n    POLYLINE = 8,\n    HIGHLIGHT = 9,\n    UNDERLINE = 10,\n    SQUIGGLY = 11,\n    STRIKEOUT = 12,\n    STAMP = 13,\n    CARET = 14,\n    INK = 15,\n    POPUP = 16,\n    FILEATTACHMENT = 17,\n    SOUND = 18,\n    MOVIE = 19,\n    WIDGET = 20,\n    SCREEN = 21,\n    PRINTERMARK = 22,\n    TRAPNET = 23,\n    WATERMARK = 24,\n    THREED = 25,\n    REDACT = 26,\n    NOTE = 27\n}\n\n// PDF.js 自带的批注编辑器类型枚举\n// 用于定义 PDF.js 支持的批注类型\nexport enum PdfjsAnnotationEditorType {\n    DISABLE = -1, // 禁用批注编辑器\n    NONE = 0, // 没有批注类型\n    FREETEXT = 3, // 自由文本批注\n    HIGHLIGHT = 9, // 高亮批注\n    STAMP = 13, // 盖章批注\n    INK = 15 // 墨迹（自由绘制）批注\n}\n\n// 自定义的批注类型枚举\n// 用于定义在应用中使用的批注类型\nexport enum AnnotationType {\n    NONE = -1, // 没有批注类型\n    SELECT = 0, // 选择批注\n    HIGHLIGHT = 1, // 高亮批注\n    STRIKEOUT = 2, // 删除线批注\n    UNDERLINE = 3, // 下划线批注\n    FREETEXT = 4, // 自由文本批注\n    RECTANGLE = 5, // 矩形批注\n    CIRCLE = 6, // 圆形批注\n    FREEHAND = 7, // 自由绘制批注\n    FREE_HIGHLIGHT = 8, // 自由高亮批注\n    SIGNATURE = 9, // 签名批注\n    STAMP = 10, // 盖章批注\n    NOTE = 11, // 注释\n    ARROW = 12, // 箭头批注\n    CLOUD = 13 // 云线\n}\n\n// 定义批注类型的接口\n// 用于描述应用中支持的批注类型\nexport interface IAnnotationType {\n    name: string // 批注的名称\n    type: AnnotationType // 自定义的批注类型\n    pdfjsEditorType: PdfjsAnnotationEditorType // 对应的 Pdfjs 批注类型\n    pdfjsAnnotationType: PdfjsAnnotationType\n    subtype?: PdfjsAnnotationSubtype\n    isOnce: boolean // 是否只绘制一次\n    resizable: boolean // 是否可调整大小\n    draggable: boolean // 是否可拖动位置\n    icon?: React.JSX.Element // 可选的图标，用于表示批注类型\n    style?: IAnnotationStyle // 可选的样式配置对象\n    styleEditable?: {\n        color: boolean\n        strokeWidth: boolean\n        opacity: boolean\n    }\n}\n\n// 批注的样式配置接口\n// 用于描述批注的外观样式\nexport interface IAnnotationStyle {\n    color?: string // 线条、文本、填充的颜色\n    fontSize?: number // 字体大小\n    opacity?: number // 透明度\n    strokeWidth?: number // 边框宽度\n}\n\n// 批注的内容接口\n// 用于描述批注的文本或图像内容\nexport interface IAnnotationComment {\n    id: string;\n    title: string; // 批注标题\n    date: string; // 批注日期\n    content: string; // 批注内容\n    status?: CommentStatus;\n}\n\nexport enum CommentStatus {\n    Accepted = 'Accepted',\n    Rejected = 'Rejected',\n    Cancelled = 'Cancelled',\n    Completed = 'Completed',\n    None = 'None',\n    Closed = 'Closed'\n}\n\nexport interface IAnnotationContentsObj {\n    text: string; // 文本内容\n    image?: string; // 可选的图片属性\n}\n\n// 批注存储接口\n// 用于描述存储在应用中的批注信息\nexport interface IAnnotationStore {\n    id: string; // 批注的唯一标识符\n    pageNumber: number; // 批注所在的页码\n    konvaString: string; // Konva 的序列化表示\n    konvaClientRect: IRect; // 批注在 stage 中的位置\n    title: string; // 批注标题\n    type: AnnotationType; // 批注类型\n    color?: string | null; // 可选颜色，可以是 undefined 或 null\n    subtype: PdfjsAnnotationSubtype;\n    fontSize?: number | null;\n    pdfjsType: PdfjsAnnotationType; // PDF.js 批注类型\n    pdfjsEditorType: PdfjsAnnotationEditorType; // PDF.js 编辑器类型\n    date: string; // 创建或修改日期\n    contentsObj?: IAnnotationContentsObj | null; // 可选的内容对象\n    comments: IAnnotationComment[]; // 与批注相关的评论数组\n    resizable: boolean // 是否可调整大小\n    draggable: boolean // 是否可拖动位置\n}\n\n// 批注类型定义数组\n// 用于描述所有支持的批注类型及其属性\nexport const annotationDefinitions: IAnnotationType[] = [\n    {\n        name: 'select', // 批注名称\n        type: AnnotationType.SELECT, // 批注类型\n        pdfjsEditorType: PdfjsAnnotationEditorType.NONE, // 对应的 PDF.js 批注类型\n        pdfjsAnnotationType: PdfjsAnnotationType.NONE,\n        isOnce: false, // 是否只绘制一次\n        resizable: false,\n        draggable: false,\n        icon: <SelectIcon />, // 图标\n    },\n    {\n        name: 'highlight',\n        type: AnnotationType.HIGHLIGHT,\n        pdfjsEditorType: PdfjsAnnotationEditorType.HIGHLIGHT,\n        pdfjsAnnotationType: PdfjsAnnotationType.HIGHLIGHT,\n        subtype: 'Highlight',\n        isOnce: false,\n        resizable: false,\n        draggable: false,\n        icon: <HighlightIcon />,\n        style: {\n            color: defaultOptions.setting.HIGHLIGHT_COLOR, // 默认高亮颜色\n        },\n        styleEditable: {\n            color: true,\n            strokeWidth: false,\n            opacity: false,\n        }, // 是否可编辑样式\n    },\n    {\n        name: 'strikeout',\n        type: AnnotationType.STRIKEOUT,\n        pdfjsEditorType: PdfjsAnnotationEditorType.HIGHLIGHT,\n        pdfjsAnnotationType: PdfjsAnnotationType.STRIKEOUT,\n        subtype: 'StrikeOut',\n        isOnce: false,\n        resizable: false,\n        draggable: false,\n        icon: <StrikeoutIcon />,\n        style: {\n            color: defaultOptions.setting.STRIKEOUT_COLOR, // 默认删除线颜色\n        },\n        styleEditable: {\n            color: true,\n            opacity: false,\n            strokeWidth: false,\n        } // 是否可编辑样式\n    },\n    {\n        name: 'underline',\n        type: AnnotationType.UNDERLINE,\n        pdfjsEditorType: PdfjsAnnotationEditorType.HIGHLIGHT,\n        pdfjsAnnotationType: PdfjsAnnotationType.UNDERLINE,\n        subtype: 'Underline',\n        isOnce: false,\n        resizable: false,\n        draggable: false,\n        icon: <UnderlineIcon />,\n        style: {\n            color: defaultOptions.setting.UNDERLINE_COLOR, // 默认下划线颜色\n        },\n        styleEditable: {\n            color: true,\n            opacity: false,\n            strokeWidth: false\n        } // 是否可编辑样式\n    },\n    {\n        name: 'rectangle',\n        type: AnnotationType.RECTANGLE,\n        pdfjsEditorType: PdfjsAnnotationEditorType.INK,\n        pdfjsAnnotationType: PdfjsAnnotationType.SQUARE,\n        subtype: 'Square',\n        isOnce: true,\n        resizable: true,\n        draggable: true,\n        icon: <RectangleIcon />,\n        style: {\n            color: defaultOptions.setting.COLOR, // 默认矩形颜色\n            strokeWidth: defaultOptions.setting.STROKE_WIDTH, // 默认线条宽度\n            opacity: defaultOptions.setting.OPACITY // 默认透明度\n        },\n        styleEditable: {\n            color: true,\n            opacity: true,\n            strokeWidth: true\n        } // 是否可编辑样式\n    },\n    {\n        name: 'circle',\n        type: AnnotationType.CIRCLE,\n        pdfjsEditorType: PdfjsAnnotationEditorType.INK,\n        pdfjsAnnotationType: PdfjsAnnotationType.CIRCLE,\n        subtype: 'Circle',\n        isOnce: true,\n        resizable: true,\n        draggable: true,\n        icon: <CircleIcon />,\n        style: {\n            color: defaultOptions.setting.COLOR, // 默认圆形颜色\n            strokeWidth: defaultOptions.setting.STROKE_WIDTH, // 默认线条宽度\n            opacity: defaultOptions.setting.OPACITY // 默认透明度\n        },\n        styleEditable: {\n            color: true,\n            opacity: true,\n            strokeWidth: true\n        } // 是否可编辑样式\n    },\n    {\n        name: 'note',\n        type: AnnotationType.NOTE,\n        pdfjsEditorType: PdfjsAnnotationEditorType.INK,\n        pdfjsAnnotationType: PdfjsAnnotationType.TEXT,\n        subtype: 'Text',\n        isOnce: true,\n        resizable: false,\n        draggable: true,\n        icon: <NoteIcon />\n    },\n    {\n        name: 'arrow',\n        type: AnnotationType.ARROW,\n        pdfjsEditorType: PdfjsAnnotationEditorType.INK,\n        pdfjsAnnotationType: PdfjsAnnotationType.LINE,\n        subtype: 'Arrow',\n        isOnce: true,\n        resizable: true,\n        draggable: true,\n        icon: <ArrowIcon />,\n        style: {\n            color: defaultOptions.setting.COLOR, // 默认圆形颜色\n            strokeWidth: defaultOptions.setting.STROKE_WIDTH, // 默认线条宽度\n            opacity: defaultOptions.setting.OPACITY // 默认透明度\n        },\n        styleEditable: {\n            color: true,\n            opacity: true,\n            strokeWidth: true\n        } // 是否可编辑样式\n    },\n    {\n        name: 'cloud',\n        type: AnnotationType.CLOUD,\n        pdfjsEditorType: PdfjsAnnotationEditorType.INK,\n        pdfjsAnnotationType: PdfjsAnnotationType.POLYLINE,\n        subtype: 'PolyLine',\n        isOnce: true,\n        resizable: true,\n        draggable: true,\n        icon: <CloudIcon />,\n        style: {\n            color: defaultOptions.setting.COLOR, // 默认圆形颜色\n            strokeWidth: defaultOptions.setting.STROKE_WIDTH, // 默认线条宽度\n            opacity: defaultOptions.setting.OPACITY // 默认透明度\n        },\n        styleEditable: {\n            color: true,\n            opacity: true,\n            strokeWidth: true\n        } // 是否可编辑样式\n    },\n    {\n        name: 'freehand',\n        type: AnnotationType.FREEHAND,\n        pdfjsEditorType: PdfjsAnnotationEditorType.INK,\n        pdfjsAnnotationType: PdfjsAnnotationType.INK,\n        subtype: 'Ink',\n        isOnce: true,\n        resizable: true,\n        draggable: true,\n        icon: <FreehandIcon />,\n        style: {\n            color: defaultOptions.setting.COLOR, // 默认自由绘制颜色\n            strokeWidth: defaultOptions.setting.STROKE_WIDTH, // 默认线条宽度\n            opacity: defaultOptions.setting.OPACITY // 默认透明度\n        },\n        styleEditable: {\n            color: true,\n            opacity: true,\n            strokeWidth: true\n        } // 是否可编辑样式\n    },\n    {\n        name: 'freeHighlight',\n        type: AnnotationType.FREE_HIGHLIGHT,\n        pdfjsEditorType: PdfjsAnnotationEditorType.INK,\n        pdfjsAnnotationType: PdfjsAnnotationType.INK,\n        subtype: 'Highlight',\n        isOnce: true,\n        resizable: true,\n        draggable: true,\n        icon: <FreeHighlightIcon />,\n        style: {\n            color: defaultOptions.setting.COLOR, // 默认自由高亮颜色\n            strokeWidth: 10, // 默认线条宽度\n            opacity: 0.5 // 默认透明度\n        },\n        styleEditable: {\n            color: true,\n            opacity: true,\n            strokeWidth: false\n        } // 是否可编辑样式\n    },\n    {\n        name: 'freeText',\n        type: AnnotationType.FREETEXT,\n        pdfjsEditorType: PdfjsAnnotationEditorType.STAMP,\n        pdfjsAnnotationType: PdfjsAnnotationType.FREETEXT,\n        subtype: 'FreeText',\n        isOnce: true,\n        resizable: true,\n        draggable: true,\n        icon: <FreetextIcon />,\n        style: {\n            color: defaultOptions.setting.COLOR, // 默认文字颜色\n            fontSize: defaultOptions.setting.FONT_SIZE, // 默认字体大小\n        },\n        styleEditable: {\n            color: true,\n            opacity: true,\n            strokeWidth: false\n        } // 是否可编辑样式\n    },\n    {\n        name: 'signature',\n        type: AnnotationType.SIGNATURE,\n        pdfjsEditorType: PdfjsAnnotationEditorType.STAMP,\n        pdfjsAnnotationType: PdfjsAnnotationType.STAMP,\n        subtype: 'Caret',\n        isOnce: true,\n        resizable: true,\n        draggable: true,\n        icon: <SignatureIcon />\n    },\n    {\n        name: 'stamp',\n        type: AnnotationType.STAMP,\n        pdfjsEditorType: PdfjsAnnotationEditorType.STAMP,\n        pdfjsAnnotationType: PdfjsAnnotationType.STAMP,\n        subtype: 'Stamp',\n        isOnce: true,\n        resizable: true,\n        draggable: true,\n        icon: <StampIcon />\n    }\n]\n\nexport const HASH_PARAMS_PREFIX = 'ae'\n\nexport const HASH_PARAMS_USERNAME = `${HASH_PARAMS_PREFIX}_username` // 用户名\n\nexport const HASH_PARAMS_GET_URL = `${HASH_PARAMS_PREFIX}_get_url`  // 数据获取默认地址\n\nexport const HASH_PARAMS_POST_URL = `${HASH_PARAMS_PREFIX}_post_url` // 保存地址\n\nexport const HASH_PARAMS_DEFAULT_EDITOR_ACTIVE = `${HASH_PARAMS_PREFIX}_default_editor_active` // 是否激活编辑器\n\nexport const HASH_PARAMS_DEFAULT_SIDEBAR_OPEN = `${HASH_PARAMS_PREFIX}_default_sidebar_open` // 是否打侧边栏\n\n"
  },
  {
    "path": "src/const/icon.tsx",
    "content": "import Icon from '@ant-design/icons'\nimport type { GetProps } from 'antd'\nimport React from 'react'\n\ntype CustomIconComponentProps = GetProps<typeof Icon>\n\nconst SelectSvg = () => (\n    <svg height=\"1em\" fill=\"currentColor\" viewBox=\"0 0 320 512\">\n        <path\n            fill=\"currentColor\"\n            d=\"M0 55.2V426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320H297.9c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z\"\n        ></path>\n    </svg>\n)\n\nconst HighlightSvg = () => (\n    <svg height=\"1em\" fill=\"currentColor\" viewBox=\"0 0 576 512\">\n        <path\n            fill=\"currentColor\"\n            d=\"M315 315l158.4-215L444.1 70.6 229 229 315 315zm-187 5l0 0V248.3c0-15.3 7.2-29.6 19.5-38.6L420.6 8.4C428 2.9 437 0 446.2 0c11.4 0 22.4 4.5 30.5 12.6l54.8 54.8c8.1 8.1 12.6 19 12.6 30.5c0 9.2-2.9 18.2-8.4 25.6L334.4 396.5c-9 12.3-23.4 19.5-38.6 19.5H224l-25.4 25.4c-12.5 12.5-32.8 12.5-45.3 0l-50.7-50.7c-12.5-12.5-12.5-32.8 0-45.3L128 320zM7 466.3l63-63 70.6 70.6-31 31c-4.5 4.5-10.6 7-17 7H24c-13.3 0-24-10.7-24-24v-4.7c0-6.4 2.5-12.5 7-17z\"\n        ></path>\n    </svg>\n)\n\nconst StrikeoutSvg = () => (\n    <svg height=\"1em\" fill=\"currentColor\" viewBox=\"0 0 512 512\">\n        <path\n            fill=\"currentColor\"\n            d=\"M161.3 144c3.2-17.2 14-30.1 33.7-38.6c21.1-9 51.8-12.3 88.6-6.5c11.9 1.9 48.8 9.1 60.1 12c17.1 4.5 34.6-5.6 39.2-22.7s-5.6-34.6-22.7-39.2c-14.3-3.8-53.6-11.4-66.6-13.4c-44.7-7-88.3-4.2-123.7 10.9c-36.5 15.6-64.4 44.8-71.8 87.3c-.1 .6-.2 1.1-.2 1.7c-2.8 23.9 .5 45.6 10.1 64.6c4.5 9 10.2 16.9 16.7 23.9H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H270.1c-.1 0-.3-.1-.4-.1l-1.1-.3c-36-10.8-65.2-19.6-85.2-33.1c-9.3-6.3-15-12.6-18.2-19.1c-3.1-6.1-5.2-14.6-3.8-27.4zM348.9 337.2c2.7 6.5 4.4 15.8 1.9 30.1c-3 17.6-13.8 30.8-33.9 39.4c-21.1 9-51.7 12.3-88.5 6.5c-18-2.9-49.1-13.5-74.4-22.1c-5.6-1.9-11-3.7-15.9-5.4c-16.8-5.6-34.9 3.5-40.5 20.3s3.5 34.9 20.3 40.5c3.6 1.2 7.9 2.7 12.7 4.3l0 0 0 0c24.9 8.5 63.6 21.7 87.6 25.6l0 0 .2 0c44.7 7 88.3 4.2 123.7-10.9c36.5-15.6 64.4-44.8 71.8-87.3c3.6-21 2.7-40.4-3.1-58.1H335.1c7 5.6 11.4 11.2 13.9 17.2z\"\n        ></path>\n    </svg>\n)\n\nconst UnderlineSvg = () => (\n    <svg height=\"1em\" fill=\"currentColor\" viewBox=\"0 0 448 512\">\n        <path\n            fill=\"currentColor\"\n            d=\"M16 64c0-17.7 14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H128V224c0 53 43 96 96 96s96-43 96-96V96H304c-17.7 0-32-14.3-32-32s14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H384V224c0 88.4-71.6 160-160 160s-160-71.6-160-160V96H48C30.3 96 16 81.7 16 64zM0 448c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32z\"\n        ></path>\n    </svg>\n)\n\nconst FreetextSvg = () => (\n    <svg height=\"1em\" fill=\"currentColor\" viewBox=\"0 0 384 512\">\n        <path\n            fill=\"currentColor\"\n            d=\"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96H160V448c0 17.7 14.3 32 32 32s32-14.3 32-32V96H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H192 32z\"\n        ></path>\n    </svg>\n)\n\nconst RectangleSvg = () => (\n    <svg height=\"1em\" fill=\"currentColor\" viewBox=\"0 0 512 512\">\n        <path\n            fill=\"currentColor\"\n            d=\"M384 80c8.8 0 16 7.2 16 16V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V96c0-8.8 7.2-16 16-16H384zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z\"\n        ></path>\n    </svg>\n)\n\nconst EllipseSvg = () => (\n    <svg height=\"1em\" fill=\"currentColor\" viewBox=\"0 0 512 512\">\n        <path fill=\"currentColor\" d=\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"></path>\n    </svg>\n)\n\nconst FreehandSvg = () => (\n    <svg height=\"1em\" fill=\"currentColor\" viewBox=\"0 0 512 512\">\n        <path\n            fill=\"currentColor\"\n            d=\"M410.3 231l11.3-11.3-33.9-33.9-62.1-62.1L291.7 89.8l-11.3 11.3-22.6 22.6L58.6 322.9c-10.4 10.4-18 23.3-22.2 37.4L1 480.7c-2.5 8.4-.2 17.5 6.1 23.7s15.3 8.5 23.7 6.1l120.3-35.4c14.1-4.2 27-11.8 37.4-22.2L387.7 253.7 410.3 231zM160 399.4l-9.1 22.7c-4 3.1-8.5 5.4-13.3 6.9L59.4 452l23-78.1c1.4-4.9 3.8-9.4 6.9-13.3l22.7-9.1v32c0 8.8 7.2 16 16 16h32zM362.7 18.7L348.3 33.2 325.7 55.8 314.3 67.1l33.9 33.9 62.1 62.1 33.9 33.9 11.3-11.3 22.6-22.6 14.5-14.5c25-25 25-65.5 0-90.5L453.3 18.7c-25-25-65.5-25-90.5 0zm-47.4 168l-144 144c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l144-144c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"\n        ></path>\n    </svg>\n)\n\nconst FreeHighlightSvg = () => (\n    <svg height=\"1em\" fill=\"currentColor\" viewBox=\"0 0 576 512\">\n        <path\n            fill=\"currentColor\"\n            d=\"M315 315l158.4-215L444.1 70.6 229 229 315 315zm-187 5l0 0V248.3c0-15.3 7.2-29.6 19.5-38.6L420.6 8.4C428 2.9 437 0 446.2 0c11.4 0 22.4 4.5 30.5 12.6l54.8 54.8c8.1 8.1 12.6 19 12.6 30.5c0 9.2-2.9 18.2-8.4 25.6L334.4 396.5c-9 12.3-23.4 19.5-38.6 19.5H224l-25.4 25.4c-12.5 12.5-32.8 12.5-45.3 0l-50.7-50.7c-12.5-12.5-12.5-32.8 0-45.3L128 320zM7 466.3l63-63 70.6 70.6-31 31c-4.5 4.5-10.6 7-17 7H24c-13.3 0-24-10.7-24-24v-4.7c0-6.4 2.5-12.5 7-17z\"\n        ></path>\n    </svg>\n)\n\nconst SignatureSvg = () => (\n    <svg height=\"1em\" fill=\"currentColor\" viewBox=\"0 0 640 512\">\n        <path\n            fill=\"currentColor\"\n            d=\"M192 128c0-17.7 14.3-32 32-32s32 14.3 32 32v7.8c0 27.7-2.4 55.3-7.1 82.5l-84.4 25.3c-40.6 12.2-68.4 49.6-68.4 92v71.9c0 40 32.5 72.5 72.5 72.5c26 0 50-13.9 62.9-36.5l13.9-24.3c26.8-47 46.5-97.7 58.4-150.5l94.4-28.3-12.5 37.5c-3.3 9.8-1.6 20.5 4.4 28.8s15.7 13.3 26 13.3H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H460.4l18-53.9c3.8-11.3 .9-23.8-7.4-32.4s-20.7-11.8-32.2-8.4L316.4 198.1c2.4-20.7 3.6-41.4 3.6-62.3V128c0-53-43-96-96-96s-96 43-96 96v32c0 17.7 14.3 32 32 32s32-14.3 32-32V128zm-9.2 177l49-14.7c-10.4 33.8-24.5 66.4-42.1 97.2l-13.9 24.3c-1.5 2.6-4.3 4.3-7.4 4.3c-4.7 0-8.5-3.8-8.5-8.5V335.6c0-14.1 9.3-26.6 22.8-30.7zM24 368c-13.3 0-24 10.7-24 24s10.7 24 24 24H64.3c-.2-2.8-.3-5.6-.3-8.5V368H24zm592 48c13.3 0 24-10.7 24-24s-10.7-24-24-24H305.9c-6.7 16.3-14.2 32.3-22.3 48H616z\"\n        ></path>\n    </svg>\n)\n\nconst StampSvg = () => (\n    <svg height=\"1em\" fill=\"currentColor\" viewBox=\"0 0 512 512\">\n        <path\n            fill=\"currentColor\"\n            d=\"M312 201.8c0-17.4 9.2-33.2 19.9-47C344.5 138.5 352 118.1 352 96c0-53-43-96-96-96s-96 43-96 96c0 22.1 7.5 42.5 20.1 58.8c10.7 13.8 19.9 29.6 19.9 47c0 29.9-24.3 54.2-54.2 54.2H112C50.1 256 0 306.1 0 368c0 20.9 13.4 38.7 32 45.3V464c0 26.5 21.5 48 48 48H432c26.5 0 48-21.5 48-48V413.3c18.6-6.6 32-24.4 32-45.3c0-61.9-50.1-112-112-112H366.2c-29.9 0-54.2-24.3-54.2-54.2zM416 416v32H96V416H416z\"\n        ></path>\n    </svg>\n)\n\nconst PaletteSvg = () => (\n    <svg height=\"1em\" viewBox=\"0 0 1024 1024\">\n        <path fill=\"currentColor\" d=\"M614.4 375.46666667a68.26666667 68.26666667 0 1 0 0-136.53333334 68.26666667 68.26666667 0 0 0 0 136.53333334zM409.6 375.46666667a68.26666667 68.26666667 0 1 1-136.53333333 0 68.26666667 68.26666667 0 0 1 136.53333333 0zM375.46666667 716.8a68.26666667 68.26666667 0 1 0 0-136.53333333 68.26666667 68.26666667 0 0 0 0 136.53333333z\"></path><path fill=\"currentColor\" d=\"M34.13333333 512a477.86666667 477.86666667 0 0 1 955.73333334 0c0 43.07626667-18.97813333 73.728-48.67413334 93.73013333-26.8288 18.15893333-61.37173333 26.8288-92.43306666 33.1776-11.40053333 2.32106667-22.45973333 4.36906667-33.10933334 6.3488-21.02613333 3.82293333-40.89173333 7.50933333-60.6208 12.83413334-29.14986667 7.91893333-51.06346667 17.8176-65.67253333 32.08533333-8.26026667 7.91893333-15.22346667 18.8416-21.2992 32.768a213.33333333 213.33333333 0 0 0-10.4448 29.96906667 427.34933333 427.34933333 0 0 0-4.77866667 18.50026666c-3.41333333 14.06293333-6.21226667 28.4672-9.14773333 43.34933334l-0.06826667 0.4096-0.2048 1.024-0.34133333 1.77493333-3.4816 17.33973333-2.38933333 11.4688c-6.69013333 31.40266667-15.70133333 66.1504-33.24586667 93.11573334-19.31946667 29.696-49.152 49.9712-91.9552 49.9712a477.86666667 477.86666667 0 0 1-477.86666667-477.86666667z m477.86666667-409.6a409.6 409.6 0 1 0 0 819.2 36.864 36.864 0 0 0 34.74773333-18.97813333c9.96693333-15.29173333 16.9984-38.63893333 23.68853334-70.10986667 1.8432-8.46506667 3.61813333-17.68106667 5.46133333-27.17013333 4.57386667-23.07413333 9.55733333-48.3328 16.04266667-71.13386667 9.28426667-32.768 23.41546667-67.51573333 49.90293333-93.11573333 27.0336-26.14613333 62.2592-39.936 95.36853333-48.87893334 22.39146667-6.07573333 47.104-10.6496 69.632-14.81386666 10.0352-1.8432 19.52426667-3.54986667 28.2624-5.39306667 30.99306667-6.28053333 53.38453333-13.03893333 67.92533334-22.86933333a47.104 47.104 0 0 0 9.48906666-8.192 34.33813333 34.33813333 0 0 0 4.64213334-6.82666667A47.85493333 47.85493333 0 0 0 921.6 512a409.6 409.6 0 0 0-409.6-409.6z\"></path>\n    </svg>\n)\n\n\nconst FontSizeSvg = () => (\n    <svg height=\"1em\" fill=\"currentColor\" viewBox=\"0 0 576 512\">\n        <path\n            fill=\"currentColor\"\n            d=\"M64 128V96h64l0 320H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H224c17.7 0 32-14.3 32-32s-14.3-32-32-32H192l0-320h64v32c0 17.7 14.3 32 32 32s32-14.3 32-32V80c0-26.5-21.5-48-48-48H160 48C21.5 32 0 53.5 0 80v48c0 17.7 14.3 32 32 32s32-14.3 32-32zM502.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8h32V352H416c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H512V160h32c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64z\"\n        ></path>\n    </svg>\n)\n\nconst SaveSvg = () => (\n    <svg height=\"1em\" fill=\"currentColor\" viewBox=\"0 0 448 512\">\n        <path fill=\"currentColor\"\n            d=\"M48 96l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-245.5c0-4.2-1.7-8.3-4.7-11.3l33.9-33.9c12 12 18.7 28.3 18.7 45.3L448 416c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l245.5 0c17 0 33.3 6.7 45.3 18.7l74.5 74.5-33.9 33.9L320.8 84.7c-.3-.3-.5-.5-.8-.8L320 184c0 13.3-10.7 24-24 24l-192 0c-13.3 0-24-10.7-24-24L80 80 64 80c-8.8 0-16 7.2-16 16zm80-16l0 80 144 0 0-80L128 80zm32 240a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\" />\n    </svg>\n)\n\nconst ExportSvg = () => (\n    <svg height=\"1em\" fill=\"currentColor\" viewBox=\"0 0 1024 1024\">\n        <path d=\"M915.62666667 287.46666667h-0.32M915.30666667 632.10666667h0.32\" fill=\"currentColor\" p-id=\"1372\"></path><path d=\"M968.85333333 732.05333333L831.36 595.30666667v102.4H638.93333333v68.8h192.42666667v102.29333333l137.49333333-136.74666667\" fill=\"currentColor\" p-id=\"1373\"></path><path d=\"M55.14666667 134.72v753.38666667c0 0.53333333 0.10666667 0.96 0.10666666 1.49333333V133.22666667c0 0.53333333-0.10666667 0.96-0.10666666 1.49333333z\" p-id=\"1374\"></path><path d=\"M808.96 512.64h-0.42666667M808.53333333 857.28h0.42666667\" fill=\"currentColor\" p-id=\"1375\"></path><path d=\"M157.86666667 990.82666667h547.94666666c58.24 0 102.72-44.48 102.72-102.72v-30.82666667h-68.48v30.82666667c0 20.58666667-13.65333333 34.24-34.24 34.24H157.86666667c-20.58666667 0-34.24-13.65333333-34.24-34.24V134.72c0-20.58666667 13.65333333-34.24 34.24-34.24h308.26666666v205.44c0.10666667 37.76 30.72 68.37333333 68.48 68.48h205.44v138.24H808.53333333V305.92c0-10.24-3.41333333-17.17333333-10.24-24L558.50666667 42.24c-6.82666667-6.82666667-13.65333333-10.24-24-10.24H157.86666667c-57.70666667 0-101.86666667 43.73333333-102.61333334 101.22666667V889.6c0.85333333 57.49333333 44.90666667 101.22666667 102.61333334 101.22666667z m376.74666666-876.58666667L726.4 305.92H534.61333333V114.24z\" fill=\"currentColor\" p-id=\"1376\"></path><path d=\"M391.36 793.38666667h-79.57333333V416.10666667h116.26666666c103.36-1.38666667 154.34666667 37.44 152.96 116.26666666-2.77333333 73.38666667-46.18666667 112.21333333-130.56 116.26666667h-59.09333333v144.74666667z m0-314.02666667v106.02666667h24.42666667c54.4 5.44 80.85333333-12.26666667 79.57333333-53.01333334 0-36.69333333-26.56-54.4-79.57333333-53.01333333h-24.42666667z\" fill=\"currentColor\" p-id=\"1377\"></path>\n    </svg>\n)\n\nconst NoteSvg = () => (\n    <svg height=\"1em\" viewBox=\"0 0 1024 1024\">\n        <path d=\"M66.782609 772.541217h196.051478a58.835478 58.835478 0 0 1 58.768696 58.768696v117.359304l235.78713-165.442782c9.928348-6.989913 21.615304-10.685217 33.747478-10.685218H957.217391V89.043478H66.782609v683.475479zM313.61113 1022.886957a58.768696 58.768696 0 0 1-58.768695-58.768696v-124.794435H58.724174A58.813217 58.813217 0 0 1 0 780.55513V81.029565A58.835478 58.835478 0 0 1 58.768696 22.26087h906.462608A58.835478 58.835478 0 0 1 1024 81.029565v699.503305a58.835478 58.835478 0 0 1-58.768696 58.768695H593.697391L347.336348 1012.201739c-10.106435 7.101217-21.904696 10.685217-33.725218 10.685218z\" fill=\"currentColor\"></path>\n        <path d=\"M761.878261 326.032696h-499.756522a33.391304 33.391304 0 0 1 0-66.782609h499.756522a33.391304 33.391304 0 1 1 0 66.782609M761.878261 567.652174h-499.756522a33.391304 33.391304 0 0 1 0-66.782609h499.756522a33.391304 33.391304 0 1 1 0 66.782609\" fill=\"currentColor\"></path>\n    </svg>\n)\n\nconst AnnoSvg = () => (\n    <svg height=\"1em\" viewBox=\"0 0 1024 1024\">\n        <path d=\"M658.02666667 432.85333333H347.30666667c-18.77333333 0-34.13333333 15.36-34.13333334 34.13333334s15.36 34.13333333 34.13333334 34.13333333h310.72c18.77333333 0 34.13333333-15.36 34.13333333-34.13333333s-15.36-34.13333333-34.13333333-34.13333334zM571.30666667 557.22666667h-224c-18.77333333 0-34.13333333 15.36-34.13333334 34.13333333s15.36 34.13333333 34.13333334 34.13333333h224c18.77333333 0 34.13333333-15.36 34.13333333-34.13333333s-15.36-34.13333333-34.13333333-34.13333333zM894.29333333 61.12l-621.76-0.10666667c-18.88 0-34.13333333 15.25333333-34.13333333 34.13333334s15.25333333 34.13333333 34.13333333 34.13333333l621.76 0.10666667c15.25333333 0 27.73333333 12.48 27.73333334 27.73333333v431.36c0 18.88 15.25333333 34.13333333 34.13333333 34.13333333s34.13333333-15.25333333 34.13333333-34.13333333V157.12c0-52.8-43.2-96-96-96z\" fill=\"currentColor\"></path><path d=\"M734.4 229.54666667H157.54666667c-67.52 0-122.66666667 55.25333333-122.66666667 122.66666666v368.74666667c0 66.77333333 54.08 121.49333333 120.53333333 122.66666667l0.42666667 66.98666666c8.64 38.4 50.98666667 84.37333333 121.81333333 36.05333334L389.54666667 843.73333333h344.64c67.52 0 122.66666667-55.25333333 122.66666666-122.66666666V352.21333333c0.21333333-67.52-55.04-122.66666667-122.45333333-122.66666666z m54.4 491.30666666c0 14.4-5.65333333 28.05333333-16 38.4s-24 16-38.4 16h-340.26666667v0.10666667H373.33333333l-72.85333333 68.05333333-60.37333333 56.32c-26.88 17.6-24.96-26.66666667-24.96-26.66666666l-0.10666667-29.76v-68.05333334h-58.45333333v-0.21333333c-14.08-0.21333333-27.30666667-5.86666667-37.44-16-10.34666667-10.34666667-16-24-16-38.4V352.21333333c0-14.4 5.65333333-28.05333333 16-38.4s24-16 38.4-16h576.85333333c14.4 0 28.05333333 5.65333333 38.4 16s16 24 16 38.4v368.64z\" fill=\"currentColor\"></path><path d=\"M249.06666667 432.42666667c-18.77333333 0-34.13333333 15.36-34.13333334 34.13333333s15.36 34.13333333 34.13333334 34.13333333 34.13333333-15.36 34.13333333-34.13333333-15.36-34.13333333-34.13333333-34.13333333zM249.06666667 557.22666667c-18.77333333 0-34.13333333 15.36-34.13333334 34.13333333s15.36 34.13333333 34.13333334 34.13333333 34.13333333-15.36 34.13333333-34.13333333-15.36-34.13333333-34.13333333-34.13333333z\" fill=\"currentColor\"></path>\n    </svg>\n)\n\nconst ArrowSvg = () => (  \n    <svg viewBox=\"0 0 1024 1024\" height=\"1em\"><path d=\"M820.35259846 337.71374951V646.0663464h134.06634641V109.8009592h-536.2653872v134.06634641h308.35259689L109.8009592 860.57250255l93.84644234 93.84644232 616.70519692-616.70519536z\" fill=\"currentColor\"></path></svg>\n)\n\nconst CloudSvg = () => (  \n    <svg viewBox=\"0 0 1365 1024\" height=\"1em\"><path d=\"M992 992H392v-2.71999969A319.75999969 319.75999969 0 0 1 193.92000031 393.99999969a400.00000031 400.00000031 0 0 1 790.11999938-41.47999969c2.68000031 0 5.28-0.52000031 8.00000062-0.52000031A319.99999969 319.99999969 0 0 1 992 992z m0-480h-7.99999969a247.99999969 247.99999969 0 0 1-77.28 0H831.99999969v-79.99999969a240 240 0 0 0-480 0v79.99999969a202.87999969 202.87999969 0 0 0-79.99999969 22.56L247.23999969 552.00000031a157.39999969 157.39999969 0 0 0-15.24 15.31999969 54.28000031 54.28000031 0 0 0-9.96 12.48A157.44 157.44 0 0 0 192.00000031 672.00000031a166.36000031 166.36000031 0 0 0 120 159.99999938h679.99999969a160.00000031 160.00000031 0 0 0 0-319.99999969z\" fill=\"currentColor\"></path></svg>\n)\n\nconst DeleteSvg = () => (  \n    <svg viewBox=\"0 0 1024 1024\" height=\"1em\"><path d=\"M64.79816853 182.94087573h894.40366294v47.08331307H64.79816853zM653.22925227 88.78804053v47.06952214h47.06952213V88.78804053c0-26.01028907-21.073024-47.06952213-46.9316096-47.06952213h-282.72053867a46.91092267 46.91092267 0 0 0-33.25069333 13.77745493 46.84610347 46.84610347 0 0 0-13.68091627 33.2920672v47.06952214h47.06952214V88.78804053h282.4447136z m0 0\" fill=\"currentColor\"></path><path d=\"M182.47886827 936.12218133v-706.11178453H135.4093472V936.08080853c0 26.037872 20.9489024 47.12468693 47.12468693 47.12468694h658.94572374c26.037872 0 47.12468693-20.9489024 47.12468693-47.12468694V230.0103968H841.52113173v706.11178453H182.47886827z m0 0\" fill=\"currentColor\" ></path><path d=\"M300.17336 324.163232h47.06952213V747.83030293h-47.06952213V324.163232z m188.29187947 0h47.06952106V747.83030293H488.46523947V324.163232z m188.2918784 0h47.06952213V747.83030293h-47.06952213V324.163232z m0 0\" fill=\"currentColor\"></path></svg>\n)\n\n\nconst SelectIcon = (props: Partial<CustomIconComponentProps>) => <Icon component={SelectSvg} {...props} />\n\nconst HighlightIcon = (props: Partial<CustomIconComponentProps>) => <Icon component={HighlightSvg} {...props} />\n\nconst StrikeoutIcon = (props: Partial<CustomIconComponentProps>) => <Icon component={StrikeoutSvg} {...props} />\n\nconst UnderlineIcon = (props: Partial<CustomIconComponentProps>) => <Icon component={UnderlineSvg} {...props} />\n\nconst FreetextIcon = (props: Partial<CustomIconComponentProps>) => <Icon component={FreetextSvg} {...props} />\n\nconst RectangleIcon = (props: Partial<CustomIconComponentProps>) => <Icon component={RectangleSvg} {...props} />\n\nconst CircleIcon = (props: Partial<CustomIconComponentProps>) => <Icon component={EllipseSvg} {...props} />\n\nconst FreehandIcon = (props: Partial<CustomIconComponentProps>) => <Icon component={FreehandSvg} {...props} />\n\nconst FreeHighlightIcon = (props: Partial<CustomIconComponentProps>) => <Icon component={FreeHighlightSvg} {...props} />\n\nconst SignatureIcon = (props: Partial<CustomIconComponentProps>) => <Icon component={SignatureSvg} {...props} />\n\nconst StampIcon = (props: Partial<CustomIconComponentProps>) => <Icon component={StampSvg} {...props} />\n\nconst PaletteIcon = (props: Partial<CustomIconComponentProps>) => <Icon component={PaletteSvg} {...props} />\n\nconst FontSizeIcon = (props: Partial<CustomIconComponentProps>) => <Icon component={FontSizeSvg} {...props} />\n\nconst SaveIcon = (props: Partial<CustomIconComponentProps>) => <Icon component={SaveSvg} {...props} />\n\nconst ExportIcon = (props: Partial<CustomIconComponentProps>) => <Icon component={ExportSvg} {...props} />\n\nconst NoteIcon = (props: Partial<CustomIconComponentProps>) => <Icon component={NoteSvg} {...props} />\n\nconst AnnoIcon = (props: Partial<CustomIconComponentProps>) => <Icon component={AnnoSvg} {...props} />\n\nconst ArrowIcon = (props: Partial<CustomIconComponentProps>) => <Icon component={ArrowSvg} {...props} />\n\nconst CloudIcon = (props: Partial<CustomIconComponentProps>) => <Icon component={CloudSvg} {...props} />\n\nconst DeleteIcon = (props: Partial<CustomIconComponentProps>) => <Icon component={DeleteSvg} {...props} />\n\nexport {\n    CircleIcon,\n    FontSizeIcon,\n    FreehandIcon,\n    FreeHighlightIcon,\n    FreetextIcon,\n    HighlightIcon,\n    PaletteIcon,\n    RectangleIcon,\n    SelectIcon,\n    SignatureIcon,\n    StampIcon,\n    StrikeoutIcon,\n    UnderlineIcon,\n    SaveIcon,\n    ExportIcon,\n    NoteIcon,\n    AnnoIcon,\n    ArrowIcon,\n    CloudIcon,\n    DeleteIcon\n}\n"
  },
  {
    "path": "src/const/pdfjs.d.ts",
    "content": "declare module 'pdfjs' {\n    interface PDFViewerApplication {\n        appConfig: AppConfig\n        page: number\n        eventBus: EventBus\n        pdfViewer: PDFPageView\n        pagesCount: number\n        _title: string\n        _downloadUrl: string\n        [key: string]: any // 其他未知属性的类型定义\n    }\n    interface Sidebar {\n        outerContainer: HTMLDivElement\n        sidebarContainer: HTMLDivElement\n        [key: string]: any // 其他未知属性的类型定义\n    }\n    interface Toolbar {\n        container: HTMLDivElement\n        [key: string]: any // 其他未知属性的类型定义\n    }\n    interface AppConfig {\n        sidebar: Sidebar\n        toolbar: Toolbar\n        viewerContainer: HTMLDivElement\n        mainContainer: HTMLDivElement\n        [key: string]: any // 其他未知属性的类型定义\n    }\n    interface PDFPageView {\n        id: number\n        div: HTMLDivElement\n        viewport: PageViewport\n        [key: string]: any // 其他未知属性的类型定义\n    }\n    interface PageViewport {\n        viewBox: [number, number, number, number]\n        scale: number\n        rotation: number\n        offsetX: number\n        offsetY: number\n        transform: [number, number, number, number, number, number]\n        width: number\n        height: number\n        rawDims: {\n            pageWidth: number\n            pageHeight: number\n            pageX: number\n            pageY: number\n        }\n    }\n    interface EventBus {\n        [key: string]: any // 其他未知属性的类型定义\n    }\n    type Subtype =\n        | 'Link'\n        | 'Text'\n        | 'Widget'\n        | 'Popup'\n        | 'FreeText'\n        | 'Line'\n        | 'Square'\n        | 'Circle'\n        | 'PolyLine'\n        | 'Polygon'\n        | 'Caret'\n        | 'Ink'\n        | 'Highlight'\n        | 'Underline'\n        | 'Squiggly'\n        | 'StrikeOut'\n        | 'Stamp'\n        | 'FileAttachment'\n    type AnnotationType =\n        | 1 // TEXT\n        | 2 // LINK\n        | 3 // FREETEXT\n        | 4 // LINE\n        | 5 // SQUARE\n        | 6 // CIRCLE\n        | 7 // POLYGON\n        | 8 // POLYLINE\n        | 9 // HIGHLIGHT\n        | 10 // UNDERLINE\n        | 11 // SQUIGGLY\n        | 12 // STRIKEOUT\n        | 13 // STAMP\n        | 14 // CARET\n        | 15 // INK\n        | 16 // POPUP\n        | 17 // FILEATTACHMENT\n        | 18 // SOUND\n        | 19 // MOVIE\n        | 20 // WIDGET\n        | 21 // SCREEN\n        | 22 // PRINTERMARK\n        | 23 // TRAPNET\n        | 24 // WATERMARK\n        | 25 // THREED\n        | 26 // REDACT\n\n    interface Annotation {\n        annotationFlags: number\n        borderStyle: BorderStyle\n        color: RGBColor | null\n        backgroundColor: RGBColor | null\n        borderColor: RGBColor | null\n        rotation: number\n        contentsObj: ContentObject\n        hasAppearance: boolean\n        id: string\n        modificationDate: string | null\n        rect: [number, number, number, number]\n        subtype: Subtype\n        hasOwnCanvas: boolean\n        noRotate: boolean\n        noHTML: boolean\n        titleObj: TitleObject\n        creationDate: string | null\n        popupRef: string | null\n        annotationType: AnnotationType\n        pageNumber: number\n        inReplyTo?: string\n        pageViewer: PDFPageView\n    }\n\n    interface BorderStyle {\n        width: number\n        style: number\n        dashArray: number[]\n        horizontalCornerRadius: number\n        verticalCornerRadius: number\n    }\n\n    interface RGBColor {\n        0: number\n        1: number\n        2: number\n    }\n\n    interface ContentObject {\n        str: string\n        dir: string\n    }\n\n    interface TitleObject {\n        str: string\n        dir: string\n    }\n\n    interface DefaultAppearanceData {\n        fontSize: number\n        fontName: string\n        fontColor: RGBColor\n    }\n\n    interface RichText {\n        html: HtmlObject\n        str: string\n    }\n\n    interface HtmlObject {\n        name: string\n        attributes: HtmlAttributes\n        children: HtmlChild[]\n    }\n\n    interface HtmlAttributes {\n        style: Record<string, string>\n        class: string[]\n        dir: string\n    }\n\n    interface HtmlChild {\n        name: string\n        attributes: HtmlAttributes\n        children: HtmlChild[]\n        value?: string\n    }\n\n    interface QuadPoint {\n        x: number\n        y: number\n    }\n\n    interface InkList {\n        x: number\n        y: number\n    }\n\n    interface Vertices {\n        x: number\n        y: number\n    }\n\n    // FreeText Annotation with rich text and appearance data\n    interface FreeTextAnnotation extends Annotation {\n        annotationType: 3\n        defaultAppearanceData: DefaultAppearanceData\n        textContent: string[]\n        textPosition: [number, number]\n        richText?: RichText\n    }\n\n    // Highlight annotation with quad points\n    interface HighlightAnnotation extends Annotation {\n        annotationType: 9\n        quadPoints: QuadPoint[][]\n    }\n\n    // Square annotation\n    interface SquareAnnotation extends Annotation {\n        annotationType: 5\n    }\n\n    // Circle annotation\n    interface CircleAnnotation extends Annotation {\n        annotationType: 6\n    }\n\n    // Ink annotation with ink lists\n    interface InkAnnotation extends Annotation {\n        annotationType: 15\n        inkLists: InkList[][]\n    }\n\n    // Line annotation with coordinates and endings\n    interface LineAnnotation extends Annotation {\n        annotationType: 4\n        lineCoordinates: [number, number, number, number]\n        lineEndings: [string, string]\n    }\n\n    // Polygon annotation\n    interface PolygonAnnotation extends Annotation {\n        annotationType: 7\n        vertices: Vertices[]\n    }\n\n    // Polyline annotation\n    interface PolyLineAnnotation extends Annotation {\n        annotationType: 8\n        lineEndings: [string, string]\n        vertices: Vertices[]\n    }\n\n    // Text annotation\n    interface TextAnnotation extends Annotation {\n        annotationType: 1\n        inReplyTo?: string\n        replyType?: string\n        [key: string]: any\n    }\n\n    // Underline annotation with quad points\n    interface UnderlineAnnotation extends Annotation {\n        annotationType: 10\n        quadPoints: QuadPoint[][]\n    }\n\n    // StrikeOut annotation with quad points\n    interface StrikeOutAnnotation extends Annotation {\n        annotationType: 12\n        quadPoints: QuadPoint[][]\n    }\n}\n"
  },
  {
    "path": "src/index.tsx",
    "content": "import './scss/app.scss'\n\nimport { EventBus, PDFPageView, PDFViewerApplication } from 'pdfjs'\nimport { createRef } from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { initializeI18n } from './locale/index'\nimport { SyncOutlined } from '@ant-design/icons';\nimport i18n, { t } from 'i18next'\nimport { CustomPopbar, CustomPopbarRef } from './components/popbar'\nimport { CustomToolbar, CustomToolbarRef } from './components/toolbar'\nimport { annotationDefinitions, HASH_PARAMS_DEFAULT_EDITOR_ACTIVE, HASH_PARAMS_DEFAULT_SIDEBAR_OPEN, HASH_PARAMS_GET_URL, HASH_PARAMS_POST_URL, HASH_PARAMS_USERNAME } from './const/definitions'\nimport { Painter } from './painter'\nimport { CustomComment, CustomCommentRef } from './components/comment'\nimport { once, parseQueryString, hashArrayOfObjects } from './utils/utils'\nimport { defaultOptions } from './const/default_options'\nimport { exportAnnotationsToExcel, exportAnnotationsToPdf } from './annot'\nimport { Modal, Space, message } from 'antd'\nimport { CustomAnnotationMenu, CustomAnnotationMenuRef } from './components/menu'\nimport { ConnectorLine } from './painter/connectorLine'\n\ninterface AppOptions {\n    [key: string]: string;\n}\n\nclass PdfjsAnnotationExtension {\n    PDFJS_PDFViewerApplication: PDFViewerApplication // PDF.js 的 PDFViewerApplication 对象\n    PDFJS_EventBus: EventBus // PDF.js 的 EventBus 对象\n    $PDFJS_outerContainer: HTMLDivElement\n    $PDFJS_mainContainer: HTMLDivElement\n    $PDFJS_sidebarContainer: HTMLDivElement // PDF.js 侧边栏容器\n    $PDFJS_toolbar_container: HTMLDivElement // PDF.js 工具栏容器\n    $PDFJS_viewerContainer: HTMLDivElement // PDF.js 页面视图容器\n    customToolbarRef: React.RefObject<CustomToolbarRef> // 自定义工具栏的引用\n    customPopbarRef: React.RefObject<CustomPopbarRef>\n    customerAnnotationMenuRef: React.RefObject<CustomAnnotationMenuRef> // 自定义批注菜单的引用\n    customCommentRef: React.RefObject<CustomCommentRef>\n    painter: Painter // 画笔实例\n    appOptions: AppOptions\n    loadEnd: Boolean\n    initialDataHash: number\n    _connectorLine: ConnectorLine | null = null\n\n    constructor() {\n        this.loadEnd = false\n        this.initialDataHash = null\n        // 初始化 PDF.js 对象和相关属性\n        this.PDFJS_PDFViewerApplication = (window as any).PDFViewerApplication\n        this.PDFJS_EventBus = this.PDFJS_PDFViewerApplication.eventBus\n        this.$PDFJS_sidebarContainer = this.PDFJS_PDFViewerApplication.appConfig.sidebar.sidebarContainer\n        this.$PDFJS_toolbar_container = this.PDFJS_PDFViewerApplication.appConfig.toolbar.container\n        this.$PDFJS_viewerContainer = this.PDFJS_PDFViewerApplication.appConfig.viewerContainer\n        this.$PDFJS_mainContainer = this.PDFJS_PDFViewerApplication.appConfig.mainContainer\n        this.$PDFJS_outerContainer = this.PDFJS_PDFViewerApplication.appConfig.sidebar.outerContainer\n        // 使用 createRef 方法创建 React 引用\n        this.customToolbarRef = createRef<CustomToolbarRef>()\n        this.customPopbarRef = createRef<CustomPopbarRef>()\n        this.customerAnnotationMenuRef = createRef<CustomAnnotationMenuRef>()\n        this.customCommentRef = createRef<CustomCommentRef>()\n        // 加载多语言\n        initializeI18n(this.PDFJS_PDFViewerApplication.l10n.getLanguage())\n        this.appOptions = {\n            [HASH_PARAMS_USERNAME]: i18n.t('normal.unknownUser'), // 默认用户名,\n            [HASH_PARAMS_GET_URL]: defaultOptions.setting.HASH_PARAMS_GET_URL, // 默认 GET URL\n            [HASH_PARAMS_POST_URL]: defaultOptions.setting.HASH_PARAMS_POST_URL, // 默认 POST URL\n            [HASH_PARAMS_DEFAULT_EDITOR_ACTIVE]: defaultOptions.setting.HASH_PARAMS_DEFAULT_EDITOR_ACTIVE,\n            [HASH_PARAMS_DEFAULT_SIDEBAR_OPEN]: defaultOptions.setting.HASH_PARAMS_DEFAULT_SIDEBAR_OPEN,\n        };\n\n        // 处理地址栏参数\n        this.parseHashParams()\n        // 创建画笔实例\n        this.painter = new Painter({\n            userName: this.getOption(HASH_PARAMS_USERNAME),\n            PDFViewerApplication: this.PDFJS_PDFViewerApplication,\n            PDFJS_EventBus: this.PDFJS_EventBus,\n            setDefaultMode: () => {\n                this.customToolbarRef.current.activeAnnotation(annotationDefinitions[0])\n            },\n            onWebSelectionSelected: range => {\n                this.customPopbarRef.current.open(range)\n            },\n            onStoreAdd: (annotation, isOriginal, currentAnnotation) => {\n                this.customCommentRef.current.addAnnotation(annotation)\n                if (isOriginal) return\n                if (currentAnnotation.isOnce) {\n                    this.painter.selectAnnotation(annotation.id)\n                }\n                if (this.isCommentOpen()) {\n                    // 如果评论栏已打开，则选中批注\n                    this.customCommentRef.current.selectedAnnotation(annotation, true)\n                }\n            },\n            onStoreDelete: (id) => {\n                this.customCommentRef.current.delAnnotation(id)\n            },\n            onAnnotationSelected: (annotation, isClick, selectorRect) => {\n                this.customerAnnotationMenuRef.current.open(annotation, selectorRect)\n                if (isClick && this.isCommentOpen()) {\n                    // 如果是点击事件并且评论栏已打开，则选中批注\n                    this.customCommentRef.current.selectedAnnotation(annotation, isClick)\n                }\n\n                this.connectorLine?.drawConnection(annotation, selectorRect)\n            },\n            onAnnotationChange: (annotation) => {\n                this.customCommentRef.current.updateAnnotation(annotation)\n            },\n            onAnnotationChanging: () => {\n                this.connectorLine?.clearConnection()\n                this.customerAnnotationMenuRef?.current?.close()\n            },\n            onAnnotationChanged: (annotation, selectorRect) => {\n                console.log('annotation changed', annotation)\n                this.connectorLine?.drawConnection(annotation, selectorRect)\n                this.customerAnnotationMenuRef?.current?.open(annotation, selectorRect)\n            },\n        })\n        // 初始化操作\n        this.init()\n    }\n\n    get connectorLine(): ConnectorLine | null {\n        if (defaultOptions.connectorLine.ENABLED) {\n            this._connectorLine = new ConnectorLine({})\n        }\n        return this._connectorLine\n    }\n\n    /**\n     * @description 初始化 PdfjsAnnotationExtension 类\n     */\n    private init(): void {\n        this.addCustomStyle()\n        this.bindPdfjsEvents()\n        this.renderToolbar()\n        this.renderPopBar()\n        this.renderAnnotationMenu()\n        this.renderComment()\n    }\n\n    /**\n     * @description 处理地址栏参数\n     * @returns \n     */\n    private parseHashParams() {\n        const hash = document.location.hash.substring(1);\n        if (!hash) {\n            console.warn(`HASH_PARAMS is undefined`);\n            return;\n        }\n        const params = parseQueryString(hash);\n        if (params.has(HASH_PARAMS_USERNAME)) {\n            this.setOption(HASH_PARAMS_USERNAME, params.get(HASH_PARAMS_USERNAME))\n        } else {\n            console.warn(`${HASH_PARAMS_USERNAME} is undefined`);\n        }\n        if (params.has(HASH_PARAMS_GET_URL)) {\n            this.setOption(HASH_PARAMS_GET_URL, params.get(HASH_PARAMS_GET_URL))\n        } else {\n            console.warn(`${HASH_PARAMS_GET_URL} is undefined`);\n        }\n        if (params.has(HASH_PARAMS_POST_URL)) {\n            this.setOption(HASH_PARAMS_POST_URL, params.get(HASH_PARAMS_POST_URL))\n        } else {\n            console.warn(`${HASH_PARAMS_POST_URL} is undefined`);\n        }\n        if (params.has(HASH_PARAMS_DEFAULT_EDITOR_ACTIVE) && params.get(HASH_PARAMS_DEFAULT_EDITOR_ACTIVE) === 'true') {\n            this.setOption(HASH_PARAMS_DEFAULT_EDITOR_ACTIVE, 'select')\n        } else {\n            console.warn(`${HASH_PARAMS_DEFAULT_EDITOR_ACTIVE} is undefined`);\n        }\n\n        if (params.has(HASH_PARAMS_DEFAULT_SIDEBAR_OPEN) && params.get(HASH_PARAMS_DEFAULT_SIDEBAR_OPEN) === 'false') {\n            this.setOption(HASH_PARAMS_DEFAULT_SIDEBAR_OPEN, 'false')\n        } else {\n            console.warn(`${HASH_PARAMS_DEFAULT_EDITOR_ACTIVE} is undefined`);\n        }\n\n    }\n\n    private setOption(name: string, value: string) {\n        this.appOptions[name] = value\n    }\n\n    private getOption(name: string) {\n        return this.appOptions[name]\n    }\n\n    /**\n     * @description 添加自定义样式\n     */\n    private addCustomStyle(): void {\n        document.body.classList.add('PdfjsAnnotationExtension')\n        this.toggleComment(this.getOption(HASH_PARAMS_DEFAULT_SIDEBAR_OPEN) === 'true')\n    }\n\n    /**\n     * @description 切换评论栏的显示状态\n     * @param open \n     */\n    private toggleComment(open: boolean): void {\n        if (open) {\n            document.body.classList.remove('PdfjsAnnotationExtension_Comment_hidden')\n        } else {\n            document.body.classList.add('PdfjsAnnotationExtension_Comment_hidden')\n        }\n    }\n\n    /**\n     * @description 检查评论栏是否打开\n     * @returns \n     */\n    private isCommentOpen(): boolean {\n        return !document.body.classList.contains('PdfjsAnnotationExtension_Comment_hidden')\n    }\n\n    /**\n     * @description 渲染自定义工具栏\n     */\n    private renderToolbar(): void {\n        const toolbar = document.createElement('div')\n        this.$PDFJS_toolbar_container.insertAdjacentElement('afterend', toolbar)\n        createRoot(toolbar).render(\n            <CustomToolbar\n                ref={this.customToolbarRef}\n                defaultAnnotationName={this.getOption(HASH_PARAMS_DEFAULT_EDITOR_ACTIVE)}\n                defaultSidebarOpen={this.getOption(HASH_PARAMS_DEFAULT_SIDEBAR_OPEN) === 'true'}\n                userName={this.getOption(HASH_PARAMS_USERNAME)}\n                onChange={(currentAnnotation, dataTransfer) => {\n                    this.painter.activate(currentAnnotation, dataTransfer)\n                }}\n                onSave={() => {\n                    this.saveData()\n                }}\n                onExport={async (type) => {\n                    if (type === 'excel') {\n                        this.exportExcel()\n                        return\n                    }\n                    if (type === 'pdf') {\n                        await this.exportPdf()\n                        return\n                    }\n                }}\n                onSidebarOpen={(isOpen) => {\n                    this.toggleComment(isOpen)\n                    this.connectorLine.clearConnection()\n                }}\n            />\n        )\n    }\n\n    /**\n     * @description 渲染自定义弹出工具条\n     */\n    private renderPopBar(): void {\n        const popbar = document.createElement('div')\n        this.$PDFJS_viewerContainer.insertAdjacentElement('afterend', popbar)\n        createRoot(popbar).render(\n            <CustomPopbar\n                ref={this.customPopbarRef}\n                onChange={(currentAnnotation, range) => {\n                    this.painter.highlightRange(range, currentAnnotation)\n                }}\n            />\n        )\n    }\n\n    /**\n     * @description 渲染自定义弹出工具条\n     */\n    private renderAnnotationMenu(): void {\n        const annotationMenu = document.createElement('div')\n        this.$PDFJS_outerContainer.insertAdjacentElement('afterend', annotationMenu)\n        createRoot(annotationMenu).render(\n            <CustomAnnotationMenu\n                ref={this.customerAnnotationMenuRef}\n                onOpenComment={(currentAnnotation) => {\n                    this.toggleComment(true)\n                    this.customToolbarRef.current.toggleSidebarBtn(true)\n                    setTimeout(() => {\n                        this.customCommentRef.current.selectedAnnotation(currentAnnotation, true)\n                    }, 100)\n                }}\n                onChangeStyle={(currentAnnotation, style) => {\n                    this.painter.updateAnnotationStyle(currentAnnotation, style)\n                    this.customToolbarRef.current.updateStyle(currentAnnotation.type, style)\n                }}\n                onDelete={(currentAnnotation) => {\n                    this.painter.delete(currentAnnotation.id, true)\n                }}\n            />\n        )\n    }\n\n    /**\n     * @description 渲染自定义留言条\n     */\n    private renderComment(): void {\n        const comment = document.createElement('div')\n        this.$PDFJS_mainContainer.insertAdjacentElement('afterend', comment)\n        createRoot(comment).render(\n            <CustomComment\n                ref={this.customCommentRef}\n                userName={this.getOption(HASH_PARAMS_USERNAME)}\n                onSelected={async (annotation) => {\n                    await this.painter.highlight(annotation)\n                }}\n                onDelete={(id) => {\n                    this.painter.delete(id)\n                }}\n                onUpdate={(annotation) => {\n                    this.painter.update(annotation.id, {\n                        title: annotation.title,\n                        contentsObj: annotation.contentsObj,\n                        comments: annotation.comments\n                    })\n                }}\n                onScroll={() => {\n                    this.connectorLine?.clearConnection()\n                }}\n            />\n        )\n    }\n\n    /**\n     * @description 隐藏 PDF.js 编辑模式按钮\n     */\n    private hidePdfjsEditorModeButtons(): void {\n        defaultOptions.setting.HIDE_PDFJS_ELEMENT.forEach(item => {\n            const element = document.querySelector(item) as HTMLElement;\n            if (element) {\n                element.style.display = 'none';\n                const nextDiv = element.nextElementSibling as HTMLElement;\n                if (nextDiv.classList.contains('horizontalToolbarSeparator')) {\n                    nextDiv.style.display = 'none'\n                }\n            }\n        });\n    }\n\n    private updatePdfjs() {\n        const currentScaleValue = this.PDFJS_PDFViewerApplication.pdfViewer.currentScaleValue\n        if (\n            currentScaleValue === 'auto' ||\n            currentScaleValue === 'page-fit' ||\n            currentScaleValue === 'page-width'\n        ) {\n            this.PDFJS_PDFViewerApplication.pdfViewer.currentScaleValue = '0.8'\n            this.PDFJS_PDFViewerApplication.pdfViewer.update()\n        } else {\n            this.PDFJS_PDFViewerApplication.pdfViewer.currentScaleValue = 'auto'\n            this.PDFJS_PDFViewerApplication.pdfViewer.update()\n        }\n        this.PDFJS_PDFViewerApplication.pdfViewer.currentScaleValue = currentScaleValue\n        this.PDFJS_PDFViewerApplication.pdfViewer.update()\n    }\n\n    /**\n     * @description 绑定 PDF.js 相关事件\n     */\n    private bindPdfjsEvents(): void {\n        this.hidePdfjsEditorModeButtons()\n        const setLoadEnd = once(() => {\n            this.loadEnd = true\n        })\n\n        // 视图更新时隐藏菜单\n        this.PDFJS_EventBus._on('updateviewarea', () => {\n            this.customerAnnotationMenuRef.current?.close()\n            this.connectorLine?.clearConnection()\n        })\n\n        // 监听页面渲染完成事件\n        this.PDFJS_EventBus._on(\n            'pagerendered',\n            async ({ source, cssTransform, pageNumber }: { source: PDFPageView; cssTransform: boolean; pageNumber: number }) => {\n                setLoadEnd()\n                this.painter.initCanvas({ pageView: source, cssTransform, pageNumber })\n            }\n        )\n\n        // 监听文档加载完成事件\n        this.PDFJS_EventBus._on('documentloaded', async () => {\n            this.painter.initWebSelection(this.$PDFJS_viewerContainer)\n            const data = await this.getData()\n            this.initialDataHash = hashArrayOfObjects(data)\n            await this.painter.initAnnotations(data, defaultOptions.setting.LOAD_PDF_ANNOTATION)\n            if (this.loadEnd) {\n                this.updatePdfjs()\n            }\n        })\n    }\n\n    /**\n     * @description 获取外部批注数据\n     * @returns \n     */\n    private async getData(): Promise<any[]> {\n        const getUrl = this.getOption(HASH_PARAMS_GET_URL);\n        if (!getUrl) {\n            return [];\n        }\n        try {\n            message.open({\n                type: 'loading',\n                content: t('normal.processing'),\n                duration: 0,\n            });\n            const response = await fetch(getUrl, { method: 'GET' });\n\n            if (!response.ok) {\n                const errorMessage = `HTTP Error ${response.status}: ${response.statusText || 'Unknown Status'}`;\n                throw new Error(errorMessage);\n            }\n            return await response.json();\n        } catch (error) {\n            Modal.error({\n                content: t('load.fail', { value: error?.message }),\n                closable: false,\n                okButtonProps: {\n                    loading: false\n                },\n                okText: t('normal.ok')\n            })\n            console.error('Fetch error:', error);\n            return [];\n        } finally {\n            message.destroy();\n        }\n    }\n\n    /**\n     * @description 保存批注数据\n     * @returns \n     */\n    private async saveData(): Promise<void> {\n        const dataToSave = this.painter.getData();\n        console.log('%c [ dataToSave ]', 'font-size:13px; background:#d10d00; color:#ff5144;', dataToSave)\n        const postUrl = this.getOption(HASH_PARAMS_POST_URL);\n        if (!postUrl) {\n            message.error({\n                content: t('save.noPostUrl', { value: HASH_PARAMS_POST_URL }),\n                key: 'save',\n            });\n            return;\n        }\n        const modal = Modal.info({\n            content: <Space><SyncOutlined spin />{t('save.start')}</Space>,\n            closable: false,\n            okButtonProps: {\n                loading: true\n            },\n            okText: t('normal.ok')\n        })\n        try {\n            const response = await fetch(postUrl, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application/json' },\n                body: JSON.stringify(dataToSave),\n            });\n            if (!response.ok) {\n                throw new Error(`Failed to save PDF. Status: ${response.status} ${response.statusText}`);\n            }\n            const result = await response.json();\n            // {\"status\": \"ok\", \"message\": \"POST received!\"}\n            this.initialDataHash = hashArrayOfObjects(dataToSave)\n            modal.destroy()\n            message.success({\n                content: t('save.success'),\n                key: 'save',\n            });\n            console.log('Saved successfully:', result);\n        } catch (error) {\n            modal.update({\n                type: 'error',\n                content: t('save.fail', { value: error?.message }),\n                closable: true,\n                okButtonProps: {\n                    loading: false\n                },\n            })\n            console.error('Error while saving data:', error);\n        }\n    }\n\n    private async exportPdf() {\n        const dataToSave = this.painter.getData();\n        const modal = Modal.info({\n            title: t('normal.export'),\n            content: <Space><SyncOutlined spin />{t('normal.processing')}</Space>,\n            closable: false,\n            okButtonProps: {\n                loading: true\n            },\n            okText: t('normal.ok')\n        })\n        await exportAnnotationsToPdf(this.PDFJS_PDFViewerApplication, dataToSave)\n        modal.update({\n            type: 'success',\n            title: t('normal.export'),\n            content: t('pdf.generationSuccess'),\n            closable: true,\n            okButtonProps: {\n                loading: false\n            },\n        })\n    }\n\n    private async exportExcel() {\n        const annotations = this.painter.getData()\n        await exportAnnotationsToExcel(this.PDFJS_PDFViewerApplication, annotations)\n        Modal.info({\n            type: 'success',\n            title: t('normal.export'),\n            content: t('pdf.generationSuccess'),\n            closable: true,\n            okButtonProps: {\n                loading: false\n            },\n        })\n    }\n\n    public hasUnsavedChanges(): boolean {\n        return hashArrayOfObjects(this.painter.getData()) !== this.initialDataHash\n    }\n\n}\n\ndeclare global {\n    interface Window {\n        pdfjsAnnotationExtensionInstance: PdfjsAnnotationExtension\n    }\n}\n\nwindow.pdfjsAnnotationExtensionInstance = new PdfjsAnnotationExtension()"
  },
  {
    "path": "src/locale/de-de.json",
    "content": "{\n    \"anno\": \"Kommentare\",\n    \"annotations\": {\n        \"select\": \"Auswählen\",\n        \"highlight\": \"Hervorheben\",\n        \"strikeout\": \"Durchstreichen\",\n        \"underline\": \"Unterstreichen\",\n        \"rectangle\": \"Rechteck\",\n        \"circle\": \"Kreis\",\n        \"freehand\": \"Freihand\",\n        \"freeHighlight\": \"Hervorheben\",\n        \"freeText\": \"Text\",\n        \"signature\": \"Unterschrift\",\n        \"stamp\": \"Stempel\",\n        \"note\": \"Notiz\",\n        \"arrow\": \"Pfeil\",\n        \"cloud\": \"Wolke\"\n    },\n    \"toolbar\": {\n        \"buttons\": {\n            \"createSignature\": \"Unterschrift erstellen\",\n            \"uploadImage\": \"Bild hochladen\",\n            \"createStamp\": \"Stempel erstellen\"\n        },\n        \"message\": {\n            \"selectPosition\": \"Bitte wählen Sie eine Position\",\n            \"signatureArea\": \"Unterschriftbereich\",\n            \"uploadArea\": \"Hochladebereich\",\n            \"uploadHint\": \"Klicken Sie zum Hochladen oder ziehen Sie die Bilddatei in diese Zone {{format}} {{maxSize}}\"\n        }\n    },\n    \"editor\": {\n        \"text\": {\n            \"startTyping\": \"Tippen beginnen…\"\n        },\n        \"stamp\": {\n            \"stampText\": \"Stempelinhalt\",\n            \"fontStyle\": \"Schriftart\",\n            \"fontFamily\": \"Schriftfamilie\",\n            \"textColor\": \"Textfarbe\",\n            \"backgroundColor\": \"Hintergrundfarbe\",\n            \"borderColor\": \"Randfarbe\",\n            \"borderStyle\": \"Randstil\",\n            \"timestampText\": \"Zeitstempel\",\n            \"customTimestamp\": \"Benutzerdefiniert\",\n            \"username\": \"Benutzername\",\n            \"date\": \"Datum\",\n            \"time\": \"Zeit\",\n            \"dateFormat\": \"Datumsformat\",\n            \"solid\": \"Solide\",\n            \"dashed\": \"Gestrichelt\",\n            \"defaultText\": \"Entwurf\"\n        }\n    },\n    \"normal\": {\n        \"ok\": \"OK\",\n        \"cancel\": \"Abbrechen\",\n        \"clear\": \"Löschen\",\n        \"fileSizeLimit\": \"Die Dateigröße überschreitet die {{value}}-Grenze\",\n        \"deleteConfirm\": \"Sind Sie sicher, dass Sie Folgendes löschen möchten?\",\n        \"yes\": \"Ja\",\n        \"no\": \"Nein\",\n        \"example\": \"z.B. \",\n        \"color\": \"Farbe\",\n        \"export\": \"Export\",\n        \"save\": \"Speichern\",\n        \"reply\": \"Antworten\",\n        \"edit\": \"Bearbeiten\",\n        \"delete\": \"Löschen\",\n        \"confirm\": \"Bestätigen\",\n        \"unknownUser\": \"Unbekannter Benutzer\",\n        \"processing\": \"Bearbeitung, bitte warten...\",\n        \"filter\": \"Filter\",\n        \"author\": \"Autor\",\n        \"type\": \"Typ\",\n        \"selectAll\": \"Alle auswählen\",\n        \"more\": \"Mehr\",\n        \"draw\": \"Zeichnen\",\n        \"enter\": \"Eingeben\",\n        \"upload\": \"Hochladen\",\n        \"default\": \"Standard\",\n        \"custom\": \"Benutzerdefiniert\",\n        \"strokeWidth\": \"Strichbreite\",\n        \"opacity\": \"Deckkraft\"\n    },\n    \"comment\": {\n        \"total\": \"Kommentare: {{value}}\",\n        \"page\": \"Seite {{value}}\",\n        \"status\": {\n            \"accepted\": \"Akzeptiert\",\n            \"rejected\": \"Abgelehnt\",\n            \"cancelled\": \"Abgebrochen\",\n            \"completed\": \"Abgeschlossen\",\n            \"none\": \"Keine\",\n            \"closed\": \"Geschlossen\"\n        },\n        \"statusText\": \"Status festlegen: {{value}}\"\n    },\n    \"pdf\": {\n        \"generationSuccess\": \"Datei wurde erfolgreich generiert und heruntergeladen\"\n    },\n    \"dateFormat\": {\n        \"full\": \"{{day}}.{{month}}.{{year}} {{hour}}:{{minute}}\",\n        \"dayMonth\": \"{{day}}.{{month}}\",\n        \"dayMonthYear\": \"{{day}}.{{month}}.{{year}}\"\n    },\n    \"save\": {\n        \"start\": \"Speichern...\",\n        \"success\": \"Erfolgreich gespeichert!\",\n        \"fail\": \"Speichern fehlgeschlagen. {{value}}\",\n        \"noPostUrl\": \"{{value}} nicht gefunden.\"\n    },\n    \"export\": {\n        \"fields\": {\n            \"id\": \"ID\",\n            \"page\": \"Seite\",\n            \"author\": \"Autor\",\n            \"date\": \"Datum\",\n            \"content\": \"Inhalt\",\n            \"status\": \"Status\",\n            \"annotationType\": \"Anmerkungstyp\",\n            \"recordType\": \"Typ\"\n        },\n        \"recordType\": {\n            \"annotation\": \"Anmerkung\",\n            \"reply\": \"Antwort\"\n        }\n    }\n}\n"
  },
  {
    "path": "src/locale/en-us.json",
    "content": "{\n    \"anno\": \"Comment\",\n    \"annotations\": {\n        \"select\": \"Select\",\n        \"highlight\": \"Highlight\",\n        \"strikeout\": \"Strikeout\",\n        \"underline\": \"Underline\",\n        \"rectangle\": \"Rectangle\",\n        \"circle\": \"Circle\",\n        \"freehand\": \"Free Hand\",\n        \"freeHighlight\": \"Free Highlight\",\n        \"freeText\": \"Text\",\n        \"signature\": \"Signature\",\n        \"stamp\": \"Stamp\",\n        \"note\": \"Note\",\n        \"arrow\": \"Arrow\",\n        \"cloud\": \"Cloud\"\n    },\n    \"toolbar\": {\n        \"buttons\": {\n            \"createSignature\": \"Create signature\",\n            \"uploadImage\": \"Upload Image\",\n            \"createStamp\": \"Create Stamp\"\n        },\n        \"message\": {\n            \"selectPosition\": \"Please select a position\",\n            \"signatureArea\": \"Signature\",\n            \"uploadArea\": \"Upload Area\",\n            \"uploadHint\": \"Click to upload or drag and drop to here {{format}}, maxSize {{maxSize}}\"\n        }\n    },\n    \"editor\": {\n        \"text\": {\n            \"startTyping\": \"Start typing…\"\n        },\n        \"stamp\": {\n            \"stampText\": \"Stamp Text\",\n            \"fontStyle\": \"Font Style\",\n            \"fontFamily\": \"Font Family\",\n            \"textColor\": \"Text Color\",\n            \"backgroundColor\": \"Background Color\",\n            \"borderColor\": \"Border Color\",\n            \"borderStyle\": \"Border Style\",\n            \"timestampText\": \"Timestamp Text\",\n            \"customTimestamp\": \"Custom Text\",\n            \"username\": \"Username\",\n            \"date\": \"Date\",\n            \"time\": \"Time\",\n            \"dateFormat\": \"Date Format\",\n            \"solid\": \"Solid\",\n            \"dashed\": \"Dashed\",\n            \"defaultText\": \"Draft\"\n        }\n    },\n    \"normal\": {\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"clear\": \"Clear\",\n        \"fileSizeLimit\": \"The file size exceeds the {{value}} limit\",\n        \"deleteConfirm\": \"Are you sure you want to delete?\",\n        \"yes\": \"Yes\",\n        \"no\": \"No\",\n        \"example\": \"e.g. \",\n        \"color\": \"Color\",\n        \"export\": \"Export\",\n        \"save\": \"Save\",\n        \"reply\": \"Reply\",\n        \"edit\": \"Edit\",\n        \"delete\": \"Delete\",\n        \"confirm\": \"Confirm\",\n        \"unknownUser\": \"Unknown User\",\n        \"processing\": \"Processing, please wait...\",\n        \"filter\": \"Filter\",\n        \"author\": \"Author\",\n        \"type\": \"Type\",\n        \"selectAll\": \"Select All\",\n        \"more\": \"More\",\n        \"draw\": \"Draw\",\n        \"enter\": \"Enter\",\n        \"upload\": \"Upload\",\n        \"default\": \"Default\",\n        \"custom\": \"Custom\",\n        \"strokeWidth\": \"Stroke\",\n        \"opacity\": \"Opacity\"\n    },\n    \"comment\": {\n        \"total\": \"Comment {{value}}\",\n        \"page\": \"Page {{value}}\",\n        \"status\": {\n            \"accepted\": \"Accepted\",\n            \"rejected\": \"Rejected\",\n            \"cancelled\": \"Cancelled\",\n            \"completed\": \"Completed\",\n            \"none\": \"None\",\n            \"closed\": \"Closed\"\n        },\n        \"statusText\": \"Set Status: {{value}}\"\n    },\n    \"pdf\": {\n        \"generationSuccess\": \"File has been successfully generated and downloaded\"\n    },\n    \"dateFormat\": {\n        \"full\": \"{{month}}/{{day}}/{{year}} {{hour}}:{{minute}}\",\n        \"dayMonth\": \"{{month}}/{{day}}\",\n        \"dayMonthYear\": \"{{month}}/{{day}}/{{year}}\"\n    },\n    \"save\": {\n        \"start\": \"Saving...\",\n        \"success\": \"Saved successfully!\",\n        \"fail\": \"Failed to save. {{value}}\",\n        \"noPostUrl\": \"{{value}} not found.\"\n    },\n    \"load\": {\n        \"fail\": \"Annotation Data Load Fail: {{value}}\"\n    },\n    \"export\": {\n        \"fields\": {\n            \"id\": \"ID\",\n            \"page\": \"Page\",\n            \"author\": \"Author\",\n            \"date\": \"Date\",\n            \"content\": \"Content\",\n            \"status\": \"Status\",\n            \"annotationType\": \"Annotation Type\",\n            \"recordType\": \"Type\"\n        },\n        \"recordType\": {\n            \"annotation\": \"Annotation\",\n            \"reply\": \"Reply\"\n        }\n    }\n}\n"
  },
  {
    "path": "src/locale/index.ts",
    "content": "import i18n from 'i18next'\nimport { initReactI18next } from 'react-i18next'\n\nimport zh from './zh-cn.json'\nimport en from './en-us.json'\nimport de from './de-de.json'\n\nconst resources = {\n    en: { translation: en },\n    zh: { translation: zh },\n    de: { translation: de }\n}\n\n// 语言映射：将 zh-cn, en-us 映射到 i18n 的语言代码\nconst languageMap: { [key: string]: string } = {\n    'zh-cn': 'zh',\n    'en-us': 'en',\n    'de-de': 'de'\n}\n\n// 暴露的初始化方法\nexport const initializeI18n = (lng: string) => {\n    let mappedLng = lng.toLowerCase()\n    if (mappedLng.length > 2) {\n        // 将 zh-cn/en-us 转换为 zh/en\n        mappedLng = languageMap[lng.toLowerCase()] || 'en' // 默认中文\n    }\n\n    i18n.use(initReactI18next) // 使用 react-i18next\n        .init({\n            resources,\n            lng: mappedLng,\n            fallbackLng: 'en',\n            interpolation: {\n                escapeValue: false // React 自动防止 XSS\n            }\n        })\n}\n\n// 默认导出 i18n 实例\nexport default i18n\n"
  },
  {
    "path": "src/locale/zh-cn.json",
    "content": "{\n    \"anno\": \"批注\",\n    \"annotations\": {\n        \"select\": \"选择\",\n        \"highlight\": \"高亮\",\n        \"strikeout\": \"删除线\",\n        \"underline\": \"下划线\",\n        \"rectangle\": \"矩形\",\n        \"circle\": \"圆形\",\n        \"freehand\": \"自由绘制\",\n        \"freeHighlight\": \"自由高亮\",\n        \"freeText\": \"文字\",\n        \"signature\": \"签名\",\n        \"stamp\": \"盖章\",\n        \"note\": \"注解\",\n        \"arrow\": \"箭头\",\n        \"cloud\": \"云线\"\n    },\n    \"toolbar\": {\n        \"buttons\": {\n            \"createSignature\": \"创建签名\",\n            \"uploadImages\": \"上传图片\",\n            \"createStamp\": \"创建印章\"\n        },\n        \"message\": {\n            \"selectPosition\": \"请选择放置位置\",\n            \"signatureArea\": \"签名处\",\n            \"uploadArea\": \"上传区域\",\n            \"uploadHint\": \"点击上传或请将图片拖拽到此处，支持格式{{format}}, 最大 {{maxSize}}\"\n        }\n    },\n    \"editor\": {\n        \"text\": {\n            \"startTyping\": \"开始输入...\"\n        },\n        \"stamp\": {\n            \"stampText\": \"印章内容\",\n            \"fontStyle\": \"字体样式\",\n            \"fontFamily\": \"字体\",\n            \"textColor\": \"文字颜色\",\n            \"backgroundColor\": \"背景颜色\",\n            \"borderColor\": \"边框颜色\",\n            \"borderStyle\": \"边框样式\",\n            \"timestampText\": \"时间戳\",\n            \"customTimestamp\": \"自定义\",\n            \"username\": \"用户名\",\n            \"date\": \"日期\",\n            \"time\": \"时间\",\n            \"dateFormat\": \"日期格式\",\n            \"solid\": \"实线\",\n            \"dashed\": \"虚线\",\n            \"defaultText\": \"草稿\"\n        }\n    },\n    \"normal\": {\n        \"ok\": \"确定\",\n        \"cancel\": \"取消\",\n        \"clear\": \"清空\",\n        \"fileSizeLimit\": \"文件大小超出 {{value}} 限制\",\n        \"deleteConfirm\": \"是否删除\",\n        \"yes\": \"是\",\n        \"no\": \"否\",\n        \"example\": \"例如：\",\n        \"color\": \"颜色\",\n        \"export\": \"导出\",\n        \"save\": \"保存\",\n        \"reply\": \"回复\",\n        \"edit\": \"编辑\",\n        \"delete\": \"删除\",\n        \"confirm\": \"确认\",\n        \"unknownUser\": \"不具名用户\",\n        \"processing\": \"处理中，请稍候...\",\n        \"filter\": \"过滤\",\n        \"author\": \"作者\",\n        \"type\": \"类型\",\n        \"selectAll\": \"全选\",\n        \"more\": \"更多\",\n        \"draw\": \"绘制\",\n        \"enter\": \"输入\",\n        \"upload\": \"上传\",\n        \"default\": \"默认\",\n        \"custom\": \"自定义\",\n        \"strokeWidth\": \"笔触宽度\",\n        \"opacity\": \"透明度\"\n    },\n    \"comment\": {\n        \"total\": \" {{value}} 条批注\",\n        \"page\": \"第{{value}}页\",\n        \"status\": {\n            \"accepted\": \"接受\",\n            \"rejected\": \"拒绝\",\n            \"cancelled\": \"取消\",\n            \"completed\": \"完成\",\n            \"none\": \"无\",\n            \"closed\": \"关闭\"\n        },\n        \"statusText\": \"将状态设置为 “{{value}}”\"\n    },\n    \"pdf\": {\n        \"generationSuccess\": \"文件已生成！\"\n    },\n    \"dateFormat\": {\n        \"full\": \"{{year}}-{{month}}-{{day}} {{hour}}:{{minute}}\",\n        \"dayMonth\": \"{{month}}-{{day}}\",\n        \"dayMonthYear\": \"{{year}}-{{month}}-{{day}}\"\n    },\n    \"save\": {\n        \"start\": \"正在保存...\",\n        \"success\": \"保存成功！\",\n        \"fail\": \"保存失败，错误代码： {{value}}\",\n        \"noPostUrl\": \"未找到参数: {{value}}\"\n    },\n    \"load\": {\n        \"fail\": \"外部批注加载失败，{{value}}\"\n    },\n    \"export\": {\n        \"fields\": {\n            \"id\": \"ID\",\n            \"page\": \"页码\",\n            \"author\": \"用户\",\n            \"date\": \"日期\",\n            \"content\": \"内容\",\n            \"status\": \"状态\",\n            \"annotationType\": \"批注类型\",\n            \"recordType\": \"类型\"\n        },\n        \"recordType\": {\n            \"annotation\": \"批注\",\n            \"reply\": \"回复\"\n        }\n    }\n}\n"
  },
  {
    "path": "src/painter/connectorLine.ts",
    "content": "import { IRect } from 'konva/lib/types'\nimport { IAnnotationStore } from '../const/definitions'\nimport { PAINTER_WRAPPER_PREFIX } from './const'\nimport { defaultOptions } from '../const/default_options'\n\nexport class ConnectorLine {\n    private connectionPathElement: SVGPathElement | null = null\n\n    constructor({}: {}) {}\n\n    /**\n     * @description 计算批注图形的位置\n     * @param annotation\n     * @param selectorRect\n     * @returns\n     */\n    private calculateShapeRect(annotation: IAnnotationStore, selectorRect: IRect): IRect {\n        const wrapperId = `${PAINTER_WRAPPER_PREFIX}_page_${annotation.pageNumber}`\n        const konvaContainer = document.querySelector(`#${wrapperId} .konvajs-content`) as HTMLElement | null\n\n        if (!konvaContainer) {\n            console.warn(`[ConnectorLine] 页面容器未找到：${wrapperId}`)\n            return {\n                x: 0,\n                y: 0,\n                width: selectorRect.width,\n                height: selectorRect.height\n            }\n        }\n\n        const containerRect = konvaContainer.getBoundingClientRect()\n\n        const scaleX = 1\n        const scaleY = 1\n\n        const realX = selectorRect.x * scaleX + containerRect.left\n        const realY = selectorRect.y * scaleY + containerRect.top\n\n        return {\n            x: realX,\n            y: realY,\n            width: selectorRect.width,\n            height: selectorRect.height\n        }\n    }\n\n    private calculateAnnotationRect(annotation: IAnnotationStore): IRect {\n        const annotationNode = document.getElementById(`annotation-${annotation.id}`) as HTMLDivElement\n        const annotationRect = annotationNode.getBoundingClientRect()\n        return {\n            x: annotationRect.x,\n            y: annotationRect.y,\n            width: annotationRect.width,\n            height: annotationRect.height\n        }\n    }\n\n    /**\n     * @description 根据图形右侧和批注左侧绘制带弯折的连接线（L 型）\n     */\n    private calculateConnectionPath(shapeRect: IRect, annotationRect: IRect): string {\n        const shapeRightX = shapeRect.x + shapeRect.width\n        const shapeCenterY = shapeRect.y + shapeRect.height / 2\n\n        const annotationLeftX = annotationRect.x\n        const annotationCenterY = annotationRect.y + 10\n\n        const bendX = (shapeRightX + annotationLeftX) / 2\n\n        return `\n            M ${shapeRightX} ${shapeCenterY}\n            L ${bendX} ${shapeCenterY}\n            L ${bendX} ${annotationCenterY}\n            L ${annotationLeftX} ${annotationCenterY}\n        `.trim()\n    }\n\n    /**\n     * @description 创建箭头\n     * @param svg\n     */\n    private createArrowMarkerDefs(svg: SVGSVGElement) {\n        const svgNS = 'http://www.w3.org/2000/svg'\n\n        const defs = document.createElementNS(svgNS, 'defs')\n\n        const marker = document.createElementNS(svgNS, 'marker')\n        marker.setAttribute('id', 'arrow')\n        marker.setAttribute('viewBox', '0 0 10 10')\n        marker.setAttribute('refX', '0') // 改为起点对齐\n        marker.setAttribute('refY', '5')\n        marker.setAttribute('markerWidth', '6')\n        marker.setAttribute('markerHeight', '6')\n        marker.setAttribute('orient', 'auto')\n\n        const path = document.createElementNS(svgNS, 'path')\n        path.setAttribute('d', 'M 10 0 L 0 5 L 10 10 z') // 箭头朝左\n        path.setAttribute('fill', defaultOptions.connectorLine.COLOR)\n\n        marker.appendChild(path)\n        defs.appendChild(marker)\n\n        svg.appendChild(defs)\n    }\n\n    /**\n     * @description 只触发动画（用于首次显示）\n     */\n    private animateLine() {\n        if (this.connectionPathElement) {\n            this.connectionPathElement.style.strokeDashoffset = '0'\n        }\n    }\n\n    private shouldDrawBasedOnDistance(shapeRect: IRect, annotationRect: IRect, minDistance = 30): boolean {\n        const shapeRightX = shapeRect.x + shapeRect.width\n        const annotationLeftX = annotationRect.x\n\n        return annotationLeftX - shapeRightX > minDistance\n    }\n\n    private shouldDrawBasedOnScreen(minWidth = 768): boolean {\n        return window.innerWidth > minWidth\n    }\n\n    public drawConnection(annotation: IAnnotationStore, selectorRect: IRect) {\n        requestAnimationFrame(() => {\n            this.clearConnection()\n            if (!this.shouldDrawBasedOnScreen()) return\n            if (!document.getElementById(`annotation-${annotation.id}`)) return\n            const shapeRect = this.calculateShapeRect(annotation, selectorRect)\n\n            const annotationRect = this.calculateAnnotationRect(annotation)\n\n            if (!this.shouldDrawBasedOnDistance(shapeRect, annotationRect)) return\n\n            const pathData = this.calculateConnectionPath(shapeRect, annotationRect)\n\n            const svgNS = 'http://www.w3.org/2000/svg'\n\n            if (!this.connectionPathElement) {\n                const svg = document.createElementNS(svgNS, 'svg')\n                const path = document.createElementNS(svgNS, 'path')\n\n                path.setAttribute('d', pathData)\n                const length = path.getTotalLength()\n\n                // 样式设置\n                path.setAttribute('stroke', defaultOptions.connectorLine.COLOR)\n                path.setAttribute('stroke-width', `${defaultOptions.connectorLine.WIDTH}`)\n                path.setAttribute('fill', 'none')\n                path.setAttribute('stroke-linecap', 'round')\n                path.setAttribute('opacity', `${defaultOptions.connectorLine.OPACITY}`)\n                path.setAttribute('stroke-dasharray', `${length}`)\n                path.setAttribute('stroke-dashoffset', `${length}`)\n                path.setAttribute('marker-start', 'url(#arrow)') // 👈 添加箭头\n                path.style.transition = 'stroke-dashoffset 0.5s ease-in-out'\n                path.style.transform = 'translateZ(0)'\n\n                // 添加 marker 到 defs\n                this.createArrowMarkerDefs(svg)\n\n                svg.appendChild(path)\n                svg.style.position = 'absolute'\n                svg.style.top = '0'\n                svg.style.left = '0'\n                svg.style.width = '100vw'\n                svg.style.height = '100vh'\n                svg.style.pointerEvents = 'none'\n                svg.style.zIndex = '98'\n                svg.id = 'connector-svg'\n\n                this.connectionPathElement = path\n\n                document.body.appendChild(svg)\n                this.animateLine()\n            } else {\n                this.connectionPathElement.setAttribute('d', pathData)\n                const length = this.connectionPathElement.getTotalLength()\n                this.connectionPathElement.setAttribute('stroke-dasharray', `${length}`)\n                this.connectionPathElement.setAttribute('stroke-dashoffset', `${length}`)\n                this.connectionPathElement.style.strokeDashoffset = '0'\n            }\n        })\n    }\n\n    /**\n     * @description 移除连接线\n     */\n    public clearConnection() {\n        const svgContainer = document.getElementById('connector-svg')\n        if (svgContainer) {\n            svgContainer.remove() // 从 DOM 删除\n        }\n        this.connectionPathElement = null // 清空引用\n    }\n}\n"
  },
  {
    "path": "src/painter/const.ts",
    "content": "/**\n * 常量：PdfjsAnnotationExtension 的样式前缀\n */\nconst STYLE_PREFIX = 'PdfjsAnnotationExtension'\n\n/**\n * 常量：Painter 组件的包裹器样式前缀\n */\nexport const PAINTER_WRAPPER_PREFIX = `${STYLE_PREFIX}_painter_wrapper`\n\n/**\n * 常量：表示当前是否处于绘画模式的样式名称\n */\nexport const PAINTER_IS_PAINTING_STYLE = `${STYLE_PREFIX}_is_painting`\n\n/**\n * 常量：绘画类型的样式前缀\n */\nexport const PAINTER_PAINTING_TYPE = `${STYLE_PREFIX}_painting_type`\n\n/**\n * 常量：形状组的样式名称\n */\nexport const SHAPE_GROUP_NAME = `${STYLE_PREFIX}_shape_group`\n\n/**\n * 常量：选择器悬停时的样式名称\n */\nexport const SELECTOR_HOVER_STYLE = `${STYLE_PREFIX}_selector_hover`\n\n/**\n * 常量：定义用于设置鼠标指针样式的 CSS 变量\n */\nexport const CURSOR_CSS_PROPERTY = `--${STYLE_PREFIX}-image-cursor`\n\n"
  },
  {
    "path": "src/painter/editor/editor.ts",
    "content": "import Konva from 'konva'\nimport { KonvaEventObject } from 'konva/lib/Node'\nimport { PDFViewerApplication } from 'pdfjs'\n\nimport { AnnotationType, IAnnotationContentsObj, IAnnotationStore, IAnnotationStyle, IAnnotationType } from '../../const/definitions'\nimport { formatTimestamp, generateUUID } from '../../utils/utils'\nimport { SHAPE_GROUP_NAME } from '../const'\n\n/**\n * IEditorOptions 接口定义了编辑器的初始化选项。\n */\nexport interface IEditorOptions {\n    userName: string\n    pdfViewerApplication: PDFViewerApplication\n    konvaStage: Konva.Stage // Konva Stage对象\n    pageNumber: number // 页面编号\n    annotation: IAnnotationType | null // 当前注解对象，可以为 null\n    /**\n     * 添加形状组的回调函数。\n     * @param shapeGroup 添加的形状组对象\n     * @param pdfjsAnnotationStorage PDF.js 注解存储对象\n     * @param annotationContent 注解内容，可选\n     */\n    onAdd: (annotationStore: IAnnotationStore) => void\n\n    onChange:(id: string, updates: Partial<IAnnotationStore>) => void // 更改回调函数\n}\n\n/**\n * IShapeGroup 接口定义了形状组的基本结构。\n */\nexport interface IShapeGroup {\n    id: string // 形状组的唯一标识符\n    konvaGroup: Konva.Group // Konva.Group 对象\n    isDone: boolean // 标识形状组是否已完成\n    pageNumber: number // 所属页面的页码\n    annotation?: IAnnotationType // 关联的注解对象\n}\n\n/**\n * Editor 是一个抽象类，定义了编辑器的基本行为和属性。\n */\nexport abstract class Editor {\n    protected userName: string\n    protected pdfViewerApplication: PDFViewerApplication\n    public readonly id: string // 编辑器实例的唯一标识符\n    public readonly onAdd: (annotationStore: IAnnotationStore) => void // 添加形状组的回调函数\n    public readonly onChange: (id: string, updates: Partial<IAnnotationStore>) => void // 更改回调函数\n    protected konvaStage: Konva.Stage // Konva Stage对象\n    protected readonly pageNumber: number // 页面编号\n    protected currentAnnotation: IAnnotationType | null // 当前注解对象，可以为 null\n    protected isPainting: boolean // 是否正在绘制标志位\n    public shapeGroupStore: Map<string, IShapeGroup> = new Map() // 存储形状组的 Map\n    public currentShapeGroup: IShapeGroup | null // 当前操作的形状组，可以为 null\n\n    static MinSize = 8 // 最小尺寸常量\n\n    /**\n     * Editor 类的构造函数。\n     * @param options 初始化编辑器的选项\n     */\n    constructor({ userName, konvaStage, pageNumber, annotation, onAdd, editorType, pdfViewerApplication, onChange }: IEditorOptions & { editorType: AnnotationType }) {\n        this.userName = userName\n        this.pdfViewerApplication = pdfViewerApplication\n        this.id = `${pageNumber}_${editorType}` // 构造唯一标识符\n        this.konvaStage = konvaStage // 初始化 Konva Stage对象\n        this.pageNumber = pageNumber // 初始化页面编号\n        this.currentAnnotation = annotation // 初始化当前注解对象\n        this.isPainting = false // 初始化绘制状态为 false\n        this.currentShapeGroup = null // 初始化当前形状组为 null\n        this.onAdd = onAdd // 初始化添加形状组的回调函数\n        this.onChange = onChange || (() => {}) // 初始更改回调函数，如果未提供则使用默认空函数\n        this.disableEditMode() // 禁用编辑模式\n        this.enableEditMode() // 启用编辑模式\n    }\n\n    /**\n     * 发送添加事件的私有方法，调用 onAdd 回调函数。\n     * @param pdfjsAnnotationStorage PDF.js 注解存储对象\n     * @param annotationContent 注解内容，可选\n     */\n    private dispatchAddEvent({\n        shapeGroup,\n        contentsObj,\n        color,\n        fontSize\n    }: {\n        shapeGroup: IShapeGroup\n        contentsObj?: IAnnotationContentsObj\n        pageRanges?: number[]\n        color?: string\n        fontSize?: number\n    }) {\n        const { id, pageNumber, konvaGroup, annotation } = shapeGroup\n        const annotationStore: IAnnotationStore = {\n            id,\n            pageNumber,\n            konvaString: konvaGroup.toJSON(),\n            konvaClientRect: Konva.Node.create(konvaGroup.toJSON()).getClientRect(),\n            title: this.userName,\n            type: annotation.type,\n            pdfjsType: annotation.pdfjsAnnotationType,\n            pdfjsEditorType: annotation.pdfjsEditorType,\n            subtype: annotation.subtype,\n            color,\n            fontSize,\n            date: formatTimestamp(Date.now()),\n            contentsObj,\n            comments: [],\n            resizable: annotation.resizable,\n            draggable: annotation.draggable\n        }\n        this.onAdd(annotationStore) // 调用 onAdd 回调函数\n    }\n\n    /**\n     * @description 分发样式更改事件，输出样式更改的日志。\n     */\n    private dispatchChangedEvent(id: string, updates: Partial<IAnnotationStore>) {\n        this.onChange(id, updates) // 调用 onStyleChanged 回调函数\n    }\n\n    /**\n     * 启用编辑模式，监听 Konva Stage的鼠标事件。\n     */\n    protected enableEditMode() {\n        this.konvaStage.on('mousedown', e => {\n            if (e.evt.button === 0) {\n                this.mouseDownHandler(e) // 处理鼠标按下事件\n            }\n        })\n        this.konvaStage.on('mousemove', e => {\n            this.mouseMoveHandler(e) // 处理鼠标移动事件\n        })\n        this.konvaStage.on('mouseup', e => {\n            if (e.evt.button === 0) {\n                this.mouseUpHandler(e) // 处理鼠标松开事件\n            }\n        })\n\n        // Mobile Touch Events\n        this.konvaStage.on('touchstart', e => {\n            if (e.evt.touches.length === 1) {\n                this.mouseDownHandler(e)\n            }\n        })\n        this.konvaStage.on('touchmove', e => {\n            if (e.evt.touches.length === 1) {\n                this.mouseMoveHandler(e)\n            }\n        })\n        this.konvaStage.on('touchend', e => {\n            this.mouseUpHandler(e)\n        })\n    }\n\n    /**\n     * 禁用编辑模式，取消 Konva Stage的鼠标事件监听。\n     */\n    protected disableEditMode() {\n        this.isPainting = false // 设置绘制状态为 false\n        this.konvaStage.off('click')\n        this.konvaStage.off('mousedown')\n        this.konvaStage.off('mousemove')\n        this.konvaStage.off('mouseup')\n        this.konvaStage.off('touchstart')\n        this.konvaStage.off('touchmove')\n        this.konvaStage.off('touchend')\n    }\n\n    /**\n     * 获取背景图层，如果传入了 konvaStage 则使用传入的Stage，否则使用类中的Stage。\n     * @param konvaStage 可选参数，传入的 Konva Stage对象\n     * @returns 返回第一个图层作为背景图层\n     * @protected\n     */\n    protected getBgLayer(konvaStage?: Konva.Stage): Konva.Layer {\n        return konvaStage ? konvaStage.getLayers()[0] : this.konvaStage.getLayers()[0]\n    }\n\n    /**\n     * 删除指定 ID 的形状组，并在Stage上销毁对应的 Konva.Group 对象。\n     * @param id 要删除的形状组的 ID\n     * @protected\n     */\n    protected delShapeGroup(id: string) {\n        this.shapeGroupStore.delete(id) // 从 shapeGroupStore 中删除指定 ID 的形状组\n        const group = this.konvaStage.findOne(node => node.getType() === 'Group' && node.id() === id) // 查找对应 ID 的 Konva.Group 对象\n        if (group) {\n            group.destroy() // 销毁 Konva.Group 对象\n        }\n    }\n\n    /**\n     * @description 获取指定 ID 的形状组。\n     * @param id\n     * @returns\n     */\n    protected getShapeGroupById(id: string): Konva.Group {\n        const group = this.konvaStage.findOne(node => node.getType() === 'Group' && node.id() === id) // 查找对应 ID 的 Konva.Group 对象\n        return group as Konva.Group // 返回找到的 Konva.Group 对象\n    }\n\n    /**\n     * 设置指定 ID 的形状组为已完成状态，并触发添加事件。\n     * @protected\n     */\n    protected setShapeGroupDone({\n        id,\n        contentsObj,\n        color,\n        fontSize\n    }: {\n        id: string\n        contentsObj?: IAnnotationContentsObj\n        pageRanges?: number[]\n        color?: string\n        fontSize?: number\n    }) {\n        const shapeGroup = this.shapeGroupStore.get(id) // 获取指定 ID 的形状组对象\n        if (shapeGroup) {\n            shapeGroup.isDone = true // 设置形状组为已完成状态\n            this.dispatchAddEvent({\n                shapeGroup,\n                contentsObj,\n                color,\n                fontSize\n            }) // 触发添加事件\n        }\n    }\n\n    /**\n     * @description 设置指定 ID 的形状组的更改状态，并触发更改事件。\n     */\n    protected setChanged(id: string, updates: Partial<IAnnotationStore>) {\n        this.dispatchChangedEvent(id, updates)\n    }\n\n    /**\n     * 获取当前形状组中指定类型的子节点。\n     * @param className Konva 形状的类名，例如 'Rect'\n     * @returns 返回符合指定类名的节点数组\n     * @protected\n     */\n    protected getNodesByClassName<T extends Konva.Node>(className: string): T[] {\n        const children = this.currentShapeGroup.konvaGroup.getChildren((node: Konva.Node) => node.getClassName() === className) // 获取当前形状组中指定类名的子节点\n        return children as unknown as T[] // 返回子节点数组\n    }\n\n    /**\n     * 获取指定 Konva.Group 中指定类型的子节点。\n     * @param group 指定的 Konva.Group 对象\n     * @param className Konva 形状的类名，例如 'Rect'\n     * @returns 返回符合指定类名的节点数组\n     * @protected\n     */\n    protected getGroupNodesByClassName<T extends Konva.Node>(group: Konva.Group, className: string): T[] {\n        const children = group.getChildren((node: Konva.Node) => node.getClassName() === className) // 获取指定 Konva.Group 中指定类名的子节点\n        return children as unknown as T[] // 返回子节点数组\n    }\n\n    /**\n     * 更新 shapeGroupStore 中指定 ID 的 Konva.Group 对象。\n     * @param id 需要更新的形状组的 ID\n     * @param newKonvaGroup 用于更新的新 Konva.Group 对象\n     * @returns 返回更新后的形状组对象，如果未找到对应 ID 的形状组则返回 null\n     * @protected\n     */\n    protected updateKonvaGroup(id: string, newKonvaGroup: Konva.Group): IShapeGroup | null {\n        if (this.shapeGroupStore.has(id)) {\n            // 检查 shapeGroupStore 中是否存在指定 ID 的形状组\n            const shapeGroup = this.shapeGroupStore.get(id) // 获取当前形状组\n            if (shapeGroup) {\n                shapeGroup.konvaGroup = newKonvaGroup // 更新 Konva.Group 对象\n                this.shapeGroupStore.set(id, shapeGroup) // 更新存储中的形状组对象\n                return shapeGroup // 返回更新后的形状组对象\n            }\n        } else {\n            console.warn(`ShapeGroup with id ${id} not found.`) // 输出警告信息，指定 ID 的形状组未找到\n        }\n        return null // 如果未找到形状组，则返回 null\n    }\n\n    /**\n     * 创建一个新的形状组，并添加到 shapeGroupStore 中。\n     * @returns 返回新创建的形状组对象\n     * @protected\n     */\n    protected createShapeGroup(): IShapeGroup {\n        const id = generateUUID() // 生成新的唯一标识符\n        const group = new Konva.Group({\n            // 创建新的 Konva.Group 对象\n            draggable: false,\n            name: SHAPE_GROUP_NAME,\n            id\n        })\n        const shapeGroup: IShapeGroup = {\n            // 创建形状组对象\n            id,\n            konvaGroup: group,\n            pageNumber: this.pageNumber,\n            annotation: this.currentAnnotation,\n            isDone: false\n        }\n        this.shapeGroupStore.set(id, shapeGroup) // 将形状组对象添加到 shapeGroupStore 中\n        return shapeGroup // 返回新创建的形状组对象\n    }\n\n    /**\n     * 处理鼠标按下事件的抽象方法，子类需实现具体逻辑。\n     * @param e Konva 事件对象\n     * @protected\n     */\n    protected abstract mouseDownHandler(e: KonvaEventObject<MouseEvent | TouchEvent>): void\n\n    /**\n     * 处理鼠标移动事件的抽象方法，子类需实现具体逻辑。\n     * @param e Konva 事件对象\n     * @protected\n     */\n    protected abstract mouseMoveHandler(e: KonvaEventObject<MouseEvent | TouchEvent>): void\n\n    /**\n     * 处理鼠标松开事件的抽象方法，子类需实现具体逻辑。\n     * @param e Konva 事件对象\n     * @protected\n     */\n    protected abstract mouseUpHandler(e: KonvaEventObject<MouseEvent | TouchEvent>): void\n\n    /**\n     * @description 更新指定注解对象的样式。\n     * @param annotationStore \n     * @param style\n     */\n    protected abstract changeStyle(annotationStore: IAnnotationStore, style: IAnnotationStyle): void // 抽象方法，子类需实现具体样式更新逻辑\n\n    /**\n     * 激活编辑器，重新设置 Konva Stage和当前注解对象，并启用编辑模式。\n     * @param konvaStage 新的 Konva Stage对象\n     * @param annotation 新的注解对象\n     */\n    public activate(konvaStage: Konva.Stage, annotation: IAnnotationType) {        \n        this.konvaStage = konvaStage // 更新 Konva Stage对象\n        this.currentAnnotation = annotation // 更新当前注解对象\n        this.isPainting = false // 重置绘制状态\n        this.disableEditMode() // 禁用编辑模式\n        this.enableEditMode() // 启用编辑模式\n    }\n\n    /**\n     * 将序列化的 Konva.Group 添加到图层。\n     * @param konvaStage Konva Stage对象\n     * @param konvaString 序列化的 Konva.Group 字符串表示\n     */\n    public addSerializedGroupToLayer(konvaStage: Konva.Stage, konvaString: string) {\n        this.konvaStage = konvaStage // 更新 Konva Stage对象\n        const ghostGroup = Konva.Node.create(konvaString) // 根据序列化字符串创建 Konva.Group 对象\n        const id = ghostGroup.id()\n        this.getBgLayer(konvaStage).add(ghostGroup) // 将 Konva.Group 对象添加到背景图层\n        if (this.shapeGroupStore.has(id)) return\n        const shapeGroup: IShapeGroup = {\n            // 创建形状组对象\n            id,\n            konvaGroup: ghostGroup,\n            pageNumber: this.pageNumber,\n            isDone: true\n        }\n        this.shapeGroupStore.set(id, shapeGroup)\n    }\n\n    /**\n     * 删除指定 ID 的形状组。\n     * @param id 要删除的形状组的 ID\n     */\n    public deleteGroup(id: string, konvaStage: Konva.Stage) {\n        this.konvaStage = konvaStage\n        this.delShapeGroup(id) // 调用 delShapeGroup 方法删除指定 ID 的形状组\n    }\n\n    /**\n     * @description 更新指定 ID 的形状组的样式。\n     * @param annotationStore \n     * @param style \n     */\n    public updateStyle(annotationStore: IAnnotationStore, style: IAnnotationStyle) {\n        this.changeStyle(annotationStore, style) // 调用子类实现的样式更新方法\n    }\n\n    /**\n     * 静态属性，存储所有的 Timer 实例。\n     */\n    static Timer: { [pageNumber: number]: number } = {}\n\n    /**\n     * 静态方法，清除指定页面的定时器。\n     * @param pageNumber 页面编号\n     */\n    static TimerClear(pageNumber: number) {\n        const timer = Editor.Timer[pageNumber] // 获取指定页面的定时器\n        if (timer) {\n            window.clearTimeout(timer) // 清除定时器\n        }\n    }\n\n    /**\n     * 静态方法，启动指定页面的定时器。\n     * @param pageNumber 页面编号\n     * @param callback 定时器回调函数，接受页面编号作为参数\n     */\n    static TimerStart(pageNumber: number, callback: (pageNumber: number) => void) {\n        Editor.Timer[pageNumber] = window.setTimeout(() => {\n            // 设置定时器\n            if (typeof callback === 'function') {\n                callback(pageNumber) // 执行定时器回调函数\n            }\n        }, 1000)\n    }\n}\n"
  },
  {
    "path": "src/painter/editor/editor_arrow.ts",
    "content": "import Konva from 'konva'\nimport { KonvaEventObject } from 'konva/lib/Node'\n\nimport { AnnotationType, IAnnotationStore, IAnnotationStyle } from '../../const/definitions'\nimport { Editor, IEditorOptions } from './editor'\n\n/**\n * 箭头编辑器类，继承自基础编辑器类 Editor，用于在画布上绘制箭头直线。\n */\nexport class EditorArrow extends Editor {\n    private arrow: Konva.Arrow | null // 当前正在绘制的箭头对象\n    private startPoint: { x: number; y: number } // 起点坐标\n\n    constructor(EditorOptions: IEditorOptions) {\n        super({ ...EditorOptions, editorType: AnnotationType.ARROW })\n        this.arrow = null\n        this.startPoint = { x: 0, y: 0 }\n    }\n\n    protected mouseDownHandler(e: KonvaEventObject<MouseEvent | TouchEvent>) {\n        if (e.currentTarget !== this.konvaStage) return\n\n        this.arrow = null\n        this.isPainting = true\n        this.currentShapeGroup = this.createShapeGroup()\n        this.getBgLayer().add(this.currentShapeGroup.konvaGroup)\n\n        const pos = this.konvaStage.getRelativePointerPosition()\n        this.startPoint = { x: pos.x, y: pos.y }\n\n        this.arrow = new Konva.Arrow({\n            points: [pos.x, pos.y, pos.x, pos.y],\n            stroke: this.currentAnnotation.style.color,\n            strokeWidth: this.currentAnnotation.style.strokeWidth,\n            fill: this.currentAnnotation.style.color,\n            pointerLength: 10,\n            pointerWidth: 10,\n            hitStrokeWidth: 20, // 设置点击检测的宽度\n            lineCap: 'round',\n            lineJoin: 'round',\n            strokeScaleEnabled: false,\n            visible: false,\n            opacity: this.currentAnnotation.style.opacity\n        })\n\n        this.currentShapeGroup.konvaGroup.add(this.arrow)\n        window.addEventListener('mouseup', this.globalPointerUpHandler)\n    }\n\n    protected mouseMoveHandler(e: KonvaEventObject<MouseEvent | TouchEvent>) {\n        if (!this.isPainting) return\n        e.evt.preventDefault()\n\n        const pos = this.konvaStage.getRelativePointerPosition()\n        const points = [this.startPoint.x, this.startPoint.y, pos.x, pos.y]\n\n        this.arrow?.show()\n        this.arrow?.setAttrs({ points })\n    }\n\n    protected mouseUpHandler() {\n        if (!this.isPainting) return\n        this.isPainting = false\n\n        const group = this.arrow?.getParent()\n        if (!this.arrow?.isVisible() && group?.getType() === 'Group') {\n            this.delShapeGroup(group.id())\n            return\n        }\n\n        if (this.isTooShort()) {\n            this.arrow?.destroy()\n            this.delShapeGroup(group.id())\n            this.arrow = null\n            return\n        }\n\n        this.setShapeGroupDone({\n            id: group.id(),\n            color: this.currentAnnotation.style.color,\n            contentsObj: {\n                text: ''\n            }\n        })\n\n        this.arrow = null\n    }\n\n    private globalPointerUpHandler = (e: MouseEvent) => {\n        if (e.button !== 0) return\n        this.mouseUpHandler()\n        window.removeEventListener('mouseup', this.globalPointerUpHandler)\n    }\n\n    private isTooShort(): boolean {\n        if (!this.arrow) return true\n        const points = this.arrow.points()\n        if (points.length !== 4) return true\n        const dx = points[2] - points[0]\n        const dy = points[3] - points[1]\n        return Math.hypot(dx, dy) < Editor.MinSize\n    }\n\n    /**\n     * @description 更改注释样式\n     * @param annotationStore\n     * @param styles\n     */\n    protected changeStyle(annotationStore: IAnnotationStore, styles: IAnnotationStyle): void {\n        const id = annotationStore.id\n        const group = this.getShapeGroupById(id)\n        if (group) {\n            group.getChildren().forEach(shape => {\n                if (shape instanceof Konva.Arrow) {\n                    if (styles.color !== undefined) {\n                        shape.stroke(styles.color)\n                        shape.fill(styles.color)\n                    }\n                    if (styles.strokeWidth !== undefined) {\n                        const sw = styles.strokeWidth\n                        shape.strokeWidth(sw)\n\n                        const ratio = 5\n                        const minSize = 6\n                        const maxSize = 30\n\n                        const pointerSize = Math.max(minSize, Math.min(maxSize, sw * ratio))\n                        shape.pointerLength(pointerSize)\n                        shape.pointerWidth(pointerSize)\n                    }\n                    if (styles.opacity !== undefined) {\n                        shape.opacity(styles.opacity)\n                    }\n                }\n            })\n\n            const changedPayload: { konvaString: string; color?: string } = {\n                konvaString: group.toJSON()\n            }\n\n            if (styles.color !== undefined) {\n                changedPayload.color = styles.color\n            }\n\n            this.setChanged(id, changedPayload)\n        }\n    }\n}\n"
  },
  {
    "path": "src/painter/editor/editor_circle.ts",
    "content": "import Konva from 'konva'\nimport { KonvaEventObject } from 'konva/lib/Node'\n\nimport { AnnotationType, IAnnotationStore, IAnnotationStyle } from '../../const/definitions'\nimport { Editor, IEditorOptions } from './editor'\n\n/**\n * 椭圆编辑器类，继承自基础编辑器类 Editor，用于在画布上绘制椭圆。\n */\nexport class EditorCircle extends Editor {\n    private ellipse: Konva.Ellipse | null // 当前正在绘制的椭圆对象\n    private vertex: { x: number; y: number } // 用于存储椭圆的起点（顶点）坐标\n\n    /**\n     * 构造函数，初始化椭圆编辑器。\n     * @param EditorOptions 编辑器选项接口\n     */\n    constructor(EditorOptions: IEditorOptions) {\n        super({ ...EditorOptions, editorType: AnnotationType.CIRCLE })\n        this.ellipse = null\n        this.vertex = { x: 0, y: 0 }\n    }\n\n    /**\n     * 处理鼠标或触摸指针按下事件，开始绘制椭圆。\n     * @param e Konva 事件对象\n     */\n    protected mouseDownHandler(e: KonvaEventObject<MouseEvent | TouchEvent>) {\n        if (e.currentTarget !== this.konvaStage) {\n            return\n        }\n        this.ellipse = null // 重置当前椭圆对象\n        this.isPainting = true // 设置绘制状态为真\n        this.currentShapeGroup = this.createShapeGroup() // 创建新的形状组\n        this.getBgLayer().add(this.currentShapeGroup.konvaGroup) // 将形状组添加到背景层\n\n        // 获取当前指针位置并存储为椭圆的起点（顶点）坐标\n        const pos = this.konvaStage.getRelativePointerPosition()\n        this.vertex = { x: pos.x, y: pos.y }\n\n        // 初始化椭圆对象，初始半径为0\n        this.ellipse = new Konva.Ellipse({\n            radiusX: 0,\n            radiusY: 0,\n            x: pos.x,\n            y: pos.y,\n            // do not scale strokes\n            strokeScaleEnabled: false,\n            visible: false, // 初始状态为不可见\n            stroke: this.currentAnnotation.style.color, // 设置椭圆边框颜色\n            strokeWidth: this.currentAnnotation.style.strokeWidth, // 设置椭圆边框宽度\n            opacity: this.currentAnnotation.style.opacity // 设置椭圆透明度\n        })\n\n        // 将椭圆对象添加到当前形状组中\n        this.currentShapeGroup.konvaGroup.add(this.ellipse)\n        window.addEventListener('mouseup', this.globalPointerUpHandler) // 添加全局鼠标释放事件监听器\n    }\n\n    /**\n     * 处理鼠标或触摸指针移动事件，绘制椭圆。\n     * @param e Konva 事件对象\n     */\n    protected mouseMoveHandler(e: KonvaEventObject<MouseEvent | TouchEvent>) {\n        if (!this.isPainting) {\n            return\n        }\n        e.evt.preventDefault() // 阻止默认事件，如滚动页面\n\n        this.ellipse.show() // 显示当前绘制的椭圆\n\n        // 获取当前指针位置并计算椭圆的半径\n        const pos = this.konvaStage.getRelativePointerPosition()\n        const radiusX = Math.abs(pos.x - this.vertex.x) / 2\n        const radiusY = Math.abs(pos.y - this.vertex.y) / 2\n\n        // 计算椭圆的中心点和半径，并更新椭圆属性\n        const areaAttr = {\n            x: (pos.x - this.vertex.x) / 2 + this.vertex.x,\n            y: (pos.y - this.vertex.y) / 2 + this.vertex.y,\n            radiusX,\n            radiusY\n        }\n\n        this.ellipse.setAttrs(areaAttr)\n    }\n\n    /**\n     * 处理鼠标或触摸指针释放事件，完成椭圆的绘制。\n     */\n    protected mouseUpHandler() {\n        if (!this.isPainting) {\n            return\n        }\n        this.isPainting = false // 结束绘制状态\n\n        // 如果图形是隐藏状态，将图形从画布和 MAP 上移除\n        const group = this.ellipse.getParent()\n        if (!this.ellipse.isVisible() && group.getType() === 'Group') {\n            this.delShapeGroup(group.id())\n            return\n        }\n\n        if (this.isTooSmall()) {\n            // 如果椭圆太小，则销毁椭圆对象并移除形状组\n            this.ellipse.destroy()\n            this.delShapeGroup(group.id())\n            this.ellipse = null\n            return\n        }\n\n        this.setShapeGroupDone({\n            id: group.id(),\n            color: this.currentAnnotation.style.color,\n            contentsObj: {\n                text: ''\n            }\n        })\n        this.ellipse = null // 重置当前椭圆对象为 null\n    }\n\n    /**\n     * 全局鼠标释放事件处理器，仅处理左键释放事件。\n     * @param e MouseEvent 对象\n     */\n    private globalPointerUpHandler = (e: MouseEvent) => {\n        if (e.button !== 0) return // 只处理左键释放事件\n        this.mouseUpHandler() // 调用指针释放处理方法\n        window.removeEventListener('mouseup', this.globalPointerUpHandler) // 移除全局鼠标释放事件监听器\n    }\n\n    /**\n     * 判断椭圆是否太小。\n     * @returns 如果椭圆的宽度或高度小于最小尺寸，返回 true，否则返回 false。\n     */\n    private isTooSmall(): boolean {\n        const { width, height } = this.ellipse.size()\n        return Math.max(width, height) < Editor.MinSize\n    }\n\n    /**\n     * @description 更改注释样式\n     * @param annotationStore\n     * @param styles\n     */\n    protected changeStyle(annotationStore: IAnnotationStore, styles: IAnnotationStyle): void {\n        const id = annotationStore.id\n        const group = this.getShapeGroupById(id)\n        if (group) {\n            group.getChildren().forEach(shape => {\n                if (shape instanceof Konva.Ellipse) {\n                    if (styles.color !== undefined) {\n                        shape.stroke(styles.color)\n                    }\n                    if (styles.strokeWidth !== undefined) {\n                        shape.strokeWidth(styles.strokeWidth)\n                    }\n                    if (styles.opacity !== undefined) {\n                        shape.opacity(styles.opacity)\n                    }\n                }\n            })\n\n            const changedPayload: { konvaString: string; color?: string } = {\n                konvaString: group.toJSON()\n            }\n\n            if (styles.color !== undefined) {\n                changedPayload.color = styles.color\n            }\n\n            this.setChanged(id, changedPayload)\n        }\n    }\n}\n"
  },
  {
    "path": "src/painter/editor/editor_cloud.ts",
    "content": "import Konva from 'konva'\nimport { KonvaEventObject } from 'konva/lib/Node'\nimport { AnnotationType, IAnnotationStore, IAnnotationStyle } from '../../const/definitions'\nimport { Editor, IEditorOptions } from './editor'\n\nexport class EditorCloud extends Editor {\n    private cloudPath: Konva.Path | null = null\n    private points: { x: number; y: number }[] = []\n    private startRect: Konva.Rect | null = null\n    private readonly startRectSize = 12\n\n    constructor(options: IEditorOptions) {\n        super({ ...options, editorType: AnnotationType.CLOUD })\n        this.konvaStage.on('dblclick', this.handleDoubleClick)\n        window.addEventListener('keyup', this.handleKeyUp)\n    }\n\n    private handleKeyUp = (e: KeyboardEvent) => {\n        if (e.key === 'Escape' && this.isPainting) {\n            this.cancelDrawing()\n        }\n    }\n\n    private cancelDrawing() {\n        this.isPainting = false\n        this.points = []\n\n        if (this.cloudPath) {\n            this.cloudPath.destroy()\n            this.cloudPath = null\n        }\n\n        if (this.startRect) {\n            this.startRect.destroy()\n            this.startRect = null\n        }\n\n        if (this.currentShapeGroup) {\n            this.delShapeGroup(this.currentShapeGroup.konvaGroup.id())\n            this.currentShapeGroup = null\n        }\n\n        this.getBgLayer().batchDraw()\n    }\n\n    protected mouseDownHandler(e: KonvaEventObject<MouseEvent | TouchEvent>) {\n        const pos = this.konvaStage.getRelativePointerPosition()\n        this.points.push(pos)\n\n        if (!this.isPainting) {\n            this.isPainting = true\n            this.currentShapeGroup = this.createShapeGroup()\n            this.getBgLayer().add(this.currentShapeGroup.konvaGroup)\n\n            this.cloudPath = new Konva.Path({\n                data: '',\n                stroke: this.currentAnnotation.style.color,\n                strokeWidth: this.currentAnnotation.style.strokeWidth,\n                fillEnabled: false,\n                lineJoin: 'round',\n                lineCap: 'round',\n                hitStrokeWidth: 20, // 设置点击检测的宽度\n                opacity: this.currentAnnotation.style.opacity\n            })\n\n            this.currentShapeGroup.konvaGroup.add(this.cloudPath)\n\n            // 添加起点提示矩形\n            this.drawStartRect(pos)\n        }\n\n        this.updateCloudPreview()\n    }\n\n    protected mouseMoveHandler(e: KonvaEventObject<MouseEvent | TouchEvent>) {\n        if (!this.isPainting || !this.cloudPath) return\n        const pos = this.konvaStage.getRelativePointerPosition()\n        this.updateCloudPreview(pos)\n    }\n\n    protected mouseUpHandler(e?: KonvaEventObject<MouseEvent | TouchEvent>) {\n        // 空实现以符合抽象基类要求\n    }\n\n    /**\n     * @description 处理双击事件，完成云朵绘制\n     * @returns\n     */\n    private handleDoubleClick = () => {\n        if (!this.isPainting || this.points.length < 3) return\n        this.isPainting = false\n\n        if (!this.cloudPath) return\n\n        const closedPoints = [...this.points, this.points[0]]\n        const pathData = this.generateCloudPathData(closedPoints)\n        this.cloudPath.data(pathData)\n\n        this.setShapeGroupDone({\n            id: this.currentShapeGroup.konvaGroup.id(),\n            color: this.currentAnnotation.style.color,\n            contentsObj: { text: '' }\n        })\n\n        // 清理状态\n        this.cloudPath = null\n        this.points = []\n\n        if (this.startRect) {\n            this.startRect.destroy()\n            this.startRect = null\n        }\n    }\n\n    /**\n     * @description 更新云朵预览路径\n     * @param cursorPos\n     * @returns\n     */\n    private updateCloudPreview(cursorPos?: { x: number; y: number }) {\n        if (!this.cloudPath) return\n\n        const pathPoints = [...this.points]\n        if (cursorPos) pathPoints.push(cursorPos)\n\n        const pathData = this.generateCloudPathData(pathPoints)\n        this.cloudPath.data(pathData)\n    }\n\n    /**\n     * @description 生成云朵路径数据\n     * @param points\n     * @returns\n     */\n    private generateCloudPathData(points: { x: number; y: number }[]): string {\n        if (points.length < 2) return ''\n        const radius = 12 // 波浪的半径\n        const waveStep = radius * 1.1 // 波浪的步长，控制波浪的密度\n        const center = this.computeCentroid(points)\n\n        let path = ''\n        let fixedAngle: number | null = null\n        // 遍历每一段线段，生成波浪路径\n        for (let i = 0; i < points.length - 1; i++) {\n            const p1 = points[i]\n            const p2 = points[i + 1]\n            const dx = p2.x - p1.x\n            const dy = p2.y - p1.y\n            const length = Math.hypot(dx, dy)\n\n            let angle = Math.atan2(dy, dx)\n            if (i === 0 && !fixedAngle) fixedAngle = angle\n            if (i === 0) angle = fixedAngle!\n\n            const normalX = Math.cos(angle + Math.PI / 2)\n            const normalY = Math.sin(angle + Math.PI / 2)\n\n            const segmentMidX = (p1.x + p2.x) / 2\n            const segmentMidY = (p1.y + p2.y) / 2\n            const toCenterX = center.x - segmentMidX\n            const toCenterY = center.y - segmentMidY\n            let normalSign = 1\n            if (normalX * toCenterX + normalY * toCenterY > 0) normalSign = -1\n\n            const steps = Math.max(2, Math.floor(length / waveStep))\n\n            for (let j = 0; j < steps; j++) {\n                const t1 = j / steps\n                const t2 = (j + 1) / steps\n\n                const x1 = p1.x + dx * t1\n                const y1 = p1.y + dy * t1\n                const x2 = p1.x + dx * t2\n                const y2 = p1.y + dy * t2\n\n                const midX = (x1 + x2) / 2\n                const midY = (y1 + y2) / 2\n                const controlX = midX + normalX * radius * normalSign\n                const controlY = midY + normalY * radius * normalSign\n\n                if (i === 0 && j === 0) {\n                    path += `M ${x1} ${y1} `\n                }\n\n                path += `Q ${controlX} ${controlY} ${x2} ${y2} `\n            }\n        }\n\n        return path\n    }\n\n    /**\n     * @description 计算一组点的质心\n     * @param points 点数组\n     * @returns 质心坐标\n     */\n    private computeCentroid(points: { x: number; y: number }[]): { x: number; y: number } {\n        const sum = points.reduce(\n            (acc, p) => {\n                acc.x += p.x\n                acc.y += p.y\n                return acc\n            },\n            { x: 0, y: 0 }\n        )\n        return {\n            x: sum.x / points.length,\n            y: sum.y / points.length\n        }\n    }\n\n    /**\n     * @description 绘制起点提示矩形\n     * @param pos 起点位置\n     */\n    private drawStartRect(pos: { x: number; y: number }) {\n        this.startRect = new Konva.Rect({\n            x: pos.x - this.startRectSize / 2,\n            y: pos.y - this.startRectSize / 2,\n            width: this.startRectSize,\n            height: this.startRectSize,\n            stroke: '#000',\n            strokeWidth: 2,\n            fill: null,\n            cornerRadius: 2,\n            hitStrokeWidth: 10, // 增加点击检测区域\n            draggable: false,\n            dash: [4, 2],\n            name: 'startRect'\n        })\n\n        this.getBgLayer().add(this.startRect)\n        this.startRect.moveToTop()\n        this.startRect.on('mouseup', (e: KonvaEventObject<MouseEvent | TouchEvent>) => {\n            this.handleDoubleClick()\n        })\n        this.startRect.on('mousemove', (e: KonvaEventObject<MouseEvent | TouchEvent>) => {\n            this.startRect.stroke('#1677ff')\n            this.startRect.getLayer()?.batchDraw()\n        })\n        this.startRect.on('mouseout', (e: KonvaEventObject<MouseEvent | TouchEvent>) => {\n            this.startRect.stroke('#000')\n            this.startRect.getLayer()?.batchDraw()\n        })\n    }\n\n    /**\n         * @description 更改注释样式\n         * @param annotationStore\n         * @param styles\n         */\n        protected changeStyle(annotationStore: IAnnotationStore, styles: IAnnotationStyle): void {\n            const id = annotationStore.id\n            const group = this.getShapeGroupById(id)\n            if (group) {\n                group.getChildren().forEach(shape => {\n                    if (shape instanceof Konva.Path) {\n                        if (styles.color !== undefined) {\n                            shape.stroke(styles.color)\n                        }\n                        if (styles.strokeWidth !== undefined) {\n                            shape.strokeWidth(styles.strokeWidth)\n                        }\n                        if (styles.opacity !== undefined) {\n                            shape.opacity(styles.opacity)\n                        }\n                    }\n                })\n    \n                const changedPayload: { konvaString: string; color?: string } = {\n                    konvaString: group.toJSON()\n                }\n    \n                if (styles.color !== undefined) {\n                    changedPayload.color = styles.color\n                }\n    \n                this.setChanged(id, changedPayload)\n            }\n        }\n}\n"
  },
  {
    "path": "src/painter/editor/editor_free_hand.ts",
    "content": "import Konva from 'konva'\nimport { KonvaEventObject } from 'konva/lib/Node'\n\nimport { AnnotationType, IAnnotationStore, IAnnotationStyle } from '../../const/definitions'\nimport { Editor, IEditorOptions } from './editor'\n\n/**\n * 自由手绘编辑器类，继承自基础编辑器类 Editor，用于在画布上绘制自由曲线。\n */\nexport class EditorFreeHand extends Editor {\n    private line: Konva.Line | null // 当前正在绘制的自由曲线\n\n    /**\n     * 构造函数，初始化自由手绘编辑器。\n     * @param EditorOptions 编辑器选项接口\n     */\n    constructor(EditorOptions: IEditorOptions) {\n        super({ ...EditorOptions, editorType: AnnotationType.FREEHAND })\n        this.line = null // 初始化当前曲线为null\n    }\n\n    /**\n     * 处理鼠标或触摸指针按下事件，开始绘制自由曲线。\n     * @param e Konva 事件对象\n     */\n    protected mouseDownHandler(e: KonvaEventObject<MouseEvent | TouchEvent>) {\n        if (e.currentTarget !== this.konvaStage) {\n            return\n        }\n\n        Editor.TimerClear(this.pageNumber) // 清除当前页的计时器\n        this.line = null // 重置当前曲线对象\n        this.isPainting = true // 设置绘制状态为真\n\n        if (!this.currentShapeGroup) {\n            // 如果当前形状组不存在，则创建新的形状组并添加到背景层\n            this.currentShapeGroup = this.createShapeGroup()\n            this.getBgLayer().add(this.currentShapeGroup.konvaGroup)\n        }\n\n        // 获取当前指针位置，并初始化线条对象\n        const pos = this.konvaStage.getRelativePointerPosition()\n        this.line = new Konva.Line({\n            // do not scale strokes\n            strokeScaleEnabled: false,\n            stroke: this.currentAnnotation.style.color, // 设置线条颜色\n            strokeWidth: this.currentAnnotation.style.strokeWidth, // 设置线条宽度\n            opacity: this.currentAnnotation.style.opacity, // 设置线条透明度\n            lineCap: 'round', // 设置线条端点为圆形\n            lineJoin: 'round', // 设置线条连接处为圆形\n            hitStrokeWidth: 20, // 设置点击检测的宽度\n            visible: false, // 初始化为不可见\n            globalCompositeOperation: 'source-over',\n            points: [pos.x, pos.y, pos.x, pos.y] // 初始化起始点\n        })\n\n        this.currentShapeGroup.konvaGroup.add(this.line) // 将曲线添加到当前形状组中\n        window.addEventListener('mouseup', this.globalPointerUpHandler) // 添加全局鼠标释放事件监听器\n    }\n\n    /**\n     * 处理鼠标或触摸指针移动事件，绘制自由曲线。\n     * @param e Konva 事件对象\n     */\n    protected mouseMoveHandler(e: KonvaEventObject<MouseEvent | TouchEvent>) {\n        if (!this.isPainting) {\n            return\n        }\n\n        e.evt.preventDefault() // 阻止默认事件，如滚动页面\n        this.line.show() // 显示当前绘制的曲线\n\n        // 获取当前指针位置并更新线条点集\n        const pos = this.konvaStage.getRelativePointerPosition()\n        const newPoints = this.line.points().concat([pos.x, pos.y])\n        this.line.points(newPoints)\n    }\n\n    /**\n     * 处理鼠标或触摸指针释放事件，完成自由曲线的绘制。\n     */\n    protected mouseUpHandler() {\n        if (!this.isPainting) {\n            return\n        }\n\n        this.isPainting = false // 结束绘制状态\n        const group = this.line.getParent() // 获取曲线所在的父组\n\n        if (this.isTooSmall()) {\n            // 如果曲线太小，则销毁曲线对象并延时保存形状组状态\n            this.line.destroy()\n            Editor.TimerStart(this.pageNumber, () => {\n                this.setShapeGroupDone({\n                    id: group.id(),\n                    color: this.currentAnnotation.style.color,\n                    contentsObj: {\n                        text: ''\n                    }\n                })\n                this.currentShapeGroup = null\n            })\n            return\n        }\n\n        // 否则，延时保存形状组状态\n        Editor.TimerStart(this.pageNumber, () => {\n            this.setShapeGroupDone({\n                id: group.id(),\n                color: this.currentAnnotation.style.color,\n                contentsObj: {\n                    text: ''\n                }\n            })\n            this.currentShapeGroup = null\n        })\n\n        this.line = null // 重置当前曲线对象为null\n    }\n\n    /**\n     * 全局鼠标释放事件处理器，仅处理左键释放事件。\n     * @param e MouseEvent 对象\n     */\n    private globalPointerUpHandler = (e: MouseEvent) => {\n        if (e.button !== 0) return // 只处理左键释放事件\n        this.mouseUpHandler() // 调用指针释放处理方法\n        window.removeEventListener('mouseup', this.globalPointerUpHandler) // 移除全局鼠标释放事件监听器\n    }\n\n    /**\n     * 判断当前绘制的曲线是否太小。\n     * @returns 如果曲线点集长度小于 5 返回 true，否则返回 false\n     */\n    private isTooSmall(): boolean {\n        return this.line.points().length < Editor.MinSize\n    }\n\n    /**\n     * @description 更改注释样式\n     * @param annotationStore\n     * @param styles\n     */\n    protected changeStyle(annotationStore: IAnnotationStore, styles: IAnnotationStyle): void {\n        const id = annotationStore.id\n        const group = this.getShapeGroupById(id)\n        if (group) {\n            group.getChildren().forEach(shape => {\n                if (shape instanceof Konva.Line) {\n                    if (styles.color !== undefined) {\n                        shape.stroke(styles.color)\n                    }\n                    if (styles.strokeWidth !== undefined) {\n                        shape.strokeWidth(styles.strokeWidth)\n                    }\n                    if (styles.opacity !== undefined) {\n                        shape.opacity(styles.opacity)\n                    }\n                }\n            })\n\n            const changedPayload: { konvaString: string; color?: string } = {\n                konvaString: group.toJSON()\n            }\n\n            if (styles.color !== undefined) {\n                changedPayload.color = styles.color\n            }\n\n            this.setChanged(id, changedPayload)\n        }\n    }\n}\n"
  },
  {
    "path": "src/painter/editor/editor_free_highlight.ts",
    "content": "import Konva from 'konva'\nimport { KonvaEventObject } from 'konva/lib/Node'\n\nimport { AnnotationType, IAnnotationStore, IAnnotationStyle } from '../../const/definitions'\nimport { Editor, IEditorOptions } from './editor'\n\nexport class EditorFreeHighlight extends Editor {\n    private line: Konva.Line | null // 当前正在绘制的自由曲线\n\n    constructor(EditorOptions: IEditorOptions) {\n        super({ ...EditorOptions, editorType: AnnotationType.FREE_HIGHLIGHT })\n        this.line = null // 初始化当前曲线为 null\n    }\n\n    /**\n     * 处理鼠标或触摸指针按下事件，开始绘制自由曲线。\n     * @param e Konva 事件对象\n     */\n    protected mouseDownHandler(e: KonvaEventObject<MouseEvent | TouchEvent>): void {\n        if (e.currentTarget !== this.konvaStage) {\n            return\n        }\n\n        this.line = null // 重置当前曲线对象\n        this.isPainting = true\n\n        this.currentShapeGroup = this.createShapeGroup()\n        this.getBgLayer().add(this.currentShapeGroup.konvaGroup)\n\n        const pos = this.konvaStage.getRelativePointerPosition()\n\n        this.line = new Konva.Line({\n            // do not scale strokes\n            strokeScaleEnabled: false,\n            stroke: this.currentAnnotation.style.color,\n            strokeWidth: this.currentAnnotation.style.strokeWidth,\n            opacity: this.currentAnnotation.style.opacity,\n            hitStrokeWidth: this.currentAnnotation.style.strokeWidth,\n            lineCap: 'round',\n            lineJoin: 'round',\n            visible: false,\n            globalCompositeOperation: 'source-over',\n            points: [pos.x, pos.y] // 初始化起始点\n        })\n\n        this.currentShapeGroup.konvaGroup.add(this.line) // 将曲线添加到当前形状组中\n        window.addEventListener('mouseup', this.globalPointerUpHandler) // 添加全局鼠标释放事件监听器\n    }\n\n    /**\n     * 处理鼠标或触摸指针移动事件，绘制自由曲线。\n     * @param e Konva 事件对象\n     */\n    protected mouseMoveHandler(e: KonvaEventObject<MouseEvent | TouchEvent>): void {\n        if (!this.isPainting) {\n            return\n        }\n        e.evt.preventDefault() // 阻止默认事件，如滚动页面\n        this.line.show() // 显示当前绘制的曲线\n        const pos = this.konvaStage.getRelativePointerPosition()\n        const newPoints = this.line.points().concat([pos.x, pos.y])\n        this.line.points(newPoints) // 更新曲线的点集\n    }\n\n    /**\n     * 处理鼠标或触摸指针释放事件，完成自由曲线的绘制。\n     */\n    protected mouseUpHandler(): void {\n        if (!this.isPainting) {\n            return\n        }\n\n        this.isPainting = false // 结束绘制状态\n\n        // 获取曲线的父节点组\n        const group = this.line?.getParent()\n        if (group && !this.line.isVisible() && group.getType() === 'Group') {\n            this.delShapeGroup(group.id())\n            return\n        }\n\n        if (this.isTooSmall()) {\n            this.line?.destroy()\n            if (group) {\n                this.delShapeGroup(group.id())\n            }\n            this.line = null\n            return\n        }\n\n        if (this.line) {\n            const originalPoints = this.line.points()\n            const correctedPoints = this.correctLineIfStraight(originalPoints)\n            this.line.points(correctedPoints) // 更新线条点集为修正后的点集\n            this.setShapeGroupDone({\n                id: group.id(),\n                color: this.currentAnnotation.style.color,\n                contentsObj: {\n                    text: ''\n                }\n            })\n            this.line = null\n        }\n    }\n\n    /**\n     * 全局鼠标释放事件处理器，仅处理左键释放事件。\n     * @param e MouseEvent 对象\n     */\n    private globalPointerUpHandler = (e: MouseEvent): void => {\n        if (e.button !== 0) return // 只处理左键释放事件\n        this.mouseUpHandler() // 调用指针释放处理方法\n        window.removeEventListener('mouseup', this.globalPointerUpHandler) // 移除全局鼠标释放事件监听器\n    }\n\n    /**\n     * 修正接近水平或垂直的线条，使其成为完全水平或垂直的直线。\n     * @param points 曲线的点集\n     * @returns 修正后的点集\n     */\n    private correctLineIfStraight(points: number[]): number[] {\n        // 阈值，用于判断线段接近水平或垂直\n        const THRESHOLD_ANGLE_DEGREES = 2\n\n        // 获取起始和结束点的坐标\n        const startX = points[0]\n        const startY = points[1]\n        const endX = points[points.length - 2]\n        const endY = points[points.length - 1]\n\n        const deltaX = endX - startX\n        const deltaY = endY - startY\n\n        // 计算线段的角度\n        const angleRad = Math.atan2(deltaY, deltaX)\n        const angleDeg = Math.abs(angleRad * (180 / Math.PI))\n\n        // 判断线段是否接近水平或垂直\n        const isCloseToHorizontal = angleDeg <= THRESHOLD_ANGLE_DEGREES || angleDeg >= 180 - THRESHOLD_ANGLE_DEGREES\n        const isCloseToVertical = Math.abs(angleDeg - 90) <= THRESHOLD_ANGLE_DEGREES\n\n        if (isCloseToHorizontal) {\n            // 修正为水平线\n            return points.map((value, index) => (index % 2 === 0 ? value : startY))\n        } else if (isCloseToVertical) {\n            // 修正为垂直线\n            return points.map((value, index) => (index % 2 === 0 ? startX : value))\n        }\n\n        // 返回原始点集\n        return points\n    }\n\n    /**\n     * 判断当前绘制的曲线是否太小。\n     * @returns 如果曲线点集长度小于 5 返回 true，否则返回 false\n     */\n    private isTooSmall(): boolean {\n        return (this.line?.points().length || 0) < 5\n    }\n\n    /**\n     * @description 更改注释样式\n     * @param annotationStore\n     * @param styles\n     */\n    protected changeStyle(annotationStore: IAnnotationStore, styles: IAnnotationStyle): void {\n        const id = annotationStore.id\n        const group = this.getShapeGroupById(id)\n        if (group) {\n            group.getChildren().forEach(shape => {\n                if (shape instanceof Konva.Line) {\n                    if (styles.color !== undefined) {\n                        shape.stroke(styles.color)\n                    }\n                    if (styles.strokeWidth !== undefined) {\n                        shape.strokeWidth(styles.strokeWidth)\n                    }\n                    if (styles.opacity !== undefined) {\n                        shape.opacity(styles.opacity)\n                    }\n                }\n            })\n\n            const changedPayload: { konvaString: string; color?: string } = {\n                konvaString: group.toJSON()\n            }\n\n            if (styles.color !== undefined) {\n                changedPayload.color = styles.color\n            }\n\n            this.setChanged(id, changedPayload)\n        }\n    }\n}\n"
  },
  {
    "path": "src/painter/editor/editor_free_text.scss",
    "content": ".EditorFreeText-Modal {\n    margin: 0 auto;\n    &-Toolbar {\n        border-top: 0;\n        display: flex;\n        justify-content: space-between;\n        margin: 0 auto;\n        .colorPalette {\n            display: flex;\n            margin: 8px;\n            .cell {\n                cursor: pointer;\n                width: 22px;\n                height: 22px;\n                margin-right: 5px;\n                border-radius: 100px;\n                display: flex;\n                align-items: center;\n                justify-content: center;\n                border: 1px solid #fff;\n                span {\n                    width: 12px;\n                    height: 12px;\n                    display: inline-block;\n                    border-radius: 100px;\n                }\n            }\n\n            .active {\n                border: 1px solid #bbb;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/painter/editor/editor_free_text.tsx",
    "content": "import Konva from 'konva'\nimport { KonvaEventObject } from 'konva/lib/Node'\n\nimport { AnnotationType, IAnnotationStore, IAnnotationStyle } from '../../const/definitions'\nimport { Editor, IEditorOptions } from './editor'\nimport React from 'react'\nimport { Dropdown, InputRef, Modal } from 'antd'\nimport TextArea from 'antd/es/input/TextArea'\nimport { FontSizeIcon } from '../../const/icon'\nimport './editor_free_text.scss'\nimport i18n from 'i18next'\nimport { defaultOptions } from '../../const/default_options'\nimport { isSameColor } from '../../utils/utils'\n\nexport async function setInputText(color: string, fontSize: number): Promise<{ inputValue: string, color: string, fontSize: number }> {\n    let currentColor = color;\n    let currentFontSize = fontSize;\n    return new Promise(resolve => {\n        const placeholder = i18n.t('editor.text.startTyping');\n        let inputValue = '';\n        let status: '' | 'error' | 'warning' = 'error'; // 初始状态设置为错误，确保初始时提交按钮禁用\n        let modal: any;\n        const inputRef = React.createRef<InputRef>(); // 使用 React.createRef 以确保类型正确\n\n        const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n            inputValue = e.target.value; // 更新输入值\n            status = inputValue.trim() !== '' ? '' : 'error'; // 根据输入内容更新状态\n            updateModalContent(); // 更新模态框内容\n        };\n\n        const updateModalContent = () => {\n            modal.update({\n                title: `${i18n.t('annotations.freeText')}-${currentFontSize}px`,\n                content: (\n                    <div>\n                        <TextArea\n                            ref={inputRef} status={status} placeholder={placeholder} onChange={handleChange}\n                            autoSize={{ minRows: 3, maxRows: 5 }}\n                        />\n                        <div className='EditorFreeText-Modal-Toolbar'>\n                            <div className=\"colorPalette\">\n                                {defaultOptions.colors.map(color => (\n                                    <div onClick={() => handleColorChange(color)} className={`cell ${color === currentColor ? 'active' : ''}`} key={color}>\n                                        <span style={{ backgroundColor: color }}></span>\n                                    </div>\n                                ))}\n                            </div>\n                            <Dropdown menu={{\n                                items: defaultOptions.fontSize.map(size => ({\n                                    key: size.toString(),\n                                    label: size,\n                                    onClick: () => handleFontSizeChange(size)\n                                }))\n                            }} trigger={['click']}>\n                                <FontSizeIcon />\n                            </Dropdown>\n                        </div>\n                    </div>\n                ),\n                okButtonProps: {\n                    disabled: status === 'error',\n                },\n            });\n        };\n\n        const handleColorChange = (color: string) => {\n            currentColor = color; // 更新当前颜色\n            updateModalContent();\n        };\n\n        const handleFontSizeChange = (fontSize: number) => {\n            currentFontSize = fontSize;\n            updateModalContent();\n        };\n\n        modal = Modal.confirm({\n            title: `${i18n.t('annotations.freeText')}-${currentFontSize}px`,\n            icon: null,\n            content: (\n                <div className='EditorFreeText-Modal'>\n                    <TextArea\n                        ref={inputRef} status={status} placeholder={placeholder} onChange={handleChange}\n                        autoSize={{ minRows: 3, maxRows: 5 }}\n                    />\n                    <div className='EditorFreeText-Modal-Toolbar'>\n                        <div className=\"colorPalette\">\n                            {defaultOptions.colors.map(color => (\n                                <div onClick={() => handleColorChange(color)} className={`cell ${isSameColor(color, currentColor) ? 'active' : ''}`} key={color}>\n                                    <span style={{ backgroundColor: color }}></span>\n                                </div>\n                            ))}\n                        </div>\n                        <Dropdown menu={{\n                            items: defaultOptions.fontSize.map(size => ({\n                                key: size.toString(),\n                                label: size,\n                                onClick: () => handleFontSizeChange(size)\n                            }))\n                        }} trigger={['click']}>\n                            <FontSizeIcon />\n                        </Dropdown>\n                    </div>\n                </div>\n            ),\n            destroyOnClose: true,\n            okText: i18n.t('normal.ok'),\n            cancelText: i18n.t('normal.cancel'),\n            okButtonProps: {\n                disabled: status === 'error',\n            },\n            onOk: () => {\n                resolve({ inputValue, color: currentColor, fontSize: currentFontSize }); // 解析 Promise 并返回输入值\n            },\n            onCancel: () => {\n                resolve({ inputValue: '', color: currentColor, fontSize: currentFontSize }); // 如果用户取消，则解析 Promise 并返回空字符串\n            }\n        });\n        setTimeout(() => {\n            if (inputRef.current) {\n                inputRef.current.focus();\n            }\n        }, 100);\n    });\n}\n\n/**\n * EditorFreeText 是继承自 Editor 的自由文本编辑器类。\n */\nexport class EditorFreeText extends Editor {\n    /**\n     * 创建一个 EditorFreeText 实例。\n     * @param EditorOptions 初始化编辑器的选项\n     */\n    constructor(EditorOptions: IEditorOptions) {\n        super({ ...EditorOptions, editorType: AnnotationType.FREETEXT })\n    }\n\n    protected mouseDownHandler() { }\n    protected mouseMoveHandler() { }\n\n\n    /**\n     * 处理鼠标抬起事件，创建输入区域。\n     * @param e Konva 事件对象\n     */\n    protected async mouseUpHandler(e: KonvaEventObject<PointerEvent>) {\n        const pos = this.konvaStage.getRelativePointerPosition()\n        const { x, y } = this.konvaStage.scale()\n        if (e.currentTarget !== this.konvaStage) {\n            return\n        }\n        this.isPainting = true\n        this.currentShapeGroup = this.createShapeGroup()\n        this.getBgLayer().add(this.currentShapeGroup.konvaGroup)\n        const { inputValue, color, fontSize } = await setInputText(this.currentAnnotation.style.color, this.currentAnnotation.style.fontSize)\n        this.inputDoneHandler(inputValue, { x, y }, pos, color, fontSize)\n    }\n\n    /**\n     * 处理输入完成后的操作。\n     * @param inputValue string 输入值\n     * @param scaleY Y 轴缩放比例\n     * @param pos 相对位置坐标\n     */\n    private async inputDoneHandler(inputValue: string, scale: { x: number; y: number }, pos: { x: number; y: number }, color: string, fontSize: number) {\n        const value = inputValue.trim();\n        if (value === '') {\n            this.delShapeGroup(this.currentShapeGroup.id);\n            this.currentShapeGroup = null;\n            return;\n        }\n        const tempText = new Konva.Text({\n            text: value,\n            fontSize: fontSize,\n            padding: 2\n        });\n        const textWidth = tempText.width();\n        const maxWidth = 300;\n        const finalWidth = textWidth > maxWidth ? maxWidth : textWidth;\n        const text = new Konva.Text({\n            x: pos.x,\n            y: pos.y + 2,\n            text: value,\n            width: finalWidth,\n            fontSize: fontSize,\n            fill: color,\n            wrap: textWidth > maxWidth ? 'word' : 'none'\n        });\n        this.currentShapeGroup.konvaGroup.add(text)\n\n        const id = this.currentShapeGroup.konvaGroup.id()\n        this.setShapeGroupDone(\n            {\n                id,\n                contentsObj: {\n                    text: value,\n                },\n                color,\n                fontSize\n            }\n        )\n    }\n\n    /**\n         * @description 更改注释样式\n         * @param annotationStore\n         * @param styles\n         */\n    protected changeStyle(annotationStore: IAnnotationStore, styles: IAnnotationStyle): void {\n        const id = annotationStore.id\n        const group = this.getShapeGroupById(id)\n        if (group) {\n            group.getChildren().forEach(shape => {\n                if (shape instanceof Konva.Text) {\n                    if (styles.color !== undefined) {\n                        shape.fill(styles.color)\n                    }\n                    if (styles.opacity !== undefined) {\n                        shape.opacity(styles.opacity)\n                    }\n                }\n            })\n\n            const changedPayload: { konvaString: string; color?: string } = {\n                konvaString: group.toJSON()\n            }\n\n            if (styles.color !== undefined) {\n                changedPayload.color = styles.color\n            }\n\n            this.setChanged(id, changedPayload)\n        }\n    }\n\n}\n"
  },
  {
    "path": "src/painter/editor/editor_highlight.ts",
    "content": "import Konva from 'konva'\n\nimport { AnnotationType, IAnnotationStore, IAnnotationStyle } from '../../const/definitions'\nimport { Editor, IEditorOptions } from './editor'\n\n/**\n * EditorHighLight 是继承自 Editor 的高亮编辑器类。\n */\nexport class EditorHighLight extends Editor {\n    /**\n     * 创建一个 EditorHighLight 实例。\n     * @param EditorOptions 初始化编辑器的选项\n     * @param editorType 注释类型\n     */\n    constructor(EditorOptions: IEditorOptions, editorType: AnnotationType) {\n        super({ ...EditorOptions, editorType })\n    }\n\n    /**\n     * 将网页上选中文字区域转换为图形并绘制在 Canvas 上。\n     * @param elements HTMLSpanElement 数组，表示要绘制的元素\n     * @param fixElement 用于修正计算的元素\n     */\n    public convertTextSelection(elements: HTMLSpanElement[], fixElement: HTMLDivElement) {\n        this.currentShapeGroup = this.createShapeGroup()\n        this.getBgLayer().add(this.currentShapeGroup.konvaGroup)\n\n        // 获取基准元素的边界矩形，用于计算相对坐标\n        const fixBounding = fixElement.getBoundingClientRect()\n\n        elements.forEach(spanEl => {\n            const bounding = spanEl.getBoundingClientRect()\n            const { x, y, width, height } = this.calculateRelativePosition(bounding, fixBounding)\n            const shape = this.createShape(x, y, width, height)\n            this.currentShapeGroup.konvaGroup.add(shape)\n        })\n\n        this.setShapeGroupDone({\n            id: this.currentShapeGroup.id,\n            contentsObj: {\n                text: this.getElementOuterText(elements)\n            },\n            color: this.currentAnnotation.style.color\n        })\n    }\n\n    /**\n     * 获取所有 elements 内部文字。\n     * @param elements HTMLSpanElement 数组\n     * @returns 所有元素内部文字的字符串\n     */\n    private getElementOuterText(elements: HTMLSpanElement[]): string {\n        return elements.map(el => el.outerText).join('')\n    }\n\n    /**\n     * 计算元素的相对位置和尺寸，适配 Canvas 坐标系。\n     * @param elementBounding 元素的边界矩形\n     * @param fixBounding 基准元素的边界矩形\n     * @returns 相对位置和尺寸的对象 { x, y, width, height }\n     */\n    private calculateRelativePosition(elementBounding: DOMRect, fixBounding: DOMRect) {\n        const scale = this.konvaStage.scale()\n        const x = (elementBounding.x - fixBounding.x) / scale.x\n        const y = (elementBounding.y - fixBounding.y) / scale.y\n        const width = elementBounding.width / scale.x\n        const height = elementBounding.height / scale.y\n        return { x, y, width, height }\n    }\n\n    /**\n     * 根据当前的注释类型创建对应的形状。\n     * @param x 形状的 X 坐标\n     * @param y 形状的 Y 坐标\n     * @param width 形状的宽度\n     * @param height 形状的高度\n     * @returns Konva.Shape 具体类型的形状\n     */\n    private createShape(x: number, y: number, width: number, height: number): Konva.Shape {\n        switch (this.currentAnnotation.type) {\n            case AnnotationType.HIGHLIGHT:\n                return this.createHighlightShape(x, y, width, height)\n            case AnnotationType.UNDERLINE:\n                return this.createUnderlineShape(x, y, width, height)\n            case AnnotationType.STRIKEOUT:\n                return this.createStrikeoutShape(x, y, width, height)\n            default:\n                throw new Error(`Unsupported annotation type: ${this.currentAnnotation.type}`)\n        }\n    }\n\n    /**\n     * 创建高亮形状。\n     * @param x 形状的 X 坐标\n     * @param y 形状的 Y 坐标\n     * @param width 形状的宽度\n     * @param height 形状的高度\n     * @returns Konva.Rect 高亮形状对象\n     */\n    private createHighlightShape(x: number, y: number, width: number, height: number): Konva.Rect {\n        return new Konva.Rect({\n            x,\n            y,\n            width,\n            height,\n            opacity: 0.5,\n            fill: this.currentAnnotation.style.color\n        })\n    }\n\n    /**\n     * 创建下划线形状。\n     * @param x 形状的 X 坐标\n     * @param y 形状的 Y 坐标\n     * @param width 形状的宽度\n     * @param height 形状的高度\n     * @returns Konva.Rect 下划线形状对象\n     */\n    private createUnderlineShape(x: number, y: number, width: number, height: number): Konva.Rect {\n        return new Konva.Rect({\n            x,\n            y: height + y - 2,\n            width,\n            stroke: this.currentAnnotation.style.color,\n            opacity: 1,\n            strokeWidth: 1,\n            hitStrokeWidth: 10,\n            height: 1\n        })\n    }\n\n    /**\n     * 创建删除线形状。\n     * @param x 形状的 X 坐标\n     * @param y 形状的 Y 坐标\n     * @param width 形状的宽度\n     * @param height 形状的高度\n     * @returns Konva.Rect 删除线形状对象\n     */\n    private createStrikeoutShape(x: number, y: number, width: number, height: number): Konva.Rect {\n        return new Konva.Rect({\n            x,\n            y: y + height / 2,\n            width,\n            stroke: this.currentAnnotation.style.color,\n            opacity: 1,\n            strokeWidth: 1,\n            hitStrokeWidth: 10,\n            height: 1\n        })\n    }\n\n    /**\n     * 处理鼠标按下事件，目前未实现具体逻辑。\n     */\n    protected mouseDownHandler() {}\n\n    /**\n     * 处理鼠标移动事件，目前未实现具体逻辑。\n     */\n    protected mouseMoveHandler() {}\n\n    /**\n     * 处理鼠标抬起事件，目前未实现具体逻辑。\n     */\n    protected mouseUpHandler() {}\n\n    /**\n     * @description 更改注释样式\n     * @param annotationStore\n     * @param styles\n     */\n    protected changeStyle(annotationStore: IAnnotationStore, styles: IAnnotationStyle): void {\n        const id = annotationStore.id\n        const group = this.getShapeGroupById(id)\n        if (group) {\n            group.getChildren().forEach(shape => {\n                if (annotationStore.type === AnnotationType.HIGHLIGHT) {\n                    if (shape instanceof Konva.Rect) {\n                        if (styles.color !== undefined) {\n                            shape.fill(styles.color)\n                        }\n                        if (styles.strokeWidth !== undefined) {\n                            shape.strokeWidth(styles.strokeWidth)\n                        }\n                        if (styles.opacity !== undefined) {\n                            shape.opacity(styles.opacity)\n                        }\n                    }\n                }\n                if (annotationStore.type === AnnotationType.UNDERLINE) {\n                    if (shape instanceof Konva.Rect) {\n                        if (styles.color !== undefined) {\n                            shape.stroke(styles.color)\n                        }\n                        if (styles.strokeWidth !== undefined) {\n                            shape.strokeWidth(styles.strokeWidth)\n                        }\n                        if (styles.opacity !== undefined) {\n                            shape.opacity(styles.opacity)\n                        }\n                    }\n                }\n                if (annotationStore.type === AnnotationType.STRIKEOUT) {\n                    if (shape instanceof Konva.Rect) {\n                        if (styles.color !== undefined) {\n                            shape.stroke(styles.color)\n                        }\n                        if (styles.strokeWidth !== undefined) {\n                            shape.strokeWidth(styles.strokeWidth)\n                        }\n                        if (styles.opacity !== undefined) {\n                            shape.opacity(styles.opacity)\n                        }\n                    }\n                }\n            })\n            const changedPayload: { konvaString: string; color?: string } = {\n                konvaString: group.toJSON()\n            }\n\n            if (styles.color !== undefined) {\n                changedPayload.color = styles.color\n            }\n\n            this.setChanged(id, changedPayload)\n        }\n    }\n}\n"
  },
  {
    "path": "src/painter/editor/editor_note.ts",
    "content": "import { KonvaEventObject } from 'konva/lib/Node'\nimport { AnnotationType, IAnnotationStore, IAnnotationStyle } from '../../const/definitions'\nimport { Editor, IEditorOptions } from './editor'\nimport { createDocumentIcon } from '../../utils/documentIcon'\nexport class EditorNote extends Editor {\n    constructor(EditorOptions: IEditorOptions) {\n        super({ ...EditorOptions, editorType: AnnotationType.NOTE })\n    }\n\n    protected mouseDownHandler() {}\n    protected mouseMoveHandler() {}\n\n    protected async mouseUpHandler(e: KonvaEventObject<PointerEvent>) {\n        const color = 'rgb(255, 222, 33)'\n        const { x, y } = this.konvaStage.getRelativePointerPosition()\n        if (e.currentTarget !== this.konvaStage) {\n            return\n        }\n        this.isPainting = true\n        this.currentShapeGroup = this.createShapeGroup()\n        this.getBgLayer().add(this.currentShapeGroup.konvaGroup)\n\n        const docIcon = createDocumentIcon({ x, y, fill: color })\n\n        this.currentShapeGroup.konvaGroup.add(...docIcon)\n        const id = this.currentShapeGroup.konvaGroup.id()\n        this.setShapeGroupDone({\n            id,\n            contentsObj: {\n                text: ''\n            },\n            color\n        })\n    }\n\n    protected changeStyle(): void {}\n}\n"
  },
  {
    "path": "src/painter/editor/editor_rectangle.ts",
    "content": "import Konva from 'konva'\nimport { KonvaEventObject } from 'konva/lib/Node'\n\nimport { AnnotationType, IAnnotationStore, IAnnotationStyle } from '../../const/definitions'\nimport { Editor, IEditorOptions } from './editor'\n\n/**\n * EditorRectangle 是继承自 Editor 的矩形编辑器类。\n */\nexport class EditorRectangle extends Editor {\n    private rect: Konva.Rect // 当前正在绘制的矩形对象\n    private vertex: { x: number; y: number } // 矩形的起始顶点坐标\n\n    /**\n     * 创建一个 EditorRectangle 实例。\n     * @param EditorOptions 初始化编辑器的选项\n     */\n    constructor(EditorOptions: IEditorOptions) {\n        super({ ...EditorOptions, editorType: AnnotationType.RECTANGLE }) // 调用父类的构造函数\n        this.rect = null\n        this.vertex = { x: 0, y: 0 }\n    }\n\n    /**\n     * 处理鼠标按下事件的方法，创建新的矩形对象并添加到舞台。\n     * @param e Konva 事件对象\n     */\n    protected mouseDownHandler(e: KonvaEventObject<MouseEvent | TouchEvent>) {\n        if (e.currentTarget !== this.konvaStage) {\n            return\n        }\n        this.rect = null\n        this.isPainting = true\n        this.currentShapeGroup = this.createShapeGroup() // 创建新的形状组\n        this.getBgLayer().add(this.currentShapeGroup.konvaGroup) // 将形状组添加到背景图层\n        const pos = this.konvaStage.getRelativePointerPosition()\n        this.vertex = { x: pos.x, y: pos.y } // 记录鼠标按下时的坐标作为矩形的起始点\n        this.rect = new Konva.Rect({\n            x: pos.x,\n            y: pos.y,\n            width: 0,\n            height: 0,\n            // do not scale strokes\n            strokeScaleEnabled: false,\n            visible: false,\n            stroke: this.currentAnnotation.style.color,\n            strokeWidth: this.currentAnnotation.style.strokeWidth || 2,\n            opacity: this.currentAnnotation.style.opacity\n        })\n        this.currentShapeGroup.konvaGroup.add(this.rect) // 将矩形添加到形状组\n        window.addEventListener('mouseup', this.globalPointerUpHandler) // 添加全局鼠标抬起事件监听器\n    }\n\n    /**\n     * 处理鼠标移动事件的方法，实时更新绘制的矩形对象的大小和位置。\n     * @param e Konva 事件对象\n     */\n    protected mouseMoveHandler(e: KonvaEventObject<MouseEvent | TouchEvent>) {\n        if (!this.isPainting) {\n            return\n        }\n        e.evt.preventDefault()\n        this.rect.show() // 显示矩形\n        const pos = this.konvaStage.getRelativePointerPosition()\n        const areaAttr = {\n            x: Math.min(this.vertex.x, pos.x),\n            y: Math.min(this.vertex.y, pos.y),\n            width: Math.abs(pos.x - this.vertex.x),\n            height: Math.abs(pos.y - this.vertex.y)\n        }\n        this.rect.setAttrs(areaAttr) // 更新矩形的属性（位置和大小）\n    }\n\n    /**\n     * 处理鼠标抬起事件的方法，完成矩形的绘制并更新到 PDF.js 注解存储。\n     */\n    protected mouseUpHandler() {\n        if (!this.isPainting) {\n            return\n        }\n        this.isPainting = false\n        const group = this.rect.getParent() // 获取矩形所在的组\n        if (!this.rect.isVisible() && group.getType() === 'Group') {\n            this.delShapeGroup(group.id()) // 如果矩形不可见且在组中，则删除该组\n            return\n        }\n        if (this.isTooSmall()) {\n            this.rect.destroy() // 如果矩形太小，则销毁矩形对象\n            this.delShapeGroup(group.id()) // 删除矩形所在的组\n            this.rect = null\n            return\n        }\n        this.setShapeGroupDone({\n            id: group.id(),\n            color: this.currentAnnotation.style.color,\n            contentsObj: {\n                text: ''\n            }\n        }) // 更新 PDF.js 注解存储\n        this.rect = null\n    }\n\n    /**\n     * 全局鼠标抬起事件处理器，仅处理左键释放事件。\n     * @param e MouseEvent 对象\n     */\n    private globalPointerUpHandler = (e: MouseEvent) => {\n        if (e.button !== 0) return // 只处理左键释放事件\n        this.mouseUpHandler() // 调用鼠标抬起处理方法\n        window.removeEventListener('mouseup', this.globalPointerUpHandler) // 移除全局鼠标抬起事件监听器\n    }\n\n    /**\n     * 判断矩形是否太小（小于最小允许大小）。\n     * @returns 如果矩形太小返回 true，否则返回 false\n     */\n    private isTooSmall(): boolean {\n        const { width, height } = this.rect.size() // 获取矩形的宽度和高度\n        return Math.max(width, height) < Editor.MinSize // 判断宽度和高度的最大值是否小于最小允许大小\n    }\n\n    /**\n     * @description 更改注释样式\n     * @param annotationStore\n     * @param styles\n     */\n    protected changeStyle(annotationStore: IAnnotationStore, styles: IAnnotationStyle): void {\n        const id = annotationStore.id\n        const group = this.getShapeGroupById(id)\n        if (group) {\n            group.getChildren().forEach(shape => {\n                if (shape instanceof Konva.Rect) {\n                    if (styles.color !== undefined) {\n                        shape.stroke(styles.color)\n                    }\n                    if (styles.strokeWidth !== undefined) {\n                        shape.strokeWidth(styles.strokeWidth)\n                    }\n                    if (styles.opacity !== undefined) {\n                        shape.opacity(styles.opacity)\n                    }\n                }\n            })\n\n            const changedPayload: { konvaString: string; color?: string } = {\n                konvaString: group.toJSON()\n            }\n\n            if (styles.color !== undefined) {\n                changedPayload.color = styles.color\n            }\n\n            this.setChanged(id, changedPayload)\n        }\n    }\n}\n"
  },
  {
    "path": "src/painter/editor/editor_signature.ts",
    "content": "import Konva from 'konva'\nimport { KonvaEventObject } from 'konva/lib/Node'\n\nimport { AnnotationType, IAnnotationType } from '../../const/definitions'\nimport { resizeImage, setCssCustomProperty } from '../../utils/utils'\nimport { CURSOR_CSS_PROPERTY } from '../const'\nimport { Editor, IEditorOptions } from './editor'\nimport { defaultOptions } from '../../const/default_options'\n\n/**\n * EditorSignature 是继承自 Editor 的签名编辑器类。\n */\nexport class EditorSignature extends Editor {\n    private signatureUrl: string // 签名图片的 URL\n    private signatureImage: Konva.Image // Konva.Image 对象用于显示签名图片\n\n    /**\n     * 创建一个 EditorSignature 实例。\n     * @param EditorOptions 初始化编辑器的选项\n     * @param defaultSignatureUrl 默认的签名图片 URL\n     */\n    constructor(EditorOptions: IEditorOptions, defaultSignatureUrl: string | null) {\n        super({ ...EditorOptions, editorType: AnnotationType.SIGNATURE }) // 调用父类的构造函数\n        this.signatureUrl = defaultSignatureUrl // 设置签名图片 URL\n        if (defaultSignatureUrl) {\n            this.createCursorImg() // 如果有默认签名图片 URL，则创建光标图像\n        }\n    }\n\n    /**\n     * 创建光标图像，并设置 CSS 自定义属性。\n     */\n    private createCursorImg() {\n        const cursorGroup = new Konva.Group({\n            draggable: false\n        })\n\n        // 从 URL 加载签名图片并处理\n        Konva.Image.fromURL(this.signatureUrl, image => {\n            const { width, height } = image.getClientRect()\n            const { newWidth, newHeight } = resizeImage(width, height, defaultOptions.setting.MAX_CURSOR_SIZE)\n            const crosshair = { x: newWidth / 2, y: newHeight / 2 }\n\n            // 创建边框和交叉线\n            const border = new Konva.Rect({\n                x: 0,\n                y: 0,\n                width: newWidth,\n                height: newHeight,\n                stroke: 'red',\n                strokeWidth: 2\n            })\n            const horizontalLine = new Konva.Line({\n                points: [0, crosshair.y, newWidth, crosshair.y],\n                stroke: 'red',\n                strokeWidth: 1,\n                dash: [5, 5]\n            })\n            const verticalLine = new Konva.Line({\n                points: [crosshair.x, 0, crosshair.x, newHeight],\n                stroke: 'red',\n                strokeWidth: 1,\n                dash: [5, 5]\n            })\n            const point = new Konva.Circle({\n                x: crosshair.x,\n                y: crosshair.y,\n                radius: 5,\n                stroke: 'red'\n            })\n\n            // 设置签名图片属性并添加到组中\n            image.setAttrs({\n                x: 0,\n                y: 0,\n                width: newWidth,\n                height: newHeight,\n                visible: true\n            })\n            cursorGroup.add(image, horizontalLine, verticalLine, point, border)\n\n            // 将组转换为数据 URL，并设置 CSS 自定义属性\n            const cursorImg = cursorGroup.toDataURL()\n            cursorGroup.destroy()\n            setCssCustomProperty(CURSOR_CSS_PROPERTY, `url(${cursorImg}) ${crosshair.x} ${crosshair.y}, default`)\n        })\n    }\n\n    /**\n     * 处理鼠标按下事件的方法，创建新的形状组并添加签名图片。\n     * @param e Konva 事件对象\n     */\n    protected mouseDownHandler(e: KonvaEventObject<MouseEvent | TouchEvent>) {\n        if (e.currentTarget !== this.konvaStage) {\n            return // 如果事件不是在舞台上发生的，则直接返回\n        }\n        this.signatureImage = null\n        this.currentShapeGroup = this.createShapeGroup() // 创建新的形状组\n        this.getBgLayer().add(this.currentShapeGroup.konvaGroup) // 将形状组添加到背景图层\n        const pos = this.konvaStage.getRelativePointerPosition()\n\n        // 从 URL 加载签名图片并处理\n        Konva.Image.fromURL(this.signatureUrl, async image => {\n            const { width: width_rec, height: height_rec } = image.getClientRect()\n            const { newWidth, newHeight } = resizeImage(width_rec, height_rec, 120)\n            const crosshair = { x: newWidth / 2, y: newHeight / 2 }\n\n            this.signatureImage = image\n            this.signatureImage.setAttrs({\n                x: pos.x - crosshair.x,\n                y: pos.y - crosshair.y,\n                width: newWidth,\n                height: newHeight,\n                base64: this.signatureUrl\n            })\n            this.currentShapeGroup.konvaGroup.add(this.signatureImage)\n            const id = this.currentShapeGroup.konvaGroup.id()\n            this.setShapeGroupDone({\n                id,\n                contentsObj: {\n                    text: '',\n                    image: this.signatureUrl\n                }\n            })\n            this.signatureImage = null\n        })\n    }\n\n    /**\n     * 激活编辑器并设置签名图片。\n     * @param konvaStage Konva 舞台对象\n     * @param annotation 新的注解对象\n     * @param signatureUrl 签名图片的 URL\n     */\n    public activateWithSignature(konvaStage: Konva.Stage, annotation: IAnnotationType, signatureUrl: string | null) {\n        super.activate(konvaStage, annotation) // 调用父类的激活方法\n        this.signatureUrl = signatureUrl // 设置签名图片 URL\n        if (signatureUrl) {\n            this.createCursorImg() // 如果有签名图片 URL，则创建光标图像\n        }\n    }\n\n    /**\n     * 将序列化的 Konva.Group 添加到图层，并恢复其中的签名图片。\n     * @param konvaStage Konva 舞台对象\n     * @param konvaString 序列化的 Konva.Group 字符串表示\n     */\n    public addSerializedGroupToLayer(konvaStage: Konva.Stage, konvaString: string) {\n        const ghostGroup = Konva.Node.create(konvaString)\n        const oldImage = this.getGroupNodesByClassName(ghostGroup, 'Image')[0] as Konva.Image\n        const imageUrl = oldImage.getAttr('base64')\n\n        // 从 URL 加载签名图片并替换旧图片\n        Konva.Image.fromURL(imageUrl, async image => {\n            image.setAttrs(oldImage.getAttrs())\n            oldImage.destroy()\n            ghostGroup.add(image)\n        })\n\n        // 将恢复后的组添加到背景图层\n        this.getBgLayer(konvaStage).add(ghostGroup)\n    }\n\n    // 下面是未实现的抽象方法的空实现\n    protected mouseMoveHandler() {}\n    protected mouseUpHandler() {}\n\n    protected changeStyle(): void {}\n}\n"
  },
  {
    "path": "src/painter/editor/editor_stamp.tsx",
    "content": "import Konva from 'konva'\nimport { KonvaEventObject } from 'konva/lib/Node'\n\nimport { AnnotationType, IAnnotationType } from '../../const/definitions'\nimport { resizeImage, setCssCustomProperty } from '../../utils/utils'\nimport { CURSOR_CSS_PROPERTY } from '../const'\nimport { Editor, IEditorOptions } from './editor'\nimport { defaultOptions } from '../../const/default_options'\n\n/**\n * EditorStamp 是继承自 Editor 的签章编辑器类。\n */\nexport class EditorStamp extends Editor {\n    private stampUrl: string // 签章图片的 URL\n    private stampImage: Konva.Image // Konva.Image 对象用于显示签章图片\n\n    /**\n     * 创建一个 EditorStamp 实例。\n     * @param EditorOptions 初始化编辑器的选项\n     * @param defaultStampUrl 默认的签章图片 URL\n     */\n    constructor(EditorOptions: IEditorOptions, defaultStampUrl: string | null) {\n        super({ ...EditorOptions, editorType: AnnotationType.STAMP }) // 调用父类的构造函数\n        this.stampUrl = defaultStampUrl // 设置签章图片 URL\n        if (defaultStampUrl) {\n            this.createCursorImg() // 如果有默认签章图片 URL，则创建光标图像\n        }\n    }\n\n    /**\n     * 创建光标图像，并设置 CSS 自定义属性。\n     */\n    private createCursorImg() {\n        const cursorGroup = new Konva.Group({\n            draggable: false\n        })\n\n        // 从 URL 加载签章图片并处理\n        Konva.Image.fromURL(this.stampUrl, image => {\n            const { width, height } = image.getClientRect()\n            const { newWidth, newHeight } = resizeImage(width, height, defaultOptions.setting.MAX_CURSOR_SIZE)\n            const crosshair = { x: newWidth / 2, y: newHeight / 2 }\n\n            // 创建边框和交叉线\n            const border = new Konva.Rect({\n                x: 0,\n                y: 0,\n                width: newWidth,\n                height: newHeight,\n                stroke: 'red',\n                strokeWidth: 2\n            })\n            const horizontalLine = new Konva.Line({\n                points: [0, crosshair.y, newWidth, crosshair.y],\n                stroke: 'red',\n                strokeWidth: 1,\n                dash: [5, 5]\n            })\n            const verticalLine = new Konva.Line({\n                points: [crosshair.x, 0, crosshair.x, newHeight],\n                stroke: 'red',\n                strokeWidth: 1,\n                dash: [5, 5]\n            })\n            const point = new Konva.Circle({\n                x: crosshair.x,\n                y: crosshair.y,\n                radius: 5,\n                stroke: 'red'\n            })\n\n            // 设置签章图片属性并添加到组中\n            image.setAttrs({\n                x: 0,\n                y: 0,\n                width: newWidth,\n                height: newHeight,\n                visible: true\n            })\n            cursorGroup.add(image, horizontalLine, verticalLine, point, border)\n\n            // 将组转换为数据 URL，并设置 CSS 自定义属性\n            const cursorImg = cursorGroup.toDataURL()\n            cursorGroup.destroy()\n\n            setCssCustomProperty(CURSOR_CSS_PROPERTY, `url(${cursorImg}) ${crosshair.x} ${crosshair.y}, default`)\n        })\n    }\n\n    /**\n     * 处理鼠标按下事件的方法，创建新的形状组并添加签章图片。\n     * @param e Konva 事件对象\n     */\n    protected mouseDownHandler(e: KonvaEventObject<MouseEvent | TouchEvent>) {\n        if (e.currentTarget !== this.konvaStage) {\n            return // 如果事件不是在舞台上发生的，则直接返回\n        }\n        this.stampImage = null\n        this.currentShapeGroup = this.createShapeGroup() // 创建新的形状组\n        this.getBgLayer().add(this.currentShapeGroup.konvaGroup) // 将形状组添加到背景图层\n        const pos = this.konvaStage.getRelativePointerPosition()\n\n        // 从 URL 加载签章图片并处理\n        Konva.Image.fromURL(this.stampUrl, async image => {\n            const { width: width_rec, height: height_rec } = image.getClientRect()\n            const { newWidth, newHeight } = resizeImage(width_rec, height_rec, 120)\n            const crosshair = { x: newWidth / 2, y: newHeight / 2 }\n\n            this.stampImage = image\n            this.stampImage.setAttrs({\n                x: pos.x - crosshair.x,\n                y: pos.y - crosshair.y,\n                width: newWidth,\n                height: newHeight,\n                base64: this.stampUrl\n            })\n            this.currentShapeGroup.konvaGroup.add(this.stampImage)\n            const id = this.currentShapeGroup.konvaGroup.id()\n            this.setShapeGroupDone(\n                {\n                    id,\n                    contentsObj: {\n                        text: '',\n                        image: this.stampUrl\n                    },\n                }\n            )\n\n            this.stampImage = null\n        })\n    }\n\n    /**\n     * 激活编辑器并设置签章图片。\n     * @param konvaStage Konva 舞台对象\n     * @param annotation 新的注解对象\n     * @param stampUrl 签章图片的 URL\n     */\n    public activateWithStamp(konvaStage: Konva.Stage, annotation: IAnnotationType, stampUrl: string | null) {\n        super.activate(konvaStage, annotation) // 调用父类的激活方法\n        this.stampUrl = stampUrl // 设置签章图片 URL\n        if (stampUrl) {\n            this.createCursorImg() // 如果有签章图片 URL，则创建光标图像\n        }\n    }\n\n    /**\n     * 将序列化的 Konva.Group 添加到图层，并恢复其中的签章图片。\n     * @param konvaStage Konva 舞台对象\n     * @param konvaString 序列化的 Konva.Group 字符串表示\n     */\n    public addSerializedGroupToLayer(konvaStage: Konva.Stage, konvaString: string) {\n        const ghostGroup = Konva.Node.create(konvaString)\n        const oldImage = this.getGroupNodesByClassName(ghostGroup, 'Image')[0] as Konva.Image\n        const imageUrl = oldImage.getAttr('base64')\n        const oldText = this.getGroupNodesByClassName(ghostGroup, 'Text')[0] as Konva.Text\n        // 从 URL 加载签章图片并替换旧图片\n        Konva.Image.fromURL(imageUrl, async image => {\n            image.setAttrs(oldImage.getAttrs())\n            oldImage.destroy()\n            ghostGroup.add(image)\n            if (oldText) {\n                oldText.moveToTop()\n            }\n        })\n\n        // 将恢复后的组添加到背景图层\n        this.getBgLayer(konvaStage).add(ghostGroup)\n    }\n\n    // 以下是未实现的抽象方法的空实现\n    protected mouseMoveHandler() { }\n    protected mouseUpHandler() { }\n\n    protected changeStyle(): void {}\n}\n"
  },
  {
    "path": "src/painter/editor/selector.tsx",
    "content": "import Konva from 'konva'\n\nimport { IAnnotationStore } from '../../const/definitions'\nimport { SELECTOR_HOVER_STYLE, SHAPE_GROUP_NAME } from '../const'\nimport { KonvaCanvas } from '../index'\nimport { Modal } from 'antd'\nimport i18n from 'i18next'\nimport { IRect } from 'konva/lib/types'\nimport { defaultOptions } from '../../const/default_options'\n/**\n * 定义选择器的选项接口\n */\nexport interface ISelectorOptions {\n    konvaCanvasStore: Map<number, KonvaCanvas> // 存储各个页面的 Konva 画布实例\n    getAnnotationStore: (id: string) => IAnnotationStore // 获取注解存储的方法\n    onSelected: (id: string, isClick: boolean, transformerRect: IRect) => void // 选中回调\n    onCancel: () => void\n    onChanged: (id: string, konvaGroupString: string, rawAnnotationStore: IAnnotationStore, konvaClientRect: IRect, transformerRect: IRect) => void // 注解变化时的回调\n    onDelete: (id: string) => void // 删除注解时的回调\n}\n\n/**\n * 定义选择器类\n */\nexport class Selector {\n    public readonly onSelected: (id: string, isClick: boolean, clientRect: IRect) => void\n    public readonly onChanged: (id: string, konvaGroupString: string, rawAnnotationStore: IAnnotationStore, konvaClientRect: IRect, transformerRect: IRect) => void\n    public readonly onDelete: (id: string) => void\n    public readonly onCancel: () => void\n    private transformerStore: Map<string, Konva.Transformer> = new Map() // 存储变换器实例\n    private getAnnotationStore: (id: string) => IAnnotationStore // 获取注解存储的方法\n    private konvaCanvasStore: Map<number, KonvaCanvas> // 存储各个页面的 Konva 画布实例\n\n    private _currentTransformerId: string | null = null // 当前激活的变换器ID\n\n    private selectedId: string | null = null\n\n    // 构造函数，初始化选择器类\n    constructor({ konvaCanvasStore, getAnnotationStore, onDelete, onSelected, onCancel, onChanged }: ISelectorOptions) {\n        this.konvaCanvasStore = konvaCanvasStore\n        this.getAnnotationStore = getAnnotationStore\n        this.onDelete = onDelete\n        this.onSelected = onSelected\n        this.onCancel = onCancel\n        this.onChanged = onChanged\n    }\n\n    // 获取当前激活的变换器ID\n    get currentTransformerId(): string | null {\n        return this._currentTransformerId\n    }\n\n    // 设置当前激活的变换器ID，并处理变换器状态的更新\n    set currentTransformerId(id: string | null) {\n        if (this._currentTransformerId !== id) {\n            this.selectedId = id\n            this.deactivateTransformer(this._currentTransformerId)\n            this._currentTransformerId = id\n        }\n    }\n\n    /**\n     * 禁用给定 Konva Stage上的默认事件。\n     * @param konvaStage - 要禁用事件的 Konva Stage。\n     */\n    private disableStageEvents(konvaStage: Konva.Stage): void {\n        konvaStage.off('click mousedown mousemove mouseup touchstart touchmove touchend')\n    }\n\n    /**\n     * 绑定 Konva Stage上的全局点击事件。\n     * @param konvaStage - 要绑定事件的 Konva Stage。\n     */\n    private bindStageEvents(konvaStage: Konva.Stage): void {\n        konvaStage.on('click tap', e => {\n            if (e.target !== konvaStage) return\n            this.clearTransformers()\n        })\n    }\n\n    /**\n     * 获取 Konva Stage的背景图层。\n     * @param konvaStage - 要获取背景图层的 Konva Stage。\n     * @returns Konva Stage的背景图层。\n     */\n    private getBackgroundLayer(konvaStage: Konva.Stage): Konva.Layer {\n        return konvaStage.getLayers()[0]\n    }\n\n    /**\n     * 获取给定 Konva Stage上的所有形状组。\n     * @param konvaStage - 要获取形状组的 Konva Stage。\n     * @returns 形状组的数组。\n     */\n    private getPageShapeGroups(konvaStage: Konva.Stage): Konva.Group[] {\n        return this.getBackgroundLayer(konvaStage).getChildren(node => node.name() === SHAPE_GROUP_NAME) as Konva.Group[]\n    }\n\n    // 获取指定 id 的形状组\n    private getGroupById(konvaStage: Konva.Stage, groupId: string): Konva.Group | null {\n        const pageGroups = this.getPageShapeGroups(konvaStage)\n        return pageGroups.find(group => group.id() === groupId) || null\n    }\n\n    private getFirstShapeInGroup(group: Konva.Group): Konva.Shape | null {\n        return (group.getChildren().find(node => node instanceof Konva.Shape) as Konva.Shape) || null\n    }\n\n    /**\n     * 启用给定组中的所有形状的交互功能。\n     * @param groups - 要启用的形状组。\n     * @param konvaStage - 形状组所在的 Konva Stage。\n     */\n    private enableShapeGroups(groups: Konva.Group[], konvaStage: Konva.Stage): void {\n        groups.forEach(group => {\n            group.getChildren().forEach(shape => {\n                if (shape instanceof Konva.Shape) {\n                    this.removeShapeEvents(shape)\n                    this.bindShapeEvents(shape, konvaStage)\n                }\n            })\n        })\n    }\n\n    /**\n     * 禁用给定组中的所有形状的交互功能。\n     * @param groups - 要禁用的形状组。\n     */\n    private disableShapeGroups(groups: Konva.Group[]): void {\n        groups.forEach(group => {\n            group.getChildren().forEach(shape => {\n                if (shape instanceof Konva.Shape) {\n                    this.removeShapeEvents(shape)\n                }\n            })\n        })\n    }\n\n    /**\n     * 为给定形状绑定点击、鼠标悬停和鼠标离开事件。\n     * @param shape - 要绑定事件的形状。\n     * @param konvaStage - 形状所在的 Konva Stage。\n     */\n    private bindShapeEvents(shape: Konva.Shape, konvaStage: Konva.Stage): void {\n        if (defaultOptions.setting.DB_CLICK_DELETE) {\n            shape.on('pointerdblclick', () => {\n                Modal.confirm({\n                    title: i18n.t('normal.deleteConfirm'),\n                    type: 'warn',\n                    destroyOnClose: true,\n                    centered: true,\n                    okText: i18n.t('normal.yes'),\n                    cancelText: i18n.t('normal.no'),\n                    onOk: () => {\n                        this.onDelete(this.currentTransformerId)\n                        this.clearTransformers()\n                    }\n                })\n            })\n        }\n\n\n        shape.on('pointerclick', e => {\n            if (e.evt.button === 0) {\n                this.handleShapeClick(shape, konvaStage, true)\n            }\n        })\n        shape.on('mouseover', e => {\n            if (e.evt.button === 0) {\n                this.handleShapeMouseover()\n            }\n        })\n        shape.on('mouseout', e => {\n            if (e.evt.button === 0) {\n                this.handleShapeMouseout()\n            }\n        })\n    }\n\n    /**\n     * 移除给定形状上的所有绑定事件。\n     * @param shape - 要移除事件的形状。\n     */\n    private removeShapeEvents(shape: Konva.Shape): void {\n        shape.off('pointerclick mouseover mouseout pointerdblclick')\n    }\n\n    /**\n     * 处理形状的点击事件。\n     * @param shape - 被点击的形状。\n     * @param konvaStage - 形状所在的 Konva Stage。\n     */\n    private handleShapeClick(shape: Konva.Shape, konvaStage: Konva.Stage, isClick: boolean = false): void {\n        const group = shape.findAncestor(`.${SHAPE_GROUP_NAME}`) as Konva.Group\n\n        if (!group) return\n        this.clearTransformers() // 清除之前的变换器\n        this.createTransformer(group, konvaStage, !isClick)\n        const selectorRect = this.transformerStore.get(group.id()).getClientRect()\n        this.onSelected(group.id(), isClick, selectorRect)\n    }\n\n    /**\n     * 创建变形区域\n     * @param group\n     * @param konvaStage\n     */\n    private createTransformer(group: Konva.Group, konvaStage: Konva.Stage, flash: boolean) {\n        const line = group.children[0] as Konva.Line\n        const groupId = group.id()\n        this.currentTransformerId = groupId\n        const rawAnnotationStore = this.getAnnotationStore(groupId)\n        group.off('dragend')\n        const transformer = new Konva.Transformer({\n            resizeEnabled: rawAnnotationStore.resizable,\n            rotateEnabled: false,\n            borderStrokeWidth: defaultOptions.chooseSetting.STROKEWIDTH,\n            borderStroke: defaultOptions.chooseSetting.COLOR,\n            anchorFill: defaultOptions.chooseSetting.COLOR,\n            anchorStroke: defaultOptions.chooseSetting.COLOR,\n            opacity: defaultOptions.chooseSetting.OPACITY,\n            anchorCornerRadius: 5,\n            anchorStrokeWidth: 2,\n            anchorSize: 8,\n            padding: 1,\n            boundBoxFunc: (oldBox, newBox) => {\n                newBox.width = Math.max(30, newBox.width)\n                return newBox\n            }\n        })\n\n        if (line.attrs.id && line.attrs.id === 'note') {\n            transformer.resizeEnabled(false)\n        }\n        group.draggable(rawAnnotationStore.draggable)\n\n        transformer.off('transformend')\n        transformer.off('transformstart')\n        transformer.on('transformend', () => {\n            this.onChanged(group.id(), group.toJSON(), { ...rawAnnotationStore }, Konva.Node.create(group.toJSON()).getClientRect(), transformer.getClientRect())\n        })\n        transformer.on('transformstart', () => {\n            this.onCancel()\n        })\n\n        transformer.on('dragstart', () => {\n            this.onCancel()\n        })\n\n        transformer.on('dragend', () => {\n            this.onChanged(group.id(), group.toJSON(), { ...rawAnnotationStore }, Konva.Node.create(group.toJSON()).getClientRect(), transformer.getClientRect())\n        })\n\n        transformer.on('dragmove', () => {\n            const boxes = transformer.nodes().map(node => node.getClientRect())\n            const box = this.getTotalBox(boxes)\n            transformer.nodes().forEach(shape => {\n                const absPos = shape.getAbsolutePosition()\n                // where are shapes inside bounding box of all shapes?\n                const offsetX = box.x - absPos.x\n                const offsetY = box.y - absPos.y\n\n                // we total box goes outside of viewport, we need to move absolute position of shape\n                const halfWidth = box.width / 2\n                const halfHeight = box.height / 2\n                const newAbsPos = { ...absPos }\n                if (box.x + halfWidth < 0) {\n                    newAbsPos.x = -offsetX - halfWidth\n                }\n                if (box.y + halfHeight < 0) {\n                    newAbsPos.y = -offsetY - halfHeight\n                }\n                if (box.x + halfWidth > konvaStage.width()) {\n                    newAbsPos.x = konvaStage.width() - halfWidth - offsetX\n                }\n                if (box.y + halfHeight > konvaStage.height()) {\n                    newAbsPos.y = konvaStage.height() - halfHeight - offsetY\n                }\n                shape.setAbsolutePosition(newAbsPos)\n            })\n        })\n\n        transformer.nodes([group])\n        this.getBackgroundLayer(konvaStage).add(transformer)\n        this.transformerStore.set(groupId, transformer)\n        if (flash) {\n            this.flashNodeWithTransformer(group, transformer, () => {\n                this.onSelected(group.id(), false, transformer.getClientRect())\n            });\n        }\n    }\n    private flashNodeWithTransformer(\n        group: Konva.Group,\n        transformer: Konva.Transformer,\n        onFinish?: () => void\n    ) {\n        let flashCount = 0;\n        const maxFlashes = 1;\n        const fadeDuration = 0.1;\n\n        const originalStroke = transformer.borderStroke();\n        const highlightStroke = 'red';\n\n        const fadeOut = () => {\n            const groupTween = new Konva.Tween({\n                node: group,\n                duration: fadeDuration,\n                opacity: 0,\n                onFinish: () => {\n                    try {\n                        transformer.borderStroke(highlightStroke);\n                        transformer.getLayer()?.batchDraw();\n                        fadeIn();\n                    } catch { }\n                }\n            });\n            groupTween.play();\n        };\n\n        const fadeIn = () => {\n            const groupTween = new Konva.Tween({\n                node: group,\n                duration: fadeDuration,\n                opacity: 1,\n                onFinish: () => {\n                    try {\n                        transformer.borderStroke(originalStroke);\n                        transformer.getLayer()?.batchDraw();\n                        flashCount++;\n                        if (flashCount < maxFlashes) {\n                            setTimeout(fadeOut, 100);\n                        } else {\n                            // ✅ 动画全部完成，调用回调\n                            if (onFinish) {\n                                onFinish();\n                            }\n                        }\n                    } catch { }\n\n                }\n            });\n            groupTween.play();\n        };\n\n        fadeOut(); // 启动第一轮\n    }\n\n\n\n    /**\n     * 获取所有形状的总包围盒。\n     * @param boxes\n     * @returns\n     */\n    private getTotalBox(boxes: IRect[]): IRect {\n        let minX = Infinity\n        let minY = Infinity\n        let maxX = -Infinity\n        let maxY = -Infinity\n\n        boxes.forEach(box => {\n            minX = Math.min(minX, box.x)\n            minY = Math.min(minY, box.y)\n            maxX = Math.max(maxX, box.x + box.width)\n            maxY = Math.max(maxY, box.y + box.height)\n        })\n        return {\n            x: minX,\n            y: minY,\n            width: maxX - minX,\n            height: maxY - minY\n        }\n    }\n\n    /**\n     * 根据悬停状态切换光标样式。\n     * @param add - 是否添加悬停样式。\n     */\n    private toggleCursorStyle(add: boolean): void {\n        document.body.classList.toggle(SELECTOR_HOVER_STYLE, add)\n    }\n\n    /**\n     * 处理形状的鼠标悬停事件。\n     */\n    private handleShapeMouseover(): void {\n        this.toggleCursorStyle(true)\n    }\n\n    /**\n     * 处理形状的鼠标离开事件。\n     */\n    private handleShapeMouseout(): void {\n        this.toggleCursorStyle(false)\n    }\n\n    /**\n     * 清除所有变换器。\n     */\n    private clearTransformers(): void {\n        this.toggleCursorStyle(false)\n        this.transformerStore.forEach(transformer => {\n            if (transformer) {\n                transformer.nodes().forEach(group => {\n                    if (group instanceof Konva.Group) {\n                        group.draggable(false)\n                    }\n                })\n                transformer.nodes([])\n                transformer.destroy()\n                \n            }\n        })\n        this.transformerStore.clear()\n        this.currentTransformerId = null\n        this.onCancel()\n    }\n\n    /**\n     * 激活指定变换器。\n     * @param transformerId - 要激活的变换器ID。\n     */\n    private activateTransformer(transformerId: string | null): void {\n        if (transformerId) {\n            const transformer = this.transformerStore.get(transformerId)\n            if (transformer) {\n                transformer.nodes().forEach(group => {\n                    if (group instanceof Konva.Group) {\n                        group.draggable(true)\n                    }\n                })\n            }\n        }\n    }\n\n    /**\n     * 停用指定变换器。\n     * @param transformerId - 要停用的变换器ID。\n     */\n    private deactivateTransformer(transformerId: string | null): void {\n        if (transformerId) {\n            const transformer = this.transformerStore.get(transformerId)\n            if (transformer) {\n                transformer.nodes().forEach(group => {\n                    if (group instanceof Konva.Group) {\n                        group.draggable(false)\n                    }\n                })\n            }\n        }\n    }\n\n    private selectedShape(id: string, konvaStage: Konva.Stage) {\n        const group = this.getGroupById(konvaStage, id)\n        if (!group) {\n            return\n        }\n        const shape = this.getFirstShapeInGroup(group)\n        if (!shape) {\n            return\n        }\n        this.handleShapeClick(shape, konvaStage, false)\n    }\n\n    /**\n     * 清除选择器的所有状态和事件。\n     */\n    public clear(): void {\n        this.clearTransformers()\n        this.konvaCanvasStore.forEach(konvaCanvas => {\n            const { konvaStage } = konvaCanvas\n            const pageGroups = this.getPageShapeGroups(konvaStage)\n            this.disableStageEvents(konvaStage)\n            this.disableShapeGroups(pageGroups)\n        })\n    }\n\n    /**\n     * 在指定页面上激活选择器。\n     * @param pageNumber - 要激活选择器的页面号。\n     */\n    public activate(pageNumber: number): void {\n        const konvaCanvas = this.konvaCanvasStore.get(pageNumber)\n        if (!konvaCanvas) return\n        const { konvaStage } = konvaCanvas\n        const pageGroups = this.getPageShapeGroups(konvaStage)\n        this.disableStageEvents(konvaStage)\n        this.bindStageEvents(konvaStage)\n        this.enableShapeGroups(pageGroups, konvaStage)\n        if (this.selectedId) {\n            this.selectedShape(this.selectedId, konvaStage)\n        }\n    }\n\n    /**\n     * 选择指定的形状组。\n     * @param id - 要选择的形状组的 ID。\n     */\n    public select(id: string): void {\n        this.selectedId = id\n    }\n\n    public delete() {\n        this.clearTransformers()\n    }\n}\n"
  },
  {
    "path": "src/painter/index.scss",
    "content": ".PdfjsAnnotationExtension_painter_wrapper {\n    position: absolute;\n    text-align: initial;\n    top: 0;\n    inset: 0;\n    overflow: hidden;\n    line-height: 1;\n    text-size-adjust: none;\n    forced-color-adjust: none;\n    transform-origin: 0 0;\n    z-index: 1;\n}\n\n.PdfjsAnnotationExtension_selector_hover {\n    .PdfjsAnnotationExtension_painter_wrapper {\n        cursor: pointer !important;\n    }\n}\n\n.PdfjsAnnotationExtension_is_painting {\n    .PdfjsAnnotationExtension_painter_wrapper {\n        z-index: 999;\n    }\n}\n\n.PdfjsAnnotationExtension_painting_type_1,\n.PdfjsAnnotationExtension_painting_type_2,\n.PdfjsAnnotationExtension_painting_type_3 {\n    .textLayer {\n        &:not(.free) span {\n            cursor: var(--editorHighlight-editing-cursor);\n        }\n    }\n}\n\n.PdfjsAnnotationExtension_painting_type_4,\n.PdfjsAnnotationExtension_painting_type_5,\n.PdfjsAnnotationExtension_painting_type_6,\n.PdfjsAnnotationExtension_painting_type_11,\n.PdfjsAnnotationExtension_painting_type_12,\n.PdfjsAnnotationExtension_painting_type_13 {\n    .PdfjsAnnotationExtension_painter_wrapper {\n        cursor: crosshair;\n    }\n}\n.PdfjsAnnotationExtension_painting_type_7 {\n    .PdfjsAnnotationExtension_painter_wrapper {\n        cursor: var(--editorInk-editing-cursor);\n    }\n}\n\n.PdfjsAnnotationExtension_painting_type_8 {\n    .PdfjsAnnotationExtension_painter_wrapper {\n        cursor: var(--editorFreeHighlight-editing-cursor);\n    }\n}\n\n.PdfjsAnnotationExtension_painting_type_9,\n.PdfjsAnnotationExtension_painting_type_10 {\n    .PdfjsAnnotationExtension_painter_wrapper {\n        cursor: var(--PdfjsAnnotationExtension-image-cursor);\n    }\n}\n"
  },
  {
    "path": "src/painter/index.ts",
    "content": "import './index.scss' // 导入画笔样式文件\n\nimport Konva from 'konva'\nimport { EventBus, PageViewport, PDFPageView, PDFViewerApplication } from 'pdfjs'\n\nimport { annotationDefinitions, AnnotationType, IAnnotationStore, IAnnotationStyle, IAnnotationType } from '../const/definitions'\nimport { isElementInDOM, removeCssCustomProperty } from '../utils/utils'\nimport { CURSOR_CSS_PROPERTY, PAINTER_IS_PAINTING_STYLE, PAINTER_PAINTING_TYPE, PAINTER_WRAPPER_PREFIX } from './const'\nimport { Editor } from './editor/editor'\nimport { EditorCircle } from './editor/editor_circle'\nimport { EditorFreeHand } from './editor/editor_free_hand'\nimport { EditorFreeHighlight } from './editor/editor_free_highlight'\nimport { EditorFreeText } from './editor/editor_free_text'\nimport { EditorHighLight } from './editor/editor_highlight'\nimport { EditorRectangle } from './editor/editor_rectangle'\nimport { EditorSignature } from './editor/editor_signature'\nimport { EditorStamp } from './editor/editor_stamp'\nimport { EditorNote } from './editor/editor_note'\nimport { Selector } from './editor/selector'\nimport { Store } from './store'\nimport { WebSelection } from './webSelection'\nimport { Transform } from './transform/transform'\nimport { EditorArrow } from './editor/editor_arrow'\nimport { EditorCloud } from './editor/editor_cloud'\nimport { IRect } from 'konva/lib/types'\n\n// KonvaCanvas 接口定义\nexport interface KonvaCanvas {\n    pageNumber: number\n    konvaStage: Konva.Stage\n    wrapper: HTMLDivElement\n    isActive: boolean\n}\n\n// Painter 类定义\nexport class Painter {\n    private userName: string\n    private konvaCanvasStore: Map<number, KonvaCanvas> = new Map() // 存储 KonvaCanvas 实例\n    private editorStore: Map<string, Editor> = new Map() // 存储编辑器实例\n    private pdfViewerApplication: PDFViewerApplication // PDFViewerApplication 实例\n    private pdfjsEventBus: EventBus // PDF.js EventBus 实例\n    private webSelection: WebSelection // WebSelection 实例\n    private currentAnnotation: IAnnotationType | null = null // 当前批注类型\n    private store: Store // 存储实例\n    private selector: Selector // 选择器实例\n    private transform: Transform // 转换器\n    private tempDataTransfer: string | null // 临时数据传输\n    public readonly setDefaultMode: () => void // 设置默认模式的函数引用\n    public readonly onWebSelectionSelected: (range: Range) => void\n    public readonly onStoreAdd: (annotationStore: IAnnotationStore, isOriginal: boolean, currentAnnotation: IAnnotationType) => void\n    public readonly onStoreDelete: (id: string) => void\n    public readonly onAnnotationSelected: (annotationStore: IAnnotationStore, isClick: boolean, selectorRect: IRect) => void\n    public readonly onAnnotationChange: (annotationStore: IAnnotationStore) => void\n    public readonly onAnnotationChanging: () => void // 批注正在更改的回调函数\n    public readonly onAnnotationChanged: (annotationStore: IAnnotationStore, selectorRect: IRect) => void // 批注已更改的回调函数\n    /**\n     * 构造函数，初始化 PDFViewerApplication, EventBus, 和 WebSelection\n     * @param params - 包含 PDFViewerApplication 和 EventBus 的对象\n     */\n    constructor({\n        userName,\n        PDFViewerApplication,\n        PDFJS_EventBus,\n        setDefaultMode,\n        onWebSelectionSelected,\n        onStoreAdd,\n        onStoreDelete,\n        onAnnotationSelected,\n        onAnnotationChange,\n        onAnnotationChanging,\n        onAnnotationChanged\n    }: {\n        userName: string\n        PDFViewerApplication: PDFViewerApplication\n        PDFJS_EventBus: EventBus\n        setDefaultMode: () => void\n        onWebSelectionSelected: (range: Range) => void\n        onStoreAdd: (annotationStore: IAnnotationStore, isOriginal: boolean, currentAnnotation: IAnnotationType) => void\n        onStoreDelete: (id: string) => void\n        onAnnotationSelected: (annotationStore: IAnnotationStore, isClick: boolean, selectorRect: IRect) => void\n        onAnnotationChange: (annotationStore: IAnnotationStore) => void\n        onAnnotationChanging: () => void\n        onAnnotationChanged: (annotationStore: IAnnotationStore, selectorRect: IRect) => void\n    }) {\n        this.userName = userName\n        this.pdfViewerApplication = PDFViewerApplication // 初始化 PDFViewerApplication\n        this.pdfjsEventBus = PDFJS_EventBus // 初始化 PDF.js EventBus\n        this.setDefaultMode = setDefaultMode // 设置默认模式的函数\n        this.onWebSelectionSelected = onWebSelectionSelected\n        this.onStoreAdd = onStoreAdd\n        this.onStoreDelete = onStoreDelete\n        this.onAnnotationSelected = onAnnotationSelected\n        this.onAnnotationChange = onAnnotationChange\n        this.onAnnotationChanging = onAnnotationChanging // 批注正在更改的回调函数\n        this.onAnnotationChanged = onAnnotationChanged // 批注已更改的回调函数\n        this.store = new Store({ PDFViewerApplication }) // 初始化存储实例\n        this.selector = new Selector({\n            // 初始化选择器实例\n            konvaCanvasStore: this.konvaCanvasStore,\n            getAnnotationStore: (id: string) => {\n                return this.store.annotation(id)\n            },\n            onSelected: (id, isClick, transformerRect) => {\n                this.onAnnotationSelected(this.store.annotation(id), isClick, transformerRect)\n            },\n            onChanged: async (id, groupString, _rawAnnotationStore, konvaClientRect, transformerRect) => {\n                const editor = this.findEditorForGroupId(id)\n                if (editor) {\n                    this.updateStore(id, { konvaString: groupString, konvaClientRect })\n                }\n                this.onAnnotationChanged(this.store.annotation(id), transformerRect)\n            },\n            onCancel: () => {\n                this.onAnnotationChanging() // 批注正在更改的回调\n            },\n            onDelete: id => {\n                this.deleteAnnotation(id, true)\n            }\n        })\n        this.webSelection = new WebSelection({\n            // 初始化 WebSelection 实例\n            onSelect: range => {\n                this.onWebSelectionSelected(range)\n            },\n            onHighlight: selection => {\n                Object.keys(selection).forEach(key => {\n                    const pageNumber = Number(key)\n                    const elements = selection[key]\n                    const canvas = this.konvaCanvasStore.get(pageNumber)\n                    if (canvas) {\n                        const { konvaStage, wrapper } = canvas\n                        let storeEditor = this.findEditor(pageNumber, this.currentAnnotation.type) as EditorHighLight\n                        if (!storeEditor) {\n                            storeEditor = new EditorHighLight(\n                                {\n                                    userName: this.userName,\n                                    pdfViewerApplication: this.pdfViewerApplication,\n                                    konvaStage,\n                                    pageNumber,\n                                    annotation: this.currentAnnotation,\n                                    onAdd: annotationStore => {\n                                        this.saveToStore(annotationStore)\n                                    },\n                                    onChange: (id, updates) => {\n                                        this.updateStore(id, updates) // 更新存储\n                                    }\n                                },\n                                this.currentAnnotation.type\n                            )\n                            this.editorStore.set(storeEditor.id, storeEditor)\n                        }\n                        storeEditor.convertTextSelection(elements, wrapper)\n                    }\n                })\n            }\n        })\n        this.transform = new Transform(PDFViewerApplication)\n        this.bindGlobalEvents() // 绑定全局事件\n    }\n\n    /**\n     * 绑定全局事件。\n     */\n    private bindGlobalEvents(): void {\n        window.addEventListener('keyup', this.globalKeyUpHandler) // 监听全局键盘事件\n    }\n\n    /**\n     * 全局键盘抬起事件处理器。\n     * @param e - 键盘事件。\n     */\n    private globalKeyUpHandler = (e: KeyboardEvent): void => {\n        if (e.code === 'Escape' && (this.currentAnnotation.type === AnnotationType.SIGNATURE || this.currentAnnotation.type === AnnotationType.STAMP)) {\n            removeCssCustomProperty(CURSOR_CSS_PROPERTY) // 移除自定义 CSS 属性\n            this.setDefaultMode() // 设置默认模式\n        }\n    }\n\n    /**\n     * 创建绘图容器 (painterWrapper)\n     * @param pageView - 当前 PDF 页面视图\n     * @param pageNumber - 当前页码\n     * @returns 绘图容器元素\n     */\n    private createPainterWrapper(pageView: PDFPageView, pageNumber: number): HTMLDivElement {\n        const wrapper = document.createElement('div') // 创建 div 元素作为绘图容器\n        wrapper.id = `${PAINTER_WRAPPER_PREFIX}_page_${pageNumber}` // 设置 id\n        wrapper.classList.add(PAINTER_WRAPPER_PREFIX) // 添加类名\n        pageView.div.appendChild(wrapper)\n        return wrapper\n    }\n\n    /**\n     * 创建 Konva Stage\n     * @param container - 绘图容器元素\n     * @param viewport - 当前 PDF 页面视口\n     * @returns Konva Stage\n     */\n    private createKonvaStage(container: HTMLDivElement, viewport: PageViewport): Konva.Stage {\n        const stage = new Konva.Stage({\n            container,\n            width: viewport.width,\n            height: viewport.height,\n            scale: { x: viewport.scale, y: viewport.scale }\n        })\n\n        const backgroundLayer = new Konva.Layer()\n        stage.add(backgroundLayer)\n\n        return stage\n    }\n\n    /**\n     * 清理无效的 canvasStore\n     */\n    private cleanUpInvalidStore(): void {\n        this.konvaCanvasStore.forEach(konvaCanvas => {\n            if (!isElementInDOM(konvaCanvas.wrapper)) {\n                konvaCanvas.konvaStage.destroy()\n                this.konvaCanvasStore.delete(konvaCanvas.pageNumber)\n            }\n        })\n    }\n\n    /**\n     * 插入新的绘图容器和 Konva Stage\n     * @param pageView - 当前 PDF 页面视图\n     * @param pageNumber - 当前页码\n     */\n    private insertCanvas(pageView: PDFPageView, pageNumber: number): void {\n        this.cleanUpInvalidStore()\n        const painterWrapper = this.createPainterWrapper(pageView, pageNumber)\n        const konvaStage = this.createKonvaStage(painterWrapper, pageView.viewport)\n\n        this.konvaCanvasStore.set(pageNumber, { pageNumber, konvaStage, wrapper: painterWrapper, isActive: false })\n        this.reDrawAnnotation(pageNumber) // 重绘批注\n        this.enablePainting() // 启用绘画\n    }\n\n    /**\n     * 调整现有 KonvaCanvas 的缩放\n     * @param pageView - 当前 PDF 页面视图\n     * @param pageNumber - 当前页码\n     */\n    private scaleCanvas(pageView: PDFPageView, pageNumber: number): void {\n        const konvaCanvas = this.konvaCanvasStore.get(pageNumber)\n        if (!konvaCanvas) return\n\n        const { konvaStage } = konvaCanvas\n        const { scale, width, height } = pageView.viewport\n\n        konvaStage.scale({ x: scale, y: scale })\n        konvaStage.width(width)\n        konvaStage.height(height)\n    }\n\n    /**\n     * 设置当前模式 (绘画模式、默认模式)\n     * @param mode - 模式类型 ('painting', 'default')\n     */\n    private setMode(mode: 'painting' | 'default'): void {\n        const isPainting = mode === 'painting' // 是否绘画模式\n        document.body.classList.toggle(`${PAINTER_IS_PAINTING_STYLE}`, isPainting) // 添加或移除绘画模式样式\n        const allAnnotationClasses = Object.values(AnnotationType)\n            .filter(type => typeof type === 'number')\n            .map(type => `${PAINTER_PAINTING_TYPE}_${type}`)\n        // 移除所有可能存在的批注类型样式\n        allAnnotationClasses.forEach(cls => document.body.classList.remove(cls))\n        // 移出签名鼠标指针变量\n        removeCssCustomProperty(CURSOR_CSS_PROPERTY)\n\n        if (this.currentAnnotation) {\n            document.body.classList.add(`${PAINTER_PAINTING_TYPE}_${this.currentAnnotation?.type}`)\n        }\n    }\n\n    /**\n     * 保存到存储\n     */\n    private saveToStore(annotationStore: IAnnotationStore, isOriginal: boolean = false) {\n        const currentAnnotation = annotationDefinitions.find(item => item.pdfjsAnnotationType === annotationStore.pdfjsType)\n        this.onStoreAdd(this.store.save(annotationStore, isOriginal), isOriginal, currentAnnotation)\n    }\n\n    /**\n     * 更新存储\n     */\n    private updateStore(id: string, updates: Partial<IAnnotationStore>) {\n        this.onAnnotationChange(this.store.update(id, updates))\n    }\n\n    /**\n     * 根据组 ID 查找编辑器\n     * @param groupId - 组 ID\n     * @returns 编辑器实例\n     */\n    private findEditorForGroupId(groupId: string): Editor {\n        let editor: Editor = null\n        this.editorStore.forEach(_editor => {\n            if (_editor.shapeGroupStore?.has(groupId)) {\n                editor = _editor\n                return\n            }\n        })\n        return editor\n    }\n\n    /**\n     * 根据页码和编辑器类型查找编辑器\n     * @param pageNumber - 页码\n     * @param editorType - 编辑器类型\n     * @returns 编辑器实例\n     */\n    private findEditor(pageNumber: number, editorType: AnnotationType): Editor {\n        return this.editorStore.get(`${pageNumber}_${editorType}`)\n    }\n\n    /**\n     * 启用特定类型的编辑器\n     * @param options - 包含 Konva Stage、页码和批注类型的对象\n     */\n    private enableEditor({ konvaStage, pageNumber, annotation }: { konvaStage: Konva.Stage; pageNumber: number; annotation: IAnnotationType }): void {\n        const storeEditor = this.findEditor(pageNumber, annotation.type) // 查找存储中的编辑器实例\n        if (storeEditor) {\n            if (storeEditor instanceof EditorSignature) {\n                storeEditor.activateWithSignature(konvaStage, annotation, this.tempDataTransfer) // 激活带有签名的编辑器\n                return\n            }\n            if (storeEditor instanceof EditorStamp) {\n                storeEditor.activateWithStamp(konvaStage, annotation, this.tempDataTransfer) // 激活带有图章的编辑器\n                return\n            }\n            storeEditor.activate(konvaStage, annotation) // 激活编辑器\n            return\n        }\n        let editor: Editor | null = null // 初始化编辑器为空\n        switch (annotation.type) {\n            case AnnotationType.FREETEXT:\n                editor = new EditorFreeText({\n                    userName: this.userName,\n                    pdfViewerApplication: this.pdfViewerApplication,\n                    konvaStage,\n                    pageNumber,\n                    annotation,\n                    onAdd: annotationStore => {\n                        this.saveToStore(annotationStore)\n                    },\n                    onChange: (id, updates) => {\n                        this.updateStore(id, updates) // 更新存储\n                    }\n                })\n                break\n            case AnnotationType.RECTANGLE:\n                editor = new EditorRectangle({\n                    userName: this.userName,\n                    pdfViewerApplication: this.pdfViewerApplication,\n                    konvaStage,\n                    pageNumber,\n                    annotation,\n                    onAdd: annotationStore => {\n                        this.saveToStore(annotationStore)\n                    },\n                    onChange: (id, updates) => {\n                        this.updateStore(id, updates) // 更新存储\n                    }\n                })\n                break\n            case AnnotationType.ARROW:\n                editor = new EditorArrow({\n                    userName: this.userName,\n                    pdfViewerApplication: this.pdfViewerApplication,\n                    konvaStage,\n                    pageNumber,\n                    annotation,\n                    onAdd: annotationStore => {\n                        this.saveToStore(annotationStore)\n                    },\n                    onChange: (id, updates) => {\n                        this.updateStore(id, updates) // 更新存储\n                    }\n                })\n                break\n            case AnnotationType.CLOUD:\n                editor = new EditorCloud({\n                    userName: this.userName,\n                    pdfViewerApplication: this.pdfViewerApplication,\n                    konvaStage,\n                    pageNumber,\n                    annotation,\n                    onAdd: annotationStore => {\n                        this.saveToStore(annotationStore)\n                    },\n                    onChange: (id, updates) => {\n                        this.updateStore(id, updates) // 更新存储\n                    }\n                })\n                break\n            case AnnotationType.CIRCLE:\n                editor = new EditorCircle({\n                    userName: this.userName,\n                    pdfViewerApplication: this.pdfViewerApplication,\n                    konvaStage,\n                    pageNumber,\n                    annotation,\n                    onAdd: annotationStore => {\n                        this.saveToStore(annotationStore)\n                    },\n                    onChange: (id, updates) => {\n                        this.updateStore(id, updates) // 更新存储\n                    }\n                })\n                break\n            case AnnotationType.NOTE:\n                editor = new EditorNote({\n                    userName: this.userName,\n                    pdfViewerApplication: this.pdfViewerApplication,\n                    konvaStage,\n                    pageNumber,\n                    annotation,\n                    onAdd: annotationStore => {\n                        this.saveToStore(annotationStore)\n                    },\n                    onChange: () => {}\n                })\n                break\n            case AnnotationType.FREEHAND:\n                editor = new EditorFreeHand({\n                    userName: this.userName,\n                    pdfViewerApplication: this.pdfViewerApplication,\n                    konvaStage,\n                    pageNumber,\n                    annotation,\n                    onAdd: annotationStore => {\n                        this.saveToStore(annotationStore)\n                    },\n                    onChange: (id, updates) => {\n                        this.updateStore(id, updates) // 更新存储\n                    }\n                })\n                break\n            case AnnotationType.FREE_HIGHLIGHT:\n                editor = new EditorFreeHighlight({\n                    userName: this.userName,\n                    pdfViewerApplication: this.pdfViewerApplication,\n                    konvaStage,\n                    pageNumber,\n                    annotation,\n                    onAdd: annotationStore => {\n                        this.saveToStore(annotationStore)\n                    },\n                    onChange: (id, updates) => {\n                        this.updateStore(id, updates) // 更新存储\n                    }\n                })\n                break\n            case AnnotationType.SIGNATURE:\n                editor = new EditorSignature(\n                    {\n                        userName: this.userName,\n                        pdfViewerApplication: this.pdfViewerApplication,\n                        konvaStage,\n                        pageNumber,\n                        annotation,\n                        onAdd: annotationStore => {\n                            this.saveToStore(annotationStore)\n                        },\n                        onChange: () => {}\n                    },\n                    this.tempDataTransfer\n                )\n                break\n            case AnnotationType.STAMP:\n                editor = new EditorStamp(\n                    {\n                        userName: this.userName,\n                        pdfViewerApplication: this.pdfViewerApplication,\n                        konvaStage,\n                        pageNumber,\n                        annotation,\n                        onAdd: annotationStore => {\n                            this.saveToStore(annotationStore)\n                        },\n                        onChange: () => {}\n                    },\n                    this.tempDataTransfer\n                )\n                break\n            case AnnotationType.HIGHLIGHT:\n            case AnnotationType.UNDERLINE:\n            case AnnotationType.STRIKEOUT:\n                editor = new EditorHighLight(\n                    {\n                        userName: this.userName,\n                        pdfViewerApplication: this.pdfViewerApplication,\n                        konvaStage,\n                        pageNumber,\n                        annotation,\n                        onAdd: annotationStore => {\n                            this.saveToStore(annotationStore)\n                        },\n                        onChange: (id, updates) => {\n                            this.updateStore(id, updates) // 更新存储\n                        }\n                    },\n                    annotation.type\n                )\n                break\n            case AnnotationType.SELECT:\n                this.selector.activate(pageNumber) // 激活选择器\n                break\n\n            default:\n                console.warn(`未实现的批注类型: ${annotation.type}`)\n                return\n        }\n\n        if (editor) {\n            this.editorStore.set(editor.id, editor) // 将编辑器实例存储到 editorStore\n        }\n    }\n\n    /**\n     * 启用绘画\n     */\n    private enablePainting(): void {\n        this.konvaCanvasStore.forEach(({ konvaStage, pageNumber }) => {\n            // 遍历 KonvaCanvas 实例\n            if (this.currentAnnotation) {\n                this.enableEditor({\n                    konvaStage,\n                    pageNumber,\n                    annotation: this.currentAnnotation // 启用特定类型的编辑器\n                })\n            }\n        })\n    }\n\n    /**\n     * 重新绘制批注\n     * @param pageNumber - 页码\n     */\n    private reDrawAnnotation(pageNumber: number): void {\n        const konvaCanvasStore = this.konvaCanvasStore.get(pageNumber) // 获取 KonvaCanvas 实例\n        const annotationStores = this.store.getByPage(pageNumber) // 获取指定页码的批注存储\n        annotationStores.forEach(annotationStore => {\n            let storeEditor = this.findEditor(pageNumber, annotationStore.type) // 查找编辑器实例\n            if (!storeEditor) {\n                // 如果编辑器不存在，启用编辑器\n                const annotationDefinition = annotationDefinitions.find(item => item.type === annotationStore.type)\n                this.enableEditor({ konvaStage: konvaCanvasStore.konvaStage, pageNumber, annotation: annotationDefinition })\n                storeEditor = this.findEditor(pageNumber, annotationStore.type) // 重新查找编辑器\n            }\n\n            if (storeEditor) {\n                // 添加序列化组到图层\n                storeEditor.addSerializedGroupToLayer(konvaCanvasStore.konvaStage, annotationStore.konvaString)\n            }\n        })\n    }\n\n    /**\n     * 删除批注\n     * @param id - 批注 ID\n     */\n    private deleteAnnotation(id, emit: boolean = false): void {\n        const annotationStore = this.store.annotation(id)\n        const konvaCanvasStore = this.konvaCanvasStore.get(annotationStore.pageNumber) // 获取 KonvaCanvas 实例\n        if (!annotationStore) {\n            return\n        }\n        this.store.delete(id)\n        const storeEditor = this.findEditor(annotationStore.pageNumber, annotationStore.type)\n        if (storeEditor) {\n            storeEditor.deleteGroup(id, konvaCanvasStore.konvaStage)\n        }\n        if (emit) {\n            this.onStoreDelete(id)\n        }\n    }\n\n    /**\n     * 关闭绘画\n     */\n    private disablePainting(): void {\n        this.setMode('default') // 设置默认模式\n        this.clearTempDataTransfer() // 清除临时数据传输\n        this.selector.clear() // 清除选择器\n        console.log('Painting mode disabled')\n    }\n\n    /**\n     * 保存临时数据传输\n     * @param data - 数据\n     * @returns 临时数据传输\n     */\n    private saveTempDataTransfer(data: string): string {\n        this.tempDataTransfer = data\n        return this.tempDataTransfer\n    }\n\n    /**\n     * 清除临时数据传输\n     * @returns 临时数据传输\n     */\n    private clearTempDataTransfer(): string {\n        this.tempDataTransfer = null\n        return this.tempDataTransfer\n    }\n\n    /**\n     * 初始化或更新 KonvaCanvas\n     * @param params - 包含当前 PDF 页面视图、是否需要 CSS 转换和页码的对象\n     */\n    public initCanvas({ pageView, cssTransform, pageNumber }: { pageView: PDFPageView; cssTransform: boolean; pageNumber: number }): void {\n        if (cssTransform) {\n            this.scaleCanvas(pageView, pageNumber)\n        } else {\n            this.insertCanvas(pageView, pageNumber)\n        }\n    }\n\n    /**\n     * 初始化 WebSelection\n     * @param rootElement - 根 DOM 元素\n     */\n    public initWebSelection(rootElement: HTMLDivElement): void {\n        this.webSelection.create(rootElement)\n    }\n\n    /**\n     * 激活特定批注类型\n     * @param annotation - 批注类型对象\n     * @param dataTransfer - 数据传输\n     */\n    public activate(annotation: IAnnotationType | null, dataTransfer: string | null): void {\n        this.currentAnnotation = annotation\n        this.disablePainting()\n        this.saveTempDataTransfer(dataTransfer)\n\n        if (!annotation) {\n            return\n        }\n\n        console.log(`Painting mode active type: ${annotation.type} | pdfjs annotationStorage type: ${annotation.pdfjsEditorType}`)\n        switch (annotation.type) {\n            case AnnotationType.FREETEXT:\n            case AnnotationType.RECTANGLE:\n            case AnnotationType.CIRCLE:\n            case AnnotationType.FREEHAND:\n            case AnnotationType.FREE_HIGHLIGHT:\n            case AnnotationType.SIGNATURE:\n            case AnnotationType.STAMP:\n            case AnnotationType.SELECT:\n            case AnnotationType.NOTE:\n            case AnnotationType.ARROW:\n            case AnnotationType.CLOUD:\n                this.setMode('painting') // 设置绘画模式\n                break\n\n            default:\n                this.setMode('default') // 设置默认模式\n                break\n        }\n\n        this.enablePainting()\n    }\n\n    /**\n     * 重置 PDF.js 批注存储\n     */\n    public resetPdfjsAnnotationStorage(): void {}\n\n    /**\n     * @description 根据 range 加亮\n     * @param range\n     * @param annotation\n     */\n    public highlightRange(range: Range, annotation: IAnnotationType) {\n        this.currentAnnotation = annotation\n        this.webSelection.highlight(range)\n    }\n\n    /**\n     * @description 选中对应 ID 批注\n     * @param id\n     */\n    public selectAnnotation(id: string) {\n        this.setDefaultMode()\n        this.selector.select(id)\n    }\n\n    /**\n     * @description 将annotation 存入 store, 包含外部 annotation 和 pdf 文件上的 annotation\n     */\n    public async initAnnotations(annotations: IAnnotationStore[], loadPdfAnnotation: boolean) {\n        // 加载 pdf 文件批注\n        if (loadPdfAnnotation) {\n            // 先将 pdf 文件中的存入\n            const annotationMap = await this.transform.decodePdfAnnotation()\n            annotationMap.forEach(annotation => {\n                this.saveToStore(annotation, true)\n            })\n            // 再用外部数据覆盖\n            annotations.forEach(annotation => {\n                if (annotationMap.has(annotation.id)) {\n                    this.updateStore(annotation.id, annotation)\n                } else {\n                    this.saveToStore(annotation, true)\n                }\n            })\n        } else {\n            annotations.forEach(annotation => {\n                this.saveToStore(annotation, true)\n            })\n        }\n    }\n\n    /**\n     * @description 更新 store\n     * @param id\n     * @param updates\n     */\n    public update(id: string, updates: Partial<IAnnotationStore>) {\n        this.store.update(id, updates)\n    }\n\n    /**\n     * @description 删除 annotation\n     * @param id\n     */\n    public delete(id: string, emit: boolean = false) {\n        this.selector.delete()\n        this.deleteAnnotation(id, emit)\n    }\n\n    /**\n     * @description 高亮选中 annotation\n     * @param annotation\n     */\n    public async highlight(annotation: IAnnotationStore) {\n        // 跳转至对应页面位置\n        const pageView = this.pdfViewerApplication.pdfViewer._pages[annotation.pageNumber - 1] || this.pdfViewerApplication.pdfViewer.getPageView(annotation.pageNumber)\n        const { x, y } = annotation.konvaClientRect\n        // 把 Konva 的左上角坐标转换为 PDF 内部坐标（以页面左下角为原点）\n        const [pdfX, pdfY] = pageView.viewport.convertToPdfPoint(x, y - 200)\n        this.pdfViewerApplication.pdfViewer.scrollPageIntoView({\n            pageNumber: annotation.pageNumber,\n            destArray: [null, { name: 'XYZ' }, pdfX, pdfY, null], // 可以加偏移\n            allowNegativeOffset: true\n        })\n\n        const maxRetries = 5 // 最大重试次数\n        const retryInterval = 200 // 每次重试间隔\n        // 封装递归重试机制\n        const attemptHighlight = (retries: number): void => {\n            const storeEditor = this.findEditor(annotation.pageNumber, annotation.type)\n            if (storeEditor) {\n                this.setDefaultMode()\n                this.selector.select(annotation.id)\n                if (this.currentAnnotation && this.currentAnnotation.type === AnnotationType.SELECT) {\n                    this.selector.activate(annotation.pageNumber)\n                }\n            } else if (retries > 0) {\n                // 如果没有找到且还有重试次数，继续重试\n                setTimeout(() => {\n                    attemptHighlight(retries - 1)\n                }, retryInterval)\n            } else {\n                console.error('Failed to find editor after maximum retries.')\n            }\n        }\n        // 初次尝试执行\n        attemptHighlight(maxRetries)\n    }\n\n    public getData() {\n        return this.store.annotations\n    }\n\n    /**\n     * @description 更新样式\n     * @param annotationStore\n     * @param styles\n     */\n    public updateAnnotationStyle(annotationStore: IAnnotationStore, style: IAnnotationStyle) {\n        const editor = this.findEditorForGroupId(annotationStore.id)\n        if (editor) {\n            editor.updateStyle(annotationStore, style) // 更新编辑器样式\n        }\n    }\n}\n"
  },
  {
    "path": "src/painter/store.ts",
    "content": "import { PDFViewerApplication } from 'pdfjs'\n\nimport { IAnnotationStore } from '../const/definitions'\nimport { formatTimestamp } from '../utils/utils'\n\nexport class Store {\n    // 所有注释\n    private annotationStore: Map<string, IAnnotationStore> = new Map()\n    // 原有注释\n    private originalAnnotationStore: Map<string, IAnnotationStore> = new Map()\n    private pdfViewerApplication: PDFViewerApplication\n\n    constructor({ PDFViewerApplication }: { PDFViewerApplication: PDFViewerApplication }) {\n        this.pdfViewerApplication = PDFViewerApplication\n    }\n\n    /**\n     * 获取指定 ID 的注释\n     * @param id - 注释的 ID\n     * @returns 注释对象，如果存在则返回，否则返回 undefined\n     */\n    get annotation() {\n        return (id: string) => this.annotationStore.get(id)\n    }\n\n    get annotations() {\n        return Array.from(this.annotationStore.values());\n    }\n\n    /**\n     * 保存注释\n     * @param store  \n     * @param isOriginal  是否是原有注释\n     */\n    public save(store: IAnnotationStore, isOriginal: boolean) {\n        this.annotationStore.set(store.id, store)\n        if(isOriginal) {\n            this.originalAnnotationStore.set(store.id, store)\n        }\n        return store\n    }\n\n    /**\n     * 更新指定 ID 的注释\n     * @param id - 注释的 ID\n     * @param updates - 更新的部分注释数据\n     */\n    public update(id: string, updates: Partial<IAnnotationStore>) {\n        if (this.annotationStore.has(id)) {\n            const existingAnnotation = this.annotationStore.get(id)\n            if (existingAnnotation) {\n                const updatedAnnotation = {\n                    ...existingAnnotation,\n                    ...updates,\n                    date: formatTimestamp(Date.now())\n                }\n                this.annotationStore.set(id, updatedAnnotation)\n                return updatedAnnotation\n            }\n        } else {\n            console.warn(`Annotation with id ${id} not found.`)\n            return null\n        }\n    }\n\n    /**\n     * 根据页面号获取注释\n     * @param pageNumber - 页码\n     * @returns 指定页面的注释列表\n     */\n    public getByPage(pageNumber: number): IAnnotationStore[] {\n        return Array.from(this.annotationStore.values()).filter(annotation => annotation.pageNumber === pageNumber)\n    }\n\n    /**\n     * 删除指定 ID 的注释\n     * @param id - 要删除的注释的 ID\n     */\n    public delete(id: string): void {\n        if (this.annotationStore.has(id)) {\n            this.annotationStore.delete(id)\n        } else {\n            console.warn(`Annotation with id ${id} not found.`)\n        }\n    }\n\n}\n"
  },
  {
    "path": "src/painter/transform/decoder.ts",
    "content": "import { Annotation, PDFViewerApplication, QuadPoint } from 'pdfjs'\nimport { IAnnotationComment, IAnnotationStore, PdfjsAnnotationType } from '../../const/definitions'\n\nexport interface IDecoderOptions {\n    pdfViewerApplication: PDFViewerApplication\n    id: string\n}\n\nexport abstract class Decoder {\n    protected pdfViewerApplication: PDFViewerApplication\n    protected id: string\n\n    constructor({ pdfViewerApplication, id }: IDecoderOptions) {\n        this.pdfViewerApplication = pdfViewerApplication\n        this.id = id\n    }\n\n    /**\n     * @description pdfjs annotation rect 转为 konva 的 rect\n     * @param annotation\n     * @returns\n     */\n    protected convertRect(rect: [number, number, number, number], scale: number, height: number): { x: number; y: number; width: number; height: number } {\n        const pageHeight = height / scale\n        const [x1, y1, x2, y2] = rect\n        const x = x1\n        const y = pageHeight - y2\n        const width = x2 - x1\n        const _height = y2 - y1\n        return { x, y, width, height: _height }\n    }\n\n    /**\n     * @description pdfjs annotation quadPoint 转为 konva 的 rect\n     * @param quadPoint  [左上，右上，左下，右下]\n     * @param scale\n     * @param height\n     * @returns\n     */\n    protected convertQuadPoints(quadPoint: QuadPoint[], scale: number, height: number): { x: number; y: number; width: number; height: number } {\n        const pageHeight = height / scale\n        const x = quadPoint[0].x\n        const y = pageHeight - quadPoint[0].y\n        const width = quadPoint[1].x - quadPoint[0].x\n        const _height = quadPoint[1].y - quadPoint[3].y\n        return { x, y, width, height: _height }\n    }\n\n    protected convertPoint(point: { x: number; y: number }, scale: number, height: number): { x: number; y: number } {\n        const pageHeight = height / scale\n        return { x: point.x, y: pageHeight - point.y }\n    }\n\n    protected convertCoordinates(\n        coordinates: [number, number, number, number],\n        scale: number,\n        height: number\n    ): { x: number; y: number; x1: number; y1: number } {\n        const pageHeight = height / scale;\n        const x = coordinates[0];\n        const y = pageHeight - coordinates[1];\n        const x1 = coordinates[2];\n        const y1 = pageHeight - coordinates[3];\n        \n        return { x, y, x1, y1 };\n    }\n\n    protected getComments(annotation: Annotation, allAnnotations: Annotation[]) : IAnnotationComment[]{\n        const reply: IAnnotationComment[] = []\n        allAnnotations.forEach((_item) => {\n            if(_item.annotationType === PdfjsAnnotationType.TEXT && _item.inReplyTo  === annotation.id) {\n                reply.push({\n                    id: _item.id,\n                    title: _item.titleObj.str,\n                    date: _item.modificationDate,\n                    content: _item.contentsObj.str\n                })\n            }\n        })\n        return reply\n    }\n    \n\n    public abstract decodePdfAnnotation(annotation: Annotation, allAnnotations: Annotation[]): IAnnotationStore\n}\n"
  },
  {
    "path": "src/painter/transform/decoder_circle.ts",
    "content": "import { Annotation, CircleAnnotation } from 'pdfjs'\nimport { Decoder } from './decoder'\nimport Konva from 'konva'\nimport { SHAPE_GROUP_NAME } from '../const'\nimport { convertToRGB } from '../../utils/utils'\nimport { AnnotationType, IAnnotationStore, PdfjsAnnotationEditorType } from '../../const/definitions'\n\nexport class CircleDecoder extends Decoder {\n    constructor(options) {\n        super(options)\n    }\n\n    public decodePdfAnnotation(annotation: CircleAnnotation, allAnnotations: Annotation[]) {        \n        const color = convertToRGB(annotation.color)\n        const borderWidth = annotation.borderStyle.width === 1 ? annotation.borderStyle.width + 1 : annotation.borderStyle.width\n        const { x, y, width, height } = this.convertRect(\n            annotation.rect,\n            annotation.pageViewer.viewport.scale,\n            annotation.pageViewer.viewport.height\n        )\n        const ghostGroup = new Konva.Group({\n            draggable: false,\n            name: SHAPE_GROUP_NAME,\n            id: annotation.id\n        })\n        const circle = new Konva.Ellipse({\n            radiusX: width / 2,\n            radiusY: height / 2,\n            x: x + width /2,\n            y: y + height /2,\n            strokeScaleEnabled: false,\n            strokeWidth: borderWidth,\n            stroke: color,\n            dash: annotation.borderStyle.style === 2 ? annotation.borderStyle.dashArray : [],\n        })\n        ghostGroup.add(circle)\n        const annotationStore: IAnnotationStore = {\n            id: annotation.id,\n            pageNumber: annotation.pageNumber,\n            konvaString: ghostGroup.toJSON(),\n            konvaClientRect: ghostGroup.getClientRect(),\n            title: annotation.titleObj.str,\n            type: AnnotationType.CIRCLE,\n            color,\n            pdfjsType: annotation.annotationType,\n            pdfjsEditorType: PdfjsAnnotationEditorType.INK,\n            subtype: annotation.subtype,\n            date: annotation.modificationDate,\n            contentsObj: {\n                text: annotation.contentsObj.str\n            },\n            comments: this.getComments(annotation, allAnnotations),\n            draggable: true,\n            resizable: true\n        }\n\n        ghostGroup.destroy()\n\n        return annotationStore\n    }\n}\n"
  },
  {
    "path": "src/painter/transform/decoder_free_text.ts",
    "content": "import { Annotation, FreeTextAnnotation } from 'pdfjs'\nimport { Decoder } from './decoder'\nimport Konva from 'konva'\nimport { SHAPE_GROUP_NAME } from '../const'\nimport { convertToRGB } from '../../utils/utils'\nimport { AnnotationType, IAnnotationStore, PdfjsAnnotationEditorType } from '../../const/definitions'\n\nexport class FreeTextDecoder extends Decoder {\n    constructor(options) {\n        super(options)\n    }\n\n    public decodePdfAnnotation(annotation: FreeTextAnnotation, allAnnotations: Annotation[]): IAnnotationStore {\n        const color = convertToRGB(annotation.defaultAppearanceData.fontColor);\n        const fontSize = annotation.defaultAppearanceData.fontSize;\n        const textStr = annotation.contentsObj.str\n        const { x, y, width, height } = this.convertRect(\n            annotation.rect,\n            annotation.pageViewer.viewport.scale,\n            annotation.pageViewer.viewport.height\n        );\n    \n        const ghostGroup = new Konva.Group({\n            draggable: false,\n            name: SHAPE_GROUP_NAME,\n            id: annotation.id\n        });\n    \n        const text = new Konva.Text({\n            x,\n            y: y + 2,\n            text: textStr,\n            // width,\n            fontSize,\n            fill: color,\n        });\n        \n        ghostGroup.add(text);\n        const annotationStore: IAnnotationStore = {\n            id: annotation.id,\n            pageNumber: annotation.pageNumber,\n            konvaString: ghostGroup.toJSON(),\n            konvaClientRect: ghostGroup.getClientRect(),\n            title: annotation.titleObj.str,\n            type: AnnotationType.FREETEXT,\n            color,\n            fontSize,\n            pdfjsType: annotation.annotationType,\n            pdfjsEditorType: PdfjsAnnotationEditorType.INK,\n            subtype: annotation.subtype,\n            date: annotation.modificationDate,\n            contentsObj: {\n                text: textStr\n            },\n            comments: this.getComments(annotation, allAnnotations),\n            draggable: true,\n            resizable: true\n        };\n    \n        return annotationStore;\n    }\n    \n}\n"
  },
  {
    "path": "src/painter/transform/decoder_highlight.ts",
    "content": "import { Annotation, HighlightAnnotation, QuadPoint, StrikeOutAnnotation, UnderlineAnnotation } from 'pdfjs'\nimport { Decoder } from './decoder'\nimport Konva from 'konva'\nimport { SHAPE_GROUP_NAME } from '../const'\nimport { convertToRGB } from '../../utils/utils'\nimport { AnnotationType, IAnnotationStore, PdfjsAnnotationEditorType, PdfjsAnnotationType } from '../../const/definitions'\n\nexport class HighlightDecoder extends Decoder {\n    constructor(options) {\n        super(options)\n    }\n\n    /**\n     * 创建高亮形状。\n     * @param x 形状的 X 坐标\n     * @param y 形状的 Y 坐标\n     * @param width 形状的宽度\n     * @param height 形状的高度\n     * @returns Konva.Rect 高亮形状对象\n     */\n    private createHighlightShape(x: number, y: number, width: number, height: number, color: string): Konva.Rect {\n        return new Konva.Rect({\n            x,\n            y,\n            width,\n            height,\n            opacity: 0.5,\n            fill: color\n        })\n    }\n\n    /**\n     * 创建下划线形状。\n     * @param x 形状的 X 坐标\n     * @param y 形状的 Y 坐标\n     * @param width 形状的宽度\n     * @param height 形状的高度\n     * @returns Konva.Rect 下划线形状对象\n     */\n    private createUnderlineShape(x: number, y: number, width: number, height: number, color: string): Konva.Rect {\n        return new Konva.Rect({\n            x,\n            y: height + y - 1.5,\n            width,\n            stroke: color,\n            strokeWidth: 0.5,\n            hitStrokeWidth: 10,\n            height: 0.5\n        })\n    }\n\n    /**\n     * 创建删除线形状。\n     * @param x 形状的 X 坐标\n     * @param y 形状的 Y 坐标\n     * @param width 形状的宽度\n     * @param height 形状的高度\n     * @returns Konva.Rect 删除线形状对象\n     */\n    private createStrikeoutShape(x: number, y: number, width: number, height: number, color: string): Konva.Rect {\n        return new Konva.Rect({\n            x,\n            y: y + height / 2,\n            width,\n            stroke: color,\n            strokeWidth: 0.5,\n            hitStrokeWidth: 10,\n            height: 0.5\n        })\n    }\n\n    public decodePdfAnnotation(annotation: HighlightAnnotation | StrikeOutAnnotation | UnderlineAnnotation, allAnnotations: Annotation[]) {\n        const color = convertToRGB(annotation.color);\n\n        const typeMap: { [key: string]: AnnotationType } = {\n            [PdfjsAnnotationType.HIGHLIGHT]: AnnotationType.HIGHLIGHT,\n            [PdfjsAnnotationType.UNDERLINE]: AnnotationType.UNDERLINE,\n            [PdfjsAnnotationType.STRIKEOUT]: AnnotationType.STRIKEOUT,\n        };\n    \n        const type = typeMap[annotation.annotationType] || AnnotationType.HIGHLIGHT; // 默认类型为 HIGHLIGHT\n    \n        const ghostGroup = new Konva.Group({\n            draggable: false,\n            name: SHAPE_GROUP_NAME,\n            id: annotation.id,\n        });\n    \n        const createShape = (quadPoint: QuadPoint[]) => {\n            const { x, y, width, height } = this.convertQuadPoints(quadPoint, annotation.pageViewer.viewport.scale, annotation.pageViewer.viewport.height);\n            switch (annotation.annotationType) {\n                case PdfjsAnnotationType.HIGHLIGHT:\n                    return this.createHighlightShape(x, y, width, height, color);\n                case PdfjsAnnotationType.UNDERLINE:\n                    return this.createUnderlineShape(x, y, width, height, color);\n                case PdfjsAnnotationType.STRIKEOUT:\n                    return this.createStrikeoutShape(x, y, width, height, color);\n                default:\n                    return null;\n            }\n        };\n    \n        annotation.quadPoints?.forEach(quadPoint => {\n            const shape = createShape(quadPoint);\n            if (shape) {\n                ghostGroup.add(shape);\n            }\n        });\n    \n        const annotationStore: IAnnotationStore = {\n            id: annotation.id,\n            pageNumber: annotation.pageNumber,\n            konvaString: ghostGroup.toJSON(),\n            konvaClientRect: ghostGroup.getClientRect(),\n            title: annotation.titleObj.str,\n            type,\n            color,\n            pdfjsType: annotation.annotationType,\n            pdfjsEditorType: PdfjsAnnotationEditorType.INK,\n            subtype: annotation.subtype,\n            date: annotation.modificationDate,\n            contentsObj: {\n                text: annotation.contentsObj.str\n            },\n            comments: this.getComments(annotation, allAnnotations),\n            draggable: false,\n            resizable: false\n        };\n    \n        ghostGroup.destroy();\n        return annotationStore;\n    }\n}"
  },
  {
    "path": "src/painter/transform/decoder_ink.ts",
    "content": "import { Annotation, InkAnnotation } from 'pdfjs'\nimport { Decoder } from './decoder'\nimport Konva from 'konva'\nimport { SHAPE_GROUP_NAME } from '../const'\nimport { convertToRGB } from '../../utils/utils'\nimport { AnnotationType, IAnnotationStore, PdfjsAnnotationEditorType } from '../../const/definitions'\n\nexport class InkDecoder extends Decoder {\n    constructor(options) {\n        super(options)\n    }\n\n    public decodePdfAnnotation(annotation: InkAnnotation, allAnnotations: Annotation[]) {\n\n        if(annotation.inkLists.length === 0) {\n            return null\n        }\n\n        const color = convertToRGB(annotation.color)\n        const ghostGroup = new Konva.Group({\n            draggable: false,\n            name: SHAPE_GROUP_NAME,\n            id: annotation.id\n        })\n\n        const createLine = (points: number[]) => {\n            return new Konva.Line({\n                strokeScaleEnabled: false,\n                stroke: color,\n                strokeWidth: annotation.borderStyle.width,\n                opacity: 0.5,\n                lineCap: 'round',\n                lineJoin: 'round',\n                hitStrokeWidth: 20,\n                globalCompositeOperation: 'source-over',\n                points\n            })\n        }\n\n        annotation.inkLists?.forEach(list => {\n            const points: number[] = list\n                .map(point => {\n                    const { x, y } = this.convertPoint(point, annotation.pageViewer.viewport.scale, annotation.pageViewer.viewport.height)\n                    return [x, y]\n                })\n                .flat()\n            const line = createLine(points)\n            ghostGroup.add(line)\n        })\n\n        const annotationStore: IAnnotationStore = {\n            id: annotation.id,\n            pageNumber: annotation.pageNumber,\n            konvaString: ghostGroup.toJSON(),\n            konvaClientRect: ghostGroup.getClientRect(),\n            title: annotation.titleObj.str,\n            type: AnnotationType.FREEHAND,\n            color,\n            pdfjsType: annotation.annotationType,\n            pdfjsEditorType: PdfjsAnnotationEditorType.INK,\n            subtype: annotation.subtype,\n            date: annotation.modificationDate,\n            contentsObj: {\n                text: annotation.contentsObj.str\n            },\n            comments: this.getComments(annotation, allAnnotations),\n            draggable: true,\n            resizable: true\n        }\n        ghostGroup.destroy()\n        return annotationStore\n    }\n}\n"
  },
  {
    "path": "src/painter/transform/decoder_line.ts",
    "content": "import { Annotation, LineAnnotation } from 'pdfjs'\nimport { Decoder } from './decoder'\nimport Konva from 'konva'\nimport { SHAPE_GROUP_NAME } from '../const'\nimport { convertToRGB } from '../../utils/utils'\nimport { AnnotationType, IAnnotationStore, PdfjsAnnotationEditorType } from '../../const/definitions'\n\nexport class LineDecoder extends Decoder {\n    constructor(options) {\n        super(options)\n    }\n\n    public decodePdfAnnotation(annotation: LineAnnotation, allAnnotations: Annotation[]) {\n        const color = convertToRGB(annotation.color)\n        const width = annotation.borderStyle.width === 1 ? annotation.borderStyle.width + 1 : annotation.borderStyle.width\n        const ghostGroup = new Konva.Group({\n            draggable: false,\n            name: SHAPE_GROUP_NAME,\n            id: annotation.id\n        })\n        const createLine = (points: number[], lineEndings: [string, string]) => {     \n            return new Konva.Line({\n                strokeScaleEnabled: false,\n                stroke: color,\n                strokeWidth: width,\n                hitStrokeWidth: 20,\n                dash: annotation.borderStyle.style === 2 ? annotation.borderStyle.dashArray : [],\n                globalCompositeOperation: 'source-over',\n                points\n            })\n        }\n        const { x, y, x1, y1 } = this.convertCoordinates(\n            annotation.lineCoordinates,\n            annotation.pageViewer.viewport.scale,\n            annotation.pageViewer.viewport.height\n        )\n        const line = createLine([x, y, x1, y1], annotation.lineEndings)\n        ghostGroup.add(line)\n        const annotationStore: IAnnotationStore = {\n            id: annotation.id,\n            pageNumber: annotation.pageNumber,\n            konvaString: ghostGroup.toJSON(),\n            konvaClientRect: ghostGroup.getClientRect(),\n            title: annotation.titleObj.str,\n            type: AnnotationType.FREEHAND,\n            color,\n            pdfjsType: annotation.annotationType,\n            pdfjsEditorType: PdfjsAnnotationEditorType.INK,\n            subtype: annotation.subtype,\n            date: annotation.modificationDate,\n            contentsObj: {\n                text: annotation.contentsObj.str\n            },\n            comments: this.getComments(annotation, allAnnotations),\n            draggable: true,\n            resizable: true\n        }\n\n        ghostGroup.destroy()\n        return annotationStore\n    }\n}\n"
  },
  {
    "path": "src/painter/transform/decoder_polygon.ts",
    "content": "import { Annotation, PolygonAnnotation, Vertices } from 'pdfjs'\nimport { Decoder } from './decoder'\nimport Konva from 'konva'\nimport { SHAPE_GROUP_NAME } from '../const'\nimport { convertToRGB } from '../../utils/utils'\nimport { AnnotationType, IAnnotationStore, PdfjsAnnotationEditorType } from '../../const/definitions'\n\nexport class PolygonDecoder extends Decoder {\n    constructor(options) {\n        super(options)\n    }\n\n    public decodePdfAnnotation(annotation: PolygonAnnotation,  allAnnotations: Annotation[]) {\n        const color = convertToRGB(annotation.color)\n        const width = annotation.borderStyle.width === 1 ? annotation.borderStyle.width + 1 : annotation.borderStyle.width\n        const ghostGroup = new Konva.Group({\n            draggable: false,\n            name: SHAPE_GROUP_NAME,\n            id: annotation.id\n        })\n        const createLine = (vertices: Vertices[]) => {\n            const points: number[] = []\n            vertices?.forEach(point => {\n                const { x, y } = this.convertPoint(point, annotation.pageViewer.viewport.scale, annotation.pageViewer.viewport.height)\n                points.push(x)\n                points.push(y)\n                \n            })\n            return new Konva.Line({\n                strokeScaleEnabled: false,\n                stroke: color,\n                strokeWidth: width,\n                lineCap: 'round',\n                lineJoin: 'round',\n                hitStrokeWidth: 20,\n                closed: true,\n                globalCompositeOperation: 'source-over',\n                points\n            })\n        }\n        const line = createLine(annotation.vertices)\n        ghostGroup.add(line)\n        const annotationStore: IAnnotationStore = {\n            id: annotation.id,\n            pageNumber: annotation.pageNumber,\n            konvaString: ghostGroup.toJSON(),\n            konvaClientRect: ghostGroup.getClientRect(),\n            title: annotation.titleObj.str,\n            type: AnnotationType.FREEHAND,\n            color,\n            pdfjsType: annotation.annotationType,\n            pdfjsEditorType: PdfjsAnnotationEditorType.INK,\n            subtype: annotation.subtype,\n            date: annotation.modificationDate,\n            contentsObj: {\n                text: annotation.contentsObj.str\n            },\n            comments: this.getComments(annotation, allAnnotations),\n            draggable: true,\n            resizable: true\n        }\n\n        ghostGroup.destroy()\n        return annotationStore\n    }\n}\n"
  },
  {
    "path": "src/painter/transform/decoder_polyline.ts",
    "content": "import { Annotation, PolyLineAnnotation, Vertices } from 'pdfjs'\nimport { Decoder } from './decoder'\nimport Konva from 'konva'\nimport { SHAPE_GROUP_NAME } from '../const'\nimport { convertToRGB } from '../../utils/utils'\nimport { AnnotationType, IAnnotationStore, PdfjsAnnotationEditorType } from '../../const/definitions'\n\nexport class PolylineDecoder extends Decoder {\n    constructor(options) {\n        super(options)\n    }\n\n    public decodePdfAnnotation(annotation: PolyLineAnnotation,  allAnnotations: Annotation[]) {\n        const color = convertToRGB(annotation.color)\n        const width = annotation.borderStyle.width === 1 ? annotation.borderStyle.width + 1 : annotation.borderStyle.width\n        const ghostGroup = new Konva.Group({\n            draggable: false,\n            name: SHAPE_GROUP_NAME,\n            id: annotation.id\n        })\n        const createLine = (vertices: Vertices[]) => {\n            const points: number[] = []\n            vertices?.forEach(point => {\n                const { x, y } = this.convertPoint(point, annotation.pageViewer.viewport.scale, annotation.pageViewer.viewport.height)\n                points.push(x)\n                points.push(y)\n                \n            })\n            return new Konva.Line({\n                strokeScaleEnabled: false,\n                stroke: color,\n                strokeWidth: width,\n                lineCap: 'round',\n                lineJoin: 'round',\n                hitStrokeWidth: 20,\n                closed: false,\n                globalCompositeOperation: 'source-over',\n                points\n            })\n        }\n        const line = createLine(annotation.vertices)\n        ghostGroup.add(line)\n        const annotationStore: IAnnotationStore = {\n            id: annotation.id,\n            pageNumber: annotation.pageNumber,\n            konvaString: ghostGroup.toJSON(),\n            konvaClientRect: ghostGroup.getClientRect(),\n            title: annotation.titleObj.str,\n            type: AnnotationType.FREEHAND,\n            color,\n            pdfjsType: annotation.annotationType,\n            pdfjsEditorType: PdfjsAnnotationEditorType.INK,\n            subtype: annotation.subtype,\n            date: annotation.modificationDate,\n            contentsObj: {\n                text: annotation.contentsObj.str\n            },\n            comments: this.getComments(annotation, allAnnotations),\n            draggable: true,\n            resizable: true\n        }\n\n        ghostGroup.destroy()\n        return annotationStore\n    }\n}\n"
  },
  {
    "path": "src/painter/transform/decoder_square.ts",
    "content": "import { Annotation, SquareAnnotation } from 'pdfjs'\nimport { Decoder } from './decoder'\nimport Konva from 'konva'\nimport { SHAPE_GROUP_NAME } from '../const'\nimport { convertToRGB } from '../../utils/utils'\nimport { AnnotationType, IAnnotationStore, PdfjsAnnotationEditorType } from '../../const/definitions'\n\nexport class SquareDecoder extends Decoder {\n    constructor(options) {\n        super(options)\n    }\n\n    public decodePdfAnnotation(annotation: SquareAnnotation, allAnnotations: Annotation[]) {\n        const color = convertToRGB(annotation.color)\n        const borderWidth = annotation.borderStyle.width === 1 ? annotation.borderStyle.width + 1 : annotation.borderStyle.width\n        const { x, y, width, height } = this.convertRect(\n            annotation.rect,\n            annotation.pageViewer.viewport.scale,\n            annotation.pageViewer.viewport.height\n        )\n        const ghostGroup = new Konva.Group({\n            draggable: false,\n            name: SHAPE_GROUP_NAME,\n            id: annotation.id\n        })\n        const rect = new Konva.Rect({\n            x,\n            y,\n            width,\n            height,\n            strokeScaleEnabled: false,\n            stroke: color,\n            strokeWidth: borderWidth,\n            fill: annotation.borderStyle.width === 0 ? color : null,\n            opacity: annotation.borderStyle.width === 0 ? 0.5 : 1\n        })\n        ghostGroup.add(rect)\n        const annotationStore: IAnnotationStore = {\n            id: annotation.id,\n            pageNumber: annotation.pageNumber,\n            konvaString: ghostGroup.toJSON(),\n            konvaClientRect: ghostGroup.getClientRect(),\n            title: annotation.titleObj.str,\n            type: AnnotationType.RECTANGLE,\n            color,\n            pdfjsType: annotation.annotationType,\n            pdfjsEditorType: PdfjsAnnotationEditorType.INK,\n            subtype: annotation.subtype,\n            date: annotation.modificationDate,\n            contentsObj: {\n                text: annotation.contentsObj.str\n            },\n            comments: this.getComments(annotation, allAnnotations),\n            draggable: true,\n            resizable: true\n        }\n\n        ghostGroup.destroy()\n\n        return annotationStore\n    }\n}\n"
  },
  {
    "path": "src/painter/transform/decoder_text.ts",
    "content": "import { Annotation, TextAnnotation } from 'pdfjs'\nimport { Decoder } from './decoder'\nimport Konva from 'konva'\nimport { SHAPE_GROUP_NAME } from '../const'\nimport { convertToRGB } from '../../utils/utils'\nimport { AnnotationType, IAnnotationStore, PdfjsAnnotationEditorType } from '../../const/definitions'\nimport { createDocumentIcon } from '../../utils/documentIcon'\n\nexport class TextDecoder extends Decoder {\n    constructor(options) {\n        super(options)\n    }\n\n    public decodePdfAnnotation(annotation: TextAnnotation, allAnnotations: Annotation[]) {\n        if (annotation.inReplyTo) return null\n        const color = convertToRGB(annotation.color)\n        const { x, y } = this.convertRect(annotation.rect, annotation.pageViewer.viewport.scale, annotation.pageViewer.viewport.height)\n        const ghostGroup = new Konva.Group({\n            draggable: false,\n            name: SHAPE_GROUP_NAME,\n            id: annotation.id\n        })\n        const docIcon = createDocumentIcon({x, y, fill: color})\n        ghostGroup.add(...docIcon)\n        const annotationStore: IAnnotationStore = {\n            id: annotation.id,\n            pageNumber: annotation.pageNumber,\n            konvaString: ghostGroup.toJSON(),\n            konvaClientRect: ghostGroup.getClientRect(),\n            title: annotation.titleObj.str,\n            type: AnnotationType.NOTE,\n            color,\n            pdfjsType: annotation.annotationType,\n            pdfjsEditorType: PdfjsAnnotationEditorType.INK,\n            subtype: annotation.subtype,\n            date: annotation.modificationDate,\n            contentsObj: {\n                text: annotation.contentsObj.str\n            },\n            comments: this.getComments(annotation, allAnnotations),\n            draggable: true,\n            resizable: false\n        }\n\n        ghostGroup.destroy()\n\n        return annotationStore\n    }\n}\n"
  },
  {
    "path": "src/painter/transform/transform.ts",
    "content": "import { Annotation, PDFViewerApplication } from 'pdfjs'\nimport { IAnnotationStore, PdfjsAnnotationType } from '../../const/definitions'\nimport { CircleDecoder } from './decoder_circle'\nimport { Decoder } from './decoder'\nimport { FreeTextDecoder } from './decoder_free_text'\nimport { HighlightDecoder } from './decoder_highlight'\nimport { SquareDecoder } from './decoder_square'\nimport { InkDecoder } from './decoder_ink'\nimport { LineDecoder } from './decoder_line'\nimport { PolygonDecoder } from './decoder_polygon'\nimport { PolylineDecoder } from './decoder_polyline'\nimport { TextDecoder } from './decoder_text'\n\nconst PDFJS_INTERNAL_EDITOR_PREFIX = 'pdfjs_internal_editor_'\n\nexport class Transform {\n    private pdfViewerApplication: PDFViewerApplication\n\n    constructor(pdfViewerApplication: PDFViewerApplication) {\n        this.pdfViewerApplication = pdfViewerApplication\n    }\n\n    private async getAnnotations(): Promise<Annotation[]> {\n        const pdfDocument = this.pdfViewerApplication.pdfDocument\n        const pdfViewer = this.pdfViewerApplication.pdfViewer\n        const numPages = pdfDocument.numPages\n\n        const annotationsPromises = Array.from({ length: numPages }, (_, i) =>\n            pdfDocument.getPage(i + 1).then(page => {\n                const _pageViewer = pdfViewer.getPageView(i)\n                return page.getAnnotations().then(annotations =>\n                    annotations.map(annotation => ({\n                        ...annotation,\n                        pageNumber: i + 1,\n                        pageViewer: _pageViewer\n                    }))\n                )\n            })\n        )\n\n        const nestedAnnotations = await Promise.all(annotationsPromises)\n        return nestedAnnotations.flat()\n    }\n\n    private decodeAnnotation(annotation: Annotation, allAnnotations: Annotation[]): IAnnotationStore | null {\n        const decoderMap: { [key: string]: new (options: any) => Decoder } = {\n            [PdfjsAnnotationType.CIRCLE]: CircleDecoder,\n            [PdfjsAnnotationType.FREETEXT]: FreeTextDecoder,\n            [PdfjsAnnotationType.HIGHLIGHT]: HighlightDecoder,\n            [PdfjsAnnotationType.UNDERLINE]: HighlightDecoder,\n            [PdfjsAnnotationType.STRIKEOUT]: HighlightDecoder,\n            [PdfjsAnnotationType.SQUARE]: SquareDecoder,\n            [PdfjsAnnotationType.INK]: InkDecoder,\n            [PdfjsAnnotationType.LINE]: LineDecoder,\n            [PdfjsAnnotationType.POLYGON]: PolygonDecoder,\n            [PdfjsAnnotationType.POLYLINE]: PolylineDecoder,\n            [PdfjsAnnotationType.TEXT]: TextDecoder\n        }\n        const DecoderClass = decoderMap[annotation.annotationType]\n        if (DecoderClass) {\n            const decoder = new DecoderClass({\n                pdfViewerApplication: this.pdfViewerApplication,\n                id: annotation.id\n            })\n            return decoder.decodePdfAnnotation(annotation, allAnnotations)\n        }\n        return null // 不支持的类型返回 null\n    }\n\n    /**\n     * 在 pdf store 中 清除原有 pdf 注释\n     * @param annotation\n     */\n    private cleanAnnotationStore(annotation: Annotation) {\n        this.pdfViewerApplication?.pdfDocument?.annotationStorage.setValue(`${PDFJS_INTERNAL_EDITOR_PREFIX}${annotation.id}`, {\n            deleted: true,\n            id: annotation.id,\n            pageIndex: annotation.pageNumber - 1\n        })\n    }\n\n    public async decodePdfAnnotation(): Promise<Map<string, IAnnotationStore>> {\n        const allAnnotations = await this.getAnnotations()\n        const annotationStoreMap = new Map<string, IAnnotationStore>()\n        allAnnotations.forEach(annotation => {\n            this.cleanAnnotationStore(annotation)\n            const decodedAnnotation = this.decodeAnnotation(annotation, allAnnotations)\n            if (decodedAnnotation) {\n                annotationStoreMap.set(annotation.id, decodedAnnotation)\n            }\n        })\n\n        return annotationStoreMap\n    }\n}\n"
  },
  {
    "path": "src/painter/webSelection.ts",
    "content": "import Highlighter from 'web-highlighter'\n\n/**\n * WebSelection 类用于处理网页选区的实用工具类。\n */\nexport class WebSelection {\n    isEditing: boolean // 指示是否启用编辑模式\n    onSelect: (range: Range | null) => void // 当选区被选中时调用的回调函数\n    onHighlight: (selection: Partial<Record<number, any[]>>) => void\n    highlighterObj: null | Highlighter\n\n    /**\n     * 构造一个新的 WebSelection 实例。\n     * @param onSelect 当选区被选中时调用的回调函数\n     */\n    constructor({ onSelect, onHighlight }: { onSelect: (range: Range | null) => void; onHighlight: (selection: Partial<Record<number, any[]>>) => void }) {\n        this.isEditing = false\n        this.onSelect = onSelect\n        this.onHighlight = onHighlight\n        this.highlighterObj = null\n    }\n\n    /**\n     * 在指定的根元素和页码上创建一个高亮器。\n     * @param root 要应用高亮器的根元素\n     */\n    public create(root: HTMLDivElement) {\n        let isSelecting = false\n\n        this.highlighterObj = new Highlighter({\n            $root: root,\n            wrapTag: 'mark'\n        })\n        this.highlighterObj.stop()\n        // 监听文本选择变化\n        document.addEventListener('selectionchange', () => {\n            const selection = window.getSelection()\n            if (selection.type === 'Caret') {\n                this.onSelect(null)\n                return\n            }\n            if (selection && selection.toString()) {\n                const range = selection.getRangeAt(0)\n                const selectedElement = range.commonAncestorContainer\n                // 检查选区是否在特定的 div 内\n                if (root.contains(selectedElement)) {\n                    isSelecting = true\n                }\n            }\n        })\n\n        // 监听鼠标松开事件\n        document.addEventListener('mouseup', () => {\n            if (isSelecting) {\n                isSelecting = false // 重置状态\n                const selection = window.getSelection()\n                this.onSelect(selection.getRangeAt(0))\n            }\n        })\n\n        // 监听触摸屏操作结束事件\n        document.addEventListener('touchend', () => {\n            if (isSelecting) {\n                console.log('Selection completed')\n                isSelecting = false // 重置状态\n                const selection = window.getSelection()\n                this.onSelect(selection.getRangeAt(0))\n            }\n        })\n\n        this.highlighterObj.on('selection:create', data => {\n            const allSourcesId = data.sources.map(item => item.id)\n            const allSourcesSpan = []\n            allSourcesId.forEach(value => {\n                allSourcesSpan.push(...this.highlighterObj.getDoms(value))\n            })\n\n            const pageSelection = Object.groupBy(allSourcesSpan, span => {\n                return span.closest('.page').getAttribute('data-page-number')\n            })\n\n            this.onHighlight(pageSelection)\n            this.highlighterObj.removeAll()\n            window.getSelection().removeAllRanges()\n        })\n    }\n\n    public highlight(range: Range) {\n        if (range) {\n            this.highlighterObj.fromRange(range)\n        }\n    }\n}\n"
  },
  {
    "path": "src/scss/app.scss",
    "content": ".PdfjsAnnotationExtension {\n    .toolbar {\n        z-index: 99;\n    }\n    .textLayer {\n        z-index: 9 !important;\n    }\n    #viewerContainer {\n        top: 107px !important;\n        right: 330px;\n    }\n    #sidebarContainer {\n        top: 107px !important;\n    }\n    #toolbarContainer {\n        height: 107px;\n    }\n    .ant-message {\n        z-index: 9999999;\n    }\n    .ant-modal-mask {\n        backdrop-filter: blur(8px);\n    }\n}\n.PdfjsAnnotationExtension_Comment_hidden {\n    #viewerContainer {\n        right: 0 !important;\n    }\n}\n.PdfjsAnnotationExtension_scalechanging {\n    .PdfjsAnnotationExtension_painter_wrapper {\n        display: none;\n    }\n}\n.pdfPresentationMode {\n    .PdfjsAnnotationExtension_painter_wrapper {\n        display: block;\n    }\n}\n"
  },
  {
    "path": "src/typings.d.ts",
    "content": "declare module '*.otf?arraybuffer' {\n    const value: ArrayBuffer\n    export default value\n}\ndeclare module '*.ttf' {\n    const value: ArrayBuffer\n    export default value\n}\n"
  },
  {
    "path": "src/utils/documentIcon.ts",
    "content": "import Konva from 'konva'\n\nexport function createDocumentIcon({\n    x,\n    y,\n    fill = 'rgb(255, 222, 33)',\n    stroke = '#000',\n    strokeWidth = 1,\n    cornerSize = 3\n}: {\n    x: number\n    y: number\n    fill?: string\n    stroke?: string\n    strokeWidth?: number\n    cornerSize?: number\n}) {\n    const width = 16\n    const height = 16\n    const paddingTop = 4\n    const paddingBottom = 4\n    const textLineCount = 4\n    const spacing = (height - paddingTop - paddingBottom) / (textLineCount + 1)\n\n    // 主体矩形带阴影和渐变\n    const rect = new Konva.Rect({\n        x,\n        y,\n        width,\n        height,\n        fillLinearGradientStartPoint: { x: 0, y: 0 },\n        fillLinearGradientEndPoint: { x: 0, y: height },\n        fillLinearGradientColorStops: [0, fill, 1, '#fff'],\n        stroke,\n        cornerRadius: [0, cornerSize, 0, 0],\n        strokeWidth,\n        shadowColor: 'rgba(0,0,0,0.2)',\n        shadowBlur: 2,\n        shadowOffset: { x: 1, y: 1 },\n        shadowOpacity: 0.3\n    })\n\n    // 模拟文字的横线\n    const lines = []\n    for (let i = 1; i <= textLineCount; i++) {\n        const yPos = y + paddingTop + i * spacing\n        const xEnd = i === 1 ? x + width - 6 : x + width - 3 // 第一行略短\n        const line = new Konva.Line({\n            points: [x + 3, yPos, xEnd, yPos],\n            stroke: '#555',\n            strokeWidth: 0.6,\n            lineCap: 'round'\n        })\n        lines.push(line)\n    }\n\n    return [rect, ...lines]\n}\n"
  },
  {
    "path": "src/utils/fontLoader.ts",
    "content": "// fontLoader.ts\n\ntype FontItem = {\n    label: string\n    value: string\n    external?: boolean\n    url?: ArrayBuffer\n}\n\nconst loadedFonts = new Set<string>()\n\n/**\n * 使用 CSS 动态注入方式加载字体（兼容性好）\n */\nfunction loadFontIfNeeded(font: FontItem): void {\n    if (!font.external || !font.url || loadedFonts.has(font.value)) return\n\n    const style = document.createElement('style')\n    style.innerHTML = `\n    @font-face {\n        font-family: '${font.value}';\n        src: url('${font.url}') format('truetype');\n        font-weight: normal;\n        font-style: normal;\n    }\n    `\n    document.head.appendChild(style)\n    loadedFonts.add(font.value)\n}\n\n/**\n * 使用现代 FontFace API 加载字体\n */\nexport async function loadFontWithFontFace(font: FontItem): Promise<void> {\n    if (!font.external || !font.url || loadedFonts.has(font.value)) return\n    try {\n        const fontFace = new FontFace(font.value, `url(${font.url})`)\n        await fontFace.load()\n        ;(document.fonts as any).add(fontFace)\n        loadedFonts.add(font.value)\n    } catch (err) {\n        loadFontIfNeeded(font)\n    }\n}\n\n/**\n * 重置字体加载状态\n */\nexport function resetFontLoadCache(): void {\n    loadedFonts.clear()\n}\n"
  },
  {
    "path": "src/utils/utils.ts",
    "content": "import { nanoid } from 'nanoid'\nimport { PDFHexString } from 'pdf-lib'\nimport i18n from 'i18next'\n\n/**\n * 根据颜色字符串获取 RGB 数组。\n * 支持以下格式：'#RRGGBB'、'rgb(R, G, B)'、'rgba(R, G, B, A)'。\n * @param color - 要解析的颜色字符串\n * @returns 表示颜色的 RGB 数组，如 [R, G, B]。\n * 如果颜色格式无效，则返回 [0, 0, 0]。\n */\nfunction getRGB(color: string): number[] {\n    if (color.startsWith('#')) {\n        const colorRGB = parseInt(color.slice(1), 16)\n        return [(colorRGB & 0xff0000) >> 16, (colorRGB & 0x00ff00) >> 8, colorRGB & 0x0000ff]\n    }\n\n    if (color.startsWith('rgb(')) {\n        return color\n            .slice(4, -1) // 去掉 \"rgb(\" 和 \")\"\n            .split(',')\n            .map(x => parseInt(x.trim()))\n    }\n\n    if (color.startsWith('rgba(')) {\n        return color\n            .slice(5, -1) // 去掉 \"rgba(\" 和 \")\"\n            .split(',')\n            .map((x, index) => (index < 3 ? parseInt(x.trim()) : 1)) // 只保留 RGB 部分，忽略透明度\n    }\n\n    console.error(`Not a valid color format: \"${color}\"`)\n    return [0, 0, 0]\n}\n\nfunction rgbToPdfColor(input: string | undefined): [number, number, number] {\n    if (!input) return [1, 1, 0] // 默认黄色\n\n    // 支持 rgb(...) 格式\n    if (input.startsWith('rgb')) {\n        const match = input.match(/\\d+/g)\n        if (!match || match.length < 3) return [1, 1, 0]\n        return match.slice(0, 3).map(x => parseInt(x) / 255) as [number, number, number]\n    }\n\n    // 支持 #rrggbb 格式\n    if (input.startsWith('#')) {\n        const hex = input.replace('#', '')\n        if (hex.length !== 6) return [1, 1, 0]\n        const r = parseInt(hex.slice(0, 2), 16) / 255\n        const g = parseInt(hex.slice(2, 4), 16) / 255\n        const b = parseInt(hex.slice(4, 6), 16) / 255\n        return [r, g, b]\n    }\n\n    // 无法解析，默认返回黄色\n    return [1, 1, 0]\n}\n\n/**\n * 检查元素是否存在于 DOM 中。\n * @param element - 要检查的元素\n * @returns 如果元素存在于 DOM 中，则返回 true；否则返回 false。\n */\nfunction isElementInDOM(element: HTMLElement): boolean {\n    return document.body.contains(element)\n}\n\n/**\n * 生成uuid\n * @returns nanoid\n */\nfunction generateUUID(): string {\n    return nanoid()\n}\n\n/**\n * 获取指定长度的随机字节数组。\n * 使用 window.crypto 或 node.js 的 crypto 获取安全的随机值。\n * @param length - 随机字节的长度\n * @returns 随机字节数组\n */\nfunction getRandomBytes(length: number): Uint8Array {\n    const bytes = new Uint8Array(length)\n    if (typeof crypto !== 'undefined' && typeof crypto.getRandomValues === 'function') {\n        crypto.getRandomValues(bytes)\n    } else {\n        for (let i = 0; i < length; i++) {\n            bytes[i] = Math.floor(Math.random() * 256)\n        }\n    }\n    return bytes\n}\n\n/**\n * 设置文档元素的 CSS 自定义属性。\n * @param propertyName - 属性名称\n * @param value - 属性值\n */\nfunction setCssCustomProperty(propertyName: string, value: string): void {\n    document.documentElement.style.setProperty(propertyName, value)\n}\n\n/**\n * 移除文档元素的 CSS 自定义属性。\n * @param propertyName - 要移除的属性名称\n */\nfunction removeCssCustomProperty(propertyName: string): void {\n    document.documentElement.style.removeProperty(propertyName)\n}\n\n/**\n * 将 Base64 格式的图像数据转换为 ImageBitmap 对象。\n * @param base64 - Base64 编码的图像数据\n * @returns ImageBitmap 对象，表示转换后的图像\n */\nasync function base64ToImageBitmap(base64: string): Promise<ImageBitmap> {\n    // 将 Base64 数据去掉前缀部分 \"data:image/png;base64,\" (如果有)\n    const base64Data = base64.split(',')[1]\n\n    // 解码 Base64 数据为二进制字符串\n    const binaryString = atob(base64Data)\n\n    // 创建一个 Uint8Array 来存储解码后的二进制数据\n    const length = binaryString.length\n    const bytes = new Uint8Array(length)\n    for (let i = 0; i < length; i++) {\n        bytes[i] = binaryString.charCodeAt(i)\n    }\n\n    // 创建 Blob 对象，类型为 image/png\n    const blob = new Blob([bytes], { type: 'image/png' })\n\n    // 将 Blob 转换为 ImageBitmap\n    const imageBitmap = await createImageBitmap(blob)\n\n    return imageBitmap\n}\n\n/**\n * 格式化文件大小，将字节数转换为友好的字符串格式。\n * @param sizeInBytes - 文件大小，单位字节\n * @returns 友好格式的文件大小字符串，如 \"2.56 MB\"\n */\nfunction formatFileSize(sizeInBytes: number): string {\n    if (sizeInBytes < 1024) return `${sizeInBytes} B`\n    const units = ['KB', 'MB', 'GB', 'TB']\n    let unitIndex = -1\n    let size = sizeInBytes\n    do {\n        size /= 1024\n        unitIndex++\n    } while (size >= 1024 && unitIndex < units.length - 1)\n\n    return `${size.toFixed(2)} ${units[unitIndex]}`\n}\n\n/**\n * 等比缩放图像的宽度和高度，使其在给定的最大宽度或高度内。\n * @param width - 原始图像的宽度\n * @param height - 原始图像的高度\n * @param max - 最大宽度或高度，缩放后的尺寸任意一边都不超过该值\n * @returns 包含等比缩放后的宽度和高度的对象 { newWidth, newHeight }\n */\nfunction resizeImage(width: number, height: number, max: number): { newWidth: number; newHeight: number } {\n    // 检查是否需要缩放\n    if (width <= max && height <= max) {\n        // 如果宽度和高度都在 max 范围内，不需要缩放，直接返回原尺寸\n        return { newWidth: width, newHeight: height }\n    }\n\n    // 计算宽度和高度的缩放比例\n    const widthScale = max / width\n    const heightScale = max / height\n\n    // 选择较小的比例来保持图像的宽高比\n    const scaleFactor = Math.min(widthScale, heightScale)\n\n    // 计算缩放后的宽度和高度\n    const newWidth = width * scaleFactor\n    const newHeight = height * scaleFactor\n\n    return { newWidth, newHeight }\n}\n\n/**\n * 验证并格式化自定义页码\n * @param {string} input - 用户输入的页码字符串，如 \"1,1-2,2-3\"\n * @returns {Array<number> | null} - 格式化后的页码数组，或在输入无效时返回 null\n */\nfunction parsePageRanges(input: string): number[] | null {\n    const pages = new Set<number>()\n    const rangeRegex = /^(\\d+)(?:-(\\d+))?$/\n\n    // 分割输入字符串\n    const parts = input.split(',')\n\n    for (const part of parts) {\n        const match = part.match(rangeRegex)\n\n        if (match) {\n            const start = parseInt(match[1], 10)\n            const end = match[2] ? parseInt(match[2], 10) : start\n\n            // 如果范围无效（例如2-1），则返回 null\n            if (start > end) {\n                return null\n            }\n\n            for (let i = start; i <= end; i++) {\n                if (i !== 0) {\n                    // 去掉 0\n                    pages.add(i)\n                }\n            }\n        } else {\n            return null\n        }\n    }\n\n    // 返回排序后的页码数组\n    return Array.from(pages).sort((a, b) => a - b)\n}\n\nfunction convertToRGB(array, index = 0) {\n    if (index < 0 || index * 3 + 2 >= array.length) {\n        throw new Error('Index out of bounds')\n    }\n    const r = array[index * 3]\n    const g = array[index * 3 + 1]\n    const b = array[index * 3 + 2]\n\n    return `rgb(${r}, ${g}, ${b})`\n}\n\nfunction formatTimestamp(timestamp) {\n    const date = new Date(timestamp)\n\n    // 获取各个部分\n    const year = date.getFullYear()\n    const month = String(date.getMonth() + 1).padStart(2, '0')\n    const day = String(date.getDate()).padStart(2, '0')\n    const hours = String(date.getHours()).padStart(2, '0')\n    const minutes = String(date.getMinutes()).padStart(2, '0')\n    const seconds = String(date.getSeconds()).padStart(2, '0')\n\n    // 偏移时区，例如 +08'00'\n    const timezoneOffset = -date.getTimezoneOffset()\n    const timezoneHours = String(Math.floor(Math.abs(timezoneOffset) / 60)).padStart(2, '0')\n    const timezoneMinutes = String(Math.abs(timezoneOffset) % 60).padStart(2, '0')\n    const timezoneSign = timezoneOffset >= 0 ? '+' : '-'\n\n    // 拼接最终结果\n    return `D:${year}${month}${day}${hours}${minutes}${seconds}${timezoneSign}${timezoneHours}'${timezoneMinutes}'`\n}\n\nfunction formatPDFDate(dateString: string | null, full = false): string {\n    // 若 dateString 无效，直接返回空字符串\n    if (!dateString || typeof dateString !== 'string' || !dateString.startsWith('D:')) {\n        return ''\n    }\n\n    // 提取日期部分 D:YYYYMMDDHHMMSS+TZD 中的 YYYYMMDDHHMMSS\n    const datePart = dateString.slice(2, 16)\n    if (datePart.length !== 14) {\n        return ''\n    }\n\n    const year = datePart.slice(0, 4)\n    const month = datePart.slice(4, 6)\n    const day = datePart.slice(6, 8)\n    const hour = datePart.slice(8, 10)\n    const minute = datePart.slice(10, 12)\n\n    if (full) {\n        return i18n.t('dateFormat.full', { year, month, day, hour, minute })\n    }\n\n    const currentDate = new Date()\n    const currentYear = currentDate.getFullYear().toString()\n    const currentMonth = (currentDate.getMonth() + 1).toString().padStart(2, '0')\n    const currentDay = currentDate.getDate().toString().padStart(2, '0')\n\n    if (year === currentYear && month === currentMonth && day === currentDay) {\n        return `${hour}:${minute}`\n    }\n\n    if (year === currentYear) {\n        return i18n.t('dateFormat.dayMonth', { day, month })\n    }\n\n    return i18n.t('dateFormat.dayMonthYear', { day, month, year })\n}\n\n\nfunction getPDFDateTimestamp(dateString: string): number {\n    // 提取日期部分 D:YYYYMMDDHHMMSS+TZD 中的 YYYYMMDDHHMMSS\n    const datePart = dateString.slice(2, 16)\n\n    const year = parseInt(datePart.slice(0, 4), 10)\n    const month = parseInt(datePart.slice(4, 6), 10) - 1 // 月份从 0 开始\n    const day = parseInt(datePart.slice(6, 8), 10)\n    const hour = parseInt(datePart.slice(8, 10), 10)\n    const minute = parseInt(datePart.slice(10, 12), 10)\n    const second = parseInt(datePart.slice(12, 14), 10) || 0\n\n    // 构造时区信息\n    const tzMatch = dateString.slice(16).match(/([+-])(\\d{2})'?(\\d{2})?'/)\n    let tzOffset = 0\n    if (tzMatch) {\n        const sign = tzMatch[1] === '+' ? 1 : -1\n        const hours = parseInt(tzMatch[2], 10) || 0\n        const minutes = parseInt(tzMatch[3] || '0', 10) || 0\n        tzOffset = sign * (hours * 60 + minutes)\n    }\n\n    // 创建本地时间对象（注意：这里是基于提取的时间构造的 Date 对象）\n    const date = new Date(Date.UTC(year, month, day, hour, minute, second))\n\n    // 应用时区偏移（UTC 时间已通过 Date.UTC 创建）\n    return date.getTime() - tzOffset * 60 * 1000\n}\n\nfunction parseQueryString(query: string): Map<string, string> {\n    const params = new Map<string, string>()\n    const searchParams = new URLSearchParams(query)\n\n    searchParams.forEach((value, key) => {\n        params.set(key.toLowerCase(), value)\n    })\n    return params\n}\n\nfunction debounce(fn: Function, delay: number) {\n    let timeout: ReturnType<typeof setTimeout>\n    return (...args: any[]) => {\n        if (timeout) clearTimeout(timeout)\n        timeout = setTimeout(() => fn(...args), delay)\n    }\n}\nfunction once<T extends (...args: any[]) => any>(fn: T): (...args: Parameters<T>) => ReturnType<T> {\n    let called = false\n    let result: ReturnType<T>\n    return function (...args: Parameters<T>): ReturnType<T> {\n        if (!called) {\n            called = true\n            result = fn.apply(this, args)\n        }\n        return result\n    }\n}\n\n/**\n * 将 Konva 的 Rect（左上坐标系统）转换为 PDF 的 Rect（左下坐标系统）\n * @param konvaRect Konva 的 { x, y, width, height }\n * @param pageHeight 当前 PDF 页的高度\n * @returns 一个 [x1, y1, x2, y2] 数组，可用于 PDF 的 Rect\n */\nfunction convertKonvaRectToPdfRect(konvaRect: { x: number; y: number; width: number; height: number }, pageHeight: number): [number, number, number, number] {\n    const { x, y, width, height } = konvaRect\n    const pdfX1 = x\n    const pdfY1 = pageHeight - y - height\n    const pdfX2 = pdfX1 + width\n    const pdfY2 = pdfY1 + height\n    return [pdfX1, pdfY1, pdfX2, pdfY2]\n}\n\nfunction stringToPDFHexString(input: string): PDFHexString {\n    // 加上 BOM（Byte Order Mark）\n    const bom = [0xfe, 0xff]\n    const utf16be: number[] = [...bom]\n    for (let i = 0; i < input.length; i++) {\n        const code = input.charCodeAt(i)\n        utf16be.push((code >> 8) & 0xff, code & 0xff) // 高位在前（Big Endian）\n    }\n    const hexString = utf16be\n        .map(b => b.toString(16).padStart(2, '0'))\n        .join('')\n        .toUpperCase()\n    return PDFHexString.of(hexString)\n}\nfunction getTimestampString(date: Date = new Date()): string {\n    const pad = (n: number) => n.toString().padStart(2, '0')\n\n    const year = date.getFullYear()\n    const month = pad(date.getMonth() + 1)\n    const day = pad(date.getDate())\n    const hour = pad(date.getHours())\n    const minute = pad(date.getMinutes())\n    const second = pad(date.getSeconds())\n\n    return `${year}${month}${day}_${hour}${minute}${second}`\n}\n\nfunction hashArrayOfObjects<T extends Record<string, any>>(arr: T[]): number {\n    const jsonString = JSON.stringify(arr, (key, value) => {\n        if (value && typeof value === 'object' && !Array.isArray(value)) {\n            return Object.keys(value)\n                .sort()\n                .reduce((sortedObject: Record<string, any>, k) => {\n                    sortedObject[k] = value[k]\n                    return sortedObject\n                }, {})\n        }\n        return value\n    })\n\n    let hash = 0\n    if (jsonString.length === 0) {\n        return hash\n    }\n    for (let i = 0; i < jsonString.length; i++) {\n        const char = jsonString.charCodeAt(i)\n        hash = (hash << 5) - hash + char\n        hash |= 0\n    }\n    return hash\n}\n\nfunction normalizeColor(input: string): string {\n    const hexRegex = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/\n    const rgbRegex = /^rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)$/\n\n    input = input.trim().toLowerCase()\n\n    if (hexRegex.test(input)) {\n        if (input.length === 4) {\n            return (\n                '#' +\n                input\n                    .slice(1)\n                    .split('')\n                    .map(c => c + c)\n                    .join('')\n            )\n        }\n        return input\n    }\n\n    const match = input.match(rgbRegex)\n    if (match) {\n        const r = Number(match[1])\n        const g = Number(match[2])\n        const b = Number(match[3])\n        const clamp = (n: number) => Math.max(0, Math.min(255, n))\n        return '#' + [r, g, b].map(n => clamp(n).toString(16).padStart(2, '0')).join('')\n    }\n\n    throw new Error(`Unsupported color format: ${input}`)\n}\n\nfunction isSameColor(color1: string, color2: string): boolean {\n    try {\n        return normalizeColor(color1) === normalizeColor(color2)\n    } catch {\n        return false\n    }\n}\n\nexport {\n    base64ToImageBitmap,\n    formatFileSize,\n    generateUUID,\n    getRandomBytes,\n    getRGB,\n    rgbToPdfColor,\n    isElementInDOM,\n    parsePageRanges,\n    removeCssCustomProperty,\n    resizeImage,\n    setCssCustomProperty,\n    convertToRGB,\n    formatTimestamp,\n    formatPDFDate,\n    parseQueryString,\n    debounce,\n    once,\n    convertKonvaRectToPdfRect,\n    stringToPDFHexString,\n    getTimestampString,\n    hashArrayOfObjects,\n    isSameColor,\n    getPDFDateTimestamp\n}\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"include\": [\"src\", \"typings.d.ts\"],\n  \"compilerOptions\": {\n    \"resolveJsonModule\": true,\n    \"lib\": [\"DOM\", \"ESNext\"],\n    \"target\": \"ES5\",\n    \"jsx\": \"preserve\",\n    \"esModuleInterop\": true,\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": true\n  },\n}"
  },
  {
    "path": "webpack.config.js",
    "content": "const path = require('path')\nconst ImageMinimizerPlugin = require('image-minimizer-webpack-plugin')\nconst { CleanWebpackPlugin } = require('clean-webpack-plugin')\nconst environment = require('./configuration/environment')\n\nmodule.exports = {\n    entry: {\n        'pdfjs-annotation-extension': path.resolve(environment.paths.source, 'index.tsx')\n    },\n    output: {\n        filename: '[name].js',\n        path: environment.paths.output,\n        library: {\n            name: 'PdfjsAnnotationExtension',\n            type: 'umd'\n        },\n        clean: true\n    },\n    resolve: {\n        extensions: ['.js', '.jsx', '.ts', '.tsx']\n    },\n    module: {\n        rules: [\n            {\n                test: /\\.otf$/i,\n                resourceQuery: /arraybuffer/,\n                type: 'asset/source' // 直接作为原始内容导入\n            },\n            {\n                test: /\\.((c|sa|sc)ss)$/i,\n                use: ['style-loader', 'css-loader', 'postcss-loader', 'sass-loader']\n            },\n            {\n                test: /\\.(j|t)sx?$/,\n                use: ['babel-loader'],\n                exclude: {\n                    and: [/node_modules/],\n                    not: [/unfetch/, /d3-array|d3-scale/, /@hapi[\\\\/]joi-date/]\n                }\n            },\n            {\n                test: /\\.(png|jpeg|jpg|gif|svg)$/i,\n                type: 'asset',\n                generator: {\n                    filename: 'images/[name].[hash:6][ext]'\n                }\n            },\n            {\n                test: /\\.(eot|ttf|woff|woff2)$/,\n                type: 'asset',\n                parser: {\n                    dataUrlCondition: {\n                        maxSize: 8192\n                    }\n                },\n                generator: {\n                    filename: 'font/[name].[hash:6][ext]'\n                }\n            }\n        ]\n    },\n    optimization: {\n        minimizer: [\n            '...',\n            new ImageMinimizerPlugin({\n                minimizer: {\n                    implementation: ImageMinimizerPlugin.imageminMinify,\n                    options: {\n                        plugins: [\n                            [\n                                'svgo',\n                                {\n                                    plugins: [{ name: 'removeViewBox', active: false }]\n                                }\n                            ]\n                        ]\n                    }\n                }\n            })\n        ]\n    },\n    cache: {\n        type: 'filesystem'\n    },\n    plugins: [\n        new CleanWebpackPlugin({\n            verbose: true\n        })\n    ],\n    target: 'web'\n}\n"
  }
]